projects/guix·blob next-master · refs

42052 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-2025 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 (add-before 'build 'parallelize-build
11037 (lambda _
11038 (setenv "OMP_NUM_THREAD"
11039 (number->string (parallel-job-count)))
11040 (setenv "NPY_NUM_BUILD_JOBS"
11041 (number->string (parallel-job-count)))))
11042 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
11043 ;; when the gfortran header is used. Remove gfortran from
11044 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
11045 ;; <https://issues.guix.gnu.org/73439#45>.
11046 (add-after 'set-paths 'hide-gfortran
11047 (lambda* (#:key inputs #:allow-other-keys)
11048 (let ((gfortran (assoc-ref inputs "gfortran")))
11049 (setenv "CPLUS_INCLUDE_PATH"
11050 (string-join
11051 (delete (string-append gfortran "/include/c++")
11052 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
11053 ":")))))
11054 (add-before 'build 'configure-blas
11055 (lambda* (#:key inputs #:allow-other-keys)
11056 (call-with-output-file "site.cfg"
11057 (lambda (port)
11058 (format port
11059 "[openblas]
11060libraries = openblas
11061library_dirs = ~a/lib
11062include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
11063 (replace 'check
11064 (lambda* (#:key tests? test-flags #:allow-other-keys)
11065 (when tests?
11066 (with-directory-excursion #$output
11067 (apply invoke "pytest" test-flags))))))))
11068 (native-inputs
11069 (list gfortran
11070 meson-python
11071 ninja
11072 pkg-config
11073 python-hypothesis
11074 python-mypy
11075 python-pytest
11076 python-pytest-xdist
11077 python-setuptools
11078 python-setuptools
11079 python-typing-extensions
11080 python-wheel))
11081 (home-page "https://numpy.org")
11082 (synopsis "Fundamental package for scientific computing with Python")
11083 (description "NumPy is the fundamental package for scientific computing
11084with Python. It contains among other things: a powerful N-dimensional array
11085object, sophisticated (broadcasting) functions, tools for integrating C/C++
11086and Fortran code, useful linear algebra, Fourier transform, and random number
11087capabilities.")
11088 (properties
11089 '((upstream-name . "numpy")))
11090 (license license:bsd-3)))
11091
11092(define-public python-numpy-1
11093 (package
11094 (inherit python-numpy)
11095 (name "python-numpy")
11096 ;; XXX: Starting from v1.26.0 the project includes a vendored-meson which
11097 ;; is needed for SIMD and BLAS/LAPACK features that are not yet available
11098 ;; in upstream Meson.
11099 ;;
11100 ;; See:
11101 ;; - URL <https://raw.githubusercontent.com/numpy/numpy>
11102 ;; - commit :: 2f3549c9d7c5048621568e431c86bc7530742723
11103 ;; - file <doc/source/building/understanding_meson.rst>
11104 (version "1.26.4") ;; This is the last planned release in the 1.26.x series.
11105 (source
11106 (origin
11107 (method url-fetch)
11108 (uri (string-append
11109 "https://github.com/numpy/numpy/releases/download/v"
11110 version "/numpy-" version ".tar.gz"))
11111 (sha256
11112 (base32
11113 "0410j6jfz1yzm5s0v0yrc1j0q6ih4322357and7arr0jxnlsn0ia"))
11114 (patches (search-patches "python-numpy-gcc-14.patch"))))
11115 (arguments
11116 (list
11117 #:modules '((guix build utils)
11118 (guix build pyproject-build-system)
11119 (ice-9 format))
11120 #:phases
11121 #~(modify-phases %standard-phases
11122 ;; XXX: It fails with an issue "'fenv_t' has not been declared..."
11123 ;; when the gfortran header is used. Remove gfortran from
11124 ;; CPLUS_INCLUDE_PATH as a workaround. Taken from
11125 ;; <https://issues.guix.gnu.org/73439#45>.
11126 (add-after 'set-paths 'hide-gfortran
11127 (lambda* (#:key inputs #:allow-other-keys)
11128 (let ((gfortran (assoc-ref inputs "gfortran")))
11129 (setenv "CPLUS_INCLUDE_PATH"
11130 (string-join
11131 (delete (string-append gfortran "/include/c++")
11132 (string-split (getenv "CPLUS_INCLUDE_PATH") #\:))
11133 ":")))))
11134 (add-before 'build 'relax-gcc-14-strictness
11135 (lambda _
11136 (setenv "CFLAGS"
11137 "-g -O2 -Wno-error=implicit-function-declaration")))
11138 (add-before 'build 'parallelize-build
11139 (lambda _
11140 (setenv "NPY_NUM_BUILD_JOBS"
11141 (number->string (parallel-job-count)))))
11142 (add-before 'build 'configure-blas
11143 (lambda* (#:key inputs #:allow-other-keys)
11144 (call-with-output-file "site.cfg"
11145 (lambda (port)
11146 (format port
11147 "\
11148[openblas]
11149libraries = openblas
11150library_dirs = ~a/lib
11151include_dirs = ~:*~a/include~%"
11152 (dirname (dirname
11153 (search-input-file
11154 inputs "include/openblas_config.h"))))))))
11155 (add-before 'build 'fix-executable-paths
11156 (lambda* (#:key inputs #:allow-other-keys)
11157 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
11158 ;; instead of /bin/sh.
11159 (substitute* "numpy/distutils/exec_command.py"
11160 (("'/bin/sh'")
11161 (format #f "~s" (search-input-file inputs "bin/bash"))))
11162 ;; Don't try to call '/bin/true' specifically.
11163 (substitute* "numpy/core/tests/test_cpu_features.py"
11164 (("/bin/true") (search-input-file inputs "bin/true")))))
11165 (replace 'check
11166 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
11167 (when tests?
11168 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
11169 "-j" (number->string (parallel-job-count))
11170 ;; Contrary to scipy, the runtests.py script of numpy
11171 ;; does *not* automatically provide -n when -j is used
11172 ;; (see: https://github.com/numpy/numpy/issues/21359).
11173 "--" "-n" (number->string (parallel-job-count))
11174 ;; Disable Pytest Warnings, they are resolved in the
11175 ;; latest 1.x.x: pytest.PytestRemovedIn9Warning: Marks
11176 ;; applied to fixtures have no effect,
11177 ;; DeprecationWarning.
11178 "-p" "no:warnings"
11179 "-k" (string-append
11180 ;; These tests may fail on 32-bit systems (see:
11181 ;; https://github.com/numpy/numpy/issues/18387).
11182 "not test_float_remainder_overflow "
11183 "and not test_pareto "
11184 ;; The 'test_rint_big_int' test fails on older
11185 ;; x86_64 CPUs such as the Core 2 Duo (see:
11186 ;; https://github.com/numpy/numpy/issues/22170).
11187 "and not test_rint_big_int "
11188 ;; They fail to detect compiler.
11189 "and not test_compile1 "
11190 "and not test_compile2 "
11191 ;; Due to disabled warnings
11192 "and not test_getattr_warning "
11193 "and not test_integer_signs "
11194 "and not test_implicit_cast_float_to_int_fails "
11195 "and not test_integer_signs "
11196 ;; The huge_array test is too large for 32-bit (see:
11197 ;; https://bugs.gentoo.org/843599 and
11198 ;; https://bugs.gentoo.org/846548).
11199 ;; TestKind.test_all is a Fortran type failure
11200 ;; that may be toolchain or environment related.
11201 #$@(if (or (target-x86?) (target-arm32?))
11202 `(" and not test_identityless_reduction_huge_array"
11203 " and not (TestKind and test_all)")
11204 '())
11205 ;; This test fails with a Fortran failure (16
11206 ;; expected but got -1), due to the fact that it
11207 ;; requires a 64-bit system.
11208 #$@(if (or (target-x86-32?) (target-arm32?))
11209 `(" and not test_int")
11210 '())
11211 ;; These tests fail when building from aarch64-linux.
11212 #$@(if (target-arm32?)
11213 `(" and not test_features"
11214 " and not test_unary_spurious_fpexception")
11215 '())
11216 ;; These tests seem to fail on machines without
11217 ;; an FPU is still under investigation upstream.
11218 ;; https://github.com/numpy/numpy/issues/20635
11219 #$@(if (target-riscv64?)
11220 `(" and not test_fp_noncontiguous")
11221 '())
11222 ;; They also fail with gcc-14
11223 " and not test_float"
11224 " and not test_fpclass"
11225
11226 ;; These tests fail with gcc-14
11227 " and not test_context_locality"
11228 " and not test_cosh"
11229 " and not test_default_policy_singleton"
11230 " and not test_exp_exceptions"
11231 " and not test_half_fpe"
11232 " and not test_owner_is_base"
11233 " and not test_policy_propagation"
11234 " and not test_set_policy"
11235 " and not test_sinh"
11236 " and not test_square_values"
11237 " and not test_sum"
11238 " and not test_switch_owner"
11239 " and not test_thread_locality"))))))))
11240 (native-inputs
11241 (list meson-python
11242 pkg-config
11243 python-cython
11244 python-hypothesis
11245 python-mypy
11246 python-pytest
11247 python-pytest-xdist
11248 python-setuptools-67 ;see: <https://github.com/numpy/numpy/issues/27531>
11249 python-typing-extensions
11250 python-wheel-0.40
11251 ;; XXX: Avoid to: 'fenv_t' has not been declared in '::' 58 | using ::fenv_t;
11252 ;; See <https://github.com/numpy/numpy/issues/21075#issuecomment-1047976197>,
11253 ;; <https://github.com/numpy/numpy/issues/24318>.
11254 gcc ;fevn.h c[++] include must precede fortran's
11255 gfortran))
11256 (inputs (list bash openblas))))
11257
11258(define-deprecated/public-alias python-numpy-2 python-numpy)
11259
11260(define-public python-numpysane
11261 (package
11262 (name "python-numpysane")
11263 (version "0.42")
11264 (source
11265 (origin
11266 (method git-fetch)
11267 (uri (git-reference
11268 (url "https://github.com/dkogan/numpysane.git")
11269 (commit (string-append "v" version))))
11270 (file-name (git-file-name name version))
11271 (sha256
11272 (base32 "0s38fm88bmq08j5qxfka1wyjs2r9s9arzd1c3c4ixa8k3pisnihr"))))
11273 (build-system pyproject-build-system)
11274 (arguments
11275 (list
11276 #:phases
11277 #~(modify-phases %standard-phases
11278 (add-after 'unpack 'patch
11279 (lambda* (#:key inputs outputs #:allow-other-keys)
11280 (let* ((numpy (assoc-ref inputs "python-numpy"))
11281 (site (site-packages inputs `(("out" . ,numpy)))))
11282 (substitute* "Makefile.common.header"
11283 ;; numpy 2.0 has this--but we don't use numpy 2.0.
11284 (("pkg-config --cflags-only-I numpy")
11285 (format #f "echo -I~a/numpy/core/include" site))))))
11286 (replace 'check
11287 (lambda _
11288 (setenv "CC"
11289 #$(cc-for-target))
11290 (invoke "make" "check"))))))
11291 (propagated-inputs (list python-numpy-1))
11292 (native-inputs (list perl pkg-config python-setuptools))
11293 (home-page "https://github.com/dkogan/numpysane")
11294 (synopsis "More-reasonable core functionality for numpy")
11295 (description
11296 "This package provides more-reasonable core functionality for numpy.
11297
11298A lot of numpysane functionality is inspired by PDL (Perl Data Language).
11299
11300numpysane has:
11301@itemize
11302@item easier broadcasting
11303@item nicer array manipulation
11304@item array concatenation
11305@item manipulation of dimensions
11306@item broadcast-aware inner product
11307@item broadcast-aware outer product
11308@item broadcast-aware 2-norm
11309@item broadcast-aware matrix multiplication
11310@end itemize
11311")
11312 (license license:lgpl2.0+)))
11313
11314(define-public python-numpy-documentation
11315 (package
11316 (inherit python-numpy)
11317 (name "python-numpy-documentation")
11318 (arguments
11319 (list
11320 #:tests? #f ;we're only generating the documentation
11321 #:phases
11322 #~(modify-phases %standard-phases
11323 (add-after 'unpack 'avoid-external-deps
11324 (lambda _
11325 ;; XXX: Avoid theme-switcher to avoid sphinx error
11326 ;; TemplateNotFound('theme-switcher.html')
11327 ;; XXX: Avoid version-switcher because it depends on the value
11328 ;; of external https://numpy.org/doc/_static/versions.json
11329 (substitute* "doc/source/conf.py"
11330 (("\
11331\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
11332 "\"navbar_end\": ["))))
11333 (add-before 'build 'add-gnu-freefont-to-texmf
11334 (lambda _
11335 ;; XXX: The Sphinx-generated tex output specifies the GNU
11336 ;; FreeFont font to be searched via its extension, which uses
11337 ;; kpathsea instead of fontconfig and fail (see:
11338 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
11339 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
11340 ;; GUIX_TEXMF.
11341 (mkdir-p "texmf-dist/fonts/opentype/public")
11342 (symlink (string-append
11343 #$(this-package-native-input "font-gnu-freefont")
11344 "/share/fonts/opentype")
11345 (string-append
11346 (getcwd) "/"
11347 "texmf-dist/fonts/opentype/public/gnu-freefont"))
11348 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
11349 (getcwd) "/texmf-dist"))))
11350 (replace 'build
11351 (lambda _
11352 (chdir "doc")
11353 (let ((sphinxopts (string-append
11354 "SPHINXOPTS=-j"
11355 (number->string (parallel-job-count)))))
11356 ;; Do not treat warnings as errors.
11357 (substitute* "Makefile"
11358 ((" -WT ") " -T "))
11359 (setenv "HOME" "/tmp")
11360 ;; Build the PDF documentation.
11361 (invoke "make" "latex-build" sphinxopts)
11362 ;; FIXME: PDF build fails
11363 ;; (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
11364 ;; Build the HTML documentation
11365 (invoke "make" "html" sphinxopts)
11366 ;; Build the Info documentation. The issues worked around
11367 ;; below can be tracked at
11368 ;; https://github.com/numpy/numpy/issues/12278.
11369 (substitute* "source/conf.py"
11370 ;; The root document should be "index", not "contents".
11371 (("\"contents\"") "'index'")
11372 ;; Disable Sphinx extensions that produce broken Texinfo.
11373 ((".*'numpydoc'.*") "")
11374 ((".*'sphinx.ext.autodoc'.*") "")
11375 ((".*'sphinx.ext.autosummary'.*") ""))
11376 (invoke "make" "info" sphinxopts))))
11377 (replace 'install
11378 (lambda _
11379 (let* ((data (string-append #$output "/share"))
11380 (doc (string-append data "/doc/numpy"))
11381 (html (string-append doc "/html"))
11382 (info (string-append data "/info")))
11383 ;; Install the HTML documentation.
11384 (mkdir-p html)
11385 (copy-recursively "build/html" html)
11386 ;; Install the PDF reference and user manuals.
11387 ;; FIXME:
11388 ;; (install-file "build/latex/numpy-ref.pdf" doc)
11389 ;; (install-file "build/latex/numpy-user.pdf" doc)
11390 ;; Install the info manual.
11391 (install-file "build/texinfo/numpy.info" info)
11392 (symlink (string-append html "/_images")
11393 (string-append info "/numpy-figures"))))))))
11394 (native-inputs
11395 (list font-gnu-freefont
11396 perl
11397 python-breathe
11398 python-ipython
11399 python-matplotlib
11400 python-numpy
11401 python-numpydoc
11402 python-pandas
11403 python-pydata-sphinx-theme
11404 python-scipy ;used by matplotlib
11405 python-sphinx
11406 python-sphinx-design
11407 texinfo
11408 (texlive-local-tree
11409 (list texlive-cbfonts
11410 texlive-cm-super
11411 texlive-cmap
11412 texlive-expdlist
11413 texlive-fandol
11414 texlive-greek-fontenc
11415 texlive-latexmk
11416 texlive-polyglossia
11417 texlive-xetex
11418 texlive-xindy))))
11419 (inputs '())
11420 (propagated-inputs '())
11421 (synopsis "Documentation for the @code{python-numpy} package")
11422 (description "This package provides the complete NumPy documentation in
11423the Texinfo, and HTML formats.")))
11424
11425(define-public python-numpy-stl
11426 (package
11427 (name "python-numpy-stl")
11428 (version "3.2.0")
11429 (source
11430 (origin
11431 (method url-fetch)
11432 (uri (pypi-uri "numpy_stl" version))
11433 (sha256
11434 (base32 "0kgxhghl9j5caydb2a9g2n44zvffd94gb6abday0manxkkvw682s"))))
11435 (build-system pyproject-build-system)
11436 (native-inputs
11437 (list python-cython
11438 python-pytest
11439 python-setuptools
11440 python-wheel))
11441 (propagated-inputs
11442 (list python-numpy
11443 python-utils))
11444 (home-page "https://github.com/WoLpH/numpy-stl/")
11445 (synopsis "Read, write and modify binary/ASCII STL files library")
11446 (description
11447 "Library to make reading, writing and modifying both binary and ascii STL
11448files, file format native to the stereolithography CAD software created by 3D
11449Systems, easy.")
11450 (license license:bsd-3)))
11451
11452(define-public python-npx
11453 (package
11454 (name "python-npx")
11455 (version "0.1.6")
11456 (source
11457 (origin
11458 (method git-fetch) ; no source archive in PyPI
11459 (uri (git-reference
11460 (url "https://github.com/sigma-py/npx")
11461 (commit (string-append "v" version))))
11462 (file-name (git-file-name name version))
11463 (sha256
11464 (base32 "0a3rb3ydl13m1r48kdvnbi31566jxm10p36argkz5kjr2ilkrx8v"))))
11465 (build-system pyproject-build-system)
11466 (native-inputs
11467 (list python-networkx
11468 python-pytest
11469 python-setuptools
11470 python-wheel))
11471 (propagated-inputs
11472 (list python-numpy))
11473 (home-page "https://github.com/nschloe/npx")
11474 (synopsis "Extensions for NumPy")
11475 (description "NumPy is a large library used everywhere in scientific
11476computing. That's why breaking backwards-compatibility comes at a
11477significant cost and is almost always avoided, even if the API of some
11478methods is arguably lacking. This package provides drop-in wrappers
11479\"fixing\" those.")
11480 (license license:bsd-3)))
11481
11482(define-public python-munch
11483 (package
11484 (name "python-munch")
11485 (version "4.0.0")
11486 (source
11487 (origin
11488 (method url-fetch)
11489 (uri (pypi-uri "munch" version))
11490 (sha256
11491 (base32
11492 "0d928bdzm0d9s9f058xa72pywps2zjdgvhrp9rm22qqj8r8v2b2l"))))
11493 (build-system pyproject-build-system)
11494 (native-inputs
11495 (list python-astroid
11496 python-pytest
11497 python-setuptools
11498 python-wheel))
11499 (home-page "https://github.com/Infinidat/munch")
11500 (synopsis "Dot-accessible dictionary")
11501 (description "Munch is a dot-accessible dictionary similar to JavaScript
11502objects.")
11503 (license license:expat)))
11504
11505(define-public python-colormath2
11506 (package
11507 (name "python-colormath2")
11508 (version "3.0.3")
11509 (source
11510 (origin
11511 (method git-fetch)
11512 (uri (git-reference
11513 (url "https://github.com/bkmgit/python-colormath2")
11514 (commit version)))
11515 (file-name (git-file-name name version))
11516 (sha256
11517 (base32 "0xxhmmx1mzjggapjmpz8v166lj86xrkq7kak83akcirnq0pz9ihv"))))
11518 (build-system pyproject-build-system)
11519 (propagated-inputs (list python-networkx python-numpy))
11520 (native-inputs (list python-nose2 python-setuptools))
11521 (home-page "https://github.com/bkmgit/python-colormath2")
11522 (synopsis "Color math and conversion library")
11523 (description
11524 "This is a Python library for color math and conversions.")
11525 (license license:bsd-3)))
11526
11527(define-public python-spectra
11528 (package
11529 (name "python-spectra")
11530 (version "0.1.0")
11531 (source
11532 (origin
11533 (method url-fetch)
11534 (uri (pypi-uri "spectra" version))
11535 (sha256
11536 (base32 "0gva48a1rn5yxj6dgy76dnndqaf09k5q2l9r41h2a66b84rf6c3a"))))
11537 (build-system pyproject-build-system)
11538 (propagated-inputs
11539 (list python-colormath2))
11540 (native-inputs
11541 (list python-pytest python-setuptools python-wheel))
11542 (home-page "https://github.com/jsvine/spectra")
11543 (synopsis "Color scales and color conversion")
11544 (description
11545 "This package provides a Python library intended to make color math,
11546color scales, and color space conversion easy. It has support for:
11547
11548@enumerate
11549@item Color scales
11550@item Color ranges
11551@item Color blending
11552@item Brightening/darkening colors
11553@item Saturating/desaturating colors
11554@item Conversion to/from multiple color spaces.
11555@end enumerate\n")
11556 (license license:expat)))
11557
11558(define-public python-pyspnego
11559 (package
11560 (name "python-pyspnego")
11561 (version "0.8.0")
11562 (source (origin
11563 (method url-fetch)
11564 (uri (pypi-uri "pyspnego" version))
11565 (sha256
11566 (base32
11567 "1ps34laa0kvvp33az173hp5l0hnk8cr0bfqmlgw64ry5cv09qjg0"))))
11568 (build-system pyproject-build-system)
11569 (native-inputs
11570 (list python-pytest python-pytest-mock python-setuptools python-wheel))
11571 (propagated-inputs
11572 (list python-cryptography python-gssapi python-krb5 python-ruamel.yaml))
11573 (home-page "https://github.com/jborean93/pyspnego")
11574 (synopsis "Python SPNEGO library")
11575 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
11576Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
11577parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
11578readable format.")
11579 (license license:expat)))
11580
11581(define-public python-pygit2-1.11
11582 (package
11583 (name "python-pygit2")
11584 (version "1.11.1")
11585 (source
11586 (origin
11587 (method url-fetch)
11588 (uri (pypi-uri "pygit2" version))
11589 (sha256
11590 (base32 "1v34xdvh6i5cn5srwicvp0i2kvv8fzsv0v9p72ng081nsczmhgvr"))))
11591 (build-system pyproject-build-system)
11592 (propagated-inputs (list python-cffi libgit2-1.5))
11593 (native-inputs (list python-pytest python-setuptools python-wheel))
11594 (home-page "https://github.com/libgit2/pygit2")
11595 (synopsis "Python bindings for libgit2")
11596 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
11597 ;; GPL2.0 only, with linking exception.
11598 (license license:gpl2)))
11599
11600(define-public python-pygit2
11601 (package/inherit python-pygit2-1.11
11602 (name "python-pygit2")
11603 (version "1.18.2")
11604 (source
11605 (origin
11606 (method url-fetch)
11607 (uri (pypi-uri "pygit2" version))
11608 (sha256
11609 (base32 "0m8g8s72c0xwwayykpj1hf8c1wldhmg1sj8kgxdp2rf9c837xa7c"))))
11610 (propagated-inputs (list python-cffi libgit2))))
11611
11612(define-public python-patiencediff
11613 (package
11614 (name "python-patiencediff")
11615 (version "0.2.15")
11616 (source
11617 (origin
11618 (method url-fetch)
11619 (uri (pypi-uri "patiencediff" version))
11620 (sha256
11621 (base32
11622 "012jjgkkpk563l1mgj2ax4z32h0l558adhr2qa3chfrfsgpi22fh"))))
11623 (build-system pyproject-build-system)
11624 (arguments
11625 (list
11626 #:phases #~(modify-phases %standard-phases
11627 ;; Fails because bin/patiencediff expects two files to diff
11628 (delete 'sanity-check))))
11629 (native-inputs (list python-pytest python-setuptools python-wheel))
11630 (home-page "https://www.breezy-vcs.org/")
11631 (synopsis "Python implementation of the patiencediff algorithm")
11632 (description
11633 "This package contains a Python implementation of the @code{patiencediff}
11634algorithm. Patiencediff provides a good balance of performance, nice output for
11635humans, and implementation simplicity.")
11636 (license license:gpl2+)))
11637
11638(define-public python-merge3
11639 (package
11640 (name "python-merge3")
11641 (version "0.0.15")
11642 (source
11643 (origin
11644 (method git-fetch)
11645 (uri (git-reference
11646 (url "https://github.com/breezy-team/merge3")
11647 (commit (string-append "v" version))))
11648 (file-name (git-file-name name version))
11649 (sha256
11650 (base32 "0p52fdzra86d03p5gwz7wmb2pgzkv0frgdhhg9wfld8qr0611wp4"))))
11651 (build-system pyproject-build-system)
11652 (arguments (list #:test-backend #~'unittest))
11653 (native-inputs (list python-setuptools))
11654 (home-page "https://github.com/breezy-team/merge3")
11655 (synopsis "Python implementation of 3-way merge")
11656 (description "This Python library implements 3-way merge for text.")
11657 (license license:gpl2+)))
11658
11659(define-public python-fancycompleter
11660 (package
11661 (name "python-fancycompleter")
11662 (version "0.9.1")
11663 (source
11664 (origin
11665 (method git-fetch)
11666 (uri (git-reference
11667 (url "https://github.com/pdbpp/fancycompleter")
11668 (commit version)))
11669 (file-name (git-file-name name version))
11670 (sha256
11671 (base32 "04gbnpm2m86wgigaqf03mphacawg203gdgpljx5xzax3vhm8qnxw"))))
11672 (build-system pyproject-build-system)
11673 (arguments
11674 (list
11675 #:phases
11676 #~(modify-phases %standard-phases
11677 (add-after 'unpack 'fix-setup.py
11678 (lambda _
11679 (substitute* "setup.py"
11680 ((".*setupmeta.*")
11681 "")
11682 (("versioning=.*")
11683 (string-append "version='" #$version "',"))
11684 ((".*pyrepl.*") ; broken on Python 3
11685 "")))))))
11686 (native-inputs (list python-pytest python-setuptools))
11687 (home-page "https://github.com/pdbpp/fancycompleter")
11688 (synopsis "TAB completion library for Python")
11689 (description
11690 "@code{fancycompleter} is a module that adds TAB completion to the
11691interactive prompt. It is an extension of the @code{rlcompleter} module from
11692the standard Python library.")
11693 (license license:bsd-3)))
11694
11695(define-public python-ipdb
11696 (package
11697 (name "python-ipdb")
11698 (version "0.13.13")
11699 (source
11700 (origin
11701 (method git-fetch)
11702 (uri (git-reference
11703 (url "https://github.com/gotcha/ipdb")
11704 (commit version)))
11705 (file-name (git-file-name name version))
11706 (sha256
11707 (base32 "151cw13kgfgv2is7kx10zzwp17kkvzz6658srdhgnzm6d5kjjrxk"))))
11708 (build-system pyproject-build-system)
11709 (arguments (list #:test-backend #~'unittest))
11710 (native-inputs (list python-setuptools))
11711 (propagated-inputs (list python-ipython python-toml python-decorator))
11712 (home-page "https://github.com/gotcha/ipdb")
11713 (synopsis "IPython-enhanced Python debugger (pdb)")
11714 (description
11715 "@code{ipdb} exports functions to access the IPython debugger, which
11716features tab completion, syntax highlighting, better tracebacks and better
11717introspection than Python's standard @command{pdb} debugger, with which it
11718shares the same interface.")
11719 (license license:bsd-3)))
11720
11721(define-public python-ipfsspec
11722 (package
11723 (name "python-ipfsspec")
11724 (version "0.4.0")
11725 (source
11726 (origin
11727 (method url-fetch)
11728 (uri (pypi-uri "ipfsspec" version))
11729 (sha256
11730 (base32 "1y4ad9schc76j2lynm7vpwi4q4jzi9vv843zfpisbp8zqgm0rr7l"))))
11731 (build-system pyproject-build-system)
11732 (arguments
11733 (list
11734 #:test-flags
11735 '(list "-m not local_gw"
11736 ;; Require local gateway
11737 "--ignore=test/test_gateway.py"
11738 ;; Require internet
11739 "--ignore=test/test_async.py"
11740 "--ignore=test/test_ipfs.py")))
11741 (propagated-inputs (list python-aiohttp python-fsspec python-requests))
11742 (native-inputs
11743 (list python-pytest
11744 python-pytest-asyncio
11745 python-setuptools
11746 python-wheel))
11747 (home-page "https://github.com/fsspec/ipfsspec")
11748 (synopsis "Read-only implementation of fsspec for IPFS")
11749 (description "This package provides a read-only implementation of
11750@code{fsspec} for IPFS.")
11751 (license license:expat)))
11752
11753(define-public python-pdftotext
11754 (package
11755 (name "python-pdftotext")
11756 (version "3.0.0")
11757 (source
11758 (origin
11759 (method url-fetch)
11760 (uri (pypi-uri "pdftotext" version))
11761 (sha256
11762 (base32 "1ahs7c0qh3gyafxwrg9p4gcqwcrnc7y57adzm0ama52f2lcjnrf3"))))
11763 (build-system pyproject-build-system)
11764 (native-inputs (list python-pytest python-setuptools python-wheel))
11765 (inputs (list poppler))
11766 (home-page "https://github.com/jalan/pdftotext")
11767 (synopsis "Simple PDF text extraction")
11768 (description "Pdftotext is a Python library of PDF text extraction.")
11769 (license license:expat)))
11770
11771(define-public python-pluginbase
11772 (package
11773 (name "python-pluginbase")
11774 (version "1.0.1")
11775 (source
11776 (origin
11777 (method git-fetch)
11778 (uri (git-reference
11779 (url "https://github.com/mitsuhiko/pluginbase")
11780 (commit (string-append "v" version))))
11781 (file-name (git-file-name name version))
11782 (sha256
11783 (base32 "16c089ka8z4wb4mnx6a3dbvibibgzvawm8zgkp7ppadsgb3lc357"))))
11784 (build-system pyproject-build-system)
11785 (arguments
11786 (list
11787 #:phases
11788 #~(modify-phases %standard-phases
11789 (replace 'check
11790 (lambda* (#:key tests? #:allow-other-keys)
11791 (when tests?
11792 (invoke "make" "test")))))))
11793 (native-inputs (list python-pytest python-setuptools))
11794 (home-page "https://github.com/mitsuhiko/pluginbase")
11795 (synopsis "Simple but flexible plugin system for Python")
11796 (description
11797 "PluginBase is a library useful in the development of flexible plugin
11798systems in Python.")
11799 (license license:bsd-3)))
11800
11801(define-public python-node-semver
11802 (package
11803 (name "python-node-semver")
11804 (version "0.8.1")
11805 (source
11806 (origin
11807 (method git-fetch)
11808 (uri (git-reference
11809 (url "https://github.com/podhmo/python-node-semver")
11810 (commit version)))
11811 (file-name (git-file-name name version))
11812 (sha256
11813 (base32 "0az6v4y8awl3dhgrfyikgz2vc8p1k15qwsq6yb8azp54m1fbh5hs"))))
11814 (build-system pyproject-build-system)
11815 (native-inputs (list python-pytest python-setuptools))
11816 (home-page "https://github.com/podhmo/python-node-semver")
11817 (synopsis "Python port of node-semver")
11818 (description
11819 "This module provides a Python version of node-semver, a semantic version
11820parser for Node.js.")
11821 (license license:expat)))
11822
11823(define-public python-norns
11824 (package
11825 (name "python-norns")
11826 (version "0.1.6")
11827 (source
11828 (origin
11829 (method git-fetch)
11830 (uri (git-reference
11831 (url "https://github.com/simonvh/norns")
11832 (commit version)))
11833 (file-name (git-file-name name version))
11834 (sha256
11835 (base32 "0x488xd2dp1clnzpb3gikx416g0fh1bjs25bwi0jmsvqmd80hmb0"))
11836 (patches
11837 (search-patches "python-norns-nose.patch"))))
11838 (build-system pyproject-build-system)
11839 (propagated-inputs (list python-appdirs python-pynose python-pyyaml))
11840 (native-inputs (list python-setuptools))
11841 (home-page "https://github.com/simonvh/norns")
11842 (synopsis "Simple YAML-based config module")
11843 (description "This package provides a simple YAML-based config module.")
11844 (license license:expat)))
11845
11846(define-public python-patch-ng
11847 (package
11848 (name "python-patch-ng")
11849 (version "1.18.1")
11850 (source
11851 (origin
11852 (method git-fetch)
11853 (uri (git-reference
11854 (url "https://github.com/conan-io/python-patch-ng")
11855 (commit version)))
11856 (file-name (git-file-name name version))
11857 (sha256
11858 (base32 "1kr3h0bkcr02zyfsmwmxfv5b4b9vf3bhsvrlwp6cwrfy3q3qnyq8"))))
11859 (build-system pyproject-build-system)
11860 (arguments
11861 (list
11862 #:test-backend #~'custom
11863 #:test-flags #~(list "tests/run_tests.py" "-v")))
11864 (native-inputs (list python-pytest python-setuptools))
11865 (home-page "https://github.com/conan-io/python-patch-ng")
11866 (synopsis "Python library to parse and apply unified diffs")
11867 (description
11868 "Patch NG (New Generation) is a command and Python library to parse and
11869apply unified diffs. It has features such as:
11870@itemize
11871@item automatic correction of common patch formatting corruption
11872@item patch format detection (SVN, Hg, Git)
11873@item nice diffstat histogram.
11874@end itemize")
11875 (license license:expat)))
11876
11877(define-public python-numpydoc
11878 (package
11879 (name "python-numpydoc")
11880 (version "1.5.0")
11881 (source
11882 (origin
11883 (method url-fetch)
11884 (uri (pypi-uri "numpydoc" version))
11885 (sha256
11886 (base32
11887 "0k2z3g4s3w39h1nd293542hl9qv55j29gcr3bkia0rr3ldsppnxh"))))
11888 (build-system pyproject-build-system)
11889 (arguments
11890 (list #:test-flags
11891 '(list "numpydoc/tests"
11892 ;; TODO: unclear why these fail.
11893 "-k" "not test_MyClass and not test_my_function")))
11894 (propagated-inputs (list python-jinja2 python-sphinx))
11895 (native-inputs
11896 (list python-matplotlib
11897 python-pytest
11898 python-pytest-cov
11899 python-setuptools
11900 python-wheel))
11901 (home-page "https://pypi.org/project/numpydoc/")
11902 (synopsis "Numpy's Sphinx extensions")
11903 (description "Sphinx extension to support docstrings in Numpy format.")
11904 (license license:bsd-2)))
11905
11906(define-public python-numexpr
11907 (package
11908 (name "python-numexpr")
11909 (version "2.14.1")
11910 (source
11911 (origin
11912 (method url-fetch)
11913 (uri (pypi-uri "numexpr" version))
11914 (sha256
11915 (base32 "12xla8qkza3xjrqb2yc517z460mqnwi82m9i5v1sbdy7hq80pq2b"))))
11916 (build-system pyproject-build-system)
11917 (arguments
11918 (list
11919 ;; tests: 6039 passed, 8 warnings
11920 #:phases
11921 #~(modify-phases %standard-phases
11922 (replace 'check
11923 (lambda* (#:key tests? test-flags #:allow-other-keys)
11924 (when tests?
11925 (with-directory-excursion #$output
11926 (apply invoke "pytest" "-vv" test-flags))))))))
11927 (native-inputs
11928 (list python-pytest
11929 python-setuptools))
11930 (propagated-inputs
11931 (list python-numpy))
11932 (home-page "https://github.com/pydata/numexpr")
11933 (synopsis "Fast numerical expression evaluator for NumPy")
11934 (description
11935 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
11936expressions that operate on arrays are accelerated and use less memory than
11937doing the same calculation in Python. In addition, its multi-threaded
11938capabilities can make use of all your cores, which may accelerate
11939computations, most specially if they are not memory-bounded (e.g. those using
11940transcendental functions).")
11941 (license license:expat)))
11942
11943(define-public python-cycler
11944 (package
11945 (name "python-cycler")
11946 (version "0.12.1")
11947 (source
11948 (origin
11949 (method git-fetch) ;no tests in PyPI archive
11950 (uri (git-reference
11951 (url "https://github.com/matplotlib/cycler")
11952 (commit (string-append "v" version))))
11953 (file-name (git-file-name name version))
11954 (sha256
11955 (base32 "061b8vxd2kp016pnwik9jg6zqng8khzmg0p298wrz65z50yh1gg4"))))
11956 (build-system pyproject-build-system)
11957 (native-inputs
11958 (list python-pytest
11959 python-setuptools))
11960 (home-page "https://matplotlib.org/cycler/")
11961 (synopsis "Composable keyword argument iterator")
11962 (description
11963 "When using @code{matplotlib} and plotting more than one line, it is
11964common to want to be able to want to be able to cycle over one or more artist
11965styles; but the plotting logic can quickly become involved.
11966To address this and enable easy cycling over arbitrary @code{kwargs}, the
11967@code{Cycler} class was developed.")
11968 (license license:bsd-3)))
11969
11970(define-public python-colorspacious
11971 (package
11972 (name "python-colorspacious")
11973 (version "1.1.2")
11974 (source
11975 (origin
11976 (method git-fetch)
11977 (uri (git-reference
11978 (url "https://github.com/njsmith/colorspacious")
11979 (commit (string-append "v" version))))
11980 (file-name (git-file-name name version))
11981 (sha256
11982 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
11983 (build-system pyproject-build-system)
11984 (arguments (list #:tests? #f)) ; No tests.
11985 (propagated-inputs (list python-numpy))
11986 (native-inputs (list python-pytest python-setuptools))
11987 (home-page "https://github.com/njsmith/colorspacious")
11988 (synopsis "Python library for colorspace conversions")
11989 (description
11990 "@code{colorspacious} is a Python library that lets you convert between
11991colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
11992 (license license:expat)))
11993
11994(define-public python-propcache
11995 (package
11996 (name "python-propcache")
11997 (version "0.2.1")
11998 (source
11999 (origin
12000 (method url-fetch)
12001 (uri (pypi-uri "propcache" version))
12002 (sha256
12003 (base32 "0r4sq2j6s63wziw8fhnrx0lxlg8ch3z2i6a92ivm7jqridrcwxrz"))))
12004 (build-system pyproject-build-system)
12005 (arguments
12006 (list
12007 #:test-flags '(list "--ignore=tests/test_benchmarks.py")
12008 #:phases
12009 '(modify-phases %standard-phases
12010 (add-after 'unpack 'patch-build-system
12011 (lambda _
12012 ;; XXX: I don't know how to tell it to build the extensions in
12013 ;; place.
12014 (substitute* "packaging/pep517_backend/_backend.py"
12015 (("build_inplace=False") "build_inplace=True")))))))
12016 (native-inputs
12017 (list python-covdefaults
12018 python-cython
12019 python-expandvars
12020 python-pytest
12021 python-pytest-cov
12022 python-pytest-xdist
12023 python-setuptools
12024 python-tomli
12025 python-wheel))
12026 (home-page "https://github.com/aio-libs/propcache")
12027 (synopsis "Accelerated property cache")
12028 (description "The module provides a fast implementation of cached
12029properties for Python 3.9+.")
12030 (license license:asl2.0)))
12031
12032(define-public python-proto-matcher
12033 (package
12034 (name "python-proto-matcher")
12035 (version "0.0.3")
12036 (source
12037 (origin
12038 (method git-fetch)
12039 (uri (git-reference
12040 (url "https://github.com/dayfine/proto-matcher")
12041 (commit version)))
12042 (file-name (git-file-name name version))
12043 (sha256
12044 (base32 "1l0dqnicpk4gpfspdlng026sxnkgzy68x416aw7camwq0513mq5l"))))
12045 (build-system pyproject-build-system)
12046 (native-inputs (list python-pytest python-setuptools))
12047 (arguments (list #:tests? #f)) ; The test suite seems broken (missing data).
12048 (propagated-inputs (list python-protobuf python-pyhamcrest))
12049 (home-page "https://github.com/dayfine/proto-matcher")
12050 (synopsis "PyHamcrest test matchers for protocol buffers")
12051 (description
12052 "This package provides the following PyHamcrest test matchers, that
12053enable matching a protocol buffer message:
12054@table @code
12055@item equals_proto
12056Test the argument equals the given protobuf message.
12057@item approximately
12058Test the argument equals the given protobuf message, while comparing any float
12059field using approximation.
12060@item ignoring_field_paths
12061Test the argument equals the given protobuf message, while ignoring those
12062fields specified in the field paths.
12063@item ignoring_repeated_field_ordering
12064Test the argument equals the given protobuf message, ignoring the ordering of
12065any repeated field.
12066@item partially
12067Test the argument partially equals the given protobuf message, i.e. if a field
12068is in the argument but not in the expected message, it's ignored in the
12069comparison.
12070@end table")
12071 (license license:asl2.0)))
12072
12073(define-public python-matplotlib
12074 (package
12075 (name "python-matplotlib")
12076 (version "3.10.8")
12077 (source
12078 (origin
12079 (method git-fetch)
12080 (uri (git-reference
12081 (url "https://github.com/matplotlib/matplotlib")
12082 (commit (string-append "v" version))))
12083 (file-name (git-file-name name version))
12084 (sha256
12085 (base32 "1rlday52hcyrp7xfbdf4z8lzgnxkpfvjxnl9qmq0jvc3ph3n8k5i"))))
12086 (build-system pyproject-build-system)
12087 (arguments
12088 (list
12089 #:configure-flags
12090 ''(("setup-args" . #("-DrcParams-backend=TkAgg"
12091 "-Dsystem-freetype=true"
12092 "-Dsystem-qhull=true"))
12093 ("install-args" . "--tags=data,python-runtime,runtime,tests"))
12094 #:test-flags
12095 #~(list "-m" "not network"
12096 "-n" (number->string (parallel-job-count))
12097 ;; Run the installed tests, which is what we want since not
12098 ;; everything gets built in the source directory.
12099 "--pyargs" "matplotlib"
12100 "-k"
12101 (string-join
12102 (list
12103 ;; XXX: Disable all image comparison tests because we're using
12104 ;; a newer version of FreeType than matplotlib expects. This
12105 ;; leads to minor differences throughout the tests.
12106 "not image_comparison"
12107 "check_figures_equal"
12108 "png" ;disables many problematic image tests
12109 "test_figure_legend_outside"
12110 "test_ft2font_get_kerning"
12111 "test_normal_axes"
12112 "test_get_tightbbox_polar"
12113 ;; The invisible line ordering test fails due to a too short
12114 ;; timeout (see:
12115 ;; <https://github.com/matplotlib/matplotlib/issues/30809>).
12116 "test_invisible_Line_rendering"
12117 ;; The determinism check test is not deterministic (see:
12118 ;; <https://github.com/matplotlib/matplotlib/issues/30360>)
12119 "test_determinism_check")
12120 " and not "))
12121 #:phases
12122 #~(modify-phases %standard-phases
12123 (add-before 'build 'pretend-version
12124 ;; The version string is usually derived via setuptools-scm, but
12125 ;; without the git metadata available, the version string is set to
12126 ;; '0.0.0'.
12127 (lambda _
12128 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
12129 (add-after 'unpack 'patch-commands
12130 (lambda _
12131 (substitute* "lib/matplotlib/tests/test_animation.py"
12132 (("/bin/sh") (which "sh")))))
12133 (add-after 'unpack 'patch-dlopen
12134 (lambda* (#:key inputs #:allow-other-keys)
12135 (substitute* "src/_c_internal_utils.cpp"
12136 (("libX11.so.6")
12137 (search-input-file inputs "lib/libX11.so.6")))))
12138 (add-before 'build 'configure-environment
12139 (lambda* (#:key inputs #:allow-other-keys)
12140 ;; Fix rounding errors when using the x87 FPU.
12141 (when (string-prefix? "i686" #$(%current-system))
12142 (setenv "CFLAGS" "-ffloat-store"))))
12143 (add-before 'check 'chdir
12144 (lambda _
12145 ;; Step out of the source directory to avoid interference.
12146 (chdir "/tmp"))))))
12147 (propagated-inputs
12148 (list python-contourpy
12149 python-cycler
12150 python-dateutil
12151 python-fonttools-minimal
12152 python-importlib-resources
12153 python-kiwisolver
12154 python-numpy
12155 python-packaging
12156 python-pillow
12157 python-pyparsing
12158 `(,python "tk")))
12159 (inputs
12160 (list cairo
12161 freetype
12162 glib
12163 libpng
12164 qhull
12165 tcl
12166 tk))
12167 (native-inputs
12168 (list meson-python
12169 pkg-config
12170 pybind11
12171 python-pytest
12172 python-pytest-timeout
12173 python-pytest-xdist
12174 python-setuptools
12175 python-setuptools-scm
12176 python-wheel))
12177 (home-page "https://matplotlib.org/")
12178 (synopsis "2D plotting library for Python")
12179 (description
12180 "Matplotlib is a Python 2D plotting library which produces publication
12181quality figures in a variety of hardcopy formats and interactive environments
12182across platforms. Matplotlib can be used in Python scripts, the python and
12183ipython shell, web application servers, and six graphical user interface
12184toolkits.")
12185 (license license:psfl)))
12186
12187(define-public python-matplotlib-documentation
12188 (package
12189 (inherit python-matplotlib)
12190 (name "python-matplotlib-documentation")
12191 (arguments
12192 (list
12193 #:tests? #f ;we're only generating documentation
12194 #:phases
12195 #~(modify-phases %standard-phases
12196 (add-after 'unpack 'avoid-external-deps
12197 (lambda _
12198 ;; XXX: Avoid theme-switcher to avoid sphinx error
12199 ;; TemplateNotFound('theme-switcher.html')
12200 ;; XXX: Avoid version-switcher because it depends on an
12201 ;; external file, and we pack only one version anyway.
12202 (substitute* "doc/conf.py"
12203 (("\
12204\"navbar_end\": \\[\"theme-switcher\", \"version-switcher\", ")
12205 "\"navbar_end\": ["))))
12206 (replace 'build
12207 (lambda _
12208 (setenv "HOME" "/tmp")
12209 (chdir "doc")
12210 (invoke "make" "html" "info"
12211 ;; Don't abort on warnings; build in parallel.
12212 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
12213 (replace 'install
12214 (lambda _
12215 (let* ((data (string-append #$output "/share"))
12216 (doc (string-append data "/doc/matplotlib"))
12217 (info (string-append data "/info"))
12218 (html (string-append doc "/html")))
12219 (mkdir-p html)
12220 (copy-recursively "build/html" html)
12221 (install-file "build/texinfo/matplotlib.info" info)
12222 ;; The "matplotlib-figures" directory contains are a subset of
12223 ;; the images produced for the html target; simply create a
12224 ;; symlink to it, saving about 11 MiB.
12225 (symlink (string-append html "/_images")
12226 (string-append info "/matplotlib-figures"))))))))
12227 (native-inputs
12228 (list graphviz
12229 inkscape/pinned
12230 python-colorspacious
12231 python-ipython
12232 python-ipykernel
12233 python-ipywidgets
12234 python-mpl-sphinx-theme
12235 python-numpydoc
12236 python-scipy
12237 python-sphinx
12238 python-sphinx-copybutton
12239 python-sphinx-design
12240 python-sphinx-gallery
12241 python-sphinxcontrib-svg2pdfconverter
12242 texinfo
12243 texlive-dvipng-bin
12244 (texlive-local-tree
12245 (list texlive-amsfonts
12246 texlive-amsmath
12247 texlive-babel
12248 texlive-cm-super
12249 texlive-etoolbox
12250 texlive-expdlist
12251 texlive-fontspec
12252 texlive-times
12253 texlive-type1cm
12254 texlive-underscore
12255 texlive-unicode-math))))
12256 (synopsis "Documentation for the @code{python-matplotlib} package")))
12257
12258(define-public python-matplotlib-inline
12259 (package
12260 (name "python-matplotlib-inline")
12261 (version "0.1.7")
12262 (source
12263 (origin
12264 (method url-fetch)
12265 (uri (pypi-uri "matplotlib_inline" version))
12266 (sha256
12267 (base32 "145bl0ppy4cz1fii3pfixd0fi1jfmkcbsq3bw4b3vgk6qqzb48w4"))))
12268 (build-system pyproject-build-system)
12269 (arguments
12270 (list
12271 ;; Tests disabled because of a circular dependency with IPython.
12272 #:tests? #f
12273 #:phases
12274 #~(modify-phases %standard-phases
12275 ;; Disabled because of a circular dependency with IPython.
12276 (delete 'sanity-check))))
12277 (native-inputs
12278 (list python-setuptools))
12279 (propagated-inputs
12280 (list python-matplotlib
12281 python-traitlets))
12282 (home-page "https://github.com/ipython/matplotlib-inline")
12283 (synopsis "Inline Matplotlib backend for Jupyter")
12284 (description
12285 "This package provides a Matplotlib inline back-end for IPython and
12286Jupyter.")
12287 (license license:bsd-3)))
12288
12289(define-public python-matplotlib-venn
12290 (package
12291 (name "python-matplotlib-venn")
12292 (version "1.1.2")
12293 (source
12294 (origin
12295 (method url-fetch)
12296 (uri (pypi-uri "matplotlib-venn" version))
12297 (sha256
12298 (base32 "1qrnxhi2rbz737fm9mprfr8ig7kk2r99cbzkw8nsddcv7sh0favg"))))
12299 (build-system pyproject-build-system)
12300 (native-inputs (list python-pytest
12301 python-setuptools
12302 python-shapely
12303 python-wheel))
12304 (propagated-inputs
12305 (list python-matplotlib python-numpy python-scipy))
12306 (home-page "https://github.com/konstantint/matplotlib-venn")
12307 (synopsis "Plot area-proportional Venn diagrams")
12308 (description
12309 "This package provides tools for plotting area-proportional two- and
12310three-way Venn diagrams in @code{matplotlib}.")
12311 (license license:expat)))
12312
12313(define-public python-matplotx
12314 (package
12315 (name "python-matplotx")
12316 (version "0.3.10")
12317 (source
12318 (origin
12319 (method git-fetch)
12320 (uri (git-reference
12321 (url "https://github.com/nschloe/matplotx")
12322 (commit (string-append "v" version))))
12323 (file-name (git-file-name name version))
12324 (sha256
12325 (base32 "1j301mr7ai2jmbm5mkva0jd99fzxhyq585pqzqfmrf5pil8j4q8i"))))
12326 (build-system pyproject-build-system)
12327 (arguments
12328 (list
12329 #:test-flags
12330 ;; This test fails with ValueError: not enough values to unpack.
12331 #~(list "--deselect" "tests/test_spy.py::test_cli"
12332 ;; XXX: unknown failure
12333 "--deselect" "tests/test_spy.py::test_png")))
12334 (propagated-inputs
12335 (list python-matplotlib
12336 python-numpy
12337 ;; optional dependencies
12338 python-networkx
12339 python-pypng
12340 python-scipy))
12341 (native-inputs (list python-imageio
12342 python-meshzoo
12343 python-pytest
12344 python-scikit-fem
12345 python-setuptools
12346 python-wheel))
12347 (home-page "https://github.com/nschloe/matplotx")
12348 (synopsis "Minimal matplotlib styles")
12349 (description
12350 "This package includes some extensions for Matplotlib to create
12351clean plots with a minimalistic style.")
12352 (license license:expat)))
12353
12354(define-public python-cplot
12355 (package
12356 (name "python-cplot")
12357 (version "0.9.3")
12358 (source
12359 (origin
12360 (method git-fetch) ;for tests
12361 (uri (git-reference
12362 (url "https://github.com/nschloe/cplot")
12363 (commit (string-append "v" version))))
12364 (file-name (git-file-name name version))
12365 (sha256
12366 (base32 "0zk7hpq358sbympmkms7w2wjs7nw8mdfvkvdasblg2nhqayv42qz"))))
12367 (build-system pyproject-build-system)
12368 (native-inputs
12369 (list python-pytest
12370 python-setuptools
12371 python-wheel))
12372 (propagated-inputs
12373 (list python-matplotlib
12374 python-matplotx
12375 python-npx
12376 python-numpy))
12377 (home-page "https://github.com/nschloe/cplot")
12378 (synopsis "Plot complex-valued functions")
12379 (description "@code{cplot} is a Python library for plotting
12380complex-valued functions.")
12381 (license license:gpl3+)))
12382
12383(define-public python-cppheaderparser
12384 (package
12385 (name "python-cppheaderparser")
12386 (version "2.7.4")
12387 (source
12388 (origin
12389 (method url-fetch)
12390 (uri (pypi-uri "CppHeaderParser" version))
12391 (sha256
12392 (base32 "0hncwd9y5ayk8wa6bqhp551mcamcvh84h89ba3labc4mdm0k0arq"))))
12393 (build-system pyproject-build-system)
12394 (arguments
12395 (list
12396 #:tests? #f)) ; no tests
12397 (propagated-inputs (list python-ply))
12398 (native-inputs (list python-setuptools python-wheel))
12399 (home-page "http://senexcanis.com/open-source/cppheaderparser/")
12400 (synopsis
12401 "Parse C++ header files and generate a data structure representing the class")
12402 (description
12403 "CppHeaderParser is a pure python module that will parse C++ header files
12404and generate a data structure representing the class.")
12405 (license license:bsd-3)))
12406
12407(define-public python-cppy
12408 (package
12409 (name "python-cppy")
12410 (version "1.3.1")
12411 (source
12412 (origin
12413 (method url-fetch)
12414 (uri (pypi-uri "cppy" version))
12415 (sha256
12416 (base32 "0s3d7bjgr9af571y7czswjymnymnihwnyf9ml4p28kw725y31dam"))))
12417 (build-system pyproject-build-system)
12418 (native-inputs
12419 (list python-pytest
12420 python-setuptools
12421 python-setuptools-scm
12422 python-wheel))
12423 (home-page "https://github.com/nucleic/cppy")
12424 (synopsis "C++ header library for Python extension modules")
12425 (description "This package is a small C++ header library which makes it
12426easier to write Python extension modules. The primary feature is a
12427@code{PyObject} smart pointer which automatically handles reference counting
12428and provides convenience methods for performing common object operations.")
12429 (license license:bsd-3)))
12430
12431(define-public python-perfplot
12432 (package
12433 (name "python-perfplot")
12434 (version "0.10.2")
12435 (source (origin
12436 (method url-fetch)
12437 (uri (pypi-uri "perfplot" version))
12438 (sha256
12439 (base32
12440 "0hbyv17f9ra6l6albcrqx4rylmfv2m6z4qsnhb4bar256dralvfp"))))
12441 (build-system pyproject-build-system)
12442 (propagated-inputs (list python-matplotlib
12443 python-matplotx
12444 python-numpy-1
12445 python-rich))
12446 (native-inputs (list python-flit-core
12447 python-pytest))
12448 (home-page "https://github.com/nschloe/perfplot")
12449 (synopsis "Performance plots for Python code snippets")
12450 (description "@code{perfplot} extends Python's timeit by testing
12451snippets with input parameters (e.g., the size of an array) and plotting
12452the results.")
12453 (license license:gpl3+)))
12454
12455(define-public python-socksipy-branch
12456 (package
12457 (name "python-socksipy-branch")
12458 (version "1.01")
12459 (source
12460 (origin
12461 (method url-fetch)
12462 (uri (pypi-uri "SocksiPy-branch" version))
12463 (sha256
12464 (base32 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
12465 (build-system pyproject-build-system)
12466 (arguments (list #:tests? #f)) ; There are no tests
12467 (native-inputs (list python-setuptools))
12468 (home-page "https://code.google.com/archive/p/socksipy-branch/")
12469 (synopsis "Python SOCKS module")
12470 (description
12471 "SocksiPy - A Python SOCKS client module. It provides a socket-like
12472interface that supports connections to any TCP service through the use of a
12473SOCKS4, SOCKS5 or HTTP proxy. The original version was developed by Dan Haim,
12474this is a branch created by Mario Vilas to address some open issues,as the
12475original project seems to have been abandoned circa 2007.")
12476 (license license:bsd-3)))
12477
12478(define-public python-socksipychain
12479 (package
12480 (name "python-socksipychain")
12481 (properties '((commit . "570c75c55661db175bd733996ed1ab68fc4e3b33")
12482 (revision . "0")))
12483 (version (git-version "2.1.3"
12484 (assoc-ref properties 'revision)
12485 (assoc-ref properties 'commit)))
12486 (source
12487 (origin
12488 (method git-fetch)
12489 (uri (git-reference
12490 (url "https://github.com/pagekite/PySocksipyChain")
12491 (commit (assoc-ref properties 'commit))))
12492 (file-name (git-file-name name version))
12493 (sha256
12494 (base32 "1fi82id1qgh63wm8k1gcxpkaa8ic0mwliq7x3iy9lxihaqmr0zww"))))
12495 (build-system pyproject-build-system)
12496 (arguments (list #:tests? #f)) ; Tests try to access the network.
12497 (native-inputs (list python-setuptools))
12498 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
12499 (synopsis "Python SOCKS module with chained proxies support")
12500 (description
12501 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
12502adds support for arbitrary chaining of proxy servers and various modes of
12503TLS/SSL encryption. It was developed for use in PageKite, and also includes
12504a simple netcat replacement with chaining support.")
12505 (license license:bsd-3)))
12506
12507(define-public python-pycodestyle
12508 (package
12509 (name "python-pycodestyle")
12510 (version "2.12.1")
12511 (source
12512 (origin
12513 (method url-fetch)
12514 (uri (pypi-uri "pycodestyle" version))
12515 (sha256
12516 (base32 "089mszv65gwnz4nq8vryxqanlqk3bh3p4maxrnngdr5wighflf38"))))
12517 (build-system pyproject-build-system)
12518 (arguments
12519 (list
12520 #:test-flags #~(list "-m" "pycodestyle" "--statistics" "pycodestyle.py")
12521 #:phases
12522 #~(modify-phases %standard-phases
12523 ;; Taken from Tox config
12524 ;; <https://github.com/PyCQA/pycodestyle/blob/2.11.0/tox.ini#L16>.
12525 (replace 'check
12526 (lambda* (#:key tests? test-flags #:allow-other-keys)
12527 (when tests?
12528 (apply invoke "python" "-v" test-flags)))))))
12529 (native-inputs
12530 (list python-setuptools
12531 python-wheel))
12532 (home-page "https://pycodestyle.readthedocs.io/")
12533 (synopsis "Python style guide checker")
12534 (description "@code{pycodestyle} (formerly pep8) is a tool to check
12535Python code against some of the style conventions in
12536@url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
12537 (license license:expat)))
12538
12539(define-public python-pycollada
12540 (package
12541 (name "python-pycollada")
12542 (version "0.9.2")
12543 (source
12544 (origin
12545 (method git-fetch)
12546 (uri (git-reference
12547 (url "https://github.com/pycollada/pycollada")
12548 (commit (string-append "v" version))))
12549 (file-name (git-file-name name version))
12550 (sha256
12551 (base32 "13pj179p9gdiza409n8mdl7cpfasc3mrmk40p1vqplfdshks75dy"))))
12552 (build-system pyproject-build-system)
12553 (native-inputs
12554 (list python-pytest
12555 python-setuptools))
12556 (propagated-inputs
12557 (list python-numpy
12558 python-dateutil))
12559 (home-page "https://pycollada.readthedocs.io")
12560 (synopsis "Reading and writing collada documents library")
12561 (description
12562 "This package implements a functionality for creating, editing and
12563loading @url{https://www.khronos.org/collada/,COLLADA},which is a
12564COLLAborative Design Activity for establishing an interchange file format for
12565interactive 3D applications.
12566
12567The library allows you to load a COLLADA file and interact with it as a python
12568object. In addition, it supports creating a collada python object from
12569scratch, as well as in-place editing.")
12570 (license license:bsd-3)))
12571
12572(define-public python-pyct
12573 (package
12574 (name "python-pyct")
12575 (version "0.5.0")
12576 (source
12577 (origin
12578 (method url-fetch)
12579 (uri (pypi-uri "pyct" version))
12580 (sha256
12581 (base32 "1856dbrcpc0nxxhlfh3dqzz7xxn5sdi600q45hsprqyqrg2lm7yx"))))
12582 (build-system pyproject-build-system)
12583 (arguments
12584 (list
12585 #:test-flags
12586 ;; These tests want to download example data from the internet.
12587 '(list "-k" (string-append
12588 "not test_examples_with_use_test_data"
12589 " and not test_examples_using_test_data_and_force_with_prexisting_content_in_target"
12590 " and not test_fetch_data_using_test_data_with_no_file_in_data_copies_from_stubs"
12591 " and not test_fetch_data_using_test_data_and_force_with_file_in_data_over_writes"))))
12592 (propagated-inputs (list python-param python-pyyaml))
12593 (native-inputs (list python-flake8 python-pytest python-setuptools python-wheel))
12594 (home-page "https://github.com/holoviz-dev/pyct")
12595 (synopsis "Common packaging tasks")
12596 (description
12597 "This Python package provides utilities to run common packaging tasks,
12598e.g. copy examples, fetch data, etc.")
12599 (license license:bsd-3)))
12600
12601(define-public python-multidict
12602 (package
12603 (name "python-multidict")
12604 (version "6.1.0")
12605 (source
12606 (origin
12607 (method url-fetch)
12608 (uri (pypi-uri "multidict" version))
12609 (sha256
12610 (base32
12611 "0jlgjpclkh5g6vr1danl6alz0cza2jlzdqh3q03d4s8ckfzjxbi2"))))
12612 (build-system pyproject-build-system)
12613 (propagated-inputs (list python-typing-extensions))
12614 (native-inputs
12615 (list python-pytest python-pytest-cov python-setuptools python-wheel))
12616 (home-page "https://github.com/aio-libs/multidict/")
12617 (synopsis "Multidict implementation")
12618 (description "Multidict is dict-like collection of key-value pairs
12619where key might be occurred more than once in the container.")
12620 (license license:asl2.0)))
12621
12622(define-public python-orderedmultidict
12623 (package
12624 (name "python-orderedmultidict")
12625 (version "1.0.1")
12626 (source
12627 (origin
12628 (method url-fetch)
12629 (uri (pypi-uri "orderedmultidict" version))
12630 (sha256
12631 (base32 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
12632 (build-system pyproject-build-system)
12633 (propagated-inputs
12634 (list python-six))
12635 (native-inputs
12636 (list python-pytest
12637 python-setuptools))
12638 (home-page "https://github.com/gruns/orderedmultidict")
12639 (synopsis "Python Ordered Multivalue Dictionary - omdict")
12640 (description "This package contains a library for ordered multivalue
12641dictionaries. A multivalue dictionary is a dictionary that can store
12642multiple values for the same key. An ordered multivalue dictionary is a
12643multivalue dictionary that retains the order of insertions and deletions.")
12644 (license license:unlicense)))
12645
12646(define-public python-autocommand
12647 (package
12648 (name "python-autocommand")
12649 (version "2.2.2")
12650 (source
12651 (origin
12652 (method url-fetch)
12653 (uri (pypi-uri "autocommand" version))
12654 (sha256
12655 (base32 "0d2zjms5xm236k46la5pnl7i7hs3a12jlp12cw8lk5jm7i1fk3c7"))))
12656 (build-system pyproject-build-system)
12657 (native-inputs
12658 (list python-pytest python-setuptools))
12659 (home-page "https://github.com/Lucretiel/autocommand")
12660 (synopsis "Python library to build a command-line from a function")
12661 (description "@code{autocommand} is library to automatically generate and
12662run simple @code{argparse} parsers from function signatures.")
12663 (license license:lgpl3+)))
12664
12665(define-public python-autopage
12666 (package
12667 (name "python-autopage")
12668 (version "0.5.1")
12669 (source (origin
12670 (method url-fetch)
12671 (uri (pypi-uri "autopage" version))
12672 (sha256
12673 (base32
12674 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
12675 (build-system pyproject-build-system)
12676 (arguments
12677 (list
12678 #:phases
12679 #~(modify-phases %standard-phases
12680 (add-before 'check 'disable-e2e-tests
12681 (lambda _
12682 ;; These tests rely on KeyboardInterrupts which do not
12683 ;; work in the build container.
12684 (delete-file "autopage/tests/test_end_to_end.py"))))))
12685 (native-inputs
12686 (list python-pypa-build
12687 python-setuptools
12688 python-wheel
12689 ;; For tests.
12690 python-fixtures
12691 python-pytest
12692 python-testtools))
12693 (home-page "https://github.com/zaneb/autopage")
12694 (synopsis "Automatic paging for console output")
12695 (description
12696 "Autopage is a Python library to automatically display terminal output
12697from a program in a @dfn{pager} such as @command{less}.")
12698 (license license:asl2.0)))
12699
12700(define-public python-dirty-equals
12701 (package
12702 (name "python-dirty-equals")
12703 (version "0.8.0")
12704 (source
12705 (origin
12706 (method git-fetch)
12707 (uri (git-reference
12708 (url "https://github.com/samuelcolvin/dirty-equals")
12709 (commit (string-append "v" version))))
12710 (file-name (git-file-name name version))
12711 (sha256
12712 (base32 "1jp9jbfs90m8jkpcvi798zxxx49a94rzn8gki9fraqhbqxkv76qd"))))
12713 (build-system pyproject-build-system)
12714 (arguments
12715 (list
12716 #:test-flags
12717 ;; This test requires pytest-examples, which in turn requires
12718 ;; python-ruff, which is difficult to package because it is written in
12719 ;; Rust (TODO: Enable when Ruff is in Guix!).
12720 #~(list "--ignore=tests/test_docs.py"
12721 ;; Optional typing check with Pydantic.
12722 "--ignore=tests/test_other.py"
12723 ;; TODO: Some timezones are missing in PyTZ, remove constrain
12724 ;; when updated.
12725 "-k" (string-append "not test_is_datetime_zoneinfo"
12726 " and not test_is_now_tz"
12727 " and not test_tz"))))
12728 (native-inputs
12729 (list python-hatchling
12730 ;; python-pydantic ; introduces cycle, optinoal
12731 python-pytest))
12732 (propagated-inputs
12733 (list python-pytz))
12734 (home-page "https://dirty-equals.helpmanual.io/")
12735 (synopsis "Do dirty (but useful) things with equals")
12736 (description
12737 "@code{dirty-equals} is a Python library that (mis)uses the
12738@code{__eq__} method to make code (generally unit tests) more declarative
12739and therefore easier to read and write.")
12740 (license license:expat)))
12741
12742(define-public python-distlib
12743 (package
12744 (name "python-distlib")
12745 (version "0.3.7")
12746 (source
12747 (origin
12748 (method url-fetch)
12749 (uri (pypi-uri "distlib" version))
12750 (sha256
12751 (base32
12752 "1a27f5p93j9i1l3324qgahs3g8ai91fmx783jpyyla506i5ybbwx"))))
12753 (build-system pyproject-build-system)
12754 (arguments
12755 (list
12756 #:phases
12757 #~(modify-phases %standard-phases
12758 (add-before 'build 'no-/bin/sh
12759 (lambda* (#:key inputs #:allow-other-keys)
12760 (let ((/bin/sh (search-input-file inputs "bin/sh")))
12761 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
12762 (("/bin/sh") /bin/sh)))))
12763 (add-before 'check 'prepare-test-environment
12764 (lambda _
12765 (setenv "HOME" "/tmp")
12766 ;; NOTE: Any value works, the variable just has to be present.
12767 (setenv "SKIP_ONLINE" "1"))))))
12768 (native-inputs
12769 (list python-pytest python-setuptools python-wheel))
12770 (inputs
12771 (list bash-minimal))
12772 (home-page "https://github.com/pypa/distlib")
12773 (synopsis "Distribution utilities")
12774 (description "Distlib is a library which implements low-level functions that
12775relate to packaging and distribution of Python software. It is intended to be
12776used as the basis for third-party packaging tools.")
12777 (license license:psfl)))
12778
12779(define-public python-distutils-extra
12780 (package
12781 (name "python-distutils-extra")
12782 (version "2.38")
12783 (source
12784 (origin
12785 (method url-fetch)
12786 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
12787 version "/+download/python-distutils-extra-"
12788 version ".tar.gz"))
12789 (sha256
12790 (base32
12791 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
12792 (build-system pyproject-build-system)
12793 (arguments
12794 (list #:tests? #f)) ;tests are outdated and broken
12795 (native-inputs (list python-setuptools python-wheel))
12796 (home-page "https://launchpad.net/python-distutils-extra/")
12797 (synopsis "Enhancements to Python's distutils")
12798 (description
12799 "The python-distutils-extra module enables you to easily integrate
12800gettext support, themed icons, and scrollkeeper-based documentation into
12801Python's distutils.")
12802 (license license:gpl2)))
12803
12804(define-public python-olefile
12805 (package
12806 (name "python-olefile")
12807 (version "0.47")
12808 (source
12809 (origin
12810 (method git-fetch)
12811 (uri (git-reference
12812 (url "https://github.com/decalage2/olefile")
12813 (commit (string-append "v" version))))
12814 (file-name (git-file-name name version))
12815 (sha256
12816 (base32 "1ardfp32jgijha6vk7znvnpwgi710c6gj02lk4drv45xj4mw71hv"))))
12817 (build-system pyproject-build-system)
12818 (native-inputs
12819 (list python-pytest
12820 python-setuptools))
12821 (home-page "https://www.decalage.info/python/olefileio")
12822 (synopsis "Read and write Microsoft OLE2 files")
12823 (description
12824 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
12825Storage or Compound Document, Microsoft Office). It is an improved version of
12826the OleFileIO module from PIL, the Python Image Library.")
12827 (license license:bsd-3)))
12828
12829(define-public python-property-cached
12830 (package
12831 (name "python-property-cached")
12832 (version "1.6.4")
12833 (source
12834 (origin
12835 (method url-fetch)
12836 (uri (pypi-uri "property-cached" version ".zip"))
12837 (sha256
12838 (base32 "0wxv5sdx1p7ils36j6j6hfscz8v2vzbq212i8y8r0lrnxpqlx71y"))
12839 (patches
12840 (search-patches "python-property-cached-asyncio-3_11.patch"))))
12841 (build-system pyproject-build-system)
12842 (arguments
12843 (list
12844 ;; AssertionError.
12845 #:test-flags #~(list "-k" "not test_threads_ttl_expiry")))
12846 (native-inputs (list python-freezegun python-pytest unzip
12847 python-setuptools python-wheel))
12848 (home-page "https://github.com/althonos/property-cached/")
12849 (synopsis "Decorator for caching properties in classes")
12850 (description "This package provides a decorator for caching properties in
12851classes. It is forked from @code{cached-property}.")
12852 (license license:bsd-3)))
12853
12854(define-public python-pdf2image
12855 (package
12856 (name "python-pdf2image")
12857 (version "1.17.0")
12858 (source
12859 (origin
12860 (method git-fetch)
12861 (uri (git-reference
12862 (url "https://github.com/Belval/pdf2image")
12863 (commit (string-append "v" version))))
12864 (file-name (git-file-name name version))
12865 (sha256
12866 (base32 "0xd8q939zqa8flfcdhbgyadiwqb8sgnd42cbr6n1l2jl9fnix45v"))))
12867 (build-system pyproject-build-system)
12868 (arguments
12869 (list
12870 ;; The following excluded tests assume hardcoded binary paths to
12871 ;; /usr/bin/pdftoppm and /usr/bin/pdftocairo.
12872 #:test-flags
12873 #~(list "--exclude=^test_use_poppler_path$"
12874 "--exclude=^test_use_poppler_path_with_trailing_slash$")))
12875 (propagated-inputs (list python-pillow))
12876 (inputs (list poppler))
12877 (native-inputs (list python-pynose which python-setuptools))
12878 (home-page "https://github.com/Belval/pdf2image")
12879 (synopsis
12880 "Python wrapper around @command{pdftoppm} and @command{pdftocairo}")
12881 (description
12882 "This package provides a Python API wrapping the @command{pdftoppm} and
12883@command{pdftocairo} command line tools. It can convert @file{PDF} files to a
12884Python list with elements of type @code{PIL.Image} (from the
12885@code{python-pillow} library).")
12886 (license license:expat)))
12887
12888(define-public python-pikepdf
12889 (package
12890 (name "python-pikepdf")
12891 (version "8.15.1")
12892 (source
12893 (origin
12894 (method git-fetch)
12895 (uri (git-reference
12896 (url "https://github.com/pikepdf/pikepdf")
12897 (commit (string-append "v" version))))
12898 (file-name (git-file-name name version))
12899 (sha256
12900 (base32 "0hpnb63xp8yaflah3i1z5azh6mg36rz0liy27km47417w2q72v0c"))))
12901 (build-system pyproject-build-system)
12902 (arguments
12903 (list
12904 #:phases
12905 #~(modify-phases %standard-phases
12906 (add-after 'unpack 'set-version
12907 (lambda _
12908 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
12909 (native-inputs
12910 (list pybind11
12911 python-attrs
12912 python-hypothesis
12913 python-setuptools-scm
12914 python-psutil
12915 python-pytest
12916 python-pytest-timeout
12917 python-pytest-xdist
12918 python-dateutil
12919 python-xmp-toolkit
12920 python-tomli
12921 python-setuptools))
12922 (inputs
12923 (list qpdf))
12924 (propagated-inputs
12925 (list python-deprecated python-lxml python-packaging python-pillow))
12926 (home-page "https://github.com/pikepdf/pikepdf")
12927 (synopsis "Read and write PDFs with Python")
12928 (description
12929 "pikepdf is a Python library for reading and writing PDF files.")
12930 (license license:mpl2.0)))
12931
12932(define-public python-pillow
12933 (package
12934 (name "python-pillow")
12935 (version "11.1.0")
12936 (source
12937 (origin
12938 (method url-fetch)
12939 (uri (pypi-uri "pillow" version))
12940 (sha256
12941 (base32 "081abgpz7g013cgzz7pjhmf8m7q626ngza4hnfs76vdk104ag39n"))))
12942 (build-system pyproject-build-system)
12943 (arguments
12944 (list
12945 #:phases
12946 #~(modify-phases %standard-phases
12947 (add-after 'unpack 'patch-ldconfig
12948 (lambda _
12949 (substitute* "setup.py"
12950 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
12951 (replace 'check
12952 (lambda* (#:key tests? #:allow-other-keys)
12953 (when tests?
12954 (setenv "HOME" (getcwd))
12955 (invoke "python" "selftest.py" "--installed")
12956 (invoke "python" "-m" "pytest" "-vv")))))))
12957 (native-inputs (list python-defusedxml
12958 python-markdown2
12959 python-olefile
12960 python-pytest
12961 python-setuptools
12962 python-trove-classifiers))
12963 (inputs (list freetype
12964 lcms
12965 libjpeg-turbo
12966 libtiff
12967 libwebp
12968 openjpeg
12969 zlib))
12970 (home-page "https://python-pillow.org")
12971 (synopsis "Fork of the Python Imaging Library")
12972 (description
12973 "The Python Imaging Library adds image processing capabilities to your
12974Python interpreter. This library provides extensive file format support, an
12975efficient internal representation, and fairly powerful image processing
12976capabilities. The core image library is designed for fast access to data
12977stored in a few basic pixel formats. It should provide a solid foundation for
12978a general image processing tool.")
12979 (properties `((cpe-name . "pillow")))
12980 (license (license:x11-style
12981 "http://www.pythonware.com/products/pil/license.htm"
12982 "The PIL Software License"))))
12983
12984(define-public python-pillow-heif
12985 (package
12986 (name "python-pillow-heif")
12987 (version "1.1.1")
12988 (source
12989 (origin
12990 (method url-fetch)
12991 (uri (pypi-uri "pillow_heif" version))
12992 (sha256
12993 (base32 "1pkbkg88jg6f24xvbg95aq8dm8fa8ffz7zy4rq262m98i658q3pn"))))
12994 (build-system pyproject-build-system)
12995 (inputs (list libheif))
12996 (propagated-inputs (list python-pillow))
12997 (native-inputs (list opencv ; for opencv-python
12998 python-defusedxml
12999 python-numpy
13000 python-packaging
13001 python-pympler
13002 python-pytest
13003 python-setuptools))
13004 (home-page "https://github.com/bigcat88/pillow_heif")
13005 (synopsis "Python interface for libheif library")
13006 (description "This package provides Python bindings for the libheif library
13007and a plugin for Pillow.")
13008 (license license:bsd-3)))
13009
13010(define-public python-pillow-heif-0.22
13011 (package
13012 (inherit python-pillow-heif)
13013 (version "0.22.0")
13014 (source
13015 (origin
13016 (method url-fetch)
13017 (uri (pypi-uri "pillow_heif" version))
13018 (sha256
13019 (base32 "16mkap63d14f69105b3bm8pi64fvpdznncgn48vhgls0jf977m31"))))))
13020
13021(define-public python-pixelmatch
13022 (package
13023 (name "python-pixelmatch")
13024 (version "0.3.0")
13025 (source
13026 (origin
13027 (method git-fetch)
13028 (uri (git-reference
13029 (url "https://github.com/whtsky/pixelmatch-py")
13030 (commit (string-append "v" version))))
13031 (file-name (git-file-name name version))
13032 (sha256
13033 (base32 "0d4579hh5rwdh9djq5j9lf448x68c1iz80wavxiq7sxpmwm1j23a"))))
13034 (build-system pyproject-build-system)
13035 (arguments
13036 ;; XXX: PIL.UnidentifiedImageError despite images being present.
13037 (list #:tests? #f))
13038 (native-inputs
13039 (list python-poetry-core
13040 python-pillow
13041 python-pytest
13042 python-pytest-benchmark))
13043 (home-page "https://github.com/whtsky/pixelmatch-py")
13044 (synopsis "Pixel-level image comparison library")
13045 (description
13046 "This package provides a pixel-level image comparison library for Python,
13047originally created to compare screenshots in tests. Its features include
13048accurate anti-aliased pixels detection and perceptual color difference
13049metrics.")
13050 (license license:isc)))
13051
13052(define-public python-imagecodecs
13053 (package
13054 (name "python-imagecodecs")
13055 (version "2025.8.2")
13056 (source
13057 (origin
13058 (method url-fetch)
13059 (uri (pypi-uri "imagecodecs" version))
13060 (sha256
13061 (base32 "0v7yglk100fnk0m9m5bnfph2vm1jpnxzrzz2lwk06dqcr6m75wia"))
13062 (modules '((guix build utils)))
13063 (snippet #~(for-each delete-file
13064 ;; Delete pre-generated Cython files.
13065 (find-files "imagecodecs" "_.*\\.c$")))))
13066 (build-system pyproject-build-system)
13067 (arguments
13068 (list
13069 ;; tests: 2023 passed, 7841 skipped, 200 deselected, 1626 xfailed, 4 warnings
13070 #:test-flags
13071 ;; Some of those tests are flaky.
13072 #~(list "-k" "not test_cms_identity_transforms")
13073 #:phases
13074 #~(modify-phases %standard-phases
13075 (add-after 'unpack 'create-configuration
13076 (lambda _
13077 ;; By default everything is enabled. We can selectively disable
13078 ;; extensions (and thus dependencies) by deleting them from the
13079 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
13080 (call-with-output-file "imagecodecs_distributor_setup.py"
13081 (lambda (port)
13082 (format port "\
13083def customize_build(EXTENSIONS, OPTIONS):
13084~{ del EXTENSIONS[~s]~%~}~%"
13085 (list "apng" "lzo" "tiff" ; FIXME Wrong version?
13086 ;; Those rely on unpackaged inputs.
13087 "aec" "avif" "bitshuffle" "brunsli" "deflate"
13088 "jetraw" "jpeg2k" "jpegls" "jpegxl" "jpegxr"
13089 "jpegxs" "lerc" "ljpeg" "lzf" "lzham" "mozjpeg"
13090 "pcodec" "sperr" "sz3" "szip" "ultrahdr" "zfp"
13091 "zlibng" "zopfli"))))))
13092 (add-after 'unpack 'fix-sanity-check
13093 (lambda _
13094 ;; XXX: Don't exit twice. The generated script already does that.
13095 (substitute* "imagecodecs/__main__.py"
13096 (("sys\\.exit\\(main\\(\\)\\)")
13097 ""))))
13098 (add-before 'check 'configure-tests
13099 (lambda _
13100 (setenv "HOME" (getcwd)))))))
13101 (inputs
13102 (list brotli
13103 c-blosc
13104 c-blosc2
13105 giflib
13106 lcms
13107 libheif
13108 libjpeg-turbo
13109 libpng
13110 libtiff
13111 libwebp
13112 lz4
13113 lzfse
13114 snappy
13115 xz
13116 zlib
13117 `(,zstd "lib")))
13118 (propagated-inputs
13119 (list python-numpy python-matplotlib python-tifffile))
13120 (native-inputs
13121 (list python-cython python-pytest python-setuptools))
13122 (home-page "https://www.lfd.uci.edu/~gohlke/")
13123 (synopsis "Image transformation, compression, and decompression codecs")
13124 (description
13125 "Imagecodecs is a Python library that provides block-oriented, in-memory
13126buffer transformation, compression, and decompression functions for use in the
13127tifffile, czifile, and other scientific image input/output modules.")
13128 (license license:bsd-3)))
13129
13130(define-public python-property-manager
13131 (package
13132 (name "python-property-manager")
13133 (version "3.0")
13134 (source
13135 (origin
13136 (method git-fetch)
13137 (uri (git-reference
13138 (url "https://github.com/xolox/python-property-manager")
13139 (commit version)))
13140 (file-name (git-file-name name version))
13141 (sha256
13142 (base32 "1v7hjm7qxpgk92i477fjhpcnjgp072xgr8jrgmbrxfbsv4cvl486"))))
13143 (build-system pyproject-build-system)
13144 (native-inputs (list python-pytest python-setuptools))
13145 (propagated-inputs
13146 (list python-verboselogs
13147 python-humanfriendly
13148 python-coloredlogs))
13149 (home-page "https://github.com/xolox/python-property-manager")
13150 (synopsis "Useful property variants for Python programming")
13151 (description
13152 "The @code{property-manager} package defines several custom property
13153variants for Python programming including required properties,writable
13154properties, cached properties, etc.")
13155 (license license:expat)))
13156
13157(define-public python-executing
13158 (package
13159 (name "python-executing")
13160 (version "2.2.0")
13161 (source
13162 (origin
13163 (method url-fetch)
13164 (uri (pypi-uri "executing" version))
13165 (sha256
13166 (base32 "0mb74ajjfhzscvwxr9qazjs2q7il2fvyicm7s58jbzh8h418q42x"))))
13167 (build-system pyproject-build-system)
13168 (arguments
13169 (list
13170 #:test-flags
13171 ;; Test needs IPython
13172 #~(list "-k" "not test_two_statement_lookups")
13173 #:phases
13174 #~(modify-phases %standard-phases
13175 (add-after 'unpack 'fix-tests
13176 (lambda _
13177 ;; See: <https://github.com/alexmojaki/executing/issues/99>.
13178 (substitute* "pyproject.toml"
13179 (("ignore_missing_imports = true.*")
13180 "ignore_missing_imports = true
13181
13182[tool.pytest.ini_options]
13183python_functions = \"test_\"\n")))))))
13184 (native-inputs
13185 (list python-asttokens
13186 python-littleutils
13187 python-pytest
13188 python-rich
13189 python-setuptools
13190 python-setuptools-scm
13191 python-wheel))
13192 (home-page "https://github.com/alexmojaki/executing")
13193 (synopsis "Get information about what a Python frame is currently doing")
13194 (description "This package lets you get information about what a frame is
13195currently doing, particularly the AST node being executed.")
13196 (license license:expat)))
13197
13198(define-public python-executor
13199 (package
13200 (name "python-executor")
13201 (version "23.2")
13202 (source
13203 (origin
13204 (method git-fetch)
13205 (uri (git-reference
13206 (url "https://github.com/xolox/python-executor")
13207 (commit version)))
13208 (file-name (git-file-name name version))
13209 (sha256
13210 (base32 "1mr0662c5l5zx0wjapcprp8p2xawfd0im3616df5sgv79fqzwfqs"))))
13211 (build-system pyproject-build-system)
13212 (arguments
13213 (list #:tests? #f)) ;TODO: tests require root/sudo
13214 (native-inputs (list python-mock python-pytest python-setuptools))
13215 (propagated-inputs
13216 (list python-six
13217 python-property-manager
13218 python-fasteners
13219 python-virtualenv))
13220 (home-page "https://github.com/xolox/python-executor")
13221 (synopsis "Programmer friendly subprocess wrapper")
13222 (description
13223 "The @code{executor} package is a simple wrapper for Python’s subprocess
13224module that makes it very easy to handle subprocesses on UNIX systems with
13225proper escaping of arguments and error checking currently doing, particularly
13226the AST node being executed.")
13227 (license license:expat)))
13228
13229(define-public python-roifile
13230 (package
13231 (name "python-roifile")
13232 (version "2025.5.10")
13233 (source
13234 (origin
13235 (method url-fetch)
13236 (uri (pypi-uri "roifile" version))
13237 (sha256
13238 (base32 "1kiwylcmxckzrqj3xn5ljcjfyx6y2s8bnqjd5psmkb4mjrwiypcf"))))
13239 (build-system pyproject-build-system)
13240 (arguments (list #:tests? #f)) ; There are none.
13241 (native-inputs (list python-setuptools))
13242 (propagated-inputs (list python-numpy))
13243 (home-page "https://www.lfd.uci.edu/~gohlke/")
13244 (synopsis "Read and write ImageJ ROI format")
13245 (description "Roifile is a Python library to read, write, create, and plot
13246ImageJ ROIs, an undocumented and ImageJ application specific format to store
13247regions of interest, geometric shapes, paths, text, etc for image overlays.")
13248 (license license:bsd-3)))
13249
13250(define-public python-lfdfiles
13251 (package
13252 (name "python-lfdfiles")
13253 (version "2025.9.17")
13254 (source
13255 (origin
13256 (method url-fetch)
13257 (uri (pypi-uri "lfdfiles" version))
13258 (sha256
13259 (base32 "0b363vv146icsn86gxc04grq2d5r7xzzabr03xsc7aq9wybgvgqp"))
13260 (modules '((guix build utils)))
13261 (snippet
13262 ;; Delete pre-generated Cython files.
13263 #~(for-each delete-file (find-files "lfdfiles" "_.*\\.c$")))))
13264 (build-system pyproject-build-system)
13265 (arguments
13266 (list #:tests? #f)) ; No tests, despite a test dependency on pytest.
13267 (native-inputs (list python-setuptools))
13268 (propagated-inputs (list python-click python-numpy python-tifffile))
13269 (home-page "https://www.lfd.uci.edu/~gohlke/")
13270 (synopsis "Work with LFD data files")
13271 (description
13272 "Lfdfiles is a Python library and console script for reading, writing,
13273converting, and viewing many of the proprietary file formats used to store
13274experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
13275 (license license:bsd-3)))
13276
13277;; ~8Mo of test files.
13278(define python-av-testdata
13279 (file-union
13280 "python-av-testdata"
13281 (cons*
13282 (let ((file "pexels/time-lapse-video-of-night-sky-857195.mp4"))
13283 `(,(string-append "pyav-curated/" file)
13284 ,(origin
13285 (method url-fetch)
13286 (uri (string-append "https://pyav.org/datasets/" file))
13287 (sha256
13288 (base32 "10fjs2gyha88gzv7pv3njv0fimv61ihz39p1556qazm90xbknzgb")))))
13289 (map
13290 (match-lambda
13291 ((file . hash)
13292 (list (string-append "fate-suite/" file)
13293 (origin
13294 (method url-fetch)
13295 (uri (string-append "http://fate.ffmpeg.org/fate-suite/" file))
13296 (sha256 (base32 hash))))))
13297 '(("aac/latm_stereo_to_51.ts" .
13298 "05h8389i944gb7f2y9c7848vqn8xz1mnm602fwala85npj4z8p4m")
13299 ("h264/extradata-reload-multi-stsd.mov" .
13300 "1rwlkl9vxp925vzh13cq5dfr983jxbkng0w6ivaymqqwvi7bvg5m")
13301 ("amv/MTV_high_res_320x240_sample_Penguin_Joke_MTV_from_WMV.amv" .
13302 "1hiifhdmd0ygzny5mplqdxl3dh9g95384ilkr4ccwv5l9y7hrmiv")
13303 ("audio-reference/chorusnoise_2ch_44kHz_s16.wav" .
13304 "06xybcnv7max9mmj6f1fw8rwz2aawhcyx2wgj1gmn1142kk431ra")
13305 ("h264/interlaced_crop.mp4" .
13306 "04bcmwd6scqn63y6p8i5srbjh9jq1sc95q6vy7srwfhzwxl9cma9")
13307 ("hap/HAPQA_NoSnappy_127x1.mov" .
13308 "1kvf8xs5v29sjqk2p07arl2hlp9z7hb1lb4202v4iqiwva1jmiaq")
13309 ("mkv/codec_delay_opus.mkv" .
13310 "0ll3qnmxnkhqxbh6s2a3clbkbhw5bsbfw6mh6kxdsa463iyyka8r")
13311 ("mov/displaymatrix.mov" .
13312 "1d4jp93hdyfhasxhqmx8lliwsa2w1kv2jj1qh6fqs74aqb6kzb82")
13313 ("mov/mov-1elist-ends-last-bframe.mov" .
13314 "04lyjsm8zncw9aac7vmkc2h45dcyb6y8643s3pg3rgzgcgqkq3nn")
13315 ("mov/white_zombie_scrunch-part.mov" .
13316 "07wg7mxa799z8dcvnbbrr9f0b5l6r42bd7d414isk3kc3jw0z6ka")
13317 ("mpeg2/mpeg2_field_encoding.ts" .
13318 "1f3waj8jhp6v655hnqpxi2bx3b36976vdjmr74hjr7jv2hx3724n")
13319 ("vorbis/vorbis_chapter_extension_demo.ogg" .
13320 "1prhhwi44psk9xji2mvk7rnvk899h5rx9wi3dmzkgwaz11r0cjdk")
13321 ("mxf/track_01_v02.mxf" .
13322 "04gpbma4kxvhn4dr1sh2k4pq2kbpmnmk2s2bdhq081jzap2983q1")
13323 ("png1/55c99e750a5fd6_50314226.png" .
13324 "05rha9vdix0wfibrhpaknh9fzj0cv84q6d2ypxq1wc0y328fc068")
13325 ("qtrle/aletrek-rle.mov" .
13326 "1n6ksjrqrb7gnbvzhj58y5z5jx6bmpgg7lxwzvnbfg9f9ib2yxdr")
13327 ("sub/MovText_capability_tester.mp4" .
13328 "07znmm4bhnp5f40yksnpf7ws94yflsbv169ydkga6rdby6ys2sv3")
13329 ("sub/vobsub.sub" .
13330 "12rwhnv1k7mngvyq026f2xd9dpd9mxmwg82sa9p5r8z54hrw8sjz"))))))
13331
13332(define-public python-av
13333 (package
13334 (name "python-av")
13335 (version "16.0.1")
13336 (source
13337 (origin
13338 (method url-fetch)
13339 (uri (pypi-uri "av" version))
13340 (sha256
13341 (base32 "1gqxzwbgwj164x211lsjgqj8xx9rpjxhzq6rls4mhpqbz9wyfb6x"))))
13342 (build-system pyproject-build-system)
13343 (arguments
13344 (list
13345 ;; Upstream is not great in responding to open issues or change requests.
13346 ;; See:
13347 ;; - <https://github.com/PyAV-Org/PyAV/issues/1942>
13348 ;; - <https://github.com/PyAV-Org/PyAV/issues/1946>
13349 ;; - <https://github.com/PyAV-Org/PyAV/pull/1944>
13350 #:test-flags
13351 ;; Writing to custom IO requires network access.
13352 #~(list "-k" "not test_writing_to_custom_io_dash")
13353 #:phases
13354 #~(modify-phases %standard-phases
13355 (add-before 'check 'pre-check
13356 (lambda _
13357 ;; This would otherwise interfere with finding the installed
13358 ;; av when running tests.
13359 (delete-file-recursively "av")
13360 (setenv "PYAV_TESTDATA_DIR" #+python-av-testdata)
13361 (substitute* "tests/common.py"
13362 (("^os\\.environ\\[\"PYAV_TESTDATA_DIR\"\\] = asset\\(\\)")
13363 "os.environ.setdefault(\"PYAV_TESTDATA_DIR\", asset())")))))))
13364 (native-inputs
13365 (list pkg-config
13366 python-cython
13367 python-numpy
13368 python-pillow
13369 python-pytest
13370 python-setuptools))
13371 (inputs (list ffmpeg))
13372 (home-page "https://github.com/PyAV-Org/PyAV")
13373 (synopsis "Pythonic bindings for FFmpeg's libraries")
13374 (description
13375 "PyAV is a Python library that allows for direct and precise manipulation
13376of media through containers, streams, packets, codecs, and frames. It provides
13377access to the powerful FFmpeg libraries while managing the complex details as
13378much as possible.
13379PyAV also facilitates data transformation and integration with
13380other packages such as Numpy and Pillow. However, working with media is a
13381challenging task and PyAV cannot abstract it away or make all the best decisions
13382for you. If you can accomplish your tasks with the ffmpeg command, PyAV may not
13383be necessary. Nonetheless, PyAV is an essential tool when working with media
13384that requires its specific capabilities.")
13385 (license license:bsd-3)))
13386
13387(define-public python-ffmpeg-python
13388 ;; The latest release (0.2.0) is old and its test suite crashs on Python 3.10.
13389 (package
13390 (name "python-ffmpeg-python")
13391 (properties '((commit . "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6")
13392 (revision . "0")))
13393 (version (git-version "0.2.0"
13394 (assoc-ref properties 'revision)
13395 (assoc-ref properties 'commit)))
13396 (source
13397 (origin
13398 (method git-fetch)
13399 (uri (git-reference
13400 (url "https://github.com/kkroening/ffmpeg-python.git")
13401 (commit (assoc-ref properties 'commit))))
13402 (file-name (git-file-name name version))
13403 (sha256
13404 (base32 "1zj4ac37n4igfj21zy405mdlvbpv6jyb12wfpszf8zkhhj2qby4c"))))
13405 (build-system pyproject-build-system)
13406 (arguments
13407 (list
13408 #:test-flags
13409 #~(list "-k" "not test_pipe and not test__probe")
13410 #:phases
13411 #~(modify-phases %standard-phases
13412 (add-after 'unpack 'hardcode-ffmpeg
13413 (lambda* (#:key inputs #:allow-other-keys)
13414 (let ((ffmpeg (search-input-file inputs "bin/ffmpeg")))
13415 (substitute* "ffmpeg/_run.py"
13416 (("cmd='ffmpeg'")
13417 (string-append "cmd='" ffmpeg "'")))
13418 (substitute* "ffmpeg/tests/test_ffmpeg.py"
13419 (("out_file.compile\\(\\) == \\['ffmpeg'")
13420 (format #f "out_file.compile() == [~s" ffmpeg)))))))))
13421 (inputs (list ffmpeg))
13422 (propagated-inputs (list python-future))
13423 (native-inputs (list python-future
13424 python-numpy
13425 python-pytest
13426 python-pytest-mock
13427 python-setuptools))
13428 (home-page "https://github.com/kkroening/ffmpeg-python")
13429 (synopsis "Python bindings for FFmpeg with complex filtering support")
13430 (description
13431 "ffmpeg-python allows you to write FFmpeg filtergraphs in familiar
13432Python terms, taking care of running ffmpeg with the correct command-line
13433arguments. It handles arbitrarily large (directed-acyclic) signal graphs.")
13434 (license license:asl2.0)))
13435
13436(define-public python-imageio-ffmpeg
13437 (package
13438 (name "python-imageio-ffmpeg")
13439 (version "0.6.0")
13440 (source
13441 (origin
13442 (method url-fetch)
13443 (uri (pypi-uri "imageio_ffmpeg" version))
13444 (sha256
13445 (base32 "0m8ppa4ap5vnic3jb25hsrq2gn0283x7mfr5z6ln8m80ivnnnmg2"))))
13446 (build-system pyproject-build-system)
13447 (arguments
13448 (list
13449 #:tests? #f ;XXX: tests requrie network access to get FFmpeg data
13450 #:phases
13451 #~(modify-phases %standard-phases
13452 (add-after 'unpack 'hardcode-ffmpeg
13453 (lambda* (#:key inputs #:allow-other-keys)
13454 (substitute* "imageio_ffmpeg/_utils.py"
13455 (("os\\.getenv\\(\"IMAGEIO_FFMPEG_EXE\".*\\)" all)
13456 (string-append "(" all " or \""
13457 (search-input-file inputs "bin/ffmpeg")
13458 "\")"))))))))
13459 (native-inputs
13460 (list python-setuptools
13461 python-wheel))
13462 (inputs
13463 (list ffmpeg))
13464 (home-page "https://github.com/imageio/imageio-ffmpeg")
13465 (synopsis "FFMPEG wrapper for Python")
13466 (description
13467 "This package provides an FFMPEG wrapper for working with video files.
13468It implements generator functions for reading and writing data to and from
13469FFMPEG, reliably terminating the process when done.")
13470 (license license:bsd-2)))
13471
13472(define-public python-imageio-freeimage
13473 (package
13474 (name "python-imageio-freeimage")
13475 (version "0.1.1")
13476 (source
13477 (origin
13478 (method url-fetch)
13479 (uri (pypi-uri "imageio_freeimage" version))
13480 (sha256
13481 (base32 "1la0iv3617m52dnidhhrdaz9dpnlfqs7b83550d3jkjavv30md72"))))
13482 (build-system pyproject-build-system)
13483 (arguments
13484 (list
13485 #:tests? #f ; tests need internet and are not distributed in PyPI
13486 #:phases
13487 #~(modify-phases %standard-phases
13488 ;; imageio_freeimage expects a copy of the library in its source
13489 ;; tree. Changing this would require hacky substitutions.
13490 (add-after 'install 'freeimage-path
13491 (lambda* (#:key inputs #:allow-other-keys)
13492 (let* ((pylib (string-append #$output "/lib/python"
13493 #$(version-major+minor
13494 (package-version python))
13495 "/site-packages"))
13496 (iofi (string-append pylib "/imageio_freeimage")))
13497 (mkdir-p (string-append iofi "/_lib"))
13498 (symlink (search-input-file inputs "lib/libfreeimage.so")
13499 (string-append iofi "/_lib/libfreeimage.so"))))))))
13500 (native-inputs (list python-poetry-core python-requests python-setuptools
13501 python-wheel))
13502 (inputs (list freeimage))
13503 (propagated-inputs (list python-imageio))
13504 (home-page "https://github.com/imageio/imageio-freeimage")
13505 (synopsis "Plugin for ImageIO that wraps the FreeImage library")
13506 (description
13507 "This package provides a plugin for @code{ImageIO} that wraps the
13508@code{FreeImage} library.")
13509 ;; As a derivative work of FreeImage, imageio_freeimage is licensed under
13510 ;; GPLv2 or GPLv3, and the FreeImage Public License (FIPL).
13511 ;; For more information, see the LICENSE file.
13512 (license
13513 (list license:gpl2 license:gpl3
13514 (license:non-copyleft "https://spdx.org/licenses/FreeImage.html")))))
13515
13516(define-public python-imageio
13517 (package
13518 (name "python-imageio")
13519 (version "2.36.1")
13520 (source
13521 (origin
13522 (method url-fetch)
13523 (uri (pypi-uri "imageio" version))
13524 (sha256
13525 (base32
13526 "0qmy8qbnycas6v2a43qw9pxmd23fm3hpq3qb20b9x6kzyhqx5qg4"))))
13527 (build-system pyproject-build-system)
13528 (arguments
13529 (list
13530 #:test-flags #~(list "-m" "not needs_internet"
13531 ;; This attempts to load libGL.so (provided by mesa)
13532 ;; at the Python store path (sys.base_prefix?).
13533 "-k" "not test_findlib2"
13534 "--ignore" "tests/test_freeimage.py")
13535 #:phases
13536 #~(modify-phases %standard-phases
13537 (add-after 'unpack 'fix-source
13538 (lambda* (#:key inputs #:allow-other-keys)
13539 (substitute* "imageio/core/util.py"
13540 (("\"/var/tmp\"")
13541 "os.getenv(\"TMPDIR\", \"/tmp\")")))))))
13542 (propagated-inputs
13543 (list python-imageio-ffmpeg python-numpy python-pillow python-tifffile))
13544 (native-inputs
13545 (list python-fsspec
13546 python-pytest
13547 python-setuptools))
13548 (home-page "https://imageio.github.io/")
13549 (synopsis "Library for reading and writing a wide range of image data")
13550 (description
13551 "Imageio is a Python library that provides an easy interface to read and
13552write a wide range of image data, including animated images, video, volumetric
13553data, and scientific formats.")
13554 (license license:bsd-2)))
13555
13556(define-public python-pyvips
13557 (package
13558 (name "python-pyvips")
13559 (version "3.0.0")
13560 (source
13561 (origin
13562 (method git-fetch) ; PyPI does not include test helpers
13563 (uri (git-reference
13564 (url "https://github.com/libvips/pyvips")
13565 (commit (string-append "v" version))))
13566 (file-name (git-file-name name version))
13567 (sha256
13568 (base32 "017x7i8ssghsdpncjfhk5shdq31784hb5xjalrxl918s86rjwakp"))))
13569 (build-system pyproject-build-system)
13570 (native-inputs
13571 (list pkg-config
13572 python-pytest
13573 python-setuptools
13574 python-wheel))
13575 (inputs
13576 (list glib vips))
13577 (propagated-inputs
13578 (list python-cffi python-pkgconfig))
13579 (home-page "https://github.com/libvips/pyvips")
13580 (synopsis "Python bindings for VIPS")
13581 (description "The @code{pyvips} package provides Python bindings for VIPS,
13582a multithreaded image-processing system with low memory needs.")
13583 (license license:expat)))
13584
13585;; WARNING: This package is a dependency of mesa.
13586;; There are no users in python-xyz for this package, consider to adopt closer
13587;; to Mesa.
13588(define-public python-pycparser
13589 (package
13590 (name "python-pycparser")
13591 (version "2.22")
13592 (source
13593 (origin
13594 (method url-fetch)
13595 (uri (pypi-uri "pycparser" version))
13596 (sha256
13597 (base32
13598 "1xhhxjg460f70ldki4prxmb7zl1bfl3mnjplbc7kkxa0q3lqn729"))))
13599 (outputs '("out" "doc"))
13600 (build-system pyproject-build-system)
13601 (arguments
13602 (list
13603 #:test-backend #~'unittest
13604 #:phases
13605 #~(modify-phases %standard-phases
13606 (add-after 'install 'install-doc
13607 (lambda _
13608 (let* ((data (string-append #$output:doc "/share"))
13609 (doc (string-append data "/doc/" #$name "-" #$version))
13610 (examples (string-append doc "/examples")))
13611 (mkdir-p examples)
13612 (for-each (lambda (file)
13613 (copy-file (string-append "." file)
13614 (string-append doc file)))
13615 '("/README.rst" "/CHANGES" "/LICENSE"))
13616 (copy-recursively "examples" examples)))))))
13617 (native-inputs
13618 (list python-setuptools))
13619 (home-page "https://github.com/eliben/pycparser")
13620 (synopsis "C parser in Python")
13621 (description
13622 "Pycparser is a complete parser of the C language, written in pure Python
13623using the PLY parsing library. It parses C code into an AST and can serve as
13624a front-end for C compilers or analysis tools.")
13625 (license license:bsd-3)))
13626
13627(define-public python-pywavelets
13628 (package
13629 (name "python-pywavelets")
13630 (version "1.8.0")
13631 (home-page "https://github.com/PyWavelets/pywt")
13632 (source (origin
13633 (method url-fetch)
13634 (uri (pypi-uri "pywavelets" version))
13635 (sha256
13636 (base32
13637 "1aimbjxvflmx4qrl17bfzy64pz5ql4s9bhnb8g0ssh28fm2h507k"))))
13638 (build-system pyproject-build-system)
13639 (arguments
13640 (list
13641 #:test-flags '(list "--pyargs" "pywt")
13642 #:phases
13643 #~(modify-phases %standard-phases
13644 ;; The compiled libraries are only in the output at this point,
13645 ;; but they are needed to run tests.
13646 ;; FIXME: This should be handled by the pyargs pytest argument,
13647 ;; but is not for some reason.
13648 (add-before 'check 'pre-check
13649 (lambda _ (chdir #$output))))))
13650 (native-inputs
13651 (list meson
13652 ninja
13653 pkg-config
13654 python-cython
13655 python-meson-python
13656 python-numpy
13657 python-pytest))
13658 (propagated-inputs
13659 (list python-numpy python-scipy))
13660 (synopsis "Wavelet transforms in Python")
13661 (description
13662 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
13663mathematical basis functions that are localized in both time and frequency.
13664Wavelet transforms are time-frequency transforms employing wavelets. They are
13665similar to Fourier transforms, the difference being that Fourier transforms are
13666localized only in frequency instead of in time and frequency.")
13667 (license license:expat)))
13668
13669(define-public python-pywal
13670 (package
13671 (name "python-pywal")
13672 (version "3.3.0")
13673 (source
13674 (origin
13675 (method git-fetch)
13676 (uri (git-reference
13677 (url "https://github.com/dylanaraps/pywal")
13678 (commit version)))
13679 (file-name (git-file-name name version))
13680 (sha256
13681 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
13682 (build-system pyproject-build-system)
13683 (arguments
13684 `(#:phases
13685 (modify-phases %standard-phases
13686 (add-before 'check 'fix-home-directory
13687 (lambda _
13688 ;; Tests fail with "Permission denied: '/homeless-shelter'".
13689 (setenv "HOME" "/tmp"))))))
13690 (native-inputs
13691 (list python-pytest
13692 python-setuptools))
13693 (inputs
13694 (list imagemagick))
13695 (home-page "https://github.com/dylanaraps/pywal")
13696 (synopsis "Color palette generator and applicator")
13697 (description
13698 "Pywal is a tool that generates a color palette from the dominant colors
13699in an image. It then applies the colors system-wide and on-the-fly in all of
13700your favourite programs.")
13701 (license license:expat)))
13702
13703(define-public python-pywal16
13704 (package
13705 (name "python-pywal16")
13706 (version "3.8.10")
13707 (source
13708 (origin
13709 (method url-fetch)
13710 (uri (pypi-uri "pywal16" version))
13711 (sha256
13712 (base32 "0836ya6zw0dglh0yldd9apsfvh5f9cxvmy8nc7aw2w8s491yancf"))))
13713 (build-system pyproject-build-system)
13714 (arguments
13715 (list
13716 #:phases
13717 '(modify-phases %standard-phases
13718 (add-before 'check 'set-HOME
13719 (lambda _ (setenv "HOME" "/tmp"))))))
13720 (native-inputs
13721 (list imagemagick
13722 python-pytest
13723 python-setuptools))
13724 (home-page "https://github.com/eylles/pywal16")
13725 (synopsis "16 colors fork of pywal")
13726 (description
13727 "Pywal16 is a tool that generates a color palette from the dominant
13728colors in an image. It then applies the colors system-wide and on-the-fly in
13729all of your favorite programs.")
13730 (license license:expat)))
13731
13732(define-public python-click-didyoumean
13733 (package
13734 (name "python-click-didyoumean")
13735 (version "0.3.1")
13736 (source
13737 (origin
13738 (method git-fetch) ;no tests in PyPI archive
13739 (uri (git-reference
13740 (url "https://github.com/click-contrib/click-didyoumean")
13741 (commit (string-append "v" version))))
13742 (file-name (git-file-name name version))
13743 (sha256
13744 (base32 "1byfqs3m87zfpvssm1al9dvq94gjd0iddpwrzk6205n18wjsphqb"))))
13745 (build-system pyproject-build-system)
13746 (native-inputs
13747 (list python-poetry-core python-pytest))
13748 (propagated-inputs
13749 (list python-click))
13750 (home-page "https://github.com/timofurrer/click-didyoumean")
13751 (synopsis "Git-like did-you-mean feature in Click")
13752 (description
13753 "This plugin enables git-like did-you-mean feature in Click.")
13754 (license license:expat)))
13755
13756(define-public python-pywinrm
13757 (package
13758 (name "python-pywinrm")
13759 (version "0.5.0")
13760 (source
13761 (origin
13762 (method git-fetch)
13763 (uri (git-reference
13764 (url "https://github.com/diyan/pywinrm/")
13765 (commit (string-append "v" version))))
13766 (file-name (git-file-name name version))
13767 (sha256
13768 (base32 "0jp7rps6zg5b6n98lfkwbhv72982sxxnqc4v4i6hjlq1ycjmmb8r"))))
13769 (build-system pyproject-build-system)
13770 (propagated-inputs
13771 (list python-requests python-requests-ntlm python-xmltodict))
13772 (native-inputs
13773 (list python-mock python-pytest python-setuptools))
13774 (home-page "https://github.com/diyan/pywinrm/")
13775 (synopsis "Python library for Windows Remote Management (WinRM)")
13776 (description
13777 "pywinrm is a Python client for the Windows Remote Management (WinRM)
13778service. It allows you to invoke commands on target Windows machines from
13779any machine that can run Python.")
13780 (license license:expat)))
13781
13782(define-public python-manimpango
13783 (package
13784 (name "python-manimpango")
13785 (version "0.5.0")
13786 (source
13787 (origin
13788 (method git-fetch) ; no tests data in PyPi package
13789 (uri (git-reference
13790 (url "https://github.com/ManimCommunity/ManimPango")
13791 (commit (string-append "v" version))))
13792 (file-name (git-file-name name version))
13793 (sha256
13794 (base32 "00mrvswk8yly0m13jq0f432pr19sy3j6w37lrv78ah1j6jz9n50h"))))
13795 (build-system pyproject-build-system)
13796 (arguments
13797 (list
13798 #:phases
13799 #~(modify-phases %standard-phases
13800 (add-before 'check 'build-extensions
13801 (lambda _
13802 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
13803 (native-inputs
13804 (list pkg-config
13805 python-cython
13806 python-pytest
13807 python-pytest-cov
13808 python-setuptools
13809 python-wheel))
13810 (inputs
13811 (list pango))
13812 (home-page "https://manimpango.manim.community/")
13813 (synopsis "Bindings for Pango for using with Manim")
13814 (description
13815 "Python bindings for ManimPango which is a C binding for Pango,
13816using Cython.
13817
13818ManimPango is internally used in Manim to render (non-LaTeX) text.")
13819 (license license:expat)))
13820
13821(define-public python-cairocffi
13822 (package
13823 (name "python-cairocffi")
13824 (version "1.7.1")
13825 (source
13826 (origin
13827 ;; The PyPI archive does not include the documentation, so use Git.
13828 (method git-fetch)
13829 (uri (git-reference
13830 (url "https://github.com/Kozea/cairocffi")
13831 (commit (string-append "v" version))))
13832 (file-name (git-file-name name version))
13833 (sha256
13834 (base32
13835 "08ilpzf1027f5w461yx2cg0ky64pd41kclfklyn8n292dmc9sk4g"))))
13836 (build-system pyproject-build-system)
13837 (outputs '("out" "doc"))
13838 (inputs
13839 (list glib gtk+ gdk-pixbuf cairo))
13840 (native-inputs
13841 (list python-flit-core
13842 python-numpy
13843 python-pikepdf
13844 python-pytest
13845 python-pytest-cov
13846 python-pytest-runner
13847 python-sphinx
13848 python-sphinx-rtd-theme))
13849 (propagated-inputs
13850 (list python-xcffib)) ; used at run time
13851 (arguments
13852 (list
13853 #:phases
13854 #~(modify-phases %standard-phases
13855 (add-after 'unpack 'patch-paths
13856 (lambda* (#:key inputs #:allow-other-keys)
13857 (substitute* "cairocffi/__init__.py"
13858 ;; Hack the dynamic library loading mechanism.
13859 (("find_library\\(library_name\\)")
13860 "\"found\"")
13861 (("filenames = \\(library_filename,\\) \\+ filenames")
13862 "pass")
13863 (("libcairo.so.2")
13864 (search-input-file inputs "/lib/libcairo.so.2")))
13865 (substitute* "cairocffi/pixbuf.py"
13866 (("libgdk_pixbuf-2.0.so.0")
13867 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
13868 (("libgobject-2.0.so.0")
13869 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
13870 (("libglib-2.0.so.0")
13871 (search-input-file inputs "/lib/libglib-2.0.so.0"))
13872 (("libgdk-3.so.0")
13873 (search-input-file inputs "/lib/libgdk-3.so.0")))))
13874 (add-after 'install 'install-doc
13875 (lambda* (#:key inputs #:allow-other-keys)
13876 (let* ((data (string-append #$output:doc "/share"))
13877 (doc (string-append data "/doc/" #$name "-" #$version))
13878 (html (string-append doc "/html")))
13879 (setenv "LD_LIBRARY_PATH"
13880 (string-append (assoc-ref inputs "cairo") "/lib" ":"
13881 (assoc-ref inputs "gdk-pixbuf") "/lib"))
13882 (setenv "LANG" "en_US.UTF-8")
13883 (mkdir-p html)
13884 (for-each (lambda (file)
13885 (copy-file (string-append "." file)
13886 (string-append doc file)))
13887 '("/README.rst" "/NEWS.rst"))
13888 (system* "python" "setup.py" "build_sphinx")
13889 (copy-recursively "docs/_build/html" html)))))))
13890 (home-page "https://github.com/Kozea/cairocffi")
13891 (synopsis "Python bindings and object-oriented API for Cairo")
13892 (description
13893 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
13894Python bindings and object-oriented API for cairo. Cairo is a 2D vector
13895graphics library with support for multiple backends including image buffers,
13896PNG, PostScript, PDF, and SVG file output.")
13897 (license license:bsd-3)))
13898
13899(define-public python-decorator
13900 (package
13901 (name "python-decorator")
13902 (version "5.2.1")
13903 (source
13904 (origin
13905 (method url-fetch)
13906 (uri (pypi-uri "decorator" version))
13907 (sha256
13908 (base32 "0q03vavcj2hxnv6006wiqnw7bbqq8rpw90yclyq39xsj6wa6dwk5"))))
13909 (build-system pyproject-build-system)
13910 (arguments
13911 (list #:test-backend #~'custom
13912 #:test-flags #~(list "tests/test.py")))
13913 (native-inputs
13914 (list python-setuptools))
13915 (home-page "https://pypi.org/project/decorator/")
13916 (synopsis "Python module to simplify usage of decorators")
13917 (description
13918 "The aim of the decorator module is to simplify the usage of decorators
13919for the average programmer, and to popularize decorators usage giving examples
13920of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
13921etc. The core of this module is a decorator factory.")
13922 (license license:expat)))
13923
13924(define-public python-drmaa
13925 (package
13926 (name "python-drmaa")
13927 (version "0.7.7")
13928 (source
13929 (origin
13930 (method url-fetch)
13931 (uri (pypi-uri "drmaa" version))
13932 (sha256
13933 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
13934 (build-system pyproject-build-system)
13935 ;; The test suite requires libdrmaa which is provided by the cluster
13936 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
13937 ;; should be set to the path of the libdrmaa library.
13938 (arguments
13939 (list
13940 #:tests? #f
13941 #:phases
13942 #~(modify-phases %standard-phases
13943 ;; Loading the library fails because DRMAA_LIBRARY_PATH
13944 ;; is not configured.
13945 (delete 'sanity-check))))
13946 (native-inputs (list python-setuptools))
13947 (home-page "https://pypi.org/project/drmaa/")
13948 (synopsis "Python bindings for the DRMAA library")
13949 (description
13950 "A Python package for Distributed Resource Management (DRM) job
13951submission and control. This package is an implementation of the DRMAA 1.0
13952Python language binding specification.")
13953 (license license:bsd-3)))
13954
13955(define-public python-grako
13956 (package
13957 (name "python-grako")
13958 (version "3.99.9")
13959 (source
13960 (origin
13961 (method url-fetch)
13962 (uri (pypi-uri "grako" version ".zip"))
13963 (sha256
13964 (base32 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))
13965 (snippet
13966 #~(begin (use-modules (guix build utils))
13967 (substitute* "grako/grammars.py"
13968 (("from collections import defaultdict, Mapping")
13969 (string-append "from collections import defaultdict\n"
13970 "from collections.abc import Mapping")))
13971 (substitute* '("grako/util.py"
13972 "grako/walkers.py")
13973 (("collections\\.Mapping") "collections.abc.Mapping"))))))
13974 (build-system pyproject-build-system)
13975 ;; XXX: Test file 'grako.ebnf' is missing from archive.
13976 (arguments (list #:tests? #f))
13977 (native-inputs (list unzip python-pytest python-setuptools))
13978 (home-page "https://pypi.org/project/grako")
13979 (synopsis "EBNF parser generator")
13980 (description
13981 "Grako takes a grammar in a variation of EBNF as input, and outputs a
13982memoizing PEG/Packrat parser in Python.")
13983 (license license:bsd-3)))
13984
13985(define-public python-grandalf
13986 (package
13987 (name "python-grandalf")
13988 ;; `guix refresh` will try to upgrade to v0.55555, but that is older.
13989 (version "0.8")
13990 (source
13991 (origin
13992 (method git-fetch)
13993 (uri (git-reference
13994 (url "https://github.com/bdcht/grandalf")
13995 (commit (string-append "v" version))))
13996 (file-name (git-file-name name version))
13997 (sha256
13998 (base32
13999 "199f86hz3g4p237ma4j27rzwmska3bxzsbgq20i4l4pczf9v7ax0"))))
14000 (build-system pyproject-build-system)
14001 (arguments
14002 (list
14003 #:phases
14004 #~(modify-phases %standard-phases
14005 (add-before 'build 'patch-requirements
14006 (lambda _
14007 (substitute* "setup.py"
14008 (("install_requires=\\['pyparsing'],") "")))))))
14009 (native-inputs
14010 (list python-setuptools python-pytest))
14011 (propagated-inputs
14012 (list python-numpy python-ply))
14013 (home-page "https://github.com/bdcht/grandalf")
14014 (synopsis "Graph and drawing algorithms framework")
14015 (description
14016 "Grandalf is a Python package made for experimentations with graphs
14017drawing algorithms. It is written in pure Python, and currently implements
14018two layouts: the Sugiyama hierarchical layout and the force-driven or energy
14019minimization approach. While not as fast or featured as graphviz or other
14020libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
14021than thousands of nodes, while keeping the source code simple enough to tweak
14022and hack any part of it for experimental purpose. With a total of about 1500
14023lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
14024in less than 600 lines. The energy minimization approach is comprised of only
14025250 lines!
14026
14027Grandalf does only 2 not-so-simple things:
14028@itemize
14029@item computing the nodes (x,y) coordinates (based on provided nodes
14030dimensions, and a chosen layout)
14031@item routing the edges with lines or nurbs
14032@end itemize
14033
14034It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
14035will help you find where to draw things like nodes and edges, but it’s up to
14036you to actually draw things with your favorite toolkit.")
14037 ;; The user can choose either license.
14038 (license (list license:gpl2 license:epl1.0))))
14039
14040(define-public python-gridmap
14041 (package
14042 (name "python-gridmap")
14043 (version "0.15.0")
14044 (source
14045 (origin
14046 (method git-fetch)
14047 (uri (git-reference
14048 (url "https://github.com/pygridtools/gridmap")
14049 (commit (string-append "v" version))))
14050 (file-name (git-file-name name version))
14051 (sha256
14052 (base32 "0w1sxvhv5ldbzkx70q7036yvny0zsylc4zj7nzmp3nhjdl8whlrm"))))
14053 (build-system pyproject-build-system)
14054 (arguments
14055 (list #:tests? #f ;XXX: freezes or timeout
14056 #:test-backend #~'nose))
14057 (native-inputs
14058 (list ;; python-pynose
14059 python-setuptools))
14060 (propagated-inputs
14061 (list python-cherrypy
14062 python-cloudpickle
14063 python-psutil
14064 python-drmaa
14065 python-pyzmq))
14066 (home-page "https://github.com/pygridtools/gridmap")
14067 (synopsis "Create jobs on a cluster directly from Python")
14068 (description
14069 "Gridmap is a Python package to allow you to easily create jobs on the
14070cluster directly from Python. You can directly map Python functions onto the
14071cluster without needing to write any wrapper code yourself.")
14072 (license license:gpl3+)))
14073
14074(define-public python-honcho
14075 (package
14076 (name "python-honcho")
14077 (version "2.0.0")
14078 (source
14079 (origin
14080 (method git-fetch)
14081 (uri (git-reference
14082 (url "https://github.com/nickstenning/honcho")
14083 (commit (string-append "v" version))))
14084 (file-name (git-file-name name version))
14085 (sha256
14086 (base32 "0hdp4cr6imxrlyg9x9xj5r6qdmgi63ffvmqjrr1kjs3qapan6s4l"))))
14087 (build-system pyproject-build-system)
14088 (arguments
14089 ;; Tests below fail with the error
14090 ;; ValueError: The 'honcho.export.xxx' package was not installed
14091 ;; in a way that PackageLoader understands.
14092 ;; Probably safe because it's testing for different init systems.
14093 (list #:test-flags #~(list "--ignore" "tests/integration/test_export.py"
14094 "--ignore" "tests/test_export_runit.py"
14095 "--ignore" "tests/test_export_supervisord.py"
14096 "--ignore" "tests/test_export_systemd.py"
14097 "--ignore" "tests/test_export_upstart.py")))
14098 (native-inputs
14099 (list python-jinja2 python-mock python-pytest python-setuptools python-wheel))
14100 (propagated-inputs
14101 (list python-colorama))
14102 (home-page "https://github.com/nickstenning/honcho")
14103 (synopsis "Manage Procfile-based applications")
14104 (description
14105 "A Procfile is a file which describes how to run an application
14106consisting of several processes. honcho starts all listed processes.
14107The output of all running processes is collected by honcho and
14108displayed.")
14109 (license license:expat)))
14110
14111(define-public python-hsluv
14112 (package
14113 (name "python-hsluv")
14114 (version "5.0.4")
14115 (source
14116 (origin
14117 (method url-fetch)
14118 (uri (pypi-uri "hsluv" version))
14119 (sha256
14120 (base32 "0bmpd7qxcvin8szblilxmw50v7mygf6a6i180h82123s893gk092"))))
14121 (build-system pyproject-build-system)
14122 (native-inputs
14123 (list python-pytest python-setuptools))
14124 (home-page "https://www.hsluv.org")
14125 (synopsis "Human-friendly HSL colour space implemented in Python")
14126 (description
14127 "Human-friendly @acronym{Hue Saturation Lightness,HSL}. HSLuv extends
14128@url{http://en.wikipedia.org/wiki/CIELUV,CIELUV} with a new saturation
14129component that allows you to span all the available chroma as a neat
14130percentage.")
14131 (license license:expat)))
14132
14133(define-public python-pebble
14134 (package
14135 (name "python-pebble")
14136 (version "5.1.3")
14137 (source
14138 (origin
14139 (method git-fetch)
14140 (uri (git-reference
14141 (url "https://github.com/noxdafox/pebble")
14142 (commit version)))
14143 (file-name (git-file-name name version))
14144 (sha256
14145 (base32 "1x3rvgm5b0g33xlh8w68r50zwqrdwjafwri8y2lzxny8y4i01ffp"))))
14146 (build-system pyproject-build-system)
14147 (native-inputs (list python-pytest python-setuptools))
14148 (home-page "https://github.com/noxdafox/pebble")
14149 (synopsis "Threading and multiprocessing for Python")
14150 (description
14151 "Pebble aims to help manage threads and processes in an easier way. It
14152wraps Python's standard library threading and multiprocessing objects.")
14153 (license license:lgpl3+)))
14154
14155(define-public python-pexpect
14156 (package
14157 (name "python-pexpect")
14158 (version "4.9.0")
14159 (source
14160 (origin
14161 (method url-fetch)
14162 (uri (pypi-uri "pexpect" version))
14163 (sha256
14164 (base32 "03ykxacc64ijldbpa31v5lxw93an0z0xmhm21q2i369w7w942zgf"))))
14165 (build-system pyproject-build-system)
14166 (arguments
14167 (list
14168 #:test-flags
14169 #~(list "-k" (string-join
14170 (list
14171 ;; Disable failing test, see
14172 ;; <https://github.com/pexpect/pexpect/issues/568>.
14173 "not test_bash"
14174 ;; Fails with attempt to find OpenSSL.
14175 "test_large_stdout_stream"
14176 ;; Tests fail while trying to find
14177 ;; tmp-pexpect-xxxxxxxxxxxx directories.
14178 "test_run_uses_env"
14179 "test_run_uses_env_path"
14180 "test_run_uses_env_path_over_path"
14181 "test_spawn_uses_env"
14182 ;; Fails with assertion error: assert 0 == 500
14183 "test_before_across_chunks"
14184 ;; Bash is enough for tests.
14185 "test_zsh")
14186 " and not "))
14187 #:phases
14188 #~(modify-phases %standard-phases
14189 (add-before 'check 'prepare-tests
14190 (lambda _
14191 (substitute* (find-files "tests")
14192 (("/bin/bash") (which "bash"))
14193 (("/bin/echo") (which "echo"))
14194 (("/bin/ls") (which "ls"))
14195 (("/bin/which") (which "which"))
14196 ;; Many tests try to use the /bin directory which is not
14197 ;; present in the build environment. Use one that's non-empty
14198 ;; and unlikely to change.
14199 (("/bin'") "/dev'")))))))
14200 (native-inputs
14201 (list bash ;full Bash for 'test_replwrap.py'
14202 man-db
14203 python-pytest
14204 python-setuptools
14205 python-wheel
14206 which))
14207 (propagated-inputs
14208 (list python-ptyprocess))
14209 (home-page "https://pexpect.readthedocs.org/")
14210 (synopsis "Controlling interactive console applications")
14211 (description
14212 "Pexpect is a pure Python module for spawning child applications;
14213controlling them; and responding to expected patterns in their output. Pexpect
14214works like Don Libes’ Expect. Pexpect allows your script to spawn a child
14215application and control it as if a human were typing commands.")
14216 (license license:isc)))
14217
14218(define-public python-sexpdata
14219 (package
14220 (name "python-sexpdata")
14221 (version "1.0.2")
14222 (source
14223 (origin
14224 (method url-fetch)
14225 (uri (pypi-uri "sexpdata" version))
14226 (sha256
14227 (base32
14228 "02f1v96wzqf3jgwbp1fvankszkzvyff53fa4ks7nyxpnc41ppdlj"))))
14229 (build-system pyproject-build-system)
14230 (arguments
14231 (list #:tests? #f)) ; no tests
14232 (native-inputs (list python-setuptools python-wheel))
14233 (home-page "https://github.com/jd-boyd/sexpdata")
14234 (synopsis "S-expression parser for Python")
14235 (description
14236 "Sexpdata is an S-expression parser/serializer. It has load and dump
14237functions like pickle, json or PyYAML module.")
14238 (license license:bsd-3)))
14239
14240(define-public python-pathable
14241 (package
14242 (name "python-pathable")
14243 (version "0.4.3")
14244 (source
14245 (origin
14246 (method url-fetch)
14247 (uri (pypi-uri "pathable" version))
14248 (sha256
14249 (base32 "1ayw9jzlw0qrz51rcfbba00xqq0c7vs3lgwrib67c1z5bcqrv1jw"))))
14250 (build-system pyproject-build-system)
14251 (arguments (list #:tests? #false)) ;there are none
14252 (native-inputs (list python-poetry-core))
14253 (home-page "https://github.com/p1c2u/pathable")
14254 (synopsis "Object-oriented paths")
14255 (description "With this package you can traverse resources like paths and
14256access resources on demand with separate accessor layer.")
14257 (license license:asl2.0)))
14258
14259(define-public python-importlib-resources
14260 (package
14261 (name "python-importlib-resources")
14262 (version "6.5.2")
14263 (source (origin
14264 (method url-fetch)
14265 (uri (pypi-uri "importlib_resources" version))
14266 (sha256
14267 (base32
14268 "0b7dizkjyjpwqm2dsmb40fy7iskwl3xv93yr9622ik2vxynqfpqq"))))
14269 (build-system pyproject-build-system)
14270 (native-inputs
14271 (list python-jaraco-test
14272 python-jaraco-collections
14273 python-pytest
14274 python-setuptools
14275 python-setuptools-scm
14276 python-zipp))
14277 (home-page "https://importlib-resources.readthedocs.io/")
14278 (synopsis "Read resources from Python packages")
14279 (description
14280 "@code{importlib_resources} is a backport of Python 3's standard library
14281@code{importlib.resources} module for Python 2.7, and Python 3.")
14282 (license license:asl2.0)))
14283
14284(define-public python-importlib-metadata
14285 (package
14286 (name "python-importlib-metadata")
14287 (version "8.7.0")
14288 (source
14289 (origin
14290 (method url-fetch)
14291 (uri (pypi-uri "importlib_metadata" version))
14292 (sha256
14293 (base32
14294 "004h71gl22rg57wxd0hgy72pdksn62ng4waldjhhm29v4anq2fyi"))))
14295 (build-system pyproject-build-system)
14296 (arguments
14297 (list #:test-flags #~(list "tests")))
14298 (native-inputs
14299 (list python-jaraco-test
14300 python-packaging-bootstrap
14301 python-pyfakefs
14302 python-pytest-bootstrap
14303 python-setuptools
14304 python-setuptools-scm))
14305 (propagated-inputs
14306 (list python-zipp))
14307 (home-page "https://importlib-metadata.readthedocs.io/")
14308 (synopsis "Read metadata from Python packages")
14309 (description
14310 "@code{importlib_metadata} is a library which provides an API for
14311accessing an installed Python package's metadata, such as its entry points or
14312its top-level name. This functionality intends to replace most uses of
14313@code{pkg_resources} entry point API and metadata API. Along with
14314@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
14315need to use the older and less efficient @code{pkg_resources} package.")
14316 (license license:asl2.0)))
14317
14318(define-public python-importlib-metadata-argparse-version
14319 (package
14320 (name "python-importlib-metadata-argparse-version")
14321 (version "2.0.1")
14322 (home-page
14323 "https://github.com/mondeja/importlib-metadata-argparse-version")
14324 (source
14325 (origin
14326 (method git-fetch)
14327 (uri (git-reference
14328 (url home-page)
14329 (commit (string-append "v" version))))
14330 (file-name (git-file-name name version))
14331 (sha256
14332 (base32 "02jbfv7xkd4lhdcsr232b6x8xcpv93micz7848fhi5946grvm1j2"))))
14333 (build-system pyproject-build-system)
14334 (native-inputs (list python-pytest python-hatchling))
14335 (synopsis "Get Python package version more efficiently")
14336 (description
14337 "This package provides an @code{argparse} action to define CLI version
14338with a delayed call to @code{importlib.metadata}, avoiding to load this module
14339when not needed.")
14340 (license license:bsd-3)))
14341
14342(define-public python-importmagic
14343 (package
14344 (name "python-importmagic")
14345 (version "0.1.7")
14346 (source
14347 (origin
14348 (method git-fetch)
14349 (uri (git-reference
14350 (url "https://github.com/alecthomas/importmagic")
14351 (commit version)))
14352 (file-name (git-file-name name version))
14353 (sha256
14354 (base32 "1asijinpirq9ips9drsibyg2bj6qbpryz27n91akhvmzn78pbz7s"))))
14355 (build-system pyproject-build-system)
14356 (native-inputs (list python-pytest python-setuptools))
14357 (home-page "https://github.com/alecthomas/importmagic")
14358 (synopsis "Library for adding, removing and managing Python imports")
14359 (description
14360 "Importmagic is a Python library for automatically managing imports by
14361finding unresolved symbols in Python code and their corresponding imports.")
14362 (license license:bsd-3)))
14363
14364(define-public python-inotify-simple
14365 (package
14366 (name "python-inotify-simple")
14367 (version "1.3.5")
14368 (source
14369 (origin
14370 (method git-fetch)
14371 (uri (git-reference
14372 (url "https://github.com/chrisjbillington/inotify_simple")
14373 (commit version)))
14374 (file-name (git-file-name name version))
14375 (sha256
14376 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
14377 (build-system pyproject-build-system)
14378 (arguments
14379 (list
14380 #:test-backend #~'custom
14381 #:test-flags #~(list "example.py")))
14382 (native-inputs (list python-setuptools))
14383 (home-page "https://github.com/chrisjbillington/inotify_simple")
14384 (synopsis "Simple wrapper around inotify library")
14385 (description
14386 "@code{inotify-simple} is a simple wrapper around inotify library.")
14387 (license license:bsd-3)))
14388
14389(define-public python-interface-meta
14390 (package
14391 (name "python-interface-meta")
14392 (version "1.3.0")
14393 (source
14394 (origin
14395 (method url-fetch)
14396 (uri (pypi-uri "interface_meta" version))
14397 (sha256
14398 (base32 "18brkmz2ssjikkrkb23cwccp683yi6y1alfdbmjvjgxpppw96i4a"))))
14399 (build-system pyproject-build-system)
14400 (native-inputs (list python-poetry-core python-pytest))
14401 (home-page "https://github.com/matthewwardrop/interface_meta")
14402 (synopsis
14403 "API for enforced method signatures and consistent documentation")
14404 (description
14405 "This package provides a convenient way to expose an extensible API with
14406enforced method signatures and consistent documentation.")
14407 (license license:expat)))
14408
14409(define-public python-jaraco-classes
14410 (package
14411 (name "python-jaraco-classes")
14412 (version "3.4.0")
14413 (source
14414 (origin
14415 (method url-fetch)
14416 (uri (pypi-uri "jaraco.classes" version))
14417 (sha256
14418 (base32 "1k9s7wxhsy15730qab8bry7kpgl4yk3wch45ikfw0f823nsj9827"))))
14419 (build-system pyproject-build-system)
14420 (arguments
14421 (list ; Do not test the myproject.toml build as it pulls dependencies.
14422 #:test-flags '(list "-k" "not project")))
14423 (native-inputs
14424 (list python-pytest
14425 python-setuptools))
14426 (propagated-inputs
14427 (list python-more-itertools))
14428 (home-page "https://github.com/jaraco/jaraco.classes")
14429 (synopsis "Utility functions for Python class constructs")
14430 (description "This Python library contains utility functions for Python
14431class constructs.")
14432 (license license:expat)))
14433
14434(define-public python-jaraco-collections
14435 (package
14436 (name "python-jaraco-collections")
14437 (version "5.2.1")
14438 (source
14439 (origin
14440 (method url-fetch)
14441 (uri (pypi-uri "jaraco_collections" version))
14442 (sha256
14443 (base32 "1v8qza70spm4d822bm7wq3j2cyd33nqg2i87n99spw6np9q1kf6s"))))
14444 (build-system pyproject-build-system)
14445 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
14446 ;; download dependencies.
14447 (arguments
14448 '(#:test-flags '("-k" "not project")))
14449 (native-inputs
14450 (list python-pytest
14451 python-setuptools
14452 python-setuptools-scm
14453 python-wheel))
14454 (propagated-inputs
14455 (list python-jaraco-text))
14456 (home-page "https://github.com/jaraco/jaraco.collections")
14457 (synopsis "Provides various collection objects")
14458 (description
14459 "This package provides models and classes to supplement the
14460standard library @code{collections} module. Examples include
14461@itemize
14462@item
14463RangeMap: A mapping that accepts a range of values for keys.
14464@item
14465Projection: A subset over an existing mapping.
14466@item
14467KeyTransformingDict: Generalized mapping with keys transformed by a function.
14468@item
14469FoldedCaseKeyedDict: A dict whose string keys are case-insensitive.
14470@item
14471BijectiveMap: A map where keys map to values and values back to their keys.
14472@item
14473ItemsAsAttributes: A mapping mix-in exposing items as attributes.
14474@item
14475IdentityOverrideMap: A map whose keys map by default to themselves unless overridden.
14476@item
14477FrozenDict: A hashable, immutable map.
14478@item
14479Enumeration: An object whose keys are enumerated.
14480@item
14481Everything: A container that contains all things.
14482@item
14483Least, Greatest: Objects that are always less than or greater than any other.
14484@item
14485pop_all: Return all items from the mutable sequence and remove them from that sequence.
14486@item
14487DictStack: A stack of dicts, great for sharing scopes.
14488@item
14489WeightedLookup: A specialized RangeMap for selecting an item by weights.
14490@end itemize")
14491 (license license:expat)))
14492
14493(define-public python-jaraco-context
14494 (package
14495 (name "python-jaraco-context")
14496 (version "6.0.1")
14497 (source
14498 (origin
14499 (method url-fetch)
14500 (uri (pypi-uri "jaraco_context" version))
14501 (sha256
14502 (base32 "1cyija3n4481r1ykxdx342m07lrfyg4ygbn0in9i82yganjlxblv"))))
14503 (build-system pyproject-build-system)
14504 (arguments
14505 (list #:tests? #f)) ;no tests in PyPI archive and Git checkout
14506 (native-inputs
14507 (list python-setuptools
14508 python-setuptools-scm
14509 python-wheel))
14510 (propagated-inputs
14511 (list python-backports-tarfile))
14512 (home-page "https://github.com/jaraco/jaraco.context")
14513 (synopsis "Context managers Python library")
14514 (description "This Python library provides context managers-related
14515procedures.")
14516 (license license:expat)))
14517
14518(define-public python-jaraco-functools
14519 (package
14520 (name "python-jaraco-functools")
14521 (version "4.2.1")
14522 (source
14523 (origin
14524 (method url-fetch)
14525 (uri (pypi-uri "jaraco_functools" version))
14526 (sha256
14527 (base32 "0lvk12qbl5zd1ikr6xzflj1jcs3vwgmwgy2k63x5dkmbrjzllqxy"))))
14528 (build-system pyproject-build-system)
14529 (arguments
14530 (list #:tests? (not (%current-target-system))
14531 ;; Do not test the myproject.toml build as it pulls dependencies.
14532 ;; Do not run a test that tries to emulate a broken proprietary
14533 ;; CI set-up, fails to do so correctly, and then throws an error.
14534 #:test-flags
14535 '(list "-k" "not project and not test_function_throttled")))
14536 (native-inputs
14537 (list python-jaraco-classes
14538 python-pytest
14539 python-setuptools
14540 python-setuptools-scm
14541 python-wheel))
14542 (propagated-inputs (list python-more-itertools))
14543 (home-page "https://github.com/jaraco/jaraco.functools")
14544 (synopsis "Python library extending Python's @code{functools}")
14545 (description "This library extends the standard @code{functools} Python
14546module with a few extra procedures.")
14547 (license license:expat)))
14548
14549(define-public python-jaraco-packaging
14550 (package
14551 (name "python-jaraco-packaging")
14552 (version "9.4.0") ;the latest version compatible with [email protected]
14553 (source
14554 (origin
14555 (method url-fetch)
14556 (uri (pypi-uri "jaraco.packaging" version))
14557 (sha256
14558 (base32
14559 "1djpwmw2gmb6i9by1bc4lh4qlkvifgsqfj5alb9xz7pa80fcm416"))))
14560 (build-system pyproject-build-system)
14561 (arguments
14562 (list #:tests? #f)) ;no tests in PyPI archive
14563 (native-inputs
14564 (list python-setuptools
14565 python-setuptools-scm))
14566 (propagated-inputs
14567 (list python-pypa-build
14568 python-virtualenv
14569 python-domdf-python-tools
14570 python-jaraco-context
14571 python-sphinx))
14572 (home-page "https://github.com/jaraco/jaraco.packaging")
14573 (synopsis "Tools to supplement packaging Python releases")
14574 (description
14575 "This package provides various tools to supplement packaging Python
14576releases.")
14577 (license license:expat)))
14578
14579(define-public python-jaraco-path
14580 (package
14581 (name "python-jaraco-path")
14582 (version "3.7.2")
14583 (source
14584 (origin
14585 (method git-fetch)
14586 (uri (git-reference
14587 (url "https://github.com/jaraco/jaraco.path")
14588 (commit (string-append "v" version))))
14589 (file-name (git-file-name name version))
14590 (sha256
14591 (base32 "12bj9za1yp0yn0ppya6a4kwgmh7hvmw64x7ivp4y0sbv20r0vfdq"))))
14592 (build-system pyproject-build-system)
14593 (arguments
14594 (list
14595 #:phases
14596 #~(modify-phases %standard-phases
14597 (add-after 'unpack 'set-version
14598 (lambda _
14599 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
14600 (native-inputs
14601 (list python-pytest python-setuptools python-setuptools-scm))
14602 (home-page "https://github.com/jaraco/jaraco.path")
14603 (synopsis "Miscellaneous path functions")
14604 (description
14605 "This package provides miscellaneous path functions for Python.")
14606 (license license:expat)))
14607
14608(define-public python-jaraco-test
14609 (package
14610 (name "python-jaraco-test")
14611 (version "5.5.1")
14612 (source
14613 (origin
14614 (method url-fetch)
14615 (uri (pypi-uri "jaraco_test" version))
14616 (sha256
14617 (base32 "0xfkly5w4i4npi4pq1g32y8q8iijkq4pfcfs8wcjhfn4amj6212c"))))
14618 (build-system pyproject-build-system)
14619 (arguments
14620 (list #:test-flags '(list "-k" "http")))
14621 (native-inputs
14622 (list python-pytest
14623 python-setuptools))
14624 (propagated-inputs
14625 (list python-jaraco-collections
14626 python-jaraco-context
14627 python-jaraco-functools))
14628 (home-page "https://github.com/jaraco/jaraco.test")
14629 (synopsis "Testing support by jaraco")
14630 (description "This package provides testing support by jaraco.")
14631 (license license:expat)))
14632
14633(define-public python-jaraco-text
14634 (package
14635 (name "python-jaraco-text")
14636 (version "4.0.0")
14637 (source
14638 (origin
14639 (method url-fetch)
14640 (uri (pypi-uri "jaraco_text" version))
14641 (sha256
14642 (base32 "1c0dy5jvhigcyryi2h8n1m87dnhyxr7w01n9shwzkdlslv7gwwav"))))
14643 (build-system pyproject-build-system)
14644 ;; Do not test pyproject.toml with python-pytest-checkdocs as it tries to
14645 ;; download dependencies.
14646 (arguments
14647 '(#:test-flags '("-k" "not project")))
14648 (native-inputs
14649 (list python-pytest
14650 python-setuptools
14651 python-setuptools-scm))
14652 (propagated-inputs
14653 (list python-autocommand
14654 python-inflect
14655 python-jaraco-context
14656 python-jaraco-functools
14657 python-more-itertools))
14658 (home-page "https://github.com/jaraco/jaraco.text")
14659 (synopsis "Provides various routines for text manipulation")
14660 (description
14661 "This package provides handy routines for dealing with text,
14662such as wrapping, substitution, trimming, stripping, prefix and suffix
14663removal, line continuation, indentation, comment processing, identifier
14664processing, values parsing, case insensitive comparison, and more.")
14665 (license license:expat)))
14666
14667(define-public python-jaraco-vcs
14668 (package
14669 (name "python-jaraco-vcs")
14670 (version "2.4.1")
14671 (source
14672 (origin
14673 (method git-fetch)
14674 (uri (git-reference (url "https://github.com/jaraco/jaraco.vcs")
14675 (commit (string-append "v" version))))
14676 (file-name (git-file-name name version))
14677 (sha256 (base32 "1n9f0l4zp8dbbq2ha93bd9z6gb9y7gsmbd4jkl5gcm51qpsq4vpm"))))
14678 (build-system pyproject-build-system)
14679 (arguments
14680 (list
14681 #:test-flags
14682 ;; Ignore doctests.
14683 #~(list "--ignore-glob=jaraco/vcs/*.py")
14684 #:phases
14685 #~(modify-phases %standard-phases
14686 (add-after 'unpack 'set-version
14687 (lambda _
14688 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
14689 (propagated-inputs (list python-jaraco-classes
14690 python-jaraco-path
14691 python-jaraco-versioning
14692 python-more-itertools
14693 python-packaging
14694 python-dateutil
14695 python-tempora))
14696 (native-inputs (list python-pygments
14697 python-pytest
14698 python-pytest-home
14699 python-setuptools
14700 python-setuptools-scm))
14701 (home-page "https://github.com/jaraco/jaraco.vcs")
14702 (synopsis "Utilities for working with VCS repositories")
14703 (description
14704 "This package provides facilities for working with VCS repositories in
14705Python.")
14706 (license license:expat)))
14707
14708(define-public python-jaraco-versioning
14709 (package
14710 (name "python-jaraco-versioning")
14711 (version "1.1.0")
14712 (source
14713 (origin
14714 (method git-fetch)
14715 (uri (git-reference
14716 (url "https://github.com/jaraco/jaraco.versioning")
14717 (commit (string-append "v" version))))
14718 (file-name (git-file-name name version))
14719 (sha256
14720 (base32 "12svnpa5sl3r5lci9bybzy5gb8pd4clfkl65x5hsap00ada2w91r"))))
14721 (build-system pyproject-build-system)
14722 (arguments
14723 (list
14724 #:phases
14725 #~(modify-phases %standard-phases
14726 (add-after 'unpack 'set-version
14727 (lambda _
14728 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
14729 (propagated-inputs (list python-packaging))
14730 (native-inputs
14731 (list python-pytest python-setuptools python-setuptools-scm))
14732 (home-page "https://github.com/jaraco/jaraco.versioning")
14733 (synopsis "Version manipulation utils")
14734 (description
14735 "This package builds upon @code{python-packaging} to provide more
14736sophisticated version manipulation.")
14737 (license license:expat)))
14738
14739(define-public python-pypytools
14740 (package
14741 (name "python-pypytools")
14742 (version "0.6.2")
14743 (source
14744 (origin
14745 (method git-fetch)
14746 (uri (git-reference
14747 (url "https://github.com/antocuni/pypytools/")
14748 (commit version)))
14749 (file-name (git-file-name name version))
14750 (sha256
14751 (base32 "1nmq4gsw3hcayj2d96n8n166h0wnmp7n28fqswcn562hx57mlh05"))
14752 (patches (search-patches "python-pypytools-python-3-fixes.patch"))))
14753 (build-system pyproject-build-system)
14754 (arguments
14755 (list
14756 ;; These tests are using deprecated py.code module.
14757 #:test-flags
14758 #~(list
14759 "--deselect=pypytools/testing/test_codegen.py::test_def__default_args"
14760 "--deselect=pypytools/testing/test_codegen.py::test_def_"
14761 "--deselect=pypytools/testing/test_codegen.py::test_compile"
14762 "--ignore=pypytools/testing/test_unroll.py"
14763 ;; clone_func returns an object of the wrong type.
14764 "--deselect=pypytools/testing/test_util.py::test_clonefunc")))
14765 (native-inputs
14766 (list python-freezegun
14767 python-numpy
14768 python-pytest
14769 python-setuptools))
14770 (propagated-inputs (list python-py))
14771 (home-page "https://github.com/antocuni/pypytools/")
14772 (synopsis "Tools to use PyPy-specific features, with CPython fallbacks")
14773 (description
14774 "This package provides a collection of useful tools to use PyPy-specific
14775features, with CPython fallbacks.")
14776 (license license:x11)))
14777
14778(define-public python-simplegeneric
14779 (package
14780 (name "python-simplegeneric")
14781 (version "0.8.1")
14782 (source
14783 (origin
14784 (method url-fetch)
14785 (uri (pypi-uri "simplegeneric" version ".zip"))
14786 (sha256
14787 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
14788 (build-system pyproject-build-system)
14789 (arguments
14790 (list
14791 #:test-backend #~'custom
14792 #:test-flags #~(list "-m" "simplegeneric")))
14793 (native-inputs
14794 (list unzip python-setuptools))
14795 (home-page "https://cheeseshop.python.org/pypi/simplegeneric")
14796 (synopsis "Python module for simple generic functions")
14797 (description
14798 "The simplegeneric module lets you define simple single-dispatch generic
14799functions, akin to Python’s built-in generic functions like @code{len()},
14800@code{iter()} and so on. However, instead of using specially-named methods,
14801these generic functions use simple lookup tables, akin to those used by
14802e.g. @code{pickle.dump()} and other generic functions found in the Python
14803standard library.")
14804 (license license:zpl2.1)))
14805
14806(define-public python-ipython-genutils
14807 ;; TODO: This package is retired, check if can be removed, see description.
14808 (package
14809 (name "python-ipython-genutils")
14810 (version "0.1.0")
14811 (source
14812 (origin
14813 (method url-fetch)
14814 (uri (pypi-uri "ipython_genutils" version))
14815 (sha256
14816 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
14817 (build-system pyproject-build-system)
14818 (arguments `(#:tests? #f)) ; no tests
14819 (native-inputs
14820 (list python-setuptools))
14821 (home-page "https://ipython.org")
14822 (synopsis "Vestigial utilities from IPython")
14823 (description
14824 "This package provides retired utilities from IPython. No packages
14825outside IPython/Jupyter should depend on it.
14826
14827This package shouldn't exist. It contains some common utilities shared by
14828Jupyter and IPython projects during The Big Split. As soon as possible, those
14829packages will remove their dependency on this, and this package will go
14830away.")
14831 (license license:bsd-3)))
14832
14833;;; Variant used to break a cycle with python-ipykernel.
14834(define-public python-ipyparallel-bootstrap
14835 (hidden-package
14836 (package
14837 (name "python-ipyparallel-bootstrap")
14838 (version "9.0.1")
14839 (source
14840 (origin
14841 (method url-fetch)
14842 (uri (pypi-uri "ipyparallel" version))
14843 (sha256
14844 (base32 "177jk2g8srsddgyb4djbyci93v766vzrnqzzpd7ski804anjqn9f"))))
14845 (build-system pyproject-build-system)
14846 (arguments
14847 (list
14848 #:tests? #f
14849 #:phases #~(modify-phases %standard-phases
14850 ;; The python-ipykernel is normally propagated but is
14851 ;; removed from this package to break the cycle.
14852 (delete 'sanity-check))))
14853 (native-inputs
14854 (list python-hatchling))
14855 (propagated-inputs
14856 (list python-dateutil
14857 python-decorator
14858 python-entrypoints
14859 python-ipython
14860 ;; python-ipykernel is omitted here to break a cycle.
14861 python-jupyter-client-bootstrap
14862 python-psutil
14863 python-pyzmq
14864 python-tornado-6
14865 python-tqdm
14866 python-traitlets))
14867 (home-page "https://ipython.org/")
14868 (synopsis "Interactive Parallel Computing with IPython")
14869 (description
14870 "@code{ipyparallel} is a Python package and collection of CLI scripts
14871for controlling clusters for Jupyter. @code{ipyparallel} contains the
14872following CLI scripts:
14873@enumerate
14874@item ipcluster - start/stop a cluster
14875@item ipcontroller - start a scheduler
14876@item ipengine - start an engine
14877@end enumerate")
14878 (license license:bsd-3))))
14879
14880(define-public python-ipyparallel
14881 (package
14882 (inherit python-ipyparallel-bootstrap)
14883 (name "python-ipyparallel")
14884 (arguments
14885 (list #:test-flags #~(list "--pyargs" "ipyparallel")))
14886 (native-inputs
14887 (modify-inputs (package-native-inputs python-ipyparallel-bootstrap)
14888 (append python-ipython
14889 python-pytest
14890 python-pytest-asyncio
14891 python-pytest-tornado
14892 python-testpath)))
14893 (propagated-inputs
14894 (modify-inputs (package-propagated-inputs python-ipyparallel-bootstrap)
14895 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
14896 (append python-ipykernel)))
14897 (properties (alist-delete 'hidden? (package-properties
14898 python-ipyparallel-bootstrap)))))
14899
14900;; TODO: Package python-jupysql which is the maintained fork of this one.
14901(define-public python-ipython-sql
14902 (package
14903 (name "python-ipython-sql")
14904 (properties '((commit . "e21bc64e172270311d9103602e1c2ec1bcdd5aa8")
14905 (revision . "0")))
14906 (version (git-version "0.5.0"
14907 (assoc-ref properties 'revision)
14908 (assoc-ref properties 'commit)))
14909 (source
14910 (origin
14911 (method git-fetch)
14912 (uri (git-reference
14913 (url "https://github.com/catherinedevlin/ipython-sql")
14914 (commit (assoc-ref properties 'commit))))
14915 (file-name (git-file-name name version))
14916 (sha256
14917 (base32 "0palwgr7lnar8ykifzhf1qach206bf1xa1zkji2adk9pr9ajsiix"))))
14918 (build-system pyproject-build-system)
14919 (arguments
14920 (list #:tests? #f ;Fail because of prettytable.
14921 #:phases
14922 #~(modify-phases %standard-phases
14923 (replace 'check
14924 (lambda* (#:key tests? #:allow-other-keys)
14925 (setenv "HOME" (getcwd))
14926 (if tests?
14927 (invoke "ipython" "-c"
14928 "import pytest; pytest.main(['.'])")
14929 (format #t "test suite not run.~%")))))))
14930 (native-inputs (list python-pytest python-setuptools))
14931 (propagated-inputs
14932 (list python-ipython
14933 python-ipython-genutils
14934 python-prettytable
14935 python-sqlalchemy-2
14936 python-sqlparse))
14937 (home-page "https://github.com/catherinedevlin/ipython-sql")
14938 (synopsis "RDBMS access via IPython")
14939 (description "This library connects to a database, using SQLAlchemy URL
14940connect strings, then issue SQL commands within IPython or IPython Notebook.")
14941 (license license:expat)))
14942
14943(define-public python-optree
14944 (package
14945 (name "python-optree")
14946 (version "0.14.0")
14947 (source
14948 (origin
14949 (method git-fetch)
14950 (uri (git-reference
14951 (url "https://github.com/metaopt/optree")
14952 (commit (string-append "v" version))))
14953 (file-name (git-file-name name version))
14954 (sha256
14955 (base32
14956 "17zph1jgzk0zaanj7057qj8x5cml8j66ip0xmlbwmq4396hmdlbs"))))
14957 (build-system pyproject-build-system)
14958 (arguments
14959 (list
14960 #:test-flags
14961 ;; These tests fails due to a circular import
14962 '`("-k" ,(string-append "not test_treespec_pickle_missing_registration"
14963 " and not test_import_no_warnings"))))
14964 (propagated-inputs (list python-typing-extensions))
14965 (native-inputs
14966 (list python-pytest
14967 python-setuptools
14968 python-wheel
14969 cmake-minimal
14970 pybind11))
14971 (home-page "https://github.com/metaopt/optree")
14972 (synopsis "Optimized PyTree Utilities")
14973 (description "This package contains operations on PyTrees (a tree made of
14974container data structures in Python).")
14975 (license license:asl2.0)))
14976
14977(define-public python-backcall
14978 (package
14979 (name "python-backcall")
14980 (version "0.2.0")
14981 (source
14982 (origin
14983 (method git-fetch)
14984 (uri (git-reference
14985 (url "https://github.com/takluyver/backcall/")
14986 (commit version)))
14987 (file-name (git-file-name name version))
14988 (sha256
14989 (base32 "0br41zib1zph2jazanyjfl03rrb7frplk639fb10wvdqkrzgm6cd"))))
14990 (build-system pyproject-build-system)
14991 (native-inputs (list python-flit-core python-pytest))
14992 (home-page "https://github.com/takluyver/backcall/")
14993 (synopsis "Specifications for callback functions passed in to an API")
14994 (description
14995 "If your code lets other people supply callback functions, it's important
14996to specify the function signature you expect, and check that functions support
14997that. Adding extra parameters later would break other peoples code unless
14998you're careful. The @code{backcall} package provides a way of specifying the
14999callback signature using a prototype function.")
15000 (license license:bsd-3)))
15001
15002(define-public python-pubmed-parser
15003 (package
15004 (name "python-pubmed-parser")
15005 (version "0.5.1")
15006 (source (origin
15007 (method git-fetch)
15008 (uri (git-reference
15009 (url "https://github.com/titipata/pubmed_parser")
15010 (commit version)))
15011 (file-name (git-file-name name version))
15012 (sha256
15013 (base32
15014 "0hm520pxmbqlfckkdyccagmmsrqwdi0qdsc0l7rgp62jmsv7ppi5"))))
15015 (build-system pyproject-build-system)
15016 (arguments (list #:tests? #f)) ;; Tests require internet
15017 (native-inputs
15018 (list python-setuptools))
15019 (propagated-inputs
15020 (list python-lxml
15021 python-numpy
15022 python-requests
15023 python-six ;hard dependency
15024 python-unidecode))
15025 (home-page "https://titipata.github.io/pubmed_parser/")
15026 (synopsis "Parser for Pubmed Open-Access Subset and MEDLINE XML repository")
15027 (description
15028 "This package provides a Python parser for Pubmed Open-Access Subset and
15029MEDLINE XML repository.")
15030 (license license:expat)))
15031
15032(define-public python-pure-eval
15033 (package
15034 (name "python-pure-eval")
15035 (version "0.2.3")
15036 (source
15037 (origin
15038 (method url-fetch)
15039 (uri (pypi-uri "pure_eval" version))
15040 (sha256
15041 (base32 "0hmg1qcv1h5k0dyj7sfp54ibnmjrvf4awdc6gin5fk2n80zrhkjz"))))
15042 (build-system pyproject-build-system)
15043 (native-inputs
15044 (list python-pytest
15045 python-setuptools
15046 python-setuptools-scm
15047 python-wheel))
15048 (home-page "https://github.com/alexmojaki/pure_eval")
15049 (synopsis "Python library to evaluate abstract syntax tree nodes")
15050 (description "The @code{pure_eval} Python library can safely evaluate
15051abstract syntax tree (AST) nodes without side effects.")
15052 (license license:expat)))
15053
15054(define-public python-puremagic
15055 (package
15056 (name "python-puremagic")
15057 (version "1.28")
15058 (source
15059 (origin
15060 (method git-fetch) ;no tests in PyPI archive
15061 (uri (git-reference
15062 (url "https://github.com/cdgriffith/puremagic")
15063 (commit version)))
15064 (file-name (git-file-name name version))
15065 (sha256
15066 (base32 "0sffrjjqh37ijwnggyvs2rfm4iwaz2m395wqg0x727wv8i0x3f3b"))))
15067 (build-system pyproject-build-system)
15068 (native-inputs
15069 (list python-pytest python-setuptools python-wheel))
15070 (home-page "https://github.com/cdgriffith/puremagic")
15071 (synopsis "Pure Python implementation of magic file detection")
15072 (description
15073 "This package implements a functionality that will identify a file based
15074off it's magic numbers.")
15075 (license license:expat)))
15076
15077(define-public python-ast-decompiler
15078 (package
15079 (name "python-ast-decompiler")
15080 (version "0.7.0")
15081 (source
15082 (origin
15083 (method url-fetch)
15084 (uri (pypi-uri "ast_decompiler" version))
15085 (sha256
15086 (base32 "0dw3fck4ajilphqw4hdpa8pmqxg3jfk2xkmjnk3kx5pqwl3sbhzg"))
15087 ;; We need to manually create an __init__.py file under the tests/
15088 ;; directory, since it is not included in the distributed
15089 ;; version. (See:
15090 ;; https://github.com/JelleZijlstra/ast_decompiler/issues/52).
15091 (modules '((guix build utils)))
15092 (snippet '(call-with-output-file "tests/__init__.py"
15093 (const #t)))))
15094 (build-system pyproject-build-system)
15095 (native-inputs (list python-flit-core python-pytest))
15096 (home-page "https://github.com/JelleZijlstra/ast_decompiler")
15097 (synopsis
15098 "Decompile an @acronym{AST, Abstract Syntax Tree} to Python code")
15099 (description
15100 "This library provides functionality to decompile @acronym{AST, Abstract
15101Syntax Tree} objects, as generated by the standard library @code{ast} module,
15102to Python code.")
15103 (license license:asl2.0)))
15104
15105(define-public python-asttokens
15106 (package
15107 (name "python-asttokens")
15108 (version "3.0.0")
15109 (source
15110 (origin
15111 (method url-fetch)
15112 (uri (pypi-uri "asttokens" version))
15113 (sha256
15114 (base32 "1ixv6n8cg08n9h6rwyhd3lkzyjiwpbfv56dk338w3c32inm8pk8d"))))
15115 (build-system pyproject-build-system)
15116 (native-inputs
15117 (list python-astroid
15118 python-pytest
15119 python-setuptools
15120 python-setuptools-scm
15121 python-wheel))
15122 (home-page "https://github.com/gristlabs/asttokens")
15123 (synopsis "Python library to annotate abstract syntax trees")
15124 (description "The @code{asttokens} module annotates Python abstract syntax
15125trees (ASTs) with the positions of tokens and text in the source code that
15126generated them. It makes it possible for tools that work with logical AST
15127nodes to find the particular text that resulted in those nodes, for example
15128for automated refactoring or highlighting.")
15129 (license license:asl2.0)))
15130
15131(define-public python-littleutils
15132 (package
15133 (name "python-littleutils")
15134 (version "0.2.4")
15135 (source
15136 (origin
15137 (method url-fetch)
15138 (uri (pypi-uri "littleutils" version))
15139 (sha256
15140 (base32 "069xlm6vp1rprgrl4gsg3fd2vg0nzdw7v2qij7i45v8c080mp0y7"))))
15141 (build-system pyproject-build-system)
15142 (arguments (list #:tests? #f)) ;no tests in PyPIi archive or Git checkout
15143 (native-inputs
15144 (list python-setuptools
15145 python-setuptools-scm
15146 python-wheel))
15147 (home-page "https://github.com/alexmojaki/littleutils")
15148 (synopsis "Python utility function collection")
15149 (description "@code{littleutils} is a small collection of Python utility
15150functions, useful in the context of writing unit tests among other uses.")
15151 (license license:expat)))
15152
15153(define-public python-ipython
15154 (package
15155 (name "python-ipython")
15156 (version "9.8.0")
15157 (source
15158 (origin
15159 (method git-fetch)
15160 (uri (git-reference
15161 (url "https://github.com/ipython/ipython")
15162 (commit version)))
15163 (file-name (git-file-name name version))
15164 (sha256
15165 (base32 "01xislvlz33hlpbpf9cfgqabva3wzg49gb5437ypdzwldf8q25cg"))))
15166 (build-system pyproject-build-system)
15167 (arguments
15168 (list
15169 ;; tests: 1655 passed, 118 skipped, 3 xfailed, 7 warnings
15170 ;; with-extra: 1681 passed, 87 skipped, 5 deselected, 3 xfailed, 8 warnings
15171 #:test-backend #~'custom
15172 ;; XXX: It's a workaround to fix the error with module import
15173 ;; "_pytest.pathlib.ImportPathMismatchError:", see:
15174 ;; <https://codeberg.org/guix/guix/issues/2108>.
15175 #:test-flags
15176 #~(list "-m" "pytest" "-vv"
15177 "-k" (string-join
15178 ;; These need git.
15179 (list "not test_json_getsysinfo"
15180 "IPython.utils.sysinfo.sys_info"
15181 ;; Failed: DID NOT RAISE
15182 "test_timeit_raise_on_interrupt"
15183 "test_script_raise_on_interrupt"
15184 "test_time_raise_on_interrupt")
15185 " and not "))
15186 #:phases
15187 #~(modify-phases %standard-phases
15188 (add-before 'check 'pre-check
15189 (lambda _
15190 (setenv "HOME" "/tmp"))))))
15191 (propagated-inputs
15192 (list python-decorator
15193 python-ipython-pygments-lexers
15194 python-jedi
15195 python-matplotlib-inline
15196 python-pexpect
15197 python-prompt-toolkit
15198 python-pygments
15199 python-stack-data
15200 python-traitlets
15201 python-typing-extensions))
15202 (native-inputs
15203 (list python-pytest
15204 python-pytest-asyncio
15205 python-setuptools
15206 python-testpath
15207 ;; [extra]
15208 python-curio
15209 ;; python-ipykernel ;cycles
15210 ;; python-jupyter-ai ;not packaged
15211 python-matplotlib
15212 ;; python-nbclient ;cycles
15213 python-nbformat
15214 python-numpy
15215 python-pandas
15216 python-trio))
15217 (home-page "https://ipython.org")
15218 (synopsis "IPython is a tool for interactive computing in Python")
15219 (description
15220 "IPython provides a rich architecture for interactive computing with:
15221Powerful interactive shells, a browser-based notebook, support for interactive
15222data visualization, embeddable interpreters and tools for parallel
15223computing.")
15224 (properties '((cpe-name . "ipython")))
15225 (license license:bsd-3)))
15226
15227(define-public python-ipython-documentation
15228 (package
15229 (inherit python-ipython)
15230 (name "python-ipython-documentation")
15231 (version (package-version python-ipython))
15232 (arguments
15233 (list
15234 #:phases
15235 #~(modify-phases %standard-phases
15236 (add-after 'unpack 'set-pythonpath
15237 (lambda _
15238 ;; Ensure this fixed (via the
15239 ;; "python-ipython-documentation-chars.patch" patch) copy of
15240 ;; IPython gets used.
15241 (setenv "PYTHONPATH" (string-append (getcwd)))))
15242 (add-before 'build 'configure-sphinx-for-xelatex
15243 (lambda _
15244 ;; Use XeLaTeX instead of PDFLaTeX, as it can
15245 ;; cope with the Unicode characters present in the
15246 ;; contributors page, for example.
15247 (substitute* "docs/source/conf.py"
15248 (("project = 'IPython'.*" all)
15249 (string-append all "latex_engine = 'xelatex'\n")))
15250 ;; XXX: The Sphinx-generated ipython.tex specifies the GNU
15251 ;; FreeFont font to be searched via its extension, which uses
15252 ;; kpathsea instead of fontconfig and fail (see:
15253 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
15254 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
15255 ;; GUIX_TEXMF.
15256 (mkdir-p "texmf-dist/fonts/opentype/public")
15257 (symlink (string-append
15258 #$(this-package-native-input "font-gnu-freefont")
15259 "/share/fonts/opentype")
15260 (string-append
15261 (getcwd) "/"
15262 "texmf-dist/fonts/opentype/public/gnu-freefont"))
15263 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
15264 (getcwd) "/texmf-dist"))))
15265 (delete 'build)
15266 (delete 'check)
15267 (replace 'install
15268 (lambda* (#:key outputs #:allow-other-keys)
15269 (let* ((data (string-append #$output "/share"))
15270 (doc (string-append data "/doc/" #$name "-" #$version))
15271 (html (string-append doc "/html"))
15272 (info (string-append data "/info")))
15273 (invoke "make" "-C" "docs" "info" "html" "pdf"
15274 (string-append "SPHINXOPTS=-j"
15275 (number->string (parallel-job-count))))
15276 (install-file "COPYING.rst" doc)
15277 (copy-recursively "examples" (string-append doc "/examples"))
15278 ;; Install HTML documentation.
15279 (copy-recursively "docs/build/html" html)
15280 ;; Likewise for the PDF.
15281 (install-file "docs/build/latex/ipython.pdf" doc)
15282 ;; Likewise for the info manual.
15283 (install-file "docs/build/texinfo/ipython.info" info)
15284 (symlink (string-append html "/_images")
15285 (string-append info "/ipython-figures"))))))))
15286 (native-inputs
15287 (list fontconfig ;for XDG_DATA_DIRS to locate fonts
15288 font-gnu-freefont
15289 graphviz
15290 python-docrepr
15291 python-ipykernel
15292 python-sphinx
15293 python-sphinx-rtd-theme
15294 texinfo
15295 (texlive-local-tree
15296 (list texlive-latexmk
15297 texlive-polyglossia
15298 texlive-xetex
15299 texlive-xindy))))))
15300
15301;; A bare minimal package, mainly to use in tests and reduce closure
15302;; size. Tests are left out in the main package to slim down native-inputs.
15303(define-public python-ipython-minimal
15304 (package/inherit python-ipython
15305 (name "python-ipython-minimal")
15306 (arguments
15307 (list #:tests? #f))
15308 (native-inputs
15309 (list python-setuptools))))
15310
15311(define-public python-ipython-pygments-lexers
15312 (package
15313 (name "python-ipython-pygments-lexers")
15314 (version "1.1.1")
15315 (source
15316 (origin
15317 (method git-fetch)
15318 (uri (git-reference
15319 (url "https://github.com/ipython/ipython-pygments-lexers/")
15320 (commit version)))
15321 (file-name (git-file-name name version))
15322 (sha256
15323 (base32 "154vbpp9mkblsk1d0w8x8mybwgn5gz6mjgg77nqyn75ky0banrd7"))))
15324 (build-system pyproject-build-system)
15325 (propagated-inputs (list python-pygments))
15326 (native-inputs (list python-flit-core python-pytest))
15327 (home-page "https://github.com/ipython/ipython-pygments-lexers/")
15328 (synopsis "Plugin for IPython code sessions")
15329 (description
15330 "This package defines a variety of Pygments lexers for highlighting IPython
15331code.")
15332 (license license:bsd-3)))
15333
15334(define-public python-pydbus
15335 (package
15336 (name "python-pydbus")
15337 (version "0.6.0")
15338 (source
15339 (origin
15340 (method url-fetch)
15341 (uri (pypi-uri "pydbus" version))
15342 (sha256
15343 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
15344 (build-system pyproject-build-system)
15345 (arguments
15346 (list #:tests? #f ; no tests in PyPI, git tests require running DBus
15347 #:phases
15348 #~(modify-phases %standard-phases
15349 (add-after 'unpack 'fix-comparability-with-pygobject
15350 (lambda _
15351 (substitute* "pydbus/_inspect3.py"
15352 (("getargspec")
15353 "getfullargspec")))))))
15354 (native-inputs
15355 (list python-setuptools
15356 python-wheel))
15357 (propagated-inputs
15358 (list python-pygobject))
15359 (home-page "https://github.com/LEW21/pydbus")
15360 (synopsis "Pythonic D-Bus library")
15361 (description
15362 "Pydbus provides a pythonic interface to the D-Bus message bus system.
15363Pydbus can be used to access remote objects and also for object publication.
15364It is based on PyGI, the Python GObject Introspection bindings, which is the
15365recommended way to use GLib from Python.")
15366 (license license:lgpl2.1+)))
15367
15368(define-public python-dbus
15369 (package
15370 (name "python-dbus")
15371 (version "1.2.18")
15372 (source
15373 (origin
15374 (method url-fetch)
15375 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
15376 "dbus-python-" version ".tar.gz"))
15377 (sha256
15378 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
15379 (build-system gnu-build-system)
15380 (native-inputs
15381 (list pkg-config))
15382 (inputs
15383 `(("python" ,python-wrapper)
15384 ("dbus-glib" ,dbus-glib)))
15385 (synopsis "Python bindings for D-bus")
15386 (description "python-dbus provides bindings for libdbus, the reference
15387implementation of D-Bus.")
15388 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
15389 (properties `((python2-variant . ,(delay python2-dbus))))
15390 (license license:expat)))
15391
15392(define-public python-notify2
15393 (package
15394 (name "python-notify2")
15395 (version "0.3.1")
15396 (source
15397 (origin
15398 (method url-fetch)
15399 (uri (pypi-uri "notify2" version))
15400 (sha256
15401 (base32
15402 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
15403 (build-system pyproject-build-system)
15404 (arguments (list #:tests? #f)) ; tests depend on system state
15405 (native-inputs (list python-setuptools))
15406 (propagated-inputs (list python-dbus))
15407 (home-page "https://bitbucket.org/takluyver/pynotify2")
15408 (synopsis "Python interface to D-Bus notifications")
15409 (description
15410 "Pynotify2 provides a Python interface for sending D-Bus notifications.
15411It is a reimplementation of pynotify in pure Python, and an alternative to
15412the GObject Introspection bindings to libnotify for non-GTK applications.")
15413 (license (list license:bsd-2
15414 license:lgpl2.1+))))
15415
15416;; beautifulsoup4 has a totally different namespace than 3.x,
15417;; and pypi seems to put it under its own name, so I guess we should too
15418(define-public python-beautifulsoup4
15419 (package
15420 (name "python-beautifulsoup4")
15421 (version "4.14.3")
15422 (source
15423 (origin
15424 (method url-fetch)
15425 (uri (pypi-uri "beautifulsoup4" version))
15426 (sha256
15427 (base32
15428 "11pvlxgxxn8bcgfsbbfrb9b9jw3ma7qggycycsx6ndbd332v34k2"))))
15429 (build-system pyproject-build-system)
15430 (native-inputs
15431 (list python-hatchling
15432 python-pytest))
15433 (propagated-inputs
15434 (list python-soupsieve
15435 python-typing-extensions
15436 ;; [optional]
15437 python-cchardet
15438 python-chardet
15439 python-charset-normalizer
15440 python-html5lib
15441 python-lxml))
15442 (home-page "https://www.crummy.com/software/BeautifulSoup/bs4/")
15443 (synopsis "Python screen-scraping library")
15444 (description
15445 "Beautiful Soup is a Python library designed for rapidly setting up
15446screen-scraping projects. It offers Pythonic idioms for navigating,
15447searching, and modifying a parse tree, providing a toolkit for
15448dissecting a document and extracting what you need. It automatically
15449converts incoming documents to Unicode and outgoing documents to UTF-8.")
15450 (license license:expat)))
15451
15452(define-public python-beautifulsoup4-bootstrap
15453 (hidden-package
15454 (package/inherit python-beautifulsoup4
15455 (arguments
15456 (list #:tests? #f))
15457 (native-inputs
15458 (list python-hatchling))
15459 (propagated-inputs '()))))
15460
15461(define-public python-soupsieve
15462 (package
15463 (name "python-soupsieve")
15464 (version "2.7")
15465 (source
15466 (origin
15467 (method url-fetch)
15468 (uri (pypi-uri "soupsieve" version))
15469 (sha256
15470 (base32 "0shjmvk8yz2ljc16pmizg16bqhk1i8n5al27mlp6sa16d6djya5d"))))
15471 (build-system pyproject-build-system)
15472 (native-inputs
15473 (list python-beautifulsoup4-bootstrap
15474 python-hatchling
15475 python-pytest))
15476 (home-page "https://github.com/facelessuser/soupsieve")
15477 (synopsis "CSS selector library")
15478 (description
15479 "Soup Sieve is a CSS selector library designed to be used with Beautiful
15480Soup 4. It aims to provide selecting, matching, and filtering using modern
15481CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
15482specifications up through the latest CSS level 4 drafts and beyond (though
15483some are not yet implemented).")
15484 (license license:expat)))
15485
15486
15487(define-public python-netifaces
15488 (package
15489 (name "python-netifaces")
15490 (version "0.11.0")
15491 (source
15492 (origin
15493 (method url-fetch)
15494 (uri (pypi-uri "netifaces" version))
15495 (sha256
15496 (base32 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
15497 (build-system pyproject-build-system)
15498 (arguments
15499 (list
15500 #:test-backend #~'custom
15501 #:test-flags #~(list "test.py")))
15502 (native-inputs (list python-setuptools))
15503 (home-page "https://github.com/al45tair/netifaces")
15504 (synopsis "Python module for portable network interface information")
15505 (description
15506 "Netifaces is a Python module providing information on network
15507interfaces in an easy and portable manner.")
15508 (license license:expat)))
15509
15510(define-public python-networkx
15511 (package
15512 (name "python-networkx")
15513 (version "3.4.2")
15514 (source
15515 (origin
15516 (method url-fetch)
15517 (uri (pypi-uri "networkx" version))
15518 (sha256
15519 (base32 "1qaks3c3h5qlw25z949q3plw8iwgm9h152kwnam64lwc89lkcz1h"))))
15520 (build-system pyproject-build-system)
15521 (arguments
15522 (list
15523 #:test-flags
15524 #~(list "--numprocesses" (number->string (parallel-job-count)))))
15525 (native-inputs
15526 (list python-pytest
15527 python-pytest-xdist
15528 python-setuptools
15529 python-wheel))
15530 (propagated-inputs
15531 (list python-decorator))
15532 (home-page "https://networkx.github.io/")
15533 (synopsis "Python module for creating and manipulating graphs and networks")
15534 (description
15535 "NetworkX is a Python package for the creation, manipulation, and study
15536of the structure, dynamics, and functions of complex networks.")
15537 (license license:bsd-3)))
15538
15539(define-public python-datrie
15540 (package
15541 (name "python-datrie")
15542 (version "0.8.3")
15543 (source
15544 (origin
15545 (method git-fetch)
15546 (uri (git-reference
15547 (url "https://github.com/kmike/datrie")
15548 (commit version)))
15549 (file-name (git-file-name name version))
15550 (sha256
15551 (base32 "1jfyhzfjgin370l6chd0cjg521ql3y53db194n94ff6cdbdbg7cg"))))
15552 (build-system pyproject-build-system)
15553 (arguments
15554 (list
15555 #:phases
15556 #~(modify-phases %standard-phases
15557 (add-after 'ensure-no-mtimes-pre-1980 'inject-libdatrie
15558 (lambda* (#:key inputs #:allow-other-keys)
15559 (let* ((headers (search-input-directory inputs
15560 "include/datrie"))
15561 (base (dirname (dirname headers))))
15562 (symlink headers "libdatrie/datrie")
15563 (setenv "LDFLAGS" (string-append "-L" base "/lib")))))
15564 (add-before 'build 'relax-gcc-14-strictness
15565 (lambda _
15566 (setenv "CFLAGS"
15567 "-g -O2 -Wno-error=incompatible-pointer-types"))))))
15568 (native-inputs
15569 (list python-cython python-hypothesis python-pytest python-setuptools))
15570 (inputs (list libdatrie))
15571 (home-page "https://github.com/kmike/datrie")
15572 (synopsis "Fast, efficiently stored trie for Python")
15573 (description
15574 "This package provides a fast, efficiently stored trie implementation for
15575Python.")
15576 (license license:lgpl2.1+)))
15577
15578(define-public python-amply
15579 (package
15580 (name "python-amply")
15581 (version "0.1.6")
15582 (source
15583 (origin
15584 (method url-fetch)
15585 (uri (pypi-uri "amply" version))
15586 (sha256
15587 (base32 "195fg1n5nsl722hk33f6a7ak3n0hfs8yfpqi2xkhdqgqrh1i2hk1"))))
15588 (build-system pyproject-build-system)
15589 (native-inputs
15590 (list python-pytest
15591 python-setuptools
15592 python-setuptools-scm
15593 python-wheel))
15594 (propagated-inputs
15595 (list python-docutils
15596 python-pyparsing))
15597 (home-page "https://github.com/willu47/amply")
15598 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
15599 (description
15600 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
15601structures.")
15602 (license license:epl1.0)))
15603
15604(define-public python-pulp
15605 ;; When updating, check snakemake@N builds still fine, see:
15606 ;; <https://codeberg.org/guix/guix/issues/4782>.
15607 (package
15608 (name "python-pulp")
15609 (version "2.4")
15610 (source
15611 (origin
15612 (method url-fetch)
15613 (uri (pypi-uri "PuLP" version))
15614 (sha256
15615 (base32
15616 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
15617 (build-system pyproject-build-system)
15618 (arguments
15619 ;; TODO: They need a special setup, see:
15620 ;; <https://codeberg.org/guix/guix/pulls/4908>.
15621 (list #:tests? #f))
15622 (native-inputs
15623 (list python-setuptools))
15624 (propagated-inputs
15625 (list python-amply))
15626 (home-page "https://github.com/coin-or/pulp")
15627 (synopsis "Linear Programming modeler")
15628 (description
15629 "PuLP is a Linear Programming modeler written in Python. PuLP can
15630generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
15631solve linear problems.")
15632 (license license:expat)))
15633
15634(define-public python-py-partiql-parser
15635 (package
15636 (name "python-py-partiql-parser")
15637 (version "0.6.1")
15638 (source
15639 (origin
15640 (method git-fetch) ; no tests data in PyPi package
15641 (uri (git-reference
15642 (url "https://github.com/getmoto/py-partiql-parser")
15643 (commit version)))
15644 (file-name (git-file-name name version))
15645 (sha256
15646 (base32 "008vj0f09gzk6pijwvxs6m860rmszm85is7wgjwifc8y38sqd86s"))))
15647 (build-system pyproject-build-system)
15648 (native-inputs
15649 (list python-hatchling
15650 python-pytest))
15651 (home-page "https://pypi.org/project/py-partiql-parser/")
15652 (synopsis "Pure Python PartiQL Parser")
15653 (description
15654 "This package provides a tokenizer/parser/executor for the PartiQL
15655language, in Python.")
15656 (license license:expat)))
15657
15658(define-public python-py-tes
15659 (package
15660 (name "python-py-tes")
15661 (version "0.4.2")
15662 (source
15663 (origin
15664 (method git-fetch)
15665 (uri (git-reference
15666 (url "https://github.com/ohsu-comp-bio/py-tes")
15667 (commit version)))
15668 (file-name (git-file-name name version))
15669 (sha256
15670 (base32 "0nacmw7whmbfqa6y728l6f646wpgaanfa0v4p5mggag2044v55qx"))))
15671 (build-system pyproject-build-system)
15672 (native-inputs
15673 (list python-pytest python-requests-mock python-setuptools))
15674 (propagated-inputs
15675 (list python-attrs python-dateutil python-future python-requests))
15676 (home-page "https://github.com/ohsu-comp-bio/py-tes")
15677 (synopsis "Library for communicating with the GA4GH Task Execution API")
15678 (description "This package provides a library for communicating with the
15679GA4GH Task Execution API.")
15680 (license license:expat)))
15681
15682(define-public python-altgraph
15683 (package
15684 (name "python-altgraph")
15685 (version "0.17.4")
15686 (source
15687 (origin
15688 (method url-fetch)
15689 (uri (pypi-uri "altgraph" version))
15690 (sha256
15691 (base32 "01j48np3g50g6insjkszsz0vifwlm6gspria5vdwlkbciywznnhv"))))
15692 (build-system pyproject-build-system)
15693 (native-inputs (list python-pytest python-setuptools python-wheel))
15694 (home-page "https://altgraph.readthedocs.io")
15695 (synopsis "Python graph network package")
15696 (description
15697"This package provides tools for constructing graphs, BFS and DFS
15698traversals, topological sort, shortest paths, and more with graphviz
15699output.")
15700 (license license:expat)))
15701
15702(define-public python-pyqrcode
15703 (package
15704 (name "python-pyqrcode")
15705 (properties '((commit . "674a77b5eaf850d063f518bd90c243ee34ad6b5d")
15706 (revision . "0")))
15707 (version (git-version "1.2.1"
15708 (assoc-ref properties 'revision)
15709 (assoc-ref properties 'commit)))
15710 (source
15711 (origin
15712 (method git-fetch)
15713 (uri (git-reference
15714 (url "https://github.com/mnooner256/pyqrcode")
15715 (commit (assoc-ref properties 'commit))))
15716 (file-name (git-file-name name version))
15717 (sha256
15718 (base32 "0ks4sqwcwsnb5r65z6zdfbir34f35sfv3agnlmcq1w36fya2y62m"))))
15719 (build-system pyproject-build-system)
15720 (arguments (list #:test-backend #~'nose))
15721 (native-inputs (list python-pynose python-pypng python-setuptools))
15722 (home-page "https://github.com/mnooner256/pyqrcode")
15723 (synopsis "QR code generator")
15724 (description
15725 "Pyqrcode is a QR code generator written purely in Python with SVG, EPS,
15726PNG and terminal output.")
15727 (license license:bsd-3)))
15728
15729(define-public python-seaborn
15730 (package
15731 (name "python-seaborn")
15732 (version "0.13.2")
15733 (source (origin
15734 (method url-fetch)
15735 (uri (pypi-uri "seaborn" version))
15736 (sha256
15737 (base32
15738 "1xzzxrbxsmmk39647vcx7avzdbzxw9vz8pc8yklnakcgk100mrlk"))))
15739 (build-system pyproject-build-system)
15740 (arguments
15741 (list
15742 ;; 2358 passed, 16 skipped, 6 xfailed, 17 warnings
15743 #:test-flags
15744 #~(list "--numprocesses" (number->string (parallel-job-count))
15745 ;; XXX: See: <https://github.com/mwaskom/seaborn/issues/3892>.
15746 ;; KeyError: 'labelleft'
15747 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_column_wrapped"
15748 "--deselect=tests/_core/test_plot.py::TestLabelVisibility::test_1d_row_wrapped"
15749 ;; AttributeError: module 'numpy' has no attribute
15750 ;; 'VisibleDeprecationWarning'
15751 "--deselect=tests/test_distributions.py::TestKDEPlotBivariate::test_weights")))
15752 (native-inputs
15753 (list python-flit-core
15754 python-pytest
15755 python-pytest-xdist))
15756 (propagated-inputs
15757 (list python-matplotlib
15758 python-numpy
15759 python-pandas
15760 python-scipy
15761 python-statsmodels))
15762 (home-page "https://seaborn.pydata.org/")
15763 (synopsis "Statistical data visualization")
15764 (description
15765 "Seaborn is a library for making attractive and informative statistical
15766graphics in Python. It is built on top of matplotlib and tightly integrated
15767with the PyData stack, including support for numpy and pandas data structures
15768and statistical routines from scipy and statsmodels.")
15769 (license license:bsd-3)))
15770
15771(define-public python-session-info
15772 (package
15773 (name "python-session-info")
15774 (version "1.0.0")
15775 (source
15776 (origin
15777 (method git-fetch)
15778 (uri (git-reference
15779 (url "https://gitlab.com/joelostblom/session_info")
15780 (commit version)))
15781 (file-name (git-file-name name version))
15782 (sha256
15783 (base32 "0w6y764qci5w9925c75xdr8jizgf8189mzzaz4zk5lw1f182yqy4"))))
15784 (build-system pyproject-build-system)
15785 (arguments (list #:tests? #f)) ; No tests.
15786 (native-inputs (list python-setuptools))
15787 (propagated-inputs (list python-stdlib-list))
15788 (home-page "https://gitlab.com/joelostblom/session_info")
15789 (synopsis "Output version information for modules currently loaded")
15790 (description
15791 "This package outputs version information for modules loaded in the current
15792session, Python, and the OS.")
15793 (license license:bsd-3)))
15794
15795(define-public python-mpmath
15796 (package
15797 (name "python-mpmath")
15798 (version "1.3.0")
15799 (source
15800 (origin
15801 (method git-fetch)
15802 (uri (git-reference
15803 (url "https://github.com/fredrik-johansson/mpmath")
15804 (commit version)))
15805 (file-name (git-file-name name version))
15806 (sha256
15807 (base32 "058ahp0z0gn0z1hwvggrmiir1xag6rzgrfgfg138kjnk5ml9q4gl"))))
15808 (build-system pyproject-build-system)
15809 (native-inputs
15810 (list python-pytest
15811 python-setuptools
15812 python-setuptools-scm))
15813 (home-page "https://mpmath.org")
15814 (synopsis "Arbitrary-precision floating-point arithmetic in python")
15815 (description
15816 "@code{mpmath} can be used as an arbitrary-precision substitute for
15817Python's float/complex types and math/cmath modules, but also does much
15818more advanced mathematics.")
15819 (license license:bsd-3)))
15820
15821(define-public python-bigfloat
15822 (package
15823 (name "python-bigfloat")
15824 (version "0.4.0")
15825 (source
15826 (origin
15827 (method url-fetch)
15828 (uri (pypi-uri "bigfloat" version))
15829 (sha256
15830 (base32 "1f0c1hdr39bbl5rds5r1waa1papjmjiyp0ixs64mkjiahzg6pfaq"))
15831 (snippet '(delete-file "mpfr.c"))))
15832 (build-system pyproject-build-system)
15833 (arguments
15834 (list
15835 #:test-flags
15836 ;; This one fails with AssertionError: 0 != 8796082524191. Not good,
15837 ;; but I don't know what to do about it.
15838 '(list "-k" "not test_hash")
15839 #:phases
15840 '(modify-phases %standard-phases
15841 (add-before 'build 'cythonize
15842 (lambda _ (invoke "cython" "mpfr.pyx"))))))
15843 (inputs (list mpfr))
15844 (native-inputs
15845 (list python-cython python-pytest python-setuptools python-wheel))
15846 (propagated-inputs
15847 (list python-six))
15848 (home-page "https://github.com/mdickinson/bigfloat")
15849 (synopsis "Arbitrary precision floating-point arithmetic for Python")
15850 (description
15851 "This package provides a Python interface to the MPFR library for
15852multiprecision arithmetic.")
15853 (license license:lgpl3+)))
15854
15855(define-public python-plac
15856 (package
15857 (name "python-plac")
15858 (version "1.3.5")
15859 (source
15860 (origin
15861 (method git-fetch)
15862 (uri (git-reference
15863 (url "https://github.com/ialbert/plac")
15864 (commit (string-append "v" version))))
15865 (file-name (git-file-name name version))
15866 (sha256
15867 (base32 "1n0cbil1snbn0diw8zjm7qs77zpbgmf2k76mc2jknhk1hbnksyak"))))
15868 (build-system pyproject-build-system)
15869 (arguments
15870 (list
15871 #:phases
15872 #~(modify-phases %standard-phases
15873 (add-after 'unpack 'fix-tkinter
15874 (lambda _
15875 (substitute* "plac_tk.py"
15876 (("from Tkinter import Tk")
15877 "from tkinter import Tk")
15878 (("from ScrolledText import ScrolledText")
15879 "from tkinter.scrolledtext import ScrolledText")))))))
15880 (native-inputs
15881 (list (list python "tk") python-pytest python-setuptools))
15882 (home-page "https://github.com/ialbert/plac")
15883 (synopsis "Command line arguments parser")
15884 (description
15885 "This package can generate command line parameters from function
15886signatures.")
15887 (license license:bsd-3)))
15888
15889(define-public python-q
15890 (package
15891 (name "python-q")
15892 (properties '((commit . "cbad74095e20017f33d3ab75aa8375aa046ee697")
15893 (revision . "0")))
15894 (version (git-version "2.7"
15895 (assoc-ref properties 'revision)
15896 (assoc-ref properties 'commit)))
15897 (source
15898 (origin
15899 (method git-fetch)
15900 (uri (git-reference
15901 (url "https://github.com/zestyping/q")
15902 (commit (assoc-ref properties 'commit))))
15903 (file-name (git-file-name name version))
15904 (sha256
15905 (base32 "17bzi4xma4313waxanz5lly0cf0k6h33qrpy24sra2frh7gp0j0j"))))
15906 (build-system pyproject-build-system)
15907 (arguments
15908 (list
15909 ;; Deduced from the makefile.
15910 #:test-backend #~'custom
15911 #:test-flags #~(list "test/test_basic.py")
15912 #:phases
15913 #~(modify-phases %standard-phases
15914 (add-before 'check 'configure-tests
15915 (lambda* (#:key tests? #:allow-other-keys)
15916 (when tests?
15917 (setenv "TMPDIR" "/tmp")))))))
15918 (native-inputs (list python-setuptools))
15919 (home-page "https://github.com/zestyping/q")
15920 (synopsis "Quick-and-dirty debugging output for tired programmers")
15921 (description
15922 "q is a Python module for \"print\" style of debugging Python code. It
15923provides convenient short API for print out of values, tracebacks, and
15924falling into the Python interpreter.")
15925 (license license:asl2.0)))
15926
15927(define-public python-qnorm
15928 (package
15929 (name "python-qnorm")
15930 (version "0.9.0")
15931 (source
15932 (origin
15933 (method git-fetch)
15934 (uri (git-reference
15935 (url "https://github.com/Maarten-vd-Sande/qnorm")
15936 (commit (string-append "v" version))))
15937 (file-name (git-file-name name version))
15938 (sha256
15939 (base32 "0bgqxmqq8d3il0gnbvlb5sik50f6z8myx7p652lpv4llj9hrl2w8"))))
15940 (build-system pyproject-build-system)
15941 (propagated-inputs
15942 (list python-numba python-numpy python-pandas
15943 ;; XXX: pandas optional dependencies.
15944 python-tables python-pyarrow python-fastparquet))
15945 (native-inputs (list python-setuptools))
15946 (home-page "https://github.com/Maarten-vd-Sande/qnorm")
15947 (synopsis "Quantile normalization")
15948 (description
15949 "This tool implements quantile normalization. It properly resolves rank
15950ties, which is important when ties happen frequently, such as when working
15951with discrete numbers (integers) in count tables. This implementation should
15952be relatively fast, and can use multiple cores to sort the columns and
15953tie-resolvement is accelerated by numba.")
15954 (license license:expat)))
15955
15956(define-public python-quantlaw
15957 (package
15958 (name "python-quantlaw")
15959 (version "0.0.7")
15960 (source
15961 (origin
15962 (method git-fetch)
15963 (uri (git-reference
15964 (url "https://github.com/Quantlaw/quantlaw")
15965 (commit (string-append "v" version))))
15966 (file-name (git-file-name name version))
15967 (sha256
15968 (base32 "1ps0hcw2x2w9g0gipflka98zf1zsadgs161r6pgp7nh0sq8kpkrh"))))
15969 (build-system pyproject-build-system)
15970 (arguments
15971 (list
15972 #:test-flags
15973 #~(list "-k"
15974 ;; test expects network access
15975 "not test_load_statue_names")
15976 #:phases
15977 #~(modify-phases %standard-phases
15978 (add-after 'unpack 'fix-pytest-config
15979 (lambda _
15980 (substitute* "setup.cfg"
15981 (("--cov.*")
15982 "")))))))
15983 (native-inputs (list python-pytest python-setuptools))
15984 (propagated-inputs (list python-beautifulsoup4 python-networkx
15985 python-pandas python-regex python-requests))
15986 (home-page "https://quantlaw.readthedocs.io/")
15987 (synopsis "Coding utilities for quantitative legal studies")
15988 (description
15989 "This package provides coding utilities for quantitative legal studies.")
15990 (license license:bsd-3)))
15991
15992(define-public python-singledispatch
15993 (package
15994 (name "python-singledispatch")
15995 (version "4.0.0")
15996 (source
15997 (origin
15998 (method url-fetch)
15999 (uri (pypi-uri "singledispatch" version))
16000 (sha256
16001 (base32
16002 "1z5qbbvvjvh3cwcjv57p7vzhayx0j1ysnvjq0d5py6k5d2ljghzk"))))
16003 (build-system pyproject-build-system)
16004 (native-inputs
16005 (list python-pytest
16006 python-setuptools
16007 python-six ; required for conversion, not at run-time
16008 python-wheel))
16009 (home-page
16010 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
16011 (synopsis "Backport of singledispatch feature from Python 3.4")
16012 (description
16013 "This library brings functools.singledispatch from Python 3.4 to Python
160142.6-3.3.")
16015 (license license:expat)))
16016
16017(define-public python-pyzmq
16018 (package
16019 (name "python-pyzmq")
16020 (version "27.0.1")
16021 (source
16022 (origin
16023 (method url-fetch)
16024 (uri (pypi-uri "pyzmq" version))
16025 (sha256
16026 (base32 "0jznvl7v41241pbbvwzjxi028mrfy1n5ymfjzy2783n29ch4kia5"))))
16027 (build-system pyproject-build-system)
16028 (arguments
16029 (list
16030 #:test-flags
16031 '(list "-m" "not flaky")
16032 #:phases
16033 #~(modify-phases %standard-phases
16034 (add-before 'build 'configure
16035 (lambda _
16036 ;; Our zeromq package is built with '--enable-drafts'; also
16037 ;; enable draft support for pyzmq so the draft test passes.
16038 (setenv "ZMQ_DRAFT_API" "1")
16039 ;; Make sure to prevent building bundled libzmq.
16040 (setenv "PYZMQ_NO_BUNDLE" "1")))
16041 (add-before 'check 'delete-source
16042 ;; To prevent loading it and skip build extensions one more times.
16043 (lambda _
16044 (delete-file-recursively "zmq"))))))
16045 (native-inputs
16046 (list cmake-minimal
16047 ;; python-cffi ; for PyPy
16048 python-cython
16049 python-packaging
16050 python-pytest
16051 python-pytest-asyncio
16052 python-scikit-build-core
16053 python-tornado))
16054 (inputs
16055 (list libsodium
16056 zeromq))
16057 (home-page "https://github.com/zeromq/pyzmq")
16058 (synopsis "Python bindings for 0MQ")
16059 (description
16060 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
16061 (license license:bsd-4)))
16062
16063(define-public python-immutabledict
16064 (package
16065 (name "python-immutabledict")
16066 (version "4.2.0")
16067 (source
16068 (origin
16069 (method url-fetch)
16070 (uri (pypi-uri "immutabledict" version))
16071 (sha256
16072 (base32 "0pvwfasa5l78pi32zk55x5ihpdzkdh4f3xwbfmd7ldyjma0zs0z0"))))
16073 (build-system pyproject-build-system)
16074 (native-inputs
16075 (list python-poetry-core python-pytest))
16076 (home-page "https://github.com/corenting/immutabledict")
16077 (synopsis "Immutable wrapper around dictionaries")
16078 (description
16079 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
16080It implements the complete mapping interface and can be used as a drop-in
16081replacement for dictionaries where immutability is desired.")
16082 (license license:expat)))
16083
16084(define-public python-emoji
16085 (package
16086 (name "python-emoji")
16087 (version "2.12.1")
16088 (source
16089 (origin
16090 (method url-fetch)
16091 (uri (pypi-uri "emoji" version))
16092 (sha256
16093 (base32 "1svk94pad8gcvjwd329zmfrw09wakwh6qjvnhf6sa6k92y44i82a"))))
16094 (build-system pyproject-build-system)
16095 (propagated-inputs (list python-typing-extensions))
16096 (native-inputs
16097 (list python-pytest
16098 python-setuptools
16099 python-wheel))
16100 (home-page "https://github.com/carpedm20/emoji/")
16101 (synopsis "Emoji terminal output for Python")
16102 (description
16103 "This package provides Emoji terminal output for Python. The
16104entire set of Emoji codes as defined by the Unicode Consortium is supported in
16105addition to a bunch of aliases.")
16106 (license license:bsd-3)))
16107
16108;; TODO: Remove this package when upgrading python-gh-md-to-html to the
16109;; latest version. The latest gh-md-to-html does not build successfully from
16110;; the PyPI distribution. Let's resolve #72102 while keeping gh-md-to-html at
16111;; version 1.21.2 from failing.
16112;; https://issues.guix.gnu.org/72102
16113;; https://github.com/phseiff/github-flavored-markdown-to-html/issues/73
16114(define-public python-emoji-for-gh-md-to-html
16115 (package
16116 (inherit python-emoji)
16117 (version "1.6.1")
16118 (source
16119 (origin
16120 (method url-fetch)
16121 (uri (pypi-uri "emoji" version))
16122 (sha256
16123 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))))
16124
16125(define-public python-sarge
16126 (package
16127 (name "python-sarge")
16128 (version "0.1.7.post1") ;post release only to correct errors in metadata
16129 (source
16130 (origin
16131 (method git-fetch)
16132 (uri (git-reference
16133 (url "https://github.com/vsajip/sarge")
16134 (commit version)))
16135 (file-name (git-file-name name version))
16136 (sha256
16137 (base32 "0kn577lnaznr2hz1w1617l1agd21xs1fq2qv8kg2dy92qinl6gbd"))))
16138 (build-system pyproject-build-system)
16139 (native-inputs (list python-pytest python-setuptools))
16140 (home-page "https://docs.red-dove.com/sarge/")
16141 (synopsis "Subprocess wrapper with command pipeline functionality")
16142 (description "@code{sarge} is a wrapper for subprocess which provides
16143command pipeline functionality.")
16144 (license license:bsd-3)))
16145
16146(define-public python-sentry-sdk
16147 (package
16148 (name "python-sentry-sdk")
16149 (version "1.5.5")
16150 (source
16151 (origin
16152 (method git-fetch) ; no tests in PyPI release
16153 (uri (git-reference
16154 (url "https://github.com/getsentry/sentry-python")
16155 (commit version)))
16156 (file-name (git-file-name name version))
16157 (sha256
16158 (base32 "0dygfaapvznpj2j7cfjb0vlwhsn5qa5kf0kq488xbhjg06n8rrc4"))))
16159 (build-system pyproject-build-system)
16160 (arguments
16161 (list
16162 #:test-flags
16163 ;; See <https://github.com/pytest-dev/pytest-forked/issues/88>.
16164 ;; AttributeError: module 'py' has no attribute 'process'
16165 '(list "--ignore=tests/integrations/django/test_basic.py"
16166 "--ignore=tests/utils/test_contextvars.py"
16167 ;; These try to use pip to install packages.
16168 "--ignore=tests/integrations/gcp/test_gcp.py"
16169 "-k"
16170 (string-append
16171 ;; This test requires extra dependencies.
16172 "not test_auto_enabling_integrations"
16173 ;; AttributeError: module 'py' has no attribute 'process'
16174 " and not test_threading"
16175 " and not test_transport"
16176 ;; Tests below require network.
16177 " and not test_crumb_capture"
16178 " and not test_crumb_capture_hint"
16179 " and not test_httplib_misuse"
16180 ;; Unclear assert error
16181 " and not test_auto_session_tracking_with_aggregates"
16182 ;; Fails with IndexError.
16183 " and not test_session_mode_defaults_to"
16184 "_request_mode_in_wsgi_handler"))
16185 #:phases
16186 '(modify-phases %standard-phases
16187 (add-before 'check 'fix-test
16188 ;; See https://github.com/getsentry/sentry-python/pull/2712
16189 (lambda _
16190 (substitute* "tests/__init__.py"
16191 (("import pytest")
16192 "import warnings")
16193 (("pytest.warns\\(None\\)")
16194 "warnings.catch_warnings(record=True)"))))
16195 (replace 'check
16196 (lambda* (#:key tests? test-flags #:allow-other-keys)
16197 (when tests?
16198 (apply invoke "python" "-m" "pytest" test-flags)))))))
16199 (native-inputs
16200 (list nss-certs-for-test
16201 python-django
16202 python-executing
16203 python-gevent
16204 python-jsonschema
16205 python-mock
16206 python-pyrsistent
16207 python-pytest
16208 python-pytest-cov
16209 python-pytest-django
16210 python-pytest-localserver
16211 python-setuptools
16212 python-werkzeug
16213 python-wheel))
16214 (propagated-inputs
16215 (list python-certifi python-urllib3))
16216 (home-page "https://github.com/getsentry/sentry-python")
16217 (synopsis "Python SDK for Sentry")
16218 (description "This package provides a Python SDK for the Sentry
16219application monitoring and error tracking software.")
16220 (license license:bsd-2)))
16221
16222(define-public python-pep440
16223 (package
16224 (name "python-pep440")
16225 (version "0.1.2")
16226 (source
16227 (origin
16228 (method url-fetch)
16229 (uri (pypi-uri "pep440" version))
16230 (sha256
16231 (base32 "0kfhysbyci4f2sxvv991yvn22kbhncn0jg1arbhzw4rbri375csq"))))
16232 (build-system pyproject-build-system)
16233 (arguments
16234 ;; This checks for "pep440" in the output, but we actually print
16235 ;; ".pep440-real" due to wrapping.
16236 (list #:test-flags '(list "-k" "not test_cli_help")))
16237 (propagated-inputs (list python-check-manifest python-mypy python-pytest
16238 python-pytest-console-scripts python-pytest-cov))
16239 (native-inputs (list python-flit-core))
16240 (home-page "https://pypi.org/project/pep440/")
16241 (synopsis "Utils to check whether versions number match PEP 440")
16242 (description
16243 "This package provides a simple package with utils to check whether
16244versions number match PEP 440.")
16245 (license license:expat)))
16246
16247(define-public python-pep517
16248 (package
16249 (inherit python-pep517-bootstrap)
16250 (name "python-pep517")
16251 (arguments
16252 '(#:phases (modify-phases %standard-phases
16253 (replace 'check
16254 (lambda* (#:key tests? #:allow-other-keys)
16255 (delete-file "pytest.ini")
16256 (delete-file "tests/test_meta.py")
16257 (if tests?
16258 (invoke "pytest") #t))))))
16259 (native-inputs (list python-mock python-pytest python-testpath))))
16260
16261(define-public python-pyproject-metadata
16262 (package
16263 (name "python-pyproject-metadata")
16264 (version "0.7.1")
16265 (source
16266 (origin
16267 (method git-fetch)
16268 (uri (git-reference
16269 (url "https://github.com/FFY00/python-pyproject-metadata")
16270 (commit version)))
16271 (file-name (git-file-name name version))
16272 (sha256
16273 (base32
16274 "0yvs59ymz5gdix34a95wxlxvk9bnvjgrzsnmnc3ws7whpfv3yasm"))))
16275 (build-system pyproject-build-system)
16276 (arguments
16277 (list
16278 #:test-flags
16279 ;; Two tests fail because the error message slightly changed, so the
16280 ;; tests' regular expressions no longer match.
16281 '(list "--ignore=tests/test_standard_metadata.py")))
16282 (propagated-inputs (list python-packaging))
16283 (native-inputs (list python-pypa-build python-pytest python-setuptools
16284 python-tomli python-wheel))
16285 (home-page "https://github.com/FFY00/python-pyproject-metadata")
16286 (synopsis "Dataclass for PEP 621 metadata")
16287 (description "This project does not implement the parsing of
16288@file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
16289data structure representing PEP 621 metadata (already parsed), it will
16290validate this input and generate a PEP 643-compliant metadata
16291file (e.g. @file{PKG-INFO}).")
16292 (license license:expat)))
16293
16294;; pep621 was renamed to pyproject-metadata.
16295(define-deprecated-package python-pep621
16296 python-pyproject-metadata)
16297
16298(define-public python-meson-python
16299 (package
16300 (name "python-meson-python")
16301 (version "0.15.0")
16302 (source
16303 (origin
16304 (method url-fetch)
16305 (uri (pypi-uri "meson_python" version))
16306 (sha256
16307 (base32 "0vyjhjabvm41hqijifk33idbdl62i76kfyf884f9rs29rpp77nzx"))))
16308 (build-system meson-build-system)
16309 (propagated-inputs (list python-pyproject-metadata python-tomli))
16310 (home-page "https://github.com/mesonbuild/meson-python")
16311 (synopsis "Meson Python build backend (PEP 517)")
16312 (description "This package provides a PEP 517 build backend that makes
16313use of the Meson build system.")
16314 (license license:expat)))
16315
16316(define-public python-mccabe
16317 (package
16318 (name "python-mccabe")
16319 (version "0.7.0")
16320 (source
16321 (origin
16322 (method url-fetch)
16323 (uri (pypi-uri "mccabe" version))
16324 (sha256
16325 (base32 "09b34c7jj2a0yya7fp3x7lncna4zj7pr4caj9vgvnq1vqd0053il"))))
16326 (build-system pyproject-build-system)
16327 (arguments
16328 (list
16329 ;; Test fixtures are not released yet, see
16330 ;; <https://github.com/PyCQA/mccabe/issues/93>
16331 #:tests? #f))
16332 (native-inputs
16333 (list python-toml
16334 python-setuptools
16335 python-wheel))
16336 (home-page "https://github.com/PyCQA/mccabe")
16337 (synopsis "McCabe checker, plugin for flake8")
16338 (description
16339 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
16340complexity of Python source code.")
16341 (license license:expat)))
16342
16343(define-public python-autoflake8
16344 (package
16345 (name "python-autoflake8")
16346 (version "0.4.0")
16347 (source (origin
16348 (method git-fetch) ;for tests
16349 (uri (git-reference
16350 (url "https://github.com/fsouza/autoflake8")
16351 (commit (string-append "v" version))))
16352 (file-name (git-file-name name version))
16353 (sha256
16354 (base32
16355 "0jx7bkslbhr24yvq60pl39faz2r6g93f1zm1gygswl0rzr5zmgnh"))))
16356 (build-system pyproject-build-system)
16357 (native-inputs
16358 (list python-aiofiles
16359 python-poetry-core
16360 python-pytest
16361 python-pytest-xdist))
16362 (propagated-inputs (list python-pyflakes))
16363 (home-page "https://github.com/fsouza/autoflake8")
16364 (synopsis "Automatically fix issues reported by flake8")
16365 (description "Tool to automatically fix some issues reported by
16366@command{flake8}.")
16367 (license license:expat)))
16368
16369(define-public python-flake8
16370 (package
16371 (name "python-flake8")
16372 (version "7.1.1")
16373 (source
16374 (origin
16375 (method git-fetch) ; no tests data in PyPi package
16376 (uri (git-reference
16377 (url "https://github.com/pycqa/flake8")
16378 (commit version)))
16379 (file-name (git-file-name name version))
16380 (sha256
16381 (base32 "0qbj2m1ljyvpnncnkbm1cscy726c1if4n2c9ysfpmd2zm88rj87a"))))
16382 (build-system pyproject-build-system)
16383 (native-inputs
16384 (list python-pytest
16385 python-setuptools
16386 python-wheel))
16387 (propagated-inputs
16388 (list python-mccabe
16389 python-pycodestyle
16390 python-pyflakes))
16391 (home-page "https://flake8.pycqa.org/en/latest/")
16392 (synopsis "The modular source code checker: pep8, pyflakes and co")
16393 (description
16394 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
16395 (license license:expat)))
16396
16397(define-public python-flake8-blind-except
16398 (package
16399 (name "python-flake8-blind-except")
16400 (version "0.2.1")
16401 (source
16402 (origin
16403 (method git-fetch)
16404 (uri (git-reference
16405 (url "https://github.com/elijahandrews/flake8-blind-except")
16406 (commit (string-append "v" version))))
16407 (file-name (git-file-name name version))
16408 (sha256
16409 (base32 "09zrfrm0896miysrpb7fhxzqjn6pm8y0b638nncswm2wvw9by72q"))))
16410 (build-system pyproject-build-system)
16411 (arguments (list #:tests? #f)) ;no tests
16412 (native-inputs (list python-setuptools))
16413 (propagated-inputs (list python-pycodestyle))
16414 (home-page "https://github.com/elijahandrews/flake8-blind-except")
16415 (synopsis "Check for blind @code{except:} statements")
16416 (description
16417 "This package provides a flake8 extension that checks for blind
16418@code{except:} statements.")
16419 (license license:expat)))
16420
16421(define-public python-flake8-bugbear
16422 (package
16423 (name "python-flake8-bugbear")
16424 (version "24.10.31")
16425 (source
16426 (origin
16427 (method url-fetch)
16428 (uri (pypi-uri "flake8_bugbear" version))
16429 (sha256
16430 (base32 "1nrrwhfmk49riflmng26qqjzvfang5lij14ripzqwzxjf8f56ns3"))))
16431 (build-system pyproject-build-system)
16432 (native-inputs
16433 (list python-hypothesmith
16434 python-pytest
16435 python-setuptools
16436 python-wheel))
16437 (propagated-inputs
16438 (list python-attrs
16439 python-flake8))
16440 (home-page "https://github.com/PyCQA/flake8-bugbear")
16441 (synopsis "Flake8 plugin for finding likely bugs and design problems in your program")
16442 (description
16443 "This package contains a plugin for Flake8 finding likely bugs and design
16444problems in your program. It contains warnings that don't belong in pyflakes
16445and pycodestyle.")
16446 (license license:expat)))
16447
16448(define-public python-flake8-continuation
16449 (package
16450 (name "python-flake8-continuation")
16451 (version "1.0.5")
16452 (source
16453 (origin
16454 (method git-fetch)
16455 (uri (git-reference
16456 (url "https://github.com/planetlabs/flake8-continuation")
16457 (commit version)))
16458 (file-name (git-file-name name version))
16459 (sha256
16460 (base32 "04fsd361x03mgyydsdm9vr28ikr2mdip13c805i2wzxc45qsc9x7"))))
16461 (build-system pyproject-build-system)
16462 (arguments
16463 (list
16464 #:phases
16465 #~(modify-phases %standard-phases
16466 (add-after 'unpack 'remove-python-six-dependency
16467 (lambda _
16468 (substitute* "flake8_continuation.py"
16469 (("import six|six\\.moves\\.")
16470 ""))
16471 (substitute* "setup.py"
16472 ((", \"six\"")
16473 "")))))))
16474 (native-inputs (list python-pytest python-setuptools))
16475 (propagated-inputs (list python-flake8 python-pycodestyle))
16476 (home-page "https://github.com/planetlabs/flake8-continuation")
16477 (synopsis "Flake8 Line Continuation Plugin")
16478 (description
16479 "A Flake8 plugin that checks for the line continuation style to be in the
16480preferred method according to PEP-8, specifically:
16481@quotation
16482The preferred way of wrapping long lines is by using Python's implied line
16483continuation inside parentheses, brackets and braces. Long lines can be
16484broken over multiple lines by wrapping expressions in parentheses. These
16485should be used in preference to using a backslash for line continuation.
16486@end quotation")
16487 (license license:asl2.0)))
16488
16489(define-public python-flake8-debugger
16490 (package
16491 (name "python-flake8-debugger")
16492 (version "4.1.2")
16493 (source
16494 (origin
16495 (method git-fetch)
16496 (uri (git-reference
16497 (url "https://github.com/jbkahn/flake8-debugger")
16498 (commit version)))
16499 (file-name (git-file-name name version))
16500 (sha256
16501 (base32 "1nmqs238a02ypld32lwbagbk1jppm3pddrjdrrngc1xpbzb9nyl0"))))
16502 (build-system pyproject-build-system)
16503 (native-inputs (list python-poetry-core python-pytest python-setuptools))
16504 (propagated-inputs (list python-flake8 python-pycodestyle))
16505 (home-page "https://github.com/jbkahn/flake8-debugger")
16506 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
16507 (description
16508 "This package provides a Flake8 plugin that checks for @code{ipdb} and
16509@code{pdb} imports and set traces, as well as @code{from
16510IPython.terminal.embed}, @code{import InteractiveShellEmbed} and
16511@code{InteractiveShellEmbed()()}.")
16512 (license license:expat)))
16513
16514(define-public python-flake8-implicit-str-concat
16515 (package
16516 (name "python-flake8-implicit-str-concat")
16517 (version "0.5.0")
16518 (source
16519 (origin
16520 (method url-fetch)
16521 (uri (pypi-uri "flake8_implicit_str_concat" version))
16522 (sha256
16523 (base32 "1s59w4x053j4794n6h9c7hafa8jjjymx6aar5q23pjw4vrdis7hh"))))
16524 (build-system pyproject-build-system)
16525 (arguments
16526 (list
16527 #:tests? #f)) ; no tests in PiPY or git checkout
16528 (native-inputs
16529 (list python-hatchling))
16530 (propagated-inputs
16531 (list python-attrs
16532 python-more-itertools))
16533 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
16534 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
16535 (description
16536 "This is a plugin for the Python code checking tool Flake8 to encourage
16537correct string literal concatenation.
16538
16539It looks for style problems like implicitly concatenated string literals on
16540the same line (which can be introduced by the code formatting tool Black), or
16541unnecessary plus operators for explicit string literal concatenation.")
16542 (license license:expat)))
16543
16544(define-public python-flake8-print
16545 (package
16546 (name "python-flake8-print")
16547 (version "5.0.0")
16548 (source
16549 (origin
16550 (method url-fetch)
16551 (uri (pypi-uri "flake8-print" version))
16552 (sha256
16553 (base32 "1ydx92xck090ajp8vk2378fm0f4wj3mikhinjs3w1hcw70m5m4bn"))))
16554 (build-system pyproject-build-system)
16555 (arguments
16556 (list
16557 #:tests? #f)) ; no tests in PiPY or git checkout
16558 (native-inputs
16559 (list python-poetry-core))
16560 (propagated-inputs
16561 (list python-flake8
16562 python-pycodestyle))
16563 (home-page "https://github.com/jbkahn/flake8-print")
16564 (synopsis "Print statement checker plugin for Flake8")
16565 (description
16566 "This plugin for Flake8 checks for @code{print} statements in Python
16567files.")
16568 (license license:expat)))
16569
16570(define-public python-flake8-pyi
16571 (package
16572 (name "python-flake8-pyi")
16573 (version "24.9.0")
16574 (source
16575 (origin
16576 (method url-fetch)
16577 (uri (pypi-uri "flake8_pyi" version))
16578 (sha256
16579 (base32 "1n8cqbqq9cfyn952kwqqs4s7lcyycgr829ymxnplg0cm49877yv4"))))
16580 (build-system pyproject-build-system)
16581 (arguments
16582 (list
16583 #:phases
16584 #~(modify-phases %standard-phases
16585 (add-after 'unpack 'fix-pytest-config
16586 (lambda _
16587 ;; Prevent full threads utilization.
16588 (substitute* "pyproject.toml"
16589 (("-nauto") "")))))))
16590 (native-inputs
16591 (list python-hatchling
16592 python-pytest))
16593 (propagated-inputs
16594 (list python-attrs
16595 python-flake8
16596 python-pyflakes))
16597 (home-page "https://github.com/ambv/flake8-pyi")
16598 (synopsis "Flake8 plugin that provides specializations for type hinting stub files")
16599 (description
16600 "This package contains a plugin that provides specializations for type
16601hinting stub files, especially interesting for linting typeshed. It adds the
16602@file{.pyi} extension to the default value of the @code{--filename}
16603command-line argument to Flake8. This means stubs are linted by default with
16604this plugin enabled, without needing to explicitly list every file. It
16605modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
16606expressions after the entire file has been read. This enables support for
16607first-class forward references that stub files use.")
16608 (license license:expat)))
16609
16610(define-public python-flake8-quotes
16611 (package
16612 (name "python-flake8-quotes")
16613 (version "3.4.0")
16614 (source
16615 (origin
16616 (method url-fetch)
16617 (uri (pypi-uri "flake8-quotes" version))
16618 (sha256
16619 (base32 "0v1762x0819xqha7w4l4hh66bpi82imgiib8pvmd78hhnwplkn5a"))))
16620 (build-system pyproject-build-system)
16621 (native-inputs
16622 (list python-pytest
16623 python-setuptools
16624 python-wheel))
16625 (propagated-inputs
16626 (list python-flake8))
16627 (home-page "https://github.com/zheller/flake8-quotes/")
16628 (synopsis "Flake8 lint for quotes")
16629 (description "This package provides a Flake8 lint for quotes.")
16630 (license license:expat)))
16631
16632(define-public python-flake8-todo
16633 (package
16634 (name "python-flake8-todo")
16635 (version "0.7")
16636 (source
16637 (origin
16638 (method git-fetch)
16639 (uri (git-reference
16640 (url "https://github.com/schlamar/flake8-todo")
16641 (commit (string-append "v" version))))
16642 (file-name (git-file-name name version))
16643 (sha256
16644 (base32 "0bx4bs9l6cvqk5v21my4dn0zmkrr0sajsw6f3x1dj4fpg3dp5d8s"))))
16645 (build-system pyproject-build-system)
16646 (arguments (list #:tests? #f)) ; No tests.
16647 (native-inputs (list python-setuptools))
16648 (propagated-inputs (list python-pycodestyle))
16649 (home-page "https://github.com/schlamar/flake8-todo")
16650 (synopsis "TODO notes checker, plugin for flake8")
16651 (description
16652 "This package provides the @code{flake8-todo} Python module, a
16653TODO notes checker plugin for flake8.")
16654 (license license:expat)))
16655
16656(define-public python-flake8-isort
16657 (package
16658 (name "python-flake8-isort")
16659 (version "6.1.1")
16660 (source
16661 (origin
16662 (method url-fetch)
16663 (uri (pypi-uri "flake8_isort" version))
16664 (sha256
16665 (base32 "1cvh0d18scgq36gqa2vqbifjarln1r3axgq93lzc303ay0y2zy61"))))
16666 (build-system pyproject-build-system)
16667 (arguments
16668 (list
16669 #:tests? #f)) ; no tests in PiPY or git checkout
16670 (native-inputs
16671 (list python-hatchling))
16672 (propagated-inputs
16673 (list python-flake8
16674 python-isort))
16675 (home-page "https://github.com/gforcada/flake8-isort")
16676 (synopsis "Flake8 plugin integrating isort")
16677 (description
16678 "This package provides a flake8 plugin that integrates isort,
16679extending flake8 so that it can warn about badly sorted Python import
16680directives.")
16681 (license license:gpl2+)))
16682
16683(define-public python-autoflake
16684 (package
16685 (name "python-autoflake")
16686 (version "2.3.1")
16687 (source
16688 (origin
16689 (method url-fetch)
16690 (uri (pypi-uri "autoflake" version))
16691 (sha256
16692 (base32 "17lhrmz6h7pz2nald90p8gn3hhzbqwmd78819yf4b1habgf7b2y9"))))
16693 (build-system pyproject-build-system)
16694 (arguments
16695 (list
16696 #:phases
16697 #~(modify-phases %standard-phases
16698 (replace 'check
16699 (lambda _
16700 (invoke "python" "test_autoflake.py"))))))
16701 (native-inputs
16702 (list python-hatchling))
16703 (propagated-inputs
16704 (list python-pyflakes))
16705 (home-page "https://github.com/myint/autoflake")
16706 (synopsis "Removes unused imports and unused variables")
16707 (description
16708 "@code{autoflake} removes unused imports and unused variables from Python
16709code as reported by @code{pyflakes}.
16710
16711By default, it only removes unused imports for modules that are part of the
16712standard library. Removal of unused variables is also disabled by default.
16713It also removes useless @code{pass} statements.")
16714 (license license:expat)))
16715
16716(define-public python-mistune
16717 (package
16718 (name "python-mistune")
16719 (version "3.1.3")
16720 (source
16721 (origin
16722 (method url-fetch)
16723 (uri (pypi-uri "mistune" version))
16724 (sha256
16725 (base32 "1802kx9hdbqmbd9acxx4dx6wn77q7mfz5y32psvfqarbg0hmq0x7"))))
16726 (build-system pyproject-build-system)
16727 (native-inputs
16728 (list python-pytest
16729 python-setuptools
16730 python-wheel))
16731 (home-page "https://github.com/lepture/mistune")
16732 (synopsis "Markdown parser in pure Python")
16733 (description "This package provides a fast markdown parser in pure
16734Python.")
16735 (license license:bsd-3)))
16736
16737(define-public python-markdown
16738 (package
16739 (name "python-markdown")
16740 (version "3.10")
16741 (source
16742 (origin
16743 (method url-fetch)
16744 (uri (pypi-uri "markdown" version))
16745 (sha256
16746 (base32
16747 "03lcnvr39pmfiids6jdr1iwwr0hg62m0zf7g5arvdcm4597js1ip"))))
16748 (build-system pyproject-build-system)
16749 (native-inputs
16750 (list python-pyyaml
16751 python-setuptools))
16752 (home-page "https://python-markdown.github.io/")
16753 (synopsis "Python implementation of Markdown")
16754 (description
16755 "This package provides a Python implementation of John Gruber's
16756Markdown. The library features international input, various Markdown
16757extensions, and several HTML output formats. A command line wrapper
16758markdown_py is also provided to convert Markdown files to HTML.")
16759 (license license:bsd-3)))
16760
16761(define-public python-markdown2
16762 (package
16763 (name "python-markdown2")
16764 (version "2.5.3")
16765 (source
16766 (origin
16767 (method git-fetch) ; no tests data in PyPi package
16768 (uri (git-reference
16769 (url "https://github.com/trentm/python-markdown2")
16770 (commit version)))
16771 (file-name (git-file-name name version))
16772 (sha256
16773 (base32 "136lwfhrbgdy3ci7qrkvcm5qx5c4xv4zwbnn57yfqg37pymflima"))))
16774 (build-system pyproject-build-system)
16775 (arguments
16776 (list
16777 #:test-backend #~'custom
16778 #:test-flags #~(list "test.py" "--" "-knownfailure")
16779 #:phases
16780 #~(modify-phases %standard-phases
16781 (add-before 'check 'pre-check
16782 (lambda _
16783 (chdir "test"))))))
16784 (native-inputs
16785 (list ;; python-pygments ;optinal, tests fail when added
16786 ;; python-wavedrom ;optinal, not packaged
16787 ;; python-latex2mathml ;optinal, not packaged
16788 python-setuptools))
16789 (home-page "https://github.com/trentm/python-markdown2")
16790 (synopsis "Fast and complete Python implementation of Markdown")
16791 (description
16792 "This package provides a fast and complete Python implementation of
16793Markdown. It was written to closely match the behaviour of the original
16794Perl-implemented Markdown.pl. It also comes with a number of
16795extensions (called @code{extras}) for things like syntax coloring, tables,
16796header-ids.")
16797 (license license:expat)))
16798
16799(define-public python-mdx-include
16800 (package
16801 (name "python-mdx-include")
16802 (version "1.4.2")
16803 (source
16804 (origin
16805 (method git-fetch)
16806 (uri (git-reference
16807 (url "https://github.com/neurobin/mdx_include")
16808 (commit (string-append "v" version))))
16809 (file-name (git-file-name name version))
16810 (sha256
16811 (base32 "01fk4y7hkl8a06qfd4a258l8rgcx7z7j4dzb80gk9md48l6p516a"))))
16812 (build-system pyproject-build-system)
16813 (arguments
16814 (list
16815 #:test-backend #~'unittest
16816 #:phases
16817 (let* ((django-hello-url "\
16818https://gist.github.com/drgarcia1986/3cce1d134c3c3eeb01bd/raw/\
1681973951574d6b62a18b4c342235006ff89d299f879/django_hello.py")
16820 (django-hello
16821 (origin
16822 (method url-fetch)
16823 (uri django-hello-url)
16824 (sha256 (base32 "\
1682513bqmfqwypnv3apxs9akpk3fqsk0yzys5slxfllj285npnka550r")))))
16826 #~(modify-phases %standard-phases
16827 (add-before 'check 'disable-test-requiring-network
16828 (lambda _
16829 (substitute* "mdx_include/test/test.py"
16830 (("(\\s+def )test_(config|non_existent)\\(" _ pre post)
16831 (string-append pre "__off__test_" post "("))
16832 (((string-join (string-split #$django-hello-url #\.) "\\."))
16833 #+django-hello))))))))
16834 (native-inputs (list python-setuptools))
16835 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
16836 (home-page "https://github.com/neurobin/mdx_include")
16837 (synopsis "Python Markdown extension to include local or remote files")
16838 (description "Include extension for Python Markdown. It lets you include
16839local or remote (downloadable) files into your markdown at arbitrary
16840positions.
16841
16842This project is motivated by markdown-include and provides the same
16843functionalities with some extras.")
16844 (license license:bsd-3)))
16845
16846(define-public python-ptyprocess
16847 (package
16848 (name "python-ptyprocess")
16849 (version "0.7.0")
16850 (source
16851 (origin
16852 (method url-fetch)
16853 (uri (pypi-uri "ptyprocess" version))
16854 (sha256
16855 (base32
16856 "081j893x6c9qrfszp8swfqlpvk8agh1jc32y9140pvnf90xhlpaw"))))
16857 (build-system pyproject-build-system)
16858 (native-inputs
16859 (list python-flit-core
16860 python-pytest))
16861 (home-page "https://github.com/pexpect/ptyprocess")
16862 (synopsis "Run a subprocess in a pseudo terminal")
16863 (description
16864 "This package provides a Python library used to launch a subprocess in a
16865pseudo terminal (pty), and interact with both the process and its pty.")
16866 (license license:isc)))
16867
16868(define-public python-configshell-fb
16869 (package
16870 (name "python-configshell-fb")
16871 (version "1.1.30")
16872 (source
16873 (origin
16874 (method url-fetch)
16875 (uri (pypi-uri "configshell-fb" version))
16876 ;; XXX: Snippet below is required because on v1.1.30 the source code
16877 ;; has configshell_fb as softlink to configshell and guix
16878 ;; pyproject-build-system doesn't work with symlinks very well.
16879 ;;
16880 ;; This package is only used in spdk for now and it's crucial to keep
16881 ;; it locked on version and keep the snipped for spdk to build
16882 ;; successfully.
16883 (snippet #~(begin
16884 (use-modules (guix build utils))
16885 (delete-file "setup.py")
16886 (delete-file-recursively "configshell_fb")
16887 (rename-file "configshell" "configshell_fb")))
16888 (sha256
16889 (base32 "1zkhf62qsfcbxwzlc62r6qx37wwyscppc469rlm45zy9lzmbgxj1"))))
16890 (build-system pyproject-build-system)
16891 (arguments
16892 (list #:tests? #f)) ;; this package has no tests
16893 (native-inputs
16894 (list python-setuptools
16895 python-six
16896 python-wheel))
16897 (propagated-inputs
16898 (list python-pyparsing))
16899 (home-page "https://github.com/open-iscsi/configshell-fb")
16900 (synopsis "Framework to implement simple but nice CLIs")
16901 (description
16902 "This package provides a framework to implement simple but nice CLIs.")
16903 (license license:asl2.0)))
16904
16905(define-public python-crccheck
16906 (package
16907 (name "python-crccheck")
16908 (version "1.3.0")
16909 (source
16910 (origin
16911 (method git-fetch) ; no tests in PyPI
16912 (uri (git-reference
16913 (url "https://github.com/MartinScharrer/crccheck")
16914 (commit (string-append "v" version))))
16915 (file-name (git-file-name name version))
16916 (sha256
16917 (base32 "1sagpmsh95si77nhqmxx6mbal2jbxpl4a3mqjfnz19mf2pfyvs4y"))))
16918 (build-system pyproject-build-system)
16919 (native-inputs (list python-pytest python-setuptools python-wheel))
16920 (home-page "https://github.com/MartinScharrer/crccheck")
16921 (synopsis "Calculation library for CRCs and checksums")
16922 (description "@code{crccheck} is a calculation library for CRCs and
16923checksums. It implement more than a hundred checksum routines.")
16924 (license license:gpl3+)))
16925
16926(define-public python-crashtest
16927 (package
16928 (name "python-crashtest")
16929 (version "0.4.1")
16930 (source
16931 (origin
16932 (method git-fetch)
16933 (uri (git-reference
16934 (url "https://github.com/sdispater/crashtest")
16935 (commit version)))
16936 (file-name (git-file-name name version))
16937 (sha256
16938 (base32 "180xrr1iw1614z7yrrnsigy0211q9985f9pbzjsj6rvrs6w7fm2d"))))
16939 (build-system pyproject-build-system)
16940 (native-inputs (list python-poetry-core python-pytest))
16941 (home-page "https://github.com/sdispater/crashtest")
16942 (synopsis "Manage Python errors with ease")
16943 (description
16944 "Python library that makes exceptions handling and inspection easier.")
16945 (license license:expat)))
16946
16947(define-public python-pysendfile
16948 (package
16949 (name "python-pysendfile")
16950 (version "2.0.1")
16951 (source
16952 (origin
16953 (method git-fetch)
16954 (uri (git-reference
16955 (url "https://github.com/giampaolo/pysendfile")
16956 (commit (string-append "release-" version))))
16957 (file-name (git-file-name name version))
16958 (sha256
16959 (base32 "1d2pcqad57l5ilc2icabybzzjgsg46djklhvyf17fgbkb0x3yc7c"))))
16960 (build-system pyproject-build-system)
16961 (arguments
16962 (list
16963 #:phases
16964 #~(modify-phases %standard-phases
16965 (replace 'check
16966 (lambda* (#:key tests? #:allow-other-keys)
16967 (when tests?
16968 (setenv "HOME" "/tmp")
16969 (invoke "make" "test")))))))
16970 (native-inputs (list python-pytest python-setuptools))
16971 (home-page "https://github.com/giampaolo/pysendfile")
16972 (synopsis "Python interface to sendfile(2)")
16973 (description "The @code{pysendfile} Python library provides an interface to
16974the @code{sendfile(2)} system call.")
16975 (license license:expat)))
16976
16977(define-public python-pyftpdlib
16978 (package
16979 (name "python-pyftpdlib")
16980 (version "1.5.7")
16981 (source
16982 (origin
16983 (method url-fetch)
16984 (uri (pypi-uri "pyftpdlib" version))
16985 (sha256
16986 (base32 "0vk5gcx4svjrpm014ykwxmijqihgb4ha17kb3yphk0nv6x0wx8vy"))))
16987 (build-system pyproject-build-system)
16988 ;; Using Pytest instead of the Makefile causes the command line tests to
16989 ;; fail on unknown Pytest arguments.
16990 (arguments
16991 (list
16992 #:test-flags
16993 #~(list "-k" "not TestCommandLineParser"
16994 #$@(if (target-aarch64?)
16995 ;; TimeoutError: timed out
16996 '((string-append "--deselect=pyftpdlib/test/test_functional.py"
16997 "::TestTimeouts::test_idle_data_timeout2"))
16998 '()))))
16999 (native-inputs
17000 (list python-psutil
17001 python-pytest
17002 python-setuptools
17003 python-wheel))
17004 (propagated-inputs
17005 (list python-pyopenssl
17006 python-pysendfile))
17007 (home-page "https://github.com/giampaolo/pyftpdlib/")
17008 (synopsis "Asynchronous and scalable Python FTP server library")
17009 (description "The Python FTP server library provides a high-level
17010interface to write efficient, scalable and asynchronous FTP servers with
17011Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
17012RFC-959} FTP server implementation available for Python, and has the following
17013traits:
17014@itemize
17015@item
17016It is lightweight, fast and scalable.
17017@item
17018It uses the @code{sendfile(2)} system call for uploads.
17019@item
17020It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
17021asynchronously.
17022@item
17023It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
17024IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
17025RFC-2640}) and MLSD/MLST commands (RFC-3659).
17026@item
17027It has a flexible system of @samp{authorizers} able to manage both
17028@samp{virtual} and @samp{real} users.
17029@end itemize")
17030 (license license:expat)))
17031
17032(define-public python-fs
17033 (package
17034 (name "python-fs")
17035 (version "2.4.16")
17036 (source
17037 (origin
17038 (method git-fetch)
17039 (uri (git-reference
17040 (url "https://github.com/PyFilesystem/pyfilesystem2/")
17041 (commit (string-append "v" version))))
17042 (file-name (git-file-name name version))
17043 (sha256
17044 (base32 "1wrkhsv57kv4jcadn7w330mgbjjsimgzfvicni8cka6y1a8chbjs"))))
17045 (build-system pyproject-build-system)
17046 (arguments
17047 (list
17048 ;; tests: 1995 passed, 21 skipped, 411 deselected, 14 warnings
17049 #:test-flags #~(list "-m" "not slow")
17050 #:tests? (and (not (%current-target-system))
17051 (->bool (this-package-native-input "python-pytest")))
17052 #:phases
17053 #~(modify-phases %standard-phases
17054 (add-before 'check 'pre-check
17055 (lambda _
17056 (setenv "HOME" "/tmp"))))))
17057 (native-inputs
17058 (append
17059 (list python-setuptools)
17060 ;; 'python-pyftpdlib' is needed for tests but it indirectly depends Rust,
17061 ;; which is currently unavailable on aarch64-linux. Remove all the test
17062 ;; dependencies in that case.
17063 (if (and (not (%current-target-system))
17064 (supported-package? python-pyftpdlib))
17065 (list python-mock
17066 python-parameterized
17067 python-pyftpdlib
17068 python-pytest)
17069 '())))
17070 (propagated-inputs
17071 (list python-appdirs
17072 python-pytz
17073 python-six)) ;still hard itegrated
17074 (home-page "https://github.com/PyFilesystem/pyfilesystem2/")
17075 (synopsis "File system abstraction layer for Python")
17076 (description
17077 "PyFilesystem's @code{FS} object is a file system abstraction sharing
17078similarities with Python's own @code{file} object for single files. It allows
17079opening all the files under a given directory recursively, as a single
17080@code{FS} object. This enables, for example, counting the combined number of
17081lines in the contained files easily.")
17082 (license license:expat)))
17083
17084;;; Tests are left out in the main package to avoid cycles.
17085;; XXX: When updating, solve comment in python-cu2qu.
17086(define-public python-fonttools-minimal
17087 (hidden-package
17088 (package
17089 (name "python-fonttools-minimal")
17090 (version "4.59.2")
17091 (source (origin
17092 (method url-fetch)
17093 (uri (pypi-uri "fonttools" version ".tar.gz"))
17094 (sha256
17095 (base32
17096 "08pgq9nrj3r81gzb6gbf5mcak0xyqrj26cw0rc5za4v1n14hfb77"))))
17097 (build-system python-build-system)
17098 (arguments '(#:tests? #f))
17099 (home-page "https://github.com/fonttools/fonttools")
17100 (synopsis "Tools to manipulate font files")
17101 (description
17102 "FontTools/TTX is a library to manipulate font files from Python. It
17103supports reading and writing of TrueType/OpenType fonts, reading and writing
17104of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
17105also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
17106from an XML-based format.")
17107 (license license:expat))))
17108
17109(define-public python-fonttools
17110 (let ((base python-fonttools-minimal))
17111 (package/inherit base
17112 (name "python-fonttools")
17113 (arguments
17114 (substitute-keyword-arguments (package-arguments base)
17115 ((#:tests? _ #f)
17116 (not (%current-target-system)))
17117 ((#:phases phases '%standard-phases)
17118 `(modify-phases ,phases
17119 (replace 'check
17120 (lambda* (#:key tests? #:allow-other-keys)
17121 (when tests?
17122 (invoke "pytest" "-vv"
17123 "-k"
17124 ;; XXX: These tests need data files that are not
17125 ;; shipped with the PyPI release.
17126 (format #f "not ~a"
17127 (string-join
17128 '("test_cli_vtp"
17129 "test_group_order"
17130 "test_read_fontdimens_mathsy"
17131 "test_read_fontdimens_mathex"
17132 "test_read_fontdimens_vanilla"
17133 "test_read_boundary_char"
17134 "test_reading_supplement_encoding"
17135 "fontTools.tfmLib"
17136 ;; The MtiTest tests fail for unknown
17137 ;; reasons (see:
17138 ;; https://github.com/fonttools/
17139 ;; fonttools/issues/3078)
17140 "MtiTest")
17141 " and not "))))))))))
17142 (native-inputs
17143 (modify-inputs (package-native-inputs base)
17144 (append python-pytest)))
17145 (propagated-inputs
17146 (list python-brotli
17147 python-fs
17148 python-lxml
17149 python-lz4
17150 python-scipy
17151 python-unicodedata2
17152 python-zopfli))
17153 (properties (alist-delete 'hidden? (package-properties base))))))
17154
17155(define-public python-ly
17156 (package
17157 (name "python-ly")
17158 (version "0.9.9")
17159 (source
17160 (origin
17161 (method git-fetch)
17162 (uri (git-reference
17163 (url "https://github.com/frescobaldi/python-ly")
17164 (commit (string-append "v" version))))
17165 (file-name (git-file-name name version))
17166 (sha256
17167 (base32 "1q9jdvc4mrv3xkp7jm4g4kisq1k1d05b5d3wfvhpd85a9yqjrhq8"))))
17168 (build-system pyproject-build-system)
17169 (arguments
17170 (list
17171 #:phases
17172 (let ((namespace-url "http://www.w3.org/2001/03/xml.xsd")
17173 (xlink-url "http://www.w3.org/XML/2008/06/xlink.xsd"))
17174 #~(modify-phases %standard-phases
17175 (add-after 'unpack 'inject-data
17176 (lambda _
17177 (substitute* "tests/musicxml.xsd"
17178 (((string-join (string-split #$namespace-url #\.) "\\."))
17179 #$(origin
17180 (method url-fetch)
17181 (uri namespace-url)
17182 (sha256 (base32 "\
171831j6h0sp0pcqi5dv9m6sxwr8brrb59fyx091ld1x6wlh28js4vn8f"))))
17184 (((string-join (string-split #$xlink-url #\.) "\\."))
17185 #$(origin
17186 (method url-fetch)
17187 (uri xlink-url)
17188 (sha256 (base32 "\
171890jpjha5iiq4rf4hx3qfnmyya9cf17ysxz0rbhsffn5nwgxnghgf8")))))))))))
17190 (native-inputs (list python-hatchling python-lxml python-pytest))
17191 (synopsis "Tool and library for manipulating LilyPond files")
17192 (description
17193 "This package provides a Python library to parse, manipulate or create
17194documents in LilyPond format. A command line program ly is also provided that
17195can be used to do various manipulations with LilyPond files.")
17196 (home-page "https://pypi.org/project/python-ly/")
17197 (license license:gpl2+)))
17198
17199(define-public python-appdirs
17200 (package
17201 (name "python-appdirs")
17202 (version "1.4.4")
17203 (source
17204 (origin
17205 (method url-fetch)
17206 (uri (pypi-uri "appdirs" version))
17207 (sha256
17208 (base32 "0hfzmwknxqhg20aj83fx80vna74xfimg8sk18wb85fmin9kh2pbx"))))
17209 (build-system pyproject-build-system)
17210 (arguments (list #:test-backend #~'unittest))
17211 (native-inputs (list python-setuptools))
17212 (home-page "https://github.com/ActiveState/appdirs")
17213 (synopsis "Determine platform-specific dirs, e.g. a \"user data dir\"")
17214 (description
17215 "This module provides a portable way of finding out where user data
17216should be stored on various operating systems.")
17217 (license license:expat)))
17218
17219(define-public python-google-pasta
17220 (package
17221 (name "python-google-pasta")
17222 (version "0.2.0")
17223 (source
17224 (origin
17225 (method url-fetch)
17226 (uri (pypi-uri "google-pasta" version))
17227 (sha256
17228 (base32 "0vm1r1jlaiagj0l9yf7j6zn9w3733dr2169911c0svgrr3gwiwn9"))))
17229 (build-system pyproject-build-system)
17230 (propagated-inputs (list python-six))
17231 (native-inputs (list python-pytest python-setuptools))
17232 (home-page "https://github.com/google/pasta")
17233 (synopsis "AST-based Python refactoring library")
17234 (description "This package provides \"pasta\", an AST-based Python
17235refactoring library.")
17236 (license license:asl2.0)))
17237
17238(define-public python-gorilla
17239 (package
17240 (name "python-gorilla")
17241 (version "0.3.0")
17242 (source
17243 (origin
17244 (method git-fetch)
17245 (uri (git-reference
17246 (url "https://github.com/christophercrouzet/gorilla")
17247 (commit (string-append "v" version))))
17248 (file-name (git-file-name name version))
17249 (sha256
17250 (base32 "0hm5ynswhz6i763s6cjlh8lv5ai0f3x17mjvlihqs8idlk4vbrn0"))))
17251 (build-system pyproject-build-system)
17252 (arguments (list #:test-backend #~'unittest))
17253 (native-inputs (list python-setuptools))
17254 (home-page "https://github.com/christophercrouzet/gorilla")
17255 (synopsis "Convenient monkey patching with Python")
17256 (description
17257 "Gorilla is a Python library that provides a convenient approach to
17258monkey patching. Monkey patching is the process of modifying module and
17259class attributes at runtime with the purpose of replacing or extending
17260third-party code.")
17261 (license license:expat)))
17262
17263(define-public python-llfuse
17264 (package
17265 (name "python-llfuse")
17266 (version "1.5.1")
17267 (source
17268 (origin
17269 (method git-fetch)
17270 (uri (git-reference
17271 (url "https://github.com/python-llfuse/python-llfuse")
17272 (commit (string-append "release-" version))))
17273 (file-name (git-file-name name version))
17274 (sha256
17275 (base32 "16wsrg1py4gvcxfgsfkll73lfq62psc0hcqvs73az7s4b1pvyy62"))))
17276 (build-system pyproject-build-system)
17277 (arguments
17278 (list
17279 #:test-flags
17280 #~(list "-k" "not test_listdir") ; requires /usr/bin access.
17281 #:phases
17282 #~(modify-phases %standard-phases
17283 (add-before 'build 'build-cython
17284 (lambda _
17285 (invoke "python" "setup.py" "build_cython"))))))
17286 (inputs (list fuse-2 attr))
17287 (native-inputs
17288 (list pkg-config python-cython python-pytest python-setuptools))
17289 (synopsis "Python bindings for FUSE")
17290 (description
17291 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
17292 (home-page "https://github.com/python-llfuse/python-llfuse")
17293 (license license:lgpl2.0+)))
17294
17295(define-public python-msgpack
17296 (package
17297 (name "python-msgpack")
17298 (version "1.1.2")
17299 (source
17300 (origin
17301 (method url-fetch)
17302 (uri (pypi-uri "msgpack" version))
17303 (sha256
17304 (base32 "0zpl4sb9zk7fh3abaxqlf65d0g3hvjy6k028k3rn1pbk2cy7cq1v"))))
17305 (build-system pyproject-build-system)
17306 (native-inputs
17307 (list python-pytest
17308 python-setuptools))
17309 (home-page "https://msgpack.org/")
17310 (synopsis "MessagePack (de)serializer")
17311 (description "MessagePack is a fast, compact binary serialization format,
17312suitable for similar data to JSON. This package provides CPython bindings for
17313reading and writing MessagePack data.")
17314 (license license:asl2.0)))
17315
17316(define-public python-msgpack-for-borg
17317 (hidden-package
17318 (package
17319 (inherit python-msgpack)
17320 (version "1.0.4")
17321 (source
17322 (origin
17323 (method url-fetch)
17324 (uri (pypi-uri "msgpack" version))
17325 (sha256
17326 (base32 "0pqzy1zclyhd42gfibhkcqymbspy5a6v421g87mh40h3iz0nkn7m")))))))
17327
17328(define-public python-openstep-plist
17329 (package
17330 (name "python-openstep-plist")
17331 (version "0.3.0")
17332 (source
17333 (origin
17334 (method git-fetch)
17335 (uri (git-reference
17336 (url "https://github.com/fonttools/openstep-plist")
17337 (commit (string-append "v" version))))
17338 (file-name (git-file-name name version))
17339 (sha256
17340 (base32 "1rxjgzh0p069ncsr2986rn32vhdqyq35irbqg2559jh18456mkca"))))
17341 (build-system pyproject-build-system)
17342 (arguments
17343 (list
17344 #:phases
17345 #~(modify-phases %standard-phases
17346 (add-after 'unpack 'pretend-version
17347 (lambda _
17348 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
17349 #$(package-version this-package)))))))
17350 (native-inputs (list python-cython-0 python-pytest python-setuptools-scm
17351 python-setuptools))
17352 (home-page "https://github.com/fonttools/openstep-plist")
17353 (synopsis "OpenStep plist parser and writer")
17354 (description
17355 "This package provides a parser for the \"old style\" OpenStep property
17356list format (also known as ASCII plist), written in Cython.")
17357 (license license:expat)))
17358
17359(define-public python-resolvelib
17360 (package
17361 (name "python-resolvelib")
17362 (version "1.1.0")
17363 (source
17364 (origin
17365 ;; Tests are missing from the PyPI release.
17366 (method git-fetch)
17367 (uri (git-reference
17368 (url "https://github.com/sarugaku/resolvelib")
17369 (commit version)))
17370 (file-name (git-file-name name version))
17371 (sha256
17372 (base32 "0pw99897mm2y7pa2g35z0f7vcmgh42xglz5szbrvigczvwa605sh"))))
17373 (build-system pyproject-build-system)
17374 (native-inputs
17375 (list python-packaging
17376 python-pytest
17377 python-setuptools
17378 python-wheel))
17379 (home-page "https://github.com/sarugaku/resolvelib")
17380 (synopsis "Abstract dependencies resolver")
17381 (description
17382 "The ResolveLib library provides a @code{Resolver} class that includes
17383dependency resolution logic.")
17384 (license license:isc)))
17385
17386;; XXX: Deprecated package: this project was archived by the owner on Mar 26,
17387;; 2022. It is now read-only.
17388(define-public python-commonmark
17389 (package
17390 (name "python-commonmark")
17391 (version "0.9.1")
17392 (source
17393 (origin
17394 (method url-fetch)
17395 (uri (pypi-uri "commonmark" version))
17396 (sha256
17397 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
17398 (build-system pyproject-build-system)
17399 (native-inputs
17400 (list python-setuptools))
17401 (home-page "https://github.com/readthedocs/commonmark.py")
17402 (synopsis "Python parser for the CommonMark Markdown spec")
17403 (description
17404 "This module is a pure Python port of jgm's @code{commonmark.js}, a
17405Markdown parser and renderer for the CommonMark specification, using only
17406native modules.")
17407 (license license:bsd-3)))
17408
17409(define-public python-immutables
17410 (package
17411 (name "python-immutables")
17412 (version "0.21")
17413 (source
17414 (origin
17415 (method url-fetch)
17416 (uri (pypi-uri "immutables" version))
17417 (sha256
17418 (base32 "0jpw9nr2mbzqykigjhqa3a095bx7krwsnmjcxcpj944p8kqglpxm"))))
17419 (build-system pyproject-build-system)
17420 (native-inputs
17421 (list python-mypy python-pytest python-setuptools python-wheel))
17422 (home-page "https://github.com/MagicStack/immutables")
17423 (synopsis "High-performance immutable mapping type for Python")
17424 (description
17425 "An immutable mapping type for Python. The underlying datastructure is a
17426Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
17427functional languages.")
17428 (license license:asl2.0)))
17429
17430(define-public python-prettytable
17431 (package
17432 (name "python-prettytable")
17433 (version "3.12.0")
17434 (source
17435 (origin
17436 (method url-fetch)
17437 (uri (pypi-uri "prettytable" version))
17438 (sha256
17439 (base32 "0168xqdr0i9r4p3a3hjd4n7f133lp4xkxhvfx63aqisplcdkwjzh"))))
17440 (build-system pyproject-build-system)
17441 (native-inputs
17442 (list python-hatchling
17443 python-hatch-vcs
17444 python-pytest
17445 python-pytest-cov
17446 python-pytest-lazy-fixtures
17447 python-setuptools-scm))
17448 (propagated-inputs
17449 (list python-wcwidth))
17450 (home-page "https://github.com/jazzband/prettytable")
17451 (synopsis "Display tabular data in an ASCII table format")
17452 (description
17453 "A library designed to represent tabular data in visually appealing ASCII
17454tables. PrettyTable allows for selection of which columns are to be printed,
17455independent alignment of columns (left or right justified or centred) and
17456printing of sub-tables by specifying a row range.")
17457 (license license:bsd-3)))
17458
17459(define-public python-rtf-tokenize
17460 (package
17461 (name "python-rtf-tokenize")
17462 (version "1.0.1")
17463 (source (origin
17464 (method url-fetch)
17465 (uri (pypi-uri "rtf_tokenize" version))
17466 (sha256
17467 (base32
17468 "1ljs0dcg2p1iad4zrxgn1pbrrcjcrswhjxrbprhdxd822n0al84h"))))
17469 (build-system pyproject-build-system)
17470 (native-inputs (list python-pytest python-setuptools python-wheel))
17471 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
17472 (synopsis "Simple RTF tokenizer")
17473 (description "This package is a simple RTF tokenizer.")
17474 (license license:gpl2+)))
17475
17476(define-public python-curio
17477 (package
17478 (name "python-curio")
17479 (version "1.6")
17480 (source
17481 (origin
17482 (method url-fetch)
17483 (uri (pypi-uri "curio" version))
17484 (sha256
17485 (base32 "0isj3jl5mx6m25nr1f7r91hfaydhkvmks9p85dyvl5h2n9nmhajn"))))
17486 (build-system pyproject-build-system)
17487 (arguments
17488 (list
17489 #:test-flags
17490 #~(list ;; AttributeError: 'NoneType' object has no attribute
17491 ;; 'terminate'
17492 "--deselect=tests/test_workers.py::test_exception"
17493 ;; Tries to open an outgoing connection.
17494 "--deselect=tests/test_network.py::test_ssl_outgoing"
17495 ;; This test fails since Python 3.9.9, see
17496 ;; <https://github.com/dabeaz/curio/issues/347>.
17497 ;; AttributeError: 'NoneType' object has no attribute
17498 ;; 'terminate'
17499 "--deselect=tests/test_workers.py::test_worker_timeout"
17500 ;; AttributeError: 'NoneType' object has no attribute
17501 ;; 'terminate'
17502 "--deselect=tests/test_workers.py::test_bad_cpu"
17503 "--deselect=tests/test_workers.py::test_cpu"
17504 "--deselect=tests/test_workers.py::test_worker_cancel")))
17505 (native-inputs
17506 (list python-pytest
17507 python-setuptools
17508 python-wheel))
17509 (home-page "https://github.com/dabeaz/curio")
17510 (synopsis "Coroutine-based library for concurrent Python")
17511 (description
17512 "Curio is a coroutine-based library for concurrent Python systems
17513programming. It provides standard programming abstractions such as as
17514tasks, sockets, files, locks, and queues.")
17515 (license license:bsd-3)))
17516
17517(define-public python-sniffio
17518 (package
17519 (name "python-sniffio")
17520 (version "1.3.1")
17521 (source
17522 (origin
17523 (method url-fetch)
17524 (uri (pypi-uri "sniffio" version))
17525 (sha256
17526 (base32 "1p496yran6zwg47m7w26r8y89nrsbkrrbf4119slj3qaczf4wcpl"))))
17527 (build-system pyproject-build-system)
17528 (native-inputs
17529 (list python-curio python-pytest python-setuptools))
17530 (home-page "https://github.com/python-trio/sniffio")
17531 (synopsis "Detect which async library a program is running under")
17532 (description
17533 "This package detects which async library a program is running under. It
17534supports multiple async I/O packages, like Trio, and asyncio.")
17535 ;; Either license applies.
17536 (license (list license:expat license:asl2.0))))
17537
17538(define-public python-snuggs
17539 (package
17540 (name "python-snuggs")
17541 (version "1.4.7")
17542 (source (origin
17543 (method url-fetch)
17544 (uri (pypi-uri "snuggs" version))
17545 (sha256
17546 (base32
17547 "0yv1wayrw9g6k0c2f721kha7wsv0s1fdlxpf5x7f34iqzq9z272h"))))
17548 (build-system pyproject-build-system)
17549 (propagated-inputs (list python-numpy python-pyparsing))
17550 (native-inputs (list python-hypothesis python-pytest python-setuptools
17551 python-wheel))
17552 (home-page "https://github.com/mapbox/snuggs")
17553 (synopsis "Snuggs are S-expressions for Numpy")
17554 (description "Snuggs are S-expressions for Numpy.")
17555 (license license:expat)))
17556
17557(define-public python-geojson
17558 (package
17559 (name "python-geojson")
17560 (version "3.2.0")
17561 (source
17562 (origin
17563 (method url-fetch)
17564 (uri (pypi-uri "geojson" version))
17565 (sha256
17566 (base32 "00s9h22vs4ppncwg3a0gh90czb2dd6d99qznypw72vwc3sxblq5q"))))
17567 (build-system pyproject-build-system)
17568 (native-inputs (list python-pytest python-setuptools))
17569 (home-page "https://github.com/jazzband/geojson")
17570 (synopsis "Python bindings and utilities for GeoJSON")
17571 (description
17572 "This package provides Python bindings and utilities for
17573@uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
17574structures.")
17575 (license license:bsd-3)))
17576
17577;; pyowm only accepts a version less than version 3.
17578(define-public python-geojson-for-pyowm
17579 (package
17580 (inherit python-geojson)
17581 (version "2.5.0")
17582 (source
17583 (origin
17584 (method url-fetch)
17585 (uri (pypi-uri "geojson" version))
17586 (sha256
17587 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
17588 (arguments
17589 ;; https://github.com/jazzband/geojson/issues/175
17590 (list #:tests? #f))))
17591
17592(define-public python-gpxpy
17593 (package
17594 (name "python-gpxpy")
17595 (version "1.6.2")
17596 (source
17597 (origin
17598 (method url-fetch)
17599 (uri (pypi-uri "gpxpy" version))
17600 (sha256
17601 (base32 "1bh1dkrbmcqb46r7j4fazzq7j6zfr2f04frm6h4bhhpcjx5lhb57"))))
17602 (build-system pyproject-build-system)
17603 (arguments
17604 (list #:test-backend #~'unittest))
17605 (native-inputs
17606 (list python-setuptools))
17607 (home-page "https://github.com/tkrajina/gpxpy")
17608 (synopsis "Python GPX parser")
17609 (description "GPX file parser and GPS track manipulation library.")
17610 (license license:asl2.0)))
17611
17612(define-public python-get-version
17613 (package
17614 (name "python-get-version")
17615 (version "3.5.5")
17616 (source
17617 (origin
17618 (method url-fetch)
17619 (uri (pypi-uri "get_version" version))
17620 (sha256
17621 (base32
17622 "01afv4fkgrm8v9hiww3qymmx201b6z3f8lc4g6nzq7djappn581x"))))
17623 (build-system pyproject-build-system)
17624 (arguments
17625 ;; XXX: No tests in PyPI and building from GitHub fails because of the
17626 ;; lack of git metadata in the checkout.
17627 (list #:tests? #f))
17628 (native-inputs (list python-flit-core))
17629 (propagated-inputs (list python-dunamai))
17630 (home-page "https://github.com/flying-sheep/get_version")
17631 (synopsis "Version helper in the spirit of versioneer")
17632 (description
17633 "This package provides a version helper that lets you automatically use
17634the latest @code{vX.X.X} Git tag as the version in your Python package. It
17635also supports getting the version from Python source distributions or, once
17636your package is installed, via @code{pkg_resources} (part of
17637@code{setuptools}).")
17638 (license license:gpl3+)))
17639
17640(define-public python-filetype
17641 (package
17642 (name "python-filetype")
17643 (version "1.2.0")
17644 (source
17645 (origin
17646 (method url-fetch)
17647 (uri (pypi-uri "filetype" version))
17648 (sha256
17649 (base32 "1nxa91szfbhhbhvdwj06jz8zghzwgb9lf0v6aj61vx2b8zb6rdb6"))))
17650 (build-system pyproject-build-system)
17651 (native-inputs (list python-pytest
17652 python-pytest-benchmark
17653 python-setuptools
17654 python-wheel))
17655 (home-page "https://github.com/h2non/filetype.py")
17656 (synopsis "Infer file type and MIME type of any file/buffer")
17657 (description "@code{filetype} is a small and dependency free Python
17658package to infer file type and MIME type checking the magic numbers
17659signature of a file or buffer.")
17660 (license license:expat)))
17661
17662(define-public python-cachelib
17663 (package
17664 (name "python-cachelib")
17665 (version "0.13.0")
17666 (source
17667 (origin
17668 (method url-fetch)
17669 (uri (pypi-uri "cachelib" version))
17670 (sha256
17671 (base32 "0j0s5vyhgka6g16a7n9g1fcc8wqxdl8rgzvlwaz9axf5wfb8k790"))))
17672 (build-system pyproject-build-system)
17673 (arguments
17674 ;; These tests use a remote connection.
17675 (list #:test-flags #~(list "--ignore" "tests/test_dynamodb_cache.py"
17676 "--ignore" "tests/test_mongodb_cache.py")))
17677 (native-inputs
17678 (list python-pytest python-pytest-xprocess python-setuptools python-wheel))
17679 (home-page "https://github.com/pallets-eco/cachelib")
17680 (synopsis "Collection of cache libraries")
17681 (description "Cachelib is a library extracted from @code{werkzeug} which
17682provides a collection of cache libraries in the same API interface.")
17683 (license license:bsd-3)))
17684
17685(define-public python-pylru
17686 (package
17687 (name "python-pylru")
17688 (version "1.2.0")
17689 (source
17690 (origin
17691 (method git-fetch)
17692 (uri (git-reference
17693 (url "https://github.com/jlhutch/pylru")
17694 (commit (string-append "v" version))))
17695 (file-name (git-file-name name version))
17696 (sha256
17697 (base32 "0sqai530d7fpjzny476f3zqq9mv05xqbyw500jmbhrpj9yy1l9xp"))))
17698 (build-system pyproject-build-system)
17699 (arguments
17700 (list
17701 #:test-backend #~'custom
17702 #:test-flags #~(list "test.py")))
17703 (native-inputs (list python-pytest python-setuptools))
17704 (home-page "https://github.com/jlhutch/pylru")
17705 (synopsis "Least recently used (LRU) cache implementation")
17706 (description
17707 "Pylru implements a true LRU cache along with several support classes.
17708Pylru provides a cache class with a simple dict interface. It also provides
17709classes to wrap any object that has a dict interface with a cache. Both
17710write-through and write-back semantics are supported. Pylru also provides
17711classes to wrap functions in a similar way, including a function decorator.")
17712 (license license:gpl2+)))
17713
17714(define-public python-legacy-api-wrap
17715 (package
17716 (name "python-legacy-api-wrap")
17717 (version "1.4.1")
17718 (source
17719 (origin
17720 (method url-fetch)
17721 (uri (pypi-uri "legacy_api_wrap" version))
17722 (sha256
17723 (base32
17724 "1d5jyd8d2wxm6y0s39wwqw87gdm4zqlbyz78cf3yqbrim1xdch4w"))))
17725 (build-system pyproject-build-system)
17726 (native-inputs
17727 (list python-hatch-vcs
17728 python-hatchling
17729 python-pytest))
17730 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
17731 (synopsis "Legacy API wrapper")
17732 (description "This module defines a decorator to wrap legacy APIs. The
17733primary use case is APIs defined before keyword-only parameters existed.")
17734 (license license:gpl3+)))
17735
17736(define-public python-langdetect
17737 (package
17738 (name "python-langdetect")
17739 (version "1.0.9")
17740 (source
17741 (origin
17742 (method url-fetch)
17743 (uri (pypi-uri "langdetect" version))
17744 (sha256
17745 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
17746 (build-system pyproject-build-system)
17747 (native-inputs
17748 (list python-pytest
17749 python-setuptools))
17750 (propagated-inputs
17751 (list python-six))
17752 (home-page "https://github.com/Mimino666/langdetect")
17753 (synopsis "Language detection library")
17754 (description
17755 "This library is a port of Nakatani Shuyo's language-detection library
17756(version from 03/03/2014) to Python.")
17757 (license license:expat)))
17758
17759(define-public python-pyasn1
17760 (package
17761 (name "python-pyasn1")
17762 (version "0.6.1")
17763 (source
17764 (origin
17765 (method url-fetch)
17766 (uri (pypi-uri "pyasn1" version))
17767 (sha256
17768 (base32
17769 "0d5h500ig8sp72pabd1wcyglc4951xalbkqahf056dl4vlmhsn3g"))))
17770 (build-system pyproject-build-system)
17771 (arguments
17772 (list #:test-backend #~'unittest
17773 #:test-flags #~(list "discover" "tests")))
17774 (native-inputs
17775 (list python-setuptools))
17776 (home-page "https://github.com/pyasn1/pyasn1")
17777 (synopsis "ASN.1 types and codecs")
17778 (description
17779 "This is an implementation of ASN.1 types and codecs in Python. It is
17780suitable for a wide range of protocols based on the ASN.1 specification.")
17781 (license license:bsd-2)))
17782
17783(define-public python-pyasn1-modules
17784 (package
17785 (name "python-pyasn1-modules")
17786 (version "0.4.2")
17787 (source
17788 (origin
17789 (method url-fetch)
17790 (uri (pypi-uri "pyasn1_modules" version))
17791 (sha256
17792 (base32
17793 "1rj1x4333b20chwslljsihngllj6yls63jmi8klam00ahzg92w37"))))
17794 (build-system pyproject-build-system)
17795 (arguments
17796 (list #:test-backend #~'unittest
17797 #:test-flags #~(list "discover" "tests")))
17798 (native-inputs
17799 (list python-setuptools))
17800 (propagated-inputs
17801 (list python-pyasn1))
17802 (home-page "https://github.com/pyasn1/pyasn1-modules")
17803 (synopsis "ASN.1 codec implementations")
17804 (description
17805 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
17806implementations of ASN.1-based codecs and protocols.")
17807 (license license:bsd-3)))
17808
17809(define-public python-asn1tools
17810 (package
17811 (name "python-asn1tools")
17812 (version "0.167.0")
17813 (source
17814 (origin
17815 (method url-fetch)
17816 (uri (pypi-uri "asn1tools" version))
17817 (sha256
17818 (base32 "1cpm6m3znagc553bc5l0rhwg2fccrl0k8m1pbvn6x2kqdmpkzmfa"))))
17819 (build-system pyproject-build-system)
17820 (arguments
17821 (list
17822 #:test-flags
17823 #~(list "-k" (string-join
17824 ;; Tests fail with error: IndexError: string index out of
17825 ;; range. It may be some incompatability wit pyparsing,
17826 ;; see <https://github.com/eerimoq/asn1tools/issues/167>.
17827 (list "not test_c_source"
17828 "test_command_line_generate_c_source_oer"
17829 "test_command_line_generate_c_source_uper"
17830 "test_command_line_generate_rust_source_uper"
17831 "test_missing_parameterized_value"
17832 "test_c_source"
17833 "test_parse_parameterization")
17834 " and not "))))
17835 (native-inputs
17836 (list python-pytest
17837 python-setuptools
17838 python-wheel))
17839 (propagated-inputs
17840 (list python-bitstruct
17841 python-diskcache
17842 python-prompt-toolkit
17843 python-pyparsing))
17844 (home-page "https://github.com/eerimoq/asn1tools")
17845 (synopsis "ASN.1 parsing, encoding and decoding")
17846 (description "This package provides ASN.1 parsing, encoding and decoding
17847for Python, including constraints checking. It supports several
17848codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
17849for OER and UPER.")
17850 (license license:expat)))
17851
17852(define-public python-idna
17853 (package
17854 (name "python-idna")
17855 (version "3.10")
17856 (source
17857 (origin
17858 (method url-fetch)
17859 (uri (pypi-uri "idna" version))
17860 (sha256
17861 (base32
17862 "1a9yn40rph0amwq61j7j3nqm472baz6673ng6pfadg8a8ydmrxhj"))))
17863 (build-system pyproject-build-system)
17864 (native-inputs
17865 (list python-flit-core))
17866 (home-page "https://github.com/kjd/idna")
17867 (synopsis "Internationalized domain names in applications")
17868 (description
17869 "This is a library to support the Internationalised Domain Names in
17870Applications (IDNA) protocol as specified in RFC 5891. This version of the
17871protocol is often referred to as “IDNA2008” and can produce different results
17872from the earlier standard from 2003. The library is also intended to act as a
17873suitable drop-in replacement for the “encodings.idna” module that comes with
17874the Python standard library but currently only supports the older 2003
17875specification.")
17876 (license license:bsd-4)))
17877
17878(define-public python-libsass
17879 (package
17880 (name "python-libsass")
17881 (version "0.23.0")
17882 (source
17883 (origin
17884 ;; PyPI tarball is missing some test files.
17885 (method git-fetch)
17886 (uri (git-reference
17887 (url "https://github.com/sass/libsass-python")
17888 (commit version)))
17889 (file-name (git-file-name name version))
17890 (sha256
17891 (base32 "04jpk4y15k69chdnd64ks85bfn82071mbfiv2d1hl3y4zpvsn90a"))))
17892 (build-system pyproject-build-system)
17893 (arguments
17894 '(#:phases
17895 (modify-phases %standard-phases
17896 ;; Use Guix package of libsass instead of compiling from a checkout.
17897 (add-before 'build 'set-libsass
17898 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
17899 ;; XXX: Silent 2 failing tests, reported to upstream (closed), see
17900 ;; https://github.com/sass/libsass-python/issues/440. It passed with
17901 ;; [email protected] which requires rebuild the world (1200+ packages),
17902 ;; remove when v3.6.5 is available.
17903 (add-before 'check 'silent-failing-tests
17904 (lambda _
17905 (substitute* "sasstests.py"
17906 (("def test_build_one")
17907 "def __off_test_build_one")
17908 (("def test_stack_trace_formatting")
17909 "def __off_test_stack_trace_formatting"))))
17910 (replace 'check
17911 (lambda* (#:key tests? #:allow-other-keys)
17912 (when tests?
17913 (invoke "pytest" "sasstests.py"))))
17914 (add-after 'install 'delete-test
17915 (lambda* (#:key inputs outputs #:allow-other-keys)
17916 ;; Delete sasstests.py because it attempts to open a file
17917 ;; that is not installed when loaded, which breaks the sanity
17918 ;; check.
17919 (delete-file (string-append
17920 (assoc-ref outputs "out")
17921 "/lib/python"
17922 (python-version
17923 (dirname (dirname
17924 (search-input-file inputs "bin/python"))))
17925 "/site-packages/sasstests.py")))))))
17926 (native-inputs
17927 (list python-pytest python-setuptools python-werkzeug python-wheel))
17928 (inputs
17929 (list libsass))
17930 (home-page "https://sass.github.io/libsass-python/")
17931 (synopsis "Straightforward binding of libsass for Python")
17932 (description
17933 "This package provides a simple Python extension module @code{sass} which
17934is binding LibSass.")
17935 (license license:expat)))
17936
17937(define-public python-idna-ssl
17938 (package
17939 (name "python-idna-ssl")
17940 (version "1.0.1")
17941 (source
17942 (origin
17943 (method git-fetch)
17944 (uri (git-reference
17945 (url "https://github.com/aio-libs/idna-ssl")
17946 (commit (string-append "v" version))))
17947 (file-name (git-file-name name version))
17948 (sha256
17949 (base32 "1fj4zkcnx3mk7kbnf4d6pjgv331n17wzpphpwdnmr498ghbsph9k"))))
17950 (build-system pyproject-build-system)
17951 (arguments (list #:tests? #f)) ;circular dependency with python-aiohttp
17952 (native-inputs (list python-setuptools))
17953 (propagated-inputs (list python-idna))
17954 (home-page "https://github.com/aio-libs/idna-ssl")
17955 (synopsis "Support Unicode(idna) domains for Python's @code{ssl} module")
17956 (description
17957 "This package provides Unicode(idna) domains support for Python's
17958@code{ssl} module. It patches @code{ssl.match_hostname} for that purpose.")
17959 (license license:expat)))
17960
17961(define-public python-path
17962 (package
17963 (name "python-path")
17964 (version "17.1.0")
17965 (source
17966 (origin
17967 (method url-fetch)
17968 (uri (pypi-uri "path" version))
17969 (sha256
17970 (base32 "1scqbwgcbisx8mb28hw789a7np953851wg6z0bbzdm519znha7nl"))))
17971 (build-system pyproject-build-system)
17972 (arguments
17973 (list
17974 #:tests? (not (%current-target-system))
17975 #:test-flags
17976 #~(list "-k"
17977 (string-append
17978 ;; Do not test the myproject.toml build as it tries
17979 ;; to pull dependencies from the Internet.
17980 "not project "
17981 ;; This tests assumes a root user exists.
17982 "and not test_get_owner"))))
17983 (native-inputs
17984 (list python-appdirs
17985 python-more-itertools
17986 python-packaging
17987 python-pygments
17988 python-pytest
17989 python-setuptools
17990 python-setuptools-scm))
17991 (home-page "https://github.com/jaraco/path")
17992 (synopsis "Object-oriented file system path manipulation library")
17993 (description "@code{path} (formerly @code{path.py}) implements path
17994objects as first-class entities, allowing common operations on files to be
17995invoked on those path objects directly.")
17996 (license license:expat)))
17997
17998;; It may be removed after 2026-01-24.
17999(define-deprecated/public-alias python-path-bootstrap python-path)
18000(define-deprecated/public-alias python-pathpy python-path)
18001
18002(define-public python-pretend
18003 (package
18004 (name "python-pretend")
18005 (version "1.0.9")
18006 (source
18007 (origin
18008 (method git-fetch) ;no tests in PyPI archive
18009 (uri (git-reference
18010 (url "https://github.com/alex/pretend")
18011 (commit (string-append "v" version))))
18012 (file-name (git-file-name name version))
18013 (sha256
18014 (base32 "156l685r9mg7i4xyrk9ql3sxk088irxlg8x7md5i0d05hdw1z8rs"))))
18015 (build-system pyproject-build-system)
18016 (native-inputs
18017 (list python-pytest
18018 python-setuptools))
18019 (home-page "https://github.com/alex/pretend")
18020 (synopsis "Library for stubbing in Python")
18021 (description
18022 "Pretend is a library to make stubbing with Python easier. Stubbing is a
18023technique for writing tests. You may hear the term mixed up with mocks,fakes,
18024or doubles. Basically, a stub is an object that returns pre-canned responses,
18025rather than doing any computation.")
18026 (license license:bsd-3)))
18027
18028(define-public python-pip-run
18029 (package
18030 (name "python-pip-run")
18031 (version "8.8.0")
18032 (source
18033 (origin
18034 (method git-fetch)
18035 (uri (git-reference
18036 (url "https://github.com/jaraco/pip-run")
18037 (commit (string-append "v" version))))
18038 (file-name (git-file-name name version))
18039 (sha256
18040 (base32 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
18041 (build-system pyproject-build-system)
18042 (arguments
18043 (list
18044 #:tests? (not (%current-target-system))
18045 #:test-flags
18046 #~(list "-k" (string-append
18047 ;; Do not test the myproject.toml build as it tries
18048 ;; to pull dependencies from the internet.
18049 "not project "
18050 ;; These tests attempt to install dependencies from
18051 ;; the network and fail.
18052 "and not test_pkg_imported "
18053 "and not test_pkg_loaded_from_alternate_index "
18054 "and not test_pkg_loaded_from_url "))
18055 #:phases
18056 #~(modify-phases %standard-phases
18057 (add-before 'build 'pretend-version
18058 (lambda _
18059 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
18060 (native-inputs
18061 (list python-nbformat
18062 python-pygments
18063 python-pytest
18064 python-setuptools
18065 python-setuptools-scm))
18066 (propagated-inputs
18067 (list python-autocommand
18068 python-packaging
18069 python-path
18070 python-pip))
18071 (home-page "https://github.com/jaraco/pip-run")
18072 (synopsis "Dynamic dependency loader for Python")
18073 (description "The @command{pip-run} command provides on-demand temporary
18074package installation for a single interpreter run. It replaces this series of
18075commands:
18076@example
18077$ virtualenv --python pythonX.X --system-site-packages /tmp/env
18078$ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
18079$ /tmp/env/bin/python ...
18080$ rm -rf /tmp/env
18081@end example")
18082 (license license:expat)))
18083
18084;; It may be removed after 2026-01-24.
18085(define-deprecated/public-alias python-pip-run-bootstrap python-pip-run)
18086
18087(define-public python-libarchive-c
18088 (package
18089 (name "python-libarchive-c")
18090 (version "5.2")
18091 (source (origin
18092 (method url-fetch)
18093 (uri (pypi-uri "libarchive_c" version))
18094 (sha256
18095 (base32
18096 "05vl0pjpv5wqy9xybzixjv9anvih9yjx361c4rw6xbq9hpiahi7x"))))
18097 (build-system pyproject-build-system)
18098 (arguments
18099 (list
18100 #:phases
18101 #~(modify-phases %standard-phases
18102 (add-before 'build 'reference-libarchive
18103 (lambda* (#:key inputs #:allow-other-keys)
18104 ;; Retain the absolute file name of libarchive.so.
18105 (substitute* "libarchive/ffi.py"
18106 (("find_library\\('archive'\\)")
18107 (string-append
18108 "'"
18109 (search-input-file inputs "/lib/libarchive.so")
18110 "'"))))))))
18111 (native-inputs
18112 (list python-setuptools python-wheel python-pytest))
18113 (inputs
18114 (list libarchive))
18115 (home-page "https://github.com/Changaco/python-libarchive-c")
18116 (synopsis "Python interface to libarchive")
18117 (description
18118 "This package provides Python bindings to libarchive, a C library to
18119access possibly compressed archives in many different formats. It uses
18120Python's @code{ctypes} foreign function interface (FFI).")
18121 (license license:lgpl2.0+)))
18122
18123(define-public python-file
18124 (package/inherit file
18125 (name "python-file")
18126 (build-system pyproject-build-system)
18127 (arguments
18128 (list
18129 #:tests? #f ;no tests
18130 #:phases
18131 #~(modify-phases %standard-phases
18132 (add-before 'build 'change-directory
18133 (lambda _
18134 (chdir "python")))
18135 (add-before 'build 'set-library-file-name
18136 (lambda* (#:key inputs #:allow-other-keys)
18137 (substitute* "magic.py"
18138 (("find_library\\('magic'\\)")
18139 (format #f "~s" (search-input-file inputs
18140 "lib/libmagic.so")))))))))
18141 (inputs (list file))
18142 (native-inputs (cons* python-setuptools
18143 (if (%current-target-system)
18144 (list this-package)
18145 '())))
18146 (synopsis "Python bindings to the libmagic file type guesser")
18147 (description "This package provides Python bindings to the libmagic file
18148type guesser.
18149
18150Note that this module and the @code{python-magic} module both provide a
18151@file{magic.py} file; these two modules, which are different and were
18152developed separately, both serve the same purpose: provide Python bindings for
18153libmagic.")))
18154
18155(define-public python-pydevd
18156 (package
18157 (name "python-pydevd")
18158 (version "3.2.3")
18159 (source
18160 (origin
18161 (method git-fetch)
18162 (uri (git-reference
18163 (url "https://github.com/fabioz/PyDev.Debugger")
18164 (commit (string-append
18165 "pydev_debugger_"
18166 (string-join (string-split version #\.) "_")))))
18167 (modules '((guix build utils)))
18168 (snippet '(begin
18169 ;; Delete pre-built binaries.
18170 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
18171 ;; This source is generated via Cython.
18172 (delete-file "_pydevd_bundle/pydevd_cython.c")))
18173 (file-name (git-file-name name version))
18174 (sha256
18175 (base32
18176 "0a40574f0rx23gissxmrpjq9cimhjxqsq9wbv5l7620h3blb5510"))))
18177 (build-system pyproject-build-system)
18178 (arguments
18179 (list
18180 #:test-flags
18181 #~(list "-n" (number->string (parallel-job-count))
18182 "-m" "not flaky"
18183 "-k"
18184 (string-join
18185 (list
18186 ;; The two "break_01" tests have been failing on
18187 ;; Python 3.10:
18188 ;; <https://github.com/fabioz/PyDev.Debugger/issues/222>.
18189 "not test_set_pydevd_break_01 "
18190 ;; the GUI event loop requires an X server.
18191 "test_gui_event_loop_custom"
18192 ;; This test validates that 'pydevd' is not in the
18193 ;; exception message, but it is due to being part
18194 ;; of the build file name present in the message.
18195 "test_evaluate_exception_trace"
18196 ;; This test fail with TimeoutError, no message on stderr.
18197 "test_soft_terminate"
18198 "test_debugger_case_deadlock_interrupt_thread"
18199 ;; subprocess.CalledProcessError
18200 ;; Python 3.11/3.12 specific issue:
18201 ;; <https://github.com/fabioz/PyDev.Debugger/issues/284>.
18202 "test_find_main_thread_id")
18203 " and not "))
18204 #:phases
18205 #~(modify-phases %standard-phases
18206 (add-after 'unpack 'fix-tests
18207 (lambda _
18208 (substitute* "tests_python/test_convert_utilities.py"
18209 ;; Add missing trailing '/'.
18210 (("\"\\\\\\\\usr\\\\\\\\bin\\\\\\\\\") == \"/usr/bin" all)
18211 (string-append all "/")))))
18212 (add-after 'unpack 'patch-command-paths
18213 (lambda* (#:key inputs #:allow-other-keys)
18214 (substitute* "_pydevd_bundle/pydevd_api.py"
18215 (("'kill'")
18216 (format #f "~s" (search-input-file inputs "bin/kill")))
18217 (("'pgrep'")
18218 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
18219 (add-after 'unpack 'generate-sources
18220 (lambda _
18221 (setenv "PYTHONPATH" (getcwd))
18222 (invoke "python" "build_tools/build.py")))
18223 (add-after 'unpack 'adjust-attach-binary-name
18224 (lambda _
18225 (substitute*
18226 '("pydevd_tracing.py"
18227 "pydevd_attach_to_process/add_code_to_python_process.py")
18228 (("def get_(target|python_helper_lib)_filename.*" all)
18229 (format #f "~a return ~s~%" all
18230 (string-append #$output "/lib/attach.so"))))))
18231 (add-after 'unpack 'patch-gdb
18232 (lambda* (#:key inputs #:allow-other-keys)
18233 (substitute*
18234 "pydevd_attach_to_process/add_code_to_python_process.py"
18235 (("'gdb',")
18236 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
18237 (add-after 'build 'build-attach-linux-binary
18238 (lambda _
18239 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
18240 "-fPIC" "-nostartfiles"
18241 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
18242 (add-before 'check 'pre-check
18243 (lambda* (#:key tests? #:allow-other-keys)
18244 (when tests?
18245 (setenv "PYDEVD_USE_CYTHON" "YES"))))
18246 (add-after 'install 'install-attach-binary
18247 (lambda _
18248 (install-file "attach.so"
18249 (string-append #$output "/lib"))))
18250 ;; Some modules aren't designed to be loadable by themselves, such
18251 ;; as 'pydev_app_engine_debug_startup' and fail.
18252 (delete 'sanity-check))))
18253 (native-inputs
18254 (list python-cython
18255 python-numpy
18256 python-psutil
18257 python-pytest
18258 python-pytest-xdist
18259 python-setuptools
18260 python-trio
18261 python-untangle
18262 python-wheel))
18263 (inputs (list coreutils gdb/pinned procps))
18264 (home-page "https://github.com/fabioz/PyDev.Debugger/")
18265 (synopsis "Python debugger")
18266 (description "PyDev.Debugger is a capable Python debugger used in PyDev
18267and other @acronym{IDEs, Integrated Development Environments}.")
18268 (license license:epl1.0)))
18269
18270(define-public python-debugpy
18271 (package
18272 (name "python-debugpy")
18273 (version "1.8.17")
18274 (source
18275 (origin
18276 (method git-fetch)
18277 (uri (git-reference ;no tests in PyPI archive
18278 (url "https://github.com/microsoft/debugpy")
18279 (commit (string-append "v" version))))
18280 (file-name (git-file-name name version))
18281 (modules '((guix build utils)))
18282 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
18283 ;; attach binary.
18284 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
18285 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
18286 (sha256
18287 (base32
18288 "12yhmayc21zcq16dv5hrp4n896d9v3b88hh1biqvj8gnrmsxvcwb"))))
18289 (build-system pyproject-build-system)
18290 (arguments
18291 (list
18292 #:tests? #f ;FIXME: Fail on systems with YAMA LSM’s ptrace scope > 0.
18293 #:phases
18294 #~(modify-phases %standard-phases
18295 (add-after 'unpack 'patch-sh-in-tests
18296 (lambda _
18297 (substitute* "tests/debugpy/test_run.py"
18298 (("#!/bin/sh")
18299 (string-append "#!" (which "sh"))))))
18300 (add-after 'unpack 'fix-version
18301 ;; Versioneer is useless when there is no git metadata.
18302 (lambda _
18303 (substitute* "setup.py"
18304 (("version=versioneer.get_version\\(),")
18305 (format #f "version=~s," #$version)))))
18306 (add-before 'build 'configure
18307 (lambda _
18308 ;; This adjusts the behavior of debugpy to load pydevd from
18309 ;; Python site packages.
18310 (setenv "DEBUGPY_BUNDLING_DISABLED" "1"))))))
18311 (native-inputs
18312 (list python-setuptools))
18313 (propagated-inputs
18314 (list python-pydevd))
18315 (home-page "https://aka.ms/debugpy")
18316 (synopsis "Debug Adapter Protocol Python implementation")
18317 (description "An implementation of the Debug Adapter Protocol for
18318Python.")
18319 (license license:expat)))
18320
18321(define-public python-debian
18322 (package
18323 (name "python-debian")
18324 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
18325 (version "0.1.49")
18326 (source
18327 (origin
18328 ;; Use git-fetch, as pypi doesn't include test suite.
18329 (method git-fetch)
18330 (uri (git-reference
18331 (url home-page)
18332 (commit version)))
18333 (file-name (git-file-name name version))
18334 (sha256
18335 (base32
18336 "190vy2ns0650icpwvv4qp6kr3c3i9jszy1vkdwpigxb96fs1bqf3"))
18337 (modules '((guix build utils)))
18338 (snippet
18339 #~(begin
18340 ;; python-apt, apt and dpkg are not yet available in guix,
18341 ;; and these tests heavily depend on them.
18342 (for-each delete-file
18343 '("lib/debian/tests/test_deb822.py"
18344 "lib/debian/tests/test_debfile.py"))
18345
18346 ;; for reproducible builds, otherwise python-debian
18347 ;; generates a _version.py including the date
18348 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
18349 (substitute* "lib/debian/_version.py"
18350 (("__CHANGELOG_VERSION__") #$version))))))
18351 (build-system pyproject-build-system)
18352 (native-inputs
18353 (list python-pytest python-setuptools))
18354 (propagated-inputs
18355 (list python-six python-chardet))
18356 (synopsis "Debian package related modules")
18357 (description
18358 "This package provides Python modules that abstract many formats of
18359Debian-related files, such as:
18360@itemize
18361@item Debtags information;
18362@item @file{debian/changelog} files;
18363@item packages files, pdiffs;
18364@item control files of single or multiple RFC822-style paragraphs---e.g.
18365 @file{debian/control}, @file{.changes}, @file{.dsc};
18366@item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
18367 contained files and meta-information.
18368@end itemize")
18369 ;; Modules are either GPLv2+ or GPLv3+.
18370 (license license:gpl3+)))
18371
18372(define-public python-json-spec
18373 (package
18374 (name "python-json-spec")
18375 (version "0.12.0")
18376 (source
18377 (origin
18378 (method git-fetch) ;no tests in PyPI archive
18379 (uri (git-reference
18380 (url "https://github.com/johnnoone/json-spec")
18381 (commit version)))
18382 (file-name (git-file-name name version))
18383 (sha256
18384 (base32 "14lzvpfi8vpwn2hsizljcyiiywfc1fssj0hh079jxw4xwjkm9328"))))
18385 (build-system pyproject-build-system)
18386 (native-inputs
18387 (list python-pytest
18388 python-poetry-core))
18389 (propagated-inputs
18390 (list python-termcolor)) ;for the CLI
18391 (home-page "https://json-spec.readthedocs.io/")
18392 (synopsis "JSON Schema, JSON Pointer and JSON Reference for Python")
18393 (description
18394 "This Python library implements several JSON specs, like JSON Schema,
18395JSON Reference and JSON Pointer.")
18396 (license license:bsd-3)))
18397
18398(define-public python-fastbencode
18399 (package
18400 (name "python-fastbencode")
18401 (version "0.3.2") ;the last non Rust version
18402 (source
18403 (origin
18404 (method url-fetch)
18405 (uri (pypi-uri "fastbencode" version))
18406 (modules '((guix build utils)))
18407 ;; Delete pre-generated Cython C files.
18408 (snippet '(for-each delete-file (find-files "." "\\.c$")))
18409 (sha256
18410 (base32 "1daal7xgsl2sjxq8pcilcas9wd9j9796wd4rlkhrvv5h0k2k4k53"))))
18411 (build-system pyproject-build-system)
18412 (arguments
18413 (list
18414 #:test-backend #~'unittest
18415 #:test-flags #~(list "fastbencode.tests.test_suite")))
18416 (native-inputs
18417 (list python-cython
18418 python-setuptools))
18419 (home-page "https://github.com/breezy-team/fastbencode")
18420 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
18421 (description
18422 "The fastbencode Python package implements the bencode serialization
18423format for storing and transmitting loosely structured data, originally used
18424by BitTorrent.
18425
18426The format can encode four different types of values: byte strings, integers,
18427lists, and dictionaries (associative arrays). It's simple and unaffected by
18428endianness,
18429
18430This package includes both a pure-Python version and an optional C extension
18431based on Cython. Both provide the same functionality, but the C version has
18432significantly better performance.")
18433 (license (list license:expat ; _bencode_py.py
18434 license:gpl2+)))) ; __init__.py
18435
18436(define-public python-fastjsonschema
18437 (package
18438 (name "python-fastjsonschema")
18439 (version "2.21.1")
18440 (source
18441 (origin
18442 (method git-fetch) ; no tests in PyPI release
18443 (uri (git-reference
18444 (url "https://github.com/horejsek/python-fastjsonschema")
18445 (commit (string-append "v" version))))
18446 (file-name (git-file-name name version))
18447 (sha256
18448 (base32 "1j7dc8hlvrlhzkiv0vqzd6shhjaf14g9v3zlfn7x17j04c1g3iz7"))))
18449 (build-system pyproject-build-system)
18450 (arguments
18451 (list
18452 #:test-flags #~(list "--ignore=tests/benchmarks/test_benchmark.py")))
18453 (native-inputs
18454 (list python-json-spec
18455 python-jsonschema
18456 python-pytest
18457 python-pytest-benchmark
18458 python-setuptools))
18459 (home-page "https://github.com/horejsek/python-fastjsonschema")
18460 (synopsis "Fast Python implementation of JSON schema")
18461 (description
18462 "This library implements validation of JSON documents by JSON schema for
18463drafts 04, 06 and 07.")
18464 (license license:bsd-3)))
18465
18466(define-public python-nbformat
18467 (package
18468 (name "python-nbformat")
18469 (version "5.10.4")
18470 ;; The PyPi release tarball lacks some test cases and test data.
18471 (source (origin
18472 (method git-fetch)
18473 (uri (git-reference
18474 (url "https://github.com/jupyter/nbformat")
18475 (commit (string-append "v" version))))
18476 (sha256
18477 (base32
18478 "0abd1d8iq21dwh17m72na2f3kr6a5p6ji1gnykf06jshikalj2x3"))
18479 (file-name (git-file-name name version))))
18480 (build-system pyproject-build-system)
18481 (arguments
18482 (list
18483 #:phases
18484 #~(modify-phases %standard-phases
18485 ;; We don't want to use hatch-nodejs just to get a version string.
18486 (add-after 'unpack 'patch-pyproject
18487 (lambda _
18488 (substitute* "pyproject.toml"
18489 ((", \"hatch-nodejs-version\"") "")
18490 (("dynamic = \\[\"version\"\\]")
18491 (string-append "version = \"" #$version "\""))))))))
18492 (propagated-inputs
18493 (list python-fastjsonschema python-jsonschema python-jupyter-core
18494 python-traitlets))
18495 (native-inputs
18496 (list python-hatchling
18497 python-pep440
18498 python-pytest
18499 python-testpath))
18500 (home-page "https://jupyter.org")
18501 (synopsis "Jupyter Notebook format")
18502 (description "This package provides the reference implementation of the
18503Jupyter Notebook format and Python APIs for working with notebooks.")
18504 (license license:bsd-3)))
18505
18506(define-public python-nb-clean
18507 (package
18508 (name "python-nb-clean")
18509 (version "4.0.1")
18510 (source
18511 (origin
18512 (method git-fetch) ; no tests in PyPI
18513 (uri (git-reference
18514 (url "https://github.com/srstevenson/nb-clean")
18515 (commit version)))
18516 (file-name (git-file-name name version))
18517 (sha256
18518 (base32 "1pa4m1qn7gx77lg3vy7y7vlyl45cg9ai9z93ds9ax108mbnrbdw7"))))
18519 (build-system pyproject-build-system)
18520 (native-inputs (list python-poetry-core
18521 python-pytest
18522 python-pytest-cov ; runs by default
18523 python-pytest-mock))
18524 (propagated-inputs (list python-nbformat))
18525 (home-page "https://github.com/srstevenson/nb-clean")
18526 (synopsis "Clean Jupyter notebooks for versioning")
18527 (description "This package cleans Jupyter notebooks of cell execution
18528counts, metadata, outputs, and empty cells, preparing them for committing to
18529version control. It provides a Git filter to automatically clean notebooks
18530before they're staged, and can also be used with other version control
18531systems, as a command line tool, and as a Python library.")
18532 (license license:isc)))
18533
18534(define-public python-bleach
18535 (package
18536 (name "python-bleach")
18537 (version "6.2.0")
18538 (source
18539 (origin
18540 (method url-fetch)
18541 (uri (pypi-uri "bleach" version))
18542 (sha256
18543 (base32 "07wrbzlmd6x63dz7lcdih9c4xkn79inimv6kh3yrk9dq310qjghj"))
18544 (snippet
18545 #~(begin
18546 (use-modules (guix build utils))
18547 (substitute* (find-files "." "\\.py$")
18548 (("bleach\\._vendor\\.html5lib") "html5lib"))
18549 (delete-file-recursively "bleach/_vendor/html5lib")))))
18550 (build-system pyproject-build-system)
18551 (native-inputs
18552 (list python-pytest
18553 python-setuptools))
18554 (propagated-inputs
18555 (list python-html5lib
18556 python-webencodings))
18557 (home-page "https://github.com/mozilla/bleach")
18558 (synopsis "Whitelist-based HTML-sanitizing tool")
18559 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
18560 (license license:asl2.0)))
18561
18562(define-public python-entrypoints
18563 (package
18564 (name "python-entrypoints")
18565 (version "0.4")
18566 (source
18567 (origin
18568 (method url-fetch)
18569 (uri (pypi-uri "entrypoints" version))
18570 (sha256
18571 (base32 "1m5crkagmbvlgdwqv7nan64pbcjvy0c6idb7rpmik2i1m7dfs1mp"))))
18572 (build-system pyproject-build-system)
18573 (native-inputs
18574 (list python-flit-core
18575 python-pytest))
18576 (home-page "https://github.com/takluyver/entrypoints")
18577 (synopsis "Discover and load entry points from installed Python packages")
18578 (description "Entry points are a way for Python packages to advertise
18579objects with some common interface. The most common examples are
18580@code{console_scripts} entry points, which define shell commands by
18581identifying a Python function to run. The @code{entrypoints} module contains
18582functions to find and load entry points.")
18583 (license license:expat)))
18584
18585(define-public python-epc
18586 (package
18587 (name "python-epc")
18588 (properties '((commit . "f3673ae5c35f20a0f71546ab34c28e3dde3595c1")
18589 (revision . "0")))
18590 (version (git-version "0.0.5"
18591 (assoc-ref properties 'revision)
18592 (assoc-ref properties 'commit)))
18593 (source
18594 (origin
18595 (method git-fetch)
18596 (uri (git-reference
18597 (url "https://github.com/tkf/python-epc")
18598 (commit (assoc-ref properties 'commit))))
18599 (file-name (git-file-name name version))
18600 (sha256
18601 (base32 "0q27bj49yan2qg6i8m5czs5b5jv26ff42yz7j4r5652s7j3f42mm"))))
18602 (build-system pyproject-build-system)
18603 (arguments (list #:test-backend #~'nose))
18604 (propagated-inputs (list python-sexpdata))
18605 (native-inputs (list python-pynose python-setuptools))
18606 (home-page "https://github.com/tkf/python-epc")
18607 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
18608 (description
18609 "Python-EPC can call elisp functions from Python and Python functions
18610from elisp.")
18611 (license license:gpl3)))
18612
18613(define-public python-forex-python
18614 (package
18615 (name "python-forex-python")
18616 (version "1.5")
18617 (source
18618 (origin
18619 (method git-fetch)
18620 (uri (git-reference
18621 (url "https://github.com/MicroPyramid/forex-python")
18622 (commit version)))
18623 (file-name (git-file-name name version))
18624 (sha256
18625 (base32 "0pl5sfd0wkv1a2y324l518h6sing7wkadrbr5xcf6hjykn2mbi5h"))))
18626 (build-system pyproject-build-system)
18627 (arguments (list #:tests? #f)) ; Tests require online data.
18628 (native-inputs (list python-setuptools))
18629 (propagated-inputs (list python-requests python-simplejson))
18630 (home-page "https://github.com/MicroPyramid/forex-python")
18631 (synopsis "Foreign exchange rates and currency conversion")
18632 (description
18633 "@code{python-forex-python} can be used to manipulate foreign
18634exchange rates and to operate currency conversions.
18635
18636Features:
18637@itemize
18638@item List all currency rates.
18639@item BitCoin price for all currencies.
18640@item Converting amount to BitCoins.
18641@item Get historical rates for any day since 1999.
18642@item Conversion rate for one currency(ex; USD to INR).
18643@item Convert amount from one currency to other.('USD 10$' to INR).
18644@item Currency symbols.
18645@item Currency names.
18646@end itemize")
18647 (license license:expat)))
18648
18649(define-public python-simpleeval
18650 (package
18651 (name "python-simpleeval")
18652 (version "0.9.12")
18653 (source
18654 (origin
18655 (method git-fetch)
18656 (uri (git-reference
18657 (url "https://github.com/danthedeckie/simpleeval")
18658 (commit version)))
18659 (file-name (git-file-name name version))
18660 (sha256
18661 (base32 "0khgl729q5133fgc00d550f4r77707rkkn7r56az4v8bvx0q8xp4"))))
18662 (build-system pyproject-build-system)
18663 (native-inputs (list python-pytest python-setuptools))
18664 (home-page "https://github.com/danthedeckie/simpleeval")
18665 (synopsis "Simple, safe single expression evaluator library")
18666 (description
18667 "This package provides a quick single file library for easily adding
18668evaluatable expressions into python projects. Say you want to allow a user
18669to set an alarm volume, which could depend on the time of day, alarm level,
18670how many previous alarms had gone off, and if there is music playing at the
18671time.")
18672 (license license:expat)))
18673
18674(define-public python-nbconvert
18675 (package
18676 (name "python-nbconvert")
18677 (version "7.16.6")
18678 (source
18679 (origin
18680 (method url-fetch)
18681 (uri (pypi-uri "nbconvert" version))
18682 (sha256
18683 (base32
18684 "10pmq31p2srwcdrc7k71dj0l6hl42xnadvsy8swaf3a8qqvpwsjp"))))
18685 (build-system pyproject-build-system)
18686 (arguments
18687 (list
18688 #:test-flags
18689 '(list "-k"
18690 (string-append
18691 ;; These tests require pyppeteer, not yet
18692 ;; available in Guix.
18693 "not test_webpdf_with_chromium"
18694 " and not test_webpdf.py"
18695 ;; These tests require ipywidgets, which would
18696 ;; introduce a dependency cycle.
18697 " and not test_execute_widgets_from_nbconvert"
18698 " and not test_execute_multiple_notebooks"
18699
18700 ;; This test calls nbconvert itself via "sys.executable -m
18701 ;; nbconvert". It's probably harmless.
18702 " and not test_default_config"))
18703 #:phases
18704 #~(modify-phases %standard-phases
18705 (add-after 'unpack 'fix-paths
18706 (lambda* (#:key inputs #:allow-other-keys)
18707 ;; Use pandoc binary from input.
18708 (substitute* "nbconvert/utils/pandoc.py"
18709 (("'pandoc'")
18710 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
18711 ;; Same for LaTeX.
18712 (substitute* "nbconvert/exporters/pdf.py"
18713 (("\"xelatex\"")
18714 (format #f "~s" (search-input-file inputs "bin/xelatex")))
18715 (("\"bibtex\"")
18716 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
18717 ;; Likewise for Inkscape.
18718 (substitute* "nbconvert/preprocessors/svg2pdf.py"
18719 (("inkscape_path = which\\(\"inkscape\")")
18720 (format #f "inkscape_path = ~s"
18721 (search-input-file inputs "bin/inkscape"))))))
18722 (add-after 'unpack 'ignore-deprecation-warnings
18723 (lambda _
18724 (substitute* "pyproject.toml"
18725 (("\"ignore:nbconvert.utils" m)
18726 (string-append "\"ignore:zmq.eventloop.ioloop is deprecated:DeprecationWarning\",\n"
18727 m)))))
18728 (add-before 'check 'pre-check
18729 (lambda _
18730 ;; Tests depend on templates installed to output.
18731 (setenv "JUPYTER_PATH"
18732 (string-append #$output "/share/jupyter:"
18733 (getenv "JUPYTER_PATH")))
18734 ;; jupyter-core demands this
18735 (setenv "JUPYTER_PLATFORM_DIRS" "1")
18736 ;; Tests need writable HOME and TEXMFVAR.
18737 (setenv "HOME" "/tmp")
18738 (setenv "TEXMFVAR" "/tmp"))))))
18739 (inputs
18740 (list inkscape/pinned pandoc))
18741 (native-inputs
18742 (list python-flaky
18743 python-hatchling
18744 python-ipykernel
18745 ;; Adding ipywidgets would create a cycle.
18746 ;;python-ipywidgets
18747 python-pytest
18748 (texlive-local-tree
18749 (list texlive-adjustbox
18750 texlive-booktabs
18751 texlive-caption
18752 texlive-enumitem
18753 texlive-eurosym
18754 texlive-fancyvrb
18755 texlive-float
18756 texlive-fontspec
18757 texlive-grffile
18758 texlive-jknapltx
18759 texlive-parskip
18760 texlive-pdfcol
18761 texlive-rsfs
18762 texlive-soul
18763 texlive-tcolorbox
18764 texlive-titling
18765 texlive-ulem
18766 texlive-unicode-math
18767 texlive-upquote
18768 texlive-xetex))))
18769 (propagated-inputs
18770 (list python-beautifulsoup4
18771 python-bleach
18772 python-defusedxml
18773 python-importlib-metadata
18774 python-jinja2
18775 python-jupyter-core
18776 python-jupyterlab-pygments
18777 python-markupsafe
18778 python-mistune
18779 python-nbclient
18780 python-nbformat
18781 python-packaging
18782 python-pandocfilters
18783 python-pygments
18784 python-tinycss2
18785 python-traitlets
18786 ;; Required, even if [serve] is not used.
18787 python-tornado-6
18788 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
18789 texlive-adjustbox
18790 texlive-amsmath
18791 texlive-booktabs
18792 texlive-caption
18793 texlive-collection-basic
18794 texlive-enumitem
18795 texlive-environ
18796 texlive-etoolbox
18797 texlive-eurosym
18798 texlive-etoolbox
18799 texlive-fancyvrb
18800 texlive-float
18801 texlive-fontspec
18802 texlive-geometry
18803 texlive-grffile
18804 texlive-hyperref
18805 texlive-infwarerr
18806 texlive-jknapltx
18807 texlive-kvoptions
18808 texlive-lm
18809 texlive-lm-math
18810 texlive-mathpazo
18811 texlive-parskip
18812 texlive-pdfcol
18813 texlive-pgf
18814 texlive-rsfs
18815 texlive-soul
18816 texlive-stringenc
18817 texlive-tcolorbox
18818 texlive-titling
18819 texlive-tools
18820 texlive-trimspaces
18821 texlive-ucs
18822 texlive-ulem
18823 texlive-unicode-math
18824 texlive-upquote
18825 texlive-xcolor
18826 texlive-xetex
18827 texlive-zapfding))
18828 (home-page "https://jupyter.org")
18829 (synopsis "Converting Jupyter Notebooks")
18830 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
18831notebooks to various other formats via Jinja templates. It allows you to
18832convert an @code{.ipynb} notebook file into various static formats including:
18833
18834@enumerate
18835@item HTML
18836@item LaTeX
18837@item PDF
18838@item Reveal JS
18839@item Markdown (md)
18840@item ReStructured Text (rst)
18841@item executable script
18842@end enumerate\n")
18843 (license license:bsd-3)))
18844
18845(define-public python-ipywidgets
18846 (package
18847 (name "python-ipywidgets")
18848 ;; XXX: Newer version requires python-jupyterlab, see guix/guix#2073.
18849 (version "8.1.4")
18850 (source
18851 (origin
18852 (method url-fetch)
18853 ;; Git: <https://github.com/jupyter-widgets/ipywidgets/tree/8.1.8/python/ipywidgets>
18854 (uri (pypi-uri "ipywidgets" version))
18855 (sha256
18856 (base32
18857 "0f9i3ycyc8c3rs3xk30hvq7mjs37phbxv4p8parrm02cxn9yzdc5"))))
18858 (build-system pyproject-build-system)
18859 (native-inputs
18860 (list python-ipykernel
18861 python-jsonschema
18862 python-pytest
18863 python-pytz
18864 python-setuptools))
18865 (propagated-inputs
18866 (list python-comm
18867 python-ipython
18868 python-jupyterlab-widgets
18869 python-traitlets
18870 python-widgetsnbextension))
18871 (home-page "https://ipython.org")
18872 (synopsis "IPython HTML widgets for Jupyter")
18873 (description "Ipywidgets are interactive HTML widgets for Jupyter
18874notebooks and the IPython kernel. Notebooks come alive when interactive
18875widgets are used. Users gain control of their data and can visualize changes
18876in the data.")
18877 (license license:bsd-3)))
18878
18879(define-public python-jsbeautifier
18880 (package
18881 (name "python-jsbeautifier")
18882 (version "1.15.3")
18883 (home-page "https://github.com/beautify-web/js-beautify")
18884 (source
18885 (origin
18886 (method git-fetch)
18887 (uri (git-reference
18888 (url home-page)
18889 (commit (string-append "v" version))))
18890 (file-name (git-file-name name version))
18891 (sha256
18892 (base32 "1zl1g6w5zn2hxk5qq83j52cxa1ig75ryjwsjxv9wiwkar4qq88zg"))))
18893 (build-system pyproject-build-system)
18894 (arguments
18895 (list
18896 #:phases
18897 #~(modify-phases %standard-phases
18898 (add-after 'unpack 'chdir
18899 (lambda _
18900 (chdir "python")
18901 (rename-file "setup-js.py" "setup.py"))))))
18902 (propagated-inputs (list python-editorconfig python-six))
18903 (native-inputs (list python-pytest python-setuptools))
18904 (synopsis "JavaScript unobfuscator and beautifier")
18905 (description
18906 "This packages provides tooling to beautify, unpack or deobfuscate
18907JavaScript, leveraging popular online obfuscators.")
18908 (license license:expat)))
18909
18910(define-public python-chardet
18911 (package
18912 (name "python-chardet")
18913 (version "5.2.0")
18914 (source
18915 (origin
18916 (method url-fetch)
18917 (uri (pypi-uri "chardet" version))
18918 (sha256
18919 (base32
18920 "1xqwkjijq2fxn8rhcvfddl14lp39jllqbh527yy19i58g7s6yfqv"))))
18921 (native-inputs
18922 (list python-pytest python-setuptools python-wheel))
18923 (build-system pyproject-build-system)
18924 (arguments
18925 (list #:test-flags
18926 ;; Disable test that fails sporadically:
18927 ;; https://github.com/chardet/chardet/issues/256
18928 #~'("-k" "not test_detect_all_and_detect_one_should_agree")
18929 #:phases
18930 #~(modify-phases %standard-phases
18931 ;; This package provides a 'chardetect' executable that only
18932 ;; depends on Python, so customize the wrap phase to avoid
18933 ;; adding pytest and friends in order to save size.
18934 ;; (See also <https://bugs.gnu.org/25235>.)
18935 (replace 'wrap
18936 (lambda* (#:key inputs outputs #:allow-other-keys)
18937 (let* ((sitedir (site-packages inputs outputs))
18938 (python (dirname (dirname
18939 (search-input-file
18940 inputs "bin/python"))))
18941 (python-sitedir
18942 (string-append python "/lib/python"
18943 (python-version python)
18944 "/site-packages")))
18945 (wrap-program (string-append #$output "/bin/chardetect")
18946 `("GUIX_PYTHONPATH" ":" suffix
18947 ,(list sitedir python-sitedir)))))))))
18948 (home-page "https://github.com/chardet/chardet")
18949 (synopsis "Universal encoding detector for Python 2 and 3")
18950 (description
18951 "This package provides @code{chardet}, a Python module that can
18952automatically detect a wide range of file encodings.")
18953 (license license:lgpl2.1+)))
18954
18955(define-public python-charset-normalizer
18956 (package
18957 (name "python-charset-normalizer")
18958 (version "3.4.2")
18959 (source
18960 (origin
18961 (method url-fetch)
18962 (uri (pypi-uri "charset_normalizer" version))
18963 (sha256
18964 (base32 "0qqfk84ka3d9hh0yf7n8y0qa0yn08ncdacjjckzix8ybkv5cxbjv"))))
18965 (build-system pyproject-build-system)
18966 (arguments
18967 (list
18968 #:phases
18969 #~(modify-phases %standard-phases
18970 ;; https://github.com/jawah/charset_normalizer/issues/625
18971 ;; https://github.com/jawah/charset_normalizer/pull/626
18972 (add-after 'unpack 'fix-scripts
18973 (lambda _
18974 (substitute* "pyproject.toml"
18975 (("charset_normalizer:cli.cli_detect")
18976 "charset_normalizer.cli:cli_detect")))))))
18977 (native-inputs
18978 (list python-pytest
18979 python-setuptools))
18980 (home-page "https://github.com/ousret/charset_normalizer")
18981 (synopsis "Universal Charset Detector, alternative to Chardet")
18982 (description "This library helps you read text from an unknown charset
18983encoding. Motivated by @code{chardet}, it tries to resolve the issue by
18984taking a new approach. All IANA character set names for which the Python core
18985library provides codecs are supported.")
18986 (license license:expat)))
18987
18988(define-deprecated/public-alias python-charset-normalizer-3
18989 python-charset-normalizer) ;may be removed after 2025-12-01
18990
18991(define-public python-docopt
18992 (package
18993 (name "python-docopt")
18994 (version "0.6.2")
18995 (source
18996 (origin
18997 (method git-fetch) ;no tests in PyPI archive
18998 (uri (git-reference
18999 (url "https://github.com/docopt/docopt")
19000 (commit version)))
19001 (file-name (git-file-name name version))
19002 (sha256
19003 (base32 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
19004 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
19005 (build-system pyproject-build-system)
19006 (native-inputs
19007 (list python-pytest python-setuptools))
19008 (home-page "http://docopt.org")
19009 (synopsis "Command-line interface description language for Python")
19010 (description
19011 "This library allows the user to define a command-line interface from a
19012program's help message rather than specifying it programmatically with
19013command-line parsers like @code{getopt} and @code{argparse}.")
19014 (license license:expat)))
19015
19016(define-public python-pythonanywhere
19017 (package
19018 (name "python-pythonanywhere")
19019 (version "0.17.0")
19020 (source
19021 (origin
19022 (method git-fetch)
19023 (uri (git-reference
19024 (url "https://github.com/pythonanywhere/helper_scripts")
19025 (commit (string-append "v" version))))
19026 (file-name (git-file-name name version))
19027 (sha256
19028 (base32 "0hsxrw1inqqnxbfvjk0j218ijx5xv4lkfh1qzvay7pzk9ifc0sfz"))))
19029 (build-system pyproject-build-system)
19030 (arguments
19031 (list
19032 #:test-flags
19033 #~(list "--ignore=tests/test_django_project.py" ;depedns on submodule
19034 "-k" (string-join
19035 ;; Network access is required to clone external
19036 ;; repositories.
19037 (list "not test_actually_creates_django_project_in_vir"
19038 "test_actually_downloads_repo"
19039 "test_actually_installing_a_real_package"
19040 "test_actually_works_against_example_repo"
19041 "test_autoconfigure_actually_works_against_example_repo"
19042 "test_exits_because_boolean_not_satisfied"
19043 "test_gets_version"
19044 "test_nuke_option_lets_you_run_twice"
19045 "test_nuke_option_lets_you_run_twice"
19046 "test_start_actually_creates_django_project_in_vir")
19047 " and not "))
19048 #:phases
19049 #~(modify-phases %standard-phases
19050 (add-before 'check 'change-home
19051 (lambda _
19052 (setenv "HOME" "/tmp"))))))
19053 (native-inputs
19054 (list python-psutil
19055 python-pytest
19056 python-pytest-mock
19057 python-responses
19058 python-setuptools))
19059 (propagated-inputs
19060 (list python-dateutil
19061 python-docopt
19062 python-packaging
19063 python-pythonanywhere-core
19064 python-requests
19065 python-schema
19066 python-snakesay
19067 python-tabulate
19068 python-typer))
19069 (home-page "https://github.com/pythonanywhere/helper_scripts/")
19070 (synopsis "PythonAnywhere helper tools for users")
19071 (description
19072 "PythonAnywhere provides a command-line interface and an application
19073programming interface that allows managing files Web apps, scheduled
19074tasks and students. It includes single-command deployment for the Django Girls
19075tutorial.")
19076 (license license:expat)))
19077
19078(define-public python-pythonanywhere-core
19079 (package
19080 (name "python-pythonanywhere-core")
19081 (version "0.2.7")
19082 (source
19083 (origin
19084 (method git-fetch)
19085 (uri (git-reference
19086 (url "https://github.com/pythonanywhere/pythonanywhere-core")
19087 (commit (string-append "v" version))))
19088 (file-name (git-file-name name version))
19089 (sha256
19090 (base32 "1p9zlq3is0jvbni9ydiv6f0fw89lm44hkgbj6nari2a3gb3qw856"))))
19091 (build-system pyproject-build-system)
19092 (arguments
19093 (list
19094 #:phases
19095 #~(modify-phases %standard-phases
19096 (add-before 'check 'pre-check
19097 (lambda _
19098 (setenv "HOME" "/tmp"))))))
19099 (native-inputs
19100 (list python-poetry-core
19101 python-pytest
19102 python-pytest-mock
19103 python-responses))
19104 (propagated-inputs
19105 (list python-dateutil
19106 python-requests
19107 python-snakesay
19108 python-typing-extensions))
19109 (home-page "https://github.com/pythonanywhere/pythonanywhere-core")
19110 (synopsis "API wrapper for PythonAnywhere services")
19111 (description
19112 "This package provides an API wrapper for programmatic management of
19113@code{PythonAnywhere} services.")
19114 (license license:expat)))
19115
19116(define-public python-dialog
19117 (package
19118 (name "python-dialog")
19119 (version "3.5.3")
19120 (source
19121 (origin
19122 (method url-fetch)
19123 (uri (pypi-uri "pythondialog" version))
19124 (sha256
19125 (base32 "08v3flvbhpc0p20drniiaalc3ijghlxk9ka5vz5mqqm6y254m8xj"))
19126 (modules '((guix build utils)))
19127 (snippet #~(delete-file-recursively "doc"))))
19128 (build-system pyproject-build-system)
19129 (arguments
19130 (list
19131 ;; XXX: There are no tests, but some examples. However, they need to
19132 ;; be run on a terminal.
19133 #:tests? #f
19134 #:phases
19135 #~(modify-phases %standard-phases
19136 (add-after 'unpack 'patch-path
19137 (lambda* (#:key inputs #:allow-other-keys)
19138 (substitute* "dialog.py"
19139 (("_path_to_executable\\(dialog\\)")
19140 (format #f "os.path.realpath(~s)"
19141 (search-input-file inputs "bin/dialog")))))))))
19142 (native-inputs (list python-setuptools))
19143 (inputs (list dialog))
19144 (home-page "https://pythondialog.sourceforge.net/")
19145 (synopsis "Python interface to the UNIX dialog utility")
19146 (description
19147 "A Python wrapper for the dialog utility. Its purpose is to provide an
19148easy to use, pythonic and comprehensive Python interface to dialog. This
19149allows one to make simple text-mode user interfaces on Unix-like systems")
19150 (license license:lgpl2.1)))
19151
19152(define-public python-pythondialog
19153 (deprecated-package "python-pythondialog" python-dialog))
19154
19155(define-public python-confection
19156 (package
19157 (name "python-confection")
19158 (version "0.1.5")
19159 (source (origin
19160 (method url-fetch)
19161 (uri (pypi-uri "confection" version))
19162 (sha256
19163 (base32
19164 "03hgb6601mx6iip4nr8i0is8x5vmh85z286j7j8lhkxxlqydswlf"))))
19165 (build-system pyproject-build-system)
19166 (propagated-inputs (list python-pydantic python-srsly))
19167 (native-inputs (list python-pytest python-setuptools python-wheel))
19168 (home-page "https://github.com/explosion/confection")
19169 (synopsis "Config system for Python")
19170 (description "Confection is a lightweight library that offers a
19171configuration system letting you conveniently describe arbitrary trees of
19172objects.")
19173 (license license:expat)))
19174
19175(define-public python-configobj
19176 (package
19177 (name "python-configobj")
19178 (version "5.0.9")
19179 (source
19180 (origin
19181 (method url-fetch)
19182 (uri (pypi-uri "configobj" version))
19183 (sha256
19184 (base32 "0j3872id3ngxkaapz9bv8as4lg4rfmch0dxqy767p81syaxq3j03"))))
19185 (build-system pyproject-build-system)
19186 (native-inputs
19187 (list python-pytest
19188 python-setuptools))
19189 (home-page "https://github.com/DiffSK/configobj")
19190 (synopsis "Config file reading, writing and validation")
19191 (description
19192 "ConfigObj is a simple but powerful config file reader and writer: an
19193 ini file round tripper. Its main feature is that it is very easy to use,
19194with a straightforward programmer’s interface and a simple syntax for config
19195files.")
19196 (license license:bsd-3)))
19197
19198(define-public python-omegaconf
19199 (let ((commit "117f7de07285e4d1324b9229eaf873de15279457")
19200 (revision "0"))
19201 (package
19202 (name "python-omegaconf")
19203 (version (git-version "2.3.0" revision commit))
19204 (source
19205 (origin
19206 (method git-fetch)
19207 (uri (git-reference
19208 (url "https://github.com/omry/omegaconf")
19209 (commit commit)))
19210 (file-name (git-file-name name version))
19211 (modules '((guix build utils)))
19212 (snippet
19213 #~(begin
19214 (delete-file-recursively "build_helpers/bin")
19215 (substitute* "build_helpers/build_helpers.py"
19216 (("java") "antlr4")
19217 (("\"-jar\",") "")
19218 (("str\\(build_dir / \"bin\" / \"antlr.*\"\\),") ""))))
19219 (sha256
19220 (base32 "0f922dar5dwyyfk1bwsbs9gws0vyj1w2h9n3148hcfa8c4hg2ysv"))))
19221 (build-system pyproject-build-system)
19222 (arguments
19223 (list
19224 #:test-flags
19225 ;; XXX: Those tests currently fail collection.
19226 #~(list "--ignore=tests/structured_conf/test_structured_config.py"
19227 "--ignore=tests/test_basic_ops_list.py"
19228 "--ignore=tests/test_merge.py"
19229 "--ignore=tests/test_select.py")
19230 #:phases
19231 #~(modify-phases %standard-phases
19232 (add-after 'unpack 'loosen-requirements
19233 (lambda _
19234 (substitute* "requirements/base.txt"
19235 (("antlr4-python3-runtime==.*")
19236 "antlr4-python3-runtime >=4.9\n"))
19237 ;; Ignore deprecation warnings.
19238 (substitute* "pyproject.toml"
19239 (("-Werror") "")))))))
19240 (native-inputs
19241 (list icedtea
19242 antlr4
19243 python-pytest
19244 python-pytest-mock
19245 python-setuptools
19246 python-wheel))
19247 (propagated-inputs
19248 (list java-antlr4-runtime-python
19249 python-pydevd
19250 python-pyyaml))
19251 (home-page "https://github.com/omry/omegaconf")
19252 (synopsis "Flexible configuration system")
19253 (description
19254 "OmegaConf is a hierarchical configuration system and supports merging
19255configurations from multiple sources. It provides a consistent API regardless
19256of how the configuration was created.")
19257 (license license:bsd-3))))
19258
19259(define-public python-configargparse
19260 (package
19261 (name "python-configargparse")
19262 (version "1.7")
19263 (source (origin
19264 (method url-fetch)
19265 (uri (pypi-uri "ConfigArgParse" version))
19266 (sha256
19267 (base32
19268 "1l866g1dcf2ljf8fl7ggpxk1rggry0lya4d5b264gradi1qp81p7"))))
19269 (build-system pyproject-build-system)
19270 (propagated-inputs
19271 (list python-pyyaml))
19272 (native-inputs
19273 (list python-mock python-pytest python-setuptools python-wheel))
19274 (synopsis "Replacement for argparse")
19275 (description "A drop-in replacement for argparse that allows options to also
19276be set via config files and/or environment variables.")
19277 (home-page "https://github.com/bw2/ConfigArgParse")
19278 (license license:expat)))
19279
19280(define-public python-connection-pool
19281 (package
19282 (name "python-connection-pool")
19283 (version "0.0.3")
19284 (source
19285 (origin
19286 (method git-fetch)
19287 (uri (git-reference
19288 (url "https://github.com/zhouyl/ConnectionPool")
19289 (commit version)))
19290 (file-name (git-file-name name version))
19291 (sha256
19292 (base32 "1c6676vga0p4xxa3f0jpbwgp3n69mxjisnfcwibd9x23iyxf3sr2"))))
19293 (build-system pyproject-build-system)
19294 (arguments (list #:tests? #f)) ; No tests.
19295 (native-inputs (list python-setuptools))
19296 (home-page "https://github.com/zhouyl/ConnectionPool")
19297 (synopsis "Thread-safe connection pool")
19298 (description
19299 "This package provides a library implementing a thread-safe connection
19300pool.")
19301 (license license:expat)))
19302
19303(define-public python-argparse-dataclass
19304 (package
19305 (name "python-argparse-dataclass")
19306 (version "2.0.0")
19307 (source
19308 (origin
19309 (method git-fetch) ;no tests in PyPI archive
19310 (uri (git-reference
19311 (url "https://github.com/mivade/argparse_dataclass")
19312 (commit version)))
19313 (file-name (git-file-name name version))
19314 (sha256
19315 (base32 "0fbxs2a4jk5bvy42jlnqw4l02zs1s6mmfn4sr8rknyc4ngl4y9q1"))))
19316 (build-system pyproject-build-system)
19317 (native-inputs (list python-pytest python-setuptools python-wheel))
19318 (home-page "https://github.com/mivade/argparse_dataclass")
19319 (synopsis "Declarative command-line interfaces using argparse and dataclasses")
19320 (description
19321 "This package provides declarative command-line interfaces using argparse
19322and dataclasses.")
19323 (license license:expat)))
19324
19325(define-public python-argparse-manpage
19326 (package
19327 (name "python-argparse-manpage")
19328 (version "4.7")
19329 (source
19330 (origin
19331 (method url-fetch)
19332 (uri (pypi-uri "argparse_manpage" version))
19333 (sha256
19334 (base32 "0clb20scp408gxac675v731vnj89pk9d5fb7pcy7bj1a45mvgshx"))))
19335 (build-system pyproject-build-system)
19336 (arguments
19337 (list
19338 #:test-flags
19339 ;; Tests require PIP.
19340 #~(list "--ignore=tests/test_examples.py")))
19341 (native-inputs
19342 (list python-pytest
19343 python-setuptools))
19344 (home-page "https://github.com/praiskup/argparse-manpage")
19345 (synopsis "Build manual page from Python's ArgumentParser object")
19346 (description
19347 "This package provides tools to build manual pages from Python's
19348@code{ArgumentParser} object.")
19349 (license license:asl2.0)))
19350
19351(define-public python-atomicwrites
19352 (package
19353 (name "python-atomicwrites")
19354 (version "1.4.0")
19355 (source
19356 (origin
19357 (method git-fetch)
19358 (uri (git-reference
19359 (url "https://github.com/untitaker/python-atomicwrites")
19360 (commit version)))
19361 (file-name (git-file-name name version))
19362 (sha256
19363 (base32 "1f21l5fyh8qmsacbsknwwgnd1b9x4i0aw0zpczr05wklkkbvd58y"))))
19364 (build-system pyproject-build-system)
19365 (native-inputs (list python-pytest python-setuptools))
19366 (synopsis "Atomic file writes in Python")
19367 (description
19368 "Library for atomic file writes using platform dependent tools
19369for atomic file system operations.")
19370 (home-page "https://github.com/untitaker/python-atomicwrites")
19371 (license license:expat)))
19372
19373(define-public python-qstylizer
19374 (package
19375 (name "python-qstylizer")
19376 (version "0.2.4")
19377 (source
19378 (origin
19379 (method git-fetch)
19380 (uri (git-reference
19381 (url "https://github.com/blambright/qstylizer")
19382 (commit version)))
19383 (file-name (git-file-name name version))
19384 (sha256
19385 (base32 "0413msw23kv87fgs14ajp9wb2qxkcw6ydvwjzabz7xcp8iif9kr2"))))
19386 (build-system pyproject-build-system)
19387 (arguments
19388 (list
19389 #:phases
19390 #~(modify-phases %standard-phases
19391 (add-before 'build 'set-pbr-version
19392 (lambda _
19393 (setenv "PBR_VERSION" "3.0.1"))))))
19394 (native-inputs
19395 (list python-pbr
19396 python-pytest
19397 python-pytest-mock
19398 python-setuptools
19399 python-wheel))
19400 (propagated-inputs
19401 (list python-inflection
19402 python-tinycss2))
19403 (home-page "https://github.com/blambright/qstylizer")
19404 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
19405 (description "@code{qstylizer} is a Python package designed to help with
19406the construction of PyQt/PySide stylesheets.")
19407 (license license:expat)))
19408
19409(define-public python-click-threading
19410 (package
19411 (name "python-click-threading")
19412 (version "0.5.0")
19413 (source
19414 (origin
19415 (method git-fetch)
19416 (uri (git-reference
19417 (url "https://github.com/click-contrib/click-threading")
19418 (commit version)))
19419 (file-name (git-file-name name version))
19420 (sha256
19421 (base32 "185pzw12ap7wrjpyxhsyrkhh7i1l5qclaa3zlpn8qvm39fz0kjni"))))
19422 (build-system pyproject-build-system)
19423 (native-inputs (list python-pytest python-setuptools))
19424 (propagated-inputs (list python-click))
19425 (synopsis "Utilities for multithreading in Click")
19426 (description
19427 "This package provides utilities for multithreading in Click
19428applications.")
19429 (home-page "https://github.com/click-contrib/click-threading")
19430 (license license:expat)))
19431
19432(define-public python-click-log
19433 (package
19434 (name "python-click-log")
19435 (version "0.3.2")
19436 (source
19437 (origin
19438 (method git-fetch)
19439 (uri (git-reference
19440 (url "https://github.com/click-contrib/click-log")
19441 (commit version)))
19442 (file-name (git-file-name name version))
19443 (sha256
19444 (base32 "01zpjyqnyzrx6xi7cii2180bqdcg2a6b1sdbjijri8jv755r7ray"))))
19445 (build-system pyproject-build-system)
19446 (native-inputs (list python-pytest python-setuptools))
19447 (propagated-inputs (list python-click))
19448 (synopsis "Logging for click applications")
19449 (description
19450 "This package provides a Python library for logging Click applications.")
19451 (home-page "https://github.com/click-contrib/click-log")
19452 (license license:expat)))
19453
19454(define-public python-click-default-group
19455 (package
19456 (name "python-click-default-group")
19457 (version "1.2.4")
19458 (source
19459 (origin
19460 (method git-fetch) ; no tests in PyPI release
19461 (uri (git-reference
19462 (url "https://github.com/click-contrib/click-default-group")
19463 (commit (string-append "v" version))))
19464 (file-name (git-file-name name version))
19465 (sha256
19466 (base32 "06h12qwg0lhvxlgfm9768afibwp8j6r3r440v630a30bv0nkhngm"))))
19467 (build-system pyproject-build-system)
19468 (propagated-inputs
19469 (list python-click))
19470 (native-inputs
19471 (list python-flit-core python-pytest))
19472 (synopsis "Extends click.Group")
19473 (description "This package extends click.Group to invoke a command without
19474explicit subcommand name.")
19475 (home-page "https://github.com/click-contrib/click-default-group")
19476 (license license:bsd-3)))
19477
19478(define-public python-apipkg
19479 (package
19480 (name "python-apipkg")
19481 (version "3.0.2")
19482 (source
19483 (origin
19484 (method url-fetch)
19485 (uri (pypi-uri "apipkg" version))
19486 (sha256
19487 (base32 "03ay7j57mfh4sa8vh9qwid1ggwdc0lasyw3ycsmgv5r6z2j63an7"))))
19488 (build-system pyproject-build-system)
19489 (arguments (list #:tests? #f)) ;no tests in PyPI archvie
19490 (native-inputs
19491 (list python-hatch-vcs
19492 python-hatchling))
19493 (home-page "https://github.com/pytest-dev/apipkg")
19494 (synopsis "Namespace control and lazy-import mechanism")
19495 (description "With apipkg you can control the exported namespace of a Python
19496package and greatly reduce the number of imports for your users. It is a small
19497pure Python module that works on virtually all Python versions.")
19498 (license license:expat)))
19499
19500(define-public python-essentials
19501 (package
19502 (name "python-essentials")
19503 (version "1.1.8")
19504 (source
19505 (origin
19506 (method git-fetch)
19507 (uri (git-reference
19508 (url "https://github.com/Neoteroi/essentials")
19509 (commit (string-append "v" version))))
19510 (file-name (git-file-name name version))
19511 (sha256
19512 (base32 "1k8ybgxh0xvwxjc22pkmyvdhm0jgmj77rlg656r81iiibc0l7zj8"))))
19513 (build-system pyproject-build-system)
19514 (native-inputs
19515 (list python-hatchling
19516 python-pydantic
19517 python-pytest-asyncio))
19518 (home-page "https://github.com/Neoteroi/essentials/wiki")
19519 (synopsis
19520 "Utility functions, exceptions, and classes for Python applications")
19521 (description
19522 "Essentials is a collection of functions, exceptions, and classes for Python
19523applications. Examples of utilities are exceptions for common scenarios,
19524friendly JSON encoder, decorators for retries and logging.")
19525 (license license:expat)))
19526
19527(define-public python-execnet
19528 (package
19529 (name "python-execnet")
19530 (version "2.1.1")
19531 (source (origin
19532 (method git-fetch)
19533 (uri (git-reference
19534 (url "https://github.com/pytest-dev/execnet")
19535 (commit (string-append "v" version))))
19536 (file-name (git-file-name name version))
19537 (sha256
19538 (base32
19539 "0xlfd0h9sjl0jpc2fc689a497chwbagali7qr364k75hdyax3jfq"))))
19540 (build-system pyproject-build-system)
19541 (arguments
19542 (list
19543 ;; ;; This test hasn't been updated for the latest Pytest yet:
19544 ;; #:test-flags #~(list "--ignore" "testing/test_rsync.py")
19545 #:phases
19546 #~(modify-phases %standard-phases
19547 (add-after 'unpack 'adjust-for-pytest-7.2+
19548 (lambda _
19549 ;; This test fails with an error because @py.test has been
19550 ;; deprecated for @pytest in recent Pytest.
19551 (substitute* "testing/test_rsync.py"
19552 (("@py.test")
19553 "@pytest"))))
19554 (add-before 'build 'pretend-version
19555 ;; The version string is usually derived via setuptools-scm, but
19556 ;; without the git metadata available this fails.
19557 (lambda _
19558 ;; hatch-vcs uses setuptools under the hood.
19559 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
19560 ;; Massage the version string to a PEP-0440 compatible
19561 ;; one.
19562 #$(car (string-split version #\-)))))
19563 (add-before 'check 'prepare-for-tests
19564 (lambda _
19565 ;; Unset PYTHONDONTWRITEBYTECODE to match the
19566 ;; expectations of a test in
19567 ;; 'testing/test_gateway.py'.
19568 (unsetenv "PYTHONDONTWRITEBYTECODE"))))))
19569 (native-inputs
19570 (list python-hatchling
19571 python-hatch-vcs
19572 python-pytest-bootstrap))
19573 (synopsis "Rapid multi-Python deployment")
19574 (description "Execnet provides a share-nothing model with
19575channel-send/receive communication for distributing execution across many
19576Python interpreters across version, platform and network barriers. It has a
19577minimal and fast API targeting the following uses:
19578@enumerate
19579@item distribute tasks to (many) local or remote CPUs
19580@item write and deploy hybrid multi-process applications
19581@item write scripts to administer multiple environments
19582@end enumerate")
19583 (home-page "https://codespeak.net/execnet/")
19584 (license license:expat)))
19585
19586(define-public python-icalendar
19587 (package
19588 (name "python-icalendar")
19589 (version "5.0.13")
19590 (source (origin
19591 (method url-fetch)
19592 (uri (pypi-uri "icalendar" version))
19593 (sha256
19594 (base32
19595 "01lp0advx60z8wgng8aga1p1668ydn1r6d9qm3d622yfikg9yycj"))))
19596 (build-system pyproject-build-system)
19597 (arguments
19598 (list
19599 #:phases
19600 #~(modify-phases %standard-phases
19601 (replace 'check
19602 (lambda* (#:key tests? #:allow-other-keys)
19603 (when tests?
19604 (invoke "pytest" "-vv" "src/icalendar/tests")))))))
19605 (propagated-inputs
19606 (list python-dateutil python-pytz python-tzdata))
19607 (native-inputs
19608 (list python-pytest python-pytz python-setuptools python-wheel))
19609 (synopsis "Python library for parsing and generating iCalendar files")
19610 (description
19611 "@code{icalendar} is a Python library for parsing and generating iCalendar files.")
19612 (home-page "https://github.com/collective/icalendar")
19613 (license license:bsd-2)))
19614
19615(define-public python-args
19616 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65")
19617 (revision "0"))
19618 (package
19619 (name "python-args")
19620 (version (git-version "0.1.0" revision commit))
19621 (source
19622 (origin
19623 (method git-fetch)
19624 (uri (git-reference
19625 (url "https://github.com/kennethreitz-archive/args")
19626 (commit commit)))
19627 (file-name (git-file-name name version))
19628 (sha256
19629 (base32 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
19630 (build-system pyproject-build-system)
19631 (arguments
19632 (list
19633 #:tests? #f ; XXX: python-nose is deprecated.
19634 #:phases
19635 #~(modify-phases %standard-phases
19636 (add-after 'unpack 'patch-args.py
19637 (lambda _
19638 (substitute* "args.py"
19639 (("basestring")
19640 "str")))))))
19641 (native-inputs (list python-setuptools python-wheel))
19642 (home-page "https://github.com/kennethreitz-archive/args")
19643 (synopsis "Command-line argument parser")
19644 (description
19645 "This library provides a Python module to parse command-line arguments.")
19646 (license license:bsd-3))))
19647
19648(define-public python-clint
19649 (package
19650 (name "python-clint")
19651 (version "0.5.1")
19652 (source (origin
19653 (method url-fetch)
19654 (uri (pypi-uri "clint" version))
19655 (sha256
19656 (base32
19657 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
19658 (build-system pyproject-build-system)
19659 (native-inputs
19660 (list python-pytest python-setuptools python-wheel))
19661 (propagated-inputs
19662 (list python-args))
19663 (home-page "https://github.com/kennethreitz/clint")
19664 (synopsis "Command-line interface tools")
19665 (description
19666 "Clint is a Python module filled with a set of tools for developing
19667command-line applications, including tools for colored and indented
19668output, progress bar display, and pipes.")
19669 (license license:isc)))
19670
19671(define-public python-rply
19672 (package
19673 (name "python-rply")
19674 (version "0.7.8")
19675 (source
19676 (origin
19677 (method git-fetch)
19678 (uri (git-reference
19679 (url "https://github.com/alex/rply")
19680 (commit (string-append "v" version))))
19681 (file-name (git-file-name name version))
19682 (sha256
19683 (base32 "0kn8vikyf95mr8l9g3324b7gk4cgxlvvy1abqpl1h803idqg1vwq"))))
19684 (build-system pyproject-build-system)
19685 (arguments
19686 (list
19687 #:test-flags #~(list "--ignore=tests/test_ztranslation.py")
19688 #:phases
19689 #~(modify-phases %standard-phases
19690 (add-before 'check 'fix-pytest-use
19691 (lambda _
19692 (substitute* (find-files "tests" "\\.py$")
19693 (("import py")
19694 "import pytest")
19695 (("py\\.test")
19696 "pytest"))
19697 (setenv "HOME" (getcwd)))))))
19698 (native-inputs (list python-pytest python-setuptools))
19699 (propagated-inputs (list python-appdirs))
19700 (home-page "https://github.com/alex/rply")
19701 (synopsis "Parser generator for Python")
19702 (description
19703 "This package provides a pure Python based parser generator, that also
19704works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
19705with a new public API, and RPython support.")
19706 (license license:bsd-3)))
19707
19708(define-public python-hy
19709 (package
19710 (name "python-hy")
19711 (version "1.1.0")
19712 (source
19713 (origin
19714 (method git-fetch) ;no tests in PyPI release
19715 (uri (git-reference
19716 (url "https://github.com/hylang/hy")
19717 (commit version)))
19718 (file-name (git-file-name name version))
19719 (sha256
19720 (base32 "1g7h7c9zwbcvsi1l3mydhv27bjkiz5wawmdklmryjnv6qkvdx96d"))))
19721 (build-system pyproject-build-system)
19722 (arguments
19723 (list
19724 ;; This test expects the hy executable to be called 'hy', but in Guix
19725 ;; it's .hy-real.
19726 #:test-flags #~(list "-k" "not test_sys_executable")))
19727 (native-inputs (list python-pytest python-setuptools python-wheel))
19728 (propagated-inputs (list python-funcparserlib))
19729 (home-page "https://docs.hylang.org/en/stable/")
19730 (synopsis "Lisp frontend to Python")
19731 (description
19732 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
19733its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
19734Python at your fingertips, in Lisp form.")
19735 (license license:expat)))
19736
19737(define-public python-hissp
19738 (package
19739 (name "python-hissp")
19740 (version "0.5.0")
19741 (source
19742 (origin
19743 (method git-fetch)
19744 (uri (git-reference
19745 (url "https://github.com/gilch/hissp")
19746 (commit (string-append "v" version))))
19747 (file-name (git-file-name name version))
19748 (sha256
19749 (base32 "03lxna935c0qs3lppb2xrvvgh0dkwz8lh5pmgqrmpddin1kxyjri"))))
19750 (build-system pyproject-build-system)
19751 (arguments (list #:test-backend #~'unittest))
19752 (native-inputs (list python-hypothesis python-setuptools))
19753 (home-page "https://github.com/gilch/hissp")
19754 (synopsis "It's Python with a Lissp")
19755 (description
19756 "Hissp is a modular Lisp implementation that compiles to a functional
19757subset of Python—Syntactic macro metaprogramming with full access to the
19758Python ecosystem.")
19759 (license license:asl2.0)))
19760
19761(define-public python-promise
19762 (package
19763 (name "python-promise")
19764 (version "2.3.0")
19765 (source
19766 (origin
19767 (method git-fetch)
19768 (uri (git-reference
19769 (url "https://github.com/syrusakbary/promise")
19770 (commit (string-append "v" version))))
19771 (file-name (git-file-name name version))
19772 (sha256
19773 (base32 "17mq1bm78xfl0x1g50ng502m5ldq6421rzz35hlqafsj0cq8dkp6"))))
19774 (build-system pyproject-build-system)
19775 (arguments
19776 (list
19777 #:test-flags
19778 #~(list "--ignore=tests/test_benchmark.py"
19779 ;; Issues with pytest-asyncio
19780 "--ignore=tests/test_awaitable.py"
19781 "-k" (string-join
19782 (list "not test_issue_9_safe"
19783 ;; Stacktrace issues.
19784 "test_thrown_exceptions_have_stacktrace"
19785 "test_thrown_exceptions_preserve_stacktrace")
19786 " and not "))))
19787 (native-inputs
19788 (list python-mock
19789 python-pytest
19790 python-pytest-asyncio
19791 python-setuptools))
19792 (propagated-inputs (list python-six))
19793 (home-page "https://github.com/syrusakbary/promise")
19794 (synopsis "Promises/A+ implementation for Python")
19795 (description
19796 "This package provides an implementation of Promises in Python. It is a
19797super set of Promises/A+ designed to have readable, performant code and to
19798provide just the extensions that are absolutely necessary for using promises
19799in Python.")
19800 (license license:expat)))
19801
19802(define-public python-progress
19803 (package
19804 (name "python-progress")
19805 (version "1.6")
19806 (source
19807 (origin
19808 (method git-fetch)
19809 (uri (git-reference
19810 (url "https://github.com/verigak/progress/")
19811 (commit version)))
19812 (file-name (git-file-name name version))
19813 (sha256
19814 (base32 "0qz5b9d3cvfdy2f1gb4r20f1qgcsihhmbc2bm2jgbvryxylp0f5k"))
19815 (snippet #~(delete-file "demo.gif"))))
19816 (build-system pyproject-build-system)
19817 (arguments
19818 (list
19819 #:test-backend #~'custom
19820 #:test-flags #~(list "test_progress.py")))
19821 (native-inputs (list python-setuptools))
19822 (home-page "https://github.com/verigak/progress/")
19823 (synopsis "Progress reporting bars for Python")
19824 (description
19825 "This Python package provides progress reporting for visual of progress
19826of long running operations. There are multiple choices of progress bars and
19827spinners, with customizable options, such as width, fill character, and
19828suffix.")
19829 (license license:isc)))
19830
19831(define-public python-progressbar2
19832 (package
19833 (name "python-progressbar2")
19834 (version "4.5.0")
19835 (source
19836 (origin
19837 (method url-fetch)
19838 (uri (pypi-uri "progressbar2" version))
19839 (sha256
19840 (base32 "1yw8j3sz9y3nw2x1ffiqqzml8l9vb0kixxnsjkmk3vc691icnqk6"))))
19841 (build-system pyproject-build-system)
19842 (arguments
19843 (list
19844 #:test-flags #~(list "--pyargs" "progressbar" "tests")
19845 #:phases
19846 #~(modify-phases %standard-phases
19847 (add-after 'unpack 'fix-pytest-config
19848 (lambda _
19849 ;; Drop test coverage requirements.
19850 (substitute* "pytest.ini"
19851 ((".*-cov.*") "")))))))
19852 (native-inputs
19853 (list python-dill
19854 python-pytest
19855 python-freezegun
19856 python-setuptools
19857 python-setuptools-scm
19858 python-wheel))
19859 (propagated-inputs
19860 (list python-utils))
19861 (home-page "https://github.com/WoLpH/python-progressbar")
19862 (synopsis "Text progress bar library for Python")
19863 (description
19864 "This package provides a Python progressbar library to provide
19865visual (yet text based) progress to long running operations.")
19866 (license license:bsd-3)))
19867
19868(define-public python-progressbar33
19869 (package
19870 (name "python-progressbar33")
19871 (version "2.4")
19872 (source
19873 (origin
19874 (method git-fetch)
19875 (uri (git-reference
19876 (url "https://github.com/germangh/python-progressbar")
19877 (commit (string-append "v" version))))
19878 (file-name (git-file-name name version))
19879 (sha256
19880 (base32 "0vyn2l6i7fgqskqfx3nfs1dibc5v1cxydg3v3422xf41pkba282c"))))
19881 (build-system pyproject-build-system)
19882 (arguments
19883 (list
19884 #:test-backend #~'custom
19885 #:test-flags #~(list "examples.py")))
19886 (native-inputs (list python-setuptools))
19887 (home-page "https://github.com/germangh/python-progressbar")
19888 (synopsis "Text progress bar library for Python")
19889 (description
19890 "This package provides a text progress bar library for Python. This
19891version only differs from the original @code{progressbar} package in that it
19892uses relative package imports instead of absolute imports, which is necessary
19893for the module to work under Python 3.3.")
19894 ;; Either or both of these licenses may be selected.
19895 (license (list license:lgpl2.1+ license:bsd-3))))
19896
19897(define-public python-colorama
19898 (package
19899 (name "python-colorama")
19900 (version "0.4.6")
19901 (source
19902 (origin
19903 (method url-fetch)
19904 (uri (pypi-uri "colorama" version))
19905 (sha256
19906 (base32 "0i3fpq0w5mbfdpy3z9p5raw4fg17jxr6jwh5l8qhavpdnxf5ys88"))))
19907 (build-system pyproject-build-system)
19908 (native-inputs (list python-hatchling python-pytest))
19909 (home-page "https://pypi.org/project/colorama/")
19910 (synopsis "Colored terminal text rendering for Python")
19911 (description "Colorama is a Python library for rendering colored terminal
19912text.")
19913 (license license:bsd-3)))
19914
19915;; XXX: Not maintained since 2012.
19916(define-public python-monthdelta
19917 (package
19918 (name "python-monthdelta")
19919 (version "0.9.1")
19920 (source
19921 (origin
19922 (method url-fetch)
19923 (uri (pypi-uri "MonthDelta" version))
19924 (sha256
19925 (base32 "0iwcsk7ryjw5h1wp10ykwd01f3am8gdlga6461q1v1njsk0rxh41"))))
19926 (build-system pyproject-build-system)
19927 (arguments
19928 (list #:test-backend #~'unittest))
19929 (native-inputs (list python-setuptools))
19930 (home-page "http://packages.python.org/MonthDelta")
19931 (synopsis "Date computations with months")
19932 (description
19933 "MonthDelta provides functionality to do date computations with months.")
19934 (license license:expat)))
19935
19936(define-public python-moto
19937 (package
19938 (name "python-moto")
19939 (version "5.1.5")
19940 (source (origin
19941 (method url-fetch)
19942 (uri (pypi-uri "moto" version))
19943 (sha256
19944 (base32 "0kpqdn96gw9h2bq05bp943q85f4lq89c4nk1gf71w60nkbm65cs2"))))
19945 (build-system pyproject-build-system)
19946 (arguments
19947 (list
19948 ;; tests: 10158 passed, 41 skipped, 143 deselected, 2 xfailed, 4 warnings
19949 #:test-flags
19950 #~(list "-m" "not network and not requires_docker"
19951 ;; Not all of the tests are thread save, see:
19952 ;; <https://github.com/getmoto/moto/issues/7786>.
19953 ;; "--numprocesses" (number->string (min 8 (parallel-job-count)))
19954 "-k" (string-join
19955 ;; Outbound access to AWS servcies is required to reach
19956 ;; endpoint URLs:
19957 ;; "https://s3.amazonaws.com/"
19958 ;; "https://realbucket.s3.amazonaws.com/"
19959 ;; "https://s3.amazonaws.com/companyname_prod"
19960 (list "not test_passthrough_calls_for_entire_service"
19961 "test_passthrough_calls_for_specific_url"
19962 "test_passthrough_calls_for_wildcard_urls"
19963 ;; TypeError: Got unexpected keyword argument
19964 ;; 'account_id_endpoint_mode'
19965 "test_dynamodb_with_account_id_routing[disabled]"
19966 "test_dynamodb_with_account_id_routing[preferred]"
19967 "test_dynamodb_with_account_id_routing[required]"
19968 ;; botocore.exceptions.ParamValidationError:
19969 ;; Parameter validation failed: Missing required
19970 ;; parameter in input: "VpcId"; Missing required
19971 ;; parameter in input: "SubnetMappings"
19972 "test_create_firewall"
19973 "test_describe_logging_configuration"
19974 "test_list_firewalls"
19975 "test_update_logging_configuration"
19976 ;; RuntimeError: Firehose PutRecord(Batch) to HTTP
19977 ;; destination failed
19978 "test_put_record_http_destination"
19979 "test_put_record_batch_http_destination"
19980 ;; Timed out to connect to foo.localhost:5001
19981 "test_with_custom_request_header"
19982 ;; Timed out to connect to testcors.localhost:6789
19983 "test_s3_server_post_cors_multiple_origins"
19984 ;; AttributeError: 'TimestreamInfluxDB' object has
19985 ;; no attribute 'list_db_clusters'
19986 "test_list_db_clusters"
19987 "test_get_db_cluster"
19988 "test_create_db_cluster"
19989 ;; Checksum error
19990 "test_upload_file_with_checksum_algorithm"
19991 "test_list_objects_v2_checksum_algo"
19992 ;; Assertion is not equal
19993 "test_create_describe_update_and_delete_ledger"
19994 "test_s3tables_get_table"
19995 "test_tag_resource_and_list_tags_for_resource"
19996
19997 ;; XXX: Probably will be resolved in the next
19998 ;; release, as botocore's refresh pace is fast.
19999 ;;
20000 ;; botocore.exceptions.UnknownServiceError: Unknown
20001 ;; service: <...>
20002 "test_create_app_response"
20003 "test_describe_apps"
20004 "test_create_instance"
20005 "test_describe_instances"
20006 "test_ec2_integration"
20007 "test_create_layer_response"
20008 "test_describe_layers"
20009 "test_create_stack_response"
20010 "test_describe_stacks"
20011 "test_robot_application"
20012 "test_create_describe_update_and_delete_ledger"
20013 "test_tag_resource_and_list_tags_for_resource"
20014 ;; botocore.exceptions.ClientError: An error
20015 ;; occurred (404) when calling <...>
20016 "test_create_event_source_mapping"
20017 "test_delete_event_source_mapping"
20018 "test_delete_table_deletes_underlying_table_storage"
20019 "test_event_source_mapping_create_from_cloudformation_json"
20020 "test_event_source_mapping_delete_from_cloudformation_json"
20021 "test_event_source_mapping_delete_stack"
20022 "test_event_source_mapping_update_from_cloudformation_json"
20023 "test_get_event_source_mapping"
20024 "test_get_table"
20025 "test_invoke_fake_function_from_sqs_queue"
20026 "test_list_event_source_mappings"
20027 "test_rename_table"
20028 "test_underlying_table_storage_does_not_support_delete_object"
20029 "test_underlying_table_storage_does_not_support_list_objects"
20030 "test_update_event_source_mapping"
20031 "test_update_table_metadata_location"
20032 "test_write_metadata_to_table"
20033 ;; botocore.exceptions.ParamValidationError:
20034 ;; Parameter validation failed <...>
20035 "test_create_db_proxy"
20036 "test_create_db_proxy_duplicate_name"
20037 "test_create_db_proxy_invalid_subnet"
20038 "test_describe_db_proxies"
20039 "test_list_tags_db_proxy")
20040 " and not ")
20041 "tests")
20042 #:phases
20043 #~(modify-phases %standard-phases
20044 (add-after 'unpack 'patch-hardcoded-executable-names
20045 (lambda* (#:key inputs #:allow-other-keys)
20046 (let ((bash-exec (search-input-file inputs "/bin/sh")))
20047 (substitute* "moto/batch/models.py"
20048 (("/bin/sh") bash-exec))
20049 (substitute* (find-files "tests" "\\.py$")
20050 (("#!/bin/bash") (string-append "#!" bash-exec))))))
20051 (add-before 'check 'pre-check
20052 (lambda _
20053 (setenv "AWS_ACCESS_KEY_ID" "guix-access-key-id")
20054 (setenv "AWS_SECRET_ACCESS_KEY" "guix-secret-access-key")
20055 (setenv "TESTS_SKIP_REQUIRES_DOCKER" "true"))))))
20056 (native-inputs
20057 (list python-flask
20058 python-flask-cors
20059 python-freezegun
20060 python-pycognito
20061 python-pyotp
20062 python-pytest
20063 python-setuptools))
20064 (inputs
20065 (list bash-minimal))
20066 (propagated-inputs
20067 (list java-antlr4-runtime-python
20068 python-aws-xray-sdk
20069 python-boto3
20070 python-botocore
20071 python-cfn-lint
20072 python-cryptography
20073 python-dateutil
20074 python-graphql-core
20075 python-jinja2
20076 python-joserfc
20077 python-jsonpath-ng
20078 python-multipart
20079 python-openapi-spec-validator
20080 python-py-partiql-parser
20081 python-pyparsing
20082 python-requests
20083 python-responses
20084 python-werkzeug
20085 python-xmltodict))
20086 (home-page "https://github.com/spulec/moto")
20087 (synopsis "Mock out the boto library")
20088 (description
20089 "@code{moto} is a library designed to easily mock out the
20090@code{boto} library.")
20091 (license license:asl2.0)))
20092
20093(define-public python-plumbum
20094 (package
20095 (name "python-plumbum")
20096 (version "1.7.0")
20097 (source
20098 (origin
20099 (method git-fetch)
20100 (uri (git-reference
20101 (url "https://github.com/tomerfiliba/plumbum")
20102 (commit (string-append "v" version))))
20103 (file-name (git-file-name name version))
20104 (sha256
20105 (base32 "1vlaiz4bwgrcay51knj6a20lh3lwihjqxhxhdk6nqkn9ijg0hc81"))))
20106 (build-system pyproject-build-system)
20107 (arguments
20108 (list
20109 #:test-flags
20110 #~(list "--ignore=tests/test_remote.py"
20111 "--ignore=tests/test_putty.py"
20112 "--ignore=tests/test_sudo.py"
20113 "-k"
20114 (string-join (list "not test_home"
20115 "test_iter_lines_error"
20116 "test_quoting"
20117 "test_copy_move_delete")
20118 " and not "))
20119 #:phases
20120 #~(modify-phases %standard-phases
20121 (add-before 'build 'set-version
20122 (lambda _
20123 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
20124 (native-inputs
20125 (list procps
20126 python-psutil
20127 python-pytest
20128 python-pytest-cov
20129 python-setuptools
20130 python-setuptools-scm
20131 python-wheel))
20132 (home-page "https://plumbum.readthedocs.io")
20133 (synopsis "Python shell combinators library")
20134 (description
20135 "Plumbum is a library of tools for replacing shell scripts with Python
20136code.")
20137 (license license:expat)))
20138
20139(define-public python-deprecation
20140 (package
20141 (name "python-deprecation")
20142 (version "2.1.0")
20143 (source
20144 (origin
20145 (method url-fetch)
20146 (uri (pypi-uri "deprecation" version))
20147 (sha256
20148 (base32
20149 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
20150 (build-system pyproject-build-system)
20151 (arguments
20152 (list
20153 #:test-backend #~'unittest
20154 #:phases
20155 #~(modify-phases %standard-phases
20156 (add-after 'unpack 'drop-unittest2
20157 ;; See: <https://github.com/briancurtin/deprecation/issues/54>.
20158 (lambda _
20159 (substitute* "tests/test_deprecation.py"
20160 (("import unittest2")
20161 "import unittest as unittest2")))))))
20162 (native-inputs
20163 (list python-setuptools))
20164 (propagated-inputs
20165 (list python-packaging))
20166 (home-page "https://deprecation.readthedocs.io/")
20167 (synopsis "Python library to handle automated deprecations")
20168 (description
20169 "This is a library that enables automated deprecations. It offers the
20170@code{deprecated()} decorator to wrap functions, providing proper warnings
20171both in documentation and via Python’s warnings system, as well as the
20172@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
20173that deprecated code is eventually removed.")
20174 (license license:asl2.0)))
20175
20176(define-public python-jmespath
20177 (package
20178 (name "python-jmespath")
20179 (version "1.0.1")
20180 (source
20181 (origin
20182 (method url-fetch)
20183 (uri (pypi-uri "jmespath" version))
20184 (sha256
20185 (base32 "1gpdc1f0q5c9scmbw1l9g40jjfk3pxwg91ayvn7xbvvddlh1n9lh"))))
20186 (build-system pyproject-build-system)
20187 (native-inputs
20188 (list python-pytest
20189 python-setuptools))
20190 (home-page "https://github.com/jmespath/jmespath.py")
20191 (synopsis "JSON Matching Expressions")
20192 (description
20193 "JMESPath (pronounced “james path”) is a Python library that allows one
20194to declaratively specify how to extract elements from a JSON document.")
20195 (license license:expat)))
20196
20197(define-public python-asteval
20198 (package
20199 (name "python-asteval")
20200 (version "1.0.6")
20201 (source
20202 (origin
20203 (method url-fetch)
20204 (uri (pypi-uri "asteval" version))
20205 (sha256
20206 (base32 "17x1qk07cixj1nn59pp5dzjc9jna92v6kljdss81l5rf9cqfga0s"))))
20207 (build-system pyproject-build-system)
20208 (native-inputs
20209 (list python-pytest
20210 python-pytest-cov
20211 python-setuptools
20212 python-setuptools-scm))
20213 (home-page "https://github.com/newville/asteval")
20214 (synopsis "Minimalistic evaluator of Python expressions")
20215 (description
20216 "This package provides a minimalistic evaluator of Python expression
20217using the @code{ast} module.")
20218 (license license:expat)))
20219
20220(define-public python-lmfit
20221 (package
20222 (name "python-lmfit")
20223 (version "1.3.4")
20224 (source
20225 (origin
20226 (method url-fetch)
20227 (uri (pypi-uri "lmfit" version))
20228 (sha256
20229 (base32
20230 "15z4zcyc4crfdw22qnbaq8wrf552jgl83gd3nk2zc5zp8f6c48iw"))))
20231 (build-system pyproject-build-system)
20232 (arguments
20233 (list
20234 #:test-flags
20235 ;; Costly tests that may fail with multiprocessing.context.TimeoutError.
20236 #~(list "--ignore=tests/test_jacobian_pickling.py")
20237 #:phases
20238 #~(modify-phases %standard-phases
20239 ;; XXX: Unclear why, but the phase seems broken.
20240 ;; asteval>=1.0 is not understood correctly.
20241 (delete 'sanity-check))))
20242 (propagated-inputs
20243 (list python-asteval python-dill python-numpy python-scipy
20244 python-uncertainties))
20245 (native-inputs
20246 (list python-pytest python-pytest-cov python-setuptools))
20247 (home-page "https://lmfit.github.io/lmfit-py/")
20248 (synopsis "Least-Squares minimization with bounds and constraints")
20249 (description
20250 "Lmfit provides a high-level interface to non-linear optimization and
20251curve fitting problems for Python. It builds on and extends many of the
20252optimization methods of @code{scipy.optimize}. Initially inspired by (and
20253named for) extending the Levenberg-Marquardt method from
20254@code{scipy.optimize.leastsq}, lmfit now provides a number of useful
20255enhancements to optimization and data fitting problems.")
20256 (license license:bsd-3)))
20257
20258(define-public python-bokeh
20259 (package
20260 (name "python-bokeh")
20261 (version "3.7.3")
20262 (source (origin
20263 (method url-fetch)
20264 (uri (pypi-uri "bokeh" version))
20265 (sha256
20266 (base32
20267 "0argn4fadyswnz86x6fsy1f13nmd8iwzn5ddwrg3s43vg6grma3h"))))
20268 (build-system pyproject-build-system)
20269 (arguments
20270 (list
20271 ;; FIXME: Most of the tests do not work, figure out how to enable some
20272 ;; portion.
20273 #:tests? #f
20274 #:test-flags
20275 '(list
20276 ;; These require selenium.
20277 "--ignore=tests/unit/bokeh/io/test_export.py"
20278 "--ignore=tests/unit/bokeh/io/test_webdriver.py"
20279 "--ignore=tests/unit/bokeh/embed/test_standalone.py"
20280
20281 ;; Doesn't find ManagedServerLoop fixture
20282 "--ignore=tests/unit/bokeh/test_client_server.py"
20283
20284 ;; This fails because of the Guix wrapper around pytest
20285 "--ignore=tests/unit/bokeh/io/test_util__io.py"
20286
20287 ;; Fixture ipython not found.
20288 "--ignore=tests/unit/bokeh/application/handlers/test_notebook__handlers.py"
20289 "--ignore=tests/unit/bokeh/command/subcommands/test_info.py"
20290
20291 ;; pd fixture not found.
20292 "--ignore=tests/unit/bokeh/models/test_mappers.py"
20293 "--ignore=tests/unit/bokeh/models/util/test_structure.py"
20294 "--ignore=tests/unit/bokeh/plotting/test__plot.py"
20295 "--ignore=tests/unit/bokeh/plotting/test__graph.py"
20296 "--ignore=tests/unit/bokeh/plotting/test_figure.py"
20297 "--ignore=tests/unit/bokeh/core/test_json_encoder.py"
20298 "--ignore=tests/unit/bokeh/core/property/test_bases.py"
20299 "--ignore=tests/unit/bokeh/core/property/test_container.py"
20300 "--ignore=tests/unit/bokeh/core/property/test_dataspec.py"
20301 "--ignore=tests/unit/bokeh/core/property/test_datetime.py"
20302 "--ignore=tests/unit/bokeh/core/property/test_pandas.py"
20303
20304 ;; nx fixture not found.
20305 "--ignore=tests/unit/bokeh/plotting/test_graph.py"
20306 "--ignore=tests/unit/bokeh/models/test_graphs.py"
20307 "--ignore=tests/unit/bokeh/io/test_showing.py"
20308 "--ignore=tests/unit/bokeh/document/test_events__document.py"
20309
20310 ;; These tests need external sample data
20311 "--ignore-glob=tests/unit/bokeh/sampledata/*"
20312
20313 ;; Attempts to install something via npm.
20314 "--ignore=tests/unit/bokeh/test_ext.py"
20315
20316 ;; More failures due to set up problems.
20317 "--ignore=tests/unit/bokeh/server/test_server__server.py"
20318 "--ignore=tests/unit/bokeh/server/test_tornado__server.py"
20319 "--ignore=tests/unit/bokeh/util/test_serialization.py"
20320 "--ignore=tests/unit/bokeh/util/test_hex.py"
20321 "--ignore=tests/unit/bokeh/models/test_sources.py"
20322 "--ignore=tests/unit/bokeh/embed/test_bundle.py"
20323
20324 "-k"
20325 (string-append
20326 ;; Fails with: 'called_once_with' is not a valid assertion. [...]
20327 ;; Did you mean: 'assert_called_once_with'?
20328 "not test_set_from_json"
20329
20330 ;; XXX: This one test transforms a gif of a red box. It transforms
20331 ;; it all right but the base64 doesn't look as expected, probably
20332 ;; because of a change in pillow.
20333 " and not test_transform_PIL"))
20334 #:phases
20335 #~(modify-phases %standard-phases
20336 (add-before 'build 'set-version
20337 (lambda _
20338 (substitute* "pyproject.toml"
20339 ((", \"setuptools-git-versioning\"") "")
20340 (("dynamic = \\[\"version\"\\]")
20341 (string-append "version = '" #$version "'"))))))))
20342 (propagated-inputs
20343 (list node-lts
20344 python-contourpy
20345 python-jinja2
20346 python-narwhals
20347 python-numpy
20348 python-packaging
20349 python-pandas
20350 python-pillow
20351 python-pyyaml
20352 python-tornado-6
20353 python-xyzservices))
20354 (native-inputs
20355 (list python-beautifulsoup4
20356 python-dateutil
20357 python-flaky
20358 python-mock
20359 python-nbconvert
20360 python-pandas
20361 python-pytest
20362 python-pytz
20363 python-requests
20364 python-setuptools
20365 python-wheel))
20366 (home-page "https://github.com/bokeh/bokeh")
20367 (synopsis "Interactive plots and applications in the browser from Python")
20368 (description
20369 "This package provides tools for interactive plots and applications in the
20370browser from Python.")
20371 (license license:bsd-3)))
20372
20373(define-public python-botocore
20374 ;; Note: When updating botocore, also make sure that boto3 and awscli
20375 ;; are compatible.
20376 (package
20377 (name "python-botocore")
20378 (version "1.40.61")
20379 (source
20380 (origin
20381 (method url-fetch)
20382 (uri (pypi-uri "botocore" version))
20383 (sha256
20384 (base32
20385 "1kajxzrh4nq4hx7rgbam0sffx06d45q7rw2csv69q3q9kgb7lj52"))))
20386 (build-system pyproject-build-system)
20387 (arguments
20388 (list
20389 ;; tests: 4491 passed, 72 skipped
20390 #:test-flags
20391 #~(list "--numprocesses" (number->string (min (parallel-job-count) 8))
20392 ;; The full test suite is huge, run some of it's portion.
20393 "--ignore=tests/integration"
20394 "--ignore=tests/functional")))
20395 (native-inputs
20396 (list python-jsonschema
20397 python-pytest
20398 python-pytest-xdist
20399 python-setuptools))
20400 (propagated-inputs
20401 (list python-dateutil
20402 python-jmespath
20403 python-urllib3))
20404 (home-page "https://github.com/boto/botocore")
20405 (synopsis "Low-level interface to AWS")
20406 (description
20407 "Botocore is a Python library that provides a low-level interface to the
20408Amazon Web Services (AWS) API.")
20409 (license license:asl2.0)))
20410
20411(define-public python-boto3
20412 (package
20413 (name "python-boto3")
20414 (version "1.40.61")
20415 (source
20416 (origin
20417 (method git-fetch)
20418 (uri (git-reference
20419 (url "https://github.com/boto/boto3")
20420 (commit version)))
20421 (file-name (git-file-name name version))
20422 (sha256
20423 (base32 "0rjcs9grnrcak6w4l5plqcbwvknmg1k3q0xzg11kpp0sfiszbdph"))))
20424 (build-system pyproject-build-system)
20425 (arguments
20426 (list
20427 ;; tests: 1415 passed, 17 skipped, 1 warning
20428 #:test-flags
20429 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count)))
20430 ;; Integration tests are trying to connect to AWS.
20431 "--ignore=tests/integration")))
20432 (native-inputs
20433 (list python-mock
20434 python-pytest
20435 python-pytest-xdist
20436 python-setuptools))
20437 (propagated-inputs
20438 (list python-botocore
20439 python-jmespath
20440 python-s3transfer))
20441 (home-page "https://github.com/boto/boto3")
20442 (synopsis "AWS SDK for Python")
20443 (description
20444 "Boto3 is a Python library for writing programs that interact with
20445@acronym{AWS,Amazon Web Services}.")
20446 (license license:asl2.0)))
20447
20448(define-public python-pyfiglet
20449 (package
20450 (name "python-pyfiglet")
20451 (version "1.0.4")
20452 (source
20453 (origin
20454 (method git-fetch)
20455 (uri (git-reference
20456 (url "https://github.com/pwaller/pyfiglet")
20457 (commit (string-append "v" version))))
20458 (file-name (git-file-name name version))
20459 (sha256
20460 (base32 "1r1fyphz99jar2xfk761cl740zxk4b0gygajgjfx6i1kf0dxdv40"))))
20461 (build-system pyproject-build-system)
20462 (arguments
20463 (list
20464 #:phases
20465 #~(modify-phases %standard-phases
20466 (add-after 'unpack 'fallback-on-default-build
20467 (lambda _
20468 ;; This pyproject has little value and fails because of the
20469 ;; :__legacy__ suffix. Removing it to rely on defaults.
20470 (delete-file "pyproject.toml"))))))
20471 (native-inputs (list python-pytest python-setuptools))
20472 (home-page "https://github.com/pwaller/pyfiglet")
20473 (synopsis "Draw ASCII art big letters in Python")
20474 (description
20475 "This module lets you draw large letter from ordinary characters in pure
20476 Python.")
20477 (license license:expat)))
20478
20479(define-public python-mako
20480 (package
20481 (name "python-mako")
20482 (version "1.3.10")
20483 (source
20484 (origin
20485 (method url-fetch)
20486 (uri (pypi-uri "mako" version))
20487 (sha256
20488 (base32 "0a7ala6k7kn094k3g02b85xfkr20yk0w6a0acgjsfgsq75prlmwr"))))
20489 (build-system pyproject-build-system)
20490 (native-inputs
20491 (list python-pytest
20492 python-setuptools
20493 python-wheel))
20494 (propagated-inputs
20495 (list python-markupsafe))
20496 (home-page "https://www.makotemplates.org/")
20497 (synopsis "Templating language for Python")
20498 (description "Mako is a templating language for Python that compiles
20499templates into Python modules.")
20500 (license license:expat)))
20501
20502(define-public python-cookiecutter
20503 (package
20504 (name "python-cookiecutter")
20505 (version "2.6.0")
20506 (source
20507 (origin
20508 (method url-fetch)
20509 (uri (pypi-uri "cookiecutter" version))
20510 (sha256
20511 (base32 "0762882zrvf3sslr9r7v8wkdwjckhm2clj4d831gvx54kqbgh8fv"))))
20512 (build-system pyproject-build-system)
20513 (arguments
20514 (list
20515 #:phases #~(modify-phases %standard-phases
20516 (add-before 'check 'pre-check
20517 (lambda _
20518 ;; test_get_user_config.py requires a writable home
20519 ;; directory.
20520 (setenv "HOME"
20521 (getcwd))
20522 ;; test_hooks.py dynamically creates shell scripts
20523 ;; with a /bin/bash shebang. We have to patch these.
20524 (substitute* "tests/test_hooks.py"
20525 (("/bin/bash")
20526 (string-append #$(this-package-native-input
20527 "bash-minimal") "/bin/bash"))))))))
20528 (native-inputs (list bash-minimal
20529 git-minimal
20530 python-freezegun
20531 python-pytest
20532 python-pytest-cov
20533 python-pytest-mock
20534 python-setuptools
20535 python-wheel))
20536 (propagated-inputs (list python-arrow
20537 python-binaryornot
20538 python-click
20539 python-jinja2
20540 python-pyyaml
20541 python-requests
20542 python-rich
20543 python-slugify))
20544 (home-page "https://github.com/cookiecutter/cookiecutter")
20545 (synopsis
20546 "Command-line utility that creates projects from project templates")
20547 (description
20548 "This package provides a command-line utility that creates projects from
20549project templates, e.g. creating a Python package project from a Python package
20550project template.")
20551 (license license:bsd-3)))
20552
20553(define-public python-pyquery
20554 (package
20555 (name "python-pyquery")
20556 (version "2.0.1")
20557 (source
20558 (origin
20559 (method url-fetch)
20560 (uri (pypi-uri "pyquery" version))
20561 (sha256
20562 (base32
20563 "1brg6aawb9m5mdfmc6g7v5r6pczbx67r4l9cn5yh6bdi0qkvp501"))))
20564 (build-system pyproject-build-system)
20565 (arguments
20566 (list
20567 #:test-flags
20568 #~(list #$@(map (lambda (test) (string-append
20569 "--deselect=tests/test_pyquery.py::"
20570 test))
20571 (list
20572 ;; AssertionError: 'REQUEST_METHOD: POST' not found in ''
20573 "TestWebScrapping::test_post"
20574 ;; AssertionError: 'HTTP_X_FOO: bar' not found in ''
20575 "TestWebScrapping::test_session"
20576 ;; Assertion is not equal.
20577 "TestManipulating::test_val_for_textarea"
20578 "TestHTMLParser::test_replaceWith"
20579 "TestHTMLParser::test_replaceWith_with_function"
20580 ;; Network access is required.
20581 "TestWebScrapping::test_get"
20582 "TestWebScrappingEncoding::test_get")))))
20583 (native-inputs
20584 (list python-pytest
20585 python-pytest-cov
20586 python-requests
20587 python-setuptools
20588 python-webob
20589 python-webtest
20590 python-wheel))
20591 (propagated-inputs
20592 (list python-cssselect python-lxml))
20593 (home-page "https://github.com/gawel/pyquery")
20594 (synopsis "Make jQuery-like queries on xml documents")
20595 (description "pyquery allows you to make jQuery queries on xml documents.
20596The API is as much as possible the similar to jQuery. pyquery uses lxml for
20597fast xml and html manipulation.")
20598 (license license:bsd-3)))
20599
20600(define-public python-amqp
20601 (package
20602 (name "python-amqp")
20603 (version "5.1.1")
20604 (source
20605 (origin
20606 (method url-fetch)
20607 (uri (pypi-uri "amqp" version))
20608 (sha256
20609 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
20610 (build-system pyproject-build-system)
20611 (arguments
20612 (list ; Integration tests require network connectivity.
20613 #:test-flags '(list "--ignore=t/integration/test_rmq.py")))
20614 (native-inputs (list python-pytest python-setuptools python-wheel))
20615 (propagated-inputs (list python-vine))
20616 (home-page "https://github.com/celery/py-amqp")
20617 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
20618 (description
20619 "This is a fork of amqplib which was originally written by Barry Pederson.
20620It is maintained by the Celery project, and used by kombu as a pure python
20621alternative when librabbitmq is not available.")
20622 (license license:lgpl2.1+)))
20623
20624(define-public python-benchmark-4dn
20625 (package
20626 (name "python-benchmark-4dn")
20627 (version "0.5.24")
20628 (source (origin
20629 (method url-fetch)
20630 (uri (pypi-uri "benchmark_4dn" version))
20631 (sha256
20632 (base32
20633 "1cjin99p8mrh4nkbr4hsdfks9c22dfw3gk5ad80b4rxngs8mwj0s"))))
20634 (properties '(("upstream-name" . "benchmark_4dn")))
20635 (build-system pyproject-build-system)
20636 ;; There are none.
20637 (arguments (list #:tests? #false))
20638 (native-inputs
20639 (list python-poetry-core))
20640 (home-page "https://github.com/SooLee/Benchmark/")
20641 (synopsis "Benchmark functions for CWL workflows")
20642 (description
20643 "This package provides benchmark functions that return total space, memory,
20644CPUs required per given input size, and parameters for CWL workflows.")
20645 (license license:expat)))
20646
20647(define-public python-beniget
20648 (package
20649 (name "python-beniget")
20650 (version "0.4.2.post1")
20651 (source
20652 (origin
20653 (method url-fetch)
20654 (uri (pypi-uri "beniget" version))
20655 (sha256
20656 (base32 "1bjjl12pqbz4amnn8wvcpd4zjrx6cpw04s586gn18zjywqvqa9d0"))))
20657 (build-system pyproject-build-system)
20658 (native-inputs
20659 (list python-pytest
20660 python-setuptools))
20661 (propagated-inputs
20662 (list python-gast))
20663 (home-page "https://github.com/serge-sans-paille/beniget")
20664 (synopsis "Extract semantic information about static Python code")
20665 (description
20666 "Beniget is a collection of analyzers for Python @acronym{AST,
20667Abstract Syntax Tree}. It is a building block for writing a static analyzer
20668or compiler for Python.")
20669 (license license:bsd-3)))
20670
20671(define-public python-kombu
20672 (package
20673 (name "python-kombu")
20674 (version "5.6.0")
20675 (source
20676 (origin
20677 (method git-fetch)
20678 (uri (git-reference
20679 (url "https://github.com/celery/kombu")
20680 (commit (string-append "v" version))))
20681 (file-name (git-file-name name version))
20682 (sha256
20683 (base32 "10h73mxfqy8g02bmibc9m2xklcm4pxc9r674c8l6j0v2igf3ycmb"))))
20684 (build-system pyproject-build-system)
20685 (arguments
20686 (list
20687 ;; tests: 854 passed, 196 skipped
20688 #:test-flags
20689 #~(list
20690 ;; TODO: Package azure-identity (required for this file)
20691 "--ignore=t/unit/transport/test_azurestoragequeues.py"
20692 ;; XXX: Requires google-cloud-pubsub.
20693 "--ignore=t/unit/transport/test_gcpubsub.py")
20694 #:phases
20695 #~(modify-phases %standard-phases
20696 (add-after 'unpack 'relax-requirements
20697 (lambda _
20698 (substitute* "requirements/default.txt"
20699 (("tzdata>=2025.2")
20700 "tzdata>=2025.1")))))))
20701 (native-inputs
20702 (list python-botocore
20703 python-pyro4
20704 python-pytest
20705 python-pytest-freezer
20706 python-pytest-sugar
20707 python-setuptools))
20708 (propagated-inputs
20709 (list python-amqp
20710 python-packaging
20711 python-tzdata
20712 python-vine))
20713 (home-page "https://kombu.readthedocs.io")
20714 (synopsis "Message passing library for Python")
20715 (description
20716 "The aim of Kombu is to make messaging in Python as easy as possible by
20717providing an idiomatic high-level interface for the AMQ protocol, and also
20718provide proven and tested solutions to common messaging problems. AMQP is the
20719Advanced Message Queuing Protocol, an open standard protocol for message
20720orientation, queuing, routing, reliability and security, for which the
20721RabbitMQ messaging server is the most popular implementation.")
20722 (license license:bsd-3)))
20723
20724(define-public python-billiard
20725 (package
20726 (name "python-billiard")
20727 (version "4.2.2")
20728 (source
20729 (origin
20730 (method git-fetch)
20731 (uri (git-reference
20732 (url "https://github.com/celery/billiard")
20733 (commit (string-append "v" version))))
20734 (file-name (git-file-name name version))
20735 (sha256
20736 (base32 "1p08w9msiajhg23ifcgnkv8jlbnh3ip3qhxahl5q0338sk4kah19"))))
20737 (build-system pyproject-build-system)
20738 (arguments
20739 (list
20740 #:phases
20741 #~(modify-phases %standard-phases
20742 (add-after 'unpack 'remove-win-files
20743 (lambda _
20744 (for-each delete-file-recursively
20745 '("billiard/popen_spawn_win32.py"
20746 "billiard/_win.py")))))))
20747 (native-inputs (list python-psutil python-pytest python-setuptools))
20748 (home-page "https://github.com/celery/billiard")
20749 (synopsis "Python multiprocessing fork with improvements and bugfixes")
20750 (description
20751 "Billiard is a fork of the Python 2.7 multiprocessing package. The
20752multiprocessing package itself is a renamed and updated version of R Oudkerk's
20753pyprocessing package. This standalone variant is intended to be compatible with
20754Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
20755 (license license:bsd-3)))
20756
20757(define-public python-celery
20758 (package
20759 (name "python-celery")
20760 (version "5.6.2")
20761 (source
20762 (origin
20763 (method url-fetch)
20764 (uri (pypi-uri "celery" version))
20765 (sha256
20766 (base32 "16q0hlsw9p2mri1c1i2l4knq2d8hf83h4a9vglqpdbgjzk1j32aa"))))
20767 (build-system pyproject-build-system)
20768 (arguments
20769 (list
20770 ;; tests: 3248 passed, 26 skipped, 8 deselected, 3 xfailed, 54 warnings,
20771 ;; 28958 subtests passed
20772 #:test-flags
20773 ;; The MongoDB backend test appears to expect an older version of
20774 ;; MongoDB which provided its own bson module, fails with "
20775 ;; AttributeError: module 'bson' has no attribute 'encode'".
20776 #~(list "--ignore=t/unit/backends/test_mongodb.py"
20777 ;; XXX: Requires google-cloud-firestore
20778 "--ignore=t/unit/backends/test_gcs.py"
20779 "-k" (string-join
20780 (list ;; AssertionError.
20781 "not test_check_privileges_no_fchown"
20782 ;; These 3 tests error out on ci.guix.gnu.org with
20783 ;; OSError: [Errno 24] Too many open files
20784 "test_register_with_event_loop__no_on_tick_dupes"
20785 "test_with_autoscaler_file_descriptor_safety"
20786 "test_with_file_descriptor_safety"
20787 ;; XXX: Fails to compare local timezones.
20788 "test_use_local_timezone")
20789 " and not "))))
20790 (native-inputs
20791 (list python-azure-core
20792 python-dnspython
20793 python-flaky
20794 python-gevent
20795 python-google-cloud-storage
20796 python-iniconfig
20797 python-moto
20798 python-msgpack
20799 python-pymongo
20800 python-pytest
20801 python-pytest-celery
20802 python-pytest-click
20803 python-pytest-order
20804 python-pytest-subtests
20805 python-pytest-timeout
20806 python-redis
20807 python-setuptools))
20808 (propagated-inputs
20809 (list python-billiard
20810 python-click
20811 python-click-didyoumean
20812 python-click-plugins-1
20813 python-click-repl
20814 python-dateutil
20815 python-kombu
20816 python-tzlocal
20817 python-vine))
20818 (home-page "https://celeryproject.org")
20819 (synopsis "Distributed Task Queue")
20820 (description
20821 "Celery is an asynchronous task queue/job queue based on distributed
20822message passing. It is focused on real-time operation, but supports
20823scheduling as well. The execution units, called tasks, are executed
20824concurrently on a single or more worker servers using multiprocessing,
20825Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
20826synchronously (wait until ready).")
20827 (license license:bsd-3)))
20828
20829;; A bare minimal package, mainly to use in tests and reduce closure
20830;; size. Tests are left out in the main package to slim down native-inputs.
20831(define-public python-celery-minimal
20832 (package/inherit python-celery
20833 (name "python-celery-minimal")
20834 (arguments
20835 (list #:tests? #f))
20836 (native-inputs
20837 (list python-setuptools))))
20838
20839(define-public python-anyqt
20840 (package
20841 (name "python-anyqt")
20842 (version "0.2.1")
20843 (source
20844 (origin
20845 (method git-fetch)
20846 (uri (git-reference
20847 (url "https://github.com/ales-erjavec/anyqt")
20848 (commit version)))
20849 (file-name (git-file-name name version))
20850 (sha256
20851 (base32 "0dci4sx53icd3jxv5gm22yr5g4dcyqbyvkkwliqpmbkxxjxj0dc8"))))
20852 (build-system pyproject-build-system)
20853 (arguments
20854 (list
20855 ;; XXX: Qt tests require Qt modules, see test/test_import.py.
20856 ;; TODO Add/configure the right Qt inputs.
20857 #:test-flags
20858 #~(list "--ignore-glob=tests/test_q*.py")
20859 #:phases
20860 #~(modify-phases %standard-phases
20861 (add-after 'unpack 'delete-files
20862 ;; Delete files related to other operating systems.
20863 (lambda _
20864 (delete-file "AnyQt/QtMacExtras.py")
20865 (delete-file "AnyQt/QtWinExtras.py"))))))
20866 (native-inputs
20867 (list python-pyqt-6
20868 python-pytest
20869 python-pytest-qt
20870 python-setuptools))
20871 (home-page "https://github.com/ales-erjavec/anyqt")
20872 (synopsis "PyQt compatibility layer")
20873 (description
20874 "This package provides a PyQt/PySide compatibility layer. More precisely,
20875it provides compatibility for the following modules: PyQt4, PyQt5, PyQt6,
20876PySide, PySide2.")
20877 (license license:gpl3)))
20878
20879(define-public python-qasync
20880 (package
20881 (name "python-qasync")
20882 (version "0.28.0")
20883 (source
20884 (origin
20885 (method git-fetch)
20886 (uri (git-reference
20887 (url "https://github.com/CabbageDevelopment/qasync/")
20888 (commit (string-append "v" version))))
20889 (file-name (git-file-name name version))
20890 (sha256
20891 (base32 "13i5riq7ig4csxlx61fzb8xl12ny0dkwj4h8f8r95xz5rii7a0kr"))))
20892 (build-system pyproject-build-system)
20893 (arguments
20894 (list
20895 #:build-backend "poetry.core.masonry.api" ;XXX: python-uv-build is required
20896 #:phases
20897 #~(modify-phases %standard-phases
20898 (add-before 'check 'set-qpa
20899 (lambda _
20900 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
20901 (native-inputs
20902 (list python-poetry-core python-pytest))
20903 (propagated-inputs
20904 (list python-pyqt-6))
20905 (home-page "https://github.com/CabbageDevelopment/qasync")
20906 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
20907 (description
20908 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
20909by providing an implementation of the PEP 3156 event-loop.")
20910 (license license:bsd-2)))
20911
20912(define-public python-editor
20913 (package
20914 (name "python-editor")
20915 (version "1.0.4")
20916 (source
20917 (origin
20918 (method git-fetch)
20919 (uri (git-reference
20920 (url "https://github.com/fmoo/python-editor")
20921 (commit version)))
20922 (file-name (git-file-name name version))
20923 (sha256
20924 (base32 "0hm5gcz5117dsq39bqfxpwazk4khqd272ran0n12x0x84mnqvfxa"))))
20925 (build-system pyproject-build-system)
20926 (arguments (list #:tests? #f)) ;XXX: needs a TTY and an editor
20927 (native-inputs (list python-setuptools))
20928 (home-page "https://github.com/fmoo/python-editor")
20929 (synopsis "Programmatically open an editor, capture the result")
20930 (description
20931 "This package provides the editor module for programmatically interfacing
20932with your system's $EDITOR.")
20933 (license license:asl2.0)))
20934
20935(define-public python-multiprocessing-logging
20936 (package
20937 (name "python-multiprocessing-logging")
20938 (version "0.3.4")
20939 (home-page "https://github.com/jruere/multiprocessing-logging")
20940 (source
20941 (origin
20942 (method git-fetch)
20943 (uri (git-reference
20944 (url home-page)
20945 (commit (string-append "v" version))))
20946 (file-name (git-file-name name version))
20947 (sha256
20948 (base32 "0ib1plsyi4g68n0crc2cqhk54fccsmcijzh66g89fd3lgababgxd"))))
20949 (build-system pyproject-build-system)
20950 (arguments (list #:test-backend #~'unittest))
20951 (native-inputs (list python-setuptools))
20952 (synopsis "Manage logs from multiple processes")
20953 (description
20954 "This Python module implements a multiprocessing-aware @code{Handler}
20955that, when set on the root @code{Logger}, will tunnel log records to the
20956main process so that they are handled correctly.")
20957 (license license:lgpl3+)))
20958
20959(define-public python-munkres
20960 (package
20961 (name "python-munkres")
20962 (version "1.1.4")
20963 (source
20964 (origin
20965 (method url-fetch)
20966 (uri (pypi-uri "munkres" version))
20967 (sha256
20968 (base32 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
20969 (build-system pyproject-build-system)
20970 (arguments
20971 (list
20972 ;; See https://github.com/bmc/munkres/issues/40
20973 #:test-flags
20974 (if (member (%current-system) %32bit-supported-systems)
20975 #~(list "-k" "not test_profit_float")
20976 #~(list))))
20977 (native-inputs (list python-pytest python-setuptools))
20978 (home-page "https://software.clapper.org/munkres/")
20979 (synopsis "Implementation of the Munkres algorithm")
20980 (description
20981 "The Munkres module provides an implementation of the Munkres algorithm
20982(also called the Hungarian algorithm or the Kuhn-Munkres algorithm), useful
20983for solving the Assignment Problem.")
20984 (license license:bsd-3)))
20985
20986(define-public python-codespell
20987 (package
20988 (name "python-codespell")
20989 (version "2.3.0")
20990 (source
20991 (origin
20992 (method url-fetch)
20993 (uri (pypi-uri "codespell" version))
20994 (sha256
20995 (base32 "07s72zfxkznigqdc23k7jp9saq0hgq0gf2kjmmxzcrayyw87s31n"))))
20996 (build-system pyproject-build-system)
20997 (arguments
20998 (list
20999 #:phases
21000 #~(modify-phases %standard-phases
21001 (add-after 'unpack 'fix-pytest-config
21002 (lambda _
21003 ;; Drop test coverage requirements.
21004 (substitute* "pyproject.toml"
21005 (("\"--cov=codespell_lib\",") "")
21006 (("\"--cov-report=\",") "")))))))
21007 (native-inputs
21008 (list python-pygments
21009 python-pytest
21010 python-pytest-dependency
21011 python-setuptools
21012 python-setuptools-scm
21013 python-wheel))
21014 (propagated-inputs
21015 (list python-chardet))
21016 (home-page "https://github.com/codespell-project/codespell/")
21017 (synopsis "Spellchecker for code")
21018 (description
21019 "Codespell fixes common misspellings in text files. It's designed
21020primarily for checking misspelled words in source code, but it can be used
21021with other files as well. It does not check for word membership in a complete
21022dictionary, but instead looks for a set of common misspellings. Therefore it
21023should catch errors like \"adn\", but it will not catch \"adnasdfasdf\". This
21024also means it shouldn't generate false-positives when you use a niche term it
21025doesn't know about.")
21026 (license
21027 (list
21028 ; for codespell and codespell_lib
21029 license:gpl2
21030 ; for dictionary*.txt
21031 license:cc-by-sa3.0))))
21032
21033(define-public python-jellyfish
21034 (package
21035 (name "python-jellyfish")
21036 (version "1.2.1")
21037 (source
21038 (origin
21039 (method git-fetch)
21040 (uri (git-reference
21041 (url "https://github.com/jamesturk/jellyfish")
21042 (commit (string-append "v" version))))
21043 (file-name (git-file-name name version))
21044 (sha256
21045 (base32 "1zsbvyq608yrfv29hlwjkr6ycrghy8s5hpwnj3aa9symihazpb4c"))))
21046 (build-system pyproject-build-system)
21047 (arguments
21048 (list
21049 #:imported-modules (append %cargo-build-system-modules
21050 %pyproject-build-system-modules)
21051 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
21052 (guix build pyproject-build-system)
21053 (guix build utils))
21054 #:phases
21055 #~(modify-phases %standard-phases
21056 (add-after 'unpack 'prepare-cargo-build-system
21057 (lambda args
21058 (for-each
21059 (lambda (phase)
21060 (format #t "Running cargo phase: ~a~%" phase)
21061 (apply (assoc-ref cargo:%standard-phases phase)
21062 #:cargo-target #$(cargo-triplet)
21063 args))
21064 '(unpack-rust-crates
21065 configure
21066 check-for-pregenerated-files
21067 patch-cargo-checksums)))))))
21068 (inputs (cons* maturin (cargo-inputs 'jellyfish)))
21069 (native-inputs
21070 (append
21071 (list python-pytest
21072 python-setuptools
21073 rust
21074 `(,rust "cargo"))
21075 (or (and=> (%current-target-system)
21076 (compose list make-rust-sysroot))
21077 '())))
21078 (home-page "https://www.jpt.sh/projects/jellyfish/")
21079 (synopsis "Approximate and phonetic matching of strings")
21080 (description "Jellyfish uses a variety of string comparison and phonetic
21081encoding algorithms to do fuzzy string matching.")
21082 (license license:bsd-2)))
21083
21084(define-public python-pdfminer-six
21085 (package
21086 (name "python-pdfminer-six")
21087 (version "20240706")
21088 ;; There are no tests in the PyPI tarball.
21089 (source
21090 (origin
21091 (method git-fetch)
21092 (uri (git-reference
21093 (url "https://github.com/pdfminer/pdfminer.six")
21094 (commit version)))
21095 (file-name (git-file-name name version))
21096 (sha256
21097 (base32 "0vdwps38q2414lwjz266rabxrcw2a5s1pgxyjsffiifi010cd3k9"))))
21098 (build-system pyproject-build-system)
21099 (arguments
21100 (list #:phases
21101 #~(modify-phases %standard-phases
21102 ;; Tests write to the source tree.
21103 (add-after 'unpack 'make-git-checkout-writable
21104 (lambda _
21105 (for-each make-file-writable (find-files ".")))))))
21106 (propagated-inputs
21107 (list python-charset-normalizer python-cryptography))
21108 (native-inputs
21109 (list python-pytest python-setuptools python-wheel))
21110 (home-page "https://github.com/pdfminer/pdfminer.six")
21111 (synopsis "PDF parser and analyzer")
21112 (description "@code{pdfminer.six} is a community maintained fork of
21113the original PDFMiner. It is a tool for extracting information from PDF
21114documents. It focuses on getting and analyzing text data. Pdfminer.six
21115extracts the text from a page directly from the sourcecode of the PDF. It
21116can also be used to get the exact location, font or color of the text.")
21117 (license license:expat)))
21118
21119(define-public python-rarfile
21120 (package
21121 (name "python-rarfile")
21122 (version "4.2")
21123 (source
21124 (origin
21125 (method git-fetch)
21126 (uri (git-reference
21127 (url "https://github.com/markokr/rarfile")
21128 (commit (string-append "v" version))))
21129 (file-name (git-file-name name version))
21130 (sha256
21131 (base32 "1lm4vz4w0hrnzln7w10ijhdiwxy7gz45m44zw4fz7rdnn7c06b36"))))
21132 (build-system pyproject-build-system)
21133 (arguments
21134 (list
21135 #:tests? #f ;The bsdtar utility is very limited and most tests fail.
21136 #:phases
21137 #~(modify-phases %standard-phases
21138 (add-after 'unpack 'patch
21139 (lambda* (#:key inputs #:allow-other-keys)
21140 (substitute* "rarfile.py"
21141 ;; Disable unrar and unar, which are unavailable on Guix.
21142 (("(unrar|unar)=True" all tool)
21143 (string-append tool "=False"))
21144 ;; Hardcode path to bsdtar
21145 (("\"bsdtar\"")
21146 (format #f "~s"
21147 (search-input-file inputs "bin/bsdtar")))))))))
21148 (native-inputs (list python-pytest python-setuptools))
21149 (inputs (list libarchive))
21150 (home-page "https://github.com/markokr/rarfile")
21151 (synopsis "RAR archive reader for Python")
21152 (description
21153 "This is Python module for RAR archive reading. The interface is made as
21154zipfile like as possible.")
21155 (license license:isc)))
21156
21157(define-public python-slugid
21158 (package
21159 (name "python-slugid")
21160 (version "2.0.0")
21161 (source
21162 (origin
21163 (method git-fetch)
21164 (uri (git-reference
21165 (url "https://github.com/taskcluster/slugid.py")
21166 (commit (string-append "v" version))))
21167 (file-name (git-file-name name version))
21168 (sha256
21169 (base32 "1h64p2jlqv6lsmw8h2j203kx3bhv72cwzpk5gdhsaamw30cp3h1i"))))
21170 (build-system pyproject-build-system)
21171 (arguments (list #:test-backend #~'nose))
21172 (native-inputs (list python-pynose python-setuptools))
21173 (home-page "http://taskcluster.github.io/slugid.py")
21174 (synopsis "Module for Base64 encoded UUID v4 slugs")
21175 (description
21176 "This package provides a module for generating v4 UUIDs and encoding them
21177into 22 character URL-safe base64 slug representation.")
21178 (license license:mpl2.0)))
21179
21180(define-public python-rich
21181 (package
21182 (name "python-rich")
21183 (version "13.7.1")
21184 (source
21185 (origin
21186 ;; There are no tests in the PyPI tarball.
21187 (method git-fetch)
21188 (uri (git-reference
21189 (url "https://github.com/willmcgugan/rich")
21190 (commit (string-append "v" version))))
21191 (file-name (git-file-name name version))
21192 (sha256
21193 (base32
21194 "0jvkcp473c0icbb8md3grc3285j2cy0z0swxgk2g67d9n0zfdfzc"))))
21195 (build-system pyproject-build-system)
21196 (arguments
21197 (list
21198 #:test-flags
21199 ;; These fail for unknown reasons, but the results look identical.
21200 ;; Perhaps only the terminal escape sequences are superficially
21201 ;; different?
21202 '(list "-k" (string-append "not test_card_render"
21203 " and not test_markdown_render"
21204 " and not test_python_render"
21205 " and not test_python_render_simple"
21206 " and not test_python_render_simple_passing_lexer_instance"
21207 " and not test_python_render_indent_guides"
21208 " and not test_option_no_wrap"
21209 " and not test_syntax_highlight_ranges"
21210 " and not test_inline_code"
21211 " and not test_blank_lines"))))
21212 (propagated-inputs
21213 (list python-markdown-it-py python-pygments))
21214 (native-inputs
21215 (list python-poetry-core python-pytest))
21216 (home-page "https://github.com/willmcgugan/rich")
21217 (synopsis "Render rich text and more to the terminal")
21218 (description
21219 "This is a Python package for rendering rich text, tables, progress bars,
21220syntax highlighting, markdown and more to the terminal.")
21221 (license license:expat)))
21222
21223(define-public python-rich-next
21224 (package
21225 (inherit python-rich)
21226 (name "python-rich")
21227 (version "14.2.0")
21228 (source
21229 (origin
21230 (method git-fetch)
21231 (uri (git-reference
21232 (url "https://github.com/willmcgugan/rich")
21233 (commit (string-append "v" version))))
21234 (file-name (git-file-name name version))
21235 (sha256
21236 (base32 "0zwjry4ylqncqvxrywp0km96jng4f288dgz8kz5vymk7nr2z21m1"))))
21237 (native-inputs (modify-inputs (package-native-inputs python-rich)
21238 (append which)))))
21239
21240(define-public python-rich-click
21241 (package
21242 (name "python-rich-click")
21243 (version "1.8.9")
21244 (source
21245 (origin
21246 (method git-fetch)
21247 (uri (git-reference
21248 (url "https://github.com/ewels/rich-click")
21249 (commit (string-append "v" version))))
21250 (file-name (git-file-name name version))
21251 (sha256
21252 (base32 "0kc2wcb5dpgxhdcz8fy6gfhl7vra03xwgwfg7h0qxxibr8yzhmmq"))))
21253 (build-system pyproject-build-system)
21254 (native-inputs
21255 (list python-pytest
21256 python-setuptools))
21257 (propagated-inputs
21258 (list python-click
21259 python-rich
21260 python-typing-extensions))
21261 (home-page "https://github.com/ewels/rich-click")
21262 (synopsis "Format click help output nicely with rich")
21263 (description "Click is a \"Python package for creating beautiful command
21264line interfaces\". Rich is a \"Python library for rich text and beautiful
21265formatting in the terminal\". The intention of rich-click is to provide
21266attractive help output from click, formatted with rich, with minimal
21267customization required.")
21268 (license license:expat)))
21269
21270(define-public python-magic
21271 (package
21272 (name "python-magic")
21273 (version "0.4.27")
21274 (home-page "https://github.com/ahupp/python-magic")
21275 (source
21276 (origin
21277 (method git-fetch)
21278 (uri (git-reference (url home-page) (commit version)))
21279 (file-name (git-file-name name version))
21280 (sha256
21281 (base32 "1x11kfn4g244fia9a7y4ly8dqv5zsxfg3l5azc54dl6gkp2bk7vx"))))
21282 (build-system pyproject-build-system)
21283 (arguments
21284 (list
21285 #:test-backend #~'custom
21286 #:test-flags #~(list "test/libmagic_test.py")
21287 #:phases
21288 #~(modify-phases %standard-phases
21289 (add-after 'unpack 'fix-tests
21290 (lambda _
21291 ;; Adjust expected output for [email protected].
21292 (substitute* "test/libmagic_test.py"
21293 (("PDF document, version 1\\.2, 2 pages")
21294 "PDF document, version 1.2, 2 page(s)"))))
21295 ;; Replace a specific method call with a hard-coded path to the
21296 ;; necessary libmagic.so file in the store.
21297 (add-before 'build 'hard-code-path-to-libmagic
21298 (lambda* (#:key inputs #:allow-other-keys)
21299 (substitute* "magic/loader.py"
21300 (("find_library\\('magic'\\)")
21301 (format #f "~s"
21302 (search-input-file inputs "lib/libmagic.so")))))))))
21303 (native-inputs (list which python-setuptools))
21304 (inputs
21305 ;; python-magic needs to be able to find libmagic.so.
21306 (list file))
21307 (synopsis "File type identification using libmagic")
21308 (description
21309 "This module uses ctypes to access the libmagic file type identification
21310library. It makes use of the local magic database and supports both textual
21311and MIME-type output. Note that this module and the python-file module both
21312provide a \"magic.py\" file; these two modules, which are different and were
21313developed separately, both serve the same purpose: to provide Python bindings
21314for libmagic.")
21315 (license license:expat)))
21316
21317(define-public python-securetar
21318 (package
21319 (name "python-securetar")
21320 (version "2025.1.4")
21321 (source
21322 (origin
21323 (method git-fetch)
21324 (uri (git-reference
21325 (url "https://github.com/pvizeli/securetar")
21326 (commit version)))
21327 (file-name (git-file-name name version))
21328 (sha256
21329 (base32 "1b9m29j4mjiv7925wrbiyj6vyx7m9qmdz40zqd4vgxhz4pq6x3xw"))))
21330 (build-system pyproject-build-system)
21331 (native-inputs (list python-setuptools python-wheel python-pytest))
21332 (propagated-inputs (list python-cryptography))
21333 (home-page "https://github.com/pvizeli/securetar")
21334 (synopsis "Python module to handle tarfile backups")
21335 (description
21336 "This library provides a streaming wrapper around python tarfile and allow
21337secure handling files and support encryption.")
21338 (license license:asl2.0)))
21339
21340(define-public python-pkgconfig
21341 (package
21342 (name "python-pkgconfig")
21343 (version "1.5.5")
21344 (source
21345 (origin
21346 (method url-fetch)
21347 (uri (pypi-uri "pkgconfig" version))
21348 (sha256
21349 (base32
21350 "16dqm2g7b2c6s09vf6wv62s629s63xf51n92v0hbax8zy4z1dd6y"))))
21351 (build-system pyproject-build-system)
21352 (arguments
21353 (list
21354 #:tests? #false ;there are none
21355 #:phases
21356 '(modify-phases %standard-phases
21357 (add-before 'build 'patch
21358 ;; Hard-code the path to pkg-config.
21359 (lambda _
21360 (substitute* "pkgconfig/pkgconfig.py"
21361 (("'pkg-config'")
21362 (string-append "'" (which "pkg-config") "'"))))))))
21363 (native-inputs (list python-poetry-core))
21364 (inputs (list pkg-config))
21365 (home-page "https://github.com/matze/pkgconfig")
21366 (synopsis "Python interface for pkg-config")
21367 (description "This module provides a Python interface to pkg-config. It
21368can be used to find all pkg-config packages, check if a package exists,
21369check if a package meets certain version requirements, query CFLAGS and
21370LDFLAGS and parse the output to build extensions with setup.py.")
21371 (license license:expat)))
21372
21373;; This package is unmaintained since 2014, but still used in `khmer'.
21374(define-public python-bz2file
21375 (package
21376 (name "python-bz2file")
21377 (version "0.98")
21378 (source
21379 (origin
21380 (method url-fetch)
21381 (uri (pypi-uri "bz2file" version))
21382 (sha256
21383 (base32 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
21384 (build-system pyproject-build-system)
21385 (arguments (list #:tests? #f)) ; Tests use deprecated python modules.
21386 (native-inputs (list python-setuptools))
21387 (home-page "https://github.com/nvawda/bz2file")
21388 (synopsis "Read and write bzip2-compressed files")
21389 (description
21390 "Bz2file is a Python library for reading and writing bzip2-compressed
21391files. It contains a drop-in replacement for the I/O interface in the
21392standard library's @code{bz2} module, including features from the latest
21393development version of CPython that are not available in older releases.")
21394 (license license:asl2.0)))
21395
21396(define-public python-future
21397 (package
21398 (name "python-future")
21399 (version "1.0.0")
21400 (source
21401 (origin
21402 (method url-fetch)
21403 (uri (pypi-uri "future" version))
21404 (sha256
21405 (base32 "01bvq2a5vgxffq8555rvwhxw161m9y54z2j5w7d1x1h7jcq6hadx"))))
21406 (build-system pyproject-build-system)
21407 (arguments
21408 (list
21409 #:test-flags
21410 ;; Self tests failed.
21411 #~(list "--ignore=tests/test_future/test_futurize.py"
21412 "-k" (string-join
21413 ;; Self tests failed.
21414 (list "not test_division"
21415 "test_functions_unchanged"
21416 "test_mixed_annotations"
21417 "test_multiple_param_annotations"
21418 "test_print"
21419 "test_range_slice"
21420 ;; Network access is required.
21421 "test_ftp"
21422 "test_main"
21423 "test_moves_urllib_request_http"
21424 "test_urllib_request_http")
21425 " and not "))))
21426 (native-inputs
21427 (list python-pytest
21428 python-setuptools))
21429 (home-page "https://python-future.org")
21430 (synopsis "Single-source support for Python 3 and 2")
21431 (description
21432 "@code{python-future} is the missing compatibility layer between Python 2
21433and Python 3. It allows you to use a single, clean Python 3.x-compatible
21434codebase to support both Python 2 and Python 3 with minimal overhead.")
21435 (license license:expat)))
21436
21437(define-public python-cysignals
21438 (package
21439 (name "python-cysignals")
21440 (version "1.12.3")
21441 (source
21442 (origin
21443 (method url-fetch)
21444 (uri (pypi-uri "cysignals" version))
21445 (sha256
21446 (base32 "1syixz6xlmy1pjcr03ij7hcvaklgjy4mmwggssrmmnr9pxnn5xw9"))))
21447 (build-system pyproject-build-system)
21448 (native-inputs (list meson-python
21449 pkg-config
21450 python-cython
21451 python-pytest
21452 python-sphinx))
21453 (home-page "https://github.com/sagemath/cysignals")
21454 (synopsis "Handling of interrupts and signals for Cython")
21455 (description
21456 "The cysignals package provides mechanisms to handle interrupts (and
21457other signals and errors) in Cython code, using two related approaches,
21458for mixed Cython/Python code or external C libraries and pure Cython code,
21459respectively.")
21460 (license license:lgpl3+)))
21461
21462(define-public python-rope
21463 (package
21464 (name "python-rope")
21465 (version "1.13.0")
21466 (source
21467 (origin
21468 (method url-fetch)
21469 (uri (pypi-uri "rope" version))
21470 (sha256
21471 (base32
21472 "1078mkzivz45my8x2y5gxisr0vba630xj7yxx7anr068xhnpshsi"))))
21473 (build-system pyproject-build-system)
21474 (arguments
21475 (list
21476 #:test-flags
21477 #~(list "-k" "test_version_hash_varies_on_get_file_content")))
21478 (propagated-inputs (list python-pytoolconfig))
21479 (native-inputs
21480 (list python-pytest python-pytest-timeout python-setuptools))
21481 (home-page "https://github.com/python-rope/rope")
21482 (synopsis "Refactoring library for Python")
21483 (description
21484 "Rope is a refactoring library for Python. It facilitates the renaming,
21485moving and extracting of attributes, functions, modules, fields and parameters
21486in Python source code. These refactorings can also be applied to occurrences
21487in strings and comments.")
21488 (license license:lgpl3+)))
21489
21490(define-public python-py3status
21491 (package
21492 (name "python-py3status")
21493 (version "3.62")
21494 (source
21495 (origin
21496 (method git-fetch)
21497 (uri (git-reference
21498 (url "https://github.com/ultrabug/py3status")
21499 (commit version)))
21500 (file-name (git-file-name name version))
21501 (sha256
21502 (base32 "13ggwr35w5isylrg1n7akhycm18r03bxin95hdpcmqg7fvqyfppz"))))
21503 (build-system pyproject-build-system)
21504 (arguments
21505 (list
21506 #:phases
21507 #~(modify-phases %standard-phases
21508 (add-before 'build 'hardcode-file-path
21509 (lambda* (#:key inputs #:allow-other-keys)
21510 (substitute* "py3status/parse_config.py"
21511 (("\\[\"file\", \"-b\"")
21512 (format #f "[~s, \"-b\""
21513 (search-input-file inputs "bin/file")))))))))
21514 (native-inputs (list python-hatchling python-pytest))
21515 (inputs (list file))
21516 (home-page "https://github.com/ultrabug/py3status")
21517 (synopsis "Extensible i3status wrapper written in Python")
21518 (description
21519 "py3status is an i3status wrapper which extends i3status functionality in
21520a modular way, allowing you to extend your panel with your own code,
21521responding to click events and updating clock every second.")
21522 (license license:bsd-3)))
21523
21524(define-public python-greenlet
21525 (package
21526 (name "python-greenlet")
21527 (version "3.1.1")
21528 (source
21529 (origin
21530 (method url-fetch)
21531 (uri (pypi-uri "greenlet" version))
21532 (sha256
21533 (base32 "0rsla5f2vgc6g450fziprjy98vf2fwbz6zjx8x37kpvavdnarqsc"))))
21534 (build-system pyproject-build-system)
21535 (arguments
21536 (list
21537 ;; AssertionError: 'Exception' not found in ''
21538 #:test-flags
21539 #~(list (string-join
21540 (list "--deselect=src/greenlet/tests/test_greenlet.py"
21541 "TestGreenlet"
21542 "test_dealloc_catches_GreenletExit_throws_other")
21543 "::"))
21544 #:phases
21545 #~(modify-phases %standard-phases
21546 (add-before 'check 'build-extensions
21547 (lambda _
21548 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
21549 (native-inputs
21550 (list python-objgraph
21551 python-pytest
21552 python-psutil
21553 python-setuptools
21554 python-wheel))
21555 (home-page "https://greenlet.readthedocs.io/")
21556 (synopsis "Lightweight in-process concurrent programming")
21557 (description
21558 "Greenlet package is a spin-off of Stackless, a version of CPython
21559that supports micro-threads called \"tasklets\". Tasklets run
21560pseudo-concurrently (typically in a single or a few OS-level threads) and
21561are synchronized with data exchanges on \"channels\".")
21562 (license (list license:psfl license:expat))))
21563
21564(define-public python-greenlet-2
21565 (hidden-package
21566 (package
21567 (inherit python-greenlet)
21568 (version "2.0.2")
21569 (source
21570 (origin
21571 (method url-fetch)
21572 (uri (pypi-uri "greenlet" version))
21573 (sha256
21574 (base32 "1h1l1mll5s4y1b09asf2jps0m7wyshnis1aassz9gc3xmw9xrj77")))))))
21575
21576(define-public python-objgraph
21577 (package
21578 (name "python-objgraph")
21579 (version "3.6.2")
21580 (source
21581 (origin
21582 (method url-fetch)
21583 (uri (pypi-uri "objgraph" version))
21584 (sha256
21585 (base32 "1n0swlq11w36r2p6x7b4y0zz10dgzpdc8qasyk3y68kl1zsg5f80"))))
21586 (build-system pyproject-build-system)
21587 (arguments
21588 (list
21589 #:test-flags
21590 #~(list "tests.py"
21591 ;; AssertionError: [0, 1, 2] not found in [[], [], [], [], [],
21592 ;; [], [], [], [], [], [], [], ...
21593 "-k" "not test_at_addrs")))
21594 (native-inputs
21595 (list graphviz
21596 python-pytest
21597 python-setuptools
21598 python-wheel))
21599 (propagated-inputs
21600 (list python-graphviz))
21601 (home-page "https://mg.pov.lt/objgraph/")
21602 (synopsis "Draw Python object reference graphs with graphviz")
21603 (description
21604 "This package provides tools to draw Python object reference graphs with
21605graphviz.")
21606 (license license:expat)))
21607
21608(define-public python-gevent
21609 (package
21610 (name "python-gevent")
21611 (version "24.11.1")
21612 (source (origin
21613 (method url-fetch)
21614 (uri (pypi-uri "gevent" version))
21615 (sha256
21616 (base32
21617 "1jhs1k49nfhv59c0li6bcpvkr6pzmxkdgfm56gns7r792j8l3lcb"))
21618 (modules '((guix build utils)))
21619 (snippet
21620 '(begin
21621 ;; unbunding libev and c-ares
21622 (delete-file-recursively "deps")
21623 ;; Remove cythonized files.
21624 (with-directory-excursion "src/gevent"
21625 (for-each delete-file
21626 (append (list "resolver/cares.c"
21627 "queue.c"
21628 "local.c"
21629 "libev/corecext.h"
21630 "libev/corecext.c"
21631 "greenlet.c"
21632 "event.c"
21633 "_waiter.c"
21634 "_tracer.c"
21635 "_semaphore.c"
21636 "_imap.c"
21637 "_ident.c"
21638 "_hub_primitives.c"
21639 "_hub_local.c"
21640 "_greenlet_primitives.c"
21641 "_abstract_linkable.c")
21642 (find-files "." "\\.html$"))))))))
21643 (build-system pyproject-build-system)
21644 (arguments
21645 (list
21646 #:test-flags
21647 '(list
21648 ;; These tests relies on networking which is
21649 ;; not available in the build container.
21650 "test__getaddrinfo_import.py"
21651 ;; These tests rely on KeyboardInterrupts which do not
21652 ;; work inside the build container for some reason
21653 ;; (lack of controlling terminal?).
21654 "test__issues461_471.py"
21655 ;; TODO: Patch out the tests that use getprotobyname, etc
21656 ;; instead of disabling all the tests from these files.
21657 "test__resolver_dnspython.py"
21658 ;; This test contains 'test_unlink', which
21659 ;; fails on i686 (see: https://github.com/gevent/gevent/issues/1558).
21660 "test__core_stat.py")
21661 #:phases
21662 #~(modify-phases %standard-phases
21663 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
21664 (lambda _
21665 (substitute* "src/gevent/subprocess.py"
21666 (("/bin/sh") (which "sh")))
21667 (for-each (lambda (file)
21668 (substitute* file
21669 (("/bin/sh") (which "sh"))
21670 (("/bin/true") (which "true"))))
21671 (find-files "src/greentest" "\\.py$"))))
21672 (add-before 'build 'do-not-use-bundled-sources
21673 (lambda _
21674 (setenv "GEVENTSETUP_EMBED" "0")
21675
21676 ;; Prevent building bundled libev.
21677 (substitute* "setup.py"
21678 (("run_make=_BUILDING")
21679 "run_make=False"))))
21680 (add-before 'build 'augment-C_INCLUDE_PATH
21681 (lambda* (#:key inputs #:allow-other-keys)
21682 (let* ((python (dirname (dirname
21683 (search-input-file
21684 inputs "bin/python"))))
21685 (version (python-version python))
21686 (greenlet (string-append
21687 #$(this-package-input "python-greenlet")
21688 "/include/python" version)))
21689 (setenv "C_INCLUDE_PATH"
21690 (string-append greenlet "/:"
21691 (or (getenv "C_INCLUDE_PATH")
21692 ""))))))
21693 (add-before 'check 'pretend-to-be-CI
21694 (lambda _
21695 ;; A few tests are skipped due to network constraints or
21696 ;; get longer timeouts when running in a CI environment.
21697 ;; Piggy-back on that, as we need the same adjustments.
21698 (setenv "TRAVIS" "1")
21699 (setenv "APPVEYOR" "1")))
21700 (add-before 'check 'adjust-tests
21701 (lambda* (#:key test-flags #:allow-other-keys)
21702 (call-with-output-file "skipped_tests.txt"
21703 (lambda (port)
21704 (format port "~a~%" (string-join test-flags "\n"))))))
21705 (replace 'check
21706 (lambda* (#:key tests? #:allow-other-keys)
21707 (when tests?
21708 ;; Use the build daemons configured number of workers.
21709 (setenv "NWORKERS" (number->string (parallel-job-count)))
21710 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
21711 "known_failures.py" "--ignore" "skipped_tests.txt")))))))
21712 (propagated-inputs
21713 (list python-greenlet python-zope-event python-zope-interface))
21714 (native-inputs
21715 (list python-cffi
21716 python-cython
21717 python-dnspython
21718 python-idna
21719 python-objgraph
21720 python-psutil
21721 python-requests
21722 python-setuptools))
21723 (inputs
21724 (list c-ares libev libuv))
21725 (home-page "https://www.gevent.org/")
21726 (synopsis "Coroutine-based network library")
21727 (description
21728 "@code{gevent} is a coroutine-based Python networking library that uses
21729@code{greenlet} to provide a high-level synchronous API on top of the
21730@code{libev} event loop.")
21731 (license license:expat)))
21732
21733(define-public python-fastimport
21734 (package
21735 (name "python-fastimport")
21736 (version "0.9.16")
21737 (source
21738 (origin
21739 (method git-fetch)
21740 (uri (git-reference
21741 (url "https://github.com/jelmer/python-fastimport")
21742 (commit (string-append "v" version))))
21743 (file-name (git-file-name name version))
21744 (sha256
21745 (base32 "1pbnp9ffjs09ngva9qcizpscxl9s47rmd4dhxl62f5iwl6c46798"))))
21746 (build-system pyproject-build-system)
21747 (arguments (list #:test-backend #~'unittest))
21748 (native-inputs (list python-setuptools))
21749 (home-page "https://github.com/jelmer/python-fastimport")
21750 (synopsis "VCS fastimport parser and generator in Python")
21751 (description
21752 "This package provides a parser for and generator of the Git
21753@url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
21754format.")
21755 (license license:gpl2+)))
21756
21757(define-public python-pika
21758 (package
21759 (name "python-pika")
21760 (version "1.3.2")
21761 (source
21762 (origin
21763 (method git-fetch)
21764 (uri (git-reference
21765 (url "https://github.com/pika/pika")
21766 (commit version)))
21767 (file-name (git-file-name name version))
21768 (sha256
21769 (base32 "0bmp79lds26y2976xrpf53r3acqzpf3wpkprhlh3asqpfv5pwipb"))))
21770 (build-system pyproject-build-system)
21771 (arguments
21772 (list
21773 #:test-flags
21774 ;; XXX: These test most likely require a running RabbitMQ server.
21775 #~(list "--ignore=tests/acceptance/blocking_adapter_test.py")
21776 #:phases
21777 #~(modify-phases %standard-phases
21778 (add-before 'check 'configure-tests
21779 (lambda* (#:key tests? #:allow-other-keys)
21780 (when tests?
21781 (setenv "PYTHONPATH" (getcwd))))))))
21782 (native-inputs (list python-pytest
21783 python-gevent
21784 python-tornado
21785 python-twisted
21786 python-setuptools))
21787 (home-page "https://pika.readthedocs.org")
21788 (synopsis "Pure Python AMQP Client Library")
21789 (description
21790 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
21791Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
21792network support library.")
21793 (license license:bsd-3)))
21794
21795;; WARNING: This package is a dependency of mesa.
21796(define-public python-ply
21797 (package
21798 (name "python-ply")
21799 (version "3.11")
21800 (source
21801 (origin
21802 (method url-fetch)
21803 (uri (pypi-uri "ply" version))
21804 (sha256
21805 (base32 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
21806 (build-system pyproject-build-system)
21807 (arguments (list #:tests? #f)) ;XXX: not tests in PyPI archvie, there are in Git
21808 (native-inputs
21809 (list python-setuptools
21810 python-wheel))
21811 (home-page "http://www.dabeaz.com/ply/")
21812 (synopsis "Python Lex & Yacc")
21813 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
21814It uses LR parsing and does extensive error checking.")
21815 (license license:bsd-3)))
21816
21817(define-public python-kazoo
21818 (package
21819 (name "python-kazoo")
21820 (version "2.10.0")
21821 (source
21822 (origin
21823 (method git-fetch)
21824 (uri (git-reference
21825 (url "https://github.com/python-zk/kazoo")
21826 (commit version)))
21827 (file-name (git-file-name name version))
21828 (sha256
21829 (base32 "1ic1ky4v64jw59in02hqmyxskd98v32msd46pmsp39l7iighjrn2"))))
21830 (build-system pyproject-build-system)
21831 (arguments (list #:tests? #f)) ; XXX: needs zookeeper
21832 (native-inputs (list python-setuptools))
21833 (home-page "https://kazoo.readthedocs.org")
21834 (synopsis "High-level Zookeeper client library")
21835 (description
21836 "Kazoo is a Python client library for the Apache Zookeeper distributed
21837application service. It is designed to be easy to use and to avoid common
21838programming errors.")
21839 (license license:asl2.0)))
21840
21841(define-public python-columnize
21842 (package
21843 (name "python-columnize")
21844 (version "0.3.11")
21845 (source
21846 (origin
21847 (method url-fetch)
21848 (uri (pypi-uri "columnize" version))
21849 (sha256
21850 (base32 "1clb3lfw694crq8m767q0yjaazkplcrbzdr9fr2w39hhndivhcd6"))))
21851 (build-system pyproject-build-system)
21852 (native-inputs (list python-pytest python-setuptools))
21853 (home-page "https://github.com/rocky/pycolumnize")
21854 (synopsis "Format a simple (i.e. not nested) list into aligned columns.")
21855 (description
21856 "This package provides a way to format a simple (i.e. not nested) list
21857into aligned columns.")
21858 (license license:expat)))
21859
21860(define-public python-chai
21861 (package
21862 (name "python-chai")
21863 (version "1.1.2")
21864 (source
21865 (origin
21866 (method url-fetch)
21867 (uri (pypi-uri "chai" version))
21868 (sha256
21869 (base32 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))
21870 (patches (search-patches "python-chai-drop-python2.patch"))))
21871 (build-system pyproject-build-system)
21872 (native-inputs (list python-pytest python-setuptools))
21873 (home-page "https://github.com/agoragames/chai")
21874 (synopsis "Mocking framework for Python")
21875 (description
21876 "Chai provides an api for mocking, stubbing and spying your python
21877objects, patterned after the Mocha library for Ruby.")
21878 (license license:bsd-3)))
21879
21880(define-public python-pysol-cards
21881 (package
21882 (name "python-pysol-cards")
21883 (version "0.24.0")
21884 (source
21885 (origin
21886 (method url-fetch)
21887 (uri (pypi-uri "pysol_cards" version))
21888 (sha256
21889 (base32 "0jsd7mqp0ak8zidg540b9hjncgx8diy9lv85zj6mi88sm0nlk1d9"))))
21890 (build-system pyproject-build-system)
21891 (arguments
21892 (list
21893 #:phases
21894 #~(modify-phases %standard-phases
21895 (replace 'check
21896 (lambda* (#:key test-flags tests? #:allow-other-keys)
21897 (when tests?
21898 (apply invoke
21899 "python"
21900 "-m"
21901 "unittest"
21902 "discover"
21903 "tests"
21904 test-flags)))))))
21905 (native-inputs (list python-setuptools python-wheel))
21906 (home-page "https://github.com/shlomif/pysol_cards")
21907 (synopsis "Deal PySol FC Cards")
21908 (description
21909 "The pysol-cards python modules provide code to generate the initial deals of
21910some PySol games.")
21911 (license license:expat)))
21912
21913(define-public python-freecell-solver
21914 (package
21915 (name "python-freecell-solver")
21916 (version "0.6.0")
21917 (source
21918 (origin
21919 (method url-fetch)
21920 (uri (pypi-uri "freecell_solver" version))
21921 (sha256
21922 (base32 "0cq77dmq21laqk8fhl61m33lbckymzk312r263x2mv93mccf8jrm"))))
21923 (build-system pyproject-build-system)
21924 (arguments
21925 (list
21926 #:phases
21927 #~(modify-phases %standard-phases
21928 (replace 'check
21929 (lambda* (#:key test-flags tests? #:allow-other-keys)
21930 (when tests?
21931 (apply invoke
21932 "python"
21933 "-m"
21934 "unittest"
21935 "discover"
21936 "tests"
21937 test-flags)))))))
21938 (propagated-inputs (list python-cffi))
21939 (native-inputs (list python-setuptools python-wheel))
21940 (home-page "https://pypi.org/project/freecell-solver/")
21941 (synopsis "Freecell Solver bindings")
21942 (description
21943 "This package provides Python bindings for the freecell-solver
21944package. Freecell Solver is a program that automatically solves layouts of
21945Freecell and similar variants of Card Solitaire such as Eight Off, Forecell,
21946and Seahaven Towers, as well as Simple Simon boards.")
21947 (license license:expat)))
21948
21949(define-public python-inflect
21950 (package
21951 (name "python-inflect")
21952 (version "7.5.0")
21953 (source (origin
21954 (method url-fetch)
21955 (uri (pypi-uri "inflect" version))
21956 (sha256
21957 (base32
21958 "07spmlkmskwhxc0j5j4ms3w0f6pyv3h8iqwcbahdabklqc0riwgs"))))
21959 (build-system pyproject-build-system)
21960 (propagated-inputs (list python-more-itertools python-typeguard
21961 python-typing-extensions))
21962 (native-inputs (list python-pygments python-pytest python-setuptools
21963 python-setuptools-scm python-wheel))
21964 (home-page "https://github.com/jaraco/inflect")
21965 (synopsis "Correctly generate plurals, singular nouns, ordinals, indefinite articles")
21966 (description
21967 "This Python module lets you correctly generate plurals, singular nouns,
21968ordinals, indefinite articles; it also can convert numbers to words.")
21969 (license license:expat)))
21970
21971(define-public python-inflection
21972 (package
21973 (name "python-inflection")
21974 (version "0.5.1")
21975 (source
21976 (origin
21977 (method git-fetch)
21978 (uri (git-reference
21979 (url "https://github.com/jpvanhal/inflection")
21980 (commit version)))
21981 (file-name (git-file-name name version))
21982 (sha256
21983 (base32 "0mvs6wgpi963k7mqrwzdkh32m29zcm772q0fy7pwszlcsh3l50kg"))))
21984 (build-system pyproject-build-system)
21985 (native-inputs (list python-pytest python-setuptools))
21986 (home-page "https://github.com/jpvanhal/inflection")
21987 (synopsis "Python string transformation library")
21988 (description
21989 "Inflection is a string transformation library. It singularizes
21990and pluralizes English words, and transforms strings from CamelCase to
21991underscored string.")
21992 (license license:expat)))
21993
21994(define-public python-krb5
21995 (package
21996 (name "python-krb5")
21997 (version "0.5.1")
21998 (source
21999 (origin
22000 (method url-fetch)
22001 (uri (pypi-uri "krb5" version))
22002 (sha256
22003 (base32 "1jivws8dsscsmyqngbc71r4qw8qmn98pqmhylz01r5dd1ljfw9bi"))))
22004 (build-system pyproject-build-system)
22005 (inputs (list mit-krb5))
22006 (native-inputs (list python-cython python-k5test python-pytest
22007 python-setuptools python-wheel))
22008 (home-page "https://github.com/jborean93/pykrb5")
22009 (synopsis "Kerberos API bindings for Python")
22010 (description "This library provides Python functions that wraps the
22011Kerberos 5 C API.")
22012 (license license:expat)))
22013
22014(define-public python-pylev
22015 (package
22016 (name "python-pylev")
22017 (version "1.4.0")
22018 (source
22019 (origin
22020 (method git-fetch)
22021 (uri (git-reference
22022 (url "https://github.com/toastdriven/pylev")
22023 (commit (string-append "v" version))))
22024 (file-name (git-file-name name version))
22025 (sha256
22026 (base32 "0fgxjdnvnvavnxmxxd0fl5jyr2f31g3a26bwyxcpy56mgpd095c1"))))
22027 (build-system pyproject-build-system)
22028 (arguments
22029 (list
22030 #:test-backend #~'custom
22031 #:test-flags #~(list "tests.py")))
22032 (native-inputs (list python-setuptools))
22033 (home-page "https://github.com/toastdriven/pylev")
22034 (synopsis "Levenshtein distance implementation in Python")
22035 (description
22036 "Pure Python Levenshtein implementation, based off the Wikipedia code
22037samples at @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
22038 (license license:bsd-3)))
22039
22040(define-public python-cleo
22041 (package
22042 (name "python-cleo")
22043 (version "2.1.0")
22044 (source (origin
22045 (method url-fetch)
22046 (uri (pypi-uri "cleo" version))
22047 (sha256
22048 (base32
22049 "08ym7xaalxzka3k9wp7i05n6j9xmmjs1y02ilrz0lrhkbl5qhb0b"))))
22050 (build-system pyproject-build-system)
22051 (native-inputs
22052 (list python-poetry-core
22053 python-mock
22054 python-pytest-mock
22055 python-pytest))
22056 (propagated-inputs
22057 (list python-crashtest python-rapidfuzz))
22058 (home-page "https://github.com/sdispater/cleo")
22059 (synopsis "Command-line arguments library for Python")
22060 (description
22061 "Cleo allows you to create command-line commands with signature in
22062docstring and colored output.")
22063 (license license:expat)))
22064
22065(define-public python-shellingham
22066 (package
22067 (name "python-shellingham")
22068 (version "1.5.4")
22069 (source
22070 (origin
22071 (method url-fetch)
22072 (uri (pypi-uri "shellingham" version))
22073 (sha256
22074 (base32 "1ph46hv920ha9clwxgrllbrphh0ww4v4pjmkbb9mnzj8kmrs1g4d"))))
22075 (build-system pyproject-build-system)
22076 (native-inputs
22077 (list python-pytest python-pytest-mock python-setuptools python-wheel))
22078 (home-page "https://github.com/sarugaku/shellingham")
22079 (synopsis "Tool to detect surrounding shell")
22080 (description
22081 "Shellingham detects what shell the current Python executable is
22082running in.")
22083 (license license:isc)))
22084
22085(define-public python-shshsh
22086 (package
22087 (name "python-shshsh")
22088 (version "1.0.5")
22089 (source
22090 (origin
22091 (method git-fetch)
22092 (uri
22093 (git-reference
22094 (url "https://github.com/zqqqqz2000/shshsh")
22095 (commit
22096 "fd21c8696aebaae04507760c16cb45979291fef5")))
22097 (file-name (git-file-name name version))
22098 (sha256
22099 (base32
22100 "1wzqyj1a6jj6cyv5ymzy834qm2lyq80yy1kfz0q0zayq9gm1cj7f"))))
22101 (build-system pyproject-build-system)
22102 (native-inputs
22103 (list python-poetry-core
22104 python-pytest))
22105 (home-page "https://github.com/zqqqqz2000/shshsh")
22106 (synopsis "Write Shell commands simply and safely within Python")
22107 (description "This package provides a way to write Shell commands from
22108within Python. Python functions can be chained together to process input
22109Bash control characters are escapted so that parameters can be passed
22110without worrying about command injection.")
22111 (license license:expat)))
22112
22113(define-public python-memcached
22114 (package
22115 (name "python-memcached")
22116 (version "1.62")
22117 (source
22118 (origin
22119 (method git-fetch)
22120 (uri (git-reference
22121 (url "https://github.com/linsomniac/python-memcached")
22122 (commit version)))
22123 (file-name (git-file-name name version))
22124 (sha256
22125 (base32 "1chw36v1g4zz32s2qc2ql1hzrd1ys8d4abjdjnjgg8anpx13hjj2"))))
22126 (build-system pyproject-build-system)
22127 (arguments
22128 (list
22129 #:tests? #f ;Requires a connection to a socket.
22130 #:test-backend #~'unittest))
22131 (native-inputs (list python-setuptools))
22132 (home-page "https://github.com/linsomniac/python-memcached")
22133 (synopsis "Pure python memcached client")
22134 (description
22135 "This software is a pure Python interface to the memcached memory cache
22136daemon. It is the client side software which allows storing values in one or
22137more, possibly remote, memcached servers.")
22138 (license license:psfl)))
22139
22140(define-public python-mergedeep
22141 (package
22142 (name "python-mergedeep")
22143 (version "1.3.4")
22144 (source
22145 (origin
22146 (method git-fetch)
22147 (uri (git-reference
22148 (url "https://github.com/clarketm/mergedeep")
22149 (commit (string-append "v" version))))
22150 (file-name (git-file-name name version))
22151 (sha256
22152 (base32 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
22153 (build-system pyproject-build-system)
22154 (arguments (list #:test-backend #~'unittest))
22155 (native-inputs (list python-setuptools))
22156 (home-page "https://github.com/clarketm/mergedeep")
22157 (synopsis "Deep merge function for Python")
22158 (description
22159 "This package provides a deep merge function for Python, useful to
22160combine multiple data objects as one.")
22161 (license license:expat)))
22162
22163(define-public python-clikit
22164 (package
22165 (name "python-clikit")
22166 (version "0.6.2")
22167 (source
22168 (origin
22169 (method git-fetch)
22170 (uri (git-reference
22171 (url "https://github.com/sdispater/clikit")
22172 (commit version)))
22173 (file-name (git-file-name name version))
22174 (sha256
22175 (base32 "1l11iriqc61m30fp17yxwkgl5900kiw8x8vw2i93n1jh2lv182y4"))))
22176 (build-system pyproject-build-system)
22177 (arguments
22178 (list
22179 #:phases
22180 #~(modify-phases %standard-phases
22181 (add-after 'unpack 'relax-requirements
22182 (lambda _
22183 (substitute* "pyproject.toml"
22184 (("^crashtest.*")
22185 (format #f "crashtest=~s"
22186 #$(package-version
22187 (this-package-input "python-crashtest"))))))))))
22188 (native-inputs (list python-poetry-core python-pytest python-pytest-mock))
22189 (propagated-inputs (list python-crashtest python-pastel python-pylev))
22190 (home-page "https://github.com/sdispater/clikit")
22191 (synopsis "Group of utilities to build command line interfaces")
22192 (description
22193 "CliKit is a group of utilities to build testable command line
22194interfaces.")
22195 (license license:expat)))
22196
22197(define-public python-cattrs
22198 (package
22199 (name "python-cattrs")
22200 (version "24.1.2")
22201 (source (origin
22202 (method git-fetch) ;for tests
22203 (uri (git-reference
22204 (url "https://github.com/python-attrs/cattrs")
22205 (commit (string-append "v" version))))
22206 (file-name (git-file-name name version))
22207 (sha256
22208 (base32
22209 "0l806xs0insnvnd1c2l6f6bcaa7wgfrpvbbcyhhsvf2xy9mzq8rd"))))
22210 (build-system pyproject-build-system)
22211 (arguments
22212 (list
22213 #:test-flags
22214 '(list "--numprocesses" (number->string (parallel-job-count))
22215 ;; Skip all benchmark tests.
22216 "--ignore=bench/test_attrs_collections.py"
22217 "--ignore=bench/test_attrs_nested.py"
22218 "--ignore=bench/test_attrs_primitives.py"
22219 "--ignore=bench/test_primitives.py"
22220 "-k"
22221 (string-join
22222 ;; XXX: Tests fail with error: AssertionError: assert ...,
22223 ;; check why.
22224 (list "not test_msgspec_json_converter"
22225 "test_structure_simple_from_dict_default"
22226 "test_310_optional_field_roundtrip"
22227 "test_310_union_field_roundtrip"
22228 "test_individual_overrides"
22229 "test_nested_roundtrip"
22230 "test_nested_roundtrip_tuple"
22231 "test_omit_default_roundtrip"
22232 "test_optional_field_roundtrip"
22233 "test_renaming"
22234 ;; 'utf-8' codec can't encode character '\ud800' in
22235 ;; position 0: surrogates not allowed
22236 "test_simple_classes"
22237 ;; This test fails with an assertion error on the build
22238 ;; farm, but not on my laptop.
22239 "test_nodefs_generated_unstructuring_cl"
22240 ;; See https://github.com/python-attrs/cattrs/issues/575
22241 "test_simple_roundtrip"
22242 "test_simple_roundtrip_defaults"
22243 "test_simple_roundtrip_defaults_tuple"
22244 "test_simple_roundtrip_tuple"
22245 "test_simple_roundtrip_with_extra_keys_forbidden"
22246 "test_structure_simple_from_dict_default"
22247 "test_union_field_roundtrip"
22248 "test_unmodified_generated_structuring")
22249 " and not "))
22250 #:phases
22251 #~(modify-phases %standard-phases
22252 (add-after 'unpack 'patch-pyproject
22253 (lambda _
22254 (substitute* "pyproject.toml"
22255 ;; Fix version string
22256 (("dynamic = \\[\"version\"\\]")
22257 (string-append "version = \"" #$version "\""))
22258 ;; Just run pytest with no frills
22259 (("addopts = \"-l.*") ""))))
22260 ;; XXX Our python-hypothesis package is too old.
22261 (add-after 'unpack 'compatibility
22262 (lambda _
22263 (substitute* "tests/typed.py"
22264 (("characters\\(codec=codec\\)")
22265 "characters()")))))))
22266 (native-inputs
22267 (list python-hatchling
22268 python-hatch-vcs
22269 python-hypothesis
22270 python-immutables
22271 python-msgpack
22272 python-msgspec
22273 python-poetry-core
22274 python-pymongo ;for the bson module
22275 python-pytest
22276 python-pytest-benchmark
22277 python-pytest-xdist))
22278 (propagated-inputs
22279 (list python-attrs
22280 python-cbor2
22281 python-exceptiongroup
22282 python-orjson
22283 python-pyyaml
22284 python-tomlkit
22285 python-typing-extensions
22286 python-ujson))
22287 (home-page "https://github.com/python-attrs/cattrs")
22288 (synopsis "Python library for structuring and unstructuring data")
22289 (description "@code{cattrs} is an Python library for structuring and
22290unstructuring data. @code{cattrs} works best with @code{attrs} classes,
22291@code{dataclasses} and the usual Python collections, but other kinds of
22292classes can also be supported by manually registering converters.")
22293 (license license:expat)))
22294
22295(define-public python-cachy
22296 (package
22297 (name "python-cachy")
22298 (version "0.3.0")
22299 (source
22300 (origin
22301 (method url-fetch)
22302 (uri (pypi-uri "cachy" version))
22303 (sha256
22304 (base32 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
22305 (build-system pyproject-build-system)
22306 (arguments
22307 (list
22308 #:phases
22309 #~(modify-phases %standard-phases
22310 (replace 'check
22311 (lambda* (#:key tests? #:allow-other-keys)
22312 (when tests?
22313 ;; Make it compatible with python-flexmock 0.12.
22314 (substitute* (find-files "tests" "\\.py$")
22315 (("from flexmock import flexmock, flexmock_teardown")
22316 (string-append "from flexmock import flexmock\n"
22317 "from flexmock._api import flexmock_teardown")))
22318 (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
22319 "pytest")))))))
22320 (native-inputs
22321 (list memcached
22322 python-fakeredis
22323 python-flexmock
22324 python-pifpaf
22325 python-pytest
22326 python-setuptools
22327 python-wheel))
22328 (propagated-inputs
22329 (list python-memcached
22330 python-msgpack
22331 python-redis))
22332 (home-page "https://github.com/sdispater/cachy")
22333 (synopsis "Simple yet effective caching library")
22334 (description
22335 "Cachy provides a simple yet effective caching library. A simple but
22336powerful API: thread-safety; decorator syntax; support for memcached, redis,
22337database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
22338 (license license:expat)))
22339
22340(define-public python-pyproject-api
22341 (package
22342 (name "python-pyproject-api")
22343 (version "1.8.0")
22344 (source
22345 (origin
22346 (method url-fetch)
22347 (uri (pypi-uri "pyproject_api" version))
22348 (sha256
22349 (base32 "15l4fx1v4dqhhysxd2mcm1vn4qvrwbqmf6y2zkp36pgb5ygh9f3p"))))
22350 (build-system pyproject-build-system)
22351 (arguments
22352 (list
22353 #:test-flags
22354 '(list "-k" (string-append
22355 ;; This fails because of extraneous parentheses
22356 "not test_setuptools_prepare_metadata_for_build_wheel"
22357 ;; This fails because wheel shows up in requirements
22358 " and not test_setuptools_get_requires_for_build_wheel"))))
22359 (native-inputs
22360 (list python-covdefaults
22361 python-hatch-vcs
22362 python-hatchling
22363 python-pytest
22364 python-pytest-cov
22365 python-pytest-mock
22366 python-setuptools
22367 python-wheel))
22368 (propagated-inputs
22369 (list python-packaging python-tomli))
22370 (home-page "https://pyproject-api.readthedocs.io/latest/")
22371 (synopsis "API to interact with the Python pyproject.toml based projects")
22372 (description
22373 "@code{pyproject-api} aims to abstract away interaction with
22374@code{pyproject.toml} style projects in a flexible way.")
22375 (license license:expat)))
22376
22377(define-public python-pyproject-hooks
22378 (package
22379 (name "python-pyproject-hooks")
22380 (version "1.2.0")
22381 (source
22382 (origin
22383 (method url-fetch)
22384 (uri (pypi-uri "pyproject_hooks" version))
22385 (sha256
22386 (base32 "1y511nblr0lslz1d5s46844f5raryjnp3n1dci499bhgqkarp18y"))))
22387 (build-system pyproject-build-system)
22388 (native-inputs
22389 (list python-flit-core
22390 python-pytest
22391 python-testpath))
22392 (home-page "https://github.com/pypa/pyproject-hooks")
22393 (synopsis "Low-level library for calling @file{pyproject.toml} backends")
22394 (description
22395 "@code{pyproject-hooks} is a low-level library for calling build backends
22396in @file{pyproject.toml}-based projects. It provides basic functionality to
22397write tooling that generates distribution files from Python projects.")
22398 (license license:expat)))
22399
22400(define-public python-lark
22401 (package
22402 (name "python-lark")
22403 (version "1.2.2")
22404 (source
22405 (origin
22406 (method url-fetch)
22407 (uri (pypi-uri "lark" version))
22408 (sha256
22409 (base32 "107d1w24b3ln4zwsw4yvkfhff6bk5n3cpvlgbbqww5ndc80pv06a"))))
22410 (build-system pyproject-build-system)
22411 (native-inputs (list python-pytest python-setuptools python-wheel))
22412 (home-page "https://github.com/lark-parser/lark")
22413 (synopsis "Multi-language parser for Python")
22414 (description
22415 "Lark is a parser built with a focus on ergonomics, performance and
22416resilience. Lark can parse all context-free languages. That means it is
22417capable of parsing almost any programming language out there, and to
22418some degree most natural languages too.")
22419 (license license:expat)))
22420
22421(define-public python-find-libpython
22422 (package
22423 (name "python-find-libpython")
22424 (version "0.4.1")
22425 (source
22426 (origin
22427 (method git-fetch)
22428 (uri (git-reference
22429 (url "https://github.com/ktbarrett/find_libpython")
22430 (commit (string-append "v" version))))
22431 (file-name (git-file-name name version))
22432 (sha256
22433 (base32 "173qxif277vc23kgidwbkxx7z7b7676f8lv5kxy9pd82228m8m79"))))
22434 (build-system pyproject-build-system)
22435 (native-inputs (list python-setuptools python-wheel
22436 ;; tests
22437 python-pytest))
22438 (home-page "https://github.com/ktbarrett/find_libpython")
22439 (synopsis "Find the path to the @code{libpython} dynamic library")
22440 (description
22441 "@code{find_libpython} helps find the path to the
22442@code{libpython} dynamic library for the current Python environment. It is
22443both a script and a Python package.")
22444 (license license:expat)))
22445
22446(define-public python-libcst
22447 (package
22448 (name "python-libcst")
22449 (version "1.6.0")
22450 (source (origin
22451 (method url-fetch)
22452 (uri (pypi-uri "libcst" version))
22453 (sha256
22454 (base32
22455 "1nzhvg52whpmfv8fkrnv7rlrmgc5m43hpyp8ra9kffx47yzcs3p8"))
22456 (snippet
22457 #~(begin (use-modules (guix build utils))
22458 ;; This is mostly to keep the cargo-build-system happy
22459 (with-output-to-file "Cargo.toml"
22460 (lambda ()
22461 (format #t "\
22462[workspace]
22463
22464members = [
22465 \"native\",]")))))))
22466 (build-system cargo-build-system)
22467 (arguments
22468 (list
22469 #:install-source? #false
22470 #:cargo-test-flags
22471 ;; According to .github/workflows/ci.yml
22472 '(list "--manifest-path=native/Cargo.toml"
22473 "--release"
22474 "--no-default-features")
22475 #:imported-modules `(,@%pyproject-build-system-modules
22476 ,@%cargo-build-system-modules)
22477 #:modules `((guix build cargo-build-system)
22478 ((guix build pyproject-build-system) #:prefix py:)
22479 (guix build utils))
22480 #:phases
22481 (with-extensions (list (pyproject-guile-json))
22482 #~(modify-phases %standard-phases
22483 (add-after 'unpack 'prepare-source
22484 (lambda _
22485 (delete-file "native/Cargo.lock")))
22486 (replace 'build
22487 (assoc-ref py:%standard-phases 'build))
22488 (add-after 'install 'wrap
22489 (lambda _
22490 ;; Collection of python- and pyproject-build-system phases
22491 ;; between 'install and 'check.
22492 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
22493 (assoc-ref py:%standard-phases 'add-install-to-path)
22494 (assoc-ref py:%standard-phases 'wrap)
22495 (assoc-ref py:%standard-phases 'create-entrypoints)
22496 (assoc-ref py:%standard-phases 'compile-bytecode)))
22497 ;; We are not the only ones who cannot load libcst.native
22498 ;; during the 'check phase
22499 ;; https://github.com/Instagram/LibCST/issues/1176
22500 ;; (add-after 'wrap 'python-check
22501 ;; (lambda args
22502 ;; (apply (assoc-ref py:%standard-phases 'check)
22503 ;; #:test-flags '()
22504 ;; args)))
22505 (replace 'install
22506 (assoc-ref py:%standard-phases 'install))))))
22507 (native-inputs
22508 (list python-minimal-wrapper
22509 python-hypothesmith
22510 python-pytest
22511 python-setuptools
22512 python-setuptools-rust
22513 python-setuptools-scm
22514 python-wheel))
22515 (inputs (cons maturin (cargo-inputs 'python-libcst)))
22516 (propagated-inputs
22517 (list python-pyyaml))
22518 (home-page "https://github.com/Instagram/LibCST")
22519 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
22520 (description
22521 "LibCST parses Python source code as a CST tree that keeps all
22522formatting details (comments, whitespaces, parentheses, etc). It's useful
22523for building automated refactoring (codemod) applications and linters.
22524LibCST creates a compromise between an Abstract Syntax Tree (AST) and
22525a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
22526naming node types and fields, LibCST creates a lossless CST that looks and
22527feels like an AST.")
22528 (license (list license:expat
22529 ;; Some files unde libcst/_parser/ are under Python Software
22530 ;; Foundation license (see LICENSE file for details)
22531 license:psfl
22532 ;; libcst/_add_slots.py
22533 license:asl2.0))))
22534
22535(define-public python-libcst-minimal
22536 (hidden-package
22537 (package
22538 (inherit python-libcst)
22539 (name "python-libcst-minimal")
22540 (arguments
22541 (substitute-keyword-arguments (package-arguments python-libcst)
22542 ((#:tests? _ #t) #f)))
22543 (native-inputs
22544 (list python-minimal-wrapper
22545 python-setuptools
22546 python-setuptools-rust
22547 python-setuptools-scm
22548 python-wheel)))))
22549
22550(define-public python-lazy-loader
22551 (package
22552 (name "python-lazy-loader")
22553 (version "0.4")
22554 (source (origin
22555 (method url-fetch)
22556 (uri (pypi-uri "lazy_loader" version))
22557 (sha256
22558 (base32
22559 "1lacaz292qxpgw6kxiirkx6sv9c5883nq4ssm3hs94cvb2153is7"))))
22560 (build-system pyproject-build-system)
22561 (native-inputs
22562 (list python-numpy python-pytest python-setuptools))
22563 (propagated-inputs
22564 (list python-flit-core
22565 python-setuptools
22566 python-wheel))
22567 (home-page "https://scientific-python.org/specs/spec-0001/")
22568 (synopsis "Load subpackages and functions on demand")
22569 (description "@code{python-lazy-loader} makes it easy to load subpackages
22570and functions on demand. Its main features are:
22571
22572@itemize
22573@item Allow subpackages to be made visible to users without incurring import
22574costs.
22575@item Allow external libraries to be imported only when used, improving import
22576times.
22577@end itemize")
22578 (license license:bsd-3)))
22579
22580(define-public python-lazy-object-proxy
22581 (package
22582 (name "python-lazy-object-proxy")
22583 (version "1.11.0")
22584 (source
22585 (origin
22586 (method url-fetch)
22587 (uri (pypi-uri "lazy_object_proxy" version))
22588 (sha256
22589 (base32 "174fswfrsqr7yj72f8fyry34qxgagbfw37vzljxbp7schq8l91qq"))))
22590 (build-system pyproject-build-system)
22591 (native-inputs
22592 (list python-pytest
22593 python-pytest-benchmark
22594 python-setuptools
22595 python-setuptools-scm
22596 python-wheel))
22597 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
22598 (synopsis "Lazy object proxy for Python")
22599 (description
22600 "Lazy object proxy is an object that wraps a callable but defers the call
22601until the object is actually required, and caches the result of said call.")
22602 (license license:bsd-2)))
22603
22604(define-public python-dnspython
22605 (package
22606 (name "python-dnspython")
22607 (version "2.7.0")
22608 (source
22609 (origin
22610 (method url-fetch)
22611 (uri (pypi-uri "dnspython" version))
22612 (sha256
22613 (base32 "1wgsbiz90npdi47cilmwdccm29hl9qddzkm533v1rj8dv8p4776f"))))
22614 (build-system pyproject-build-system)
22615 (arguments
22616 (list
22617 #:test-flags
22618 #~(list
22619 ;; AssertionError: assert False
22620 "--deselect=tests/test_features.py::test_have"
22621 ;; dns.exception.SyntaxError: protocol not found
22622 "--deselect=tests/test_rdata.py::RdataTestCase::test_misc_good_WKS_text"
22623 ;; ECDSA with deterministic signature (RFC 6979) is not supported by
22624 ;; this version of OpenSSL.
22625 "-k" (string-append "not testDeterministicSignatureECDSAP256SHA256"
22626 " and not testSignatureECDSAP256SHA256"
22627 " and not testSignatureECDSAP384SHA384"
22628 " and not test_ecdsa"))
22629 #:phases
22630 #~(modify-phases %standard-phases
22631 (add-after 'unpack 'patch-getprotobyname-calls
22632 ;; These calls are problematic in the build environment as there is
22633 ;; no /etc/protocols. This breaks the sanity-check phase of any
22634 ;; package depending on this one.
22635 (lambda _
22636 (substitute* "dns/rdtypes/IN/WKS.py"
22637 (("socket.getprotobyname\\('tcp'\\)")
22638 "6")
22639 (("socket.getprotobyname\\('udp'\\)")
22640 "17")))))))
22641 (native-inputs
22642 (list python-hatchling
22643 python-pytest))
22644 (propagated-inputs
22645 (append
22646 (if (supported-package? python-cryptography)
22647 (list ;; DNSSEC
22648 python-cryptography
22649 ;; DNS over Quic
22650 python-aioquic
22651 ;; DNS over HTTPS
22652 python-h2
22653 python-httpcore
22654 python-httpx)
22655 '())
22656 (list python-idna
22657 python-trio)))
22658 (home-page "https://www.dnspython.org")
22659 (synopsis "DNS toolkit for Python")
22660 (description
22661 "dnspython is a DNS toolkit for Python. It supports almost all record
22662types. It can be used for queries, zone transfers, and dynamic updates.
22663It supports TSIG authenticated messages and EDNS0.")
22664 (license license:expat)))
22665
22666(define-public python-dnspython-1.16
22667 (package
22668 (inherit python-dnspython)
22669 (version "1.16.0")
22670 (source (origin
22671 (method url-fetch)
22672 (uri (string-append "http://www.dnspython.org/kits/"
22673 version "/dnspython-" version ".tar.gz"))
22674 (sha256
22675 (base32
22676 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
22677 (arguments
22678 (list
22679 #:phases
22680 #~(modify-phases %standard-phases
22681 (add-after 'unpack 'compatibility
22682 (lambda _
22683 (substitute* "dns/namedict.py"
22684 (("collections.MutableMapping")
22685 "collections.abc.MutableMapping"))))
22686 (add-after 'unpack 'patch-getprotobyname-calls
22687 ;; These calls are problematic in the build environment as there is
22688 ;; no /etc/protocols. This breaks the sanity-check phase of any
22689 ;; package depending on this one.
22690 (lambda _
22691 (substitute* "dns/rdtypes/IN/WKS.py"
22692 (("socket.getprotobyname\\('tcp'\\)")
22693 "6")
22694 (("socket.getprotobyname\\('udp'\\)")
22695 "17")))))))
22696 (native-inputs (list python-pytest python-setuptools python-wheel))))
22697
22698(define-public python-py3dns
22699 (package
22700 (name "python-py3dns")
22701 (version "4.0.2")
22702 (source
22703 (origin
22704 (method url-fetch)
22705 (uri (pypi-uri "py3dns" version))
22706 (sha256
22707 (base32 "0fcac412kh34r3gxvn7dc1srmjii2qs6n3lgyxh3q57cxj02wrcq"))))
22708 (build-system pyproject-build-system)
22709 (arguments
22710 ;; This package wants to read /etc/resolv.conf. We can't patch it without
22711 ;; removing functionality so we don't run tests.
22712 (list #:tests? #f))
22713 (native-inputs (list python-flit-core))
22714 (home-page "https://launchpad.net/py3dns")
22715 (synopsis "Python 3 DNS library")
22716 (description
22717 "This Python 3 module provides a DNS API for looking up DNS entries from
22718within Python 3 modules and applications. This module is a simple,
22719lightweight implementation.")
22720 (license license:psfl)))
22721
22722(define-public python-email-validator
22723 (package
22724 (name "python-email-validator")
22725 (version "2.2.0")
22726 (source
22727 (origin
22728 (method url-fetch)
22729 (uri (pypi-uri "email_validator" version))
22730 (sha256
22731 (base32 "1dw28lv9lpsw2s7dylhih93fn72s8iqyfsp6497p2yk19hs0ysfb"))))
22732 (build-system pyproject-build-system)
22733 (arguments
22734 (list
22735 #:test-flags
22736 ;; dns.resolver.NoResolverConfiguration: cannot open /etc/resolv.conf
22737 #~(list "-k" "not test_caching_dns_resolver")))
22738 (native-inputs
22739 (list python-pytest
22740 python-setuptools
22741 python-wheel))
22742 (propagated-inputs
22743 (list python-dnspython
22744 python-idna))
22745 (home-page "https://github.com/JoshData/python-email-validator")
22746 (synopsis "Email address validation library for Python")
22747 (description
22748 "This library validates email address syntax and deliverability.")
22749 (license license:cc0)))
22750
22751(define-public python-faker
22752 (package
22753 (name "python-faker")
22754 (version "37.4.2")
22755 (source
22756 (origin
22757 (method url-fetch)
22758 (uri (pypi-uri "faker" version))
22759 (sha256
22760 (base32 "02kbql0mgjh98ilz5crxlkrsl9qdqlfa5gmqjn46br9hxax1na4f"))))
22761 (build-system pyproject-build-system)
22762 ;; tests: 2104 passed, 12 skipped, 2 warnings
22763 (native-inputs
22764 (list python-freezegun
22765 python-pytest
22766 python-setuptools
22767 python-ukpostcodeparser
22768 python-validators))
22769 (propagated-inputs
22770 (list python-tzdata))
22771 (home-page "https://github.com/joke2k/faker")
22772 (synopsis "Python package that generates fake data")
22773 (description
22774 "Faker is a Python package that generates fake data such as names,
22775addresses, and phone numbers.")
22776 (license license:expat)))
22777
22778(define-public python-pyaml
22779 (package
22780 (name "python-pyaml")
22781 (version "25.7.0")
22782 (source
22783 (origin
22784 (method url-fetch)
22785 (uri (pypi-uri "pyaml" version))
22786 (sha256
22787 (base32 "16yrflm7iyz82igpzlba16cbvwfwny2fnarf14mvz0b8q57ac4z1"))))
22788 (build-system pyproject-build-system)
22789 (native-inputs
22790 (list python-pytest
22791 python-setuptools))
22792 (propagated-inputs
22793 (list python-pyyaml))
22794 (home-page "https://github.com/mk-fg/pretty-yaml")
22795 (synopsis "YAML pretty-print library for Python")
22796 (description
22797 "pyaml is a PyYAML based python module to produce pretty and readable
22798YAML-serialized data.")
22799 (license license:wtfpl2)))
22800
22801(define-public python-pyyaml-env-tag
22802 (package
22803 (name "python-pyyaml-env-tag")
22804 (version "1.1")
22805 (source
22806 (origin
22807 (method git-fetch)
22808 (uri (git-reference
22809 (url "https://github.com/waylan/pyyaml-env-tag")
22810 (commit version)))
22811 (file-name (git-file-name name version))
22812 (sha256
22813 (base32 "16zkwmnlzzsdlxs9ww3b51mcarni2ykmi0v7752l7j4najxw875n"))))
22814 (build-system pyproject-build-system)
22815 (native-inputs (list python-pytest python-setuptools))
22816 (propagated-inputs (list python-pyyaml))
22817 (home-page "https://github.com/waylan/pyyaml-env-tag")
22818 (synopsis "Custom YAML tag for environment variables")
22819 (description
22820 "This package provides a custom YAML tag for referencing environment
22821variables in YAML files.")
22822 (license license:expat)))
22823
22824(define-public python-prompt-toolkit
22825 (package
22826 (name "python-prompt-toolkit")
22827 (version "3.0.51")
22828 (source
22829 (origin
22830 (method url-fetch)
22831 (uri (pypi-uri "prompt_toolkit" version))
22832 (sha256
22833 (base32 "1valgcf324yy0sf7rrbm2ivc4a65n8gvnj0vdz491z177cp1c6lk"))))
22834 (build-system pyproject-build-system)
22835 (arguments
22836 (list
22837 #:phases
22838 #~(modify-phases %standard-phases
22839 (add-before 'check 'pre-check
22840 (lambda _
22841 ;; HOME is needed for the test
22842 ;; "test_pathcompleter_can_expanduser".
22843 (setenv "HOME" "/tmp"))))))
22844 (native-inputs
22845 (list python-pytest
22846 python-setuptools))
22847 (propagated-inputs
22848 (list python-wcwidth))
22849 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
22850 (synopsis "Library for building command line interfaces in Python")
22851 (description
22852 "Prompt-Toolkit is a library for building interactive command line
22853interfaces in Python. It's like GNU Readline but it also features syntax
22854highlighting while typing, out-of-the-box multi-line input editing, advanced
22855code completion, incremental search, support for Chinese double-width
22856characters, mouse support, and auto suggestions.")
22857 (license license:bsd-3)))
22858
22859(define-public python-proselint
22860 (package
22861 (name "python-proselint")
22862 (version "0.14.0")
22863 (source
22864 (origin
22865 (method url-fetch)
22866 (uri (pypi-uri "proselint" version))
22867 (sha256
22868 (base32 "11hfd207bhsvb0iznlnbr0w7jxihvn3ismpjbmz7c57a5ckn8jb2"))))
22869 (build-system pyproject-build-system)
22870 (arguments
22871 (list
22872 #:phases
22873 #~(modify-phases %standard-phases
22874 (add-after 'unpack 'set-home-directory
22875 (lambda _
22876 (setenv "HOME" "/tmp"))))))
22877 (native-inputs
22878 (list python-poetry-core
22879 python-pytest))
22880 (propagated-inputs
22881 (list python-click))
22882 (home-page "http://proselint.com/")
22883 (synopsis "Linter for prose")
22884 (description "@code{python-proselint} is a linter for English prose, that
22885scans through a file and detects issues.")
22886 (license license:bsd-3)))
22887
22888(define-public python-jedi
22889 (package
22890 (name "python-jedi")
22891 (version "0.19.2")
22892 (source
22893 (origin
22894 (method git-fetch)
22895 (uri (git-reference
22896 (url "https://github.com/davidhalter/jedi")
22897 (commit (string-append "v" version))
22898 (recursive? #true)))
22899 (file-name (git-file-name name version))
22900 (sha256
22901 (base32
22902 "0w8rrw6s4bzr5csds8bhasrmzh9q77zh5dzisjysl8cb5qjx0w6s"))))
22903 (build-system pyproject-build-system)
22904 (arguments
22905 (list
22906 #:phases
22907 '(modify-phases %standard-phases
22908 (add-before 'check 'set-HOME
22909 (lambda _ (setenv "HOME" "/tmp"))))))
22910 (native-inputs
22911 (list python-docopt
22912 python-pytest
22913 python-setuptools
22914 python-wheel))
22915 (propagated-inputs
22916 (list python-parso))
22917 (home-page "https://github.com/davidhalter/jedi")
22918 (synopsis "Autocompletion and static analysis library for Python")
22919 (description
22920 "Jedi is a static analysis tool for Python that can be used in Integrated
22921Development Environments (@dfn{IDE}s) and text editors. It understands Python
22922on a deeper level than many other static analysis frameworks for Python.
22923
22924Jedi understands docstrings and you can use Jedi autocompletion in your REPL
22925as well.")
22926 (license license:expat)))
22927
22928(define-public ptpython
22929 (package
22930 (name "ptpython")
22931 (version "3.0.20")
22932 (source
22933 (origin
22934 (method git-fetch)
22935 (uri (git-reference
22936 (url "https://github.com/jonathanslenders/ptpython")
22937 (commit version)))
22938 (file-name (git-file-name name version))
22939 (sha256
22940 (base32 "0qbj7d4qkzl8l05kpmm19953lmqk379i17ab8g3sfnmfpsy3ji5m"))))
22941 (build-system pyproject-build-system)
22942 (arguments
22943 (list
22944 ;; XXX: There is a tests/run_tests.py file but all it does is a
22945 ;; sanity check.
22946 #:tests? #f))
22947 (native-inputs (list python-setuptools))
22948 (propagated-inputs
22949 (list python-appdirs python-jedi python-prompt-toolkit python-pygments))
22950 (home-page "https://github.com/jonathanslenders/ptpython")
22951 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
22952 (description
22953 "ptpython is a Python read-eval-print loop with IDE-like features.
22954It supports syntax highlighting, multiline editing, autocompletion, mouse,
22955color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
22956etc.")
22957 (license license:bsd-3)))
22958
22959(define-public python-easyprocess
22960 (package
22961 (name "python-easyprocess")
22962 (version "1.1")
22963 (source
22964 (origin
22965 (method git-fetch)
22966 (uri (git-reference
22967 (url "https://github.com/ponty/easyprocess")
22968 (commit version)))
22969 (file-name (git-file-name name version))
22970 (sha256
22971 (base32 "1dysr0z2mijhxl4z86wxf4w94sszdm4i2w3id0a6qwyid6xqjksp"))))
22972 (build-system pyproject-build-system)
22973 (arguments
22974 ;; Tests require pyvirtualdisplay, which requires this package.
22975 (list #:tests? #f))
22976 (native-inputs (list python-setuptools))
22977 (home-page "https://github.com/ponty/easyprocess")
22978 (synopsis "Python subprocess interface")
22979 (description
22980 "@code{easyprocess} is an easy to use Python subprocess interface.")
22981 (license license:bsd-3)))
22982
22983(define-public python-entrypoint2
22984 (package
22985 (name "python-entrypoint2")
22986 (version "0.2.4")
22987 (source
22988 (origin
22989 (method url-fetch)
22990 (uri (pypi-uri "entrypoint2" version))
22991 (sha256
22992 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
22993 (build-system pyproject-build-system)
22994 (native-inputs (list python-easyprocess python-pytest python-pytest-runner
22995 python-setuptools python-wheel))
22996 (home-page "https://github.com/ponty/entrypoint2")
22997 (synopsis "Command-line interface for Python modules")
22998 (description
22999 "@code{entrypoint2} is an easy to use command-line interface for Python
23000 modules based on @code{argparse}. It translates function signature and
23001 documentation to argparse configuration.")
23002 (license license:bsd-3)))
23003
23004(define-public python-pyvirtualdisplay
23005 (package
23006 (name "python-pyvirtualdisplay")
23007 (version "3.0")
23008 (source
23009 (origin
23010 (method url-fetch)
23011 (uri (pypi-uri "PyVirtualDisplay" version))
23012 (sha256
23013 (base32 "0nb1s7nilakrkcm0vq08pz9mh8rzyhjm9jkyn1gp5sxnrv1mnx89"))))
23014 (build-system pyproject-build-system)
23015 (arguments
23016 (list
23017 ;; tests: 27 passed, 8 deselected
23018 #:test-flags
23019 ;; TODO: Add libxcb to python-pillow on the next python-team cycle.
23020 ;; OSError: Pillow was built without XCB support
23021 #~(list #$@(map (lambda (test) (string-append "--deselect="
23022 "tests/"
23023 test))
23024 (list "test_smart.py::test_slowshot"
23025 "test_smart.py::test_slowshot_with"
23026 "test_smart.py::test_slowshot_nocrop"
23027 "test_smart.py::test_slowshot_timeout"
23028 "test_smart.py::test_slowshot_timeout_nocrop"
23029 "test_smart2.py::test_double"
23030 "test_smart_thread.py::test_smart"
23031 "test_examples.py::test_screenshot")))))
23032 (native-inputs
23033 (list python-easyprocess
23034 python-entrypoint2
23035 python-psutil
23036 python-pytest
23037 python-setuptools
23038 python-vncdotool-bootstrap
23039 xmessage
23040 xorg-server-for-tests))
23041 (home-page "https://github.com/ponty/pyvirtualdisplay")
23042 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
23043 (description
23044 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
23045 (license license:bsd-3)))
23046
23047(define-public python-pyserial
23048 (package
23049 (name "python-pyserial")
23050 (version "3.5")
23051 (source
23052 (origin
23053 (method url-fetch)
23054 (uri (pypi-uri "pyserial" version))
23055 (sha256
23056 (base32
23057 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
23058 (build-system pyproject-build-system)
23059 (native-inputs
23060 (list python-pytest
23061 python-setuptools
23062 python-wheel))
23063 (home-page "https://github.com/pyserial/pyserial")
23064 (synopsis "Python Serial Port Bindings")
23065 (description
23066 "@code{pyserial} provide serial port bindings for Python. It supports
23067different byte sizes, stop bits, parity and flow control with RTS/CTS and/or
23068Xon/Xoff. The port is accessed in RAW mode.")
23069 (license license:bsd-3)))
23070
23071(define-public python-pyserial-asyncio
23072 (package
23073 (name "python-pyserial-asyncio")
23074 (version "0.6")
23075 (source
23076 (origin
23077 (method git-fetch)
23078 (uri (git-reference
23079 (url "https://github.com/pyserial/pyserial-asyncio")
23080 (commit (string-append "v" version))))
23081 (file-name (git-file-name name version))
23082 (sha256
23083 (base32 "0c8kzy2a4awsh580qrniwq0vyydlsvicjw79r270sqflxmjlns6n"))))
23084 (build-system pyproject-build-system)
23085 (arguments (list #:test-backend #~'unittest))
23086 (native-inputs (list python-setuptools))
23087 (propagated-inputs (list python-pyserial))
23088 (home-page "https://github.com/pyserial/pyserial-asyncio")
23089 (synopsis "Pyserial asynchronous I/O extension")
23090 (description
23091 "This package extends Pyserial with asynchronous I/O support.")
23092 (license license:bsd-3)))
23093
23094(define-public python-pymemcache
23095 (package
23096 (name "python-pymemcache")
23097 (version "4.0.0")
23098 (source
23099 (origin
23100 (method url-fetch)
23101 (uri (pypi-uri "pymemcache" version))
23102 (sha256
23103 (base32 "157z9blr8pjg9x84jph5hm0z2l6yaq6n421jcf1hzqn1pg8rpgr7"))))
23104 (build-system pyproject-build-system)
23105 (arguments
23106 ;; We don't have the zstd module.
23107 (list
23108 #:test-flags
23109 '(list "--ignore=pymemcache/test/test_compression.py")))
23110 (native-inputs
23111 (list python-faker python-pytest python-pytest-cov python-setuptools
23112 python-wheel))
23113 (home-page "https://github.com/pinterest/pymemcache")
23114 (synopsis "Comprehensive, fast, pure Python memcached client")
23115 (description
23116 "This package provides a comprehensive, fast, pure Python memcached
23117client.")
23118 (license license:asl2.0)))
23119
23120(define-public python-pymodbus
23121 (package
23122 (name "python-pymodbus")
23123 (version "3.8.6")
23124 (source
23125 (origin
23126 (method git-fetch)
23127 (uri (git-reference
23128 (url "https://github.com/riptideio/pymodbus")
23129 (commit (string-append "v" version))))
23130 (file-name (git-file-name name version))
23131 (sha256
23132 (base32 "1sncllh01c6vqq4fh9k3yg9fchmmw661rcp0066l7fis6sp4yw82"))))
23133 (build-system pyproject-build-system)
23134 (arguments
23135 (list
23136 #:test-flags
23137 #~(list "--ignore"
23138 "test/server/test_simulator_api.py"
23139 ;; These tests require the presence of a certificate.
23140 "--ignore-glob"
23141 "test/examples/*"
23142 "--ignore"
23143 "test/client/test_client.py")))
23144 (native-inputs (list python-mock
23145 python-pytest
23146 python-pytest-asyncio
23147 python-pytest-cov
23148 python-pytest-xdist
23149 python-redis
23150 python-setuptools
23151 python-sqlalchemy
23152 python-tornado
23153 python-twisted
23154 python-wheel))
23155 (propagated-inputs (list python-pyserial
23156 python-six
23157 ;; For the REPL.
23158 python-aiohttp
23159 python-click
23160 python-prompt-toolkit
23161 python-pygments
23162 python-pyserial-asyncio))
23163 (home-page "https://github.com/riptideio/pymodbus/")
23164 (synopsis "Modbus protocol stack in Python")
23165 (description
23166 "Pymodbus is a full Modbus protocol implementation using
23167 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
23168 communications core. It includes the following @emph{client} features:
23169 @itemize
23170 @item full read/write protocol on discrete and register
23171 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
23172 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
23173 @item asynchronous and synchronous versions
23174 @item payload builder/decoder utilities
23175 @item pymodbus read eval print loop (REPL).
23176 @end itemize
23177 It also includes the following @emph{server} features:
23178 @itemize
23179 @item can function as a fully implemented Modbus server
23180 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
23181 @item asynchronous and synchronous versions
23182 @item full server control context (device information, counters, etc)
23183 @item a number of backing contexts (database, redis, sqlite, a slave device).
23184 @end itemize")
23185 (license license:bsd-3)))
23186
23187(define-public python-exodriver
23188 (package
23189 (name "python-exodriver")
23190 (version "2.6.0")
23191 (source (origin
23192 (method git-fetch)
23193 (uri (git-reference
23194 (url "https://github.com/labjack/exodriver")
23195 (commit (string-append "v" version))))
23196 (file-name (git-file-name name version))
23197 (sha256
23198 (base32
23199 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
23200 (outputs (list "out"
23201 "doc")) ;544 KiB of examples
23202 (build-system gnu-build-system)
23203 (arguments
23204 (list
23205 #:tests? #f ;no test suite
23206 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
23207 (string-append "PREFIX=" #$output)
23208 "RUN_LDCONFIG=0"
23209 "LINK_SO=1")
23210 #:phases
23211 #~(modify-phases %standard-phases
23212 (delete 'configure)
23213 (replace 'build
23214 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
23215 (with-directory-excursion "liblabjackusb"
23216 (apply (assoc-ref %standard-phases 'build)
23217 `(,@args #:make-flags ,make-flags)))))
23218 (replace 'install
23219 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
23220 (with-directory-excursion "liblabjackusb"
23221 (apply (assoc-ref %standard-phases 'install)
23222 `(,@args #:make-flags ,make-flags)))
23223 ;; Install udev rules.
23224 (install-file "90-labjack.rules"
23225 (string-append #$output "/lib/udev/rules.d"))
23226 ;; Install examples.
23227 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
23228 (mkdir-p doc)
23229 (copy-recursively "examples"
23230 (string-append doc "/examples"))))))))
23231 (inputs (list libusb))
23232 (home-page "https://github.com/labjack/exodriver")
23233 (synopsis "USB driver for LabJack data acquisition instruments")
23234 (description "This package provides @code{liblabjackusb}, a USB library for low-level
23235communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
23236instruments. A udev rule is also included to allow unprivileged users to
23237communicate with the instruments via USB.")
23238 (license license:expat))) ;see README
23239
23240(define-public python-labjack
23241 (package
23242 (name "python-labjack")
23243 (version "2.1.0")
23244 (source (origin
23245 (method url-fetch)
23246 (uri (pypi-uri "LabJackPython" version))
23247 (sha256
23248 (base32
23249 "0q516y0gzxlk298whiaw0qdi4jcmx7l5y3mp5g5lj68nrvhqzyy4"))))
23250 (build-system pyproject-build-system)
23251 (arguments
23252 (list
23253 #:tests? #f ;no test suite
23254 #:phases
23255 #~(modify-phases %standard-phases
23256 (add-after 'unpack 'patch-liblabjackusb.so
23257 (lambda* (#:key inputs #:allow-other-keys)
23258 (substitute* (find-files "." "\\.py$")
23259 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
23260 (format #f "ctypes.CDLL(~s"
23261 (search-input-file inputs
23262 "lib/liblabjackusb.so")))))))))
23263 (native-inputs (list python-setuptools))
23264 ;; exodriver is provided as a regular input, as only its shared object is
23265 ;; used, not its Python API.
23266 (inputs (list python-exodriver))
23267 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
23268 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
23269 (description
23270 "This Python library allows communicating with the U3, U6, UE9 and U12
23271LabJack data acquisition (DAQ) modules.")
23272 (license license:expat))) ;see setup.py
23273
23274(define-public python-kivy-garden
23275 (package
23276 (name "python-kivy-garden")
23277 (version "0.1.5")
23278 (source
23279 (origin
23280 (method git-fetch) ; source was removed from PyPI
23281 (uri (git-reference
23282 (url "https://github.com/kivy-garden/garden")
23283 (commit (string-append "v" version))))
23284 (file-name (git-file-name name version))
23285 (sha256
23286 (base32 "1pvjblaljrcmjkq6hsa89zkh9ggdval58d2lwzd69vlma8y03qy4"))))
23287 (build-system pyproject-build-system)
23288 (arguments
23289 (list
23290 #:tests? #f)) ; no tests in PyPI or Git distributions
23291 (native-inputs
23292 (list python-setuptools
23293 python-wheel))
23294 (propagated-inputs
23295 (list python-requests))
23296 (home-page "https://github.com/kivy-garden/garden")
23297 (synopsis "Garden tool for Kivy flowers")
23298 (description
23299 "This package provides the @command{garden} command to install packages
23300for Kivy, the multitouch application platform.")
23301 (license license:expat)))
23302
23303(define-public python-async-lru
23304 (package
23305 (name "python-async-lru")
23306 (version "2.0.4")
23307 (source
23308 (origin
23309 (method url-fetch)
23310 (uri (pypi-uri "async-lru" version))
23311 (sha256
23312 (base32 "09sn3bc3gc2flijm9k8kn4hmbnlkaddhqahb49izy188yrfrm9dq"))))
23313 (build-system pyproject-build-system)
23314 (native-inputs
23315 (list python-pytest
23316 python-pytest-asyncio
23317 python-pytest-cov
23318 python-pytest-timeout
23319 python-setuptools
23320 python-wheel))
23321 (propagated-inputs
23322 (list python-typing-extensions))
23323 (home-page "https://github.com/aio-libs/async-lru")
23324 (synopsis "Simple LRU cache for asyncio")
23325 (description
23326 "This package is a port of Python's built-in @code{functools.lru_cache}
23327function for @code{asyncio}. To better handle async behaviour, it also
23328ensures multiple concurrent calls will only result in 1 call to the wrapped
23329function, with all awaits receiving the result of that call when it
23330completes.")
23331 (license license:expat)))
23332
23333(define-public python-asyncinject
23334 (package
23335 (name "python-asyncinject")
23336 (version "0.6")
23337 (source
23338 (origin
23339 (method url-fetch)
23340 (uri (pypi-uri "asyncinject" version))
23341 (sha256
23342 (base32 "0x57idiy19lzyn32klgm06r223z8gr2aqqk91gysbshq7jg8g3pf"))))
23343 (build-system pyproject-build-system)
23344 (native-inputs (list python-pytest python-pytest-asyncio
23345 python-setuptools python-wheel))
23346 (home-page "https://github.com/simonw/asyncinject")
23347 (synopsis
23348 "Run async workflows using pytest-fixtures-style dependency injection")
23349 (description
23350 "This package lets you run asynchronous workflows using
23351pytest-fixtures-style dependency injection.")
23352 (license license:asl2.0)))
23353
23354(define-public python-binaryornot
23355 (package
23356 (name "python-binaryornot")
23357 (version "0.4.4")
23358 (source
23359 (origin
23360 (method url-fetch)
23361 (uri (pypi-uri "binaryornot" version))
23362 (sha256
23363 (base32 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
23364 (build-system pyproject-build-system)
23365 (arguments
23366 (list
23367 #:test-backend #~'unittest
23368 #:test-flags #~(list "discover" "tests")
23369 #:phases
23370 #~(modify-phases %standard-phases
23371 (add-after 'unpack 'patch-tests
23372 (lambda _
23373 ;; TypeError: binary() got an unexpected keyword argument
23374 ;; 'average_size'.
23375 (substitute* "tests/test_check.py"
23376 (("average_size=512") "")))))))
23377 (native-inputs
23378 (list python-hypothesis
23379 python-setuptools))
23380 (propagated-inputs
23381 (list python-chardet))
23382 (home-page "https://github.com/audreyr/binaryornot")
23383 (synopsis "Package to check if a file is binary or text")
23384 (description "Ultra-lightweight pure Python package to check if a file is
23385 binary or text.")
23386 (license license:bsd-3)))
23387
23388(define-public python-bson
23389 (package
23390 (name "python-bson")
23391 (version "0.5.10")
23392 (source
23393 (origin
23394 (method git-fetch) ;for tests
23395 (uri (git-reference
23396 (url "https://github.com/py-bson/bson")
23397 (commit version)))
23398 (file-name (git-file-name name version))
23399 (sha256
23400 (base32
23401 "1vpy4rsvm3hhawvbg9rbw4j36ck8qylkhm8cjy0q6imvinkd2als"))))
23402 (build-system pyproject-build-system)
23403 (native-inputs
23404 (list python-pytest
23405 python-setuptools))
23406 (propagated-inputs
23407 (list python-dateutil
23408 python-six))
23409 (home-page "https://github.com/py-bson/bson")
23410 (synopsis "BSON (Binary JSON) codec for Python")
23411 (description "@code{bson} is a Python library implementing a BSON (Binary
23412JSON) codec.")
23413 (license license:asl2.0)))
23414
23415(define-public python-nltk
23416 (package
23417 (name "python-nltk")
23418 (version "3.9.1")
23419 (source
23420 (origin
23421 (method url-fetch)
23422 (uri (pypi-uri "nltk" version))
23423 (sha256
23424 (base32 "0s78gayd45vl1wvpa0a44ydij6ybb7xfar8jz2j8kgg47nyjglc7"))))
23425 (build-system pyproject-build-system)
23426 (arguments
23427 ;; Tests require some extra resources to be downloaded.
23428 ;; TODO Try packaging these resources.
23429 '(#:tests? #f))
23430 (propagated-inputs (list python-click python-joblib python-regex
23431 python-tqdm))
23432 (native-inputs (list python-setuptools python-wheel))
23433 (home-page "https://www.nltk.org/")
23434 (synopsis "Natural Language Toolkit")
23435 (description
23436 "NLTK provides interfaces to over 50 corpora and lexical resources such as
23437WordNet, along with a suite of text processing libraries for classification,
23438tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for
23439natural language processing libraries.")
23440 (license license:asl2.0)))
23441
23442(define-public python-pymongo
23443 (package
23444 (name "python-pymongo")
23445 (version "4.16.0")
23446 (source
23447 (origin
23448 (method url-fetch)
23449 (uri (pypi-uri "pymongo" version))
23450 (sha256
23451 (base32 "0330bj24xl0yq19p330p28x3i3x2jzbn5zkjz2k5iqpncm841a4b"))))
23452 (build-system pyproject-build-system)
23453 (arguments
23454 (list
23455 ;; tests: 1274 passed, 6231 skipped, 1441 deselected, 2 warnings
23456 #:test-flags
23457 ;; Tests need access to /etc/resolve.conf.
23458 #~(list "--ignore=test/asynchronous/test_srv_polling.py"
23459 "--ignore=test/test_srv_polling.py"
23460 "-k" (string-join
23461 ;; Tests need access to /etc/resolve.conf
23462 (list "not test_connection_timeout_ms_propagates_to_DNS_resolver"
23463 "test_detected_environment_warning"
23464 ;; XXX: Tests fail with assertion is not equal.
23465 "test_test_uri_options_srv-options_SRV_URI_with_custom_srvServiceName"
23466 "test_test_uri_options_srv-options_SRV_URI_with_invalid_type_for_srvMaxHosts"
23467 "test_test_uri_options_srv-options_SRV_URI_with_negative_integer_for_srvMaxHosts"
23468 "test_test_uri_options_srv-options_SRV_URI_with_positive_srvMaxHosts_and_loadBalanced"
23469 "test_test_uri_options_srv-options_SRV_URI_with_srvMaxHosts")
23470 " and not "))))
23471 (native-inputs
23472 (list python-hatch-requirements-txt
23473 python-hatchling
23474 python-pytest
23475 python-pytest-asyncio
23476 python-setuptools))
23477 (propagated-inputs
23478 (list python-certifi
23479 python-dnspython))
23480 (home-page "https://github.com/mongodb/mongo-python-driver")
23481 (synopsis "Python driver for MongoDB")
23482 (description "Python driver for MongoDB.")
23483 (license license:asl2.0)))
23484
23485(define-public python-py-consul
23486 (package
23487 (name "python-py-consul")
23488 (version "1.6.0")
23489 (source
23490 (origin
23491 (method git-fetch)
23492 (uri (git-reference
23493 ;; Fork from https://github.com/cablehead/python-consul
23494 (url "https://github.com/criteo/py-consul")
23495 (commit (string-append "v" version))))
23496 (file-name (git-file-name name version))
23497 (sha256
23498 (base32 "0jx0sx572akir5ks30d1hvxwmy2apc51idm5k73dfp9biyjhbllh"))))
23499 (build-system pyproject-build-system)
23500 (arguments (list #:tests? #f)) ; Tests require docker.
23501 (native-inputs (list python-setuptools))
23502 (propagated-inputs (list python-requests))
23503 (home-page "https://github.com/criteo/py-consul")
23504 (synopsis "Python client for Consul")
23505 (description
23506 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
23507discovery, monitoring and configuration.")
23508 (license license:expat)))
23509
23510(define-deprecated-package python-consul python-py-consul)
23511
23512(define-public python-schematics
23513 (package
23514 (name "python-schematics")
23515 (version "2.1.1")
23516 (source
23517 (origin
23518 (method git-fetch)
23519 (uri (git-reference
23520 (url "https://github.com/schematics/schematics")
23521 (commit (string-append "v" version))))
23522 (file-name (git-file-name name version))
23523 (sha256
23524 (base32 "0nf14wy422f08zzxx4jv8kbym3asgfpjm7b2p51b8hgqgxqlmjcd"))))
23525 (build-system pyproject-build-system)
23526 (native-inputs
23527 (list python-dateutil python-mock python-pytest python-setuptools))
23528 (home-page "https://github.com/schematics/schematics")
23529 (synopsis "Python Data Structures for Humans")
23530 (description
23531 "Schematics is a Python library to combine types into structures,
23532validate them, and transform the shapes of your data based on simple
23533descriptions.
23534
23535The internals are similar to ORM type systems, but there is no database layer
23536in Schematics. Instead, building a database layer is easily made when
23537Schematics handles everything except for writing the query. Schematics can be
23538used for tasks where having a database involved is unusual.")
23539 (license license:bsd-3)))
23540
23541(define-public python-odfpy
23542 (package
23543 (name "python-odfpy")
23544 (version "1.4.2")
23545 (source
23546 (origin
23547 (method git-fetch)
23548 (uri (git-reference
23549 (url "https://github.com/eea/odfpy")
23550 (commit (string-append "release-" version))))
23551 (file-name (git-file-name name version))
23552 (sha256
23553 (base32 "15y0fvkk8akgx30dxld7mdqhdrrkwr16jy1q0znkzvwcgmpywrf4"))))
23554 (build-system pyproject-build-system)
23555 (native-inputs (list python-pytest python-setuptools))
23556 (propagated-inputs (list python-defusedxml))
23557 (home-page "https://github.com/eea/odfpy")
23558 (synopsis "Python API and tools to manipulate OpenDocument files")
23559 (description
23560 "Collection of libraries and utility programs written in Python to
23561manipulate OpenDocument 1.2 files.")
23562 (license
23563 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
23564 ;; number of files with other licenses.
23565 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
23566
23567(define-public python-namex
23568 (package
23569 (name "python-namex")
23570 (version "0.0.7")
23571 (source
23572 (origin
23573 (method url-fetch)
23574 (uri (pypi-uri "namex" version))
23575 (sha256
23576 (base32 "16ynrq245c3nywv476izrc4bcacm9gxjzgr67ng91g929ny6bfl4"))))
23577 (build-system pyproject-build-system)
23578 (arguments (list #:tests? #false)) ;there are none
23579 (native-inputs (list python-setuptools python-wheel))
23580 (home-page "https://github.com/fchollet/namex")
23581 (synopsis
23582 "Separate implementation and public API surface of Python packages")
23583 (description
23584 "This package provides a simple utility to separate the
23585implementation of your Python package and its public API surface.")
23586 (license license:asl2.0)))
23587
23588(define-public python-natsort
23589 (package
23590 (name "python-natsort")
23591 (version "8.4.0")
23592 (source
23593 (origin
23594 (method url-fetch)
23595 (uri (pypi-uri "natsort" version))
23596 (sha256
23597 (base32 "10d53q50zn2s8iiszv01nr9r4imimc2dvplkl4ymj1sm1r52qca5"))))
23598 (build-system pyproject-build-system)
23599 (native-inputs
23600 (list glibc-utf8-locales ;; Tests want en_US.UTF-8
23601 python-pytest
23602 python-pytest-mock
23603 python-setuptools))
23604 (propagated-inputs
23605 (list python-fastnumbers
23606 python-pyicu))
23607 (home-page "https://github.com/SethMMorton/natsort")
23608 (synopsis "Natural sorting for python and shell")
23609 (description
23610 "Natsort lets you apply natural sorting on lists instead of
23611lexicographical. If you use the built-in @code{sorted} method in python on a
23612list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
23613it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
23614@code{a9}]}. Natsort provides a function @code{natsorted} that identifies
23615numbers and sorts them separately from strings. It can also sort version
23616numbers, real numbers, mixed types and more, and comes with a shell command
23617@command{natsort} that exposes this functionality in the command line.")
23618 (license license:expat)))
23619
23620(define-public python-graphql-core
23621 (package
23622 (name "python-graphql-core")
23623 (version "3.1.2")
23624 (source
23625 (origin
23626 (method url-fetch)
23627 (uri (pypi-uri "graphql-core" version))
23628 (sha256
23629 (base32
23630 "0fjv5w2wvgdr8gb27v241bavliipyir9fdz48rsgc3xapm644mn0"))))
23631 (build-system pyproject-build-system)
23632 (arguments
23633 (list
23634 #:phases
23635 '(modify-phases %standard-phases
23636 (add-after 'unpack 'use-poetry-core
23637 (lambda _
23638 ;; Patch to use the core poetry API.
23639 (substitute* "pyproject.toml"
23640 (("poetry.masonry.api")
23641 "poetry.core.masonry.api")
23642 ;; Poetry does not like line breaks.
23643 (("description = \"\"\"")
23644 "description = \"GraphQL-core is a Python port of GraphQL.js.\"\n")
23645 (("^GraphQL-core is a Python.*") "")
23646 (("^ the JavaScript reference.*") ""))))
23647 (add-after 'unpack 'patch-setup.py
23648 (lambda _
23649 (substitute* "setup.py"
23650 ;; Relax hardcoded version
23651 (("'gevent==1.1rc1'") "'gevent'")
23652 ;; Poetry complains about this line break.
23653 (("a port of GraphQL.js,\"")
23654 (string-append "a port of GraphQL.js, "
23655 "the JavaScript reference implementation for GraphQL."))
23656 ((" \" the JavaScript reference.*") "")))))))
23657 (native-inputs
23658 (list python-gevent
23659 python-mock
23660 python-poetry-core
23661 python-pytest
23662 python-pytest-benchmark
23663 python-pytest-mock))
23664 (propagated-inputs
23665 (list python-promise python-six))
23666 (home-page "https://github.com/graphql-python/graphql-core")
23667 (synopsis "GraphQL implementation for Python")
23668 (description
23669 "GraphQL implementation for Python. GraphQL is a data query language and
23670 runtime designed and used to request and deliver data to mobile and web apps.
23671 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
23672 to Python.")
23673 (license license:expat)))
23674
23675(define-public python-graphql-relay
23676 (package
23677 (name "python-graphql-relay")
23678 (version "3.1.0")
23679 (source
23680 (origin
23681 (method git-fetch)
23682 (uri (git-reference
23683 (url "https://github.com/graphql-python/graphql-relay-py")
23684 (commit (string-append "v" version))))
23685 (file-name (git-file-name name version))
23686 (sha256
23687 (base32 "06ybi4bwqdffa5kn8xnns06wh3l0zj3qlzrxk1wpxqq320hyzx9x"))))
23688 (build-system pyproject-build-system)
23689 (arguments (list #:test-flags #~(list "tests")))
23690 (native-inputs
23691 (list python-pytest python-pytest-asyncio python-poetry-core))
23692 (propagated-inputs (list python-graphql-core))
23693 (home-page "https://github.com/graphql-python/graphql-relay-py")
23694 (synopsis "Relay implementation for Python")
23695 (description
23696 "This is a library to allow the easy creation of Relay-compliant servers
23697using the GraphQL Python reference implementation of a GraphQL server. It
23698should be noted that the code is a exact port of the original
23699@url{https://github.com/graphql/graphql-relay-js,graphql-relay js
23700implementation} from Facebook.")
23701 (license license:expat)))
23702
23703(define-public python-graphene
23704 (package
23705 (name "python-graphene")
23706 (version "3.4.3")
23707 (source
23708 (origin
23709 (method url-fetch)
23710 (uri (pypi-uri "graphene" version))
23711 (sha256
23712 (base32 "1aha3bnrafxd823q4swdmlvbprfb17v3fga4g3hffpz7ija8cdra"))))
23713 (build-system pyproject-build-system)
23714 (arguments
23715 (list #:tests? #f)) ;XXX: tests fail to load
23716 (native-inputs
23717 (list python-setuptools))
23718 (propagated-inputs
23719 (list python-dateutil
23720 python-graphql-core
23721 python-graphql-relay
23722 python-typing-extensions))
23723 (home-page "https://graphene-python.org/")
23724 (synopsis "GraphQL Framework for Python")
23725 (description
23726 "Graphene is a Python library for building GraphQL schemas/types. A
23727GraphQL schema describes your data model, and provides a GraphQL server with
23728an associated set of resolve methods that know how to fetch data.")
23729 (license license:expat)))
23730
23731(define-public python-rodi
23732 (package
23733 (name "python-rodi")
23734 (version "2.0.8")
23735 (source
23736 (origin
23737 (method git-fetch)
23738 (uri (git-reference
23739 (url "https://github.com/Neoteroi/rodi")
23740 (commit (string-append "v" version))))
23741 (file-name (git-file-name name version))
23742 (sha256
23743 (base32 "0kf98yjllrq7vqcp07r2gmkqcviqglsnai3sdigdsrwrfc0b44yp"))))
23744 (build-system pyproject-build-system)
23745 (native-inputs
23746 (list python-hatchling
23747 python-pytest
23748 python-pytest-asyncio))
23749 (home-page "https://github.com/Neoteroi/rodi")
23750 (synopsis "Dependency injection framework for Python")
23751 (description
23752 "Rodi is a dependency injection framework for Python applications.
23753
23754Its features include
23755
23756@itemize
23757@item Type resolution by signature types annotations.
23758@item Type resolution by class annotations.
23759@item Type resolution by names and aliases.
23760@item Build graph of objects without the need for source code changes.
23761@item Minimum overhead to obtain services, once the objects graph is built.
23762@item Support for singleton, transient, and scoped services.
23763@end itemize")
23764 (license license:expat)))
23765
23766;; XXX: The last time updated in 2015, consider to remove it when nothing is
23767;; depend on it.
23768(define-public python-snowballstemmer
23769 (package
23770 (name "python-snowballstemmer")
23771 (version "2.2.0")
23772 (source
23773 (origin
23774 (method url-fetch)
23775 (uri (pypi-uri "snowballstemmer" version))
23776 (sha256
23777 (base32 "1ccwy75i0f5yi1vy6fyvr1gf43ydhjani45mswm43ls7hpmnvc89"))))
23778 (build-system pyproject-build-system)
23779 (arguments
23780 (list
23781 #:tests? #f)) ; no tests
23782 (native-inputs
23783 (list python-setuptools
23784 python-wheel))
23785 (home-page "https://github.com/shibukawa/snowball_py")
23786 (synopsis "Snowball stemming library collection for Python")
23787 (description
23788 "This package provides 16 word stemmer algorithms generated from Snowball
23789algorithms. It includes the 15 original ones plus the Poerter English
23790stemmer.")
23791 (license license:bsd-3)))
23792
23793(define-public python-setproctitle
23794 (package
23795 (name "python-setproctitle")
23796 (version "1.3.7")
23797 (source
23798 (origin
23799 (method git-fetch)
23800 (uri (git-reference
23801 (url "https://github.com/dvarrazzo/py-setproctitle")
23802 (commit (string-append "version-" version))))
23803 (file-name (git-file-name name version))
23804 (sha256
23805 (base32 "0k51ypmr2p2c55dyl2pq3dclih9jk2zx7dxm8010li4pyfsrvwvm"))))
23806 (build-system pyproject-build-system)
23807 (arguments
23808 (list
23809 #:phases
23810 #~(modify-phases %standard-phases
23811 (add-before 'check 'configure-tests
23812 (lambda* (#:key tests? #:allow-other-keys)
23813 (when tests?
23814 (setenv "PYTHON"
23815 (or (which "python3")
23816 (which "python")))
23817 (setenv "PYCONFIG"
23818 (if (which "python3-config")
23819 "python3-config --embed"
23820 "python-config"))
23821 (substitute* "tests/conftest.py"
23822 (("cc") "gcc"))))))))
23823 (native-inputs (list procps python-pytest python-setuptools)) ;required for tests
23824 (home-page "https://github.com/dvarrazzo/py-setproctitle")
23825 (synopsis
23826 "Setproctitle implementation for Python to customize the process title")
23827 (description
23828 "The library allows a process to change its title (as displayed by system
23829tools such as @code{ps} and @code{top}).
23830
23831Changing the title is mostly useful in multi-process systems, for example when a
23832master process is forked: changing the children's title allows identifying the
23833task each process is busy with. The technique is used by PostgreSQL and the
23834OpenSSH Server for example.")
23835 (license license:bsd-3)))
23836
23837(define-public python-pyelftools
23838 (package
23839 (name "python-pyelftools")
23840 (version "0.32")
23841 (source
23842 (origin
23843 (method git-fetch)
23844 (uri (git-reference
23845 (url "https://github.com/eliben/pyelftools")
23846 (commit (string-append "v" version))))
23847 (file-name (git-file-name name version))
23848 (sha256
23849 (base32 "0wx18rj5hcra45ck407vfvg46rs1qcj3qjhfkprf6264zs6z1i77"))
23850 (snippet
23851 #~(begin
23852 ;; Delete bundled readelf and llvm-dwardump executables. Project
23853 ;; also ships quite a lot binary files mainly for tests, check
23854 ;; with:
23855 ;;
23856 ;; find . -type f ! -size 0 -exec grep -IL . "{}" \;
23857 ;;
23858 (delete-file "test/external_tools/readelf")
23859 (delete-file "test/external_tools/llvm-dwarfdump")))))
23860 (build-system pyproject-build-system)
23861 (arguments
23862 (list
23863 #:phases
23864 #~(modify-phases %standard-phases
23865 (replace 'check
23866 (lambda* (#:key tests? #:allow-other-keys)
23867 (when tests?
23868 ;; Run just basic unit and example tests, dwarfdump and
23869 ;; readelf tests are not selected as they are fragile and
23870 ;; arch-specific.
23871 (invoke "python" "test/run_all_unittests.py")
23872 (invoke "python" "test/run_examples_test.py")))))))
23873 (home-page "https://github.com/eliben/pyelftools")
23874 (native-inputs
23875 (list python-setuptools
23876 python-wheel))
23877 (synopsis "Analyze binary and library file information")
23878 (description
23879 "This Python library provides interfaces for parsing and analyzing two
23880binary and library file formats ; the Executable and Linking Format (ELF), and
23881debugging information in the Debugging With Attributed Record
23882Format (DWARF).")
23883 (license license:public-domain)))
23884
23885(define-public python-pefile
23886 (package
23887 (name "python-pefile")
23888 (version "2024.8.26")
23889 (source
23890 (origin
23891 (method git-fetch)
23892 (uri (git-reference
23893 (url "https://github.com/erocarrera/pefile")
23894 (commit (string-append "v" version))))
23895 (file-name (git-file-name name version))
23896 (sha256
23897 (base32 "14bh23b7jipf2pxjivyn2khifal6fmk0pjsddrd3h1gd9n0wl9zd"))
23898 (snippet #~(delete-file "tests/test_data.tar.bz2.enc"))))
23899 (build-system pyproject-build-system)
23900 (arguments
23901 ;; XXX: Taken from tox.ini. Unclear why devs don't supply test data.
23902 ;; It seems clear however that test_data.tar.bz2.enc needs to be
23903 ;; decrypted and unpacked before we can run them.
23904 (list #:test-flags #~(list "--ignore=tests/pefile_test.py")))
23905 (native-inputs (list python-pytest python-setuptools))
23906 (propagated-inputs (list python-future))
23907 (home-page "https://github.com/erocarrera/pefile")
23908 (synopsis "Portable Executable (PE) file parser")
23909 (description
23910 "This python library provides interfaces for parsing and working with
23911Portable Executable (PE) files. It makes to most information from the header,
23912as well as section details and data available.")
23913 (license license:expat)))
23914
23915(define-public python-pyemd
23916 (package
23917 (name "python-pyemd")
23918 (version "1.0.0")
23919 (source (origin
23920 (method url-fetch)
23921 (uri (pypi-uri "pyemd" version))
23922 (sha256
23923 (base32
23924 "1zh0v47lxa33xg04jyvblzl1g4m3k2khx0b3xr6isnyinbkmlaxl"))))
23925 (build-system pyproject-build-system)
23926 (native-inputs
23927 (list python-cython
23928 python-pytest
23929 python-setuptools
23930 python-setuptools-scm))
23931 (propagated-inputs
23932 (list python-numpy-1))
23933 (home-page "https://github.com/wmayner/pyemd")
23934 (synopsis
23935 "Wrapper for Pele and Werman's implementation of the Earth Mover's Distance")
23936 (description
23937 "This package provides a Python wrapper for Ofir Pele and Michael
23938Werman's implementation of the Earth Mover's Distance.")
23939 (license license:expat)))
23940
23941(define-public python-imagesize
23942 (package
23943 (name "python-imagesize")
23944 (version "1.4.1")
23945 (source
23946 (origin
23947 (method url-fetch)
23948 (uri (pypi-uri "imagesize" version))
23949 (sha256
23950 (base32 "0jndjx26p8qibrx997p3kb6vfbqbdxkv74jsrkav177vmx2085b9"))))
23951 (build-system pyproject-build-system)
23952 (arguments (list #:test-backend #~'unittest))
23953 (native-inputs
23954 (list python-setuptools
23955 python-wheel))
23956 (home-page "https://github.com/shibukawa/imagesize_py")
23957 (synopsis "Gets image size of files in various formats in Python")
23958 (description
23959 "This package allows determination of image size from PNG, JPEG,
23960JPEG2000 and GIF files in pure Python.")
23961 (license license:expat)))
23962
23963(define-public python-argcomplete
23964 (package
23965 (name "python-argcomplete")
23966 (version "3.6.2")
23967 (source
23968 (origin
23969 (method url-fetch)
23970 (uri (pypi-uri "argcomplete" version))
23971 (sha256
23972 (base32
23973 "1pvavik22prqdyqid5s40zqab93kp85ash9wf7sg9xb7r0drnlfh"))))
23974 (build-system pyproject-build-system)
23975 (arguments
23976 (list
23977 #:test-backend #~'custom
23978 #:test-flags #~(list "test/test.py" "-v")
23979 #:phases
23980 #~(modify-phases %standard-phases
23981 (add-before 'check 'disable-pip-tests
23982 (lambda _
23983 ;; pip: command not found
23984 (substitute* "test/test.py"
23985 (("def test_console_script")
23986 "def __disable_test_console_script")))))))
23987 (native-inputs
23988 (list python-hatch-vcs
23989 python-hatchling
23990 python-pexpect
23991 tcsh
23992 fish
23993 bash ;full Bash for 'test_file_completion'
23994 zsh))
23995 (home-page "https://github.com/kislyuk/argcomplete")
23996 (synopsis "Shell tab completion for Python argparse")
23997 (description "argcomplete provides extensible command line tab completion
23998of arguments and options for Python scripts using @code{argparse}. It's
23999particularly useful for programs with many options or sub-parsers that can
24000dynamically suggest completions ; for example, when browsing resources over
24001the network.")
24002 (license license:asl2.0)))
24003
24004(define-public python-csscompressor
24005 (package
24006 (name "python-csscompressor")
24007 (version "0.9.5")
24008 (source
24009 (origin
24010 (method git-fetch)
24011 (uri (git-reference
24012 (url "https://github.com/sprymix/csscompressor")
24013 (commit (string-append "v" version))))
24014 (file-name (git-file-name name version))
24015 (sha256
24016 (base32 "1gzzb474lgs8l539z2vyyvcvm1j7nxxnb5jk79ys63ysbg4jwmz8"))))
24017 (build-system pyproject-build-system)
24018 (native-inputs (list python-pytest python-setuptools))
24019 (home-page "https://github.com/sprymix/csscompressor")
24020 (synopsis "Python port of YUI CSS Compressor")
24021 (description "This package provides a python port of YUI CSS Compressor.")
24022 (license license:bsd-3)))
24023
24024(define-public python-rcssmin
24025 (package
24026 (name "python-rcssmin")
24027 (version "1.2.0")
24028 (source
24029 (origin
24030 (method url-fetch)
24031 (uri (pypi-uri "rcssmin" version))
24032 (sha256
24033 (base32
24034 "0k68sw163vc36nb3nck0kwwal4vb4hi6634rzx7z19ng28j8fdpl"))))
24035 (build-system pyproject-build-system)
24036 (native-inputs (list python-pytest python-setuptools python-wheel))
24037 (home-page "http://opensource.perlig.de/rcssmin/")
24038 (synopsis "CSS Minifier")
24039 (description "The minifier is based on the semantics of the YUI compressor,
24040 which itself is based on the rule list by Isaac Schlueter.")
24041 (license license:asl2.0)))
24042
24043(define-public python-rjsmin
24044 (package
24045 (name "python-rjsmin")
24046 (version "1.2.3")
24047 (source
24048 (origin
24049 (method url-fetch)
24050 (uri (pypi-uri "rjsmin" version))
24051 (sha256
24052 (base32
24053 "1ihcff58vz4xrv1180v46wy5m80z61y7ab8ajyy4zh54jcjbb20k"))
24054 (modules '((guix build utils)))
24055 (snippet
24056 '(for-each delete-file (find-files "bench" "\\.js$")))))
24057 (build-system pyproject-build-system)
24058 (native-inputs
24059 (list python-pytest python-setuptools python-wheel))
24060 (home-page "http://opensource.perlig.de/rjsmin/")
24061 (synopsis "Javascript Minifier")
24062 (description "@code{rJSmin} is a javascript minifier written in Python.
24063The minifier is based on the semantics of jsmin.c by Douglas Crockford. The
24064module is a re-implementation aiming for speed, so it can be used at
24065runtime (rather than during a preprocessing step).")
24066 (license license:asl2.0)))
24067
24068(define-public python-cheetah
24069 (package
24070 (name "python-cheetah")
24071 (version "3.3.1")
24072 (source
24073 (origin
24074 (method url-fetch)
24075 (uri (pypi-uri "CT3" version))
24076 (sha256
24077 (base32 "1j36vampqip18jx0jzngb9rnkhhhl8hqnscg117y0d6cgrgm57qw"))))
24078 (build-system pyproject-build-system)
24079 (arguments
24080 (list
24081 #:test-backend #~'custom
24082 #:test-flags #~(list "Cheetah/Tests/Test.py")
24083 #:phases
24084 #~(modify-phases %standard-phases
24085 (add-after 'unpack 'use-absolute-python
24086 (lambda _
24087 (substitute* "Cheetah/CheetahWrapper.py"
24088 (("#!/usr/bin/env python")
24089 (string-append "#!" (which "python"))))))
24090 (add-before 'check 'configure-tests
24091 (lambda* (#:key tests? #:allow-other-keys)
24092 (substitute* "Cheetah/Tests/ImportHooks.py"
24093 (("os.path.dirname\\(__file__\\)")
24094 (string-append "'" (getcwd) "/Cheetah/Tests'")))
24095 (substitute* "Cheetah/Tests/Test.py"
24096 (("unittest.TextTestRunner\\(\\)")
24097 "unittest.TextTestRunner(verbosity=2)"))
24098 (setenv "TMPDIR" "/tmp"))))))
24099 (native-inputs (list python-setuptools))
24100 (propagated-inputs (list python-markdown)) ;optional
24101 (home-page "https://cheetahtemplate.org/")
24102 (synopsis "Template engine")
24103 (description
24104 "Cheetah is a text-based template engine and Python code generator.
24105
24106 Cheetah can be used as a standalone templating utility or referenced as a
24107library from other Python applications. It has many potential uses, but web
24108developers looking for a viable alternative to ASP, JSP, PHP and PSP are
24109expected to be its principle user group.
24110
24111Features:
24112@enumerate
24113@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any
24114other text-based format.
24115@item Cleanly separates content, graphic design, and program code.
24116@item Blends the power and flexibility of Python with a simple template
24117language that non-programmers can understand.
24118@item Gives template writers full access to any Python data structure, module,
24119function, object, or method in their templates.
24120@item Makes code reuse easy by providing an object-orientated interface to
24121templates that is accessible from Python code or other Cheetah templates. One
24122template can subclass another and selectively reimplement sections of it.
24123@item Provides a simple, yet powerful, caching mechanism that can dramatically
24124improve the performance of a dynamic website.
24125@item Compiles templates into optimized, yet readable, Python code.
24126@end enumerate")
24127 (license (license:x11-style "file://LICENSE"))))
24128
24129(define-public python-chevron
24130 (package
24131 (name "python-chevron")
24132 (version "0.14.0")
24133 (source (origin
24134 (method url-fetch)
24135 (uri (pypi-uri "chevron" version))
24136 (sha256
24137 (base32
24138 "1gqfh00ics2k1sm5g46l3bi8cl5fc5d1cwzh1ylvcxvdvypklqc7"))))
24139 (build-system pyproject-build-system)
24140 (arguments (list #:tests? #false)) ;there are none
24141 (native-inputs (list python-setuptools python-wheel))
24142 (home-page "https://github.com/noahmorrison/chevron")
24143 (synopsis "Mustache templating language renderer")
24144 (description "This package provides a Python implementation of the
24145Mustache templating language renderer.")
24146 (license license:expat)))
24147
24148(define-public python-dulwich
24149 (package
24150 (name "python-dulwich")
24151 (version "0.21.7")
24152 (source
24153 (origin
24154 (method url-fetch)
24155 (uri (list (string-append "https://www.dulwich.io/releases/"
24156 "dulwich-" version ".tar.gz")
24157 (pypi-uri "dulwich" version)))
24158 (sha256
24159 (base32
24160 "0s79c3g19m052jbxm66amxv5v60ijx5px4hjmk1q19ff6dlcdsd9"))))
24161 (build-system pyproject-build-system)
24162 (arguments
24163 (list
24164 #:test-flags
24165 ;; DULWICH_SWIFT_CFG is not set.
24166 '(list "--ignore=dulwich/contrib/test_swift_smoke.py"
24167 "-k"
24168 ;; 'HTTPClient' object has no attribute 'get_base_url'
24169 "not test_init_connector")
24170 #:phases
24171 '(modify-phases %standard-phases
24172 (add-after 'unpack 'fix-tests
24173 (lambda* (#:key inputs #:allow-other-keys)
24174 (substitute* '("dulwich/tests/test_repository.py"
24175 "dulwich/tests/test_porcelain.py"
24176 "dulwich/tests/test_hooks.py")
24177 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
24178 (add-before 'check 'pre-check
24179 (lambda _ (setenv "PYTHONHASHSEED" "random"))))))
24180 (propagated-inputs
24181 (list python-fastimport python-urllib3))
24182 (native-inputs
24183 (list gnupg
24184 git-minimal/pinned
24185 python-geventhttpclient
24186 python-mypy
24187 python-paramiko
24188 python-pytest
24189 python-requests
24190 python-setuptools
24191 python-wheel))
24192 (home-page "https://www.dulwich.io/")
24193 (synopsis "Git implementation in Python")
24194 (description "Dulwich is an implementation of the Git file formats and
24195protocols written in pure Python.")
24196 ;; Can be used with either license.
24197 (license (list license:asl2.0 license:gpl2+))))
24198
24199(define-public python-dulwich-0.24
24200 (package/inherit python-dulwich
24201 (name "python-dulwich")
24202 (version "0.24.1")
24203 (source
24204 (origin
24205 (method url-fetch)
24206 (uri (pypi-uri "dulwich" version))
24207 (sha256
24208 (base32 "0n3p8jyxl4zwc63la10v8llc58fc5pcnfqdq9f1vn0hgy5jdi7z1"))))
24209 (build-system pyproject-build-system)
24210 (native-inputs
24211 (modify-inputs (package-native-inputs python-dulwich)
24212 (prepend python-setuptools-rust)))
24213 (arguments
24214 (list
24215 #:test-flags
24216 ;; DULWICH_SWIFT_CFG is not set.
24217 '(list "--ignore=tests/contrib/test_swift_smoke.py"
24218 ;; AttributeError: 'SwiftPackData' object has no attribute '_file'
24219 "--ignore=tests/contrib/test_swift.py"
24220 ;; No git repository was found at .
24221 "--ignore=tests/test_cli.py"
24222 ;; 'HTTPClient' object has no attribute 'get_base_url'
24223 ;; 'NoneType' object has no attribute 'Merge3'
24224 "--ignore=tests/test_cli_merge.py"
24225 "--ignore=tests/test_merge_drivers.py"
24226 "--ignore=tests/test_porcelain_cherry_pick.py"
24227 "--ignore=tests/test_porcelain_merge.py"
24228 "--ignore=tests/test_rebase.py"
24229 "--ignore=tests/test_repository.py"
24230 "--ignore=tests/test_worktree.py"
24231 "--ignore=tests/test_porcelain.py"
24232 "--ignore=tests/test_porcelain_filters.py"
24233 ;; False is not true (interesting capitalization?)
24234 "--ignore=tests/test_hooks.py")
24235 #:phases
24236 #~(modify-phases %standard-phases
24237 (add-after 'unpack 'patch-pyproject
24238 (lambda _
24239 ;; setuptools cannot handle both license and license-files
24240 (substitute* "pyproject.toml"
24241 (("^license = .*") "license = {text = \"Apache-2.0\"}\n")
24242 (("^license-files = .*") ""))))
24243 (add-before 'check 'pre-check
24244 (lambda* (#:key tests? #:allow-other-keys)
24245 (when tests?
24246 (setenv "HOME" "/tmp")))))))))
24247
24248(define-public python-dunamai
24249 (package
24250 (name "python-dunamai")
24251 (version "1.21.2")
24252 (source
24253 (origin
24254 (method url-fetch)
24255 (uri (pypi-uri "dunamai" version))
24256 (sha256
24257 (base32 "1i35i8ym6n8mpgrq31hivrvfciy12gv26jwlzimmkx9jy2spz0h5"))))
24258 (build-system pyproject-build-system)
24259 (arguments
24260 (list
24261 #:test-flags
24262 #~(list "-k" "not test__version__from_git__shallow")
24263 #:phases
24264 #~(modify-phases %standard-phases
24265 ;; These steps are taked from NixOS package definition:
24266 ;; nixpkgs/pkgs/development/python-modules/dunamai/default.nix
24267 (add-before 'check 'pre-check
24268 (lambda _
24269 (setenv "PATH" (string-append #$output "/bin:" (getenv "PATH")))
24270 (setenv "HOME" "/tmp")
24271 (invoke "git" "config" "--global" "user.email" "[email protected]")
24272 (invoke "git" "config" "--global" "user.name" "Nobody"))))))
24273 (propagated-inputs
24274 (list python-packaging))
24275 (native-inputs
24276 (list git-minimal
24277 python-poetry-core
24278 python-pytest))
24279 (home-page "https://github.com/mtkennerly/dunamai")
24280 (synopsis "Dynamic version generation")
24281 (description
24282 "Dunamai is Python library and command line tool for producing dynamic,
24283standards-compliant version strings, derived from tags in your version control
24284system. This facilitates uniquely identifying nightly or per-commit builds in
24285continuous integration and releasing new versions of your software simply by
24286creating a tag.")
24287 (license license:expat)))
24288
24289(define-public python-pbkdf2
24290 (package
24291 (name "python-pbkdf2")
24292 (version "1.3")
24293 (source
24294 (origin
24295 (method url-fetch)
24296 (uri (pypi-uri "pbkdf2" version))
24297 (sha256
24298 (base32 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
24299 (build-system pyproject-build-system)
24300 (arguments
24301 (list
24302 #:test-backend #~'custom
24303 #:test-flags #~(list "test/test_pbkdf2.py")))
24304 (native-inputs (list python-setuptools))
24305 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
24306 (synopsis "Password-based key derivation")
24307 (description
24308 "This module implements the password-based key derivation function,
24309PBKDF2, specified in RSA PKCS#5 v2.0.
24310
24311PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
24312is part of the RSA Public Key Cryptography Standards series. The provided
24313implementation takes a password or a passphrase and a salt value (and
24314optionally a iteration count, a digest module, and a MAC module) and provides
24315a file-like object from which an arbitrarily-sized key can be read.")
24316 (license license:expat)))
24317
24318(define-public python-qrcode
24319 (package
24320 (name "python-qrcode")
24321 (version "8.2")
24322 (source
24323 (origin
24324 (method url-fetch)
24325 (uri (pypi-uri "qrcode" version))
24326 (sha256
24327 (base32 "0v2h8vs1b80qhkc293w5dzvd439600ffzcznp5m16crb2yjg5hrm"))))
24328 (build-system pyproject-build-system)
24329 (native-inputs
24330 (list python-poetry-core
24331 python-pytest))
24332 (home-page "https://github.com/lincolnloop/python-qrcode")
24333 (synopsis "QR Code image generator")
24334 (description
24335 "This package provides a pure Python QR Code generator module. It uses
24336the Python Imaging Library (PIL) to allow for the generation of QR Codes.
24337
24338In addition this package provides a command line tool to generate QR codes and
24339either write these QR codes to a file or do the output as ascii art at the
24340console.")
24341 (license license:bsd-3)))
24342
24343(define-public python-rst2ansi
24344 (package
24345 (name "python-rst2ansi")
24346 (properties '((commit . "c6f390b45be689a5760060c990e3fe10f502e671")
24347 (revision . "0")))
24348 (version (git-version "0.1.5"
24349 (assoc-ref properties 'revision)
24350 (assoc-ref properties 'commit)))
24351 (source
24352 (origin
24353 (method git-fetch)
24354 (uri (git-reference
24355 (url "https://github.com/Snaipe/python-rst-to-ansi")
24356 (commit (assoc-ref properties 'commit))))
24357 (file-name (git-file-name name version))
24358 (sha256
24359 (base32 "0vsn1jjhm1hx0q5i954lyhny2yvn619am1di03aypfl0wm1mh7qd"))))
24360 (build-system pyproject-build-system)
24361 (arguments
24362 (list
24363 #:tests? #f ; 2 tests fail with additional line characters
24364 #:phases
24365 #~(modify-phases %standard-phases
24366 (replace 'check
24367 (lambda* (#:key tests? #:allow-other-keys)
24368 (when tests?
24369 (invoke "cram" "test" "-v")))))))
24370 (native-inputs (list python-cram python-setuptools))
24371 (propagated-inputs (list python-docutils))
24372 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
24373 (synopsis "Convert RST to ANSI-decorated console output")
24374 (description
24375 "Python module dedicated to rendering RST (reStructuredText) documents to
24376ansi-escaped strings suitable for display in a terminal.")
24377 (license license:expat)))
24378
24379(define-public python-ansi2html
24380 (package
24381 (name "python-ansi2html")
24382 (version "1.9.2")
24383 (source
24384 (origin
24385 (method url-fetch)
24386 (uri (pypi-uri "ansi2html" version))
24387 (sha256
24388 (base32 "19f0ap4w66b35csmx4k97pnb9fkdfnmgliajn0kvhdsxaf3vylrl"))))
24389 (build-system pyproject-build-system)
24390 (native-inputs
24391 (list python-mock
24392 python-pytest
24393 python-setuptools
24394 python-wheel))
24395 (home-page "https://github.com/ralphbean/ansi2html")
24396 (synopsis "Convert ANSI-decorated console output to HTML")
24397 (description
24398 "@command{ansi2html} is a Python library and command line utility for
24399converting text with ANSI color codes to HTML or LaTeX.")
24400 (license license:gpl3+)))
24401
24402(define-public python-easy-ansi
24403 (package
24404 (name "python-easy-ansi")
24405 (version "2.1")
24406 (source
24407 (origin
24408 (method git-fetch)
24409 (uri (git-reference
24410 (url "https://gitlab.com/joeysbytes/easy-ansi")
24411 (commit (string-append "v" version))))
24412 (file-name (git-file-name name version))
24413 (sha256
24414 (base32 "16zk4vyrr3hhb6aijmqchjlz181mgk7mi9zyyjd8i53h9rr00wkx"))))
24415 (build-system pyproject-build-system)
24416 (arguments
24417 (list
24418 #:phases
24419 #~(modify-phases %standard-phases
24420 (add-after 'install 'remove-extra
24421 (lambda* (#:key inputs outputs #:allow-other-keys)
24422 (with-directory-excursion (site-packages inputs outputs)
24423 (delete-file-recursively "tests")
24424 (delete-file "setup.py")))))))
24425 (native-inputs (list python-pytest python-setuptools))
24426 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
24427 (synopsis "Terminal framework API")
24428 (description
24429 "Easy ANSI is a terminal framework API to give you an easy way to use
24430colors, cursor control movements, and line/box drawing. It is not meant as a
24431replacement to more full-featured frameworks (such as curses or urwid), but as
24432a tool to quickly create nice-looking screens in your terminal window. You
24433can even create animations with the cursor controls.")
24434 (license license:expat)))
24435
24436(define-public python-easy-ansi-0.3
24437 (package
24438 (inherit python-easy-ansi)
24439 (name "python-easy-ansi")
24440 (version "0.3")
24441 (source
24442 (origin
24443 (method git-fetch)
24444 (uri (git-reference
24445 (url "https://gitlab.com/joeysbytes/easy-ansi")
24446 (commit (string-append "v" version))))
24447 (file-name (git-file-name name version))
24448 (sha256
24449 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
24450 (arguments '())))
24451
24452(define-public python-pycosat
24453 (package
24454 (name "python-pycosat")
24455 (version "0.6.6")
24456 (source
24457 (origin
24458 (method git-fetch)
24459 (uri (git-reference
24460 (url "https://github.com/ContinuumIO/pycosat")
24461 (commit version)))
24462 (file-name (git-file-name name version))
24463 (sha256
24464 (base32 "1p62d7fqny4ayr218lshrp35g75ljaxlgza9yr2hm44aqggvmqbw"))))
24465 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
24466 (build-system pyproject-build-system)
24467 (arguments (list #:test-backend #~'unittest))
24468 (native-inputs (list unzip python-setuptools))
24469 (home-page "https://github.com/ContinuumIO/pycosat")
24470 (synopsis "Bindings to picosat (a SAT solver)")
24471 (description
24472 "This package provides efficient Python bindings to @code{picosat} on the
24473C level. When importing pycosat, the @code{picosat} solver becomes part of
24474the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
24475Problem} (SAT) solver.")
24476 (license license:expat)))
24477
24478(define-public python-pypeg2
24479 (package
24480 (name "python-pypeg2")
24481 (version "2.15.2")
24482 (source
24483 (origin
24484 (method url-fetch)
24485 (uri (pypi-uri "pyPEG2" version))
24486 (sha256
24487 (base32 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
24488 (build-system pyproject-build-system)
24489 (native-inputs (list python-pytest python-setuptools))
24490 (propagated-inputs (list python-lxml))
24491 (home-page "https://fdik.org/pyPEG/")
24492 (synopsis "Parsing Expression Grammars in Python")
24493 (description
24494 "PyPEG is an intrinsic parser interpreter framework for Python. It is
24495based on Parsing Expression Grammars, PEG. With pyPEG you can parse many
24496formal languages.")
24497 (license license:gpl2)))
24498
24499(define-public python-pyformlang
24500 (package
24501 (name "python-pyformlang")
24502 (version "1.0.10")
24503 (source
24504 (origin
24505 (method url-fetch)
24506 (uri (pypi-uri "pyformlang" version))
24507 (sha256
24508 (base32 "0szgy4pqfixmswjs37qgma4qa3bsadpp3l1xflrpfi10aa8hh2sp"))))
24509 (build-system pyproject-build-system)
24510 (native-inputs
24511 (list python-pytest
24512 python-setuptools
24513 python-wheel))
24514 (propagated-inputs
24515 (list python-networkx
24516 python-numpy
24517 python-pydot))
24518 (home-page "https://github.com/Aunsiels/pyformlang")
24519 (synopsis "Framework for interacting with formal grammars")
24520 (description
24521 "This package provides a framework for working with formal
24522language grammars. The library was originally developed for educational
24523purposes and therefore implements many textbook algorithms regarding the
24524manipulation and interaction with formal grammars.")
24525 (license license:expat)))
24526
24527(define-public python-incremental
24528 (package
24529 (name "python-incremental")
24530 (version "24.7.2")
24531 (source
24532 (origin
24533 (method url-fetch)
24534 (uri (pypi-uri "incremental" version))
24535 (sha256
24536 (base32
24537 "1jb4skmy8awix345jk2pnar0sxmrf1gvn3kg9xyyivv0xr3iskzv"))))
24538 (build-system pyproject-build-system)
24539 (arguments
24540 ;; Tests require twisted, which needs this package.
24541 (list #:tests? #false
24542 #:build-backend "setuptools.build_meta"))
24543 (native-inputs
24544 (list python-setuptools))
24545 (home-page "https://github.com/hawkowl/incremental")
24546 (synopsis "Library for versioning Python projects")
24547 (description "Incremental is a small library that versions your Python
24548 projects.")
24549 (license license:expat)))
24550
24551(define-public python-invoke
24552 (package
24553 (name "python-invoke")
24554 (version "2.2.1")
24555 (source
24556 (origin
24557 (method url-fetch)
24558 (uri (pypi-uri "invoke" version))
24559 (sha256
24560 (base32 "01z73gmbmf5q3ynr3yfz894rrwr2v9406n94n1wjp4s89adz8nsi"))))
24561 ;; TODO: invoke/vendor contains:
24562 ;; - fluidity -> https://github.com/nsi-iff/fluidity (14y old)
24563 ;; - lexicon -> https://github.com/bitprophet/lexicon (2y old)
24564 ;; - yaml -> https://github.com/yaml/pyyaml (2y old)
24565 (build-system pyproject-build-system)
24566 (arguments
24567 (list
24568 ;; XXX: Requires many dependencies that are not yet in Guix.
24569 #:tests? #f
24570 #:phases
24571 #~(modify-phases %standard-phases
24572 (add-after 'unpack 'fix-bash-path
24573 (lambda _
24574 (let ((bash #$(this-package-input "bash-minimal")))
24575 (substitute* "invoke/config.py"
24576 (("shell = \"/bin/bash\"")
24577 (string-append "shell = \"" bash "/bin/bash\""))))))
24578 (add-after 'wrap 'fix-entry-points
24579 ;; TODO: Remove after https://codeberg.org/guix/guix/issues/4509
24580 ;; is fixed.
24581 (lambda _
24582 (substitute* (list (string-append #$output "/bin/.invoke-real")
24583 (string-append #$output "/bin/.inv-real"))
24584 (("from invoke.main import program.run")
24585 "from invoke.main import program")))))))
24586 (native-inputs
24587 (list python-setuptools
24588 python-wheel))
24589 (inputs
24590 (list bash-minimal))
24591 (home-page "https://www.pyinvoke.org/")
24592 (synopsis "Pythonic task execution")
24593 (description
24594 "Invoke is a Python task execution tool and library, drawing inspiration
24595from various sources to arrive at a powerful and clean feature set. It is
24596evolved from the Fabric project, but focuses on local and abstract concerns
24597instead of servers and network commands.")
24598 (license license:bsd-3)))
24599
24600(define-public python-automat
24601 (package
24602 (name "python-automat")
24603 (version "24.8.1")
24604 (source (origin
24605 (method url-fetch)
24606 (uri (pypi-uri "Automat" version))
24607 (sha256
24608 (base32
24609 "123d63k8wg9pfv9j7hr0kd1kw23m0rwdx7irsa55ncpncg7jfhmk"))))
24610 (build-system pyproject-build-system)
24611 (arguments
24612 (list
24613 #:phases
24614 #~(modify-phases %standard-phases
24615 (replace 'check
24616 (lambda* (#:key tests? test-flags #:allow-other-keys)
24617 (with-directory-excursion #$output
24618 (apply invoke "pytest" "-vv" test-flags))))
24619 ;; Remove script, because it depends on python-twisted.
24620 (add-after 'unpack 'remove-entrypoint
24621 (lambda _
24622 (substitute* "pyproject.toml"
24623 (("automat-visualize = \"automat._visualize:tool\"") "")))))))
24624 (native-inputs
24625 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
24626 (propagated-inputs
24627 (list python-graphviz python-typing-extensions))
24628 (home-page "https://github.com/glyph/Automat")
24629 (synopsis "Self-service finite-state machines")
24630 (description "Automat is a library for concise, idiomatic Python
24631 expression of finite-state automata (particularly deterministic finite-state
24632 transducers).")
24633 (license license:expat)))
24634
24635(define-public python-constantly
24636 (package
24637 (name "python-constantly")
24638 (version "23.10.4")
24639 (source
24640 (origin
24641 (method url-fetch)
24642 (uri (pypi-uri "constantly" version))
24643 (sha256
24644 (base32 "1gbw3izhn1gx1rgc61jbfr4dr535fxhynifp7jrhpb726c5bg4ma"))))
24645 (build-system pyproject-build-system)
24646 (arguments
24647 (list #:tests? #f)) ;cycles with python-twisted
24648 (native-inputs
24649 (list python-setuptools
24650 python-versioneer))
24651 (home-page "https://github.com/twisted/constantly")
24652 (synopsis "Symbolic constants in Python")
24653 (description "Constantly is a Python library that provides symbolic
24654 constant support. It includes collections and constants with text, numeric,
24655 and bit flag values.")
24656 (license license:expat)))
24657
24658(define-public python-attrs
24659 (package
24660 (name "python-attrs")
24661 (version "25.3.0")
24662 (source
24663 (origin
24664 (method url-fetch)
24665 (uri (pypi-uri "attrs" version))
24666 (sha256
24667 (base32 "06xgyhxzsc0h3l0pqlkk168f072a9lnl9d415ixp8xmmgzycxmvm"))))
24668 (build-system pyproject-build-system)
24669 (native-inputs
24670 (list python-hatch-fancy-pypi-readme
24671 python-hatch-vcs
24672 python-hatchling
24673 python-hypothesis
24674 python-pytest))
24675 (home-page "https://github.com/python-attrs/attrs/")
24676 (synopsis "Attributes without boilerplate")
24677 (description "@code{attrs} is a Python package with class decorators that
24678 ease the chores of implementing the most common attribute-related object
24679 protocols.")
24680 (license license:expat)))
24681
24682(define-public python-attrs-bootstrap
24683 (package
24684 (inherit python-attrs)
24685 (name "python-attrs-bootstrap")
24686 (native-inputs (list python-hatchling
24687 python-hatch-fancy-pypi-readme
24688 python-hatch-vcs))
24689 (arguments `(#:tests? #f))))
24690
24691(define-public python-cliapp
24692 (package
24693 (name "python-cliapp")
24694 (version "1.20180812.1")
24695 (source
24696 (origin
24697 (method url-fetch)
24698 (uri (string-append
24699 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
24700 version ".tar.gz"))
24701 (sha256
24702 (base32
24703 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
24704 (build-system python-build-system)
24705 (arguments
24706 `(;; XXX: The tests only do style and coverage checks, which
24707 ;; fails due to deprecation warnings, etc.
24708 #:tests? #f))
24709 (native-inputs
24710 (list python-coverage-test-runner))
24711 (propagated-inputs
24712 (list python-pyaml))
24713 (home-page "https://liw.fi/cliapp/")
24714 (synopsis "Python framework for command line programs")
24715 (description "@code{cliapp} is a Python framework for command line
24716 programs. It contains the typical stuff such programs need to do, such
24717 as parsing the command line for options, and iterating over input files.")
24718 (license license:gpl2+)))
24719
24720(define-public python-astroid
24721 (package
24722 (name "python-astroid")
24723 (version "3.3.11")
24724 (source
24725 (origin
24726 (method git-fetch)
24727 (uri (git-reference
24728 (url "https://github.com/PyCQA/astroid")
24729 (commit (string-append "v" version))))
24730 (file-name (git-file-name name version))
24731 (sha256
24732 (base32 "1x5903kmi47pc87r949lym2cwl0xg885xyy730adxv0g6r083zwn"))))
24733 (build-system pyproject-build-system)
24734 (arguments
24735 ;; UserWarning: pkg_resources is deprecated as an API. See
24736 ;; https://setuptools.pypa.io/en/latest/pkg_resources.html. The
24737 ;; pkg_resources package is slated for removal as early as
24738 ;; 2025-11-30. Refrain from using this package or pin to Setuptools<81.
24739 (list #:test-flags
24740 #~(list "-k" "not test_identify_old_namespace_package_protocol")))
24741 (native-inputs
24742 (list python-mypy-minimal
24743 python-pytest
24744 python-setuptools
24745 python-wheel))
24746 (propagated-inputs
24747 (list python-lazy-object-proxy
24748 python-typing-extensions
24749 python-wrapt))
24750 (home-page "https://github.com/PyCQA/astroid")
24751 (synopsis "Python source code base representation")
24752 (description "@code{python-astroid} provides a common base representation
24753of Python source code for projects such as pychecker, pyreverse, pylint, etc.
24754It provides a compatible representation which comes from the _ast module. It
24755rebuilds the tree generated by the builtin _ast module by recursively walking
24756down the AST and building an extended ast. The new node classes have
24757additional methods and attributes for different usages. They include some
24758support for static inference and local name scopes. Furthermore, astroid
24759builds partial trees by inspecting living objects.")
24760 (license license:lgpl2.1+)))
24761
24762(define-public python-isbnlib
24763 (package
24764 (name "python-isbnlib")
24765 (version "3.10.14")
24766 (source
24767 (origin
24768 (method git-fetch)
24769 (uri (git-reference
24770 (url "https://github.com/xlcnd/isbnlib")
24771 (commit (string-append "v" version))))
24772 (file-name (git-file-name name version))
24773 (sha256
24774 (base32 "07vpq8y0mn16489d1pl4zxgczgl1s2ydli4lci7f73z4zv179akp"))))
24775 (build-system pyproject-build-system)
24776 (arguments
24777 (list
24778 #:test-flags #~(list "-m" "not network")))
24779 (native-inputs (list python-pytest python-pytest-cov python-setuptools))
24780 (home-page "https://github.com/xlcnd/isbnlib")
24781 (synopsis "Python library to work with ISBN strings")
24782 (description
24783 "@code{python-isbnlib} is a (pure) python library that provides several
24784useful methods and functions to validate, clean, transform, hyphenate and get
24785metadata for ISBN strings. Its origin was as the core of isbntools. This
24786short version, is suitable to be include as a dependency in other projects.")
24787 (license license:lgpl3+)))
24788
24789(define-public python-isoduration
24790 (package
24791 (name "python-isoduration")
24792 (version "20.11.0")
24793 (source
24794 (origin
24795 (method url-fetch)
24796 (uri (pypi-uri "isoduration" version))
24797 (sha256
24798 (base32 "1n8vpa9fckhc5934kp7m83wq81dhkvw987v7mjg2fdbr2car0bxc"))))
24799 (build-system pyproject-build-system)
24800 (arguments '(#:tests? #f)) ;no tests in PyPI archive
24801 (propagated-inputs (list python-arrow))
24802 (native-inputs (list python-setuptools python-wheel))
24803 (home-page "https://github.com/bolsote/isoduration")
24804 (synopsis "Operations with ISO 8601 durations")
24805 (description "ISO 8601 is most commonly known as a way to exchange
24806datetimes in textual format. A lesser known aspect of the standard is the
24807representation of durations. The state of the art of ISO 8601 duration
24808handling in Python is more or less limited to what's offered by isodate. This
24809package attempts to address the shortcomings of @code{isodate}.")
24810 (license license:isc)))
24811
24812(define-public python-isort
24813 (package
24814 (name "python-isort")
24815 (version "6.0.1")
24816 (source
24817 (origin
24818 (method git-fetch) ;no tests in PyPI archive
24819 (uri (git-reference
24820 (url "https://github.com/timothycrosley/isort")
24821 (commit version)))
24822 (file-name (git-file-name name version))
24823 (modules '((guix build utils)))
24824 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
24825 (sha256
24826 (base32 "1fcwv1dlq0d3is9s6scp6vy7yw4l845kk51ihxac8419n8hrpvpq"))))
24827 (build-system pyproject-build-system)
24828 (arguments
24829 (list
24830 #:test-flags
24831 ;; Ignore benchmark and integration to reduce closure size.
24832 #~(list "--ignore=tests/benchmark/"
24833 "--ignore=tests/integration/"
24834 "--ignore=tests/unit/profiles/test_black.py"
24835 "-k" (string-join
24836 (list "not test_gitignore"
24837 "test_isort_supports_shared_profiles_issue_970"
24838 "test_requirements_dir"
24839 "test_requirements_finder"
24840 "test_sort_configurable_sort_issue_1732"
24841 "test_sort_imports_error_handling")
24842 " and not "))
24843 ;; TODO: Package example plugins separately, available in PyPI:
24844 ;; - example_isort_formatting_plugin
24845 ;; - example_isort_sorting_plugin
24846 ;; - example_shared_isort_profile
24847 #:phases
24848 #~(modify-phases %standard-phases
24849 (add-before 'build 'pretend-version
24850 (lambda _
24851 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
24852 (native-inputs
24853 (list python-colorama
24854 python-hatch-vcs
24855 python-hatchling
24856 python-hypothesis
24857 python-pylama
24858 python-pytest))
24859 (home-page "https://github.com/PyCQA/isort")
24860 (synopsis "Python utility/library to sort python imports")
24861 (description
24862 "@code{python-isort} is a python utility/library to sort imports
24863alphabetically, and automatically separated into sections. It provides a
24864command line utility, a python library and plugins for various editors.")
24865 (license license:expat)))
24866
24867(define-public python-configparser
24868 (package
24869 (name "python-configparser")
24870 (version "7.2.0")
24871 (source
24872 (origin
24873 (method url-fetch)
24874 (uri (pypi-uri "configparser" version))
24875 (sha256
24876 (base32 "0w3vichm4igwvh7r560rw58xi4s1yf9x1cyi6syszqqnx65cqadn"))))
24877 (build-system pyproject-build-system)
24878 (native-inputs
24879 (list python-pytest
24880 python-setuptools
24881 python-setuptools-scm
24882 python-wheel))
24883 (home-page "https://github.com/jaraco/configparser/")
24884 (synopsis "Backport of configparser from python 3.5")
24885 (description "@code{python-configparser} is a backport of
24886 @code{configparser} from Python 3.5 so that it can be used directly
24887 in other versions.")
24888 (license license:expat)))
24889
24890(define-public python-iniconfig
24891 (package
24892 (name "python-iniconfig")
24893 (version "2.1.0")
24894 (source
24895 (origin
24896 (method url-fetch)
24897 (uri (pypi-uri "iniconfig" version))
24898 (sha256
24899 (base32 "1iz1fg3n6pv4q8jzv1q0izl5001diwqggizrg3p3ywrn1gix5frs"))))
24900 (build-system pyproject-build-system)
24901 (arguments (list #:tests? #f)) ;no tests in PyPI, tests introduce cycle with pytest
24902 (native-inputs
24903 (list python-hatch-vcs
24904 python-hatchling))
24905 (home-page "https://github.com/RonnyPfannschmidt/iniconfig")
24906 (synopsis "Simple INI-file parser")
24907 (description "The @code{iniconfig} package provides a small and simple
24908 INI-file parser module having a unique set of features ; @code{iniconfig}
24909 @itemize
24910 @item maintains the order of sections and entries ;
24911 @item supports multi-line values with or without line-continuations ;
24912 @item supports \"#\" comments everywhere ;
24913 @item raises errors with proper line-numbers ;
24914 @item raises an error when two sections have the same name.
24915 @end itemize")
24916 (license license:expat)))
24917
24918(define-public python-mando
24919 (package
24920 (name "python-mando")
24921 (version "0.8.2")
24922 (source
24923 (origin
24924 (method url-fetch)
24925 (uri (pypi-uri "mando" version))
24926 (sha256
24927 (base32 "1ddn4h1fvc9f8z2p8l88jyazxnp0h7rmh711i2hwkipxlbcmk5jk"))))
24928 (build-system pyproject-build-system)
24929 (native-inputs
24930 (list python-pytest python-setuptools))
24931 (home-page "https://mando.readthedocs.org/")
24932 (synopsis "Wrapper around argparse, allowing creation of complete CLI applications")
24933 (description
24934 "This package is a wrapper around argparse, allowing you to write complete CLI
24935applications in seconds while maintaining all the flexibility.")
24936 (license license:expat)))
24937
24938(define-public python-mwclient
24939 (package
24940 (name "python-mwclient")
24941 (version "0.11.0")
24942 (source
24943 (origin
24944 (method git-fetch)
24945 (uri (git-reference
24946 (url "https://github.com/mwclient/mwclient")
24947 (commit (string-append "v" version))))
24948 (file-name (git-file-name name version))
24949 (sha256
24950 (base32 "14kg353vzrwh7zks7zsza4hfb2n5vxprh9hnw4rjsimm8509axda"))))
24951 (build-system pyproject-build-system)
24952 (propagated-inputs
24953 (list python-requests-oauthlib))
24954 (native-inputs
24955 (list python-mock
24956 python-pytest
24957 python-pytest-cov
24958 python-responses
24959 python-setuptools))
24960 (home-page "https://github.com/btongminh/mwclient")
24961 (synopsis "MediaWiki API client")
24962 (description "This package provides a MediaWiki API client.")
24963 (license license:expat)))
24964
24965(define-public python-kneed
24966 (package
24967 (name "python-kneed")
24968 (version "0.8.5")
24969 (source
24970 (origin
24971 (method git-fetch)
24972 (uri (git-reference
24973 (url "https://github.com/arvkevi/kneed")
24974 (commit (string-append "v" version))))
24975 (file-name (git-file-name name version))
24976 (sha256
24977 (base32 "0kcglaql1nqvjv5q62myybznii1n1akln5yacp63rg8xv7l0zad1"))))
24978 (build-system pyproject-build-system)
24979 (arguments
24980 (list
24981 #:test-flags #~(list "--ignore=tests/test_no_matplotlib.py")))
24982 (native-inputs (list python-hatchling python-pytest python-pytest-cov))
24983 (propagated-inputs (list python-matplotlib python-numpy python-scipy))
24984 (home-page "https://github.com/arvkevi/kneed")
24985 (synopsis "Knee-point detection in Python")
24986 (description
24987 "This package implements the kneedle algorithm. Given a set of x and y
24988values, kneed will return the knee point of the function. The knee point is
24989the point of maximum curvature.")
24990 (license license:bsd-3)))
24991
24992(define-public python-diff-cover
24993 (package
24994 (name "python-diff-cover")
24995 (version "9.7.1")
24996 (source
24997 (origin
24998 (method url-fetch)
24999 (uri (pypi-uri "diff_cover" version))
25000 (sha256
25001 (base32 "0j1m8rfs080zsil516pvr0hy3x24dny4c77ilzfjgp5pcjy7hfx0"))))
25002 (build-system pyproject-build-system)
25003 (arguments
25004 (list
25005 #:test-flags
25006 ;; Dropp check of flake8 in tests.
25007 #~(list "-k" "not test_file_does_not_exist")))
25008 (native-inputs
25009 (list python-pycodestyle
25010 python-poetry-core
25011 python-pyflakes
25012 python-pylint
25013 python-pytest
25014 python-pytest-datadir
25015 python-pytest-mock))
25016 (propagated-inputs
25017 (list python-chardet
25018 python-jinja2
25019 python-pluggy
25020 python-pygments
25021 python-setuptools ; For pkg_resources.
25022 python-tomli))
25023 (home-page "https://github.com/Bachmann1234/diff_cover")
25024 (synopsis "Run coverage and linting reports on diffs")
25025 (description
25026 "Automatically find diff lines that need test coverage. It also finds
25027diff lines that have violations (according to tools such as pycodestyle,
25028pyflakes, flake8, or pylint). This is used as a code quality metric during
25029code reviews.")
25030 (license license:asl2.0)))
25031
25032(define-public python-diff-match-patch
25033 (package
25034 (name "python-diff-match-patch")
25035 (version "20241021")
25036 (source
25037 (origin
25038 (method url-fetch)
25039 (uri (pypi-uri "diff_match_patch" version))
25040 (sha256
25041 (base32
25042 "0wshhdnxvb7l45pjrj1fhrhvh7b6p1l2kvim559q9054kylmgbmy"))))
25043 (build-system pyproject-build-system)
25044 (native-inputs (list python-flit-core python-pytest))
25045 (home-page "https://github.com/diff-match-patch-python/diff-match-patch")
25046 (synopsis "Synchronize plain text")
25047 (description "Diff Match and Patch libraries offer robust algorithms to
25048 perform the operations required for synchronizing plain text.")
25049 (license license:asl2.0)))
25050
25051(define-public python-icdiff
25052 (package
25053 (name "python-icdiff")
25054 (version "2.0.7")
25055 (source (origin
25056 (method git-fetch)
25057 (uri (git-reference
25058 (url "https://github.com/jeffkaufman/icdiff")
25059 (commit (string-append "release-" version))))
25060 (file-name (git-file-name name version))
25061 (sha256
25062 (base32
25063 "0kwgglbnpvsv5qb59yl0pvihr1ca5m8l6cq8hjski5y62g33zv2w"))))
25064 (build-system pyproject-build-system)
25065 (arguments
25066 (list #:tests? #f)) ; there are no test scripts
25067 (native-inputs (list python-setuptools python-wheel))
25068 (home-page "https://www.jefftk.com/icdiff")
25069 (synopsis "Improved colored diff")
25070 (description "This package provides colored diff functions that highlight
25071parts of the lines that were modified.")
25072 (license license:psfl)))
25073
25074(define-public python-dirsync
25075 (package
25076 (name "python-dirsync")
25077 (version "2.2.6")
25078 (source
25079 (origin
25080 (method url-fetch)
25081 (uri (pypi-uri "dirsync" version))
25082 (sha256
25083 (base32
25084 "1g3h0lva0mgmm4i5z62h8jkv9y1mp5xlvl2w2nfa3galbgn5gdak"))))
25085 (build-system pyproject-build-system)
25086 (arguments
25087 ;; No tests in PyPI release and GitHub repository does not have the
25088 ;; latest release tag.
25089 (list #:tests? #f))
25090 (native-inputs (list python-setuptools python-wheel))
25091 (home-page "https://github.com/tkhyn/dirsync")
25092 (synopsis "Advanced directory tree synchronisation tool")
25093 (description
25094 "Dirsync is an advanced directory tree synchronisation tool.")
25095 (license license:expat)))
25096
25097(define-public python-levenshtein
25098 (package
25099 (name "python-levenshtein")
25100 (version "0.27.1")
25101 (source
25102 (origin
25103 (method git-fetch)
25104 (uri (git-reference
25105 (url "https://github.com/rapidfuzz/Levenshtein")
25106 (commit (string-append "v" version))))
25107 (file-name (git-file-name name version))
25108 (sha256
25109 (base32 "1khr1vjmrwakjfdsb22k508h3g8awjp0yb398ca8n1xanwzk4l8h"))))
25110 (build-system pyproject-build-system)
25111 (propagated-inputs (list python-rapidfuzz))
25112 (native-inputs
25113 (list cmake-minimal
25114 python-cython
25115 python-pytest
25116 python-scikit-build-core
25117 python-setuptools
25118 rapidfuzz-cpp))
25119 (home-page "https://github.com/rapidfuzz/Levenshtein")
25120 (synopsis "Fast computation of Levenshtein distance and string similarity")
25121 (description
25122 "The Levenshtein Python C extension module contains functions for fast computation of
25123@enumerate
25124@item Levenshtein (edit) distance, and edit operations
25125@item string similarity
25126@item approximate median strings, and generally string averaging
25127@item string sequence and set similarity
25128@end enumerate
25129It supports both normal and Unicode strings.")
25130 (license license:gpl2+)))
25131
25132(define-public python-factory-boy
25133 (package
25134 (name "python-factory-boy")
25135 (version "3.3.3")
25136 (source
25137 (origin
25138 (method url-fetch)
25139 (uri (pypi-uri "factory_boy" version))
25140 (sha256
25141 (base32 "00rx3v5y5l03vlkq6xqj4r7zbnlrx23h45mlyb3zm38j4v964s46"))))
25142 (build-system pyproject-build-system)
25143 (arguments
25144 ;; Tests are not included in the tarball.
25145 `(#:tests? #f))
25146 (native-inputs (list python-setuptools))
25147 (propagated-inputs (list python-faker))
25148 (home-page "https://github.com/FactoryBoy/factory_boy")
25149 (synopsis "Versatile test fixtures replacement")
25150 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
25151factory_girl. As a fixtures replacement tool, it aims to replace static, hard
25152to maintain fixtures with easy-to-use factories for complex object. Instead
25153of building an exhaustive test setup with every possible combination of corner
25154cases, factory_boy allows you to use objects customized for the current test,
25155while only declaring the test-specific fields.")
25156 (license license:expat)))
25157
25158(define-public python-gtts
25159 (package
25160 (name "python-gtts")
25161 (version "2.3.1")
25162 (source (origin
25163 (method url-fetch)
25164 (uri (pypi-uri "gTTS" version))
25165 (sha256
25166 (base32
25167 "1jsg1prpzr7gj5sn385mkv2v1i8xfc83ycm87hvsi2j0y366plps"))))
25168 (build-system pyproject-build-system)
25169 (arguments
25170 ;; Disable tests that require internet.
25171 (list #:test-flags '(list "-k" "not net")))
25172 (native-inputs
25173 (list python-pytest python-testfixtures python-click python-requests
25174 python-setuptools python-wheel))
25175 (home-page "https://github.com/pndurette/gTTS")
25176 (synopsis "Google Translate text-to-speech interface")
25177 (description
25178 "Google Text-to-Speech (gTTS) is a Python library and CLI tool to
25179interface with the Google Translate text-to-speech API. It lets you write
25180spoken MP3 data to a file, a file-like object (bytestring) for further audio
25181manipulation, or @code{stdout}.")
25182 (license license:expat)))
25183
25184(define-public python-packaging
25185 (package/inherit python-packaging-bootstrap
25186 (name "python-packaging")
25187 (arguments
25188 `(#:phases (modify-phases %standard-phases
25189 (replace 'check
25190 (lambda* (#:key tests? #:allow-other-keys)
25191 (if tests?
25192 (invoke "pytest" "-vv")
25193 (format #t "test suite not run~%")))))))
25194 (native-inputs
25195 (list python-flit-core
25196 python-pretend python-pytest))
25197 (propagated-inputs (list python-pyparsing python-six))
25198 (home-page "https://github.com/pypa/packaging")
25199 (synopsis "Core utilities for Python packages")
25200 (description "Packaging is a Python module for dealing with Python packages.
25201 It offers an interface for working with package versions, names, and dependency
25202 information.")
25203 ;; From 'LICENSE': This software is made available under the terms of
25204 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
25205 ;; Contributions to this software is made under the terms of *both* these
25206 ;; licenses.
25207 (license (list license:asl2.0 license:bsd-2))))
25208
25209(define-public python-packaging-legacy
25210 (package
25211 (name "python-packaging-legacy")
25212 (version "23.0.post0")
25213 (source
25214 (origin
25215 (method url-fetch)
25216 (uri (pypi-uri "packaging_legacy" version))
25217 (sha256
25218 (base32 "1nyryxlc7fd4c0jmfp99az1s61vfv5xbi6017wqi4wd7j4ia8x69"))))
25219 (build-system pyproject-build-system)
25220 (propagated-inputs (list python-packaging))
25221 (native-inputs
25222 (list python-pretend
25223 python-pytest
25224 python-setuptools
25225 python-wheel))
25226 (home-page "https://pypi.org/project/packaging-legacy/")
25227 (synopsis "Core utilities for legacy Python packages")
25228 (description "This library provides support for legacy Python Packaging
25229functionality removed from @code{packaging}.")
25230 (license license:asl2.0)))
25231
25232(define-public python-relatorio
25233 (package
25234 (name "python-relatorio")
25235 (version "0.11.1")
25236 (source
25237 (origin
25238 (method url-fetch)
25239 (uri (pypi-uri "relatorio" version))
25240 (sha256
25241 (base32 "0qa8f9xvvc60i41vpf386jqx65379dnn9xpjwp8zaibba5raz83v"))))
25242 (build-system pyproject-build-system)
25243 (native-inputs
25244 (list python-pytest
25245 python-setuptools))
25246 (propagated-inputs
25247 (list python-genshi
25248 python-lxml
25249 python-magic))
25250 (home-page "https://relatorio.tryton.org/")
25251 (synopsis "Templating library able to output ODT and PDF files")
25252 (description
25253 "Relatorio is a templating library which provides a way to easily output
25254ODT, ODS, PNG, SVG and several other kinds of files. Support for more
25255filetypes can be easily added by creating plugins for them.")
25256 (license license:gpl3+)))
25257
25258(define-public python-radon
25259 (package
25260 (name "python-radon")
25261 (version "6.0.1")
25262 (source
25263 (origin
25264 (method git-fetch)
25265 (uri (git-reference
25266 (url "https://github.com/rubik/radon")
25267 (commit (string-append "v" version))))
25268 (file-name (git-file-name name version))
25269 (sha256
25270 (base32 "01n3idnrglgbjgwvvgs7yg9amjda3zs2659sp2zqpllp9gva73y9"))))
25271 (build-system pyproject-build-system)
25272 (arguments
25273 (list
25274 #:phases
25275 #~(modify-phases %standard-phases
25276 (add-after 'unpack 'relax-requirements
25277 (lambda _
25278 (substitute* (list "pyproject.toml" "requirements.txt")
25279 (("(mando.*>=0\\.6),<0\\.8" _ mando-lower-bound)
25280 mando-lower-bound)))))))
25281 (propagated-inputs (list python-colorama python-mando))
25282 (native-inputs (list python-poetry-core python-pytest python-pytest-mock
25283 python-setuptools))
25284 (home-page "https://radon.readthedocs.org/")
25285 (synopsis "Code Metrics in Python")
25286 (description
25287 "Radon is a Python tool which computes various code metrics. Supported
25288metrics are:
25289@itemize @bullet
25290@item raw metrics: SLOC, comment lines, blank lines, &c.
25291@item Cyclomatic Complexity (i.e., McCabe’s Complexity)
25292@item Halstead metrics (all of them)
25293@item the Maintainability Index (a Visual Studio metric)
25294@end itemize")
25295 (license license:expat)))
25296
25297(define-public python-rgbxy
25298 (package
25299 (name "python-rgbxy")
25300 (version "0.5")
25301 (source
25302 (origin
25303 (method url-fetch)
25304 (uri (pypi-uri "rgbxy" version))
25305 (sha256
25306 (base32 "0c3dgm1rf7ih79pgkj7adffn8hlyqh5qah8rbzlq436kz3srk83q"))))
25307 (build-system pyproject-build-system)
25308 (arguments
25309 (list #:tests? #f)) ;no tests in PyPI or Git
25310 (native-inputs
25311 (list python-setuptools))
25312 (home-page "https://github.com/benknight/hue-python-rgb-converter")
25313 (synopsis "RGB conversion tool in Python")
25314 (description
25315 "This package implements functionality of RGB/CIE1931 'xy' gammuts
25316conversion: Gamut A, B, and C.")
25317 (license license:expat)))
25318
25319(define-public python-jsonpointer
25320 (package
25321 (name "python-jsonpointer")
25322 (version "3.0.0")
25323 (source
25324 (origin
25325 (method url-fetch)
25326 (uri (pypi-uri "jsonpointer" version))
25327 (sha256
25328 (base32 "1vsrmwrbix3bnxf71g1zyil0pxkh33hq47xkqdhjslli42gp4b9b"))))
25329 (build-system pyproject-build-system)
25330 (arguments (list #:test-backend #~'unittest))
25331 (native-inputs
25332 (list python-setuptools
25333 python-wheel))
25334 (home-page "https://github.com/stefankoegl/python-json-pointer")
25335 (synopsis "Identify specific nodes in a JSON document")
25336 (description "@code{jsonpointer} allows you to access specific nodes
25337 by path in a JSON document (see RFC 6901).")
25338 (license license:bsd-3)))
25339
25340(define-public python-jsonpatch
25341 (package
25342 (name "python-jsonpatch")
25343 (version "1.33")
25344 (source
25345 (origin
25346 (method git-fetch)
25347 ;; pypi version lacks tests.js
25348 (uri (git-reference
25349 (url "https://github.com/stefankoegl/python-json-patch")
25350 (commit (string-append "v" version))))
25351 (file-name (git-file-name name version))
25352 (sha256
25353 (base32 "0qidj3vrklygsid40y6qgxclssd85hbxnic1av833iy4hbml2w14"))))
25354 (build-system pyproject-build-system)
25355 (arguments
25356 (list #:test-backend #~'custom
25357 #:test-flags #~(list "tests.py")))
25358 (native-inputs
25359 (list python-setuptools))
25360 (propagated-inputs
25361 (list python-jsonpointer))
25362 (home-page "https://github.com/stefankoegl/python-json-patch")
25363 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
25364 (description "@code{jsonpatch} is a library and program that allows
25365 applying JSON Patches according to RFC 6902.")
25366 (license license:bsd-3)))
25367
25368(define-public python-rfc3986
25369 (package
25370 (name "python-rfc3986")
25371 (version "2.0.0")
25372 (source
25373 (origin
25374 (method url-fetch)
25375 (uri (pypi-uri "rfc3986" version))
25376 (sha256
25377 (base32 "0716rg74cpmhi9f77ypnwcdsyfjplsgk1rnnmadq5zabpnfwzalp"))))
25378 (build-system pyproject-build-system)
25379 (native-inputs
25380 (list python-pytest python-setuptools))
25381 (home-page "https://rfc3986.readthedocs.io/")
25382 (synopsis "Parse and validate URI references")
25383 (description
25384 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
25385validation and authority parsing. This module also supports RFC@tie{}6874
25386which adds support for zone identifiers to IPv6 addresses.")
25387 (license license:asl2.0)))
25388
25389(define-public python-rfc3986-validator
25390 (package
25391 (name "python-rfc3986-validator")
25392 (version "0.1.1")
25393 (source
25394 (origin
25395 (method url-fetch)
25396 (uri (pypi-uri "rfc3986_validator" version))
25397 (sha256
25398 (base32 "0mfh82r37ma5n54n8ibnqvmwr3j3f2ixqfjfmv1rwfqvjbkvsi1x"))))
25399 (build-system pyproject-build-system)
25400 (native-inputs
25401 (list python-pytest
25402 python-rfc3987
25403 python-setuptools))
25404 (home-page "https://github.com/naimetti/rfc3986-validator")
25405 (synopsis "Pure python rfc3986 validator")
25406 (description "This package implements a URI validator according to RFC3986
25407in pure Python.")
25408 (license license:expat)))
25409
25410(define-public python-rfc3987
25411 (package
25412 (name "python-rfc3987")
25413 (version "1.3.8")
25414 (source
25415 (origin
25416 (method url-fetch)
25417 (uri (pypi-uri "rfc3987" version))
25418 (sha256
25419 (base32
25420 "0cx7bhyjaylwnf9armxrkb3r0s37vf0vqf3bhbll9mb0lmbx5i6k"))))
25421 (build-system pyproject-build-system)
25422 (arguments
25423 (list #:test-backend #~'custom
25424 #:test-flags #~(list "-m" "doctest" "rfc3987.py")))
25425 (native-inputs
25426 (list python-setuptools))
25427 ;; Source: <https://codeberg.org/atufi/rfc3987>.
25428 (home-page "https://pypi.org/project/rfc3987/")
25429 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
25430 (description "@code{rfc3987} provides routines for parsing and
25431 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
25432 (license license:gpl3+)))
25433
25434;; The latest commit contains fixes for building with both python3 and python2.
25435(define-public python-rfc6555
25436 (package
25437 (name "python-rfc6555")
25438 (version "0.1.0")
25439 (source
25440 (origin
25441 (method git-fetch)
25442 (uri (git-reference
25443 (url "https://github.com/sethmlarson/rfc6555")
25444 (commit (string-append "v" version))))
25445 (file-name (git-file-name name version))
25446 (sha256
25447 (base32 "0cynzrs3l6ywmkpcpx9m36604dav64sk3rk1s12hj49qqyx20v1f"))))
25448 (build-system pyproject-build-system)
25449 (arguments
25450 (list
25451 ;; Other tests require network access.
25452 #:test-flags #~(list "tests/test_ipv6.py")))
25453 (native-inputs (list python-pytest python-setuptools))
25454 (home-page "https://pypi.org/project/rfc6555/")
25455 (synopsis "Python implementation of RFC 6555")
25456 (description
25457 "Python implementation of the Happy Eyeballs Algorithm described in RFC
254586555. Provided with a single file and dead-simple API to allow easy vendoring
25459and integration into other projects.")
25460 (license license:asl2.0)))
25461
25462(define-public python-sacn
25463 (package
25464 (name "python-sacn")
25465 (version "1.11.0")
25466 (source
25467 (origin
25468 (method url-fetch)
25469 (uri (pypi-uri "sacn" version))
25470 (sha256
25471 (base32 "1sp0jmrjsd9g62kgi177fw4hi56h21s2p9khia3idmixgz53k2ql"))))
25472 (build-system pyproject-build-system)
25473 (native-inputs (list python-pytest python-setuptools python-wheel))
25474 (home-page "https://github.com/Hundemeier/sacn")
25475 (synopsis "Python library for sending and receiving sACN data")
25476 (description
25477 "This package provides a Python library for sending and receiving
25478 sACN (Streaming Architecture for Control Networks) data, a standard
25479 protocol used for controlling lighting and other devices over
25480 a network.")
25481 (license license:expat)))
25482
25483(define-public python-bagit
25484 (package
25485 (name "python-bagit")
25486 (version "1.9.0")
25487 (source
25488 (origin
25489 (method git-fetch) ; no tests in PyPI
25490 (uri (git-reference
25491 (url "https://github.com/LibraryOfCongress/bagit-python")
25492 (commit (string-append "v" version))))
25493 (file-name (git-file-name name version))
25494 (sha256
25495 (base32
25496 "12qfqha70vhc8pclq0kzv7xk0i44ramnlkphybv7419vdl4aay40"))))
25497 (build-system pyproject-build-system)
25498 (arguments
25499 (list #:phases
25500 #~(modify-phases %standard-phases
25501 (add-before 'build 'pretend-version
25502 (lambda _
25503 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
25504 #$(package-version this-package))))
25505 (replace 'check
25506 (lambda* (#:key tests? #:allow-other-keys)
25507 (when tests?
25508 (invoke "pytest" "-vv" "test.py")))))))
25509 (native-inputs
25510 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
25511 (home-page "https://libraryofcongress.github.io/bagit-python/")
25512 (synopsis "Create and validate BagIt packages")
25513 (description "Bagit is a Python library and command line utility for working
25514 with BagIt style packages. BagIt is a minimalist packaging format for digital
25515 preservation.")
25516 (license license:cc0)))
25517
25518(define-public python-prov
25519 (package
25520 (name "python-prov")
25521 (version "2.1.1")
25522 (source
25523 (origin
25524 (method git-fetch)
25525 (uri (git-reference
25526 (url "https://github.com/trungdong/prov")
25527 (commit version)))
25528 (file-name (git-file-name name version))
25529 (sha256
25530 (base32 "14y58x4gqc4lyhgy6iamzxamwj02sqf2bkma6p5ddiqsnilc4wx7"))))
25531 (build-system pyproject-build-system)
25532 (arguments
25533 (list
25534 #:test-backend #~'unittest
25535 #:test-flags #~(list "discover" "-s" "src")
25536 #:phases
25537 #~(modify-phases %standard-phases
25538 (add-before 'check 'disable-tests
25539 (lambda _
25540 ;; prov.model.ProvException: The provided identifier
25541 ;; "http://www.example.org/bundle" is not valid
25542 (substitute* "src/prov/tests/qnames.py"
25543 (("test_namespace_inheritance")
25544 "disabled_test_namespace_inheritance")
25545 (("test_default_namespace_inheritance")
25546 "disabled_test_default_namespace_inheritance")))))))
25547 (native-inputs
25548 (list python-setuptools))
25549 (propagated-inputs
25550 (list graphviz
25551 python-dateutil
25552 python-networkx
25553 python-pydot
25554 ;; optional dependencies, also needed for tests
25555 python-lxml
25556 python-rdflib))
25557 (home-page "https://github.com/trungdong/prov")
25558 (synopsis
25559 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
25560 (description
25561 "This package provides a library for W3C Provenance Data Model supporting
25562 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
25563 (license license:expat)))
25564
25565(define-public python-arcp
25566 (package
25567 (name "python-arcp")
25568 (version "0.2.1")
25569 (source
25570 (origin
25571 (method git-fetch)
25572 (uri (git-reference
25573 (url "https://github.com/stain/arcp-py")
25574 (commit version)))
25575 (file-name (git-file-name name version))
25576 (sha256
25577 (base32 "1wjygci60nmcdrgrhb0vwqmhspzdv3g69x2b92vjxq709ifrpgqp"))))
25578 (build-system pyproject-build-system)
25579 (native-inputs (list python-pytest python-setuptools))
25580 (home-page "https://arcp.readthedocs.io/")
25581 (synopsis "Archive and Package URI parser and generator")
25582 (description
25583 "@acronym{arcp, Archive and Package} provides functions for creating
25584@code{arcp_} URIs, which can be used for identifying or parsing hypermedia
25585files packaged in an archive or package, like a ZIP file. arcp URIs can be
25586used to consume or reference hypermedia resources bundled inside a file
25587archive or an application package, as well as to resolve URIs for archive
25588resources within a programmatic framework. This URI scheme provides
25589mechanisms to generate a unique base URI to represent the root of the archive,
25590so that relative URI references in a bundled resource can be resolved within
25591the archive without having to extract the archive content on the local file
25592system. An arcp URI can be used for purposes of isolation (e.g. when
25593consuming multiple archives), security constraints (avoiding \"climb out\"
25594from the archive), or for externally identiyfing sub-resources referenced by
25595hypermedia formats.")
25596 (license license:asl2.0)))
25597
25598(define-public python-shellescape
25599 (package
25600 (name "python-shellescape")
25601 (version "3.8.1")
25602 (source
25603 (origin
25604 (method git-fetch)
25605 (uri (git-reference
25606 (url "https://github.com/chrissimpkins/shellescape")
25607 (commit (string-append "v" version))))
25608 (file-name (git-file-name name version))
25609 (sha256
25610 (base32
25611 "0wzccxk139qx1lb2g70f5b2yh9zq15nr2mgvqdbfabg5zm0vf1qw"))))
25612 (build-system python-build-system)
25613 (arguments
25614 '(#:phases
25615 (modify-phases %standard-phases
25616 (replace 'check
25617 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
25618 (when tests?
25619 (add-installed-pythonpath inputs outputs)
25620 (invoke "python" "tests/test_shellescape.py"))
25621 #t)))))
25622 (native-inputs
25623 (list python-pytest))
25624 (home-page "https://github.com/chrissimpkins/shellescape")
25625 (synopsis
25626 "Shell escape a string to safely use it as a token in a shell command")
25627 (description
25628 "The shellescape Python module defines the @code{shellescape.quote()}
25629 function that returns a shell-escaped version of a Python string. This is a
25630 backport of the @code{shlex.quote()} function from Python 3.8 that makes it
25631 accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
25632 (license license:expat)))
25633
25634;; XXX: Project has no updates since 2019, consider to remove when nothing
25635;; depends on it in the next refresh cycle.
25636;; See: <https://github.com/pipermerriam/flex/issues/237>.
25637(define-public python-flex
25638 (package
25639 (name "python-flex")
25640 (version "6.14.1")
25641 (source
25642 (origin
25643 (method url-fetch)
25644 (uri (pypi-uri "flex" version))
25645 (sha256
25646 (base32
25647 "1sr91f5sqywj4040jm3cq4333fp8hbmmr7v6v05a3h0sgyixcbi9"))))
25648 (build-system pyproject-build-system)
25649 (arguments (list #:tests? #f)) ;no tests in PyPI archive
25650 (native-inputs
25651 (list python-setuptools))
25652 (propagated-inputs
25653 (list python-click
25654 python-jsonpointer
25655 python-pyyaml
25656 python-requests
25657 python-rfc3987
25658 python-six
25659 python-strict-rfc3339
25660 python-validate-email))
25661 (home-page "https://github.com/pipermerriam/flex")
25662 (synopsis "Validates Swagger schemata")
25663 (description "@code{flex} can be used to validate Swagger schemata.")
25664 (license license:bsd-3)))
25665
25666(define-public python-marshmallow
25667 (package
25668 (name "python-marshmallow")
25669 (version "4.0.0")
25670 (source
25671 (origin
25672 (method url-fetch)
25673 (uri (pypi-uri "marshmallow" version))
25674 (sha256
25675 (base32 "0mcd5aqs33hijapnj2a3g580pfaghp8h3vcpzdf979wrqam80viv"))))
25676 (build-system pyproject-build-system)
25677 (arguments
25678 (list
25679 #:phases
25680 #~(modify-phases %standard-phases
25681 (add-before 'check 'set-check-environment
25682 (lambda* (#:key inputs #:allow-other-keys)
25683 (setenv "TZ" "UTC")
25684 (setenv "TZDIR"
25685 (search-input-directory inputs
25686 "share/zoneinfo")))))))
25687 (native-inputs
25688 (list python-flit-core
25689 python-pytest
25690 python-simplejson
25691 tzdata-for-tests))
25692 (home-page "https://github.com/marshmallow-code/marshmallow")
25693 (synopsis "Convert complex datatypes to and from native Python datatypes")
25694 (description
25695 "@code{marshmallow} provides a library for converting complex datatypes
25696to and from native Python datatypes.")
25697 (license license:expat)))
25698
25699(define-public python-marshmallow-3
25700 (package
25701 (inherit python-marshmallow)
25702 (version "3.22.0")
25703 (source
25704 (origin
25705 (method url-fetch)
25706 (uri (pypi-uri "marshmallow" version))
25707 (sha256
25708 (base32 "0gl2qmq5sqf1b3f84zd7yzkznaknr6j5lnbxcfw0n8ja20lzawj9"))))
25709 (arguments '())
25710 (native-inputs
25711 (list python-pytest
25712 python-pytz
25713 python-simplejson
25714 python-flit-core))
25715 (propagated-inputs
25716 (list python-packaging))))
25717
25718
25719(define-public python-apispec
25720 (package
25721 (name "python-apispec")
25722 (version "6.8.2")
25723 (source
25724 (origin
25725 (method url-fetch)
25726 (uri (pypi-uri "apispec" version))
25727 (sha256
25728 (base32 "09lza66036a3i1blwrc6qpvw48pzflmabhd0dfshq9ghzjwnjnyf"))))
25729 (build-system pyproject-build-system)
25730 (native-inputs
25731 (list python-flit-core
25732 python-openapi-spec-validator
25733 python-pytest))
25734 (propagated-inputs
25735 (list python-marshmallow
25736 python-packaging
25737 python-pyyaml))
25738 (home-page "https://github.com/marshmallow-code/apispec")
25739 (synopsis "Swagger/OpenAPI specification generator")
25740 (description
25741 "@code{python-apispec} is a pluggable API specification generator. It
25742currently supports the OpenAPI specification, formerly known as Swagger.")
25743 (license license:expat)))
25744
25745(define-public python-apispec-webframeworks
25746 (package
25747 (name "python-apispec-webframeworks")
25748 (version "1.2.0")
25749 (source
25750 (origin
25751 (method url-fetch)
25752 (uri (pypi-uri "apispec_webframeworks" version))
25753 (sha256
25754 (base32 "10gxjwmk8w67b7vcivcky4hrpv1gx8acrshnyp1169va4s62i2an"))))
25755 (build-system pyproject-build-system)
25756 (native-inputs
25757 (list python-aiohttp
25758 python-flit-core
25759 python-bottle
25760 python-flask
25761 python-pytest
25762 python-pyyaml
25763 python-tornado
25764 python-wheel))
25765 (propagated-inputs
25766 (list python-apispec))
25767 (home-page "https://github.com/marshmallow-code/apispec-webframeworks")
25768 (synopsis "Web framework plugins for apispec")
25769 (description "This package provides plugins for using @code{apispec} with
25770web frameworks.")
25771 (license license:expat)))
25772
25773(define-public python-flasgger
25774 (package
25775 (name "python-flasgger")
25776 (version "0.9.7.1")
25777 (source
25778 (origin
25779 (method git-fetch)
25780 (uri (git-reference
25781 (url "https://github.com/rochacbruno/flasgger")
25782 (commit (string-append "v" version))))
25783 (file-name (git-file-name name version))
25784 (sha256
25785 (base32 "08dnn19swfa5lsscj38hil41b3xnqvwgwnx9q2vg9kv26bs1zcah"))))
25786 (build-system pyproject-build-system)
25787 (arguments
25788 (list
25789 #:test-flags
25790 #~(list "--ignore=tests/test_examples.py"
25791 "-k" "not test_swag")))
25792 (propagated-inputs
25793 (list python-flask
25794 python-pyyaml
25795 python-jsonschema
25796 python-mistune
25797 python-six))
25798 (native-inputs
25799 (list python-pytest
25800 python-setuptools))
25801 (home-page "https://github.com/rochacbruno/flasgger/")
25802 (synopsis "Extract Swagger specs from your Flask project")
25803 (description "@code{python-flasgger} allows extracting Swagger specs
25804 from your Flask project. It is a fork of Flask-Swagger.")
25805 (license license:expat)))
25806
25807(define-public python-apache-libcloud
25808 (package
25809 (name "python-apache-libcloud")
25810 (version "3.8.0")
25811 (source
25812 (origin
25813 (method url-fetch)
25814 (uri (pypi-uri "apache-libcloud" version))
25815 (sha256
25816 (base32 "14bc4z246ka0h6kywpxqdfgb2c5y6lfclpx99ki2bhiv285lrgvm"))))
25817 (build-system pyproject-build-system)
25818 (arguments
25819 (list
25820 #:tests? #f ; XXX: all tests fail requiring additional credentials
25821 #:phases
25822 #~(modify-phases %standard-phases
25823 (add-after 'unpack 'patch-ssh
25824 (lambda* (#:key inputs #:allow-other-keys)
25825 (substitute* "libcloud/compute/ssh.py"
25826 (("'ssh'")
25827 (format #f "~s" (search-input-file inputs "/bin/ssh"))))))
25828 (add-after 'unpack 'patch-tests
25829 (lambda _
25830 (substitute* "libcloud/test/compute/test_ssh_client.py"
25831 (("^class ShellOutSSHClientTests")
25832 "@unittest.skip(\"Guix container doesn't have ssh service\")
25833class ShellOutSSHClientTests"))))
25834 (add-before 'check 'copy-secret
25835 (lambda _
25836 (copy-file "libcloud/test/secrets.py-dist"
25837 "libcloud/test/secrets.py"))))))
25838 (inputs
25839 (list openssh))
25840 (propagated-inputs
25841 (list python-requests))
25842 (native-inputs
25843 (list python-pytest python-requests-mock python-setuptools))
25844 (home-page "https://libcloud.apache.org/")
25845 (synopsis "Unified Cloud API")
25846 (description
25847 "@code{libcloud} is a Python library for interacting with many of the
25848popular cloud service providers using a unified API.")
25849 (license license:asl2.0)))
25850
25851(define-public python-smmap
25852 (package
25853 (name "python-smmap")
25854 (version "5.0.2")
25855 (source
25856 (origin
25857 (method url-fetch)
25858 (uri (pypi-uri "smmap" version))
25859 (sha256
25860 (base32 "1mcai5vf9bgz389y4sqgj6w22wn7zmc7m33y3j50ryjq76h6bsi6"))))
25861 (build-system pyproject-build-system)
25862 (native-inputs
25863 (list python-pytest
25864 python-setuptools
25865 python-wheel))
25866 (home-page "https://github.com/Byron/smmap")
25867 (synopsis "Python sliding window memory map manager")
25868 (description "@code{smmap} is a pure Python implementation of a sliding
25869 window memory map manager.")
25870 (license license:bsd-3)))
25871
25872(define-public python-regex
25873 (package
25874 (name "python-regex")
25875 (version "2024.11.6")
25876 (source
25877 (origin
25878 (method url-fetch)
25879 (uri (pypi-uri "regex" version))
25880 (sha256
25881 (base32 "06amb1sxhbab03cy73q7wcp131bsingngr44r0rh6an5cfq5kcbs"))))
25882 (build-system pyproject-build-system)
25883 (arguments
25884 (list #:test-backend #~'unittest))
25885 (native-inputs
25886 (list python-setuptools))
25887 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
25888 (synopsis "Alternative regular expression module")
25889 (description
25890 "This regular expression implementation is backwards-compatible with the
25891standard @code{re} module, but offers additional functionality like full
25892case-folding for case-insensitive matches in Unicode.")
25893 (license license:psfl)))
25894
25895(define-public python-pysocks
25896 (package
25897 (name "python-pysocks")
25898 (version "1.7.1")
25899 (source
25900 (origin
25901 (method url-fetch)
25902 (uri (pypi-uri "PySocks" version))
25903 (sha256
25904 (base32
25905 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
25906 (build-system pyproject-build-system)
25907 (arguments `(#:tests? #f))
25908 (native-inputs
25909 (list python-setuptools))
25910 (home-page "https://github.com/Anorov/PySocks")
25911 (synopsis "SOCKS client module")
25912 (description "@code{pysocks} is an updated and semi-actively maintained
25913version of @code{SocksiPy} with bug fixes and extra features.")
25914 (license license:bsd-3)))
25915
25916(define-public python-pydub
25917 (package
25918 (name "python-pydub")
25919 (version "0.25.1")
25920 (source
25921 (origin
25922 (method git-fetch)
25923 (uri (git-reference
25924 (url "https://github.com/jiaaro/pydub")
25925 (commit (string-append "v" version))))
25926 (file-name (git-file-name name version))
25927 (sha256
25928 (base32 "0xskllq66wqndjfmvp58k26cv3w480sqsil6ifwp4gghir7hqc8m"))))
25929 (build-system pyproject-build-system)
25930 (arguments
25931 (list
25932 #:test-backend ''unittest
25933 #:phases
25934 #~(modify-phases %standard-phases
25935 (add-after 'unpack 'fix-ffmpeg-path
25936 (lambda* (#:key inputs #:allow-other-keys)
25937 (let ((bin (dirname (search-input-file inputs "bin/ffmpeg"))))
25938 (substitute* "pydub/utils.py"
25939 (("return \"ffmpeg\"")
25940 (string-append "return \"" bin "/ffmpeg\""))
25941 (("return \"ffplay\"")
25942 (string-append "return \"" bin "/ffplay\""))
25943 (("return \"ffprobe\"")
25944 (string-append "return \"" bin "/ffprobe\""))
25945 (("warn\\(\"Couldn't find ff")
25946 "# warn\\(\"Couldn't find ff"))))))))
25947 (native-inputs (list python-setuptools))
25948 (home-page "https://pydub.com")
25949 (inputs (list ffmpeg))
25950 (propagated-inputs (list python-scipy))
25951 (synopsis "Manipulate audio with a high level interface in Python")
25952 (description
25953 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
25954@code{ffmpeg} to open various audio formats.")
25955 (license license:expat))) ; MIT license
25956
25957(define-public python-pkginfo
25958 (package
25959 (name "python-pkginfo")
25960 (version "1.12.1.2")
25961 (source
25962 (origin
25963 (method url-fetch)
25964 (uri (pypi-uri "pkginfo" version))
25965 (sha256
25966 (base32
25967 "0ysbl0rhy8chvx58zi5qb61jli76dcyblklnc0118vy39a15gnaw"))))
25968 (build-system pyproject-build-system)
25969 (arguments
25970 ;; Wheel metatda version mismatched: AssertionError: assert '2.4' == '2.3'
25971 (list #:test-flags #~(list "-k" "not test_installed_ctor_w_dist_info")))
25972 (native-inputs
25973 (list python-pytest
25974 python-setuptools
25975 python-wheel))
25976 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
25977 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
25978 (description
25979 "API to query the distutils metadata written in @file{PKG-INFO} inside a
25980source distriubtion (an sdist) or a binary distribution (e.g., created by
25981running bdist_egg). It can also query the EGG-INFO directory of an installed
25982distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
25983created by running @code{python setup.py develop}).")
25984 (license license:expat)))
25985
25986;; XXX: This project was archived by the owner on Oct 4, 2023. It is now
25987;; read-only. Consider to remvoe when nothing depends on it.
25988(define-public python-ratelimiter
25989 ;; From https://github.com/RazerM/ratelimiter/pull/11
25990 (let ((commit "59a0827c434706d62b89e16a220e4ae12e618858")
25991 (revision "0"))
25992 (package
25993 (name "python-ratelimiter")
25994 (version (git-version "1.2.0.post1" revision commit))
25995 (source
25996 (origin
25997 (method git-fetch)
25998 (uri (git-reference
25999 (url "https://github.com/RazerM/ratelimiter")
26000 (commit commit)))
26001 (sha256
26002 (base32
26003 "1v34w12f41j0l2gy9ji9ip01kj4idjfjx7a97wrlr1ibxi7hg3bs"))))
26004 (build-system pyproject-build-system)
26005 (arguments
26006 (list #:phases
26007 '(modify-phases %standard-phases
26008 (add-after 'unpack 'pytest-compatibility
26009 (lambda _
26010 (substitute* "tests/conftest.py"
26011 (("pytest.collect.File") "pytest.File")))))))
26012 (native-inputs
26013 (list python-pytest
26014 python-pytest-asyncio-0.26
26015 python-setuptools))
26016 (home-page "https://github.com/RazerM/ratelimiter")
26017 (synopsis "Simple rate limiting object")
26018 (description
26019 "The @code{ratelimiter} module ensures that an operation will not be
26020executed more than a given number of times during a given period.")
26021 (license license:asl2.0))))
26022
26023(define-public python-rbfly
26024 (package
26025 (name "python-rbfly")
26026 (version "0.10.0")
26027 (source
26028 (origin
26029 (method url-fetch)
26030 (uri (pypi-uri "rbfly" version))
26031 (sha256
26032 (base32 "019fs94qzbxb43vahcm0va53m5d4nxrib5pkl29m4hx9adcccpf6"))))
26033 (build-system pyproject-build-system)
26034 (arguments
26035 (list
26036 #:test-flags #~(list "--pyargs" "rbfly")
26037 #:phases
26038 #~(modify-phases %standard-phases
26039 (add-after 'unpack 'fix-pytest-config
26040 (lambda _
26041 ;; Drop test coverage requirements.
26042 (substitute* "pyproject.toml"
26043 ((".*addopts.*") "")))))))
26044 (native-inputs
26045 (list python-cython
26046 python-pytest
26047 python-pytest-asyncio
26048 python-pytest-timeout
26049 python-setuptools
26050 python-wheel))
26051 (home-page "https://wrobell.dcmod.org/rbfly/")
26052 (synopsis "Work with RabbitMQ Streams in Python")
26053 (description
26054 "This package implements a functionality to deal with
26055@url{https://www.rabbitmq.com/streams.html, RabbitMQ Streams} using
26056@url{https://docs.python.org/3/library/asyncio.html, @code{asyncio}}.
26057
26058It is designed and implemented with the following qualities in mind:
26059@itemize
26060@item asynchronous Pythonic API with type annotations
26061@item use of
26062@url{https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, AMQP}
260631.0 message format to enable interoperability between RabbitMQ Stream. clients
26064@item auto reconnection to RabbitMQ broker with lazily created connection
26065objects
26066@end itemize
26067
26068Support of many RabbitMQ Streams broker features:
26069@itemize
26070@item publishing single messages, or in batches, with confirmation
26071@item subscribing to a stream at a specific point in time, from a specific
26072offset, or using offset reference
26073@item stream message filtering
26074@item writing stream offset reference
26075@item message deduplication
26076@item integration with AMQP 1.0 ecosystem at message format level
26077@end itemize")
26078 (license license:gpl3+)))
26079
26080(define-public python-jsonrpclib-pelix
26081 (package
26082 (name "python-jsonrpclib-pelix")
26083 (version "0.3.2")
26084 (source
26085 (origin
26086 (method git-fetch)
26087 (uri (git-reference
26088 (url "https://github.com/tcalmant/jsonrpclib")
26089 (commit (string-append "v" version))))
26090 (file-name (git-file-name name version))
26091 (sha256
26092 (base32 "1mhnqmgcplsxc4zygxy4hm99si7p2rpyl4bpmilzqc51k2r3khzl"))))
26093 (build-system pyproject-build-system)
26094 (arguments
26095 (list
26096 #:test-backend #~'unittest
26097 #:test-flags #~(list "-k" "not test_multicall_success")))
26098 (native-inputs (list python-setuptools))
26099 (home-page "https://github.com/tcalmant/jsonrpclib")
26100 (synopsis "JSON-RPC 2.0 client library for Python")
26101 (description
26102 "This library implements the JSON-RPC v2.0 specification
26103(backwards-compatible) as a client library for Python. This version is a fork
26104of jsonrpclib by Josh Marshall, usable with Pelix remote services.")
26105 (license license:asl2.0)))
26106
26107(define-public python-setuptools-git
26108 ;; XXX: The project is abandoned since 2018, consider to remove in the next
26109 ;; refresh cycle.
26110 (package
26111 (name "python-setuptools-git")
26112 (version "1.2")
26113 (source
26114 (origin
26115 (method url-fetch)
26116 (uri (pypi-uri "setuptools-git" version))
26117 (sha256
26118 (base32 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
26119 (build-system pyproject-build-system)
26120 (arguments
26121 (list
26122 #:tests? #f ;no tests in PyPI
26123 #:phases
26124 #~(modify-phases %standard-phases
26125 ;; This is needed for tests.
26126 (add-after 'unpack 'configure-git
26127 (lambda _
26128 (setenv "HOME" "/tmp")
26129 (invoke "git" "config" "--global" "user.email" "guix")
26130 (invoke "git" "config" "--global" "user.name" "guix"))))))
26131 (native-inputs
26132 (list git-minimal/pinned python-setuptools python-wheel))
26133 (home-page "https://github.com/msabramo/setuptools-git")
26134 (synopsis "Setuptools revision control system plugin for Git")
26135 (description
26136 "This package provides a plugin for Setuptools for revision control with
26137Git.")
26138 (license license:bsd-3)))
26139
26140(define-public python-setuptools-rust
26141 (package
26142 (name "python-setuptools-rust")
26143 (version "1.11.1")
26144 (source
26145 (origin
26146 (method url-fetch)
26147 (uri (pypi-uri "setuptools_rust" version))
26148 (sha256
26149 (base32 "1h3nbg1nlshzrqy7vz4q4g9wbz85dqkn6385p0ad7kjj48ww9avx"))))
26150 (build-system pyproject-build-system)
26151 (arguments
26152 (list #:tests? #f)) ;tests rquire Cargo
26153 (propagated-inputs
26154 (list python-semantic-version
26155 python-setuptools))
26156 (home-page "https://github.com/PyO3/setuptools-rust")
26157 (synopsis "Setuptools plugin for Rust extensions")
26158 (description
26159 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
26160Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
26161 (license license:expat)))
26162
26163(define-public python-setuptools-gettext
26164 (package
26165 (name "python-setuptools-gettext")
26166 (version "0.1.14")
26167 (source
26168 (origin
26169 (method git-fetch)
26170 (uri (git-reference
26171 (url "https://github.com/breezy-team/setuptools-gettext")
26172 (commit (string-append "v" version))))
26173 (file-name (git-file-name name version))
26174 (sha256
26175 (base32 "1m6a3qjwvqbvlzwqap7050rqsxb7nwibl38iklnqz8363iclm76k"))))
26176 (build-system pyproject-build-system)
26177 (native-inputs (list python-pytest python-tomli python-setuptools))
26178 (home-page "https://github.com/breezy-team/setuptools-gettext")
26179 (synopsis "Setuptools plugin for gettext")
26180 (description "This package provides a plugin for Setuptools for gettext.")
26181 (license license:gpl2+)))
26182
26183(define-public python-pyclibrary
26184 ;; XXX: https://github.com/MatthieuDartiailh/pyclibrary/issues/82
26185 (let ((commit "4e1e243a0bdfefa188d93ebdf3b60c6861244855")
26186 (revision "0"))
26187 (package
26188 (name "python-pyclibrary")
26189 (version (git-version "0.2.2" revision commit))
26190 (source
26191 (origin
26192 (method git-fetch)
26193 (uri (git-reference
26194 (url "https://github.com/MatthieuDartiailh/pyclibrary")
26195 (commit commit)))
26196 (file-name (git-file-name name version))
26197 (sha256
26198 (base32 "1sza6n2fg8zml0v1s5zwzrlsb79s2abn1n4pr1l8r15al4g9z0c6"))))
26199 (build-system pyproject-build-system)
26200 (arguments
26201 (list
26202 #:phases
26203 #~(modify-phases %standard-phases
26204 (add-after 'unpack 'set-version
26205 (lambda _
26206 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" "0.2.2"))))))
26207 (native-inputs
26208 (list python-pytest
26209 python-setuptools
26210 python-setuptools-scm))
26211 (propagated-inputs
26212 (list python-pyparsing))
26213 (home-page "https://github.com/MatthieuDartiailh/pyclibrary")
26214 (synopsis "Wrap dynamic libraries in Python")
26215 (description
26216 "This package helps wrapping dynamic libraries in Python. It includes
26217a pure-Python C parser and an automation library that uses C header file
26218definitions to simplify the use of C bindings.")
26219 (license license:expat))))
26220
26221(define-public python-pyclipper
26222 (package
26223 (name "python-pyclipper")
26224 (version "1.3.0.post6")
26225 (source
26226 (origin
26227 (method git-fetch)
26228 (uri (git-reference
26229 (url "https://github.com/greginvm/pyclipper")
26230 (commit version)))
26231 (file-name (git-file-name name version))
26232 (sha256
26233 (base32 "1ijr7sx3203b3ppvsn1zyy8nfz93nbi60l8dxj2hdd6sj25g8q5k"))))
26234 (build-system pyproject-build-system)
26235 (arguments
26236 (list
26237 #:phases
26238 #~(modify-phases %standard-phases
26239 (add-after 'unpack 'set-version
26240 (lambda _
26241 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
26242 (add-before 'build 'cythonize-sources
26243 (lambda _
26244 (with-directory-excursion "src/pyclipper"
26245 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
26246 (native-inputs
26247 (list python-cython
26248 python-pytest
26249 python-setuptools
26250 python-setuptools-scm))
26251 (home-page "https://github.com/greginvm/pyclipper")
26252 (synopsis "Wrapper for Angus Johnson's Clipper library")
26253 (description
26254 "Pyclipper is a Cython wrapper for the C++ translation of the
26255Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
26256 (license license:expat)))
26257
26258(define-public python-semver
26259 (package
26260 (name "python-semver")
26261 (version "3.0.4")
26262 (source
26263 (origin
26264 (method url-fetch)
26265 (uri (pypi-uri "semver" version))
26266 (sha256
26267 (base32 "00lnb1mpppgq041kwcbg405rqsi2mzl8dw1s0c8hmvd5hk2xiixg"))))
26268 (build-system pyproject-build-system)
26269 (native-inputs (list python-pytest python-pytest-cov python-setuptools
26270 python-wheel))
26271 (home-page "https://github.com/k-bx/python-semver")
26272 (synopsis "Python helper for Semantic Versioning")
26273 (description
26274 "This package provides a Python library for @url{Semantic Versioning,
26275http://semver.org/}.")
26276 (license license:bsd-3)))
26277
26278(define-public python-pyro4
26279 (package
26280 (name "python-pyro4")
26281 (version "4.82")
26282 (source
26283 (origin
26284 (method url-fetch)
26285 (uri (pypi-uri "Pyro4" version))
26286 (sha256
26287 (base32 "1yr1rv2afmq55wb14sx9qplzkqw7fya9rprsqdyxfbg90h45n7si"))))
26288 (build-system pyproject-build-system)
26289 (arguments
26290 (list #:test-flags
26291 #~(list "-k"
26292 (string-join
26293 ;; Those tests require network.
26294 (list "testBCstart"
26295 "testAutoClean"
26296 "testDaemonPyroObj"
26297 "testLookupAndRegister"
26298 "testLookupInvalidHmac"
26299 "testLookupUnixsockParsing"
26300 "testMulti"
26301 "testRefuseDottedNames"
26302 "testResolve"
26303 "testBCLookup0000"
26304 "testPyroname"
26305 "testResolveAsymmetricHmacUsage"
26306 "testResolveWrongHmac"
26307 "testStartNSfunc"
26308 "testCustomDictClass"
26309 "testDictClassFail"
26310 "testBroadcast"
26311 "testGetIP"
26312 ;; XXX: Unclear why this test fails.
26313 "testCustomClassFail")
26314 " and not "))
26315 #:phases
26316 #~(modify-phases %standard-phases
26317 (replace 'check
26318 (lambda* (#:key tests? test-flags #:allow-other-keys)
26319 (if tests?
26320 (apply invoke "python" "-m" "unittest" test-flags)
26321 (format #t "test suite not run.~%")))))))
26322 (native-inputs
26323 (list python-cloudpickle
26324 python-dill
26325 python-msgpack
26326 python-setuptools
26327 python-wheel))
26328 (propagated-inputs
26329 (list python-serpent))
26330 (home-page "https://pyro4.readthedocs.io")
26331 (synopsis "Distributed object middleware for Python")
26332 (description
26333 "Pyro enables you to build applications in which objects can talk to each
26334other over the network. You can just use normal Python method calls to call
26335objects on other machines, also known as remote procedure calls (RPC).")
26336 (license license:expat)))
26337
26338(define-public python-phonenumbers
26339 (package
26340 (name "python-phonenumbers")
26341 (version "8.13.37")
26342 (source
26343 (origin
26344 (method git-fetch)
26345 (uri (git-reference
26346 (url "https://github.com/daviddrysdale/python-phonenumbers")
26347 (commit (string-append "v" version))))
26348 (file-name (git-file-name name version))
26349 (sha256
26350 (base32 "1bgab6s7l2bqg671sns138c9qr9f8ndvjr4ig8l3ik9q054l9k9n"))))
26351 (build-system pyproject-build-system)
26352 (arguments
26353 (list
26354 #:test-backend #~'custom
26355 #:test-flags #~(list "-m" "testwrapper")
26356 #:phases
26357 #~(modify-phases %standard-phases
26358 (add-after 'unpack 'chdir
26359 (lambda _
26360 (chdir "python"))))))
26361 (propagated-inputs (list python-protobuf))
26362 (native-inputs (list python-setuptools))
26363 (home-page "https://github.com/daviddrysdale/python-phonenumbers")
26364 (synopsis "Python library for dealing with international phone numbers")
26365 (description
26366 "This package provides a Python port of Google's libphonenumber library.")
26367 (license license:asl2.0)))
26368
26369(define-public python-heapdict
26370 (package
26371 (name "python-heapdict")
26372 (version "1.0.1")
26373 (source
26374 (origin
26375 (method url-fetch)
26376 (uri (pypi-uri "HeapDict" version))
26377 (sha256
26378 (base32
26379 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
26380 (build-system pyproject-build-system)
26381 (arguments (list #:test-backend #~'unittest))
26382 (native-inputs (list python-setuptools))
26383 (home-page "http://stutzbachenterprises.com/")
26384 (synopsis "Heap with decrease-key and increase-key operations")
26385 (description
26386 "heapdict implements the MutableMapping ABC, meaning it works pretty much
26387like a regular Python @code{dict}. It’s designed to be used as a priority
26388queue.")
26389 (license license:bsd-3)))
26390
26391(define-public python-send2trash
26392 (package
26393 (name "python-send2trash")
26394 (version "1.8.2")
26395 (source
26396 (origin (method git-fetch)
26397 ;; Source tarball on PyPI doesn't include tests.
26398 (uri (git-reference
26399 (url "https://github.com/arsenetar/send2trash")
26400 (commit version)))
26401 (file-name (git-file-name name version))
26402 (sha256
26403 (base32
26404 "0dl9nv3h3kkcavwiswzg76pksqczq448gbdvlbz88bm71zvdshx7"))))
26405 (build-system pyproject-build-system)
26406 (arguments
26407 (list
26408 #:phases
26409 '(modify-phases %standard-phases
26410 (add-before 'check 'pre-check
26411 (lambda _ (setenv "HOME" "/tmp"))))))
26412 (native-inputs (list python-pytest python-setuptools python-wheel))
26413 (home-page "https://github.com/arsenetar/send2trash")
26414 (synopsis "Send files to the user's @file{~/Trash} directory")
26415 (description "This package provides a Python library to send files to the
26416user's @file{~/Trash} directory.")
26417 (license license:bsd-3)))
26418
26419(define-public python-pyfavicon
26420 (package
26421 (name "python-pyfavicon")
26422 (version "0.1.1")
26423 (source
26424 (origin
26425 (method git-fetch)
26426 (uri (git-reference
26427 (url "https://github.com/bilelmoussaoui/pyfavicon")
26428 (commit version)))
26429 (file-name (git-file-name name version))
26430 (sha256
26431 (base32 "04mx8vbi6j9l8daqa18sv0kkcyqv4wbc9z4ma77w68baq6ss0jzf"))))
26432 (build-system pyproject-build-system)
26433 (arguments
26434 (list
26435 #:test-backend #~'unittest
26436 #:test-flags
26437 #~(list "-k" (string-join (list
26438 ;; Socket name resolution fails.
26439 "not test_url_icon_link_type"
26440 "test_icon_sizes"
26441 ;; Tuples differ.
26442 "test_largest_icon")
26443 " and not "))))
26444 (native-inputs (list python-setuptools))
26445 (propagated-inputs
26446 (list python-aiohttp python-beautifulsoup4 python-pillow))
26447 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
26448 (synopsis "Async favicon fetcher")
26449 (description
26450 "@code{pyfavicon} is an async favicon fetcher.")
26451 (license license:expat)))
26452
26453(define-public python-gyp
26454 ;; Google does not release versions.
26455 (let ((commit "1615ec326858f8c2bd8f30b3a86ea71830409ce4")
26456 (revision "2"))
26457 (package
26458 (name "python-gyp")
26459 (version (git-version "0.0.0" revision commit))
26460 (source
26461 (origin
26462 (method git-fetch)
26463 (uri (git-reference
26464 (url "https://chromium.googlesource.com/external/gyp")
26465 (commit commit)))
26466 (file-name (git-file-name name version))
26467 (sha256
26468 (base32 "02rnmw7k2r33x5nbb5xb8kk170hk0s1wmwfqpsx4cij1wbi4bqhk"))))
26469 (build-system pyproject-build-system)
26470 (arguments
26471 (list
26472 #:test-flags
26473 #~(list "--ignore-glob=test/win/**/*.py")
26474 #:phases
26475 #~(modify-phases %standard-phases
26476 (add-after 'unpack 'remove-six-requirements
26477 (lambda _
26478 (substitute* "pylib/gyp/generator/ninja.py"
26479 (("six\\.ensure_binary\\(outputs\\[0\\]\\)")
26480 "outputs[0].encode('utf-8')")
26481 (("import six")
26482 ""))
26483 (substitute* '("pylib/gyp/common.py"
26484 "pylib/gyp/msvs_emulation.py"
26485 "test/lib/TestGyp.py")
26486 (("from six\\.moves import collections_abc")
26487 "import collections")
26488 (("collections_abc")
26489 "collections.abc"))))
26490 (add-before 'check 'configure-tests
26491 (lambda _
26492 (setenv "PYTHONPATH"
26493 (string-append (getcwd) "/test/lib:"
26494 (getenv "GUIX_PYTHONPATH"))))))))
26495 (native-inputs (list python-pytest python-setuptools))
26496 (home-page "https://gyp.gsrc.io/")
26497 (synopsis "GYP is a Meta-Build system")
26498 (description
26499 "GYP builds build systems for large, cross platform applications.
26500It can be used to generate XCode projects, Visual Studio projects, Ninja build
26501files, and Makefiles.")
26502 (license license:bsd-3))))
26503
26504(define-public python-funcy
26505 (package
26506 (name "python-funcy")
26507 (version "1.11")
26508 (source
26509 (origin
26510 (method git-fetch)
26511 (uri (git-reference
26512 (url "https://github.com/Suor/funcy")
26513 (commit version)))
26514 (sha256
26515 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
26516 (file-name (git-file-name name version))))
26517 (build-system pyproject-build-system)
26518 (native-inputs
26519 (list python-pytest python-whatever python-setuptools python-wheel))
26520 (home-page "https://github.com/Suor/funcy")
26521 (synopsis "Functional tools")
26522 (description "@code{funcy} is a library that provides functional tools.
26523Examples are:
26524@enumerate
26525@item merge - Merges collections of the same type
26526@item walk - Type-preserving map
26527@item select - Selects a part of a collection
26528@item take - Takes the first n items of a collection
26529@item first - Takes the first item of a collection
26530@item remove - Predicated-removes items of a collection
26531@item concat - Concatenates two collections
26532@item flatten - Flattens a collection with subcollections
26533@item distinct - Returns only distinct items
26534@item split - Predicated-splits a collection
26535@item split_at - Splits a collection at a given item
26536@item group_by - Groups items by group
26537@item pairwise - Pairs off adjacent items
26538@item partial - Partially-applies a function
26539@item curry - Curries a function
26540@item compose - Composes functions
26541@item complement - Complements a predicate
26542@item all_fn - \"all\" with predicate
26543@end enumerate")
26544 (license license:bsd-3)))
26545
26546(define-public python-funcy-1.14
26547 (package/inherit python-funcy
26548 (name "python-funcy")
26549 (version "1.14")
26550 (source
26551 (origin
26552 (method git-fetch)
26553 (uri (git-reference
26554 (url "https://github.com/Suor/funcy")
26555 (commit version)))
26556 (sha256
26557 (base32 "1chgi60z3c97m9l23vf5cpyp0nidkqlpxc55q5k5pz41ms3d0440"))
26558 (file-name (git-file-name name version))))))
26559
26560(define-public python-isoweek
26561 (package
26562 (name "python-isoweek")
26563 (version "1.3.3")
26564 (source
26565 (origin
26566 (method url-fetch)
26567 (uri (pypi-uri "isoweek" version))
26568 (sha256
26569 (base32 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
26570 (build-system pyproject-build-system)
26571 (arguments (list #:test-backend #~'unittest))
26572 (native-inputs (list python-setuptools))
26573 (home-page "https://github.com/gisle/isoweek")
26574 (synopsis "Objects representing a week")
26575 (description "The @code{isoweek} module provide the class Week that
26576implements the week definition of ISO 8601. This standard also defines
26577a notation for identifying weeks; yyyyWww (where the W is a literal).
26578Week instances stringify to this form.")
26579 (license license:bsd-3)))
26580
26581(define-public bpython
26582 (package
26583 (name "bpython")
26584 (version "0.25")
26585 (source
26586 (origin
26587 (method url-fetch)
26588 (uri (pypi-uri "bpython" version))
26589 (sha256
26590 (base32 "0ny6cqhpil7z36djc4ixakri65kb1rdn3d4ckmpc5p7nks8gqin2"))))
26591 (build-system pyproject-build-system)
26592 (arguments
26593 (list
26594 #:test-flags
26595 ;; Tests can't import curtsies, pygments and urwid.
26596 #~(list "-k" (string-join
26597 (list "not test_issue108"
26598 "test_issue133")
26599 " and not " ))
26600 #:phases
26601 #~(modify-phases %standard-phases
26602 (add-after 'wrap 'add-aliases
26603 ;; For symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
26604 (lambda _
26605 (for-each
26606 (lambda (old new)
26607 (symlink old (string-append #$output "/bin/" new)))
26608 '("bpython" "bpython-urwid" "bpdb")
26609 '("bpython3" "bpython3-urwid" "bpdb3")))))))
26610 (native-inputs
26611 (list python-mock
26612 python-pytest
26613 python-setuptools))
26614 (propagated-inputs
26615 (list python-curtsies
26616 python-cwcwidth
26617 python-greenlet
26618 python-pygments
26619 python-pyxdg
26620 python-requests
26621 ;; [optional]
26622 python-pyperclip
26623 python-jedi
26624 python-urwid-2
26625 python-watchdog))
26626 (home-page "https://bpython-interpreter.org/")
26627 (synopsis "Fancy interface to the Python interpreter")
26628 (description "Bpython is a fancy interface to the Python
26629interpreter. bpython's main features are
26630
26631@enumerate
26632@item in-line syntax highlighting,
26633@item readline-like autocomplete with suggestions displayed as you type,
26634@item expected parameter list for any Python function,
26635@item \"rewind\" function to pop the last line of code from memory and
26636 re-evaluate,
26637@item send the code you've entered off to a pastebin,
26638@item save the code you've entered to a file, and
26639@item auto-indentation.
26640@end enumerate")
26641 (license license:expat)))
26642
26643(define-public python-pyinotify
26644 (package
26645 (name "python-pyinotify")
26646 (version "0.9.6")
26647 (source
26648 (origin
26649 (method git-fetch)
26650 (uri (git-reference
26651 (url "https://github.com/seb-m/pyinotify")
26652 (commit version)))
26653 (file-name (git-file-name name version))
26654 (sha256
26655 (base32 "0qfvs1sfvlpfb10rxlivwa96mg0ibczis554s2rx32s11nynzvbk"))))
26656 (build-system pyproject-build-system)
26657 (arguments
26658 (list
26659 #:tests? #f ;no tests
26660 #:phases
26661 #~(modify-phases %standard-phases
26662 (add-after 'unpack 'drop-shebang
26663 (lambda _
26664 ;; Dropping this shebang prevents the build system from adding
26665 ;; python-wrapper as an input, reducing package closure size from
26666 ;; ~200 MiB to ~0.2 MiB.
26667 (substitute* "python3/pyinotify.py"
26668 (("#!/usr/bin/env python") "")))))))
26669 (native-inputs
26670 (list python-setuptools))
26671 (home-page "https://github.com/seb-m/pyinotify")
26672 (synopsis "Python library for monitoring inotify events")
26673 (description
26674 "@code{pyinotify} provides a Python interface for monitoring file system
26675events on Linux.")
26676 (license license:expat)))
26677
26678(define-public python-pyinotify-cli
26679 (package
26680 (inherit python-pyinotify)
26681 (name "python-pyinotify-cli")
26682 (arguments
26683 (substitute-keyword-arguments (package-arguments python-pyinotify)
26684 ((#:phases phases #~%standard-phases)
26685 #~(modify-phases #$phases
26686 (delete 'drop-shebang)
26687 (add-after 'install 'install-entrypoint
26688 (lambda _
26689 (let ((entrypoint
26690 (string-append #$output "/lib/python"
26691 (python-version (which "python"))
26692 "/site-packages/pyinotify.py"))
26693 (bin (string-append #$output "/bin")))
26694 (mkdir-p bin)
26695 (invoke "chmod" "+x" entrypoint)
26696 (symlink
26697 entrypoint (string-append #$output "/bin/pyinotify")))))))))
26698 (description
26699 "This package provides, in addition to the @code{pyinotify} Python library,
26700a command line application exposing the same functionality.")))
26701
26702(define-public python-more-itertools
26703 (package
26704 (name "python-more-itertools")
26705 (version "10.6.0")
26706 (source
26707 (origin
26708 (method url-fetch)
26709 (uri (pypi-uri "more-itertools" version))
26710 (sha256
26711 (base32
26712 "0fzfnfga0jdx217kff57lx3pam76162i0dd0nsgwqccw038zmmrc"))
26713 (snippet
26714 ;; distutils.errors.DistutilsOptionError: No configuration found for
26715 ;; dynamic 'description'. Some dynamic fields need to be specified via
26716 ;; `tool.setuptools.dynamic`others must be specified via the equivalent
26717 ;; attribute in `setup.py`.
26718 '(delete-file "setup.py"))))
26719 (build-system pyproject-build-system)
26720 (arguments
26721 (list
26722 #:phases
26723 #~(modify-phases %standard-phases
26724 (replace 'check
26725 (lambda* (#:key tests? #:allow-other-keys)
26726 (when tests?
26727 (invoke "python" "-m" "unittest")))))))
26728 (native-inputs
26729 (list python-flit-core))
26730 (home-page "https://github.com/erikrose/more-itertools")
26731 (synopsis "More routines for operating on iterables, beyond itertools")
26732 (description "Python's built-in @code{itertools} module implements a
26733number of iterator building blocks inspired by constructs from APL, Haskell,
26734and SML. @code{more-itertools} includes additional building blocks for
26735working with iterables.")
26736 (license license:expat)))
26737
26738(define-public python-latexcodec
26739 (package
26740 (name "python-latexcodec")
26741 (version "3.0.1")
26742 (source
26743 (origin
26744 (method git-fetch)
26745 (uri (git-reference
26746 (url "https://github.com/mcmtroffaes/latexcodec/")
26747 (commit version)))
26748 (file-name (git-file-name name version))
26749 (sha256
26750 (base32 "0j4hkn161h0hsx3ixs85dqnsaya27ck9c2ri1lv8cayc5a9kqvcp"))))
26751 (build-system pyproject-build-system)
26752 (native-inputs (list python-pytest python-setuptools))
26753 (home-page "https://readthedocs.org/projects/latexcodec/")
26754 (synopsis "Work with LaTeX code in Python")
26755 (description "Lexer and codec to work with LaTeX code in Python.")
26756 (license license:expat)))
26757
26758(define-public python-pybloom-live
26759 (package
26760 (name "python-pybloom-live")
26761 (version "4.0.0")
26762 (source (origin
26763 (method url-fetch)
26764 (uri (pypi-uri "pybloom_live" version))
26765 (sha256
26766 (base32
26767 "040i6bjqvl33j30v865shsk30s3h7f16pqwiaj5kig857dfmqm4r"))))
26768 (build-system pyproject-build-system)
26769 (propagated-inputs (list python-bitarray python-xxhash))
26770 (native-inputs (list python-pytest python-setuptools python-wheel))
26771 (home-page "https://github.com/joseph-fox/python-bloomfilter")
26772 (synopsis "Bloom filter")
26773 (description "This package provides a scalable Bloom filter implemented in
26774Python.")
26775 (license license:expat)))
26776
26777;; XXX: Not maintained since 2020.
26778(define-public python-pybktree
26779 (package
26780 (name "python-pybktree")
26781 (version "1.1")
26782 (source
26783 (origin
26784 (method url-fetch)
26785 (uri (pypi-uri "pybktree" version))
26786 (sha256
26787 (base32 "0asd2lw9c5l5wi4z24k7gkhlprpdkcvs8d94szk56x9xvmy07h7f"))))
26788 (build-system pyproject-build-system)
26789 (arguments
26790 (list #:tests? #f)) ;no tests provided
26791 (native-inputs (list python-setuptools))
26792 (home-page "https://github.com/Jetsetter/pybktree")
26793 (synopsis "Pythonic BK-tree data structure")
26794 (description
26795 "This package provides a BK-tree data structure to allow fast querying of
26796close matches in Python.")
26797 (license license:expat)))
26798
26799(define-public python-pybtex
26800 (package
26801 (name "python-pybtex")
26802 (version "0.25.0")
26803 (source
26804 (origin
26805 (method git-fetch)
26806 (uri (git-reference
26807 (url "https://codeberg.org/pybtex/pybtex")
26808 (commit version)))
26809 (file-name (git-file-name name version))
26810 (sha256
26811 (base32 "12rixrciizlvdxxja7qm6c02yzyslzd0jcv07niaii1ly0dg1fq4"))))
26812 (build-system pyproject-build-system)
26813 (native-inputs (list python-pytest python-setuptools))
26814 (propagated-inputs (list python-latexcodec python-pyyaml))
26815 (home-page "https://pybtex.org/")
26816 (synopsis "BibTeX-compatible bibliography processor")
26817 (description
26818 "Pybtex is a BibTeX-compatible bibliography processor written in Python.
26819You can simply type pybtex instead of bibtex.")
26820 (license license:expat)))
26821
26822(define-public python-pybtex-apa-style
26823 (package
26824 (name "python-pybtex-apa-style")
26825 (version "1.3")
26826 (source
26827 (origin
26828 (method url-fetch)
26829 (uri (pypi-uri "pybtex-apa-style" version))
26830 (sha256
26831 (base32 "1cmgcpcvs9jcw4yxhiy217hdngp9p9nlp5x6s2qmkwj0iwgd39iq"))))
26832 (build-system pyproject-build-system)
26833 (arguments
26834 (list
26835 #:test-backend #~'custom
26836 #:test-flags
26837 #~(list "-c" (string-append "import sys, pybtex.plugin;"
26838 " sys.exit('apa' not"
26839 " in pybtex.plugin.enumerate_plugin_names"
26840 "('pybtex.style.labels'))"))))
26841 (native-inputs (list python-pybtex python-setuptools))
26842 (home-page "https://github.com/naeka/pybtex-apa-style")
26843 (synopsis "APA style for pybtex")
26844 (description
26845 "This package provides support for the APA style within pybtex.")
26846 (license license:expat)))
26847
26848(define-public python-onetimepass
26849 (package
26850 (name "python-onetimepass")
26851 (version "1.0.1")
26852 (source
26853 (origin
26854 (method git-fetch)
26855 (uri (git-reference
26856 (url "https://github.com/tadeck/onetimepass/")
26857 (commit (string-append "v" version))))
26858 (file-name (git-file-name name version))
26859 (sha256
26860 (base32 "0wmv62l3r8r4428gdzyj80lhgadfqvj220khz1wnm9alyzg60wkh"))))
26861 (build-system pyproject-build-system)
26862 (arguments (list #:tests? #f)) ; Requires unpackaged timecop.
26863 (native-inputs (list python-setuptools))
26864 (propagated-inputs (list python-six))
26865 (home-page "https://github.com/tadeck/onetimepass/")
26866 (synopsis "One-time password library")
26867 (description
26868 "Python one-time password library for HMAC-based (HOTP) and time-based
26869(TOTP) passwords.")
26870 (license license:expat)))
26871
26872(define-public python-online-judge-api-client
26873 (package
26874 (name "python-online-judge-api-client")
26875 (properties '((commit . "615c345f169e2603e0b907287559a4535fc3c6f9")
26876 (revision . "0")))
26877 (version (git-version "10.10.1"
26878 (assoc-ref properties 'revision)
26879 (assoc-ref properties 'commit)))
26880 (source
26881 (origin
26882 (method git-fetch)
26883 (uri (git-reference
26884 (url "https://github.com/online-judge-tools/api-client")
26885 (commit (assoc-ref properties 'commit))))
26886 (file-name (git-file-name name version))
26887 (sha256
26888 (base32 "13m3cxv6bd3igj6649149xb27ljmzqzpli6hpfrywvgbm238hbws"))
26889 (patches
26890 (search-patches "python-online-judge-api-client-tests.patch"))
26891 ))
26892 (build-system pyproject-build-system)
26893 (arguments
26894 (list
26895 #:test-flags
26896 #~(list "--ignore-glob=tests/get_contest_*.py"
26897 "--ignore-glob=tests/get_problem_*.py")
26898 #:phases
26899 #~(modify-phases %standard-phases
26900 (add-before 'check 'configure-tests
26901 (lambda* (#:key inputs outputs #:allow-other-keys)
26902 (delete-file-recursively
26903 (string-append (site-packages inputs outputs)
26904 "/tests"))
26905 (call-with-output-file "pytest.ini"
26906 (lambda (port)
26907 (format port "\
26908[pytest]
26909python_files = tests/*.py"))))))))
26910 (native-inputs (list python-pytest python-setuptools))
26911 (propagated-inputs
26912 (list python-appdirs
26913 python-beautifulsoup4
26914 python-colorlog
26915 python-lxml
26916 python-requests
26917 python-toml
26918 python-jsonschema))
26919 (home-page "https://github.com/online-judge-tools/api-client")
26920 (synopsis "API client for various online judges")
26921 (description
26922 "This is an API client for various online judges, used as the backend
26923library of @code{oj} command. You can use the Python library
26924(@code{onlinejudge} module) and the command-line interface (@command{oj-api}
26925command) which talks JSON compatible with jmerle/competitive-companion.")
26926 (license license:expat)))
26927
26928(define-public online-judge-tools
26929 (package
26930 (name "online-judge-tools")
26931 (version "11.5.1")
26932 ;; Source distributions are not uploaded to PyPI.
26933 ;; https://pypi.org/project/online-judge-tools/11.5.1/#files
26934 (source
26935 (origin
26936 (method git-fetch)
26937 (uri (git-reference
26938 (url "https://github.com/online-judge-tools/oj")
26939 (commit (string-append "v" version))))
26940 (file-name (git-file-name name version))
26941 (sha256
26942 (base32 "0zkzmmjgjb6lyrzq1ip54cpnp7al9a7mcyjyi5vx58bvnx3q0c6m"))
26943 (patches (search-patches "online-judge-tools.patch"))))
26944 (build-system pyproject-build-system)
26945 (arguments
26946 (list
26947 #:test-flags
26948 ;; These tests require network connections
26949 #~(list "--ignore=tests/command_version.py")))
26950 (native-inputs (list python-pytest python-setuptools))
26951 (inputs (list time))
26952 (propagated-inputs (list python-online-judge-api-client python-colorama
26953 python-requests))
26954 (home-page "https://github.com/online-judge-tools/oj")
26955 (synopsis "Command to help solving problems on various online judges")
26956 (description
26957 "@command{oj} is a command line tool to help solving problems on
26958various online judges. This command automates downloading sample
26959cases, generating additional test cases, testing for your code, and
26960submitting it.")
26961 (license license:expat)))
26962
26963(define-public python-mpv-jsonipc
26964 (package
26965 (name "python-mpv-jsonipc")
26966 (version "1.2.0")
26967 (source
26968 (origin
26969 (method url-fetch)
26970 (uri (pypi-uri "python-mpv-jsonipc" version))
26971 (sha256
26972 (base32 "0ymdwrx544a6gn6wm9dixpgzbfrbpxvcj5ys7m41cgb4lvpvx691"))))
26973 (build-system pyproject-build-system)
26974 (arguments (list #:tests? #f)) ;No test suite.
26975 (native-inputs (list python-setuptools python-wheel))
26976 (home-page "https://github.com/iwalton3/python-mpv-jsonipc")
26977 (synopsis "Python API to control MPV using JSON IPC")
26978 (description "Python MPV JSONIPC implements an interface similar to
26979python-mpv, but it uses the JSON IPC protocol instead of the C API.")
26980 (license license:asl2.0)))
26981
26982(define-public python-jellyfin-apiclient
26983 (package
26984 (name "python-jellyfin-apiclient")
26985 (version "1.11.0")
26986 (source
26987 (origin
26988 (method git-fetch)
26989 (uri
26990 (git-reference
26991 (url "https://github.com/jellyfin/jellyfin-apiclient-python.git")
26992 (commit (string-append "v" version))))
26993 (sha256
26994 (base32 "1l30r7s4djvcsnf342af8mvh4c68v9b37j5y47k6cpaj8fj78lac"))))
26995 (build-system pyproject-build-system)
26996 (native-inputs (list python-setuptools python-pytest python-wheel))
26997 (propagated-inputs (list python-certifi python-requests python-urllib3
26998 python-websocket-client))
26999 (home-page "https://github.com/jellyfin/jellyfin-apiclient-python")
27000 (synopsis "Python API client for Jellyfin")
27001 (description "The Jellyfin ApiClient Python package makes it possible
27002to use the Jellyfin API from Python. It was extracted from the Jellyfin
27003Kodi plugin.")
27004 (license license:gpl3+)))
27005
27006(define-public python-parso
27007 (package
27008 (name "python-parso")
27009 (version "0.8.4")
27010 (source
27011 (origin
27012 (method url-fetch)
27013 (uri (pypi-uri "parso" version))
27014 (sha256
27015 (base32 "0bdr38l6p7d9q8agxljdbzm4158grkp1sms5lfcr1f8g4ic7nfpb"))))
27016 (build-system pyproject-build-system)
27017 (native-inputs
27018 (list python-pytest
27019 python-setuptools
27020 python-wheel))
27021 (home-page "https://github.com/davidhalter/parso")
27022 (synopsis "Python Parser")
27023 (description "Parso is a Python parser that supports error recovery and
27024round-trip parsing for different Python versions (in multiple Python versions).
27025Parso is also able to list multiple syntax errors in your Python file.")
27026 (license license:expat)))
27027
27028(define-public python-async-generator
27029 (package
27030 (name "python-async-generator")
27031 (version "1.10")
27032 (source
27033 (origin
27034 (method url-fetch)
27035 (uri (pypi-uri "async_generator" version))
27036 (sha256
27037 (base32
27038 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
27039 (build-system pyproject-build-system)
27040 (native-inputs
27041 (list python-pytest python-setuptools))
27042 (home-page "https://github.com/python-trio/async_generator")
27043 (synopsis "Async generators and context managers for Python 3.5+")
27044 (description "@code{async_generator} back-ports Python 3.6's native async
27045generators and Python 3.7's context managers into Python 3.5.")
27046 ;; Dual licensed.
27047 (license (list license:expat license:asl2.0))))
27048
27049(define-public python-async-timeout
27050 (package
27051 (name "python-async-timeout")
27052 (version "5.0.1")
27053 (source
27054 (origin
27055 (method url-fetch)
27056 (uri (pypi-uri "async_timeout" version))
27057 (sha256
27058 (base32 "1lvparrx5sfnapaq4mwk0ai7kqrwg6h2ykc2gqc5wsjs7mx1lcnr"))))
27059 (build-system pyproject-build-system)
27060 (arguments
27061 (list
27062 #:phases
27063 #~(modify-phases %standard-phases
27064 (add-after 'unpack 'fix-pytest-config
27065 (lambda _
27066 ;; Drop test coverage requirements
27067 (substitute* "setup.cfg"
27068 ((".*--cov.*") "")))))))
27069 (native-inputs
27070 (list python-pytest
27071 python-pytest-asyncio
27072 python-setuptools
27073 python-wheel))
27074 (home-page "https://github.com/aio-libs/async-timeout")
27075 (synopsis "Timeout context manager for asyncio programs")
27076 (description
27077 "@code{async-timeout} provides a timeout timeout context manager
27078compatible with @code{asyncio}.")
27079 (license license:asl2.0)))
27080
27081(define-public python-async-timeout-4
27082 (package
27083 (inherit python-async-timeout)
27084 (name "python-async-timeout")
27085 (version "4.0.3")
27086 (source
27087 (origin
27088 (method url-fetch)
27089 (uri (pypi-uri "async-timeout" version))
27090 (sha256
27091 (base32 "0bsj4z28ggxh1b6h6dvhx2mk6yqgb88bg8lyslpd10jdx1mxjh26"))))))
27092
27093(define-public python-glob2
27094 (package
27095 (name "python-glob2")
27096 (version "0.7")
27097 (source
27098 (origin
27099 (method git-fetch)
27100 (uri (git-reference
27101 (url "https://github.com/miracle2k/python-glob2")
27102 (commit (string-append "v" version))))
27103 (file-name (git-file-name name version))
27104 (sha256
27105 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
27106 (build-system pyproject-build-system)
27107 (arguments
27108 (list
27109 #:phases
27110 #~(modify-phases %standard-phases
27111 (add-after 'unpack 'patch-tests-for-pytest8
27112 ;; See: <https://github.com/miracle2k/python-glob2/issues/30>.
27113 (lambda _
27114 (substitute* "test.py"
27115 (("setup\\(") "setup_method(")
27116 (("teardown\\(") "teardown_method("))
27117 (rename-file "test.py" "glob2_test.py"))))))
27118 (native-inputs (list python-pytest python-setuptools))
27119 (home-page "https://github.com/miracle2k/python-glob2/")
27120 (synopsis "Extended Version of the python buildin glob module")
27121 (description "This is an extended version of the Python
27122@url{http://docs.python.org/library/glob.html, built-in glob module} which
27123adds:
27124
27125@itemize
27126@item The ability to capture the text matched by glob patterns, and return
27127those matches alongside the file names.
27128@item A recursive @code{**} globbing syntax, akin for example to the
27129@code{globstar} option of Bash.
27130@item The ability to replace the file system functions used, in order to glob
27131on virtual file systems.
27132@item Compatible with Python 2 and Python 3 (tested with 3.3).
27133@end itemize
27134
27135Glob2 currently based on the glob code from Python 3.3.1.")
27136 (license license:bsd-2)))
27137
27138(define-public python-gipc
27139 (package
27140 (name "python-gipc")
27141 (version "1.8.0")
27142 (source
27143 (origin
27144 (method git-fetch)
27145 (uri (git-reference
27146 (url "https://github.com/jgehrcke/gipc")
27147 (commit version)))
27148 (file-name (git-file-name name version))
27149 (sha256
27150 (base32 "18w1fi3gh8i3kl58n6jpixzc2w42znxqhb3lj6hwn1641wq2hyrz"))))
27151 (build-system pyproject-build-system)
27152 (arguments
27153 (list
27154 #:phases
27155 #~(modify-phases %standard-phases
27156 (add-after 'unpack 'adjust-for-pytest-8
27157 (lambda _
27158 (substitute* "test/test_gipc.py"
27159 (("def setup") "def setup_method")
27160 (("def teardown") "def teardown_method")))))))
27161 (native-inputs
27162 (list python-pytest
27163 python-setuptools))
27164 (propagated-inputs
27165 (list python-gevent))
27166 (home-page "https://gehrcke.de/gipc/")
27167 (synopsis "Child process management in the context of gevent")
27168 (description
27169 "Usage of Python's multiprocessing package in a gevent-powered
27170application may raise problems. With @code{gipc}, process-based child
27171processes can safely be created anywhere within a gevent-powered
27172application.")
27173 (license license:expat)))
27174
27175(define-public python-beautifultable
27176 (package
27177 (name "python-beautifultable")
27178 (version "1.1.0")
27179 (source
27180 (origin
27181 (method git-fetch)
27182 (uri (git-reference
27183 (url "https://github.com/pri22296/beautifultable")
27184 (commit (string-append "v" version))))
27185 (file-name (git-file-name name version))
27186 (sha256
27187 (base32 "0b6c7dpc45sm3vn65qm00q20sdgpi78xxzwc0rij7hnj9c45w97x"))))
27188 (build-system pyproject-build-system)
27189 (arguments (list #:test-backend #~'unittest))
27190 (native-inputs (list python-pandas python-setuptools))
27191 (propagated-inputs (list python-wcwidth))
27192 (home-page "https://github.com/pri22296/beautifultable")
27193 (synopsis "Print ASCII tables for terminals")
27194 (description
27195 "@code{python-beautifultable} provides a class for easily printing
27196tabular data in a visually appealing ASCII format to a terminal.
27197
27198Features include, but are not limited to:
27199@itemize
27200@item Full customization of the look and feel of the table
27201@item Row and column accessors.
27202@item Full support for colors using ANSI sequences or any library.
27203@item Plenty of predefined styles and option to create custom ones.
27204@item Support for Unicode characters.
27205@item Supports streaming table when data is slow to retrieve.
27206@end itemize")
27207 (license license:expat)))
27208
27209(define-public python-globber
27210 (package
27211 (name "python-globber")
27212 (version "0.2.1")
27213 (source
27214 (origin
27215 (method git-fetch)
27216 (uri (git-reference
27217 (url "https://github.com/asharov/globber")
27218 (commit version)))
27219 (file-name (git-file-name name version))
27220 (sha256
27221 (base32 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
27222 (build-system pyproject-build-system)
27223 (native-inputs (list python-pytest python-setuptools))
27224 (home-page "https://github.com/asharov/globber")
27225 (synopsis "Library for string matching with glob patterns")
27226 (description
27227 "Globber is a Python library for matching file names against glob patterns.
27228In contrast to other glob-matching libraries, it matches arbitrary strings and
27229doesn't require the matched names to be existing files. In addition, it
27230supports the globstar @code{**} operator to match an arbitrary number of
27231path components.")
27232 (license license:asl2.0)))
27233
27234;; XXX: Not maintained since 2021.
27235(define-public python-git-hammer
27236 (package
27237 (name "python-git-hammer")
27238 (version "0.3.2")
27239 (source
27240 (origin
27241 (method git-fetch)
27242 (uri (git-reference
27243 (url "https://github.com/asharov/git-hammer")
27244 (commit version)))
27245 (file-name (git-file-name name version))
27246 (sha256
27247 (base32 "0j0skpbhi7js45hp1w2n87093yz1hjdg5y3kicwvm84fb8i38gvx"))))
27248 (build-system pyproject-build-system)
27249 (arguments
27250 (list
27251 #:phases
27252 #~(modify-phases %standard-phases
27253 (add-after 'unpack 'relax-requirements
27254 (lambda _
27255 (substitute* "setup.py"
27256 (("matplotlib <3.1") "matplotlib")))))))
27257 (native-inputs
27258 (list python-pytest
27259 python-setuptools))
27260 (propagated-inputs
27261 (list python-beautifultable
27262 python-dateutil
27263 python-gitpython
27264 python-globber
27265 python-matplotlib
27266 python-sqlalchemy
27267 python-sqlalchemy-utils))
27268 (home-page "https://github.com/asharov/git-hammer")
27269 (synopsis "Provide statistics for git repositories")
27270 (description
27271 "Git Hammer is a statistics tool for projects in git repositories. Its major
27272feature is tracking the number of lines authored by each person for every
27273commit, but it also includes some other useful statistics.")
27274 (license license:asl2.0)))
27275
27276(define-public python-gitignore-parser
27277 (package
27278 (name "python-gitignore-parser")
27279 (version "0.1.13")
27280 (source
27281 (origin
27282 (method git-fetch)
27283 (uri (git-reference
27284 (url "https://github.com/mherrmann/gitignore_parser")
27285 (commit (string-append "v" version))))
27286 (file-name (git-file-name name version))
27287 (sha256
27288 (base32 "0lx1lip9p70my7z77szxc6izg3dj3000r6z71f2bnx2z13rl5pld"))))
27289 (build-system pyproject-build-system)
27290 (arguments (list #:test-backend #~'unittest))
27291 (native-inputs (list python-setuptools))
27292 (home-page "https://github.com/mherrmann/gitignore_parser")
27293 (synopsis "Spec-compliant gitignore parser for Python")
27294 (description
27295 "This package provides a spec-compliant gitignore parser for Python.")
27296 (license license:expat)))
27297
27298(define-public python-fusepy
27299 (package
27300 (name "python-fusepy")
27301 (version "2.0.4")
27302 (source
27303 (origin
27304 (method git-fetch)
27305 (uri (git-reference
27306 (url "https://github.com/fusepy/fusepy")
27307 (commit (string-append "v" version))))
27308 (file-name (git-file-name name version))
27309 (sha256
27310 (base32 "10smh49lzmqam6ddxcnp1dajy4s9hi5ri3qp1rhwdyfsaq3pay81"))))
27311 (build-system pyproject-build-system)
27312 (arguments
27313 (list
27314 #:tests? #f ; No formalized tests.
27315 #:phases
27316 #~(modify-phases %standard-phases
27317 (add-before 'build 'set-library-file-name
27318 (lambda* (#:key inputs #:allow-other-keys)
27319 (substitute* "fuse.py"
27320 (("find_library\\('fuse'\\)")
27321 (format #f "~s"
27322 (search-input-file inputs "lib/libfuse.so")))))))))
27323 (native-inputs (list python-setuptools))
27324 (propagated-inputs (list fuse-2))
27325 (home-page "https://github.com/fusepy/fusepy")
27326 (synopsis "Simple ctypes bindings for FUSE")
27327 (description
27328 "Python module that provides a simple interface to FUSE and MacFUSE. The
27329binding is created using the standard @code{ctypes} library.")
27330 (license license:isc)))
27331
27332(define-public pybind11
27333 (package
27334 (name "pybind11")
27335 (version "2.13.6")
27336 (source (origin
27337 (method git-fetch)
27338 (uri (git-reference
27339 (url "https://github.com/pybind/pybind11")
27340 (commit (string-append "v" version))))
27341 (sha256
27342 (base32
27343 "1dbnki0pnky39kr04afd9ks597bzjc530zbk33jjss53nfvdvlj8"))
27344 (file-name (git-file-name name version))))
27345 (build-system cmake-build-system)
27346 (native-inputs
27347 `(("python" ,python-wrapper)
27348
27349 ;; The following dependencies are used for tests.
27350 ("python-pytest" ,python-pytest)
27351 ("catch" ,catch2-1)
27352 ("eigen" ,eigen)))
27353 (arguments
27354 (list
27355 #:configure-flags
27356 #~(list (string-append "-DCATCH_INCLUDE_DIR="
27357 (assoc-ref %build-inputs "catch")
27358 "/include/catch"))
27359 #:modules '((guix build cmake-build-system)
27360 ((guix build gnu-build-system) #:prefix gnu:)
27361 (guix build utils))
27362 #:phases
27363 #~(modify-phases %standard-phases
27364 (replace 'check
27365 (lambda* (#:rest args)
27366 (apply (assoc-ref gnu:%standard-phases 'check) args)))
27367 (add-after 'install 'install-python
27368 (lambda* (#:key outputs #:allow-other-keys)
27369 (let ((out (assoc-ref outputs "out")))
27370 (with-directory-excursion "../source"
27371 (setenv "PYBIND11_USE_CMAKE" "yes")
27372 (invoke "python" "setup.py" "install"
27373 "--single-version-externally-managed"
27374 "--root=/"
27375 (string-append "--prefix=" out)))))))))
27376 (home-page "https://github.com/pybind/pybind11/")
27377 (synopsis "Seamless operability between C++11 and Python")
27378 (description
27379 "@code{pybind11} is a lightweight header-only library that exposes C++
27380types in Python and vice versa, mainly to create Python bindings of existing
27381C++ code. Its goals and syntax are similar to the @code{Boost.Python}
27382library: to minimize boilerplate code in traditional extension modules by
27383inferring type information using compile-time introspection.")
27384 (license license:bsd-3)))
27385
27386(define-public python-pooch
27387 (package
27388 (name "python-pooch")
27389 (version "1.8.1")
27390 (source
27391 (origin
27392 (method url-fetch)
27393 (uri (pypi-uri "pooch" version))
27394 (sha256
27395 (base32 "0w32fhfp67k0ip0gxjpw8kxdx9ghybxmqkv9sbwy99nrgl4n7vr7"))))
27396 (build-system pyproject-build-system)
27397 (arguments
27398 (list
27399 #:test-flags
27400 '(list "-k"
27401 (string-append
27402 ;; We don't have the test archives
27403 "not test_decompress"
27404 " and not test_multiple_unpacking"
27405 " and not test_unpack_members_with_leading_dot"
27406 " and not test_unpacking"
27407 " and not test_unpacking_members_then_no_members"
27408 " and not test_unpacking_wrong_members_then_no_members"
27409 ;; These all require access to the internet
27410 " and not test_check_availability"
27411 " and not test_check_availability_invalid_downloader"
27412 " and not test_check_availability_on_ftp"
27413 " and not test_create_and_fetch"
27414 " and not test_downloader_arbitrary_progressbar"
27415 " and not test_fetch_with_downloader"
27416 " and not test_figshare_data_repository_versions"
27417 " and not test_load_registry_from_doi"
27418 " and not test_pooch_corrupted"
27419 " and not test_pooch_custom_url"
27420 " and not test_pooch_download"
27421 " and not test_pooch_download_retry"
27422 " and not test_pooch_download_retry_fails_eventually"
27423 " and not test_pooch_download_retry_off_by_default"
27424 " and not test_pooch_logging_level"
27425 " and not test_pooch_update"
27426 " and not test_retrieve"
27427 " and not test_retrieve_default_path"
27428 " and not test_retrieve_fname"
27429 " and not test_stream_download")
27430 "--ignore=pooch/tests/test_downloaders.py")))
27431 (native-inputs
27432 (list python-pytest
27433 python-setuptools-scm
27434 python-setuptools
27435 python-wheel))
27436 (propagated-inputs
27437 (list python-packaging python-platformdirs python-requests))
27438 (home-page "https://github.com/fatiando/pooch")
27439 (synopsis "Manage your Python library's sample data files")
27440 (description
27441 "Pooch manages your Python library's sample data files: it automatically
27442downloads and stores them in a local directory, with support for versioning
27443and corruption checks.")
27444 (license license:bsd-3)))
27445
27446(define-public python-fasteners
27447 (package
27448 (name "python-fasteners")
27449 (version "0.17.3")
27450 (source (origin
27451 ;; No tests in the pypi tarball
27452 (method git-fetch)
27453 (uri (git-reference
27454 (url "https://github.com/harlowja/fasteners")
27455 (commit version)))
27456 (file-name (git-file-name name version))
27457 (sha256
27458 (base32
27459 "0m0dxv8ljpkq99s3d1mib1zfb0ppx3h74h5yr8809zsrq2klfn0m"))))
27460 (build-system pyproject-build-system)
27461 (arguments
27462 `(#:phases (modify-phases %standard-phases
27463 (replace 'check
27464 (lambda* (#:key tests? #:allow-other-keys)
27465 (when tests?
27466 (invoke "pytest")))))))
27467 (native-inputs (list python-diskcache python-more-itertools
27468 python-setuptools python-pytest python-wheel))
27469 (home-page "https://github.com/harlowja/fasteners")
27470 (synopsis "Python package that provides useful locks")
27471 (description
27472 "This package provides a Python program that provides following locks:
27473
27474@itemize
27475@item Locking decorator
27476@item Reader-writer locks
27477@item Inter-process locks
27478@item Generic helpers
27479@end itemize\n")
27480 (license license:asl2.0)))
27481
27482(define-public python-requests-file
27483 (package
27484 (name "python-requests-file")
27485 (version "3.0.1")
27486 (source
27487 (origin
27488 (method git-fetch)
27489 (uri (git-reference
27490 (url "https://codeberg.org/dashea/requests-file")
27491 (commit version)))
27492 (file-name (git-file-name name version))
27493 (sha256
27494 (base32 "0wvz2fkx01libz731a9pfx0l5p44cd33ba8gs7kw5dksfzfwvark"))))
27495 (build-system pyproject-build-system)
27496 (native-inputs (list python-pytest python-setuptools))
27497 (propagated-inputs (list python-requests))
27498 (home-page "https://codeberg.org/dashea/requests-file")
27499 (synopsis "File transport adapter for Requests")
27500 (description
27501 "Requests-File is a transport adapter for use with the Requests Python
27502library to allow local file system access via @code{file://} URLs.")
27503 (license license:asl2.0)))
27504
27505(define-public python-identify
27506 (package
27507 (name "python-identify")
27508 (version "2.6.14")
27509 (source
27510 (origin
27511 ;; There are no tests in the PyPI tarball.
27512 (method git-fetch)
27513 (uri (git-reference
27514 (url "https://github.com/chriskuehl/identify")
27515 (commit (string-append "v" version))))
27516 (file-name (git-file-name name version))
27517 (sha256
27518 (base32 "1fbl7wvhky4rlv37p0531xnl037lq58d8wsxgyylj371bfz3m3wp"))))
27519 (build-system pyproject-build-system)
27520 (native-inputs
27521 (list python-pytest
27522 python-setuptools
27523 python-ukkonen))
27524 (home-page "https://github.com/chriskuehl/identify")
27525 (synopsis "File identification library for Python")
27526 (description
27527 "@code{identify} is a file identification library for Python. Given
27528a file (or some information about a file), return a set of standardized tags
27529identifying what the file is.")
27530 (license license:expat)))
27531
27532(define-public python-nodeenv
27533 (package
27534 (name "python-nodeenv")
27535 (version "1.8.0")
27536 (source
27537 (origin
27538 ;; There's no tarball in PyPI.
27539 (method git-fetch)
27540 (uri (git-reference
27541 (url "https://github.com/ekalinin/nodeenv")
27542 (commit version)))
27543 (file-name (git-file-name name version))
27544 (sha256
27545 (base32 "0g8zp8zw5nnfc14ml0sil9yh7lnpz3xrdkazdkwg6pf5jqsxlvv9"))))
27546 (build-system pyproject-build-system)
27547 (arguments
27548 (list #:test-flags
27549 #~(list "-k" (string-append
27550 "not test_smoke"
27551 " and not test_smoke_n_system_special_chars"))))
27552 (native-inputs
27553 (list python-coverage
27554 python-mock
27555 python-pytest
27556 python-setuptools
27557 python-wheel))
27558 (home-page "https://ekalinin.github.io/nodeenv/")
27559 (synopsis "Create isolated node.js environments")
27560 (description
27561 "Nodeenv (node.js virtual environment) is a tool to create isolated
27562node.js environments. It creates an environment that has its own installation
27563directories, that doesn't share libraries with other node.js virtual
27564environments.")
27565 (license license:bsd-3)))
27566
27567(define-public python-pynamecheap
27568 (package
27569 (name "python-pynamecheap")
27570 (version "0.0.3")
27571 (source
27572 (origin
27573 (method url-fetch)
27574 (uri (pypi-uri "PyNamecheap" version))
27575 (sha256
27576 (base32 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
27577 (build-system pyproject-build-system)
27578 (arguments (list #:tests? #f)) ; No tests.
27579 (native-inputs (list python-setuptools))
27580 (propagated-inputs (list python-requests))
27581 (home-page "https://github.com/Bemmu/PyNamecheap")
27582 (synopsis "Namecheap API client in Python")
27583 (description
27584 "PyNamecheap is a Namecheap API client in Python.")
27585 (license license:expat)))
27586
27587(define-public python-pynixutil
27588 (package
27589 (name "python-pynixutil")
27590 (version "0.5.0")
27591 (source
27592 (origin
27593 (method git-fetch)
27594 (uri (git-reference
27595 (url "https://github.com/nix-community/pynixutil")
27596 (commit version)))
27597 (file-name (git-file-name name version))
27598 (sha256
27599 (base32 "1lnspcai7mqpv73bbd8kgyw63fxwgkwvfkl09b2bl5y2g2v7np6m"))))
27600 (build-system pyproject-build-system)
27601 (arguments
27602 (list
27603 #:test-flags
27604 ;; Tests require nix in the PATH.
27605 #~(list "--ignore=tests/test_drv.py")
27606 #:phases
27607 #~(modify-phases %standard-phases
27608 (add-after 'unpack 'use-poetry-core
27609 (lambda _
27610 ;; Patch to use the core poetry API.
27611 (substitute* "pyproject.toml"
27612 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
27613 (native-inputs
27614 (list python-poetry-core
27615 python-pytest))
27616 (home-page "https://github.com/nix-community/pynixutil")
27617 (synopsis "Utility functions for working with data from Nix in Python")
27618 (description
27619 "@code{pynixutil} provides functions for base32 encoding/decoding and
27620derivation parsing, namingly @code{b32decode()}, @code{b32encode()} and
27621@code{drvparse()}.")
27622 (license license:expat)))
27623
27624(define-public python-dns-lexicon
27625 (package
27626 (name "python-dns-lexicon")
27627 (version "3.21.1")
27628 (source
27629 (origin
27630 (method git-fetch)
27631 (uri (git-reference
27632 (url "https://github.com/dns-lexicon/dns-lexicon")
27633 (commit (string-append "v" version))))
27634 (file-name (git-file-name name version))
27635 (sha256
27636 (base32 "138j8nrkrisn7kh5rqi2wz130p6vr4bkaw1pmbfpjkdjk118ng8c"))))
27637 (build-system pyproject-build-system)
27638 (arguments
27639 (list
27640 ;; Integration tests require network access.
27641 #:test-flags #~(list "--ignore-glob=tests/providers/*.py")
27642 #:phases
27643 #~(modify-phases %standard-phases
27644 (add-before 'check 'configure-tests
27645 (lambda _
27646 (setenv "HOME" (getcwd)))))))
27647 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
27648 (propagated-inputs
27649 (list python-beautifulsoup4
27650 python-cryptography
27651 python-dnspython
27652 python-importlib-metadata
27653 python-pyotp
27654 python-pyyaml
27655 python-requests
27656 python-tldextract))
27657 (home-page "https://github.com/dns-lexicon/dns-lexicon")
27658 (synopsis "Manipulate DNS records on various DNS providers")
27659 (description
27660 "Lexicon provides a way to manipulate DNS records on multiple DNS
27661providers in a standardized way. It has a CLI but it can also be used as a
27662Python library. It was designed to be used in automation, specifically with
27663Let's Encrypt.")
27664 (license license:expat)))
27665
27666(define-public python-cfgv
27667 (package
27668 (name "python-cfgv")
27669 (version "3.4.0")
27670 (source
27671 (origin
27672 ;; There are no tests in the PyPI tarball.
27673 (method git-fetch)
27674 (uri (git-reference
27675 (url "https://github.com/asottile/cfgv")
27676 (commit (string-append "v" version))))
27677 (file-name (git-file-name name version))
27678 (sha256
27679 (base32 "0g7jg6dssyax6k85lk8afs8qdzgq138g6ij0jmmhgdv5fzks6k9z"))))
27680 (build-system pyproject-build-system)
27681 (native-inputs
27682 (list python-pytest python-setuptools python-wheel))
27683 (home-page "https://github.com/asottile/cfgv")
27684 (synopsis "Configuration validation library")
27685 (description
27686 "This library helps to validate configuration files and produce human
27687readable error messages.")
27688 (license license:expat)))
27689
27690(define-public python-commandlines
27691 (package
27692 (name "python-commandlines")
27693 (version "0.4.1")
27694 (source
27695 (origin
27696 (method git-fetch)
27697 (uri (git-reference
27698 (url "https://github.com/chrissimpkins/commandlines")
27699 (commit (string-append "v" version))))
27700 (file-name (git-file-name name version))
27701 (sha256
27702 (base32 "03mxsknqbiwdl4cydnmr3dbid5rh1y1pwfcnbf6k4sf0wiw98y67"))))
27703 (build-system pyproject-build-system)
27704 (native-inputs (list python-pytest python-setuptools))
27705 (home-page "https://github.com/chrissimpkins/commandlines")
27706 (synopsis "Command line argument to object parsing library")
27707 (description
27708 "@code{Commandlines} is a Python library for command line application
27709development that supports command line argument parsing, command string
27710validation testing and application logic.")
27711 (license license:expat)))
27712
27713;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
27714;; python-numba. They have a very unflexible relationship.
27715(define-public python-numba
27716 (package
27717 (name "python-numba")
27718 (version "0.62.1")
27719 (source
27720 (origin
27721 (method url-fetch)
27722 (uri (pypi-uri "numba" version))
27723 (sha256
27724 (base32
27725 "0qai1npy5x2p68872zi6hr97sxdmwmigr8802b1383l9m9144xvv"))))
27726 (build-system pyproject-build-system)
27727 (arguments
27728 (list
27729 ;; tests: 10723 tests (skipped=708, expected failures=23)
27730 #:test-backend #~'custom
27731 #:test-flags
27732 ;; Check <buildscripts> directory for more build/tests examples.
27733 #~(list "-m" "numba.runtests"
27734 "--exclude-tags='long_running'"
27735 "--multiprocess" (number->string (min 8 (parallel-job-count)))
27736 "-b"
27737 "-v"
27738 "--"
27739 "numba.tests")
27740 #:phases
27741 #~(modify-phases %standard-phases
27742 (add-after 'unpack 'disable-failing-tests
27743 (lambda _
27744 ;; This expects to be able to run pip.
27745 (delete-file "numba/tests/test_sysinfo.py")
27746 ;; This fails nondeterministically, possibly depending on CPU.
27747 ;; https://github.com/numba/numba/issues/8282.
27748 (substitute* "numba/tests/test_function_type.py"
27749 (("def test_wrapper_address_protocol_libm")
27750 "def disabled_test_wrapper_address_protocol_libm"))
27751 (substitute* "numba/tests/test_caching.py"
27752 ;; RuntimeError: cannot cache function 'simple_usecase': no
27753 ;; locator available for file
27754 (("def test_non_creatable_pycache")
27755 "def __off_test_non_creatable_pycache")
27756 (("def test_non_writable_pycache")
27757 "def __off_test_non_writable_pycache")
27758 ;; AssertionError: None is not an instance of <class
27759 ;; 'numba.core.caching.UserWideCacheLocator'>
27760 (("def test_frozen")
27761 "def __off_test_frozen"))))
27762 (add-before 'build 'disable-proprietary-features
27763 (lambda _
27764 (setenv "NUMBA_DISABLE_HSA" "1")
27765 (setenv "NUMBA_DISABLE_CUDA" "1")))
27766 (add-before 'check 'pre-check
27767 (lambda _
27768 (setenv "HOME" "/tmp")
27769 ;; XXX: Something is wrong with the PYTHONPATH when running the
27770 ;; tests from the build directory, as it complains about not
27771 ;; being able to import certain modules.
27772 (delete-file-recursively "numba"))))))
27773 (native-inputs
27774 (list python-setuptools))
27775 (propagated-inputs
27776 (list python-llvmlite
27777 python-numpy))
27778 (home-page "https://numba.pydata.org")
27779 (synopsis "Compile Python code using LLVM")
27780 (description "Numba gives you the power to speed up your applications with
27781high performance functions written directly in Python. With a few
27782annotations, array-oriented and math-heavy Python code can be just-in-time
27783compiled to native machine instructions, similar in performance to C, C++ and
27784Fortran, without having to switch languages or Python interpreters.
27785
27786Numba works by generating optimized machine code using the LLVM compiler
27787infrastructure at import time, runtime, or statically (using the included pycc
27788tool).")
27789 (license license:bsd-3)))
27790
27791(define-public python-numcodecs
27792 (package
27793 (name "python-numcodecs")
27794 (version "0.13.1")
27795 ;; python-zarr does not want versions 0.14.0 or 0.14.1.
27796 ;;(version "0.14.1")
27797 (source
27798 (origin
27799 (method url-fetch)
27800 (uri (pypi-uri "numcodecs" version))
27801 (sha256
27802 (base32
27803 "1g09fwhgmhmw66x5gzmzhm8yhgqki3gpfi0dkhx8z2gh3n43gkx3"))
27804 (modules '((guix build utils)))
27805 (snippet
27806 '(begin
27807 ;; Only add CFLAGS on architectures where they are supported
27808 (substitute* "setup.py"
27809 (("import sys")
27810 "import sys\nimport platform")
27811 (("os\\.name == 'posix'")
27812 (string-append "os.name + platform.machine() == 'posixx86_64' or"
27813 " os.name + platform.machine() == 'posixx86'")))
27814 (delete-file-recursively "c-blosc")))))
27815 (build-system pyproject-build-system)
27816 (arguments
27817 (list
27818 #:test-flags
27819 ;; zarr isn't available, because it dependes on this package.
27820 '(list "-k" "not test_zarr3_import")
27821 #:phases
27822 '(modify-phases %standard-phases
27823 (add-after 'unpack 'disable-avx2
27824 (lambda _
27825 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
27826 (add-after 'unpack 'unbundle
27827 (lambda _
27828 (substitute* "setup.py"
27829 (("sources=sources \\+ blosc_sources,")
27830 "sources=sources,")
27831 (("extra_compile_args=extra_compile_args")
27832 "extra_compile_args=list(base_compile_args)")
27833 (("'numcodecs.zstd',")
27834 "'numcodecs.zstd', libraries=['zstd'], ")
27835 (("'numcodecs.lz4',")
27836 "'numcodecs.lz4', libraries=['lz4'], ")
27837 (("'numcodecs.blosc',")
27838 "'numcodecs.blosc', libraries=['blosc'], "))))
27839 (add-before 'check 'build-extensions
27840 (lambda _
27841 ;; Cython extensions have to be built before running the tests.
27842 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
27843 (inputs
27844 (list c-blosc lz4 zlib
27845 `(,zstd "lib")))
27846 (propagated-inputs
27847 (list python-google-crc32c
27848 python-importlib-metadata
27849 python-msgpack
27850 python-numpy))
27851 (native-inputs
27852 (list python-cython
27853 python-py-cpuinfo
27854 python-pydata-sphinx-theme
27855 python-pytest
27856 python-pytest-cov
27857 python-setuptools
27858 python-setuptools-scm ;for correct version
27859 python-sphinx
27860 python-sphinx-issues
27861 python-wheel))
27862 (home-page "https://github.com/zarr-developers/numcodecs")
27863 (synopsis "Buffer compression and transformation codecs")
27864 (description
27865 "This Python package provides buffer compression and transformation
27866codecs for use in data storage and communication applications.")
27867 (license license:expat)))
27868
27869(define-public python-asciitree
27870 (package
27871 (name "python-asciitree")
27872 (version "0.3.3")
27873 (source
27874 (origin
27875 (method git-fetch)
27876 (uri (git-reference
27877 (url "https://github.com/mbr/asciitree")
27878 (commit version)))
27879 (file-name (git-file-name name version))
27880 (sha256
27881 (base32 "071wlpyi8pa262sj9xdy0zbj163z84dasxad363z3sfndqxw78h1"))))
27882 (build-system pyproject-build-system)
27883 (native-inputs (list python-pytest python-setuptools))
27884 (home-page "https://github.com/mbr/asciitree")
27885 (synopsis "Draws ASCII trees")
27886 (description "This package draws tree structures using characters.")
27887 (license license:expat)))
27888
27889(define-public python-dill
27890 (package
27891 (name "python-dill")
27892 (version "0.4.0")
27893 (source
27894 (origin
27895 (method url-fetch)
27896 (uri (pypi-uri "dill" version))
27897 (sha256
27898 (base32 "1w5w5hlijw7ahqji45ssyvdip5pv074h4nw97bsj8ws7vz9g2cq6"))))
27899 (build-system pyproject-build-system)
27900 (arguments
27901 (list
27902 #:phases #~(modify-phases %standard-phases
27903 (replace 'check
27904 (lambda* (#:key tests? #:allow-other-keys)
27905 (if tests?
27906 ;; Extracted from tox.ini
27907 (invoke "python" "dill/tests/__main__.py")
27908 (format #t "test suite not run~%")))))))
27909 (native-inputs
27910 (list python-setuptools python-wheel))
27911 (home-page "https://pypi.org/project/dill/")
27912 (synopsis "Serialize all of Python")
27913 (description "Dill extends Python's @code{pickle} module for serializing
27914and de-serializing Python objects to the majority of the built-in Python
27915types. Dill provides the user the same interface as the @code{pickle} module,
27916and also includes some additional features. In addition to pickling Python
27917objects, @code{dill} provides the ability to save the state of an interpreter
27918session in a single command. Hence, it would be feasible to save a
27919interpreter session, close the interpreter, ship the pickled file to another
27920computer, open a new interpreter, unpickle the session and thus continue from
27921the saved state of the original interpreter session.")
27922 (license license:bsd-3)))
27923
27924(define-public python-multiprocess
27925 (package
27926 (name "python-multiprocess")
27927 (version "0.70.18")
27928 (source
27929 (origin
27930 (method url-fetch)
27931 (uri (pypi-uri "multiprocess" version))
27932 (sha256
27933 (base32
27934 "03bdxiincqq3g66vl3sf5ygagjz5sbrpr83djlipprmkwql72ngr"))))
27935 (build-system pyproject-build-system)
27936 (arguments
27937 (list
27938 #:phases
27939 #~(modify-phases %standard-phases
27940 (add-after 'unpack 'disable-broken-tests
27941 (lambda* (#:key inputs #:allow-other-keys)
27942 ;; The "wait_result" and "shared_memory..." tests are broken as
27943 ;; there is no keyboard interrupt.
27944 ;;
27945 ;; The "preload_resources" test fails as it cannot find
27946 ;; mp_preload.py.
27947 (substitute*
27948 (string-append "py" (python-version
27949 (assoc-ref inputs "python"))
27950 "/multiprocess/tests/__init__.py")
27951 (("^(.*)def test_(\
27952wait_result|\
27953shared_memory_SharedMemoryServer_ignores_sigint|\
27954preload_resources\
27955)" line indent)
27956 (string-append indent
27957 "@unittest.skip(\"Disabled by Guix\")\n"
27958 line)))))
27959 (replace 'check
27960 (lambda* (#:key tests? #:allow-other-keys)
27961 (if tests?
27962 (invoke "python" "-m" "multiprocess.tests")
27963 (format #t "test suite not run~%")))))))
27964 (propagated-inputs
27965 (list python-dill))
27966 (native-inputs (list python-setuptools))
27967 (home-page "https://pypi.org/project/multiprocess/")
27968 (synopsis "Multiprocessing and multithreading in Python")
27969 (description
27970 "This package is a fork of the multiprocessing Python package, a package
27971which supports the spawning of processes using the API of the standard
27972library's @code{threading} module.")
27973 (license license:bsd-3)))
27974
27975(define-public python-multiprocessing-on-dill
27976 (package
27977 (name "python-multiprocessing-on-dill")
27978 (version "3.5.0a4")
27979 (source (origin
27980 (method url-fetch)
27981 (uri (pypi-uri "multiprocessing_on_dill" version))
27982 (sha256
27983 (base32
27984 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
27985 (build-system pyproject-build-system)
27986 (propagated-inputs (list python-dill))
27987 (native-inputs (list python-pytest python-setuptools python-wheel))
27988 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
27989 (synopsis "Multiprocessing using dill instead of pickle")
27990 (description
27991 "This package provides a friendly fork of multiprocessing which uses dill
27992instead of pickle.")
27993 (license license:psfl)))
27994
27995(define-public python-cytoolz
27996 (package
27997 (name "python-cytoolz")
27998 (version "1.0.1")
27999 (source
28000 (origin
28001 (method url-fetch)
28002 (uri (pypi-uri "cytoolz" version))
28003 (sha256
28004 (base32 "1mn7n916w8dfij3zq139a4szv12rwp94xxrnfvnv66wyp1hk3k49"))
28005 (modules '((guix build utils)))
28006 (snippet
28007 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
28008 (build-system pyproject-build-system)
28009 (arguments
28010 (list #:test-flags #~(list "--pyargs" "cytoolz")))
28011 (native-inputs
28012 (list python-cython
28013 python-pytest
28014 python-setuptools
28015 python-wheel))
28016 (propagated-inputs
28017 (list python-toolz))
28018 (home-page "https://github.com/pytoolz/cytoolz")
28019 (synopsis "High performance functional utilities")
28020 (description
28021 "The cytoolz package implements the same API as provided by toolz. The
28022main differences are that @code{cytoolz} is faster and cytoolz offers a C API
28023that is accessible to other projects developed in Cython.")
28024 (license license:bsd-3)))
28025
28026(define-public python-sortedcollections
28027 (package
28028 (name "python-sortedcollections")
28029 (version "2.1.0")
28030 (source
28031 (origin
28032 (method git-fetch)
28033 (uri (git-reference
28034 (url "https://github.com/grantjenks/python-sortedcollections")
28035 (commit (string-append "v" version))))
28036 (file-name (git-file-name name version))
28037 (sha256
28038 (base32 "1y2xsbh31jp9fsjy53g5ma974z7a9vcds6ij1vlh00nllzqlwihs"))))
28039 (build-system pyproject-build-system)
28040 (native-inputs (list python-setuptools
28041 python-pytest
28042 python-pytest-cov
28043 python-wheel))
28044 (propagated-inputs (list python-sortedcontainers))
28045 (home-page "https://www.grantjenks.com/docs/sortedcollections/")
28046 (synopsis "Python Sorted Collections")
28047 (description "Sorted Collections is a Python sorted collections library.")
28048 (license license:asl2.0)))
28049
28050(define-public python-sortedcontainers
28051 (package
28052 (name "python-sortedcontainers")
28053 (version "2.4.0")
28054 (source
28055 (origin
28056 (method git-fetch) ;no tests in PyPI archive
28057 (uri (git-reference
28058 (url "https://github.com/grantjenks/python-sortedcontainers")
28059 (commit (string-append "v" version))))
28060 (file-name (git-file-name name version))
28061 (sha256
28062 (base32 "190w2mvgvx0r5k0r8117slq48nh6k7xidbpsrp02wnmcd0rx45k1"))))
28063 (build-system pyproject-build-system)
28064 (arguments
28065 (list #:test-flags #~(list "--pyargs" "sortedcontainers")))
28066 (native-inputs
28067 (list python-pytest-bootstrap python-setuptools))
28068 (home-page "https://grantjenks.com/docs/sortedcontainers/")
28069 (synopsis "Sorted List, Sorted Dict, Sorted Set")
28070 (description
28071 "This package provides a sorted collections library, written in
28072pure-Python.")
28073 (license license:asl2.0)))
28074
28075(define-public python-cloudpickle
28076 (package
28077 (name "python-cloudpickle")
28078 (version "3.1.0")
28079 (source
28080 (origin
28081 ;; Archive on pypi does not include test infrastructure.
28082 (method git-fetch)
28083 (uri (git-reference
28084 (url "https://github.com/cloudpipe/cloudpickle")
28085 (commit (string-append "v" version))))
28086 (file-name (git-file-name name version))
28087 (sha256
28088 (base32 "16z0jdg5b1r23vw1l0bwsg40zcmnrbznr4frjac9kq5j6jm4fw6d"))))
28089 (build-system pyproject-build-system)
28090 (native-inputs
28091 (list python-flit-core
28092 python-psutil
28093 python-pytest))
28094 (home-page "https://github.com/cloudpipe/cloudpickle")
28095 (synopsis "Extended pickling support for Python objects")
28096 (description
28097 "Cloudpickle makes it possible to serialize Python constructs not
28098supported by the default pickle module from the Python standard library. It
28099is especially useful for cluster computing where Python expressions are
28100shipped over the network to execute on remote hosts, possibly close to the
28101data.")
28102 (license license:bsd-3)))
28103
28104(define-public python-locket
28105 (package
28106 (name "python-locket")
28107 (version "1.0.0")
28108 (source
28109 (origin
28110 (method git-fetch)
28111 (uri (git-reference
28112 (url "https://github.com/mwilliamson/locket.py")
28113 (commit version)))
28114 (file-name (git-file-name name version))
28115 (sha256
28116 (base32 "0xx57gq5r7x58yd2mq6zxlr2kpzbyb0b5y5hiprgvkib948jxx0p"))))
28117 (build-system pyproject-build-system)
28118 ;; XXX: Requires python-spur, which requires another version of
28119 ;; python-paramiko.
28120 (arguments (list #:tests? #f))
28121 (native-inputs (list python-setuptools))
28122 (home-page "https://github.com/mwilliamson/locket.py")
28123 (synopsis "File-based locks for Python")
28124 (description
28125 "Locket implements a lock that can be used by multiple processes provided
28126they use the same path.")
28127 (license license:bsd-2)))
28128
28129(define-public python-partd
28130 (package
28131 (name "python-partd")
28132 (version "1.4.2")
28133 (source
28134 (origin
28135 (method url-fetch)
28136 (uri (pypi-uri "partd" version))
28137 (sha256
28138 (base32 "0b7h42dfvbrwpg75wzszv1rq3237h1g026v24v10b16wzcxc68nh"))))
28139 (build-system pyproject-build-system)
28140 (native-inputs
28141 (list python-pytest
28142 python-setuptools
28143 python-versioneer))
28144 (propagated-inputs
28145 (list python-locket
28146 python-toolz
28147 ;; [complete]
28148 python-blosc
28149 python-numpy
28150 python-pandas
28151 python-pyzmq))
28152 (home-page "https://github.com/dask/partd/")
28153 (synopsis "Appendable key-value storage")
28154 (description
28155 "Partd stores key-value pairs. Values are raw bytes. We append on old
28156values. Partd excels at shuffling operations.")
28157 (license license:bsd-3)))
28158
28159(define-public python-fsspec
28160 (package
28161 (name "python-fsspec")
28162 (version "2025.9.0")
28163 (source
28164 (origin
28165 (method git-fetch)
28166 (uri (git-reference
28167 (url "https://github.com/fsspec/filesystem_spec")
28168 (commit version)))
28169 (file-name (git-file-name name version))
28170 (sha256
28171 (base32 "1f11jjp7xd4q9a5lmb00i5l9v36162gjr6h1hkfzvgq78xa735xp"))))
28172 (build-system pyproject-build-system)
28173 (arguments
28174 (list
28175 #:test-flags
28176 #~(list "--ignore=fsspec/implementations/tests/test_github.py"
28177 "-k" (string-join
28178 ;; Test requirs nentwork access
28179 (list "not test_async_cat_file_ranges"
28180 "test_gist_public_all_files"
28181 "test_gist_public_missing_file"
28182 "test_gist_public_one_file"
28183 ;; Test hangs
28184 "test_processes")
28185 " and not "))
28186 #:phases
28187 #~(modify-phases %standard-phases
28188 (add-before 'build 'set-version
28189 (lambda _
28190 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
28191 (propagated-inputs
28192 (list python-aiohttp python-libarchive-c python-requests python-tqdm))
28193 (native-inputs
28194 (list nss-certs-for-test
28195 python-hatch-vcs
28196 python-hatchling
28197 python-numpy
28198 python-pytest
28199 python-pytest-asyncio
28200 python-pytest-mock
28201 python-pytest-rerunfailures))
28202 (home-page "https://github.com/fsspec/filesystem_spec")
28203 (synopsis "File-system specification")
28204 (description "The purpose of this package is to produce a template or
28205specification for a file-system interface, that specific implementations
28206should follow, so that applications making use of them can rely on a common
28207behavior and not have to worry about the specific internal implementation
28208decisions with any given backend.")
28209 (license license:bsd-3)))
28210
28211(define-public python-ilinkedlist
28212 (package
28213 (name "python-ilinkedlist")
28214 (properties '((commit . "b5ea3f67833071c2e0aba2eac35e82496f469238")
28215 (revision . "0")))
28216 (version (git-version "0.4.0"
28217 (assoc-ref properties 'revision)
28218 (assoc-ref properties 'commit)))
28219 (home-page "https://github.com/luther9/ilinkedlist-py")
28220 (source
28221 (origin
28222 (method git-fetch)
28223 (uri (git-reference
28224 (url home-page)
28225 (commit (assoc-ref properties 'commit))))
28226 (file-name (git-file-name name version))
28227 (sha256
28228 (base32 "0lrs6arzm7dg70ny4ri06alhi40s03n71jsx5hsi0fimvwyvfhch"))))
28229 (build-system pyproject-build-system)
28230 (native-inputs (list python-pytest python-setuptools))
28231 (synopsis "Immutable linked list library")
28232 (description
28233 "This is a implementation of immutable linked lists for Python. It
28234contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
28235Since a linked list is treated as immutable, it is hashable, and its length
28236can be retrieved in constant time. Some of the terminology is inspired by
28237LISP. It is possible to create an improper list by creating a @code{Pair}
28238with a non-list @code{cdr}.")
28239 (license license:gpl3+)))
28240
28241(define-public python-readlike
28242 (package
28243 (name "python-readlike")
28244 (version "0.1.3")
28245 (source
28246 (origin
28247 (method git-fetch)
28248 (uri (git-reference
28249 (url "https://github.com/jangler/readlike")
28250 (commit version)))
28251 (file-name (git-file-name name version))
28252 (sha256
28253 (base32 "1mw8j8ads8hqdbz42siwpffi4wi5s33z9g14a5c2i7vxp8m68qc1"))))
28254 (build-system pyproject-build-system)
28255 (native-inputs (list python-pytest python-setuptools))
28256 (home-page "https://github.com/jangler/readlike")
28257 (synopsis "GNU Readline-like line editing module")
28258 (description
28259 "This Python module provides line editing functions similar to the default
28260Emacs-style ones of GNU Readline. Unlike the Python standard library's
28261@code{readline} package, this one allows access to those capabilities in settings
28262outside of a standard command-line interface. It is especially well-suited to
28263interfacing with Urwid, due to a shared syntax for describing key inputs.
28264
28265Currently, all stateless Readline commands are implemented. Yanking and history
28266are not supported.")
28267 (license license:expat)))
28268
28269(define-public python-reparser
28270 (package
28271 (name "python-reparser")
28272 (version "1.4.3")
28273 (source
28274 (origin
28275 (method git-fetch)
28276 (uri (git-reference
28277 (url "https://github.com/xmikos/reparser")
28278 (commit (string-append "v" version))))
28279 (file-name (git-file-name name version))
28280 (sha256
28281 (base32 "04v7h52wny0j2qj37501nk33j0s4amm134kagdicx2is49zylzq1"))))
28282 (build-system pyproject-build-system)
28283 (arguments (list #:tests? #f)) ; No tests.
28284 (native-inputs (list python-setuptools))
28285 (home-page "https://github.com/xmikos/reparser")
28286 (synopsis "Lexer/parser for inline markup based on regular expressions")
28287 (description
28288 "This Python library provides a simple lexer/parser for inline markup based
28289on regular expressions.")
28290 (license license:expat)))
28291
28292(define-public python-retrying
28293 (package
28294 (name "python-retrying")
28295 (version "1.4.1")
28296 (source
28297 (origin
28298 (method git-fetch)
28299 (uri (git-reference
28300 (url "https://github.com/groodt/retrying")
28301 (commit (string-append "v" version))))
28302 (file-name (git-file-name name version))
28303 (sha256
28304 (base32 "0m1kf6mxmxzlf3sldzm50c3hq1hkh6fz1g97pdwyvbwdazb7blw9"))))
28305 (build-system pyproject-build-system)
28306 (native-inputs (list python-pytest python-setuptools))
28307 (home-page "https://github.com/groodt/retrying")
28308 (synopsis "Library for adding retry behavior")
28309 (description "Retrying is a general-purpose retrying library to simplify
28310the task of adding retry behavior to just about anything.
28311
28312Features:
28313
28314@itemize
28315@item Generic Decorator API.
28316@item Specify stop condition (i.e. limit by number of attempts).
28317@item Specify wait condition (i.e. exponential backoff sleeping between attempts).
28318@item Customize retrying on Exceptions.
28319@item Customize retrying on expected returned result.
28320@end itemize")
28321 (license license:asl2.0)))
28322
28323(define-public python-precis-i18n
28324 (package
28325 (name "python-precis-i18n")
28326 (version "1.1.1")
28327 (source
28328 (origin
28329 (method url-fetch)
28330 (uri (pypi-uri "precis_i18n" version))
28331 (sha256
28332 (base32 "0cdv2vbn0kwfq0pxj4l52s2xiaqablb2cgk0nph6r9cyqayf77rn"))))
28333 (build-system pyproject-build-system)
28334 (native-inputs
28335 (list python-pytest
28336 python-setuptools
28337 python-wheel))
28338 (home-page "https://github.com/byllyfish/precis_i18n")
28339 (synopsis "Implementation of the PRECIS framework")
28340 (description
28341 "This module implements the PRECIS Framework as described in RFC 8264,
28342RFC 8265 and RFC 8266.")
28343 (license license:expat)))
28344
28345(define-public python-absl-py
28346 (package
28347 (name "python-absl-py")
28348 (version "2.3.1")
28349 (source
28350 (origin
28351 (method url-fetch)
28352 (uri (pypi-uri "absl_py" version))
28353 (sha256
28354 (base32 "1jbzyyrmvmqwnyh053hdmh6q851sbvrg70yf3gnd5gvzdx920y59"))))
28355 (build-system pyproject-build-system)
28356 (arguments
28357 (list #:tests? #f)) ;tests require bazel
28358 (native-inputs
28359 (list python-hatchling))
28360 (home-page "https://github.com/abseil/abseil-py")
28361 (synopsis "Abseil Python common libraries")
28362 (description
28363 "This package provides the Abseil Python Common Libraries, a collection
28364of Python libraries for building Python applications.")
28365 (license license:asl2.0)))
28366
28367(define-public python-astor
28368 (package
28369 (name "python-astor")
28370 (properties '((commit . "df09001112f079db54e7c5358fa143e1e63e74c4")
28371 (revision . "0")))
28372 (version (git-version "0.8.1"
28373 (assoc-ref properties 'revision)
28374 (assoc-ref properties 'commit)))
28375 (source
28376 (origin
28377 (method git-fetch)
28378 (uri (git-reference
28379 (url "https://github.com/berkerpeksag/astor")
28380 (commit (assoc-ref properties 'commit))))
28381 (file-name (git-file-name name version))
28382 (sha256
28383 (base32 "0ymj0n23b6b4qc6x8ycysh2dipdry5a3gakcaf8nravzp5ma2psl"))))
28384 (build-system pyproject-build-system)
28385 (arguments
28386 (list
28387 ;; FIXME: Unclear why this test fails.
28388 #:test-flags #~(list "--deselect=\
28389tests/test_rtrip.py::RtripTestCase::test_convert_stdlib")))
28390 (native-inputs (list python-pytest python-setuptools))
28391 (home-page "https://github.com/berkerpeksag/astor")
28392 (synopsis "Read and write Python ASTs")
28393 (description
28394 "Astor is designed to allow easy manipulation of Python source via the
28395Abstract Syntax Tree.")
28396 (license license:bsd-3)))
28397
28398(define-public python-astunparse
28399 ;; XXX: No updates since 2019, consider to remove when python-pytorch is
28400 ;; updated.
28401 (package
28402 (name "python-astunparse")
28403 (version "1.6.3")
28404 (source
28405 (origin
28406 (method url-fetch)
28407 (uri (pypi-uri "astunparse" version))
28408 (sha256
28409 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
28410 (build-system pyproject-build-system)
28411 (arguments '(#:tests? #f)) ; there are none
28412 (native-inputs
28413 (list python-setuptools))
28414 (propagated-inputs
28415 (list python-six))
28416 (home-page "https://github.com/simonpercivall/astunparse")
28417 (synopsis "AST unparser for Python")
28418 (description "This package provides an AST unparser for Python. It is a
28419factored out version of @code{unparse} found in the Python source
28420distribution.")
28421 (license license:bsd-3)))
28422
28423(define-public python-gast
28424 (package
28425 (name "python-gast")
28426 (version "0.6.0")
28427 (source
28428 (origin
28429 (method url-fetch)
28430 (uri (pypi-uri "gast" version))
28431 (sha256
28432 (base32 "1yxinr3xvxf0cryfrfr9q3rgvrki5y310lsigg5ccyicsc057z48"))))
28433 (build-system pyproject-build-system)
28434 (native-inputs
28435 (list python-pytest python-setuptools python-wheel))
28436 (home-page "https://github.com/serge-sans-paille/gast/")
28437 (synopsis "Generic Python AST that abstracts the underlying Python version")
28438 (description
28439 "GAST provides a compatibility layer between the AST of various Python
28440versions, as produced by @code{ast.parse} from the standard @code{ast}
28441module.")
28442 (license license:bsd-3)))
28443
28444;; XXX: Not maintained since 2022, leaf package.
28445(define-public python-attr
28446 (package
28447 (name "python-attr")
28448 (version "0.3.2")
28449 (source
28450 (origin
28451 (method url-fetch)
28452 (uri (pypi-uri "attr" version))
28453 (sha256
28454 (base32 "1x2627x0n2rxx8wib4cksbjjnncff8finq97k37dq70qd2kvrvhw"))))
28455 (build-system pyproject-build-system)
28456 (arguments
28457 (list #:test-backend #~'custom
28458 #:test-flags #~(list "-c" "import dry_attr; dry_attr.test()")))
28459 (native-inputs
28460 (list python-setuptools))
28461 (home-page "https://github.com/denis-ryzhkov/attr")
28462 (synopsis "Decorator for attributes of target function or class")
28463 (description "Simple decorator to set attributes of target function or
28464class in a @acronym{DRY, Don't Repeat Yourself} way.")
28465 (license license:expat)))
28466
28467(define-public python-construct
28468 ;; Fixes not in a release yet.
28469 (let ((commit "c1171b16bda1d213ba4858f3e0e4d4003e4aae90")
28470 (revision "1"))
28471 (package
28472 (name "python-construct")
28473 (version (git-version "2.10.70" revision commit))
28474 (source
28475 (origin
28476 (method git-fetch)
28477 (uri (git-reference
28478 (url "https://github.com/construct/construct")
28479 (commit commit)))
28480 (file-name (git-file-name name version))
28481 (sha256
28482 (base32 "03f6nvyzrq50nhqqwmmws983wwjg78yd9j09pl94vkmyjph33da5"))))
28483 (build-system pyproject-build-system)
28484 (arguments
28485 (list
28486 #:test-flags #~(list "--ignore=tests/test_benchmarks.py")))
28487 (native-inputs
28488 (list python-pytest python-setuptools))
28489 (propagated-inputs
28490 (list python-arrow
28491 python-cloudpickle
28492 python-cryptography
28493 python-lz4
28494 python-numpy
28495 python-ruamel.yaml))
28496 (home-page "https://construct.readthedocs.io")
28497 (synopsis "Declarative and symmetrical parser and builder for binary data")
28498 (description
28499 "This package provides both simple, atomic constructs (such as
28500integers of various sizes), as well as composite ones which allow you
28501form hierarchical and sequential structures of increasing complexity.
28502It features bit and byte granularity, easy debugging and testing, an
28503easy-to-extend subclass system, and lots of primitive constructs to
28504make your work easier.")
28505 (license license:expat))))
28506
28507(define-public python-outcome
28508 (package
28509 (name "python-outcome")
28510 (version "1.3.0.post0")
28511 (source
28512 (origin
28513 (method url-fetch)
28514 (uri (pypi-uri "outcome" version))
28515 (sha256
28516 (base32 "1f2327wzf57zwqw15kzk19ff2s52fa74cxxk8w0bhw99bzk05kwx"))))
28517 (build-system pyproject-build-system)
28518 (native-inputs
28519 (list python-pytest
28520 python-pytest-asyncio
28521 python-setuptools))
28522 (propagated-inputs
28523 (list python-attrs))
28524 (home-page "https://github.com/python-trio/outcome")
28525 (synopsis "Capture the outcome of Python function calls")
28526 (description
28527 "Capture the outcome of Python function calls. Extracted from the Trio
28528project.")
28529 ;; Either license applies.
28530 (license (list license:expat license:asl2.0))))
28531
28532(define-public python-humanize
28533 (package
28534 (name "python-humanize")
28535 (version "4.14.0")
28536 (source
28537 (origin
28538 (method url-fetch)
28539 (uri (pypi-uri "humanize" version))
28540 (sha256
28541 (base32
28542 "03d9xdashy8bsxvg15nz3ih1nsl6na1cmc9mqh2xch56brq9581g"))))
28543 (build-system pyproject-build-system)
28544 (native-inputs
28545 (list python-freezegun
28546 python-hatch-vcs
28547 python-hatchling
28548 python-pytest))
28549 (home-page "https://github.com/jmoiron/humanize")
28550 (synopsis "Print numerical information in a human-readable form")
28551 (description "This package provides a Python module that displays numbers
28552and dates in \"human readable\" forms. For example, it would display
28553\"12345591313\" as \"12.3 billion\".")
28554 (license license:expat)))
28555
28556(define-public python-annoy
28557 (package
28558 (name "python-annoy")
28559 (version "1.17.3")
28560 (source
28561 (origin
28562 (method git-fetch)
28563 (uri (git-reference
28564 (url "https://github.com/spotify/annoy")
28565 (commit (string-append "v" version))))
28566 (file-name (git-file-name name version))
28567 (sha256
28568 (base32 "1zmdp1dws3i35a0psb10k6rkh3iaiq8s9ybxibvfjihbapidd4d0"))))
28569 (build-system pyproject-build-system)
28570 (arguments
28571 (list
28572 #:test-flags
28573 ;; urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in
28574 ;; name resolution>
28575 #~(list "--deselect=test/accuracy_test.py::test_glove_25"
28576 "--deselect=test/accuracy_test.py::test_nytimes_16"
28577 "--deselect=test/accuracy_test.py::test_fashion_mnist")))
28578 (native-inputs
28579 (list python-h5py
28580 python-numpy
28581 python-pytest
28582 python-setuptools))
28583 (home-page "https://github.com/spotify/annoy/")
28584 (synopsis "Approximate nearest neighbors library")
28585 (description
28586 "Annoy is a C++ library with Python bindings to search for points in
28587space that are close to a given query point. It also creates large read-only
28588file-based data structures that are @code{mmap}ped into memory so that many
28589processes may share the same data.")
28590 (license license:asl2.0)))
28591
28592(define-public python-croniter
28593 (package
28594 (name "python-croniter")
28595 (version "5.0.1")
28596 (source
28597 (origin
28598 (method git-fetch)
28599 (uri (git-reference
28600 (url "https://github.com/kiorky/croniter")
28601 (commit version)))
28602 (file-name (git-file-name name version))
28603 (sha256
28604 (base32 "146v641wicx2ipfdpqg1vysikbbhrhndmrnjj1hnv03fjvhqknq9"))))
28605 (build-system pyproject-build-system)
28606 (native-inputs (list python-pytest python-setuptools))
28607 (propagated-inputs (list python-dateutil python-pytz))
28608 (home-page "https://github.com/kiorky/croniter")
28609 (synopsis "Iterate datetime objects with cron-like syntax")
28610 (description
28611 "@code{croniter} provides iteration for datetime object with cron-like
28612format.")
28613 (license license:expat)))
28614
28615(define-public python-crontab
28616 (package
28617 (name "python-crontab")
28618 (version "3.2.0")
28619 (source
28620 (origin
28621 (method url-fetch)
28622 (uri (pypi-uri name version))
28623 (sha256
28624 (base32 "0sy3qlki43n6qmhzzzyya4wcs50mcp3mg1ddn9h39plsscfps1j0"))))
28625 (build-system pyproject-build-system)
28626 (arguments
28627 (list #:test-flags
28628 ;; This test is made for Windows.
28629 #~(list "-k" "not test_07_non_posix_shell")
28630 #:phases
28631 #~(modify-phases %standard-phases
28632 (add-after 'unpack 'defaults-to-mcron
28633 (lambda* (#:key inputs #:allow-other-keys)
28634 (substitute* "crontab.py"
28635 (("/usr/bin/crontab")
28636 (search-input-file inputs "bin/crontab"))))))))
28637 (inputs
28638 (list mcron python-dateutil))
28639 (native-inputs
28640 (list python-pytest python-setuptools python-wheel))
28641 (home-page "https://gitlab.com/doctormo/python-crontab/")
28642 (synopsis "Module for reading and writing crontab files")
28643 (description "This Python module can read, write crontab files, and
28644access the system cron automatically and simply using a direct API.")
28645 (license license:lgpl3+)))
28646
28647(define-public python-apscheduler
28648 (package
28649 (name "python-apscheduler")
28650 (version "3.11.1")
28651 (source (origin
28652 (method url-fetch)
28653 (uri (pypi-uri "apscheduler" version))
28654 (sha256
28655 (base32
28656 "08gjh0l7ba87yp23ilqigp3q004gnnw092p9gxsd310c83v7mdqd"))))
28657 (build-system pyproject-build-system)
28658 (arguments
28659 (list
28660 ;; tests: 701 passed, 252 skipped, 13 deselected, 201 warnings
28661 #:test-flags
28662 ;; XXX: Some tests hang or fail with verity of errors:
28663 ;; E RuntimeError: There is no current event loop in thread 'MainThread'.
28664 #~(list #$@(map (lambda (test) (string-append "--deselect="
28665 "tests/test_executors.py::"
28666 test))
28667 (list "test_broken_pool"
28668 "test_max_instances[processpool-pytz]"
28669 "test_max_instances[processpool-zoneinfo]"
28670 "test_run_coroutine_job_tornado"
28671 "test_run_job_error[processpool-pytz]"
28672 "test_run_job_error[processpool-zoneinfo]"
28673 "test_submit_job[processpool-pytz-error]"
28674 "test_submit_job[processpool-pytz-executed]"
28675 "test_submit_job[processpool-pytz-missed]"
28676 "test_submit_job[processpool-zoneinfo-error]"
28677 "test_submit_job[processpool-zoneinfo-executed]"
28678 "test_submit_job[processpool-zoneinfo-missed]")))))
28679 (native-inputs
28680 (list python-anyio
28681 python-gevent
28682 python-pyside-6
28683 python-pytest
28684 python-pytest-asyncio-0.26
28685 python-pytz
28686 python-setuptools
28687 python-setuptools-scm
28688 python-sqlalchemy
28689 python-tornado
28690 python-twisted))
28691 (propagated-inputs
28692 (list python-tzlocal))
28693 (home-page "https://github.com/agronholm/apscheduler")
28694 (synopsis "Task scheduling library for Python")
28695 (description "Advanced Python Scheduler (APScheduler) is a Python library
28696that lets you schedule your Python code to be executed later, either just once
28697or periodically.
28698
28699You can add new jobs or remove old ones on the fly as you please. If you store
28700your jobs in a database, they will also survive scheduler restarts and maintain
28701their state. When the scheduler is restarted, it will then run all the jobs it
28702should have run while it was offline.")
28703 (license license:expat)))
28704
28705(define-public python-ifaddr
28706 (package
28707 (name "python-ifaddr")
28708 (version "0.2.0")
28709 (source
28710 (origin
28711 (method url-fetch)
28712 (uri (pypi-uri "ifaddr" version))
28713 (sha256
28714 (base32 "1m5fqjqf53m31qrl8fxp2sbwf4mvk5mbjpw2jm2x8rgpmg5by36c"))
28715 (snippet #~(delete-file "ifaddr/_win32.py"))))
28716 (build-system pyproject-build-system)
28717 (native-inputs
28718 (list python-pytest python-setuptools python-wheel))
28719 (home-page "https://github.com/pydron/ifaddr")
28720 (synopsis "Network interface and IP address enumeration library")
28721 (description
28722 "This package provides a network interface and IP address enumeration
28723library in Python.")
28724 (license license:expat)))
28725
28726(define-public python-berkeleydb
28727 (package
28728 (name "python-berkeleydb")
28729 (version "18.1.15")
28730 (source
28731 (origin
28732 (method url-fetch)
28733 (uri (pypi-uri "berkeleydb" version))
28734 (sha256
28735 (base32 "13kmvy6viay27khmj6ydryniirdsbqrc2mjnr2r6nk3m7la57yks"))))
28736 (build-system pyproject-build-system)
28737 (arguments
28738 (list
28739 #:test-backend #~'custom
28740 #:test-flags #~(list "test.py" "-v")
28741 #:phases
28742 #~(modify-phases %standard-phases
28743 (add-after 'unpack 'configure-locations
28744 (lambda* (#:key inputs #:allow-other-keys)
28745 (setenv "BERKELEYDB_DIR"
28746 (assoc-ref inputs "bdb"))
28747 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION"
28748 "1")))
28749 (add-after 'unpack 'remove-legacy
28750 (lambda _
28751 (substitute* "pyproject.toml"
28752 ((":__legacy__") "")))))))
28753 (native-inputs (list python-setuptools))
28754 (inputs (list bdb))
28755 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
28756 (synopsis "Python bindings for Oracle Berkeley DB")
28757 (description
28758 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
28759C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
28760Transaction objects, and each of these is exposed as a Python type in the
28761bsddb3.db module. The database objects can use various access methods: btree,
28762hash, recno, and queue. Complete support of Berkeley DB distributed
28763transactions. Complete support for Berkeley DB Replication Manager.
28764Complete support for Berkeley DB Base Replication. Support for RPC.")
28765 (license license:bsd-3)))
28766
28767;; Last version before rename to python-berkeleydb.
28768(define-public python-bsddb3
28769 (package
28770 (inherit python-berkeleydb)
28771 (name "python-bsddb3")
28772 (version "6.2.9")
28773 (source
28774 (origin
28775 (method url-fetch)
28776 (uri (pypi-uri "bsddb3" version))
28777 (sha256
28778 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
28779 (arguments
28780 (substitute-keyword-arguments (package-arguments python-berkeleydb)
28781 ((#:phases phases #~%standard-phases)
28782 #~(modify-phases #$phases
28783 (delete 'remove-legacy)))
28784 ((#:test-flags test-flags #~(list))
28785 #~(list "test3.py" "-v"))))))
28786
28787(define-public python-dbfread
28788 (package
28789 (name "python-dbfread")
28790 (properties '((commit . "dce544641065d966c76a97864b4e9908ec922ce8")
28791 (revision . "0")))
28792 (version (git-version "2.0.7"
28793 (assoc-ref properties 'revision)
28794 (assoc-ref properties 'commit)))
28795 (source
28796 (origin
28797 (method git-fetch)
28798 (uri (git-reference
28799 (url "https://github.com/olemb/dbfread")
28800 (commit (assoc-ref properties 'commit))))
28801 (file-name (git-file-name name version))
28802 (sha256
28803 (base32 "1m7dbgyf8yl6qhilzx41vzhcmkqmc36897wfqs2jngp4bnda64vd"))))
28804 (build-system pyproject-build-system)
28805 (arguments
28806 (list
28807 #:phases
28808 #~(modify-phases %standard-phases
28809 (add-after 'unpack 'relax-setup.py
28810 (lambda _
28811 (substitute* "setup.py"
28812 (("python_requires.*")
28813 "")))))))
28814 (native-inputs (list python-pytest python-setuptools))
28815 (home-page "https://dbfread.readthedocs.io")
28816 (synopsis "Read DBF Files with Python")
28817 (description
28818 "This library reads DBF files and returns the data as native Python data
28819types for further processing. It is primarily intended for batch jobs and
28820one-off scripts.")
28821 (license license:expat)))
28822
28823(define-public python-cached-property
28824 (package
28825 (name "python-cached-property")
28826 (version "2.0.1")
28827 (source
28828 (origin
28829 (method url-fetch)
28830 (uri (pypi-uri "cached_property" version))
28831 (sha256
28832 (base32 "0hbni4q15n8wspdj48j6xvg977pgm1r5wwjq3x7hxvp30mqn2ka8"))))
28833 (build-system pyproject-build-system)
28834 (native-inputs
28835 (list python-freezegun
28836 python-pytest
28837 python-setuptools
28838 python-wheel))
28839 (home-page "https://github.com/pydanny/cached-property")
28840 (synopsis "Decorator for caching properties in classes")
28841 (description
28842 "This package provides a decorator which makes caching
28843time-or-computationally-expensive properties quick and easy and works in
28844Python 2 or 3.")
28845 (license license:bsd-3)))
28846
28847(define-public python-folium
28848 (package
28849 (name "python-folium")
28850 (version "0.19.4")
28851 (source
28852 (origin
28853 ;; PyPI has a ".whl" file but not a proper source release.
28854 ;; Thus, fetch code from Git.
28855 (method git-fetch)
28856 (uri (git-reference
28857 (url "https://github.com/python-visualization/folium")
28858 (commit (string-append "v" version))))
28859 (file-name (git-file-name name version))
28860 (sha256
28861 (base32 "1659hvvraax7npgsfi93l7vsd191ysvf5vj369f8h757blmwjd59"))))
28862 (build-system pyproject-build-system)
28863 (arguments
28864 (list #:test-flags
28865 ;; This file requires Selenium.
28866 #~(list "--ignore" "tests/selenium/test_selenium.py"
28867 "-k" (string-append
28868 ;; The tests below also require Selenium.
28869 "not test__repr_png_is_bytes"
28870 " and not test_valid_png"
28871 " and not test_valid_png_size"
28872 " and not test_geojson"
28873 " and not test_heat_map_with_weights"
28874 ;; This performs an online request.
28875 " and not test_json_request"
28876 ;; Requires geodatasets package.
28877 " and not test_timedynamic_geo_json"
28878 ;; AssertionError.
28879 " and not test_minimap"))
28880 #:phases
28881 #~(modify-phases %standard-phases
28882 (add-before 'build 'pretend-version
28883 ;; The version string is usually derived via setuptools-scm,
28884 ;; but without the git metadata available, the version string
28885 ;; is set to '0.0.0'.
28886 (lambda _
28887 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
28888 #$(package-version this-package)))))))
28889 (propagated-inputs
28890 (list python-branca
28891 python-jinja2
28892 python-numpy
28893 python-requests
28894 python-xyzservices))
28895 (native-inputs
28896 (list python-geopandas
28897 python-nbconvert
28898 python-pandas
28899 python-pillow
28900 python-pytest
28901 python-selenium
28902 python-setuptools
28903 python-setuptools-scm
28904 python-wheel))
28905 (home-page "https://github.com/python-visualization/folium")
28906 (synopsis "Make beautiful maps with Leaflet.js & Python")
28907 (description "@code{folium} makes it easy to visualize data that’s been
28908manipulated in Python on an interactive leaflet map. It enables both the
28909binding of data to a map for @code{choropleth} visualizations as well as
28910passing rich vector/raster/HTML visualizations as markers on the map.
28911
28912The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
28913Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
28914supports Image, Video, GeoJSON and TopoJSON overlays.")
28915 (license license:expat)))
28916
28917(define-public python-mercantile
28918 (package
28919 (name "python-mercantile")
28920 (version "1.2.1")
28921 (source
28922 (origin
28923 (method git-fetch)
28924 (uri (git-reference
28925 (url "https://github.com/mapbox/mercantile")
28926 (commit version)))
28927 (file-name (git-file-name name version))
28928 (sha256
28929 (base32 "1b7kglzkjz1gmgjgk2y3n4gg70b8zdfg6kyqx2g7a3z7clxxf80f"))))
28930 (build-system pyproject-build-system)
28931 (propagated-inputs (list python-click))
28932 (native-inputs (list python-check-manifest python-hypothesis python-pytest
28933 python-setuptools))
28934 (home-page "https://github.com/mapbox/mercantile")
28935 (synopsis "Web mercator XYZ tile utilities")
28936 (description
28937 "The mercantile module provides @code{ul(xtile, ytile, zoom)} and
28938@code{bounds(xtile, ytile, zoom)} functions that respectively return the upper
28939left corner and bounding longitudes and latitudes for XYZ tiles, a
28940@code{xy(lng, lat)} function that returns spherical mercator x and y
28941coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
28942containing a given point, and quadkey conversion functions
28943@code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
28944translating between quadkey and tile coordinates.")
28945 (license license:bsd-3)))
28946
28947(define-public jube
28948 (package
28949 ;; This is a command-line tool, so no "python-" prefix.
28950 (name "jube")
28951 (version "2.6.1")
28952 (source
28953 (origin
28954 (method url-fetch)
28955 (uri (string-append
28956 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
28957 version))
28958 (sha256
28959 (base32 "0r5d2gdqa0f4c468q3k25ycw1k2g76gg8fyiln4ni98fvfsbx3il"))
28960 (file-name (string-append "jube-" version ".tar.gz"))))
28961 (build-system pyproject-build-system)
28962 (arguments
28963 (list
28964 #:tests? #f)) ; No tests.
28965 (propagated-inputs (list python-pyyaml))
28966 (native-inputs (list python-setuptools))
28967 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
28968 (synopsis "Benchmarking environment")
28969 (description
28970 "JUBE helps perform and analyze benchmarks in a systematic way. For each
28971benchmarked application, benchmark data is stored in a format that allows JUBE
28972to deduct the desired information. This data can be parsed by automatic pre-
28973and post-processing scripts that draw information and store it more densely
28974for manual interpretation.")
28975 (license license:gpl3+)))
28976
28977(define-public python-pyroutelib3
28978 (package
28979 (name "python-pyroutelib3")
28980 (version "2.0.0")
28981 (source
28982 (origin
28983 (method git-fetch)
28984 (uri (git-reference
28985 (url "https://github.com/MKuranowski/pyroutelib3")
28986 (commit (string-append "v" version))))
28987 (file-name (git-file-name name version))
28988 (sha256
28989 (base32 "18a86fggs9pjib97x47acqgccrsra1h7dkz21r94vsyrdindchns"))))
28990 (build-system pyproject-build-system)
28991 (propagated-inputs (list python-dateutil python-protobuf-5))
28992 (native-inputs (list python-filelock python-flit-core python-pytest))
28993 (home-page "https://github.com/MKuranowski/pyroutelib3")
28994 (synopsis "Library for simple routing on OSM data")
28995 (description "Library for simple routing on OSM data")
28996 (license license:gpl3+)))
28997
28998(define-public python-bibtexparser
28999 (package
29000 (name "python-bibtexparser")
29001 (version "2.0.0b8")
29002 (source
29003 (origin
29004 (method git-fetch)
29005 (uri (git-reference
29006 (url "https://github.com/sciunto-org/python-bibtexparser")
29007 (commit (string-append "v" version))))
29008 (file-name (git-file-name name version))
29009 (sha256
29010 (base32 "065b6267ygphacfc9aawckv0yz9x3pzd4ivdbsr8cla3zs3lqzg7"))))
29011 (build-system pyproject-build-system)
29012 (propagated-inputs (list python-pyparsing))
29013 (native-inputs
29014 (list python-pylatexenc python-pytest python-setuptools))
29015 (home-page "https://github.com/sciunto-org/python-bibtexparser")
29016 (synopsis "Python library to parse BibTeX files")
29017 (description "BibtexParser is a Python library to parse BibTeX files.")
29018 (license (list license:bsd-3 license:lgpl3))))
29019
29020(define-public python-bibtexparser-for-cobib
29021 (hidden-package
29022 (package
29023 (inherit python-bibtexparser)
29024 (name "python-bibtexparser")
29025 (version "1.4.0")
29026 (source
29027 (origin
29028 (method git-fetch)
29029 (uri (git-reference
29030 (url "https://github.com/sciunto-org/python-bibtexparser")
29031 (commit (string-append "v" version))))
29032 (file-name (git-file-name name version))
29033 (sha256
29034 (base32 "0zrgfgmh37m9frq528vy66p2fhlxzrxyhj0inc6qwg0m717w9zbl")))))))
29035
29036(define-public python-distro
29037 (package
29038 (name "python-distro")
29039 (version "1.9.0")
29040 (source
29041 (origin
29042 (method url-fetch)
29043 (uri (pypi-uri "distro" version))
29044 (sha256
29045 (base32 "1vfvkgfvrjpxpb48pf8rs2l5wfxij0plmffnw5p123wlv1ppr9rg"))))
29046 (build-system pyproject-build-system)
29047 (arguments
29048 (list
29049 #:test-flags
29050 #~(list "-k" (string-join
29051 ;; We are not on Ubunto distro:
29052 ;; AssertionError: assert '' == 'ubuntu'.
29053 (list "not test_ubuntu14normal_lsb_release"
29054 "test_trailingblanks_lsb_release"
29055 "test_ubuntu14nomodules_lsb_release")
29056 " and not "))))
29057 (native-inputs
29058 (list python-pytest
29059 python-setuptools))
29060 (home-page "https://github.com/python-distro/distro")
29061 (synopsis "OS platform information API")
29062 (description
29063 "@code{distro} provides information about the OS distribution it runs on,
29064such as a reliable machine-readable ID, or version information.
29065
29066It is the recommended replacement for Python's original
29067`platform.linux_distribution` function (which will be removed in Python 3.8).
29068@code{distro} also provides a command-line interface to output the platform
29069information in various formats.")
29070 (license license:asl2.0)))
29071
29072(define-public python-cairosvg
29073 (package
29074 (name "python-cairosvg")
29075 (version "2.8.2")
29076 (source
29077 (origin
29078 (method url-fetch)
29079 (uri (pypi-uri "cairosvg" version))
29080 (sha256
29081 (base32 "17zgbgw24jw70rfka9wa3ff5wymk9cmaqk4a6697mchpcglg9jq7"))))
29082 (build-system pyproject-build-system)
29083 (arguments
29084 (list #:test-flags #~(list "cairosvg/test_api.py")))
29085 (native-inputs
29086 (list python-pytest
29087 python-setuptools))
29088 (propagated-inputs
29089 (list python-cairocffi
29090 python-cssselect2
29091 python-defusedxml
29092 python-pillow
29093 python-tinycss2))
29094 (home-page "https://cairosvg.org/")
29095 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
29096 (description "CairoSVG is a SVG converter based on Cairo. It can export
29097SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
29098SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
29099parsed, the result is drawn to a Cairo surface that can be exported to
29100qvarious formats: PDF, PostScript, PNG and even SVG.")
29101 (license license:lgpl3+)))
29102
29103(define-public python-pyphen
29104 (package
29105 (name "python-pyphen")
29106 (version "0.17.2")
29107 (source
29108 (origin
29109 (method git-fetch)
29110 (uri (git-reference
29111 (url "https://github.com/Kozea/Pyphen")
29112 (commit version)))
29113 (file-name (git-file-name name version))
29114 (sha256
29115 (base32 "1fqxc50vqj884b7f6d8qfvnvw34477lhsdznvpxsljjg9j2v4ipv"))))
29116 (build-system pyproject-build-system)
29117 (native-inputs (list python-flit-core python-pytest))
29118 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
29119 ;; embedded set provided by upstream - like Debian does.
29120 (home-page "https://github.com/Kozea/Pyphen")
29121 (synopsis "Pure Python module to hyphenate text")
29122 (description "Pyphen is a pure Python module to hyphenate text using
29123existing Hunspell hyphenation dictionaries.")
29124 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
29125
29126(define-public python-intelhex
29127 (package
29128 (name "python-intelhex")
29129 (version "2.3.0")
29130 (source
29131 (origin
29132 (method git-fetch)
29133 (uri (git-reference
29134 (url "https://github.com/python-intelhex/intelhex")
29135 (commit version)))
29136 (file-name (git-file-name name version))
29137 (sha256
29138 (base32 "13p7x4ygfgqn27q3c8lam7a0z09764iymgs7lcvjvxgq52nqwf9c"))))
29139 (build-system pyproject-build-system)
29140 (arguments (list #:test-backend #~'unittest))
29141 (native-inputs (list python-setuptools))
29142 (home-page "https://github.com/python-intelhex/intelhex")
29143 (synopsis "Python library for Intel HEX files manipulations")
29144 (description
29145 "The Intel HEX file format is widely used in microprocessors and
29146microcontrollers area (embedded systems etc.) as the de facto standard for
29147representation of code to be programmed into microelectronic devices. This
29148package provides an intelhex Python library to read, write, create from
29149scratch and manipulate data from Intel HEX file format. It also includes
29150several convenience Python scripts, including \"classic\" hex2bin and bin2hex
29151converters and more, those based on the library itself.")
29152 (license license:bsd-3)))
29153
29154(define-public python-interlap
29155 (package
29156 (name "python-interlap")
29157 (version "0.2.7")
29158 (source
29159 (origin
29160 (method git-fetch)
29161 (uri (git-reference
29162 (url "https://github.com/brentp/interlap")
29163 (commit (string-append "v" version))))
29164 (file-name (git-file-name name version))
29165 (sha256
29166 (base32 "0kmw72ilhsfx7piikl92b1s0rnax49qc7idjxsbwhvpklyjiylfm"))))
29167 (build-system pyproject-build-system)
29168 (arguments
29169 (list
29170 #:test-backend #~'custom
29171 #:test-flags #~(list "interlap.py")))
29172 (native-inputs (list python-setuptools))
29173 (home-page "https://brentp.github.io/interlap")
29174 (synopsis "Fast, simple interval overlap testing")
29175 (description
29176 "InterLap does fast interval overlap testing with a simple Python data
29177structure.")
29178 (license license:expat)))
29179
29180(define-public python-pykwalify
29181 (package
29182 (name "python-pykwalify")
29183 (version "1.8.0")
29184 (source
29185 (origin
29186 (method git-fetch)
29187 (uri (git-reference
29188 (url "https://github.com/grokzen/pykwalify")
29189 (commit version)))
29190 (file-name (git-file-name name version))
29191 (sha256
29192 (base32 "1x46ray74hzqmsicq2qikxhdihyyz9himjmc5gvlvd8vzqr1gi8p"))))
29193 (build-system pyproject-build-system)
29194 (arguments
29195 (list
29196 #:test-flags
29197 ;; XXX: yaml safe_dump() has been removed.
29198 #~(list "--ignore=tests/test_unicode.py"
29199 "--deselect=tests/test_core.py::TestCore::test_core_files")))
29200 (native-inputs
29201 (list python-pytest python-setuptools python-testfixtures))
29202 (propagated-inputs
29203 (list python-dateutil python-docopt python-pyyaml python-ruamel.yaml))
29204 (home-page "https://github.com/grokzen/pykwalify")
29205 (synopsis "Python lib/cli for JSON/YAML schema validation")
29206 (description
29207 "This package provides a parser, schema validator, and data binding tool
29208for YAML and JSON.")
29209 (license license:expat)))
29210
29211(define-public python-pykakasi
29212 (package
29213 (name "python-pykakasi")
29214 (version "2.3.0")
29215 (source
29216 (origin
29217 (method url-fetch)
29218 (uri (pypi-uri "pykakasi" version))
29219 (sha256
29220 (base32 "18dhcw7myw5idajnfynjbvqxmyf9m0cygfwsavbbi7zmcf72l1gs"))))
29221 (build-system pyproject-build-system)
29222 (arguments (list #:test-flags ''("-k" "not test_aozora")))
29223 (propagated-inputs (list python-deprecated python-importlib-resources
29224 python-jaconv))
29225 (native-inputs (list python-coverage
29226 python-py-cpuinfo
29227 python-pytest
29228 python-pytest-benchmark
29229 python-setuptools
29230 python-setuptools-scm
29231 python-wheel))
29232 (home-page "https://codeberg.org/miurahr/pykakasi")
29233 (synopsis "Kana kanji simple inversion library")
29234 (description
29235 "pykakasi is a Python Natural Language Processing @acronym{NLP, Natural
29236Language Processing} library to transliterate hiragana, katakana and
29237kanji (Japanese text) into rōmaji (Latin/Roman alphabet). It can handle
29238characters in NFC form.
29239
29240Its algorithms are based on the kakasi library, which is written in C.")
29241 (license license:gpl3+)))
29242
29243(define-public python-dbus-python
29244 (package
29245 (name "python-dbus-python")
29246 (version "1.3.2")
29247 (source
29248 (origin
29249 (method url-fetch)
29250 (uri (pypi-uri "dbus-python" version))
29251 (sha256
29252 (base32 "1y28h90v2ib8zqhs3r2yr7ycg8ccwvw3gqkvadlm12v1129q2rxd"))))
29253 (build-system pyproject-build-system)
29254 (arguments
29255 (list
29256 #:tests? #f ;XXX: Tests require setup
29257 #:phases
29258 #~(modify-phases %standard-phases
29259 (add-after 'unpack 'patch-requirements
29260 (lambda _
29261 (substitute* (list "pyproject.toml" "setup.py")
29262 (("'(ninja|patchelf)',?") ""))
29263 (substitute* "setup.cfg"
29264 (("(ninja|patchelf)") "")))))))
29265 (native-inputs
29266 (list pkg-config
29267 meson
29268 ninja/pinned
29269 patchelf
29270 python-meson-python
29271 python-setuptools
29272 python-tappy))
29273 (inputs
29274 (list dbus glib))
29275 (propagated-inputs
29276 (list python-pygobject))
29277 (home-page "https://dbus.freedesktop.org/doc/dbus-python/")
29278 (synopsis "Python bindings for libdbus")
29279 (description
29280 "This package provides Python bindings to libdbus, the reference
29281implementation of the D-Bus protocol.")
29282 (license license:expat)))
29283
29284(define python-dbusmock-check-phase
29285 #~(lambda* (#:key tests? #:allow-other-keys)
29286 (when tests?
29287 (match (primitive-fork)
29288 (0 ;child process
29289 (execlp "pytest" "pytest" "-vv"))
29290 (pytest-pid
29291 (let loop ()
29292 ;; Reap child processes; otherwise, python-dbusmock
29293 ;; would waste time polling for the dbus processes
29294 ;; it spawns to be reaped, in vain.
29295 (match (waitpid WAIT_ANY)
29296 ((pid . status)
29297 (if (= pid pytest-pid)
29298 (unless (zero? status)
29299 (error "`pytest' exited with status"
29300 status))
29301 (loop))))))))))
29302
29303(define-public python-dbusmock
29304 (package
29305 (name "python-dbusmock")
29306 (version "0.37.2")
29307 (source
29308 (origin
29309 (method git-fetch)
29310 (uri (git-reference
29311 (url "https://github.com/martinpitt/python-dbusmock")
29312 (commit version)))
29313 (file-name (git-file-name name version))
29314 (sha256
29315 (base32 "1a70gi3qgjblg9z9id9z0fy3vlhb1cqbmmny14bqhv79qqskspj3"))))
29316 (build-system pyproject-build-system)
29317 (arguments
29318 (list
29319 #:modules `((guix build pyproject-build-system)
29320 (guix build utils)
29321 (ice-9 match))
29322 #:phases
29323 #~(modify-phases %standard-phases
29324 (add-after 'unpack 'patch-paths
29325 (lambda* (#:key inputs #:allow-other-keys)
29326 (substitute* "tests/test_api.py"
29327 (("/usr/bin/python3")
29328 (which "python3")))
29329 (substitute* "dbusmock/testcase.py"
29330 (("\"dbus-daemon\"")
29331 (object->string
29332 (search-input-file inputs "/bin/dbus-daemon"))))))
29333 (replace 'check #$python-dbusmock-check-phase))))
29334 (native-inputs (list python-pytest python-setuptools upower which))
29335 (inputs (list dbus))
29336 (propagated-inputs (list python-dbus-python python-pygobject))
29337 (home-page "https://github.com/martinpitt/python-dbusmock")
29338 (synopsis "Python library for mock D-Bus objects")
29339 (description
29340 "python-dbusmock allows for the easy creation of mock objects on D-Bus.
29341This is useful for writing tests for software which talks to D-Bus services
29342such as upower, systemd, logind, gnome-session or others, and it is hard (or
29343impossible without root privileges) to set the state of the real services to
29344what you expect in your tests.")
29345 (license license:lgpl3+)))
29346
29347(define-public python-dbusmock-minimal
29348 (package
29349 (inherit python-dbusmock)
29350 (name "python-dbusmock-minimal")
29351 (version "0.30.0")
29352 (source
29353 (origin
29354 (method url-fetch)
29355 (uri (pypi-uri "python-dbusmock" version))
29356 (sha256
29357 (base32
29358 "1hanz6x76jq66ypdirga5h15zjs67kwysl6rmsf0i22dbdqrxdfv"))))
29359 (build-system python-build-system)
29360 (arguments
29361 (list
29362 #:tests? #f
29363 #:modules `((guix build python-build-system)
29364 (guix build utils)
29365 (ice-9 match))
29366 #:phases
29367 #~(modify-phases %standard-phases
29368 (add-after 'unpack 'patch-paths
29369 (lambda* (#:key inputs #:allow-other-keys)
29370 (substitute* "tests/test_api.py"
29371 (("/usr/bin/python3")
29372 (which "python3")))
29373 (substitute* "tests/test_code.py"
29374 (("/bin/bash")
29375 (which "bash")))
29376 (substitute* "dbusmock/testcase.py"
29377 (("'dbus-daemon'")
29378 (object->string
29379 (search-input-file inputs "/bin/dbus-daemon"))))))
29380 (replace 'check #$python-dbusmock-check-phase))))
29381 (native-inputs (list which))
29382 (inputs
29383 (list dbus))
29384 (propagated-inputs
29385 (list python-dbus-python python-pygobject))
29386 (properties '((hidden? . #t)))))
29387
29388(define-public python-jsonplus
29389 (package
29390 (name "python-jsonplus")
29391 (home-page "https://github.com/randomir/jsonplus")
29392 (properties '((commit . "a4450ce73a4464fcee9b08d96be3e13152b0cb3b")
29393 (revision . "0")))
29394 (version (git-version "0.8.0"
29395 (assoc-ref properties 'revision)
29396 (assoc-ref properties 'commit)))
29397 (source
29398 (origin
29399 (method git-fetch)
29400 (uri (git-reference
29401 (url home-page)
29402 (commit (assoc-ref properties 'commit))))
29403 (file-name (git-file-name name version))
29404 (sha256
29405 (base32 "1n7rr7fgy2g972si6zhindia362w34d696xjdicx25f39n88jcvk"))))
29406 (build-system pyproject-build-system)
29407 (arguments
29408 (list
29409 ;; XXX: Tests require the additional package moneyed.
29410 #:tests? #f
29411 #:phases
29412 #~(modify-phases %standard-phases
29413 (add-after 'unpack 'chdir
29414 (lambda _
29415 (chdir "python"))))))
29416 (native-inputs (list python-setuptools))
29417 (propagated-inputs
29418 (list python-dateutil python-simplejson python-sortedcontainers))
29419 (synopsis "Serialize Python types to/from JSON")
29420 (description
29421 "This package provides functionality to serialize arbitrary data types
29422to and from JSON. Common data types are implemented and it is easy to
29423register custom encoders and decoders.")
29424 (license license:expat)))
29425
29426(define-public python-ioctl-opt
29427 (package
29428 (name "python-ioctl-opt")
29429 (version "1.3")
29430 (source
29431 (origin
29432 (method url-fetch)
29433 (uri (pypi-uri "ioctl-opt" version))
29434 (sha256
29435 (base32 "1ygjgkzn0i61zk2yr27aqnma08c8xpblhdixli9f20if1nlgkm2y"))))
29436 (build-system pyproject-build-system)
29437 (arguments
29438 (list #:tests? #f)) ;no tests
29439 (native-inputs (list python-setuptools))
29440 (home-page "http://github.com/vpelletier/python-ioctl-opt")
29441 (synopsis "Functions to compute fnctl.ioctl's opt argument")
29442 (description
29443 "This package provides functions to compute fnctl.ioctl's opt argument.")
29444 (license license:gpl2+)))
29445
29446(define-public python-anyio
29447 (package
29448 (name "python-anyio")
29449 (version "4.6.2")
29450 (source
29451 (origin
29452 (method url-fetch)
29453 (uri (pypi-uri "anyio" version))
29454 (sha256
29455 (base32
29456 "0ir3n40gdcm1kd7qyn4c46pgdyyp36h49a0pifyv6lh7vnrpnapp"))))
29457 (build-system pyproject-build-system)
29458 (arguments
29459 `(#:phases
29460 (modify-phases %standard-phases
29461 (replace 'check
29462 (lambda* (#:key tests? #:allow-other-keys)
29463 (when tests?
29464 (invoke
29465 "pytest" "-vv" "-p" "no:asyncio"
29466 "-m" "not network"
29467 "-k"
29468 (string-append
29469 "not test_is_block_device"
29470
29471 ,@(cond
29472 ((or (target-aarch64?)
29473 (target-riscv64?))
29474 '(" and not test_keyboardinterrupt_during_test"))
29475 (#t '()))
29476
29477 ;; These fail because of network (or specifically IPv6
29478 ;; network) access (see:
29479 ;; https://github.com/agronholm/anyio/issues/417).
29480 " and not test_accept"
29481 " and not test_accept_after_close"
29482 " and not test_close_during_receive"
29483 " and not test_close_from_other_task"
29484 " and not test_concurrent_receive"
29485 " and not test_concurrent_send"
29486 " and not test_connect_tcp_with_tls"
29487 " and not test_connect_tcp_with_tls_cert_check_fail"
29488 " and not test_connection_refused"
29489 " and not test_extra_attributes"
29490 " and not test_getaddrinfo"
29491 " and not test_getnameinfo"
29492 " and not test_happy_eyeballs"
29493 " and not test_iterate"
29494 " and not test_receive_after_close"
29495 " and not test_receive_timeout"
29496 " and not test_reuse_port"
29497 " and not test_run_process"
29498 " and not test_send_after_close"
29499 " and not test_send_after_eof"
29500 " and not test_send_after_peer_closed"
29501 " and not test_send_eof"
29502 " and not test_send_large_buffer"
29503 " and not test_send_receive"
29504 " and not test_socket_options"
29505 " and not test_unretrieved_future_exception_server_crash"))))))))
29506 (propagated-inputs
29507 (list python-idna
29508 python-sniffio))
29509 (native-inputs
29510 (list python-psutil
29511 python-pytest
29512 python-pytest-mock
29513 python-setuptools
29514 python-setuptools-scm
29515 python-trio
29516 python-trustme
29517 python-uvloop))
29518 (home-page "https://github.com/agronholm/anyio")
29519 (synopsis "Compatibility layer for multiple asynchronous event loops")
29520 (description
29521 "AnyIO is an asynchronous networking and concurrency library that works
29522on top of either asyncio or trio. It implements trio-like structured
29523concurrency on top of asyncio, and works in harmony with the native SC of trio
29524itself.")
29525 (license license:expat)))
29526
29527(define-public python-argh
29528 (package
29529 (name "python-argh")
29530 (version "0.31.3")
29531 (source
29532 (origin
29533 (method url-fetch)
29534 (uri (pypi-uri "argh" version))
29535 (sha256
29536 (base32 "1ycjb2f92iskvp27vq2a8vdbpmsij61apvmkn7k5xjhlpvc2607k"))))
29537 (build-system pyproject-build-system)
29538 (native-inputs (list python-flit-core python-pytest))
29539 (home-page "https://github.com/neithere/argh/")
29540 (synopsis "Argparse wrapper with natural syntax")
29541 (description
29542 "Argh is a small library that provides several layers of abstraction
29543on top of @code{python-argparse}. The layers can be mixed. It is always
29544possible to declare a command with the highest possible (and least flexible)
29545layer and then tune the behaviour with any of the lower layers including the
29546native API of @code{python-argparse}.")
29547 (license license:lgpl3+)))
29548
29549(define-public python-pox
29550 (package
29551 (name "python-pox")
29552 (version "0.3.6")
29553 (source
29554 (origin
29555 (method url-fetch)
29556 (uri (pypi-uri "pox" version))
29557 (sha256
29558 (base32
29559 "01gnsgz6wfmpmb57qr4cgpkampiy6l7c1kxa0hlacn81c0wyvvl4"))))
29560 (build-system pyproject-build-system)
29561 (arguments
29562 (list
29563 #:phases
29564 #~(modify-phases %standard-phases
29565 (replace 'check
29566 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29567 (when tests?
29568 (mkdir-p "/tmp/guix")
29569 (setenv "SHELL" "bash")
29570 (setenv "USERNAME" "guix")
29571 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
29572 (invoke "python" "./pox/tests/__main__.py")))))))
29573 (native-inputs
29574 (list python-setuptools
29575 which)) ;pox/tests/test_shutils.py
29576 (home-page "https://pypi.org/project/pox/")
29577 (synopsis "Python utilities for file system exploration and automated builds")
29578 (description
29579 "Pox provides a collection of utilities for navigating and manipulating
29580file systems. This module is designed to facilitate some of the low-level
29581operating system interactions that are useful when exploring a file system on a
29582remote host. Pox provides Python equivalents of several shell commands such
29583as @command{which} and @command{find}. These commands allow automated
29584discovery of what has been installed on an operating system, and where the
29585essential tools are located.")
29586 (license license:bsd-3)))
29587
29588(define-public python-flit
29589 (package
29590 (name "python-flit")
29591 (version "3.12.0") ;same as python-flit-core
29592 (source
29593 (origin
29594 (method url-fetch)
29595 (uri (pypi-uri "flit" version))
29596 (sha256
29597 (base32 "0h1pxi2hgr95321bgl45l86693zl14l3shj0idsyg4k9v56z700w"))))
29598 (build-system pyproject-build-system)
29599 (arguments
29600 (list
29601 #:test-flags
29602 ;; These tests fail when FLIT_NO_NETWORK is set
29603 '(list "-k" "not test_invalid_classifier \
29604and not test_install_requires \
29605and not test_install_requires_extra \
29606and not test_validate_classifiers_private")
29607 #:phases
29608 #~(modify-phases %standard-phases
29609 (add-before 'check 'pre-check
29610 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29611 (when tests?
29612 (setenv "HOME" "/tmp")
29613 (setenv "FLIT_NO_NETWORK" "1")))))))
29614 (propagated-inputs
29615 (list python-tomli-w
29616 python-flit-core
29617 python-docutils
29618 python-requests))
29619 (native-inputs
29620 (list python-responses
29621 python-pytest
29622 python-testpath))
29623 (home-page "https://flit.readthedocs.io/")
29624 (synopsis "Simple packaging tool for simple packages")
29625 (description "Flit is a simple way to put Python packages and modules on
29626PyPI. Flit packages a single importable module or package at a time, using
29627the import name as the name on PyPI. All subpackages and data files within a
29628package are included automatically.")
29629 (license license:bsd-3)))
29630
29631(define-public python-fastentrypoints
29632 (package
29633 (name "python-fastentrypoints")
29634 (home-page "https://github.com/ninjaaron/fast-entry_points")
29635 (properties '((commit . "a3a26f320c7ae2191fde71b79d4f4bf325d162f3")
29636 (revision . "0")))
29637 (version (git-version "0.12"
29638 (assoc-ref properties 'revision)
29639 (assoc-ref properties 'commit)))
29640 (source
29641 (origin
29642 (method git-fetch)
29643 (uri (git-reference
29644 (url home-page)
29645 (commit (assoc-ref properties 'commit))))
29646 (file-name (git-file-name name version))
29647 (sha256
29648 (base32 "0d4xx9zz2xrdxgap8lbrc1mvslvdvddxk3s27zqv918iykkm70d0"))))
29649 (build-system pyproject-build-system)
29650 (arguments
29651 (list
29652 ;; XXX: Testing is non-standard and hardly configurable.
29653 #:tests? #f
29654 #:test-backend #~'custom
29655 #:test-flags #~(list "test/runtest.py")))
29656 (native-inputs (list python-setuptools))
29657 (synopsis "Makes entry_points specified in setup.py load more quickly")
29658 (description
29659 "Using entry_points in your setup.py makes scripts that start really
29660slowly because it imports pkg_resources. This package allows such setup
29661scripts to load entry points more quickly.")
29662 (license license:bsd-3)))
29663
29664(define-public python-funcparserlib
29665 (package
29666 (name "python-funcparserlib")
29667 (version "1.0.1")
29668 (source
29669 (origin
29670 ;; Source tarball on PyPi lacks tests.
29671 (method git-fetch)
29672 (uri (git-reference
29673 (url "https://github.com/vlasovskikh/funcparserlib")
29674 (commit version)))
29675 (file-name (git-file-name name version))
29676 (sha256
29677 (base32 "0dw3i4fyf3j9h1l7xfgs99fc2w2axk6xqk0sdag43k444ss4hkrc"))))
29678 (build-system pyproject-build-system)
29679 (arguments
29680 '(#:phases
29681 (modify-phases %standard-phases
29682 (replace 'check
29683 (lambda* (#:key tests? #:allow-other-keys)
29684 (when tests?
29685 (invoke "python" "-m" "unittest" "discover" "-v")))))))
29686 ;; ModuleNotFoundError: No module named 'poetry'
29687 (native-inputs (list python-poetry-core python-six))
29688 (home-page "https://github.com/vlasovskikh/funcparserlib")
29689 (synopsis
29690 "Recursive descent parsing library based on functional combinators")
29691 (description
29692 "This package is a recursive descent parsing library for Python based on
29693functional combinators. Parser combinators are just higher-order functions
29694that take parsers as their arguments and return them as result values.")
29695 (license license:expat)))
29696
29697(define-public python-cson
29698 (package
29699 (name "python-cson")
29700 (version "0.8")
29701 (source
29702 (origin
29703 (method git-fetch)
29704 (uri (git-reference
29705 (url "https://github.com/avakar/pycson")
29706 (commit version)))
29707 (file-name (git-file-name name version))
29708 (sha256
29709 (base32 "0d2zbmak0hzsl1w71dgc8x4q4vdfbpk46vwyi9vvvqv7gdqj59fn"))))
29710 (build-system pyproject-build-system)
29711 (native-inputs (list python-pytest python-setuptools python-wheel))
29712 (propagated-inputs (list python-speg))
29713 (home-page "https://github.com/avakar/pycson")
29714 (synopsis "Parser for Coffeescript Object Notation (CSON)")
29715 (description
29716 "This package is a parser for Coffeescript Object Notation (CSON).")
29717 (license license:expat)))
29718
29719(define-public python-aionotify
29720 (package
29721 (name "python-aionotify")
29722 (version "0.3.1")
29723 (source
29724 (origin
29725 ;; Source tarball on PyPi lacks tests
29726 (method git-fetch)
29727 (uri (git-reference
29728 (url "https://github.com/rbarrois/aionotify")
29729 (commit version)))
29730 (file-name (git-file-name name version))
29731 (sha256
29732 (base32 "1p08g0h4bjlra25cwysag7gifsrm35d5vkjfv845w1rig8b57q9s"))))
29733 (build-system pyproject-build-system)
29734 (native-inputs
29735 (list python-pytest
29736 python-setuptools
29737 python-wheel))
29738 (home-page "https://github.com/rbarrois/aionotify")
29739 (synopsis "inotify library for Python")
29740 (description
29741 "@code{python-aionotify} is a simple, asyncio-based inotify library.")
29742 (license license:bsd-3)))
29743
29744(define-public python-forbiddenfruit
29745 (package
29746 (name "python-forbiddenfruit")
29747 (version "0.1.4")
29748 (source
29749 (origin
29750 (method git-fetch)
29751 (uri (git-reference
29752 (url "https://github.com/clarete/forbiddenfruit")
29753 (commit version)))
29754 (file-name (git-file-name name version))
29755 (sha256
29756 (base32 "16chhrxbbmg6lfbzm532fq0v00z8qihcsj0kg2b5jlgnb6qijwn8"))))
29757 (build-system pyproject-build-system)
29758 (arguments
29759 (list
29760 #:phases
29761 #~(modify-phases %standard-phases
29762 (replace 'check
29763 (lambda* (#:key tests? #:allow-other-keys)
29764 (when tests?
29765 (invoke "make" "prepare" "SKIP_DEPS=1")
29766 (invoke "nosetests")))))))
29767 (native-inputs (list python-pynose python-setuptools))
29768 (home-page "https://github.com/clarete/forbiddenfruit")
29769 (synopsis "Patch python built-in objects")
29770 (description "This project allows Python code to extend built-in types.")
29771 (license (list license:gpl3+ license:expat))))
29772
29773(define-public python-k5test
29774 (package
29775 (name "python-k5test")
29776 (version "0.10.4")
29777 (source
29778 (origin
29779 (method url-fetch)
29780 (uri (pypi-uri "k5test" version))
29781 (sha256
29782 (base32 "0c7g9gk3vfgh1wbl4s1v15v283srsixkhgak7lxskxh2cqg4jlp1"))))
29783 (build-system pyproject-build-system)
29784 (arguments
29785 (list #:tests? #f)) ;no tests
29786 (native-inputs
29787 (list python-setuptools))
29788 (inputs
29789 (list mit-krb5))
29790 (home-page "https://github.com/pythongssapi/k5test")
29791 (synopsis "Library for setting up self-contained Kerberos 5 environments")
29792 (description
29793 "@code{k5test} is a library for setting up self-contained Kerberos 5
29794environments, and running Python unit tests inside those environments. It is
29795based on the file of the same name found alongside the MIT Kerberos 5 unit
29796tests.")
29797 (license license:isc)))
29798
29799(define-public python-gssapi
29800 (package
29801 (name "python-gssapi")
29802 (version "1.10.0")
29803 (source
29804 (origin
29805 (method url-fetch)
29806 (uri (pypi-uri "gssapi" version))
29807 (sha256
29808 (base32 "0qvpsx5kq746gixa7phxikkxmir3wy5dj94phg93mvhbq86mwjgi"))))
29809 (build-system pyproject-build-system)
29810 (arguments
29811 (list #:test-flags #~(list "--pyargs" "gssapi")))
29812 (native-inputs
29813 (list python-cython
29814 python-k5test
29815 python-parameterized
29816 python-pytest
29817 python-setuptools))
29818 (inputs
29819 (list mit-krb5))
29820 (propagated-inputs
29821 (list python-decorator))
29822 (home-page "https://github.com/pythongssapi/python-gssapi")
29823 (synopsis "Python GSSAPI Wrapper")
29824 (description
29825 "Python-GSSAPI provides both low-level and high level wrappers around the
29826GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
29827also be usable with other GSSAPI mechanisms.")
29828 (license license:isc)))
29829
29830(define-public python-check-manifest
29831 (package
29832 (name "python-check-manifest")
29833 (version "0.49")
29834 (source
29835 (origin
29836 (method url-fetch)
29837 (uri (pypi-uri "check-manifest" version))
29838 (sha256
29839 (base32
29840 "05plc1835zz1w1k7wpf2n6jir71ds1w7nz3535lj5ks2am2419k4"))))
29841 (build-system pyproject-build-system)
29842 (arguments
29843 '(;; This test requires setting up a venv which does not work
29844 ;; properly in the build environment.
29845 #:test-flags '("-k" "not test_build_sdist_pep517_isolated")
29846 #:phases
29847 (modify-phases %standard-phases
29848 ;; Tests use git submodule commands over the file transport, which
29849 ;; has been disabled in git, see CVE-2022-39253. Enable these
29850 ;; commands to allow checks to succeed.
29851 (add-before 'check 'allow-git-submodule-add
29852 (lambda _
29853 (setenv "HOME" "/tmp")
29854 (invoke "git" "config" "--global"
29855 "protocol.file.allow" "always"))))))
29856 (native-inputs
29857 (list git-minimal/pinned python-pytest))
29858 (propagated-inputs
29859 (list python-pypa-build python-setuptools))
29860 (home-page "https://github.com/mgedmin/check-manifest")
29861 (synopsis "Check MANIFEST.in in a Python source package for completeness")
29862 (description "Python package can include a MANIFEST.in file to help with
29863sending package files to the Python Package Index. This package checks that
29864file to ensure it completely and accurately describes your project.")
29865 (license license:expat)))
29866
29867(define-public python-android-stringslib
29868 (package
29869 (name "python-android-stringslib")
29870 (version "0.1.2")
29871 (source
29872 (origin
29873 (method git-fetch)
29874 (uri (git-reference
29875 (url "https://framagit.org/tyreunom/python-android-strings-lib")
29876 (commit (string-append "v" version))))
29877 (file-name (git-file-name name version))
29878 (sha256
29879 (base32
29880 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
29881 (build-system pyproject-build-system)
29882 (arguments (list #:tests? #f)) ; No tests.
29883 (native-inputs (list python-setuptools))
29884 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
29885 (synopsis "Android strings.xml support")
29886 (description
29887 "Android Strings Lib provides support for android's strings.xml files.
29888These files are used to translate strings in android apps.")
29889 (license license:expat)))
29890
29891(define-public offlate
29892 (package
29893 (name "offlate")
29894 (version "0.6.1")
29895 (source
29896 (origin
29897 (method git-fetch)
29898 (uri (git-reference
29899 (url "https://framagit.org/tyreunom/offlate")
29900 (commit version)))
29901 (file-name (git-file-name name version))
29902 (sha256
29903 (base32 "1sx5cv8pamyw1m089b6x8ykaxdkx26jk9cblhbzlf0m3ckz52jik"))))
29904 (build-system pyproject-build-system)
29905 (arguments
29906 (list
29907 #:tests? #f ; No tests.
29908 #:phases
29909 #~(modify-phases %standard-phases
29910 (add-before 'build 'generate-fonts
29911 (lambda _
29912 (invoke "make" "fonts")))
29913 (add-before 'build 'generate-translations
29914 (lambda _
29915 (invoke "make" "update-langs"))))))
29916 (propagated-inputs
29917 (list python-android-stringslib
29918 python-dateutil
29919 python-gitlab
29920 python-lxml
29921 python-polib
29922 python-pycountry
29923 python-pyenchant
29924 python-pygit2
29925 python-pygithub
29926 python-pyqt
29927 python-requests
29928 python-ruamel.yaml
29929 python-translate-toolkit-for-offlate
29930 python-translation-finder
29931 python-watchdog))
29932 (native-inputs (list qttools-5 fontforge python-setuptools))
29933 (home-page "https://framagit.org/tyreunom/offlate")
29934 (synopsis "Offline translation interface for online translation tools")
29935 (description
29936 "Offlate offers a unified interface for different translation file
29937formats, as well as many different online translation platforms. You can use
29938it to get work from online platforms, specialized such as the Translation
29939Project, or not such a gitlab instance when your upstream doesn't use any
29940dedicated platform. The tool proposes a unified interface for any format and
29941an upload option to send your work back to the platform.")
29942 (license license:gpl3+)))
29943
29944(define-public python-pypng
29945 (package
29946 (name "python-pypng")
29947 (version "0.20220715.0")
29948 (source
29949 (origin
29950 (method url-fetch)
29951 (uri (pypi-uri "pypng" version))
29952 (sha256
29953 (base32 "1hg24zja235bkbny82hx7sy7qlzfbabxph2lvqaq61vgm4xl773k"))))
29954 (build-system pyproject-build-system)
29955 (arguments
29956 (list
29957 #:phases
29958 '(modify-phases %standard-phases
29959 (add-before 'check 'pre-check
29960 (lambda _
29961 (setenv "PYTHONPATH"
29962 (string-append (getcwd) "/code:"
29963 (getenv "GUIX_PYTHONPATH"))))))))
29964 (native-inputs (list python-pytest python-setuptools python-wheel))
29965 (home-page "https://github.com/drj11/pypng")
29966 (synopsis "Pure Python PNG image encoder/decoder")
29967 (description
29968 "The PyPNG module implements support for PNG images. It reads and writes
29969PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
29970pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
29971LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
29972images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
29973A number of optional chunks can be specified (when writing) and
29974understood (when reading): tRNS, bKGD, gAMA.
29975
29976PyPNG is not a high level toolkit for image processing (like PIL) and does not
29977aim at being a replacement or competitor. Its strength lies in fine-grained
29978extensive support of PNG features. It can also read and write Netpbm PAM
29979files, with a focus on its use as an intermediate format for implementing
29980custom PNG processing.")
29981 (license license:expat)))
29982
29983(define-public python-fuzzywuzzy
29984 (package
29985 (name "python-fuzzywuzzy")
29986 (version "0.18.0")
29987 (source
29988 (origin
29989 (method git-fetch)
29990 (uri (git-reference
29991 (url "https://github.com/seatgeek/fuzzywuzzy")
29992 (commit version)))
29993 (file-name (git-file-name name version))
29994 (sha256
29995 (base32 "0zh8xd9k95waipsdz516rn51ya9xxlxbd7ivbka4gnkqm9ah79mc"))))
29996 (build-system pyproject-build-system)
29997 (arguments
29998 (list
29999 #:test-flags
30000 #~(list "--deselect=test_fuzzywuzzy_pytest.py::test_process_warning")))
30001 (native-inputs
30002 (list python-hypothesis
30003 python-pycodestyle
30004 python-pytest
30005 python-setuptools))
30006 (propagated-inputs (list python-levenshtein))
30007 (home-page "https://github.com/seatgeek/fuzzywuzzy")
30008 (synopsis "Fuzzy string matching in Python")
30009 (description
30010 "Approximate string matching using @emph{Levenshtein Distance} to
30011calculate the differences between sequences.")
30012 (license license:gpl2)))
30013
30014(define-public python-block-tracing
30015 (package
30016 (name "python-block-tracing")
30017 (version "1.0.1")
30018 (source
30019 (origin
30020 (method url-fetch)
30021 (uri (pypi-uri "block_tracing" version))
30022 (sha256
30023 (base32 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
30024 (build-system pyproject-build-system)
30025 (arguments (list #:tests? #f)) ; No tests.
30026 (native-inputs (list python-setuptools))
30027 (home-page "https://github.com/rianhunter/block_tracing")
30028 (synopsis "Protect process memory")
30029 (description
30030 "@code{block_tracing} is a tiny Python library that can be used to
30031prevent debuggers and other applications from inspecting the memory within
30032your process.")
30033 (license license:expat)))
30034
30035(define-public python-json-e
30036 (package
30037 (name "python-json-e")
30038 (version "4.8.0")
30039 (source
30040 (origin
30041 (method git-fetch) ; no tests in PyPI release
30042 (uri (git-reference
30043 (url "https://github.com/json-e/json-e")
30044 (commit (string-append "v" version))))
30045 (file-name (git-file-name name version))
30046 (sha256
30047 (base32 "1zsx17jjhvan1ziq5aaqwids3b9kzx3j8czf9qznqqqvb1n133g8"))))
30048 (build-system pyproject-build-system)
30049 (arguments
30050 (list
30051 #:phases
30052 #~(modify-phases %standard-phases
30053 ;; Git repository provides implementations for JavaScript, Golang,
30054 ;; Python and Rust, pick "py".
30055 (add-before 'build 'chdir-to-py
30056 (lambda _
30057 (chdir "py"))))))
30058 (native-inputs
30059 (list python-freezegun
30060 python-pytest
30061 python-pyyaml
30062 python-setuptools
30063 python-wheel))
30064 (home-page "https://json-e.js.org")
30065 (synopsis "Data-structure parameterizer for embedding context in JSON objects")
30066 (description
30067 "This package provides a data-structure parameterization system written
30068for embedding context in JSON objects.")
30069 (license license:mpl2.0)))
30070
30071(define-public python-json-logger
30072 (package
30073 (name "python-json-logger")
30074 (version "2.0.7")
30075 (source
30076 (origin
30077 (method url-fetch)
30078 (uri (pypi-uri "python-json-logger" version))
30079 (sha256
30080 (base32
30081 "071f9d62ds1xdp88yzsfpf1pba2f78cp18193smcads2sc1frrr3"))))
30082 (build-system pyproject-build-system)
30083 (native-inputs (list python-pytest python-setuptools python-wheel))
30084 (home-page "https://github.com/madzak/python-json-logger")
30085 (synopsis "JSON log formatter in Python")
30086 (description "This library allows standard Python logging to output log data
30087as JSON objects. With JSON we can make our logs more readable by machines and
30088we can stop writing custom parsers for syslog-type records.")
30089 (license license:bsd-3)))
30090
30091(define-public python-daiquiri
30092 (package
30093 (name "python-daiquiri")
30094 (version "3.0.1")
30095 (source
30096 (origin
30097 (method git-fetch)
30098 (uri (git-reference
30099 (url "https://github.com/jd/daiquiri")
30100 (commit version)))
30101 (file-name (git-file-name name version))
30102 (sha256
30103 (base32 "0vfakncq87s6g67mqihjf32xarphd75c03ammvgavladz0pqhlg4"))))
30104 (build-system pyproject-build-system)
30105 (arguments
30106 (list
30107 #:phases
30108 #~(modify-phases %standard-phases
30109 (add-after 'unpack 'set-version
30110 (lambda _
30111 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
30112 (propagated-inputs (list python-json-logger))
30113 (native-inputs (list python-mock python-pytest python-setuptools
30114 python-setuptools-scm))
30115 (home-page "https://github.com/jd/daiquiri")
30116 (synopsis "Library to configure Python logging easily")
30117 (description
30118 "The daiquiri library provides an easy way to configure logging in
30119Python. It also provides some custom formatters and handlers.")
30120 (license license:asl2.0)))
30121
30122(define-public python-pifpaf
30123 (package
30124 (name "python-pifpaf")
30125 (version "3.4.0")
30126 (source
30127 (origin
30128 (method git-fetch)
30129 (uri (git-reference
30130 (url "https://github.com/jd/pifpaf")
30131 (commit version)))
30132 (file-name (git-file-name name version))
30133 (sha256
30134 (base32 "1mj41h5xrkx71d7g5di3ykd4bsbgr7x432zbp63majgjci86gmm9"))))
30135 (build-system pyproject-build-system)
30136 (arguments
30137 (list
30138 #:phases
30139 #~(modify-phases %standard-phases
30140 (add-after 'install 'install-drivers
30141 (lambda* (#:key inputs outputs #:allow-other-keys)
30142 (let ((site (site-packages inputs outputs)))
30143 (copy-recursively "pifpaf/drivers"
30144 (string-append site "/pifpaf/drivers/"))))))))
30145 (propagated-inputs
30146 (list python-click
30147 python-daiquiri
30148 python-fixtures
30149 python-jinja2
30150 python-pbr
30151 python-psutil
30152 python-xattr))
30153 (native-inputs
30154 (list python-mock
30155 python-stestr
30156 python-packaging
30157 python-requests
30158 python-testrepository
30159 python-testtools
30160 python-setuptools))
30161 (home-page "https://github.com/jd/pifpaf")
30162 (synopsis "Tools and fixtures to manage daemons for testing in Python")
30163 (description
30164 "Pifpaf is a suite of fixtures and a command-line tool that starts and
30165stops daemons for a quick throw-away usage. This is typically useful when
30166needing these daemons to run integration testing. It originally evolved from
30167its precursor @code{overtest}.")
30168 (license license:asl2.0)))
30169
30170(define-public python-pytest-check-links
30171 (package
30172 (name "python-pytest-check-links")
30173 (version "0.10.1")
30174 (source
30175 (origin
30176 (method url-fetch)
30177 (uri (pypi-uri "pytest_check_links" version))
30178 (sha256
30179 (base32 "0vbp9nis2iwjz1rjc623bm2908y34xd7zj4yfk43giz6r29dsn3k"))))
30180 (build-system pyproject-build-system)
30181 (arguments
30182 (list #:tests? #f)) ;XXX: 12 failed, 4 passed, 2 skipped
30183 (native-inputs
30184 (list python-hatchling))
30185 (propagated-inputs
30186 (list python-docutils
30187 python-html5lib
30188 python-nbconvert
30189 python-nbformat
30190 python-requests))
30191 (home-page "https://github.com/jupyterlab/pytest-check-links")
30192 (synopsis "Check links in files")
30193 (description "This package provides a pytest plugin that checks URLs for
30194HTML-containing files.")
30195 (license license:bsd-3)))
30196
30197(define-public python-json5
30198 (package
30199 (name "python-json5")
30200 (version "0.9.25")
30201 (source
30202 (origin
30203 ;; sample.json5 is missing from PyPi source tarball
30204 (method git-fetch)
30205 (uri (git-reference
30206 (url "https://github.com/dpranke/pyjson5")
30207 (commit (string-append "v" version))))
30208 (file-name (git-file-name name version))
30209 (sha256
30210 (base32 "1c96dqc8hn8c82q89rr7ix8d4da07ls3iac64f8jvjlgmhfik46q"))))
30211 (build-system pyproject-build-system)
30212 (native-inputs (list python-pytest python-setuptools python-wheel))
30213 (home-page "https://github.com/dpranke/pyjson5")
30214 (synopsis "Python implementation of the JSON5 data format")
30215 (description
30216 "JSON5 extends the JSON data interchange format to make it slightly more
30217usable as a configuration language. This Python package implements parsing and
30218dumping of JSON5 data structures.")
30219 (license license:asl2.0)))
30220
30221(define-public python-farama-notifications
30222 (package
30223 (name "python-farama-notifications")
30224 (version "0.0.4")
30225 (source
30226 ;; The version on pypi does not include tests.
30227 (origin
30228 (method git-fetch)
30229 (uri (git-reference
30230 (url "https://github.com/Farama-Foundation/Farama-Notifications")
30231 (commit version)))
30232 (file-name (git-file-name name version))
30233 (sha256
30234 (base32 "1k1x48xpvhankw7vbjp20ljwran247aphc2qncqrxivrkgzwjjji"))))
30235 (build-system pyproject-build-system)
30236 (arguments
30237 (list
30238 #:phases
30239 '(modify-phases %standard-phases
30240 (replace 'check
30241 (lambda* (#:key tests? #:allow-other-keys)
30242 (when tests?
30243 (invoke "python3" "tests/ci-test.py")))))))
30244 (native-inputs (list python-pytest python-setuptools python-wheel))
30245 (home-page "https://github.com/Farama-Foundation/Farama-Notifications")
30246 (synopsis "Notifications for all Farama Foundation maintained libraries")
30247 (description
30248 "This package allows for providing notifications for all Farama
30249Foundation maintained libraries.")
30250 (license license:expat)))
30251
30252(define-public python-frozendict
30253 (package
30254 (name "python-frozendict")
30255 (version "2.4.6")
30256 (source
30257 (origin
30258 (method url-fetch)
30259 (uri (pypi-uri "frozendict" version))
30260 (sha256
30261 (base32 "13ib358v66c9ykfz3plpxcs96ca6vkx8w84sjv26zlpvf1jd2z6z"))))
30262 (build-system pyproject-build-system)
30263 (native-inputs
30264 (list python-pytest
30265 python-setuptools
30266 python-wheel))
30267 (home-page "https://github.com/Marco-Sulla/python-frozendict")
30268 (synopsis "Simple immutable mapping for Python")
30269 (description
30270 "@dfn{frozendict} is an immutable wrapper around dictionaries that
30271implements the complete mapping interface. It can be used as a drop-in
30272replacement for dictionaries where immutability is desired.")
30273 (license license:expat)))
30274
30275(define-public python-py-cpuinfo
30276 (package
30277 (name "python-py-cpuinfo")
30278 (version "9.0.0")
30279 (source
30280 (origin
30281 (method git-fetch)
30282 (uri (git-reference
30283 (url "https://github.com/workhorsy/py-cpuinfo")
30284 (commit (string-append "v" version))))
30285 (file-name (git-file-name name version))
30286 (sha256
30287 (base32
30288 "112gzmwbj3ndxv20ii7i70irp58adwrlzjdvx5gmh39aw21b96s3"))))
30289 (build-system pyproject-build-system)
30290 (arguments
30291 (list #:test-backend #~'custom
30292 #:test-flags #~(list "test_suite.py")))
30293 (native-inputs
30294 (list python-setuptools))
30295 (home-page "https://github.com/workhorsy/py-cpuinfo")
30296 (synopsis "Get CPU info with Python")
30297 (description
30298 "This Python module returns the CPU info by using the best sources of
30299information for your operating system.")
30300 (license license:expat)))
30301
30302(define-public python-canonicaljson
30303 (package
30304 (name "python-canonicaljson")
30305 (version "2.0.0")
30306 (source
30307 (origin
30308 (method url-fetch)
30309 (uri (pypi-uri "canonicaljson" version))
30310 (sha256
30311 (base32 "0gqi5z8j3myfblrc96l0jykdsk863gad1lwvnnf5vp7sszqsxzg2"))))
30312 (build-system pyproject-build-system)
30313 (arguments
30314 (list #:test-backend #~'unittest))
30315 (native-inputs
30316 (list python-setuptools))
30317 (home-page "https://github.com/matrix-org/python-canonicaljson")
30318 (synopsis "Canonical JSON")
30319 (description
30320 "Deterministically encode JSON.
30321
30322@itemize
30323@item Encodes objects and arrays as RFC 7159 JSON.
30324@item Sorts object keys so that you get the same result each time.
30325@item Has no insignificant whitespace to make the output as small as possible.
30326@item Escapes only the characters that must be escaped, U+0000 to
30327 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
30328@item Uses the shortest escape sequence for each escaped character.
30329@item Encodes the JSON as UTF-8.
30330@item Can encode frozendict immutable dictionaries.
30331@end itemize")
30332 (license license:asl2.0)))
30333
30334(define-public python-signedjson
30335 (package
30336 (name "python-signedjson")
30337 (version "1.1.4")
30338 (source
30339 (origin
30340 (method git-fetch)
30341 (uri (git-reference
30342 (url "https://github.com/matrix-org/python-signedjson")
30343 (commit (string-append "v" version))))
30344 (file-name (git-file-name name version))
30345 (sha256
30346 (base32 "1wkgbwr0hdvafbhbqjibca06rxqbp95gg6rfd3ba6rkgl4g85i5z"))))
30347 (build-system pyproject-build-system)
30348 (arguments
30349 (list
30350 #:phases
30351 #~(modify-phases %standard-phases
30352 (add-after 'unpack 'set-version
30353 (lambda _
30354 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
30355 (propagated-inputs
30356 (list python-canonicaljson
30357 python-importlib-metadata
30358 python-pynacl
30359 python-typing-extensions
30360 python-unpaddedbase64))
30361 (native-inputs
30362 (list python-pytest python-setuptools-scm python-setuptools))
30363 (home-page "https://github.com/matrix-org/python-signedjson")
30364 (synopsis "Sign JSON objects with ED25519 signatures")
30365 (description
30366 "Sign JSON objects with ED25519 signatures.
30367
30368@itemize
30369@item More than one entity can sign the same object.
30370@item Each entity can sign the object with more than one key making it easier to
30371rotate keys
30372@item ED25519 can be replaced with a different algorithm.
30373@item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
30374key.
30375@end itemize")
30376 (license license:asl2.0)))
30377
30378(define-public python-daemonize
30379 (package
30380 (name "python-daemonize")
30381 (version "2.5.0")
30382 (source
30383 (origin
30384 (method git-fetch)
30385 (uri (git-reference
30386 (url "https://github.com/thesharp/daemonize")
30387 (commit (string-append "v" version))))
30388 (file-name (git-file-name name version))
30389 (sha256
30390 (base32 "0pz914x6dfq133nfv0y8q8fss4zr52ip8mq3ds50rx0ddlbb0k2x"))))
30391 (build-system pyproject-build-system)
30392 (arguments
30393 (list
30394 #:test-backend #~'custom
30395 #:test-flags #~(list "tests/test.py")
30396 #:phases
30397 #~(modify-phases %standard-phases
30398 (add-before 'check 'fix-tests
30399 (lambda _
30400 ;; XXX: nobody has group nogroup on Guix.
30401 (substitute* "tests/test.py"
30402 (("grp\\.getgrnam\\(\"nobody\"\\)\\.gr_gid")
30403 (number->string (passwd:gid (getpw "nobody"))))))))))
30404 (native-inputs (list coreutils-minimal procps python-setuptools))
30405 (home-page "https://github.com/thesharp/daemonize")
30406 (synopsis "Library for writing system daemons in Python")
30407 (description
30408 "Daemonize is a library for writing system daemons in Python.")
30409 (license license:expat)))
30410
30411(define-public python-pymacaroons
30412 (package
30413 (name "python-pymacaroons")
30414 (properties '((commit . "78c55c1d33a0b23ddc71140a9c999f957d79e9dd")
30415 (revision . "0")))
30416 (version (git-version "0.13.0"
30417 (assoc-ref properties 'revision)
30418 (assoc-ref properties 'commit)))
30419 (source
30420 (origin
30421 (method git-fetch)
30422 (uri (git-reference
30423 (url "https://github.com/ecordell/pymacaroons")
30424 (commit (assoc-ref properties 'commit))))
30425 (file-name (git-file-name name version))
30426 (sha256
30427 (base32 "0ybdxlx6crb7l850dzz50arqrm4d4dl5dvzlf8f7sdhdcn2lgr7m"))))
30428 (build-system pyproject-build-system)
30429 (arguments
30430 (list
30431 #:test-flags
30432 ;; XXX: Despite python-hypothesis, ModuleNotFoundError:
30433 ;; No module named 'hypothesis.specifiers'
30434 #~(list "--ignore=tests/property_tests/macaroon_property_tests.py")))
30435 (native-inputs
30436 (list python-hypothesis
30437 python-mock
30438 python-pytest
30439 python-setuptools))
30440 (propagated-inputs (list python-pynacl))
30441 (home-page "https://github.com/ecordell/pymacaroons")
30442 (synopsis "Python Macaroon Library")
30443 (description
30444 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
30445tokens, macaroons embed caveats that define specific authorization
30446requirements for the target service, the service that issued the root macaroon
30447and which is capable of verifying the integrity of macaroons it receives.
30448
30449Macaroons allow for delegation and attenuation of authorization. They are
30450simple and fast to verify, and decouple authorization policy from the
30451enforcement of that policy.")
30452 (license license:expat)))
30453
30454(define-public python-ldap3
30455 (package
30456 (name "python-ldap3")
30457 (version "2.9.1")
30458 (home-page "https://github.com/cannatag/ldap3")
30459 (source
30460 (origin
30461 (method git-fetch)
30462 (uri (git-reference (url home-page)
30463 (commit (string-append "v" version))))
30464 (file-name (git-file-name name version))
30465 (sha256
30466 (base32 "07nxbv41wpg5567r07yvm4chgs761drsvn53gn548zi26gmrpr07"))))
30467 (build-system pyproject-build-system)
30468 (arguments
30469 (list
30470 #:tests? #f ;TODO: Tests need a real LDAP server to run
30471 #:test-backend #~'nose))
30472 (native-inputs
30473 (list python-pynose python-setuptools))
30474 (propagated-inputs
30475 (list python-gssapi python-pyasn1))
30476 (synopsis "Python LDAP client")
30477 (description
30478 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
30479library.")
30480 (license license:lgpl3+)))
30481
30482(define-public python-boltons
30483 (package
30484 (name "python-boltons")
30485 (version "25.0.0")
30486 (source
30487 (origin
30488 (method git-fetch)
30489 (uri (git-reference
30490 (url "https://github.com/mahmoud/boltons")
30491 (commit version)))
30492 (file-name (git-file-name name version))
30493 (sha256
30494 (base32 "0j061hd1iwcyz1rvasprjwwgb39x6h36n1l3dw310ig3pzbr84wh"))))
30495 (build-system pyproject-build-system)
30496 (native-inputs (list python-flit-core python-pytest python-setuptools))
30497 (home-page "https://github.com/mahmoud/boltons")
30498 (synopsis "Extensions to the Python standard library")
30499 (description
30500 "Boltons is a set of over 230 pure-Python utilities in the same spirit
30501as — and yet conspicuously missing from — the standard library, including:
30502
30503@itemize
30504@item Atomic file saving, bolted on with fileutils
30505@item A highly-optimized OrderedMultiDict, in dictutils
30506@item Two types of PriorityQueue, in queueutils
30507@item Chunked and windowed iteration, in iterutils
30508@item Recursive data structure iteration and merging, with iterutils.remap
30509@item Exponential backoff functionality, including jitter, through
30510iterutils.backoff
30511@item A full-featured TracebackInfo type, for representing stack traces, in
30512tbutils
30513@end itemize")
30514 (license license:bsd-3)))
30515
30516(define-public python-eliot
30517 (package
30518 (name "python-eliot")
30519 (version "1.17.5")
30520 (source
30521 (origin
30522 (method url-fetch)
30523 (uri (pypi-uri "eliot" version))
30524 (sha256
30525 (base32 "0rx7isb3h5fvraycfgqm781asjjmqldn0qcv6s2r5fwc1p31ffvb"))))
30526 (build-system pyproject-build-system)
30527 (arguments
30528 (list
30529 ;; tests: 407 passed, 21 skipped, 2 deselected, 5479 warnings
30530 ;; Two tests fail with error: TypeError: Unsupported type.
30531 #:test-flags #~(list "-k" "not test_basic_types and not test_dataclass")
30532 #:phases
30533 #~(modify-phases %standard-phases
30534 (add-after 'unpack 'remove-journald-support
30535 (lambda _
30536 (for-each delete-file
30537 '("eliot/tests/test_journald.py"
30538 "eliot/journald.py")))))))
30539 (native-inputs
30540 (list python-pytest
30541 python-setuptools
30542 python-testtools))
30543 (propagated-inputs
30544 (list python-boltons
30545 python-orjson
30546 python-pyrsistent
30547 python-zope-interface))
30548 (home-page "https://github.com/itamarst/eliot/")
30549 (synopsis "Eliot: the logging system that tells you why it happened")
30550 (description
30551 "@dfn{eliot} is a Python logging system that outputs causal chains of
30552actions: actions can spawn other actions, and eventually they either succeed
30553or fail. The resulting logs tell you the story of what your software did: what
30554happened, and what caused it.")
30555 (license license:asl2.0)))
30556
30557(define-public python-pem
30558 (package
30559 (name "python-pem")
30560 (version "23.1.0")
30561 (source
30562 (origin
30563 (method git-fetch)
30564 (uri (git-reference
30565 (url "https://github.com/hynek/pem")
30566 (commit version)))
30567 (file-name (git-file-name name version))
30568 (sha256
30569 (base32 "01x14j1pliyxvcx8hlwlwfchn893ddkxxpxbyqhyh6hjyag2ammd"))))
30570 (build-system pyproject-build-system)
30571 (arguments
30572 (list
30573 #:phases
30574 #~(modify-phases %standard-phases
30575 (add-after 'unpack 'set-version
30576 (lambda _
30577 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
30578 (native-inputs
30579 (list nss-certs-for-test
30580 python-certifi
30581 python-hatch-fancy-pypi-readme
30582 python-hatch-vcs
30583 python-hatchling
30584 python-pretend
30585 python-pyopenssl
30586 python-pytest
30587 python-twisted))
30588 (home-page "https://pem.readthedocs.io/")
30589 (synopsis "Easy PEM file parsing in Python")
30590 (description
30591 "This package provides a Python module for parsing and splitting PEM files.")
30592 (license license:expat)))
30593
30594(define-public python-pysaml2
30595 (package
30596 (name "python-pysaml2")
30597 (version "7.5.4")
30598 (source
30599 (origin
30600 (method git-fetch)
30601 (uri (git-reference
30602 (url "https://github.com/IdentityPython/pysaml2")
30603 (commit (string-append "v" version))))
30604 (file-name (git-file-name name version))
30605 (sha256
30606 (base32 "1vxi6kmckaj0djn79xw8f0gdd569i2y6sywsywyvyrwdcf6k8fqc"))))
30607 (build-system pyproject-build-system)
30608 (arguments
30609 (list
30610 #:test-flags
30611 #~(list "-k"
30612 (string-join
30613 ;; XXX: encryption failures
30614 (list "not test_encrypted_response_6"
30615 "test_validate_cert_chains"
30616 "test_validate_with_root_cert"
30617 ;; XXX: xml parsing error
30618 "test_namespace_processing") " and not "))
30619 #:phases
30620 #~(modify-phases %standard-phases
30621 (add-after 'unpack 'relax-requirements
30622 (lambda _
30623 (substitute* "pyproject.toml"
30624 (("\"(pyopenssl|xmlschema).*\"" _ dep)
30625 (format #f "~s" dep))))))))
30626 (native-inputs (list python-poetry-core python-pytest))
30627 (propagated-inputs
30628 (list python-cryptography
30629 python-dateutil
30630 python-defusedxml
30631 python-pymongo
30632 python-pyopenssl
30633 python-responses
30634 python-requests
30635 python-xmlschema
30636 python-xmlsec))
30637 (home-page "https://idpy.org")
30638 (synopsis "Python implementation of SAML Version 2 Standard")
30639 (description
30640 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
30641It contains all necessary pieces for building a SAML2 service provider or
30642an identity provider. The distribution contains examples of both.
30643
30644This package was originally written to work in a WSGI environment, but
30645there are extensions that allow you to use it with other frameworks.")
30646 (license license:asl2.0)))
30647
30648(define-public python-click-plugins
30649 (package
30650 (name "python-click-plugins")
30651 (version "2.0")
30652 (source
30653 (origin
30654 (method git-fetch)
30655 (uri (git-reference
30656 (url "https://github.com/click-contrib/click-plugins")
30657 (commit version)))
30658 (file-name (git-file-name name version))
30659 (sha256
30660 (base32 "1fgfb4pv9chry7jwigc5ax66njk1w0kcj75q4kz0b8bb3nh52z2i"))))
30661 (build-system pyproject-build-system)
30662 (arguments
30663 (list
30664 #:test-backend #~'custom
30665 #:test-flags #~(list "tests/click_plugins_tests.py")
30666 #:phases
30667 #~(modify-phases %standard-phases
30668 (add-before 'build 'mkdir-tests
30669 (lambda _
30670 (mkdir "tests")
30671 (rename-file "click_plugins_tests.py"
30672 (string-append "tests/click_plugins_tests.py")))))))
30673 (native-inputs (list python-pytest python-setuptools))
30674 (propagated-inputs (list python-click))
30675 (synopsis "Extension for Click to register external CLI commands")
30676 (description
30677 "This package provides n extension module for Click to register external
30678CLI commands via setuptools entry-points.")
30679 (home-page "https://github.com/click-contrib/click-plugins")
30680 (license license:bsd-3)))
30681
30682;; XXX: Upstream note: Final PyPI release to mark the project as inactive.
30683;; This PyPI package is no longer actively maintained, but the underlying
30684;; library can be vendored.
30685;;
30686;; Version 2.0 lacks packaging instructions (setup.py, setup.pkg or
30687;; pyproject.toml) and can't be used as a common input.
30688(define-public python-click-plugins-1
30689 (package
30690 (inherit python-click-plugins)
30691 (name "python-click-plugins")
30692 (version "1.1.1.2")
30693 (source
30694 (origin
30695 (method git-fetch)
30696 (uri (git-reference
30697 (url "https://github.com/click-contrib/click-plugins")
30698 (commit version)))
30699 (file-name (git-file-name name version))
30700 (sha256
30701 (base32 "11i93dxb6vvlqb79p8qdbcxvcsb2bb2b9lbkqhv5hs93nry02gxl"))))
30702 (arguments (list))))
30703
30704(define-public python-diceware
30705 (package
30706 (name "python-diceware")
30707 (version "1.0.1")
30708 (source
30709 (origin
30710 (method url-fetch)
30711 (uri (pypi-uri "diceware" version))
30712 (sha256
30713 (base32
30714 "0fb61yfqapygnpqawf3z286llkc0qfh1b3m1hlqanmhcky091djl"))))
30715 (build-system pyproject-build-system)
30716 (native-inputs
30717 (list python-pytest python-setuptools python-wheel))
30718 (home-page "https://github.com/ulif/diceware/")
30719 (synopsis "Generates memorable passphrases")
30720 (description "This package generates passphrases by concatenating words
30721randomly picked from wordlists. It supports several sources of
30722randomness (including real life dice) and different wordlists (including
30723cryptographically signed ones).")
30724 (license license:gpl3+)))
30725
30726(define-public python-dictdiffer
30727 (package
30728 (name "python-dictdiffer")
30729 (version "0.9.0")
30730 (source
30731 (origin
30732 (method git-fetch)
30733 (uri (git-reference
30734 (url "https://github.com/inveniosoftware/dictdiffer")
30735 (commit (string-append "v" version))))
30736 (file-name (git-file-name name version))
30737 (sha256
30738 (base32 "1rc5jhjxzphip43frrlplcayng2cah1bzbzv6hpxnnjhg6rqy34m"))))
30739 (build-system pyproject-build-system)
30740 (arguments
30741 (list
30742 #:phases
30743 #~(modify-phases %standard-phases
30744 (add-after 'unpack 'set-version
30745 (lambda _
30746 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
30747 (add-after 'unpack 'relax-requirements
30748 (lambda _
30749 (delete-file "pytest.ini")
30750 (substitute* "setup.py"
30751 (("'pytest-runner.*',")
30752 "'pytest',")))))))
30753 (native-inputs
30754 (list python-pytest python-setuptools python-setuptools-scm))
30755 (home-page "https://github.com/inveniosoftware/dictdiffer")
30756 (synopsis "Diff and patch Python dictionary objects")
30757 (description
30758 "Dictdiffer is a Python module that helps you to diff and patch
30759dictionaries.")
30760 (license license:expat)))
30761
30762(define-public python-osc
30763 (package
30764 (name "python-osc")
30765 (version "1.9.3")
30766 (source
30767 (origin
30768 (method git-fetch)
30769 (uri (git-reference
30770 (url "https://github.com/attwad/python-osc")
30771 (commit (string-append "v" version))))
30772 (file-name (git-file-name name version))
30773 (sha256
30774 (base32 "1d99q9ww278cjqbfdzahg17rhbkgk2rw6ixxm5z5iwnxnsrhfdwa"))))
30775 (build-system pyproject-build-system)
30776 (native-inputs (list python-setuptools))
30777 (home-page "https://github.com/attwad/python-osc")
30778 (synopsis "Open Sound Control server and client implementations")
30779 (description
30780 "@code{python-osc} is a pure Python library with no external
30781dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
30782Open Sound Control 1.0} specification.")
30783 (license license:unlicense)))
30784
30785(define-public python-cmd2
30786 (package
30787 (name "python-cmd2")
30788 (version "2.5.11")
30789 (source
30790 (origin
30791 (method url-fetch)
30792 (uri (pypi-uri "cmd2" version))
30793 (sha256
30794 (base32
30795 "0abl9aalyfbncw39d41gd3mmdgjvd7jlaa372r0lmghz0a2x781h"))))
30796 (build-system pyproject-build-system)
30797 (arguments
30798 (list #:test-flags '(list "-k" "not test_find_editor_not_specified \
30799and not test_transcript")))
30800 (propagated-inputs
30801 (list python-pyperclip python-wcwidth))
30802 (native-inputs
30803 (list python-pytest
30804 python-pytest-cov
30805 python-pytest-mock
30806 python-setuptools
30807 python-setuptools-scm
30808 python-wheel))
30809 (home-page "https://github.com/python-cmd2/cmd2")
30810 (synopsis "Tool for building interactive command line applications")
30811 (description
30812 "Cmd2 is a tool for building interactive command line applications in
30813Python. Its goal is to make it quick and easy for developers to build
30814feature-rich and user-friendly interactive command line applications. It
30815provides a simple API which is an extension of Python's built-in @code{cmd}
30816module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
30817make your life easier and eliminates much of the boilerplate code which would
30818be necessary when using @code{cmd}.")
30819 (license license:expat)))
30820
30821(define-public python-pytidylib
30822 (package
30823 (name "python-pytidylib")
30824 (version "0.3.2")
30825 (source
30826 (origin
30827 (method git-fetch)
30828 (uri (git-reference
30829 (url "https://github.com/countergram/pytidylib")
30830 (commit version)))
30831 (file-name (git-file-name name version))
30832 (sha256
30833 (base32 "0h5kx99ka47yan9xsh2pyi19mhhbixqpbqn6rgciskfr5m1csji0"))))
30834 (build-system pyproject-build-system)
30835 (arguments
30836 (list
30837 #:phases
30838 #~(modify-phases %standard-phases
30839 (add-after 'unpack 'fix-queue-import
30840 (lambda _
30841 ;; Adjust Queue import for Python 3. Remove for versions >=0.4.0.
30842 (substitute* "tests/threadsafety.py"
30843 (("from Queue import Queue")
30844 "from queue import Queue"))))
30845 (add-before 'build 'qualify-libtidy
30846 (lambda* (#:key inputs #:allow-other-keys)
30847 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
30848 (substitute* "tidylib/tidy.py"
30849 (("ctypes\\.util\\.find_library\\('tidy'\\)")
30850 (format #f "'~a'" libtidy)))))))))
30851 (native-inputs (list python-pytest python-setuptools))
30852 (inputs (list tidy-html))
30853 (home-page "https://github.com/countergram/pytidylib")
30854 (synopsis "Python wrapper for HTML Tidy library")
30855 (description
30856 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
30857allows you, from Python code, to “fix” invalid (X)HTML markup.")
30858 (license license:expat)))
30859
30860(define-public python-mujson
30861 (package
30862 (name "python-mujson")
30863 (version "1.4")
30864 (source
30865 (origin
30866 (method git-fetch)
30867 (uri (git-reference
30868 (url "https://github.com/mattgiles/mujson")
30869 (commit version)))
30870 (file-name (git-file-name name version))
30871 (sha256
30872 (base32 "1j0pcqyxpivk8nn7xx5d0pj40g22psd6v2r7l4m8b6h4hrdn9cij"))))
30873 (build-system pyproject-build-system)
30874 (arguments (list #:tests? #f)) ;No tests.
30875 (native-inputs (list python-setuptools))
30876 (home-page "https://github.com/mattgiles/mujson")
30877 (synopsis "Use the fastest JSON functions available at import time")
30878 (description
30879 "This module selects the fastest JSON functions available at import time
30880in Python.")
30881 (license license:expat)))
30882
30883(define-public python-bashlex
30884 (package
30885 (name "python-bashlex")
30886 (version "0.18")
30887 (source
30888 (origin
30889 (method git-fetch)
30890 (uri (git-reference
30891 (url "https://github.com/idank/bashlex")
30892 (commit version)))
30893 (file-name (git-file-name name version))
30894 (sha256
30895 (base32 "00idgf9153jvp0g5ajbcfgpb6ffl2a8rcy3w5n9iirgxa7vlvmkm"))))
30896 (build-system pyproject-build-system)
30897 (arguments
30898 (list
30899 #:phases
30900 #~(modify-phases %standard-phases
30901 (add-before 'build 'pregenerate-yacc-tables
30902 (lambda _
30903 ;; parser.py caches tables, which attempts to write to site lib
30904 ;; see https://github.com/idank/bashlex/issues/51
30905 (invoke "python" "-c" "import bashlex"))))))
30906 (native-inputs (list python-pytest python-setuptools))
30907 (home-page "https://github.com/idank/bashlex")
30908 (synopsis "Python parser for bash")
30909 (description
30910 "@code{bashlex} is a Python port of the parser used internally by GNU
30911bash.
30912
30913For the most part it's transliterated from C, the major differences are:
30914
30915@itemize
30916@item it does not execute anything
30917@item it is reentrant
30918@item it generates a complete AST
30919@end itemize
30920")
30921 (license license:gpl3+)))
30922
30923(define-public python-jinxed
30924 (package
30925 (name "python-jinxed")
30926 (version "1.3.0")
30927 (source
30928 (origin
30929 (method git-fetch)
30930 (uri (git-reference
30931 (url "https://github.com/Rockhopper-Technologies/jinxed")
30932 (commit version)))
30933 (file-name (git-file-name name version))
30934 (sha256
30935 (base32 "1cssqc5fvy3nx0q94ia79vhldfi0r2pq5nkagdvnkhmlnz26a3n8"))))
30936 (build-system pyproject-build-system)
30937 (arguments
30938 (list
30939 #:tests? #f ;_curses.error: setupterm: could not find terminal
30940 #:phases
30941 #~(modify-phases %standard-phases
30942 (add-before 'check 'set-environment-variables
30943 (lambda* (#:key inputs #:allow-other-keys)
30944 (setenv "TERM" "LINUX")
30945 (setenv "TERMINFO"
30946 (search-input-directory inputs "share/terminfo")))))))
30947 (native-inputs (list ncurses python-setuptools))
30948 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
30949 (synopsis "Jinxed Terminal Library")
30950 (description
30951 "Jinxed is an implementation of a subset of the Python curses library.")
30952 (license license:mpl2.0)))
30953
30954(define-public python-blessed
30955 (package
30956 (name "python-blessed")
30957 (version "1.20.0")
30958 (source
30959 (origin
30960 (method url-fetch)
30961 (uri (pypi-uri "blessed" version))
30962 (sha256
30963 (base32
30964 "103ng3ap33xs6i7606q3k6rwvjva9l7qi8j7vw08y13ffkw6gp9c"))
30965 (snippet
30966 ;; Don't get hung up on Windows test failures.
30967 '(delete-file "blessed/win_terminal.py"))))
30968 (build-system pyproject-build-system)
30969 (arguments
30970 (list
30971 ;; Avoid python-pytest-coverage
30972 #:test-flags '(list "-c /dev/null")))
30973 (propagated-inputs (list python-six python-wcwidth))
30974 (native-inputs (list python-pytest python-setuptools python-wheel))
30975 (home-page "https://github.com/jquast/blessed")
30976 (synopsis "Wrapper around terminal capabilities")
30977 (description
30978 "Blessed is a thin, practical wrapper around terminal styling, screen
30979positioning, and keyboard input.")
30980 (license license:expat)))
30981
30982(define-public python-readme-renderer
30983 (package
30984 (name "python-readme-renderer")
30985 (version "44.0")
30986 (source
30987 (origin
30988 (method url-fetch)
30989 (uri (pypi-uri "readme_renderer" version))
30990 (sha256
30991 (base32
30992 "1qfiqm3w1ydpbipns5nifa7h4wraxd72nh7imif819mzmd7064l7"))))
30993 (build-system pyproject-build-system)
30994 (arguments
30995 (list
30996 #:test-flags
30997 '(list "-k"
30998 (string-append
30999 ;; These tests fail due to slight differences in the generated
31000 ;; vs expected HTML, e.g. because of difference in whitespace or
31001 ;; line breaks. (See also
31002 ;; https://github.com/pypa/readme_renderer/issues/234).
31003 "not test_md_fixtures[test_CommonMark_008.md]"
31004 " and not test_rst_fixtures[test_rst_008.rst]"
31005 " and not GFM"))))
31006 (propagated-inputs
31007 (list python-cmarkgfm
31008 python-docutils
31009 python-nh3
31010 python-pygments))
31011 (native-inputs
31012 (list python-pytest
31013 python-setuptools
31014 python-wheel))
31015 (home-page "https://github.com/pypa/readme_renderer")
31016 (synopsis "Render README files in Warehouse")
31017 (description
31018 "Readme Renderer is a library that will safely render arbitrary README
31019files into HTML. It is designed to be used in Warehouse to render the
31020@code{long_description} for packages. It can handle Markdown,
31021reStructuredText, and plain text.")
31022 (license license:asl2.0)))
31023
31024(define-public python-lazr-delegates
31025 (package
31026 (name "python-lazr-delegates")
31027 (version "2.1.1")
31028 (source
31029 (origin
31030 (method url-fetch)
31031 (uri (pypi-uri "lazr_delegates" version))
31032 (sha256
31033 (base32 "1p02diwzn58jhpvf9m8bhb5p0xkx5gnc84mzgwr3zdsidrhv5kmf"))))
31034 (build-system pyproject-build-system)
31035 (arguments
31036 (list
31037 #:test-flags #~(list "-v" #$output)
31038 #:phases
31039 #~(modify-phases %standard-phases
31040 (add-after 'check 'check-cleanup
31041 (lambda* (#:key tests? #:allow-other-keys)
31042 (when tests?
31043 (for-each
31044 delete-file-recursively
31045 (find-files #$output
31046 (lambda (file stat)
31047 (or (member (basename file)
31048 '("tests" ".pytest_cache"))))
31049 #:directories? #t))))))))
31050 (native-inputs
31051 (list python-pytest python-setuptools python-wheel))
31052 (propagated-inputs
31053 (list python-zope-interface))
31054 (home-page "https://launchpad.net/lazr.delegates")
31055 (synopsis "Easily write objects that delegate behavior")
31056 (description
31057 "The @code{lazr.delegates} package makes it easy to write objects that
31058delegate behavior to another object. The new object adds some property or
31059behavior on to the other object, while still providing the underlying interface,
31060and delegating behavior.")
31061 (license license:lgpl3)))
31062
31063(define-public python-lazr-config
31064 (package
31065 (name "python-lazr-config")
31066 (version "3.1")
31067 (source
31068 (origin
31069 (method url-fetch)
31070 (uri (pypi-uri "lazr_config" version))
31071 (sha256
31072 (base32 "02xb4fs9rm6bf3f00qkq8pihgqvrvn2wfnvydn2vg9p73ddhcmvw"))))
31073 (build-system pyproject-build-system)
31074 (arguments
31075 (list
31076 #:test-flags #~(list "-v" #$output)
31077 #:phases
31078 #~(modify-phases %standard-phases
31079 (add-after 'check 'check-cleanup
31080 (lambda* (#:key tests? #:allow-other-keys)
31081 (when tests?
31082 (for-each
31083 delete-file-recursively
31084 (find-files #$output
31085 (lambda (file stat)
31086 (or (member (basename file)
31087 '("tests" ".pytest_cache"))))
31088 #:directories? #t))))))))
31089 (native-inputs
31090 (list python-pytest python-setuptools python-wheel))
31091 (propagated-inputs
31092 (list python-lazr-delegates python-zope-interface))
31093 (home-page "https://launchpad.net/lazr.config")
31094 (synopsis "Create configuration schemas and process and validate configurations")
31095 (description
31096 "The LAZR config system is typically used to manage process configuration.
31097Process configuration is for saying how things change when we run systems on
31098different machines, or under different circumstances. This system uses ini-like
31099file format of section, keys, and values. The config file supports inheritance
31100to minimize duplication of information across files. The format supports schema
31101validation.")
31102 (license license:lgpl3)))
31103
31104;; XXX: Not maintained since 2021, there is no git available as seen in
31105;; <https://pypi.org/project/flufl.bounce>.
31106(define-public python-flufl-bounce
31107 (package
31108 (name "python-flufl-bounce")
31109 (version "4.0")
31110 (source
31111 (origin
31112 (method url-fetch)
31113 (uri (pypi-uri "flufl.bounce" version))
31114 (sha256
31115 (base32
31116 "0c9qc2l47lyqnpwskp6vvi7m3jqh6hx42v6d35dgxh3fjzmlll15"))))
31117 (build-system pyproject-build-system)
31118 (arguments
31119 (list #:phases
31120 #~(modify-phases %standard-phases
31121 (replace 'check
31122 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
31123 (when tests?
31124 (with-directory-excursion
31125 (string-append (site-packages inputs outputs) "/flufl")
31126 (invoke "python" "-m" "nose2" "-v"))))))))
31127 (propagated-inputs
31128 (list python-atpublic python-zope-interface))
31129 (native-inputs
31130 (list python-flufl-testing python-nose2 python-setuptools))
31131 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
31132 (synopsis "Email bounce detectors")
31133 (description "The @code{flufl.bounce} library provides a set of heuristics
31134and an API for detecting the original bouncing email addresses from a bounce
31135message. Many formats found in the wild are supported, as are VERP and
31136RFC 3464.")
31137 (license (list license:asl2.0
31138 license:lgpl3)))) ; only for setup_headers.py
31139
31140(define-public python-flufl-i18n
31141 (package
31142 (name "python-flufl-i18n")
31143 (version "5.1.0")
31144 (source
31145 (origin
31146 (method url-fetch)
31147 (uri (pypi-uri "flufl_i18n" version))
31148 (sha256
31149 (base32
31150 "0bm4kmi04gm164y5nmadmrg79y1l1cs9iwxcv9y7gq0dgyr20xms"))))
31151 (build-system pyproject-build-system)
31152 (arguments
31153 (list #:test-flags
31154 #~(list "--no-cov" "--ignore-glob=docs/*")
31155 #:phases
31156 #~(modify-phases %standard-phases
31157 ;; This phase add a symlink of dist-info dir for packages
31158 ;; expecting flufl.i18n rather than flufl_i18n (mailman).
31159 (add-after 'install 'add-custom-dist-info
31160 (lambda _
31161 (for-each
31162 (lambda (dir)
31163 (with-directory-excursion (dirname dir)
31164 (let ((base (basename dir)))
31165 (symlink base
31166 (string-join (string-split base #\_) ".")))))
31167 (find-files #$output
31168 (lambda (file stat)
31169 (string-suffix? ".dist-info" file))
31170 #:directories? #t)))))))
31171 (propagated-inputs
31172 (list python-atpublic))
31173 (native-inputs
31174 (list python-hatchling
31175 python-pytest
31176 python-pytest-cov
31177 python-sybil))
31178 (home-page "https://flufli18n.readthedocs.io")
31179 (synopsis "API for Python internationalization")
31180 (description
31181 "This package provides a high-level, convenient API for managing
31182internationalization/translation contexts in Python applications. There is a
31183simple API for single-context applications, such as command line scripts which
31184only need to translate into one language during the entire course of their
31185execution. There is a more flexible, but still convenient API for multi-context
31186applications, such as servers, which may need to switch language contexts for
31187different tasks.")
31188 (license license:asl2.0)))
31189
31190(define-public python-flufl-lock
31191 (package
31192 (name "python-flufl-lock")
31193 (version "8.1.0")
31194 (source
31195 (origin
31196 (method url-fetch)
31197 (uri (pypi-uri "flufl.lock" version))
31198 (sha256
31199 (base32 "1jz7vipjga4x803gfsb9mvnfb6q8my7ib000nsc3v9ljaq0050yq"))))
31200 (build-system pyproject-build-system)
31201 (arguments
31202 (list #:test-flags
31203 #~(list "--no-cov" "--ignore-glob=docs/*")
31204 #:phases
31205 #~(modify-phases %standard-phases
31206 ;; This phase add a symlink of dist-info dir for packages
31207 ;; expecting flufl.lock rather than flufl_lock (mailman).
31208 (add-after 'install 'add-custom-dist-info
31209 (lambda _
31210 (for-each
31211 (lambda (dir)
31212 (with-directory-excursion (dirname dir)
31213 (let ((base (basename dir)))
31214 (symlink base
31215 (string-join (string-split base #\_) ".")))))
31216 (find-files #$output
31217 (lambda (file stat)
31218 (string-suffix? ".dist-info" file))
31219 #:directories? #t)))))))
31220 (native-inputs
31221 (list python-hatchling
31222 python-pytest
31223 python-pytest-cov
31224 python-sybil))
31225 (propagated-inputs
31226 (list python-atpublic python-psutil))
31227 (home-page "https://flufllock.readthedocs.io")
31228 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
31229 (description
31230 "The @dfn{flufl.lock} package provides NFS-safe file locking with
31231timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
31232@code{open} system call but uses a lockfile. Lock objects support lock-breaking
31233and have a maximum lifetime built-in.")
31234 (license (list license:asl2.0
31235 license:lgpl3)))) ; only for setup_helpers.py
31236
31237(define-public python-flufl-testing
31238 (package
31239 (name "python-flufl-testing")
31240 (version "0.8")
31241 (source
31242 (origin
31243 (method git-fetch)
31244 (uri (git-reference
31245 (url "https://gitlab.com/warsaw/flufl.testing")
31246 (commit version)))
31247 (file-name (git-file-name name version))
31248 (sha256
31249 (base32 "0dl2dl4wdrqklkhqcdbwchpqrpm6lwic4qk961zi6b2f8agis35i"))))
31250 (build-system pyproject-build-system)
31251 (arguments (list #:tests? #f)) ;no tests
31252 (native-inputs (list python-setuptools))
31253 (home-page "https://gitlab.com/warsaw/flufl.testing")
31254 (synopsis "Collection of test tool plugins")
31255 (description
31256 "This package contains a small collection of test tool plugins for
31257@code{nose2} and @code{flake8}.")
31258 (license license:asl2.0)))
31259
31260(define-public python-devtools
31261 (package
31262 (name "python-devtools")
31263 (version "0.12.2")
31264 (source
31265 (origin
31266 (method git-fetch)
31267 (uri (git-reference
31268 (url "https://github.com/samuelcolvin/python-devtools")
31269 (commit (string-append "v" version))))
31270 (file-name (git-file-name name version))
31271 (sha256
31272 (base32 "0snmx7f0s44rzzx8advzmgj5av9dlpz1kx05f7ysya8xrhv5nwfl"))))
31273 (build-system pyproject-build-system)
31274 (arguments
31275 (list
31276 #:test-flags
31277 ;; Disable some failing tests.
31278 ;;
31279 ;; test_print_subprocess seems to inherit wrong environment, fails with
31280 ;; E + ModuleNotFoundError: No module named 'executing'
31281 ;; Test runs fine from local clone.
31282 ;;
31283 ;; test_executing_failure fails with
31284 ;; E - [1, 2] (list) len=2
31285 ;; E + [x, y]: [1, 2] (list) len=2
31286 ;; unclear why, probably due to a dependency.
31287 '(list "-k" "not test_print_subprocess and not test_executing_failure"
31288 ;; test_insert_assert.py also seems to inherit a bad environment:
31289 ;; E fixture 'pytester_pretty' not found
31290 ;; Test runs fine from local clone.
31291 "--ignore=tests/test_insert_assert.py")))
31292 (native-inputs
31293 (list python-hatchling python-pytest python-pytest-mock))
31294 (propagated-inputs
31295 (list python-asttokens python-executing python-pygments))
31296 (home-page "https://github.com/samuelcolvin/python-devtools")
31297 (synopsis "Debug command and development tools")
31298 (description
31299 "This package provides a debug print command and other development tools.
31300It adds a simple and readable way to print stuff during development.")
31301 (license license:expat)))
31302
31303(define-public python-dateparser
31304 (package
31305 (name "python-dateparser")
31306 (version "1.2.2")
31307 (source
31308 (origin
31309 (method url-fetch)
31310 (uri (pypi-uri "dateparser" version))
31311 (sha256
31312 (base32
31313 "1xzcqmvqg82cq4vx3cbgbdrgq4pgqlkk0mnfm0zc5kdqgkqicqwq"))))
31314 (build-system pyproject-build-system)
31315 (arguments
31316 (list
31317 #:test-flags
31318 #~(cons* "-k" "not test_relative_base_setting_2_en"
31319 (map
31320 (lambda (name)
31321 (string-append "--ignore=tests/" name ".py"))
31322 '("test_dateparser_data_integrity"
31323 "test_hijri"
31324 "test_jalali"
31325 "test_language_detect")))
31326 #:phases
31327 #~(modify-phases %standard-phases
31328 (add-before 'check 'set-check-environment
31329 (lambda* (#:key inputs #:allow-other-keys)
31330 (setenv "TZ" "UTC")
31331 (setenv "TZDIR"
31332 (search-input-directory inputs
31333 "share/zoneinfo")))))))
31334 (propagated-inputs
31335 (list python-dateutil
31336 python-pytz
31337 python-regex
31338 python-ruamel.yaml
31339 python-tzlocal))
31340 (native-inputs
31341 (list python-parameterized
31342 python-pytest
31343 python-setuptools
31344 tzdata-for-tests))
31345 (home-page "https://github.com/scrapinghub/dateparser")
31346 (synopsis
31347 "Date parsing library designed to parse dates from HTML pages")
31348 (description
31349 "@code{python-dateparser} provides modules to easily parse localized
31350dates in almost any string formats commonly found on web pages.")
31351 (license license:bsd-3)))
31352
31353(define-public python-dparse
31354 (package
31355 (name "python-dparse")
31356 (version "0.6.4")
31357 (source
31358 (origin
31359 (method url-fetch)
31360 (uri (pypi-uri "dparse" version))
31361 (sha256
31362 (base32 "06i069hij4i53hikrsv332h2ibwfchr42b68hii6rhzdwcwrrclh"))))
31363 (build-system pyproject-build-system)
31364 (native-inputs (list python-hatchling python-pytest))
31365 (propagated-inputs (list python-packaging python-toml))
31366 (home-page "https://github.com/pyupio/dparse")
31367 (synopsis "Parser for Python dependency files")
31368 (description "This package provides a parser for Python dependency files.")
31369 (license license:expat)))
31370
31371(define-public python-dpath
31372 (package
31373 (name "python-dpath")
31374 (version "2.2.0")
31375 (source
31376 (origin
31377 (method url-fetch)
31378 (uri (pypi-uri "dpath" version))
31379 (sha256
31380 (base32
31381 "0gkavmc44f9cj3kch68343r2ajsbvbsjcmsmkqhkzsjmvhqfdxrl"))))
31382 (build-system pyproject-build-system)
31383 (native-inputs
31384 (list python-hypothesis python-nose2 python-setuptools python-wheel))
31385 (home-page "https://github.com/akesterson/dpath-python")
31386 (synopsis "File-system-like pathing and searching for dictionaries")
31387 (description
31388 "@code{python-dpath} is a library for accessing and searching
31389dictionaries via /slashed/paths ala xpath.
31390
31391Basically it lets you glob over a dictionary as if it were a file system. It
31392allows you to specify globs (ala the bash eglob syntax, through some advanced
31393fnmatch.fnmatch magic) to access dictionary elements, and provides some
31394facility for filtering those results.")
31395 (license license:expat)))
31396
31397(define-public python-safety
31398 (package
31399 (name "python-safety")
31400 (version "3.6.2")
31401 (source
31402 (origin
31403 (method url-fetch)
31404 (uri (pypi-uri "safety" version))
31405 (sha256
31406 (base32 "1gijl0ip1fm1z91p05iqcngcpad3nnvpha0l5iykhbmdlkcqq51f"))))
31407 (build-system pyproject-build-system)
31408 (arguments
31409 (list
31410 #:test-flags
31411 #~(list "-k" (string-join
31412 ;; test_announcements fails with AssertionError.
31413 (list "not test_announcements_if_is_not_tty"
31414 ;; Tests below need a network connection.
31415 "test_check_live"
31416 "test_check_live_cached"
31417 "test_get_packages_licenses_without_api_key"
31418 ;; AttributeError: 'PackageInstalledPayload' object
31419 ;; has no attribute 'tool_path'
31420 "test_emit_diff_operations_with_multiple_operations"
31421 "test_emit_diff_operations_with_empty_locations"
31422 "test_emit_diff_operations_with_different_tools"
31423 "test_emit_diff_operations_creates_correct_payload_structure")
31424 " and not "))
31425 #:phases #~(modify-phases %standard-phases
31426 (add-after 'unpack 'disable-telemetry
31427 (lambda _
31428 (substitute* (find-files "." "\\.py$")
31429 (("telemetry: bool = True")
31430 "telemetry: bool = False")
31431 (("telemetry=True")
31432 "telemetry=False"))))
31433 (add-before 'check 'set-home ; some tests run mkdir
31434 (lambda _
31435 (setenv "HOME" "/tmp"))))))
31436 (native-inputs (list nss-certs-for-test python-hatchling python-pytest))
31437 (propagated-inputs (list python-authlib
31438 python-click
31439 python-dparse
31440 python-filelock
31441 python-httpx
31442 python-jinja2
31443 python-marshmallow
31444 python-nltk
31445 python-packaging
31446 python-psutil
31447 python-pydantic
31448 python-requests
31449 python-ruamel.yaml
31450 python-safety-schemas
31451 python-tenacity
31452 python-tomli
31453 python-tomlkit
31454 python-typer
31455 python-typing-extensions))
31456 (home-page "https://github.com/pyupio/safety")
31457 (synopsis "Check installed dependencies for known vulnerabilities")
31458 (description
31459 "Safety checks installed dependencies for known vulnerabilities.
31460By default it uses the open Python vulnerability database Safety DB.")
31461 (license license:expat)))
31462
31463(define-public python-pypandoc
31464 (package
31465 (name "python-pypandoc")
31466 (version "1.15")
31467 (source
31468 (origin
31469 (method git-fetch)
31470 (uri (git-reference
31471 (url "https://github.com/JessicaTegner/pypandoc")
31472 (commit (string-append "v" version))))
31473 (file-name (git-file-name name version))
31474 (sha256
31475 (base32 "0jqr380xpg1n93dagxv7zfakhdravw0nc81rc4pnmjzkj360l5nr"))))
31476 (build-system pyproject-build-system)
31477 (arguments
31478 (list
31479 #:test-backend #~'unittest
31480 #:phases
31481 #~(modify-phases %standard-phases
31482 (add-before 'check 'disable-tests
31483 (lambda _
31484 (substitute* "tests.py"
31485 ;; Disable test requiring network access
31486 (("test_basic_conversion_from_http_url")
31487 "skip_test_basic_conversion_from_http_url")
31488 ;; Disable tests with missing files
31489 (("test_basic_conversion_from_file_pattern")
31490 "skip_test_basic_conversion_from_file_pattern")
31491 (("test_conversion_with_data_files")
31492 "skip_test_conversion_with_data_files")))))))
31493 ;; Ideally, we would supersede texlive-xpatch with texlive-regexpatch once
31494 ;; the missing etoolbox.sty file is added
31495 (native-inputs
31496 (list (texlive-local-tree
31497 (list texlive-etoolbox
31498 texlive-lm
31499 texlive-regexpatch
31500 texlive-xcolor))
31501 python-pip
31502 python-poetry-core
31503 python-setuptools))
31504 (inputs (list pandoc python-pandocfilters))
31505 (propagated-inputs (list python-wheel))
31506 (home-page "https://github.com/JessicaTegner/pypandoc")
31507 (synopsis "Python wrapper for pandoc")
31508 (description
31509 "pypandoc is a thin Python wrapper around pandoc and pandoc-citeproc.")
31510 (license license:expat)))
31511
31512(define-public python-rnc2rng
31513 (package
31514 (name "python-rnc2rng")
31515 (version "2.7.0")
31516 (source
31517 (origin
31518 (method git-fetch)
31519 (uri (git-reference
31520 (url "https://github.com/djc/rnc2rng")
31521 (commit version)))
31522 (file-name (git-file-name name version))
31523 (sha256
31524 (base32 "1wbd8936vs4rinjfmjd8dav6sdz6wrsc0jppqidzzcnzwfp146pf"))))
31525 (build-system pyproject-build-system)
31526 (arguments
31527 (list
31528 #:test-backend #~'custom
31529 #:test-flags #~(list "test.py")))
31530 (native-inputs (list python-setuptools))
31531 (propagated-inputs (list python-rply))
31532 (home-page "https://github.com/djc/rnc2rng")
31533 (synopsis "Convert RELAX NG Compact to regular syntax")
31534 (description
31535 "This package provides the @command{rnc2rng} command-line tool as well as
31536a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
31537equivalent schemata in the XML-based default RELAX NG syntax.")
31538 (license license:expat)))
31539
31540(define-public python-citeproc-py
31541 (package
31542 (name "python-citeproc-py")
31543 (version "0.9.0")
31544 (source
31545 (origin
31546 (method git-fetch)
31547 (uri (git-reference
31548 (url "https://github.com/brechtm/citeproc-py")
31549 (commit (string-append "v" version))
31550 (recursive? #t))) ; TODO Unbundle.
31551 (file-name (git-file-name name version))
31552 (sha256
31553 (base32 "0wn1mfn7r4ffbmh529baqa4a798xwa34z0ij1jkmzal9i1na1i61"))))
31554 (build-system pyproject-build-system)
31555 (arguments
31556 (list
31557 #:phases
31558 #~(modify-phases %standard-phases
31559 (add-after 'unpack 'set-version
31560 (lambda _
31561 (delete-file "citeproc/_version.py")
31562 (substitute* "citeproc/__init__.py"
31563 (("from \\. import version")
31564 "")
31565 (("__version__ =.*")
31566 (format #f "__version__ = ~s" #$version))))))))
31567 (native-inputs (list python-pytest python-setuptools))
31568 (propagated-inputs (list python-lxml python-rnc2rng))
31569 (home-page "https://github.com/brechtm/citeproc-py")
31570 (synopsis "Citations and bibliography formatter")
31571 (description
31572 "Citeproc-py is a CSL processor for Python. It aims to implement the
31573CSL 1.0.1 specification. citeproc-py can output styled citations and
31574bibliographies in a number of different output formats. Currently supported
31575are plain text, reStructuredText and HTML.")
31576 (license license:bsd-2)))
31577
31578(define-public python-inform
31579 (package
31580 (name "python-inform")
31581 (version "1.34")
31582 (source
31583 (origin
31584 (method git-fetch) ; no tests in PyPI release
31585 (uri (git-reference
31586 (url "https://github.com/kenkundert/inform")
31587 (commit (string-append "v" version))))
31588 (file-name (git-file-name name version))
31589 (sha256
31590 (base32 "19ck1x8jplgq1lsy8cdv6hsygdbx310k92w4mkzl40bh4h49m1mk"))))
31591 (build-system pyproject-build-system)
31592 (arguments
31593 (list
31594 #:test-flags #~(list "-k" (string-append
31595 ;; Test below needs the num2words package
31596 "not test_plural_words"
31597 ;; These last two failed with AssertionError
31598 " and not test_inform"
31599 " and not test_manual"))))
31600 (native-inputs
31601 (list python-flit-core python-pytest))
31602 (propagated-inputs
31603 (list python-arrow))
31604 (home-page "https://inform.readthedocs.io")
31605 (synopsis "Print & logging utilities for communicating with user")
31606 (description
31607 "Inform is designed to display messages from programs that are typically run from
31608a console. It provides a collection of ‘print’ functions that allow you to simply and
31609cleanly print different types of messages.")
31610 (license license:gpl3+)))
31611
31612(define-public python-nestedtext
31613 (package
31614 (name "python-nestedtext")
31615 (version "3.7")
31616 (source
31617 (origin
31618 (method git-fetch) ; no tests in PyPI release
31619 (uri (git-reference
31620 (url "https://github.com/KenKundert/nestedtext")
31621 (commit (string-append "v" version))))
31622 (file-name (git-file-name name version))
31623 (sha256
31624 (base32 "0yqarfv6jzl41i44mjn0g4c87g47j819py6gbsfi3fdk96c95nll"))))
31625 (build-system pyproject-build-system)
31626 (arguments
31627 (list
31628 ;; XXX: Tests below need some not yet packaged Python libraries.
31629 #:test-flags #~(list "--ignore" "examples/"
31630 "--ignore" "tests/test_nestedtext.py"
31631 "-k" (string-append
31632 "not techniques.rst"
31633 " and not nestedtext.nestedtext.dumps"))))
31634 (native-inputs (list python-flit-core python-pytest))
31635 (propagated-inputs
31636 (list python-inform))
31637 (home-page "https://nestedtext.org")
31638 (synopsis "Human readable and writable data interchange format")
31639 (description
31640 "NestedText is a file format for holding data that is to be entered, edited, or
31641viewed by people. It allows data to be organized into a nested collection of
31642dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
31643without the complexity and risk of YAML and without the syntactic clutter of JSON.
31644NestedText is both simple and natural. Only a small number of concepts and rules must
31645be kept in mind when creating it. It is easily created, modified, or viewed with
31646a text editor and easily understood and used by both programmers and non-programmers.")
31647 (license license:expat))) ; MIT license
31648
31649(define-public python-nest-asyncio
31650 (package
31651 (name "python-nest-asyncio")
31652 (version "1.6.0")
31653 (source
31654 (origin
31655 (method url-fetch)
31656 (uri (pypi-uri "nest_asyncio" version))
31657 (sha256
31658 (base32
31659 "1zjmxk7rgadgiking9jksncca0hywgs52s34dkymm8dc95a2s5vg"))))
31660 (build-system pyproject-build-system)
31661 (native-inputs
31662 (list python-pytest python-setuptools))
31663 (home-page "https://github.com/erdewit/nest_asyncio")
31664 (synopsis "Patch asyncio to allow nested event loops")
31665 (description
31666 "By design @code{asyncio} does not allow its event loop to be nested.
31667This presents a practical problem: when in an environment where the event loop
31668is already running it's impossible to run tasks and wait for the result. This
31669module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
31670@code{loop.run_until_complete}.")
31671 (license license:bsd-3)))
31672
31673(define-public python-simpervisor
31674 (package
31675 (name "python-simpervisor")
31676 (version "1.0.0")
31677 (source
31678 (origin
31679 ;; Tests not included in release.
31680 (method git-fetch)
31681 (uri (git-reference
31682 (url "https://github.com/yuvipanda/simpervisor")
31683 (commit (string-append "v" version))))
31684 (file-name (git-file-name name version))
31685 (sha256
31686 (base32 "0drvqxbr6fpydb4d7z5dhn97d578gf39sd8cawyl6ksf1f4y8yzg"))))
31687 (build-system pyproject-build-system)
31688 (arguments
31689 ;; See <https://github.com/jupyterhub/simpervisor/issues/57>
31690 (list #:test-flags #~(list "--deselect=tests/test_ready.py::test_ready")))
31691 (native-inputs
31692 (list python-aiohttp
31693 python-hatchling
31694 python-psutil
31695 python-pytest
31696 python-pytest-asyncio))
31697 (home-page "https://github.com/yuvipanda/simpervisor")
31698 (synopsis "Simple async process supervisor")
31699 (description
31700 "This package provides a simple async process supervisor in Python.")
31701 (license license:bsd-3)))
31702
31703(define-public python-parallel
31704 (package
31705 (name "python-parallel")
31706 (version "1.6.4.4")
31707 (source
31708 (origin
31709 (method url-fetch)
31710 (uri (string-append "https://www.parallelpython.com/downloads/pp/pp-"
31711 version ".zip"))
31712 (sha256
31713 (base32 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
31714 (build-system pyproject-build-system)
31715 (arguments (list #:tests? #f)) ;No test suite.
31716 (native-inputs (list python-setuptools unzip))
31717 (propagated-inputs (list python-six))
31718 (home-page "https://www.parallelpython.com")
31719 (synopsis "Parallel and distributed programming for Python")
31720 (description
31721 "Parallel Python module (PP) provides an easy and efficient way to create
31722parallel-enabled applications for SMP computers and clusters. PP module
31723features cross-platform portability and dynamic load balancing. Thus
31724applications written with PP will parallelize efficiently even on
31725heterogeneous and multi-platform clusters (including clusters running other
31726applications with variable CPU loads).")
31727 (license license:bsd-3)))
31728
31729(define-public python-param
31730 (package
31731 (name "python-param")
31732 (version "2.1.0")
31733 (source
31734 (origin
31735 (method url-fetch)
31736 (uri (pypi-uri "param" version))
31737 (sha256
31738 (base32 "07z7az7xg8pzjrmaf928is7n6siw9v9nxfmf0a5vgqj7nl40pcx7"))))
31739 (build-system pyproject-build-system)
31740 (native-inputs
31741 (list python-cloudpickle
31742 python-hatchling
31743 python-hatch-vcs
31744 python-ipython
31745 python-jsonschema
31746 python-nbval
31747 python-nest-asyncio
31748 python-numpy
31749 python-odfpy
31750 python-openpyxl
31751 python-pandas
31752 python-pyarrow
31753 python-pytest
31754 python-pytest-asyncio
31755 python-pytest-xdist
31756 python-tables
31757 python-xlrd))
31758 (home-page "https://param.holoviz.org/")
31759 (synopsis
31760 "Make your Python code clearer and more reliable by declaring Parameters")
31761 (description
31762 "Param is a library for handling all the user-modifiable parameters,
31763arguments, and attributes that control your code. It provides automatic,
31764robust error-checking while dramatically reducing boilerplate code, letting
31765you focus on what you want your code to do rather than on checking for all the
31766possible ways users could supply inappropriate values to a function or
31767class.")
31768 (license license:bsd-3)))
31769
31770(define-public python-djitellopy
31771 (package
31772 (name "python-djitellopy")
31773 (version "2.5.0")
31774 (source
31775 (origin
31776 (method url-fetch)
31777 (uri (pypi-uri "djitellopy" version))
31778 (sha256
31779 (base32 "1kc0syb4hpn7fay0rxpazmczag6jw3pncrrc6v762jj0afiwkrps"))))
31780 (build-system pyproject-build-system)
31781 (arguments
31782 (list
31783 #:tests? #f ;no test suite
31784 #:phases
31785 #~(modify-phases %standard-phases
31786 ;; OpenCV does not ship metadata files for its Python library, which
31787 ;; makes it invisible to the sanity_check script (see:
31788 ;; https://github.com/opencv/opencv/issues/24810).
31789 (delete 'sanity-check))))
31790 (propagated-inputs
31791 (list opencv ;for opencv-python
31792 python-av
31793 python-numpy
31794 python-pillow))
31795 (native-inputs (list python-setuptools python-wheel))
31796 (home-page "https://github.com/damiafuentes/DJITelloPy")
31797 (synopsis
31798 "DJI Tello drone video streaming, swarms and state packets library")
31799 (description
31800 "DJI Tello drone Python interface using the official Tello SDK and Tello
31801EDU SDK. This library has the following features:
31802@itemize
31803@item Implementation of all tello commands
31804@item Retrieve a video stream easily
31805@item Receive and parse state packets
31806@item Control a swarm of drones.
31807@end itemize")
31808 (license license:expat)))
31809
31810(define-public python-djvulibre
31811 ;; The original git repository of python-djvulibre is hosted at
31812 ;; <https://jwilk.net/software/python-djvulibre>. However, that repository
31813 ;; has been archived by its owner in 2022. The most active fork is
31814 ;; <https://github.com/FriedrichFroebel/python-djvulibre>, and that is the
31815 ;; version packaged here (its "python3" branch, the default).
31816 ;;
31817 ;; However, the python-djvulibre PyPI project still refers to the old
31818 ;; repository. The new repository is published as djvulibre-python on PyPI;
31819 ;; that is, with the name in reversed order.The original package name is
31820 ;; used in Guix because it best adheres to the Guix naming scheme.
31821 (package
31822 (name "python-djvulibre")
31823 (version "0.9.3")
31824 (source
31825 (origin
31826 (method git-fetch)
31827 (uri (git-reference
31828 (url "https://github.com/FriedrichFroebel/python-djvulibre")
31829 (commit version)))
31830 (file-name (git-file-name name version))
31831 (sha256
31832 (base32 "0cwda210dgkqyjkwha2if80wfmv6w8baigp8kdcwhmbisfgd3l4y"))))
31833 (build-system pyproject-build-system)
31834 (arguments
31835 (list
31836 #:phases
31837 #~(modify-phases %standard-phases
31838 (replace 'check
31839 (lambda* (#:key tests? #:allow-other-keys)
31840 (when tests?
31841 ;; The tests get confused by the djvu directory.
31842 (delete-file-recursively "djvu")
31843 ;; Tests can't find tools.py otherwise.
31844 (with-directory-excursion "tests"
31845 (invoke "python" "-m" "pytest"))))))))
31846 (native-inputs
31847 (list ghostscript
31848 pkg-config
31849 python-cython
31850 python-pytest
31851 python-setuptools))
31852 (inputs
31853 (list djvulibre))
31854 (synopsis "Python bindings for DjVuLibre")
31855 (description "This is a set of Python bindings for the DjVuLibre library.")
31856 (home-page "https://github.com/FriedrichFroebel/python-djvulibre")
31857 (license license:gpl2)))
31858
31859(define-public python-gamera
31860 (package
31861 (name "python-gamera")
31862 (version "4.1.0")
31863 (source
31864 (origin
31865 (method git-fetch)
31866 (uri (git-reference
31867 (url "https://github.com/hsnr-gamera/gamera-4")
31868 (commit (string-append "v" version))))
31869 (file-name (git-file-name name version))
31870 (sha256
31871 (base32 "0l3w3wvi1ina6r3adc4wikz47wai8cjci0i5k8dxqv8p629dihrn"))))
31872 (build-system pyproject-build-system)
31873 (arguments
31874 (list
31875 #:phases
31876 #~(modify-phases %standard-phases
31877 (add-after 'unpack 'fix-build
31878 (lambda _
31879 ;; The script to make daily build artifacts fails to compile,
31880 ;; but users don't need that, so ignore it.
31881 (delete-file "misc/daily_build.py")
31882 ;; Prepare tests
31883 (mkdir-p "tmp")
31884 (setenv "HOME" (string-append (getcwd) "/tmp")))))))
31885 (native-inputs (list python-docutils python-pytest python-setuptools))
31886 (inputs (list libpng libtiff zlib))
31887 (synopsis "Framework for building document analysis applications")
31888 (description
31889 "Gamera is a toolkit for building document image recognition systems.")
31890 (home-page "https://gamera.informatik.hsnr.de/")
31891 (license license:gpl2+)))
31892
31893(define-public python-aiofiles
31894 (package
31895 (name "python-aiofiles")
31896 (version "24.1.0")
31897 (source
31898 (origin
31899 (method url-fetch)
31900 (uri (pypi-uri "aiofiles" version))
31901 (sha256
31902 (base32 "0v0namryb6acj9bkic5rcgbnb36njj601ws85q60z0d3wp4pb812"))))
31903 (build-system pyproject-build-system)
31904 (native-inputs
31905 (list python-hatch-vcs
31906 python-hatchling
31907 python-pytest
31908 python-pytest-asyncio))
31909 (home-page "https://github.com/Tinche/aiofiles")
31910 (synopsis "File support for @code{asyncio}")
31911 (description
31912 "@code{python-aiofiles} is a library for handling local disk files in
31913asyncio applications.")
31914 (license license:asl2.0)))
31915
31916(define-public python-pyre-extensions
31917 (package
31918 (name "python-pyre-extensions")
31919 (version "0.0.32")
31920 (source
31921 (origin
31922 (method url-fetch)
31923 (uri (pypi-uri "pyre_extensions" version))
31924 (sha256
31925 (base32
31926 "0mayv07djjnysznhjnchix3alkz4lxycb20azpaw8mpa2igp35jk"))))
31927 (build-system pyproject-build-system)
31928 (native-inputs (list python-pytest python-setuptools python-wheel))
31929 (propagated-inputs
31930 (list python-typing-extensions python-typing-inspect))
31931 (home-page "https://pyre-check.org")
31932 (synopsis
31933 "Type system extensions for use with @code{python-pyre}")
31934 (description
31935 "@code{python-pyre-extensions} defines extensions to the standard
31936@code{typing} module that are supported by the Pyre typechecker.")
31937 (license license:expat)))
31938
31939(define-public python-pywatchman
31940 (package
31941 (name "python-pywatchman")
31942 (version "3.0.0")
31943 (source
31944 (origin
31945 (method url-fetch)
31946 (uri (pypi-uri "pywatchman" version))
31947 (sha256
31948 (base32 "07lix9z2ib7g4h648wsbp930x5i03akis12mih8p4n0s74bjmlzg"))))
31949 (build-system pyproject-build-system)
31950 (arguments
31951 (list
31952 #:test-backend #~'custom
31953 #:test-flags #~(list "tests/tests.py")))
31954 (native-inputs (list python-setuptools))
31955 (home-page "https://facebook.github.io/watchman/")
31956 (synopsis "Watchman client for python")
31957 (description
31958 "@code{python-pywatchman} is a library to connect and query Watchman to
31959discover file changes.")
31960 (license license:bsd-3)))
31961
31962(define-public python-roundrobin
31963 (package
31964 (name "python-roundrobin")
31965 (version "0.0.4")
31966 (source
31967 (origin
31968 (method git-fetch)
31969 (uri (git-reference
31970 (url "https://github.com/linnik/roundrobin")
31971 (commit version)))
31972 (file-name (git-file-name name version))
31973 (sha256
31974 (base32 "0hdgwavrfj23c61142mnlxz5sd9ayp6svbgj2g4wdpiqy7h49rvr"))))
31975 (build-system pyproject-build-system)
31976 (arguments
31977 (list #:test-backend #~'unittest))
31978 (native-inputs (list python-setuptools))
31979 (home-page "https://github.com/linnik/roundrobin")
31980 (synopsis "Collection of roundrobin utilities")
31981 (description
31982 "This package provides a collection of utilities for round-robin
31983distribution in Python.")
31984 (license license:expat)))
31985
31986(define-public python-helpdev
31987 (package
31988 (name "python-helpdev")
31989 (version "0.7.1")
31990 (source
31991 (origin
31992 (method git-fetch)
31993 (uri (git-reference
31994 (url "https://gitlab.com/dpizetta/helpdev")
31995 (commit (string-append "v" version))))
31996 (file-name (git-file-name name version))
31997 (sha256
31998 (base32 "0mzf0sdgxzn3x56qxgi6kbsx3cydl8h0bdpyn4xyfkw6pyi9g2bd"))))
31999 (build-system pyproject-build-system)
32000 (native-inputs (list python-pip python-pytest python-setuptools))
32001 (home-page "https://gitlab.com/dpizetta/helpdev")
32002 (synopsis "Extract information about the Python environment easily")
32003 (description
32004 "Helpdev is a library to easily extract information about the Python
32005environment.")
32006 (license license:expat)))
32007
32008(define-public python-logutils
32009 (package
32010 (name "python-logutils")
32011 (version "0.3.5")
32012 (source
32013 (origin
32014 (method url-fetch)
32015 (uri (pypi-uri "logutils" version))
32016 (sha256
32017 (base32
32018 "10lsi5wv5ysnvf9ya4ncbix6mmipnv5067sf2cglc2f2sljql1dw"))))
32019 (build-system pyproject-build-system)
32020 (arguments
32021 (list
32022 #:test-flags
32023 ;; XXX: Unclear why this test fails.
32024 #~(list "--deselect=tests/test_adapter.py::AdapterTest::test_hashandlers"
32025 "--ignore=tests/test_redis.py")))
32026 (native-inputs (list python-pytest python-setuptools))
32027 (home-page "https://bitbucket.org/vinay.sajip/logutils/")
32028 (synopsis "Logging utilities")
32029 (description "This package provides a set of handlers for the Python
32030standard library logging package. Some of these handlers are out-of-scope
32031for the standard library, and so they are packaged here. Others are updated
32032versions which have appeared in recent Python releases, but are usable with
32033older versions of Python and so are packaged here.")
32034 (license license:bsd-3)))
32035
32036(define-public python-loguru
32037 (package
32038 (name "python-loguru")
32039 (version "0.7.2")
32040 (source
32041 (origin
32042 (method url-fetch)
32043 (uri (pypi-uri "loguru" version))
32044 (sha256
32045 (base32 "1b2ipp8di3y10gd7kiin9fyazv5rijbfwh3383yk8psi48ssawg6"))))
32046 (build-system pyproject-build-system)
32047 (arguments
32048 (list
32049 #:test-flags
32050 #~(list"--numprocesses" (number->string (parallel-job-count))
32051 ;; All of these fail with: error: Cannot find implementation or
32052 ;; library stub for module named "loguru"
32053 "--ignore=tests/typesafety/test_logger.yml")))
32054 (native-inputs
32055 (list python-freezegun
32056 python-pytest
32057 python-pytest-mypy-plugins
32058 python-pytest-xdist
32059 python-setuptools
32060 python-wheel))
32061 (propagated-inputs
32062 (list python-colorama))
32063 (home-page "https://github.com/Delgan/loguru")
32064 (synopsis "Python logging made (stupidly) simple")
32065 (description "Python logging made (stupidly) simple")
32066 (license license:expat)))
32067
32068(define-public python-helper
32069 (package
32070 (name "python-helper")
32071 (version "2.5.0")
32072 (source
32073 (origin
32074 (method git-fetch)
32075 (uri (git-reference
32076 (url "https://github.com/gmr/helper")
32077 (commit version)))
32078 (file-name (git-file-name name version))
32079 (sha256
32080 (base32 "0zypjv8rncvrsgl200v7d3bn08gs48dwqvgamfqv71h07cj6zngp"))))
32081 (build-system pyproject-build-system)
32082 (arguments (list #:test-backend #~'unittest))
32083 (native-inputs (list python-mock python-setuptools))
32084 (propagated-inputs (list python-logutils python-pyyaml))
32085 (home-page "https://github.com/gmr/helper")
32086 (synopsis "Library for writing configurable applications and daemons")
32087 (description
32088 "This package provides procedures for quickly writing configurable
32089applications and daemons.")
32090 (license license:bsd-3)))
32091
32092(define-public python-qtsass
32093 (package
32094 (name "python-qtsass")
32095 (version "0.4.0")
32096 (source
32097 (origin
32098 ;; There are no tests in the PyPI tarball.
32099 (method git-fetch)
32100 (uri (git-reference
32101 (url "https://github.com/spyder-ide/qtsass/")
32102 (commit (string-append "v" version))))
32103 (file-name (git-file-name name version))
32104 (sha256
32105 (base32 "1skdihfby2f41zxgwa5zv44vdxjrw301rh88rjmzj4xbdlix6cig"))))
32106 (build-system pyproject-build-system)
32107 (native-inputs
32108 (list python-flaky python-pytest python-setuptools python-wheel))
32109 (propagated-inputs
32110 (list python-libsass))
32111 (home-page "https://github.com/spyder-ide/qtsass")
32112 (synopsis "Compile SCSS files to valid Qt stylesheets")
32113 (description
32114 "Besides being used in web development, CSS is also the way to stylize
32115Qt-based desktop applications. However, Qt's CSS has a few variations that
32116prevent the direct use of SASS compiler.
32117
32118The purpose of this tool is to fill the gap between SASS and Qt-CSS by
32119handling those variations.")
32120 (license license:expat)))
32121
32122(define-public python-qdarkstyle
32123 (package
32124 (name "python-qdarkstyle")
32125 (version "3.2.3")
32126 (source
32127 (origin
32128 (method url-fetch)
32129 (uri (pypi-uri "QDarkStyle" version))
32130 (sha256
32131 (base32
32132 "1bpi0asa7sd5ch6x6b60n5yias04nsx6kcwji40228g9lrs7y2qc"))))
32133 (build-system pyproject-build-system)
32134 (native-inputs (list python-pytest
32135 python-qtsass
32136 python-setuptools
32137 python-watchdog
32138 python-wheel))
32139 (propagated-inputs
32140 (list python-qtpy python-pyqt-6))
32141 (home-page "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
32142 (synopsis
32143 "Complete dark stylesheet for Python and Qt applications")
32144 (description "QDarkStyle is the most complete dark stylesheet for Python and
32145Qt applications.")
32146 (license license:expat)))
32147
32148(define-public python-pystray
32149 (package
32150 (name "python-pystray")
32151 (version "0.19.5")
32152 (source
32153 (origin
32154 (method git-fetch)
32155 (uri (git-reference
32156 (url "https://github.com/moses-palmer/pystray")
32157 (commit "1907f8681d6d421517c63d94f425f9cdd74d0034")))
32158 (file-name (git-file-name name version))
32159 (sha256
32160 (base32 "1vj6c8s7rbc7xc4bi5brx5629ls1ri9prcw9290v85hagilmp609"))))
32161 (build-system pyproject-build-system)
32162 (arguments
32163 (list
32164 ;; The test suite requires user interaction, there are no automated
32165 ;; tests.
32166 #:tests? #false
32167 #:phases #~(modify-phases %standard-phases
32168 (add-before 'sanity-check 'use-dummy-backend
32169 (lambda _
32170 ;; Without setting this, pystray tries to connect to
32171 ;; X11 on import.
32172 (setenv "PYSTRAY_BACKEND" "dummy"))))))
32173 (native-inputs (list python-sphinx python-setuptools))
32174 (propagated-inputs (list python-pillow python-six python-xlib))
32175 (home-page "https://github.com/moses-palmer/pystray")
32176 (synopsis "Create a system tray icon")
32177 (description "This library allows you to create a system tray icon.
32178It makes it possible to specify an icon, a title and a callback for when
32179the icon is activated. The icon and title can be changed after the icon
32180has been created, and the visibility of the icon can be toggled.")
32181 (license license:lgpl3+)))
32182
32183(define-public python-bitstring
32184 (package
32185 (name "python-bitstring")
32186 (version "4.3.1")
32187 (source
32188 (origin
32189 (method url-fetch)
32190 (uri (pypi-uri "bitstring" version))
32191 (sha256
32192 (base32 "0nm9l77sgyqai8ggnm6j9yvc473g0l8icaj11x66s8ap72fw12x0"))))
32193 (build-system pyproject-build-system)
32194 (arguments
32195 (list
32196 #:test-flags #~(list "--ignore=tests/test_benchmarks.py"
32197 "--ignore=tests/test_fp8.py"
32198 "--ignore=tests/test_mxfp.py")))
32199 (native-inputs
32200 (list python-gfloat python-pytest python-setuptools python-wheel))
32201 (propagated-inputs
32202 (list python-bitarray))
32203 (home-page "https://github.com/scott-griffiths/bitstring")
32204 (synopsis
32205 "Simple construction, analysis and modification of binary data")
32206 (description
32207 "Bitstring is a library for simple construction, analysis and modification
32208 of binary data.")
32209 (license license:expat)))
32210
32211(define-public python-confuse
32212 (package
32213 (name "python-confuse")
32214 (version "2.0.1")
32215 (source
32216 (origin
32217 (method url-fetch)
32218 (uri (pypi-uri "confuse" version))
32219 (sha256
32220 (base32
32221 "07v1s16nryls3zhaakwz6i6rgdy1c010gk00jsvn5a5a96ns4ybk"))))
32222 (build-system pyproject-build-system)
32223 (native-inputs (list python-flit-core python-pytest))
32224 (propagated-inputs (list python-pyyaml))
32225 (home-page "https://github.com/beetbox/confuse")
32226 (synopsis "Painless YAML configuration")
32227 (description "Confuse is a configuration library for Python that uses
32228YAML. It takes care of defaults, overrides, type checking, command-line
32229integration, human-readable errors, and standard OS-specific locations.")
32230 (license license:expat)))
32231
32232(define-public python-referencing
32233 (package
32234 (name "python-referencing")
32235 (version "0.35.1")
32236 (source
32237 (origin
32238 (method url-fetch)
32239 (uri (pypi-uri "referencing" version))
32240 (sha256
32241 (base32 "0g3hvzz6ci6dcf701q7ilr4b7vw3fw428kqp4nj35dn8lqj23d15"))))
32242 (build-system pyproject-build-system)
32243 (arguments
32244 (list
32245 #:test-flags
32246 '(list "--pyargs" "referencing/tests")
32247 #:phases
32248 '(modify-phases %standard-phases
32249 (add-after 'unpack 'patch-pyproject
32250 (lambda _
32251 ;; The build system does not like this.
32252 (substitute* "pyproject.toml"
32253 ((" \"Topic :: File Formats.*") "")))))))
32254 (propagated-inputs (list python-attrs python-rpds-py))
32255 (native-inputs
32256 (list python-hatchling
32257 python-hatch-vcs
32258 python-jsonschema
32259 python-pytest
32260 python-pytest-subtests))
32261 (home-page "https://github.com/python-jsonschema/referencing")
32262 (synopsis "JSON Referencing + Python")
32263 (description "This package provides an implementation-agnostic
32264implementation of JSON reference resolution.")
32265 (license license:expat)))
32266
32267(define-public python-referencing-bootstrap
32268 (package
32269 (inherit python-referencing)
32270 (name "python-referencing-bootstrap")
32271 (arguments
32272 (list
32273 #:tests? #false
32274 #:phases
32275 '(modify-phases %standard-phases
32276 (add-after 'unpack 'patch-pyproject
32277 (lambda _
32278 ;; The build system does not like this.
32279 (substitute* "pyproject.toml"
32280 ((" \"Topic :: File Formats.*") "")))))))
32281 (native-inputs (list python-hatchling python-hatch-vcs))))
32282
32283(define-public python-reflink
32284 (package
32285 (name "python-reflink")
32286 (version "0.2.2")
32287 (source
32288 (origin
32289 (method git-fetch)
32290 (uri (git-reference
32291 (url "https://gitlab.com/rubdos/pyreflink")
32292 (commit version)))
32293 (file-name (git-file-name name version))
32294 (sha256
32295 (base32 "1ch3n7m1f5nvx9i0jv1fj1i5w1jsl1ga8dxzixg71m34gf4kg3s6"))))
32296 (build-system pyproject-build-system)
32297 (arguments
32298 (list #:tests? #f)) ;almost all tests want to run mkfs.btrfs
32299 (propagated-inputs (list python-cffi))
32300 (native-inputs (list python-pytest python-setuptools))
32301 (home-page "https://gitlab.com/rubdos/pyreflink")
32302 (synopsis "Python wrapper around reflink system call")
32303 (description
32304 "Python reflink wraps around platform specific @code{reflink}
32305implementations.")
32306 (license license:expat)))
32307
32308(define-public python-retry
32309 (package
32310 (name "python-retry")
32311 (version "0.9.2")
32312 (source
32313 (origin
32314 (method git-fetch)
32315 (uri (git-reference
32316 (url "https://github.com/invl/retry")
32317 (commit version)))
32318 (file-name (git-file-name name version))
32319 (sha256
32320 (base32 "1a35ihsn082626592bkjc41fywylzp603j0cxpkbm2f7l1k332xv"))))
32321 (build-system pyproject-build-system)
32322 (arguments
32323 (list
32324 #:phases
32325 #~(modify-phases %standard-phases
32326 (add-before 'build 'set-version
32327 (lambda _
32328 (setenv "PBR_VERSION" #$version))))))
32329 (native-inputs (list python-pbr python-pytest))
32330 (propagated-inputs (list python-decorator python-py))
32331 (home-page "https://github.com/invl/retry")
32332 (synopsis "Retry decorator")
32333 (description
32334 "@code{retry} is an easy to use retry decorator for Python. It can be
32335used to retry a function a given number of times.")
32336 (license license:asl2.0)))
32337
32338(define-public python-crayons
32339 (package
32340 (name "python-crayons")
32341 (version "0.4.0")
32342 (source
32343 (origin
32344 (method git-fetch)
32345 (uri (git-reference
32346 (url "https://github.com/MasterOdin/crayons")
32347 (commit (string-append "v" version))))
32348 (file-name (git-file-name name version))
32349 (sha256
32350 (base32 "0zmls5c67mxyxzlwvagiidlrxy1f6f8kwm5afjsydhn19h4rd7za"))))
32351 (build-system pyproject-build-system)
32352 (arguments
32353 (list
32354 #:test-backend #~'custom
32355 #:test-flags #~(list "test_crayons.py")))
32356 (native-inputs (list python-setuptools))
32357 (propagated-inputs (list python-colorama))
32358 (home-page "https://github.com/MasterOdin/crayons")
32359 (synopsis "TextUI colors for Python")
32360 (description
32361 "This package gives you colored strings for the terminal. Crayons
32362automatically wraps a given string in the foreground color and restores the
32363original state after the string is printed.")
32364 (license license:expat)))
32365
32366(define-public python-sane
32367 (package
32368 (name "python-sane")
32369 (version "2.9.2")
32370 (source
32371 (origin
32372 (method git-fetch)
32373 (uri (git-reference
32374 (url "https://github.com/python-pillow/Sane")
32375 (commit (string-append "v" version))))
32376 (file-name (git-file-name name version))
32377 (sha256
32378 (base32 "0ldc17n1h8awd0flhwhvb5fj0izy5vy18c128saqnm5isq273y9r"))))
32379 (build-system pyproject-build-system)
32380 (arguments (list #:tests? #f)) ; No tests.
32381 (native-inputs (list python-setuptools))
32382 (inputs (list sane))
32383 (home-page "https://github.com/python-pillow/Sane")
32384 (synopsis "Python interface to the SANE scanner")
32385 (description
32386 "This package provides Python interface to the SANE scanner and frame
32387grabber interface.")
32388 (license (license:non-copyleft
32389 ;; Yet another variant of the X/MIT license.
32390 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
32391
32392(define-public python-scikit-build
32393 (package
32394 (name "python-scikit-build")
32395 (version "0.18.1")
32396 (source
32397 (origin
32398 (method url-fetch)
32399 (uri (pypi-uri "scikit_build" version))
32400 (sha256
32401 (base32 "1rxqzigfacpbcfhf3c1gdqrnqdnq503bx5vpib19km44l32jl5d4"))
32402 (patches
32403 (search-patches "python-scikit-build-setuptools-compat.patch"))))
32404 (build-system pyproject-build-system)
32405 (arguments
32406 (list
32407 #:phases
32408 #~(modify-phases %standard-phases
32409 (add-after 'unpack 'patch-cmake-executable
32410 (lambda* (#:key inputs #:allow-other-keys)
32411 (substitute* "skbuild/constants.py"
32412 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
32413 (format #f "~a ~s~%" head
32414 (search-input-file inputs "bin/cmake"))))))
32415 (add-before 'check 'pre-check
32416 (lambda _
32417 ;; Some tests try to access the network before being skipped.
32418 ;; Skip them by default.
32419 (substitute* "tests/test_setup.py"
32420 (("pytest\\.mark\\.skipif\\(not is_site_reachable.*")
32421 "pytest.mark.isolated()\n"))))
32422 (replace 'check
32423 (lambda* (#:key tests? #:allow-other-keys)
32424 (when tests?
32425 ;; These tests attempt to pull dependencies from the Internet.
32426 (delete-file "tests/test_distribution.py")
32427 (delete-file "tests/test_pep518.py")
32428 ;; The tests marked as "isolate" are tests that require access
32429 ;; to the network.
32430 (invoke "pytest" "-vv" "-m" "not isolated"
32431 "-n" (number->string (parallel-job-count))
32432 "-k" (string-append
32433 ;; These tests attempt to write to read-only
32434 ;; Python install directory.
32435 "not test_install_command "
32436 "and not test_test_command "
32437 "and not test_hello_develop "
32438 ;; These sdist-related tests fail for unknown
32439 ;; reasons (see:
32440 ;; https://github.com/scikit-build/scikit-build/issues/689).
32441 "and not test_hello_sdist_with_base "
32442 "and not test_manifest_in_sdist "
32443 "and not test_hello_sdist "
32444 "and not test_sdist_with_symlinks "
32445 ;; These are not parallel safe and fail
32446 ;; nondeterministically (see:
32447 ;; https://github.com/scikit-build/scikit-build/issues/711).
32448 "and not test_generator_cleanup "
32449 "and not test_generator_selection "
32450 ;; … and there's more of them
32451 "and not test_cxx_compiler "
32452 "and not test_fortran_compiler ")))))
32453 (add-after 'install 'install-cmake
32454 (lambda* (#:key outputs #:allow-other-keys)
32455 (let ((lib (string-append (assoc-ref outputs "out")
32456 "/lib/cmake/modules")))
32457 (mkdir-p lib)
32458 (with-directory-excursion "skbuild/resources/cmake"
32459 (for-each (lambda (file) (install-file file lib))
32460 (find-files "." "\\.cmake")))))))))
32461 (native-inputs
32462 (list cmake-minimal
32463 gfortran
32464 git-minimal/pinned ;for tests
32465 ninja/pinned
32466 python-cython
32467 python-hatch-fancy-pypi-readme
32468 python-hatch-vcs
32469 python-hatchling
32470 python-pytest
32471 python-pytest-mock
32472 python-pytest-xdist
32473 python-requests
32474 python-virtualenv))
32475 (propagated-inputs
32476 (list python-distro
32477 python-packaging
32478 python-wheel))
32479 (home-page "https://github.com/scikit-build/scikit-build")
32480 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
32481 (description "Scikit-build is an improved build system generator for
32482CPython C/C++/Fortran/Cython extensions. It has support for additional
32483compilers, build systems, cross compilation, and locating dependencies and
32484determining their build requirements. The scikit-build package is
32485fundamentally just glue between the @code{setuptools} Python module and
32486CMake.")
32487 (license license:expat)))
32488
32489(define-public python-screenkey
32490 (package
32491 (name "python-screenkey")
32492 (version "1.5")
32493 (source
32494 (origin
32495 (method git-fetch)
32496 (uri (git-reference
32497 (url "https://gitlab.com/screenkey/screenkey")
32498 (commit (string-append "v" version))))
32499 (file-name (git-file-name name version))
32500 (sha256
32501 (base32 "0j719kld4dr85d9lxn0d0b6156mcy09jm7arssfp2n3j6hmjssci"))))
32502 (build-system pyproject-build-system)
32503 (arguments
32504 (list
32505 #:tests? #f ; No tests.
32506 #:phases
32507 #~(modify-phases %standard-phases
32508 (add-after 'unpack 'fix-dlopen-paths
32509 (lambda* (#:key inputs #:allow-other-keys)
32510 (substitute* "Screenkey/xlib.py"
32511 (("(libXtst.so.6|libX11.so.6)" lib)
32512 (search-input-file inputs (string-append "/lib/" lib))))))
32513 (add-after 'install 'wrap-screenkey
32514 (lambda _
32515 (wrap-program (string-append #$output "/bin/screenkey")
32516 `("GUIX_PYTHONPATH" ":" prefix
32517 (,(getenv "GUIX_PYTHONPATH")))
32518 `("GI_TYPELIB_PATH" ":" prefix
32519 (,(getenv "GI_TYPELIB_PATH")))))))))
32520 (inputs (list bash-minimal
32521 gtk+
32522 libx11
32523 libxtst
32524 python-babel
32525 python-dbus-python
32526 python-pycairo
32527 python-pygobject
32528 slop))
32529 (native-inputs (list python-setuptools))
32530 (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
32531 (synopsis "Screencast tool to display pressed keys")
32532 (description
32533 "Screenkey is a screencast tool to display your keys inspired by
32534Screenflick.")
32535 (license license:gpl3+)))
32536
32537(define-public python-jinja2-cli
32538 (package
32539 (name "python-jinja2-cli")
32540 (version "0.8.2")
32541 (source
32542 (origin
32543 (method git-fetch)
32544 (uri (git-reference
32545 (url "https://github.com/mattrobenolt/jinja2-cli")
32546 (commit version)))
32547 (file-name (git-file-name name version))
32548 (sha256
32549 (base32
32550 "03ap7rxc1g302m0wacn47rf65d6dqrawa4maam9yapyr96viif7b"))))
32551 (build-system pyproject-build-system)
32552 (propagated-inputs
32553 (list python-jinja2))
32554 (native-inputs
32555 (list python-flake8
32556 python-jinja2
32557 python-pytest
32558 python-setuptools
32559 python-wheel))
32560 (home-page "https://github.com/mattrobenolt/jinja2-cli")
32561 (synopsis "Command-line interface to Jinja2")
32562 (description
32563 "This package provides a command-line interface (CLI) to the Jinja2
32564template engine.")
32565 (license license:bsd-3)))
32566
32567(define-public python-readability
32568 (package
32569 (name "python-readability")
32570 (version "0.3.1")
32571 (source
32572 (origin
32573 (method git-fetch)
32574 (uri (git-reference
32575 (url "https://github.com/andreasvc/readability/")
32576 (commit (string-append "v" version))))
32577 (file-name (git-file-name name version))
32578 (sha256
32579 (base32 "0m2v4ysy2a7k6j9d85i4n9z6k48rmgmbj1v7r6l2cb5qpa3pwrj5"))))
32580 (build-system pyproject-build-system)
32581 (arguments (list #:tests? #f)) ; No tests.
32582 (native-inputs (list python-setuptools))
32583 (home-page "https://github.com/andreasvc/readability/")
32584 (synopsis "Measure text readability using surface characteristics")
32585 (description
32586 "This package provides a Python library that is an implementation of
32587traditional readability measures based on simple surface characteristics.
32588These measures are basically linear regressions based on the number of words,
32589syllables, and sentences.")
32590 (license license:asl2.0)))
32591
32592(define-public python-readability-lxml
32593 ;; No releases since 2020, see:
32594 ;; <https://github.com/buriy/python-readability/issues/196>.
32595 (package
32596 (name "python-readability-lxml")
32597 (version "0.8.4.1")
32598 (source
32599 (origin
32600 (method git-fetch)
32601 (uri (git-reference
32602 (url "http://github.com/buriy/python-readability")
32603 (commit version)))
32604 (file-name (git-file-name name version))
32605 (sha256
32606 (base32 "1dr567k03ljhwx9pacmynrv47w5vgq9fkgncpm0vlvmby2g0xgdl"))))
32607 (build-system pyproject-build-system)
32608 (native-inputs
32609 (list python-poetry-core
32610 python-pytest))
32611 (propagated-inputs
32612 (list python-chardet
32613 python-cssselect
32614 python-lxml
32615 python-lxml-html-clean)) ;XXX: it sould be part of python-lxml lib
32616 (home-page "http://github.com/buriy/python-readability")
32617 (synopsis "HTML to text parser")
32618 (description
32619 "This package provides classes and function that strip gratuitous markup
32620from web pages to make them easier to read.")
32621 (license license:asl2.0)))
32622
32623(define-public python-listparser
32624 (package
32625 (name "python-listparser")
32626 (version "0.20")
32627 (source
32628 (origin
32629 (method git-fetch)
32630 (uri (git-reference
32631 (url "https://github.com/kurtmckee/listparser")
32632 (commit (string-append "v" version))))
32633 (file-name (git-file-name name version))
32634 (sha256
32635 (base32 "0a69cm0inwqwipvnmf5plbf9rqgy1arl62gxnwc7pg7062p563vs"))))
32636 (build-system pyproject-build-system)
32637 (native-inputs (list python-pytest python-poetry-core))
32638 (home-page "https://github.com/kurtmckee/listparser")
32639 (synopsis "Parse subscription lists in Python")
32640 (description
32641 "This package provides a Python library that can parse OPML, FOAF, and
32642iGoogle subscription lists.")
32643 (license license:expat)))
32644
32645(define-public python-smartypants
32646 (package
32647 (name "python-smartypants")
32648 (version "2.0.2")
32649 (source
32650 (origin
32651 (method url-fetch)
32652 (uri (pypi-uri "smartypants" version))
32653 (sha256
32654 (base32 "1ih0z32xfz45bpjyc27nnx8k4b613cwxyyr9k2v68sfcszhlrmir"))))
32655 (build-system pyproject-build-system)
32656 (native-inputs
32657 (list python-docutils python-pygments python-setuptools))
32658 (home-page "https://github.com/justinmayer/smartypants.py")
32659 (synopsis "Translate punctuation characters into smart quotes")
32660 (description
32661 "@command{smartpants} can perform the following transformations:
32662@enumerate
32663@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
32664@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
32665entities
32666@item Dashes (-- and ---) into en- and em-dash entities
32667@item Three consecutive dots (... or . . .) into an ellipsis entity
32668@end enumerate")
32669 (license license:bsd-3)))
32670
32671(define-public python-ld
32672 (package
32673 (name "python-ld")
32674 (version "1.9.0")
32675 (source
32676 (origin
32677 (method git-fetch)
32678 (uri (git-reference
32679 (url "https://github.com/nir0s/ld")
32680 (commit (string-append "v" version))))
32681 (file-name (git-file-name name version))
32682 (sha256
32683 (base32 "16yacjfw701n8dhyi26hps3i7fchbvnq9gcrx7v0fn2lbfzzvq00"))))
32684 (build-system pyproject-build-system)
32685 (arguments
32686 (list
32687 ;; XXX: These tests expect ubuntu distro.
32688 #:test-flags
32689 #~(list "-k" (string-join (list "not test_ubuntu14normal_lsb_release"
32690 "test_ubuntu14nomodules_lsb_release"
32691 "test_trailingblanks_lsb_release")
32692 " and not "))))
32693 (native-inputs (list python-pytest python-setuptools))
32694 (home-page "https://github.com/nir0s/ld")
32695 (synopsis "OS platform information API")
32696 (description
32697 "The ld package provides information about the GNU/Linux distribution it
32698runs on, such as a reliable machine-readable ID, or version information.")
32699 (license license:asl2.0)))
32700
32701(define-public python-quicktions
32702 (package
32703 (name "python-quicktions")
32704 (version "1.22")
32705 (source
32706 (origin
32707 (method git-fetch)
32708 (uri (git-reference
32709 (url "https://github.com/scoder/quicktions")
32710 (commit version)))
32711 (file-name (git-file-name name version))
32712 (sha256
32713 (base32
32714 "0kmbhbmz8cjsjp0lqmsi6a2imr4g9wy8rpfdwzghhs8hb6wj5gwy"))))
32715 (build-system pyproject-build-system)
32716 (native-inputs
32717 (list python-cython python-pytest python-setuptools))
32718 (home-page "https://github.com/scoder/quicktions")
32719 (synopsis "Fast fractions data type for rational numbers")
32720 (description
32721 "This package provides fast fractions data type for rational numbers. It
32722is the cythonized version of @code{fractions.Fraction}.")
32723 (license license:psfl)))
32724
32725(define-public python-pathvalidate
32726 (package
32727 (name "python-pathvalidate")
32728 (version "2.4.1")
32729 (source
32730 (origin
32731 (method git-fetch)
32732 (uri (git-reference
32733 (url "https://github.com/thombashi/pathvalidate")
32734 (commit (string-append "v" version))))
32735 (file-name (git-file-name name version))
32736 (sha256
32737 (base32 "17s9vqmws4sfji4bw6qd4rn7ahzkpj6yp2ia5p6vd8kva8n05h37"))))
32738 (build-system pyproject-build-system)
32739 (native-inputs (list python-allpairspy python-click python-faker
32740 python-pytest python-setuptools))
32741 (home-page "https://github.com/thombashi/pathvalidate")
32742 (synopsis "Sanitize strings representing paths")
32743 (description
32744 "@code{pathvalidate} is a Python library to sanitize/validate strings
32745representing paths or filenames.")
32746 (license license:expat)))
32747
32748(define-public python-escapism
32749 (package
32750 (name "python-escapism")
32751 (version "1.0.1")
32752 (source
32753 (origin
32754 (method git-fetch)
32755 (uri (git-reference
32756 (url "https://github.com/jupyterhub/escapism")
32757 (commit version)))
32758 (file-name (git-file-name name version))
32759 (sha256
32760 (base32 "1447mamrdbyv9v47f9wrc4fyvbwz5qrwl8qrdzqdq3q62q4xrawj"))))
32761 (build-system pyproject-build-system)
32762 (native-inputs (list python-pytest python-setuptools))
32763 (home-page "https://github.com/jupyterhub/escapism")
32764 (synopsis "Simple, generic library for escaping strings")
32765 (description
32766 "This Python library provides a programming interface to, given a set of
32767safe characters and an escape character, escape safe strings and unescape the
32768result.")
32769 (license license:expat)))
32770
32771(define-public python-recommonmark
32772 (package
32773 (name "python-recommonmark")
32774 (version "0.7.1")
32775 (source
32776 (origin
32777 (method url-fetch)
32778 (uri (pypi-uri "recommonmark" version))
32779 (sha256
32780 (base32
32781 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
32782 (build-system pyproject-build-system)
32783 (arguments
32784 (list
32785 ;; XXX: Some of those fail for no good reason.
32786 #:test-flags #~(list "--ignore=tests/test_sphinx.py")))
32787 (native-inputs (list python-pytest python-setuptools python-wheel))
32788 (propagated-inputs (list python-commonmark python-docutils python-sphinx))
32789 (home-page "https://github.com/readthedocs/recommonmark")
32790 (synopsis "Docutils-compatibility bridge to CommonMark")
32791 (description
32792 "This package provides a docutils-compatibility bridge to CommonMark that
32793lets you write CommonMark inside of Docutils & Sphinx projects.")
32794 (license license:expat)))
32795
32796(define-public python-redo
32797 (package
32798 (name "python-redo")
32799 (version "3.0.0")
32800 (source
32801 (origin
32802 (method git-fetch)
32803 (uri (git-reference
32804 (url "https://github.com/mozilla-releng/redo")
32805 (commit version)))
32806 (file-name (git-file-name name version))
32807 (sha256
32808 (base32 "1sh12f1zbdcafmnqlw25pyirhg78linbb7sxd3vnbdlm92dry0b0"))))
32809 (build-system pyproject-build-system)
32810 (native-inputs
32811 (list python-mock python-pytest python-pytest-asyncio python-setuptools))
32812 (home-page "https://github.com/mozilla-releng/redo")
32813 (synopsis "Utilities to retry Python callables")
32814 (description "Redo provides various means to add seamless ability to
32815retry to any Python callable.")
32816 (license license:mpl2.0)))
32817
32818(define-public python-opcodes
32819 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
32820 ;; version number, which is what we use here.
32821 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
32822 (package
32823 (name "python-opcodes")
32824 (version "0.3.14") ;from 'opcodes/__init__.py'
32825 (home-page "https://github.com/Maratyszcza/Opcodes")
32826 (source
32827 (origin
32828 (method git-fetch)
32829 (uri (git-reference (url home-page) (commit commit)))
32830 (file-name (git-file-name name version))
32831 (sha256
32832 (base32 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
32833 (build-system pyproject-build-system)
32834 (native-inputs (list python-pytest python-setuptools))
32835 (synopsis "Database of processor instructions and opcodes")
32836 (description
32837 "This project documents instruction sets in a format convenient for
32838tools development. An instruction set is represented by three files:
32839
32840@itemize
32841@item an XML file that describes instructions;
32842@item an XSD file that describes the structure of the XML file;
32843@item a Python module that reads the XML file and represents it as a set of
32844Python objects;
32845@end itemize
32846
32847It currently provides descriptions for most user-mode x86, x86_64, and k1om
32848instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
32849and BMI2).")
32850 (license license:bsd-2))))
32851
32852(define-public python-cart
32853 (package
32854 (name "python-cart")
32855 (version "1.2.3")
32856 (source
32857 (origin
32858 (method git-fetch)
32859 (uri (git-reference
32860 (url "https://github.com/CybercentreCanada/cart")
32861 (commit (string-append "v" version))))
32862 (file-name (git-file-name name version))
32863 (sha256
32864 (base32 "1064swqylim0nx0msynkqbz6n57n5yy4mmqxl7wd9bsg5mmrxrd1"))))
32865 (build-system pyproject-build-system)
32866 (arguments
32867 (list
32868 #:test-backend #~'unittest))
32869 (native-inputs
32870 (list python-setuptools))
32871 (propagated-inputs
32872 (list python-pycryptodome))
32873 (home-page "https://github.com/CybercentreCanada/cart")
32874 (synopsis "Library for interacting with the CaRT file format")
32875 (description
32876 "This Python library implements the CaRT file format which is commonly
32877used to store and transmit information about computer malware and associated
32878metadata.")
32879 (license license:bsd-2)))
32880
32881(define-public python-ailment
32882 (package
32883 (name "python-ailment")
32884 ;; Must be the same version as python-angr.
32885 (version "9.2.112")
32886 (source
32887 (origin
32888 (method url-fetch)
32889 (uri (pypi-uri "ailment" version))
32890 (sha256
32891 (base32 "1rv8rwvdm7fc9mf8z5hqb54dsj0n7jlnwghd12ll0b2jmh2ix8mn"))))
32892 (build-system pyproject-build-system)
32893 (arguments
32894 `(#:phases (modify-phases %standard-phases
32895 (replace 'check
32896 ;; Many tests are skipped due to cyclic dependencies.
32897 (lambda* (#:key tests? #:allow-other-keys)
32898 (when tests?
32899 (with-directory-excursion "tests"
32900 (invoke "python" "-m" "unittest"))))))))
32901 (native-inputs (list python-setuptools python-wheel))
32902 (home-page "https://github.com/angr/ailment")
32903 (synopsis "The angr intermediate language")
32904 (description
32905 "This Python module implements an @acronym{IL, Intermediate Language},
32906also known as @acronym{IR, Intermediate Representation}, used by the angr
32907binary analysis platform.")
32908 (license license:bsd-2)))
32909
32910(define-public python-cle
32911 (package
32912 (name "python-cle")
32913 ;; Must be the same version as python-angr.
32914 (version "9.2.112")
32915 (source
32916 (origin
32917 (method url-fetch)
32918 (uri (pypi-uri "cle" version))
32919 (sha256
32920 (base32 "11jbvg12wqxz74iy83ax0q8k156xrw6iqv75dix5cpqgacds3gdj"))))
32921 (build-system pyproject-build-system)
32922 (arguments
32923 (list
32924 #:tests? #f))
32925 (propagated-inputs (list python-pefile python-pyelftools python-pyvex
32926 python-sortedcontainers python-cart))
32927 (native-inputs (list python-cffi python-setuptools python-wheel))
32928 (home-page "https://github.com/angr/cle")
32929 (synopsis "Python loader for binaries and their associated libraries")
32930 (description
32931 "CLE loads binaries and their associated libraries, resolves
32932imports and provides an abstraction of process memory the same way as if
32933it was loader by the operating system's loader.")
32934 (license license:bsd-2)))
32935
32936(define-public python-pyvex
32937 (package
32938 (name "python-pyvex")
32939 ;; Must be the same version as python-angr.
32940 (version "9.2.112")
32941 (source
32942 (origin
32943 (method url-fetch)
32944 (uri (pypi-uri "pyvex" version))
32945 (sha256
32946 (base32 "0z1jiflp7h07mfc26am3v7v5z2n6mw9hkfylbs86qgpm93qcf6i3"))))
32947 (build-system pyproject-build-system)
32948 (arguments
32949 (list
32950 #:phases #~(modify-phases %standard-phases
32951 (replace 'check
32952 (lambda* (#:key tests? #:allow-other-keys)
32953 (when tests?
32954 (with-directory-excursion "tests"
32955 (invoke "python" "-m" "unittest")))))
32956
32957 (add-before 'build 'set-cc
32958 (lambda _
32959 (setenv "CC" #$(cc-for-target))
32960 (setenv "CC_NATIVE" "gcc"))))))
32961 (propagated-inputs (list python-archinfo python-bitstring python-cffi))
32962 (native-inputs (list python-setuptools python-wheel))
32963 (home-page "https://github.com/angr/pyvex")
32964 (synopsis "Python interface to libVEX and VEX IR")
32965 (description
32966 "This package provides a Python interface the libVEX and VEX IR.
32967VEX is the intermediate representation (also known as intermediate
32968language) used by the Valgrind analysis tool. As such, VEX is designed
32969to enable all kinds of binary analysis tasks.")
32970 (license license:bsd-2)))
32971
32972(define-public python-claripy
32973 (package
32974 (name "python-claripy")
32975 ;; Must be the same version as python-angr.
32976 (version "9.2.112")
32977 (source
32978 (origin
32979 ;; Fetching from Git as pypi release doesn't include all test files.
32980 (method git-fetch)
32981 (uri (git-reference
32982 (url "https://github.com/angr/claripy")
32983 (commit (string-append "v" version))))
32984 (file-name (git-file-name name version))
32985 (sha256
32986 (base32 "0c6q6imxjwhxn87d9yz8zvyrszk94r25w8x0g1lr6mrpa9bx7wai"))
32987 (modules '((guix build utils)))
32988 (snippet '(begin
32989 (substitute* "setup.cfg"
32990 ;; Relax the z3 version constraint.
32991 ;; See https://github.com/angr/claripy/commit/d1fe2df
32992 (("z3-solver==4.13.0.0")
32993 ""))))))
32994 (build-system pyproject-build-system)
32995 (arguments
32996 `(#:phases (modify-phases %standard-phases
32997 (replace 'check
32998 (lambda* (#:key tests? #:allow-other-keys)
32999 (when tests?
33000 (with-directory-excursion "tests"
33001 (invoke "python" "-m" "unittest"))))))))
33002 (propagated-inputs (list python-cachetools python-decorator python-pysmt
33003 z3))
33004 (native-inputs (list python-setuptools python-wheel))
33005 (home-page "https://github.com/angr/claripy")
33006 (synopsis "Abstraction layer for constraint solvers")
33007 (description
33008 "This Python module provides an abstraction layer for interacting
33009with constraint solvers. Specifically, it is intended to be used with
33010SMT solvers and is built on top of the Z3 solver.")
33011 (license license:bsd-2)))
33012
33013(define-public python-pysmt
33014 (package
33015 (name "python-pysmt")
33016 (version "0.9.6")
33017 (source
33018 (origin
33019 ;; Fetching from Git as pypi release doesn't include all test files.
33020 (method git-fetch)
33021 (uri (git-reference
33022 (url "https://github.com/pysmt/pysmt")
33023 (commit (string-append "v" version))))
33024 (file-name (git-file-name name version))
33025 (sha256
33026 (base32 "0jiw8pa6hfh9ajr953q187qgpdnk3bvaa3wmrxs8ilw5jc41sq8y"))))
33027 (build-system pyproject-build-system)
33028 (arguments
33029 `(#:phases (modify-phases %standard-phases
33030 (add-before 'check 'set-pysmt-solver
33031 (lambda _
33032 (setenv "PYSMT_SOLVER" "z3"))))))
33033 (native-inputs (list python-pytest python-setuptools python-wheel))
33034 (propagated-inputs (list z3))
33035 (home-page "https://github.com/pysmt/pysmt")
33036 (synopsis
33037 "Solver-agnostic library for SMT formula manipulation and solving")
33038 (description
33039 "This Python module provides a solver-agnostic abstraction for
33040working with @acronym{SMT, Satisfiability Modulo Theory} formulas. For example,
33041it allows manipulation and solving such formulas.")
33042 (license license:asl2.0)))
33043
33044(define-public python-rpyc
33045 (package
33046 (name "python-rpyc")
33047 (version "5.3.1")
33048 (source
33049 (origin
33050 ;; Fetching from Git as pypi release doesn't include all test files.
33051 (method git-fetch)
33052 (uri (git-reference
33053 (url "https://github.com/tomerfiliba-org/rpyc")
33054 (commit version)))
33055 (file-name (git-file-name name version))
33056 (sha256
33057 (base32 "15mnp9qkyw3mmxmr5y4kf3xkvxyp00n892vqaqwznr7al35apgnr"))
33058 (snippet '(begin
33059 ;; Disable deploy tests, these rely on OpenSSH and require
33060 ;; configuring the SSH client manually to accept the host key.
33061 (delete-file "tests/test_deploy.py")
33062 ;; Disable tests requiring network access. These tests
33063 ;; presently fail with the error "Network is unreachable".
33064 (delete-file "tests/test_registry.py")))))
33065 (build-system pyproject-build-system)
33066 (arguments
33067 `(#:phases (modify-phases %standard-phases
33068 (replace 'check
33069 (lambda* (#:key tests? #:allow-other-keys)
33070 (when tests?
33071 (with-directory-excursion "tests"
33072 (invoke "python" "-m" "unittest"))))))))
33073 (propagated-inputs (list python-hatchling python-plumbum))
33074 (home-page "https://github.com/tomerfiliba-org/rpyc")
33075 (synopsis
33076 "Remote Python Call (RPyC) is a symmetric distributed computing library")
33077 (description
33078 "This Python module enables remote procedure calls, clustering, and
33079distributed-computing. For this purpose, it makes use of object-proxying, a technique
33080that employs python's dynamic nature, to overcome the physical boundaries between
33081processes and computers, so that remote objects can be manipulated as if they
33082were local.")
33083 (license license:expat)))
33084
33085(define-public python-nampa
33086 (package
33087 (name "python-nampa")
33088 ;; PyPI version is 0.1.1 from 2017. Tag 1.0 on git is from 2020 and still
33089 ;; has 0.1.1 as version. Latest commit is from 2024.
33090 (properties '((commit . "cb6a63aae64324f57bdc296064bc6aa2b99ff99a")
33091 (revision . "0")))
33092 (version (git-version "1.0.0"
33093 (assoc-ref properties 'revision)
33094 (assoc-ref properties 'commit)))
33095 (source
33096 (origin
33097 (method git-fetch)
33098 (uri (git-reference
33099 (url "https://github.com/thebabush/nampa")
33100 (commit (assoc-ref properties 'commit))))
33101 (file-name (git-file-name name version))
33102 (sha256
33103 (base32 "0a3fx0wpch4il1fwv1nan6nsd7bv84b0bs2xxxjacisw3spizlg0"))))
33104 (build-system pyproject-build-system)
33105 (arguments
33106 (list
33107 #:test-flags
33108 #~(list "-k test_random_values")
33109 #:phases
33110 #~(modify-phases %standard-phases
33111 (add-after 'unpack 'patch-tests
33112 (lambda _
33113 ;; Unclear why this top-level __init__.py is here. It seems to
33114 ;; setup a plugin for binaryninja, which Guix does not package.
33115 (delete-file "__init__.py")
33116 ;; Yields tests, which is not allowed anymore.
33117 (substitute* "tests/test_crc.py"
33118 (("yield") "#yield")))))))
33119 (propagated-inputs (list python-future))
33120 (native-inputs (list python-pytest python-setuptools))
33121 (home-page "https://github.com/thebabush/nampa")
33122 (synopsis "Python implementation of IDA Pro's FLIRT technology")
33123 (description
33124 "This Python module implements the @acronym{FLIRT, Fast Library Identification
33125and Recognition Technology}. This technology is useful for identifying
33126common library subroutines in disassembled binaries.")
33127 (license license:lgpl3)))
33128
33129(define-public python-mulpyplexer
33130 (package
33131 (name "python-mulpyplexer")
33132 (version "0.09")
33133 (source
33134 (origin
33135 (method url-fetch)
33136 (uri (pypi-uri "mulpyplexer" version))
33137 (sha256
33138 (base32 "0c5xzci1djy1yi9hxxh8g67l6ms8r7ad7ja20pv8hfbdysdrwkhl"))))
33139 (build-system pyproject-build-system)
33140 (arguments
33141 (list
33142 #:phases
33143 '(modify-phases %standard-phases
33144 (replace 'check
33145 (lambda* (#:key tests? #:allow-other-keys)
33146 (when tests?
33147 (invoke "python" "mulpyplexer.py")))))))
33148 (native-inputs (list python-setuptools python-wheel))
33149 (home-page "https://github.com/zardus/mulpyplexer/")
33150 (synopsis "Multiplexes interactions with lists of Python objects")
33151 (description "This module provides utilities for multiplexing
33152interactions with lists of Python objects.")
33153 (license license:bsd-2)))
33154
33155(define-public python-itanium-demangler
33156 (package
33157 (name "python-itanium-demangler")
33158 (version "1.1")
33159 (source
33160 (origin
33161 (method git-fetch)
33162 (uri (git-reference
33163 ;; PyPI only provides wheels and no source code.
33164 (url "https://github.com/whitequark/python-itanium_demangler")
33165 (commit (string-append "v" version))))
33166 (file-name (git-file-name name version))
33167 (sha256
33168 (base32 "1q47aqm5z3db6pasdzw05d6236vnb8hnapfy88fcmn9dr5ym98r3"))))
33169 (build-system pyproject-build-system)
33170 (arguments
33171 (list
33172 #:phases
33173 #~(modify-phases %standard-phases
33174 (replace 'check
33175 (lambda* (#:key tests? #:allow-other-keys)
33176 (when tests?
33177 (with-directory-excursion "tests"
33178 (invoke "python" "-m" "unittest"))))))))
33179 (native-inputs (list python-setuptools python-wheel))
33180 (home-page "https://github.com/whitequark/python-itanium_demangler/")
33181 (synopsis "Pure Python Itanium C++ ABI demangler")
33182 (description
33183"This Python module provides an implementation of the Itanium C++ ABI symbol
33184mangling language. The demangler generates an abstract syntax tree from
33185mangled symbols, which can be used for directly extracting type information.")
33186 (license license:bsd-0)))
33187
33188(define-public python-angr
33189 (package
33190 (name "python-angr")
33191 (version "9.2.112")
33192 (source
33193 (origin
33194 ;; Fetching from Git as pypi release doesn't include all test files.
33195 (method git-fetch)
33196 (patches (search-patches "python-angr-check-exec-deps.patch"))
33197 (uri (git-reference
33198 (url "https://github.com/angr/angr")
33199 (commit (string-append "v" version))))
33200 (file-name (git-file-name name version))
33201 (sha256
33202 (base32 "1179926xbfh2930laz33p90vj532jk7g2qylzzpw1185yhlf9cis"))))
33203 (build-system pyproject-build-system)
33204 (arguments
33205 (list
33206 #:test-flags
33207 #~(list "-x"
33208 "--dist" "load"
33209 "-n" (number->string (parallel-job-count))
33210 "-k"
33211 ;; test_mips32_missing_offset_in_instructions fails
33212 ;; with capstone 5 and passes with capstone 4. Might
33213 ;; be a capstone regressions, needs investigation.
33214 ;;
33215 ;; test_concrete_memset is a non-deterministic benchmark.
33216 ;; test_similarity_fauxware is flaky.
33217 (string-append
33218 "not test_mips32_missing_offset_in_instructions"
33219 " and not test_concrete_memset"
33220 " and not test_similarity_fauxware"))
33221 #:phases #~(modify-phases %standard-phases
33222 (add-after 'unpack 'patch-tests
33223 (lambda* (#:key inputs #:allow-other-keys)
33224 (let ((coreutils (assoc-ref inputs "coreutils")))
33225 ;; The constraint exists because of a capstone bug for which
33226 ;; we backport a patch, hence we can relax the constraint.
33227 ;;
33228 ;; See https://github.com/angr/angr/issues/4656
33229 (substitute* "setup.cfg"
33230 (("capstone==5.0.0.post1")
33231 "capstone"))
33232 ;; Relax constraint on python-rich, the constraint is too strict,
33233 ;; angr work well with our packaged version of python-rich.
33234 (substitute* "setup.cfg"
33235 (("rich>=13.1.0")
33236 "rich"))
33237 (substitute* "tests/common.py"
33238 (("\\[\"cc\"\\]")
33239 "[\"gcc\"]")))))
33240 (add-before 'check 'check-setup
33241 (lambda _
33242 (copy-recursively
33243 #$(this-package-native-input "binaries")
33244 "../binaries")))
33245 (add-before 'build 'set-cc
33246 (lambda _
33247 (setenv "CC" "gcc"))))))
33248 (propagated-inputs (list python-ailment
33249 python-archinfo
33250 python-cachetools
33251 python-cffi
33252 python-claripy
33253 python-cle
33254 python-colorama
33255 python-cppheaderparser
33256 python-dpkt
33257 python-gitpython
33258 python-mulpyplexer
33259 python-nampa
33260 python-networkx
33261 python-protobuf
33262 python-psutil
33263 python-itanium-demangler
33264 python-pycparser
33265 python-pyvex
33266 python-pyformlang
33267 python-rich
33268 python-rpyc
33269 python-sortedcontainers
33270 python-sqlalchemy
33271 python-sympy
33272 python-unique-log-filter
33273 unicorn-2.0))
33274 (native-inputs `(("python-pytest" ,python-pytest)
33275 ("python-pytest-xdist" ,python-pytest-xdist)
33276 ("python-setuptools" ,python-setuptools)
33277 ("python-wheel" ,python-wheel)
33278 ("binaries"
33279 ;; This repository ships several binaries used only for testing
33280 ;; purpose. The binaries are not executed and not part of the
33281 ;; angr distribution, they are only used to test angr's binary
33282 ;; analysis capabilities. In the context of the GNU FSDG, these
33283 ;; files should be considered non-functional data.
33284 ,(origin
33285 (method git-fetch)
33286 (uri (git-reference (url
33287 "https://github.com/angr/binaries")
33288 (commit (string-append "v"
33289 version))))
33290 (file-name (git-file-name "angr-binaries" version))
33291 (sha256 (base32
33292 "0bxzf6alkczv9r0151ksvcwyksnw8077acz1wd8drbxw0zl0qnmr"))))))
33293 (home-page "https://github.com/angr/angr")
33294 (synopsis "Multi-architecture binary analysis toolkit")
33295 (description
33296 "This package provides a versatile binary analysis platform with the
33297ability to perform dynamic symbolic execution as well as various
33298static analyses directly on binaries. As such, it can be used for all
33299kinds of reverse engineering, vulnerability discovery, exploit
33300generation, and software testing purposes.")
33301 (license license:bsd-2)))
33302
33303(define-public python-peachpy
33304 ;; There is no tag in this repo.
33305 (let ((commit "349e8f836142b2ed0efeb6bb99b1b715d87202e9")
33306 (version "0.2.0") ;from 'peachpy/__init__.py'
33307 (revision "3"))
33308 (package
33309 (name "python-peachpy")
33310 (version (git-version version revision commit))
33311 (home-page "https://github.com/Maratyszcza/PeachPy")
33312 (source (origin
33313 (method git-fetch)
33314 (uri (git-reference (url home-page) (commit commit)))
33315 (file-name (git-file-name name version))
33316 (sha256
33317 (base32
33318 "16pnkghmqjc7pbws0yhyrwlz43d5pffb5c6v2bb4jk0j537gwzbi"))
33319 (patches (search-patches "python-peachpy-determinism.patch"))))
33320 (build-system pyproject-build-system)
33321 (arguments
33322 ;; The issue is known and the test will probably never be fixed.
33323 ;; https://github.com/Maratyszcza/PeachPy/issues/131
33324 (list #:test-flags ''("--ignore=tests/arm/test_arm.py")))
33325 (native-inputs
33326 (list python-pytest python-setuptools python-wheel))
33327 (propagated-inputs
33328 (list python-six python-opcodes))
33329 (synopsis "Efficient assembly code generation in Python")
33330 (description
33331 "PeachPy is a Python framework for writing high-performance assembly kernels.
33332PeachPy aims to simplify writing optimized assembly kernels while preserving
33333all optimization opportunities of traditional assembly.
33334
33335PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
33336for the Go language tool chain; it adapts to different calling conventions and
33337application binary interfaces (ABIs); it takes care of register allocation; it
33338supports x86_64 instructions up to AVX-512 and SHA.")
33339 (supported-systems '("x86_64-linux"))
33340 (license license:bsd-2))))
33341
33342(define-public python-sgmllib3k
33343 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
33344 (revision "1"))
33345 (package
33346 (name "python-sgmllib3k")
33347 (version
33348 (git-version "1.0.0" revision commit))
33349 (source
33350 (origin
33351 (method git-fetch)
33352 (uri (git-reference
33353 (url "https://github.com/hsoft/sgmllib")
33354 (commit commit)))
33355 (file-name (git-file-name name version))
33356 (sha256
33357 (base32
33358 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))
33359 (patches (search-patches "python-sgmllib3k-assertions.patch"))))
33360 (build-system pyproject-build-system)
33361 (native-inputs (list python-pytest python-setuptools))
33362 (home-page "https://github.com/hsoft/sgmllib")
33363 (synopsis "Python 3 port of sgmllib")
33364 (description "This package provides an unmaintained port of sgmllib to
33365Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
33366Generalized Mark-up Language}.")
33367 (license license:bsd-3))))
33368
33369(define-public python-cwcwidth
33370 (package
33371 (name "python-cwcwidth")
33372 (version "0.1.10")
33373 (source
33374 (origin
33375 (method url-fetch)
33376 (uri (pypi-uri "cwcwidth" version))
33377 (sha256
33378 (base32 "0951lwciwslnzcvfvnk9daiiwh00q15qbcmjw5xi1x61f87pcs3l"))))
33379 (build-system pyproject-build-system)
33380 (arguments
33381 (list
33382 #:phases
33383 #~(modify-phases %standard-phases
33384 (add-before 'check 'remove-local-cwcwidth
33385 (lambda _
33386 ;; This would otherwise interfere with finding the installed
33387 ;; cwcwidth when running tests.
33388 (delete-file-recursively "cwcwidth"))))))
33389 (native-inputs
33390 (list python-cython
33391 python-pytest
33392 python-setuptools
33393 python-setuptools-scm))
33394 (home-page "https://github.com/sebastinas/cwcwidth")
33395 (synopsis "Python bindings for wc(s)width")
33396 (description
33397 "This package provides bindings for wcwidth and wcswidth functions
33398defined in POSIX.1-2001 and POSIX.1-2008.")
33399 (license license:expat)))
33400
33401(define-public python-pyan3
33402 (package
33403 (name "python-pyan3")
33404 (version "1.2.0")
33405 (source
33406 (origin
33407 ;; Source tarball on PyPI lacks tests.
33408 (method git-fetch)
33409 (uri (git-reference
33410 (url "https://github.com/Technologicat/pyan")
33411 (commit (string-append "v" version))))
33412 (file-name (git-file-name name version))
33413 (sha256
33414 (base32
33415 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
33416 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
33417 "python-pyan3-fix-absolute-path-bug.patch"))))
33418 (build-system pyproject-build-system)
33419 (native-inputs
33420 (list python-pytest python-pytest-cov python-setuptools python-wheel))
33421 (propagated-inputs
33422 (list python-jinja2))
33423 (home-page "https://github.com/Technologicat/pyan")
33424 (synopsis "Offline call graph generator for Python 3")
33425 (description "Pyan takes one or more Python source files, performs
33426a (rather superficial) static analysis, and constructs a directed graph of the
33427objects in the combined source, and how they define or use each other. The
33428graph can be output for rendering by GraphViz or yEd.")
33429 (license license:gpl2)))
33430
33431(define-public python-multipledispatch
33432 (package
33433 (name "python-multipledispatch")
33434 (version "1.0.0")
33435 (source
33436 (origin
33437 (method git-fetch) ;no tests in PyPI archive
33438 (uri (git-reference
33439 (url "https://github.com/mrocklin/multipledispatch")
33440 (commit version)))
33441 (file-name (git-file-name name version))
33442 (sha256
33443 (base32 "0dfnav03bgrp5sxn53gyp4kfagcicm3pz98cj056rf9s6k5006s7"))))
33444 (build-system pyproject-build-system)
33445 (native-inputs
33446 (list python-pytest
33447 python-pytest-benchmark
33448 python-setuptools))
33449 (home-page "https://github.com/mrocklin/multipledispatch/")
33450 (synopsis "Multiple dispatch for Python based on pattern matching")
33451 (description
33452 "This library provides an efficient mechanism for overloading function
33453implementations based on the types of the arguments.")
33454 (license license:bsd-3)))
33455
33456(define-public python-multimethod
33457 (package
33458 (name "python-multimethod")
33459 (version "1.10")
33460 (source
33461 (origin
33462 ;; No tests in the PyPI tarball.
33463 (method git-fetch)
33464 (uri (git-reference
33465 (url "https://github.com/coady/multimethod")
33466 (commit (string-append "v" version))))
33467 (file-name (git-file-name name version))
33468 (sha256
33469 (base32 "07xv92q7f4bkp6dzkqvcv0zxr11729qdak4s3ldmbhdwgsf44g5h"))))
33470 (build-system pyproject-build-system)
33471 (native-inputs (list python-pytest python-setuptools python-wheel))
33472 (home-page "https://github.com/coady/multimethod")
33473 (synopsis "Python support for multiple argument dispatching")
33474 (description
33475 "This package provides a decorator for adding multiple argument
33476dispatching to functions. The decorator creates a multimethod object as
33477needed and registers the function with its annotations.")
33478 (license license:asl2.0)))
33479
33480(define-public python-logical-unification
33481 (package
33482 (name "python-logical-unification")
33483 (version "0.4.6")
33484 (source
33485 (origin
33486 (method git-fetch)
33487 (uri (git-reference
33488 (url "https://github.com/pythological/unification")
33489 (commit (string-append "v" version))))
33490 (file-name (git-file-name name version))
33491 (sha256
33492 (base32 "1pciaw3vd7awcnszkqda7l17y3gdzb8ca2cr4p5j0x3b8r28izx8"))))
33493 (build-system pyproject-build-system)
33494 (arguments
33495 (list
33496 #:phases
33497 #~(modify-phases %standard-phases
33498 (add-after 'unpack 'versioneer
33499 (lambda _
33500 (invoke "versioneer" "install")
33501 (substitute* "setup.py"
33502 (("version=versioneer.get_version\\(),")
33503 (format #f "version=~s," #$version))))))))
33504 (native-inputs
33505 (list python-pytest
33506 python-pytest-benchmark
33507 python-setuptools
33508 python-versioneer
33509 python-wheel))
33510 (propagated-inputs
33511 (list python-multipledispatch
33512 python-toolz))
33513 (home-page "https://github.com/pythological/unification/")
33514 (synopsis "Logical unification in Python for solving symbolic expressions")
33515 (description "This library provides algorithms and data types for solving
33516symbolic expressions in pure Python using the technique of logical unification.")
33517 (license license:bsd-3)))
33518
33519(define-public python-looseversion
33520 (package
33521 (name "python-looseversion")
33522 (version "1.3.0")
33523 (source
33524 (origin
33525 (method url-fetch)
33526 (uri (pypi-uri "looseversion" version))
33527 (sha256
33528 (base32 "17k625ws83lwksa7yyy4mn0i39lmxgrzxihn22l335dvyvrnbppb"))))
33529 (build-system pyproject-build-system)
33530 (arguments
33531 (list
33532 ;; No tests provided.
33533 #:tests? #f))
33534 (native-inputs
33535 (list python-hatchling))
33536 (home-page "https://github.com/effigies/looseversion")
33537 (synopsis "Version numbering for anarchists and software realists")
33538 (description
33539 "This package provides a drop-in replacement for the original
33540@code{LooseVersion}. It implements an identical interface and comparison
33541logic to @code{LooseVersion}. The only major change is that a
33542@code{looseversion.LooseVersion} is comparable to a
33543@code{distutils.version.LooseVersion}, which means tools should not need to
33544worry whether all dependencies that use LooseVersion have migrated.")
33545 (license license:psfl)))
33546
33547(define-public python-cons
33548 (package
33549 (name "python-cons")
33550 (version "0.4.7")
33551 (source
33552 (origin
33553 (method git-fetch) ;no tests in PyPI archive
33554 (uri (git-reference
33555 (url "https://github.com/pythological/python-cons")
33556 (commit (string-append "v" version))))
33557 (file-name (git-file-name name version))
33558 (sha256
33559 (base32 "07a1gkvc5p3qi55vczhicz3k5bs1c6jdkw6vrrnxrygg357fabh5"))))
33560 (build-system pyproject-build-system)
33561 (arguments
33562 (list
33563 #:phases
33564 #~(modify-phases %standard-phases
33565 (add-before 'build 'set-version
33566 (lambda _
33567 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
33568 (native-inputs
33569 (list python-pytest
33570 python-setuptools
33571 python-setuptools-scm
33572 python-wheel))
33573 (propagated-inputs
33574 (list python-logical-unification))
33575 (home-page "https://github.com/pythological/python-cons")
33576 (synopsis "Cons cell data structures and related algorithms for Python")
33577 (description
33578 "This library implements algorithms and data structures for Lisp-style
33579cons cells in Python.")
33580 (license license:lgpl3+)))
33581
33582(define-public python-etuples
33583 (package
33584 (name "python-etuples")
33585 (version "0.3.10")
33586 (source
33587 (origin
33588 (method url-fetch)
33589 (uri (pypi-uri "etuples" version))
33590 (sha256
33591 (base32 "0rqi0ml2az23ly5wanymgrfsnzm6dd6wxgric8a3fa42gqfyiz96"))))
33592 (build-system pyproject-build-system)
33593 (arguments
33594 (list
33595 #:test-flags
33596 ;; assert False == {~_1: <built-in function add>}
33597 #~(list "--deselect=tests/test_dispatch.py::test_unification")))
33598 (native-inputs
33599 (list python-pytest
33600 python-setuptools
33601 python-setuptools-scm))
33602 (propagated-inputs
33603 (list python-cons
33604 python-multipledispatch))
33605 (home-page "https://github.com/pythological/etuples")
33606 (synopsis "S-expressions in Python")
33607 (description
33608 "This library implements eval'able S-expression in Python using tuple-like objects.")
33609 (license license:asl2.0)))
33610
33611(define-public python-minikanren
33612 (package
33613 (name "python-minikanren")
33614 (version "1.0.5")
33615 (source
33616 (origin
33617 (method git-fetch)
33618 (uri (git-reference
33619 (url "https://github.com/pythological/kanren")
33620 (commit (string-append "v" version))))
33621 (file-name (git-file-name name version))
33622 (sha256
33623 (base32 "1fsy5dlkyghz2qvjwc5pv4arxzvczn7s4bmy0fwk5xzxljc3894l"))))
33624 (build-system pyproject-build-system)
33625 (arguments
33626 (list
33627 ;; 60 passed, 3 skipped, 23 deselected
33628 #:test-flags
33629 #~(list "-k" (string-join
33630 ;; XXX: 16 tests fail with assertion not equal, check why.
33631 (list "not test_basics"
33632 "test_eq_assoc"
33633 "test_eq_assoccomm"
33634 "test_eq_comm"
33635 "test_map_anyo"
33636 "test_map_anyo_misc"
33637 "test_map_anyo_reverse"
33638 "test_reduceo"
33639 "test_walko"
33640 "test_walko_reverse")
33641 " and not "))))
33642 (native-inputs
33643 (list python-pytest
33644 python-setuptools))
33645 (propagated-inputs
33646 (list python-cons
33647 python-etuples
33648 python-logical-unification
33649 python-multipledispatch
33650 python-toolz
33651 python-typing-extensions))
33652 (home-page "https://github.com/pythological/kanren")
33653 (synopsis "Relational logic programming in pure Python")
33654 (description
33655 "The minikanren library provides an algorithmic core for computer algebra
33656systems in Python.")
33657 (license license:bsd-3)))
33658
33659(define-public python-dotenv
33660 (package
33661 (name "python-dotenv")
33662 (version "1.1.1")
33663 (source
33664 (origin
33665 (method url-fetch)
33666 (uri (pypi-uri "python_dotenv" version))
33667 (sha256
33668 (base32 "1aw9c5gw2gfjf7n3s7k6lb6ybz090hh60wq0daz4azr52sbkk9m8"))))
33669 (build-system pyproject-build-system)
33670 (native-inputs
33671 (list python-pytest
33672 python-setuptools
33673 python-sh))
33674 (propagated-inputs
33675 (list python-click))
33676 (home-page "https://saurabh-kumar.com/python-dotenv/")
33677 (synopsis "Setup environment variables according to .env files")
33678 (description
33679 "This package provides the @code{python-dotenv} Python module to read
33680key-value pairs from a @code{.env} file and set them as environment variables.")
33681 (license license:bsd-3)))
33682
33683;; Old version just for docker-compose; remove once that is updated.
33684(define-public python-dotenv-0.13.0
33685 (package (inherit python-dotenv)
33686 (name "python-dotenv")
33687 (version "0.13.0")
33688 (source
33689 (origin
33690 (method url-fetch)
33691 (uri (pypi-uri "python-dotenv" version))
33692 (sha256
33693 (base32
33694 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))
33695 (arguments
33696 `(#:phases
33697 (modify-phases %standard-phases
33698 (replace 'check
33699 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
33700 (when tests?
33701 (add-installed-pythonpath inputs outputs)
33702 (setenv "PATH" (string-append (getenv "PATH") ":"
33703 (assoc-ref outputs "out") "/bin"))
33704 ;; Skip the ipython tests.
33705 (delete-file "tests/test_ipython.py")
33706 (invoke "python" "-m" "pytest")))))))
33707 (native-inputs
33708 (modify-inputs (package-native-inputs python-dotenv)
33709 (append python-mock)
33710 (replace "python-sh" python-sh-1)))))
33711
33712(define-public python-braintree
33713 (package
33714 (name "python-braintree")
33715 (version "4.40.0")
33716 (source
33717 (origin
33718 (method url-fetch)
33719 (uri (pypi-uri "braintree" version))
33720 (sha256
33721 (base32 "0pjllhyx9ymad9nspaviysda4pb5cbl83c6fq4bhwl6khzyh0bkr"))))
33722 (build-system pyproject-build-system)
33723 (arguments (list #:tests? #f)) ; No tests.
33724 (native-inputs (list python-setuptools))
33725 (propagated-inputs (list python-requests))
33726 (home-page
33727 "https://developers.braintreepayments.com/python/sdk/server/overview")
33728 (synopsis "Braintree Python Library")
33729 (description
33730 "The Braintree Python SDK provides integration access to the Braintree
33731Gateway. Braintree is a US-based payments service provider.")
33732 (license license:expat)))
33733
33734(define-public python-markuppy
33735 (package
33736 (name "python-markuppy")
33737 (version "1.18")
33738 (source
33739 (origin
33740 (method git-fetch)
33741 (uri (git-reference
33742 (url "https://github.com/tylerbakke/MarkupPy")
33743 (commit (string-append "v" version))))
33744 (file-name (git-file-name name version))
33745 (sha256
33746 (base32 "0rbxh7dzrqd1xrxbxxbyjslqfaxxyv17ppr9zcjig8yw631k0a51"))))
33747 (build-system pyproject-build-system)
33748 (native-inputs (list python-pytest python-setuptools))
33749 (home-page "https://github.com/tylerbakke/MarkupPy")
33750 (synopsis "Pythonic HTML/XML generator")
33751 (description
33752 "This Python module attempts to make it easier to generate HTML/XML from
33753a Python program in an customizable and pythonic way.")
33754 (license license:expat)))
33755
33756(define-public python-csb43
33757 (package
33758 (name "python-csb43")
33759 (version "1.0.0")
33760 (source
33761 (origin
33762 (method git-fetch)
33763 (uri (git-reference
33764 (url "https://bitbucket.org/wmj/csb43")
33765 (commit version)))
33766 (file-name (git-file-name name version))
33767 (sha256
33768 (base32 "030lncdmrcvzgp8v1jw04snnplqxlwf3vikzd0a3jbk5sgrp2cih"))))
33769 (build-system pyproject-build-system)
33770 (arguments
33771 (list
33772 ;; tests: 15102 passed, 36 skipped, 5489 warnings
33773 #:phases
33774 #~(modify-phases %standard-phases
33775 (add-after 'unpack 'set-version
33776 (lambda _
33777 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
33778 (native-inputs
33779 (list python-lxml
33780 python-pytest
33781 python-setuptools
33782 python-setuptools-scm))
33783 (propagated-inputs
33784 (list python-deprecated
33785 python-pycountry
33786 python-pyyaml
33787 python-tablib))
33788 (home-page "https://bitbucket.org/wmj/csb43")
33789 (synopsis "Tools for converting from the Spanish banks' format CSB norm
3379043 (CSB43)")
33791 (description
33792 "This package provides tools to convert files in the format used by
33793multiple Spanish banks (standard 43 of the Spanish Banking Council [CSB43] /
33794Spanish Banking Association [AEB43]) to other formats.
33795
33796Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
33797spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
33798 (license license:lgpl3)))
33799
33800(define-public python-csb43-0.10
33801 ;; XXX: 1.0.0 doesn't provide csb43 module where 0.10.1 contains: aeb43, csb43,
33802 ;; homebank, i18n, ofx, and utils.
33803 (package
33804 (inherit python-csb43)
33805 (name "python-csb43")
33806 (version "0.10.1")
33807 (source
33808 (origin
33809 (method git-fetch)
33810 (uri (git-reference
33811 (url "https://bitbucket.org/wmj/csb43")
33812 (commit version)))
33813 (file-name (git-file-name name version))
33814 (sha256
33815 (base32 "0frxcclz7scpndrr7ygqy6k41bcwgwam26yk7n1cnwyim2wkaykd"))))
33816 (arguments
33817 (list
33818 ;; tests: 15493 passed, 37 skipped, 7447 warnings
33819 #:phases
33820 #~(modify-phases %standard-phases
33821 (add-after 'unpack 'set-version
33822 (lambda _
33823 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))))
33824
33825(define-public python-febelfin-coda
33826 (package
33827 (name "python-febelfin-coda")
33828 (version "0.3.0")
33829 (source
33830 (origin
33831 (method hg-fetch)
33832 (uri (hg-reference
33833 (url "https://foss.heptapod.net/tryton/coda")
33834 (changeset version)))
33835 (file-name (string-append name "-" version "-checkout"))
33836 (sha256
33837 (base32 "0rnr2xvwr174dbjixaw5h8bjw5ay5knfbry5qhk7wj8vkh538c13"))))
33838 (build-system pyproject-build-system)
33839 (arguments
33840 (list
33841 #:test-backend #~'unittest
33842 #:phases
33843 #~(modify-phases %standard-phases
33844 (add-after 'install 'remove-installed-tests
33845 (lambda* (#:key inputs outputs #:allow-other-keys)
33846 (with-directory-excursion (site-packages inputs outputs)
33847 (for-each delete-file
33848 (list "coda/test.py"
33849 "coda/test_readme.py"))))))))
33850 (native-inputs (list python-setuptools))
33851 (home-page "https://coda.b2ck.com/")
33852 (synopsis "Module to parse Belgian CODA files")
33853 (description
33854 "This package provides a module to parse Coded statement of account
33855(CODA) files as defined be the Belgian Febelfin bank standard.")
33856 (license license:bsd-3)))
33857
33858(define-public python-ofxparse
33859 (package
33860 (name "python-ofxparse")
33861 (version "0.21")
33862 (source
33863 (origin
33864 (method url-fetch)
33865 (uri (pypi-uri "ofxparse" version))
33866 (sha256
33867 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
33868 (build-system pyproject-build-system)
33869 (native-inputs (list python-pynose python-setuptools))
33870 (propagated-inputs (list python-beautifulsoup4 python-lxml python-six))
33871 (home-page "http://sites.google.com/site/ofxparse")
33872 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
33873format")
33874 (description "@code{ofxparse} is a parser for Open Financial
33875Exchange (.ofx) format files. OFX files are available from almost any online
33876banking site, so they work well if you want to pull together your finances
33877from multiple sources. Online trading accounts also often provide account
33878statements in OFX files.")
33879 (license license:expat)))
33880
33881(define-public python-rfc3339-validator
33882 (package
33883 (name "python-rfc3339-validator")
33884 (version "0.1.4")
33885 (source
33886 (origin
33887 (method url-fetch)
33888 (uri (pypi-uri "rfc3339_validator" version))
33889 (sha256
33890 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
33891 (build-system pyproject-build-system)
33892 (native-inputs
33893 (list python-pytest
33894 python-setuptools
33895 python-strict-rfc3339))
33896 (propagated-inputs
33897 (list python-six))
33898 (home-page "https://github.com/naimetti/rfc3339-validator")
33899 (synopsis "Python RFC3339 validator")
33900 (description "This package provides a pure Python RFC3339 validator.")
33901 (license license:expat)))
33902
33903(define-public python-platformdirs
33904 (package
33905 (name "python-platformdirs")
33906 (version "4.3.6")
33907 (source
33908 (origin
33909 (method url-fetch)
33910 (uri (pypi-uri "platformdirs" version))
33911 (sha256
33912 (base32 "01xrwajkmxv3jp6n14y8jndkrhb48p9kxknkmwch8nw8pjnb4zrm"))))
33913 (build-system pyproject-build-system)
33914 (native-inputs
33915 (list python-appdirs
33916 python-hatchling
33917 python-hatch-vcs
33918 python-pytest
33919 python-pytest-mock))
33920 (home-page "https://github.com/platformdirs/platformdirs")
33921 (synopsis "Determine the appropriate platform-specific directories")
33922 (description "When writing applications, finding the right location to
33923store user data and configuration varies per platform. Even for
33924single-platform apps, there may by plenty of nuances in figuring out the right
33925location. This small Python module determines the appropriate
33926platform-specific directories, e.g. the ``user data dir''.")
33927 (license license:expat)))
33928
33929(define-public python-json2html
33930 (package
33931 (name "python-json2html")
33932 (version "1.3.0")
33933 (source
33934 (origin
33935 (method git-fetch)
33936 (uri (git-reference
33937 (url "https://github.com/softvar/json2html")
33938 (commit (string-append "v" version))))
33939 (file-name (git-file-name name version))
33940 (sha256
33941 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
33942 (build-system pyproject-build-system)
33943 (arguments
33944 (list
33945 #:test-backend #~'custom
33946 #:test-flags #~(list "test/run_tests.py")))
33947 (native-inputs (list python-setuptools))
33948 (home-page "https://github.com/softvar/json2html")
33949 (synopsis "Convert JSON to HTML table")
33950 (description
33951 "@code{python-json2html} is a python module to convert JSON into a human
33952readable HTML table representation.")
33953 (license license:expat)))
33954
33955(define-public python-face
33956 (package
33957 (name "python-face")
33958 (version "24.0.0")
33959 (source
33960 (origin
33961 (method git-fetch)
33962 (uri (git-reference
33963 (url "https://github.com/mahmoud/face")
33964 (commit (string-append "v" version))))
33965 (file-name (git-file-name name version))
33966 (sha256
33967 (base32 "1ps34r3w93rrviwj8xq7ji9l2z301zzny2gx6nrwvgxr8h6bv0kp"))))
33968 (build-system pyproject-build-system)
33969 (native-inputs (list python-pytest python-setuptools))
33970 (propagated-inputs (list python-boltons))
33971 (home-page "https://github.com/mahmoud/face")
33972 (synopsis "CLI parsing and dispatching microframework")
33973 (description "@code{python-face} is a Pythonic microframework for building
33974command-line applications.
33975
33976@itemize
33977@item First-class subcommand support
33978@item Powerful middleware architecture
33979@item Separate parser layer
33980@item Built-in flagfile support
33981@item Handy testing utilities
33982@item Themeable help display
33983@end itemize")
33984 (license license:bsd-3)))
33985
33986(define-public python-glom
33987 (package
33988 (name "python-glom")
33989 (version "24.11.0")
33990 (source
33991 (origin
33992 (method git-fetch)
33993 (uri (git-reference
33994 (url "https://github.com/mahmoud/glom")
33995 (commit (string-append "v" version))))
33996 (file-name (git-file-name name version))
33997 (sha256
33998 (base32 "0vjj6wjxzms947nvbxrlz2cyn0m6483p1laqvcwr8fc117nzary0"))))
33999 (build-system pyproject-build-system)
34000 (native-inputs
34001 (list python-pytest
34002 python-pyyaml
34003 python-setuptools))
34004 (propagated-inputs
34005 (list python-attrs
34006 python-boltons
34007 python-face))
34008 (home-page "https://github.com/mahmoud/glom")
34009 (synopsis "Declaratively restructure data")
34010 (description "Real applications have real data, and real data
34011nests---objects inside of objects inside of lists of objects. glom is a new
34012and powerful way to handle real-world data, featuring:
34013
34014@itemize
34015@item Path-based access to nested data structures
34016@item Readable, meaningful error messages
34017@item Declarative data transformation, using lightweight, Pythonic specifications
34018@item Built-in data exploration and debugging features
34019@end itemize")
34020 (license license:bsd-3)))
34021
34022(define-public python-box
34023 (package
34024 (name "python-box")
34025 (version "7.3.2")
34026 (source
34027 (origin
34028 (method git-fetch)
34029 (uri
34030 (git-reference
34031 (url "https://github.com/cdgriffith/Box")
34032 (commit version)))
34033 (file-name (git-file-name name version))
34034 (sha256
34035 (base32 "0nr8cajrhdwxm3ac5gclajqck7xywlpqnwvff072va5ki0if6lv9"))))
34036 (build-system pyproject-build-system)
34037 (arguments
34038 (list #:test-flags #~(list "-k" "not test_to_yaml_ruamel")))
34039 (native-inputs
34040 (list python-pytest
34041 python-setuptools))
34042 (propagated-inputs
34043 (list python-msgpack
34044 python-ruamel.yaml
34045 python-tomli-w))
34046 (home-page "https://github.com/cdgriffith/Box")
34047 (synopsis "Advanced Python dictionaries with dot notation access")
34048 (description
34049 "This package provides the @code{python-box} Python module.
34050It implements advanced Python dictionaries with dot notation access.")
34051 (license license:expat)))
34052
34053(define-public python-fields
34054 (let ((commit "cb473d126b926621c4423ecf59387da9f0f26563")
34055 (revision "0"))
34056 (package
34057 (name "python-fields")
34058 (version (git-version "5.0.0" revision commit))
34059 (source
34060 (origin
34061 (method git-fetch)
34062 (uri (git-reference
34063 (url "https://github.com/ionelmc/python-fields")
34064 (commit commit)))
34065 (file-name (git-file-name name version))
34066 (sha256
34067 (base32 "1hc39l7ypwn4n11wfdhr8z0m46c96k99lnvw65bw8yadm2f93s9r"))))
34068 (build-system pyproject-build-system)
34069 (arguments
34070 (list #:test-flags #~(list "--ignore=tests/test_perf.py")))
34071 (native-inputs (list python-pytest
34072 python-pytest-benchmark
34073 python-setuptools
34074 python-wheel))
34075 (home-page "https://python-fields.readthedocs.io/")
34076 (synopsis "Python container class boilerplate killer")
34077 (description "Avoid repetetive boilerplate code in Python classes.")
34078 (license license:bsd-3))))
34079
34080(define-public python-aspectlib
34081 (package
34082 (name "python-aspectlib")
34083 (version "1.5.2")
34084 (source
34085 (origin
34086 (method git-fetch)
34087 (uri (git-reference
34088 (url "https://github.com/ionelmc/python-aspectlib")
34089 (commit (string-append "v" version))))
34090 (file-name (git-file-name name version))
34091 (sha256
34092 (base32 "1mfhflg33684gkp6ckkywshn4xa3vqaia521kcagaxgr3xm6c9pv"))))
34093 (build-system pyproject-build-system)
34094 (arguments
34095 (list
34096 #:test-flags
34097 #~(list ;; XXX: Require more dependencies.
34098 "--ignore=tests/test_integrations.py"
34099 "--ignore=tests/test_integrations_py3.py"
34100 ;; XXX: Unimportant warning errors.
34101 "-k" (string-append "not test_story_empty_play_proxy_class"
34102 " and not test_story_half_play_proxy_class"))))
34103 (native-inputs (list python-pytest python-setuptools python-tornado python-wheel))
34104 (propagated-inputs (list python-fields))
34105 (home-page "https://github.com/ionelmc/python-aspectlib")
34106 (synopsis "Python monkey-patching and decorators")
34107 (description
34108 "This package provides an aspect-oriented programming, monkey-patch
34109and decorators library. It is useful when changing behavior in existing
34110code is desired. It includes tools for debugging and testing:
34111simple mock/record and a complete capture/replay framework.")
34112 (license license:bsd-2)))
34113
34114(define-public python-ijson
34115 (package
34116 (name "python-ijson")
34117 (version "3.1.4")
34118 (source
34119 (origin
34120 (method url-fetch)
34121 (uri (pypi-uri "ijson" version))
34122 (sha256
34123 (base32 "1sp463ywj4jv5cp6hsv2qwiima30d09xsabxb2dyq5b17jp0640x"))))
34124 (inputs
34125 ;; yajl is optional, but compiling with it makes faster
34126 ;; backends available to ijson:
34127 (list yajl))
34128 (native-inputs
34129 (list python-pytest
34130 python-setuptools
34131 python-wheel))
34132 (build-system pyproject-build-system)
34133 (home-page "https://github.com/ICRAR/ijson")
34134 (synopsis "Iterative JSON parser with Python iterator interfaces")
34135 (description
34136 "Ijson is an iterative JSON parser with standard Python iterator
34137interfaces.")
34138 (license license:bsd-3)))
34139
34140(define-public python-ordered-set
34141 (package
34142 (name "python-ordered-set")
34143 (version "4.1.0")
34144 (source
34145 (origin
34146 (method url-fetch)
34147 (uri (pypi-uri "ordered-set" version))
34148 (sha256
34149 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
34150 (build-system pyproject-build-system)
34151 (native-inputs (list python-cython python-flit-core python-pytest))
34152 (home-page "https://github.com/simonpercivall/orderedset")
34153 (synopsis "Ordered Set implementation in Cython")
34154 (description "This library provides an @code{OrderedSet} data type that
34155works like a regular set, but remembers insertion order. It supports the full
34156Python @code{set} interface.")
34157 (license license:asl2.0)))
34158
34159(define-public python-orgparse
34160 (package
34161 (name "python-orgparse")
34162 (version "0.4.20251020")
34163 (source
34164 (origin
34165 (method git-fetch)
34166 (uri (git-reference
34167 (url "https://github.com/karlicoss/orgparse")
34168 (commit (string-append "v" version))))
34169 (file-name (git-file-name name version))
34170 (sha256
34171 (base32 "0f390gxx5pjpjjbmll0gdlqg92s3d4xi6p8wjkr0cfixa8fvb7s4"))))
34172 (build-system pyproject-build-system)
34173 (arguments
34174 (list
34175 #:test-flags
34176 #~(list "--ignore-glob=doc/*"
34177 ;; XXX: Unclear why those tests fail.
34178 "--deselect=src/orgparse/tests/test_data.py::test_data[01_attributes]"
34179 "--deselect=src/orgparse/tests/test_data.py::test_data[03_repeated_tasks]"
34180 "--deselect=src/orgparse/tests/test_data.py::test_data[04_logbook]"
34181 "--deselect=src/orgparse/tests/test_misc.py::test_level_0_timestamps")
34182 #:phases
34183 #~(modify-phases %standard-phases
34184 (add-after 'unpack 'set-version
34185 (lambda _
34186 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
34187 #$version))))))
34188 (native-inputs (list python-hatchling python-hatch-vcs python-pytest))
34189 (home-page "https://github.com/karlicoss/orgparse")
34190 (synopsis "Emacs Org mode parser in Python")
34191 (description
34192 "This package is a Python module for reading Emacs Org mode files.")
34193 (license license:bsd-3)))
34194
34195(define-public dynaconf
34196 (package
34197 (name "dynaconf")
34198 (version "3.2.11")
34199 (source
34200 (origin
34201 (method git-fetch)
34202 (uri
34203 (git-reference
34204 (url "https://github.com/dynaconf/dynaconf")
34205 (commit version)))
34206 (file-name (git-file-name name version))
34207 (sha256
34208 (base32 "05122x1bwskfqnzi9hqi86h7407byfjvhgczj74x6lp2m6rnwkzl"))
34209 ;; (patches (search-patches "dynaconf-unvendor-deps.patch"))
34210 (modules '((guix build utils)))
34211 ;; Remove vendored dependencies
34212 (snippet
34213 #~(let ((unvendor '("click" "ruamel" "toml")))
34214 (with-directory-excursion "dynaconf/vendor"
34215 (for-each delete-file-recursively unvendor))
34216 (substitute* (find-files "." "\\.py$")
34217 (("from dynaconf\\.vendor import (click|ruamel|toml)([^l]+.*)$"
34218 _ target rest)
34219 (string-append "import " target rest))
34220 (("dynaconf\\.vendor\\.(click|ruamel|toml)" _ target)
34221 target))))))
34222 (build-system pyproject-build-system)
34223 (arguments
34224 (list
34225 #:test-flags
34226 #~(list "--ignore=tests/test_vault.py" ; depend on hvac and a live Vault
34227 "-k" #$(let ((click-tests '("test_negative_get"
34228 "test_not_found_key_exit_error[get]"
34229 "test_inspect_invalid_format")))
34230 ;; Disable integration tests
34231 (string-append "not integration and not "
34232 ;; These tests fail because we use
34233 ;; Click 8.* instead of Click 7
34234 (string-join click-tests " and not ")))
34235 "tests")
34236 #:phases
34237 #~(modify-phases %standard-phases
34238 (add-after 'unpack 'patch-for-click-8
34239 (lambda _
34240 (substitute* "dynaconf/cli.py"
34241 (("click.get_os_args\\()") ;deprecated from Click 8.1+
34242 "sys.argv[1:]")))))))
34243 (propagated-inputs
34244 (list python-click python-configobj python-ruamel.yaml-0.16
34245 python-toml python-tomli))
34246 (native-inputs
34247 (list python-django python-flask python-pytest python-pytest-cov
34248 python-pytest-mock python-setuptools))
34249 (home-page "https://www.dynaconf.com/")
34250 (synopsis "The dynamic configurator for your Python project")
34251 (description
34252 "This package provides @code{dynaconf} the dynamic configurator manager for
34253your Python project. It provides features such as:
34254
34255@itemize
34256@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
34257@item Settings management (default values, validation, parsing, templating);
34258@item Protection of sensitive information (passwords/tokens);
34259@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
34260loaders;
34261@item Full support for environment variables to override existing settings
34262(dotenv support included);
34263@item Optional layered system for multiple environments @code{[default,
34264development, testing, production]};
34265@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
34266@item Built-in extensions for Django and Flask web frameworks;
34267@item CLI for common operations such as @code{init, list, write, validate, export}.
34268@end itemize")
34269 (license license:expat)))
34270
34271(define-public python-pudb
34272 ;; TODO: Rename to pudb as it's a final program.
34273 (package
34274 (name "python-pudb")
34275 (version "2025.1.3")
34276 (source
34277 (origin
34278 (method url-fetch)
34279 (uri (pypi-uri "pudb" version))
34280 (sha256
34281 (base32 "1x210l6wxpn7k8jbca7ahzgsld938cnb6jlg3nrq8vr6xza75zb9"))))
34282 (build-system pyproject-build-system)
34283 (arguments
34284 (list
34285 #:phases
34286 #~(modify-phases %standard-phases
34287 (add-before 'check 'pre-check
34288 (lambda _
34289 (setenv "HOME" "/tmp"))))))
34290 (native-inputs
34291 (list python-hatchling
34292 python-pytest
34293 python-pytest-mock
34294 python-numpy))
34295 (propagated-inputs
34296 (list python-jedi
34297 python-packaging
34298 python-pygments
34299 python-typing-extensions
34300 python-urwid
34301 python-urwid-readline))
34302 (home-page "https://documen.tician.de/pudb/")
34303 (synopsis "Console-based Python debugger")
34304 (description
34305 "@command{pudb} is a full-screen, console-based Python debugger providing
34306all the niceties of modern GUI-based debuggers in a more lightweight and
34307keyboard-friendly package.")
34308 (license license:expat)))
34309
34310(define-deprecated-package pudb
34311 python-pudb)
34312
34313(define-public python-iwlib
34314 (package
34315 (name "python-iwlib")
34316 (version "1.7.0")
34317 (source
34318 (origin
34319 (method git-fetch)
34320 (uri (git-reference
34321 (url "https://github.com/nhoad/python-iwlib")
34322 (commit version)))
34323 (file-name (git-file-name name version))
34324 (sha256
34325 (base32 "0z6bgmzxf849irayzshiw3bvvhrr8j0il6113937x7fdam122gmr"))))
34326 (build-system pyproject-build-system)
34327 (arguments
34328 (list
34329 #:phases
34330 #~(modify-phases %standard-phases
34331 (add-before 'check 'cleanup
34332 (lambda _
34333 (delete-file-recursively "iwlib"))))))
34334 (native-inputs (list python-pytest python-setuptools))
34335 (inputs (list wireless-tools))
34336 (propagated-inputs (list python-cffi))
34337 (home-page "https://github.com/nhoad/python-iwlib")
34338 (synopsis "Python module to interface with iwlib")
34339 (description
34340 "This package provides a Python interface to iw wireless tools.")
34341 (license license:gpl2)))
34342
34343(define-public python-pdoc3
34344 (package
34345 (name "python-pdoc3")
34346 (version "0.11.6")
34347 (source
34348 (origin
34349 (method url-fetch)
34350 (uri (pypi-uri "pdoc3" version))
34351 (sha256
34352 (base32 "11z318lnvd7nxkpw2556hh6hvid6gi8mxgv4zf8x2m57hx5yi98y"))))
34353 (build-system pyproject-build-system)
34354 (arguments
34355 (list #:test-backend #~'unittest
34356 #:test-flags #~(list "-v" "pdoc.test")))
34357 (native-inputs
34358 (list python-setuptools-git
34359 python-setuptools
34360 python-setuptools-scm))
34361 (propagated-inputs
34362 (list python-mako
34363 python-markdown))
34364 (home-page "https://pdoc3.github.io/pdoc/")
34365 (synopsis "Auto-generate API documentation for Python projects")
34366 (description
34367 "This package auto-generates API documentation from Python projects
34368already existing modules and objects docstrings.")
34369 (license license:agpl3+)))
34370
34371(define-public python-piexif
34372 (package
34373 (name "python-piexif")
34374 (version "1.1.3")
34375 (source
34376 (origin
34377 (method git-fetch)
34378 (uri (git-reference
34379 (url "https://github.com/hMatoba/Piexif")
34380 (commit version)))
34381 (file-name (git-file-name name version))
34382 (sha256
34383 (base32 "1akmaxq1cjr8wghwaaql1bd3sajl8psshl58lprgfsigrvnklp8b"))
34384 (patches
34385 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
34386 (build-system pyproject-build-system)
34387 (native-inputs (list unzip python-pillow python-pytest python-setuptools))
34388 (home-page "https://github.com/hMatoba/Piexif")
34389 (synopsis "Simplify exif manipulations with Python")
34390 (description
34391 "Piexif simplifies interacting with EXIF data in Python. It includes the
34392tools necessary for extracting, creating, manipulating, converting and writing
34393EXIF data to JPEG, WebP and TIFF files.")
34394 (license license:expat)))
34395
34396(define-public python-pyrss2gen
34397 (package
34398 (name "python-pyrss2gen")
34399 (version "1.1")
34400 (source
34401 (origin
34402 (method url-fetch)
34403 (uri (pypi-uri "PyRSS2Gen" version))
34404 (sha256
34405 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
34406 (build-system pyproject-build-system)
34407 (arguments (list #:tests? #f)) ; No tests.
34408 (native-inputs (list python-setuptools))
34409 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
34410 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
34411 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
34412PyRSS2Gen builds the feed up by using a XML generator.")
34413 (license license:bsd-3)))
34414
34415(define-public python-doit
34416 (package
34417 (name "python-doit")
34418 (version "0.36.0")
34419 (source
34420 (origin
34421 (method url-fetch)
34422 (uri (pypi-uri "doit" version))
34423 (sha256
34424 (base32 "1g1lwaxb9q3a6c24sr3gw5bspsk5frbrk2frb7z25jqljp67rl3i"))))
34425 (build-system pyproject-build-system)
34426 ;; This is not a serious test failure. It's probably due to the load path
34427 ;; at test time.
34428 (arguments (list #:test-flags '(list "-k" "not test_execute")))
34429 (propagated-inputs
34430 (list python-cloudpickle python-importlib-metadata))
34431 (native-inputs (list python-pytest python-setuptools python-wheel))
34432 (home-page "https://pydoit.org")
34433 (synopsis "Automation tool to execute any kind of task in a build-tools
34434fashion")
34435 (description "doit is an automation tool that brings the power of
34436build-tools to execute any kind of task.
34437
34438A task describes some computation to be done (actions), and contains some
34439extra meta-data. The actions can be external programs or Python functions. A
34440single task may define more than one action. doit uses the task’s meta-data
34441to:
34442
34443@itemize
34444@item cache task results
34445@item correct execution order
34446@item parallel execution
34447@item powerful dependency system
34448@end itemize")
34449 (license license:expat)))
34450
34451(define-public python-phpserialize
34452 (package
34453 (name "python-phpserialize")
34454 (version "1.3")
34455 (source
34456 (origin
34457 (method git-fetch)
34458 (uri (git-reference
34459 (url "https://github.com/mitsuhiko/phpserialize")
34460 (commit version)))
34461 (file-name (git-file-name name version))
34462 (sha256
34463 (base32 "062lpv2zpkn96v8gpskvw2pfgh3mafnb0s6xxa0jwbr7vz78wgdr"))))
34464 (build-system pyproject-build-system)
34465 (arguments
34466 (list
34467 #:test-backend #~'unittest
34468 ;; XXX: Unclear why this test fails.
34469 #:test-flags #~(list "-k" "not test_dumps_dict")))
34470 (native-inputs (list python-setuptools))
34471 (home-page "https://github.com/mitsuhiko/phpserialize")
34472 (synopsis "Python port of the serialize and unserialize functions of PHP")
34473 (description
34474 "This package provides a port of the @code{serialize} and
34475@code{unserialize} functions of PHP for Python.")
34476 (license license:bsd-3)))
34477
34478(define-public python-pydevtool
34479 (package
34480 (name "python-pydevtool")
34481 (version "0.3.0")
34482 (source
34483 (origin
34484 (method url-fetch)
34485 (uri (pypi-uri "pydevtool" version))
34486 (sha256
34487 (base32 "12pwhvvm4pgvfxj18ylb66drxm28b2cpb5rbxqrsrk1k7m7vmqr5"))))
34488 (build-system pyproject-build-system)
34489 (arguments (list #:tests? #false)) ;no tests
34490 (propagated-inputs (list python-doit python-rich-click))
34491 (native-inputs (list python-setuptools python-wheel))
34492 (home-page "https://github.com/pydoit/pydevtool")
34493 (synopsis "CLI dev tools powered by pydoit")
34494 (description "This package provides command line tools, powered by pydoit.
34495It offers integration with @code{click} and @code{rich} for custom CLI and
34496these linters: @code{pycodestlye}, @code{pyflakes}")
34497 (license license:expat)))
34498
34499(define-public nikola
34500 (package
34501 (name "nikola")
34502 (version "8.3.3")
34503 (source
34504 (origin
34505 (method url-fetch)
34506 (uri (pypi-uri "nikola" version))
34507 (sha256
34508 (base32 "1ixi7bhcmyl6nxh4psjkj4q4wq5midgnks294r64zciazippsvb3"))))
34509 (build-system pyproject-build-system)
34510 (arguments
34511 (list
34512 ;; tests: 506 passed, 16 skipped, 10 deselected, 5 xfailed, 66 warnings
34513 #:test-flags
34514 #~(list "--durations=10"
34515 "--ignore=tests/integration/test_dev_server.py"
34516 "-k" (string-join
34517 ;; Some time difference in example tests.
34518 (list "not test_serves_root_dir[http://example.org/deep/down/a/rabbit/hole]"
34519 "test_serves_root_dir[https://example.org:1234/blog]"
34520 "test_serves_root_dir[https://example.org:3456/blog/]"
34521 "test_serves_root_dir[https://example.org]"
34522 ;; AssertionError: Calls not found.
34523 "test_write_content_does_not_detroy_text"
34524 ;; AssertionError: assert 'January 10, 2006,
34525 ;; 12:34:56\u202fPM -0500' == 'January 10, 2006,
34526 ;; 12:34:56\u202fPM EST'
34527 "test_format_date_timezone")
34528 " and not "))
34529 #:phases
34530 #~(modify-phases %standard-phases
34531 (add-after 'unpack 'fix-pytest-config
34532 (lambda _
34533 ;; Drop test coverage requirements.
34534 (substitute* "pyproject.toml"
34535 (("addopts.*") "")))))))
34536 (native-inputs
34537 (list nss-certs-for-test
34538 python-feedparser
34539 python-freezegun
34540 python-pytest
34541 python-setuptools))
34542 (inputs
34543 (list python-babel
34544 python-blinker
34545 python-dateutil
34546 python-docutils
34547 python-doit
34548 python-jinja2 ;; for themes
34549 python-lxml
34550 python-mako
34551 python-markdown
34552 python-natsort
34553 python-notebook ;; for ipynb
34554 python-phpserialize ;; for wordpress import
34555 python-piexif
34556 python-pillow
34557 python-pygments
34558 python-pyrss2gen
34559 python-requests
34560 python-ruamel.yaml ;; for YAML metadata
34561 python-toml
34562 python-unidecode
34563 python-yapsy))
34564 (home-page "https://getnikola.com/")
34565 (synopsis "Modular, fast and simple static website and blog generator")
34566 (description "Nikola generates static websites and blogs. Out of the box,
34567it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
34568and has plugins for many other formats.")
34569 (license license:expat)))
34570
34571(define-public nbss-upload
34572 (package
34573 (name "nbss-upload")
34574 (version "0.1")
34575 (source
34576 (origin
34577 (method git-fetch)
34578 (uri (git-reference
34579 (url "https://github.com/notebook-sharing-space/nbss-upload")
34580 (commit (string-append "v" version))))
34581 (file-name (git-file-name name version))
34582 (sha256
34583 (base32 "0cxj4zqcxzi3c5kw649jxmdpnbyrkrwx4licxdg6zc317v8gxw54"))))
34584 (build-system pyproject-build-system)
34585 (arguments (list #:tests? #f)) ;no tests
34586 (native-inputs (list python-setuptools))
34587 (propagated-inputs (list python-requests))
34588 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
34589 (synopsis "Upload notebooks to a notebooksharing.space instance")
34590 (description
34591 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
34592notebooksharing.space instance.")
34593 (license license:bsd-3)))
34594
34595(define-public python-reedsolo
34596 (package
34597 (name "python-reedsolo")
34598 (version "1.7.0")
34599 (source
34600 (origin
34601 (method git-fetch)
34602 (uri (git-reference
34603 (url "https://github.com/tomerfiliba/reedsolomon")
34604 (commit (string-append "v" version))))
34605 (file-name (git-file-name name version))
34606 (sha256
34607 (base32 "078f02cal1nn53v10spx141hd5hi22a3xxrz1j32f7cph7b46dwz"))))
34608 (build-system pyproject-build-system)
34609 (native-inputs (list python-pytest python-setuptools))
34610 (home-page "https://github.com/tomerfiliba/reedsolomon")
34611 (synopsis "Pure-Python Reed Solomon encoder/decoder")
34612 (description
34613 "A pure-python universal errors-and-erasures Reed-Solomon Codec, based on
34614the tutorial at Wikiversity. This is a burst-type implementation, so that it
34615supports any Galois field higher than 2^3, but not binary streams.")
34616 (license license:public-domain)))
34617
34618(define-public python-esprima
34619 (package
34620 (name "python-esprima")
34621 (version "4.0.1")
34622 (source
34623 (origin
34624 (method git-fetch)
34625 (uri (git-reference
34626 (url "https://github.com/Kronuz/esprima-python")
34627 (commit (string-append "v" version))))
34628 (file-name (git-file-name name version))
34629 (sha256
34630 (base32 "0yk80j63mds4qvdjk79yp6a831vl5kc17cwkxamir1wp2w4hznas"))))
34631 (build-system pyproject-build-system)
34632 (arguments
34633 (list
34634 ;; XXX: pytest fails to collect tests, and a few tests are failing
34635 ;; using unittest backend. In particular, offsets with math characters
34636 ;; and uncompiled regexps.
34637 #:tests? #f
34638 #:test-backend #~'unittest
34639 #:test-flags
34640 #~(list "-k"
34641 (string-join (list
34642 ;; XXX: Character offsets with maths.
34643 "not test_math_alef"
34644 "test_math_dal_part"
34645 "test_math_kaf_lam"
34646 "test_math_zain_start"
34647 ;; XXX: Uncompiled regexps.
34648 "test_yield_arg_regexp1"
34649 "test_yield_arg_regexp2"
34650 "test_migrated_0005_source"
34651 "test_u_flag_valid_range"
34652 "test_migrated_0049"
34653 "test_migrated_0050_source")
34654 " and not "))))
34655 (native-inputs (list python-setuptools))
34656 (home-page "https://github.com/Kronuz/esprima-python")
34657 (synopsis "ECMAScript parsing infrastructure for analysis in Python")
34658 (description
34659 "This package provides ECMAScript parsing infrastructure for
34660multipurpose analysis in Python.")
34661 (license license:bsd-3)))
34662
34663(define-public python-psycopg2-binary
34664 (package
34665 (name "python-psycopg2-binary")
34666 (version "2.9.10")
34667 (source
34668 (origin
34669 (method url-fetch)
34670 (uri (pypi-uri "psycopg2-binary" version))
34671 (sha256
34672 (base32 "1qkdl21agnifabk508py6m0q4ggixx13k63xlp6qma8ak7kg0gab"))))
34673 (build-system pyproject-build-system)
34674 (arguments
34675 ;; Tests are disable because they need a live instance of PostgreSQL.
34676 '(#:tests? #f))
34677 (native-inputs (list python-setuptools python-wheel))
34678 (inputs (list postgresql))
34679 (home-page "https://psycopg.org/")
34680 (synopsis "PostgreSQL database adapter for Python")
34681 (description
34682 "Psycopg is a PostgreSQL database adapter for the Python programming
34683language. Its main features are the complete implementation of the Python DB
34684API 2.0 specification and the thread safety (several threads can share the
34685same connection). It was designed for heavily multi-threaded applications
34686that create and destroy lots of cursors and make a large number of concurrent
34687@code{INSERT}s or @code{UPDATE}s.
34688
34689Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
34690being both efficient and secure. It features client-side and
34691server-side cursors, asynchronous communication and notifications,
34692@code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
34693out-of-the-box and adapted to matching PostgreSQL data types;
34694adaptation can be extended and customized thanks to a flexible objects
34695adaptation system.
34696
34697Psycopg 2 is both Unicode and Python 3 friendly.")
34698 (license license:lgpl3+)))
34699
34700(define-public python-pyfuse3
34701 (package
34702 (name "python-pyfuse3")
34703 (version "3.4.1")
34704 (source
34705 (origin
34706 (method url-fetch)
34707 (uri (pypi-uri "pyfuse3" version))
34708 (sha256
34709 (base32 "02cjnkhn6rf19bcp5g6spq59fhdg8izhwv2jgxgbvkabjigrqbv0"))))
34710 (build-system pyproject-build-system)
34711 (arguments
34712 (list
34713 #:test-flags
34714 ;; FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin'
34715 #~(list "--deselect=test/test_api.py::test_listdir")))
34716 (native-inputs
34717 (list pkg-config
34718 python-cython
34719 python-pytest
34720 python-setuptools
34721 python-setuptools-scm))
34722 (inputs
34723 (list fuse))
34724 (propagated-inputs
34725 (list python-trio))
34726 (home-page "https://github.com/libfuse/pyfuse3")
34727 (synopsis "Python bindings to FUSE 3")
34728 (description "This package provides Python 3 bindings for libfuse 3 with
34729async I/O support.")
34730 (license license:gpl2+)))
34731
34732(define-public python-ansicolors
34733 ;; XXX: Not maintained fork since 2017, consider to remove when there is no
34734 ;; any users.
34735 (package
34736 (name "python-ansicolors")
34737 (version "1.1.8")
34738 (source
34739 (origin
34740 (method url-fetch)
34741 (uri (pypi-uri "ansicolors" version ".zip"))
34742 (sha256
34743 (base32 "1q3jqglkq4z0f6nkkn8bswcwqg012i2grrc27kabr8286dg4zycr"))))
34744 (build-system pyproject-build-system)
34745 (native-inputs
34746 (list python-pytest python-setuptools unzip))
34747 (home-page "https://github.com/jonathaneunice/colors/")
34748 (synopsis "ANSI colors for Python")
34749 (description
34750 "This package adds ANSI colors and decorations to your strings.")
34751 (license license:isc)))
34752
34753(define-public python-multipart
34754 (package
34755 (name "python-multipart")
34756 (version "0.0.20")
34757 (source (origin
34758 (method url-fetch)
34759 (uri (pypi-uri "python_multipart" version))
34760 (sha256
34761 (base32
34762 "04wxzakk3hs4z4xf3ldhym3gm46hjicn4iwiw150c8wfbfscml4d"))))
34763 (build-system pyproject-build-system)
34764 (native-inputs
34765 (list python-hatchling
34766 python-pytest
34767 python-pytest-cov
34768 python-pyyaml))
34769 (home-page "https://github.com/andrew-d/python-multipart")
34770 (synopsis "Streaming multipart parser for Python")
34771 (description
34772 "This package provides a streaming multipart parser for Python.")
34773 (license license:asl2.0)))
34774
34775(define-public python-aiopg
34776 (package
34777 (name "python-aiopg")
34778 (version "1.4.0")
34779 (source (origin
34780 (method url-fetch)
34781 (uri (pypi-uri "aiopg" version))
34782 (sha256
34783 (base32
34784 "0wcxcfazjsknr7hv46374rzh7502k8g1hvbi2r0rakbbz2z56qhi"))))
34785 (build-system pyproject-build-system)
34786 (arguments
34787 (list #:tests? #f)) ;they need Docker
34788 (native-inputs
34789 (list python-setuptools
34790 python-sqlalchemy))
34791 (propagated-inputs
34792 (list python-async-timeout-4
34793 python-psycopg2-binary))
34794 (home-page "https://aiopg.readthedocs.io")
34795 (synopsis "Postgres integration with asyncio")
34796 (description
34797 "aiopg is a library for accessing a PostgreSQL database from the
34798asyncio (PEP-3156/tulip) framework. It wraps asynchronous
34799features of the Psycopg database driver.")
34800 (license license:bsd-3)))
34801
34802(define-public python-shtab
34803 (package
34804 (name "python-shtab")
34805 (version "1.7.1")
34806 (source
34807 (origin
34808 (method url-fetch)
34809 (uri (pypi-uri "shtab" version))
34810 (sha256
34811 (base32 "0g14778c5zgiq6b92k40n9irp75c5vcsvl5541cw8bmqxq1cnjsf"))))
34812 (build-system pyproject-build-system)
34813 (native-inputs
34814 (list bash
34815 python-pytest
34816 python-pytest-cov
34817 python-pytest-timeout
34818 python-setuptools
34819 python-setuptools-scm
34820 python-wheel))
34821 (home-page "https://github.com/iterative/shtab")
34822 (synopsis "Automagic shell tab completion for Python CLI applications")
34823 (description
34824 "This package automatically generates shell tab completion scripts for
34825Python CLI apps.")
34826 (license license:asl2.0)))
34827
34828(define-public python-pyperf
34829 (package
34830 (name "python-pyperf")
34831 (version "2.3.1")
34832 (source
34833 (origin
34834 (method url-fetch)
34835 (uri (pypi-uri "pyperf" version))
34836 (sha256
34837 (base32 "189qf9wdbig0fk4n3bavx8acgdbay5lllfvw48jvbfaafb7y5hja"))))
34838 (build-system pyproject-build-system)
34839 (arguments
34840 (list
34841 #:test-flags
34842 #~(list "--ignore=pyperf/tests/test_examples.py")))
34843 (native-inputs (list python-psutil python-pytest python-setuptools
34844 python-wheel))
34845 (home-page "https://github.com/psf/pyperf")
34846 (synopsis "Toolkit for running Python benchmarks")
34847 (description
34848 "The Python @code{pyperf} module is a toolkit for writing, running and
34849analyzing benchmarks. It features a simple API that can:
34850
34851@itemize
34852@item automatically calibrate a benchmark for a time budget;
34853@item spawn multiple worker processes;
34854@item compute the mean and standard deviation;
34855@item detect if a benchmark result seems unstable;
34856@item store benchmark results in JSON format;
34857@item support multiple units: seconds, bytes and integer.
34858@end itemize")
34859 (license license:expat)))
34860
34861(define-public python-pydispatcher
34862 (package
34863 (name "python-pydispatcher")
34864 (version "2.0.7")
34865 (source
34866 (origin
34867 (method url-fetch)
34868 (uri (pypi-uri "PyDispatcher" version))
34869 (sha256
34870 (base32 "0cdyymidxkzvcq6lpybhmh0ngyhld6jdcaac9bbvmh8d12nwcxxp"))))
34871 (build-system pyproject-build-system)
34872 (native-inputs (list python-pytest python-setuptools))
34873 (home-page "https://pydispatcher.sourceforge.net")
34874 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
34875 (description
34876 "PyDispatcher is an enhanced version of Patrick K. O’Brien’s original
34877@code{dispatcher.py} module. It provides the Python programmer with a robust
34878mechanism for event routing within various application contexts.
34879
34880Included in the package are the robustapply and saferef modules, which
34881provide the ability to selectively apply arguments to callable objects
34882and to reference instance methods using weak-references.")
34883 (license license:bsd-3)))
34884
34885(define-public python-pyee
34886 (package
34887 (name "python-pyee")
34888 (version "13.0.0")
34889 (source
34890 (origin
34891 (method git-fetch)
34892 (uri (git-reference
34893 (url "https://github.com/jfhbrook/pyee")
34894 (commit (string-append "v" version))))
34895 (file-name (git-file-name name version))
34896 (sha256
34897 (base32 "10xfkf5yvkfyf9ccm0k88gjhqv00hcsal33p937a1lijmxqbx398"))))
34898 (build-system pyproject-build-system)
34899 (propagated-inputs (list python-typing-extensions))
34900 (native-inputs
34901 (list python-mock
34902 python-pytest
34903 python-pytest-asyncio-0.26
34904 python-pytest-trio
34905 python-setuptools
34906 python-trio
34907 python-twisted))
34908 (home-page "https://github.com/jfhbrook/pyee")
34909 (synopsis "Emit events with Python")
34910 (description
34911 "This package provides a port of node.js's EventEmitter to
34912python. Additionally, it includes a number of subclasses useful for
34913implementing async and threaded programming in python, such as async/await.")
34914 (license license:expat)))
34915
34916(define-public python-pypubsub
34917 (package
34918 (name "python-pypubsub")
34919 (version "4.0.3")
34920 (source
34921 (origin
34922 (method git-fetch)
34923 (uri (git-reference
34924 (url "https://github.com/schollii/pypubsub")
34925 (commit (string-append "v" version))))
34926 (file-name (git-file-name name version))
34927 (sha256
34928 (base32 "02j74w28wzmdvxkk8i561ywjgizjifq3hgcl080yj0rvkd3wivlb"))))
34929 (build-system pyproject-build-system)
34930 (arguments
34931 (list
34932 #:phases
34933 #~(modify-phases %standard-phases
34934 (replace 'check
34935 (lambda* (#:key tests? #:allow-other-keys)
34936 (when tests?
34937 (with-directory-excursion "tests/suite"
34938 (invoke "py.test"))))))))
34939 (native-inputs
34940 (list python-pytest
34941 python-setuptools
34942 python-wheel))
34943 (home-page "https://github.com/schollii/pypubsub")
34944 (synopsis "Python publish-subcribe library")
34945 (description
34946 "This library provides a publish-subscribe API to facilitate event-based
34947or message-based architecture in a single-process application. It is centered
34948on the notion of a topic - senders publish messages of a given topic, and
34949listeners subscribe to messages of a given topic, all inside the same
34950process.")
34951 (license license:bsd-2)))
34952
34953(define-public python-queuelib
34954 (package
34955 (name "python-queuelib")
34956 (version "1.8.0")
34957 (source
34958 (origin
34959 (method git-fetch)
34960 (uri (git-reference
34961 (url "https://github.com/scrapy/queuelib")
34962 (commit (string-append "v" version))))
34963 (file-name (git-file-name name version))
34964 (sha256
34965 (base32 "0rnyk200rd9vvifsx70z2d6h6gkmjmf6384d5bmnslhqircb430b"))))
34966 (build-system pyproject-build-system)
34967 (native-inputs (list python-hatchling python-pytest))
34968 (home-page "https://github.com/scrapy/queuelib")
34969 (synopsis "Collection of queues for Python")
34970 (description
34971 "Queuelib is a Python library that implements object collections which
34972are stored in memory or persisted to disk, provide a simple API, and run fast.
34973
34974Queuelib provides collections for queues (FIFO), stacks (LIFO), queues sorted
34975by priority and queues that are emptied in a round-robin fashion.")
34976 (license license:bsd-3)))
34977
34978(define-public python-posix-ipc
34979 (package
34980 (name "python-posix-ipc")
34981 (version "1.3.2")
34982 (source
34983 (origin
34984 (method git-fetch)
34985 (uri (git-reference
34986 (url "https://github.com/osvenskan/posix_ipc")
34987 (commit (string-append "rel" version))))
34988 (file-name (git-file-name name version))
34989 (sha256
34990 (base32 "0g9zhadssq01q4xcf25lq2qmn7q02p877bx0nyx3b09phgw6860j"))))
34991 (build-system pyproject-build-system)
34992 (arguments
34993 (list
34994 #:test-flags
34995 ;; XXX: Collection fails due to stdin configuration.
34996 #~(list "--ignore=tests/test_memory.py")
34997 #:phases
34998 #~(modify-phases %standard-phases
34999 (add-after 'unpack 'set-cc-path
35000 (lambda _
35001 (setenv "CC" #$(cc-for-target)))))))
35002 (native-inputs (list python-pytest python-setuptools))
35003 (home-page "https://semanchuk.com/philip/posix_ipc/")
35004 (synopsis "POSIX IPC primitives for Python")
35005 (description
35006 "This package provides POSIX IPC primitives - semaphores, shared memory and
35007message queues for Python.")
35008 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
35009
35010(define-public python-itemadapter
35011 (package
35012 (name "python-itemadapter")
35013 (version "0.12.0")
35014 (source
35015 (origin
35016 (method git-fetch)
35017 (uri (git-reference
35018 (url "https://github.com/scrapy/itemadapter")
35019 (commit (string-append "v" version))))
35020 (file-name (git-file-name name version))
35021 (sha256
35022 (base32 "1d7v5x1v8v62rs1xay2m4djdnhsydfb0lzgh8c0c1lipinrqzkfz"))))
35023 (build-system pyproject-build-system)
35024 (arguments (list #:tests? #f)) ; Circular dependency on python-scrapy.
35025 (native-inputs (list python-hatchling))
35026 (home-page "https://github.com/scrapy/itemadapter")
35027 (synopsis "Common interface for data container classes")
35028 (description
35029 "The ItemAdapter class is a wrapper for data container objects, providing
35030a common interface to handle objects of different types in an uniform manner,
35031regardless of their underlying implementation.
35032
35033Currently supported types are:
35034@itemize
35035@item scrapy.item.Item
35036@item dict
35037@item dataclass-based classes
35038@item attrs-based classes
35039@item pydantic-based classes
35040@end itemize
35041
35042Additionally, interaction with arbitrary types is supported by
35043implementing a pre-defined interface.")
35044 (license license:bsd-3)))
35045
35046(define-public python-itemloaders
35047 (package
35048 (name "python-itemloaders")
35049 (version "1.3.2")
35050 (source
35051 (origin
35052 (method url-fetch)
35053 (uri (pypi-uri "itemloaders" version))
35054 (sha256
35055 (base32 "0w37g31n06x6v6b4w7cz3nbq4wl6cv7rrzg3fr203gw3pqx5pbsg"))))
35056 (build-system pyproject-build-system)
35057 (native-inputs
35058 (list python-packaging
35059 python-pytest
35060 python-setuptools
35061 python-wheel))
35062 (propagated-inputs
35063 (list python-itemadapter python-jmespath python-parsel))
35064 (home-page "https://github.com/scrapy/itemloaders")
35065 (synopsis "Base library for scrapy's ItemLoader")
35066 (description "Itemloaders is a library that helps you collect data
35067from HTML and XML sources. It comes in handy to extract data from web
35068pages, as it supports data extraction using CSS and XPath Selectors.
35069
35070It’s specially useful when you need to standardize the data from many
35071sources. For example, it allows you to have all your casting and
35072parsing rules in a single place.")
35073 (license license:bsd-3)))
35074
35075(define-public python-iterable-io
35076 (package
35077 (name "python-iterable-io")
35078 (version "1.0.0")
35079 (source
35080 (origin
35081 (method url-fetch)
35082 (uri (pypi-uri "iterable-io" version))
35083 (sha256
35084 (base32 "0g4cn522n4dv6ly8pwf97dc62rr4f7my38v0bh6vmac7jmrip7pv"))))
35085 (build-system pyproject-build-system)
35086 (native-inputs (list python-setuptools python-pytest))
35087 (home-page "https://github.com/pR0Ps/iterable-io")
35088 (synopsis "Adapt generators and other iterables to a file-like interface")
35089 (description
35090 "@code{iterable-io} is a small Python library that provides an adapter so
35091that it's possible to read from
35092@url{https://docs.python.org/3/glossary.html#term-iterable,iterable} objects
35093in the same way as
35094@url{https://docs.python.org/3/glossary.html#term-file-object,file-like}
35095objects.")
35096 (license license:lgpl3)))
35097
35098(define-public python-iteround
35099 (package
35100 (name "python-iteround")
35101 (version "1.0.4")
35102 ;; PyPI only has wheels.
35103 (source (origin
35104 (method git-fetch)
35105 (uri (git-reference
35106 (url "https://github.com/cgdeboer/iteround")
35107 (commit (string-append "v" version))))
35108 (file-name (git-file-name name version))
35109 (sha256
35110 (base32 "1irw4sqrsgpc0ibxdv1hlx0d0jr1fqs48bj6mpfylzqkag9ywlfj"))))
35111 (build-system pyproject-build-system)
35112 (native-inputs
35113 (list python-pytest python-setuptools python-wheel))
35114 (home-page "https://github.com/cgdeboer/iteround")
35115 (synopsis "Sum-safe rounding for Iterables")
35116 (description "Iteround is a standard library sum-safe rounding library for
35117Python iterables (lists, tuples, dicts).")
35118 (license license:expat)))
35119
35120(define-public python-hypy-utils
35121 (package
35122 (name "python-hypy-utils")
35123 (version "1.0.29")
35124 (source
35125 (origin
35126 (method url-fetch)
35127 (uri (pypi-uri "hypy_utils" version))
35128 (sha256
35129 (base32 "1gf4v4gv9kr4r3prjwvcii153vwjrp7gir2mz6d1qbz6jggif8n7"))))
35130 (build-system pyproject-build-system)
35131 (arguments (list #:tests? #f)) ; No tests upstream.
35132 (native-inputs (list python-setuptools))
35133 (home-page "https://github.com/hykilpikonna/HyPyUtils")
35134 (synopsis "Python utility functions for HyDEV")
35135 (description "This module provides Python utility functions for modifying
35136and setting the color of terminal output, via HyDEV.")
35137 (license license:expat)))
35138
35139(define-public python-mike
35140 (package
35141 (name "python-mike")
35142 (version "2.1.3")
35143 (source
35144 (origin
35145 (method git-fetch) ; no tests data in PyPi package
35146 (uri (git-reference
35147 (url "https://github.com/jimporter/mike")
35148 (commit (string-append "v" version))))
35149 (file-name (git-file-name name version))
35150 (sha256
35151 (base32 "0rgmpxim91rpn8cplyi72g75fhclr40hxcpschn7rbfkqdhj8rbq"))))
35152 (build-system pyproject-build-system)
35153 (arguments
35154 (list
35155 #:test-flags
35156 ;; Most of integration tests hang or fail.
35157 #~(list "--ignore=test/integration/"
35158 ;; AttributeError: 'NoneType' object has no attribute 'group'
35159 "--ignore=test/unit/test_commands.py"
35160 "--deselect=test/unit/test_mkdocs_utils.py::TestVersion::test_version")))
35161 (native-inputs
35162 (list git-minimal/pinned
35163 python-pytest
35164 python-setuptools
35165 python-shtab
35166 python-wheel))
35167 (propagated-inputs
35168 (list python-importlib-metadata
35169 python-importlib-resources
35170 python-jinja2
35171 python-mkdocs
35172 python-pyparsing
35173 python-pyyaml
35174 python-pyyaml-env-tag
35175 python-verspec))
35176 (home-page "https://github.com/jimporter/mike")
35177 (synopsis "Manage multiple versions of MkDocs-powered documentation")
35178 (description
35179 "This package provides a Python utility to easily deploy multiple
35180versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
35181to Github via gh-pages.")
35182 (license license:bsd-3)))
35183
35184(define-public python-arpeggio
35185 (package
35186 (name "python-arpeggio")
35187 (version "2.0.2")
35188 (source
35189 (origin
35190 (method url-fetch)
35191 (uri (pypi-uri "Arpeggio" version))
35192 (sha256
35193 (base32 "00571cmdxw8w8khzscb085kfqv2hgxdzpyz4d3a2sv92dsqb5467"))))
35194 (build-system pyproject-build-system)
35195 (native-inputs
35196 (list python-pytest
35197 python-setuptools
35198 python-wheel))
35199 (home-page "https://github.com/textX/Arpeggio")
35200 (synopsis "Packrat parser interpreter for Python")
35201 (description
35202 "This Python library provides a recursive descent parser with
35203backtracking and memoization (a.k.a. packrat parser). Arpeggio grammars are
35204based on PEG formalism. Arpeggio's main use is a foundation for a toolchain
35205for DSL development but it can be used for all sorts of general purpose
35206parsing.")
35207 (license license:expat)))
35208
35209(define-public python-flatten-json
35210 ;; The latest version was not tagged on GitHub, PyPI provides no tests, use
35211 ;; the commit assosiated with 0.1.14 version.
35212 (let ((commit "900c4feebcfcd831ddb6143c4b246024ecf911ec")
35213 (revision "0"))
35214 (package
35215 (name "python-flatten-json")
35216 (version (git-version "0.1.14" revision commit))
35217 (source
35218 (origin
35219 (method git-fetch) ; no tests in PyPI release
35220 (uri (git-reference
35221 (url "https://github.com/amirziai/flatten")
35222 (commit commit)))
35223 (file-name (git-file-name name version))
35224 (sha256
35225 (base32 "1vk2ykmk4wirsywinxk9v520y6iv857bn0hsizm25s3d08v5a3sb"))))
35226 (build-system pyproject-build-system)
35227 (native-inputs
35228 (list python-pytest
35229 python-setuptools
35230 python-wheel))
35231 (propagated-inputs
35232 (list python-six))
35233 (home-page "https://github.com/amirziai/flatten")
35234 (synopsis "Flatten JSON objects")
35235 (description
35236 "The @code{flatten_json} Python library flattens the hierarchy in your
35237object, which can be useful if you want to force your objects into a table.")
35238 (license license:expat))))
35239
35240(define-public python-deepdiff
35241 (package
35242 (name "python-deepdiff")
35243 (version "8.6.1")
35244 (source (origin
35245 (method url-fetch)
35246 (uri (pypi-uri "deepdiff" version))
35247 (sha256
35248 (base32
35249 "0fk4zzrv7chynjbpgk7bj7nhqc7c3va7pv00a8dqk06ad6kxfmpc"))))
35250 (build-system pyproject-build-system)
35251 (arguments
35252 ;; tests: 1028 passed, 10 skipped, 1 deselected
35253 ;; Ignore Polars test (not packaged).
35254 (list #:test-flags #~(list "-k" "not test_polars")))
35255 (propagated-inputs (list python-click ; for CLI
35256 python-pyyaml ; for CLI
35257 python-orderly-set
35258 python-orjson)) ; for optimization
35259 (native-inputs
35260 (list python-flit-core
35261 python-jsonpickle
35262 python-numpy
35263 python-pandas
35264 python-pydantic
35265 python-pytest
35266 python-pytest-benchmark
35267 python-pytz
35268 python-uuid6
35269 python-tomli-w))
35270 (home-page "https://github.com/seperman/deepdiff")
35271 (synopsis "Deep difference and search of any Python object/data")
35272 (description
35273 "This package provides tools for computing deep differences and searching
35274of any Python object/data. Recreate objects by adding adding deltas to each
35275other.")
35276 (license license:expat)))
35277
35278(define-public python-deepmerge
35279 (package
35280 (name "python-deepmerge")
35281 (version "1.0.1")
35282 (source
35283 (origin
35284 (method url-fetch)
35285 (uri (pypi-uri "deepmerge" version))
35286 (sha256
35287 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
35288 (build-system pyproject-build-system)
35289 (arguments
35290 (list
35291 #:phases
35292 #~(modify-phases %standard-phases
35293 (add-before 'build 'set-version
35294 (lambda _
35295 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
35296 (native-inputs
35297 (list python-setuptools-scm
35298 python-pytest
35299 python-setuptools
35300 python-wheel))
35301 (home-page "https://deepmerge.readthedocs.io/en/latest/")
35302 (synopsis "Merge nested data structures")
35303 (description
35304 "The @code{deep-merge} Python library provides a toolset to deeply merge
35305nested data structures in Python like lists and dictionaries.")
35306 (license license:expat)))
35307
35308(define-public python-durationpy
35309 (package
35310 (name "python-durationpy")
35311 (version "0.10")
35312 (source
35313 (origin
35314 (method git-fetch)
35315 (uri (git-reference
35316 (url "https://github.com/icholy/durationpy")
35317 (commit version)))
35318 (file-name (git-file-name name version))
35319 (sha256
35320 (base32 "1617wg77j68z7v4rbjrhv6n7bchznhgjn21qrmb034sf4hwg77dl"))))
35321 (build-system pyproject-build-system)
35322 (arguments
35323 (list #:test-backend #~'custom
35324 #:test-flags #~(list "test.py")))
35325 (native-inputs (list python-setuptools))
35326 (home-page "https://github.com/icholy/durationpy")
35327 (synopsis "Python <-> Golang time duration formats converter")
35328 (description
35329 "This package implements a functionality to convert between
35330Python's @code{datetime.timedelta} and Golang's @code{time.Duration} formats.")
35331 (license license:expat)))
35332
35333(define-public python-murmurhash3
35334 (let ((commit "01f1128a2c5ea08e6dc33515e140bedd68393a2d")
35335 (revision "0"))
35336 (package
35337 (name "python-murmurhash3")
35338 (version (git-version "2.3.5" revision commit))
35339 (source
35340 (origin
35341 (method git-fetch)
35342 (uri (git-reference
35343 (url "https://github.com/veegee/mmh3")
35344 (commit commit)))
35345 (file-name (git-file-name name version))
35346 (sha256
35347 (base32 "1zpk51ms1bvzg52zc9s9az71bgw2kgxidjcc1xib7y9r7dl7vczz"))))
35348 (build-system pyproject-build-system)
35349 (arguments
35350 (list
35351 #:phases
35352 #~(modify-phases %standard-phases
35353 (add-after 'unpack 'fix-package
35354 (lambda _
35355 (substitute* "mmh3module.cpp"
35356 (("#include <stdio\\.h>")
35357 "#define PY_SSIZE_T_CLEAN\n#include <stdio.h>")))))))
35358 (native-inputs
35359 (list python-cython python-pytest python-setuptools python-wheel))
35360 (home-page "https://github.com/veegee/mmh3")
35361 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
35362 (description
35363 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
35364of fast and robust hash functions. This library is a Python extension module
35365written in C.")
35366 (license license:public-domain))))
35367
35368(define-public python-scooby
35369 (package
35370 (name "python-scooby")
35371 (version "0.11.0")
35372 (source
35373 (origin
35374 (method git-fetch)
35375 (uri (git-reference
35376 (url "https://github.com/banesullivan/scooby")
35377 (commit (string-append "v" version))))
35378 (file-name (git-file-name name version))
35379 (sha256
35380 (base32 "0c47gwcc5kpwx7s8ccp53s174bgraxm4qqrn72yz2ypxah6k3ccj"))))
35381 (build-system pyproject-build-system)
35382 (arguments
35383 (list
35384 ;; tests: 19 passed, 5 deselected, 1 warning
35385 #:test-flags
35386 ;; AssertionError: assert 'Module not found' == '0.1.0'
35387 #~(list "--deselect=tests/test_scooby.py::test_get_version"
35388 ;; ModuleNotFoundError: No module named 'no_version'
35389 "--deselect=tests/test_scooby.py::test_tracking"
35390 ;; Failed: DID NOT RAISE <class 'OSError'>
35391 "--deselect=tests/test_scooby.py::test_import_os_error"
35392 ;; FileNotFoundError: [Errno 2] No such file or directory: 'time'
35393 "--deselect=tests/test_scooby.py::test_import_time"
35394 ;; Errored
35395 "--deselect=tests/test_scooby.py::test_cli")
35396 #:phases
35397 #~(modify-phases %standard-phases
35398 (add-after 'unpack 'set-version
35399 (lambda _
35400 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
35401 (native-inputs
35402 (list python-beautifulsoup4
35403 python-numpy
35404 python-pytest
35405 python-pyvips
35406 python-scipy
35407 python-setuptools
35408 python-setuptools-scm))
35409 (propagated-inputs
35410 (list python-psutil))
35411 (home-page "https://github.com/banesullivan/scooby")
35412 (synopsis "Report hardware information and Python package versions")
35413 (description
35414 "The Scooby package reports the following information about the currently
35415running system:
35416
35417@itemize
35418@item operating system name;
35419@item hardware information including machine type (e.g., @samp{i386},
35420@samp{x86_64}, etc.), CPU count and total RAM;
35421@item Python environment (e.g., Python, IPython, etc.);
35422@item file system name;
35423@item Python version;
35424@item versions of specified Python packages.
35425@end itemize
35426
35427It can generate reports as HTML tables or plain text lists.
35428
35429Scooby has no required dependencies, and only few optional dependencies.")
35430 (license license:expat)))
35431
35432(define-public python-cymem
35433 (package
35434 (name "python-cymem")
35435 (version "2.0.6")
35436 (source
35437 (origin
35438 (method git-fetch)
35439 (uri (git-reference
35440 (url "https://github.com/explosion/cymem")
35441 (commit (string-append "v" version))))
35442 (file-name (git-file-name name version))
35443 (sha256
35444 (base32 "1f0wjm6g2n09b9plddp3bvaz6bl27q6hv0q6g7qx24rgmjzkivm3"))))
35445 (build-system pyproject-build-system)
35446 (native-inputs (list python-cython python-pytest python-setuptools))
35447 (inputs (list python))
35448 (home-page "https://github.com/explosion/cymem")
35449 (synopsis "Cython memory pool for RAII-style memory management")
35450 (description
35451 "Cymem provides two small memory-management helpers for Cython. They make it
35452easy to tie memory to a Python object's life-cycle, so that the memory is freed
35453when the object is garbage collected.")
35454 (license license:expat)))
35455
35456(define-public python-preshed
35457 (package
35458 (name "python-preshed")
35459 (version "3.0.6")
35460 (source
35461 (origin
35462 (method git-fetch)
35463 (uri (git-reference
35464 (url "https://github.com/explosion/preshed")
35465 (commit (string-append "v" version))))
35466 (file-name (git-file-name name version))
35467 (sha256
35468 (base32 "01xwczc4cb9q3iah1gb9lxfh9s8ix695y3s95j7nhbiws6c9b5k5"))))
35469 (build-system pyproject-build-system)
35470 (arguments
35471 (list
35472 #:phases
35473 #~(modify-phases %standard-phases
35474 (add-after 'unpack 'patch-msvccompiler
35475 (lambda _
35476 (substitute* "setup.py"
35477 (("from distutils import ccompiler, msvccompiler")
35478 "from distutils import ccompiler")
35479 (("and msvccompiler.*")
35480 ""))))
35481 (replace 'check
35482 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
35483 (with-directory-excursion (site-packages inputs outputs)
35484 (for-each delete-file (find-files "." "\\.pyx$"))
35485 (apply (assoc-ref %standard-phases 'check) args)
35486 (delete-file-recursively "preshed/tests")))))))
35487 (native-inputs
35488 (list python-cython python-cymem python-pytest python-setuptools))
35489 (inputs (list python python-cymem python-murmurhash))
35490 (home-page "https://github.com/explosion/preshed")
35491 (synopsis "Cython hash tables that assume keys are pre-hashed")
35492 (description
35493 "Simple but high performance Cython hash table mapping pre-randomized keys
35494to void* values.")
35495 (license license:expat)))
35496
35497(define-public python-catalogue
35498 (package
35499 (name "python-catalogue")
35500 (version "2.0.7")
35501 (source
35502 (origin
35503 (method git-fetch)
35504 (uri (git-reference
35505 (url "https://github.com/explosion/catalogue")
35506 (commit (string-append "v" version))))
35507 (file-name (git-file-name name version))
35508 (sha256
35509 (base32 "0f7dqd8swycnspwfka79whr0v630v52hdmkmd1x7l920h33pg467"))))
35510 (build-system pyproject-build-system)
35511 (native-inputs (list python-pytest python-setuptools python-wheel))
35512 (home-page "https://github.com/explosion/catalogue")
35513 (synopsis "Lightweight function registries for your library")
35514 (description
35515 "This package is a tiny, zero-dependencies library that makes it easy to
35516add function (or object) registries to your code. Function registries are
35517helpful when you have objects that need to be both easily serializable and
35518fully customizable. Instead of passing a function into your object, you pass
35519in an identifier name, which the object can use to lookup the function from
35520the registry. This makes the object easy to serialize, because the name is a
35521simple string. If you instead saved the function, you'd have to use Pickle
35522for serialization, which has many drawbacks.")
35523 (license license:expat)))
35524
35525(define-public python-gatt
35526 (package
35527 (name "python-gatt")
35528 (version "0.2.7")
35529 (source (origin
35530 (method url-fetch)
35531 (uri (pypi-uri "gatt" version))
35532 (sha256
35533 (base32
35534 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
35535 (build-system pyproject-build-system)
35536 (arguments (list #:tests? #f)) ; No tests upstream.
35537 (propagated-inputs (list python-dbus python-pygobject))
35538 (native-inputs (list python-setuptools))
35539 (home-page "https://github.com/getsenic/gatt-python")
35540 (synopsis "Bluetooth GATT SDK for Python")
35541 (description
35542 "The Bluetooth @acronym{GATT, Generic ATTribute Profile} @acronym{SDK,
35543Software Development Kit} for Python helps you implement and communicate with
35544any Bluetooth Low Energy device that has a GATT profile. It supports:
35545
35546@itemize @bullet
35547@item Discovering nearby Bluetooth Low Energy devices
35548@item Connecting and disconnecting devices
35549@item Implementing your custom GATT profile
35550@item Accessing all GATT services
35551@item Accessing all GATT characteristics
35552@item Reading characteristic values
35553@item Writing characteristic values
35554@item Subscribing for characteristic value change notifications
35555@end itemize
35556
35557Currently, Linux is the only platform supported by this library.")
35558 (license license:expat)))
35559
35560(define-public python-dbus-fast
35561 (package
35562 (name "python-dbus-fast")
35563 (version "2.44.3")
35564 (source
35565 (origin
35566 (method git-fetch) ;No tests in PyPI package.
35567 (uri (git-reference
35568 (url "https://github.com/Bluetooth-Devices/dbus-fast")
35569 (commit (string-append "v" version))))
35570 (file-name (git-file-name name version))
35571 (sha256
35572 (base32 "12f1f25ny7fd59s55gw3vr6ymdqgd51zzpbc1nkqfbmb166d1536"))))
35573 (build-system pyproject-build-system)
35574 (arguments
35575 (list
35576 #:test-flags
35577 '(list
35578 ;; These tests need pytest_codspeed.
35579 "--ignore-glob=tests/benchmarks/test_*marshall.py"
35580 ;; These tests all fail with:
35581 ;; dbus_fast.errors.InvalidAddressError: DBUS_SESSION_BUS_ADDRESS not
35582 ;; set and could not get DISPLAY environment variable to get bus address
35583 "-m" "not asyncio")))
35584 (native-inputs (list python-cython
35585 python-poetry-core
35586 python-setuptools
35587 python-pytest
35588 python-pytest-cov
35589 python-pytest-asyncio
35590 python-covdefaults))
35591 (home-page "https://github.com/bluetooth-devices/dbus-fast")
35592 (synopsis "Faster version of dbus-next")
35593 (description "This package provides a faster version of dbus-next.")
35594 (license license:expat)))
35595
35596(define-public python-bleak
35597 (package
35598 (name "python-bleak")
35599 (version "0.22.3")
35600 (source
35601 (origin
35602 (method url-fetch)
35603 (uri (pypi-uri "bleak" version))
35604 (sha256
35605 (base32 "0p04kk84vjmfv2pl1lichaaq8rc9xdm9sgd5g9r5gr2pjv0w6j9i"))))
35606 (build-system pyproject-build-system)
35607 (arguments
35608 `(#:tests? #f)) ; no tests
35609 (propagated-inputs (list python-async-timeout
35610 python-dbus-fast
35611 python-typing-extensions))
35612 (native-inputs (list python-poetry-core))
35613 (home-page "https://github.com/hbldh/bleak")
35614 (synopsis "Bluetooth Low Energy platform Agnostic Klient")
35615 (description "This package provides a Bluetooth Low Energy platform-agnostic
35616client library.")
35617 (license license:expat)))
35618
35619(define-public python-ndeflib
35620 (package
35621 (name "python-ndeflib")
35622 (version "0.3.3")
35623 (source
35624 (origin
35625 (method url-fetch)
35626 (uri (pypi-uri "ndeflib" version))
35627 (sha256
35628 (base32 "122a8prbcj070y3fl82kvxmbciv36hj1h1d448l6zcdrb22q4mhx"))))
35629 (build-system pyproject-build-system)
35630 (arguments
35631 (list
35632 ;; tests: 1571 passed, 37 deselected, 1 warning
35633 ;;
35634 ;; Two test fail with assertion not equal:
35635 ;;
35636 ;; test_decode_error[0001-unpack_from requires a buffer of at least 1
35637 ;; bytes] - AssertionError
35638 ;;
35639 ;; test_decode_error[00000101-unpack_from requires a buffer of at least
35640 ;; 1 bytes] - AssertionError
35641 #:test-flags #~(list "-k" "not test_decode_error")))
35642 (native-inputs (list python-pytest python-setuptools))
35643 (home-page "https://ndeflib.readthedocs.io/")
35644 (synopsis "NFC Data Exchange Format decoder and encoder.")
35645 (description "This package provides a NFC (Near-Field Communication)
35646Data Exchange Format decoder and encoder.")
35647 (license license:isc)))
35648
35649(define-public python-nfcpy
35650 (package
35651 (name "python-nfcpy")
35652 (version "1.0.4")
35653 (source
35654 (origin
35655 (method url-fetch)
35656 (uri (pypi-uri "nfcpy" version))
35657 (sha256
35658 (base32 "0sxgp298i8y17i9drp8sclxx0i3vn0wgh5ajs2arw7cy2780igg5"))))
35659 (build-system pyproject-build-system)
35660 (arguments
35661 `(#:tests? #f)) ; Tests use nfc.ndef even though that has been removed.
35662 (propagated-inputs (list python-libusb1 python-ndeflib python-pydes
35663 python-pyserial))
35664 (native-inputs (list python-setuptools python-wheel))
35665 (home-page "https://github.com/nfcpy/nfcpy")
35666 (synopsis "Python module for Near-Field Communication.")
35667 (description "This package provides a Python module for Near-Field
35668Communication.")
35669 (license license:eupl1.1)))
35670
35671(define-public python-clrprint
35672 (package
35673 (name "python-clrprint")
35674 (version "2.0.1")
35675 (source (origin
35676 (method url-fetch)
35677 (uri (pypi-uri "clrprint" version))
35678 (sha256
35679 (base32
35680 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
35681 (build-system pyproject-build-system)
35682 (arguments '(#:tests? #f)) ;there are no tests
35683 (native-inputs
35684 (list python-setuptools))
35685 (propagated-inputs (list python-colorama python-termcolor))
35686 (home-page "https://github.com/AbhijithAJ/clrprint")
35687 (synopsis "Print colorful output in the terminal")
35688 (description "@code{clrprint} is developed to print colorful output in the
35689terminal. It has red, blue, green, yellow, purple and black/white (default)
35690colors.")
35691 (license license:expat)))
35692
35693(define-public python-mido
35694 (package
35695 (name "python-mido")
35696 (version "1.3.2")
35697 (source (origin
35698 (method url-fetch)
35699 (uri (pypi-uri "mido" version))
35700 (sha256
35701 (base32
35702 "0j63cydiinfyrvlhydzsb00cb7dyvrw3bnhjbdyp63vkxnv2isis"))))
35703 (build-system pyproject-build-system)
35704 (arguments
35705 (list #:phases
35706 #~(modify-phases %standard-phases
35707 ;; This package requires python-packaging~=23.1 which is not yet
35708 ;; updated to. As per pyproject.toml, it is required to provide
35709 ;; a nice version_info opbject.
35710 ;; TODO: After updating python-packaging, fix this.
35711 (delete 'sanity-check))))
35712 (propagated-inputs (list python-importlib-metadata python-packaging))
35713 (native-inputs (list python-pytest python-setuptools python-wheel))
35714 (home-page "https://mido.readthedocs.io/en/stable/")
35715 (synopsis "MIDI Objects for Python")
35716 (description "This library is for working with MIDI 1.0 ports, messages and
35717files.")
35718 (license license:expat)))
35719
35720(define-public python-musical-scales
35721 (package
35722 (name "python-musical-scales")
35723 (version "1.0.1")
35724 (source (origin
35725 (method url-fetch)
35726 (uri (pypi-uri "musical-scales" version))
35727 (sha256
35728 (base32
35729 "1ckn8n37i7b65h0i385ycn0w8sg9na0iabz0kmhxxc1wj0hddkw9"))))
35730 (build-system pyproject-build-system)
35731 (arguments (list #:tests? #f)) ;no tests
35732 (native-inputs (list python-setuptools))
35733 (home-page "https://github.com/hmillerbakewell/musical-scales")
35734 (synopsis "Retrieve a scale based on a given mode and starting note")
35735 (description
35736 "Retrieve a scale based on a given mode and starting note.
35737Information about these scales can be
35738@url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
35739Wikipedia}.")
35740 (license license:expat)))
35741
35742(define-public python-langcodes
35743 (package
35744 (name "python-langcodes")
35745 (version "3.5.0")
35746 (source (origin
35747 (method url-fetch)
35748 (uri (pypi-uri "langcodes" version))
35749 (sha256
35750 (base32
35751 "00gqlqs1gi8mvjwf6fkwiqhgcqxnsk5gwzs9l8qy2lbys1l83vqy"))))
35752 (build-system pyproject-build-system)
35753 (native-inputs
35754 (list python-pytest
35755 python-setuptools
35756 python-setuptools-scm))
35757 (propagated-inputs
35758 ;; [optional:data]
35759 (list python-language-data))
35760 (home-page "https://github.com/rspeer/langcodes")
35761 (synopsis "Python library for working with language codes")
35762 (description
35763 "This package provides a Python library for working with and comparing
35764language codes.
35765
35766@code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
3576747}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
3576847 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
35769with it, and it also implements recommendations from the
35770@url{http://cldr.unicode.org/, Unicode CLDR}.
35771
35772@code{python-langcodes} can also refer to a database of language properties
35773and names, built from Unicode CLDR and the IANA subtag registry, if you
35774install @code{python-language-data}.")
35775 (license license:expat)))
35776
35777(define-public python-anyascii
35778 (package
35779 (name "python-anyascii")
35780 (version "0.3.3")
35781 (source (origin
35782 (method url-fetch)
35783 (uri (pypi-uri "anyascii" version))
35784 (sha256
35785 (base32
35786 "1hwmzg3kxyj6lxdgibrj3azv803x8kwzw1d3xja98gbvskcrskn9"))))
35787 (build-system pyproject-build-system)
35788 (native-inputs (list python-pytest python-flit-core))
35789 (home-page "https://anyascii.com")
35790 (synopsis "Unicode to ASCII transliteration")
35791 (description "@code{anyascii} converts Unicode characters to their best
35792ASCII representation.")
35793 (license license:isc)))
35794
35795(define-public python-geomet
35796 (package
35797 (name "python-geomet")
35798 (version "1.1.0")
35799 (source
35800 (origin
35801 (method git-fetch)
35802 (uri (git-reference
35803 (url "https://github.com/geomet/geomet")
35804 (commit version)))
35805 (file-name (git-file-name name version))
35806 (sha256
35807 (base32 "06pq3xkvsxl2v6q39pqgkjbaysyylshny28k8krzg7drvpvkdwk1"))))
35808 (build-system pyproject-build-system)
35809 (native-inputs (list python-pytest python-setuptools))
35810 (propagated-inputs (list python-click python-six))
35811 (home-page "https://github.com/geomet/geomet")
35812 (synopsis
35813 "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary")
35814 (description
35815 "This package provides utilities and functions for converting
35816GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
35817versa. Extended WKB/WKT are also supported.")
35818 (license license:asl2.0)))
35819
35820(define-public python-cogapp
35821 (package
35822 (name "python-cogapp")
35823 (version "3.3.0")
35824 (source (origin
35825 (method url-fetch)
35826 (uri (pypi-uri "cogapp" version))
35827 (sha256
35828 (base32
35829 "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
35830 (build-system pyproject-build-system)
35831 (native-inputs (list python-pytest python-setuptools python-wheel))
35832 (home-page "https://nedbatchelder.com/code/cog")
35833 (synopsis "Content generation tool that leverages Python")
35834 (description "Cog is a file generation tool. It allows using pieces of
35835Python code as generators in your source files to generate arbitrary text.")
35836 (license license:expat)))
35837
35838(define-public python-bsdiff4
35839 (package
35840 (name "python-bsdiff4")
35841 (version "1.2.6")
35842 (source
35843 (origin
35844 (method git-fetch)
35845 (uri (git-reference
35846 (url "https://github.com/ilanschnell/bsdiff4")
35847 (commit version)))
35848 (file-name (git-file-name name version))
35849 (sha256
35850 (base32 "1s64xmgcyzp7x6rcyfcryyz4mv5qm8l7s365rgbi6qfpnblnby0c"))))
35851 (build-system pyproject-build-system)
35852 (arguments
35853 (list
35854 #:test-flags #~(list "--pyargs" "bsdiff4")))
35855 (native-inputs
35856 (list python-pytest
35857 python-setuptools
35858 python-wheel))
35859 (home-page "https://github.com/ilanschnell/bsdiff4")
35860 (synopsis "Binary diff and patch using the BSDIFF4 format")
35861 (description
35862 "This package provides a Python library for the @code{bsdiff} binary diff
35863utility. It also provides two command-line tools, @code{bsdiff4} and
35864@code{bspatch4}.")
35865 (license license:bsd-2)))
35866
35867(define-public python-mpv
35868 (package
35869 (name "python-mpv")
35870 (version "1.0.8")
35871 (source
35872 (origin
35873 (method git-fetch)
35874 (uri (git-reference
35875 (url "https://github.com/jaseg/python-mpv")
35876 (commit (string-append "v" version))))
35877 (file-name (git-file-name name version))
35878 (sha256
35879 (base32 "04azy5wa2n8pa21z6lz1p1p0vy7flaqm8ypy46jb77gig2g50xrh"))))
35880 (build-system pyproject-build-system)
35881 (arguments
35882 (list #:phases
35883 #~(modify-phases %standard-phases
35884 (add-before 'build 'patch-reference-to-mpv
35885 (lambda* (#:key inputs #:allow-other-keys)
35886 ;; Without an absolute path it is not able find and load libmpv.
35887 (substitute* "mpv.py"
35888 (("sofile = .*")
35889 (format #f "sofile = '~a/lib/libmpv.so'~%"
35890 #$(this-package-input "mpv"))))))
35891 (add-before 'check 'prepare-for-tests
35892 (lambda _
35893 ;; Fontconfig throws errors when it has no cache dir to use.
35894 (setenv "XDG_CACHE_HOME" (getcwd))
35895 ;; Some tests fail without a writable and readable HOME.
35896 (setenv "HOME" (getcwd))
35897 (setenv "PY_MPV_SKIP_TESTS"
35898 "test_wait_for_property_event_overflow"))))))
35899 (native-inputs
35900 (list python-pytest
35901 python-pyvirtualdisplay
35902 python-setuptools
35903 xorg-server-for-tests))
35904 (inputs (list mpv))
35905 (propagated-inputs (list python-pillow)) ;for raw screenshots
35906 (home-page "https://github.com/jaseg/python-mpv")
35907 (synopsis "Python interface to the mpv media player")
35908 (description
35909 "python-mpv is a ctypes-based python interface to the mpv media player.
35910It gives you more or less full control of all features of the player, just
35911as the lua interface does.")
35912 ;; From the project's README:
35913 ;; python-mpv inherits the underlying libmpv's license, which can be either
35914 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
35915 ;; copyright page.
35916 (license license:gpl2+)))
35917
35918(define-public python-biblib
35919 (let ((upstream-version "0.1.0")
35920 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
35921 (revision "1"))
35922 (package
35923 (name "python-biblib")
35924 (version (git-version upstream-version revision commit))
35925 (source
35926 (origin
35927 (method git-fetch)
35928 (uri (git-reference
35929 (url "https://github.com/aclements/biblib")
35930 (commit commit)))
35931 (sha256
35932 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
35933 (file-name (git-file-name name version))))
35934 (build-system pyproject-build-system)
35935 (arguments (list #:tests? #f)) ; No tests upstream.
35936 (native-inputs (list python-setuptools))
35937 (home-page "https://github.com/aclements/biblib")
35938 (synopsis "BibTeX parsing and transformation library")
35939 (description
35940 "Biblib provides a simple, standalone Python 3 package for parsing
35941BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
35942entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
35943source code for BibTeX and hence (barring bugs in translation) should be fully
35944compatible with BibTeX's own parser.")
35945 ;; N.B. It seems the parser was translated from WEB by hand: this
35946 ;; package does not contain any generated files.
35947 (license license:expat))))
35948
35949(define-public python-cyclic
35950 (package
35951 (name "python-cyclic")
35952 (version "1.0.0")
35953 (source
35954 (origin
35955 (method git-fetch)
35956 (uri (git-reference
35957 (url "https://github.com/neurobin/cyclic")
35958 ;; Release is not tagged on github, see
35959 ;; https://github.com/neurobin/cyclic/issues/2
35960 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
35961 (file-name (git-file-name name version))
35962 (sha256
35963 (base32 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
35964 (build-system pyproject-build-system)
35965 (arguments (list #:test-backend #~'unittest))
35966 (native-inputs (list python-setuptools))
35967 (home-page "https://github.com/neurobin/cyclic")
35968 (synopsis "Handle cyclic relations")
35969 (description "This package handles cyclic relations compared by value.")
35970 (license license:bsd-3)))
35971
35972(define-public python-rcslice
35973 (package
35974 (name "python-rcslice")
35975 (version "1.1.0")
35976 (source
35977 (origin
35978 (method git-fetch)
35979 (uri (git-reference
35980 (url "https://github.com/neurobin/rcslice")
35981 ;; Releases are not tagged on github, see
35982 ;; https://github.com/neurobin/rcslice/issues/2
35983 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
35984 (file-name (git-file-name name version))
35985 (sha256
35986 (base32 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
35987 (build-system pyproject-build-system)
35988 (arguments (list #:test-backend #~'unittest))
35989 (native-inputs (list python-setuptools))
35990 (home-page "https://github.com/neurobin/rcslice")
35991 (synopsis "Slice a list of sliceables")
35992 (description
35993 "This package provides Python module to slice a list of sliceables (1
35994indexed, both start and end index are inclusive). Helps to slice file content
35995line by line or column by column or a combination of both.")
35996 (license license:bsd-3)))
35997
35998(define-public python-rpds-py
35999 (package
36000 (name "python-rpds-py")
36001 (version "0.10.6")
36002 (source (origin
36003 (method url-fetch)
36004 (uri (pypi-uri "rpds_py" version))
36005 (sha256
36006 (base32
36007 "0l5slkvhq2vf64mapimmj6ginsv01mc4niyj90vvz3assq4agrac"))))
36008 (build-system cargo-build-system)
36009 (arguments
36010 (list
36011 #:imported-modules `(,@%cargo-build-system-modules
36012 ,@%pyproject-build-system-modules)
36013 #:modules '((guix build cargo-build-system)
36014 ((guix build pyproject-build-system) #:prefix py:)
36015 (guix build utils))
36016 #:phases
36017 (with-extensions (list (pyproject-guile-json))
36018 #~(modify-phases %standard-phases
36019 (add-after 'build 'build-python-module
36020 (assoc-ref py:%standard-phases 'build))
36021 (add-after 'build-python-module 'install-python-module
36022 (assoc-ref py:%standard-phases 'install))))
36023 #:install-source? #false))
36024 (inputs
36025 (cons maturin (cargo-inputs 'python-rpds-py)))
36026 (native-inputs
36027 (list python-wrapper))
36028 (home-page "https://github.com/crate-py/rpds")
36029 (synopsis "Bindings to Rust rpds for persistent data structures")
36030 (description "This package provides Python bindings to the Rust rpds crate
36031for persistent data structures. It was written initially to support replacing
36032@code{python-pyrsistent}.")
36033 (license license:expat)))
36034
36035(define-public python-nanoid
36036 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
36037 (revision "0"))
36038 (package
36039 (name "python-nanoid")
36040 (version "2.0.0")
36041 (source
36042 (origin
36043 (method git-fetch)
36044 (uri
36045 (git-reference
36046 (url "https://github.com/puyuan/py-nanoid")
36047 (commit commit)))
36048 (file-name (git-file-name name commit))
36049 (sha256
36050 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
36051 (build-system pyproject-build-system)
36052 (native-inputs (list python-pytest python-setuptools))
36053 (home-page "https://github.com/puyuan/py-nanoid")
36054 (synopsis "Unique string ID generator")
36055 (description
36056 "This package provides a tiny, secure, URL-friendly, unique string ID
36057generator for Python.")
36058 (license license:expat))))
36059
36060(define-public python-misskey
36061 (package
36062 (name "python-misskey")
36063 (version "4.1.0")
36064 (source (origin
36065 (method git-fetch)
36066 (uri (git-reference
36067 (url "https://github.com/YuzuRyo61/Misskey.py")
36068 (commit (string-append "v" version))))
36069 (file-name (git-file-name name version))
36070 (sha256
36071 (base32
36072 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
36073 (build-system pyproject-build-system)
36074 (arguments (list #:tests? #f)) ;needs network
36075 (native-inputs (list python-setuptools))
36076 (propagated-inputs (list python-requests))
36077 (home-page "https://misskeypy.readthedocs.io")
36078 (synopsis "Python bindings for Misskey's API")
36079 (description
36080 "This package provides access to Misskey's API. Misskey is a SNS
36081platform using the ActivityPub protocol.")
36082 (license license:expat)))
36083
36084(define-public python-lief
36085 (package
36086 (name "python-lief")
36087 (version "0.17.2")
36088 (source (origin
36089 (method git-fetch)
36090 (uri (git-reference
36091 (url "https://github.com/lief-project/LIEF")
36092 (commit version)))
36093 (file-name (git-file-name name version))
36094 (sha256
36095 (base32
36096 "0djl879vw0a21h4ww8waqa3mgs835rhqbsda85274n4s6z5vi905"))))
36097 (build-system pyproject-build-system)
36098 (native-inputs (list cmake-minimal
36099 ninja
36100 python-scikit-build-core
36101 python-pydantic))
36102 (arguments
36103 (list
36104 #:tests? #f ;needs network
36105 #:phases #~(modify-phases %standard-phases
36106 (add-before 'build 'change-directory
36107 (lambda _
36108 (chdir "api/python"))))))
36109 (home-page "https://github.com/lief-project/LIEF")
36110 (synopsis "Library to instrument executable formats")
36111 (description
36112 "@code{python-lief} is a cross platform library which can parse, modify
36113and abstract ELF, PE and MachO formats.")
36114 (license license:asl2.0)))
36115
36116(define-public python-eris
36117 (package
36118 (name "python-eris")
36119 (version "1.0.0")
36120 (source
36121 (origin
36122 (method url-fetch)
36123 (uri (pypi-uri "eris" version))
36124 (sha256
36125 (base32 "07a69y8w8n0zvdcd7qfcjf2s9hnd5jlbdl57g39ds2bxprzyc8va"))))
36126 (build-system pyproject-build-system)
36127 (arguments
36128 ;; No tests in PyPI, tests miss data files in Git:
36129 ;; - tests/test-vectors/test_encode
36130 ;; - tests/test-vectors/test_decode
36131 (list #:tests? #f))
36132 (native-inputs
36133 (list python-setuptools
36134 python-wheel))
36135 (propagated-inputs
36136 (list python-aiocoap
36137 python-pycryptodome))
36138 (home-page "https://codeberg.org/eris/python-eris")
36139 (synopsis "Python implementation of ERIS")
36140 (description
36141 "Python implementation of the @acronym{ERIS, Encoding for Robust Immutable
36142Storage}.")
36143 (license license:lgpl3+)))
36144
36145(define-public python-pymonad
36146 (package
36147 (name "python-pymonad")
36148 (version "2.4.0")
36149 (source
36150 (origin
36151 (method git-fetch)
36152 (uri (git-reference
36153 (url "https://github.com/jasondelaat/pymonad")
36154 (commit (string-append "v" version))))
36155 (file-name (git-file-name name version))
36156 (sha256
36157 (base32 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
36158 (build-system pyproject-build-system)
36159 (arguments
36160 (list
36161 #:phases
36162 #~(modify-phases %standard-phases
36163 (replace 'check
36164 (lambda* (#:key tests? #:allow-other-keys)
36165 (when tests?
36166 (invoke "./run_tests.sh")))))))
36167 (native-inputs (list python-setuptools))
36168 (home-page "https://github.com/jasondelaat/pymonad")
36169 (synopsis "Monadic style functional programming for Python")
36170 (description "@code{python-pymonad} implements data structures typically
36171available in purely functional or functional first programming languages such
36172as Haskell and F#. Included are
36173
36174@itemize
36175@item Monad and Monoid data types with several common monads such as Maybe and
36176State
36177@item Useful tools such as the @code{@@curry} decorator for defining curried
36178functions
36179@item Type annotations to help ensure correct usage
36180@end itemize")
36181 (license license:bsd-3)))
36182
36183(define-public python-markdown-strings
36184 (package
36185 (name "python-markdown-strings")
36186 (version "3.3.0")
36187 (source
36188 (origin
36189 (method git-fetch)
36190 (uri (git-reference
36191 (url "https://github.com/awesmubarak/markdown_strings.git")
36192 (commit (string-append "v" version))))
36193 (file-name (git-file-name name version))
36194 (sha256
36195 (base32 "0064ni7s3k8hqw61wi9m31icxp61f8adhija2qsp46hclcwx7vz2"))))
36196 (build-system pyproject-build-system)
36197 (arguments
36198 (list
36199 #:test-backend #~'custom
36200 #:test-flags #~(list "test.py")))
36201 (native-inputs (list python-setuptools))
36202 (propagated-inputs (list python-lxml python-six))
36203 (home-page "https://github.com/awesmubarak/markdown_strings")
36204 (synopsis "Python library to create markdown-formatted text")
36205 (description "This package allows the programmatic creation of
36206markdown-compliant strings.")
36207 (license license:expat)))
36208
36209(define-public python-icecream
36210 (package
36211 (name "python-icecream")
36212 (version "2.1.3")
36213 (source
36214 (origin
36215 (method url-fetch)
36216 (uri (pypi-uri "icecream" version))
36217 (sha256
36218 (base32 "1pj9kf7lwm799wppvngg3sndi0qf13iq33yhl59n3hsf6z1sg90a"))))
36219 (build-system pyproject-build-system)
36220 (arguments
36221 (list
36222 #:test-flags
36223 '(list "-k"
36224 ;; These tests are failing due to a bug:
36225 ;; https://github.com/gruns/icecream/issues/144
36226 (string-append "not testEnableDisable"
36227 " and not testSingledispatchArgumentToString"))))
36228 (native-inputs
36229 (list python-hypothesis
36230 python-pytest
36231 python-setuptools
36232 python-wheel))
36233 (propagated-inputs
36234 (list python-asttokens
36235 python-colorama
36236 python-executing
36237 python-pygments))
36238 (home-page "https://github.com/gruns/icecream")
36239 (synopsis
36240 "Single function call to debug variables, expressions, and program execution")
36241 (description
36242 "This tool lets you debug variables, expressions, and program execution
36243with one function call. IceCream makes print debugging a little sweeter.")
36244 (license license:expat)))
36245
36246(define-public python-icegrams
36247 (package
36248 (name "python-icegrams")
36249 (version "1.1.3")
36250 (source
36251 (origin
36252 (method git-fetch)
36253 (uri (git-reference
36254 ;; no tests in the PyPI archive
36255 (url "https://github.com/mideind/Icegrams")
36256 ;; multiple commits were tagged with 1.1.3
36257 ;; 1.1.3-final is what is noted on the Releases page
36258 (commit (string-append version "-final"))))
36259 (file-name (git-file-name name version))
36260 (sha256
36261 (base32 "19mgkdpzn8r2bxxyw1yx7ijwnp4bl52g85iv90jfqbm4gh4j7rqh"))))
36262 (build-system pyproject-build-system)
36263 (arguments
36264 (list
36265 #:test-flags
36266 #~(list
36267 ;; two tests fail because of a hardcoded file path in the package's source code
36268 ;; this should be fixed upstream instead of with a substitution here
36269 "-k"
36270 (string-append "not test_trigrams" " and not test_word_ids")
36271 "test/test_ngrams.py")))
36272 (propagated-inputs (list python-cffi))
36273 (native-inputs (list python-pytest python-setuptools
36274 python-setuptools-scm python-wheel))
36275 (home-page "https://github.com/mideind/Icegrams")
36276 (synopsis "Trigram statistics for Icelandic")
36277 (description
36278 "Icegrams is a Python package that encapsulates a large trigram
36279library for Icelandic. You can use Icegrams to obtain probabilities (relative
36280frequencies) of over a million different unigrams (single words or tokens), or of
36281bigrams (pairs of two words or tokens), or of trigrams. Icegrams is useful for
36282instance in spelling correction, predictive typing, to help disabled people
36283write text fast, and for various text generation, statistics, and modeling tasks.")
36284 (license license:expat)))
36285
36286(define-public python-speg
36287 (package
36288 (name "python-speg")
36289 ;; 0.3 was released in 2017, the latest change on master HEAD is from 2018.
36290 (properties '((commit . "877acddfd5ac5ae8b4a4592d045e74e108477643")
36291 (revision . "0")))
36292 (version (git-version "0.3"
36293 (assoc-ref properties 'revision)
36294 (assoc-ref properties 'commit)))
36295 (source
36296 (origin
36297 (method git-fetch)
36298 (uri (git-reference
36299 (url "https://github.com/avakar/speg")
36300 (commit (assoc-ref properties 'commit))))
36301 (file-name (git-file-name name version))
36302 (sha256
36303 (base32 "0lhms1sfvmnplcwq8qwwvkrcz4sgi9yprvrkjz7p84fjhk86n4sb"))))
36304 (build-system pyproject-build-system)
36305 (native-inputs
36306 (list python-pytest
36307 python-setuptools))
36308 (propagated-inputs
36309 (list python-six))
36310 (home-page "https://github.com/avakar/speg")
36311 (synopsis "PEG-based parser interpreter with memoization")
36312 (description "This package is a PEG-based parser and interpreter with
36313memoization.")
36314 (license license:expat)))
36315
36316(define-public python-spinners
36317 (package
36318 (name "python-spinners")
36319 (version "0.0.24")
36320 (source
36321 (origin
36322 (method url-fetch)
36323 (uri (pypi-uri "spinners" version))
36324 (sha256
36325 (base32 "0zz2z6dpdjdq5z8m8w8dfi8by0ih1zrdq0caxm1anwhxg2saxdhy"))))
36326 (build-system pyproject-build-system)
36327 (arguments
36328 (list #:tests? #f)) ;no tests in PyPI archive, tests depend on Nose
36329 (native-inputs
36330 (list python-setuptools))
36331 (home-page "https://github.com/manrajgrover/py-spinners")
36332 (synopsis "Python library with graphical spinners for the terminal")
36333 (description
36334 "Spinners is a Python library that contains graphical spinners that can
36335be displayed terminal.")
36336 (license license:expat)))
36337
36338(define-public python-sqlglot
36339 (package
36340 (name "python-sqlglot")
36341 (version "26.33.0")
36342 (source
36343 (origin
36344 (method url-fetch)
36345 (uri (pypi-uri "sqlglot" version))
36346 (sha256
36347 (base32 "0wqdpix71bzx61qwk3mi7v42afmrj03dg81sykgdclgsg63jf5r8"))))
36348 (build-system pyproject-build-system)
36349 (arguments
36350 (list
36351 #:test-backend #~'unittest
36352 #:phases
36353 #~(modify-phases %standard-phases
36354 (add-before 'check 'pre-check
36355 (lambda _
36356 (setenv "SQLGLOTRS_TOKENIZER" "0"))))))
36357 (native-inputs
36358 (list python-duckdb
36359 python-pytz
36360 python-pandas
36361 python-setuptools
36362 python-setuptools-scm
36363 python-tzdata))
36364 (home-page "https://sqlglot.com/")
36365 (synopsis "Python SQL Parser and Transpiler")
36366 (description
36367 "SQLGlot is a no-dependency SQL parser, transpiler, optimizer, and
36368engine. It can be used to format SQL or translate between 31 different
36369dialects like DuckDB, Presto / Trino, Spark / Databricks, Snowflake, and
36370BigQuery. It aims to read a wide variety of SQL inputs and output
36371syntactically and semantically correct SQL in the targeted dialects.")
36372 (license license:expat)))
36373
36374(define-public python-sqlglotrs
36375 (package
36376 (inherit python-sqlglot)
36377 (name "python-sqlglotrs")
36378 (version "0.6.1")
36379 (source
36380 (origin
36381 (method url-fetch)
36382 (uri (pypi-uri "sqlglotrs" version))
36383 (sha256
36384 (base32 "1q8ii7fbgl2b2smi80bn5ifbs5xfzrkqqb4r1j5xx2k98jjsff7n"))))
36385 (build-system cargo-build-system)
36386 (arguments
36387 (list
36388 #:install-source? #false
36389 #:tests? #f ;no tests
36390 #:imported-modules `(,@%cargo-build-system-modules
36391 ,@%pyproject-build-system-modules)
36392 #:modules '((guix build cargo-build-system)
36393 ((guix build pyproject-build-system) #:prefix py:)
36394 (guix build utils))
36395 #:phases
36396 #~(modify-phases %standard-phases
36397 (add-after 'build 'build-python-module
36398 (assoc-ref py:%standard-phases 'build))
36399 (add-after 'build-python-module 'install-python-module
36400 (assoc-ref py:%standard-phases 'install))
36401 (add-after 'install-python-module 'add-install-to-pythonpath
36402 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)))))
36403 (native-inputs
36404 (list maturin
36405 python-wrapper))
36406 (inputs
36407 (cargo-inputs 'python-sqlglotrs))))
36408
36409(define-public python-sqltrie
36410 (package
36411 (name "python-sqltrie")
36412 (version "0.11.2")
36413 (home-page "https://github.com/iterative/sqltrie/")
36414 (source
36415 (origin
36416 (method url-fetch)
36417 (uri (pypi-uri "sqltrie" version))
36418 (sha256
36419 (base32 "1ninmia5ka1nnv4gxqacvbmkfxwc7dilw141rxxk9zmbnf4p1x2d"))))
36420 (build-system pyproject-build-system)
36421 (arguments
36422 (list
36423 #:test-flags
36424 #~(list "--ignore=tests/benchmarks/"
36425 ;; <https://github.com/pyinstaller/pyinstaller> is not packaged
36426 ;; yet in Guix.
36427 "--ignore=src/sqltrie/__pyinstaller")))
36428 (native-inputs
36429 (list python-pytest
36430 python-pytest-mock
36431 python-pytest-sugar
36432 python-setuptools
36433 python-setuptools-scm))
36434 (propagated-inputs
36435 (list python-attrs
36436 python-orjson
36437 python-pygtrie))
36438 (synopsis "SQL-based prefix tree for Python")
36439 (description
36440 "Sqltrie is a SQL-based prefix tree inspired by pygtrie and
36441python-diskcache.")
36442 (license license:asl2.0)))
36443
36444(define-public python-sre-yield
36445 (package
36446 (name "python-sre-yield")
36447 (version "1.2")
36448 (source
36449 (origin
36450 (method url-fetch)
36451 (uri (pypi-uri "sre_yield" version))
36452 (sha256
36453 (base32 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
36454 (build-system pyproject-build-system)
36455 (arguments
36456 (list #:test-backend #~'unittest))
36457 (native-inputs
36458 (list python-setuptools))
36459 (home-page "https://github.com/google/sre_yield")
36460 (synopsis "Expands a regular expression to its possible matches")
36461 (description
36462 "The goal of sre_yield is to efficiently generate all values that can
36463match a given regular expression, or count possible matches efficiently. It
36464uses the parsed regular expression, so you get a much more accurate result
36465than trying to just split strings.")
36466 (license license:asl2.0)))
36467
36468(define-public python-srsly
36469 (package
36470 (name "python-srsly")
36471 (version "2.5.1")
36472 (source
36473 (origin
36474 (method url-fetch)
36475 (uri (pypi-uri "srsly" version))
36476 (sha256
36477 (base32 "0zn74zyb928v898j6l86a83qgdvza78ksjg0v8ixla9yrzv4n6xb"))))
36478 (build-system pyproject-build-system)
36479 (arguments
36480 (list
36481 #:test-flags
36482 #~(list "--pyargs" "srsly"
36483 ;; 3 tests fail in
36484 ;; tests/cloudpickle/cloudpickle_test.py::CloudPickleTest
36485 "-k" (string-append "not test_import"
36486 " and not test_logger"
36487 " and not test_multiprocess"))))
36488 (native-inputs
36489 (list python-cython
36490 python-mock
36491 python-numpy
36492 python-psutil
36493 python-pytest
36494 python-pytest-timeout
36495 python-setuptools))
36496 (propagated-inputs
36497 (list python-catalogue))
36498 (home-page "https://github.com/explosion/srsly")
36499 (synopsis "Serialization utilities for Python")
36500 (description "This package bundles some of the best Python serialization
36501libraries into one standalone package, with a high-level API that makes it
36502easy to write code that's correct across platforms and Pythons.")
36503 (license license:expat)))
36504
36505(define-public python-srt
36506 (package
36507 (name "python-srt")
36508 (version "3.5.3")
36509 (source
36510 (origin
36511 (method url-fetch)
36512 (uri (pypi-uri "srt" version))
36513 (sha256
36514 (base32 "1h0cxlp66i6wlq3g6dg1f1nw0sipm9nfsy7qs47p9w548d833128"))))
36515 (build-system pyproject-build-system)
36516 (native-inputs
36517 (list python-pytest
36518 python-setuptools
36519 python-wheel))
36520 (home-page "https://github.com/cdown/srt")
36521 (synopsis "SRT parsing library")
36522 (description
36523 "This package provides a Python library for parsing, modifying, and
36524composing subtitles in the SRT file format.")
36525 (license license:expat)))
36526
36527(define-public python-sshpubkeys
36528 (package
36529 (name "python-sshpubkeys")
36530 (version "3.2.0")
36531 (source
36532 (origin
36533 (method git-fetch)
36534 (uri (git-reference
36535 (url "https://github.com/ojarva/python-sshpubkeys")
36536 (commit (string-append "v" version))))
36537 (file-name (git-file-name name version))
36538 (sha256
36539 (base32 "0n7bjq8wifdw09mxkfzdkybij0csqjcifyxz8dbxy2iffjv5mqnq"))))
36540 (build-system pyproject-build-system)
36541 (arguments
36542 (list #:tests? #f)) ; XXX: All tests fail
36543 (native-inputs
36544 (list python-setuptools
36545 python-wheel))
36546 (propagated-inputs
36547 (list python-cryptography
36548 python-ecdsa))
36549 (home-page "https://github.com/ojarva/python-sshpubkeys")
36550 (synopsis "OpenSSH public key parser")
36551 (description
36552 "This package provides a library for parsing and validating OpenSSH
36553public key files.")
36554 (license license:bsd-3)))
36555
36556(define-public python-sshtunnel
36557 (let ((commit "dc0732884379a19a21bf7a49650d0708519ec54f")
36558 (revision "0"))
36559 (package
36560 (name "python-sshtunnel")
36561 (version (git-version "0.4.0" revision commit))
36562 (source
36563 (origin
36564 (method git-fetch)
36565 (uri (git-reference
36566 (url "https://github.com/pahaz/sshtunnel")
36567 (commit commit)))
36568 (file-name (git-file-name name version))
36569 (sha256
36570 (base32 "0fzq7pbqa6fjamzp61gjpd2hzph2ag7r507dlwpqilp6w8ipz49a"))
36571 (patches (search-patches "python-sshtunnel-pep518.patch"))))
36572 (build-system pyproject-build-system)
36573 (arguments
36574 (list
36575 #:phases
36576 #~(modify-phases %standard-phases
36577 (add-after 'unpack 'remove-deprecated-dsskey
36578 (lambda _
36579 (substitute* "sshtunnel.py"
36580 (("'dsa': paramiko\\.DSSKey,")
36581 "")
36582 (("paramiko\\.DSSKey, ")
36583 "")))))))
36584 (propagated-inputs (list python-paramiko))
36585 (native-inputs
36586 (list openssh python-mock python-pytest python-setuptools))
36587 (home-page "https://github.com/pahaz/sshtunnel")
36588 (synopsis "Python SSH tunnels library")
36589 (description
36590 "@code{sshtunnel} is a Python module for easily creating SSH tunnels
36591in the background, using Python.")
36592 (license license:expat))))
36593
36594(define-public python-stack-data
36595 (package
36596 (name "python-stack-data")
36597 (version "0.6.3")
36598 (source
36599 (origin
36600 (method url-fetch)
36601 (uri (pypi-uri "stack_data" version))
36602 (sha256
36603 (base32 "1fgh900z6g1amb2f2ql461c1y8lazymxi7nqvk8xri7ywj6pfsl3"))))
36604 (build-system pyproject-build-system)
36605 (arguments
36606 (list
36607 #:test-flags
36608 #~(list "-k" (string-join
36609 ;; XXX: Tests fail with HTML diff.
36610 (list "not test_executing_style_defs"
36611 "test_pygments_example"
36612 "test_example")
36613 " and not "))
36614 #:phases
36615 #~(modify-phases %standard-phases
36616 (add-after 'unpack 'set-home-env
36617 (lambda _
36618 (setenv "HOME" "/tmp"))))))
36619 (native-inputs
36620 (list python-cython
36621 python-littleutils
36622 python-pygments
36623 python-pytest
36624 python-setuptools
36625 python-setuptools-scm
36626 python-typeguard
36627 python-wheel))
36628 (propagated-inputs
36629 (list python-asttokens
36630 python-executing
36631 python-pure-eval))
36632 (home-page "https://github.com/alexmojaki/stack_data")
36633 (synopsis "Python stack frame and traceback manipulation library")
36634 (description
36635 "The @code{stack_data} Python library extracts data from stack frames and
36636tracebacks. Is can be used to display more useful tracebacks
36637than the default.")
36638 (license license:expat)))
36639
36640(define-public python-stdio-mgr
36641 (package
36642 (name "python-stdio-mgr")
36643 (version "1.0.1")
36644 (source
36645 (origin
36646 (method git-fetch)
36647 (uri (git-reference
36648 (url "https://github.com/bskinn/stdio-mgr")
36649 (commit (string-append "v" version))))
36650 (file-name (git-file-name name version))
36651 (sha256
36652 (base32 "0xb6779s7j162xhig6vc63f9nn3v406fvjh1zqbqbf8zcl17ific"))))
36653 (build-system pyproject-build-system)
36654 (arguments
36655 (list
36656 ;; Do not run doctests requiring sphinx.
36657 #:test-flags #~(list "--ignore=README.rst")))
36658 (native-inputs
36659 (list python-pytest
36660 python-setuptools
36661 python-wheel))
36662 (propagated-inputs
36663 (list python-attrs))
36664 (home-page "https://github.com/bskinn/stdio-mgr")
36665 (synopsis "Context manager for mocking/wrapping stdin/stdout/stderr")
36666 (description
36667 "This package contains a context manager for mocking/wrapping
36668stdin/stdout/stderr.")
36669 (license license:expat)))
36670
36671;; TODO: This package is not necessary in Guix. It should be replaced by a
36672;; trivial python package providing the same functionality.
36673(define-public python-stdlib-list
36674 (package
36675 (name "python-stdlib-list")
36676 (version "0.11.1")
36677 (source
36678 (origin
36679 (method git-fetch)
36680 (uri (git-reference
36681 (url "https://github.com/jackmaney/python-stdlib-list")
36682 (commit (string-append "v" version))))
36683 (file-name (git-file-name name version))
36684 (sha256
36685 (base32 "14aw5xbqcs0ww9n4659z5dbs89xqpw2s4m3q4gp66br2xr9iybjf"))))
36686 (build-system pyproject-build-system)
36687 (native-inputs
36688 (list python-flit-core
36689 python-pytest
36690 python-sphinx))
36691 (home-page "https://github.com/jackmaney/python-stdlib-list")
36692 (synopsis "Python Standard Libraries")
36693 (description
36694 "This package contains a list of Python Standard Libraries.")
36695 (license license:expat)))
36696
36697(define-public python-stem
36698 (package
36699 (name "python-stem")
36700 (version "1.8.2")
36701 (source
36702 (origin
36703 (method url-fetch)
36704 (uri (pypi-uri "stem" version))
36705 (sha256
36706 (base32
36707 "10mm9qw4xv7d18086ivy38iaz04z72018186q03j5y69skzikyw3"))))
36708 (build-system pyproject-build-system)
36709 (arguments
36710 (list
36711 #:phases #~(modify-phases %standard-phases
36712 (replace 'check
36713 (lambda _
36714 (invoke "./run_tests.py" "--unit"))))))
36715 (native-inputs
36716 (list python-setuptools
36717 python-wheel))
36718 (home-page "https://stem.torproject.org/")
36719 (synopsis
36720 "Python controller library that allows applications to interact with Tor")
36721 (description
36722 "Stem is a Python controller library for Tor. With it you can use Tor's
36723 control protocol to script against the Tor process and read descriptor data
36724 relays publish about themselves.")
36725 (license license:lgpl3)))
36726
36727(define-public python-stltools
36728 (package
36729 (name "python-stltools")
36730 (version "2022.01.20")
36731 (source
36732 (origin
36733 (method git-fetch)
36734 (uri (git-reference
36735 (url "https://github.com/rsmith-nl/stltools")
36736 (commit version)))
36737 (file-name (git-file-name name version))
36738 (sha256
36739 (base32 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
36740 (build-system pyproject-build-system)
36741 (arguments
36742 (list
36743 #:phases
36744 #~(modify-phases %standard-phases
36745 ;; XXX: Project lacks correct setup.py, setup.cfg or pyproject.toml.
36746 (delete 'build)
36747 (replace 'install
36748 (lambda* (#:key inputs outputs #:allow-other-keys)
36749 (let ((moddir (string-append (site-packages inputs outputs)
36750 "/stltools"))
36751 (bindir (string-append #$output "/bin")))
36752 (copy-recursively "stltools" moddir)
36753 (mkdir-p bindir)
36754 (for-each
36755 (lambda (script)
36756 (let ((source (string-append script ".py"))
36757 (target (string-append bindir "/" script)))
36758 (copy-file source target)
36759 (chmod target #o555)))
36760 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo"))))))))
36761 (native-inputs
36762 (list python-pytest
36763 python-setuptools))
36764 (propagated-inputs
36765 (list python-pycairo))
36766 (home-page "https://github.com/rsmith-nl/stltools")
36767 (synopsis "Python modules and scripts for handling STL files")
36768 (description
36769 "This package consists of Python modules and scripts for manipulating
36770stereolithography (STL) files. It can convert STL files into POV-ray meshes,
36771PDF and PostScript. The Python modules allow for reading and writing STL
36772files. It supports both the text and binary forms of STL.")
36773 (license license:expat)))
36774
36775(define-public python-stone
36776 (package
36777 (name "python-stone")
36778 (version "3.3.9")
36779 (source
36780 (origin
36781 (method git-fetch)
36782 (uri (git-reference
36783 (url "https://github.com/dropbox/stone")
36784 (commit (string-append "v" version))))
36785 (file-name (git-file-name name version))
36786 (sha256
36787 (base32 "1x0kj4jygssjn66lbkln95chhf85vzy1wnpziy9jvpf4kbc1bmfy"))))
36788 (build-system pyproject-build-system)
36789 (native-inputs
36790 (list python-pytest
36791 python-setuptools))
36792 (propagated-inputs
36793 (list python-jinja2
36794 python-packaging
36795 python-ply
36796 python-six)) ;hard requirement, still
36797 (home-page "https://github.com/dropbox/stone")
36798 (synopsis "Official Api Spec Language for Dropbox")
36799 (description
36800 "Stone is an interface description language (IDL) for APIs.")
36801 (license license:expat)))
36802
36803(define-public python-stopit
36804 (package
36805 (name "python-stopit")
36806 (version "1.1.2")
36807 (source
36808 (origin
36809 (method git-fetch)
36810 (uri (git-reference
36811 (url "https://github.com/glenfant/stopit")
36812 (commit version)))
36813 (file-name (git-file-name name version))
36814 (sha256
36815 (base32 "1g3xwd62389643hrz6bljq0ddd1yvwpfk4nrv29naf09pl1m8wmr"))))
36816 (build-system pyproject-build-system)
36817 (arguments
36818 (list #:test-backend #~'custom
36819 #:test-flags #~(list "tests.py")))
36820 (native-inputs (list python-setuptools))
36821 (home-page "https://pypi.python.org/pypi/stopit")
36822 (synopsis "Timeout control decorator and context managers")
36823 (description
36824 "Raise asynchronous exceptions in other threads, control the timeout of
36825blocks or callables with two context managers and two decorators.")
36826 (license license:expat)))
36827
36828(define-public python-straight-plugin
36829 (package
36830 (name "python-straight-plugin")
36831 (properties '((commit . "363b0af4a2560bf9a3cb61160ecf28a1a1b9c91f")
36832 (revision . "0")))
36833 (version (git-version "1.4.1"
36834 (assoc-ref properties 'revision)
36835 (assoc-ref properties 'commit)))
36836 (source
36837 (origin
36838 (method git-fetch)
36839 (uri (git-reference
36840 (url "https://github.com/ironfroggy/straight.plugin")
36841 (commit (assoc-ref properties 'commit))))
36842 (file-name (git-file-name name version))
36843 (sha256
36844 (base32 "03p2apj7i9m38nmccfhvzldmzd61icv145vpmifln3mvh09jm6c2"))))
36845 (build-system pyproject-build-system)
36846 (arguments
36847 (list
36848 #:test-backend #~'custom
36849 #:test-flags #~(list "tests.py")))
36850 (native-inputs (list python-mock python-setuptools))
36851 (home-page "https://github.com/ironfroggy/straight.plugin")
36852 (synopsis "Simple namespaced plugin facility")
36853 (description
36854 "Straight Plugin provides a type of plugin you can create from almost any
36855existing Python modules, and an easy way for outside developers to add
36856functionality and customization to your projects with their own plugins.")
36857 (license license:expat)))
36858
36859(define-public python-streamtracer
36860 (package
36861 (name "python-streamtracer")
36862 (version "2.4.0")
36863 (source
36864 (origin
36865 (method url-fetch)
36866 (uri (pypi-uri "streamtracer" version))
36867 (sha256
36868 (base32 "01ncr8q58xkz2dydjdg4a0c3kv4mpd6j1lzj4p0cmpg7jdi24cmr"))))
36869 (build-system cargo-build-system)
36870 (arguments
36871 (list
36872 #:imported-modules `(,@%cargo-build-system-modules
36873 ,@%pyproject-build-system-modules)
36874 #:modules '((guix build cargo-build-system)
36875 ((guix build pyproject-build-system) #:prefix py:)
36876 (guix build utils))
36877 #:phases
36878 (with-extensions (list (pyproject-guile-json))
36879 #~(modify-phases %standard-phases
36880 (add-after 'build 'build-python-module
36881 (assoc-ref py:%standard-phases 'build))
36882 (add-after 'build-python-module 'install-python-module
36883 (assoc-ref py:%standard-phases 'install))
36884 (add-after 'install-python-module 'add-install-to-pythonpath
36885 (assoc-ref py:%standard-phases 'add-install-to-pythonpath))
36886 (add-after 'check 'check-python-module
36887 (lambda* (#:key tests? #:allow-other-keys)
36888 (when tests?
36889 (with-directory-excursion #$output
36890 (invoke "pytest" "-vv")))))))
36891 #:install-source? #false))
36892 (native-inputs
36893 (list maturin
36894 python-pytest
36895 python-pytest-doctestplus
36896 python-wrapper))
36897 (propagated-inputs
36898 (list python-numpy
36899 python-packaging))
36900 (inputs (cargo-inputs 'python-streamtracer))
36901 (home-page "https://github.com/sunpy/streamtracer")
36902 (synopsis "Rapid streamline tracing in Python")
36903 (description
36904 "streamtracer is a Python package for rapid streamline tracing on
36905regularly spaced grids. The actual streamline tracing is done at a low level
36906in Rust, with a nice Python API provided on top.")
36907 (license license:gpl3+)))
36908
36909(define-public python-strenum
36910 (package
36911 (name "python-strenum")
36912 (version "0.4.15")
36913 (source
36914 (origin
36915 (method git-fetch)
36916 (uri (git-reference
36917 (url "https://github.com/irgeek/StrEnum")
36918 (commit (string-append "v" version))))
36919 (file-name (git-file-name name version))
36920 (sha256
36921 (base32 "1bvk7v5f3sr7awcacdmw5lfzsnn6j52q45va9xpc71n5qxydqbfn"))))
36922 (build-system pyproject-build-system)
36923 (arguments
36924 (list
36925 #:test-flags
36926 #~(list "--ignore=doc/")
36927 #:phases
36928 #~(modify-phases %standard-phases
36929 (add-after 'unpack 'fix-version
36930 ;; Versioneer is useless when there is no git metadata.
36931 (lambda _
36932 (substitute* "setup.py"
36933 (("version=versioneer.get_version\\(),")
36934 (format #f "version=~s," #$version)))))
36935 (add-after 'unpack 'fix-pytest-config
36936 (lambda _
36937 (substitute* "pytest.ini"
36938 (("addopts =.*") "")))))))
36939 (native-inputs
36940 (list python-pytest
36941 python-setuptools))
36942 (home-page "https://github.com/irgeek/StrEnum")
36943 (synopsis "Enum that inherits from str")
36944 (description "StrEnum is a Python @code{enum.Enum} that inherits from
36945@code{str} to complement @code{enum.IntEnum} in the standard library.")
36946 (license license:expat)))
36947
36948(define-public python-structlog
36949 (package
36950 (name "python-structlog")
36951 (version "25.5.0")
36952 (source
36953 (origin
36954 (method url-fetch)
36955 (uri (pypi-uri "structlog" version))
36956 (sha256
36957 (base32 "167wj0hxrsa9kbalh86vvwqs105zi8ld1ikh8lyibndypsij5189"))))
36958 (build-system pyproject-build-system)
36959 (native-inputs
36960 (list python-hatch-fancy-pypi-readme
36961 python-hatch-vcs
36962 python-hatchling
36963 python-pytest
36964 python-pytest-asyncio
36965 python-time-machine))
36966 (home-page "https://www.structlog.org/")
36967 (synopsis "Structured Logging for Python")
36968 (description "@code{structlog} changes logging in Python by adding structure
36969to your log entries.")
36970 (license (list license:asl2.0 license:expat))))
36971
36972(define-public python-style
36973 (package
36974 (name "python-style")
36975 (version "1.1.6")
36976 (source
36977 (origin
36978 (method url-fetch)
36979 (uri (pypi-uri "style" version))
36980 (sha256
36981 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
36982 (build-system pyproject-build-system)
36983 (arguments
36984 (list #:tests? #f)) ;no tests in PyPI, package is 6y old
36985 (native-inputs
36986 (list python-setuptools))
36987 (home-page "https://github.com/lmittmann/style")
36988 (synopsis "Terminal string styling")
36989 (description
36990"@code{python-style} is a simple terminal string styling package. Its API is
36991a port of the chalk package for javascript.")
36992 (license license:expat)))
36993
36994(define-public python-svgelements
36995 (package
36996 (name "python-svgelements")
36997 (version "1.9.6")
36998 (source
36999 (origin
37000 (method url-fetch)
37001 (uri (pypi-uri "svgelements" version))
37002 (sha256
37003 (base32 "1xrp7yxg65dqdrmghriljf9hh2smq2zhzr2hzmqifgfd0ijas0kw"))))
37004 (build-system pyproject-build-system)
37005 (native-inputs
37006 (list python-anyio
37007 python-pytest
37008 python-numpy
37009 python-pillow
37010 python-scipy
37011 python-setuptools
37012 python-wheel))
37013 (home-page "https://github.com/meerk40t/svgelements")
37014 (synopsis "SVG parsing for elements, paths, and other SVG objects")
37015 (description
37016 "This module does high fidelity SVG parsing and geometric rendering.
37017The goal is to successfully and correctly process SVG for use with any scripts
37018that may need or want to use SVG files as geometric data.")
37019 (license license:expat)))
37020
37021(define-public python-svgutils
37022 (package
37023 (name "python-svgutils")
37024 (version "0.3.4")
37025 (source
37026 (origin
37027 (method url-fetch)
37028 (uri (pypi-uri "svgutils" version))
37029 (sha256
37030 (base32 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
37031 (build-system pyproject-build-system)
37032 (arguments
37033 (list #:tests? #f)) ;no test in PyPI archive, depend on Nose
37034 (native-inputs
37035 (list python-setuptools))
37036 (propagated-inputs
37037 (list python-lxml))
37038 (home-page "https://svgutils.readthedocs.io")
37039 (synopsis "Python SVG editor")
37040 (description "This is an utility package that helps with editing and
37041concatenating SVG files. It is especially directed at scientists preparing
37042final figures for submission to journals. So far it supports arbitrary
37043placement and scaling of SVG figures and adding markers, such as labels.")
37044 (license license:expat)))
37045
37046(define-public python-swagger-spec-validator
37047 (package
37048 (name "python-swagger-spec-validator")
37049 (version "3.0.4")
37050 (source
37051 (origin
37052 (method git-fetch)
37053 (uri (git-reference
37054 (url "https://github.com/Yelp/swagger_spec_validator")
37055 (commit (string-append "v" version))))
37056 (file-name (git-file-name name version))
37057 (sha256
37058 (base32 "1vmwg0432s22g48i2ys1ay441wmgkhjann1s165r499wg3pksggi"))))
37059 (build-system pyproject-build-system)
37060 (native-inputs
37061 (list python-pytest
37062 python-setuptools))
37063 (propagated-inputs
37064 (list python-importlib-resources
37065 python-jsonschema
37066 python-pyyaml
37067 python-typing-extensions))
37068 (home-page "https://github.com/Yelp/swagger_spec_validator")
37069 (synopsis "Validation of Swagger specifications")
37070 (description
37071 "@code{swagger_spec_validator} provides a library for validating Swagger
37072API specifications.")
37073 (license license:asl2.0)))
37074
37075(define-public python-syllables
37076 (package
37077 (name "python-syllables")
37078 (version "1.0.3")
37079 (source
37080 (origin
37081 (method git-fetch)
37082 (uri (git-reference
37083 (url "https://github.com/prosegrinder/python-syllables")
37084 (commit (string-append "v" version))))
37085 (file-name (git-file-name name version))
37086 (sha256
37087 (base32 "12yv9d7hmrkw10p2nivk0c9b96rm6040zfif6pj4sm1vg3n8ik6n"))))
37088 (build-system pyproject-build-system)
37089 (native-inputs
37090 (list python-cmudict
37091 python-pytest
37092 python-setuptools))
37093 (home-page "https://github.com/prosegrinder/python-syllables")
37094 (synopsis "Package for estimating the number of syllables in a word")
37095 (description
37096 "This package provides a Python package for estimating the number of
37097syllables in a word.")
37098 (license license:gpl3)))
37099
37100(define-public python-sympy
37101 (package
37102 (name "python-sympy")
37103 (version "1.13.3")
37104 (source
37105 (origin
37106 (method url-fetch)
37107 (uri (pypi-uri "sympy" version))
37108 (sha256
37109 (base32 "1nf4zrjjbnv47n6sl6x9blfyarski61vdjaz4ygb62hfag3d4zxj"))))
37110 (build-system pyproject-build-system)
37111 (arguments
37112 '(#:phases
37113 (modify-phases %standard-phases
37114 (replace 'check
37115 (lambda* (#:key tests? #:allow-other-keys)
37116 (if tests?
37117 (invoke "python3" "-c"
37118 "import sympy; sympy.test(\"/core\")")))))))
37119 (propagated-inputs (list python-mpmath))
37120 (native-inputs
37121 (list python-hypothesis
37122 python-pytest
37123 python-setuptools
37124 python-wheel))
37125 (home-page "https://www.sympy.org/")
37126 (synopsis "Python library for symbolic mathematics")
37127 (description
37128 "SymPy is a Python library for symbolic mathematics. It aims to become a
37129full-featured computer algebra system (CAS) while keeping the code as simple
37130as possible in order to be comprehensible and easily extensible.")
37131 (license license:bsd-3)))
37132
37133(define-public python-tables
37134 (package
37135 (name "python-tables")
37136 ;; XXX: Compatability fix for numexpr 2.13.0, see:
37137 ;; <https://github.com/PyTables/PyTables/pull/1256>.
37138 (properties '((commit . "aad9079c80ce3ae7f385d00af760d171dcc10535")
37139 (revision . "0")))
37140 (version (git-version "3.10.2"
37141 (assoc-ref properties 'revision)
37142 (assoc-ref properties 'commit)))
37143 (source
37144 (origin
37145 (method git-fetch)
37146 (uri (git-reference
37147 (url "https://github.com/PyTables/PyTables")
37148 (commit (assoc-ref properties 'commit))))
37149 (file-name (git-file-name name version))
37150 (sha256
37151 (base32 "0gnqj1gj6dnr167pacmynvghw8bwwll6nlz843rm95r07zi6blrm"))
37152 (snippet '(begin
37153 (use-modules (guix build utils))
37154 (delete-file-recursively "hdf5-blosc")
37155 (delete-file-recursively "c-blosc")))))
37156 (build-system pyproject-build-system)
37157 (arguments
37158 (list
37159 #:phases
37160 #~(modify-phases %standard-phases
37161 (add-after 'unpack 'disable-tuning
37162 (lambda _
37163 (substitute* "setup.py"
37164 (("cpu_flags = .*")
37165 "cpu_flags = ['sse2']\n"))))
37166 (add-after 'unpack 'fix-reference-to-blosc2
37167 (lambda* (#:key inputs #:allow-other-keys)
37168 (substitute* "tables/__init__.py"
37169 (("( +)os.path.join\\(current_dir, blosc2_lib_hardcoded\\),"
37170 m indent)
37171 (string-append indent
37172 "\""
37173 (search-input-file inputs "/lib/libblosc2.so")
37174 "\",\n" m)))))
37175 (add-before 'build 'pre-build
37176 (lambda _
37177 (substitute* "setup.py"
37178 (("hdf5-blosc/src")
37179 (format #f "~a/src"
37180 #$(package-source (this-package-input "hdf5-blosc")))))
37181 (invoke "make" "distclean") ;Regenerate C code with Cython
37182 (setenv "BLOSC2_DIR" #$(this-package-input "cblosc2"))
37183 (setenv "BLOSC_DIR" #$(this-package-input "c-blosc"))
37184 (setenv "BZIP2_DIR" #$(this-package-input "bzip2"))
37185 (setenv "HDF5_DIR" #$(this-package-input "hdf5"))
37186 (setenv "LZO_DIR" #$(this-package-input "lzo"))))
37187 (add-before 'check 'pre-check
37188 (lambda _
37189 (setenv "HOME" "/tmp")))
37190 (replace 'check
37191 (lambda* (#:key tests? #:allow-other-keys)
37192 (when tests?
37193 (with-directory-excursion "/tmp"
37194 ;; Performing only a light (yet comprehensive) subset of the
37195 ;; test suite. If you want a more complete test, try
37196 ;; passing the --heavy flag to this script (or set the
37197 ;; 'heavy' parameter in case you are using tables.test()
37198 ;; call). The whole suite will take more than 4 hours to
37199 ;; complete on a relatively modern CPU and around 512 MB of
37200 ;; main memory.
37201 (invoke "python" "-m" "tables.tests.test_all"))))))))
37202 (native-inputs
37203 (list pkg-config
37204 python-cython
37205 python-pytest
37206 python-setuptools
37207 python-sphinx))
37208 (inputs
37209 (list bzip2
37210 c-blosc
37211 c-blosc2
37212 hdf5
37213 hdf5-blosc
37214 lzo))
37215 (propagated-inputs
37216 (list python-blosc2
37217 python-numexpr
37218 python-numpy
37219 python-packaging
37220 python-py-cpuinfo
37221 python-typing-extensions))
37222 (home-page "https://www.pytables.org/")
37223 (synopsis "Hierarchical datasets for Python")
37224 (description "PyTables is a package for managing hierarchical datasets and
37225designed to efficiently cope with extremely large amounts of data.")
37226 (license license:bsd-3)))
37227
37228(define-public python-tablib
37229 (package
37230 (name "python-tablib")
37231 (version "3.9.0")
37232 (source
37233 (origin
37234 (method url-fetch)
37235 (uri (pypi-uri "tablib" version))
37236 (sha256
37237 (base32 "1qjzbpaln1grr5ngcm2apd5dxp0gcrwis5n60hg60d8gvf7bsshv"))))
37238 (build-system pyproject-build-system)
37239 (native-inputs
37240 (list python-pytest
37241 python-pytest-cov
37242 python-setuptools
37243 python-setuptools-scm))
37244 (inputs ;; [cli]
37245 (list python-tabulate))
37246 (propagated-inputs
37247 (list python-markuppy
37248 python-odfpy
37249 python-openpyxl
37250 python-pyyaml
37251 python-xlrd
37252 python-xlwt))
37253 (home-page "https://tablib.readthedocs.io")
37254 (synopsis "Format agnostic tabular data library")
37255 (description
37256 "@code{tablib} is a format-agnostic tabular dataset library,
37257written in Python. Supported output formats are Excel (Sets + Books),
37258JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
37259TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
37260
37261@code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
37262quite huge, this Guix package doesn't depend on pandas. In case, just also
37263install @code{python-pandas}.")
37264 (license license:expat)))
37265
37266(define-public python-tabulate
37267 (package
37268 (name "python-tabulate")
37269 (version "0.9.0")
37270 (source
37271 (origin
37272 (method url-fetch)
37273 (uri (pypi-uri "tabulate" version))
37274 (sha256
37275 (base32 "0g4b0qnbw55igbpxfxzciqvb6w8ncw4gmcgyq0lyavcnylmv3580"))))
37276 (build-system pyproject-build-system)
37277 (native-inputs
37278 (list python-pytest
37279 python-setuptools-scm
37280 python-setuptools))
37281 (propagated-inputs
37282 (list python-wcwidth))
37283 (home-page "https://github.com/astanin/python-tabulate")
37284 (synopsis "Pretty-print tabular data")
37285 (description
37286 "Tabulate is a library and command-line utility to pretty-print tabular
37287data in Python.")
37288 (license license:expat)))
37289
37290(define-public python-takethetime
37291 (package
37292 (name "python-takethetime")
37293 (version "0.3.1")
37294 (source
37295 (origin
37296 (method url-fetch)
37297 (uri (pypi-uri "TakeTheTime" version))
37298 (sha256
37299 (base32 "1y9gzqb9l1f2smx8783ccjzjvby5mphshgrfks7s75mml59h9qyv"))))
37300 (build-system pyproject-build-system)
37301 (arguments
37302 (list #:tests? #f)) ; tests are time dependent and not provided in PyPI
37303 (native-inputs
37304 (list python-setuptools
37305 python-wheel))
37306 (home-page "https://github.com/ErikBjare/TakeTheTime")
37307 (synopsis "Timing chunks of code")
37308 (description
37309 "This package implements a functionality for time taking using context
37310managers.")
37311 (license license:expat)))
37312
37313(define-public python-taskgroup
37314 (package
37315 (name "python-taskgroup")
37316 (version "0.0.0a4")
37317 (source
37318 (origin
37319 (method url-fetch)
37320 (uri (pypi-uri "taskgroup" version))
37321 (sha256
37322 (base32 "170m7b59nxrhzs0nz6brj9brz4rzvw6k587ja0cnc9qy48nr027b"))))
37323 (build-system pyproject-build-system)
37324 (arguments
37325 (list #:tests? #f)) ; no tests in PyPI and Git checkout
37326 (native-inputs
37327 (list python-flit-core))
37328 (home-page "https://github.com/graingert/taskgroup")
37329 (synopsis "Backport of asyncio.TaskGroup, asyncio.Runner and asyncio.timeout")
37330 (description
37331 "This package provides a backport of @code{asyncio.TaskGroup},
37332@code{asyncio.Runner} and @code{asyncio.timeout}.")
37333 (license license:expat)))
37334
37335(define-public python-tasklogger
37336 (package
37337 (name "python-tasklogger")
37338 (version "1.2.0")
37339 (source
37340 (origin
37341 (method url-fetch)
37342 (uri (pypi-uri "tasklogger" version))
37343 (sha256
37344 (base32 "1901mibcp6aiyjy8afnybrxnb0dkbdxlbvjqbr3gginlw7dr18xh"))))
37345 (build-system pyproject-build-system)
37346 (native-inputs
37347 (list python-pytest
37348 python-numpy
37349 python-setuptools))
37350 (propagated-inputs
37351 (list python-deprecated))
37352 (home-page "https://github.com/scottgigante/tasklogger")
37353 (synopsis "Extension to the core Python logging library")
37354 (description "This package provides an extension to the core Python
37355logging library for logging the beginning and completion of tasks and
37356subtasks.")
37357 (license license:gpl2)))
37358
37359(define-public python-tatsu
37360 (package
37361 (name "python-tatsu")
37362 (version "5.13.2")
37363 (source
37364 (origin
37365 (method git-fetch)
37366 (uri (git-reference
37367 (url "https://github.com/neogeny/TatSu")
37368 (commit (string-append "v" version))))
37369 (file-name (git-file-name name version))
37370 (sha256
37371 (base32 "0ppgi5r55iirzhnf988b32yvh8ly8lzxbg59y0zgqfaxbma50650"))))
37372 (build-system pyproject-build-system)
37373 (native-inputs
37374 (list python-pytest
37375 python-setuptools))
37376 (home-page "https://tatsu.readthedocs.io/en/stable/")
37377 (synopsis "PEG/Packrat Parser generator for Python")
37378 (description
37379 "TatSu (竜) takes a grammar in a variation of Extended Backus-Naur
37380Form (EBNF) as input, and outputs a memoizing Parsing Expression Grammar (PEG)
37381or Packrat parser in Python.")
37382 (license license:bsd-2)))
37383
37384(define-public python-tblib
37385 (package
37386 (name "python-tblib")
37387 (version "3.1.0")
37388 (source
37389 (origin
37390 (method url-fetch)
37391 (uri (pypi-uri "tblib" version))
37392 (sha256
37393 (base32 "0lnnbicpxx774s29nkbic4rrqvy4rhxd8skx5pp6zxh7kwn4qh06"))))
37394 (build-system pyproject-build-system)
37395 (arguments
37396 (list
37397 ;; Don't run benchmark tests.
37398 #:test-flags #~(list "--ignore=tests/test_perf.py")
37399 #:phases
37400 #~(modify-phases %standard-phases
37401 (add-after 'unpack 'fix-pytest-config
37402 (lambda _
37403 (substitute* "pytest.ini"
37404 (("--benchmark-disable") "")))))))
37405 (native-inputs
37406 (list python-pytest
37407 python-setuptools))
37408 (home-page "https://github.com/ionelmc/python-tblib")
37409 (synopsis "Traceback serialization library")
37410 (description
37411 "Traceback serialization allows you to:
37412
37413@enumerate
37414@item Pickle tracebacks and raise exceptions with pickled tracebacks in
37415different processes. This allows better error handling when running code over
37416multiple processes (imagine multiprocessing, billiard, futures, celery etc).
37417
37418@item Parse traceback strings and raise with the parsed tracebacks.
37419@end enumerate\n")
37420 (license license:bsd-3)))
37421
37422(define-public python-telethon
37423 (package
37424 (name "python-telethon")
37425 (version "1.41.1")
37426 (source
37427 (origin
37428 (method git-fetch)
37429 (uri (git-reference
37430 (url "https://github.com/LonamiWebs/Telethon")
37431 (commit (string-append "v" version))))
37432 (file-name (git-file-name name version))
37433 (sha256
37434 (base32 "0rbzqbxsihqm2w1zrvaaafvzwyqqyjx49wfffxrnsr9m32giwzsp"))))
37435 (build-system pyproject-build-system)
37436 (native-inputs
37437 (list python-pytest
37438 python-pytest-asyncio-0.26
37439 python-pytest-trio
37440 python-setuptools))
37441 (propagated-inputs
37442 (list python-rsa python-pyaes))
37443 (home-page "https://docs.telethon.dev")
37444 (synopsis "Full-featured Telegram client library for Python 3")
37445 (description "This library is designed to make it easy to write Python
37446programs that can interact with Telegram.")
37447 (license license:expat)))
37448
37449(define-public python-tempdir
37450 (package
37451 (name "python-tempdir")
37452 (version "0.7.1")
37453 (source
37454 (origin
37455 (method url-fetch)
37456 (uri (pypi-uri "tempdir" version))
37457 (sha256
37458 (base32 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
37459 (build-system pyproject-build-system)
37460 (arguments (list #:tests? #f)) ; No tests.
37461 (native-inputs (list python-setuptools))
37462 (home-page "https://pypi.org/project/tempdir/")
37463 (synopsis "Python library for managing temporary directories")
37464 (description
37465 "This library manages temporary directories that are automatically
37466deleted with all their contents when they are no longer needed. It is
37467particularly convenient for use in tests.")
37468 (license license:expat)))
37469
37470(define-public python-tempora
37471 (package
37472 (name "python-tempora")
37473 (version "5.8.1")
37474 (source
37475 (origin
37476 (method url-fetch)
37477 (uri (pypi-uri "tempora" version))
37478 (sha256
37479 (base32 "1k9d6qmlp0i4v3d0dcqcsndvmng3lfdh4y0p8gwy9i8cg7ndkddb"))))
37480 (build-system pyproject-build-system)
37481 (arguments
37482 (list
37483 ;; Do not test the myproject.toml build as it tries to pull dependencies
37484 ;; from the Internet.
37485 #:test-flags #~(list "-k" "not project"
37486 "tests")))
37487 (native-inputs
37488 (list python-freezegun
37489 python-pytest
37490 python-setuptools
37491 python-setuptools-scm
37492 python-tzdata))
37493 (propagated-inputs (list python-dateutil python-jaraco-functools))
37494 (home-page "https://github.com/jaraco/tempora")
37495 (synopsis "Python date and time objects and routines")
37496 (description
37497 "The @code{tempora} Python library contains miscellaneous date and time
37498related utilities and constants, routines for measuring, profiling, and
37499getting datetime-aware @acronym{UTC, Coordinated Universal Time} values as
37500well as an event scheduler.")
37501 (license license:expat)))
37502
37503(define-public python-tenacity
37504 (package
37505 (name "python-tenacity")
37506 (version "9.0.0")
37507 (source
37508 (origin
37509 (method url-fetch)
37510 (uri (pypi-uri "tenacity" version))
37511 (sha256
37512 (base32 "0fyp421r038naskvyhj90hkq0az96477njad4rhs6annjz53fzw0"))))
37513 (build-system pyproject-build-system)
37514 (native-inputs
37515 (list python-pytest
37516 python-setuptools
37517 python-setuptools-scm
37518 python-tornado-6
37519 python-typeguard
37520 python-wheel))
37521 (home-page "https://github.com/jd/tenacity")
37522 (synopsis "Retrying library for python")
37523 (description
37524 "Tenacity is a general-purpose python library to simplify the task of
37525adding retry behavior to just about anything.")
37526 (license license:asl2.0)))
37527
37528(define-public python-term-background
37529 (package
37530 (name "python-term-background")
37531 (version "1.0.2")
37532 (source
37533 (origin
37534 (method url-fetch)
37535 (uri (pypi-uri "term_background" version))
37536 (sha256
37537 (base32 "0p674silrwc3jncncmdnj1lr6pl2q5qbx0xi3mzjq9sgcs5vmp4n"))))
37538 (arguments
37539 (list
37540 #:phases
37541 '(modify-phases %standard-phases
37542 (add-after 'unpack 'fix-build
37543 (lambda _ (delete-file "setup.py"))))))
37544 (build-system pyproject-build-system)
37545 (native-inputs
37546 (list python-pytest
37547 python-setuptools
37548 python-setuptools-scm
37549 python-wrapper
37550 python-wheel))
37551 (home-page "http://github.com/rocky/shell-term-background")
37552 (synopsis "Determine if shell has a light or dark background")
37553 (description "This package determines if shell has a light or dark
37554background.")
37555 (license license:gpl2+)))
37556
37557(define-public python-term-image
37558 (package
37559 (name "python-term-image")
37560 (version "0.7.2")
37561 (source
37562 (origin
37563 ;; We need the full repo to run the tests.
37564 (method git-fetch)
37565 (uri (git-reference
37566 (url "https://github.com/AnonymouX47/term-image")
37567 (commit (string-append "v" version))))
37568 (file-name (git-file-name name version))
37569 (sha256
37570 (base32 "1lsd5m0k5m99arkca2rzrrlln10c8ax6xfawqwjnspcbf8l3h3dq"))))
37571 (build-system pyproject-build-system)
37572 (arguments
37573 (list #:test-flags
37574 #~(list "tests"
37575 ;; These tests require network access.
37576 "-k" (string-append "not test_from_url"
37577 " and not test_source"
37578 " and not test_close"))
37579 #:phases
37580 #~(modify-phases %standard-phases
37581 (add-after 'unpack 'adjust-dependencies
37582 (lambda _
37583 (substitute* "setup.py"
37584 (("pillow>=9.1,<11") "pillow>=9.1,<12")))))))
37585 (propagated-inputs (list python-pillow python-requests))
37586 (native-inputs
37587 (list python-pytest
37588 python-setuptools
37589 python-urwid))
37590 (home-page "https://github.com/AnonymouX47/term-image")
37591 (synopsis "Display images in the terminal")
37592 (description "term-image is a library and program to display images on
37593compatible terminals.
37594
37595Features:
37596@enumerate
37597@item Multiple image formats (basically all formats supported by
37598@code{PIL.Image.open()})
37599@item Multiple image source types: PIL image instance, local file, URL
37600@item Multiple image render styles (with automatic support detection)
37601@item Support for multiple terminal graphics protocols, including Kitty
37602@item Transparency support (with multiple options)
37603@item Animated image support (including transparent ones)
37604@item Integration into various TUI / terminal-based output libraries
37605@item Terminal size awareness
37606@item Automatic and manual image sizing
37607@item Horizontal and vertical alignment
37608@item Automatic and manual font ratio adjustment (to preserve image aspect
37609ratio)
37610@end enumerate")
37611 (license license:expat)))
37612
37613(define-public python-termcolor
37614 (package
37615 (name "python-termcolor")
37616 (version "2.5.0")
37617 (source
37618 (origin
37619 (method url-fetch)
37620 (uri (pypi-uri "termcolor" version))
37621 (sha256
37622 (base32 "0vwaxyr2vk8gi7s1slq74nb0ssbb0wcn208ziqp48j3dv8kqv3cr"))))
37623 (build-system pyproject-build-system)
37624 (native-inputs
37625 (list python-hatch-vcs
37626 python-hatchling
37627 python-pytest
37628 python-pytest-cov))
37629 (home-page "https://pypi.org/project/termcolor/")
37630 (synopsis "ANSII Color formatting for terminal output")
37631 (description
37632 "This package provides ANSII Color formatting for output in terminals.")
37633 (license license:expat)))
37634
37635(define-public python-termcolor-1
37636 (package
37637 (inherit python-termcolor)
37638 (version "1.1.0")
37639 (source
37640 (origin
37641 (method url-fetch)
37642 (uri (pypi-uri "termcolor" version))
37643 (sha256
37644 (base32
37645 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
37646 ;; There are no tests
37647 (arguments (list #:tests? #false))
37648 (native-inputs
37649 (list python-setuptools
37650 python-wheel))))
37651
37652(define-public python-termcolor-next
37653 (package
37654 (inherit python-termcolor)
37655 (version "3.1.0")
37656 (source
37657 (origin
37658 (method url-fetch)
37659 (uri (pypi-uri "termcolor" version))
37660 (sha256
37661 (base32 "0w2rwl4h7664illllkmicdh3fz3z3pznqxbaxkp0j6aqxvxxfvba"))))))
37662
37663(define-public python-terminaltables
37664 (package
37665 (name "python-terminaltables")
37666 (version "3.1.0")
37667 (source
37668 (origin
37669 (method git-fetch)
37670 (uri (git-reference
37671 (url "https://github.com/Robpol86/terminaltables")
37672 (commit (string-append "v" version))))
37673 (file-name (git-file-name name version))
37674 (sha256 (base32 "1jlm7n6kxypbr8mvwpd7hf9hbfk0a002ad03wqgxlri4aw8pk39a"))))
37675 (build-system pyproject-build-system)
37676 ;; XXX: A lot of test fail with flaky behavior.
37677 (arguments (list #:tests? #f))
37678 (native-inputs
37679 (list python-colorclass
37680 python-colorama
37681 python-pytest
37682 python-setuptools
37683 python-termcolor))
37684 (home-page "https://github.com/Robpol86/terminaltables")
37685 (synopsis
37686 "Generate simple tables in terminals from a nested list of strings")
37687 (description
37688 "This package makes it easy to draw tables in terminal/console
37689applications from a list of lists of strings. It supports multi-line rows.")
37690 (license license:expat)))
37691
37692(define-public python-termstyle
37693 (package
37694 (name "python-termstyle")
37695 (version "0.1.11")
37696 (source
37697 (origin
37698 (method url-fetch)
37699 (uri (pypi-uri "termstyle" version))
37700 (sha256
37701 (base32 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
37702 (build-system pyproject-build-system)
37703 (arguments
37704 (list #:test-backend #~'custom
37705 #:test-flags #~(list "test3.py")))
37706 (native-inputs
37707 (list python-setuptools))
37708 (home-page "https://github.com/gfxmonk/termstyle")
37709 (synopsis "Console text coloring for Python")
37710 (description "This package provides console text coloring for Python.")
37711 (license license:bsd-3)))
37712
37713(define-public python-text-unidecode
37714 (package
37715 (name "python-text-unidecode")
37716 (version "1.3")
37717 (source
37718 (origin
37719 (method url-fetch)
37720 (uri (pypi-uri "text-unidecode" version))
37721 (sha256
37722 (base32 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
37723 (build-system pyproject-build-system)
37724 (native-inputs
37725 (list python-pytest
37726 python-setuptools))
37727 (home-page "https://github.com/kmike/text-unidecode/")
37728 (synopsis "Decode Unicode data")
37729 (description
37730 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
37731Perl library. It can create ASCII representations of Unicode data. In general
37732users should prefer the @code{python-unidecode} package which offers better
37733memory usage and transliteration quality.")
37734 ;; The user can choose either license.
37735 (license (list license:clarified-artistic license:gpl2+))))
37736
37737(define-public python-textdistance
37738 (package
37739 (name "python-textdistance")
37740 (version "4.6.3")
37741 (source
37742 (origin
37743 (method git-fetch)
37744 (uri (git-reference
37745 (url "https://github.com/life4/textdistance")
37746 (commit version)))
37747 (file-name (git-file-name name version))
37748 (sha256
37749 (base32 "1qaplikab46p38jqr93bxd26vvxcnvib15fjxmmp4cbsiy5196sg"))))
37750 (build-system pyproject-build-system)
37751 ;; tests: 430 passed, 1446 warnings
37752 (native-inputs
37753 (list python-numpy
37754 python-pytest
37755 python-setuptools))
37756 (propagated-inputs
37757 (list python-jellyfish
37758 python-distance
37759 python-levenshtein
37760 python-pylev
37761 python-pyxdameraulevenshtein
37762 python-rapidfuzz))
37763 (home-page "https://github.com/life4/textdistance")
37764 (synopsis "Compute distance between the two texts")
37765 (description "@code{textdistance} is a pure Python library for comparing
37766distance between two or more sequences by many algorithms.")
37767 (license license:expat)))
37768
37769(define-public python-textparser
37770 (package
37771 (name "python-textparser")
37772 (version "0.24.0")
37773 (source
37774 (origin
37775 (method url-fetch)
37776 (uri (pypi-uri "textparser" version))
37777 (sha256
37778 (base32 "0dc3aqbzh0x13i6cmr73q777wv8nxyk3p0kdnynh5l59bbkhixsn"))))
37779 (build-system pyproject-build-system)
37780 (arguments
37781 (list #:test-backend #~'unittest))
37782 (native-inputs (list python-setuptools))
37783 (home-page "https://github.com/eerimoq/textparser")
37784 (synopsis "Fast text parser for Python")
37785 (description "This library provides a text parser written in the Python
37786language. It aims to be fast.")
37787 (license license:expat)))
37788
37789(define-public python-texttable
37790 (package
37791 (name "python-texttable")
37792 (version "1.6.4")
37793 (source
37794 (origin
37795 (method git-fetch)
37796 (uri (git-reference
37797 (url "https://github.com/foutaise/texttable/")
37798 (commit (string-append "v" version))))
37799 (file-name (git-file-name name version))
37800 (sha256
37801 (base32 "1lcn76wx6fsj8d79gs985irkqz5qbwq1v9ji9jxsra6dbb643v5j"))))
37802 (build-system pyproject-build-system)
37803 (arguments (list #:test-flags #~(list "tests.py")))
37804 (native-inputs (list python-pytest python-setuptools))
37805 (home-page "https://github.com/foutaise/texttable/")
37806 (synopsis "Create simple ASCII tables in Python")
37807 (description
37808 "This package provides a Python module for creating simple ASCII
37809tables.")
37810 (license license:expat)))
37811
37812(define-public python-textual
37813 (package
37814 (name "python-textual")
37815 (version "3.5.0")
37816 (source
37817 (origin
37818 (method git-fetch)
37819 (uri (git-reference
37820 (url "https://github.com/Textualize/textual")
37821 (commit (string-append "v" version))))
37822 (file-name (git-file-name name version))
37823 (sha256
37824 (base32 "1sldkhy8phk9c7pln70dyb6aya7qpxb5niym9s91z144dv6ykgws"))))
37825 (build-system pyproject-build-system)
37826 (arguments
37827 (list #:test-flags
37828 ;; Snapshot tests require python-pytest-textual-snapshot which
37829 ;; in turn depends on python-textual.
37830 '(list "--ignore=tests/snapshot_tests/test_snapshots.py"
37831 "-k" (string-append
37832 ;; Broken for unknown reason.
37833 "not test_textual_env_var"
37834 ;; Tests that require python-treesitter-languages.
37835 " and not test_widget_construct"
37836 " and not test_setting_builtin_language_via_constructor"
37837 " and not test_setting_builtin_language_via_attribute"
37838 " and not test_setting_language_to_none"
37839 " and not test_setting_unknown_language"
37840 " and not test_register_language"
37841 " and not test_update_highlight_query"
37842 " and not test_default_theme"
37843 " and not test_setting_builtin_themes"
37844 " and not test_setting_unknown_theme_raises_exception"
37845 " and not test_registering_and_setting_theme"))))
37846 (propagated-inputs
37847 (list python-markdown-it-py
37848 python-platformdirs
37849 python-rich
37850 python-tree-sitter
37851 ;; python-tree-sitter-languages ; optional, not packed yet
37852 python-typing-extensions))
37853 (native-inputs
37854 (list python-poetry-core
37855 python-pytest
37856 python-pytest-asyncio
37857 python-pytest-xdist))
37858 (home-page "https://github.com/Textualize/textual")
37859 (synopsis "Build text user interfaces in Python")
37860 (description "Textual is a @acronym{TUI, Text User Interface} framework
37861for Python inspired by modern web development.")
37862 (license license:expat)))
37863
37864(define-public python-tftpy
37865 (package
37866 (name "python-tftpy")
37867 (version "0.8.6")
37868 (source
37869 (origin
37870 (method git-fetch)
37871 (uri (git-reference
37872 (url "https://github.com/msoulier/tftpy")
37873 (commit version)))
37874 (file-name (git-file-name name version))
37875 (sha256
37876 (base32 "11cs52skmisg7rlmcxghmpcxfszcwmph6cvmfdn2p0ks6ckfy9q2"))))
37877 (build-system pyproject-build-system)
37878 (arguments
37879 (list
37880 #:test-backend #~'unittest
37881 #:test-flags #~(list "tests/test.py")
37882 #:phases
37883 #~(modify-phases %standard-phases
37884 (add-before 'check 'configure-tests
37885 (lambda* (#:key tests? #:allow-other-keys)
37886 (when tests?
37887 ;; The default DEBUG logging level is way too verbose.
37888 (substitute* "tests/test.py"
37889 (("logging\\.DEBUG")
37890 "logging.INFO"))))))))
37891 (native-inputs (list python-setuptools))
37892 (home-page "https://tftpy.sourceforge.net/")
37893 (synopsis "Python trivial file transfer protocol (TFTP) library")
37894 (description
37895 "TFTPy is a trivial file transfer protocol (TFTP) Python library. It can
37896be used to act both as a TFTP client or TFTP server.")
37897 (license license:expat)))
37898
37899(define-public python-three-merge
37900 (package
37901 (name "python-three-merge")
37902 (version "0.1.1")
37903 (source
37904 (origin
37905 ;; There are no tests in the PyPI tarball.
37906 (method git-fetch)
37907 (uri (git-reference
37908 (url "https://github.com/spyder-ide/three-merge")
37909 (commit (string-append "v" version))))
37910 (file-name (git-file-name name version))
37911 (sha256
37912 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
37913 (build-system pyproject-build-system)
37914 (propagated-inputs
37915 (list python-diff-match-patch))
37916 (native-inputs
37917 (list python-pytest python-setuptools python-wheel))
37918 (home-page "https://github.com/spyder-ide/three-merge")
37919 (synopsis "Library for merging two strings with respect to a base one")
37920 (description
37921 "This package provides a Python library to perform a 3-way merge between
37922strings, based on @code{diff-match-patch}. This library performs merges at a
37923character level, as opposed to most VCS systems, which opt for a line-based
37924approach.")
37925 (license license:expat)))
37926
37927(define-public python-throttler
37928 (package
37929 (name "python-throttler")
37930 (version "1.2.2")
37931 (source
37932 (origin
37933 (method git-fetch)
37934 (uri (git-reference
37935 (url "https://github.com/uburuntu/throttler")
37936 (commit (string-append "v" version))))
37937 (sha256
37938 (base32 "1gn21x0zkm7rr7qijlz7nvw7z0mm1j2r0r2lslg7wln1z36gjkbw"))))
37939 (build-system pyproject-build-system)
37940 (native-inputs
37941 (list python-aiohttp
37942 python-codecov
37943 python-flake8
37944 python-pytest
37945 python-pytest-asyncio
37946 python-pytest-cov
37947 python-setuptools
37948 python-wheel))
37949 (home-page "https://github.com/uburuntu/throttler")
37950 (synopsis "Throttling with asyncio support")
37951 (description
37952 "This is a Python package for easy throttling with asyncio support.")
37953 (license license:expat)))
37954
37955(define-public python-tifffile
37956 (package
37957 (name "python-tifffile")
37958 (version "2025.10.4")
37959 (source
37960 (origin
37961 (method url-fetch)
37962 (uri (pypi-uri "tifffile" version))
37963 (sha256
37964 (base32 "0f1ybmr2jz19gjg92p9vz3qib49m0x4ipxvrvjyfa6r1mcb7qhrf"))))
37965 (build-system pyproject-build-system)
37966 ;; Tests require lfdfiles, which depends on tifffile
37967 (arguments (list #:tests? #f))
37968 (propagated-inputs
37969 (list python-numpy))
37970 (native-inputs
37971 (list python-setuptools))
37972 (home-page "https://www.lfd.uci.edu/~gohlke/")
37973 (synopsis "Read and write TIFF(r) files")
37974 (description
37975 "This package lets you read image and metadata from many bio-scientific
37976formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,NIH, ImageJ,
37977MicroManager, MD GEL, and FluoView files. It also lets you write numpy arrays
37978to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
37979 (license license:bsd-3)))
37980
37981(define-public python-tiktoken
37982 (package
37983 (name "python-tiktoken")
37984 (version "0.9.0")
37985 (source
37986 (origin
37987 (method url-fetch)
37988 (uri (pypi-uri "tiktoken" version))
37989 (sha256
37990 (base32 "0p9cg6n8mzdi4lbbwxrrp26chy5hr14bqmzr3w74kq1qm6k5qanh"))))
37991 (build-system cargo-build-system)
37992 (arguments
37993 (list
37994 #:install-source? #false
37995 #:imported-modules
37996 (append %pyproject-build-system-modules
37997 %cargo-build-system-modules)
37998 #:modules
37999 '((guix build cargo-build-system)
38000 ((guix build pyproject-build-system) #:prefix py:)
38001 (guix build utils))
38002 #:phases
38003 (with-extensions (list (pyproject-guile-json))
38004 #~(modify-phases %standard-phases
38005 (replace 'build
38006 (assoc-ref py:%standard-phases 'build))
38007 (add-after 'install 'wrap
38008 (lambda _
38009 ;; Collection of python- and pyproject-build-system phases
38010 ;; between 'install and 'check.
38011 (assoc-ref py:%standard-phases 'add-install-to-pythonpath)
38012 (assoc-ref py:%standard-phases 'add-install-to-path)
38013 (assoc-ref py:%standard-phases 'wrap)
38014 (assoc-ref py:%standard-phases 'create-entrypoints)
38015 (assoc-ref py:%standard-phases 'compile-bytecode)))
38016 (replace 'install
38017 (assoc-ref py:%standard-phases 'install))))))
38018 (propagated-inputs (list python-regex python-requests))
38019 (inputs (cargo-inputs 'python-tiktoken))
38020 (native-inputs
38021 (list python-setuptools
38022 python-setuptools-rust
38023 python-wheel
38024 python-wrapper))
38025 (home-page "https://github.com/openai/tiktoken/")
38026 (synopsis "Fast BPE tokeniser for use with OpenAI's models")
38027 (description
38028 "Tiktoken is a fast @dfn{byte pair encoding} (BPE) tokeniser for use with
38029@code{OpenAI's} models.")
38030 (license license:expat)))
38031
38032(define-public python-timeout-decorator
38033 ;; TODO: Remove when python-requests-caches releses a fresh version dropping
38034 ;; it, see, <https://github.com/requests-cache/requests-cache/pull/1111>.
38035 (package
38036 (name "python-timeout-decorator")
38037 (version "0.5.0")
38038 (source
38039 (origin
38040 (method url-fetch)
38041 (uri (pypi-uri "timeout-decorator" version))
38042 (sha256
38043 (base32 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
38044 (build-system pyproject-build-system)
38045 (arguments (list #:tests? #f))
38046 (native-inputs (list python-setuptools python-wheel))
38047 (home-page "https://github.com/pnpnpn/timeout-decorator")
38048 (synopsis "Timeout decorator")
38049 (description "This package provides a decorator that raises an error
38050when an operation takes longer than expected.")
38051 (license license:expat)))
38052
38053(define-public python-titlecase
38054 (package
38055 (name "python-titlecase")
38056 (version "2.4.1")
38057 (source
38058 (origin
38059 (method url-fetch)
38060 (uri (pypi-uri "titlecase" version))
38061 (sha256
38062 (base32 "1x9myq3rlbw6wh946ncch8px7wyabhzacy2fjji13nmvrivs50vx"))))
38063 (build-system pyproject-build-system)
38064 (arguments
38065 (list
38066 #:test-backend #~'unittest))
38067 (native-inputs
38068 (list python-setuptools))
38069 (home-page "https://github.com/ppannuto/python-titlecase")
38070 (synopsis "Capitalize strings similar to book titles")
38071 (description
38072 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
38073It capitalizes (predominantly English) strings in a way that is similar to
38074book titles, using the New York Times Manual of Style to leave certain words
38075lowercase.")
38076 (license license:expat)))
38077
38078(define-public python-tlsh
38079 (package
38080 (name "python-tlsh")
38081 (version "4.11.2")
38082 (home-page "https://github.com/trendmicro/tlsh")
38083 (source
38084 (origin
38085 (method git-fetch)
38086 (uri (git-reference (url home-page) (commit version)))
38087 (file-name (git-file-name name version))
38088 (sha256
38089 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
38090 (build-system pyproject-build-system)
38091 (arguments
38092 (list
38093 #:phases
38094 #~(modify-phases %standard-phases
38095 (add-before 'build 'configure
38096 (lambda _
38097 (invoke "cmake" "."))) ;to generate tlsh_version.h
38098 (add-after 'configure 'chdir
38099 (lambda _
38100 (chdir "py_ext")))
38101 (replace 'check
38102 (lambda* (#:key tests? #:allow-other-keys)
38103 (when tests?
38104 (with-directory-excursion "../Testing"
38105 (invoke "./python_test.sh"))))))))
38106 (native-inputs (list cmake-minimal python-setuptools))
38107 (synopsis "Fuzzy matching library for Python")
38108 (description
38109 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
38110Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
38111value which can be used for similarity comparisons. Similar objects have
38112similar hash values, which allows for the detection of similar objects by
38113comparing their hash values. The byte stream should have a sufficient amount
38114of complexity; for example, a byte stream of identical bytes will not generate
38115a hash value.")
38116 (license license:asl2.0)))
38117
38118(define-public python-tokenize-rt
38119 (package
38120 (name "python-tokenize-rt")
38121 (version "6.2.0")
38122 (source
38123 (origin
38124 (method git-fetch)
38125 (uri (git-reference
38126 (url "https://github.com/asottile/tokenize-rt")
38127 (commit (string-append "v" version))))
38128 (file-name (git-file-name name version))
38129 (sha256
38130 (base32 "1maa9sifma0a6v7kl7mmyqzj0jdclzlp4wjr0vkdx95raihxx4fv"))))
38131 (build-system pyproject-build-system)
38132 (native-inputs (list python-pytest python-setuptools))
38133 (home-page "https://github.com/asottile/tokenize-rt")
38134 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
38135 (description
38136 "This Python library is a wrapper around @code{tokenize} from the Python
38137standard library. It provides two additional tokens @code{ESCAPED_NL} and
38138@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
38139and @code{tokens_to_src} to roundtrip.")
38140 (license license:expat)))
38141
38142(define-public python-tomlkit
38143 (package
38144 (name "python-tomlkit")
38145 (version "0.13.3")
38146 (source
38147 (origin
38148 (method url-fetch)
38149 (uri (pypi-uri "tomlkit" version))
38150 (sha256
38151 (base32 "18fjmmhiv5jkkg1dwidmxd0sjqnkf675igizxsa2ppspxr3z4323"))))
38152 (build-system pyproject-build-system)
38153 (native-inputs
38154 (list python-poetry-core
38155 python-pytest
38156 python-pyyaml))
38157 (home-page "https://github.com/sdispater/tomlkit")
38158 (synopsis "Style-preserving TOML library")
38159 (description
38160 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
38161preserves all comments, indentations, whitespace and internal element ordering,
38162and makes them accessible and editable via an intuitive API. It can also
38163create new TOML documents from scratch using the provided helpers. Part of the
38164implementation has been adapted, improved, and fixed from Molten.")
38165 (license license:expat)))
38166
38167(define-public python-toolrack
38168 (package
38169 (name "python-toolrack")
38170 (version "4.0.3")
38171 (source
38172 (origin
38173 (method git-fetch)
38174 (uri (git-reference
38175 (url "https://github.com/albertodonato/toolrack")
38176 (commit (string-append "v" version))))
38177 (file-name (git-file-name name version))
38178 (sha256
38179 (base32
38180 "1aglfj7j25fiwx9jh1rl34mlhfpdhn8yrkn30vhkz9yw7zrx42h0"))))
38181 (build-system pyproject-build-system)
38182 (arguments
38183 (list
38184 #:phases
38185 #~(modify-phases %standard-phases
38186 (add-after 'unpack 'patch-/bin/sh
38187 (lambda _
38188 (substitute* "tests/aio/process_test.py"
38189 (("/bin/sh")
38190 (which "sh"))))))))
38191 (native-inputs
38192 (list python-pytest
38193 python-pytest-asyncio
38194 python-pytest-mock
38195 python-setuptools))
38196 (home-page "https://github.com/albertodonato/toolrack")
38197 (synopsis "Collection of Python utility functions and classes")
38198 (description "This package provides a collection of miscellaneous utility
38199functions and classes.")
38200 (license license:lgpl3+)))
38201
38202(define-public python-toolshed
38203 (package
38204 (name "python-toolshed")
38205 (version "0.4.6")
38206 (source
38207 (origin
38208 (method url-fetch)
38209 (uri (pypi-uri "toolshed" version))
38210 (sha256
38211 (base32 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
38212 (build-system pyproject-build-system)
38213 (arguments
38214 (list #:tests? #f)) ;tests are not included in PyPI archive
38215 (native-inputs
38216 (list python-setuptools))
38217 (home-page "https://github.com/brentp/toolshed/")
38218 (synopsis "Collection of modules and functions for working with data")
38219 (description "This is a collection of well-tested, simple modules and
38220functions that aim to reduce boilerplate when working with data.")
38221 (license license:bsd-2)))
38222
38223(define-public python-toolz
38224 (package
38225 (name "python-toolz")
38226 (version "1.0.0")
38227 (source
38228 (origin
38229 (method url-fetch)
38230 (uri (pypi-uri "toolz" version))
38231 (sha256
38232 (base32 "00ks0jhl1jwm9576c5sh10pnla8ni21yvg4kcxasr627l3cy71ic"))))
38233 (build-system pyproject-build-system)
38234 (native-inputs
38235 (list python-pytest
38236 python-setuptools
38237 python-wheel))
38238 (home-page "https://github.com/pytoolz/toolz/")
38239 (synopsis "List processing tools and functional utilities")
38240 (description
38241 "This package provides a set of utility functions for iterators,
38242functions, and dictionaries.")
38243 (license license:bsd-3)))
38244
38245(define-public python-toposort
38246 (package
38247 (name "python-toposort")
38248 (version "1.10")
38249 (source
38250 (origin
38251 (method url-fetch)
38252 (uri (pypi-uri "toposort" version))
38253 (sha256
38254 (base32 "1gd66z5dy6j7qs5qkj1pg0vb15rwd571yq02fkm9d9nhaff4gfxz"))))
38255 (build-system pyproject-build-system)
38256 (arguments
38257 (list #:test-backend #~'custom
38258 #:test-flags #~(list "-m" "test.test_toposort")))
38259 (native-inputs (list python-setuptools))
38260 (home-page "https://gitlab.com/ericvsmith/toposort")
38261 (synopsis "Topological sort algorithm")
38262 (description
38263 "This package provides an implementation of a topological sort
38264algorithm.")
38265 (license license:asl2.0)))
38266
38267(define-public python-towncrier
38268 (package
38269 (name "python-towncrier")
38270 (version "25.8.0")
38271 (source
38272 (origin
38273 (method url-fetch)
38274 (uri (pypi-uri "towncrier" version))
38275 (sha256
38276 (base32 "1c8fjjwlx29jgllxvyzby4cn51iraxba0cmfnfmmgb9iz0lnvwgf"))))
38277 (build-system pyproject-build-system)
38278 (native-inputs
38279 (list git-minimal/pinned ;tests create git repositories
38280 python-hatchling
38281 python-pytest
38282 python-twisted))
38283 (propagated-inputs
38284 (list python-click
38285 python-jinja2))
38286 (home-page "https://towncrier.readthedocs.io/en/stable/")
38287 (synopsis "Manage release notes")
38288 (description
38289 "@code{towncrier} is a utility to produce useful, summarized news files
38290 (also known as changelogs) for a project.")
38291 (license license:expat)))
38292
38293(define-public python-tqdm
38294 (package
38295 (name "python-tqdm")
38296 (version "4.67.1")
38297 (source
38298 (origin
38299 (method url-fetch)
38300 (uri (pypi-uri "tqdm" version))
38301 (sha256
38302 (base32 "1wi7cql2fc76b5z9v1sr96ix2gxcb974z8qfydjkmh885k2zkbpq"))))
38303 (build-system pyproject-build-system)
38304 (arguments
38305 (list #:test-flags
38306 '(list "-o" "asyncio_mode=auto"
38307 "-k" "not perf and not test_rlock_creation")))
38308 (native-inputs
38309 (list python-pytest
38310 python-pytest-asyncio
38311 python-pytest-timeout
38312 python-setuptools
38313 python-setuptools-scm
38314 python-toml
38315 python-wheel))
38316 (home-page "https://github.com/tqdm/tqdm")
38317 (synopsis "Fast, extensible progress meter")
38318 (description
38319 "Make loops show a progress bar on the console by just wrapping any
38320iterable with @code{|tqdm(iterable)|}. Offers many options to define
38321design and layout.")
38322 (license (list license:mpl2.0 license:expat))))
38323
38324(define-public python-traitlets
38325 (package
38326 (name "python-traitlets")
38327 (version "5.14.1")
38328 (source
38329 (origin
38330 (method url-fetch)
38331 (uri (pypi-uri "traitlets" version))
38332 (sha256
38333 (base32 "0zjj8ha4z5lbhhmvcl3q8wp5qmwqq0lwxma3d8qvh10s6xdi11c5"))))
38334 (build-system pyproject-build-system)
38335 (arguments
38336 (list
38337 #:test-flags
38338 '(list "-k" "not mypy_list_typing and not mypy_dict_typing")))
38339 (native-inputs
38340 (list python-argcomplete
38341 python-hatchling
38342 python-mypy
38343 python-pytest
38344 python-pytest-mock
38345 python-pytest-mypy-testing))
38346 (home-page "https://ipython.org")
38347 (synopsis "Configuration system for Python applications")
38348 (description
38349 "Traitlets is a framework that lets Python classes have attributes with
38350type checking, dynamically calculated default values, and ‘on change’
38351callbacks. The package also includes a mechanism to use traitlets for
38352configuration, loading values from files or from command line arguments. This
38353is a distinct layer on top of traitlets, so you can use traitlets in your code
38354without using the configuration machinery.")
38355 (license license:bsd-3)))
38356
38357(define-public python-translate-toolkit
38358 (package
38359 (name "python-translate-toolkit")
38360 (version "3.15.6")
38361 (source
38362 (origin
38363 (method url-fetch)
38364 (uri (pypi-uri "translate_toolkit" version))
38365 (sha256
38366 (base32 "0p23c5nvfw19wg2h4rqxf301z0023yl7ivpjyhr5byxf0sxnqnpq"))))
38367 (build-system pyproject-build-system)
38368 (arguments
38369 (list
38370 ;; tests: 2828 passed, 3 skipped, 28 deselected, 32 xfailed, 11 warnings
38371 #:test-flags
38372 ;; TODO: Some of the optional inputs are not packaged yet.
38373 #~(list #$@(map (lambda (file) (string-append "--ignore="
38374 "tests/translate/"
38375 file))
38376 (list "convert/test_ini2po.py"
38377 "convert/test_php2po.py"
38378 "convert/test_po2ini.py"
38379 "convert/test_po2php.py"
38380 "storage/test_cpo.py"
38381 "storage/test_fluent.py"
38382 "storage/test_ini.py"
38383 "storage/test_php.py"
38384 "storage/test_po.py"
38385 "storage/test_pypo.py"
38386 "storage/test_subtitles.py"))
38387 #$@(map (lambda (test) (string-append "--deselect="
38388 "tests/translate/storage/"
38389 test))
38390 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
38391 ;; 0xff in position 0: invalid start byte
38392 (list "test_csvl10n.py::TestCSV::test_encoding_save"
38393 ;; FileNotFoundError: [Errno 2] No such file or
38394 ;; directory: 'msgfmt'
38395 "test_mo.py::TestMOFile::test_output"
38396 ;; assert 0 == -16200
38397 "test_poheader.py::test_timezones"))
38398 #$@(map (lambda (test) (string-append "--deselect="
38399 "tests/translate/tools/"
38400 test))
38401 ;; XXX: Some issues with XML parsing.
38402 (list "test_junitmsgfmt.py::test_output"
38403 "test_pocount.py::test_output"
38404 "test_pocount.py::test_cases"))
38405 "-k" "not test_open_office_to_xliff and not test_po_to_xliff")))
38406 (native-inputs
38407 (list python-pytest
38408 python-setuptools
38409 python-setuptools-scm))
38410 (propagated-inputs
38411 (list python-cwcwidth
38412 python-cheroot
38413 ;; python-aeidon
38414 ;; python-fluent
38415 python-iniparse
38416 python-lxml
38417 python-mistletoe
38418 python-phply
38419 python-pyparsing
38420 python-ruamel.yaml
38421 python-vobject))
38422 (home-page "https://toolkit.translatehouse.org")
38423 (synopsis "Tools and API for translation and localization engineering")
38424 (description
38425 "Tools and API for translation and localization engineering. It contains
38426several utilities, as well as an API for building localization tools.")
38427 (license license:gpl2+)))
38428
38429;; XXX: See: <https://codeberg.org/guix/guix/pulls/3780#issuecomment-7957715>
38430(define-public python-translate-toolkit-for-offlate
38431 (hidden-package
38432 (package
38433 (inherit python-translate-toolkit)
38434 (version "3.6.2")
38435 (source
38436 (origin
38437 (method url-fetch)
38438 (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
38439 (sha256
38440 (base32 "0m4cpsp7x7h5m5agg4ybscf7y86wla46q2lvxpi2myplb6qlgcli"))))
38441 (arguments
38442 (list #:tests? #f)))))
38443
38444(define-public python-translitcodec
38445 (package
38446 (name "python-translitcodec")
38447 (version "0.7.0")
38448 (source
38449 (origin
38450 (method git-fetch)
38451 (uri (git-reference
38452 (url "https://github.com/claudep/translitcodec")
38453 (commit (string-append "version-" version))))
38454 (file-name (git-file-name name version))
38455 (sha256
38456 (base32 "1cj11sa5hy8ga7p0dgwi4g4gv0qx6c1yi2csgnvxiir16ywslhpw"))))
38457 (build-system pyproject-build-system)
38458 (native-inputs (list python-pytest python-setuptools))
38459 (home-page "https://github.com/claudep/translitcodec")
38460 (synopsis "Unicode to 8-bit charset transliteration codec")
38461 (description
38462 "This package contains codecs for transliterating ISO 10646 texts into
38463best-effort representations using smaller coded character sets (ASCII,
38464ISO 8859, etc.).")
38465 (license license:expat)))
38466
38467(define-public python-treelib
38468 (package
38469 (name "python-treelib")
38470 (version "1.8.0")
38471 (source
38472 (origin
38473 (method git-fetch)
38474 (uri (git-reference
38475 (url "https://github.com/caesar0301/treelib")
38476 (commit (string-append "v" version))))
38477 (file-name (git-file-name name version))
38478 (sha256
38479 (base32 "0jd3rdaq8v7ykb626cm1gxa03higqnn2pmnv46fc0lc55xbrkxlf"))
38480 (patches
38481 (search-patches "python-treelib-remove-python2-compat.patch"))))
38482 (build-system pyproject-build-system)
38483 (native-inputs (list python-poetry-core python-pytest))
38484 (home-page "https://github.com/caesar0301/treelib")
38485 (synopsis "Implementation of a tree structure in Python")
38486 (description
38487 "This package provides a Python implementation of a tree structure.")
38488 (license license:asl2.0)))
38489
38490(define-public python-trio
38491 (package
38492 (name "python-trio")
38493 (version "0.28.0")
38494 (source
38495 (origin
38496 (method url-fetch)
38497 (uri (pypi-uri "trio" version))
38498 (sha256
38499 (base32 "019wqwlbj185skknbjd7paxqqx6vl5gpqk2fwmc5d2lyzsb7hm2f"))))
38500 (build-system pyproject-build-system)
38501 (arguments
38502 (list
38503 #:test-flags
38504 `(list "-k"
38505 (string-append
38506 ;; This tests times out.
38507 "not test_ki_protection_works"
38508 " and not test_KI_interrupts"
38509 ;; This fails with: signal only works in main thread of the main interpreter
38510 " and not test_catch_signals_race_condition_on_exit"
38511 ;; Assertion errors.
38512 " and not test_named_thread_os"
38513 " and not test_has_pthread_setname_np"
38514 " and not test_guest_mode_ki"
38515 " and not test_run_in_trio_thread_ki"
38516 " and not test_simple_cancel_scope_usage_doesnt_create\
38517_cyclic_garbage"
38518 " and not test_nursery_cancel_doesnt_create_cyclic_garbage"
38519 " and not test_cancel_scope_exit_doesnt_create_cyclic_garbage"
38520 " and not test_locals_destroyed_promptly_on_cancel"
38521 " and not test_ipython_exc_handler"
38522 " and not test_for_leaking_fds"
38523 ;; Signals don’t work in the build sandbox.
38524 " and not test_open_signal_receiver"
38525 ;; These try to raise KeyboardInterrupt which does not work
38526 ;; in the build environment.
38527 " and not test_ki_self"
38528 " and not test_ki_wakes_us_up"
38529 ;; Failure in name resolution.
38530 " and not test_getnameinfo"
38531 " and not test_SocketType_resolve"
38532 ;; OSError: protocol not found.
38533 " and not test_getprotobyname"
38534 ;; EOFError: Ran out of input.
38535 " and not test_static_tool_sees_all_symbols")
38536 ,@(if (package? (this-package-native-input "python-trustme"))
38537 '()
38538 `("--ignore=src/trio/_tests/test_dtls.py"
38539 "--ignore=src/trio/_tests/test_highlevel_ssl_helpers.py"
38540 "--ignore=src/trio/_tests/test_ssl.py"))
38541 ;; It rerquires black and ruff to generate a final report.
38542 "--ignore=src/trio/_tests/tools/test_gen_exports.py"
38543 "src/trio/_tests")
38544 #:phases
38545 '(modify-phases %standard-phases
38546 (add-after 'unpack 'ignore-deprecations
38547 (lambda _
38548 (substitute* "pyproject.toml"
38549 ((" \"error\",") " \"ignore\","))))
38550 (add-before 'check 'set-env
38551 (lambda _
38552 ;; Tests require a writable home.
38553 (setenv "HOME" "/tmp")
38554 ;; #$output is first in path which causes "import file mismatch"
38555 (setenv "PYTHONPATH" (string-append (getcwd) "/src:$PYTHONPATH")))))))
38556 (native-inputs
38557 (append
38558 (if (supported-package? python-pyopenssl)
38559 (list python-pyopenssl)
38560 '())
38561 (list python-pytest
38562 python-setuptools)
38563 (if (supported-package? python-trustme)
38564 (list python-trustme)
38565 '())
38566 (list python-wheel)))
38567 (propagated-inputs
38568 (list python-attrs
38569 python-cffi
38570 python-exceptiongroup
38571 python-idna
38572 python-outcome
38573 python-sniffio
38574 python-sortedcontainers))
38575 (home-page "https://github.com/python-trio/trio")
38576 (synopsis "Friendly Python library for async concurrency and I/O")
38577 (description
38578 "Trio strives to be a production-quality, async/await-native I/O library
38579for Python. Like all async libraries, its main purpose is to help you write
38580programs that do multiple things at the same time with parallelized I/O.")
38581 ;; Either license applies.
38582 (license (list license:expat license:asl2.0))))
38583
38584(define-public python-trio-typing
38585 (package
38586 (name "python-trio-typing")
38587 (version "0.10.0")
38588 (source
38589 (origin
38590 (method url-fetch)
38591 (uri (pypi-uri "trio-typing" version))
38592 (sha256
38593 (base32 "1hvsj3w500i33ykfgh3sfkjnxhxf05incx131smshlkd562fcph6"))))
38594 (build-system pyproject-build-system)
38595 (native-inputs (list python-pytest python-setuptools python-wheel))
38596 (propagated-inputs
38597 (list python-async-generator
38598 python-importlib-metadata
38599 python-mypy-extensions
38600 python-packaging
38601 python-trio
38602 python-typing-extensions))
38603 (home-page "https://github.com/python-trio/trio-typing")
38604 (synopsis "Static type checking support for Trio and related projects")
38605 (description
38606 "This package provides:
38607
38608@itemize
38609@item PEP 561 typing stubs packages for the Trio project packages:
38610
38611@itemize
38612@item trio (@code{trio-stubs})
38613@item outcome (@code{outcome-stubs})
38614@item async_generator (@code{async_generator-stubs})
38615@end itemize
38616
38617@item A package @code{trio_typing} containing types that Trio programs often
38618want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
38619a mypy plugin that smooths over some limitations in the basic type hints.
38620@end itemize")
38621 ;; Either license applies.
38622 (license (list license:expat license:asl2.0))))
38623
38624(define-public python-trubar
38625 (package
38626 (name "python-trubar")
38627 (version "0.3.4")
38628 (source
38629 (origin
38630 (method url-fetch)
38631 (uri (pypi-uri "trubar" version))
38632 (sha256
38633 (base32 "149l5wid1b41gmfzsrhapcigcbcsflviz8p1pfa937443fxw1dkd"))))
38634 (build-system pyproject-build-system)
38635 (arguments
38636 (list
38637 #:test-flags
38638 #~(list "-k" (string-join
38639 ;; AttributeError: module 'libcst' has no attribute
38640 ;; 'FlattenSentinel'. Did you mean: 'MaybeSentinel'?
38641 (list "not test_import_from_future"
38642 "test_inport_after_docstring"
38643 ;; AssertionError: Items in the second set but not
38644 ;; the first
38645 "test_walk_files")
38646 " and not "))))
38647 (native-inputs
38648 (list python-pytest
38649 python-setuptools
38650 python-wheel))
38651 (propagated-inputs
38652 (list python-libcst
38653 python-pyyaml))
38654 (home-page "https://github.com/janezd/trubar")
38655 (synopsis "Utility for translation of Python sources")
38656 (description
38657 "This package provides a tool for translation and localization of Python
38658programs via modification of source files. Trubar supports f-strings and does
38659not require any changes to the original source code, such as marking strings
38660for translation.")
38661 (license license:expat)))
38662
38663(define-public python-twine
38664 (package
38665 (name "python-twine")
38666 (version "6.2.0")
38667 (source
38668 (origin
38669 (method url-fetch)
38670 (uri (pypi-uri "twine" version))
38671 (sha256
38672 (base32 "1kvm9cdvbnh232wafww1w5scaic9kkrwhlff1mvmk68cswphvvg5"))))
38673 (build-system pyproject-build-system)
38674 (arguments
38675 (list
38676 ;; tests: 228 passed, 1 deselected
38677 #:test-flags
38678 ;; Assertion is not equal for one tests.
38679 #~(list "--deselect=tests/test_check.py::test_fails_rst_syntax_error")))
38680 (native-inputs
38681 (list python-pretend
38682 python-pytest
38683 python-pytest-socket
38684 python-setuptools
38685 python-setuptools-scm))
38686 (propagated-inputs
38687 (list python-id
38688 python-keyring
38689 python-packaging
38690 python-readme-renderer
38691 python-requests
38692 python-requests-toolbelt
38693 python-rfc3986
38694 python-rich
38695 python-urllib3))
38696 (home-page "https://github.com/pypa/twine")
38697 (synopsis "Collection of utilities for interacting with PyPI")
38698 (description
38699 "@code{twine} currently supports registering projects and uploading
38700distributions. It authenticates the user over HTTPS, allows them to pre-sign
38701their files and supports any packaging format (including wheels).")
38702 (license license:asl2.0)))
38703
38704(define-public python-twisted
38705 (package
38706 (name "python-twisted")
38707 (version "25.5.0")
38708 (source
38709 (origin
38710 (method git-fetch)
38711 (uri (git-reference
38712 (url "https://github.com/twisted/twisted")
38713 (commit (string-append "twisted-" version))))
38714 (file-name (git-file-name name version))
38715 (sha256
38716 (base32 "07v2ssr2s6zcj2r6nvp28x7i3awjb6k8gz0mi4wg606gw4kdgxsk"))))
38717 (build-system pyproject-build-system)
38718 (arguments
38719 (list
38720 ;; tests: skips=638, successes=9759
38721 #:test-backend #~'custom
38722 #:test-flags
38723 #~(list "-m" "twisted.trial"
38724 "--temp-directory=/tmp/_trial_temp"
38725 (string-append "-j" (number->string (min 8 (parallel-job-count))))
38726 "twisted")
38727 #:phases
38728 #~(modify-phases %standard-phases
38729 (add-after 'unpack 'disable-broken-tests
38730 (lambda _
38731 (for-each delete-file
38732 (list
38733 ;; No idea why they fail
38734 "src/twisted/test/test_log.py"
38735 ;; Network tests
38736 "src/twisted/conch/test/test_cftp.py"
38737 "src/twisted/internet/test/test_endpoints.py"
38738 "src/twisted/protocols/test/test_tls.py"
38739 "src/twisted/test/test_sslverify.py"
38740 "src/twisted/web/test/test_agent.py"
38741 "src/twisted/web/test/test_tap.py"
38742 ;; These need a git executable
38743 "src/twisted/python/test/test_release.py"
38744 ;; These leave behind a socket file, which breaks the
38745 ;; build with "...has an unsupported type"
38746 "src/twisted/internet/test/test_unix.py"
38747 "src/twisted/test/test_unix.py"
38748 ;; These complain about missing test modules.
38749 "src/twisted/test/test_failure.py"
38750 "src/twisted/web/test/test_http2.py"
38751 "src/twisted/conch/test/test_forwarding.py")))))))
38752 (propagated-inputs
38753 (list python-attrs
38754 python-automat
38755 python-bcrypt
38756 python-constantly
38757 python-hyperlink
38758 python-incremental
38759 python-typing-extensions
38760 python-zope-interface
38761 ;; [conch]
38762 python-appdirs
38763 python-bcrypt
38764 python-cryptography
38765 ;; [http2]
38766 python-h2
38767 python-priority
38768 ;; [tls]
38769 python-idna
38770 python-pyopenssl
38771 python-service-identity
38772 ;; [serial]
38773 python-pyserial))
38774 (native-inputs
38775 (list glibc-utf8-locales ;for OpenTestLogTests.test_utf8
38776 python-hatch-fancy-pypi-readme
38777 python-hatchling
38778 python-httpx
38779 python-hypothesis
38780 python-incremental
38781 python-pyhamcrest
38782 python-pytest))
38783 (home-page "https://twistedmatrix.com/")
38784 (synopsis "Asynchronous networking framework written in Python")
38785 (description
38786 "Twisted is an extensible framework for Python programming, with special
38787focus on event-based network programming and multiprotocol integration.")
38788 (license license:expat)))
38789
38790(define-public python-txredisapi
38791 (let ((commit "d2259a379695284f4a84d7821ed47e1db409501d")
38792 ;; The latest version is 1.4.11, but it contains a bug:
38793 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/157. That bug is
38794 ;; patched in commit d2259a3.
38795 (revision "0"))
38796 (package
38797 (name "python-txredisapi")
38798 (version (git-version "1.4.11" revision commit))
38799 (source
38800 (origin
38801 (method git-fetch)
38802 ;; The source distribution on PyPi is missing test files:
38803 ;; https://github.com/IlyaSkriblovsky/txredisapi/pull/155
38804 (uri (git-reference
38805 (url "https://github.com/IlyaSkriblovsky/txredisapi")
38806 (commit commit)))
38807 (file-name (git-file-name name version))
38808 (sha256
38809 (base32 "0v9r01cn5zb0jjb1h394y667345yp17485bl5d4k80019b34dm98"))))
38810 (build-system pyproject-build-system)
38811 (arguments
38812 (list #:test-backend #~'custom
38813 #:test-flags #~(list "-m" "twisted.trial" "tests")
38814 #:phases
38815 #~(modify-phases %standard-phases
38816 ;; The tests require a running Redis server.
38817 (add-before 'check 'start-redis
38818 (lambda _
38819 (invoke "redis-server" "--daemonize" "yes"))))))
38820 (propagated-inputs (list python-twisted))
38821 (native-inputs (list python-mock python-setuptools redis))
38822 (home-page "https://github.com/IlyaSkriblovsky/txredisapi")
38823 (synopsis "Non-blocking Redis client for Python")
38824 (description "txredisapi is a non-blocking client driver for the Redis
38825database, written in Python. It uses Twisted for asynchronous communication
38826with Redis.")
38827 (license license:asl2.0))))
38828
38829(define-public python-typeapi
38830 (package
38831 (name "python-typeapi")
38832 (version "2.2.4")
38833 (source
38834 (origin
38835 (method url-fetch)
38836 (uri (pypi-uri "typeapi" version))
38837 (sha256
38838 (base32 "0yzx10cn33gxqvs33vwdf0f959hbkir4yzjp42imf28ca9khga6s"))))
38839 (build-system pyproject-build-system)
38840 (arguments
38841 (list
38842 #:tests? #false)) ;there are none
38843 (propagated-inputs (list python-typing-extensions))
38844 (native-inputs (list python-hatchling))
38845 (home-page "https://pypi.org/project/typeapi/")
38846 (synopsis "Type hints")
38847 (description "The typeapi package provides an object-oriented interface
38848for introspecting PEP484 type hints at runtime, including forward references
38849that make use of the more recent PEP585 and PEP604 type hint features in
38850Python versions that don't natively support them.")
38851 (license license:expat)))
38852
38853(define-public python-typeguard
38854 (package
38855 (name "python-typeguard")
38856 (version "4.4.4")
38857 (source
38858 (origin
38859 (method url-fetch)
38860 (uri (pypi-uri "typeguard" version))
38861 (sha256
38862 (base32 "0x2zkskia5lb1838ys0bhpp9v6y80jkhchzdz874spbhzggx4zrs"))))
38863 (build-system pyproject-build-system)
38864 (native-inputs
38865 (list python-mypy
38866 python-pytest
38867 python-setuptools
38868 python-setuptools-scm))
38869 (propagated-inputs
38870 (list python-typing-extensions))
38871 (home-page "https://github.com/agronholm/typeguard")
38872 (synopsis "Run-time type checker for Python")
38873 (description
38874 "@code{typeguard} provides run-time type checking for functions defined
38875with PEP 484 argument (and return) type annotations.")
38876 (license license:expat)))
38877
38878(define-public python-typer
38879 (package
38880 (name "python-typer")
38881 (version "0.20.0")
38882 (source
38883 (origin
38884 (method git-fetch)
38885 (uri (git-reference
38886 (url "https://github.com/fastapi/typer")
38887 (commit version)))
38888 (file-name (git-file-name name version))
38889 (sha256
38890 (base32 "1a2ay2kj3d3rwjscx3hw2adgqifs3hdp7kwcpdh1bl3iy8mn9xdi"))))
38891 (build-system pyproject-build-system)
38892 (arguments
38893 (list
38894 #:test-flags
38895 #~(list "--numprocesses" (number->string (min 8 (parallel-job-count))))))
38896 (native-inputs
38897 (list python-coverage ;this is required in tests
38898 python-pdm-backend
38899 python-pytest
38900 python-pytest-xdist))
38901 (propagated-inputs
38902 (list python-click
38903 python-typing-extensions
38904 ;; [optional]
38905 python-rich
38906 python-shellingham))
38907 (home-page "https://github.com/fastapi/typer")
38908 (synopsis "Typer builds CLI based on Python type hints")
38909 (description
38910 "Typer is a library for building CLI applications. It's based on Python
389113.6+ type hints.")
38912 (license license:expat)))
38913
38914(define-public python-types-aiofiles
38915 (package
38916 (name "python-types-aiofiles")
38917 (version "25.1.0.20251011")
38918 (source
38919 (origin
38920 (method url-fetch)
38921 (uri (pypi-uri "types_aiofiles" version))
38922 (sha256
38923 (base32 "1zyk53h1017s1pc094w909miwvjsq3yhxlgr2l6d8g6bc2r8laqw"))))
38924 (build-system pyproject-build-system)
38925 (arguments (list #:tests? #f)) ;no tests in PyPI archive
38926 (native-inputs (list python-setuptools))
38927 (home-page "https://github.com/python/typeshed")
38928 (synopsis "Typing stubs for python-aiofiles")
38929 (description "This package providis typing stubs for python-aiofiles.")
38930 (license license:asl2.0)))
38931
38932(define-public python-types-colorama
38933 (package
38934 (name "python-types-colorama")
38935 (version "0.4.15.20250801")
38936 (source
38937 (origin
38938 (method url-fetch)
38939 (uri (pypi-uri "types_colorama" version))
38940 (sha256
38941 (base32 "1xapqdq6450ngzp18nvvkwbs68nnxksk1wyk6wid2qw9sq9msmh2"))))
38942 (build-system pyproject-build-system)
38943 (arguments (list #:tests? #f)) ;no tests in PyPI archive
38944 (native-inputs
38945 (list python-setuptools))
38946 (home-page "https://github.com/python/typeshed")
38947 (synopsis "Typing stubs for colorama")
38948 (description "This package provides typing stubs for colorama.")
38949 (license license:asl2.0)))
38950
38951(define-public python-types-dataclasses
38952 (package
38953 (name "python-types-dataclasses")
38954 (version "0.6.6")
38955 (source
38956 (origin
38957 (method url-fetch)
38958 (uri (pypi-uri "types-dataclasses" version))
38959 (sha256
38960 (base32 "1fgp96m4kfxrwy6rdv3p24jzh6hf68702sfdfhcmm3aniv7jynjb"))))
38961 (build-system pyproject-build-system)
38962 (arguments (list #:tests? #f)) ;no tests
38963 (native-inputs (list python-setuptools))
38964 (home-page "https://github.com/python/typeshed")
38965 (synopsis "Typing stubs for dataclasses")
38966 (description
38967 "This package provides a collection of library stubs for Python, with
38968static types.")
38969 (license license:asl2.0)))
38970
38971(define-public python-types-dateutil
38972 (package
38973 (name "python-types-dateutil")
38974 (version "2.9.0.20240316")
38975 (source
38976 (origin
38977 (method url-fetch)
38978 (uri (pypi-uri "types-python-dateutil" version))
38979 (sha256
38980 (base32 "00h2xi8p6ygdv9nhgwdyx86ky9m9dpdqgmsdji05x4461cj2wbsx"))))
38981 (build-system pyproject-build-system)
38982 (arguments (list #:tests? #f)) ; no tests
38983 (native-inputs
38984 (list python-pytest python-setuptools python-wheel))
38985 (home-page "https://github.com/python/typeshed")
38986 (synopsis "Typing stubs for python-dateutil")
38987 (description
38988 "This is a PEP 561 type stub package for the @code{python-dateutil}
38989package.")
38990 (license license:asl2.0)))
38991
38992(define-public python-types-docutils
38993 (package
38994 (name "python-types-docutils")
38995 (version "0.22.2.20251006")
38996 (source
38997 (origin
38998 (method url-fetch)
38999 (uri (pypi-uri "types_docutils" version))
39000 (sha256
39001 (base32 "1cp3p4bsaa646fa3kpjwjwsqbn6vz77pn57913lkknkf21ch8v63"))))
39002 (build-system pyproject-build-system)
39003 (arguments (list #:tests? #f)) ;no tests
39004 (native-inputs (list python-setuptools))
39005 (home-page "https://github.com/python/typeshed")
39006 (synopsis "Typing stubs for docutils")
39007 (description "This package provides a collection of library stubs for
39008Python, with static types.")
39009 (license license:asl2.0)))
39010
39011(define-public python-types-freezegun
39012 (package
39013 (name "python-types-freezegun")
39014 (version "1.1.8")
39015 (source
39016 (origin
39017 (method url-fetch)
39018 (uri (pypi-uri "types-freezegun" version))
39019 (sha256
39020 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
39021 (build-system pyproject-build-system)
39022 (arguments
39023 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
39024 ;; right files from source, so ignore them for now.
39025 (list #:tests? #f))
39026 (native-inputs (list python-setuptools python-wheel))
39027 (home-page "https://github.com/python/typeshed")
39028 (synopsis "Typing stubs for @code{freezegun}")
39029 (description "This package contains typing stubs for for @code{freezegun}, a
39030very small subset the Python stubs contained in the complete @code{typeshed}
39031collection.")
39032 (license license:asl2.0)))
39033
39034(define-public python-types-orjson
39035 (package
39036 (name "python-types-orjson")
39037 (version "3.6.2")
39038 (source
39039 (origin
39040 (method url-fetch)
39041 (uri (pypi-uri "types-orjson" version))
39042 (sha256
39043 (base32 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
39044 (build-system pyproject-build-system)
39045 (arguments (list #:tests? #f)) ;no tests
39046 (native-inputs (list python-setuptools))
39047 (home-page "https://github.com/python/typeshed")
39048 (synopsis "Typing stubs for orjson")
39049 (description "This is a PEP 561 type stub package for the @code{orjson}
39050package. It can be used by type-checking tools like mypy, PyCharm, pytype
39051etc. to check code that uses @code{orjson}.")
39052 (license license:asl2.0)))
39053
39054(define-public python-types-protobuf
39055 (package
39056 (name "python-types-protobuf")
39057 (version "3.20.1")
39058 (source (origin
39059 (method url-fetch)
39060 (uri (pypi-uri "types-protobuf" version))
39061 (sha256
39062 (base32
39063 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
39064 (build-system pyproject-build-system)
39065 (arguments
39066 ;; XXX: No tests in PyPi source, but it's also unclear how to get the
39067 ;; right files from source, so ignore them for now.
39068 (list #:tests? #f))
39069 (native-inputs (list python-setuptools python-wheel))
39070 (home-page "https://github.com/python/typeshed")
39071 (synopsis "Typing stubs for @code{protobuf}")
39072 (description "This package contains typing stubs for @code{protobuf}, a
39073very small subset the Python stubs contained in the complete @code{typeshed}
39074collection.")
39075 (license license:asl2.0)))
39076
39077(define-public python-types-python-dateutil
39078 (package
39079 (name "python-types-python-dateutil")
39080 (version "2.9.0.20250708")
39081 (source
39082 (origin
39083 (method url-fetch)
39084 (uri (pypi-uri "types_python_dateutil" version))
39085 (sha256
39086 (base32 "1ay8sp8qshx2na2sa9sz9hg2hb7yrws9ymshqfb9cv1dmdfxgnyc"))))
39087 (build-system pyproject-build-system)
39088 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39089 (native-inputs (list python-setuptools))
39090 (home-page "https://github.com/python/typeshed")
39091 (synopsis "Typing stubs for python-dateutil")
39092 (description "This package providis typing stubs for python-dateutil.")
39093 (license license:asl2.0)))
39094
39095(define-public python-types-pytz
39096 (package
39097 (name "python-types-pytz")
39098 (version "2025.2.0.20250809")
39099 (source
39100 (origin
39101 (method url-fetch)
39102 (uri (pypi-uri "types_pytz" version))
39103 (sha256
39104 (base32 "1r91pvn1w9rb1395qw8w8k22s7w0wf2qfkl3z1qqiclvlbk34bi2"))))
39105 (build-system pyproject-build-system)
39106 (arguments
39107 (list #:tests? #f)) ;no tests provided
39108 (native-inputs (list python-setuptools))
39109 (home-page "https://github.com/python/typeshed")
39110 (synopsis "Typing stubs for pytz")
39111 (description "This package contains typing stubs for @code{pytz}, a very
39112small subset the Python stubs contained in the complete @code{typeshed}
39113collection.")
39114 (license license:asl2.0)))
39115
39116(define-public python-types-pyyaml
39117 (package
39118 (name "python-types-pyyaml")
39119 (version "6.0.12.20250915")
39120 (source
39121 (origin
39122 (method url-fetch)
39123 (uri (pypi-uri "types_pyyaml" version))
39124 (sha256
39125 (base32 "1lyirqjacfmn6bv27b7w0z483yps6gfqfmhnyzkg00y352jm92qg"))))
39126 (build-system pyproject-build-system)
39127 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39128 (native-inputs
39129 (list python-setuptools))
39130 (home-page " https://github.com/python/typeshed")
39131 (synopsis "Typing stubs for PyYAML")
39132 (description "This package provides typing stubs for @code{PyYAML}.")
39133 (license license:asl2.0)))
39134
39135(define-public python-types-regex
39136 (package
39137 (name "python-types-regex")
39138 (version "2025.9.18.20250921")
39139 (source
39140 (origin
39141 (method url-fetch)
39142 (uri (pypi-uri "types_regex" version))
39143 (sha256
39144 (base32 "0gqc8b9d38pdm1l6nryi9rq9vmpis575hqnxlvj904n3n4hhqw71"))))
39145 (build-system pyproject-build-system)
39146 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39147 (native-inputs (list python-setuptools))
39148 (home-page "https://github.com/python/typeshed")
39149 (synopsis "Typing stubs for regex")
39150 (description "This package provides typing stubs for regex.")
39151 (license license:asl2.0)))
39152
39153(define-public python-types-requests
39154 (package
39155 (name "python-types-requests")
39156 (version "2.32.4.20250611")
39157 (source
39158 (origin
39159 (method url-fetch)
39160 (uri (pypi-uri "types_requests" version))
39161 (sha256
39162 (base32 "09pqdfa66d3p5dig26chrd6rpxs5wamxcm0yyl5q69b4xmvqf73l"))))
39163 (build-system pyproject-build-system)
39164 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39165 (native-inputs
39166 (list python-setuptools))
39167 (propagated-inputs
39168 (list python-urllib3))
39169 (home-page "https://github.com/python/typeshed")
39170 (synopsis "Typing stubs for requests")
39171 (description "This package provides typing stubs for requests.")
39172 (license license:asl2.0)))
39173
39174(define-public python-types-setuptools
39175 (package
39176 (name "python-types-setuptools")
39177 (version "80.9.0.20250529")
39178 (source
39179 (origin
39180 (method url-fetch)
39181 (uri (pypi-uri "types_setuptools" version))
39182 (sha256
39183 (base32 "149w6lg8n56k50n08jx450ni9frs2hzbv729sv48c8ds1jx8iq3r"))))
39184 (build-system pyproject-build-system)
39185 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39186 (native-inputs
39187 (list python-setuptools))
39188 (home-page "https://github.com/python/typeshed")
39189 (synopsis "Typing stubs for setuptools")
39190 (description "This package provides typing stubs for setuptools.")
39191 (license license:asl2.0)))
39192
39193(define-public python-types-simplejson
39194 (package
39195 (name "python-types-simplejson")
39196 (version "3.19.0.20241221")
39197 (source
39198 (origin
39199 (method url-fetch)
39200 (uri (pypi-uri "types_simplejson" version))
39201 (sha256
39202 (base32 "0w7wvr84d7bj27hc2bsyh69s9d84zpkdhsibbmsibba91zdzjjhi"))))
39203 (build-system pyproject-build-system)
39204 (arguments
39205 (list
39206 #:tests? #f)) ; no tests in PyPI archive, no release or tags on GitHub
39207 (native-inputs
39208 (list python-setuptools python-wheel))
39209 (home-page "https://github.com/python/typeshed")
39210 (synopsis "Typing stubs for simplejson")
39211 (description "Typing stubs for simplejson.")
39212 (license license:asl2.0)))
39213
39214(define-public python-types-toml
39215 (package
39216 (name "python-types-toml")
39217 (version "0.10.8.20240310")
39218 (source
39219 (origin
39220 (method url-fetch)
39221 (uri (pypi-uri "types-toml" version))
39222 (sha256
39223 (base32 "0c83hfw4aqy01vzlh6r84mz6b2b6n98chfdjp2k3c94p089m0h9x"))))
39224 (build-system pyproject-build-system)
39225 (arguments
39226 (list #:tests? #f)) ;no tests provided
39227 (native-inputs (list python-setuptools))
39228 (home-page "https://github.com/python/typeshed")
39229 (synopsis "Typing stubs for TOML")
39230 (description
39231 "This package contains typing stubs for TOML, a very small subset the
39232Python stubs contained in the complete @code{typeshed} collection.")
39233 (license license:asl2.0)))
39234
39235(define-public python-types-tqdm
39236 (package
39237 (name "python-types-tqdm")
39238 (version "4.67.0.20250809")
39239 (source
39240 (origin
39241 (method url-fetch)
39242 (uri (pypi-uri "types_tqdm" version))
39243 (sha256
39244 (base32 "006md2hnsq79p7d5z3kiaapvl9wwa4dz3yb39jf0n22n2awpmgq2"))))
39245 (build-system pyproject-build-system)
39246 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39247 (native-inputs (list python-setuptools))
39248 (propagated-inputs (list python-types-requests))
39249 (home-page "https://github.com/python/typeshed")
39250 (synopsis "Typing stubs for python-tqdm")
39251 (description "This package providis typing stubs for python-tqdm.")
39252 (license license:asl2.0)))
39253
39254(define-public python-types-ujson
39255 (package
39256 (name "python-types-ujson")
39257 (version "5.10.0.20250822")
39258 (source
39259 (origin
39260 (method url-fetch)
39261 (uri (pypi-uri "types_ujson" version))
39262 (sha256
39263 (base32 "01m0gdcy6plrjxxih96ra86wd2zhn4skzw7k7hvk51gpw5c5ay8a"))))
39264 (build-system pyproject-build-system)
39265 (arguments
39266 (list #:tests? #f)) ;no tests provided
39267 (native-inputs (list python-setuptools))
39268 (home-page "https://github.com/python/typeshed")
39269 (synopsis "Typing stubs for ujson")
39270 (description
39271 "This is a PEP 561 type stub package for the ujson package. It can be
39272used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
39273uses ujson.")
39274 (license license:asl2.0)))
39275
39276(define-public python-types-urllib3
39277 (package
39278 (name "python-types-urllib3")
39279 (version "1.26.25.14")
39280 (source
39281 (origin
39282 (method url-fetch)
39283 (uri (pypi-uri "types-urllib3" version))
39284 (sha256
39285 (base32 "13ys7c7k9pg3lb11qvdgs9xq8j8bvcpjpg61j8dqq6wmgibpz6r2"))))
39286 (build-system pyproject-build-system)
39287 (arguments (list #:tests? #f)) ;no tests in PyPI archive
39288 (native-inputs
39289 (list python-setuptools))
39290 (home-page "https://github.com/python/typeshed")
39291 (synopsis "Typing stubs for urllib3")
39292 (description "This package provides typing stubs for urllib3.")
39293 (license license:asl2.0)))
39294
39295(define-public python-typeshed-client
39296 (package
39297 (name "python-typeshed-client")
39298 (version "2.8.2")
39299 (source
39300 (origin
39301 (method git-fetch)
39302 (uri (git-reference
39303 (url "https://github.com/JelleZijlstra/typeshed_client")
39304 (commit (string-append "v" version))))
39305 (file-name (git-file-name name version))
39306 (sha256
39307 (base32 "0i74ygf49184ab1ipfdzf706wnzs3id15rkysqarzcngdydrcszs"))))
39308 (build-system pyproject-build-system)
39309 (arguments
39310 (list #:test-backend #~'custom
39311 #:test-flags #~(list "tests/test.py")))
39312 (native-inputs
39313 (list python-setuptools))
39314 (propagated-inputs
39315 (list python-importlib-resources
39316 python-typing-extensions))
39317 (home-page "https://github.com/JelleZijlstra/typeshed_client")
39318 (synopsis "Library for accessing stubs in typeshed")
39319 (description
39320 "This package provides a library for accessing stubs in typeshed.")
39321 (license license:expat)))
39322
39323(define-public python-typing-inspect
39324 (package
39325 (name "python-typing-inspect")
39326 (version "0.9.0")
39327 (source
39328 (origin
39329 (method url-fetch)
39330 (uri (pypi-uri "typing_inspect" version))
39331 (sha256
39332 (base32 "0y0z8v4wr5bahlgzjd1il2z8vlfd2asiyb45wia6kvznyqpw8gxj"))))
39333 (build-system pyproject-build-system)
39334 (native-inputs
39335 (list python-pytest
39336 python-setuptools
39337 python-wheel))
39338 (propagated-inputs
39339 (list python-mypy-extensions
39340 python-typing-extensions))
39341 (home-page "https://github.com/ilevkivskyi/typing_inspect")
39342 (synopsis "API for inspection of types in the Python @code{typing} module")
39343 (description
39344 "The @code{typing_inspect} module defines experimental API for runtime
39345inspection of types defined in the Python standard typing module.")
39346 (license license:expat)))
39347
39348(define-public python-typing-inspection
39349 (package
39350 (name "python-typing-inspection")
39351 (version "0.4.2")
39352 (source
39353 (origin
39354 (method git-fetch)
39355 (uri (git-reference
39356 (url "https://github.com/pydantic/typing-inspection")
39357 (commit (string-append "v" version))))
39358 (file-name (git-file-name name version))
39359 (sha256
39360 (base32 "1dqib4arxxaxwyapw6y4pcvm38l8djkhd8cfr149w42bw4xrqr38"))))
39361 (build-system pyproject-build-system)
39362 ;; tests: 89 passed, 3 skipped
39363 (native-inputs
39364 (list python-pytest
39365 python-hatchling))
39366 (propagated-inputs
39367 (list python-typing-extensions))
39368 (home-page "https://github.com/pydantic/typing-inspection")
39369 (synopsis "Runtime typing introspection tools")
39370 (description
39371 "@code{typing-inspection} provides tools to inspect type annotations at
39372runtime.")
39373 (license license:expat)))
39374
39375(define-public python-typogrify
39376 (package
39377 (name "python-typogrify")
39378 (version "2.1.0")
39379 (source
39380 (origin
39381 (method url-fetch)
39382 (uri (pypi-uri "typogrify" version))
39383 (sha256
39384 (base32 "1vk17q04sax8rpdqll5zldnf6l3ixgknbnn9wimnwah3k1701aph"))))
39385 (build-system pyproject-build-system)
39386 (arguments
39387 (list
39388 #:test-flags
39389 #~(list "--doctest-modules"
39390 "typogrify/filters.py"
39391 "typogrify/packages/titlecase/tests.py")))
39392 (native-inputs
39393 (list python-pytest
39394 python-hatchling))
39395 (propagated-inputs
39396 (list python-smartypants))
39397 (home-page "https://github.com/justinmayer/typogrify")
39398 (synopsis "Filters to transform text into typographically-improved HTML")
39399 (description
39400 "@code{typogrify} provides a set of custom filters that automatically
39401apply various transformations to plain text in order to yield
39402typographically-improved HTML. While often used in conjunction with Jinja and
39403Django template systems, the filters can be used in any environment.")
39404 (license license:bsd-3)))
39405
39406(define-public python-ua-parser
39407 (package
39408 (name "python-ua-parser")
39409 (version "0.10.0")
39410 (source
39411 (origin
39412 (method url-fetch)
39413 (uri (pypi-uri "ua-parser" version))
39414 (sha256
39415 (base32
39416 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
39417 (build-system pyproject-build-system)
39418 (arguments
39419 `(#:tests? #f)) ;no test suite in release
39420 (native-inputs
39421 (list python-pyyaml
39422 python-setuptools))
39423 (home-page "https://github.com/ua-parser/uap-python")
39424 (synopsis "User agent parser")
39425 (description
39426 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
39427 (license license:asl2.0)))
39428
39429(define-public python-ubelt
39430 (package
39431 (name "python-ubelt")
39432 (version "1.3.6")
39433 (source
39434 (origin
39435 (method git-fetch)
39436 (uri (git-reference
39437 (url "https://github.com/Erotemic/ubelt")
39438 (commit (string-append "v" version))))
39439 (file-name (git-file-name name version))
39440 (sha256
39441 (base32 "1v2kf9lbdfaf9nppdq45rfanz4bdd2v6x59iajcznwgc4jmhj2na"))))
39442 (build-system pyproject-build-system)
39443 (arguments
39444 (list
39445 ;; The builder user home doesn't match HOME, which causes this test to
39446 ;; fail.
39447 #:test-flags #~(list "-k" "not userhome")
39448 #:phases
39449 #~(modify-phases %standard-phases
39450 (add-before 'check 'pre-check
39451 (lambda _
39452 (setenv "HOME" "/tmp")))))) ;else the test suite hangs
39453 (native-inputs
39454 (list python-pytest
39455 python-requests
39456 python-setuptools
39457 python-wheel
39458 python-xdoctest))
39459 (propagated-inputs
39460 (list python-ordered-set))
39461 (home-page "https://github.com/Erotemic/ubelt")
39462 (synopsis "Python library for hashing, caching, timing and more")
39463 (description
39464 "Ubelt is a small library of simple functions that extend the Python
39465standard library. It includes an @acronym{API, Application Programming
39466Interface} to simplify common problems such as caching, timing, computing
39467progress, among other things.")
39468 (license license:asl2.0)))
39469
39470(define-public python-uc-micro-py
39471 (package
39472 (name "python-uc-micro-py")
39473 (version "1.0.1")
39474 (source (origin
39475 (method git-fetch) ;for tests
39476 (uri (git-reference
39477 (url "https://github.com/tsutsu3/uc.micro-py")
39478 (commit (string-append "v" version))))
39479 (file-name (git-file-name name version))
39480 (sha256
39481 (base32
39482 "17f55gi55rg47nm88fn3f8851ph03dgykdp011lxr3j6hk18lyfv"))))
39483 (build-system pyproject-build-system)
39484 (native-inputs (list python-pytest python-setuptools python-wheel))
39485 (home-page "https://github.com/tsutsu3/uc.micro-py")
39486 (synopsis "Unicode data files for linkify-it-py projects")
39487 (description "This package contains a micro subset of Unicode data files
39488for linkify-it-py projects.")
39489 (license license:expat)))
39490
39491(define-public python-ujson
39492 (package
39493 (name "python-ujson")
39494 (version "5.10.0")
39495 (source
39496 (origin
39497 (method url-fetch)
39498 (uri (pypi-uri "ujson" version))
39499 (sha256
39500 (base32
39501 "1habmn3bmmv2ym4ldiijcavdkdzp8h28h60hgwjkhxwcbly8zkdk"))
39502 (modules '((guix build utils)))
39503 (snippet
39504 #~(begin (delete-file-recursively "deps")))))
39505 (build-system pyproject-build-system)
39506 (arguments
39507 (list
39508 #:phases
39509 #~(modify-phases %standard-phases
39510 (add-after 'unpack 'link-to-system-double-conversion
39511 (lambda* (#:key inputs #:allow-other-keys)
39512 (let ((d-c (assoc-ref inputs "double-conversion")))
39513 (substitute* "setup.py"
39514 (("./deps/double-conversion/double-conversion\"")
39515 (string-append d-c "/include/double-conversion\""))
39516 (("-lstdc++" stdc)
39517 (string-append "-L" d-c "/lib\","
39518 " \"-ldouble-conversion\","
39519 " \"" stdc)))))))))
39520 (native-inputs
39521 (list double-conversion
39522 python-pytest
39523 python-setuptools
39524 python-setuptools-scm
39525 python-wheel))
39526 (home-page "https://github.com/ultrajson/ultrajson")
39527 (synopsis "Ultra fast JSON encoder and decoder for Python")
39528 (description
39529 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
39530bindings for Python 3.")
39531 (license license:bsd-3)))
39532
39533(define-public python-ukkonen
39534 (package
39535 (name "python-ukkonen")
39536 (version "1.0.1")
39537 (source
39538 (origin
39539 ;; There are no tests in the PyPI tarball.
39540 (method git-fetch)
39541 (uri (git-reference
39542 (url "https://github.com/asottile/ukkonen")
39543 (commit (string-append "v" version))))
39544 (file-name (git-file-name name version))
39545 (sha256
39546 (base32 "17gspl2dsykg000275svvyam4k7wz9ypi9xrfrmsgcgryczravlc"))))
39547 (build-system pyproject-build-system)
39548 (native-inputs (list python-pytest python-setuptools python-wheel))
39549 (propagated-inputs (list python-cffi))
39550 (home-page "https://github.com/asottile/ukkonen")
39551 (synopsis "Implementation of bounded Levenshtein distance (Ukkonen)")
39552 (description "This package is an implementation of of bounded Levenshtein
39553distance (Ukkonen).")
39554 (license license:expat)))
39555
39556(define-public python-ukpostcodeparser
39557 (package
39558 (name "python-ukpostcodeparser")
39559 (version "1.1.2")
39560 (source (origin
39561 (method url-fetch)
39562 (uri (pypi-uri "UkPostcodeParser" version))
39563 (sha256
39564 (base32
39565 "03jkf1ygbwq3akzbcjyjk1akc1hv2sfgx90306pq1nwklbpn80lk"))))
39566 (build-system pyproject-build-system)
39567 (arguments
39568 (list
39569 #:test-flags
39570 #~(list
39571 ;; Tests for lowercase postcodes fail.
39572 "-k" (string-join
39573 (list "not test_091 "
39574 "test_097 "
39575 "test_098 "
39576 "test_125 "
39577 "test_131")
39578 " and not ")
39579 "ukpostcodeparser/test/parser.py")))
39580 (native-inputs
39581 (list python-pytest python-setuptools))
39582 (home-page "https://github.com/hamstah/ukpostcodeparser")
39583 (synopsis "UK Postcode parser for Python")
39584 (description
39585 "This library provides the @code{parse_uk_postcode} function for
39586parsing UK postcodes.")
39587 (license license:expat)))
39588
39589(define-public python-ulid
39590 (package
39591 (name "python-ulid")
39592 (version "3.1.0")
39593 (source
39594 (origin
39595 (method git-fetch)
39596 (uri (git-reference
39597 (url "https://github.com/mdomke/python-ulid")
39598 (commit version)))
39599 (file-name (git-file-name name version))
39600 (sha256
39601 (base32 "0m1sixmqynlalsw50af5mv5q4gpz2052d1p2ig9hr7yqmdvqcz6p"))))
39602 (build-system pyproject-build-system)
39603 (arguments
39604 (list
39605 #:phases
39606 #~(modify-phases %standard-phases
39607 (add-after 'unpack 'set-version
39608 (lambda _
39609 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
39610 (native-inputs
39611 (list python-freezegun
39612 python-hatch-fancy-pypi-readme
39613 python-hatch-vcs
39614 python-hatchling
39615 python-pytest))
39616 (propagated-inputs
39617 (list python-pydantic))
39618 (home-page "https://github.com/mdomke/python-ulid")
39619 (synopsis "Universally unique lexicographically sortable identifier")
39620 (description
39621 "ULID is a universally unique lexicographically sortable identifier.
39622It is:
39623@itemize
39624@item 128-bit compatible with UUID
39625@item 1.21e+24 unique ULIDs per millisecond
39626@item lexicographically sortable!
39627@item canonically encoded as a 26 character string, as opposed to the 36
39628character UUID
39629@item uses Crockford's base32 for better efficiency and readability (5 bits
39630per character)
39631@item case insensitive
39632@item no special characters (URL safe)
39633@item monotonic sort order (correctly detects and handles the same
39634millisecond)
39635@end itemize")
39636 (license license:expat)))
39637
39638(define-public python-uncertainties
39639 (package
39640 (name "python-uncertainties")
39641 (version "3.2.3")
39642 (source
39643 (origin
39644 (method url-fetch)
39645 (uri (pypi-uri "uncertainties" version))
39646 (sha256
39647 (base32
39648 "0c9hl35jvld1a1vinh9mdcpfgz4ykqinlm1dj917lqbgd0z6b9bn"))))
39649 (build-system pyproject-build-system)
39650 (native-inputs
39651 (list python-pytest python-setuptools python-setuptools-scm python-wheel))
39652 (propagated-inputs (list python-numpy))
39653 (home-page "https://uncertainties.readthedocs.io/en/latest/")
39654 (synopsis "Calculations with uncertainties")
39655 (description
39656 "The uncertainties package transparently handles calculations with
39657numbers with uncertainties. It can also yield the derivatives of any
39658expression.")
39659 (license license:bsd-3)))
39660
39661(define-public python-unicodedata2
39662 (package
39663 (name "python-unicodedata2")
39664 (version "16.0.0")
39665 (source
39666 (origin
39667 (method url-fetch)
39668 (uri (pypi-uri "unicodedata2" version))
39669 (sha256
39670 (base32 "1z3llixb4cd6cc6nmyps5vv2sss14n3x6dzcc65xg75mj9jqsj05"))))
39671 (build-system pyproject-build-system)
39672 (native-inputs
39673 (list python-pytest
39674 python-setuptools))
39675 (home-page "https://github.com/fonttools/unicodedata2")
39676 (synopsis "Python unicodedata backport")
39677 (description "This package corresponds to the latest @code{unicodedata}
39678standard Python module.")
39679 (license license:asl2.0)))
39680
39681(define-public python-unicode-linebreak
39682 (package
39683 (name "python-unicode-linebreak")
39684 (version "0.0.2")
39685 (source
39686 (origin
39687 (method git-fetch)
39688 (uri (git-reference
39689 (url "https://github.com/mondeja/py-unicode-linebreak")
39690 (commit (string-append "v" version))))
39691 (file-name (git-file-name name version))
39692 (sha256
39693 (base32 "0qvh729b2q82sy057qgldcbz513wxnsckmwl3c18wkyb3c1iq2qk"))))
39694 (build-system pyproject-build-system)
39695 (arguments
39696 (list
39697 #:imported-modules `(,@%cargo-build-system-modules
39698 ,@%pyproject-build-system-modules)
39699 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
39700 (guix build pyproject-build-system)
39701 (guix build utils))
39702 #:test-backend #~'unittest
39703 #:phases
39704 #~(modify-phases %standard-phases
39705 (add-after 'unpack 'prepare-cargo-build-system
39706 (lambda args
39707 (for-each
39708 (lambda (phase)
39709 (format #t "Running cargo phase: ~a~%" phase)
39710 (apply (assoc-ref cargo:%standard-phases phase)
39711 #:cargo-target #$(cargo-triplet)
39712 args))
39713 '(unpack-rust-crates
39714 configure
39715 check-for-pregenerated-files
39716 patch-cargo-checksums)))))))
39717 (native-inputs
39718 (append
39719 (list maturin
39720 rust
39721 `(,rust "cargo"))
39722 (or (and=> (%current-target-system)
39723 (compose list make-rust-sysroot))
39724 '())))
39725 (inputs (cargo-inputs 'unicode_linebreak))
39726 (home-page "https://github.com/mondeja/py-unicode-linebreak")
39727 (synopsis "Markdown paragraph wrapper")
39728 (description
39729 "This package provides a Markdown paragraph wrapper using Unicode Line
39730Breaking Algorithm written in Rust with Python bindings.")
39731 (license license:expat)))
39732
39733(define-public python-unicodeitplus
39734 (package
39735 (name "python-unicodeitplus")
39736 (version "0.3.1")
39737 (source
39738 (origin
39739 (method url-fetch)
39740 (uri (pypi-uri "unicodeitplus" version))
39741 (sha256
39742 (base32 "1mssdjih7dqz25lrb2pyjg2yvab0b9c7a5k1llx1yzkkqbqyh74c"))))
39743 (build-system pyproject-build-system)
39744 (native-inputs
39745 (list python-pytest
39746 python-setuptools
39747 python-setuptools-scm))
39748 (propagated-inputs
39749 (list python-lark))
39750 (home-page "https://github.com/HDembinski/unicodeitplus")
39751 (synopsis "Convert simple LaTeX to an Unicode approximation")
39752 (description
39753 "This package provides a more complete LaTeX to Unicode converter than
39754@code{unicodeit} using a parser generated from @acronym{EBNF, Extended
39755Backus-Naur Form} with the Lark library.")
39756 (license license:bsd-3)))
39757
39758(define-public python-unidecode
39759 (package
39760 (name "python-unidecode")
39761 (version "1.4.0")
39762 (source
39763 (origin
39764 (method url-fetch)
39765 (uri (pypi-uri "Unidecode" version))
39766 (sha256
39767 (base32 "08rbx8vxsnj06cvrdxy80zrn9hk25lwcqfh2fdjng2rk1189hdff"))))
39768 (build-system pyproject-build-system)
39769 (native-inputs
39770 (list python-pytest python-setuptools))
39771 (home-page "https://pypi.org/project/Unidecode/")
39772 (synopsis "ASCII transliterations of Unicode text")
39773 (description
39774 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
39775useful when integrating with legacy code that doesn't support Unicode, or for
39776ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
39777machine identifiers from human-readable Unicode strings that should still be
39778somewhat intelligible.")
39779 (license license:gpl2+)))
39780
39781(define-public python-unique-log-filter
39782 (package
39783 (name "python-unique-log-filter")
39784 (version "0.1.0")
39785 (source
39786 (origin
39787 (method git-fetch)
39788 (uri (git-reference
39789 (url "https://github.com/twizmwazin/unique_log_filter")
39790 (commit (string-append "v" version))))
39791 (file-name (git-file-name name version))
39792 (sha256
39793 (base32 "036mh6nqskck2fa1q2inasqxb9wcz2p09qcpldnnffzcy1a6kzba"))))
39794 (build-system pyproject-build-system)
39795 (arguments
39796 (list #:test-backend #~'custom
39797 #:test-flags #~(list "test_unique_log_filter.py")))
39798 (native-inputs (list python-flit-core))
39799 (home-page "https://github.com/twizmwazin/unique_log_filter")
39800 (synopsis "Log filter that removes duplicate log messages")
39801 (description
39802 "This library provides a filter for the @code{logging} module
39803from the Python standard library which allows removing duplicate log
39804messages.")
39805 (license license:bsd-2)))
39806
39807(define-public python-uniseg
39808 (package
39809 (name "python-uniseg")
39810 (version "0.10.0")
39811 (source
39812 (origin
39813 (method url-fetch)
39814 (uri (pypi-uri "uniseg" version))
39815 (sha256
39816 (base32 "18sj1i7xlssrsfwlr95bd4x78mfhq0v6irfx3b7fkgr17a5jbsmm"))))
39817 (build-system pyproject-build-system)
39818 (native-inputs
39819 (list python-pytest
39820 python-setuptools
39821 python-setuptools-scm))
39822 (home-page "https://bitbucket.org/emptypage/uniseg-python")
39823 (synopsis "Python library to determine Unicode text segmentations")
39824 (description
39825 "Uniseg is a Python package used to determine Unicode text segmentations.
39826Supported segmentations include:
39827@enumerate
39828@item @dfn{Code point} (any value in the Unicode codespace)
39829@item @dfn{Grapheme cluster} (user-perceived character made of a single or
39830multiple Unicode code points, e.g. \"G\" + acute-accent)
39831@item Word break
39832@item Sentence break
39833@item Line break
39834@end enumerate")
39835 (license license:expat)))
39836
39837(define-public python-universal-pathlib
39838 (package
39839 (name "python-universal-pathlib")
39840 (version "0.2.6")
39841 (source
39842 (origin
39843 (method git-fetch)
39844 (uri (git-reference
39845 (url "https://github.com/fsspec/universal_pathlib")
39846 (commit (string-append "v" version))))
39847 (file-name (git-file-name name version))
39848 (sha256
39849 (base32 "0y2czk4civjjy9v8vhv6icivk4lapjcjzhdxjrrm3629apqja7wp"))))
39850 (build-system pyproject-build-system)
39851 (arguments
39852 (list
39853 #:tests? #f ;requires network
39854 #:phases
39855 #~(modify-phases %standard-phases
39856 (add-after 'unpack 'set-version
39857 (lambda _
39858 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
39859 (native-inputs
39860 (list python-setuptools
39861 python-setuptools-scm))
39862 (propagated-inputs
39863 (list python-fsspec
39864 python-pathlib-abc))
39865 (home-page "https://github.com/fsspec/universal_pathlib")
39866 (synopsis
39867 "@code{pathlib} API extended to use @code{fsspec} backends")
39868 (description
39869 "Universal Pathlib is a Python library that extends the @code{pathlib.Path}
39870API to support a variety of backend filesystems via filesystem_spec.")
39871 (license license:expat)))
39872
39873(define-public python-unpaddedbase64
39874 (package
39875 (name "python-unpaddedbase64")
39876 (version "2.1.0")
39877 (source
39878 (origin
39879 (method git-fetch)
39880 (uri (git-reference
39881 (url "https://github.com/matrix-org/python-unpaddedbase64")
39882 (commit (string-append "v" version))))
39883 (file-name (git-file-name name version))
39884 (sha256
39885 (base32 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))
39886 (build-system pyproject-build-system)
39887 (native-inputs (list python-poetry-core
39888 python-pytest
39889 python-setuptools
39890 python-wheel))
39891 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
39892 (synopsis "Encode and decode Base64 without “=” padding")
39893 (description
39894 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
39895using “=” characters. However this conveys no benefit so many protocols
39896choose to use Base64 without the “=” padding.")
39897 (license license:asl2.0)))
39898
39899(define-public python-update-checker
39900 (package
39901 (name "python-update-checker")
39902 (version "0.18.0")
39903 (source
39904 (origin
39905 (method url-fetch)
39906 (uri (pypi-uri "update-checker" version))
39907 (sha256
39908 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
39909 (build-system pyproject-build-system)
39910 (native-inputs
39911 (list python-pytest
39912 python-setuptools))
39913 (propagated-inputs
39914 (list python-requests))
39915 (home-page "https://github.com/bboe/update_checker")
39916 (synopsis "Python module that will check for package updates")
39917 (description "This package provides a Python module that will check for
39918package updates.")
39919 (license license:bsd-2)))
39920
39921(define-public python-uri-template
39922 (package
39923 (name "python-uri-template")
39924 (version "1.3.0")
39925 (source
39926 (origin
39927 (method url-fetch)
39928 (uri (pypi-uri "uri-template" version))
39929 (sha256
39930 (base32 "1ixczlgnsjv2850r6w0cb2npwcwzdqri8njr1pi7v371cpmzh00f"))))
39931 (build-system pyproject-build-system)
39932 (arguments
39933 (list
39934 #:phases
39935 '(modify-phases %standard-phases
39936 (replace 'check
39937 (lambda* (#:key tests? #:allow-other-keys)
39938 (when tests?
39939 (invoke "python3" "test.py")))))))
39940 (native-inputs
39941 (list python-setuptools
39942 python-setuptools-scm
39943 python-wheel))
39944 (home-page "https://gitlab.linss.com/open-source/python/uri-template")
39945 (synopsis "RFC 6570 URI Template Processor")
39946 (description "This package implements URI Template expansion in strict
39947adherence to RFC 6570, but adds a few extensions.")
39948 (license license:expat)))
39949
39950(define-public python-urwid
39951 (package
39952 (name "python-urwid")
39953 (version "3.0.3")
39954 (source
39955 (origin
39956 (method url-fetch)
39957 (uri (pypi-uri "urwid" version))
39958 (sha256
39959 (base32
39960 "16zdji1fdr5jbry9h01dxwnadrygs1xj415jqnhmmnlcavfh821h"))))
39961 (build-system pyproject-build-system)
39962 (arguments
39963 (list
39964 #:test-flags
39965 #~(list "tests"
39966 ;; According to Debian these tests are cursed.
39967 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
39968 "--ignore=tests/test_vterm.py")))
39969 (native-inputs
39970 (list python-pytest
39971 python-pytest-cov
39972 python-setuptools
39973 python-setuptools-scm))
39974 (propagated-inputs
39975 (list python-wcwidth
39976 ;; [optional]
39977 python-pygobject
39978 python-pyzmq
39979 python-tornado
39980 python-pyserial
39981 python-twisted))
39982 (home-page "https://urwid.org")
39983 (synopsis "Console user interface library for Python")
39984 (description
39985 "Urwid is a curses-based UI/widget library for Python. It includes many
39986features useful for text console applications.")
39987 (license license:lgpl2.1+)))
39988
39989(define-public python-urwid-2
39990 (package
39991 (inherit python-urwid)
39992 (name "python-urwid")
39993 (version "2.6.16")
39994 (source
39995 (origin
39996 (method url-fetch)
39997 (uri (pypi-uri "urwid" version))
39998 (sha256
39999 (base32 "18ijvgf1l7jvmg45x1cysn3c9rdrg1w0405acig3hk7476cj7bck"))))))
40000
40001(define-deprecated/public-alias python-urwid-3
40002 python-urwid) ;may be removed after 2025-11-12
40003
40004(define-public python-urwid-for-zulip-term
40005 ;; [email protected] requires exact 2.1.2 version otherewise some tests fail
40006 ;; to pass, remove when no longer required.
40007 (hidden-package
40008 (package
40009 (inherit python-urwid)
40010 (version "2.1.2")
40011 (source
40012 (origin
40013 (method url-fetch)
40014 (uri (pypi-uri "urwid" version))
40015 (sha256
40016 (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
40017 (arguments
40018 (list #:tests? #f)))))
40019
40020(define-public python-urwid-readline
40021 (package
40022 (name "python-urwid-readline")
40023 (version "0.15.1")
40024 (source
40025 (origin
40026 (method git-fetch)
40027 (uri (git-reference
40028 (url "https://github.com/rr-/urwid_readline")
40029 (commit version)))
40030 (file-name (git-file-name name version))
40031 (sha256
40032 (base32 "0zhpx86gvpkziclb7bcqn73fadkzn805rjqy7lzhrza46lphq8qy"))))
40033 (build-system pyproject-build-system)
40034 (native-inputs
40035 (list python-pytest
40036 python-setuptools))
40037 (propagated-inputs
40038 (list python-urwid))
40039 (home-page "https://github.com/rr-/urwid_readline")
40040 (synopsis "Text input widget for urwid that supports readline shortcuts")
40041 (description
40042 "This package provides a textbox edit widget for @code{python-urwid} that
40043supports @code{readline} shortcuts.")
40044 (license license:expat)))
40045
40046(define-public python-urwidgets
40047 (package
40048 (name "python-urwidgets")
40049 (version "0.2.1")
40050 (source
40051 (origin
40052 (method url-fetch)
40053 (uri (pypi-uri "urwidgets" version))
40054 (sha256
40055 (base32 "1vrydw9h8c5gi89dnv12a9cdyyxaffvxl1kq51f118cxjk9brwpr"))))
40056 (build-system pyproject-build-system)
40057 (arguments
40058 (list #:tests? #f)) ;no tests
40059 (native-inputs
40060 (list python-setuptools))
40061 (propagated-inputs
40062 (list python-urwid-2))
40063 (home-page "https://github.com/AnonymouX47/urwidgets")
40064 (synopsis "Collection of widgets for urwid")
40065 (description
40066 "This package provides a collection of widgets for urwid.")
40067 (license license:expat)))
40068
40069(define-public python-urwidtrees
40070 (package
40071 (name "python-urwidtrees")
40072 (version "1.0.4")
40073 (source
40074 (origin
40075 (method git-fetch)
40076 ;; package author intends on distributing via github rather than pypi:
40077 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
40078 (uri (git-reference
40079 (url "https://github.com/pazz/urwidtrees")
40080 (commit version)))
40081 (file-name (git-file-name name version))
40082 (sha256
40083 (base32
40084 "17k0gx8i7wrzw6skzdjh9b8v3n6lb5zvg9jrybc3d09p8ipvc31i"))))
40085 (build-system pyproject-build-system)
40086 (arguments
40087 '(#:tests? #f)) ; no tests
40088 (propagated-inputs (list python-urwid))
40089 (native-inputs (list python-mock python-setuptools python-wheel))
40090 (home-page "https://github.com/pazz/urwidtrees")
40091 (synopsis "Tree widgets for urwid")
40092 (description "Urwidtrees is a Widget Container API for the @code{urwid}
40093toolkit. Use it to build trees of widgets.")
40094 (license license:gpl3+)))
40095
40096(define-public python-user-agents
40097 (package
40098 (name "python-user-agents")
40099 (version "2.2.0")
40100 (source
40101 (origin
40102 (method git-fetch)
40103 (uri (git-reference
40104 (url "https://github.com/selwin/python-user-agents")
40105 (commit (string-append "v" version))))
40106 (file-name (git-file-name name version))
40107 (sha256
40108 (base32 "0pcbjqj21c2ixhl414bh2h8khi8y1igzfpkyqwan1pakix0lq45a"))))
40109 (build-system pyproject-build-system)
40110 (arguments
40111 (list #:test-backend #~'unittest))
40112 (native-inputs
40113 (list python-setuptools))
40114 (propagated-inputs
40115 (list python-ua-parser))
40116 (home-page "https://github.com/selwin/python-user-agents")
40117 (synopsis "User Agent strings parsing library")
40118 (description
40119 "A library to identify devices (phones, tablets) and their capabilities by
40120parsing (browser/HTTP) user agent strings.")
40121 (license license:expat)))
40122
40123(define-public python-userpath
40124 (package
40125 (name "python-userpath")
40126 (version "1.9.2")
40127 (source
40128 (origin
40129 (method url-fetch)
40130 (uri (pypi-uri "userpath" version))
40131 (sha256
40132 (base32 "05fqxzdi27vqm5lywxs6bm2j4d8k91fx2ihqhg65g4h6mf6jhlkc"))))
40133 (build-system pyproject-build-system)
40134 (arguments
40135 ;; See https://github.com/ofek/userpath/issues/43.
40136 ;; In Guix, tests try to find the temporary build directory in PATH, but
40137 ;; only the store output is present.
40138 (list #:tests? #f))
40139 (native-inputs (list python-hatchling python-pytest))
40140 (propagated-inputs (list python-click))
40141 (home-page "https://github.com/ofek/userpath")
40142 (synopsis "Add locations to the user's PATH")
40143 (description "This package provides a tool for modifying a user's PATH.")
40144 (license license:expat)))
40145
40146(define-public python-userspacefs
40147 (package
40148 (name "python-userspacefs")
40149 (version "3.1.1")
40150 (source
40151 (origin
40152 (method url-fetch)
40153 (uri (pypi-uri "userspacefs" version))
40154 (sha256
40155 (base32 "0lfzgijza3p4wbrhlf8pzj89j7caj8x6aij78d4izppvq4kfjqs6"))))
40156 (build-system pyproject-build-system)
40157 (arguments
40158 (list #:tests? #f ;no tests
40159 #:phases
40160 #~(modify-phases %standard-phases
40161 (add-after 'unpack 'hardcode-libfuse
40162 (lambda* (#:key inputs #:allow-other-keys)
40163 (substitute* "userspacefs/fusepy.py"
40164 (("^_libfuse_path.*")
40165 (string-append "_libfuse_path = '"
40166 (search-input-file inputs "lib/libfuse.so")
40167 "'\n"))))))))
40168 (inputs (list fuse-2))
40169 (native-inputs (list python-setuptools))
40170 (propagated-inputs (list python-aiohttp python-typing-extensions))
40171 (home-page "https://thelig.ht/code/userspacefs/readme.html")
40172 (synopsis "User-space file systems for Python")
40173 (description
40174 "@code{userspacefs} is a library that allows you to easily write
40175user-space file systems in Python.")
40176 (license license:gpl3+)))
40177
40178(define-public python-utils
40179 (package
40180 (name "python-utils")
40181 (version "3.9.1")
40182 (source
40183 (origin
40184 (method url-fetch)
40185 (uri (pypi-uri "python_utils" version))
40186 (sha256
40187 (base32 "18292j4p1bvlpbrfj2cgkdby6dpgnl5gbjwly0qb4pj1j914nmzb"))))
40188 (build-system pyproject-build-system)
40189 (arguments
40190 (list
40191 #:phases
40192 #~(modify-phases %standard-phases
40193 (add-after 'unpack 'fix-pytest-config
40194 (lambda _
40195 ;; Drop test coverage requirements.
40196 (substitute* "pytest.ini"
40197 ((".*--cov.*") "")))))))
40198 (native-inputs
40199 (list python-pytest
40200 python-pytest-asyncio
40201 python-setuptools))
40202 (propagated-inputs
40203 (list python-loguru
40204 python-typing-extensions))
40205 (home-page "https://github.com/WoLpH/python-utils")
40206 (synopsis "Convenient utilities not included with the standard Python install")
40207 (description
40208 "Python Utils is a collection of small Python functions and classes
40209which make common patterns shorter and easier.")
40210 (license license:bsd-2)))
40211
40212(define-public python-uuid6
40213 (package
40214 (name "python-uuid6")
40215 (version "2025.0.1")
40216 (source
40217 (origin
40218 (method git-fetch)
40219 (uri (git-reference
40220 (url "https://github.com/oittaa/uuid6-python")
40221 (commit version)))
40222 (file-name (git-file-name name version))
40223 (sha256
40224 (base32 "0xawnq7b0vzcvrw50jfdagn4a2javyav108hlpf31kbn7rn03jhk"))))
40225 (build-system pyproject-build-system)
40226 (arguments
40227 (list
40228 #:test-flags
40229 ;; Test is time based: AssertionError: 13987034766.015247 !=
40230 ;; 13987034766.01471 within 3 places (0.000537872314453125 difference)
40231 #~(list "--deselect=test/test_uuid6.py::UUIDTests::test_time")
40232 #:phases
40233 #~(modify-phases %standard-phases
40234 (add-after 'unpack 'set-version
40235 (lambda _
40236 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
40237 (native-inputs
40238 (list python-pytest
40239 python-setuptools
40240 python-setuptools-scm))
40241 (home-page "https://github.com/oittaa/uuid6-python")
40242 (synopsis "Time-based UUID formats which are suited for use as a database key")
40243 (description
40244 "This module extends immutable UUID objects (the UUID class) with the
40245functions @code{uuid6()}, @code{uuid7()}, and @code{uuid8()} from the proposed
40246@url{https://datatracker.ietf.org/doc/rfc9562/, IETF RFC 9562}.")
40247 (license license:expat)))
40248
40249(define-public python-validate-email
40250 (package
40251 (name "python-validate-email")
40252 (version "1.3")
40253 (source
40254 (origin
40255 (method url-fetch)
40256 (uri (pypi-uri "validate_email" version))
40257 (sha256
40258 (base32 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
40259 (build-system pyproject-build-system)
40260 (arguments (list #:tests? #f)) ;no tests in PyPI or Git
40261 (native-inputs
40262 (list python-setuptools))
40263 (home-page "https://github.com/syrusakbary/validate_email")
40264 (synopsis "Verifies if an email address is valid and really exists")
40265 (description
40266 "@code{validate_email} can be used to verify if an email address is
40267valid and really exists.")
40268 (license license:lgpl3+)))
40269
40270(define-public python-validators
40271 (package
40272 (name "python-validators")
40273 (version "0.34.0")
40274 (source
40275 (origin
40276 (method url-fetch)
40277 (uri (pypi-uri "validators" version))
40278 (sha256
40279 (base32 "07vq3s77f5yndn7jfx39jbsaq5m8wqc3p52v4i6sgyasnh3y8zv4"))))
40280 (build-system pyproject-build-system)
40281 (arguments
40282 (list
40283 ;; python-eth-hash is not packed yet.
40284 #:test-flags #~(list "--ignore=tests/crypto_addresses/test_eth_address.py")))
40285 (native-inputs
40286 (list python-pytest
40287 python-setuptools
40288 python-wheel))
40289 (propagated-inputs
40290 (list python-decorator
40291 ;; python-eth-hash ; optional, not packed yet.
40292 python-six))
40293 (home-page "https://github.com/kvesteri/validators")
40294 (synopsis "Data validation library")
40295 (description
40296 "This package contains validators for different things such as email
40297addresses, IP addresses, URLs, hashes and more. It has been designed to be
40298easy to use and not require defining a schema or form just to validate some
40299input.")
40300 (license license:expat)))
40301
40302(define-public python-valkey
40303 (package
40304 (name "python-valkey")
40305 (version "6.1.1")
40306 (source
40307 (origin
40308 (method git-fetch)
40309 (uri (git-reference
40310 (url "https://github.com/valkey-io/valkey-py")
40311 (commit (string-append "v" version))))
40312 (file-name (git-file-name name version))
40313 (sha256
40314 (base32 "05zmnb8lmygv75zx0hb40s2rgr53sy4g0sizcb9mq8fd09z5i0n2"))))
40315 (build-system pyproject-build-system)
40316 (arguments
40317 ;; XXX: A lot of tests fail with ConnectionError
40318 ;; Maybe we need to spawn a valkey server?
40319 (list #:tests? #f))
40320 (native-inputs
40321 (list python-setuptools))
40322 (home-page "https://github.com/valkey-io/valkey-py")
40323 (synopsis "Python client for Valkey")
40324 (description
40325 "This package provides a python client for the @code{Valkey} key-value
40326store, forked from redis-py.")
40327 (license license:expat)))
40328
40329;; XXX: No fresh releases or updates since 2016, consider to remove, leaf
40330;; package.
40331(define-public python-vcversioner
40332 (package
40333 (name "python-vcversioner")
40334 (version "2.16.0.0")
40335 (source
40336 (origin
40337 (method url-fetch)
40338 (uri (pypi-uri "vcversioner" version))
40339 (sha256
40340 (base32
40341 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
40342 (build-system pyproject-build-system)
40343 (arguments
40344 (list #:tests? #f)) ;no tests in PyPI archvie
40345 (native-inputs
40346 (list python-setuptools))
40347 (home-page "https://github.com/habnabit/vcversioner")
40348 (synopsis "Python library for version number discovery")
40349 (description
40350 "Vcversioner is a Python library that inspects tagging information in a
40351variety of version control systems in order to discover version numbers.")
40352 (license license:isc)))
40353
40354(define-public python-vdf
40355 (package
40356 (name "python-vdf")
40357 (version "3.4")
40358 (source
40359 (origin
40360 (method git-fetch) ; no tests in PyPI release
40361 (uri (git-reference
40362 (url "https://github.com/ValvePython/vdf")
40363 (commit (string-append "v" version))))
40364 (file-name (git-file-name name version))
40365 (sha256
40366 (base32 "1xc0sd21xgf08pf6dwa4l23y9jb6yqaw61rr03ns0d2r6sby137a"))))
40367 (build-system pyproject-build-system)
40368 (native-inputs
40369 (list python-pytest python-setuptools))
40370 (home-page "https://github.com/ValvePython/vdf")
40371 (synopsis "Work with Valve's VDF text format")
40372 (description
40373 "This package provides @code{python-vdf}, a library for working with
40374 Valve's VDF text format.")
40375 (license license:expat)))
40376
40377(define-public python-vendetect
40378 (package
40379 (name "python-vendetect")
40380 (version "0.0.3")
40381 (source
40382 (origin
40383 (method url-fetch)
40384 (uri (pypi-uri "vendetect" version))
40385 (sha256
40386 (base32 "0hi13sbgr8y66mih2xyzczjfff4lwymkn9cw5215ms2nn6qq9rhi"))))
40387 (build-system pyproject-build-system)
40388 (propagated-inputs (list python-copydetect python-rich))
40389 (native-inputs (list python-hatchling python-pytest))
40390 (home-page "https://github.com/trailofbits/vendetect")
40391 (synopsis "Detect vendored and copy-pasted code")
40392 (description
40393 "Vendetect helps identify copied or vendored code between repositories,
40394making it easier to detect when code has been copied with or without
40395attribution. It uses similarity detection algorithms to compare code files
40396and highlight matching sections.")
40397 (license license:agpl3+)))
40398
40399;; XXX: No updates since 2017.
40400(define-public python-verboselogs
40401 (package
40402 (name "python-verboselogs")
40403 (version "1.7")
40404 (source
40405 (origin
40406 (method url-fetch)
40407 (uri (pypi-uri "verboselogs" version))
40408 (sha256
40409 (base32 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
40410 (build-system pyproject-build-system)
40411 (arguments
40412 (list
40413 #:test-flags
40414 ;; Do not run pylint plugin test, as astroid is an old unsupported
40415 ;; version.
40416 #~(list "-k" "not test_pylint_plugin"
40417 "verboselogs/tests.py")))
40418 (native-inputs
40419 (list python-mock
40420 python-pytest
40421 python-setuptools))
40422 (home-page "https://verboselogs.readthedocs.io")
40423 (synopsis "Verbose logging level for Python's logging module")
40424 (description
40425 "The @code{verboselogs} package extends Python's @code{logging} module to
40426add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
40427 (license license:expat)))
40428
40429(define-public python-verlib2
40430 (package
40431 (name "python-verlib2")
40432 (version "0.3.1")
40433 (source
40434 (origin
40435 (method git-fetch)
40436 (uri (git-reference
40437 (url "https://github.com/pyveci/verlib2")
40438 (commit (string-append "v" version))))
40439 (file-name (git-file-name name version))
40440 (sha256
40441 (base32 "1xp0qfzy4l4fs1rn1670fbf7d7xv1p2s3rplspx8xqszjd5j0n8c"))))
40442 (build-system pyproject-build-system)
40443 (propagated-inputs (list python-importlib-metadata))
40444 (native-inputs
40445 (list python-pretend python-pytest python-pytest-cov python-setuptools))
40446 (home-page "https://github.com/pyveci/verlib2")
40447 (synopsis "Python versioning utilities")
40448 (description
40449 "This package provides a standalone variant of @code{distutils.version} and
40450@code{packaging.version}, without anything else.")
40451 (license license:bsd-2)))
40452
40453;; XXX: No updates since 2018, consider to remove when fails to build, it's a
40454;; leaf package.
40455(define-public python-version
40456 ;; No version tags available in the git repo; just using bare commit instead.
40457 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
40458 (revision "1"))
40459 (package
40460 (name "python-version")
40461 (version (git-version "0.0.2" revision commit))
40462 (source
40463 (origin
40464 (method git-fetch)
40465 (uri (git-reference
40466 (url "https://gitlab.com/halfak/python_version")
40467 (commit commit)))
40468 (file-name (git-file-name name version))
40469 (sha256
40470 (base32 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
40471 (build-system pyproject-build-system)
40472 (arguments
40473 (list #:tests? #f)) ;no tests
40474 (native-inputs
40475 (list python-setuptools))
40476 (home-page "https://gitlab.com/halfak/python_version")
40477 (synopsis "Python version checking utility")
40478 (description
40479 "This package provides a simple utility for checking the python version.")
40480 (license license:expat))))
40481
40482(define-public python-versioneer
40483 (package
40484 (name "python-versioneer")
40485 (version "0.29")
40486 (source
40487 (origin
40488 (method url-fetch)
40489 (uri (pypi-uri "versioneer" version))
40490 (sha256
40491 (base32
40492 "0cap4cjckxp9mlkprqayfs77k3pn5iwpr2riacdxc4bjhnwq7cjs"))
40493 (patches (search-patches "python-versioneer-guix-support.patch"))))
40494 (build-system pyproject-build-system)
40495 (arguments
40496 (list
40497 ;; Minimize test requirements.
40498 #:test-flags
40499 #~(list "--deselect=test/git/test_git.py::Repo::test_pyproject"
40500 "--ignore=test/git/test_invocations.py"
40501 "--ignore=test/test_render.py")
40502 #:phases
40503 #~(modify-phases %standard-phases
40504 (add-before 'check 'pre-check
40505 (lambda _
40506 (invoke "python" "setup.py" "make_versioneer"
40507 "make_long_version_py_git"))))))
40508 (native-inputs
40509 (list git-minimal/pinned
40510 python-pytest
40511 python-setuptools
40512 python-wheel))
40513 (propagated-inputs
40514 (list python-tomli))
40515 (home-page "https://github.com/python-versioneer/python-versioneer")
40516 (synopsis "Version-string management for VCS-controlled trees")
40517 (description
40518 "@code{versioneer} is a tool for managing a recorded version number in
40519distutils-based python projects. The goal is to remove the tedious and
40520error-prone \"update the embedded version string\" step from your release
40521process.")
40522 (license license:unlicense)))
40523
40524(define-public python-verspec
40525 (package
40526 (name "python-verspec")
40527 (version "0.1.0")
40528 (source
40529 (origin
40530 (method url-fetch)
40531 (uri (pypi-uri "verspec" version))
40532 (sha256
40533 (base32 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
40534 (build-system pyproject-build-system)
40535 (arguments
40536 (list
40537 #:phases
40538 #~(modify-phases %standard-phases
40539 (add-before 'check 'pre-check
40540 (lambda _
40541 (invoke "touch" "test/__init__.py"))))))
40542 (native-inputs
40543 (list python-pretend
40544 python-pytest
40545 python-setuptools))
40546 (home-page "https://github.com/jimporter/verspec")
40547 (synopsis "Flexible version handling for Python")
40548 (description
40549 "This Python library handles software versions and specifiers. It is
40550adapted from the @code{packaging} package.")
40551 (license (list license:bsd-2 license:asl2.0))))
40552
40553(define-public python-vine
40554 (package
40555 (name "python-vine")
40556 (version "5.1.0")
40557 (source
40558 (origin
40559 (method url-fetch)
40560 (uri (pypi-uri "vine" version))
40561 (sha256
40562 (base32 "1q31krwxdvwawdn1kfqmpplix31d4jhs0qng26908hawsf0yjqlb"))))
40563 (build-system pyproject-build-system)
40564 (arguments
40565 (list
40566 #:test-flags
40567 ;; AttributeError: 'test_barrier' object has no attribute 'ps'.
40568 #~(list "-k" (string-join
40569 (list "not test_evaluate"
40570 "test_reverse"
40571 "test_cancel"
40572 "test_throw")
40573 " and not "))))
40574 (native-inputs
40575 (list python-pytest python-setuptools python-wheel))
40576 (home-page "https://github.com/celery/vine")
40577 (synopsis "Promises for Python")
40578 (description
40579 "@code{vine} provides a special implementation of promises in that it can
40580be used both for \"promise of a value\" and lazy evaluation. The biggest
40581upside for this is that everything in a promise can also be a promise,
40582e.g. filters, callbacks and errbacks can all be promises.")
40583 (license license:bsd-3)))
40584
40585(define-public python-virtualenv
40586 (package
40587 (name "python-virtualenv")
40588 (version "20.29.1")
40589 (source
40590 (origin
40591 (method url-fetch)
40592 (uri (pypi-uri "virtualenv" version))
40593 (sha256
40594 (base32
40595 "0dfwnn8i1y33kgxhi4xyhsj4yr5vsin7zf9c343bcbyk700rgf5q"))))
40596 (build-system pyproject-build-system)
40597 (arguments
40598 (list
40599 #:test-flags
40600 #~(list "-k" (string-join
40601 (list
40602 ;; These tests require Internet access.
40603 "not test_seed_link_via_app_data"
40604 ;; AssertionError: assert 'python' in ['python3',
40605 ;; 'python3.11'].
40606 ;;
40607 ;; PythonInfo() returns: 'system_executable':
40608 ;; '/gnu/store/...-python-wrapper-3.11.11/bin/python'
40609 "test_fallback_existent_system_executable")
40610 " and not "))))
40611 (native-inputs
40612 (list python-flaky
40613 python-hatch-vcs
40614 python-hatchling
40615 python-packaging
40616 python-pytest
40617 python-pytest-env
40618 python-pytest-freezer
40619 python-pytest-mock
40620 python-pytest-timeout
40621 python-setuptools
40622 python-time-machine))
40623 (propagated-inputs
40624 (list python-distlib
40625 python-filelock
40626 python-platformdirs))
40627 (home-page "https://virtualenv.pypa.io/")
40628 (synopsis "Virtual Python environment builder")
40629 (description
40630 "Virtualenv is a tool to create isolated Python environments.")
40631 (license license:expat)))
40632
40633(define-public python-virtualenv-for-hatch
40634 ;; For [email protected], remove when no longer required.
40635 (hidden-package
40636 (package
40637 (inherit python-virtualenv)
40638 (version "20.25.3")
40639 (source
40640 (origin
40641 (method url-fetch)
40642 (uri (pypi-uri "virtualenv" version))
40643 (sha256
40644 (base32 "1gj57xqgrg53yfn9ypikgky01hvazxdyl556kwsc7b7avyxm9dbv")))))))
40645
40646;; XXX: No new release since 2021, no updates on default branch since 2023, no
40647;; users in Guix; consider to remove if it keeps failing to build.
40648(define-public python-virtualenv-clone
40649 (package
40650 (name "python-virtualenv-clone")
40651 (version "0.5.7")
40652 (source
40653 (origin
40654 (method git-fetch)
40655 (uri (git-reference
40656 (url "https://github.com/edwardgeorge/virtualenv-clone")
40657 (commit version)))
40658 (file-name (git-file-name name version))
40659 (sha256
40660 (base32 "0p0d1y3axvjfnxlgwjx2374gikc8bmc82g0m7yashihbikh7pcxa"))))
40661 (build-system pyproject-build-system)
40662 (arguments
40663 (list
40664 #:test-flags
40665 #~(list "-k" (string-join
40666 ;; UnicodeDecodeError: 'utf-8' codec can't decode byte
40667 ;; 0xba in position 10: invalid start byte
40668 (list "not test_clone_contents"
40669 ;; AssertionError: All versions were skipped.
40670 "test_clone_syspath"
40671 "test_clone_version"
40672 "test_virtualenv_syspath"
40673 "test_virtualenv_versions")
40674 " and not "))))
40675 (native-inputs
40676 (list python-pytest
40677 python-setuptools
40678 python-tomli
40679 python-virtualenv
40680 python-wheel))
40681 (home-page "https://github.com/edwardgeorge/virtualenv-clone")
40682 (synopsis "Clone a non-relocatable virtualenv cleanly")
40683 (description
40684 "Clone non-relocatable virtualenvs without breaking site-packages.")
40685 (license license:expat)))
40686
40687(define-public python-vncdotool
40688 (package
40689 (name "python-vncdotool")
40690 (version "1.2.0")
40691 (source
40692 (origin
40693 (method git-fetch)
40694 (uri (git-reference
40695 (url "http://github.com/sibson/vncdotool")
40696 (commit (string-append "v" version))))
40697 (file-name (git-file-name name version))
40698 (sha256
40699 (base32 "1adsc263qsa3hcyk8mhv0wwq44h8zhcksx92chd5rr1wz37zmc22"))))
40700 (build-system pyproject-build-system)
40701 (propagated-inputs (list python-pillow python-pycryptodomex python-twisted))
40702 (native-inputs (list python-pexpect python-pytest python-pyvirtualdisplay
40703 python-setuptools python-wheel))
40704 (home-page "http://github.com/sibson/vncdotool")
40705 (synopsis "Command line VNC client")
40706 (description
40707 "This package provides a Python command line VNC client. It can be
40708useful to automating interactions with virtual machines or hardware devices
40709that are otherwise difficult to control.")
40710 (license license:expat)))
40711
40712(define-public python-vncdotool-bootstrap
40713 (hidden-package
40714 (package/inherit python-vncdotool
40715 (arguments (list #:tests? #f))
40716 (native-inputs (list python-pexpect python-pytest python-setuptools
40717 python-wheel)))))
40718
40719(define-public python-vobject
40720 (package
40721 (name "python-vobject")
40722 (version "0.9.9")
40723 (source (origin
40724 (method url-fetch)
40725 (uri (pypi-uri "vobject" version))
40726 (sha256
40727 (base32
40728 "13mk8wrg7js0zv3w8246jnxb3i5yp4ascl1csp0q9787wbbyai5c"))))
40729 (build-system pyproject-build-system)
40730 (arguments
40731 '(;; The test suite relies on some non-portable Windows interfaces. Tests
40732 ;; are rewokred on master's HEAD.
40733 #:tests? #f))
40734 (native-inputs
40735 (list python-setuptools))
40736 (propagated-inputs
40737 (list python-dateutil
40738 python-pytz
40739 python-six)) ;it's dropped on master's HEAD
40740 (home-page "https://py-vobject.github.io/")
40741 (synopsis "Parse and generate vCard and vCalendar files")
40742 (description
40743 "Vobject is intended to be a full featured Python package for parsing
40744and generating vCard and vCalendar files. Currently, iCalendar files are
40745supported and well tested. vCard 3.0 files are supported, and all data should
40746be imported, but only a few components are understood in a sophisticated way.")
40747 (license license:asl2.0)))
40748
40749(define-public python-voluptuous
40750 (package
40751 (name "python-voluptuous")
40752 (version "0.15.2")
40753 (source
40754 (origin
40755 (method url-fetch)
40756 (uri (pypi-uri "voluptuous" version))
40757 (sha256
40758 (base32 "1akr0adq9can0ibravqzl4aaf20rgv47g9gk596hn8ykqhrapz3g"))))
40759 (build-system pyproject-build-system)
40760 (native-inputs
40761 (list python-pytest
40762 python-setuptools))
40763 (home-page "https://github.com/alecthomas/voluptuous")
40764 (synopsis "Python data validation library")
40765 (description
40766 "Voluptuous is a Python data validation library. It is primarily
40767intended for validating data coming into Python as JSON, YAML, etc.")
40768 (license license:bsd-3)))
40769
40770(define-public python-wadler-lindig
40771 (package
40772 (name "python-wadler-lindig")
40773 (version "0.1.7")
40774 (source
40775 (origin
40776 ;; GitHub includes the tests, unlike the PyPI tarball
40777 (method git-fetch)
40778 (uri (git-reference
40779 (url "https://github.com/patrick-kidger/wadler_lindig")
40780 (commit (string-append "v" version))))
40781 (file-name (git-file-name name version))
40782 (sha256
40783 (base32 "0nl2zx75p0fza3xyd5qsl4gx68hma677gin68d290ivk6zmkdzx8"))))
40784 (build-system pyproject-build-system)
40785 (native-inputs (list python-hatchling python-pytest python-numpy))
40786 (home-page "https://docs.kidger.site/wadler_lindig")
40787 (synopsis "Pretty printer for Python using the Wadler-Lindig algorithm")
40788 (description
40789 "Wadler-Lindig is a minimal, zero-dependency pretty-printing
40790library for Python that implements a simplified version of the Wadler-Lindig
40791algorithm. Designed to consume less horizontal space than Python's
40792built-in pprint.pprint, it produces compact, well-formatted representations
40793even for complex custom types.")
40794 (license license:asl2.0)))
40795
40796(define-public python-wand
40797 (package
40798 (name "python-wand")
40799 (version "0.6.13")
40800 (source
40801 (origin
40802 (method url-fetch)
40803 (uri (pypi-uri "Wand" version))
40804 (sha256
40805 (base32 "1jpwm956vm35hmgjndr2jwrcql0bwvpsl88q5nr0x8ppxa2380gm"))))
40806 (build-system pyproject-build-system)
40807 (arguments
40808 (list
40809 #:test-flags
40810 ;; These two tests fail even though the signatures are identical.
40811 '(list "-k" "not fourier_transform")
40812 #:phases
40813 #~(modify-phases %standard-phases
40814 (add-after 'unpack 'hardcode-lib-path
40815 (lambda _
40816 (substitute* "wand/api.py"
40817 (("os\\.environ\\.get\\('MAGICK_HOME'\\)")
40818 (string-append "\"" #$(this-package-input "imagemagick") "\""))
40819 (("os\\.environ\\.get\\('WAND_MAGICK_LIBRARY_SUFFIX'\\)")
40820 "\".Q16\"")))))))
40821 (native-inputs
40822 (list python-setuptools python-pytest python-wheel))
40823 (inputs
40824 (list imagemagick))
40825 (home-page "https://docs.wand-py.org/")
40826 (synopsis "MagickWand API binding for Python")
40827 (description
40828 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
40829 (license license:expat)))
40830
40831(define-public python-wasabi
40832 (package
40833 (name "python-wasabi")
40834 (version "1.1.3")
40835 (source
40836 (origin
40837 (method url-fetch)
40838 (uri (pypi-uri "wasabi" version))
40839 (sha256
40840 (base32 "0y085r7hym3x34a9jgxl5cd8gsh617rdmd187q6dn29q027h1csb"))))
40841 (build-system pyproject-build-system)
40842 (arguments
40843 (list
40844 #:test-flags
40845 ;; Test requires nbconvert which is huge.
40846 #~(list "--deselect=wasabi/tests/test_jupyter.py::test_jupyter")))
40847 (native-inputs
40848 (list python-pytest
40849 python-setuptools))
40850 (propagated-inputs
40851 (list python-colorama))
40852 (home-page "https://github.com/ines/wasabi")
40853 (synopsis "Console printing and formatting toolkit")
40854 (description
40855 "This package provides a lightweight console printing and formatting
40856toolkit for Python.")
40857 (license license:expat)))
40858
40859(define-public python-watchdog
40860 (package
40861 (name "python-watchdog")
40862 (version "6.0.0")
40863 (source
40864 (origin
40865 (method url-fetch)
40866 (uri (pypi-uri "watchdog" version))
40867 (sha256
40868 (base32 "10n2v2iflhdriwfp34yvhfcckqb6vs7378fdvqj8xbm3zn17rpwx"))))
40869 (build-system pyproject-build-system)
40870 (arguments
40871 (list
40872 #:test-flags
40873 #~(list "-k" (string-join
40874 (list "not test_kill_auto_restart"
40875 "test_auto_restart_on_file_change_debounce"
40876 ;; Fails with too many open files.
40877 "test_select_fd")
40878 " and not "))))
40879 (native-inputs
40880 (list python-pytest
40881 python-pytest-cov
40882 python-pytest-timeout
40883 python-setuptools))
40884 (propagated-inputs
40885 (list python-pyyaml))
40886 (home-page "https://github.com/gorakhargosh/watchdog")
40887 (synopsis "File system events monitoring")
40888 (description "This package provides a way to monitor file system events
40889such as a file modification and trigger an action. This is similar to inotify,
40890but portable.")
40891 (license license:asl2.0)))
40892
40893(define-public python-watchfiles
40894 (package
40895 (name "python-watchfiles")
40896 (version "1.1.1")
40897 (source
40898 (origin
40899 (method git-fetch)
40900 (uri (git-reference
40901 (url "https://github.com/samuelcolvin/watchfiles")
40902 (commit (string-append "v" version))))
40903 (file-name (git-file-name name version))
40904 (sha256
40905 (base32 "1jj9lqbkk8q61g74lykqgyx4ck30kxs7ljkxqzwd2lwdhh4jfm2j"))))
40906 (build-system pyproject-build-system)
40907 (arguments
40908 (list
40909 ;; Missing file in source.
40910 #:test-flags ''("-k" "not test_docs_examples")
40911 #:imported-modules `(,@%cargo-build-system-modules
40912 ,@%pyproject-build-system-modules)
40913 #:modules '(((guix build cargo-build-system) #:prefix cargo:)
40914 (guix build pyproject-build-system)
40915 (guix build utils))
40916 #:phases
40917 #~(modify-phases %standard-phases
40918 (add-after 'unpack 'prepare-cargo-build-system
40919 (lambda args
40920 (for-each
40921 (lambda (phase)
40922 (format #t "Running cargo phase: ~a~%" phase)
40923 (apply (assoc-ref cargo:%standard-phases phase)
40924 #:cargo-target #$(cargo-triplet)
40925 args))
40926 '(unpack-rust-crates
40927 configure
40928 check-for-pregenerated-files
40929 patch-cargo-checksums))))
40930 (add-after 'build 'install-rust-library
40931 (lambda _
40932 (copy-file "target/release/lib_rust_notify.so"
40933 "watchfiles/_rust_notify.so"))))))
40934 (native-inputs
40935 (append
40936 (list maturin
40937 python-anyio
40938 python-dirty-equals
40939 python-pytest
40940 python-pytest-mock
40941 python-pytest-timeout
40942 rust
40943 `(,rust "cargo"))
40944 (or (and=> (%current-target-system)
40945 (compose list make-rust-sysroot))
40946 '())))
40947 (inputs
40948 (cargo-inputs 'python-watchfiles))
40949 (propagated-inputs
40950 (list python-anyio))
40951 (home-page "https://github.com/samuelcolvin/watchfiles")
40952 (synopsis "Simple, modern file watching and code reload in Python")
40953 (description
40954 "Simple, modern file watching and code reload in Python inspired by
40955@code{watchdog}. Among the differences are a unified approach for each
40956operating systems and an elegant approach to concurrency using threading.")
40957 (license license:expat)))
40958
40959(define-public python-wcwidth
40960 (package
40961 (name "python-wcwidth")
40962 (version "0.2.13")
40963 (source (origin
40964 (method url-fetch)
40965 (uri (pypi-uri "wcwidth" version))
40966 (sha256
40967 (base32
40968 "1dbj74q1iz349sdkxrkc90f7xd4y7a9bdvgxg3cqdcly7430rskj"))))
40969 (build-system pyproject-build-system)
40970 (native-inputs (list python-pytest
40971 python-pytest-cov
40972 python-setuptools
40973 python-wheel))
40974 (home-page "https://github.com/jquast/wcwidth")
40975 (synopsis "Measure number of terminal column cells of wide-character codes")
40976 (description "Wcwidth measures the number of terminal column cells of
40977wide-character codes. It is useful for those implementing a terminal emulator,
40978or programs that carefully produce output to be interpreted by one. It is a
40979Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
40980specified in POSIX.1-2001 and POSIX.1-2008.")
40981 (license license:expat)))
40982
40983(define-public python-whatever
40984 (package
40985 (name "python-whatever")
40986 (version "0.7")
40987 (source
40988 (origin
40989 (method git-fetch)
40990 (uri (git-reference
40991 (url "https://github.com/Suor/whatever")
40992 (commit version)))
40993 (file-name (git-file-name name version))
40994 (sha256
40995 (base32 "1x5b4r3fppp208v52hn8inf2988w4llbkw9kvfc3w81dhmrf5fvq"))))
40996 (build-system pyproject-build-system)
40997 (native-inputs
40998 (list python-pytest python-setuptools python-wheel))
40999 (home-page "https://github.com/Suor/whatever")
41000 (synopsis "Make anonymous functions by partial application of operators")
41001 (description "@code{whatever} provides an easy way to make anonymous
41002functions by partial application of operators.")
41003 (license license:bsd-3)))
41004
41005(define-public python-whatthepatch
41006 (package
41007 (name "python-whatthepatch")
41008 (version "1.0.7")
41009 (source
41010 (origin
41011 (method url-fetch)
41012 (uri (pypi-uri "whatthepatch" version))
41013 (sha256
41014 (base32 "1pvygmgj9xqs8d9lsjxvg1mymni8pjsd44yl0a74002jxbmv9vwy"))))
41015 (build-system pyproject-build-system)
41016 (native-inputs (list python-pytest python-setuptools))
41017 (home-page "https://github.com/cscorley/whatthepatch")
41018 (synopsis "Patch parsing and application library")
41019 (description
41020 "This package provides a patch parsing and application library.")
41021 (license license:expat)))
41022
41023(define-public python-wheel-filename
41024 (package
41025 (name "python-wheel-filename")
41026 (version "1.4.2")
41027 (source
41028 (origin
41029 (method url-fetch)
41030 (uri (pypi-uri "wheel_filename" version))
41031 (sha256
41032 (base32 "1zcqq8mydjjrk8x5xlm53bavs51jm40nz42a7500pd6bbm31r2c7"))))
41033 (build-system pyproject-build-system)
41034 (native-inputs (list python-hatchling python-pytest python-pytest-cov))
41035 (home-page "https://github.com/wheelodex/wheel-filename")
41036 (synopsis "Parse wheel filenames")
41037 (description
41038 "This software allows you to verify
41039@url{https://packaging.python.org/en/latest/specifications/binary-distribution-format/, wheel}
41040filenames and parse them into their component fields.
41041
41042This package adheres strictly to the standard, with the following
41043exceptions:
41044
41045@itemize @bullet
41046@item
41047Version components may be any sequence of the relevant set of
41048characters; they are not verified for PEP 440 compliance.
41049@item
41050The @file{.whl} file extension is matched case-insensitively.
41051@end itemize")
41052 (license license:expat)))
41053
41054(define-public python-whenever
41055 (package
41056 (name "python-whenever")
41057 (version "0.9.2")
41058 (source
41059 (origin
41060 (method url-fetch)
41061 (uri (pypi-uri "whenever" version))
41062 (sha256
41063 (base32 "1awcy5s25z2f7yk4n4x3ibjhypxz7ilgz4hi3fiww58pdcgzcnpw"))))
41064 (build-system pyproject-build-system)
41065 (arguments
41066 (list
41067 ;; tests: 2170 passed, 3 skipped, 2 warnings
41068 #:phases
41069 #~(modify-phases %standard-phases
41070 ;; Use the pure python version
41071 (add-before 'build 'setenv
41072 (lambda _
41073 (setenv "WHENEVER_NO_BUILD_RUST_EXT" "1")))
41074 (add-before 'check 'set-check-environment
41075 (lambda* (#:key inputs #:allow-other-keys)
41076 (setenv "TZ" "UTC")
41077 (setenv "TZDIR"
41078 (search-input-directory inputs
41079 "share/zoneinfo")))))))
41080 (propagated-inputs
41081 (list python-time-machine python-tzdata python-tzlocal))
41082 (native-inputs
41083 (list python-pytest
41084 python-setuptools
41085 tzdata-for-tests))
41086 (home-page "https://whenever.readthedocs.io/")
41087 (synopsis "Modern datetime library for Python")
41088 (description "Modern datetime library for Python. Supports:
41089@itemize
41090@item DST-safe arithmetic
41091@item Nanosecond precision
41092@item Date arithmetic
41093@end itemize")
41094 (license license:expat)))
41095
41096;; XXX: See: <https://github.com/cookiecutter/whichcraft/issues/26>.
41097(define-public python-whichcraft
41098 (package
41099 (name "python-whichcraft")
41100 (version "0.6.1")
41101 (source
41102 (origin
41103 (method url-fetch)
41104 (uri (pypi-uri "whichcraft" version))
41105 (sha256
41106 (base32
41107 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
41108 (build-system pyproject-build-system)
41109 (native-inputs
41110 (list python-pytest python-setuptools))
41111 (home-page "https://github.com/pydanny/whichcraft")
41112 (synopsis "Cross-platform cross-python shutil.which functionality")
41113 (description
41114 "This package provides a shim of the shutil.which function that's
41115designed to work across multiple versions of Python.")
41116 (license license:bsd-3)))
41117
41118(define-public python-whoosh
41119 ;; XXX: 2.7.4 was placed in 2016 and no longer copatible with how setuptools
41120 ;; parses setup.py, use the latest commit, see:
41121 ;; <https://codeberg.org/guix/guix/issues/3318>,
41122 ;; <https://github.com/whoosh-community/whoosh/issues/561>.
41123 (let ((commit "d9a3fa2a4905e7326c9623c89e6395713c189161")
41124 (revision "0"))
41125 (package
41126 (name "python-whoosh")
41127 (version (git-version "2.7.4" revision commit))
41128 (source
41129 (origin
41130 (method git-fetch)
41131 (uri (git-reference
41132 (url "https://github.com/mchaput/whoosh")
41133 (commit commit)))
41134 (file-name (git-file-name name version))
41135 (sha256
41136 (base32 "1i16229nkggl9qi57kxapbc4f2p2wpr67fswvr97w13839d6dxpp"))))
41137 (build-system pyproject-build-system)
41138 (native-inputs
41139 (list python-pytest python-setuptools))
41140 (propagated-inputs
41141 (list python-cached-property))
41142 (home-page "https://github.com/mchaput/whoosh")
41143 (synopsis "Full text indexing, search, and spell checking library")
41144 (description
41145 "Whoosh is a fast, pure-Python full text indexing, search, and spell
41146checking library.")
41147 (license license:bsd-2))))
41148
41149(define-public python-widgetsnbextension
41150 (package
41151 (name "python-widgetsnbextension")
41152 (version "4.0.14")
41153 (source
41154 (origin
41155 (method url-fetch)
41156 (uri (pypi-uri "widgetsnbextension" version))
41157 (sha256
41158 (base32 "1bxm6ys3kmxfhi8dns9q6xrjkxijfa606qpq5lhr7f7dwc29nqm3"))))
41159 (build-system pyproject-build-system)
41160 (arguments
41161 (list #:tests? #f)) ;no tests in PyPI or git
41162 (native-inputs
41163 (list python-jupyter-packaging
41164 python-setuptools))
41165 (home-page "https://ipython.org")
41166 (synopsis "IPython HTML widgets for Jupyter")
41167 (description "This package provides interactive HTML widgets for Jupyter
41168notebooks.")
41169 (license license:bsd-3)))
41170
41171(define-public python-wrapt
41172 (package
41173 (name "python-wrapt")
41174 (version "1.17.0")
41175 (source
41176 (origin
41177 (method url-fetch)
41178 (uri (pypi-uri "wrapt" version))
41179 (sha256
41180 (base32
41181 "00886b7ry1vdbvpc2wi880y563xf6y4mxwwfm1q12wvw66i7l60n"))))
41182 (build-system pyproject-build-system)
41183 (native-inputs (list python-pytest python-setuptools python-wheel))
41184 (home-page "https://github.com/GrahamDumpleton/wrapt")
41185 (synopsis "Module for decorators, wrappers and monkey patching")
41186 (description
41187 "The aim of the wrapt module is to provide a transparent object proxy for
41188 Python, which can be used as the basis for the construction of function
41189 wrappers and decorator functions.")
41190 (license license:bsd-2)))
41191
41192(define-public python-wurlitzer
41193 (package
41194 (name "python-wurlitzer")
41195 (version "3.1.1")
41196 (source
41197 (origin
41198 (method url-fetch)
41199 (uri (pypi-uri "wurlitzer" version))
41200 (sha256
41201 (base32 "1ncvsc6b0bscvj5dn4iyyw42sf7ssgdqkzxr0bc8f97hp5519fdz"))))
41202 (build-system pyproject-build-system)
41203 (arguments
41204 (list #:test-flags #~(list "test.py")))
41205 (native-inputs
41206 (list python-pytest
41207 python-setuptools))
41208 (home-page "https://github.com/minrk/wurlitzer")
41209 (synopsis "Capture C-level output in context managers")
41210 (description
41211 "This library helps to redirect @code{sys.stdout} to a stream or a file
41212while executing some piece of code, including C code running within a Python
41213process.")
41214 (license license:expat)))
41215
41216(define-public python-xattr
41217 (package
41218 (name "python-xattr")
41219 (version "1.2.0")
41220 (source
41221 (origin
41222 (method url-fetch)
41223 (uri (pypi-uri "xattr" version))
41224 (sha256
41225 (base32 "19z0wp1plr5g8a3jknipii3qmqp3znwd63zqrhx19gpixwhqwk56"))))
41226 (build-system pyproject-build-system)
41227 (native-inputs
41228 (list python-pytest
41229 python-setuptools))
41230 (propagated-inputs
41231 (list python-cffi))
41232 (home-page "https://github.com/xattr/xattr")
41233 (synopsis "Python wrapper for extended file system attributes")
41234 (description "This package provides a Python wrapper for using extended
41235file system attributes. Extended attributes extend the basic attributes of files
41236and directories in the file system. They are stored as name:data pairs
41237associated with file system objects (files, directories, symlinks, etc).")
41238 (license license:expat)))
41239
41240(define-public python-xdg
41241 (package
41242 (name "python-xdg")
41243 (version "6.0.0")
41244 (source (origin
41245 (method url-fetch)
41246 (uri (pypi-uri "xdg" version))
41247 (sha256
41248 (base32
41249 "14hwk9j5zjc8rvirw95mrb07zdnpjaxjx2mj3rnq8pnlyaa809r4"))))
41250 (build-system pyproject-build-system)
41251 (arguments (list #:tests? #f)) ; No tests in PyPi tarball.
41252 (native-inputs
41253 (list python-poetry-core))
41254 (home-page "https://github.com/srstevenson/xdg-base-dirs")
41255 (synopsis "Variables defined by the XDG Base Directory Specification")
41256 (description "xdg-base-dirs is a Python module that provides functions to
41257return paths to the directories defined by the XDG Base Directory
41258Specification, to save you from duplicating the same snippet of logic in every
41259Python utility you write that deals with user cache, configuration, or data
41260files.")
41261 (license license:isc)))
41262
41263(define-public python-xlib
41264 (package
41265 (name "python-xlib")
41266 (version "0.33")
41267 (source
41268 (origin
41269 (method git-fetch)
41270 (uri (git-reference
41271 (url "https://github.com/python-xlib/python-xlib")
41272 (commit version)))
41273 (file-name (git-file-name name version))
41274 (sha256
41275 (base32 "03d28lx6sz0724ps6lnn4m6s0cfspgwqdf2l773lqf88add8wkmv"))))
41276 (build-system pyproject-build-system)
41277 (arguments
41278 `(#:phases
41279 (modify-phases %standard-phases
41280 (add-before 'check 'start-xserver
41281 (lambda* (#:key inputs #:allow-other-keys)
41282 (let ((xorg-server (assoc-ref inputs "xorg-server")))
41283 ;; There must be a running X server and make check doesn't
41284 ;; start one. Therefore we must do it.
41285 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
41286 (setenv "DISPLAY" ":1")))))))
41287 (native-inputs
41288 (list python-mock
41289 python-pytest
41290 python-setuptools
41291 xorg-server))
41292 (propagated-inputs
41293 (list python-six))
41294 (home-page "https://github.com/python-xlib/python-xlib")
41295 (synopsis "Python X11 client library")
41296 (description
41297 "The Python X Library is intended to be a fully functional
41298X client library for Python programs. It is useful to implement
41299low-level X clients. It is written entirely in Python.")
41300 (license license:gpl2+)))
41301
41302(define-public python-xlrd
41303 (package
41304 (name "python-xlrd")
41305 (version "2.0.2")
41306 (source
41307 (origin
41308 (method git-fetch) ;no tests in PyPI archive
41309 (uri (git-reference
41310 (url "https://github.com/python-excel/xlrd")
41311 (commit version)))
41312 (file-name (git-file-name name version))
41313 (sha256
41314 (base32 "1zgb03a4l2an2hy17w0nlyfisl53jzf8csdj90f5xkibbnjsg3y3"))))
41315 (build-system pyproject-build-system)
41316 (native-inputs
41317 (list python-pytest
41318 python-setuptools))
41319 (home-page "https://www.python-excel.org/")
41320 (synopsis "Library for extracting data from Excel files")
41321 (description "This package provides a library to extract data from
41322spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
41323@samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
41324Unicode-aware. It is not intended as an end-user tool.")
41325 (license license:bsd-3)))
41326
41327(define-public python-xlsxwriter
41328 (package
41329 (name "python-xlsxwriter")
41330 (version "3.2.0")
41331 (source
41332 (origin
41333 ;; There are no tests in the PyPI tarball.
41334 (method git-fetch)
41335 (uri (git-reference
41336 (url "https://github.com/jmcnamara/XlsxWriter")
41337 (commit (string-append "RELEASE_" version))))
41338 (file-name (git-file-name name version))
41339 (sha256
41340 (base32 "1g16xb4nsjd807qcm8756ixlxxvdjmbr2v7r6wxkajw1h4m8id0w"))))
41341 (build-system pyproject-build-system)
41342 (native-inputs
41343 (list python-setuptools
41344 python-wheel))
41345 (home-page "https://github.com/jmcnamara/XlsxWriter")
41346 (synopsis "Python module for creating Excel XLSX files")
41347 (description
41348 "XlsxWriter is a Python module that can be used to write text, numbers,
41349formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
41350 (license license:bsd-2)))
41351
41352;;; Note: this package is unmaintained since 2018 (archived on GitHub).
41353(define-public python-xlwt
41354 (package
41355 (name "python-xlwt")
41356 (version "1.3.0")
41357 (source
41358 (origin
41359 (method url-fetch)
41360 (uri (pypi-uri "xlwt" version))
41361 (sha256
41362 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
41363 (build-system pyproject-build-system)
41364 (native-inputs (list python-pytest python-setuptools python-wheel))
41365 (home-page "https://www.python-excel.org/")
41366 (synopsis "Library for creating spreadsheet Excel files")
41367 (description
41368 "@code{xlwt} is a library for writing data and formatting information to
41369older Excel files (i.e. .xls). The package itself is pure Python with no
41370dependencies on modules or packages outside the standard Python distribution.
41371It is not intended as an end-user tool.")
41372 (license license:bsd-3)))
41373
41374(define-public python-xmldiff
41375 (package
41376 (name "python-xmldiff")
41377 (version "3.0b1")
41378 (source
41379 (origin
41380 (method git-fetch)
41381 (uri (git-reference
41382 (url "https://github.com/Shoobx/xmldiff")
41383 (commit version)))
41384 (file-name (git-file-name name version))
41385 (sha256
41386 (base32 "0p4ry9dl719gmgkxksdv4ghyyzib1irg6g27bbkla2wmprrj1ai9"))))
41387 (build-system pyproject-build-system)
41388 (native-inputs (list python-pytest python-setuptools))
41389 (propagated-inputs (list python-lxml))
41390 (home-page "https://github.com/Shoobx/xmldiff")
41391 (synopsis "Creates diffs of XML files")
41392 (description "This Python tool figures out the differences between two
41393similar XML files, in the same way the @command{diff} utility does it.")
41394 (license license:expat)))
41395
41396(define-public python-xmlsec
41397 (package
41398 (name "python-xmlsec")
41399 (version "1.3.16")
41400 (source
41401 (origin
41402 (method url-fetch)
41403 (uri (pypi-uri "xmlsec" version))
41404 (sha256
41405 (base32 "178zg6jl3v7j4cdxxzqzr16m3wqfisai98xa0sh4q7bd9ia70v1b"))))
41406 (build-system pyproject-build-system)
41407 (arguments
41408 (list
41409 ;; See https://github.com/xmlsec/python-xmlsec/issues/210
41410 #:test-flags '(list "-n" "1"
41411 ;; This causes other tests to segfault.
41412 "-k" "not test_reinitialize_module")
41413 #:phases
41414 #~(modify-phases %standard-phases
41415 ;; FIXME: This is very unfortunate. I can't seem to find a way to
41416 ;; hardcode the location of this library, so users will also need to
41417 ;; set LD_LIBRARY_PATH.
41418 (add-before 'check 'pre-check
41419 (lambda* (#:key inputs #:allow-other-keys)
41420 (setenv "LD_LIBRARY_PATH"
41421 (dirname (search-input-file inputs "lib/libxmlsec1-openssl.so.1.3.7"))))))))
41422 (inputs (list openssl libltdl libxslt libxml2))
41423 (propagated-inputs (list python-lxml xmlsec-openssl))
41424 (native-inputs (list pkg-config
41425 python-lxml
41426 python-pkgconfig
41427 python-pytest
41428 python-pytest-xdist
41429 python-setuptools
41430 python-setuptools-scm
41431 python-wheel))
41432 (home-page "https://github.com/xmlsec/python-xmlsec")
41433 (synopsis "Python bindings for the XML Security Library")
41434 (description "This package provides Python bindings for the XML Security
41435Library.")
41436 (license license:expat)))
41437
41438(define-public python-xmp-toolkit
41439 (package
41440 (name "python-xmp-toolkit")
41441 (version "2.1.0")
41442 (source
41443 (origin
41444 (method url-fetch)
41445 (uri (pypi-uri "python_xmp_toolkit" version))
41446 (sha256
41447 (base32 "1np2njq6c1fnxh6bbh3xp2slz5dm7aamknv7hxax53a11p3a42na"))))
41448 (build-system pyproject-build-system)
41449 (arguments
41450 (list
41451 #:phases
41452 #~(modify-phases %standard-phases
41453 (add-after 'unpack 'patch-source
41454 (lambda* (#:key inputs #:allow-other-keys)
41455 (substitute* "libxmp/exempi.py"
41456 (("ctypes.util.find_library\\('exempi'\\)")
41457 (format #f "~s" (search-input-file
41458 inputs "lib/libexempi.so")))))))))
41459 (native-inputs
41460 (list python-pytest
41461 python-flit-core))
41462 (inputs
41463 (list exempi))
41464 (propagated-inputs
41465 (list python-pytz))
41466 (home-page "https://github.com/python-xmp-toolkit/python-xmp-toolkit")
41467 (synopsis "Python XMP Toolkit for working with metadata")
41468 (description "Python XMP Toolkit is a library for working with XMP
41469metadata, as well as reading/writing XMP metadata stored in many different
41470file formats.
41471
41472Python XMP Toolkit is wrapping Exempi (using ctypes), a C/C++ XMP library
41473based on Adobe XMP Toolkit, ensuring that future updates to the XMP standard
41474are easily incorporated into the library with a minimum amount of work.")
41475 (license license:bsd-3)))
41476
41477(define-public python-yamllint
41478 (package
41479 (name "python-yamllint")
41480 (version "1.37.1")
41481 (source
41482 (origin
41483 (method url-fetch)
41484 (uri (pypi-uri "yamllint" version))
41485 (sha256
41486 (base32 "0p9401y9f1pgxi9lggmw6wv135kfnd361n3hjh2civ4vap2w1xw1"))))
41487 (build-system pyproject-build-system)
41488 (arguments
41489 (list #:test-backend #~'unittest))
41490 (native-inputs
41491 (list python-setuptools))
41492 (propagated-inputs
41493 (list python-pathspec python-pyyaml))
41494 (home-page "https://github.com/adrienverge/yamllint")
41495 (synopsis "Linter for YAML files")
41496 (description
41497 "Yamllint is a linter for YAML files. yamllint does not only check for
41498syntax validity, but for weirdnesses like key repetition and cosmetic problems
41499such as lines length, trailing spaces, indentation, etc.")
41500 (license license:gpl3+)))
41501
41502(define-public python-yamlloader
41503 (package
41504 (name "python-yamlloader")
41505 (version "1.5.2")
41506 (source
41507 (origin
41508 (method url-fetch)
41509 (uri (pypi-uri "yamlloader" version))
41510 (sha256
41511 (base32 "06y4xaajsjjynrv2m6ar3hwiif2mk3z3lgwxn2l1qsv238rc22n1"))))
41512 (build-system pyproject-build-system)
41513 (arguments
41514 (list #:test-backend #~'unittest
41515 #:test-flags #~(list "discover" "-v")))
41516 (native-inputs
41517 (list python-hatch-vcs
41518 python-hatchling
41519 python-hypothesis))
41520 (propagated-inputs
41521 (list python-pyyaml))
41522 (home-page "https://github.com/Phynix/yamlloader")
41523 (synopsis "Ordered YAML loader and dumper for PyYAML")
41524 (description
41525 "This package provides loaders and dumpers for PyYAML. Currently, an
41526OrderedDict loader/dumper is implemented, allowing to keep items order when
41527loading resp. dumping a file from/to an OrderedDict (Python 3.8+: Also regular
41528dicts are supported and are the default items to be loaded to. As of Python
415293.7 preservation of insertion order is a language feature of regular dicts.)
41530It was originally mirrored from
41531@url{https://github.com/fmenabe/python-yamlordereddictloader,
41532yamlordereddict}.")
41533 (license license:expat)))
41534
41535;; XXX: Deprecated, the <https://github.com/Phynix/yamlloader> project provide
41536;; an improved version of this library with unit tests, performance
41537;; improvements (by providing access to the C implementation of PyYAML) and is
41538;; more actively developed.
41539(define-public python-yamlordereddictloader
41540 (package
41541 (name "python-yamlordereddictloader")
41542 (version "0.4.2")
41543 (source
41544 (origin
41545 (method git-fetch)
41546 (uri (git-reference
41547 (url "https://github.com/fmenabe/python-yamlordereddictloader")
41548 (commit version)))
41549 (file-name (git-file-name name version))
41550 (sha256
41551 (base32 "1rwvasdmfq7lbd2bm7vmx759fv535cp5ndyhf845fqd86mr7a94c"))))
41552 (build-system pyproject-build-system)
41553 (arguments
41554 (list #:tests? #f)) ;no tests
41555 (native-inputs
41556 (list python-setuptools))
41557 (propagated-inputs
41558 (list python-pyyaml))
41559 (home-page "https://github.com/fmenabe/python-yamlordereddictloader")
41560 (synopsis "Loader and a dumper for PyYAML")
41561 (description
41562 "yamlordereddictloader is a Python package that provides a loader and a
41563dumper for PyYAML allowing to keep items order when loading a file (by putting
41564them in OrderedDict objects) and to manage OrderedDict objects when dumping to
41565a file.")
41566 (license license:expat)))
41567
41568(define-public python-yapf
41569 (package
41570 (name "python-yapf")
41571 (version "0.43.0")
41572 (source
41573 (origin
41574 (method url-fetch)
41575 (uri (pypi-uri "yapf" version))
41576 (sha256
41577 (base32
41578 "13i1sn0jfm7snfdzbyrawxl457bdmgsxkmg0n8h99zzdpwjamlq0"))))
41579 (build-system pyproject-build-system)
41580 (propagated-inputs
41581 (list python-platformdirs python-tomli))
41582 (native-inputs
41583 (list python-pytest python-setuptools python-wheel))
41584 (home-page "https://github.com/google/yapf")
41585 (synopsis "Formatter for Python code")
41586 (description "YAPF is a formatter for Python code. It's based off of
41587@dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
41588takes the code and reformats it to the best formatting that conforms to the
41589style guide, even if the original code didn't violate the style guide.")
41590 (license license:asl2.0)))
41591
41592(define-public python-yapsy
41593 (package
41594 (name "python-yapsy")
41595 (version "1.12.2")
41596 (source
41597 (origin
41598 (method url-fetch)
41599 (uri (pypi-uri "Yapsy" version))
41600 (sha256
41601 (base32 "12rznbnswfw0w7qfbvmmffr9r317gl1rqg36nijwzsklkjgks4fq"))))
41602 (build-system pyproject-build-system)
41603 (arguments
41604 (list #:test-backend #~'unittest))
41605 (native-inputs
41606 (list python-setuptools))
41607 (home-page "https://yapsy.sourceforge.net")
41608 (synopsis "Simple plugin system for Python applications")
41609 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
41610implementing the core mechanisms needed to build a plugin system into a wider
41611application.
41612
41613The main purpose is to depend only on Python's standard libraries and to
41614implement only the basic functionalities needed to detect, load and keep track
41615of several plugins.")
41616 (license license:bsd-3)))
41617
41618(define-public python-yaspin
41619 (package
41620 (name "python-yaspin")
41621 (version "3.2.0")
41622 (source
41623 (origin
41624 (method url-fetch)
41625 (uri
41626 (pypi-uri "yaspin" version))
41627 (sha256
41628 (base32 "1ryc5099sjsa49fhcm6dp5l4rp9v9yxrh17ml78y89idfbbfhvs1"))))
41629 (build-system pyproject-build-system)
41630 ;; tests: 3007 passed, 1758 skipped
41631 (native-inputs
41632 (list python-poetry-core
41633 python-pytest
41634 python-pytest-mock))
41635 (propagated-inputs
41636 (list python-termcolor-next))
41637 (home-page "https://github.com/pavdmyt/yaspin")
41638 (synopsis "Yet Another Terminal Spinner")
41639 (description "Yaspin provides a terminal spinner to indicate the progress
41640during long operations.")
41641 (license license:expat)))
41642
41643(define-public python-yattag
41644 (package
41645 (name "python-yattag")
41646 (version "1.16.1")
41647 (source
41648 (origin
41649 (method url-fetch)
41650 (uri (pypi-uri "yattag" version))
41651 (sha256
41652 (base32 "1x2is0lkpywvqaayc21n1cvfbq0havzx46i83033wpgawxag5a5s"))))
41653 (build-system pyproject-build-system)
41654 (native-inputs
41655 (list python-pytest
41656 python-setuptools
41657 python-wheel))
41658 (home-page "https://www.yattag.org/")
41659 (synopsis "HTML or XML generator for Python")
41660 (description
41661 "Yattag is a Python library for generating HTML or XML in a pythonic
41662way.")
41663 (license license:lgpl2.1)))
41664
41665(define-public python-yq
41666 (package
41667 (name "python-yq")
41668 (version "3.4.3")
41669 (source
41670 (origin
41671 (method url-fetch)
41672 (uri (pypi-uri "yq" version))
41673 (sha256
41674 (base32 "0fvf4n7wpbc0gdxhw8c008rcv092vw96f84j5xdp1krhdwd6ln5s"))))
41675 (build-system pyproject-build-system)
41676 (arguments
41677 (list
41678 #:test-backend #~'custom
41679 #:test-flags #~(list "test/test.py" "-v")
41680 #:phases
41681 #~(modify-phases %standard-phases
41682 (add-after 'unpack 'patch
41683 (lambda _
41684 (substitute* "yq/__init__.py"
41685 (("Popen\\(\\[\"jq")
41686 (string-append
41687 "Popen([\""
41688 #$(this-package-input "jq") "/bin/jq"))))))))
41689 (native-inputs
41690 (list python-hatchling
41691 python-hatch-vcs))
41692 (inputs
41693 (list jq))
41694 (propagated-inputs
41695 (list python-argcomplete
41696 python-pyyaml
41697 python-tomlkit
41698 python-xmltodict))
41699 (home-page "https://github.com/kislyuk/yq")
41700 (synopsis "Command-line YAML/XML processor")
41701 (description
41702 "This package provides @command{yq} and @command{xq} for processing YAML
41703and XML respectively. The processing is done through @command{jq},
41704@command{jq} filters can be used to process the data as it passes through.")
41705 (license license:asl2.0)))
41706
41707(define-public python-yte
41708 (package
41709 (name "python-yte")
41710 (version "1.8.1") ;TODO higher versions depend on uv_build
41711 (source
41712 (origin
41713 (method git-fetch)
41714 (uri (git-reference
41715 (url "https://github.com/koesterlab/yte")
41716 (commit (string-append "v" version))))
41717 (sha256
41718 (base32 "05qrmjf9x6wvy8976kqiy3axk3im8jbc8hpc1yrbidm099vik0ni"))))
41719 (build-system pyproject-build-system)
41720 (arguments
41721 (list
41722 #:test-flags #~(list "tests.py")
41723 #:phases
41724 '(modify-phases %standard-phases
41725 (add-after 'unpack 'set-HOME
41726 (lambda _ (setenv "HOME" "/tmp"))))))
41727 (propagated-inputs (list python-dpath python-plac python-pyyaml))
41728 (native-inputs (list python-numpy python-poetry-core python-pytest))
41729 (home-page "https://github.com/koesterlab/yte")
41730 (synopsis "YAML template engine with Python expressions")
41731 (description
41732 "This package provides a YAML template engine with Python expressions.")
41733 (license license:expat)))
41734
41735(define-public python-zarr
41736 (package
41737 (name "python-zarr")
41738 (version "2.18.7")
41739 (source
41740 (origin
41741 (method url-fetch)
41742 (uri (pypi-uri "zarr" version))
41743 (sha256
41744 (base32
41745 "1xbjjpjskykbdskck5p1f0grh6wq36437ll0n5kazi6s2ipzdf5j"))))
41746 (build-system pyproject-build-system)
41747 (arguments
41748 (list
41749 #:test-flags
41750 #~(list "--numprocesses" (number->string (parallel-job-count))
41751 ;; This tests are flaky. The pass several times on my laptop
41752 ;; but occasionally fail. They fail pretty reliably on the
41753 ;; build farm.
41754 "-k" (string-append "not test_lazy_loader and not open_array"
41755 ;; File not found.
41756 " and not test_filesystem_path"))
41757 #:phases
41758 #~(modify-phases %standard-phases
41759 (add-before 'build 'set-version
41760 (lambda _
41761 (substitute* "pyproject.toml"
41762 (("^version_file.*") "")
41763 (("dynamic = \\[\"version\"\\]")
41764 (string-append "version = \"" #$version "\"")))))
41765 (add-after 'unpack 'disable-service-tests
41766 (lambda _
41767 (setenv "ZARR_TEST_ABS" "0")
41768 (setenv "ZARR_TEST_MONGO" "0")
41769 (setenv "ZARR_TEST_REDIS" "0"))))))
41770 (propagated-inputs
41771 (list python-asciitree
41772 python-fasteners
41773 python-numcodecs
41774 python-numpy))
41775 (native-inputs
41776 (list python-pytest
41777 python-pytest-xdist
41778 python-setuptools
41779 python-wheel))
41780 (home-page "https://github.com/zarr-developers/zarr-python")
41781 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
41782 (description
41783 "This package provides an implementation of chunked, compressed,
41784N-dimensional arrays for Python.")
41785 (license license:expat)))
41786
41787(define-public python-zeroc-ice
41788 (package
41789 (name "python-zeroc-ice")
41790 (version "3.7.10.1")
41791 (source (origin
41792 (method url-fetch)
41793 (uri (pypi-uri "zeroc-ice" version))
41794 (sha256
41795 (base32
41796 "0r46q4hd7xbpvnidbra1prkg4xhmajxjjmclfqgp3pv0lgyslqxh"))))
41797 (build-system pyproject-build-system)
41798 (arguments
41799 ;; XXX: No tests in PyPI, tere are tests in Git, but there is no 3.7.10.1
41800 ;; tag.
41801 ;;
41802 ;; See:
41803 ;; - URL: <https://raw.githubusercontent.com/zeroc-ice>
41804 ;; - File: <ice/refs/heads/main/python/allTests.py>
41805 (list #:tests? #f))
41806 (inputs (list openssl))
41807 (native-inputs (list python-setuptools))
41808 (home-page "https://zeroc.com")
41809 (synopsis "RPC framework")
41810 (description
41811 "Ice is a comprehensive RPC framework. Ice helps you network your
41812software by taking care of all interactions with low-level network programming
41813interfaces.")
41814 (license license:gpl2)))
41815
41816;; Package variant to build [email protected]
41817(define-public python-zeroc-ice-3.6
41818 (package
41819 (inherit python-zeroc-ice)
41820 (version "3.6.5")
41821 (source (origin
41822 (method url-fetch)
41823 (uri (pypi-uri "zeroc-ice" version))
41824 (sha256
41825 (base32
41826 "0mikjfvq26kh8asnn9v55z41pap4c5ypymqnwwi4xkavc3mzyda2"))
41827 (patches
41828 (search-patches
41829 "python-zeroc-ice-3.6.5-python-3.11-support.patch"))))
41830 (arguments
41831 (substitute-keyword-arguments (package-arguments python-zeroc-ice)
41832 ((#:phases phases #~%standard-phases)
41833 #~(modify-phases #$phases
41834 (add-before 'build 'relax-gcc-14-strictness
41835 (lambda _
41836 (setenv "CFLAGS"
41837 "-g -O2 -Wno-error=implicit-function-declaration")))))))))
41838
41839(define-public python-zeroconf
41840 (package
41841 (name "python-zeroconf")
41842 (version "0.38.1")
41843 (source
41844 (origin
41845 (method git-fetch)
41846 (uri (git-reference
41847 (url "https://github.com/jstasiak/python-zeroconf")
41848 (commit version)))
41849 (file-name (git-file-name name version))
41850 (sha256
41851 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
41852 (build-system pyproject-build-system)
41853 (arguments
41854 (list
41855 #:test-flags
41856 #~(list
41857 "-k" (string-append
41858 ;; XXX: Despite asyncio, this test fails.
41859 "not test_run_coro_with_timeout and not "
41860 ;; XXX: Networking isn't available.
41861 (string-join
41862 (list "test_integration_with_listener_ipv6"
41863 "test_launch_and_close_v4_v6"
41864 "test_launch_and_close_context_manager"
41865 "test_launch_and_close"
41866 "test_close_multiple_times")
41867 " and not ")))))
41868 (native-inputs
41869 (list python-pytest python-pytest-asyncio python-setuptools))
41870 (propagated-inputs
41871 (list python-ifaddr))
41872 (home-page "https://github.com/jstasiak/python-zeroconf")
41873 (synopsis "Pure Python mDNS service discovery")
41874 (description "Pure Python multicast DNS (mDNS) service discovery library
41875(Bonjour/Avahi compatible).")
41876 (license license:lgpl2.1+)))
41877
41878(define-public python-zict
41879 (package
41880 (name "python-zict")
41881 (version "3.0.0")
41882 (source
41883 (origin
41884 (method url-fetch)
41885 (uri (pypi-uri "zict" version))
41886 (sha256
41887 (base32
41888 "19gvr41xi5fazkzkg33kwrk70sv50hygng0cg70ayym9nriy48g3"))))
41889 (build-system pyproject-build-system)
41890 (arguments
41891 (list
41892 #:test-flags
41893 ;; This uses "importorskip", but it won't skip.
41894 '(list "--ignore=tests/test_lmdb.py")))
41895 (propagated-inputs
41896 (list python-heapdict))
41897 (native-inputs
41898 (list python-pytest
41899 python-pytest-asyncio
41900 python-pytest-repeat
41901 python-pytest-timeout
41902 python-setuptools
41903 python-wheel))
41904 (home-page "https://zict.readthedocs.io/en/latest/")
41905 (synopsis "Composable mutable mapping tools")
41906 (description "This package provides abstract @code{MutableMapping} classes
41907that consume and build on other @code{MutableMappings}. Several of these can
41908be composed with one another to form intuitive interfaces over complex storage
41909systems policies.")
41910 (license license:bsd-3)))
41911
41912(define-public python-zipfly
41913 (package
41914 (name "python-zipfly")
41915 (version "6.0.5")
41916 (source
41917 (origin
41918 (method url-fetch)
41919 (uri (pypi-uri "zipfly" version))
41920 (sha256
41921 (base32
41922 "1h7g922a8lsqd69j8blgcgg0lcd8kz51b2p4glfqmgx4vi1nkick"))))
41923 (build-system pyproject-build-system)
41924 (arguments
41925 (list #:test-backend #~'unittest))
41926 (native-inputs (list python-setuptools))
41927 (home-page "https://github.com/sandes/zipfly")
41928 (synopsis "Zip archive generator")
41929 (description "ZipFly is a zip archive generator. It was created to
41930generate very large zip archives for immediate sending out to clients, or
41931for writing large zip archives without memory inflation.")
41932 (license license:expat)))
41933
41934(define-public python-zipstream-new
41935 (package
41936 (name "python-zipstream-new")
41937 (version "1.1.8")
41938 (source
41939 (origin
41940 (method git-fetch) ; no tests in PyPI release
41941 (uri (git-reference
41942 (url "https://github.com/arjan-s/python-zipstream")
41943 (commit (string-append "v" version))))
41944 (file-name (git-file-name name version))
41945 (sha256
41946 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
41947 (build-system pyproject-build-system)
41948 (arguments
41949 (list #:test-backend #~'unittest))
41950 (native-inputs (list python-setuptools))
41951 (home-page "https://github.com/arjan-s/python-zipstream")
41952 (synopsis "Zipfile generator that takes input files as well as streams")
41953 (description "@code{zipstream.py} is a zip archive generator based on
41954@code{zipfile.py}. It was created to generate a zip file generator for
41955streaming. This is beneficial for when you want to provide a downloadable
41956archive of a large collection of regular files, which would be infeasible
41957to generate the archive prior to downloading or of a very large file that
41958you do not want to store entirely on disk or on memory.")
41959 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
41960 (license license:gpl3)))
41961
41962(define-public python2-dbus
41963 (package/inherit python-dbus
41964 (name "python2-dbus")
41965 (inputs `(("python" ,python-2)
41966 ("libxcrypt" ,libxcrypt) ;required by Python.h
41967 ,@(alist-delete "python"
41968 (package-inputs python-dbus))))
41969 (arguments
41970 `(#:configure-flags '("PYTHON_VERSION=2")))))
41971
41972(define-public shrinkwrap
41973 (package
41974 (name "shrinkwrap")
41975 (version "0.1.0")
41976 (source
41977 (origin
41978 (method git-fetch)
41979 (uri (git-reference
41980 (url "https://github.com/fzakaria/shrinkwrap")
41981 (commit (string-append "v" version))))
41982 (file-name (git-file-name name version))
41983 (sha256
41984 (base32 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
41985 (build-system pyproject-build-system)
41986 (native-inputs
41987 (list python-click
41988 python-poetry-core
41989 python-pypa-build
41990 python-pytest))
41991 (inputs (list python-lief python-sh))
41992 (home-page "https://github.com/fzakaria/shrinkwrap")
41993 (synopsis "Emboss needed dependencies on the top level executable")
41994 (description
41995 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
41996shared objects, and lift them up to the executable referenced by absolute
41997path.")
41998 (license license:expat)))
41999
42000(define-public staticsite
42001 (package
42002 (name "staticsite")
42003 (version "2.5")
42004 (source
42005 (origin
42006 (method git-fetch)
42007 (uri (git-reference
42008 (url "https://github.com/spanezz/staticsite")
42009 (commit (string-append "v" version))))
42010 (file-name (git-file-name name version))
42011 (sha256
42012 (base32 "0fk0yy0flwwfqwb4gsizr7gnkadas4rjffn3mnzlwmkn08z3w0c7"))))
42013 (build-system pyproject-build-system)
42014 (arguments
42015 (list
42016 #:phases
42017 #~(modify-phases %standard-phases
42018 (add-after 'unpack 'use-themes-in-output
42019 (lambda _
42020 (substitute* "staticsite/global_settings.py"
42021 (("/usr/share/staticsite") #$output))))
42022 (add-after 'install 'install-themes
42023 (lambda _
42024 (let ((themedir (string-append #$output "/themes")))
42025 (copy-recursively "themes" themedir)))))))
42026 (native-inputs
42027 (list python-hatchling
42028 python-pytest))
42029 (inputs
42030 (list perl-image-exiftool
42031 python-dateutil
42032 python-docutils
42033 python-jinja2
42034 python-markdown
42035 python-pillow
42036 python-pytz
42037 python-pyyaml
42038 python-ruamel.yaml
42039 python-slugify
42040 python-toml
42041 tzdata-for-tests))
42042 (home-page "https://github.com/spanezz/staticsite")
42043 (synopsis "Static site generator")
42044 (description
42045 "Statistic is a static site generator based on Markdown and Jinja2.")
42046 (license (list license:gpl3+ license:expat))))
42047
42048;;;
42049;;; Avoid adding new packages to the end of this file. To reduce the chances
42050;;; of a merge conflict, place them above by existing packages with similar
42051;;; functionality or similar names.
42052;;;