projects/guix·blob wip-postfix · refs

33844 lines · 1.2 MiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Nikita Karetnikov <[email protected]>
3;;; Copyright © 2013-2023 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 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-2023 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-2023 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-2022 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–2023 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 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-2023 Nicolas Goaziou <[email protected]>
53;;; Copyright © 2018 Oleg Pykhalov <[email protected]>
54;;; Copyright © 2018, 2019, 2021 Clément Lassieur <[email protected]>
55;;; Copyright © 2018, 2019, 2020, 2021, 2022, 2023 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, 2020 Brett Gilio <[email protected]>
60;;; Copyright © 2019 Sam <[email protected]>
61;;; Copyright © 2019, 2023 Jack Hill <[email protected]>
62;;; Copyright © 2019-2023, Guillaume Le Vaillant <[email protected]>
63;;; Copyright © 2019, 2020 Alex Griffin <[email protected]>
64;;; Copyright © 2019, 2020, 2021, 2022, 2023 Pierre Langlois <[email protected]>
65;;; Copyright © 2019 Jacob MacDonald <[email protected]>
66;;; Copyright © 2019, 2020, 2021 Giacomo Leidi <[email protected]>
67;;; Copyright © 2019 Wiktor Żelazny <[email protected]>
68;;; Copyright © 2019, 2020, 2021, 2022 Tanguy Le Carrour <[email protected]>
69;;; Copyright © 2019, 2021-2023 Mădălin Ionel Patrașcu <[email protected]>
70;;; Copyright © 2020 Riku Viitanen <[email protected]>
71;;; Copyright © 2020 Jakub Kądziołka <[email protected]>
72;;; Copyright © 2020 sirgazil <[email protected]>
73;;; Copyright © 2020 Sebastian Schott <[email protected]>
74;;; Copyright © 2020, 2021 Alexandros Theodotou <[email protected]>
75;;; Copyright © 2020 Josh Marshall <[email protected]>
76;;; Copyright © 2020 Lars-Dominik Braun <[email protected]>
77;;; Copyright © 2020 Alex ter Weele <[email protected]>
78;;; Copyright © 2020, 2022 Matthew James Kraai <[email protected]>
79;;; Copyright © 2020 Ryan Prior <[email protected]>
80;;; Copyright © 2020 Josh Holland <[email protected]>
81;;; Copyright © 2020 Yuval Kogman <[email protected]>
82;;; Copyright © 2020, 2022 Michael Rohleder <[email protected]>
83;;; Copyright © 2020, 2021, 2022, 2023 Vinicius Monego <[email protected]>
84;;; Copyright © 2020 Guy Fleury Iteriteka <[email protected]>
85;;; Copyright © 2020 Hendursaga <[email protected]>
86;;; Copyright © 2020 Malte Frank Gerdes <[email protected]>
87;;; Copyright © 2020 Joseph LaFreniere <[email protected]>
88;;; Copyright © 2020 Tim Gesthuizen <[email protected]>
89;;; Copyright © 2020, 2021 Bonface Munyoki Kilyungi <[email protected]>
90;;; Copyright © 2020 Ekaitz Zarraga <[email protected]>
91;;; Copyright © 2020 Diego N. Barbato <[email protected]>
92;;; Copyright © 2020 Liliana Marie Prikler <[email protected]>
93;;; Copyright © 2019 Kristian Trandem <[email protected]>
94;;; Copyright © 2020, 2021 Zheng Junjie <[email protected]>
95;;; Copyright © 2020 EuAndreh <[email protected]>
96;;; Copyright © 2021, 2022 Morgan Smith <[email protected]>
97;;; Copyright © 2021-2023 Sharlatan Hellseher <[email protected]>
98;;; Copyright © 2021 Ellis Kenyő <[email protected]>
99;;; Copyright © 2021 LibreMiami <[email protected]>
100;;; Copyright © 2021 Xinglu Chen <[email protected]>
101;;; Copyright © 2021 Raghav Gururajan <[email protected]>
102;;; Copyright © 2021, 2023 jgart <[email protected]>
103;;; Copyright © 2021 Danial Behzadi <[email protected]>
104;;; Copyright © 2021 Maxime Devos <[email protected]>
105;;; Copyright © 2021 Hugo Lecomte <[email protected]>
106;;; Copyright © 2021 Franck Pérignon <[email protected]>
107;;; Copyright © 2021, 2022 Petr Hodina <[email protected]>
108;;; Copyright © 2021 Simon Streit <[email protected]>
109;;; Copyright © 2021, 2022, 2023 Daniel Meißner <[email protected]>
110;;; Copyright © 2021, 2022 Pradana Aumars <[email protected]>
111;;; Copyright © 2021, 2022 Felix Gruber <[email protected]>
112;;; Copyright © 2021 Sébastien Lerique <[email protected]>
113;;; Copyright © 2021 Raphaël Mélotte <[email protected]>
114;;; Copyright © 2021 ZmnSCPxj <[email protected]>
115;;; Copyright © 2021 Filip Lajszczak <[email protected]>
116;;; Copyright © 2021 Greg Hogan <[email protected]>
117;;; Copyright © 2022, 2023 John Kehayias <[email protected]>
118;;; Copyright © 2022 Aleksandr Vityazev <[email protected]>
119;;; Copyright © 2022 Evgeny Pisemsky <[email protected]>
120;;; Copyright © 2022 drozdov <[email protected]>
121;;; Copyright © 2022 Peter Polidoro <[email protected]>
122;;; Copyright © 2022 Wamm K. D. <[email protected]>
123;;; Copyright © 2022 Jai Vetrivelan <[email protected]>
124;;; Copyright © 2022 Artyom V. Poptsov <[email protected]>
125;;; Copyright © 2022 Paul A. Patience <[email protected]>
126;;; Copyright © 2022 Jean-Pierre De Jesus DIAZ <[email protected]>
127;;; Copyright © 2022 Philip McGrath <[email protected]>
128;;; Copyright © 2022 Marek Felšöci <[email protected]>
129;;; Copyright © 2022 Hilton Chain <[email protected]>
130;;; Copyright © 2022 Tomasz Jeneralczyk <[email protected]>
131;;; Copyright © 2022 Mathieu Laparie <[email protected]>
132;;; Copyright © 2022 Garek Dyszel <[email protected]>
133;;; Copyright © 2022 Baptiste Strazzulla <[email protected]>
134;;; Copyright © 2022 Nicolas Graves <[email protected]>
135;;; Copyright © 2023 Gabriel Wicki <[email protected]>
136;;; Copyright © 2023 Amade Nemes <[email protected]>
137;;; Copyright © 2023 Bruno Victal <[email protected]>
138;;; Copyright © 2023 Kaelyn Takata <[email protected]>
139;;; Copyright © 2023 Dominik Delgado Steuter <[email protected]>
140;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email protected]>
141;;; Copyright © 2023 Ontje Lünsdorf <[email protected]>
142;;; Copyright © 2023 Parnikkapore <[email protected]>
143;;; Copyright © 2023 Foundation Devices, Inc. <[email protected]>
144;;;
145;;; This file is part of GNU Guix.
146;;;
147;;; GNU Guix is free software; you can redistribute it and/or modify it
148;;; under the terms of the GNU General Public License as published by
149;;; the Free Software Foundation; either version 3 of the License, or (at
150;;; your option) any later version.
151;;;
152;;; GNU Guix is distributed in the hope that it will be useful, but
153;;; WITHOUT ANY WARRANTY; without even the implied warranty of
154;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
155;;; GNU General Public License for more details.
156;;;
157;;; You should have received a copy of the GNU General Public License
158;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
159
160(define-module (gnu packages python-xyz)
161 #:use-module ((guix licenses) #:prefix license:)
162 #:use-module (gnu packages)
163 #:use-module (gnu packages adns)
164 #:use-module (gnu packages aidc)
165 #:use-module (gnu packages algebra)
166 #:use-module (gnu packages astronomy)
167 #:use-module (gnu packages attr)
168 #:use-module (gnu packages backup)
169 #:use-module (gnu packages base)
170 #:use-module (gnu packages bash)
171 #:use-module (gnu packages bdw-gc)
172 #:use-module (gnu packages check)
173 #:use-module (gnu packages cmake)
174 #:use-module (gnu packages compression)
175 #:use-module (gnu packages cpp)
176 #:use-module (gnu packages crates-io)
177 #:use-module (gnu packages crypto)
178 #:use-module (gnu packages databases)
179 #:use-module (gnu packages dbm)
180 #:use-module (gnu packages digest)
181 #:use-module (gnu packages django)
182 #:use-module (gnu packages djvu)
183 #:use-module (gnu packages docker)
184 #:use-module (gnu packages documentation)
185 #:use-module (gnu packages enchant)
186 #:use-module (gnu packages file)
187 #:use-module (gnu packages fonts)
188 #:use-module (gnu packages fontutils)
189 #:use-module (gnu packages freedesktop)
190 #:use-module (gnu packages gcc)
191 #:use-module (gnu packages gdb)
192 #:use-module (gnu packages geo)
193 #:use-module (gnu packages ghostscript)
194 #:use-module (gnu packages gl)
195 #:use-module (gnu packages glib)
196 #:use-module (gnu packages gnome)
197 #:use-module (gnu packages gnupg)
198 #:use-module (gnu packages graphics)
199 #:use-module (gnu packages graphviz)
200 #:use-module (gnu packages gsasl)
201 #:use-module (gnu packages gstreamer)
202 #:use-module (gnu packages gtk)
203 #:use-module (gnu packages haskell-xyz)
204 #:use-module (gnu packages icu4c)
205 #:use-module (gnu packages image)
206 #:use-module (gnu packages image-processing)
207 #:use-module (gnu packages imagemagick)
208 #:use-module (gnu packages inkscape)
209 #:use-module (gnu packages java)
210 #:use-module (gnu packages jupyter)
211 #:use-module (gnu packages kerberos)
212 #:use-module (gnu packages libevent)
213 #:use-module (gnu packages libffi)
214 #:use-module (gnu packages libidn)
215 #:use-module (gnu packages libusb)
216 #:use-module (gnu packages linux)
217 #:use-module (gnu packages llvm)
218 #:use-module (gnu packages machine-learning)
219 #:use-module (gnu packages man)
220 #:use-module (gnu packages markup)
221 #:use-module (gnu packages maths)
222 #:use-module (gnu packages monitoring)
223 #:use-module (gnu packages multiprecision)
224 #:use-module (gnu packages ncurses)
225 #:use-module (gnu packages networking)
226 #:use-module (gnu packages ninja)
227 #:use-module (gnu packages node)
228 #:use-module (gnu packages openstack)
229 #:use-module (gnu packages pcre)
230 #:use-module (gnu packages pdf)
231 #:use-module (gnu packages perl)
232 #:use-module (gnu packages photo)
233 #:use-module (gnu packages pkg-config)
234 #:use-module (gnu packages protobuf)
235 #:use-module (gnu packages python)
236 #:use-module (gnu packages python-build)
237 #:use-module (gnu packages python-check)
238 #:use-module (gnu packages python-compression)
239 #:use-module (gnu packages python-crypto)
240 #:use-module (gnu packages python-science)
241 #:use-module (gnu packages python-web)
242 #:use-module (gnu packages qt)
243 #:use-module (gnu packages rdf)
244 #:use-module (gnu packages readline)
245 #:use-module (gnu packages regex)
246 #:use-module (gnu packages scanner)
247 #:use-module (gnu packages sdl)
248 #:use-module (gnu packages search)
249 #:use-module (gnu packages serialization)
250 #:use-module (gnu packages shells)
251 #:use-module (gnu packages sphinx)
252 #:use-module (gnu packages ssh)
253 #:use-module (gnu packages swig)
254 #:use-module (gnu packages tcl)
255 #:use-module (gnu packages terminals)
256 #:use-module (gnu packages tex)
257 #:use-module (gnu packages texinfo)
258 #:use-module (gnu packages textutils)
259 #:use-module (gnu packages time)
260 #:use-module (gnu packages tls)
261 #:use-module (gnu packages version-control)
262 #:use-module (gnu packages video)
263 #:use-module (gnu packages web)
264 #:use-module (gnu packages wxwidgets)
265 #:use-module (gnu packages xml)
266 #:use-module (gnu packages xdisorg)
267 #:use-module (gnu packages xorg)
268 #:use-module (guix packages)
269 #:use-module (guix build-system cargo)
270 #:use-module (guix build-system cmake)
271 #:use-module (guix build-system gnu)
272 #:use-module (guix build-system pyproject)
273 #:use-module (guix build-system python)
274 #:use-module (guix download)
275 #:use-module (guix hg-download)
276 #:use-module (guix git-download)
277 #:use-module (guix gexp)
278 #:use-module (guix utils)
279 #:use-module (srfi srfi-1)
280 #:use-module (srfi srfi-26))
281
282(define-public python-xmldiff
283 (package
284 (name "python-xmldiff")
285 (version "2.4")
286 (source
287 (origin
288 (method url-fetch)
289 (uri (pypi-uri "xmldiff" version))
290 (sha256
291 (base32 "0qygxi3z1jwb0471k7bh5gcqf7wqm4xhrkmwhf36gjgjw46a5gh5"))))
292 (build-system python-build-system)
293 (propagated-inputs (list python-lxml python-six))
294 (home-page "https://github.com/Shoobx/xmldiff")
295 (synopsis "Creates diffs of XML files")
296 (description "This Python tool figures out the differences between two
297similar XML files, in the same way the @command{diff} utility does it.")
298 (license license:expat)))
299
300(define-public python-janus
301 (package
302 (name "python-janus")
303 (version "1.0.0")
304 (source
305 (origin
306 (method url-fetch)
307 (uri (pypi-uri "janus" version))
308 (sha256
309 (base32 "04hnrdcf03g1s0x3sr72sh9gnszz6kyfsl9dg8a4n0zvvhn6z5yz"))))
310 (build-system pyproject-build-system)
311 (native-inputs
312 (list python-pytest python-pytest-cov python-pytest-asyncio))
313 (propagated-inputs (list python-typing-extensions))
314 (home-page "https://github.com/aio-libs/janus/")
315 (synopsis
316 "Sync-async queue to interoperate between asyncio tasks and classic threads")
317 (description
318 "Mixed sync-async queue, supposed to be used for communicating between
319classic synchronous (threaded) code and asynchronous (in terms of
320@url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
321@url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
322library has two faces: synchronous and asynchronous interface. Synchronous is
323fully compatible with
324@url{https://docs.python.org/3/library/queue.html,standard queue},
325asynchronous one follows
326@url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
327design}.")
328 (license license:asl2.0)))
329
330(define-public python-jupytext
331 (package
332 (name "python-jupytext")
333 (version "1.14.4")
334 (source
335 (origin
336 (method git-fetch)
337 (uri (git-reference
338 (url "https://github.com/mwouts/jupytext")
339 (commit (string-append "v" version))))
340 (file-name (git-file-name name version))
341 (sha256
342 (base32 "19d443vx597zzxna09qpync9iic3mris80bwm3kd8xaxaq0zq9w4"))))
343 (build-system python-build-system)
344 (arguments
345 (list
346 #:phases
347 #~(modify-phases %standard-phases
348 (replace 'check
349 (lambda* (#:key tests? #:allow-other-keys)
350 ;; some tests fail when HOME=/homeless-shelter.
351 (setenv "HOME" "/tmp")
352 ;; OSError: [Errno 18] Invalid cross-device link
353 (setenv "TMPDIR" "/tmp")
354 (when tests?
355 (let ((disabled-tests
356 (list "test_create_header_with_set_formats"
357 "test_pre_commit_hook"
358 "test_sync_with_pre_commit_hook")))
359 (invoke "pytest" "-vv" "-k"
360 (string-append "not "
361 (string-join disabled-tests
362 " and not "))))))))))
363 (native-inputs
364 (list git-minimal
365 pre-commit
366 python-autopep8
367 python-black
368 python-flake8
369 python-gitpython
370 python-isort
371 python-ipython-genutils
372 python-jupyter-server
373 python-pytest
374 python-pyaml))
375 (propagated-inputs
376 (list python-markdown-it-py
377 python-mdit-py-plugins
378 python-nbformat))
379 (home-page "https://github.com/mwouts/jupytext")
380 (synopsis
381 "Jupyter notebooks as Markdown documents, Julia, Python or R scripts")
382 (description
383 "Jupytext is a plugin for Jupyter that can save Jupyter notebooks as
384either Markdown files or scripts in many languages. Common use cases for
385Jupytext are:
386
387@itemize
388@item version control on Jupyter Notebooks
389@item editing, merging or refactoring notebooks in your favorite text editor
390@item applying Q&A checks on notebooks.
391@end itemize
392")
393 (license license:expat)))
394
395(define-public python-logzero
396 (package
397 (name "python-logzero")
398 (version "1.7.0")
399 (source
400 (origin
401 (method url-fetch)
402 (uri (pypi-uri "logzero" version))
403 (sha256
404 (base32 "10nh186vk6hpnpfycym44gja4fja0jyzw7q8dwimfd1rmv9xswvz"))))
405 (build-system python-build-system)
406 (native-inputs
407 (list python-pytest python-pytest-runner))
408 (arguments
409 `(#:phases
410 (modify-phases %standard-phases
411 (replace 'check
412 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
413 (when tests?
414 (add-installed-pythonpath inputs outputs)
415 (invoke "pytest")))))))
416 (home-page "https://github.com/metachris/logzero")
417 (synopsis "Robust and effective logging for Python")
418 (description
419 "@code{logzero} provides a fully configured Python logger object for
420easy logging and rotating to a console or a file.")
421 (license license:expat)))
422
423(define-public python-logbook
424 (package
425 (name "python-logbook")
426 (version "1.5.3")
427 (source
428 (origin
429 (method url-fetch)
430 (uri (pypi-uri "Logbook" version))
431 (sha256
432 (base32 "1s1gyfw621vid7qqvhddq6c3z2895ci4lq3g0r1swvpml2nm9x36"))))
433 (build-system python-build-system)
434 (arguments
435 `(#:phases
436 (modify-phases %standard-phases
437 (add-before 'build 'cythonize-sources
438 (lambda _
439 (with-directory-excursion "logbook"
440 (invoke "cython" "_speedups.pyx"))))
441 (replace 'check
442 (lambda* (#:key tests? #:allow-other-keys)
443 (when tests?
444 ;; Check cython build also
445 (setenv "CYBUILD" "True")
446 (invoke "pytest" "--cov=logbook" "-r" "s" "tests")))))))
447 (native-inputs
448 (list python-cython python-mock python-pytest python-pytest-cov
449 python-brotli))
450 (home-page "https://github.com/getlogbook/logbook")
451 (synopsis "Logbook is a logging replacement for Python")
452 (description
453 "Logbook is a logging system for Python that replaces the standard
454library’s logging module. It was designed with both complex and simple
455applications in mind and the idea to make logging fun.")
456 (license license:bsd-3)))
457
458(define-public python-ubelt
459 (package
460 (name "python-ubelt")
461 (version "1.0.1")
462 (source
463 (origin
464 (method git-fetch)
465 (uri (git-reference
466 (url "https://github.com/Erotemic/ubelt")
467 (commit (string-append "v" version))))
468 (file-name (git-file-name name version))
469 (sha256
470 (base32
471 "0hac9nqqvqfbca2s4g0mp1fnj0ah60bg9fb8234ibna3jww8qs33"))))
472 (build-system python-build-system)
473 (arguments
474 (list #:phases
475 #~(modify-phases %standard-phases
476 (replace 'check
477 (lambda* (#:key tests? #:allow-other-keys)
478 (when tests?
479 (setenv "HOME" "/tmp") ;else the test suite hangs
480 (invoke "pytest" "-vv" "-k"
481 (string-append
482 ;; The builder user home doesn't match HOME,
483 ;; which causes this test to fail.
484 "not userhome "
485 ;; This one pointlessly tries
486 ;; locating various binaries on
487 ;; the path.
488 "and not find_exe"))))))))
489 (propagated-inputs (list python-ordered-set))
490 (native-inputs
491 (list python-pytest
492 python-requests
493 python-xdoctest))
494 (home-page "https://github.com/Erotemic/ubelt")
495 (synopsis "Python library for hashing, caching, timing and more")
496 (description "Ubelt is a small library of simple functions that extend the
497Python standard library. It includes an @acronym{API, Application Programming
498Interface} to simplify common problems such as caching, timing, computing
499progress, among other things.")
500 (license license:asl2.0)))
501
502(define-public python-ueberzug
503 (package
504 (name "python-ueberzug")
505 (version "18.1.9")
506 (source
507 (origin
508 (method url-fetch)
509 (uri (pypi-uri "ueberzug" version))
510 (sha256
511 (base32
512 "1hxd45dnwa9yv908acarr98n2drmar66wzq9z2qd3irj24srzr3w"))))
513 (build-system python-build-system)
514 (inputs
515 (list libx11 libxext))
516 (propagated-inputs
517 (list python-attrs python-docopt python-pillow python-xlib))
518 (home-page "https://github.com/seebye/ueberzug")
519 (synopsis "Command line util to display images in combination with X11")
520 (description "Überzug is a command line util which draws images on
521terminals by using child windows. The advantages of using Überzug are:
522@itemize
523@item No race conditions as a new window is created to display images.
524@item Expose events will be processed, so images will be redrawn on switch
525workspaces.
526@item Tmux support (excluding multi pane windows).
527@item Terminals without the WINDOWID environment variable are supported.
528@item Chars are used as position - and size unit.
529@item No memory leak (/ unlimited cache).
530@end itemize")
531 (license license:gpl3+)))
532
533(define-public python-fire
534 (package
535 (name "python-fire")
536 (version "0.5.0")
537 (source
538 (origin
539 (method url-fetch)
540 (uri (pypi-uri "fire" version))
541 (sha256
542 (base32
543 "1imc9ais15dz3gmphawql86l9av5dykbp4hz0883k5n8k2gd9c56"))))
544 (build-system python-build-system)
545 (arguments
546 '(#:phases
547 (modify-phases %standard-phases
548 (replace 'check
549 (lambda* (#:key tests? #:allow-other-keys)
550 (when tests?
551 (invoke "pytest")))))))
552 (propagated-inputs
553 (list python-six python-termcolor))
554 (native-inputs
555 (list python-mock python-pytest))
556 (synopsis "Library for automatically generating command line interfaces")
557 (description
558 "Fire is a library for automatically generating command line interfaces
559from absolutely any Python object. The following are the advantages:
560@itemize
561@item A simple way to create a CLI in Python.
562@item A helpful tool for developing and debugging Python code.
563@item Helps with exploring existing code or turning other people's code into a
564command line interface.
565@item Makes transitioning between Bash and Python easier.
566@item Makes using a Python REPL easier by setting up the REPL with the modules
567and variables you'll need already imported and created.
568@end itemize")
569 (home-page "https://github.com/google/python-fire")
570 (license license:asl2.0)))
571
572(define-public python-fit-nbinom
573 (package
574 (name "python-fit-nbinom")
575 (version "1.1")
576 (source (origin
577 (method url-fetch)
578 (uri (pypi-uri "fit_nbinom" version))
579 (sha256
580 (base32
581 "12v8l5i35vjbpvh5i4lw29ys6vpr3z7pysyrx33hxaq09zr015mx"))))
582 (build-system pyproject-build-system)
583 (propagated-inputs (list python-numpy python-scipy))
584 (home-page "https://github.com/joachimwolff/fit_nbinom")
585 (synopsis "Negative binomial maximum likelihood estimator")
586 (description "This package provides an implementation in Python using
587scipy and numpy of negative binomial maximum likelihood estimation.")
588 (license license:gpl3+)))
589
590(define-public python-docrep
591 (package
592 (name "python-docrep")
593 (version "0.3.2")
594 (source (origin
595 (method url-fetch)
596 (uri (pypi-uri "docrep" version))
597 (sha256
598 (base32
599 "0523jrzjj29kxpdllmfhrfj9kysi9mphp2m7ippjkn5b07i1g2pd"))))
600 (build-system pyproject-build-system)
601 (propagated-inputs (list python-six))
602 (native-inputs (list python-pytest python-pytest-runner))
603 (home-page "https://github.com/Chilipp/docrep")
604 (synopsis "Python package for docstring repetition")
605 (description "Docrep is the documentation repetition module. This module
606targets developers that develop complex and nested Python APIs and helps them
607to create a well-documented piece of software.")
608 (license license:asl2.0)))
609
610(define-public python-dotmap
611 (package
612 (name "python-dotmap")
613 (version "1.3.30")
614 (source (origin
615 (method url-fetch)
616 (uri (pypi-uri "dotmap" version))
617 (sha256
618 (base32
619 "0s5kb2v7jd0narz6m6jcicak3h5pw290wz21cdsv8pq77y9sf8aq"))))
620 (build-system python-build-system)
621 (home-page "https://github.com/drgrib/dotmap")
622 (synopsis "Ordered, dynamically-expandable dot-access dictionary")
623 (description
624 "DotMap is a dot-access dictionary subclass that has dynamic
625hierarchy creation, can be initialized with keys, can be initialized from a
626dictionary, can be convert to a dictionary, and is ordered by insertion.")
627 (license license:expat)))
628
629(define-public python-dotty-dict
630 (package
631 (name "python-dotty-dict")
632 (version "1.3.1")
633 (source (origin
634 (method url-fetch)
635 (uri (pypi-uri "dotty_dict" version))
636 (sha256
637 (base32
638 "058sah2nyg44xq5wxywlzc3abzcv9fifnlvsflwma9mfp01nw0ab"))))
639 (build-system pyproject-build-system)
640 (native-inputs (list python-poetry-core))
641 (home-page "https://github.com/pawelzny/dotty_dict")
642 (synopsis "Python library for accessing dictionaries using a dot syntax")
643 (description "This package provides a library that wraps the traditional
644Python dictionaries and provides a syntax to access nested dictionaries values
645using a dot syntax, for example: @code{dictionary['deeply.nested.key']}.")
646 (license license:expat)))
647
648(define-public python-twodict
649 (package
650 (name "python-twodict")
651 (version "1.2")
652 (source
653 (origin
654 (method url-fetch)
655 (uri (pypi-uri "twodict" version))
656 (sha256
657 (base32 "0ifv7dv18jn2lg0a3l6zdlvmmlda2ivixfjbsda58a2ay6kxznr0"))))
658 (build-system python-build-system)
659 (home-page "https://github.com/MrS0m30n3/twodict")
660 (synopsis "Two way ordered dictionary for Python")
661 (description "TwoDict is a custom dictionary in which you can get the
662key:value relationship but you can also get the value:key relationship. It also
663remembers the order in which the items were inserted and supports almost all the
664features of the Python's built-in dict.")
665 (license license:unlicense)))
666
667(define-public python-adjusttext
668 (package
669 (name "python-adjusttext")
670 (version "0.8")
671 (source (origin
672 (method url-fetch)
673 (uri (pypi-uri "adjustText" version))
674 (sha256
675 (base32
676 "05zf0xn7ab40dan213fwbp1z4rybih8dphf9mzb2ddmbafxq41mv"))))
677 (build-system pyproject-build-system)
678 (propagated-inputs (list python-matplotlib python-numpy))
679 (home-page "https://github.com/Phlya/adjustText")
680 (synopsis "Adjust text position in matplotlib plots to minimize overlaps")
681 (description
682 "Often when we want to label multiple points on a graph the text will
683start heavily overlapping with both other labels and data points. This can be
684a major problem requiring manual solution. However this can be largely
685automatized by smart placing of the labels (difficult) or iterative adjustment
686of their positions to minimize overlaps (relatively easy). This library
687implements the latter option to help with matplotlib graphs.")
688 (license license:expat)))
689
690(define-public python-affine
691 (package
692 (name "python-affine")
693 (version "2.4.0")
694 (source (origin
695 (method url-fetch)
696 (uri (pypi-uri "affine" version))
697 (sha256
698 (base32
699 "1shyvajayyzbkp9dihb4mz835jnkp0kqqbyjfqci6v43da6q2kd2"))))
700 (build-system pyproject-build-system)
701 (propagated-inputs (list python-coveralls python-flake8 python-pydocstyle
702 python-pytest python-pytest-cov))
703 (native-inputs (list python-flit-core))
704 (home-page "https://github.com/rasterio/affine")
705 (synopsis "Matrices describing affine transformation of the plane")
706 (description "This is a package for matrices describing the affine
707transformation of the plane.")
708 (license license:bsd-3)))
709
710(define-public python-argopt
711 (package
712 (name "python-argopt")
713 (version "0.7.0")
714 (source (origin
715 (method url-fetch)
716 (uri (pypi-uri "argopt" version))
717 (sha256
718 (base32
719 "0ybs7kkp0cpl8zn1lvf7481xhssg1bbhh5la2cjzdm5yibashyxa"))))
720 (build-system python-build-system)
721 (native-inputs
722 (list python-coverage python-nose python-setuptools ; Won't build without this.
723 python-setuptools-scm))
724 (propagated-inputs
725 (list python-toml python-flake8))
726 (home-page "https://github.com/casperdcl/argopt")
727 (synopsis "Generate a command-line interface from a docstring")
728 (description "This package provides tools to define a command line interface
729from a docstring rather than the other way around.")
730 (license license:mpl2.0)))
731
732(define-public python-cachetools
733 (package
734 (name "python-cachetools")
735 (version "4.2.2")
736 (source (origin
737 (method url-fetch)
738 (uri (pypi-uri "cachetools" version))
739 (sha256
740 (base32
741 "1zqc098gk6y614lxwqd9z2gm8lldgvrpid133pnlm4m048gfvdb1"))))
742 (build-system python-build-system)
743 (home-page "https://github.com/tkem/cachetools/")
744 (synopsis "Extensible memoizing collections and decorators")
745 (description "This module provides various memoizing collections and
746decorators, including variants of the Python standard library's
747@code{lru_cache} function decorator.")
748 (license license:expat)))
749
750(define-public python-cobib
751 (package
752 (name "python-cobib")
753 (version "3.5.2")
754 (source (origin
755 (method url-fetch)
756 (uri (pypi-uri "cobib" version))
757 (file-name (string-append name "-" version ".tar.gz"))
758 (sha256
759 (base32
760 "16nbrbvascbf6cb7yvn9q793dy8zx703pqrmk3mswib9a19mnx3n"))))
761 (build-system python-build-system)
762 (propagated-inputs
763 (list python-beautifulsoup4
764 python-bibtexparser
765 python-pylatexenc
766 python-requests
767 python-requests-oauthlib
768 python-ruamel.yaml))
769 (native-inputs
770 (list python-future
771 python-pyte
772 python-pytest))
773 (home-page "https://gitlab.com/mrossinek/cobib")
774 (synopsis "Terminal-based bibliography management tool")
775 (description
776 "@command{cobib} is a command-line based bibliography management tool.
777It uses a plain-text database, a location-independent library, and features
778git integration, command-line support, and a curses-based TUI.")
779 (license license:expat)))
780
781(define-public python-colored
782 (package
783 (name "python-colored")
784 (version "1.4.4")
785 (source (origin
786 (method git-fetch)
787 (uri (git-reference
788 (url "https://gitlab.com/dslackw/colored")
789 (commit version)))
790 (file-name (git-file-name name version))
791 (sha256
792 (base32
793 "196ins0m7f90xz5dw764dlx060ziqbcydqzzq40b4ir5858baf3r"))))
794 (build-system pyproject-build-system)
795 (arguments (list #:tests? #false)) ;the tests are not run automatically
796 (home-page "https://gitlab.com/dslackw/colored")
797 (synopsis "Simple library for color and formatting to terminal")
798 (description "This is a very simple Python library for color and
799formatting in the terminal. It comes with a collection of color codes and
800names for 256 color terminal setups.")
801 (license license:expat)))
802
803(define-public python-colorful
804 (package
805 (name "python-colorful")
806 (version "0.5.4")
807 (source
808 (origin
809 (method git-fetch) ; no tests data in PyPi package
810 (uri (git-reference
811 (url "https://github.com/timofurrer/colorful")
812 (commit (string-append "v" version))))
813 (file-name (git-file-name name version))
814 (sha256
815 (base32 "1fcz5v8b318a3dsdha4c874jsf3wmcw3f25bv2csixclyzacli98"))))
816 (build-system pyproject-build-system)
817 (native-inputs
818 (list python-coverage python-flake8 python-pytest))
819 (propagated-inputs
820 (list python-colorama))
821 (home-page "http://github.com/timofurrer/colorful")
822 (synopsis "Terminal string styling")
823 (description "Colorful provides an array of text styles, that can be used
824as functions or string constants to form colored terminal output.")
825 (license license:expat)))
826
827(define-public python-yaspin
828 (package
829 (name "python-yaspin")
830 (version "1.5.0")
831 (source
832 (origin
833 (method url-fetch)
834 (uri
835 (pypi-uri "yaspin" version))
836 (sha256
837 (base32 "1iirah0kydrdp505qnjj6gi54avcr7z0hbkfx9vmh8myr30rpz6q"))))
838 (build-system python-build-system)
839 (native-inputs
840 (list python-pytest))
841 (home-page "https://github.com/pavdmyt/yaspin")
842 (synopsis "Yet Another Terminal Spinner")
843 (description "Yaspin provides a terminal spinner to indicate the progress
844during long operations.")
845 (license license:expat)))
846
847(define-public python-lunr
848 (package
849 (name "python-lunr")
850 (version "0.6.0")
851 (source
852 (origin
853 (method url-fetch)
854 (uri
855 (pypi-uri "lunr" version))
856 (sha256
857 (base32 "106akalywfmnypzkdrhgz4n4740a8xayspybsw59kq06vz8i2qrc"))))
858 (build-system python-build-system)
859 (native-inputs
860 (list python-mock python-pytest))
861 (propagated-inputs
862 (list python-nltk-3.4))
863 (home-page
864 "https://github.com/yeraydiazdiaz/lunr.py")
865 (synopsis "Full-text search library")
866 (description "This package provides python library for full-text search.
867It indexes documents and provides a search interface for retrieving documents
868that best match text queries.")
869 (license license:expat)))
870
871(define-public python-mdit-py-plugins
872 (package
873 (name "python-mdit-py-plugins")
874 (version "0.3.1")
875 (source (origin
876 (method git-fetch) ;for tests
877 (uri (git-reference
878 (url "https://github.com/executablebooks/mdit-py-plugins")
879 (commit (string-append "v" version))))
880 (file-name (git-file-name name version))
881 (sha256
882 (base32
883 "00ybbfb6dzn9q5qnvnm8bmhd84s215ik7pcdb4r35zhwiv2ikizz"))))
884 (build-system pyproject-build-system)
885 (propagated-inputs
886 (list python-markdown-it-py
887 python-attrs))
888 (native-inputs
889 (list python-coverage
890 python-flit-core
891 python-pytest
892 python-pytest-cov
893 python-pytest-regressions))
894 (home-page "https://github.com/executablebooks/mdit-py-plugins")
895 (synopsis "Collection of plugins for markdown-it-py")
896 (description "This package contains a collection of plugins for
897@code{markdown-it-py} like:
898@enumerate
899@item amsmath,
900@item attrs,
901@item container,
902@item definition list,
903@item dollarmath,
904@item field list,
905@item footnote,
906@item textmath, and
907@item wordcount.
908@end enumerate")
909 (license license:expat)))
910
911(define-public python-mdurl
912 (package
913 (name "python-mdurl")
914 (version "0.1.2")
915 (source
916 (origin
917 (method git-fetch) ; no tests data in PyPi package
918 (uri (git-reference
919 (url "https://github.com/executablebooks/mdurl")
920 (commit version)))
921 (file-name (git-file-name name version))
922 (sha256
923 (base32 "0csc777q42jzv4zgdzxmwp8xqlb92ws1jvj09m2smh4klw67q5f3"))))
924 (build-system pyproject-build-system)
925 (native-inputs (list python-flit python-pytest))
926 (home-page "https://github.com/executablebooks/mdurl")
927 (synopsis "Markdown URL utilities")
928 (description
929 "This package implements a Python port of the JavaScript @code{mdurl}.")
930 (license license:expat)))
931
932(define-public python-mrkd
933 (package
934 (name "python-mrkd")
935 (version "0.2.0")
936 (source
937 (origin
938 (method url-fetch)
939 (uri (pypi-uri "mrkd" version))
940 (sha256
941 (base32 "1bvaqbna1ihb4y2mv9pmvqcq3r9j6lwbbii99dani8lxx4dqqvs5"))))
942 (build-system python-build-system)
943 (propagated-inputs
944 (list python-jinja2 python-mistune python-pygments))
945 (home-page "https://pypi.org/project/mrkd/")
946 (synopsis "Python Markdown implementation")
947 (description
948 "@code{mrkd} writes man pages using Markdown, and convert them to Roff or
949HTML")
950 (license license:bsd-3)))
951
952(define-public python-mkdocs
953 (package
954 (name "python-mkdocs")
955 (version "1.3.0")
956 (source
957 (origin
958 ;; The tests suite appears to be incomplete in the PyPI archive.
959 (method git-fetch)
960 (uri (git-reference
961 (url "https://github.com/mkdocs/mkdocs")
962 (commit version)))
963 (file-name (git-file-name name version))
964 (sha256
965 (base32
966 "1n5rdllrxvhnxmdrddf55p3s86dakx0rq2gg6bj6pr6jg2pn932b"))))
967 (build-system python-build-system)
968 (arguments
969 `(#:phases
970 (modify-phases %standard-phases
971 ;; Requirements refer to a specific version of dependencies,
972 ;; which are too old. So we patch to refer to any later version.
973 (add-after 'unpack 'patch-requirements
974 (lambda _
975 (substitute* "setup.py"
976 (("==") ">="))))
977 (replace 'check
978 (lambda* (#:key tests? #:allow-other-keys)
979 (when tests?
980 (invoke "python" "-m" "unittest"
981 "discover" "-p" "*tests.py" "mkdocs"
982 "--top-level-directory" ".")))))))
983 (propagated-inputs
984 (list python-babel
985 python-click
986 python-ghp-import
987 python-importlib-metadata
988 python-jinja2
989 python-markdown
990 python-markupsafe
991 python-mdx-gh-links
992 python-mergedeep
993 python-packaging
994 python-pyyaml
995 python-pyyaml-env-tag
996 python-watchdog))
997 (home-page "https://www.mkdocs.org")
998 (synopsis "Project documentation with Markdown")
999 (description "MkDocs is a static site generator geared towards building
1000project documentation. Documentation source files are written in Markdown, and
1001configured with a single YAML configuration file.")
1002 (license license:bsd-3)))
1003
1004(define-public python-mkdocs-markdownextradata-plugin
1005 (package
1006 (name "python-mkdocs-markdownextradata-plugin")
1007 (version "0.2.5")
1008 (source (origin
1009 ;; Use git, as there are some test files missing from the PyPI release,
1010 ;; see https://github.com/rosscdh/mkdocs-markdownextradata-plugin/issues/41.
1011 (method git-fetch)
1012 (uri (git-reference
1013 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
1014 (commit version)))
1015 (file-name (git-file-name name version))
1016 (sha256
1017 (base32
1018 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
1019 (build-system python-build-system)
1020 (native-inputs (list python-pytest))
1021 (propagated-inputs (list python-mkdocs python-pyyaml))
1022 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
1023 (synopsis "Inject mkdocs.yml extra variables into the MkDocs markdown
1024template")
1025 (description
1026 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
1027variables into the markdown template")
1028 (license license:expat)))
1029
1030(define-public python-mysql-connector-python
1031 (package
1032 (name "python-mysql-connector-python")
1033 (version "8.0.33")
1034 ;; The archive on PyPi does not contain a build system
1035 (source (origin
1036 (method url-fetch)
1037 (uri (string-append "https://cdn.mysql.com/Downloads/"
1038 "Connector-Python/mysql-connector-python-"
1039 version "-src.tar.gz"))
1040 (sha256
1041 (base32
1042 "00j9xgd43yzx5yiijnlmpaqpa58m5lscjglsgzg48dibhr69br0l"))))
1043 (build-system python-build-system)
1044 (arguments
1045 (list
1046 #:configure-flags
1047 #~(list (string-append "--with-mysql-capi="
1048 #$(this-package-input "mysql"))
1049 (string-append "--with-protobuf-include-dir="
1050 #$(this-package-input "protobuf")
1051 "/include/google/protobuf")
1052 (string-append "--with-protobuf-lib-dir="
1053 #$(this-package-input "protobuf")
1054 "/lib")
1055 (string-append "--with-protoc="
1056 #$(this-package-input "protobuf")
1057 "/bin/protoc"))
1058 #:phases
1059 #~(modify-phases %standard-phases
1060 (add-after 'unpack 'compatibility
1061 (lambda _
1062 (substitute* "src/mysql_capi.c"
1063 (("res = mysql_options\\(&self->session, MYSQL_OPT_LOAD_DATA_LOCAL_DIR.*")
1064 "res = 0;")
1065 (("mysql_options\\(&self->session, MYSQL_OPT_LOAD_DATA_LOCAL_DIR.*")
1066 "")
1067 (("mysql_options\\(&self->session, MYSQL_OPT_TLS_CIPHERSUITES.*")
1068 "")
1069 ;; The C API does not have mysql_bind_param, so we produce an
1070 ;; error here.
1071 (("status = mysql_bind_param.*") "status = 1;"))
1072 ;; See https://github.com/protocolbuffers/protobuf/issues/9943
1073 (substitute* "src/mysqlxpb/mysqlxpb.cc"
1074 (("google::protobuf::string") "std::string"))))
1075 (replace 'check
1076 (lambda* (#:key tests? #:allow-other-keys)
1077 (when tests?
1078 ;; Some of these tests might be failing due to the build
1079 ;; container's restrictions, others are due to the version
1080 ;; mismatch.
1081 (substitute* "tests/cext/test_cext_api.py"
1082 (("def test_change_user") "def _do_not_test_change_user")
1083 (("def test_get_character_set_info")
1084 "def _do_not_test_get_character_set_info"))
1085 (substitute* "tests/test_bugs.py"
1086 (("def test_change_user") "def _do_not_test_change_user")
1087 (("def test_lost_connection") "def _do_not_test_lost_connection")
1088 (("def test_kill_query") "def _do_not_test_kill_query"))
1089 (substitute* "tests/test_connection.py"
1090 (("def test_allow_local_infile_in_path")
1091 "def _do_not_test_allow_local_infile_in_path"))
1092 (substitute* "tests/test_constants.py"
1093 (("def test_deprecated")
1094 "def _do_not_test_deprecated"))
1095 (mkdir-p "/tmp/datadir")
1096 (invoke "python3" "unittests.py"
1097 "--verbosity=3"
1098 (string-append "--with-mysql=" #$(this-package-input "mysql"))
1099 "--keep"
1100 "--mysql-topdir=/tmp/datadir"
1101 "--unix-socket=/tmp/datadir")))))))
1102 (propagated-inputs (list python-protobuf))
1103 (inputs (list mysql protobuf-3.20 openssl-1.1 zlib))
1104 (home-page "https://dev.mysql.com/doc/connector-python/en/index.html")
1105 (synopsis "MySQL driver written in Python")
1106 (description "MySQL Connector/Python enables Python programs to access
1107MySQL databases, using an API that is compliant with the Python Database API
1108Specification v2.0 (PEP 249).")
1109 (license license:gpl2)))
1110
1111(define-public python-pdoc
1112 (package
1113 (name "python-pdoc")
1114 (version "13.0.1")
1115 (source (origin
1116 (method git-fetch)
1117 (uri (git-reference
1118 (url "https://github.com/mitmproxy/pdoc")
1119 (commit (string-append "v" version))))
1120 (file-name (git-file-name name version))
1121 (sha256
1122 (base32
1123 "0gxkw607nrd67ck4w8jri9vfrm5g60qvp8b134m8zkiphbxjnx0l"))))
1124 (build-system pyproject-build-system)
1125 (native-inputs (list python-pytest python-jinja2 python-pygments))
1126 (arguments
1127 (list
1128 ;; Some tests fail, presumably because of slight version mismatches of
1129 ;; the dependencies.
1130 #:test-flags
1131 '(list "-k" (string-append "not test_var_with_raising_repr and "
1132 "not test_smoke[mock] and "
1133 "not test_snapshots[html"))))
1134 (home-page "https://pdoc.dev/")
1135 (synopsis "API documentation for Python projects")
1136 (description "pdoc auto-generates API documentation that follows your
1137project's Python module hierarchy. It requires no configuration, has
1138first-class support for type annotations, cross-links between identifiers,
1139comes with an integrated live-reloading web server, uses customizable HTML
1140templates, understands numpydoc and Google-style docstrings.")
1141 (license license:unlicense)))
1142
1143(define-public python-py4j
1144 (package
1145 (name "python-py4j")
1146 (version "0.10.9.7")
1147 (source (origin
1148 (method url-fetch)
1149 (uri (pypi-uri "py4j" version))
1150 (sha256
1151 (base32
1152 "1fwdx92cdaiviradksfyygg05g1fpc3x2lf65bv5rnispcam6vhb"))))
1153 (build-system python-build-system)
1154 (home-page "https://www.py4j.org/")
1155 (synopsis "Dynamically access arbitrary Java objects from Python")
1156 (description
1157 "This package enables Python programs to dynamically access arbitrary
1158Java objects.")
1159 (license license:bsd-3)))
1160
1161(define-public python-pymdown-extensions
1162 (package
1163 (name "python-pymdown-extensions")
1164 (version "8.1.1")
1165 (source
1166 (origin
1167 (method url-fetch)
1168 (uri
1169 (pypi-uri "pymdown-extensions" version))
1170 (sha256
1171 (base32 "0d8pdndrl1kj105lq7r6kw2dnhcvll6h2qs07w71mcpi7gx728v3"))))
1172 (build-system python-build-system)
1173 ;; FIXME: "AssertionError: False is not true"
1174 (arguments
1175 `(#:tests? #f))
1176 (propagated-inputs
1177 (list python-markdown))
1178 (home-page "https://github.com/facelessuser/pymdown-extensions")
1179 (synopsis "Extension pack for Python Markdown")
1180 (description "PyMdown Extensions is a collection of extensions for Python
1181Markdown. All extensions are found under the module namespace of pymdownx.")
1182 (license license:expat)))
1183
1184(define-public python-pint
1185 (package
1186 (name "python-pint")
1187 (version "0.20.1")
1188 (source (origin
1189 (method url-fetch)
1190 (uri (pypi-uri "Pint" version))
1191 (sha256
1192 (base32
1193 "0rv0cbala7ibjbaf6kkcn0mdhqdbajnvlcw0f15gwzfwg10g0z1q"))))
1194 (build-system pyproject-build-system)
1195 (arguments
1196 ;; This single test tries to write to $HOME/.cache/pint.
1197 (list #:test-flags #~'("-k" "not test_auto")))
1198 (native-inputs
1199 (list python-dask
1200 python-distributed
1201 python-importlib-metadata
1202 python-pytest ;for pytest-subtests
1203 python-pytest-cov
1204 python-pytest-mpl
1205 python-pytest-subtests
1206 python-setuptools-scm
1207 python-sparse
1208 python-xarray))
1209 (home-page "https://github.com/hgrecco/pint")
1210 (synopsis "Physical quantities module")
1211 (description
1212 "Pint is a Python package to define, operate and manipulate physical
1213quantities: the product of a numerical value and a unit of measurement. It
1214allows arithmetic operations between them and conversions from and to
1215different units.")
1216 (license license:bsd-3)))
1217
1218(define-public python-plotext
1219 (package
1220 (name "python-plotext")
1221 (version "5.2.8")
1222 (source (origin
1223 (method url-fetch)
1224 (uri (pypi-uri "plotext" version))
1225 (sha256
1226 (base32
1227 "1gpy1z2i4vq1mcrhysxahz4339pbl9rzk58rf5m5gf5ym9xji6ii"))))
1228 (build-system pyproject-build-system)
1229 (arguments (list #:tests? #false)) ;there are none
1230 (home-page "https://github.com/piccolomo/plotext")
1231 (synopsis "Plots in the terminal")
1232 (description "Plotext lets you plot directly to the terminal.")
1233 (license license:expat)))
1234
1235(define-public python-plotille
1236 (package
1237 (name "python-plotille")
1238 (version "4.0.2")
1239 (source (origin
1240 (method url-fetch)
1241 (uri (pypi-uri "plotille" version))
1242 (sha256
1243 (base32
1244 "0fvsk6glxfphhqy405h05rj3v95jd1byl5hv2fyd5l31wln23shj"))))
1245 (build-system python-build-system)
1246 (native-inputs (list python-six))
1247 (home-page "https://github.com/tammoippen/plotille")
1248 (synopsis "Plot in the terminal using braille dots")
1249 (description
1250 "Plotille provides a figure class and graphing functions to create plots,
1251scatter plots, histograms and heatmaps in the terminal using braille dots.")
1252 (license license:expat)))
1253
1254(define-public python-mdx-gh-links
1255 (package
1256 (name "python-mdx-gh-links")
1257 (version "0.2")
1258 (source
1259 (origin
1260 (method url-fetch)
1261 (uri (pypi-uri "mdx_gh_links" version))
1262 (sha256
1263 (base32 "167k1jbp3jifxbnlpi6wy0z1skam7gqv2sixb5bhggb2vypqvysr"))))
1264 (build-system python-build-system)
1265 (arguments (list #:tests? #f)) ;tests connect github
1266 (propagated-inputs (list python-markdown))
1267 (home-page "https://github.com/Python-Markdown/github-links/")
1268 (synopsis "Python-Markdown extension adding support for shorthand links")
1269 (description "This package is an extension to Python-Markdown which adds
1270support for shorthand links to GitHub users, repositories, issues and
1271commits.")
1272 (license license:bsd-3)))
1273
1274(define-public python-mkdocs-material
1275 (package
1276 (name "python-mkdocs-material")
1277 (version "7.1.3")
1278 (source
1279 (origin
1280 (method url-fetch)
1281 (uri
1282 (pypi-uri "mkdocs-material" version))
1283 (sha256
1284 (base32 "0ci9xiasq9nfn09v11m7p49vzazdbgslw7rpzjd6y3hsmn9vljz3"))))
1285 (build-system python-build-system)
1286 (arguments
1287 `(#:phases
1288 (modify-phases %standard-phases
1289 ;; Requirement mkdocs-material-extensions
1290 ;; in-turn requires mkdocs-material. This causes
1291 ;; circular dependency, so we remove this requirement.
1292 (add-after 'unpack 'patch-requirements
1293 (lambda _
1294 (substitute* "requirements.txt"
1295 (("mkdocs-material-extensions.*$") "")))))))
1296 (propagated-inputs
1297 (list python-markdown python-mkdocs python-pygments
1298 python-pymdown-extensions))
1299 (home-page "https://squidfunk.github.io/mkdocs-material/")
1300 (synopsis "Material Design theme for MkDocs")
1301 (description "This package provides a theme plugin for the static site
1302generator MkDocs.")
1303 (license license:expat)))
1304
1305(define-public python-skranger
1306 (package
1307 (name "python-skranger")
1308 (version "0.8.0")
1309 (source (origin
1310 (method git-fetch)
1311 (uri (git-reference
1312 (url "https://github.com/crflynn/skranger")
1313 (commit version)
1314 (recursive? #true)))
1315 (file-name (git-file-name name version))
1316 (sha256
1317 (base32
1318 "0njy4xbc98l295k92nyk93njv1348vd1il5pdyrnk8nnzc2anzf0"))))
1319 (build-system pyproject-build-system)
1320 (arguments
1321 (list
1322 #:modules '((guix build pyproject-build-system)
1323 (guix build utils)
1324 (ice-9 match))
1325 #:test-flags
1326 ;; "from sklearn.datasets import load_boston" fails because it has been
1327 ;; removed from scikit-learn since version 1.2.
1328 '(list "--ignore=tests/conftest.py"
1329 "--ignore=tests/test_tools.py"
1330 "--ignore=tests/tree/test_regressor.py"
1331 "--ignore=tests/ensemble/test_regressor.py")
1332 #:phases
1333 #~(modify-phases %standard-phases
1334 (add-after 'unpack 'fix-tests
1335 (lambda _
1336 (substitute* "tests/conftest.py"
1337 (("from sklearn.datasets import load_boston") "")
1338 (("^_boston_X.*") "_boston_X, _boston_Y = (True, True)\n"))))
1339 (add-before 'check 'build-extensions
1340 (lambda _
1341 ;; Cython extensions have to be built before running the tests.
1342 (invoke "python" "buildpre.py")
1343 (invoke "python" "build.py" "build_ext" "--inplace")
1344 (let ((site (string-append #$output "/lib/python"
1345 #$(version-major+minor
1346 (package-version python))
1347 "/site-packages/skranger"))
1348 (lib (match (find-files "build" "\\.so")
1349 ((the-lib) the-lib)
1350 (_ (error "could not find .so")))))
1351 (mkdir-p site)
1352 (install-file lib site)))))))
1353 (propagated-inputs (list python-scikit-learn))
1354 (native-inputs
1355 (list python-cython
1356 python-matplotlib
1357 python-pandas
1358 python-poetry-core
1359 python-pytest))
1360 (home-page "https://github.com/crflynn/skranger")
1361 (synopsis "Python bindings for C++ ranger random forests")
1362 (description "This package provides scikit-learn compatible Python
1363bindings to the C++ random forest implementation, ranger, using Cython.")
1364 (license license:gpl3+)))
1365
1366(define-public python-slixmpp
1367 (package
1368 (name "python-slixmpp")
1369 (version "1.8.3")
1370 (source
1371 (origin
1372 (method git-fetch)
1373 (uri
1374 (git-reference
1375 (url "https://lab.louiz.org/poezio/slixmpp.git")
1376 (commit
1377 (string-append "slix-" version))))
1378 (file-name
1379 (git-file-name name version))
1380 (sha256
1381 (base32 "0cvr037qhf0fpby5dci6ckqngaly1mnjs2zpndwgmvr3dyvrd8l8"))))
1382 (build-system python-build-system)
1383 (arguments
1384 `(#:phases
1385 (modify-phases %standard-phases
1386 (add-after 'unpack 'patch
1387 (lambda _
1388 (substitute* "setup.py"
1389 (("'CC', 'cc'")
1390 "'CC', 'gcc'"))
1391 #t)))))
1392 (native-inputs
1393 `(("cython" ,python-cython)
1394 ("gnupg" ,gnupg)
1395 ("pkg-config" ,pkg-config)))
1396 (propagated-inputs
1397 (list python-aiodns
1398 python-aiohttp
1399 python-cryptography
1400 python-defusedxml
1401 python-emoji
1402 python-pyasn1
1403 python-pyasn1-modules))
1404 (inputs
1405 (list libidn python)) ; We are building a Python extension.
1406 (synopsis "XMPP library without threads")
1407 (description "Slixmpp is a XMPP library for Python 3.7+. It is a fork of
1408SleekXMPP. Its goal is to only rewrite the core of the library (the low level
1409socket handling, the timers, the events dispatching) in order to remove all
1410threads.")
1411 (home-page "https://lab.louiz.org/poezio/slixmpp")
1412 (license license:expat)))
1413
1414(define-public python-tenacity
1415 (package
1416 (name "python-tenacity")
1417 (version "8.0.1")
1418 (source (origin
1419 (method url-fetch)
1420 (uri (pypi-uri "tenacity" version))
1421 (sha256
1422 (base32
1423 "0bwkvjpjfyi9dgszzad9aww2vc00w3bczjnbifi92cp7wch2l923"))))
1424 (build-system pyproject-build-system)
1425 (native-inputs
1426 (list python-setuptools-scm python-tornado-6 python-typeguard
1427 python-pytest))
1428 (home-page "https://github.com/jd/tenacity")
1429 (synopsis "Retrying library for python")
1430 (description "Tenacity is a general-purpose python library to simplify the
1431task of adding retry behavior to just about anything.")
1432 (license license:asl2.0)))
1433
1434(define-public python-pytelegrambotapi
1435 (package
1436 (name "python-pytelegrambotapi")
1437 (version "3.7.4")
1438 (source
1439 (origin
1440 (method git-fetch)
1441 (uri (git-reference
1442 (url "https://github.com/eternnoir/pyTelegramBotAPI")
1443 (commit version)))
1444 (file-name (git-file-name name version))
1445 (sha256
1446 (base32 "0r7g5zs0fk3g2dxvbpl0pi730x7r2kalrhn30fs0pvc15a59fmxz"))))
1447 (build-system python-build-system)
1448 (arguments
1449 `(#:phases
1450 (modify-phases %standard-phases
1451 (replace 'check
1452 (lambda* (#:key tests? #:allow-other-keys)
1453 (when tests?
1454 (with-directory-excursion "tests"
1455 (invoke "py.test")))
1456 #t)))))
1457 (propagated-inputs
1458 (list python-requests))
1459 (native-inputs
1460 (list python-pytest))
1461 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
1462 (synopsis "Python Telegram bot api")
1463 (description "This package provides a simple, but extensible Python
1464implementation for the Telegram Bot API.")
1465 (license license:gpl2)))
1466
1467(define-public python-colorlog
1468 (package
1469 (name "python-colorlog")
1470 (version "6.6.0")
1471 (source
1472 (origin
1473 (method url-fetch)
1474 (uri (pypi-uri "colorlog" version))
1475 (sha256
1476 (base32 "1s7x0v872h8aks8xp01wmv6hzisxqjrh1svbbcycir0980h76krl"))))
1477 (build-system python-build-system)
1478 (arguments
1479 `(#:phases
1480 (modify-phases %standard-phases
1481 (replace 'check
1482 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
1483 (when tests?
1484 (add-installed-pythonpath inputs outputs)
1485 (invoke "python" "-m" "pytest")))))))
1486 (native-inputs
1487 (list python-pytest))
1488 (home-page "https://github.com/borntyping/python-colorlog")
1489 (synopsis "Log formatting with colors for python")
1490 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
1491with Python's logging module that outputs records using terminal colors.")
1492 (license license:expat)))
1493
1494(define-public python-pyprind
1495 (package
1496 (name "python-pyprind")
1497 (version "2.11.3")
1498 (source (origin
1499 (method url-fetch)
1500 (uri (pypi-uri "PyPrind" version))
1501 (sha256
1502 (base32
1503 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
1504 (build-system python-build-system)
1505 (propagated-inputs
1506 (list python-psutil))
1507 (home-page "https://github.com/rasbt/pyprind")
1508 (synopsis "Python Progress Bar and Percent Indicator Utility")
1509 (description "The PyPrind (Python Progress Indicator) module provides a
1510progress bar and a percentage indicator object that let you track the progress
1511of a loop structure or other iterative computation.")
1512 (license license:bsd-3)))
1513
1514(define-public python-glymur
1515 (package
1516 (name "python-glymur")
1517 (version "0.12.0")
1518 (source
1519 (origin
1520 (method git-fetch) ; no tests data in PyPi package
1521 (uri (git-reference
1522 (url "https://github.com/quintusdias/glymur")
1523 (commit (string-append "v" version))))
1524 (file-name (git-file-name name version))
1525 (sha256
1526 (base32 "03nny8k42yxdyw7sjv43szmg23x3rqplbaf7m0a0lpvwla1dl78i"))))
1527 (build-system pyproject-build-system)
1528 (arguments
1529 (list
1530 #:phases
1531 #~(modify-phases %standard-phases
1532 (add-after 'unpack 'patch-library-locations
1533 (lambda* (#:key inputs #:allow-other-keys)
1534 ;; XXX: It's a workaround for Python inability to find the
1535 ;; .so libraries with ctypes.util.find_library()
1536 (substitute* '("glymur/config.py")
1537 (("path = find_library\\(libname\\)")
1538 (string-append
1539 "if libname == \"openjp2\":\n"
1540 " path = \""
1541 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
1542 " elif libname == \"tiff\":\n"
1543 " path = \""
1544 (search-input-file inputs "/lib/libtiff.so") "\"\n"
1545 " elif libname == \"c\":\n"
1546 " path = \""
1547 (search-input-file inputs "/lib/libc.so.6") "\"\n")))))
1548 (add-before 'check 'disable-failing-tests
1549 (lambda _
1550 ;; Failing test due to inability of
1551 ;; ctypes.util.find_library() to determine library path,
1552 ;; which is patched above.
1553 (delete-file "tests/test_config.py"))))))
1554 (native-inputs
1555 (list python-pytest))
1556 (inputs
1557 (list openjpeg ; glymur/lib/openjp2.py
1558 libtiff)) ; glymur/lib/tiff.py
1559 (propagated-inputs
1560 (list python-lxml
1561 python-numpy
1562 python-packaging))
1563 (home-page "https://github.com/quintusdias/glymur")
1564 (synopsis "Python interface to OpenJPEG and LibTIFF")
1565 (description
1566 "This package provides Python interface to the OpenJPEG library which
1567allows one to read and write JPEG 2000 files")
1568 (license license:expat)))
1569
1570(define-public python-gphoto2
1571 (package
1572 (name "python-gphoto2")
1573 (version "2.2.1")
1574 (source (origin
1575 (method url-fetch)
1576 (uri (pypi-uri "gphoto2" version))
1577 (sha256
1578 (base32
1579 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
1580 (build-system python-build-system)
1581 (native-inputs
1582 (list pkg-config))
1583 (inputs
1584 (list libgphoto2))
1585 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
1586 (synopsis "Python interface to libgphoto2")
1587 (description "@code{python-gphoto2} is a comprehensive Python interface
1588(or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
1589automatically generate the interface code.")
1590 (license license:gpl3+)))
1591
1592(define-public python-colour
1593 (package
1594 (name "python-colour")
1595 (version "0.1.5")
1596 (source (origin
1597 (method url-fetch)
1598 (uri (pypi-uri "colour" version))
1599 (sha256
1600 (base32
1601 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
1602 (build-system python-build-system)
1603 (native-inputs
1604 (list python-d2to1))
1605 (home-page "https://github.com/vaab/colour")
1606 (synopsis "Convert and manipulate various color representations")
1607 (description "Pythonic way to manipulate color representations (HSL, RVB,
1608web, X11, ...).")
1609 (license license:expat)))
1610
1611(define-public python-d2to1
1612 (package
1613 (name "python-d2to1")
1614 (version "0.2.12.post1")
1615 (source (origin
1616 (method url-fetch)
1617 (uri (pypi-uri "d2to1" version))
1618 (sha256
1619 (base32
1620 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
1621 (build-system python-build-system)
1622 (native-inputs
1623 (list python-nose))
1624 (home-page "https://github.com/embray/d2to1")
1625 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
1626in python")
1627 (description "The python package d2to1 (the d is for distutils) allows
1628using distutils2-like setup.cfg files for a package's metadata with a
1629distribute/setuptools setup.py script.")
1630 (license license:bsd-2)))
1631
1632(define-public python-rawkit
1633 (package
1634 (name "python-rawkit")
1635 (version "0.6.0")
1636 (source (origin
1637 (method url-fetch)
1638 (uri (pypi-uri "rawkit" version))
1639 (sha256
1640 (base32
1641 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
1642 (build-system python-build-system)
1643 (native-inputs
1644 (list python-pytest python-mock))
1645 (inputs
1646 (list libraw))
1647 (home-page "https://rawkit.readthedocs.io")
1648 (synopsis "Ctypes-based LibRaw binding for Python")
1649 (description "The rawkit package provides two modules: rawkit and libraw.
1650The rawkit module provides a high-level Pythonic interface for developing raw
1651photos, while the libraw module provides a CTypes based interface for
1652interacting with the low-level LibRaw C APIs.")
1653 (license license:expat)))
1654
1655(define-public python-easygui
1656 (package
1657 (name "python-easygui")
1658 (version "0.98.1")
1659 (source (origin
1660 (method url-fetch)
1661 (uri (pypi-uri "easygui" version))
1662 (sha256
1663 (base32
1664 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
1665 (build-system python-build-system)
1666 (propagated-inputs
1667 (list `(,python "tk")))
1668 (home-page "https://github.com/robertlugg/easygui")
1669 (synopsis "GUI programming module for Python")
1670 (description "EasyGUI is a module for very simple, very easy GUI
1671programming in Python. EasyGUI is different from other GUI generators in that
1672EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
1673simple function calls.")
1674 (license license:bsd-3)))
1675
1676(define-public python-pymd4c
1677 (package
1678 (name "python-pymd4c")
1679 (version "0.4.6.0b1")
1680 (source
1681 (origin
1682 (method url-fetch)
1683 (uri (pypi-uri "pymd4c" version))
1684 (sha256
1685 (base32 "07s3arn85ri92im6x3ipljdmrxmpik7irs06i6lm17j1x6j9841d"))))
1686 (build-system python-build-system)
1687 (inputs
1688 (list md4c))
1689 (native-inputs
1690 (list python-flake8 python-pkgconfig pkg-config))
1691 (home-page "https://github.com/dominickpastore/pymd4c")
1692 (synopsis "Python bindings for MD4C")
1693 (description
1694 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
1695to CommonMark.")
1696 (license license:expat)))
1697
1698(define-public python-pymediainfo
1699 (package
1700 (name "python-pymediainfo")
1701 (version "4.1")
1702 (source
1703 (origin
1704 (method url-fetch)
1705 (uri (pypi-uri "pymediainfo" version))
1706 (sha256
1707 (base32
1708 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
1709 (build-system python-build-system)
1710 (native-inputs
1711 (list python-setuptools-scm python-pytest))
1712 (inputs
1713 (list libmediainfo))
1714 (arguments
1715 `(#:phases
1716 (modify-phases %standard-phases
1717 (add-after 'unpack 'patch-libmediainfo
1718 (lambda _
1719 (substitute* "pymediainfo/__init__.py"
1720 (("libmediainfo.so.0")
1721 (search-input-file %build-inputs
1722 "/lib/libmediainfo.so.0")))))
1723 (replace 'check
1724 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
1725 (when tests?
1726 (add-installed-pythonpath inputs outputs)
1727 ;; Skip the only failing test "test_parse_url" because it tries
1728 ;; to access the internet.
1729 (invoke "pytest" "-vv" "-k" "not test_parse_url")))))))
1730 (home-page
1731 "https://github.com/sbraz/pymediainfo")
1732 (synopsis
1733 "Python wrapper for the mediainfo library")
1734 (description
1735 "This package provides a Python wrapper for the mediainfo library to
1736access the technical and tag data for video and audio files.")
1737 (license license:expat)))
1738
1739(define-public python-psutil
1740 (package
1741 (name "python-psutil")
1742 (version "5.9.2")
1743 (source
1744 (origin
1745 (method url-fetch)
1746 (uri (pypi-uri "psutil" version))
1747 (sha256
1748 (base32 "0p1bf6ndcssqh0ic828ggwhzhm67mzj3ffq6043v0fvc1fhn3f7y"))))
1749 (build-system python-build-system)
1750 (arguments
1751 ;; FIXME: some tests do not return and time out. Some tests fail because
1752 ;; some processes survive kill().
1753 '(#:tests? #f))
1754 (home-page "https://github.com/giampaolo/psutil")
1755 (synopsis "Library for retrieving information on running processes")
1756 (description
1757 "@code{psutil} (Python system and process utilities) is a library for
1758retrieving information on running processes and system utilization (CPU,
1759memory, disks, network) in Python. It is useful mainly for system monitoring,
1760profiling and limiting process resources and management of running processes.
1761It implements many functionalities offered by command line tools such as: ps,
1762top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
1763iotop, uptime, pidof, tty, taskset, pmap.")
1764 (license license:bsd-3)))
1765
1766(define-public python-scapy
1767 (package
1768 (name "python-scapy")
1769 (version "2.5.0")
1770 (source (origin
1771 (method url-fetch)
1772 (uri (pypi-uri "scapy" version))
1773 (sha256
1774 (base32
1775 "1hpbbmpcn4dwj3z7i7sz4cnbpkaf57p7mvl3p84x9n2gflmhq9jv"))))
1776 (arguments
1777 '(#:tests? #f)) ; There is a test directory, but apparently no
1778 ; automatic testing framework.
1779 ;; The package has more optional dependencies such as ipython and
1780 ;; matplotlib. If functionality is missing, these should be added.
1781 ;; See
1782 ;; https://scapy.readthedocs.io/en/latest/installation.html#optional-dependencies
1783 (build-system python-build-system)
1784 (home-page "https://scapy.net")
1785 (synopsis "Python network packet crafting library")
1786 (description
1787 "Scapy is a Python library and executable for interactively
1788manipulating network packets. It can forge or decode packets of a number
1789of protocols, send them on the wire, capture them, store or read them
1790using pcap files, match requests and replies, and so on.
1791It can handle tasks such as scanning, tracerouting, probing, unit tests,
1792attacks or network discovery.")
1793 (license license:gpl2)))
1794
1795(define-public python-rasterio
1796 (package
1797 (name "python-rasterio")
1798 (version "1.3.7")
1799 (source (origin
1800 (method url-fetch)
1801 (uri (pypi-uri "rasterio" version))
1802 (sha256
1803 (base32
1804 "012341c1rlcdr9rkg97lbhxrwzn4sr2xah4zjfnqy2r1227wpzdb"))))
1805 (properties
1806 '((updater-ignored-native-inputs . ("gdal" "python-cython"))))
1807 (build-system pyproject-build-system)
1808 (arguments
1809 (list
1810 #:tests? #false ;test data not present
1811 #:phases
1812 '(modify-phases %standard-phases
1813 (add-before 'check 'build-extensions
1814 (lambda _
1815 ;; Cython extensions have to be built before running the tests.
1816 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
1817 (propagated-inputs (list python-affine
1818 python-attrs
1819 python-certifi
1820 python-click
1821 python-click-plugins
1822 python-cligj
1823 python-numpy
1824 python-setuptools
1825 python-snuggs))
1826 (native-inputs (list gdal
1827 python-boto3
1828 python-cython
1829 python-hypothesis
1830 python-packaging
1831 python-pytest
1832 python-pytest-cov
1833 python-shapely))
1834 (home-page "https://github.com/rasterio/rasterio")
1835 (synopsis "Fast and direct raster I/O for use with Numpy and SciPy")
1836 (description "This package implements fast and direct raster I/O for use
1837with Numpy and SciPy.")
1838 (license license:bsd-3)))
1839
1840(define-public python-shapely
1841 (package
1842 (name "python-shapely")
1843 (version "2.0.1")
1844 (source
1845 (origin
1846 (method url-fetch)
1847 (uri (pypi-uri "shapely" version))
1848 (sha256
1849 (base32 "14v88k0y7qhp8n5clip6w96pkdzrfqa2hsjkhpy9gkifwyiv39k6"))))
1850 (build-system pyproject-build-system)
1851 (arguments
1852 (list
1853 #:phases
1854 '(modify-phases %standard-phases
1855 (add-before 'check 'build-extensions
1856 (lambda _
1857 ;; Cython extensions have to be built before running the tests.
1858 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
1859 (native-inputs
1860 (list python-cython python-matplotlib python-pytest
1861 python-pytest-cov))
1862 (inputs
1863 (list geos))
1864 (propagated-inputs
1865 (list python-numpy))
1866 (home-page "https://github.com/Toblerity/Shapely")
1867 (synopsis "Library for the manipulation and analysis of geometric objects")
1868 (description "Shapely is a Python package for manipulation and analysis of
1869planar geometric objects. It is based on the @code{GEOS} library.")
1870 (license license:bsd-3)))
1871
1872(define-public python-shortuuid
1873 (package
1874 (name "python-shortuuid")
1875 (version "0.5.0")
1876 (source
1877 (origin
1878 (method url-fetch)
1879 (uri (pypi-uri "shortuuid" version))
1880 (sha256
1881 (base32
1882 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
1883 (build-system python-build-system)
1884 (native-inputs
1885 (list python-pep8))
1886 (home-page "https://github.com/skorokithakis/shortuuid")
1887 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
1888 (description
1889 "@code{shortuuid} is a Python library for generating concise, unambiguous
1890and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
1891module and then similar looking characters are removed.")
1892 (license license:bsd-3)))
1893
1894(define-public python-logwrap
1895 (package
1896 (name "python-logwrap")
1897 (version "8.2.0.post0")
1898 (source
1899 (origin
1900 (method url-fetch)
1901 (uri (pypi-uri "logwrap" version))
1902 (sha256
1903 (base32
1904 "1dv7gny3rfci5cal2ipr6d0pcz3yhka7af96dfsd3ir1mxy8p1j9"))))
1905 (build-system python-build-system)
1906 (arguments
1907 `(#:tests? #f ; Tests not included in pypi release.
1908 #:phases
1909 (modify-phases %standard-phases
1910 (replace 'check
1911 (lambda* (#:key tests? #:allow-other-keys)
1912 (when tests?
1913 (invoke "pytest"))
1914 #t)))))
1915 (native-inputs
1916 (list python-cython python-pytest python-setuptools-scm python-toml
1917 python-wheel))
1918 (home-page "https://github.com/python-useful-helpers/logwrap")
1919 (synopsis "Decorator for logging function arguments")
1920 (description "This package provides a decorator to log function arguments
1921and function call return values in a human-readable way.")
1922 (license license:asl2.0)))
1923
1924(define-public python-clyent
1925 (package
1926 (name "python-clyent")
1927 (version "1.2.1")
1928 (source
1929 (origin
1930 (method url-fetch)
1931 (uri (pypi-uri "clyent" version))
1932 (sha256
1933 (base32
1934 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
1935 (build-system python-build-system)
1936 (native-inputs
1937 (list python-mock))
1938 (home-page "https://github.com/Anaconda-Platform/clyent")
1939 (synopsis "Command line client library")
1940 (description "Clyent is a Python command line utility library. It is used
1941by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
1942 (license license:bsd-3)))
1943
1944(define-public python-babel
1945 (package
1946 (name "python-babel")
1947 (version "2.10.3")
1948 (source
1949 (origin
1950 (method url-fetch)
1951 (uri (pypi-uri "Babel" version))
1952 (sha256
1953 (base32
1954 "0l9cvfmsz0hlvcinxaf6xf2f02ldgw3xq9i1fc7lk5zf24vma53n"))))
1955 (build-system python-build-system)
1956 (native-inputs
1957 (list python-freezegun python-pytest tzdata-for-tests))
1958 (propagated-inputs
1959 (list python-pytz))
1960 (arguments
1961 `(#:phases (modify-phases %standard-phases
1962 (replace 'check
1963 (lambda _
1964 (invoke "pytest" "-vv"))))))
1965 (home-page "https://babel.pocoo.org/")
1966 (synopsis
1967 "Tools for internationalizing Python applications")
1968 (description
1969 "Babel is composed of two major parts:
1970- tools to build and work with gettext message catalogs
1971- a Python interface to the CLDR (Common Locale Data Repository), providing
1972access to various locale display names, localized number and date formatting,
1973etc.")
1974 (license license:bsd-3)))
1975
1976(define-public python-bidict
1977 (package
1978 (name "python-bidict")
1979 (version "0.21.2")
1980 (source
1981 (origin
1982 (method url-fetch)
1983 (uri (pypi-uri "bidict" version))
1984 (sha256
1985 (base32
1986 "02dy0b1k7qlhn7ajyzkrvxhyhjj0hzcq6ws3zjml9hkdz5znz92g"))))
1987 (build-system python-build-system)
1988 (native-inputs
1989 (list python-coverage
1990 python-hypothesis
1991 python-py
1992 python-pytest
1993 python-pytest-benchmark
1994 python-pytest-cov
1995 python-setuptools-scm
1996 python-sortedcollections
1997 python-sortedcontainers
1998 python-sphinx
1999 python-sphinx-autodoc-typehints
2000 python-tox))
2001 (arguments
2002 `(#:phases (modify-phases %standard-phases
2003 (add-after 'unpack 'relax-reqs
2004 (lambda _
2005 (substitute* "setup.py"
2006 (("sortedcollections < 2") "sortedcollections"))
2007 #t))
2008 (replace 'check
2009 (lambda _ (invoke "./run_tests.py"))))))
2010 (home-page "https://bidict.readthedocs.io")
2011 (synopsis "Bidirectional mapping library")
2012 (description "The @code{bidict} library provides several data structures
2013for working with bidirectional mappings in Python.")
2014 (license license:mpl2.0)))
2015
2016(define-public python-bip39
2017 (package
2018 (name "python-bip39")
2019 (version "0.0.2")
2020 (source
2021 (origin
2022 (method url-fetch)
2023 (uri (pypi-uri "bip39" version))
2024 (sha256
2025 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
2026 (build-system python-build-system)
2027 (native-inputs (list python-pytest))
2028 (home-page "https://github.com/de-centralized-systems/python-bip39/")
2029 (synopsis "Self-contained and simple BIP39 implementation in Python")
2030 (description
2031 "This package provides a self-contained and simple BIP39
2032implementation written in Python. It includes a @code{bip39.py} executable.
2033
2034BIP39 is a standardized mapping between binary data (the @emph{entropy}),
2035and a list of words that are easier to remember for humans (the
2036@emph{mnemonic}).")
2037 (license license:expat)))
2038
2039(define-public python-bitarray
2040 (package
2041 (name "python-bitarray")
2042 (version "2.6.1")
2043 (source (origin
2044 (method url-fetch)
2045 (uri (pypi-uri "bitarray" version))
2046 (sha256
2047 (base32
2048 "0c4jli872nzix81n1xirnrghlq2fdsxb570d9rnfvxi1694sah44"))))
2049 (build-system python-build-system)
2050 (arguments
2051 (list #:phases
2052 #~(modify-phases %standard-phases
2053 (replace 'check
2054 (lambda* (#:key tests? #:allow-other-keys)
2055 (when tests?
2056 ;; Step out of the source directory to avoid interference.
2057 (with-directory-excursion "/tmp"
2058 (invoke "python" "-c"
2059 "import bitarray; bitarray.test()"))))))))
2060 (home-page "https://github.com/ilanschnell/bitarray")
2061 (synopsis "Efficient arrays of booleans")
2062 (description "This package provides an object type which efficiently
2063represents an array of booleans. Bitarrays are sequence types and behave very
2064much like usual lists. Eight bits are represented by one byte in a contiguous
2065block of memory. The user can select between two representations:
2066little-endian and big-endian. All of the functionality is implemented in C.
2067Methods for accessing the machine representation are provided. This can be
2068useful when bit level access to binary files is required, such as portable
2069bitmap image files. Also, when dealing with compressed data which uses
2070variable bit length encoding, you may find this module useful.")
2071 (license license:psfl)))
2072
2073(define-public python-boolean.py
2074 (package
2075 (name "python-boolean.py")
2076 (version "4.0")
2077 (source
2078 (origin
2079 ;; There's no source tarball on PyPI.
2080 (method git-fetch)
2081 (uri (git-reference
2082 (url "https://github.com/bastikr/boolean.py")
2083 (commit (string-append "v" version))))
2084 (file-name (git-file-name name version))
2085 (sha256
2086 (base32 "1s4mrgqf1phwvda81dpnlkdadcbjgpl8mjvmc1yjlrp1c368v9lb"))))
2087 (build-system python-build-system)
2088 (home-page "https://github.com/bastikr/boolean.py")
2089 (synopsis "Boolean algebra in one Python module")
2090 (description
2091 "This is a small Python library that implements boolean algebra.
2092It defines two base elements, @code{TRUE} and @code{FALSE}, and a
2093@code{Symbol} class that can take on one of these two values. Calculations
2094are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
2095compositions like @code{XOR} and @code{NAND} are emulated on top of them.
2096Expressions are constructed from parsed strings or directly in Python.")
2097 (license license:bsd-2)))
2098
2099(define-public python-hdf4
2100 (package
2101 (name "python-hdf4")
2102 (version "0.9")
2103 (source
2104 (origin
2105 (method url-fetch)
2106 (uri (pypi-uri name version))
2107 (sha256
2108 (base32
2109 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
2110 (build-system python-build-system)
2111 (native-inputs `(("nose" ,python-nose)))
2112 (propagated-inputs `(("numpy" ,python-numpy)))
2113 (inputs
2114 `(("hdf4" ,hdf4)
2115 ("libjpeg" ,libjpeg-turbo)
2116 ("zlib" ,zlib)))
2117 (arguments
2118 `(#:phases
2119 (modify-phases %standard-phases
2120 (replace 'check
2121 (lambda _
2122 (invoke "./runexamples.sh")
2123 (invoke "nosetests" "-v"))))))
2124 (home-page "https://github.com/fhs/python-hdf4")
2125 (synopsis "Python interface to the NCSA HDF4 library")
2126 (description
2127 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
2128which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
2129NetCDF files can also be read and modified. Python-HDF4 is a fork of
2130@url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
2131 (license license:expat)))
2132
2133(define-public python-h5netcdf
2134 (package
2135 (name "python-h5netcdf")
2136 (version "1.1.0")
2137 (source
2138 (origin
2139 (method url-fetch)
2140 (uri (pypi-uri "h5netcdf" version))
2141 (sha256
2142 (base32 "0mmzfr6k55zqxxpb64gvdqisak8s1zb2r04yzkmp0wzd7dbknb4k"))))
2143 (build-system pyproject-build-system)
2144 (native-inputs
2145 (list python-netcdf4
2146 python-pytest
2147 python-setuptools-scm))
2148 (propagated-inputs
2149 (list python-h5py python-packaging))
2150 (home-page "https://h5netcdf.org")
2151 (synopsis "Python interface for the netCDF4 file-format based on h5py")
2152 (description "This package provides a Python interface for the netCDF4
2153file-format that reads and writes local or remote HDF5 files directly via
2154@url{h5py, https://www.h5py.org/} or @url{h5pyd,
2155https://github.com/HDFGroup/h5pyd}, without relying on the Unidata netCDF
2156library.")
2157 (license license:bsd-3)))
2158
2159(define-public python-h5py
2160 (package
2161 (name "python-h5py")
2162 (version "3.8.0")
2163 (source
2164 (origin
2165 (method url-fetch)
2166 (uri (pypi-uri "h5py" version))
2167 (sha256
2168 (base32
2169 "0pyr6z4h2xqbp49yx2i1401gl6yqh03h771zslwcy0201hpxiskg"))))
2170 (build-system python-build-system)
2171 (arguments
2172 `(#:tests? #f ; no test target
2173 #:phases
2174 (modify-phases %standard-phases
2175 (add-after 'unpack 'fix-hdf5-paths
2176 (lambda* (#:key inputs #:allow-other-keys)
2177 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5")))))))
2178 (propagated-inputs
2179 (list python-six python-numpy))
2180 (inputs
2181 (list hdf5-1.10))
2182 (native-inputs
2183 (list python-cython python-pkgconfig pkg-config))
2184 (home-page "https://www.h5py.org/")
2185 (synopsis "Read and write HDF5 files from Python")
2186 (description
2187 "The h5py package provides both a high- and low-level interface to the
2188HDF5 library from Python. The low-level interface is intended to be a
2189complete wrapping of the HDF5 API, while the high-level component supports
2190access to HDF5 files, datasets and groups using established Python and NumPy
2191concepts.")
2192 (license license:bsd-3)))
2193
2194(define-public python-hjson
2195 ;; Using commit from master branch as the PyPI version does not contain
2196 ;; the hjson/tests/ directory.
2197 (let ((revision "0")
2198 (commit "1687b811fcbbc54b5ac71cfbaa99f805e406fbcb"))
2199 (package
2200 (name "python-hjson")
2201 (version (git-version "3.1.0" revision commit))
2202 (source (origin
2203 (method git-fetch)
2204 (uri (git-reference
2205 (url "https://github.com/hjson/hjson-py")
2206 (commit commit)))
2207 (file-name (git-file-name name version))
2208 (sha256
2209 (base32
2210 "1qfqnhvfx5mm7bdajjnnagmvns1zxyksjzh3k5la2ag6a8bp5gki"))))
2211 (build-system pyproject-build-system)
2212 (home-page "https://github.com/hjson/hjson-py")
2213 (synopsis "Python package to parse HJSON documents")
2214 (description "This package provides a Python library and a command-line
2215interface utility to parse @url{https://hjson.github.io/, HJSON}) documents.")
2216 (license license:expat))))
2217
2218(define-public python-hnswlib
2219 (package
2220 (name "python-hnswlib")
2221 (version "0.5.2")
2222 (source
2223 (origin
2224 (method url-fetch)
2225 (uri (pypi-uri "hnswlib" version))
2226 (sha256
2227 (base32 "0wf1cwmxmdzfqmfhrkqdxb5spf21ylgl2bidswhzjrqhwf35c9qf"))))
2228 (build-system python-build-system)
2229 (arguments
2230 `(#:phases
2231 (modify-phases %standard-phases
2232 (add-after 'unpack 'disable-native-optimization
2233 (lambda _
2234 (substitute* "setup.py"
2235 ((", '-march=native'") "")))))))
2236 (propagated-inputs
2237 (list python-numpy))
2238 (native-inputs
2239 (list pybind11))
2240 (home-page "https://github.com/nmslib/hnswlib")
2241 (synopsis "Fast approximate nearest neighbor search")
2242 (description "Hnswlib is a header-only C++ implementation of fast
2243approximate nearest neighbor search with Python bindings.")
2244 (license license:asl2.0)))
2245
2246(define-public python-pylatexenc
2247 (package
2248 (name "python-pylatexenc")
2249 (version "2.10")
2250 (source (origin
2251 (method url-fetch)
2252 (uri (pypi-uri "pylatexenc" version))
2253 (file-name (string-append name "-" version ".tar.gz"))
2254 (sha256
2255 (base32
2256 "1ls09z47b5md71gkxcj7fd87ynpvv2walgp2w6z31p26xf2gvn1x"))))
2257 (build-system python-build-system)
2258 (home-page "https://github.com/phfaist/pylatexenc")
2259 (synopsis "LaTeX parser for Unicode/LaTeX conversion")
2260 (description
2261 "@code{python-pylatexenc} is a LaTeX parser providing LaTeX-to-Unicode and
2262Unicode-to-LaTeX conversion.")
2263 (license license:expat)))
2264
2265(define-public python-pyls-black
2266 (package
2267 (name "python-pyls-black")
2268 (version "0.4.7")
2269 (source
2270 (origin
2271 ;; There are no tests in the PyPI tarball.
2272 (method git-fetch)
2273 (uri (git-reference
2274 (url "https://github.com/rupert/pyls-black/")
2275 (commit (string-append "v" version))))
2276 (file-name (git-file-name name version))
2277 (sha256
2278 (base32 "0bkhfnlik89j3yamr20br4wm8975f20v33wabi2nyxvj10whr5dj"))
2279 ;; Patch to work with python-lsp-server. Taken from
2280 ;; <https://github.com/rupert/pyls-black/pull/37>.
2281 (modules '((guix build utils)))
2282 (snippet
2283 '(begin
2284 (substitute* "setup.cfg"
2285 (("python-language-server")
2286 "python-lsp-server"))
2287 (substitute* '("pyls_black/plugin.py" "tests/test_plugin.py")
2288 (("pyls_format_document")
2289 "pylsp_format_document")
2290 (("pyls_format_range")
2291 "pylsp_format_range")
2292 (("from pyls([ \\.])" _ char)
2293 (string-append "from pylsp" char)))))))
2294 (build-system python-build-system)
2295 (arguments
2296 `(#:test-target "pytest"))
2297 (propagated-inputs
2298 (list python-black python-lsp-server python-tomli))
2299 (native-inputs
2300 (list python-flake8 python-isort python-mypy python-pytest
2301 python-pytest-runner))
2302 (home-page "https://github.com/rupert/pyls-black")
2303 (synopsis "Black plugin for the Python Language Server")
2304 (description "Black plugin for the Python Language Server.")
2305 (license license:expat)))
2306
2307(define-public python-sh
2308 (package
2309 (name "python-sh")
2310 (version "1.14.2")
2311 (source
2312 (origin
2313 (method url-fetch)
2314 (uri (pypi-uri "sh" version))
2315 (sha256
2316 (base32
2317 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
2318 (build-system python-build-system)
2319 (arguments
2320 '(#:phases
2321 (modify-phases %standard-phases
2322 (replace 'check
2323 (lambda _
2324 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
2325 (setenv "HOME" "/tmp")
2326 (invoke "python" "sh.py" "test"))))))
2327 (native-inputs
2328 (list python-coverage))
2329 (home-page "https://github.com/amoffat/sh")
2330 (synopsis "Python subprocess replacement")
2331 (description "This package provides a replacement for Python's
2332@code{subprocess} feature.")
2333 (license license:expat)))
2334
2335(define-public python-cftime
2336 (package
2337 (name "python-cftime")
2338 (version "1.6.2")
2339 (source
2340 (origin
2341 (method url-fetch)
2342 (uri (pypi-uri "cftime" version))
2343 (sha256
2344 (base32 "1lp6jrjjgl18csn4bcnphn0l16ag4aynvn7x0kins155p07w0546"))))
2345 (build-system pyproject-build-system)
2346 (propagated-inputs
2347 (list python-numpy))
2348 (native-inputs
2349 (list python-check-manifest
2350 python-coverage
2351 python-coveralls
2352 python-cython
2353 python-pytest-cov
2354 python-sphinx
2355 python-twine
2356 python-wheel))
2357 (home-page "https://unidata.github.io/cftime/")
2358 (synopsis "Library for time handling")
2359 (description
2360 "This package provides time-handling functionality that used to be part
2361of the netcdf4 package before.")
2362 (license license:expat)))
2363
2364(define-public python-netcdf4
2365 (package
2366 (name "python-netcdf4")
2367 (version "1.6.0")
2368 (source
2369 (origin
2370 (method url-fetch)
2371 (uri (pypi-uri "netCDF4" version))
2372 (sha256
2373 (base32
2374 "0qxs8r1qmsmg760wm5q0wqlcm7hdd3k7cghryw6wvqd3v5rs7vwm"))))
2375 (build-system python-build-system)
2376 (arguments
2377 '(#:phases
2378 (modify-phases %standard-phases
2379 (add-after 'unpack 'configure-locations
2380 (lambda* (#:key inputs #:allow-other-keys)
2381 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
2382 #t)))))
2383 (native-inputs
2384 (list python-cython))
2385 (propagated-inputs
2386 (list python-numpy python-cftime))
2387 (inputs
2388 (list netcdf hdf4 hdf5))
2389 (home-page "https://github.com/Unidata/netcdf4-python")
2390 (synopsis "Python/numpy interface to the netCDF library")
2391 (description "Netcdf4-python is a Python interface to the netCDF C
2392library. netCDF version 4 has many features not found in earlier
2393versions of the library and is implemented on top of HDF5. This module
2394can read and write files in both the new netCDF 4 and the old netCDF 3
2395format, and can create files that are readable by HDF5 clients. The
2396API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
2397to users of that module.")
2398 ;; The software is mainly ISC, but includes some files covered
2399 ;; by the Expat license.
2400 (license (list license:isc license:expat))))
2401
2402(define-public python-ncclient
2403 (package
2404 (name "python-ncclient")
2405 (version "0.6.12")
2406 (source
2407 (origin
2408 (method git-fetch) ;no tests in PyPI release
2409 (uri (git-reference
2410 (url "https://github.com/ncclient/ncclient")
2411 (commit (string-append "v" version))))
2412 (file-name (git-file-name name version))
2413 (sha256
2414 (base32
2415 "0cb568z5syg6hh0dv813bw7s1mjy7ga5xzxbm9naf4zz2qfdg4js"))))
2416 (build-system python-build-system)
2417 (arguments
2418 `(#:phases (modify-phases %standard-phases
2419 (replace 'check
2420 (lambda* (#:key tests? #:allow-other-keys)
2421 (when tests?
2422 (invoke "pytest")))))))
2423 (native-inputs
2424 (list python-pytest))
2425 (propagated-inputs
2426 (list python-lxml python-paramiko))
2427 (home-page "https://github.com/ncclient/ncclient")
2428 (synopsis "Python library for NETCONF clients")
2429 (description "@code{ncclient} is a Python library that facilitates
2430client-side scripting and application development around the NETCONF
2431protocol.")
2432 (license license:asl2.0)))
2433
2434(define-public python-ncls
2435 (package
2436 (name "python-ncls")
2437 (version "0.0.65")
2438 (source (origin
2439 (method url-fetch)
2440 (uri (pypi-uri "ncls" version))
2441 (sha256
2442 (base32
2443 "1wx06xqknd2r98w8z93f47g5dpxzn92kamhj8vkq0nj569hf7cg1"))))
2444 (build-system python-build-system)
2445 (propagated-inputs (list python-numpy))
2446 (home-page "https://github.com/endrebak/ncls")
2447 (synopsis "Nested containment list data structure")
2448 (description
2449 "This package provides a wrapper for the nested containment list data
2450structure. It is a static interval-tree that is fast for both construction
2451and lookups.")
2452 (license license:bsd-3)))
2453
2454(define-public python-license-expression
2455 (package
2456 (name "python-license-expression")
2457 (version "30.1.0")
2458 (source
2459 (origin
2460 (method url-fetch)
2461 (uri (pypi-uri "license-expression" version))
2462 (sha256
2463 (base32 "0lvshl2fhwa568d3y3vmx45hdp8gk5w9yl3b2q5d66r5vqn1sfwl"))))
2464 (build-system pyproject-build-system)
2465 (native-inputs
2466 (list python-setuptools-scm python-pytest))
2467 (propagated-inputs
2468 (list python-boolean.py))
2469 (home-page "https://github.com/nexB/license-expression")
2470 (synopsis "Apply boolean logic to license expressions")
2471 (description
2472 "This Python module defines a tiny language to evaluate and compare
2473license expressions using boolean logic. Logical combinations of licenses can
2474be tested for equality, containment, and equivalence. They can be normalised
2475and simplified. It supports SPDX license expressions as well as other naming
2476conventions and aliases in the same expression.")
2477 (license license:gpl2+)))
2478
2479(define-public python-wand
2480 (package
2481 (name "python-wand")
2482 (version "0.6.11")
2483 (source
2484 (origin
2485 (method url-fetch)
2486 (uri (pypi-uri "Wand" version))
2487 (sha256
2488 (base32 "15d9kxyc7qvknx0kv27m2jamnmisckyf89i7wlqykwgqm46p0qdn"))))
2489 (build-system python-build-system)
2490 (arguments
2491 `(#:phases
2492 (modify-phases %standard-phases
2493 (add-after 'unpack 'find-magickwand
2494 (lambda* (#:key inputs #:allow-other-keys)
2495 (setenv "MAGICK_HOME" (assoc-ref inputs "imagemagick"))
2496 (setenv "WAND_MAGICK_LIBRARY_SUFFIX" ".Q16")))
2497 (replace 'check
2498 (lambda* (#:key tests? #:allow-other-keys)
2499 (when tests?
2500 (invoke "pytest" "-vv")))))))
2501 (native-inputs
2502 (list python-pytest))
2503 (inputs
2504 (list imagemagick))
2505 (home-page "https://docs.wand-py.org/")
2506 (synopsis "MagickWand API binding for Python")
2507 (description
2508 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
2509 (license license:expat)))
2510
2511(define-public python-lockfile
2512 (package
2513 (name "python-lockfile")
2514 (version "0.12.2")
2515 (source
2516 (origin
2517 (method url-fetch)
2518 (uri (pypi-uri "lockfile" version))
2519 (sha256
2520 (base32
2521 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
2522 (build-system python-build-system)
2523 (arguments '(#:test-target "check"))
2524 (native-inputs
2525 (list python-pbr))
2526 (home-page "https://launchpad.net/pylockfile")
2527 (synopsis "Platform-independent file locking module")
2528 (description
2529 "The lockfile package exports a LockFile class which provides a simple
2530API for locking files.")
2531 (license license:expat)))
2532
2533(define-public python-fb-re2
2534 (package
2535 (name "python-fb-re2")
2536 (version "1.0.7")
2537 (source
2538 (origin
2539 (method git-fetch)
2540 (uri (git-reference
2541 (url "https://github.com/facebook/pyre2")
2542 (commit (string-append "v" version))))
2543 (file-name (git-file-name name version))
2544 (sha256
2545 (base32
2546 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
2547 (build-system python-build-system)
2548 (inputs
2549 (list re2))
2550 (home-page "https://github.com/facebook/pyre2")
2551 (synopsis "Python wrapper for RE2")
2552 (description "This package provides a Python extension that wraps Google's
2553RE2 regular expression library. It implements many of the features of
2554Python's built-in @code{re} module with compatible interfaces.")
2555 (license license:bsd-3)))
2556
2557(define-public python-filelock
2558 (package
2559 (name "python-filelock")
2560 (version "3.0.12")
2561 (source
2562 (origin
2563 (method url-fetch)
2564 (uri (pypi-uri "filelock" version))
2565 (sha256
2566 (base32
2567 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
2568 (build-system python-build-system)
2569 (home-page
2570 "https://github.com/benediktschmitt/py-filelock")
2571 (synopsis "Platform independent file lock")
2572 (description "@code{filelock} contains a single module implementing
2573a platform independent file lock in Python, which provides a simple way of
2574inter-process communication.")
2575 (license license:unlicense)))
2576
2577(define-public python-filelock-3.5
2578 (package
2579 (name "python-filelock")
2580 (version "3.5.0")
2581 (source
2582 (origin
2583 (method url-fetch)
2584 (uri (pypi-uri "filelock" version))
2585 (sha256
2586 (base32
2587 "058av1r760ws7z6qffsjpqa39fmdxw0s1wnyr7p50y3zclg6cyqk"))))
2588 (build-system pyproject-build-system)
2589 (native-inputs (list python-pytest python-setuptools-scm))
2590 (home-page "https://github.com/tox-dev/py-filelock")
2591 (synopsis "Platform independent file lock")
2592 (description "@code{filelock} contains a single module implementing
2593a platform independent file lock in Python, which provides a simple way of
2594inter-process communication.")
2595 (license license:unlicense)))
2596
2597(define-public python-semantic-version
2598 (package
2599 (name "python-semantic-version")
2600 (version "2.8.5")
2601 (source
2602 (origin
2603 (method url-fetch)
2604 (uri (pypi-uri "semantic_version" version))
2605 (sha256
2606 (base32
2607 "0m4avx8zdkzc7qglv5zlr54g8yna5vl098drg5396ql7aph2vjyj"))))
2608 (build-system python-build-system)
2609 (home-page "https://github.com/rbarrois/python-semanticversion")
2610 (synopsis "Semantic versioning module for Python")
2611 (description
2612 "The @code{semantic_version} class is a small library for handling
2613@uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
2614
2615It can compare versions, generate a new version that represents a bump in one of
2616the version levels, and check whether any given string is a proper semantic
2617version identifier.")
2618 (license license:bsd-3)))
2619
2620(define-public python-serpent
2621 (package
2622 (name "python-serpent")
2623 (version "1.28")
2624 (source
2625 (origin
2626 (method url-fetch)
2627 (uri (pypi-uri "serpent" version))
2628 (sha256
2629 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
2630 (build-system python-build-system)
2631 (native-inputs
2632 (list python-attrs python-pytz))
2633 (home-page "https://github.com/irmen/Serpent")
2634 (synopsis "Serializer for literal Python expressions")
2635 (description
2636 "Serpent provides @code{ast.literal_eval()}-compatible object tree
2637serialization. It serializes an object tree into bytes (an utf-8 encoded
2638string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
2639to rebuild the original object tree.
2640
2641Because only safe literals are encoded, it is safe to send serpent data to
2642other machines, such as over the network.")
2643 (license license:expat)))
2644
2645(define-public python-setuptools-declarative-requirements
2646 (package
2647 (name "python-setuptools-declarative-requirements")
2648 (version "1.2.0")
2649 (source
2650 (origin
2651 (method url-fetch)
2652 (uri (pypi-uri
2653 "setuptools-declarative-requirements"
2654 version))
2655 (sha256
2656 (base32
2657 "1l8zmcnp9h8sp8hsw7b81djaa1a9yig0y7i4phh5pihqz1gdn7yi"))))
2658 (build-system python-build-system)
2659 (native-inputs
2660 (list python-pytest python-setuptools-scm))
2661 (propagated-inputs
2662 (list python-toml python-wheel))
2663 (home-page
2664 "https://github.com/s0undt3ch/setuptools-declarative-requirements")
2665 (synopsis "File support for setuptools declarative setup.cfg")
2666 (description
2667 "This package provides file support for setuptools declarative
2668@code{setup.cfg}.")
2669 (license license:asl2.0)))
2670
2671;; The setuptools provided by Python 3.9 is too new for Tensorflow.
2672(define-public python-setuptools-for-tensorflow
2673 (hidden-package
2674 (package
2675 (inherit python-setuptools)
2676 (version "39.1.0")
2677 (source (origin
2678 (inherit (package-source python-setuptools))
2679 (uri (pypi-uri "setuptools" version ".zip"))
2680 (sha256
2681 (base32
2682 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65"))))
2683 (arguments
2684 `(#:tests? #f ; tests require vendored resources
2685 #:phases
2686 (modify-phases %standard-phases
2687 (add-after 'unpack 'compatibility-fixes
2688 (lambda _
2689 ;; Python 3.9 no longer has HTMLParser
2690 (substitute* "setuptools/py33compat.py"
2691 (("html_parser.HTMLParser\\(\\).unescape")
2692 "html.unescape"))
2693 ;; collections classes have moved in Python 3.10
2694 (substitute* "pkg_resources/_vendor/pyparsing.py"
2695 (("collections.MutableMapping")
2696 "collections.abc.MutableMapping")
2697 (("collections.Iterable")
2698 "collections.abc.Iterable"))
2699 ;; This needs distutils.msvc9compiler
2700 (delete-file "setuptools/tests/test_msvc.py")
2701 ;; See https://github.com/pypa/setuptools/issues/2558
2702 (delete-file "setuptools/command/bdist_wininst.py")
2703 (substitute* "setuptools/command/install_scripts.py"
2704 (("bw_cmd =.*") "\n")
2705 (("is_wininst =.*")
2706 "is_wininst = False\n")))))))
2707 (native-inputs
2708 (list python-pytest python-mock python-six)))))
2709
2710(define-public python-uniseg
2711 (package
2712 (name "python-uniseg")
2713 (version "0.7.1")
2714 (source
2715 (origin
2716 (method url-fetch)
2717 (uri (pypi-uri "uniseg" version ".zip"))
2718 (sha256
2719 (base32
2720 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
2721 (build-system python-build-system)
2722 (arguments
2723 '(#:tests? #f)) ; The test suite requires network access.
2724 (native-inputs
2725 (list unzip))
2726 (home-page
2727 "https://bitbucket.org/emptypage/uniseg-python")
2728 (synopsis
2729 "Python library to determine Unicode text segmentations")
2730 (description
2731 "Uniseg is a Python package used to determine Unicode text segmentations.
2732Supported segmentations include:
2733@enumerate
2734@item @dfn{Code point} (any value in the Unicode codespace)
2735@item @dfn{Grapheme cluster} (user-perceived character made of a single or
2736multiple Unicode code points, e.g. \"G\" + acute-accent)
2737@item Word break
2738@item Sentence break
2739@item Line break
2740@end enumerate")
2741 (license license:expat)))
2742
2743(define-public python-humanfriendly
2744 (package
2745 (name "python-humanfriendly")
2746 (version "8.2")
2747 (source
2748 (origin
2749 (method url-fetch)
2750 (uri (pypi-uri "humanfriendly" version))
2751 (sha256
2752 (base32
2753 "04ixg8b7p6xc8x8lffhi7wfl77xhszakhd0s6j0cf6a84j8yqlmz"))))
2754 (build-system python-build-system)
2755 (arguments
2756 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
2757 #:tests? #f))
2758 (home-page "https://humanfriendly.readthedocs.io")
2759 (synopsis "Human-friendly input and output in Python")
2760 (description
2761 "The functions and classes in @code{humanfriendly} can be used to make
2762text interfaces more user-friendly. It includes tools to parse and format
2763numbers, file sizes, and timespans, timers for long-running operations, menus
2764to allow the user to choose from a list of options, and terminal interaction
2765helpers.")
2766 (license license:expat)))
2767
2768(define-public python-textparser
2769 (package
2770 (name "python-textparser")
2771 (version "0.23.0")
2772 (source
2773 (origin
2774 (method url-fetch)
2775 (uri (pypi-uri "textparser" version))
2776 (sha256
2777 (base32
2778 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
2779 (build-system python-build-system)
2780 (home-page "https://github.com/eerimoq/textparser")
2781 (synopsis "Fast text parser for Python")
2782 (description "This library provides a text parser written in the Python
2783language. It aims to be fast.")
2784 (license license:expat)))
2785
2786(define-public python-aenum
2787 (package
2788 (name "python-aenum")
2789 (version "3.1.12")
2790 (source
2791 (origin
2792 (method url-fetch)
2793 (uri (pypi-uri "aenum" version))
2794 (sha256
2795 (base32 "1w1ffkcxgnimi5w8802qk6w2qxz9k8hpvsg6yy2zi08ahs8iqlry"))
2796 (modules '((guix build utils)))
2797 (snippet
2798 ;; Delete the Python 2 specific files which won't compile
2799 ;; in Python 3.
2800 '(for-each delete-file (find-files "." "_py2.py$")))))
2801 (build-system python-build-system)
2802 (arguments
2803 `(#:phases (modify-phases %standard-phases
2804 (replace 'check
2805 (lambda _
2806 ;; We must run the test suite module directly, as it
2807 ;; fails to define the 'tempdir' variable in scope for
2808 ;; the tests otherwise
2809 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
2810 ;; issues/32/running-tests-with-python-setuppy-test).
2811 (invoke "python3" "aenum/test.py")
2812 ;; This one fails with "NameError: name
2813 ;; 'test_pickle_dump_load' is not defined" (see:
2814 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
2815 ;; /error-running-the-test_v3py-test-suite).
2816 ;; (invoke "python3" "aenum/test_v3.py")
2817 #t)))))
2818 (home-page "https://bitbucket.org/stoneleaf/aenum")
2819 (synopsis "Advanced enumerations, namedtuples and constants for Python")
2820 (description "The aenum library includes an @code{Enum} base class, a
2821metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
2822class.")
2823 (license license:bsd-3)))
2824
2825(define-public python-can
2826 (package
2827 (name "python-can")
2828 (version "4.2.0")
2829 (source
2830 (origin
2831 (method url-fetch)
2832 (uri (pypi-uri "python-can" version))
2833 (sha256
2834 (base32
2835 "1w5sdzxivpd3pw4pypwnjlksvfimdb93qnlddbrh5f13flhsgg8g"))))
2836 (build-system pyproject-build-system)
2837 (arguments
2838 (list
2839 #:test-flags
2840 #~(list
2841 ;; TODO: Check if it could be packed:
2842 ;; https://github.com/projectgus/python-canalystii
2843 ;;
2844 ;; Disable tests which require specific CAN drivers we have no
2845 ;; package for in Guix.
2846 "--ignore" "test/test_interface_canalystii.py"
2847 ;; These tests fail with "OSError: [Errno 19] No such device".
2848 "-k" "not BasicTestUdpMulticastBusIPv")))
2849 (propagated-inputs
2850 (list python-msgpack python-typing-extensions python-wrapt))
2851 (native-inputs
2852 (list ;; python-canalystii ; Not packed yet
2853 python-codecov
2854 python-coverage
2855 python-future
2856 python-hypothesis
2857 python-mock
2858 python-parameterized
2859 python-pyserial
2860 python-pytest
2861 python-pytest-cov
2862 python-pytest-runner
2863 python-pytest-timeout))
2864 (home-page "https://github.com/hardbyte/python-can")
2865 (synopsis "Controller Area Network (CAN) interface module for Python")
2866 (description "This package defines the @code{can} module, which provides
2867controller area network (CAN) support for Python developers; providing common
2868abstractions to different hardware devices, and a suite of utilities for
2869sending and receiving messages on a CAN bus.")
2870 (license license:lgpl3+)))
2871
2872(define-public python-canopen
2873 (package
2874 (name "python-canopen")
2875 (version "2.0.0")
2876 (source
2877 (origin
2878 (method url-fetch)
2879 (uri (pypi-uri "canopen" version))
2880 (sha256
2881 (base32 "1nb543wb37kj95v6bhh272lm5gkpi41q3pnsl1fxlyizm2gamj5w"))))
2882 (build-system python-build-system)
2883 (native-inputs (list python-packaging))
2884 (propagated-inputs (list python-can))
2885 (home-page "https://github.com/christiansandberg/canopen")
2886 (synopsis "CANopen stack implementation")
2887 (description
2888 "This package provides a Python implementation of the
2889@uref{https://www.can-cia.org/canopen/,CANopen standard} for
2890@acronym{CANs, controller-area networks}. The aim of the project is to
2891support the most common parts of the CiA 301 standard in a simple
2892Pythonic interface. It is mainly targeted for testing and automation
2893tasks rather than a standard compliant master implementation.")
2894 (license license:expat)))
2895
2896(define-public python-caniusepython3
2897 (package
2898 (name "python-caniusepython3")
2899 (version "7.2.0")
2900 (source
2901 (origin
2902 (method url-fetch)
2903 (uri (pypi-uri "caniusepython3" version))
2904 (sha256
2905 (base32
2906 "0a755444ln38j8d7xb3yw0wzpd0mjrzfn6zqvsh06nw1vdaq4l28"))))
2907 (build-system python-build-system)
2908 (arguments
2909 `(#:phases (modify-phases %standard-phases
2910 (add-after 'unpack 'relax-requirements
2911 (lambda _
2912 (substitute* "setup.py"
2913 ;; These are for compatibility with Python 2.
2914 ((".*'argparse', 'backports.functools_lru_cache',.*")
2915 ""))
2916 (substitute* "dev_requirements.txt"
2917 ((".*pylint.*") "")) ;not actually required
2918 #t))
2919 (replace 'check
2920 (lambda _
2921 (invoke "py.test" "-k" "not NetworkTests"))))))
2922 (propagated-inputs
2923 (list python-distlib python-packaging python-requests))
2924 (native-inputs
2925 (list python-mock python-pytest))
2926 (home-page "https://github.com/brettcannon/caniusepython3")
2927 (synopsis "Check for Python 3-incompatible Python libraries")
2928 (description "The @command{caniusepython3} command scans your project and
2929reports the Python 3-incompatible libraries it found. It can also be used as
2930a library.")
2931 (license license:asl2.0)))
2932
2933(define-public python-diskcache
2934 (package
2935 (name "python-diskcache")
2936 (version "4.1.0")
2937 (source
2938 (origin
2939 (method url-fetch)
2940 (uri (pypi-uri "diskcache" version))
2941 (sha256
2942 (base32
2943 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
2944 (build-system python-build-system)
2945 (arguments
2946 `(#:tests? #f)) ;test suite not included in the release
2947 (home-page "https://www.grantjenks.com/docs/diskcache/")
2948 (synopsis "Disk and file backed cache library")
2949 (description "DiskCache is a disk and file backed persistent cache.")
2950 (license license:asl2.0)))
2951
2952(define-public python-optparse-pretty
2953 (package
2954 (name "python-optparse-pretty")
2955 (version "0.1.1")
2956 (source
2957 (origin
2958 (method url-fetch)
2959 (uri (pypi-uri "optparse-pretty" version))
2960 (sha256
2961 (base32 "1920wbh2b7a8qn7zx2iiqbcdaax335l81a73x9pp8h11yzs2jdmh"))))
2962 (build-system pyproject-build-system)
2963 (arguments (list #:tests? #false)) ;There are none
2964 (home-page "https://github.com/gvalkov/optparse-pretty")
2965 (synopsis "Compact help formatter for optparse")
2966 (description
2967 "This module provides two help formatters for optparse. They provide
2968terser and more customizable option formatting in comparison to the default
2969help formatter.")
2970 (license license:bsd-3)))
2971
2972(define-public python-orjson
2973 (package
2974 (name "python-orjson")
2975 (version "3.8.8")
2976 (source (origin
2977 (method url-fetch)
2978 (uri (pypi-uri "orjson" version))
2979 (sha256
2980 (base32
2981 "1nn617pzn8smjkf7j593ybq16qfnj53bla52qjwzzrms4fjxg5n0"))))
2982 (build-system cargo-build-system)
2983 (arguments
2984 (list
2985 #:imported-modules `(,@%cargo-build-system-modules
2986 ,@%pyproject-build-system-modules)
2987 #:modules '((guix build cargo-build-system)
2988 ((guix build pyproject-build-system) #:prefix py:)
2989 (guix build utils))
2990 #:phases
2991 #~(modify-phases %standard-phases
2992 (add-after 'install 'prepare-python-module
2993 (lambda _
2994 ;; We don't use maturin.
2995 (delete-file "pyproject.toml")
2996 (call-with-output-file "pyproject.toml"
2997 (lambda (port)
2998 (format port "\
2999[build-system]
3000build-backend = 'setuptools.build_meta'
3001requires = ['setuptools']
3002")))
3003 (call-with-output-file "setup.cfg"
3004 (lambda (port)
3005 (format port "\
3006[metadata]
3007name = orjson
3008version = ~a
3009
3010[options]
3011packages = find:
3012
3013[options.packages.find]
3014exclude =
3015 src
3016 integration
3017 test
3018 Cargo.toml
3019" #$version)))))
3020 (add-after 'prepare-python-module 'build-python-module
3021 (assoc-ref py:%standard-phases 'build))
3022 (add-after 'build-python-module 'install-python-module
3023 (assoc-ref py:%standard-phases 'install))
3024 (add-after 'install-python-module 'install-python-library
3025 (lambda _
3026 (let ((site (string-append #$output "/lib/python"
3027 #$(version-major+minor
3028 (package-version python))
3029 "/site-packages")))
3030 (mkdir-p site)
3031 (copy-file "target/release/liborjson.so"
3032 (string-append site "/orjson.so"))))))
3033 #:cargo-inputs
3034 `(("rust-ahash" ,rust-ahash-0.8)
3035 ("rust-arrayvec" ,rust-arrayvec-0.7)
3036 ("rust-associative-cache" ,rust-associative-cache-1)
3037 ("rust-beef" ,rust-beef-0.5)
3038 ("rust-bytecount" ,rust-bytecount-0.6)
3039 ("rust-chrono" ,rust-chrono-0.4)
3040 ("rust-compact-str" ,rust-compact-str-0.7)
3041 ("rust-encoding-rs" ,rust-encoding-rs-0.8)
3042 ("rust-itoa" ,rust-itoa-1)
3043 ("rust-itoap" ,rust-itoap-1)
3044 ("rust-once-cell" ,rust-once-cell-1)
3045 ("rust-pyo3-ffi" ,rust-pyo3-ffi-0.18)
3046 ("rust-ryu" ,rust-ryu-1)
3047 ("rust-serde" ,rust-serde-1)
3048 ("rust-serde-json" ,rust-serde-json-1)
3049 ("rust-simdutf8" ,rust-simdutf8-0.1)
3050 ("rust-smallvec" ,rust-smallvec-1))
3051 #:install-source? #false))
3052 (native-inputs
3053 (list python-wrapper
3054 python-pypa-build
3055 python-wheel))
3056 (home-page "https://github.com/ijl/orjson")
3057 (synopsis "Python JSON library supporting dataclasses, datetimes, and numpy")
3058 (description "Orjson is a fast, correct JSON library for Python. It
3059benchmarks as the fastest Python library for JSON and is more correct than the
3060standard @code{json} library or other third-party libraries. It serializes
3061dataclass, datetime, numpy, and UUID instances natively.")
3062 ;; Either of these licenses
3063 (license (list license:asl2.0 license:expat))))
3064
3065(define-public python-argparse-addons
3066 (package
3067 (name "python-argparse-addons")
3068 (version "0.7.0")
3069 (source
3070 (origin
3071 (method url-fetch)
3072 (uri (pypi-uri "argparse_addons" version))
3073 (sha256
3074 (base32 "1yx54dmnr3xggjcjk6bbdafvzp6cynrakl56wyz3jglmfvk0znpm"))))
3075 (build-system python-build-system)
3076 (home-page "https://github.com/eerimoq/argparse_addons")
3077 (synopsis "Extensions for Python's @code{argparse} library")
3078 (description "This Python library provides additional types and actions
3079for the standard @code{argparse} library.")
3080 (license license:expat)))
3081
3082(define-public python-bitstruct
3083 (package
3084 (name "python-bitstruct")
3085 (version "8.14.0")
3086 (source
3087 (origin
3088 (method url-fetch)
3089 (uri (pypi-uri "bitstruct" version))
3090 (sha256
3091 (base32
3092 "149c73yrqbph71bbyf925r2mbh2jdymqxc6d49lnylpiflf1j313"))))
3093 (build-system python-build-system)
3094 (home-page "https://github.com/eerimoq/bitstruct")
3095 (synopsis "Python values to and C bit field structs converter")
3096 (description "This module performs conversions between Python values and C
3097bit field structs represented as Python byte strings. It is intended to have
3098a similar interface as the @code{struct} module from Python, but working on
3099bits instead of primitive data types like @code{char}, @code{int}, etc.")
3100 (license license:expat)))
3101
3102(define-public python-cantools
3103 (package
3104 (name "python-cantools")
3105 (version "37.0.7")
3106 (source
3107 (origin
3108 ;; We take the sources from the Git repository as the documentation is
3109 ;; not included with the PyPI archive.
3110 (method git-fetch)
3111 (uri (git-reference
3112 (url "https://github.com/eerimoq/cantools")
3113 (commit version)))
3114 (file-name (git-file-name name version))
3115 (sha256
3116 (base32
3117 "1qcf1fcwif7w70qmhxw2b8kqh420igbinq60p1chzf98xcb0ansx"))))
3118 (build-system python-build-system)
3119 (arguments
3120 (list
3121 #:phases
3122 #~(modify-phases %standard-phases
3123 (add-after 'build 'build-doc
3124 (lambda _
3125 ;; See: https://github.com/eerimoq/cantools/issues/190.
3126 (substitute* "README.rst"
3127 (("https://github.com/eerimoq/cantools/raw/master\
3128/docs/monitor.png")
3129 "monitor.png"))
3130 (invoke "make" "-C" "docs" "man" "info")))
3131 (add-after 'install 'install-doc
3132 (lambda* (#:key outputs #:allow-other-keys)
3133 (let* ((info (string-append #$output "/share/info"))
3134 (man1 (string-append #$output "/share/man/man1")))
3135 (install-file "docs/_build/texinfo/cantools.info" info)
3136 (install-file "docs/_build/man/cantools.1" man1)))))))
3137 (native-inputs (list python-sphinx texinfo))
3138 (propagated-inputs
3139 (list python-argparse-addons
3140 python-bitstruct
3141 python-can
3142 python-crccheck
3143 python-diskcache
3144 python-matplotlib
3145 python-parameterized
3146 python-textparser))
3147 (home-page "https://github.com/eerimoq/cantools")
3148 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
3149 (description "This package includes Controller Area Network (CAN) related
3150tools that can be used to:
3151@itemize
3152@item parse DBC, KCD, SYM, ARXML 4 and CDD files
3153@item encode and decode CAN messages
3154@item multiplex simple and extended signals
3155@item diagnose DID encoding and decoding
3156@item dump the CAN decoder output
3157@item test CAN nodes
3158@item generate C source code
3159@item monitor the CAN bus
3160@end itemize")
3161 (license license:expat)))
3162
3163(define-public python-capturer
3164 (package
3165 (name "python-capturer")
3166 (version "2.4")
3167 (source
3168 (origin
3169 (method url-fetch)
3170 (uri (pypi-uri "capturer" version))
3171 (sha256
3172 (base32
3173 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
3174 (build-system python-build-system)
3175 (arguments
3176 `(#:tests? #f))
3177 (propagated-inputs
3178 (list python-humanfriendly))
3179 (home-page "https://capturer.readthedocs.io")
3180 (synopsis "Capture stdout and stderr streams of the current process")
3181 (description
3182 "The capturer package makes it easy to capture the stdout and stderr
3183streams of the current process and subprocesses. Output can be relayed
3184to the terminal in real time but is also available to the Python program
3185for additional processing.")
3186 (license license:expat)))
3187
3188(define-public python-fastprogress
3189 (package
3190 (name "python-fastprogress")
3191 (version "1.0.3")
3192 (source (origin
3193 (method git-fetch)
3194 (uri (git-reference
3195 (url "https://github.com/fastai/fastprogress")
3196 (commit version)))
3197 (file-name (git-file-name name version))
3198 (sha256
3199 (base32
3200 "01h8f786wgmmd3fj98wk1n5id67nsp19gs8bbgims04aciwhvj21"))))
3201 (build-system pyproject-build-system)
3202 (arguments
3203 (list #:tests? #f ;there are no tests
3204 #:phases #~(modify-phases %standard-phases
3205 ;; XXX: Fails with: "In procedure utime: No such file
3206 ;; or directory".
3207 (delete 'ensure-no-mtimes-pre-1980))))
3208 (home-page "https://github.com/fastai/fastprogress")
3209 (synopsis "Progress bar for Jupyter Notebook and console")
3210 (description
3211 "Fastprogress is a progress bar for Jupyter Notebook and console.")
3212 (license license:asl2.0)))
3213
3214(define-public python-case
3215 (package
3216 (name "python-case")
3217 (version "1.5.3")
3218 (source
3219 (origin
3220 (method url-fetch)
3221 (uri (pypi-uri "case" version))
3222 (sha256
3223 (base32
3224 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
3225 (build-system python-build-system)
3226 (propagated-inputs
3227 (list python-mock python-nose python-six))
3228 (native-inputs
3229 (list python-coverage))
3230 (home-page "https://github.com/celery/case")
3231 (synopsis "Unittest utilities and convenience methods")
3232 (description
3233 "The @code{case} package provides utilities on top of unittest, including
3234some helpful Python 2 compatibility convenience methods.")
3235 (license license:bsd-3)))
3236
3237(define-public python-verboselogs
3238 (package
3239 (name "python-verboselogs")
3240 (version "1.7")
3241 (source
3242 (origin
3243 (method url-fetch)
3244 (uri (pypi-uri "verboselogs" version))
3245 (sha256
3246 (base32
3247 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
3248 (build-system python-build-system)
3249 (arguments
3250 `(#:phases
3251 (modify-phases %standard-phases
3252 (replace 'check
3253 (lambda _
3254 ;; Do not run pylint plugin test, as astroid is an old
3255 ;; unsupported version.
3256 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
3257 "verboselogs/tests.py"))))))
3258 (native-inputs
3259 (list python-mock python-pytest))
3260 (home-page "https://verboselogs.readthedocs.io")
3261 (synopsis "Verbose logging level for Python's logging module")
3262 (description
3263 "The @code{verboselogs} package extends Python's @code{logging} module to
3264add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
3265 (license license:expat)))
3266
3267(define-public python-coloredlogs
3268 (package
3269 (name "python-coloredlogs")
3270 (version "10.0")
3271 (source
3272 (origin
3273 (method url-fetch)
3274 (uri (pypi-uri "coloredlogs" version))
3275 (sha256
3276 (base32
3277 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
3278 (build-system python-build-system)
3279 (arguments
3280 `(;Tests require some updated modules
3281 #:tests? #f))
3282 (propagated-inputs
3283 (list python-capturer))
3284 (home-page "https://coloredlogs.readthedocs.io")
3285 (synopsis "Colored stream handler for Python's logging module")
3286 (description
3287 "The @code{coloredlogs} package enables colored terminal output for
3288Python's logging module. The @code{ColoredFormatter} class inherits from
3289@code{logging.Formatter} and uses ANSI escape sequences to render your logging
3290messages in color.")
3291 (license license:expat)))
3292
3293(define-public python-editorconfig
3294 (package
3295 (name "python-editorconfig")
3296 (version "0.12.2")
3297 (source
3298 (origin
3299 (method url-fetch)
3300 (uri (pypi-uri "EditorConfig" version))
3301 (sha256
3302 (base32
3303 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
3304 (build-system python-build-system)
3305 (home-page "https://editorconfig.org/")
3306 (synopsis "EditorConfig bindings for python")
3307 (description "The EditorConfig project consists of a file format for
3308defining coding styles and a collection of text editor plugins that enable
3309editors to read the file format and adhere to defined styles. EditorConfig
3310files are easily readable and they work nicely with version control systems.")
3311 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
3312 (license (list license:bsd-2 license:psfl))))
3313
3314(define-public dosage
3315 (package
3316 (name "dosage")
3317 (version "2.17")
3318 (source
3319 (origin
3320 (method url-fetch)
3321 (uri (pypi-uri "dosage" version))
3322 (sha256
3323 (base32
3324 "0vmxgn9wd3j80hp4gr5iq06jrl4gryz5zgfdd2ah30d12sfcfig0"))))
3325 (build-system python-build-system)
3326 (propagated-inputs
3327 (list python-cached-property
3328 python-colorama
3329 python-imagesize
3330 python-importlib-metadata
3331 python-lxml
3332 python-requests
3333 python-six))
3334 (native-inputs
3335 (list python-pytest-cov python-pytest-xdist python-responses
3336 python-setuptools-scm))
3337 (home-page "https://github.com/webcomics/dosage")
3338 (synopsis "Comic strip downloader and archiver")
3339 (description "Dosage is designed to keep a local copy of specific webcomics and other
3340picture-based content such as Picture of the Day sites. With the @command{dosage}
3341command-line script you can get the latest strip of a webcomic, catch-up to the last strip
3342downloaded, or download a strip for a particular date or index, if possible.")
3343 (license license:expat)))
3344
3345(define-public python-et-xmlfile
3346 (package
3347 (name "python-et-xmlfile")
3348 (version "1.1")
3349 (source
3350 (origin
3351 ;; Use a checkout because the PyPI archive does not contain tests.
3352 (method hg-fetch)
3353 (uri (hg-reference
3354 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
3355 (changeset version)))
3356 (file-name (string-append name "-" version "-checkout"))
3357 (sha256
3358 (base32 "09r8rjc5bhkqrm5c4n9jrlvad8vrvbyswl9g0wrc1qc7nzh9mpw7"))))
3359 (build-system python-build-system)
3360 (arguments
3361 (list #:phases
3362 #~(modify-phases %standard-phases
3363 (replace 'check
3364 (lambda* (#:key tests? #:allow-other-keys)
3365 (when tests?
3366 (invoke "pytest" "-vv")))))))
3367 (native-inputs
3368 (list python-pytest python-lxml)) ;used for the tests
3369 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
3370 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
3371 (description "This Python library is based upon the @code{xmlfile} module
3372from @code{lxml}. It aims to provide a low memory, compatible implementation
3373of @code{xmlfile}.")
3374 (license license:expat)))
3375
3376(define-public python-omero-py
3377 (package
3378 (name "python-omero-py")
3379 (version "5.13.1")
3380 (source (origin
3381 (method git-fetch)
3382 (uri (git-reference
3383 (url "https://github.com/ome/omero-py")
3384 (commit (string-append "v" version))))
3385 (file-name (git-file-name name version))
3386 (sha256
3387 (base32
3388 "0n94v5dpmh873hjqd9k9ky85iab4xh37ibmi13rqpclv01ibvvxa"))))
3389 (build-system pyproject-build-system)
3390 (arguments
3391 (list
3392 #:test-flags
3393 '(list "-m" "not broken" "-rf" "test" "-s"
3394 ;; TestImport tries to download Java things; TestSessions
3395 ;; and TestBuildQuery require networking.
3396 "-k" "not TestImport and not TestSessions and not TestBuildQuery")
3397 #:modules '((guix build pyproject-build-system)
3398 (guix build utils)
3399 (ice-9 match)
3400 (srfi srfi-1)
3401 (srfi srfi-26))
3402 #:phases
3403 #~(modify-phases %standard-phases
3404 (add-after 'unpack 'find-artifacts
3405 (lambda* (#:key inputs #:allow-other-keys)
3406 (let ((zip-file
3407 (match inputs
3408 (((labels . files) ...)
3409 (find (cut string-suffix? "omero-blitz-5.5.5-python.zip" <>)
3410 files)))))
3411 (setenv "ZIP_FILE"
3412 (or zip-file (error "failed to find artifact file"))))))
3413 ;; Some tests need this, such as TestTempFileManager
3414 (add-after 'build 'set-HOME
3415 (lambda _ (setenv "HOME" "/tmp")))
3416 ;; The sanity check mistakes omero_model_TypeAnnotationI.py for a
3417 ;; module to load.
3418 (delete 'sanity-check)
3419 ;; The argument parser is picky and interprets the "-real" part as
3420 ;; the first argument.
3421 (add-after 'wrap 'rename-executable
3422 (lambda _
3423 (with-directory-excursion (string-append #$output "/bin")
3424 (rename-file ".omero-real" ".omero")
3425 (substitute* "omero"
3426 (("bin/.omero-real") "bin/.omero"))))))))
3427 (propagated-inputs
3428 (list python-appdirs
3429 python-future
3430 python-numpy
3431 python-pillow
3432 python-pyyaml
3433 python-requests
3434 python-tables
3435 python-zeroc-ice-3.6))
3436 (native-inputs
3437 (list python-mox3
3438 python-pytest
3439 python-pytest-rerunfailures
3440 python-pytest-xdist
3441 unzip
3442 (origin
3443 (method url-fetch)
3444 (uri "https://artifacts.openmicroscopy.org/artifactory/\
3445ome.releases/org/openmicroscopy/omero-blitz/5.5.5/omero-blitz-5.5.5-python.zip")
3446 (sha256
3447 (base32 "0wyja1zv19c1r3m31gsp555jzj3cg2v2pl00zlybpw3qd36yffwc")))))
3448 (home-page "https://github.com/ome/omero-py")
3449 (synopsis "Python bindings to the OMERO.blitz server")
3450 (description "This package provides Python bindings to the OMERO.blitz
3451server.")
3452 (license license:gpl2)))
3453
3454(define-public python-openpyxl
3455 (package
3456 (name "python-openpyxl")
3457 (version "3.0.9")
3458 (source
3459 (origin
3460 ;; We use the upstream repository, as the tests are not included in the
3461 ;; PyPI releases.
3462 (method hg-fetch)
3463 (uri (hg-reference
3464 (url "https://foss.heptapod.net/openpyxl/openpyxl")
3465 (changeset version)))
3466 (file-name (string-append name "-" version "-checkout"))
3467 (sha256
3468 (base32 "1p8xvc2gjw6zyzbd7qdvc3x178sm00ymrbyh9539l4fpzgxh0j9c"))))
3469 (build-system python-build-system)
3470 (arguments
3471 `(#:phases (modify-phases %standard-phases
3472 (replace 'check
3473 (lambda _
3474 (invoke "pytest"))))))
3475 (native-inputs (list python-lxml python-pillow python-pytest))
3476 (propagated-inputs (list python-et-xmlfile python-jdcal))
3477 (home-page "https://openpyxl.readthedocs.io")
3478 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
3479 (description
3480 "This Python library allows reading and writing to the Excel XLSX, XLSM,
3481XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
3482standard.")
3483 (license license:expat)))
3484
3485(define-public python-eventlet
3486 (package
3487 (name "python-eventlet")
3488 (version "0.33.0")
3489 (source
3490 (origin
3491 (method url-fetch)
3492 (uri (pypi-uri "eventlet" version))
3493 (sha256
3494 (base32
3495 "07qlyhcm0f28sxdizawvdf3d50m3hnbzz5kg3fjp7chvki44y540"))))
3496 (build-system python-build-system)
3497 (propagated-inputs
3498 (list python-dnspython python-greenlet python-monotonic python-six))
3499 (native-inputs
3500 (list python-nose))
3501 (arguments
3502 '(#:phases
3503 (modify-phases %standard-phases
3504 (add-after 'unpack 'avoid-OSError
3505 (lambda _
3506 ;; If eventlet tries to load greendns, an OSError is thrown when
3507 ;; getprotobyname is called. Thankfully there is an environment
3508 ;; variable to disable the greendns import, so use it:
3509 (setenv "EVENTLET_NO_GREENDNS" "yes")))
3510 (replace 'check
3511 (lambda* (#:key tests? #:allow-other-keys)
3512 (when tests?
3513 (invoke
3514 "nosetests"
3515 "-v" "tests/"
3516 "-I" "greendns_test.py"
3517 "-I" "socket_test.py"
3518 "-e" "test_018b_http_10_keepalive_framing"
3519 ;; The following two tests fail with Python 3.10. See
3520 ;; <https://github.com/eventlet/eventlet/issues/730>.
3521 "-e" "test_patcher_existing_locks_locked"
3522 ;; And see <https://github.com/eventlet/eventlet/issues/739>.
3523 "-e" "test_017_ssl_zeroreturnerror")))))))
3524 (home-page "https://eventlet.net")
3525 (synopsis "Concurrent networking library for Python")
3526 (description
3527 "Eventlet is a concurrent networking library for Python that
3528allows you to change how you run your code, not how you write it.
3529It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
3530Coroutines ensure that the developer uses a blocking style of programming
3531that is similar to threading, but provide the benefits of non-blocking I/O.
3532The event dispatch is implicit, which means you can easily use @code{Eventlet}
3533from the Python interpreter, or as a small part of a larger application.")
3534 (license license:expat)))
3535
3536(define-public python-sinfo
3537 (package
3538 (name "python-sinfo")
3539 (version "0.3.4")
3540 (source (origin
3541 (method url-fetch)
3542 (uri (pypi-uri "sinfo" version))
3543 (sha256
3544 (base32
3545 "0kdsp883mx0lfyykv0p12bvs203kdm3skb8bw5wf2pc7kb393sl1"))))
3546 (build-system python-build-system)
3547 (propagated-inputs
3548 (list python-stdlib-list))
3549 (home-page "https://gitlab.com/joelostblom/session_info")
3550 (synopsis "Output module version information loaded in a Python session")
3551 (description "This package outputs version information for modules loaded
3552in the current session, Python, and the OS.")
3553 (license license:bsd-3)))
3554
3555(define-public python-six
3556 (package/inherit python-six-bootstrap
3557 (name "python-six")
3558 (arguments
3559 `(#:phases
3560 (modify-phases %standard-phases
3561 (replace 'check
3562 (lambda _
3563 (invoke "pytest" "-v"))))))
3564 (native-inputs
3565 `(("python-pytest" ,python-pytest-bootstrap)))))
3566
3567(define-public python2-six
3568 (let ((base (package-with-python2 python-six)))
3569 (package
3570 (inherit base)
3571 ;; Reduce Python 2 closure by disabling tests and removing the native
3572 ;; inputs.
3573 (arguments (substitute-keyword-arguments (package-arguments base)
3574 ((#:phases phases)
3575 `(modify-phases ,phases
3576 (delete 'check)))))
3577 (native-inputs '()))))
3578
3579(define-public python-schedule
3580 (package
3581 (name "python-schedule")
3582 (version "0.4.3")
3583 (source
3584 (origin
3585 (method url-fetch)
3586 (uri (pypi-uri "schedule" version))
3587 (sha256
3588 (base32
3589 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
3590 (build-system python-build-system)
3591 (native-inputs
3592 (list python-pytest python-mock))
3593 (home-page "https://github.com/dbader/schedule")
3594 (synopsis "Schedule periodic function calls in Python")
3595 (description
3596 "Schedule is an in-process scheduler for periodic jobs that uses the
3597builder pattern for configuration. Schedule lets you run Python functions (or
3598any other callable) periodically at pre-determined intervals using a simple,
3599human-friendly syntax.")
3600 (license license:expat)))
3601
3602(define-public python-scour
3603 (package
3604 (name "python-scour")
3605 (version "0.38.2")
3606 (source
3607 (origin
3608 (method git-fetch)
3609 (uri
3610 (git-reference
3611 (url "https://github.com/scour-project/scour")
3612 (commit
3613 (string-append "v" version))))
3614 (file-name (git-file-name name version))
3615 (sha256
3616 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
3617 (propagated-inputs
3618 (list python-six))
3619 (build-system python-build-system)
3620 (home-page "https://github.com/scour-project/scour")
3621 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
3622 (description "The goal of Scour is to output a file that renders
3623identically at a fraction of the size by removing a lot of redundant
3624information created by most SVG editors. Optimization options are typically
3625lossless but can be tweaked for more aggressive cleaning.")
3626 (license license:asl2.0)))
3627
3628(define-public python-mechanize
3629 (package
3630 (name "python-mechanize")
3631 (version "0.4.7")
3632 (source
3633 (origin
3634 (method url-fetch)
3635 (uri (pypi-uri "mechanize" version))
3636 (sha256
3637 (base32
3638 "02b845y85ka5sl2cj93lll3v326d8bww07bq1q0y1643h7sshwqp"))))
3639 (build-system python-build-system)
3640 (propagated-inputs
3641 (list python-html5lib))
3642 (home-page "https://github.com/python-mechanize/mechanize")
3643 (synopsis
3644 "Stateful programmatic web browsing in Python")
3645 (description
3646 "Mechanize implements stateful programmatic web browsing in Python,
3647after Andy Lester’s Perl module WWW::Mechanize.")
3648 (license license:bsd-3)))
3649
3650(define-public python-simpleaudio
3651 (package
3652 (name "python-simpleaudio")
3653 (version "1.0.4")
3654 (source
3655 (origin
3656 (method url-fetch)
3657 (uri (pypi-uri "simpleaudio" version))
3658 (sha256
3659 (base32
3660 "07glihg0fpca0gvbbvqs9q815w8xhflzdvg72yvlsm23j9j8h739"))))
3661 (build-system python-build-system)
3662 (arguments
3663 `(#:tests? #f))
3664 (inputs
3665 (list alsa-lib))
3666 (home-page
3667 "https://github.com/hamiltron/py-simple-audio")
3668 (synopsis "Simple, asynchronous audio playback for Python 3")
3669 (description
3670 "The @code{simplaudio} package provides cross-platform, dependency-free
3671audio playback capability for Python 3 on OSX, Windows, and Linux.")
3672 (license license:expat))) ; MIT license
3673
3674(define-public python-jsonalias
3675 (package
3676 (name "python-jsonalias")
3677 (version "0.1.1")
3678 (source (origin
3679 (method url-fetch)
3680 (uri (pypi-uri "jsonalias" version))
3681 (sha256
3682 (base32
3683 "0sd7c3vyvfhhpnan77ax4f0x1whjcb5iz7jhjky7kmcpaf9lvw34"))))
3684 (build-system python-build-system)
3685 (arguments (list #:tests? #f)) ; There are no tests.
3686 (home-page "https://github.com/kevinheavey/jsonalias/")
3687 (synopsis "JSON type alias for Python")
3688 (description
3689 "This package provides a microlibrary that defines a JSON type alias for
3690Python.")
3691 (license license:expat)))
3692
3693(define-public python-jsonargparse
3694 (package
3695 (name "python-jsonargparse")
3696 (version "4.21.1")
3697 (source (origin
3698 (method url-fetch)
3699 (uri (pypi-uri "jsonargparse" version))
3700 (sha256
3701 (base32
3702 "1k3b60x0zf86fh50y2jyby30gksqriyvvpfnf5mqq0qn7jih01y7"))))
3703 (build-system pyproject-build-system)
3704 (arguments
3705 (list
3706 #:test-flags
3707 '(list "-k" (string-append "not test_env_prefix"
3708 " and not test_basemodel"
3709 " and not test_field_default_factory"
3710 " and not test_field_description"
3711 " and not test_get_param_relative_import_from_init"
3712 ;; Strangely, the arguments are interpreted
3713 ;; as arguments to pytest.
3714 " and not test_pydantic_types"))))
3715 (propagated-inputs
3716 (list python-contextvars
3717 python-dataclasses
3718 python-docstring-parser
3719 python-pyyaml
3720 python-typeshed-client))
3721 (native-inputs
3722 (list python-attrs
3723 python-coverage
3724 python-pre-commit
3725 python-pycodestyle
3726 python-pydantic
3727 python-pytest
3728 python-pytest-subtests
3729 python-responses
3730 python-tox
3731 python-types-requests))
3732 (home-page "https://github.com/omni-us/jsonargparse/")
3733 (synopsis "Implement minimal boilerplate CLIs derived from type hints")
3734 (description
3735 "This package lets you implement minimal boilerplate CLIs derived from
3736type hints and parse from command line, config files and environment
3737variables.")
3738 (license license:expat)))
3739
3740(define-public python-simplejson
3741 (package
3742 (name "python-simplejson")
3743 (version "3.17.6")
3744 (source
3745 (origin
3746 (method url-fetch)
3747 (uri (pypi-uri "simplejson" version))
3748 (sha256
3749 (base32
3750 "19pqqn01y6qmhhv8q6dh4p1acav49kl923kklnns2qxz5a6h766g"))))
3751 (build-system python-build-system)
3752 (native-inputs
3753 (list python-toml))
3754 (home-page "https://simplejson.readthedocs.io/en/latest")
3755 (synopsis
3756 "Json library for Python")
3757 (description
3758 "JSON (JavaScript Object Notation) is a subset of JavaScript
3759syntax (ECMA-262 3rd edition) used as a lightweight data interchange
3760format.
3761
3762Simplejson exposes an API familiar to users of the standard library marshal
3763and pickle modules. It is the externally maintained version of the json
3764library contained in Python 2.6, but maintains compatibility with Python 2.5
3765and (currently) has significant performance advantages, even without using
3766the optional C extension for speedups. Simplejson is also supported on
3767Python 3.3+.")
3768 (license license:x11)))
3769
3770(define-public python-simple-rlp
3771 (package
3772 (name "python-simple-rlp")
3773 (version "0.1.3")
3774 (source
3775 (origin
3776 (method git-fetch)
3777 (uri (git-reference
3778 (url "https://github.com/SamuelHaidu/simple-rlp")
3779 ;; Upstream doesn't tag the git repo.
3780 (commit "342ea269d84da1ddc4a7630cdebc90159261391c")))
3781 (file-name (git-file-name name version))
3782 (sha256
3783 (base32
3784 "1nv92sphpkyrncak4qgj50qmgkmj4ycl2szbnv9c7ihgl5df4div"))))
3785 (build-system python-build-system)
3786 (home-page "https://github.com/SamuelHaidu/simple-rlp")
3787 (synopsis
3788 "Python implementation of RLP (Recursive Length Prefix) encoding")
3789 (description
3790 "@code{simple-rlp} is a python implementation of RLP (Recursive Length \
3791Prefix) - Encode and decode data structures.")
3792 (license license:expat)))
3793
3794(define-public python-pyicu
3795 (package
3796 (name "python-pyicu")
3797 (version "2.9")
3798 (source
3799 (origin
3800 (method url-fetch)
3801 (uri (pypi-uri "PyICU" version))
3802 (sha256
3803 (base32
3804 "0y2qhh443vydi3y7kmhyb6kz3z6d7qq7ld0sg88mfqalcp7dca9w"))))
3805 (build-system python-build-system)
3806 (inputs
3807 (list icu4c))
3808 (native-inputs
3809 (list python-pytest python-six))
3810 (home-page "https://gitlab.pyicu.org/main/pyicu")
3811 (synopsis "Python extension wrapping the ICU C++ API")
3812 (description
3813 "PyICU is a python extension wrapping the ICU C++ API.")
3814 (license license:x11)))
3815
3816(define-public python-dogtail
3817 (package
3818 (name "python-dogtail")
3819 (version "0.9.11")
3820 (source (origin
3821 (method url-fetch)
3822 (uri
3823 (string-append
3824 "https://gitlab.com/dogtail/dogtail/-/raw/released/"
3825 "dogtail-" version ".tar.gz"))
3826 (sha256
3827 (base32
3828 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
3829 (build-system python-build-system)
3830 (arguments
3831 `(#:tests? #f ; TODO Launching dbus for the tests
3832 ; fails
3833 #:phases
3834 (modify-phases %standard-phases
3835 (replace 'check
3836 (lambda* (#:key tests? #:allow-other-keys)
3837 (when tests?
3838 (system "Xvfb :1 &")
3839 (setenv "DISPLAY" ":1")
3840 (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
3841 #t)))))
3842 (propagated-inputs
3843 (list python-pygobject python-pycairo python-pyatspi))
3844 (native-inputs
3845 (list python-nose
3846 gtk+
3847 xorg-server-for-tests
3848 dbus
3849 gsettings-desktop-schemas
3850 gobject-introspection))
3851 (home-page "https://gitlab.com/dogtail/dogtail/")
3852 (synopsis "GUI test tool and automation framework written in Python")
3853 (description
3854 "Dogtail is a GUI test tool and automation framework written in Python.
3855It uses Accessibility (a11y) technologies to communicate with desktop
3856applications. dogtail scripts are written in Python and executed like any
3857other Python program.")
3858 (license license:gpl2+)))
3859
3860(define-public python-doxyqml
3861 (package
3862 (name "python-doxyqml")
3863 (version "0.5.1")
3864 (source (origin
3865 (method url-fetch)
3866 (uri (pypi-uri "doxyqml" version))
3867 (sha256
3868 (base32
3869 "1f0jjqvamly4hn7f1palvq27z6yr694rfzyxrb6g0ysbbawxkvq9"))))
3870 (build-system python-build-system)
3871 (home-page "https://agateau.com/projects/doxyqml")
3872 (synopsis "Doxygen input filter for QML files")
3873 (description
3874 "This package provides a Doxygen input filter for QML files.")
3875 (license license:bsd-3)))
3876
3877(define-public python-doxypypy
3878 (package
3879 (name "python-doxypypy")
3880 (version "0.8.8.6")
3881 (source (origin
3882 (method url-fetch)
3883 (uri (pypi-uri "doxypypy" version))
3884 (sha256
3885 (base32
3886 "06z0vbh975g42z5szbfvn9i3bif3xwr5pncqd4fvjzjkbi2p2xb2"))))
3887 (build-system python-build-system)
3888 (arguments '(#:tests? #f)) ;no test suite
3889 (home-page "https://github.com/Feneric/doxypypy")
3890 (synopsis "Doxygen filter for Python")
3891 (description
3892 "This package provides a Doxygen filter for Python.")
3893 (license license:gpl2+)))
3894
3895(define-public python-empy
3896 (package
3897 (name "python-empy")
3898 (version "3.3.3")
3899 (source (origin
3900 (method url-fetch)
3901 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
3902 version ".tar.gz"))
3903 (sha256
3904 (base32
3905 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
3906 (build-system python-build-system)
3907 (arguments
3908 `(#:tests? #f)) ; python2 only
3909 (home-page "http://www.alcyone.com/software/empy/")
3910 (synopsis "Templating system for Python")
3911 (description
3912 "EmPy is a system for embedding Python expressions and statements in
3913template text; it takes an EmPy source file, processes it, and produces
3914output. This is accomplished via expansions, which are special signals to the
3915EmPy system and are set off by a special prefix (by default the at sign, @@).
3916EmPy can expand arbitrary Python expressions and statements in this way, as
3917well as a variety of special forms. Textual data not explicitly delimited in
3918this way is sent unaffected to the output, allowing Python to be used in
3919effect as a markup language. Also supported are callbacks via hooks,
3920recording and playback via diversions, and dynamic, chainable filters. The
3921system is highly configurable via command line options and embedded
3922commands.")
3923 (license license:lgpl2.1+)))
3924
3925(define-public python-palettable
3926 (package
3927 (name "python-palettable")
3928 (version "3.3.3")
3929 (source (origin
3930 (method url-fetch)
3931 (uri (pypi-uri "palettable" version))
3932 (sha256
3933 (base32
3934 "1a4h0jpsr3wjciqg9a5kslxv65d3qqgmqgkpai4cl77wlpcxfk89"))))
3935 (build-system pyproject-build-system)
3936 (native-inputs (list python-pytest))
3937 (home-page "https://jiffyclub.github.io/palettable/")
3938 (synopsis "Color palettes for Python")
3939 (description "Palettable (formerly brewer2mpl) is a library of color
3940palettes for Python. It’s written in pure Python with no dependencies, but it
3941can supply color maps for matplotlib. You can use Palettable to customize
3942matplotlib plots or supply colors for a web application.")
3943 (license license:expat)))
3944
3945(define-public python-parse-type
3946 (package
3947 (name "python-parse-type")
3948 (version "0.6.0")
3949 (source
3950 (origin
3951 (method url-fetch)
3952 (uri (pypi-uri "parse_type" version))
3953 (sha256
3954 (base32
3955 "07smqnzc9km7sbvxfyx4gdm9njrx58x8grdw6gs4gva81rk3rd10"))))
3956 (build-system python-build-system)
3957 (arguments
3958 '(#:phases
3959 (modify-phases %standard-phases
3960 (replace 'check
3961 (lambda* (#:key tests? #:allow-other-keys)
3962 (when tests?
3963 (invoke "pytest" "-vv" "-c" "/dev/null")))))))
3964 (propagated-inputs (list python-six python-parse))
3965 (native-inputs (list python-pytest))
3966 (home-page "https://github.com/jenisys/parse_type")
3967 (synopsis "Extended parse module")
3968 (description "Parse_type extends the python parse module.")
3969 (license license:bsd-3)))
3970
3971(define-public python-parse
3972 (package
3973 (name "python-parse")
3974 (version "1.18.0")
3975 (source
3976 (origin
3977 (method url-fetch)
3978 (uri (pypi-uri "parse" version))
3979 (sha256
3980 (base32
3981 "19063x4xdjpaf7rfxai6jpgm2k4yvkq7wha8aa8cagbjsqr60rli"))))
3982 (build-system python-build-system)
3983 (arguments
3984 `(#:phases
3985 (modify-phases %standard-phases
3986 (replace 'check
3987 (lambda _ (invoke "python" "test_parse.py"))))))
3988 (home-page "https://github.com/r1chardj0n3s/parse")
3989 (synopsis "Parse strings")
3990 (description
3991 "Parse strings using a specification based on the Python @code{format()}
3992syntax.")
3993 (license license:x11)))
3994
3995(define-public python-parsley
3996 (package
3997 (name "python-parsley")
3998 (version "1.3")
3999 (source (origin
4000 ;; The source distributed on PyPI is outdated.
4001 (method git-fetch)
4002 (uri (git-reference
4003 (url "https://github.com/pyga/parsley")
4004 (commit version)))
4005 (file-name (git-file-name name version))
4006 (sha256
4007 (base32
4008 "0550rw65ygqzbjc8a66hs355pzbx727kbn20dssdb6ls846gw2qs"))))
4009 (build-system pyproject-build-system)
4010 (arguments
4011 (list
4012 ;; XXX: Check why these 3 tests fail.
4013 #:test-flags #~(list "-k"
4014 (string-append "not test_sending_empty_netstring"
4015 " and not test_sending_one_netstring"
4016 " and not test_sending_two_netstrings"))))
4017 (native-inputs (list python-pytest python-twisted))
4018 (home-page "https://launchpad.net/parsley")
4019 (synopsis "Parsing and pattern matching Python library")
4020 (description
4021 "Parsley is a parsing library using PEG algorithm, so each expression in
4022the grammar rules works like a Python expression. In particular, alternatives
4023are evaluated in order, unlike table-driven parsers such as yacc, bison or PLY.
4024Parsley is an implementation of OMeta, an object-oriented pattern-matching
4025language.")
4026 (license license:expat)))
4027
4028(define-public python-polib
4029 (package
4030 (name "python-polib")
4031 (version "1.1.0")
4032 (source (origin
4033 (method url-fetch)
4034 (uri (pypi-uri "polib" version))
4035 (sha256
4036 (base32
4037 "0aikb8gcarhifn3sadrbbs5czagih9hjv250gsrgy9v1d49pvn7s"))))
4038 (build-system python-build-system)
4039 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
4040 (synopsis "Manipulate, create and modify gettext files")
4041 (description "Polib can manipulate any gettext format (po, pot and mo)
4042files. It can be used to create po files from scratch or to modify
4043existing ones.")
4044 (license license:expat)))
4045
4046(define-public python-polling2
4047 (package
4048 (name "python-polling2")
4049 (version "0.5.0")
4050 (source
4051 (origin
4052 (method url-fetch)
4053 (uri (pypi-uri "polling2" version))
4054 (sha256
4055 (base32 "0hp3238fv6k1qk43gv4jwnv1mwlkmx33akbj560b9nvsry1dmdwh"))))
4056 (build-system python-build-system)
4057 (arguments '(#:tests? #false)) ; no tests included
4058 (native-inputs
4059 (list python-mock python-pytest python-pytest-runner))
4060 (home-page "https://github.com/ddmee/polling2")
4061 (synopsis "Polling utility with many configurable options")
4062 (description "Polling2 is a utility used to wait for a function to return
4063a certain expected condition.")
4064 (license license:expat)))
4065
4066(define-public python-pomegranate
4067 (package
4068 (name "python-pomegranate")
4069 (version "0.14.8")
4070 (source (origin
4071 (method url-fetch)
4072 (uri (pypi-uri "pomegranate" version))
4073 (sha256
4074 (base32
4075 "0gb9srkbxzlkjyfizvxkw5y0bvnfcyiaxapz0hrdaba8j096b5i2"))
4076 (modules '((guix build utils)))
4077 ;; Delete generated Cython C files.
4078 (snippet
4079 '(for-each delete-file (find-files "." "\\.c$")))))
4080 (build-system python-build-system)
4081 (arguments
4082 (list
4083 #:phases
4084 '(modify-phases %standard-phases
4085 (replace 'check
4086 (lambda* (#:key tests? #:allow-other-keys)
4087 (when tests?
4088 (invoke "python" "setup.py" "test")))))))
4089 (propagated-inputs
4090 (list python-joblib
4091 python-networkx
4092 python-numpy
4093 python-pyyaml
4094 python-scipy))
4095 (native-inputs
4096 (list python-cython
4097 python-nose
4098 python-pandas))
4099 (home-page "https://pypi.python.org/pypi/pomegranate/")
4100 (synopsis "Graphical models library for Python")
4101 (description
4102 "Pomegranate is a graphical models library for Python, implemented in
4103Cython for speed.")
4104 (license license:expat)))
4105
4106(define-public python-portalocker
4107 (package
4108 (name "python-portalocker")
4109 (version "2.7.0")
4110 (source (origin
4111 (method url-fetch)
4112 (uri (pypi-uri "portalocker" version))
4113 (sha256
4114 (base32
4115 "0lawjm736vs86wlnxc3qqh37l11z0yx81xq3dmrw33m86kaq2bh3"))))
4116 (build-system pyproject-build-system)
4117 (native-inputs (list python-pytest
4118 python-pytest-cov
4119 python-pytest-mypy
4120 python-pytest-timeout
4121 python-redis))
4122 (home-page "https://github.com/WoLpH/portalocker")
4123 (synopsis "Python library for file locking")
4124 (description "Portalocker is a library to provide an easy API to file
4125locking..")
4126 (license license:bsd-3)))
4127
4128(define-public python-poyo
4129 (package
4130 (name "python-poyo")
4131 (version "0.5.0")
4132 (source
4133 (origin
4134 (method url-fetch)
4135 (uri (pypi-uri "poyo" version))
4136 (sha256
4137 (base32
4138 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
4139 (build-system python-build-system)
4140 (home-page "https://github.com/hackebrot/poyo")
4141 (synopsis "Lightweight YAML Parser for Python")
4142 (description
4143 "This package provides a lightweight YAML Parser for Python. It supports
4144only a chosen subset of the YAML format that is required to parse cookiecutter
4145user configuration files. It does not have support for serializing into YAML
4146and is not compatible with JSON.")
4147 (license license:expat)))
4148
4149(define-public python-exceptiongroup
4150 (package
4151 (name "python-exceptiongroup")
4152 (version "1.1.1")
4153 (source (origin
4154 (method git-fetch)
4155 (uri (git-reference
4156 (url "https://github.com/agronholm/exceptiongroup")
4157 (commit version)))
4158 (file-name (git-file-name name version))
4159 (sha256
4160 (base32
4161 "0wcvzwgjs0xmggs6dh92jxdqi988gafzh10hrzvw10kasy0xakfj"))))
4162 (build-system python-build-system)
4163 (arguments
4164 (list
4165 #:tests? #f ;TODO: Circular dependency on pytest
4166 #:phases
4167 #~(modify-phases %standard-phases
4168 ;; XXX: PEP 517 manual build/install procedures copied from
4169 ;; python-isort.
4170 (replace 'build
4171 (lambda _
4172 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
4173 ;; ZIP does not support timestamps before 1980.
4174 (setenv "SOURCE_DATE_EPOCH" "315532800")
4175 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
4176 (replace 'install
4177 (lambda* (#:key outputs #:allow-other-keys)
4178 (let ((whl (car (find-files "dist" "\\.whl$"))))
4179 (invoke "pip" "--no-cache-dir" "--no-input"
4180 "install" "--no-deps" "--prefix" #$output whl))))
4181 (replace 'check
4182 (lambda* (#:key tests? #:allow-other-keys)
4183 (when tests?
4184 (invoke "pytest" "-vv" "tests")))))))
4185 (native-inputs (list python-flit-scm python-pypa-build))
4186 (home-page "https://github.com/agronholm/exceptiongroup")
4187 (synopsis "PEP 654 backport from Python 3.11")
4188 (description "This is a backport of the @code{BaseExceptionGroup} and
4189@code{ExceptionGroup} classes from Python 3.11.")
4190 (license license:expat)))
4191
4192(define-public python-extension-helpers
4193(package
4194 (name "python-extension-helpers")
4195 (version "1.0.0")
4196 (source
4197 (origin
4198 (method url-fetch)
4199 (uri (pypi-uri "extension-helpers" version))
4200 (sha256
4201 (base32 "1rjha07ds633fb81hn3i2yzk3v2flbi6qa091ix4mkvrgk3gl6ya"))))
4202 (build-system pyproject-build-system)
4203 ;; FIXME: pytest failed to load test suit, find out why.
4204 ;; - _pytest.pathlib.ImportPathMismatchError: ('extension_helpers.conftes
4205 (arguments (list #:tests? #f))
4206 (native-inputs
4207 (list python-coverage
4208 python-pytest
4209 python-pytest-astropy
4210 python-pytest-cov
4211 python-setuptools-scm))
4212 (home-page "https://extension-helpers.readthedocs.io")
4213 (synopsis "Astropy ecosystem utilities for building and installing packages")
4214 (description
4215 "The extension-helpers package includes convenience helpers to assist with
4216building Python packages with compiled C/Cython extensions. It is developed by
4217the Astropy project but is intended to be general and usable by any Python
4218package.")
4219 (license license:bsd-3)))
4220
4221(define-public python-extras
4222 (package
4223 (name "python-extras")
4224 (version "1.0.0")
4225 (source
4226 (origin
4227 (method url-fetch)
4228 (uri (pypi-uri "extras" version))
4229 (sha256
4230 (base32
4231 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
4232 (build-system python-build-system)
4233 (arguments
4234 ;; FIXME: Circular dependency on testtools.
4235 '(#:tests? #f))
4236 (home-page "https://github.com/testing-cabal/extras")
4237 (synopsis "Useful extensions to the Python standard library")
4238 (description
4239 "Extras is a set of extensions to the Python standard library.")
4240 (license license:expat)))
4241
4242(define-public python-milc
4243 (package
4244 (name "python-milc")
4245 (version "1.6.8")
4246 (source (origin
4247 (method url-fetch)
4248 (uri (pypi-uri "milc" version))
4249 (sha256
4250 (base32
4251 "1pnwdg2653lc82qsv6c0kv9qcydh2f6w5mx5l4227zy1f6kr7b52"))))
4252 (build-system pyproject-build-system)
4253 (propagated-inputs (list python-appdirs python-argcomplete python-colorama
4254 python-halo python-spinners))
4255 (home-page "https://github.com/clueboard/milc")
4256 (synopsis "Python library for command line interface programs")
4257 (description "MILC is a Python library for developing command line
4258interface programs. This library provides features to parse arguments,
4259automatic tab-completion, color support, logging to @code{std}, etc.")
4260 (license license:expat)))
4261
4262(define-public python-mimeparse
4263 (package
4264 (name "python-mimeparse")
4265 (version "1.6.0")
4266 (source
4267 (origin
4268 (method url-fetch)
4269 (uri (pypi-uri "python-mimeparse" version))
4270 (sha256
4271 (base32
4272 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
4273 (build-system python-build-system)
4274 (arguments
4275 '(#:phases
4276 (modify-phases %standard-phases
4277 (replace 'check
4278 (lambda _
4279 (invoke "./mimeparse_test.py"))))))
4280 (home-page
4281 "https://github.com/dbtsai/python-mimeparse")
4282 (synopsis "Python library for parsing MIME types")
4283 (description
4284 "Mimeparse provides basic functions for parsing MIME type names and
4285matching them against a list of media-ranges.")
4286 (license license:expat)))
4287
4288(define-public python-miniboa
4289 (package
4290 (name "python-miniboa")
4291 (version "1.0.8")
4292 (source
4293 (origin
4294 (method url-fetch)
4295 (uri (pypi-uri "miniboa" version))
4296 (sha256
4297 (base32
4298 "002c1aki9hsrwj5plrwdrf3sk8rn95fqylqyjx2arrjfpsih4dgs"))))
4299 (build-system python-build-system)
4300 (home-page "https://github.com/shmup/miniboa")
4301 (synopsis "Simple, single-threaded Telnet server")
4302 (description
4303 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
4304server.")
4305 (license license:asl2.0)))
4306
4307(define-public python-mir-eval
4308 (package
4309 (name "python-mir-eval")
4310 (version "0.7")
4311 (source (origin
4312 (method url-fetch)
4313 (uri (pypi-uri "mir_eval" version))
4314 (sha256
4315 (base32
4316 "0pp6xdflqhj2czhb2w3kk2c7mx4h2hj0n5rabiaafrbcfsjvmzp1"))))
4317 (build-system python-build-system)
4318 (propagated-inputs (list python-future python-numpy python-scipy
4319 python-six))
4320 (native-inputs (list python-matplotlib))
4321 (home-page "https://github.com/craffel/mir_eval")
4322 (synopsis "Common metrics for common audio/music processing tasks.")
4323 (description "This is a Python library for computing common heuristic
4324accuracy scores for various music/audio information retrieval/signal
4325processing tasks.")
4326 (license license:expat)))
4327
4328(define-public python-mizani
4329 (package
4330 (name "python-mizani")
4331 (version "0.9.2")
4332 (source (origin
4333 (method git-fetch)
4334 (uri (git-reference
4335 (url "https://github.com/has2k1/mizani")
4336 (commit (string-append "v" version))))
4337 (file-name (git-file-name name version))
4338 (sha256
4339 (base32
4340 "13aisfc98nvypb4mglpdphp2r627cjzpdriw4dhlx55f3b2m0dza"))))
4341 (build-system pyproject-build-system)
4342 (propagated-inputs
4343 (list python-matplotlib python-numpy python-pandas python-scipy))
4344 (native-inputs
4345 (list python-setuptools python-setuptools-scm
4346 python-pytest python-pytest-cov tzdata))
4347 (home-page "https://github.com/has2k1/mizani")
4348 (synopsis "Create data visualizations in Python")
4349 (description
4350 "Mizani is a Python package for creating data visualizations. It
4351provides functions and tools to help with the creation of visually appealing
4352and informative visualizations, including scales, transformations and color
4353palettes.")
4354 (license license:bsd-3)))
4355
4356(define-public python-pafy
4357 (package
4358 (name "python-pafy")
4359 (version "0.5.3.1")
4360 (source
4361 (origin
4362 (method url-fetch)
4363 (uri (pypi-uri "pafy" version))
4364 (sha256
4365 (base32
4366 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
4367 (build-system python-build-system)
4368 (arguments
4369 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
4370 (propagated-inputs
4371 ;; Youtube-dl is a python package which is imported in the file
4372 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
4373 (list youtube-dl))
4374 (home-page "https://np1.github.io/pafy/")
4375 (synopsis "Retrieve YouTube content and metadata")
4376 (description
4377 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
4378 (license license:lgpl3+)))
4379
4380(define-public python-miniupnpc
4381 (package
4382 (name "python-miniupnpc")
4383 (version "2.2.3")
4384 (source
4385 (origin
4386 (method git-fetch)
4387 (uri
4388 (git-reference
4389 (url "https://github.com/miniupnp/miniupnp")
4390 (commit
4391 (string-append
4392 "miniupnpc_" (string-replace-substring version "." "_")))))
4393 (file-name
4394 (git-file-name name version))
4395 (sha256
4396 (base32 "03q1rlzvfzm15g1bfw2zqzavlsyaypnaf2k3cz6ha7k5rirkdy0l"))))
4397 (build-system python-build-system)
4398 (arguments
4399 (list
4400 #:phases
4401 #~(modify-phases %standard-phases
4402 (add-after 'unpack 'subdir
4403 (lambda* (#:key inputs #:allow-other-keys)
4404 (chdir "miniupnpc")
4405 (setenv "CC" #$(cc-for-target))
4406 (substitute* "Makefile"
4407 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
4408 (add-before 'subdir 'remove-kernel-version
4409 ;; Avoid embedding the running kernel version for reproducible builds
4410 (lambda _
4411 (substitute*
4412 "miniupnpc/updateminiupnpcstrings.sh"
4413 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix")))))))
4414 (inputs (list python)) ;we are building a Python extension
4415 (synopsis "UPnP client for Python")
4416 (description "Miniupnpc is a client library for Python programs to set up
4417port forwards using @acronym{UPnP, Universal Plug and Play}.")
4418 (home-page "http://miniupnp.free.fr")
4419 (license license:bsd-3)))
4420
4421(define-public python-py
4422 (package
4423 (name "python-py")
4424 (version "1.11.0")
4425 (source
4426 (origin
4427 (method url-fetch)
4428 (uri (pypi-uri "py" version))
4429 (sha256
4430 (base32
4431 "06c7m7sfcn7587xd4s2bng8m6q1gsfd3j93afhplfjq74r0mrisi"))))
4432 (build-system python-build-system)
4433 (arguments
4434 ;; FIXME: "ImportError: 'test' module incorrectly imported from
4435 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
4436 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
4437 ;; Is this module globally installed?"
4438 '(#:tests? #f))
4439 (native-inputs
4440 (list python-setuptools-scm))
4441 (home-page "https://github.com/pytest-dev/py")
4442 (synopsis "Python library for parsing, I/O, instrospection, and logging")
4443 (description
4444 "Py is a Python library for file name parsing, .ini file parsing, I/O,
4445code introspection, and logging.")
4446 (license license:expat)))
4447
4448;; Recent versions of python-fixtures and python-testrepository need
4449;; python-pbr for packaging, which itself needs these two packages for
4450;; testing.
4451;; To fix this circular dependency, we use a build of python-pbr, based on the
4452;; same source, just without any test dependencies and with tests disabled.
4453;; python-pbr-minmal is then used to package python-fixtures and
4454;; python-testrepository.
4455;; Strictly speaking we currently could remove the test-requirements from the
4456;; normal python-pbr package (and save this package) since test are disabled
4457;; there anyway. But this may change in future.
4458(define-public python-pbr-minimal
4459 (package
4460 (name "python-pbr-minimal")
4461 (version "5.5.1")
4462 (source
4463 (origin
4464 (method url-fetch)
4465 (uri (pypi-uri "pbr" version))
4466 (sha256
4467 (base32
4468 "1j8k5d4rdhy5bw5ai1vkjzln2albah94in3vvyvxa0n42fv81baz"))))
4469 (build-system python-build-system)
4470 (arguments
4471 `(#:tests? #f))
4472 (home-page "https://docs.openstack.org/pbr/latest/")
4473 (synopsis "Minimal build of python-pbr used for bootstrapping")
4474 (description
4475 "Used only for bootstrapping python2-pbr, you should not need this.")
4476 (license license:asl2.0)))
4477
4478(define-public python-pbr
4479 (package
4480 (inherit python-pbr-minimal)
4481 (name "python-pbr")
4482 (arguments
4483 `(#:tests? #f)) ;; Most tests seem to use the Internet.
4484 (propagated-inputs
4485 (list git)) ;; pbr actually uses the "git" binary.
4486 (native-inputs
4487 `(("python-fixtures" ,python-fixtures-bootstrap)
4488 ;; discover, coverage, hacking, subunit
4489 ("python-mock" ,python-mock)
4490 ("python-six" ,python-six)
4491 ("python-sphinx" ,python-sphinx)
4492 ("python-testrepository" ,python-testrepository-bootstrap)
4493 ("python-testresources" ,python-testresources-bootstrap)
4494 ("python-testscenarios" ,python-testscenarios-bootstrap)
4495 ("python-testtools" ,python-testtools-bootstrap)
4496 ("python-virtualenv" ,python-virtualenv)))
4497 (synopsis "Enhance the default behavior of Python’s setuptools")
4498 (description
4499 "Python Build Reasonableness (PBR) is a library that injects some useful
4500and sensible default behaviors into your setuptools run. It will set
4501versions, process requirements files and generate AUTHORS and ChangeLog file
4502from git information.
4503")))
4504
4505(define-public python-pyrsistent
4506 (package
4507 (name "python-pyrsistent")
4508 (version "0.16.0")
4509 (home-page "https://github.com/tobgu/pyrsistent")
4510 (source (origin
4511 (method url-fetch)
4512 (uri (pypi-uri "pyrsistent" version))
4513 (sha256
4514 (base32
4515 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
4516 (build-system python-build-system)
4517 (arguments
4518 '(#:phases (modify-phases %standard-phases
4519 ;; The package works fine with newer Pytest and Hypothesis, but
4520 ;; has pinned older versions to stay compatible with Python 2.
4521 (add-before 'check 'loosen-pytest-requirement
4522 (lambda _
4523 (substitute* "setup.py"
4524 (("pytest<5") "pytest")
4525 (("hypothesis<5") "hypothesis"))
4526 #t)))))
4527 (native-inputs
4528 (list python-hypothesis python-pytest python-pytest-runner))
4529 (propagated-inputs
4530 (list python-six))
4531 (synopsis "Persistent data structures for Python")
4532 (description
4533 "Pyrsistent is a number of persistent collections (by some referred to as
4534functional data structures). Persistent in the sense that they are immutable.
4535
4536All methods on a data structure that would normally mutate it instead return a
4537new copy of the structure containing the requested updates. The original
4538structure is left untouched.")
4539 (license license:expat)))
4540
4541(define-public python-exif-read
4542 (package
4543 (name "python-exif-read")
4544 (version "2.1.2")
4545 (source (origin
4546 (method url-fetch)
4547 (uri (pypi-uri "ExifRead" version))
4548 (sha256
4549 (base32
4550 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
4551 (build-system python-build-system)
4552 (arguments `(#:tests? #f)) ; no tests
4553 (home-page "https://github.com/ianare/exif-py")
4554 (synopsis "Python library to extract EXIF data from image files")
4555 (description
4556 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
4557files.")
4558 (license license:bsd-3)))
4559
4560(define-public python-pyld
4561 (package
4562 (name "python-pyld")
4563 (version "1.0.5")
4564 (source (origin
4565 (method url-fetch)
4566 (uri (pypi-uri "PyLD" version))
4567 (sha256
4568 (base32
4569 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
4570 (build-system python-build-system)
4571 (home-page "https://github.com/digitalbazaar/pyld")
4572 (synopsis "Python implementation of the JSON-LD specification")
4573 (description
4574 "PyLD is an implementation of the JSON-LD specification.")
4575 (license license:bsd-3)))
4576
4577(define-public python-cli-helpers
4578 (package
4579 (name "python-cli-helpers")
4580 (version "2.2.1")
4581 (source
4582 (origin
4583 ;; There's no source tarball on PyPI.
4584 (method git-fetch)
4585 (uri (git-reference
4586 (url "https://github.com/dbcli/cli_helpers")
4587 (commit (string-append "v" version))))
4588 (file-name (git-file-name name version))
4589 (sha256
4590 (base32 "1hzavh9v9lkd1dn9f0nvg80f7v4banxvcrj10zy72przqz51k1sb"))))
4591 (build-system python-build-system)
4592 (native-inputs
4593 (list python-pytest))
4594 (propagated-inputs
4595 (list python-wcwidth python-configobj python-tabulate))
4596 (home-page "https://github.com/dbcli/cli_helpers")
4597 (synopsis "Helpers for building command-line apps")
4598 (description
4599 "CLI Helpers is a Python package that makes it easy to perform common
4600tasks when building command-line apps. It's a helper library for command-line
4601interfaces.")
4602 (license license:bsd-3)))
4603
4604(define-public python-click
4605 (package
4606 (name "python-click")
4607 (version "8.1.3")
4608 (source
4609 (origin
4610 (method url-fetch)
4611 (uri (pypi-uri "click" version))
4612 (sha256
4613 (base32
4614 "13kvp8visj5xh9d43brnda6q0kc1s40flxa5cw0p0a9hzf5dr0kn"))))
4615 (build-system python-build-system)
4616 (arguments
4617 `(#:phases
4618 (modify-phases %standard-phases
4619 (replace 'check
4620 (lambda* (#:key tests? #:allow-other-keys)
4621 (when tests?
4622 (invoke "pytest" "-vv")))))))
4623 (native-inputs (list python-pytest))
4624 (home-page "https://palletsprojects.com/p/click/")
4625 (synopsis "Command line library for Python")
4626 (description
4627 "Click is a Python package for creating command line interfaces in a
4628composable way with as little code as necessary. Its name stands for
4629\"Command Line Interface Creation Kit\". It's highly configurable but comes
4630with sensible defaults out of the box.")
4631 (license license:bsd-3)))
4632
4633(define-public python-click-7
4634 (package (inherit python-click)
4635 (name "python-click")
4636 (version "7.1.2")
4637 (source
4638 (origin
4639 (method url-fetch)
4640 (uri (pypi-uri "click" version))
4641 (sha256
4642 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
4643 (arguments `())))
4644
4645(define-public python-clickgen
4646 (package
4647 (name "python-clickgen")
4648 (version "2.1.3")
4649 (source (origin
4650 (method url-fetch)
4651 (uri (pypi-uri "clickgen" version))
4652 (sha256
4653 (base32
4654 "010j9zz0gd2za5l4hibicypnfw721x0gxp3rr0329bc97vw5maha"))))
4655 (build-system python-build-system)
4656 (propagated-inputs
4657 (list python-pillow python-toml python-numpy python-attrs))
4658 (inputs (list libx11 libpng libxcursor))
4659 (native-inputs (list python-wheel))
4660 (home-page "https://github.com/ful1e5/clickgen")
4661 (synopsis "The hassle-free cursor building toolbox")
4662 (description
4663 "Clickgen is an API for building X11 and Windows cursors from .png files.
4664clickgen is using @code{anicursorgen} and @code{xcursorgen} under the hood.")
4665 (license license:expat)))
4666
4667(define-public python-clickhouse-connect
4668 (package
4669 (name "python-clickhouse-connect")
4670 (version "0.6.1")
4671 (source (origin
4672 (method git-fetch)
4673 (uri (git-reference
4674 (url "https://github.com/ClickHouse/clickhouse-connect")
4675 (commit (string-append "v" version))))
4676 (file-name (git-file-name name version))
4677 (sha256
4678 (base32
4679 "1s0lk7xdq8f351cmpbp6jidqi5zdazrdba7w7fxph0w8sd74amry"))))
4680 (build-system pyproject-build-system)
4681 (arguments
4682 (list
4683 #:test-flags
4684 ;; All these tests require docker-compose
4685 '(list "--ignore-glob=tests/integration_tests/*")
4686 #:phases
4687 '(modify-phases %standard-phases
4688 (add-after 'unpack 'patch-pyproject
4689 (lambda _
4690 ;; Our version of pytest is confused by this field.
4691 (substitute* "pyproject.toml"
4692 (("^env_files.*") ""))))
4693 (add-before 'check 'build-extensions
4694 (lambda _
4695 ;; Cython extensions have to be built before running the tests.
4696 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
4697 (propagated-inputs
4698 (list python-arrow
4699 python-certifi
4700 python-lz4
4701 python-numpy
4702 python-orjson
4703 python-pandas
4704 python-pytz
4705 python-sqlalchemy
4706 python-urllib3
4707 python-zstandard))
4708 (native-inputs
4709 (list python-cython
4710 python-pytest))
4711 (home-page "https://github.com/ClickHouse/clickhouse-connect")
4712 (synopsis
4713 "ClickHouse database core driver for Python, Pandas, and Superset")
4714 (description
4715 "This package provides a high performance core database driver for
4716connecting ClickHouse to Python, Pandas, and Superset.")
4717 (license license:asl2.0)))
4718
4719(define-public python-cligj
4720 (package
4721 (name "python-cligj")
4722 (version "0.7.2")
4723 (source
4724 (origin
4725 (method url-fetch)
4726 (uri (pypi-uri "cligj" version))
4727 (sha256
4728 (base32
4729 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
4730 (build-system python-build-system)
4731 (propagated-inputs
4732 (list python-click))
4733 (native-inputs
4734 (list python-pytest-cov))
4735 (home-page "https://github.com/mapbox/cligj")
4736 (synopsis "Click params for command line interfaces to GeoJSON")
4737 (description
4738 "cligj is for Python developers who create command line interfaces
4739for geospatial data. cligj allows you to quickly build consistent,
4740well-tested and interoperable CLIs for handling GeoJSON.")
4741 (license license:bsd-3)))
4742
4743(define-public python-cloup
4744 (package
4745 (name "python-cloup")
4746 (version "2.1.1")
4747 (source (origin
4748 (method url-fetch)
4749 (uri (pypi-uri "cloup" version))
4750 (sha256
4751 (base32
4752 "05c6cjpnf9s72gyn5dckxbmd8rf2kgdzfsl7pqzrnc1lcdl13zmv"))))
4753 (build-system pyproject-build-system)
4754 (propagated-inputs (list python-click))
4755 (native-inputs (list python-pytest))
4756 (home-page "https://github.com/janLuke/cloup")
4757 (synopsis "Extension library for python-click")
4758 (description
4759 "Cloup enriches Click with several features that make it more expressive
4760and configurable such as option groups, constraints, subcommand aliases,
4761subcommands sections and a themeable HelpFormatter.")
4762 (license license:bsd-3)))
4763
4764(define-public python-vcversioner
4765 (package
4766 (name "python-vcversioner")
4767 (version "2.16.0.0")
4768 (source
4769 (origin
4770 (method url-fetch)
4771 (uri (pypi-uri "vcversioner" version))
4772 (sha256
4773 (base32
4774 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
4775 (build-system python-build-system)
4776 (synopsis "Python library for version number discovery")
4777 (description "Vcversioner is a Python library that inspects tagging
4778information in a variety of version control systems in order to discover
4779version numbers.")
4780 (home-page "https://github.com/habnabit/vcversioner")
4781 (license license:isc)))
4782
4783(define-public python-jdcal
4784 (package
4785 (name "python-jdcal")
4786 (version "1.4.1")
4787 (source
4788 (origin
4789 (method url-fetch)
4790 (uri (pypi-uri "jdcal" version))
4791 (sha256
4792 (base32
4793 "1j6g19jf21qprjsr8h0r7nsbss366gy8j9izq8cz53gbjvh74a27"))))
4794 (build-system python-build-system)
4795 (arguments
4796 (list #:phases
4797 #~(modify-phases %standard-phases
4798 (replace 'check
4799 (lambda* (#:key tests? #:allow-other-keys)
4800 (when tests?
4801 (invoke "pytest" "-vv")))))))
4802 (native-inputs
4803 (list python-pytest))
4804 (home-page "https://github.com/phn/jdcal")
4805 (synopsis "Functions to convert between Julian dates Gregorian dates")
4806 (description "This Python library provides functions for converting
4807between Julian dates and Gregorian dates.")
4808 (license license:bsd-2)))
4809
4810(define-public python-jsondiff
4811 (package
4812 (name "python-jsondiff")
4813 (version "1.2.0")
4814 (source
4815 (origin
4816 (method url-fetch)
4817 (uri (pypi-uri "jsondiff" version))
4818 (sha256
4819 (base32
4820 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
4821 (build-system python-build-system)
4822 (native-inputs
4823 (list python-nose python-nose-random))
4824 (home-page
4825 "https://github.com/fzumstein/jsondiff")
4826 (synopsis "Compare JSON and JSON-like structures in Python")
4827 (description "@code{jsondiff} is a Python library which lets you
4828compare, diff, and patch JSON and JSON-like structures in Python.")
4829 (license license:expat)))
4830
4831(define-public python-jsonschema
4832 (package
4833 (name "python-jsonschema")
4834 ;; XXX: Update to the latest version requires new build system - Hatch
4835 ;; https://hatch.pypa.io/
4836 (version "4.5.1")
4837 (source
4838 (origin
4839 (method url-fetch)
4840 (uri (pypi-uri "jsonschema" version))
4841 (sha256
4842 (base32 "1z0x22691jva7lwfcfh377jdmlz68zhiawxzl53k631l34k8hvbw"))))
4843 (build-system pyproject-build-system)
4844 (arguments
4845 (list
4846 #:phases
4847 #~(modify-phases %standard-phases
4848 (add-before 'build 'pretend-version
4849 ;; The version string is usually derived via setuptools-scm, but
4850 ;; without the git metadata available, the version string is set to
4851 ;; '0.0.0'.
4852 (lambda _
4853 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
4854 (replace 'check
4855 (lambda* (#:key tests? #:allow-other-keys)
4856 (when tests?
4857 (setenv "JSON_SCHEMA_TEST_SUITE" "json")
4858 (invoke "trial" "jsonschema")))))))
4859 (native-inputs (list python-setuptools-scm python-twisted))
4860 (propagated-inputs
4861 (list python-attrs
4862 python-importlib-metadata
4863 python-pyrsistent
4864 python-typing-extensions))
4865 (home-page "https://github.com/Julian/jsonschema")
4866 (synopsis "Implementation of JSON Schema for Python")
4867 (description
4868 "Jsonschema is an implementation of JSON Schema for Python.")
4869 (license license:expat)))
4870
4871(define-public python-jsonschema-3
4872 (package
4873 (inherit python-jsonschema)
4874 (version "3.2.0")
4875 (source (origin
4876 (method url-fetch)
4877 (uri (pypi-uri "jsonschema" version))
4878 (sha256
4879 (base32
4880 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
4881 (arguments
4882 (substitute-keyword-arguments (package-arguments python-jsonschema)
4883 ((#:phases phases)
4884 #~(modify-phases #$phases
4885 (replace 'pretend-version
4886 (lambda _
4887 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))))))))
4888
4889(define-public python-schema
4890 (package
4891 (name "python-schema")
4892 (version "0.6.6")
4893 (source
4894 (origin
4895 (method url-fetch)
4896 (uri (pypi-uri "schema" version))
4897 (sha256
4898 (base32
4899 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
4900 (build-system python-build-system)
4901 (native-inputs
4902 (list python-pytest))
4903 (home-page "https://github.com/keleshev/schema")
4904 (synopsis "Simple data validation library")
4905 (description
4906 "@code{python-schema} is a library for validating Python data
4907structures, such as those obtained from config-files, forms, external
4908services or command-line parsing, converted from JSON/YAML (or
4909something else) to Python data-types.")
4910 (license license:psfl)))
4911
4912(define-public python-schema-0.5
4913 (package (inherit python-schema)
4914 (version "0.5.0")
4915 (source
4916 (origin
4917 (method url-fetch)
4918 (uri (pypi-uri "schema" version))
4919 (sha256
4920 (base32
4921 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
4922
4923(define-public python-kitchen
4924 (package
4925 (name "python-kitchen")
4926 (version "1.2.5")
4927 (source
4928 (origin
4929 (method url-fetch)
4930 (uri (pypi-uri "kitchen" version))
4931 (sha256
4932 (base32
4933 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
4934 (build-system python-build-system)
4935 (propagated-inputs
4936 (list python-chardet))
4937 (home-page "https://github.com/fedora-infra/kitchen")
4938 (synopsis "Python API for snippets")
4939 (description "@code{kitchen} module provides a python API for all sorts of
4940little useful snippets of code that everybody ends up writing for their projects
4941but never seem big enough to build an independent release. Use kitchen and stop
4942cutting and pasting that code over and over.")
4943 (license (list license:lgpl2.1+
4944 ;; subprocess.py, test_subprocess.py,
4945 ;; kitchen/pycompat25/defaultdict.py:
4946 license:psfl))))
4947
4948(define-public python-roman
4949 (package
4950 (name "python-roman")
4951 (version "3.3")
4952 (source
4953 (origin
4954 (method url-fetch)
4955 (uri (pypi-uri "roman" version))
4956 (sha256
4957 (base32
4958 "0gyp2bmw47jgpm8j64gydzqq838bgxz5gh6cm57lxlr7p26sqiic"))))
4959 (build-system python-build-system)
4960 (home-page "https://github.com/zopefoundation/roman")
4961 (synopsis "Integer to Roman numerals converter")
4962 (description
4963 "This package provides a small helper library to convert Arabic Numbers
4964to Roman Numerals.")
4965 (license license:psfl)))
4966
4967(define-public python-rollbar
4968 (package
4969 (name "python-rollbar")
4970 (version "0.16.3")
4971 (source (origin
4972 (method url-fetch)
4973 (uri (pypi-uri "rollbar" version))
4974 (sha256
4975 (base32
4976 "1qpd0j50wqli3867xmhwk65pm1cxjs60yg83mcvcf3kic3y3sc82"))))
4977 (build-system python-build-system)
4978 (native-inputs (list python-pytest-runner python-unittest2))
4979 (inputs (list python-requests python-six python-httpx python-blinker
4980 python-webob))
4981 (home-page "https://github.com/rollbar/pyrollbar")
4982 (synopsis "Notifier for exceptions, errors, and log messages to Rollbar")
4983 (description
4984 "Python SDK for reporting exceptions, errors, and log messages
4985to @url{https://rollbar.com/, Rollbar}.
4986
4987Capabilities include:
4988
4989@itemize @bullet
4990@item Sending messages and exceptions with arbitrary context
4991@item Getting back aggregates
4992@item Debugging production issues
4993@end itemize")
4994 (license license:expat)))
4995
4996(define-public python-unidecode
4997 (package
4998 (name "python-unidecode")
4999 (version "1.1.1")
5000 (source (origin
5001 (method url-fetch)
5002 (uri (pypi-uri "Unidecode" version))
5003 (sha256
5004 (base32
5005 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
5006 (build-system python-build-system)
5007 (home-page "https://pypi.org/project/Unidecode/")
5008 (synopsis "ASCII transliterations of Unicode text")
5009 (description
5010 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
5011useful when integrating with legacy code that doesn't support Unicode, or for
5012ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
5013machine identifiers from human-readable Unicode strings that should still be
5014somewhat intelligible.")
5015 (license license:gpl2+)))
5016
5017(define-public python-text-unidecode
5018 (package
5019 (name "python-text-unidecode")
5020 (version "1.3")
5021 (source (origin
5022 (method url-fetch)
5023 (uri (pypi-uri "text-unidecode" version))
5024 (sha256
5025 (base32
5026 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
5027 (build-system python-build-system)
5028 (arguments
5029 '(#:phases (modify-phases %standard-phases
5030 (replace 'check
5031 (lambda _
5032 (invoke "pytest" "-vv"))))))
5033 (native-inputs
5034 (list python-pytest))
5035 (home-page "https://github.com/kmike/text-unidecode/")
5036 (synopsis "Decode Unicode data")
5037 (description
5038 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
5039Perl library. It can create ASCII representations of Unicode data. In general
5040users should prefer the @code{python-unidecode} package which offers better
5041memory usage and transliteration quality.")
5042 ;; The user can choose either license.
5043 (license (list license:clarified-artistic license:gpl2+))))
5044
5045(define-public python-pyjwt
5046 (package
5047 (name "python-pyjwt")
5048 (version "2.6.0")
5049 (source
5050 (origin
5051 (method url-fetch)
5052 (uri (pypi-uri "PyJWT" version))
5053 (sha256
5054 (base32
5055 "1z85kwr945rbzrn5wabrsmck5x8disa9wc7b3y5gci7w65z5qa39"))))
5056 (build-system pyproject-build-system)
5057 (native-inputs
5058 (list python-coverage
5059 python-cryptography
5060 python-pytest
5061 python-sphinx
5062 python-sphinx-rtd-theme))
5063 (home-page "https://github.com/progrium/pyjwt")
5064 (synopsis "JSON Web Token implementation in Python")
5065 (description
5066 "PyJWT is a JSON Web Token implementation written in Python.")
5067 (license license:expat)))
5068
5069(define-public python-pymsgbox
5070 (package
5071 (name "python-pymsgbox")
5072 (version "1.0.6")
5073 (source
5074 (origin
5075 (method git-fetch)
5076 (uri (git-reference
5077 ;; LICENSE.txt is not present on pypi
5078 (url "https://github.com/asweigart/PyMsgBox")
5079 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
5080 (file-name (git-file-name name version))
5081 (sha256
5082 (base32
5083 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
5084 (arguments
5085 ;; Circular dependency to run tests:
5086 ;; Tests need pyautogui, which depends on pymsgbox.
5087 '(#:tests? #f))
5088 (build-system python-build-system)
5089 (home-page "https://github.com/asweigart/PyMsgBox")
5090 (synopsis "Python module for JavaScript-like message boxes")
5091 (description
5092 "PyMsgBox is a simple, cross-platform, pure Python module for
5093JavaScript-like message boxes. Types of dialog boxes include:
5094@enumerate
5095@item alert
5096@item confirm
5097@item prompt
5098@item password
5099@end enumerate
5100")
5101 (license license:bsd-3)))
5102
5103(define-public python-pympler
5104 (package
5105 (name "python-pympler")
5106 (home-page "https://pythonhosted.org/Pympler/")
5107 (version "1.0.1")
5108 (source (origin
5109 (method url-fetch)
5110 (uri (pypi-uri "Pympler" version))
5111 (sha256
5112 (base32
5113 "1ynkqpv2akldmvkll5vh5zhwj433s1d59iv0f76lygyak4silgwr"))))
5114 (build-system python-build-system)
5115 (arguments
5116 (list
5117 #:phases
5118 #~(modify-phases %standard-phases
5119 (add-after 'unpack 'skip-broken-test
5120 (lambda _
5121 ;; FIXME: This test fails for no good reason:
5122 ;; https://github.com/pympler/pympler/issues/153
5123 (substitute* "test/muppy/test_tracker.py"
5124 (("^([[:blank:]]+)def test_stracker_create_summary" all indent)
5125 (string-append indent "@unittest.skipIf(True, \
5126'Fails on Guix too for unknown reasons')\n" all))))))))
5127 (synopsis "Measure, monitor and analyze memory behavior")
5128 (description
5129 "Pympler is a development tool to measure, monitor and analyze
5130the memory behavior of Python objects in a running Python application.
5131
5132By pympling a Python application, detailed insight in the size and the
5133lifetime of Python objects can be obtained. Undesirable or unexpected
5134runtime behavior like memory bloat and other @samp{pymples} can easily
5135be identified.
5136
5137A web profiling frontend exposes process statistics, garbage
5138visualisation and class tracker statistics.")
5139 (license license:asl2.0)))
5140
5141(define-public python-itsdangerous
5142 (package
5143 (name "python-itsdangerous")
5144 (version "2.0.1")
5145 (source
5146 (origin
5147 (method url-fetch)
5148 (uri (pypi-uri "itsdangerous" version))
5149 (sha256
5150 (base32
5151 "1w6gfb2zhbcmrfj6digwzw1z68w6zg1q87rm6la2m412zil4swly"))))
5152 (build-system python-build-system)
5153 (home-page "https://palletsprojects.com/p/itsdangerous/")
5154 (synopsis "Python library for passing data to/from untrusted environments")
5155 (description
5156 "Itsdangerous provides various helpers to pass trusted data to untrusted
5157environments and back.")
5158 (license license:bsd-3)))
5159
5160(define-public python-pyyaml
5161 (package
5162 (name "python-pyyaml")
5163 (version "6.0")
5164 (source
5165 (origin
5166 (method url-fetch)
5167 (uri (pypi-uri "PyYAML" version))
5168 (sha256
5169 (base32
5170 "18imkjacvpxfgg1lbpraqywx3j7hr5dv99d242byqvrh2jf53yv8"))))
5171 (build-system python-build-system)
5172 (inputs
5173 (list libyaml python-cython))
5174 (home-page "https://pyyaml.org")
5175 (synopsis "YAML parser and emitter for Python")
5176 (description
5177 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
5178complete YAML 1.1 parser, Unicode support, pickle support, capable extension
5179API, and sensible error messages. PyYAML supports standard YAML tags and
5180provides Python-specific tags that represent an arbitrary Python object.")
5181 (license license:expat)))
5182
5183(define-public python-pyyaml-5
5184 (package
5185 (inherit python-pyyaml)
5186 (version "5.4.1")
5187 (source
5188 (origin
5189 (method url-fetch)
5190 (uri (pypi-uri "PyYAML" version))
5191 (sha256
5192 (base32
5193 "0pm440pmpvgv5rbbnm8hk4qga5a292kvlm1bh3x2nwr8pb5p8xv0"))))))
5194
5195(define-public python-vine
5196 (package
5197 (name "python-vine")
5198 (version "5.0.0")
5199 (source
5200 (origin
5201 (method url-fetch)
5202 (uri (pypi-uri "vine" version))
5203 (sha256
5204 (base32 "0zk3pm0g7s4qfn0gk28lfmsyplvisaxi6826cgpq5njkm4j1cfvx"))))
5205 (build-system python-build-system)
5206 (native-inputs
5207 (list python-pytest python-case))
5208 (home-page "https://github.com/celery/vine")
5209 (synopsis "Promises for Python")
5210 (description
5211 "@code{vine} provides a special implementation of promises in that it can
5212be used both for \"promise of a value\" and lazy evaluation. The biggest
5213upside for this is that everything in a promise can also be a promise,
5214e.g. filters, callbacks and errbacks can all be promises.")
5215 (license license:bsd-3)))
5216
5217(define-public python-virtualenv
5218 (package
5219 (name "python-virtualenv")
5220 (version "20.3.1")
5221 (source
5222 (origin
5223 (method url-fetch)
5224 (uri (pypi-uri "virtualenv" version))
5225 (sha256
5226 (base32
5227 "1nbhnpzswcf3lmzn5xabmfdd7ki8r2w2i37y6wml54di6qi1l48c"))))
5228 (build-system python-build-system)
5229 (native-inputs
5230 (list python-mock python-pytest python-setuptools-scm))
5231 (propagated-inputs
5232 (list python-appdirs python-distlib python-filelock python-six))
5233 (home-page "https://virtualenv.pypa.io/")
5234 (synopsis "Virtual Python environment builder")
5235 (description
5236 "Virtualenv is a tool to create isolated Python environments.")
5237 (license license:expat)))
5238
5239(define-public python-crossenv
5240 (package
5241 (name "python-crossenv")
5242 (version "1.3.0")
5243 (source
5244 (origin
5245 (method url-fetch)
5246 (uri (pypi-uri "crossenv" version))
5247 (sha256
5248 (base32
5249 "07rv4650n19740ixmnsf4qbxyqlgi7f5m1cy8cq0gl01q3r6hps4"))))
5250 (build-system python-build-system)
5251 (arguments
5252 (list #:tests? #f)) ; tests not distributed on pypi
5253 (home-page "https://github.com/benfogle/virtualenv")
5254 (synopsis "Cross-compiling virtualenv for Python")
5255 (description "This package is a tool for cross-compiling extension
5256modules. It creates a special virtual environment such that @command{pip} or
5257@file{setup.py} will cross compile packages for you, usually with no further
5258work on your part.")
5259 (license license:expat)))
5260
5261(define-public python-virtualenv-clone
5262 (package
5263 (name "python-virtualenv-clone")
5264 (version "0.5.7")
5265 (source (origin
5266 (method git-fetch)
5267 (uri (git-reference
5268 (url "https://github.com/edwardgeorge/virtualenv-clone")
5269 (commit version)))
5270 (file-name (git-file-name name version))
5271 (sha256
5272 (base32
5273 "0p0d1y3axvjfnxlgwjx2374gikc8bmc82g0m7yashihbikh7pcxa"))))
5274 (build-system python-build-system)
5275 (arguments
5276 (list #:phases #~(modify-phases %standard-phases
5277 (replace 'check
5278 (lambda* (#:key tests? #:allow-other-keys)
5279 (when tests?
5280 (delete-file "tox.ini")
5281 (invoke "pytest" "-vvv" "tests")))))))
5282 (native-inputs (list python-pytest
5283 python-tox
5284 python-virtualenv
5285 python-coverage
5286 python-wheel
5287 python-tomli
5288 python-hypothesis))
5289 (home-page "https://github.com/edwardgeorge/virtualenv-clone")
5290 (synopsis "Clone a non-relocatable virtualenv cleanly")
5291 (description
5292 "Clone non-relocatable virtualenvs without breaking site-packages.")
5293 (license license:expat)))
5294
5295(define-public python-uc-micro-py
5296 (package
5297 (name "python-uc-micro-py")
5298 (version "1.0.1")
5299 (source (origin
5300 (method git-fetch) ;for tests
5301 (uri (git-reference
5302 (url "https://github.com/tsutsu3/uc.micro-py")
5303 (commit (string-append "v" version))))
5304 (file-name (git-file-name name version))
5305 (sha256
5306 (base32
5307 "17f55gi55rg47nm88fn3f8851ph03dgykdp011lxr3j6hk18lyfv"))))
5308 (build-system pyproject-build-system)
5309 (native-inputs (list python-pytest))
5310 (home-page "https://github.com/tsutsu3/uc.micro-py")
5311 (synopsis "Unicode data files for linkify-it-py projects")
5312 (description "This package contains a micro subset of Unicode data files
5313for linkify-it-py projects.")
5314 (license license:expat)))
5315
5316(define-public python-linkify-it-py
5317 (package
5318 (name "python-linkify-it-py")
5319 (version "2.0.0")
5320 (source (origin
5321 (method git-fetch) ;for tests
5322 (uri (git-reference
5323 (url "https://github.com/tsutsu3/linkify-it-py")
5324 (commit (string-append "v" version))))
5325 (file-name (git-file-name name version))
5326 (sha256
5327 (base32
5328 "0fg0a1lc8xbb62y9krxcp708ll58dxcwm8i7rrwpkd5sh2229f6x"))))
5329 (build-system pyproject-build-system)
5330 (propagated-inputs (list python-uc-micro-py))
5331 (native-inputs (list python-pytest))
5332 (home-page "https://github.com/tsutsu3/linkify-it-py")
5333 (synopsis "Links recognition library with full Unicode support")
5334 (description "This is Python port of
5335@url{https://github.com/markdown-it/linkify-it, linkify-it}, which is a links
5336recognition library with full Unicode support. It has features like:
5337@itemize
5338@item Full unicode support, with @i{astral} characters
5339@item International domains support
5340@item Allows rules extension and custom normalizers.
5341@end itemize")
5342 (license license:expat)))
5343
5344(define-public python-makefun
5345 (package
5346 (name "python-makefun")
5347 (version "1.15.1")
5348 (source (origin
5349 (method url-fetch)
5350 (uri (pypi-uri "makefun" version))
5351 (sha256
5352 (base32
5353 "19a8dga8rnmjn5gy1cy1wdi28swbkdkypwbqikbxil6ynqcg3c20"))))
5354 (build-system pyproject-build-system)
5355 (native-inputs
5356 (list python-pytest python-setuptools-scm))
5357 (home-page "https://github.com/smarie/python-makefun")
5358 (synopsis "Library to dynamically create python functions")
5359 (description "@code{makefun} helps create functions dynamically with a
5360given signature. It was largely inspired by @code{python-decorator} and
5361@code{functools}.")
5362 (license license:bsd-3)))
5363
5364(define-public python-markdown-it-py
5365 (package
5366 (name "python-markdown-it-py")
5367 (version "2.1.0")
5368 (source (origin
5369 (method url-fetch)
5370 (uri (pypi-uri "markdown-it-py" version))
5371 (sha256
5372 (base32
5373 "1nh75i72584r70alhqc479gys04s5m5g3vq601yf2njbs7z5jzng"))))
5374 (build-system pyproject-build-system)
5375 (arguments (list #:tests? #f)) ;pypi source does not contains tests
5376 (native-inputs (list python-flit))
5377 (propagated-inputs
5378 (list python-mdurl
5379 python-typing-extensions))
5380 (home-page "https://github.com/executablebooks/markdown-it-py")
5381 (synopsis "Python port of markdown-it")
5382 (description
5383 "This is a Python port of @code{markdown-it}, and some of its associated
5384plugins. The driving design philosophy of the port has been to change as
5385little of the fundamental code structure (file names, function name, etc) as
5386possible.")
5387 (license license:expat)))
5388
5389(define-public python-markupsafe
5390 (package
5391 (name "python-markupsafe")
5392 (version "2.1.1")
5393 (source
5394 (origin
5395 (method url-fetch)
5396 (uri (pypi-uri "MarkupSafe" version))
5397 (sha256
5398 (base32
5399 "0jqxp5sfrc0byp6bk0gwdmildi4mck2gprp42afri3z4r5y1k4bz"))))
5400 (build-system python-build-system)
5401 (arguments
5402 `(#:phases (modify-phases %standard-phases
5403 (replace 'check
5404 (lambda* (#:key tests? #:allow-other-keys)
5405 (when tests?
5406 (invoke "pytest" "-vv")))))))
5407 (native-inputs
5408 (list python-pytest))
5409 (home-page "https://github.com/mitsuhiko/markupsafe")
5410 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
5411 (description
5412 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
5413for Python.")
5414 (license license:bsd-3)))
5415
5416
5417(define-public python-jinja2
5418 (package
5419 (name "python-jinja2")
5420 (version "3.1.1")
5421 (source
5422 (origin
5423 (method url-fetch)
5424 (uri (pypi-uri "Jinja2" version))
5425 (sha256
5426 (base32
5427 "1saawzys14l1p4kafs7hkihmnvqjq8fwxjmkjiqx3jq1nm5ys2v4"))))
5428 (build-system python-build-system)
5429 (arguments
5430 '(#:phases (modify-phases %standard-phases
5431 (replace 'check
5432 (lambda* (#:key tests? #:allow-other-keys)
5433 (if tests?
5434 (invoke "pytest" "-vv")
5435 (format #t "test suite not run~%")))))))
5436 (native-inputs (list python-pytest))
5437 (propagated-inputs (list python-markupsafe))
5438 (home-page "https://jinja.palletsprojects.com/")
5439 (synopsis "Python template engine")
5440 (description
5441 "Jinja2 is a small but fast and easy to use stand-alone template engine
5442written in pure Python.")
5443 (license license:bsd-3)))
5444
5445
5446(define-public python-jinja2-time
5447 (package
5448 (name "python-jinja2-time")
5449 (version "0.2.0")
5450 (source
5451 (origin
5452 (method url-fetch)
5453 (uri (pypi-uri "jinja2-time" version))
5454 (sha256
5455 (base32
5456 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
5457 (build-system python-build-system)
5458 (propagated-inputs
5459 (list python-arrow python-jinja2))
5460 (home-page
5461 "https://github.com/hackebrot/jinja2-time")
5462 (synopsis "Jinja2 Extension for Dates and Times")
5463 (description
5464 "This package provides an extension for the template engine Jinja2. It
5465adds a 'now' tag providing a convenient access to the arrow.now() API from
5466templates. A format string can be provided to control the output.")
5467 (license license:expat)))
5468
5469(define-public python-pysdl2
5470 (package
5471 (name "python-pysdl2")
5472 (version "0.9.11")
5473 (source (origin
5474 (method url-fetch)
5475 (uri (pypi-uri "PySDL2" version))
5476 (sha256
5477 (base32
5478 "19id1qswgcj4v4j5kn49shq1xxx3slhjpm0102w87mczsdbi1rck"))))
5479 (build-system python-build-system)
5480 (arguments
5481 (list #:tests? #f ;; Requires /dev/dri, OpenGL module, etc.
5482 #:phases
5483 #~(modify-phases %standard-phases
5484 (add-after 'unpack 'patch-paths
5485 (lambda* (#:key inputs #:allow-other-keys)
5486 (substitute* "sdl2/dll.py"
5487 ;; Disable pysdl2-dll. It can't be packaged on GNU Guix
5488 ;; as it duplicates an existing package (sdl2).
5489 (("prepath = os\\.getenv\\('PYSDL2_DLL_PATH'\\)")
5490 "prepath = \"system\"")
5491 (("^import sdl2dll$") "")
5492 (("postpath = os\\.getenv\\('PYSDL2_DLL_PATH'\\)")
5493 "postpath = \"system\"")
5494 (("DLL\\(.*, os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)\\)")
5495 (string-append
5496 "DLL(\"SDL2\", [\"SDL2\", \"SDL2-2.0\", \"SDL2-2.0.0\"], \""
5497 (dirname (search-input-file inputs "/lib/libSDL2.so"))
5498 "\")")))
5499 (substitute* "sdl2/sdlimage.py"
5500 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
5501 (string-append
5502 "\""
5503 (dirname (search-input-file inputs "/lib/libSDL2_image.so"))
5504 "\"")))
5505 (substitute* "sdl2/sdlgfx.py"
5506 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
5507 (string-append
5508 "\""
5509 (dirname (search-input-file inputs "/lib/libSDL2_gfx.so"))
5510 "\"")))
5511 (substitute* "sdl2/sdlmixer.py"
5512 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
5513 (string-append
5514 "\""
5515 (dirname (search-input-file inputs "/lib/libSDL2_mixer.so"))
5516 "\"")))
5517 (substitute* "sdl2/sdlttf.py"
5518 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
5519 (string-append
5520 "\""
5521 (dirname (search-input-file inputs "/lib/libSDL2_ttf.so"))
5522 "\""))))))))
5523 (inputs
5524 (list sdl2 sdl2-image sdl2-gfx sdl2-mixer sdl2-ttf))
5525 (home-page "https://github.com/py-sdl/py-sdl2")
5526 (synopsis "Python bindings around the SDL2 game development library")
5527 (description "PySDL2 is a pure Python wrapper around the @code{SDL2},
5528@code{SDL2_mixer}, @code{SDL2_image}, @code{SDL2_ttf}, and @code{SDL2_gfx}
5529libraries. Instead of relying on C code, it uses the built-in ctypes module
5530to interface with SDL2, and provides simple Python classes and wrappers for
5531common SDL2 functionality.")
5532 (license license:cc0)))
5533
5534(define-public python-pystache
5535 (package
5536 (name "python-pystache")
5537 (version "0.6.0")
5538 (source (origin
5539 (method url-fetch)
5540 (uri (pypi-uri "pystache" version))
5541 (sha256
5542 (base32
5543 "03a73ppf5vxnsk6az5ackvc0hp6xqv2f4hi1s5c4nk4s2jr95gwk"))))
5544 (build-system python-build-system)
5545 (arguments
5546 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
5547 (home-page "http://defunkt.io/pystache/")
5548 (synopsis "Python logic-less template engine")
5549 (description
5550 "Pystache is a Python implementation of the framework agnostic,
5551logic-free templating system Mustache.")
5552 (license license:expat)))
5553
5554(define-public python-pystitcher
5555 (package
5556 (name "python-pystitcher")
5557 (version "1.0.4")
5558 (source
5559 (origin
5560 (method git-fetch)
5561 (uri
5562 (git-reference
5563 (url "https://github.com/captn3m0/pystitcher")
5564 (commit
5565 (string-append "v" version))))
5566 (file-name
5567 (git-file-name name version))
5568 (sha256
5569 (base32 "03yrzqhcsjdj5zprrk3bh5bbyqfy3vfhxra9974vmkir3m121394"))))
5570 (build-system python-build-system)
5571 (inputs
5572 (list python-html5lib python-importlib-metadata python-markdown
5573 python-pypdf3 python-validators))
5574 (home-page "https://github.com/captn3m0/pystitcher")
5575 (synopsis "Declaratively stitch together a PDF file from multiple sources")
5576 (description
5577 "This package stitches your PDF files together, generating customizable
5578bookmarks using a declarative input in the form of a markdown file.")
5579 (license license:expat)))
5580
5581(define-public python-joblib
5582 (package
5583 (name "python-joblib")
5584 (version "1.1.1")
5585 (source (origin
5586 (method url-fetch)
5587 (uri (pypi-uri "joblib" version))
5588 (sha256
5589 (base32
5590 "0019p280s2k941mihl67l7y6amwx86639xp3zvpsg1lmyish67rh"))))
5591 (build-system python-build-system)
5592 (arguments
5593 `(#:phases
5594 (modify-phases %standard-phases
5595 (replace 'check
5596 (lambda* (#:key tests? #:allow-other-keys)
5597 (when tests?
5598 (setenv "JOBLIB_MULTIPROCESSING" "0")
5599 (invoke "pytest" "-v" "joblib"
5600 ;; We disable this test to avoid having to depend on ipython/jupyter
5601 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))))))
5602 (native-inputs
5603 (list python-pytest))
5604 (home-page "https://joblib.readthedocs.io/")
5605 (synopsis "Using Python functions as pipeline jobs")
5606 (description
5607 "Joblib is a set of tools to provide lightweight pipelining in Python.
5608In particular, joblib offers: transparent disk-caching of the output values
5609and lazy re-evaluation (memoize pattern), easy simple parallel computing
5610logging and tracing of the execution.")
5611 (license license:bsd-3)))
5612
5613
5614(define-public python-daemon
5615 (package
5616 (name "python-daemon")
5617 (version "2.3.0")
5618 (source
5619 (origin
5620 (method url-fetch)
5621 (uri (pypi-uri "python-daemon" version))
5622 (sha256
5623 (base32
5624 "1bxfn2bq56sd4w0nm9mqy8y0905m7fc8vmhnjxlrf49vcbqr7adx"))))
5625 (build-system python-build-system)
5626 (arguments
5627 `(#:phases
5628 (modify-phases %standard-phases
5629 (add-before 'check 'adjust-tests
5630 (lambda _
5631 ;; Drop use of testtools.helpers.safe_hasattr which has
5632 ;; been removed in favor of hasattr.
5633 (substitute* "test/test_metadata.py"
5634 (("testtools\\.helpers\\.safe_hasattr")
5635 "hasattr"))
5636 ;; FIXME: Determine why test fails
5637 (substitute* "test/test_daemon.py"
5638 (("test_detaches_process_context")
5639 "skip_test_detaches_process_context")))))))
5640 (propagated-inputs
5641 (list python-lockfile))
5642 (native-inputs
5643 (list python-coverage
5644 python-testtools
5645 python-testscenarios
5646 python-twine
5647 python-mock
5648 python-docutils))
5649 (home-page "https://pagure.io/python-daemon/")
5650 (synopsis "Python library for making a Unix daemon process")
5651 (description "Python-daemon is a library that assists a Python program to
5652turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
5653
5654This library provides a @code{DaemonContext} class that manages the following
5655important tasks for becoming a daemon process:
5656@enumerate
5657@item Detach the process into its own process group.
5658@item Set process environment appropriate for running inside a chroot.
5659@item Renounce suid and sgid privileges.
5660@item Close all open file descriptors.
5661@item Change the working directory, uid, gid, and umask.
5662@item Set appropriate signal handlers.
5663@item Open new file descriptors for stdin, stdout, and stderr.
5664@item Manage a specified PID lock file.
5665@item Register cleanup functions for at-exit processing.
5666@end enumerate")
5667 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
5668 (license (list license:asl2.0 license:gpl3+))))
5669
5670(define-public python-anytree
5671 (package
5672 (name "python-anytree")
5673 (version "2.8.0")
5674 (source (origin
5675 (method url-fetch)
5676 (uri (pypi-uri "anytree" version))
5677 (sha256
5678 (base32
5679 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
5680 (build-system python-build-system)
5681 (propagated-inputs
5682 (list python-six))
5683 (native-inputs
5684 (list ;; For tests.
5685 graphviz ;for 'dot'
5686 python-nose))
5687 (home-page "https://github.com/c0fec0de/anytree")
5688 (synopsis "Lightweight tree data library")
5689 (description
5690 "@code{anytree} is a simple, lightweight, and extensible tree data
5691structure for Python.")
5692 (license license:asl2.0)))
5693
5694(define-public autokey
5695 (package
5696 (name "autokey")
5697 (version "0.96.0")
5698 (source (origin
5699 (method git-fetch)
5700 (uri (git-reference
5701 (url "https://github.com/autokey/autokey")
5702 (commit (string-append "v" version))))
5703 (file-name (git-file-name name version))
5704 (sha256
5705 (base32
5706 "1v19196swihc12bcg0d9s07gfc3a44b9y7g6rqhb82qxm4p8jmbp"))
5707 (modules '((guix build utils)))
5708 (snippet
5709 #~(begin
5710 ;; XXX: skip test depending on .git/
5711 (delete-file "tests/test_common.py")))))
5712 (build-system pyproject-build-system)
5713 (arguments
5714 (list
5715 #:phases
5716 #~(modify-phases %standard-phases
5717 ;; Use 'prefix' instead of '=' to allow the user to use additional
5718 ;; GI paths from their autokey scripts. GUIX_PYTHONPATH is already
5719 ;; wrapped with prefix in python-build-system's wrap.
5720 (add-before 'wrap 'wrap-autokey
5721 (lambda* (#:key inputs #:allow-other-keys)
5722 (let ((gi-typelib-path (getenv "GI_TYPELIB_PATH"))
5723 (path (map dirname
5724 ;; see lib/autokey/UI_common_functions.py
5725 (list (search-input-file inputs "/bin/wmctrl")
5726 (search-input-file inputs "/bin/zenity")
5727 (search-input-file inputs "/bin/ipython3")
5728 (search-input-file inputs "/bin/python3")))))
5729 (for-each
5730 (lambda (program)
5731 (wrap-program program
5732 `("PATH" ":" prefix ,path)
5733 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
5734 (map (lambda (name)
5735 (string-append #$output "/bin/" name))
5736 '("autokey-gtk"
5737 "autokey-shell"))))))
5738 (add-before 'check 'setup-env-vars
5739 (lambda _
5740 ;; tests/test_macro.py wants LANG set
5741 (setenv "LANG" "")
5742 ;; required for tests/test_configmanager.py
5743 (setenv "HOME" "/tmp"))))))
5744 (native-inputs (list python-pytest python-pytest-cov python-pyhamcrest))
5745 (inputs
5746 (list bash-minimal ; for wrap-program
5747 gtksourceview-3
5748 libappindicator
5749 libnotify
5750 python-dbus
5751 python-ipython
5752 python-pygobject
5753 python-pyinotify
5754 python-pyqt+qscintilla
5755 python-xlib
5756 wmctrl
5757 zenity))
5758 (home-page "https://github.com/autokey/autokey")
5759 (synopsis
5760 "Keyboard and GUI automation utility")
5761 (description
5762 "AutoKey is a desktop automation utility for X11. It allows the automation of
5763virtually any task by responding to typed abbreviations and hotkeys. It
5764offers a full-featured GUI (GTK and QT versions) that makes it highly
5765accessible for novices, as well as a scripting interface offering the full
5766flexibility and power of the Python language.")
5767 (license license:gpl3+)))
5768
5769(define-public python-dm-tree
5770 (package
5771 (name "python-dm-tree")
5772 (version "0.1.7")
5773 (source (origin
5774 (method url-fetch)
5775 (uri (pypi-uri "dm-tree" version))
5776 (sha256
5777 (base32 "0apxfxgmqh22qpk92zmmf3acqkavhwxz78lnwz026a5rlnncizih"))))
5778 (build-system python-build-system)
5779 (inputs (list pybind11 abseil-cpp python))
5780 (propagated-inputs (list python-wheel
5781 python-absl-py
5782 python-attrs
5783 python-numpy
5784 python-wrapt))
5785 (arguments
5786 (list #:tests? #f
5787 #:phases
5788 #~(modify-phases %standard-phases
5789 (add-before 'build 'build-shared-lib
5790 (lambda _
5791 (let* ((pybind11 #$(this-package-input "pybind11"))
5792 (python #$(this-package-input "python"))
5793 (version (python-version python))
5794 (abseil-cpp #$(this-package-input "abseil-cpp")))
5795 ;; Delete default cmake build.
5796 (substitute* "setup.py"
5797 (("ext_modules.*") "")
5798 (("cmdclass.*") ""))
5799 ;; Actual build phase.
5800 (mkdir-p "build/temp/tree/")
5801 (invoke
5802 "gcc" "-pthread" "-Wno-unused-result" "-Wsign-compare"
5803 "-DNDEBUG" "-g" "-fwrapv" "-O3" "-Wall"
5804 "-fno-semantic-interposition" "-fPIC"
5805 "-I" (string-append pybind11
5806 "/lib/python" version
5807 "/site-packages/pybind11/include")
5808 "-I" (string-append python "/include/python"
5809 version)
5810 "-I" (string-append abseil-cpp "/include")
5811 "-c" "tree/tree.cc"
5812 "-o" "build/temp/tree/tree.o"
5813 "-fvisibility=hidden" "-g0")
5814 (mkdir-p "build/lib/tree")
5815 (invoke
5816 "g++" "-pthread" "-shared"
5817 (string-append "-Wl," "-rpath=" python "/lib")
5818 "-fno-semantic-interposition"
5819 "build/temp/tree/tree.o"
5820 "-L" (string-append python "/lib")
5821 "-L" (string-append abseil-cpp "/lib")
5822 "-l" "absl_int128"
5823 "-l" "absl_raw_hash_set"
5824 "-l" "absl_raw_logging_internal"
5825 "-l" "absl_strings"
5826 "-l" "absl_throw_delegate"
5827 "-o" "build/lib/tree/_tree.so")))))))
5828 (home-page "https://github.com/deepmind/tree")
5829 (synopsis "Work with nested data structures in Python")
5830 (description "Tree is a python library for working with nested data
5831structures. In a way, @code{tree} generalizes the builtin @code{map} function
5832which only supports flat sequences, and allows you to apply a function to each
5833leaf preserving the overall structure.")
5834 (license license:asl2.0)))
5835
5836(define-public python-pyment
5837 (package
5838 (name "python-pyment")
5839 (version "0.3.4")
5840 (source
5841 (origin
5842 (method git-fetch)
5843 (uri
5844 (git-reference
5845 (url "https://github.com/dadadel/pyment")
5846 (commit (string-append "v" version))))
5847 (file-name (git-file-name name version))
5848 (sha256
5849 (base32 "0gbx9wmqsxdx85v5sg79lv2zxmy16j5dwi8bip07i1nyvzc5gvn0"))))
5850 (build-system python-build-system)
5851 (native-inputs (list python-pytest))
5852 (home-page "https://github.com/dadadel/pyment/")
5853 (synopsis "Convert Python docstrings automatically")
5854 (description "Pyment is a command line tool and library that can be
5855used to convert between several docstring styles.")
5856 (license license:gpl3+)))
5857
5858(define-public python-docstring-parser
5859 (package
5860 (name "python-docstring-parser")
5861 (version "0.15")
5862 (source (origin
5863 (method url-fetch)
5864 (uri (pypi-uri "docstring_parser" version))
5865 (sha256
5866 (base32
5867 "10pnbg2q0ic1h6pwbyhhqd075fv67sq07k3gjncmi1mix29w1pa8"))))
5868 (build-system pyproject-build-system)
5869 (native-inputs (list python-poetry-core python-pytest))
5870 (home-page "https://github.com/rr-/docstring_parser")
5871 (synopsis "Parse Python docstrings in reST, Google and Numpydoc format")
5872 (description "This package lets you parse Python docstrings in reST,
5873Google and Numpydoc format.")
5874 (license license:expat)))
5875
5876(define-public python-docutils
5877 (package
5878 (name "python-docutils")
5879 (version "0.19")
5880 (source (origin
5881 (method url-fetch)
5882 (uri (pypi-uri "docutils" version))
5883 (sha256
5884 (base32
5885 "1rprvir116g5rz2bgzkzgyn6mv0z8582rz7bgxbpy2y3adkmm69k"))))
5886 (build-system python-build-system)
5887 (arguments
5888 '(#:phases (modify-phases %standard-phases
5889 (replace 'check
5890 (lambda* (#:key tests? #:allow-other-keys)
5891 (if tests?
5892 (invoke "python" "test/alltests.py")
5893 (format #t "test suite not run~%")))))))
5894 (home-page "https://docutils.sourceforge.net/")
5895 (synopsis "Python Documentation Utilities")
5896 (description
5897 "Docutils is a modular system for processing documentation into useful
5898formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
5899easy to use markup language, for input.
5900
5901This package provides tools for converting @file{.rst} files to other formats
5902via commands such as @command{rst2man}, as well as supporting Python code.")
5903 ;; Most of the source code is public domain, but some source files are
5904 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
5905 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
5906
5907;; awscli refuses to be built with docutils < 0.16.
5908(define-public python-docutils-0.15
5909 (package
5910 (inherit python-docutils)
5911 (version "0.15")
5912 (source (origin
5913 (method url-fetch)
5914 (uri (pypi-uri "docutils" version))
5915 (sha256
5916 (base32
5917 "0ja8q6mdj6xv62jjw3phv8j5nfqi5x8hnfy4pqfcjcgz4b34k8sl"))))
5918 ;; tests contain Python 2 syntax.
5919 (arguments '(#:tests? #false))
5920 (native-inputs
5921 (list python-setuptools-57))))
5922
5923(define-public python-docx
5924 (package
5925 (name "python-docx")
5926 (version "0.8.11")
5927 (source (origin
5928 (method url-fetch)
5929 (uri (pypi-uri "python-docx" version))
5930 (sha256
5931 (base32
5932 "1i7bxghb7knlyjain101qg1jmmz2b6qj03bi3vfxhvcml0rx418i"))))
5933 (build-system pyproject-build-system)
5934 (native-inputs
5935 (list behave
5936 python-flake8
5937 python-mock
5938 python-pyparsing
5939 python-pytest))
5940 (propagated-inputs
5941 (list python-lxml))
5942 (home-page "https://github.com/python-openxml/python-docx/")
5943 (synopsis "Python library to create and modify Microsoft Word documents")
5944 (description "This Python library can be used to create and update
5945Microsoft Word (.docx) documents.")
5946 (license license:expat)))
5947
5948(define-public python-restructuredtext-lint
5949 (package
5950 (name "python-restructuredtext-lint")
5951 (version "1.3.0")
5952 (source
5953 (origin
5954 (method url-fetch)
5955 (uri (pypi-uri "restructuredtext-lint" version))
5956 (sha256
5957 (base32
5958 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
5959 (build-system python-build-system)
5960 (arguments
5961 `(#:phases
5962 (modify-phases %standard-phases
5963 (delete 'check)
5964 (add-after 'install 'check
5965 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5966 (when tests?
5967 (add-installed-pythonpath inputs outputs)
5968 (invoke "nosetests" "-v"))
5969 #t)))))
5970 (propagated-inputs
5971 (list python-docutils))
5972 (native-inputs
5973 (list python-nose))
5974 (home-page "https://github.com/twolfson/restructuredtext-lint")
5975 (synopsis "reStructuredText linter")
5976 (description "This package provides a linter for the reStructuredText
5977format.")
5978 (license license:unlicense)))
5979
5980(define-public python-click-repl
5981 (package
5982 (name "python-click-repl")
5983 (version "0.2.0")
5984 (source
5985 (origin
5986 (method git-fetch) ; no tests in PyPI release
5987 (uri (git-reference
5988 (url "https://github.com/click-contrib/click-repl")
5989 (commit version)))
5990 (file-name (git-file-name name version))
5991 (sha256
5992 (base32 "16ybsnwlj2jlqcfxflky8jz7i3nhrd3f6mvkpgs95618l8lx994i"))))
5993 (build-system python-build-system)
5994 (arguments
5995 `(#:phases
5996 (modify-phases %standard-phases
5997 (replace 'check
5998 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5999 (when tests?
6000 (add-installed-pythonpath inputs outputs)
6001 (invoke "python" "-m" "pytest")))))))
6002 (native-inputs
6003 (list python-pytest))
6004 (propagated-inputs
6005 (list python-click python-prompt-toolkit python-six))
6006 (home-page "https://github.com/untitaker/click-repl")
6007 (synopsis "REPL plugin for Click")
6008 (description "This package provides a REPL plugin for Click.")
6009 (license license:expat)))
6010
6011(define-public python-doc8
6012 (package
6013 (name "python-doc8")
6014 (version "0.8.0")
6015 (source
6016 (origin
6017 (method url-fetch)
6018 (uri (pypi-uri "doc8" version))
6019 (sha256
6020 (base32
6021 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
6022 (build-system python-build-system)
6023 (arguments
6024 `(#:phases
6025 (modify-phases %standard-phases
6026 (delete 'check)
6027 (add-after 'install 'check
6028 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6029 (when tests?
6030 (add-installed-pythonpath inputs outputs)
6031 (invoke "pytest" "-v"))
6032 #t)))))
6033 (propagated-inputs
6034 (list python-chardet python-docutils python-restructuredtext-lint
6035 python-six python-stevedore))
6036 (native-inputs
6037 (list python-testtools python-pytest))
6038 (home-page "https://launchpad.net/doc8")
6039 (synopsis
6040 "Style checker for Sphinx (or other) RST documentation")
6041 (description
6042 "Doc8 is an opinionated style checker for reStructured Text and plain
6043text styles of documentation.")
6044 (license license:asl2.0)))
6045
6046(define-public python-pygments
6047 (package
6048 (name "python-pygments")
6049 (version "2.12.0")
6050 (source
6051 (origin
6052 (method url-fetch)
6053 (uri (pypi-uri "Pygments" version))
6054 (sha256
6055 (base32
6056 "1sr6iqh21xi6p8aba4wa9pqfhjbbpcvn9jcsx0ggy4lniw8idcay"))))
6057 (build-system python-build-system)
6058 (arguments
6059 ;; FIXME: Tests require sphinx, which depends on this.
6060 '(#:tests? #f))
6061 (home-page "https://pygments.org/")
6062 (synopsis "Syntax highlighting")
6063 (description
6064 "Pygments is a syntax highlighting package written in Python.")
6065 (license license:bsd-2)))
6066
6067(define-public python-pygments-github-lexers
6068 (package
6069 (name "python-pygments-github-lexers")
6070 (version "0.0.5")
6071 (source
6072 (origin
6073 (method url-fetch)
6074 (uri (pypi-uri "pygments-github-lexers" version))
6075 (sha256
6076 (base32
6077 "0cz14clcc9z4pn79ll8hp3xzgsrfjscak5zfsvlgrz6ngkkmgjma"))))
6078 (build-system python-build-system)
6079 (propagated-inputs
6080 (list python-pygments))
6081 (home-page "https://github.com/liluo/pygments-github-lexers")
6082 (synopsis "Pygments Github custom lexers")
6083 (description "This package installs Github custom lexers to Pygments.")
6084 (license license:bsd-3)))
6085
6086(define-public python-pygtrie
6087 (package
6088 (name "python-pygtrie")
6089 (version "2.5.0")
6090 (source (origin
6091 (method url-fetch)
6092 (uri (pypi-uri "pygtrie" version))
6093 (sha256
6094 (base32
6095 "1qm4xdmzd4q5pc9h5gjdpr5m7lg06k8dvqnjn7d07d3fhani8d90"))))
6096 (build-system pyproject-build-system)
6097 (home-page "https://github.com/mina86/pygtrie")
6098 (synopsis "Pure Python trie data structure implementation")
6099 (description
6100 "This package provides a pure Python trie data structure implementation.")
6101 (license license:asl2.0)))
6102
6103(define-public python-bump2version
6104 (package
6105 (name "python-bump2version")
6106 (version "1.0.1")
6107 (source
6108 (origin
6109 (method url-fetch)
6110 (uri (pypi-uri "bump2version" version))
6111 (sha256
6112 (base32 "1rinm4gv1fyh7xjv3v6r1p3zh5kl4ry2qifz5f7frx31mnzv4b3n"))))
6113 (build-system python-build-system)
6114 (arguments
6115 ;; XXX: Tests fail with "bumpversion: error: the following arguments are
6116 ;; required: --new-version".
6117 `(#:tests? #false))
6118 (home-page "https://github.com/c4urself/bump2version")
6119 (synopsis "Version-bump your software with a single command!")
6120 (description
6121 "This package provides a small command line tool to simplify releasing
6122software by updating all version strings in your source code by the correct
6123increment. It also creates commits and tags.")
6124 (license license:expat)))
6125
6126(define-public python-bumpversion
6127 (package
6128 (name "python-bumpversion")
6129 (version "0.5.3")
6130 (source
6131 (origin
6132 (method url-fetch)
6133 (uri (pypi-uri "bumpversion" version))
6134 (sha256
6135 (base32
6136 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
6137 (build-system python-build-system)
6138 (home-page "https://github.com/peritus/bumpversion")
6139 (synopsis "Tool to bump software version")
6140 (description "This tool provides a command-line interface (CLI) to bump a
6141software version simply.")
6142 (license license:expat)))
6143
6144(define-public python-deprecated
6145 (package
6146 (name "python-deprecated")
6147 (version "1.2.13")
6148 (source
6149 (origin
6150 (method git-fetch)
6151 (uri (git-reference
6152 (url "https://github.com/tantale/deprecated")
6153 (commit (string-append "v" version))))
6154 (file-name (git-file-name name version))
6155 (sha256
6156 (base32
6157 "0v4ys9xr8lski2r98da99spsj6hjlnnqgnhhmyhrm66myiix885c"))))
6158 (build-system python-build-system)
6159 (arguments
6160 `(#:phases (modify-phases %standard-phases
6161 (replace 'check
6162 (lambda* (#:key tests? #:allow-other-keys)
6163 (when tests?
6164 (invoke "pytest")))))))
6165 (propagated-inputs
6166 (list python-wrapt))
6167 (native-inputs
6168 (list python-bumpversion python-pytest python-pytest-cov
6169 python-sphinx python-tox))
6170 (home-page "https://github.com/tantale/deprecated")
6171 (synopsis "Python decorator to deprecate classes, functions or methods")
6172 (description "The @code{deprecated} decorator provides a convenient way to deprecate
6173to deprecate classes, functions or methods.")
6174 (license license:expat)))
6175
6176(define-public python-pygithub
6177 (package
6178 (name "python-pygithub")
6179 (version "1.55")
6180 (source
6181 ;; We fetch from the Git repo because there are no tests in the PyPI
6182 ;; archive.
6183 (origin
6184 (method git-fetch)
6185 (uri (git-reference
6186 (url "https://github.com/PyGithub/PyGithub")
6187 (commit (string-append "v" version))))
6188 (file-name (git-file-name name version))
6189 (sha256
6190 (base32 "082bxffpy4h97dsay3l75cpgfjj10kywkvicnm6xscwvah285q9y"))))
6191 (build-system python-build-system)
6192 (arguments
6193 `(#:phases
6194 (modify-phases %standard-phases
6195 (replace 'check
6196 (lambda* (#:key tests? #:allow-other-keys)
6197 (when tests?
6198 (invoke "pytest"))
6199 #t)))))
6200 (propagated-inputs
6201 (list python-cryptography python-deprecated python-pyjwt
6202 python-pynacl python-requests))
6203 (native-inputs
6204 (list python-httpretty python-pytest))
6205 (home-page "https://pygithub.readthedocs.io/en/latest/")
6206 (synopsis "Python library for the GitHub API")
6207 (description "This library allows managing GitHub resources such as
6208repositories, user profiles, and organizations in your Python applications,
6209using version 3 of the GitHub application programming interface (API).")
6210 (license license:lgpl3+)))
6211
6212(define-public python-rellu
6213 (package
6214 (name "python-rellu")
6215 (version "0.7")
6216 (source
6217 (origin
6218 (method url-fetch)
6219 (uri (pypi-uri "rellu" version))
6220 (sha256
6221 (base32
6222 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
6223 (build-system python-build-system)
6224 (propagated-inputs
6225 (list python-invoke python-pygithub))
6226 (home-page "https://github.com/robotframework/rellu")
6227 (synopsis "Utilities to create PyPI releases")
6228 (description "This collection of utilities contains tooling and templates
6229to assist in creating releases on GitHub and publishing them on PyPI. It is
6230designed to be used by Robot Framework and tools and libraries in its
6231ecosystem, but can naturally be used also by other projects.")
6232 (license license:asl2.0)))
6233
6234(define-public python-robotframework
6235 (package
6236 (name "python-robotframework")
6237 (version "5.0.1")
6238 ;; There are no tests in the PyPI archive.
6239 (source
6240 (origin
6241 (method git-fetch)
6242 (uri (git-reference
6243 (url "https://github.com/robotframework/robotframework")
6244 (commit (string-append "v" version))))
6245 (file-name (git-file-name name version))
6246 (sha256
6247 (base32 "0jjr71npzrm5mv16pya3m2dqaqgf6sc45yca5kfmc5lfislig5b8"))
6248 (patches (search-patches
6249 "python-robotframework-atest.patch"
6250 "python-robotframework-source-date-epoch.patch"))))
6251 (build-system python-build-system)
6252 (arguments
6253 (list
6254 #:modules '((guix build python-build-system)
6255 (guix build utils)
6256 (ice-9 ftw)
6257 (ice-9 match)
6258 (srfi srfi-26))
6259 #:phases
6260 #~(modify-phases %standard-phases
6261 (add-after 'unpack 'delete-problematic-tests
6262 (lambda _
6263 ;; Tests such as 'Tilde and username in path' rely on HOME and
6264 ;; USER being set, on top of the user's /etc/passwd home
6265 ;; directory not being '/', as is the case in the Guix build
6266 ;; container.
6267 (delete-file "atest/robot/standard_libraries/\
6268operating_system/path_expansion.robot")))
6269 (add-before 'build 'build-and-install-doc
6270 (lambda* (#:key outputs #:allow-other-keys)
6271 (let ((doc (string-append (assoc-ref outputs "doc")
6272 "/share/doc/robotframework")))
6273 (invoke "invoke" "library-docs" "all")
6274 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
6275 (mkdir-p doc)
6276 (with-directory-excursion "dist"
6277 (define user-guide-dir
6278 (match (scandir "." (cut string-prefix?
6279 "robotframework-userguide-" <>))
6280 ((dir) dir)
6281 (_ (error "could not find the user guide directory"))))
6282 (copy-recursively user-guide-dir doc)))))
6283 (replace 'check
6284 (lambda* (#:key native-inputs inputs tests?
6285 #:allow-other-keys)
6286 (when tests?
6287 ;; Some tests require timezone data. Otherwise, they
6288 ;; look up /etc/localtime, which doesn't exist, and
6289 ;; fail with:
6290 ;;
6291 ;; OverflowError: mktime argument out of range
6292 (setenv "TZDIR"
6293 (search-input-directory
6294 (or native-inputs inputs) "share/zoneinfo"))
6295 (setenv "TZ" "Europe/Paris")
6296
6297 (format #t "Running unit tests...~%")
6298 (invoke "utest/run.py")
6299
6300 (format #t "Running acceptance tests...~%")
6301 (invoke "xvfb-run" "atest/run.py")))))))
6302 (native-inputs
6303 (list python-docutils
6304 python-jsonschema
6305 python-invoke
6306 python-lxml
6307 python-pygments
6308 python-pyyaml
6309 python-rellu
6310 `(,python "tk") ;used when building the HTML doc
6311 python-xmlschema
6312 scrot ;for taking screenshots
6313 tzdata-for-tests
6314 xvfb-run))
6315 (outputs '("out" "doc"))
6316 (home-page "https://robotframework.org")
6317 (synopsis "Generic automation framework")
6318 (description "Robot Framework is a generic automation framework for
6319acceptance testing, acceptance test driven development (ATDD), and robotic
6320process automation (RPA).")
6321 (license license:asl2.0)))
6322
6323(define-public python-robotframework-datadriver
6324 (package
6325 (name "python-robotframework-datadriver")
6326 (version "1.6.1")
6327 (source
6328 (origin
6329 (method url-fetch)
6330 (uri (pypi-uri "robotframework-datadriver" version))
6331 (sha256
6332 (base32 "0mcyr3v98nvfnvffy096qp3jqslas7l8hh0j00lpi0mp12cd0qk9"))))
6333 (build-system python-build-system)
6334 (arguments
6335 `(#:phases
6336 (modify-phases %standard-phases
6337 (add-before 'check 'skip-problematic-tests
6338 (lambda _
6339 ;; The test file 'tab-csv-file-name.tsv' contains special
6340 ;; characters for which there is no locale in the build
6341 ;; environment, causing one test to fail.
6342 (delete-file-recursively "atest/TestCases/csv_reader_config")))
6343 (replace 'check
6344 (lambda* (#:key tests? #:allow-other-keys)
6345 (when tests?
6346 (with-directory-excursion "atest"
6347 (invoke "sh" "run_atest.sh"))))))))
6348 (native-inputs (list python-docutils
6349 python-robotframework-stacktrace))
6350 (propagated-inputs (list python-openpyxl
6351 python-pandas
6352 python-pygments
6353 python-robotframework))
6354 (home-page "https://github.com/Snooz82/robotframework-datadriver")
6355 (synopsis "Data-driven test extension for Robot Framework")
6356 (description "DataDriver is a data-driven extension for Robot Framework.
6357DataDriver uses the Listener Interface of Robot Framework to create new test
6358cases based on a data file that contains the test data. DataDriver supports
6359data files in the CSV, XLS or XLSX formats.")
6360 (license license:asl2.0)))
6361
6362(define-public python-robotframework-lint
6363 ;; There is no properly tagged release; the commit below seems to correspond
6364 ;; to the 0.9 stable release available from PyPI. The tests are not
6365 ;; included in the PyPI archive, so we fetch the sources from the upstream
6366 ;; Git repo.
6367 (let ((commit "b0619ac58a8b1be125f9c98856a664594614570f")
6368 (revision "0"))
6369 (package
6370 (name "python-robotframework-lint")
6371 (version (git-version "1.1" ;version taken from 'rflint/version.py'
6372 revision commit))
6373 (source
6374 (origin
6375 (method git-fetch)
6376 (uri (git-reference
6377 (url "https://github.com/boakley/robotframework-lint")
6378 (commit commit)))
6379 (file-name (git-file-name name version))
6380 (sha256
6381 (base32
6382 "180npmvzqync25b2scs878gv8q4y17dsinxyjcc10bw22msfap6b"))))
6383 (build-system python-build-system)
6384 (arguments
6385 `(#:phases
6386 (modify-phases %standard-phases
6387 (replace 'check
6388 (lambda _
6389 (invoke "python" "-m" "robot" "-A"
6390 "tests/conf/default.args" "tests"))))))
6391 (propagated-inputs
6392 (list python-robotframework))
6393 (home-page "https://github.com/boakley/robotframework-lint/")
6394 (synopsis "Static analysis tool (linter) for Robot Framework")
6395 (description "This package provides the @code{rflint} command-line
6396utility, a static analysis tool (linter) for Robot Framework source files.")
6397 (license license:asl2.0))))
6398
6399(define-public python-robotframework-pabot
6400 (package
6401 (name "python-robotframework-pabot")
6402 (version "2.7.0")
6403 (source
6404 (origin
6405 ;; There are no tests in the PyPI archive.
6406 (method git-fetch)
6407 (uri (git-reference
6408 (url "https://github.com/mkorpela/pabot")
6409 (commit version)))
6410 (file-name (git-file-name name version))
6411 (sha256
6412 (base32
6413 "0246vvyaxax0nzlrffvp9vg6mh5jmvbbm87azignf0gakjidr7nn"))))
6414 (build-system python-build-system)
6415 (arguments
6416 (list
6417 #:phases #~(modify-phases %standard-phases
6418 (replace 'check
6419 (lambda* (#:key tests? #:allow-other-keys)
6420 (when tests?
6421 (invoke "pytest" "-vv" "tests")))))))
6422 (propagated-inputs
6423 (list python-robotframework python-robotframework-stacktrace))
6424 (native-inputs
6425 (list python-pytest))
6426 (home-page "https://pabot.org")
6427 (synopsis "Parallel test runner for Robot Framework")
6428 (description "Pabot is a parallel executor for Robot Framework tests.")
6429 (license license:asl2.0)))
6430
6431(define-public python-sshtunnel
6432 (package
6433 (name "python-sshtunnel")
6434 (version "0.4.0")
6435 (source (origin
6436 (method url-fetch)
6437 (uri (pypi-uri "sshtunnel" version))
6438 (sha256
6439 (base32
6440 "1z7rdgpp9m36ysh9pfzrn3vyiaj05bkjvcjdhj8vz0fvfjkhxjz7"))))
6441 (build-system python-build-system)
6442 (arguments
6443 `(#:phases
6444 (modify-phases %standard-phases
6445 (replace 'check
6446 (lambda* (#:key tests? #:allow-other-keys)
6447 (when tests? (invoke "pytest" "-vv" "tests")))))))
6448 (propagated-inputs (list python-paramiko))
6449 (native-inputs (list openssh python-pytest python-mock))
6450 (home-page "https://github.com/pahaz/sshtunnel")
6451 (synopsis "Python SSH tunnels library")
6452 (description "@code{sshtunnel} is a Python module for easily creating SSH
6453tunnels in the background, using Python.")
6454 (license license:expat)))
6455
6456(define-public python-robotframework-sshtunnellibrary
6457 (package
6458 (name "python-robotframework-sshtunnellibrary")
6459 (version "1.0.0")
6460 (source (origin
6461 (method git-fetch)
6462 (uri (git-reference
6463 (url "https://github.com/C-Squad/robotframework-sshtunnellibrary")
6464 (commit (string-append "v" version))))
6465 (file-name (git-file-name name version))
6466 (sha256
6467 (base32
6468 "1vkkmkb8iql13xpbyj4hvnnmfgzqlr8rffgryp2082cadb3w7xrd"))))
6469 (build-system python-build-system)
6470 (arguments
6471 (list #:phases #~(modify-phases %standard-phases
6472 (replace 'check
6473 (lambda* (#:key tests? #:allow-other-keys)
6474 (when tests?
6475 (invoke "python" "-m" "unittest"
6476 "discover" "-s" "test")))))))
6477 (propagated-inputs (list python-robotframework python-sshtunnel))
6478 (home-page "https://github.com/C-Squad/robotframework-sshtunnellibrary")
6479 (synopsis "Alternative RobotFramework library for SSH tunnels")
6480 (description "SSHTunnelLibrary is an alternative RobotFramework
6481library (to the more official one that comes from the
6482@code{robotframework-sshlibrary} package) to support SSH tunnels.")
6483 (license license:asl2.0)))
6484
6485(define-public python-robotframework-stacktrace
6486 (package
6487 (name "python-robotframework-stacktrace")
6488 (version "0.4.1")
6489 (source
6490 (origin
6491 (method url-fetch)
6492 (uri (pypi-uri "robotframework-stacktrace" version))
6493 (sha256
6494 (base32 "19gnwr7da1zz9clhwsmvqfjf02d195i61lzpq4253dcsgrpb6v79"))))
6495 (build-system python-build-system)
6496 (arguments
6497 ;; The test suite fails (see:
6498 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
6499 `(#:tests? #f
6500 #:phases
6501 (modify-phases %standard-phases
6502 (replace 'check
6503 (lambda* (#:key tests? #:allow-other-keys)
6504 (when tests?
6505 (with-directory-excursion "tests"
6506 (invoke "python" "-m" "robot" "."))))))))
6507 (propagated-inputs (list python-robotframework))
6508 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
6509 (synopsis "Robot Framework listener to print a stack trace on error")
6510 (description "StackTrace is a Robot Framework listener that prints a stack
6511trace directly to the terminal to ease debugging.")
6512 (license license:asl2.0)))
6513
6514(define-public python-robotframework-sshlibrary
6515 (package
6516 (name "python-robotframework-sshlibrary")
6517 (version "3.8.0")
6518 ;; There are no tests in the PyPI archive.
6519 (source
6520 (origin
6521 (method git-fetch)
6522 (uri (git-reference
6523 (url "https://github.com/robotframework/SSHLibrary")
6524 (commit (string-append "v" version))))
6525 (file-name (git-file-name name version))
6526 (sha256
6527 (base32
6528 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
6529 (patches (search-patches
6530 "python-robotframework-sshlibrary-rf5-compat.patch"))))
6531 (build-system python-build-system)
6532 (arguments
6533 `(#:phases
6534 (modify-phases %standard-phases
6535 (add-before 'build 'build-and-install-doc
6536 (lambda* (#:key outputs #:allow-other-keys)
6537 (let ((doc (string-append
6538 (assoc-ref outputs "doc")
6539 "/share/doc/robotframework-sshlibrary")))
6540 (invoke "chmod" "-R" "+w" "docs")
6541 (invoke "invoke" "kw-docs" "project-docs")
6542 (mkdir-p doc)
6543 (for-each delete-file (find-files "docs" "\\.rst"))
6544 (copy-recursively "docs" doc))))
6545 (replace 'check
6546 (lambda* (#:key tests? #:allow-other-keys)
6547 (when tests?
6548 ;; Some tests require an SSH server; we remove them.
6549 (delete-file "utest/test_client_api.py")
6550 (delete-file "utest/test_scp.py")
6551 (invoke "python" "utest/run.py")))))))
6552 (propagated-inputs
6553 (list python-robotframework python-paramiko python-scp))
6554 (native-inputs
6555 (list openssh
6556 which
6557 ;; To generate the documentation
6558 python-docutils
6559 python-invoke
6560 python-pygments
6561 python-rellu))
6562 (outputs '("out" "doc"))
6563 (home-page "https://github.com/robotframework/SSHLibrary")
6564 (synopsis "Robot Framework library for SSH and SFTP")
6565 (description "SSHLibrary is a Robot Framework library providing support
6566for SSH and SFTP. It has the following main usages:
6567@itemize @bullet
6568@item Executing commands on the remote machine, either blocking or non-blocking.
6569@item Writing and reading in an interactive shell.
6570@item Transferring files and directories over SFTP.
6571@item Ensuring that files and directories exist on the remote machine.
6572@end itemize")
6573 (license license:asl2.0)))
6574
6575(define-public python-robotframework-pythonlibcore
6576 (package
6577 (name "python-robotframework-pythonlibcore")
6578 (version "3.0.0")
6579 (source
6580 (origin
6581 (method git-fetch) ;no tests in pypi archive
6582 (uri (git-reference
6583 (url "https://github.com/robotframework/PythonLibCore")
6584 (commit (string-append "v" version))))
6585 (file-name (git-file-name name version))
6586 (sha256
6587 (base32
6588 "0v89v8va65l6inh0fb34qgxawx6p29pnrmw4n5941yzdi3804rc4"))))
6589 (build-system python-build-system)
6590 (arguments
6591 `(#:phases (modify-phases %standard-phases
6592 (replace 'check
6593 (lambda* (#:key tests? #:allow-other-keys)
6594 (when tests?
6595 (invoke "utest/run.py")))))))
6596 (native-inputs
6597 (list python-pytest python-pytest-cov python-pytest-mockito
6598 python-robotframework))
6599 (home-page "https://github.com/robotframework/PythonLibCore")
6600 (synopsis "Robot Framework Python library tools")
6601 (description "PythonLibCore provides tools for creating larger test
6602libraries for Robot Framework using Python. The Robot Framework hybrid and
6603dynamic library APIs give more flexibility for library than the static library
6604API, but they also set requirements for libraries which need to be implemented
6605in the library side. PythonLibCore eases the problem by providing a simpler
6606interface and by handling all the requirements towards the Robot Framework
6607library APIs.")
6608 (license license:asl2.0)))
6609
6610(define-public python-robotframework-seleniumlibrary
6611 (package
6612 (name "python-robotframework-seleniumlibrary")
6613 (version "5.1.3")
6614 (source
6615 (origin
6616 (method url-fetch)
6617 (uri (pypi-uri "robotframework-seleniumlibrary" version))
6618 (sha256
6619 (base32 "1dihrbcid9i7daw2qy6h3xsvwaxzmyip820jw5z11n60qrl006pm"))))
6620 (build-system python-build-system)
6621 ;; XXX: Tests require ungoogled-chromium, but the chromium module would
6622 ;; introduce a cycle if imported here.
6623 (propagated-inputs
6624 (list python-robotframework python-robotframework-pythonlibcore
6625 python-selenium))
6626 (home-page "https://github.com/robotframework/SeleniumLibrary")
6627 (synopsis "Web testing library for Robot Framework")
6628 (description "SeleniumLibrary is a web testing library for Robot Framework
6629that utilizes the Selenium tool internally.")
6630 (license license:asl2.0)))
6631
6632(define-public python-robotframework-seleniumscreenshots
6633 (package
6634 (name "python-robotframework-seleniumscreenshots")
6635 (version "0.9.5")
6636 (source
6637 (origin
6638 (method url-fetch)
6639 (uri (pypi-uri "robotframework-seleniumscreenshots" version))
6640 (sha256
6641 (base32 "05qv323hvjmy62h33ryrjaa9k1hyvp8hq5qnj8j1x3ap2ci3q3s0"))))
6642 (build-system python-build-system)
6643 (arguments
6644 ;; XXX: The tests require a relatively complicated setup configured in
6645 ;; their CI with Nix (!).
6646 `(#:tests? #f))
6647 (propagated-inputs
6648 (list python-robotframework python-robotframework-seleniumlibrary))
6649 (home-page "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
6650 (synopsis "Robot Framework library for annotating and cropping screenshots")
6651 (description "The SeleniumScreenshots library for Robot Framework provides
6652keywords for annotating and cropping screenshots taken with SeleniumLibrary.
6653It is useful for scripting automatically updated screenshots for documentation
6654or for visual regression testing purposes.")
6655 (license license:bsd-3)))
6656
6657(define-public python-rstr
6658 (package
6659 (name "python-rstr")
6660 (version "2.2.6")
6661 (source
6662 (origin
6663 (method url-fetch)
6664 (uri (pypi-uri "rstr" version))
6665 (sha256
6666 (base32
6667 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
6668 (build-system python-build-system)
6669 (home-page "https://github.com/leapfrogonline/rstr")
6670 (synopsis "Generate random strings in Python")
6671 (description "This package provides a python module for generating
6672random strings of various types. It could be useful for fuzz testing,
6673generating dummy data, or other applications. It has no dependencies
6674outside the standard library.")
6675 (license license:bsd-3)))
6676
6677(define-public python-scp
6678 (package
6679 (name "python-scp")
6680 (version "0.13.3")
6681 (source
6682 (origin
6683 (method url-fetch)
6684 (uri (pypi-uri "scp" version))
6685 (sha256
6686 (base32 "1m2v09m407p097cy3xy5rxicqfzrqjwf8v5rd4qhfqkk7lllimwb"))))
6687 (build-system python-build-system)
6688 (arguments
6689 '(#:tests? #f)) ;tests require an SSH server
6690 (propagated-inputs
6691 (list python-paramiko))
6692 (home-page "https://github.com/jbardin/scp.py")
6693 (synopsis "SCP protocol module for Python and Paramiko")
6694 (description "The scp module extends the Paramiko library to send and
6695receive files via the SCP1 protocol, as implemented by the OpenSSH
6696@command{scp} program.")
6697 (license license:gpl2+)))
6698
6699(define-public python-rst.linker
6700 (package
6701 (name "python-rst.linker")
6702 (version "1.11")
6703 (source
6704 (origin
6705 (method url-fetch)
6706 (uri (pypi-uri "rst.linker" version))
6707 (sha256
6708 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
6709 (build-system python-build-system)
6710 (propagated-inputs
6711 (list python-dateutil python-six))
6712 (native-inputs
6713 (list python-setuptools-scm))
6714 ;; Test would require path.py, which would introduce a cyclic dependence.
6715 (arguments `(#:tests? #f))
6716 ;; Note: As of version 1.7 the documentation is not worth building.
6717 (home-page "https://github.com/jaraco/rst.linker")
6718 (synopsis "Sphinx plugin to add links and timestamps")
6719 (description "rst.linker automatically replaces text by a
6720reStructuredText external reference or timestamps. It's primary purpose is to
6721augment the changelog, but it can be used for other documents, too.")
6722 (license license:expat)))
6723
6724(define-public python-sshpubkeys
6725 (package
6726 (name "python-sshpubkeys")
6727 (version "3.1.0")
6728 (home-page "https://github.com/ojarva/python-sshpubkeys")
6729 (source (origin
6730 (method git-fetch)
6731 (uri (git-reference
6732 (url home-page)
6733 (commit (string-append "v" version))))
6734 (file-name (git-file-name name version))
6735 (sha256
6736 (base32
6737 "1h4gwmcfn84kkqh83km1vfz8sc5kr2g4gzgzmr8gz704jmqiv7nq"))))
6738 (build-system python-build-system)
6739 (propagated-inputs
6740 (list python-cryptography python-ecdsa))
6741 (synopsis "OpenSSH public key parser")
6742 (description
6743 "This package provides a library for parsing and validating OpenSSH
6744public key files.")
6745 (license license:bsd-3)))
6746
6747(define-public python-feedgenerator
6748 (package
6749 (name "python-feedgenerator")
6750 (version "1.9")
6751 (source
6752 (origin
6753 (method url-fetch)
6754 (uri (pypi-uri "feedgenerator" version))
6755 (sha256
6756 (base32
6757 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
6758 (modules '((guix build utils)))
6759 (snippet
6760 '(begin
6761 ;; Remove pre-compiled .pyc files from source.
6762 (for-each delete-file-recursively
6763 (find-files "." "__pycache__" #:directories? #t))
6764 (for-each delete-file (find-files "." "\\.pyc$"))
6765 #t))))
6766 (build-system python-build-system)
6767 (propagated-inputs
6768 (list python-pytz python-six))
6769 (home-page "https://github.com/getpelican/feedgenerator")
6770 (synopsis
6771 "Standalone version of Django's Atom/RSS feed generator")
6772 (description
6773 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
6774which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
6775 (license license:bsd-3)))
6776
6777(define-public python-lsp-jsonrpc
6778 (package
6779 (name "python-lsp-jsonrpc")
6780 (version "1.0.0")
6781 (source
6782 (origin
6783 (method url-fetch)
6784 (uri (pypi-uri "python-lsp-jsonrpc" version))
6785 (sha256
6786 (base32
6787 "1gb0fsamxndhplx25v8m0b3k7aknzy454fpa0qsqsqnv6c3igv3v"))))
6788 (build-system python-build-system)
6789 (native-inputs
6790 (list python-mock python-pytest))
6791 (propagated-inputs
6792 (list python-ujson))
6793 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
6794 (synopsis "JSON RPC 2.0 server library")
6795 (description
6796 "This package provides a JSON RPC 2.0 server library for Python.")
6797 (license license:expat)))
6798
6799(define-public python-jsonrpc-server
6800 (deprecated-package "python-jsonrpc-server" python-lsp-jsonrpc))
6801
6802(define-public python-pydantic
6803 (package
6804 (name "python-pydantic")
6805 (version "1.9.1")
6806 (source
6807 (origin
6808 (method git-fetch)
6809 (uri (git-reference
6810 (url "https://github.com/samuelcolvin/pydantic")
6811 (commit (string-append "v" version))))
6812 (file-name (git-file-name name version))
6813 (sha256
6814 (base32 "1406kgppqa7524mxllsipj7gb8fn7pwf51l11lqik59xjhsfv94f"))))
6815 (build-system python-build-system)
6816 (arguments
6817 '(#:phases
6818 (modify-phases %standard-phases
6819 (replace 'check
6820 (lambda _ (invoke "pytest" "-vv"))))))
6821 (native-inputs
6822 (list python-pytest python-pytest-mock))
6823 (propagated-inputs
6824 (list python-typing-extensions))
6825 (home-page "https://github.com/samuelcolvin/pydantic")
6826 (synopsis "Python data validation and settings management")
6827 (description
6828 "Pydantic enforces type hints at runtime, and provides user friendly
6829errors when data is invalid.")
6830 (license license:expat)))
6831
6832(define-public python-pydantic-cli
6833 (package
6834 (name "python-pydantic-cli")
6835 (version "4.3.0")
6836 (source
6837 (origin
6838 (method git-fetch) ;for tests
6839 (uri (git-reference
6840 (url "https://github.com/mpkocher/pydantic-cli")
6841 (commit (string-append "v" version))))
6842 (file-name (git-file-name name version))
6843 (sha256
6844 (base32
6845 "1v4dx6n60rbsan5zpw2rgdih7lb3h0xclagn1p6zfwl0r9l9cvym"))))
6846 (build-system python-build-system)
6847 (propagated-inputs
6848 (list python-pydantic))
6849 (native-inputs
6850 (list python-black
6851 python-mypy
6852 python-pytest))
6853 (home-page "https://github.com/mpkocher/pydantic-cli")
6854 (synopsis "Turn Pydantic defined data models into CLI tools")
6855 (description
6856 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
6857Interfaces} via data models provided in the JSON format.")
6858 (license license:expat)))
6859
6860(define-public python-pydocstyle
6861 (package
6862 (name "python-pydocstyle")
6863 (version "3.0.0")
6864 (source
6865 (origin
6866 (method url-fetch)
6867 (uri (pypi-uri "pydocstyle" version))
6868 (sha256
6869 (base32
6870 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
6871 (build-system python-build-system)
6872 (propagated-inputs
6873 (list python-six python-snowballstemmer))
6874 (home-page
6875 "https://github.com/PyCQA/pydocstyle/")
6876 (synopsis "Python docstring style checker")
6877 (description
6878 "This package provides a style checker for the Python Language
6879Server (PLS).")
6880 (license license:expat)))
6881
6882(define-public python-lsp-server
6883 (package
6884 (name "python-lsp-server")
6885 (version "1.3.3")
6886 (source
6887 (origin
6888 (method url-fetch)
6889 (uri (pypi-uri "python-lsp-server" version))
6890 (sha256
6891 (base32
6892 "0h6wxzmm6qjfwkkn3mnzn1fpmcp23fpbk74bi8p540q1nzccqj0v"))))
6893 (build-system python-build-system)
6894 (arguments
6895 `(#:phases
6896 (modify-phases %standard-phases
6897 (add-before 'check 'set-HOME
6898 (lambda _ (setenv "HOME" "/tmp")))
6899 (replace 'check
6900 (lambda _
6901 ;; Disable failing test.
6902 (invoke "python" "-m" "pytest" "-k"
6903 "not test_pyqt_completion"))))))
6904 (propagated-inputs
6905 (list python-autopep8
6906 python-pydocstyle
6907 python-flake8
6908 python-future
6909 python-jedi
6910 python-lsp-jsonrpc
6911 python-pluggy
6912 python-pycodestyle
6913 python-pyflakes
6914 python-rope
6915 python-ujson
6916 python-yapf))
6917 (native-inputs
6918 (list python-coverage
6919 python-flaky
6920 python-matplotlib
6921 python-mock
6922 python-numpy
6923 python-pandas
6924 python-pylint
6925 python-pytest
6926 python-pytest-cov
6927 python-versioneer))
6928 (home-page "https://github.com/python-lsp/python-lsp-server")
6929 (synopsis "Python implementation of the Language Server Protocol")
6930 (description
6931"The Python Language Server @command{pylsp} is an implementation of the
6932Python 3 language specification for the Language Server Protocol (LSP).
6933This tool is used in text editing environments to provide a complete
6934and integrated feature-set for programming Python effectively.")
6935 (license license:expat)))
6936
6937(define-public python-language-server
6938 (deprecated-package "python-language-server" python-lsp-server))
6939
6940(define-public python-black
6941 (package
6942 (name "python-black")
6943 (version "22.3.0")
6944 (source
6945 (origin
6946 (method url-fetch)
6947 (uri (pypi-uri "black" version))
6948 (sha256
6949 (base32
6950 "0yfahlqc7dsdp1js0cbv706apldnfnlbal9b53cww8n0hs40n0im"))))
6951 (build-system python-build-system)
6952 (arguments
6953 `(#:phases
6954 (modify-phases %standard-phases
6955 (add-after 'patch-source-shebangs 'use-absolute-file-names
6956 (lambda* (#:key native-inputs inputs #:allow-other-keys)
6957 (let* ((inpts (or native-inputs inputs))
6958 (python3 (search-input-file inpts "/bin/python3")))
6959 (substitute* (find-files "tests" "\\.py$")
6960 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
6961 (string-append "#!" python3 (if (string? minor-version)
6962 minor-version
6963 "")))))))
6964 (replace 'check
6965 (lambda* (#:key tests? #:allow-other-keys)
6966 (when tests? (invoke "pytest" "-vv")))))))
6967 (propagated-inputs
6968 (list python-click
6969 python-attrs
6970 python-appdirs
6971 python-pathspec
6972 python-mypy-extensions
6973 python-platformdirs
6974 python-regex
6975 python-tomli
6976 python-typed-ast
6977 python-typing-extensions))
6978 (native-inputs
6979 (list python-pytest python-pytest-aiohttp python-setuptools-scm))
6980 (home-page "https://github.com/psf/black")
6981 (synopsis "The uncompromising code formatter")
6982 (description "Black is the uncompromising Python code formatter.")
6983 (license license:expat)))
6984
6985(define-public python-black-macchiato
6986 (package
6987 (name "python-black-macchiato")
6988 (version "1.3.0")
6989 (source
6990 (origin
6991 (method url-fetch)
6992 (uri (pypi-uri "black-macchiato" version))
6993 (sha256
6994 (base32
6995 "1drp5p697ni1xn5y2lbjpalgpkzy2i4cyxjj5pk4dxr0vk97dd7i"))))
6996 (build-system python-build-system)
6997 (propagated-inputs
6998 (list python-black))
6999 (home-page "https://github.com/wbolster/black-macchiato")
7000 (synopsis "Partial @code{python-black} formatting")
7001 (description
7002 "This package is built on top the @{python-black} code formatter to
7003enable formatting of partial files.")
7004 (license license:bsd-3)))
7005
7006(define-public python-blinker
7007 (package
7008 (name "python-blinker")
7009 (version "1.4")
7010 (source
7011 (origin
7012 (method url-fetch)
7013 (uri (pypi-uri "blinker" version))
7014 (sha256
7015 (base32
7016 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
7017 (build-system python-build-system)
7018 (home-page "https://pythonhosted.org/blinker/")
7019 (synopsis "Fast, simple object-to-object and broadcast signaling")
7020 (description
7021 "Blinker provides a fast dispatching system that allows any number of
7022interested parties to subscribe to events, or \"signals\".")
7023 (license license:expat)))
7024
7025(define-public pelican
7026 (package
7027 (name "pelican")
7028 (version "4.7.2")
7029 (source
7030 (origin
7031 (method url-fetch)
7032 (uri (pypi-uri "pelican" version))
7033 (sha256
7034 (base32 "0m1kndc98hhnlq0yl05f4lzccw555pkxnrajj6lks18yh491kw8w"))))
7035 (build-system python-build-system)
7036 (inputs
7037 (list python-blinker
7038 python-dateutil
7039 ;; Ignoring `guix lint` warning as python-docutils is used to support
7040 ;; reStructuredText processing at runtime.
7041 python-docutils
7042 python-feedgenerator
7043 python-jinja2
7044 python-markdown
7045 python-pygments
7046 python-pytz
7047 python-rich
7048 python-unidecode))
7049 (home-page "https://blog.getpelican.com/")
7050 (arguments
7051 `(;; XXX Requires a lot more packages to do unit tests :P
7052 #:tests? #f))
7053 (synopsis "Python-based static site publishing system")
7054 (description
7055 "Pelican is a tool to generate a static blog from reStructuredText,
7056Markdown input files, and more. Pelican uses Jinja2 for templating
7057and is very extensible.")
7058 (license license:agpl3+)))
7059
7060(define-public mallard-ducktype
7061 (package
7062 (name "mallard-ducktype")
7063 (version "1.0.2")
7064 (source
7065 (origin
7066 (method git-fetch)
7067 ;; git-reference because tests are not included in pypi source tarball
7068 ;; https://issues.guix.gnu.org/issue/36755#2
7069 (uri (git-reference
7070 (url "https://github.com/projectmallard/mallard-ducktype")
7071 (commit version)))
7072 (file-name (git-file-name name version))
7073 (sha256
7074 (base32
7075 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
7076 (build-system python-build-system)
7077 (arguments
7078 '(#:phases
7079 (modify-phases %standard-phases
7080 (replace 'check
7081 (lambda _
7082 (with-directory-excursion "tests"
7083 (invoke "sh" "runtests")))))))
7084 (home-page "http://projectmallard.org")
7085 (synopsis "Convert Ducktype to Mallard documentation markup")
7086 (description
7087 "Ducktype is a lightweight syntax that can represent all the semantics
7088of the Mallard XML documentation system. Ducktype files can be converted to
7089Mallard using the @command{ducktype} tool. The yelp-tools package
7090provides additional functionality on the produced Mallard documents.")
7091 (license license:expat)))
7092
7093(define-public python-cython
7094 (package
7095 (name "python-cython")
7096 (version "0.29.32")
7097 (source
7098 (origin
7099 (method url-fetch)
7100 (uri (pypi-uri "Cython" version))
7101 (sha256
7102 (base32 "1xqsihpqnfal29nb5kmw8z71nd4jbsnbz7p3lkr094xpb13wycw7"))))
7103 (build-system python-build-system)
7104 ;; we need the full python package and not just the python-wrapper
7105 ;; because we need libpython3.3m.so
7106 (inputs
7107 (list python))
7108 (arguments
7109 `(#:phases
7110 (modify-phases %standard-phases
7111 (add-before 'check 'set-HOME
7112 ;; some tests require access to "$HOME/.cython"
7113 (lambda _ (setenv "HOME" "/tmp")))
7114 (replace 'check
7115 (lambda* (#:key tests? #:allow-other-keys)
7116 ;; Disable compiler optimizations to greatly reduce the running
7117 ;; time of the test suite.
7118 (setenv "CFLAGS" "-O0")
7119
7120 (when tests?
7121 (invoke "python" "runtests.py" "-vv"
7122 "-j" (number->string (parallel-job-count))
7123 ;; XXX: On 32-bit architectures, running the parallel tests
7124 ;; fails on many-core systems, see
7125 ;; <https://github.com/cython/cython/issues/2807>.
7126 ,@(if (not (target-64bit?))
7127 '("-x" "run.parallel")
7128 '())
7129 ;; This test fails when running on 24 cores.
7130 "-x" "cpp_stl_conversion")))))))
7131 (home-page "https://cython.org/")
7132 (synopsis "C extensions for Python")
7133 (description "Cython is an optimising static compiler for both the Python
7134programming language and the extended Cython programming language. It makes
7135writing C extensions for Python as easy as Python itself.")
7136 (license license:asl2.0)))
7137
7138(define-public python-cython-3
7139 (package
7140 (inherit python-cython)
7141 ;; Cython 3 is not officially released yet, so distinguish the name
7142 ;; for now.
7143 (name "python-cython-next")
7144 (version "3.0.0b2")
7145 (source (origin
7146 (method url-fetch)
7147 (uri (pypi-uri "Cython" version))
7148 (sha256
7149 (base32
7150 "0mb7gpavs87am29sbk6yqznsybxj9dk4fwj4370j9sbrcmjq0hkc"))))
7151 (properties '())))
7152
7153;; NOTE: when upgrading numpy please make sure that python-numba,
7154;; python-pandas and python-scipy still build, as these three packages are
7155;; often used together.
7156(define-public python-numpy
7157 (package
7158 (name "python-numpy")
7159 (version "1.23.2")
7160 (source
7161 (origin
7162 (method url-fetch)
7163 (uri (string-append
7164 "https://github.com/numpy/numpy/releases/download/v"
7165 version "/numpy-" version ".tar.gz"))
7166 (sha256
7167 (base32
7168 "00bx3idjwhmzkdawg2dx1bp0316ig37jfx0dm82bvyv1hbj013dp"))))
7169 (build-system python-build-system)
7170 (arguments
7171 (list
7172 #:modules '((guix build utils)
7173 (guix build python-build-system)
7174 (ice-9 format))
7175 #:phases
7176 #~(modify-phases %standard-phases
7177 (add-before 'build 'parallelize-build
7178 (lambda _
7179 (setenv "NPY_NUM_BUILD_JOBS"
7180 (number->string (parallel-job-count)))))
7181 (add-before 'build 'configure-blas
7182 (lambda* (#:key inputs #:allow-other-keys)
7183 (call-with-output-file "site.cfg"
7184 (lambda (port)
7185 (format port
7186 "\
7187[openblas]
7188libraries = openblas
7189library_dirs = ~a/lib
7190include_dirs = ~:*~a/include~%"
7191 (dirname (dirname
7192 (search-input-file
7193 inputs "include/openblas_config.h"))))))))
7194 (add-before 'build 'fix-executable-paths
7195 (lambda* (#:key inputs #:allow-other-keys)
7196 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
7197 ;; instead of /bin/sh.
7198 (substitute* "numpy/distutils/exec_command.py"
7199 (("'/bin/sh'")
7200 (format #f "~s" (search-input-file inputs "bin/bash"))))
7201 ;; Don't try to call '/bin/true' specifically.
7202 (substitute* "numpy/core/tests/test_cpu_features.py"
7203 (("/bin/true") (search-input-file inputs "bin/true")))))
7204 (replace 'check
7205 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
7206 (when tests?
7207 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
7208 "-j" (number->string (parallel-job-count))
7209 ;; Contrary to scipy, the runtests.py script of numpy
7210 ;; does *not* automatically provide -n when -j is used
7211 ;; (see: https://github.com/numpy/numpy/issues/21359).
7212 "--" "-n" (number->string (parallel-job-count))
7213 "-k" (string-append
7214 ;; These tests may fail on 32-bit systems (see:
7215 ;; https://github.com/numpy/numpy/issues/18387).
7216 "not test_float_remainder_overflow "
7217 "and not test_pareto "
7218 ;; The 'test_rint_big_int' test fails on older
7219 ;; x86_64 CPUs such as the Core 2 Duo (see:
7220 ;; https://github.com/numpy/numpy/issues/22170).
7221 "and not test_rint_big_int "
7222 ;; The huge_array test is too large for 32-bit (see:
7223 ;; https://bugs.gentoo.org/843599 and
7224 ;; https://bugs.gentoo.org/846548).
7225 ;; TestKind.test_all is a Fortran type failure
7226 ;; that may be toolchain or environment related.
7227 #$@(if (or (target-x86?) (target-arm32?))
7228 `(" and not test_identityless_reduction_huge_array"
7229 " and not (TestKind and test_all)")
7230 '())
7231 ;; This test fails when building from aarch64-linux.
7232 #$@(if (target-arm32?)
7233 `(" and not test_features")
7234 '())
7235 ;; These tests seem to fail on machines without
7236 ;; an FPU is still under investigation upstream.
7237 ;; https://github.com/numpy/numpy/issues/20635
7238 #$@(if (target-riscv64?)
7239 `(" and not test_float"
7240 " and not test_fpclass")
7241 '())))))))))
7242 (native-inputs
7243 (list python-cython
7244 python-hypothesis
7245 python-pytest
7246 python-pytest-xdist
7247 python-typing-extensions
7248 gfortran))
7249 (inputs (list bash openblas))
7250 (home-page "https://numpy.org")
7251 (synopsis "Fundamental package for scientific computing with Python")
7252 (description "NumPy is the fundamental package for scientific computing
7253with Python. It contains among other things: a powerful N-dimensional array
7254object, sophisticated (broadcasting) functions, tools for integrating C/C++
7255and Fortran code, useful linear algebra, Fourier transform, and random number
7256capabilities.")
7257 (properties
7258 '((upstream-name . "numpy")))
7259 (license license:bsd-3)))
7260
7261(define-public python-numpy-documentation
7262 (package
7263 (inherit python-numpy)
7264 (name "python-numpy-documentation")
7265 (arguments
7266 (list
7267 #:tests? #f ;we're only generating the documentation
7268 #:phases
7269 #~(modify-phases %standard-phases
7270 (add-before 'build 'add-gnu-freefont-to-texmf
7271 (lambda _
7272 ;; XXX: The Sphinx-generated tex output specifies the GNU
7273 ;; FreeFont font to be searched via its extension, which uses
7274 ;; kpathsea instead of fontconfig and fail (see:
7275 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
7276 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
7277 ;; GUIX_TEXMF.
7278 (mkdir-p "texmf-dist/fonts/opentype/public")
7279 (symlink (string-append
7280 #$(this-package-native-input "font-gnu-freefont")
7281 "/share/fonts/opentype")
7282 (string-append
7283 (getcwd) "/"
7284 "texmf-dist/fonts/opentype/public/gnu-freefont"))
7285 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
7286 (getcwd) "/texmf-dist"))))
7287 (delete 'build)
7288 (replace 'install
7289 (lambda _
7290 (let* ((data (string-append #$output "/share"))
7291 (doc (string-append data "/doc/numpy"))
7292 (html (string-append doc "/html"))
7293 (info (string-append data "/info"))
7294 (sphinxopts (string-append
7295 "SPHINXOPTS=-j"
7296 (number->string (parallel-job-count)))))
7297 (with-directory-excursion "doc"
7298 ;; Do not treat warnings as errors.
7299 (substitute* "Makefile"
7300 ((" -WT ") " -T "))
7301 (setenv "HOME" "/tmp")
7302 ;; Build the PDF documentation.
7303 (invoke "make" "latex-build" sphinxopts)
7304 (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
7305 ;; Build the HTML documentation
7306 (invoke "make" "html" sphinxopts)
7307 ;; Build the Info documentation. The issues worked around
7308 ;; below can be tracked at
7309 ;; https://github.com/numpy/numpy/issues/12278.
7310 (substitute* "source/conf.py"
7311 ;; The root document should be "index", not "contents".
7312 (("\"contents\"") "'index'")
7313 ;; Disable Sphinx extensions that produce broken Texinfo.
7314 ((".*'numpydoc'.*") "")
7315 ((".*'sphinx.ext.autosummary'.*") ""))
7316 (invoke "make" "info" sphinxopts)
7317 ;; Install the HTML documentation.
7318 (mkdir-p html)
7319 (copy-recursively "build/html" html)
7320 ;; Install the PDF reference and user manuals.
7321 (install-file "build/latex/numpy-ref.pdf" doc)
7322 (install-file "build/latex/numpy-user.pdf" doc)
7323 ;; Install the info manual.
7324 (install-file "build/texinfo/numpy.info" info)
7325 (symlink (string-append html "/_images")
7326 (string-append info "/numpy-figures")))))))))
7327 (native-inputs
7328 (list font-gnu-freefont
7329 perl
7330 python-breathe
7331 python-ipython
7332 python-matplotlib
7333 python-numpy
7334 python-numpydoc
7335 python-pandas
7336 python-pydata-sphinx-theme
7337 python-scipy ;used by matplotlib
7338 python-sphinx-4
7339 python-sphinx-panels
7340 texinfo
7341 (texlive-updmap.cfg
7342 (list texlive-cbfonts
7343 texlive-cm-super
7344 texlive-expdlist
7345 texlive-greek-fontenc
7346 texlive-latexmk
7347 texlive-polyglossia
7348 texlive-xetex
7349 texlive-xindy))))
7350 (inputs '())
7351 (propagated-inputs '())
7352 (synopsis "Documentation for the @code{python-numpy} package")
7353 (description "This package provides the complete NumPy documentation in
7354the Texinfo, HTML, and PDF formats.")))
7355
7356(define-public python-munch
7357 (package
7358 (name "python-munch")
7359 (version "2.5.0")
7360 (source
7361 (origin
7362 (method url-fetch)
7363 (uri (pypi-uri "munch" version))
7364 (sha256
7365 (base32
7366 "1lnvlic9g68hcmgdnv5bzp0nx2bf1kjclj54gx0s7nyl4ipmywrd"))))
7367 (build-system python-build-system)
7368 (native-inputs (list python-pbr python-pytest))
7369 (propagated-inputs (list python-six))
7370 (home-page "https://github.com/Infinidat/munch")
7371 (synopsis "Dot-accessible dictionary")
7372 (description "Munch is a dot-accessible dictionary similar to JavaScript
7373objects.")
7374 (license license:expat)))
7375
7376(define-public python-colormath
7377 (package
7378 (name "python-colormath")
7379 (version "3.0.0")
7380 (source
7381 (origin
7382 (method url-fetch)
7383 (uri (pypi-uri "colormath" version))
7384 (sha256
7385 (base32
7386 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
7387 (build-system python-build-system)
7388 (propagated-inputs
7389 (list python-networkx python-numpy))
7390 (home-page "https://github.com/gtaylor/python-colormath")
7391 (synopsis "Color math and conversion library")
7392 (description
7393 "This is a Python library for color math and conversions.")
7394 (license license:bsd-3)))
7395
7396(define-public python-sparse
7397 (package
7398 (name "python-sparse")
7399 (version "0.14.0")
7400 (source
7401 (origin
7402 (method url-fetch)
7403 (uri (pypi-uri "sparse" version))
7404 (sha256
7405 (base32
7406 "1600xad37mff46xg80cy6bi3l2n6jm69j7sl19rzdmkcgyijfn2z"))))
7407 (build-system python-build-system)
7408 (arguments
7409 `(#:phases
7410 (modify-phases %standard-phases
7411 (replace 'check
7412 (lambda* (#:key tests? #:allow-other-keys)
7413 (when tests?
7414 (invoke "python" "-m" "pytest" "-v")))))))
7415 (propagated-inputs
7416 (list python-numba python-numpy python-scipy))
7417 (native-inputs
7418 (list python-dask python-importlib-metadata python-pytest
7419 python-pytest-black python-pytest-cov))
7420 (home-page "https://github.com/pydata/sparse/")
7421 (synopsis "Library for multi-dimensional sparse arrays")
7422 (description
7423 "This package implements sparse arrays of arbitrary dimension on top of
7424@code{numpy} and @code{scipy.sparse}. Sparse array is a matrix in which most
7425of the elements are zero. @code{python-sparse} generalizes the
7426@code{scipy.sparse.coo_matrix} and @code{scipy.sparse.dok_matrix} layouts, but
7427extends beyond just rows and columns to an arbitrary number of dimensions.
7428Additionally, this project maintains compatibility with the
7429@code{numpy.ndarray} interface rather than the @code{numpy.matrix} interface
7430used in @code{scipy.sparse}. These differences make this project useful in
7431certain situations where @code{scipy.sparse} matrices are not well suited, but
7432it should not be considered a full replacement. It lacks layouts that are not
7433easily generalized like @dfn{compressed sparse row/column}(CSR/CSC) and
7434depends on @code{scipy.sparse} for some computations.")
7435 (license license:bsd-3)))
7436
7437(define-public python-spectra
7438 (package
7439 (name "python-spectra")
7440 (version "0.0.11")
7441 (source
7442 (origin
7443 (method url-fetch)
7444 (uri (pypi-uri "spectra" version))
7445 (sha256
7446 (base32
7447 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
7448 (build-system python-build-system)
7449 (arguments
7450 `(#:phases
7451 (modify-phases %standard-phases
7452 (replace 'check
7453 (lambda _ (invoke "nosetests" "-v"))))))
7454 (propagated-inputs
7455 (list python-colormath))
7456 (native-inputs
7457 (list python-nose))
7458 (home-page "https://github.com/jsvine/spectra")
7459 (synopsis "Color scales and color conversion")
7460 (description
7461 "This package provides a Python library intended to make color math,
7462color scales, and color space conversion easy. It has support for:
7463
7464@enumerate
7465@item Color scales
7466@item Color ranges
7467@item Color blending
7468@item Brightening/darkening colors
7469@item Saturating/desaturating colors
7470@item Conversion to/from multiple color spaces.
7471@end enumerate\n")
7472 (license license:expat)))
7473
7474(define-public python-pyspnego
7475 (package
7476 (name "python-pyspnego")
7477 (version "0.1.6")
7478 (source
7479 (origin
7480 (method git-fetch) ;no tests in PyPI release
7481 (uri (git-reference
7482 (url "https://github.com/jborean93/pyspnego")
7483 (commit (string-append "v" version))))
7484 (file-name (git-file-name name version))
7485 (sha256
7486 (base32
7487 "0pfh2x0539f0k2qi2pbjm64b2fqp64c63xxpinvg1yfaw915kgpb"))))
7488 (build-system python-build-system)
7489 (arguments
7490 `(#:phases (modify-phases %standard-phases
7491 (replace 'check
7492 (lambda* (#:key tests? #:allow-other-keys)
7493 (when tests?
7494 (invoke "pytest")))))))
7495 (native-inputs
7496 (list python-pytest python-pytest-mock))
7497 (propagated-inputs
7498 (list python-cryptography python-gssapi python-ruamel.yaml))
7499 (home-page "https://github.com/jborean93/pyspnego")
7500 (synopsis "Python SPNEGO library")
7501 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
7502Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
7503parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
7504readable format.")
7505 (license license:expat)))
7506
7507(define-public python-pygit2
7508 (package
7509 (name "python-pygit2")
7510 (version "1.11.1")
7511 (source
7512 (origin
7513 (method url-fetch)
7514 (uri (pypi-uri "pygit2" version))
7515 (sha256
7516 (base32 "1v34xdvh6i5cn5srwicvp0i2kvv8fzsv0v9p72ng081nsczmhgvr"))))
7517 (build-system pyproject-build-system)
7518 (propagated-inputs (list python-cffi libgit2))
7519 (native-inputs (list python-pytest))
7520 (home-page "https://github.com/libgit2/pygit2")
7521 (synopsis "Python bindings for libgit2")
7522 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
7523 ;; GPL2.0 only, with linking exception.
7524 (license license:gpl2)))
7525
7526(define-public python-patiencediff
7527 (package
7528 (name "python-patiencediff")
7529 (version "0.2.0")
7530 (source
7531 (origin
7532 (method url-fetch)
7533 (uri (pypi-uri "patiencediff" version))
7534 (sha256
7535 (base32
7536 "0yjk50lsd4gnllxls925xbcdxwvmda37w2a1shk0p1nvl3fcha6q"))))
7537 (build-system python-build-system)
7538 (home-page "https://www.breezy-vcs.org/")
7539 (synopsis "Python implementation of the patiencediff algorithm")
7540 (description
7541 "This package contains a Python implementation of the @code{patiencediff}
7542algorithm. Patiencediff provides a good balance of performance, nice output for
7543humans, and implementation simplicity.")
7544 (license license:gpl2)))
7545
7546(define-public python-wmctrl
7547 (package
7548 (name "python-wmctrl")
7549 (version "0.4")
7550 (source
7551 (origin
7552 (method url-fetch)
7553 (uri (pypi-uri "wmctrl" version))
7554 (sha256
7555 (base32
7556 "1q0l1sqnj5wma87k3dsgmsyph464syjc6fl8qcpa41nan1rgzjv6"))))
7557 (build-system python-build-system)
7558 (arguments
7559 `(#:phases (modify-phases %standard-phases
7560 (add-after 'unpack 'patch-paths
7561 (lambda* (#:key inputs #:allow-other-keys)
7562 (let ((wmctrl (assoc-ref inputs "wmctrl")))
7563 (substitute* "wmctrl.py"
7564 (("'wmctrl")
7565 (string-append "'" wmctrl "/bin/wmctrl")))))))))
7566 (inputs (list wmctrl))
7567 (propagated-inputs (list python-attrs))
7568 (home-page "https://github.com/antocuni/wmctrl")
7569 (synopsis "Tool to programmatically control Xorg windows")
7570 (description "This package provides a library for programmatically
7571controlling Xorg windows using Python. The library relies on the
7572@command{wmctrl} to do so.")
7573 (license license:expat)))
7574
7575(define-public python-fancycompleter
7576 (package
7577 (name "python-fancycompleter")
7578 (version "0.9.1")
7579 (source
7580 (origin
7581 (method url-fetch)
7582 (uri (pypi-uri "fancycompleter" version))
7583 (sha256
7584 (base32 "0wkj4h01pxa8prv59zl09a0i3w26k835bfpjgvyvsai4mswgxq09"))))
7585 (build-system python-build-system)
7586 (arguments
7587 `(#:phases (modify-phases %standard-phases
7588 (add-after 'unpack 'fix-setup.py
7589 (lambda _
7590 (substitute* "setup.py"
7591 ((".*setupmeta.*")
7592 "")
7593 (("versioning=.*")
7594 (string-append "version='" ,version "',"))
7595 ((".*pyrepl.*") ;broken on Python 3
7596 "")))))))
7597 (home-page "https://github.com/pdbpp/fancycompleter")
7598 (synopsis "TAB completion library for Python")
7599 (description "@code{fancycompleter} is a module that adds TAB completion
7600to the interactive prompt. It is an extension of the @code{rlcompleter}
7601module from the standard Python library.")
7602 (license license:bsd-3)))
7603
7604(define-public python-ipdb
7605 (package
7606 (name "python-ipdb")
7607 (version "0.13.9")
7608 (source
7609 (origin
7610 (method url-fetch)
7611 (uri (pypi-uri "ipdb" version))
7612 (sha256
7613 (base32 "1ibql99agjf2gj7y0svzd5m0h81hailf4p3sj3yl9i1i8ykdj6wm"))))
7614 (build-system python-build-system)
7615 (arguments
7616 (list #:phases #~(modify-phases %standard-phases
7617 (replace 'check
7618 (lambda* (#:key tests? #:allow-other-keys)
7619 (when tests?
7620 (invoke "python" "-m" "unittest" "discover")))))))
7621 (propagated-inputs (list python-ipython python-toml python-decorator))
7622 (home-page "https://github.com/gotcha/ipdb")
7623 (synopsis "IPython-enhanced Python debugger (pdb)")
7624 (description "@code{ipdb} exports functions to access the IPython
7625debugger, which features tab completion, syntax highlighting, better
7626tracebacks and better introspection than Python's standard @command{pdb}
7627debugger, with which it shares the same interface.")
7628 (license license:bsd-3)))
7629
7630(define-public python-pdbpp
7631 ;; The latest release lacks support for Python 3.10; use the latest commit
7632 ;; of the master branch (see: https://github.com/pdbpp/pdbpp/issues/503).
7633 (let ((commit "e1c2e347cc55a6dd89e058e56a1366ada68884bc")
7634 (revision "0"))
7635 (package
7636 (name "python-pdbpp")
7637 (version (git-version "0.10.3" revision commit))
7638 (source (origin
7639 (method git-fetch)
7640 (uri (git-reference
7641 (url "https://github.com/pdbpp/pdbpp")
7642 (commit commit)))
7643 (file-name (git-file-name name version))
7644 (sha256
7645 (base32
7646 "1hql1ldwa9czml7zrnv6qdzgpywwav3a282dbvqypf108zvjsdiw"))))
7647 (build-system python-build-system)
7648 (arguments
7649 (list
7650 #:phases
7651 #~(modify-phases %standard-phases
7652 (add-before 'build 'pretend-version
7653 (lambda _
7654 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
7655 #$(package-version this-package))))
7656 (replace 'check
7657 (lambda* (#:key tests? #:allow-other-keys)
7658 (when tests?
7659 (invoke "pytest"
7660 "-k"
7661 (string-append
7662 ;; These tests seem to require a real TTY.
7663 "not interaction_restores_previous_sigint_handler "
7664 "and not python_m_pdb_uses_pdbpp"))))))))
7665 (propagated-inputs
7666 (list python-fancycompleter python-pygments python-wmctrl))
7667 (native-inputs
7668 (list python-pytest python-setuptools-scm))
7669 (home-page "https://github.com/pdbpp/pdbpp")
7670 (synopsis "Drop-in replacement for pdb")
7671 (description "Pdb++ is a drop-in replacement for @code{pdb}. It
7672includes the following improvements compared to @code{pdb}:
7673@itemize
7674@item auto-completion
7675@item syntax highlighting of code listings
7676@item sticky mode
7677@item new commands to be used from the interactive (Pdb++) prompt
7678@item smart command parsing
7679@item additional convenience functions in the @code{pdb} module.
7680@end itemize")
7681 (license license:bsd-3))))
7682
7683(define-public python-pdftotext
7684 (package
7685 (name "python-pdftotext")
7686 (version "2.1.6")
7687 (source
7688 (origin
7689 (method url-fetch)
7690 (uri (pypi-uri "pdftotext" version))
7691 (sha256
7692 (base32 "1555wbgr5spj8xflrs4mwsrdmba2f9s72nk50xzqk9ghxaxdvy6a"))))
7693 (build-system python-build-system)
7694 (inputs
7695 (list poppler))
7696 (home-page "https://github.com/jalan/pdftotext")
7697 (synopsis "Simple PDF text extraction")
7698 (description "Pdftotext is a Python library of PDF text extraction.")
7699 (license license:expat)))
7700
7701(define-public python-pluginbase
7702 (package
7703 (name "python-pluginbase")
7704 (version "1.0.1")
7705 (source
7706 (origin
7707 (method url-fetch)
7708 (uri (pypi-uri "pluginbase" version))
7709 (sha256
7710 (base32
7711 "11z2vvbp13828y0x3w39f29p9r9xcix7h7c4fff2w8yfiylk6v7z"))))
7712 (build-system python-build-system)
7713 (arguments
7714 `(#:phases (modify-phases %standard-phases
7715 (replace 'check
7716 (lambda* (#:key tests? #:allow-other-keys)
7717 (when tests?
7718 (invoke "make" "test")))))))
7719 (native-inputs (list python-pytest))
7720 (home-page "https://github.com/mitsuhiko/pluginbase")
7721 (synopsis "Simple but flexible plugin system for Python")
7722 (description "PluginBase is a library useful in the development of
7723flexible plugin systems in Python.")
7724 (license license:bsd-3)))
7725
7726(define-public python-node-semver
7727 (package
7728 (name "python-node-semver")
7729 (version "0.8.1")
7730 (source
7731 (origin
7732 (method url-fetch)
7733 (uri (pypi-uri "node-semver" version))
7734 (sha256
7735 (base32
7736 "000ypfns5x72b41w5f9pk6k3jnr35scliqfbvmilyvv0178005i8"))))
7737 (build-system python-build-system)
7738 (native-inputs
7739 (list python-pytest))
7740 (home-page "https://github.com/podhmo/python-node-semver")
7741 (synopsis "Python port of node-semver")
7742 (description "This module provides a Python version of node-semver, a
7743semantic version parser for Node.js.")
7744 (license license:expat)))
7745
7746(define-public python-norns
7747 (package
7748 (name "python-norns")
7749 (version "0.1.6")
7750 (source (origin
7751 (method url-fetch)
7752 (uri (pypi-uri "norns" version))
7753 (sha256
7754 (base32
7755 "1r1lcq59v6l75wkbp7mypanr69a6fv6m58v6dw3v6b4vwz5nqg0z"))))
7756 (build-system pyproject-build-system)
7757 (propagated-inputs (list python-appdirs python-nose python-pyyaml))
7758 (home-page "https://github.com/simonvh/norns")
7759 (synopsis "Simple YAML-based config module")
7760 (description "This package provides a simple YAML-based config module.")
7761 (license license:expat)))
7762
7763(define-public python-patch-ng
7764 (package
7765 (name "python-patch-ng")
7766 (version "1.17.4")
7767 (source
7768 (origin
7769 (method git-fetch) ;no tests in PyPI archive
7770 (uri (git-reference
7771 (url "https://github.com/conan-io/python-patch-ng")
7772 (commit version)))
7773 (file-name (git-file-name name version))
7774 (sha256
7775 (base32
7776 "0qxn4ss2s54qy87xrpcybz26kp2fwlaq41x4k9jcmp6d7p0w569m"))))
7777 (build-system python-build-system)
7778 (arguments
7779 `(#:phases (modify-phases %standard-phases
7780 (replace 'check
7781 (lambda* (#:key tests? #:allow-other-keys)
7782 (when tests?
7783 (invoke "tests/run_tests.py" "-v")))))))
7784 (home-page "https://github.com/conan-io/python-patch-ng")
7785 (synopsis "Python library to parse and apply unified diffs")
7786 (description "Patch NG (New Generation) is a command and Python library to
7787parse and apply unified diffs. It has features such as:
7788@itemize
7789@item automatic correction of common patch formatting corruption
7790@item patch format detection (SVN, Hg, Git)
7791@item nice diffstat histogram.
7792@end itemize")
7793 (license license:expat)))
7794
7795(define-public python-numpydoc
7796 (package
7797 (name "python-numpydoc")
7798 (version "1.5.0")
7799 (source
7800 (origin
7801 (method url-fetch)
7802 (uri (pypi-uri "numpydoc" version))
7803 (sha256
7804 (base32
7805 "0k2z3g4s3w39h1nd293542hl9qv55j29gcr3bkia0rr3ldsppnxh"))))
7806 (build-system python-build-system)
7807 (arguments
7808 `(#:phases
7809 (modify-phases %standard-phases
7810 (replace 'check
7811 (lambda* (#:key tests? #:allow-other-keys)
7812 (when tests?
7813 (invoke "pytest" "-v" "numpydoc/tests"
7814 ;; TODO: unclear why these fail.
7815 "-k" "not test_MyClass and not test_my_function")))))))
7816 (propagated-inputs (list python-jinja2 python-sphinx))
7817 (native-inputs (list python-matplotlib python-pytest python-pytest-cov))
7818 (home-page "https://pypi.org/project/numpydoc/")
7819 (synopsis "Numpy's Sphinx extensions")
7820 (description "Sphinx extension to support docstrings in Numpy format.")
7821 (license license:bsd-2)))
7822
7823(define-public python-numexpr
7824 (package
7825 (name "python-numexpr")
7826 (version "2.8.4")
7827 (source
7828 (origin
7829 (method url-fetch)
7830 (uri (pypi-uri "numexpr" version))
7831 (sha256
7832 (base32
7833 "0iv1h1lvry5vmzqyvwxfbckyhzm1vbb1bmhmj4dnj64d84vjahym"))))
7834 (build-system python-build-system)
7835 (arguments `(#:tests? #f)) ; no tests included
7836 (propagated-inputs
7837 (list python-numpy))
7838 (home-page "https://github.com/pydata/numexpr")
7839 (synopsis "Fast numerical expression evaluator for NumPy")
7840 (description
7841 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
7842expressions that operate on arrays are accelerated and use less memory than
7843doing the same calculation in Python. In addition, its multi-threaded
7844capabilities can make use of all your cores, which may accelerate
7845computations, most specially if they are not memory-bounded (e.g. those using
7846transcendental functions).")
7847 (license license:expat)))
7848
7849(define-public python-cycler
7850 (package
7851 (name "python-cycler")
7852 (version "0.10.0")
7853 (source (origin
7854 (method url-fetch)
7855 (uri (pypi-uri "cycler" version))
7856 (sha256
7857 (base32
7858 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
7859 (build-system python-build-system)
7860 (arguments
7861 ;; XXX: The current version requires 'coveralls' which we don't have.
7862 ;; Enable this for the next release which uses 'python-pytest'.
7863 '(#:tests? #f))
7864 (propagated-inputs
7865 (list python-six))
7866 (home-page "https://matplotlib.org/cycler/")
7867 (synopsis "Composable keyword argument iterator")
7868 (description
7869 "When using @code{matplotlib} and plotting more than one line, it is
7870common to want to be able to want to be able to cycle over one or more artist
7871styles; but the plotting logic can quickly become involved.
7872To address this and enable easy cycling over arbitrary @code{kwargs}, the
7873@code{Cycler} class was developed.")
7874 (license license:bsd-3)))
7875
7876(define-public python-colorspacious
7877 (package
7878 (name "python-colorspacious")
7879 (version "1.1.2")
7880 (source
7881 (origin
7882 (method git-fetch)
7883 (uri (git-reference
7884 (url "https://github.com/njsmith/colorspacious")
7885 (commit (string-append "v" version))))
7886 (file-name (git-file-name name version))
7887 (sha256
7888 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
7889 (build-system python-build-system)
7890 (propagated-inputs
7891 (list python-numpy))
7892 (native-inputs
7893 (list python-nose))
7894 (arguments
7895 `(#:phases
7896 (modify-phases %standard-phases
7897 (replace 'check
7898 (lambda _
7899 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
7900 (home-page "https://github.com/njsmith/colorspacious")
7901 (synopsis "Python library for colorspace conversions")
7902 (description "@code{colorspacious} is a Python library that lets you
7903convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
7904 (license license:expat)))
7905
7906(define-public python-proto-matcher
7907 (package
7908 (name "python-proto-matcher")
7909 (version "0.0.3")
7910 (source
7911 (origin
7912 (method url-fetch)
7913 (uri (pypi-uri "proto_matcher" version))
7914 (sha256
7915 (base32 "1644x0hrl398ji3281n44ymfgc3cspzfagjckhqjn4nja5nlikxg"))))
7916 (build-system python-build-system)
7917 (arguments
7918 `(#:tests? #f)) ;no test suite
7919 (propagated-inputs
7920 (list python-protobuf python-pyhamcrest))
7921 (home-page "https://github.com/dayfine/proto-matcher")
7922 (synopsis "PyHamcrest test matchers for protocol buffers")
7923 (description "This package provides the following PyHamcrest test
7924matchers, that enable matching a protocol buffer message:
7925@table @code
7926@item equals_proto
7927Test the argument equals the given protobuf message.
7928@item approximately
7929Test the argument equals the given protobuf message, while comparing any float
7930field using approximation.
7931@item ignoring_field_paths
7932Test the argument equals the given protobuf message, while ignoring those
7933fields specified in the field paths.
7934@item ignoring_repeated_field_ordering
7935Test the argument equals the given protobuf message, ignoring the ordering of
7936any repeated field.
7937@item partially
7938Test the argument partially equals the given protobuf message, i.e. if a field
7939is in the argument but not in the expected message, it's ignored in the
7940comparison.
7941@end table")
7942 (license license:asl2.0)))
7943
7944(define-public python-matplotlib
7945 (package
7946 (name "python-matplotlib")
7947 (version "3.5.2")
7948 (source
7949 (origin
7950 (method url-fetch)
7951 (uri (pypi-uri "matplotlib" version))
7952 (sha256
7953 (base32 "18h78s5ld1i6mz00w258hy29909nfr3ddq6ry9kq18agw468bks8"))))
7954 (build-system python-build-system)
7955 (arguments
7956 (list
7957 #:phases
7958 #~(modify-phases %standard-phases
7959 (add-before 'build 'pretend-version
7960 ;; The version string is usually derived via setuptools-scm, but
7961 ;; without the git metadata available, the version string is set to
7962 ;; '0.0.0'.
7963 (lambda _
7964 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
7965 (add-after 'unpack 'fix-and-disable-failing-tests
7966 ;; XXX: Disable all image comparison tests because we're using a
7967 ;; newer version of FreeType than matplotlib expects. This leads
7968 ;; to minor differences throughout the tests.
7969 (lambda _
7970 (substitute* (append (find-files "lib/matplotlib/tests/"
7971 "test_.*\\.py$")
7972 (find-files "lib/mpl_toolkits/tests"
7973 "test_.*\\.py$"))
7974 (("^from matplotlib" match)
7975 (string-append "import pytest\n" match))
7976 (("( *)@([^_]+_)*(image_comparison|check_figures_equal)" match
7977 indent)
7978 (string-append indent "@pytest.mark.skip(\
7979reason=\"unknown minor image differences\")\n" match)))
7980 (substitute* "lib/matplotlib/tests/test_animation.py"
7981 (("/bin/sh") (which "sh")))
7982 (for-each delete-file
7983 ;; test_normal_axes, test_get_tightbbox_polar
7984 '("lib/matplotlib/tests/test_axes.py"
7985 "lib/matplotlib/tests/test_polar.py"
7986 ;; We don't use the webagg backend and this test
7987 ;; forces it.
7988 "lib/matplotlib/tests/test_backend_webagg.py"
7989 ;; test_outward_ticks
7990 "lib/matplotlib/tests/test_tightlayout.py"
7991 ;; test_hidden_axes fails with minor extent
7992 ;; differences, possibly due to the use of a
7993 ;; different version of FreeType.
7994 "lib/matplotlib/tests/test_constrainedlayout.py"
7995 ;; Fontconfig returns no fonts.
7996 "lib/matplotlib/tests/test_font_manager.py"
7997 ;; The images comparison test fails
7998 ;; non-deterministically when run in parallel (see:
7999 ;; https://github.com/matplotlib/matplotlib/issues/22992).
8000 "lib/matplotlib/tests/test_compare_images.py"))))
8001 (add-before 'build 'configure-environment
8002 (lambda* (#:key inputs #:allow-other-keys)
8003 ;; Fix rounding errors when using the x87 FPU.
8004 (when (string-prefix? "i686" #$(%current-system))
8005 (setenv "CFLAGS" "-ffloat-store"))
8006 (call-with-output-file "mplsetup.cfg"
8007 (lambda (port)
8008 (format port "\
8009[libs]
8010system_freetype = true
8011system_qhull = true
8012
8013[rc_options]
8014backend=Agg
8015
8016[directories]
8017basedirlist = ~a,~a
8018
8019[packages]
8020tests = True~%" (assoc-ref inputs "tcl") (assoc-ref inputs "tk"))))))
8021 (replace 'check
8022 (lambda* (#:key tests? #:allow-other-keys)
8023 (when tests?
8024 ;; Step out of the source directory to avoid interference.
8025 (with-directory-excursion "/tmp"
8026 ;; Run the installed tests, which is what we want since not
8027 ;; everything gets built in the source directory.
8028 (invoke "pytest"
8029 "-n" (number->string (parallel-job-count))
8030 "-m" "not network" "--pyargs" "matplotlib"
8031 "-k"
8032 (string-append
8033 ;; The 'test_lazy_auto_backend_selection' fails
8034 ;; because it would require an X server; skip it.
8035 "not test_lazy_auto_backend_selection"
8036 ;; test_getattr fails for the GTK backend because
8037 ;; of an unexpected warning from Python 3.10
8038 ;; (via the gi module):
8039 ;; https://gitlab.gnome.org/GNOME/pygobject/-/issues/494
8040 " and not test_getattr")))))))))
8041 (propagated-inputs
8042 (list gobject-introspection
8043 python-cairocffi
8044 python-certifi
8045 python-cycler
8046 python-dateutil
8047 python-fonttools-minimal
8048 python-kiwisolver
8049 python-numpy
8050 python-packaging
8051 python-pillow
8052 ;; ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
8053 ;; ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
8054 ;; ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
8055 ;; ;; object. For this reason we need to import both libraries.
8056 ;; python-pycairo
8057 python-pygobject
8058 python-pyparsing
8059 python-pytz
8060 python-six
8061 `(,python "tk")
8062 python-wxpython))
8063 (inputs
8064 (list cairo
8065 freetype
8066 glib
8067 libpng
8068 qhull
8069 tcl
8070 tk))
8071 (native-inputs
8072 (list pkg-config
8073 python-pytest
8074 python-pytest-timeout
8075 python-pytest-xdist
8076 python-setuptools-scm
8077 python-setuptools-scm-git-archive))
8078 (home-page "https://matplotlib.org/")
8079 (synopsis "2D plotting library for Python")
8080 (description
8081 "Matplotlib is a Python 2D plotting library which produces publication
8082quality figures in a variety of hardcopy formats and interactive environments
8083across platforms. Matplotlib can be used in Python scripts, the python and
8084ipython shell, web application servers, and six graphical user interface
8085toolkits.")
8086 (license license:psfl)))
8087
8088(define-public python-matplotlib-documentation
8089 (package
8090 (inherit python-matplotlib)
8091 (name "python-matplotlib-documentation")
8092 (arguments
8093 (list
8094 #:tests? #f ;we're only generating documentation
8095 #:phases
8096 #~(modify-phases %standard-phases
8097 (replace 'build
8098 (lambda _
8099 (setenv "HOME" "/tmp")
8100 (chdir "doc")
8101 (substitute* "conf.py"
8102 ;; The sphinx_panels extension causes a "TypeError: first
8103 ;; argument must be callable" to be raised when generating the
8104 ;; info target; remove it (see:
8105 ;; https://github.com/executablebooks/sphinx-panels/issues/74).
8106 ((".*'sphinx_panels',.*") ""))
8107 (invoke "make" "html" "info"
8108 ;; Don't abort on warnings; build in parallel.
8109 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
8110 (replace 'install
8111 (lambda _
8112 (let* ((data (string-append #$output "/share"))
8113 (doc (string-append data "/doc/matplotlib"))
8114 (info (string-append data "/info"))
8115 (html (string-append doc "/html")))
8116 (mkdir-p html)
8117 (copy-recursively "build/html" html)
8118 (install-file "build/texinfo/matplotlib.info" info)
8119 ;; The "matplotlib-figures" directory contains are a subset of
8120 ;; the images produced for the html target; simply create a
8121 ;; symlink to it, saving about 11 MiB.
8122 (symlink (string-append html "/_images")
8123 (string-append info "/matplotlib-figures"))))))))
8124 (native-inputs
8125 (list graphviz
8126 inkscape/stable
8127 python-colorspacious
8128 python-ipython
8129 python-ipywidgets
8130 python-mpl-sphinx-theme
8131 python-numpydoc
8132 python-scipy
8133 python-sphinx
8134 python-sphinx-copybutton
8135 python-sphinx-gallery
8136 python-sphinxcontrib-svg2pdfconverter
8137 texinfo
8138 texlive-amsfonts
8139 texlive-amsmath
8140 texlive-babel
8141 texlive-etoolbox
8142 texlive-expdlist
8143 texlive-fontspec
8144 texlive-times
8145 texlive-type1cm
8146 texlive-underscore
8147 texlive-unicode-math))
8148 (synopsis "Documentation for the @code{python-matplotlib} package")))
8149
8150(define-public python-matplotlib-inline
8151 (package
8152 (name "python-matplotlib-inline")
8153 (version "0.1.3")
8154 (source
8155 (origin
8156 (method url-fetch)
8157 (uri (pypi-uri "matplotlib-inline" version))
8158 (sha256
8159 (base32 "1vilzwj3xp00mxprmmn1hlafm3p23vn56s46kx3ra4qd5signjx0"))))
8160 (build-system python-build-system)
8161 (propagated-inputs
8162 (list python-matplotlib python-traitlets))
8163 (arguments
8164 ;; Tests disabled because of a circular dependency with ipython.
8165 `(#:tests? #f))
8166 (home-page "https://github.com/ipython/matplotlib-inline")
8167 (synopsis "Inline Matplotlib backend for Jupyter")
8168 (description
8169 "This package provides a Matplotlib inline back-end for IPython and
8170Jupyter.")
8171 (license license:bsd-3)))
8172
8173(define-public python-matplotlib-venn
8174 (package
8175 (name "python-matplotlib-venn")
8176 (version "0.11.5")
8177 (source
8178 (origin
8179 (method url-fetch)
8180 (uri (pypi-uri "matplotlib-venn" version ".zip"))
8181 (sha256
8182 (base32
8183 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
8184 (build-system python-build-system)
8185 (arguments '(#:tests? #f)) ; tests are not included
8186 (propagated-inputs
8187 (list python-matplotlib python-numpy python-scipy))
8188 (native-inputs
8189 (list unzip))
8190 (home-page "https://github.com/konstantint/matplotlib-venn")
8191 (synopsis "Plot area-proportional Venn diagrams")
8192 (description
8193 "This package provides tools for plotting area-proportional two- and
8194three-way Venn diagrams in @code{matplotlib}.")
8195 (license license:expat)))
8196
8197(define-public python-pysnptools
8198 (package
8199 (name "python-pysnptools")
8200 (version "0.4.11")
8201 (source
8202 (origin
8203 (method url-fetch)
8204 (uri (pypi-uri "pysnptools" version))
8205 (sha256
8206 (base32
8207 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
8208 (build-system python-build-system)
8209 (arguments
8210 `(#:tests? #f ; no test data are included
8211 #:phases
8212 (modify-phases %standard-phases
8213 (replace 'check
8214 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
8215 (if tests?
8216 (begin
8217 (add-installed-pythonpath inputs outputs)
8218 (invoke "python3" "pysnptools/test.py"))
8219 #t))))))
8220 (propagated-inputs
8221 (list python-dill
8222 python-h5py
8223 python-numpy
8224 python-pandas
8225 python-psutil
8226 python-scipy))
8227 (native-inputs
8228 (list python-cython))
8229 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
8230 (synopsis "Library for reading and manipulating genetic data")
8231 (description
8232 "PySnpTools is a library for reading and manipulating genetic data. It
8233can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
8234those files. It can also efficiently manipulate ranges of integers using set
8235operators such as union, intersection, and difference.")
8236 (license license:asl2.0)))
8237
8238(define-public python-pykdtree
8239 (package
8240 (name "python-pykdtree")
8241 (version "1.3.4")
8242 (source
8243 (origin
8244 (method url-fetch)
8245 (uri (pypi-uri "pykdtree" version))
8246 (sha256
8247 (base32 "0p8n2ljdacfixkiw092974dmhy4s1c0h032ii1z9kwi9h5h5rgmy"))))
8248 (build-system python-build-system)
8249 (native-inputs
8250 (list python-nose))
8251 (propagated-inputs
8252 (list python-numpy))
8253 (home-page "https://github.com/storpipfugl/pykdtree")
8254 (synopsis "Fast kd-tree implementation with OpenMP-enabled queries")
8255 (description
8256 "@code{pykdtree} is a kd-tree implementation for fast nearest neighbour
8257search in Python.")
8258 (license license:lgpl3+)))
8259
8260(define-public python-wurlitzer
8261 (package
8262 (name "python-wurlitzer")
8263 (version "2.0.1")
8264 (source
8265 (origin
8266 (method url-fetch)
8267 (uri (pypi-uri "wurlitzer" version))
8268 (sha256
8269 (base32 "0hvmbc41kdwrjns8z1s4a59a4azdvzb8q3vs7nn1li4qm4l0g3yh"))))
8270 (build-system python-build-system)
8271 (arguments
8272 '(#:phases
8273 (modify-phases %standard-phases
8274 (replace 'check
8275 (lambda _
8276 (invoke "pytest" "-vv" "test.py"))))))
8277 (native-inputs
8278 (list python-mock python-pytest))
8279 (home-page "https://github.com/minrk/wurlitzer")
8280 (synopsis "Capture C-level output in context managers")
8281 (description
8282 "This library helps to redirect @code{sys.stdout} to a stream or a file
8283while executing some piece of code, including C code running within a Python
8284process.")
8285 (license license:expat)))
8286
8287(define-public python-socksipy-branch
8288 (package
8289 (name "python-socksipy-branch")
8290 (version "1.01")
8291 (source
8292 (origin
8293 (method url-fetch)
8294 (uri (pypi-uri "SocksiPy-branch" version))
8295 (sha256
8296 (base32
8297 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
8298 (build-system python-build-system)
8299 (arguments
8300 `(#:tests? #f)) ; There are no tests
8301 (home-page "https://code.google.com/archive/p/socksipy-branch/")
8302 (synopsis "Python SOCKS module")
8303 (description
8304 "SocksiPy - A Python SOCKS client module. It provides a
8305socket-like interface that supports connections to any TCP
8306service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
8307The original version was developed by Dan Haim, this is a
8308branch created by Mario Vilas to address some open issues,
8309as the original project seems to have been abandoned circa 2007.")
8310 (license license:bsd-3)))
8311
8312(define-public python-socksipychain
8313 (package
8314 (name "python-socksipychain")
8315 (version "2.1.2")
8316 (source
8317 (origin
8318 (method git-fetch)
8319 (uri (git-reference
8320 (url "https://github.com/pagekite/PySocksipyChain")
8321 (commit (string-append "v" version))))
8322 (file-name (git-file-name name version))
8323 (sha256
8324 (base32
8325 "02pp994qmiivkdx4y6az5q80l6rzy8g6d2ipvp7kns7lsxvmc2y7"))))
8326 (build-system python-build-system)
8327 (arguments
8328 `(#:tests? #f)) ; Tests try to access the network.
8329 (propagated-inputs
8330 (list python-six))
8331 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
8332 (synopsis "Python SOCKS module with chained proxies support")
8333 (description
8334 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
8335adds support for arbitrary chaining of proxy servers and various modes of
8336TLS/SSL encryption. It was developed for use in PageKite, and also includes
8337a simple netcat replacement with chaining support.")
8338 (license license:bsd-3)))
8339
8340(define-public python-pycodestyle
8341 (package
8342 (name "python-pycodestyle")
8343 (version "2.8.0")
8344 (source
8345 (origin
8346 (method url-fetch)
8347 (uri (pypi-uri "pycodestyle" version))
8348 (sha256
8349 (base32
8350 "0zxyrg8029lzjhima6l5nk6y0z6lm5wfp9qchz3s33j3xx3mipgd"))))
8351 (build-system python-build-system)
8352 (arguments
8353 `(#:phases
8354 (modify-phases %standard-phases
8355 (replace 'check
8356 (lambda* (#:key tests? #:allow-other-keys)
8357 (when tests?
8358 (invoke "pytest" "-vv")))))))
8359 (native-inputs
8360 (list python-pytest))
8361 (home-page "https://pycodestyle.readthedocs.io/")
8362 (synopsis "Python style guide checker")
8363 (description "@code{pycodestyle} (formerly pep8) is a tool to check
8364Python code against some of the style conventions in
8365@url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
8366 (license license:expat)))
8367
8368(define-public python-pycodestyle-2.6
8369 (package
8370 (inherit python-pycodestyle)
8371 (version "2.6.0")
8372 (source (origin
8373 (method url-fetch)
8374 (uri (pypi-uri "pycodestyle" version))
8375 (sha256
8376 (base32
8377 "0bhr6ia0hmgx3nhgibc9pmkzhlh1zcqk707i5fbxgs702ll7v2n5"))))))
8378
8379(define-public python-multidict
8380 (package
8381 (name "python-multidict")
8382 (version "5.2.0")
8383 (source
8384 (origin
8385 (method url-fetch)
8386 (uri (pypi-uri "multidict" version))
8387 (sha256
8388 (base32
8389 "1kjrxav572j45xvr1iy60zb2g8zqvrinzdkl4ax36js4vczckl8d"))))
8390 (build-system python-build-system)
8391 (arguments
8392 '(#:phases (modify-phases %standard-phases
8393 (replace 'check
8394 (lambda* (#:key tests? #:allow-other-keys)
8395 (if tests?
8396 (invoke "pytest" "-vv")
8397 (format #t "test suite not run~%")))))))
8398 (native-inputs
8399 (list python-pytest python-pytest-cov))
8400 (home-page "https://github.com/aio-libs/multidict/")
8401 (synopsis "Multidict implementation")
8402 (description "Multidict is dict-like collection of key-value pairs
8403where key might be occurred more than once in the container.")
8404 (license license:asl2.0)))
8405
8406(define-public python-orderedmultidict
8407 (package
8408 (name "python-orderedmultidict")
8409 (version "1.0.1")
8410 (source
8411 (origin
8412 (method url-fetch)
8413 (uri (pypi-uri "orderedmultidict" version))
8414 (sha256
8415 (base32
8416 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
8417 (build-system python-build-system)
8418 (propagated-inputs
8419 (list python-six))
8420 (native-inputs
8421 (list python-flake8 python-pycodestyle))
8422 (home-page "https://github.com/gruns/orderedmultidict")
8423 (synopsis "Python Ordered Multivalue Dictionary - omdict")
8424 (description "This package contains a library for ordered multivalue
8425dictionaries. A multivalue dictionary is a dictionary that can store
8426multiple values for the same key. An ordered multivalue dictionary is a
8427multivalue dictionary that retains the order of insertions and deletions.")
8428 (license license:unlicense)))
8429
8430(define-public python-autocommand
8431 (package
8432 (name "python-autocommand")
8433 (version "2.2.1")
8434 (source
8435 (origin
8436 (method url-fetch)
8437 (uri (pypi-uri "autocommand" version))
8438 (sha256
8439 (base32 "03qp9xx4dq81ljhf56r21gp5j0lpqs1vaw99g0d84i97s3lj1m7y"))))
8440 (build-system python-build-system)
8441 (arguments
8442 (list
8443 #:phases
8444 #~(modify-phases %standard-phases
8445 (replace 'check
8446 (lambda* (#:key tests? #:allow-other-keys)
8447 (when tests?
8448 ;; This test fails with an invalid syntax error on 'task1 =
8449 ;; asyncio.async(coro_1())' (see:
8450 ;; https://github.com/Lucretiel/autocommand/issues/20).
8451 (delete-file "test/test_autoasync.py")
8452 (invoke "pytest" "-vv")))))))
8453 (native-inputs (list python-pytest python-pytest-asyncio))
8454 (home-page "https://github.com/Lucretiel/autocommand")
8455 (synopsis "Python library to build a command-line from a function")
8456 (description "@code{autocommand} is library to automatically generate and
8457run simple @code{argparse} parsers from function signatures.")
8458 (license license:lgpl3+)))
8459
8460(define-public python-autopage
8461 (package
8462 (name "python-autopage")
8463 (version "0.5.1")
8464 (source (origin
8465 (method url-fetch)
8466 (uri (pypi-uri "autopage" version))
8467 (sha256
8468 (base32
8469 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
8470 (build-system pyproject-build-system)
8471 (arguments
8472 (list
8473 #:phases
8474 #~(modify-phases %standard-phases
8475 (add-before 'check 'disable-e2e-tests
8476 (lambda _
8477 ;; These tests rely on KeyboardInterrupts which do not
8478 ;; work in the build container.
8479 (delete-file "autopage/tests/test_end_to_end.py"))))))
8480 (native-inputs
8481 (list python-pypa-build
8482 python-setuptools
8483 python-wheel
8484 ;; For tests.
8485 python-fixtures
8486 python-pytest
8487 python-testtools))
8488 (home-page "https://github.com/zaneb/autopage")
8489 (synopsis "Automatic paging for console output")
8490 (description
8491 "Autopage is a Python library to automatically display terminal output
8492from a program in a @dfn{pager} such as @command{less}.")
8493 (license license:asl2.0)))
8494
8495(define-public python-autopep8
8496 (package
8497 (name "python-autopep8")
8498 (version "1.5.3")
8499 (source
8500 (origin
8501 (method url-fetch)
8502 (uri (pypi-uri "autopep8" version))
8503 (sha256
8504 (base32
8505 "1w6vh627vrmgfbvrdcxrc3k4gxcldrb2lpgxv9irkdds851qrzb0"))))
8506 (build-system python-build-system)
8507 (propagated-inputs
8508 (list python-pycodestyle python-toml))
8509 (home-page "https://github.com/hhatto/autopep8")
8510 (synopsis "Format Python code according to the PEP 8 style guide")
8511 (description
8512 "@code{autopep8} automatically formats Python code to conform to
8513the PEP 8 style guide. It uses the pycodestyle utility to determine
8514what parts of the code needs to be formatted. @code{autopep8} is
8515capable of fixing most of the formatting issues that can be reported
8516by pycodestyle.")
8517 (license (license:non-copyleft
8518 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
8519
8520(define-public python-distlib
8521 (package
8522 (name "python-distlib")
8523 (version "0.3.5")
8524 (source
8525 (origin
8526 (method url-fetch)
8527 (uri (pypi-uri "distlib" version))
8528 (sha256
8529 (base32
8530 "1zmjraasgqkz0gfv4mc4w4fj4k2fxj62h1pf5dgb5qqbqwvmgxx7"))))
8531 (build-system python-build-system)
8532 (arguments
8533 (list
8534 #:phases
8535 #~(modify-phases %standard-phases
8536 (replace 'build
8537 (lambda _
8538 ;; ZIP does not support timestamps before 1980.
8539 (setenv "SOURCE_DATE_EPOCH" "315532800")
8540 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
8541 (add-before 'build 'no-/bin/sh
8542 (lambda _
8543 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
8544 (("/bin/sh") (which "sh")))))
8545 (replace 'check
8546 (lambda* (#:key tests? #:allow-other-keys)
8547 (setenv "HOME" "/tmp")
8548 ;; NOTE: Any value works, the variable just has to be present.
8549 (setenv "SKIP_ONLINE" "1")
8550 (when tests?
8551 (invoke "pytest" "-vv"))))
8552 (replace 'install
8553 (lambda _
8554 (let ((whl (car (find-files "dist" "\\.whl$"))))
8555 (invoke "pip" "--no-cache-dir" "--no-input"
8556 "install" "--no-deps" "--prefix" #$output whl)))))))
8557 (native-inputs
8558 (list python-pypa-build python-pytest))
8559 (home-page "https://github.com/pypa/distlib")
8560 (synopsis "Distribution utilities")
8561 (description "Distlib is a library which implements low-level functions that
8562relate to packaging and distribution of Python software. It is intended to be
8563used as the basis for third-party packaging tools.")
8564 (license license:psfl)))
8565
8566(define-public python-distutils-extra
8567 (package
8568 (name "python-distutils-extra")
8569 (version "2.38")
8570 (source
8571 (origin
8572 (method url-fetch)
8573 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
8574 version "/+download/python-distutils-extra-"
8575 version ".tar.gz"))
8576 (sha256
8577 (base32
8578 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
8579 (build-system python-build-system)
8580 (home-page "https://launchpad.net/python-distutils-extra/")
8581 (synopsis "Enhancements to Python's distutils")
8582 (description
8583 "The python-distutils-extra module enables you to easily integrate
8584gettext support, themed icons, and scrollkeeper-based documentation into
8585Python's distutils.")
8586 (license license:gpl2)))
8587
8588(define-public python-olefile
8589 (package
8590 (name "python-olefile")
8591 (version "0.46")
8592 (source
8593 (origin
8594 (method url-fetch)
8595 (uri (string-append "https://github.com/decalage2/olefile/releases/"
8596 "download/v" version "/olefile-" version ".tar.gz"))
8597 (file-name (string-append name "-" version ".tar.gz"))
8598 (sha256
8599 (base32
8600 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
8601 (build-system python-build-system)
8602 (home-page "https://www.decalage.info/python/olefileio")
8603 (synopsis "Read and write Microsoft OLE2 files")
8604 (description
8605 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
8606Storage or Compound Document, Microsoft Office). It is an improved version of
8607the OleFileIO module from PIL, the Python Image Library.")
8608 (license license:bsd-3)))
8609
8610(define-public python-pypdf3
8611 (package
8612 (name "python-pypdf3")
8613 (version "1.0.5")
8614 (source
8615 (origin
8616 (method url-fetch)
8617 (uri (pypi-uri "PyPDF3" version))
8618 (sha256
8619 (base32 "018hlq9q2qa96vw4j7ppq352znykldwy98h2w9qcpkvpi93sjqhc"))))
8620 (build-system python-build-system)
8621 (propagated-inputs
8622 (list python-tqdm))
8623 (home-page "https://github.com/sfneal/PyPDF3")
8624 (synopsis "Utility to read and write PDFs with Python")
8625 (description "PyPDF3 is a pure-python PDF library capable of splitting,
8626merging together, cropping, and transforming the pages of PDF files. It can
8627also add custom data, viewing options, and passwords to PDF files. It can
8628retrieve text and metadata from PDFs as well as merge entire files together.")
8629 (license license:bsd-3)))
8630
8631(define-public python-pikepdf
8632 (package
8633 (name "python-pikepdf")
8634 (version "7.2.0")
8635 (source
8636 (origin
8637 (method url-fetch)
8638 (uri (pypi-uri "pikepdf" version))
8639 (sha256
8640 (base32 "1vp3q85l2w7wpc8kqs26ijg3ivvvgj50z7g14p3pc0zdz8vbi0md"))))
8641 (build-system python-build-system)
8642 (arguments
8643 `(#:tests? #false)) ;require python-xmp-toolkit
8644 (native-inputs
8645 (list pybind11
8646 python-attrs
8647 python-coverage
8648 python-hypothesis
8649 python-psutil
8650 python-pytest
8651 python-pytest-cov
8652 python-pytest-timeout
8653 python-pytest-xdist
8654 python-dateutil
8655 ;; python-xmp-toolkit
8656 python-tomli))
8657 (inputs
8658 (list qpdf))
8659 (propagated-inputs
8660 (list python-deprecation python-lxml python-packaging python-pillow))
8661 (home-page "https://github.com/pikepdf/pikepdf")
8662 (synopsis "Read and write PDFs with Python")
8663 (description
8664 "pikepdf is a Python library for reading and writing PDF files.")
8665 (license license:mpl2.0)))
8666
8667(define-public python-pillow
8668 (package
8669 (name "python-pillow")
8670 (version "9.2.0")
8671 (source (origin
8672 (method url-fetch)
8673 (uri (pypi-uri "Pillow" version))
8674 (sha256
8675 (base32
8676 "011wgm1mssjchpva9wsi2a07im9czyjvik137xlp5f0g7vykdrkm"))
8677 (modules '((guix build utils)))
8678 (snippet '(begin
8679 (delete-file-recursively "src/thirdparty")))
8680 (patches
8681 (search-patches "python-pillow-CVE-2022-45199.patch"))))
8682 (build-system python-build-system)
8683 (native-inputs (list python-pytest))
8684 (inputs (list freetype
8685 lcms
8686 libjpeg-turbo
8687 libtiff
8688 libwebp
8689 openjpeg
8690 zlib))
8691 (propagated-inputs (list python-olefile))
8692 (arguments
8693 `(#:phases (modify-phases %standard-phases
8694 (add-after 'unpack 'patch-ldconfig
8695 (lambda _
8696 (substitute* "setup.py"
8697 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
8698 (replace 'check
8699 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
8700 (when tests?
8701 (setenv "HOME"
8702 (getcwd))
8703 (add-installed-pythonpath inputs outputs)
8704 (invoke "python" "selftest.py" "--installed")
8705 (invoke "python" "-m" "pytest" "-vv")))))))
8706 (home-page "https://python-pillow.org")
8707 (synopsis "Fork of the Python Imaging Library")
8708 (description
8709 "The Python Imaging Library adds image processing capabilities to your
8710Python interpreter. This library provides extensive file format support, an
8711efficient internal representation, and fairly powerful image processing
8712capabilities. The core image library is designed for fast access to data
8713stored in a few basic pixel formats. It should provide a solid foundation for
8714a general image processing tool.")
8715 (properties `((cpe-name . "pillow")))
8716 (license (license:x11-style
8717 "http://www.pythonware.com/products/pil/license.htm"
8718 "The PIL Software License"))))
8719
8720(define-public python-pillow-2.9
8721 (package
8722 (inherit python-pillow)
8723 (version "2.9.0")
8724 (source
8725 (origin
8726 (method url-fetch)
8727 (uri (pypi-uri "Pillow" version))
8728 (sha256
8729 (base32
8730 "0ada7lf3lmbdsqm3b7ja920p1pllyfhmqndr85ikpj77fmz9s5qg"))))
8731 (arguments
8732 (substitute-keyword-arguments (package-arguments python-pillow)
8733 ((#:tests? _ #f) #f)))
8734 (properties '((hidden? #t)))))
8735
8736(define-public python-pillow-simd
8737 (package
8738 (inherit python-pillow)
8739 (name "python-pillow-simd")
8740 (version "9.2.0")
8741 ;; The PyPI tarball does not include test files.
8742 (source
8743 (origin
8744 (method git-fetch)
8745 (uri (git-reference
8746 (url "https://github.com/uploadcare/pillow-simd")
8747 (commit version)))
8748 (file-name (git-file-name name version))
8749 (sha256
8750 (base32 "13wwq7slw2q9djh7n39qdmlrzd9k3x7hdr36wk8qbgp3b6bcgvj6"))))
8751 (inputs
8752 (modify-inputs (package-inputs python-pillow)
8753 (prepend libraqm libimagequant)))
8754 (home-page "https://github.com/uploadcare/pillow-simd")
8755 (synopsis "Fork of the Python Imaging Library (Pillow)")
8756 (description "This package is a fork of Pillow which adds support for SIMD
8757parallelism.")))
8758
8759(define-public python-pixelmatch
8760 (package
8761 (name "python-pixelmatch")
8762 (version "0.3.0")
8763 (source
8764 (origin
8765 (method url-fetch)
8766 (uri (pypi-uri "pixelmatch" version))
8767 (sha256
8768 (base32 "16b0cz136dcmj4dbr505igpql8dmqmr9vni5nbaa5kygjfjkdynh"))))
8769 (build-system python-build-system)
8770 (native-inputs (list python-pillow))
8771 (home-page "https://github.com/whtsky/pixelmatch-py")
8772 (synopsis "A pixel-level image comparison library")
8773 (description "This package provides a pixel-level image comparison library
8774for Python, originally created to compare screenshots in tests. Its features
8775include accurate anti-aliased pixels detection and perceptual color difference
8776metrics.")
8777 (license license:isc)))
8778
8779(define-public python-imagecodecs
8780 (package
8781 (name "python-imagecodecs")
8782 (version "2021.3.31")
8783 (source
8784 (origin
8785 (method url-fetch)
8786 (uri (pypi-uri "imagecodecs" version))
8787 (sha256
8788 (base32
8789 "0q7pslb6wd56vbcq2mdxwsiha32mxjr7mgqqfbq5w42q601p9pi0"))
8790 (modules '((guix build utils)))
8791 (snippet
8792 '(begin
8793 ;; Unbundle 3rd party modules.
8794 (delete-file-recursively "3rdparty")
8795 ;; Delete pre-generated Cython files.
8796 (for-each delete-file (find-files "imagecodecs" "_.*\\.c$"))
8797 #t))))
8798 (build-system python-build-system)
8799 (arguments
8800 `(#:tests? #f ; Tests are disabled, because dependencies are missing.
8801 #:phases
8802 (modify-phases %standard-phases
8803 (add-after 'unpack 'create-configuration
8804 (lambda* (#:key inputs #:allow-other-keys)
8805 ;; By default everything is enabled. We can selectively disable
8806 ;; extensions (and thus dependencies) by deleting them from the
8807 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
8808 (call-with-output-file "imagecodecs_distributor_setup.py"
8809 (lambda (port)
8810 (format port "\
8811def customize_build(EXTENSIONS, OPTIONS):
8812 del EXTENSIONS['aec']
8813 del EXTENSIONS['avif']
8814 del EXTENSIONS['bitshuffle']
8815 del EXTENSIONS['deflate']
8816 del EXTENSIONS['jpeg2k']
8817 del EXTENSIONS['jpeg12']
8818 del EXTENSIONS['jpegls']
8819 del EXTENSIONS['jpegxl']
8820 del EXTENSIONS['jpegxr']
8821 del EXTENSIONS['lerc']
8822 del EXTENSIONS['ljpeg']
8823 del EXTENSIONS['lzf']
8824 del EXTENSIONS['zfp']
8825 del EXTENSIONS['zopfli']
8826 OPTIONS['cythonize']
8827")))))
8828 ;; XXX: The installed scripts import packages that depend on
8829 ;; this package; disable import check to avoid the cycle.
8830 (delete 'sanity-check))))
8831 (inputs
8832 (list c-blosc
8833 giflib
8834 brotli
8835 libjpeg-turbo
8836 libpng
8837 libtiff
8838 libwebp
8839 lz4
8840 snappy
8841 xz
8842 zlib
8843 `(,zstd "lib")))
8844 (propagated-inputs
8845 ;; For the Python library.
8846 (list python-numpy))
8847 (native-inputs
8848 ;; For building.
8849 (list python-cython
8850 ;; For testing. Incomplete.
8851 ;("python-numcodecs" ,python-numcodecs)
8852 ;("python-zarr" ,python-zarr)
8853 ;("python-pytest" ,python-pytest)
8854 ))
8855 (home-page "https://www.lfd.uci.edu/~gohlke/")
8856 (synopsis
8857 "Image transformation, compression, and decompression codecs")
8858 (description
8859 "Imagecodecs is a Python library that provides block-oriented, in-memory
8860buffer transformation, compression, and decompression functions for use in the
8861tifffile, czifile, and other scientific image input/output modules.")
8862 (license license:bsd-3)))
8863
8864(define-public python-property-manager
8865 (package
8866 (name "python-property-manager")
8867 (version "3.0")
8868 (source
8869 (origin
8870 (method url-fetch)
8871 (uri (pypi-uri "property-manager" version))
8872 (sha256
8873 (base32 "0m3w4spr8f39xnm65naw29ncal4r453kn7ndqb63rwbsmslnvrwk"))))
8874 (build-system python-build-system)
8875 (native-inputs
8876 (list python-pytest-cov))
8877 (propagated-inputs
8878 (list python-verboselogs
8879 python-humanfriendly
8880 python-coloredlogs))
8881 (home-page "https://github.com/xolox/python-property-manager")
8882 (synopsis "Useful property variants for Python programming")
8883 (description "The @code{property-manager} package defines several custom
8884property variants for Python programming including required properties,
8885writable properties, cached properties, etc.")
8886 (license license:expat))) ; MIT license
8887
8888(define-public python-executing
8889 (package
8890 (name "python-executing")
8891 (version "0.8.2")
8892 (source
8893 (origin
8894 (method url-fetch)
8895 (uri (pypi-uri "executing" version))
8896 (sha256
8897 (base32 "08q0xh9fd8k41sqpp23q6fb9bf7yj4y2q6sv30pj36vvk8pg8fy2"))))
8898 (build-system python-build-system)
8899 (arguments
8900 `(#:tests? #f)) ; TODO: tests require python-asttokens
8901 (native-inputs
8902 (list python-setuptools-scm python-toml))
8903 (home-page "https://github.com/alexmojaki/executing")
8904 (synopsis "Get information about what a Python frame is currently doing")
8905 (description "This package lets you get information about what a frame is
8906currently doing, particularly the AST node being executed.")
8907 (license license:expat)))
8908
8909(define-public python-executor
8910 (package
8911 (name "python-executor")
8912 (version "23.2")
8913 (source
8914 (origin
8915 (method url-fetch)
8916 (uri (pypi-uri "executor" version))
8917 (sha256
8918 (base32 "0g83yr54j0vcwhy6h7n0jsd7q0q630kwa6v9kqzlzrm9xj6c3ip1"))))
8919 (build-system python-build-system)
8920 (arguments
8921 `(#:tests? #f)) ; TODO: tests require root/sudo
8922 (propagated-inputs
8923 (list python-six
8924 python-property-manager
8925 python-fasteners
8926 python-virtualenv))
8927 (home-page "https://github.com/xolox/python-executor")
8928 (synopsis "Programmer friendly subprocess wrapper")
8929 (description "The @code{executor} package is a simple wrapper for Python’s
8930subprocess module that makes it very easy to handle subprocesses on UNIX
8931systems with proper escaping of arguments and error checking currently doing,
8932particularly the AST node being executed.")
8933 (license license:expat))) ; MIT license
8934
8935(define-public python-roifile
8936 (package
8937 (name "python-roifile")
8938 (version "2020.11.28")
8939 (source
8940 (origin
8941 (method url-fetch)
8942 (uri (pypi-uri "roifile" version))
8943 (sha256
8944 (base32
8945 "04argnc7qccybkrj9ww18bf81ghsghhh93hnqy3p111rcdlyn66p"))))
8946 (build-system python-build-system)
8947 (arguments `(#:tests? #f)) ; there are none
8948 (propagated-inputs
8949 (list python-numpy))
8950 (home-page "https://www.lfd.uci.edu/~gohlke/")
8951 (synopsis "Read and write ImageJ ROI format")
8952 (description "Roifile is a Python library to read, write, create, and plot
8953ImageJ ROIs, an undocumented and ImageJ application specific format to store
8954regions of interest, geometric shapes, paths, text, etc for image overlays.")
8955 (license license:bsd-3)))
8956
8957(define-public python-tifffile
8958 (package
8959 (name "python-tifffile")
8960 (version "2021.4.8")
8961 (source
8962 (origin
8963 (method url-fetch)
8964 (uri (pypi-uri "tifffile" version))
8965 (sha256
8966 (base32
8967 "16r0hw7shka1bqf28bv198lj2jhf2r9gy3s5zv4nf5cfsfm8pajm"))))
8968 (build-system python-build-system)
8969 ;; Tests require lfdfiles, which depends on tifffile
8970 (arguments `(#:tests? #f))
8971 (propagated-inputs
8972 (list python-numpy python-imagecodecs))
8973 (home-page "https://www.lfd.uci.edu/~gohlke/")
8974 (synopsis "Read and write TIFF(r) files")
8975 (description "This package lets you read image and metadata from many
8976bio-scientific formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,
8977NIH, ImageJ, MicroManager, MD GEL, and FluoView files. It also lets you write
8978numpy arrays to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
8979 (license license:bsd-3)))
8980
8981(define-public python-lfdfiles
8982 (package
8983 (name "python-lfdfiles")
8984 (version "2021.2.22")
8985 (source
8986 (origin
8987 (method url-fetch)
8988 (uri (pypi-uri "lfdfiles" version))
8989 (sha256
8990 (base32
8991 "12fxm4v805dgjrih7x6jnl1wd7y7jw1rkhjs3d4am8s6qk1cbar2"))
8992 (modules '((guix build utils)))
8993 (snippet
8994 '(begin
8995 ;; Delete pre-generated Cython files.
8996 (for-each delete-file (find-files "lfdfiles" "_.*\\.c$"))
8997 #t))))
8998 (build-system python-build-system)
8999 (arguments
9000 `(#:tests? #f)) ; No tests exist, despite a test dependency on pytest.
9001 (propagated-inputs
9002 (list python-click python-numpy python-tifffile))
9003 (native-inputs (list python-cython))
9004 (home-page "https://www.lfd.uci.edu/~gohlke/")
9005 (synopsis "Work with LFD data files")
9006 (description
9007 "Lfdfiles is a Python library and console script for reading, writing,
9008converting, and viewing many of the proprietary file formats used to store
9009experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
9010 (license license:bsd-3)))
9011
9012(define-public python-ffmpeg-python
9013 ;; The latest release (0.2.0) is old and its test suite crashs on Python 3.10.
9014 (let ((commit "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6") (revision "0"))
9015 (package
9016 (name "python-ffmpeg-python")
9017 (version (git-version "0.2.0" revision commit))
9018 (source (origin
9019 (method git-fetch)
9020 (uri (git-reference
9021 (url "https://github.com/kkroening/ffmpeg-python.git")
9022 (commit commit)))
9023 (file-name (git-file-name name version))
9024 (sha256
9025 (base32
9026 "1zj4ac37n4igfj21zy405mdlvbpv6jyb12wfpszf8zkhhj2qby4c"))))
9027 (build-system python-build-system)
9028 (arguments
9029 (list
9030 #:phases
9031 #~(modify-phases %standard-phases
9032 (add-after 'unpack 'hardcode-ffmpeg
9033 (lambda* (#:key inputs #:allow-other-keys)
9034 (define ffmpeg (search-input-file inputs "bin/ffmpeg"))
9035 (substitute* "ffmpeg/_run.py"
9036 (("cmd='ffmpeg'")
9037 (string-append "cmd='" ffmpeg "'")))
9038 (substitute* "ffmpeg/tests/test_ffmpeg.py"
9039 (("out_file.compile\\(\\) == \\['ffmpeg'")
9040 (string-append "out_file.compile() == ['" ffmpeg "'")))))
9041 ;; Some tests fail with ffmpeg 5+
9042 (replace 'check
9043 (lambda* (#:key tests? #:allow-other-keys)
9044 (when tests?
9045 (invoke "pytest" "-vv"
9046 "-k" "not test_pipe and not test__probe")))))))
9047 (inputs (list ffmpeg))
9048 (propagated-inputs (list python-future))
9049 (native-inputs (list python-future python-numpy python-pytest
9050 python-pytest-mock python-pytest-runner))
9051 (home-page "https://github.com/kkroening/ffmpeg-python")
9052 (synopsis "Python bindings for FFmpeg with complex filtering support")
9053 (description
9054 "ffmpeg-python allows you to write FFmpeg filtergraphs in familiar
9055Python terms, taking care of running ffmpeg with the correct command-line
9056arguments. It handles arbitrarily large (directed-acyclic) signal graphs.")
9057 (license license:asl2.0))))
9058
9059(define-public python-imageio-ffmpeg
9060 (package
9061 (name "python-imageio-ffmpeg")
9062 (version "0.4.8")
9063 (source (origin
9064 (method url-fetch)
9065 (uri (pypi-uri "imageio-ffmpeg" version))
9066 (sha256
9067 (base32
9068 "1a8as5c42s8yl79gc2nhj6vvkwr81p5ibxp5m1zhn1zy22nhbapx"))))
9069 (arguments
9070 (list #:phases
9071 #~(modify-phases %standard-phases
9072 (add-after 'unpack 'hardcode-ffmpeg
9073 (lambda* (#:key inputs #:allow-other-keys)
9074 (substitute* "imageio_ffmpeg/_utils.py"
9075 (("os\\.getenv\\(\"IMAGEIO_FFMPEG_EXE\".*\\)" all)
9076 (string-append "(" all " or \""
9077 (search-input-file inputs "bin/ffmpeg")
9078 "\")"))))))))
9079 (inputs (list ffmpeg-4))
9080 (build-system python-build-system)
9081 (home-page "https://github.com/imageio/imageio-ffmpeg")
9082 (synopsis "FFMPEG wrapper for Python")
9083 (description "This package provides an FFMPEG wrapper for working with video
9084files. It implements generator functions for reading and writing data to and
9085from FFMPEG, reliably terminating the process when done.")
9086 (license license:bsd-2)))
9087
9088(define-public python-imageio
9089 (package
9090 (name "python-imageio")
9091 (version "2.26.0")
9092 (source
9093 (origin
9094 (method url-fetch)
9095 (uri (pypi-uri "imageio" version))
9096 (sha256
9097 (base32
9098 "0dgddhi5dlpry5j4d3256v09pcziyj3ii47yx0zi68xprm11d7qn"))))
9099 (build-system pyproject-build-system)
9100 (arguments
9101 (list
9102 #:test-flags #~(list "-m" "not needs_internet")
9103 #:phases
9104 #~(modify-phases %standard-phases
9105 (add-after 'unpack 'fix-source
9106 (lambda* (#:key inputs #:allow-other-keys)
9107 (substitute* "imageio/plugins/_freeimage.py"
9108 (("os\\.getenv\\(\"IMAGEIO_FREEIMAGE_LIB\".*\\)" all)
9109 (string-append
9110 "(" all " or \""
9111 (search-input-file inputs "lib/libfreeimage.so")
9112 "\")")))
9113 (substitute* "imageio/core/util.py"
9114 (("\"/var/tmp\"")
9115 "os.getenv(\"TMPDIR\", \"/tmp\")"))))
9116 (add-after 'unpack 'fix-failing-tests
9117 (lambda _
9118 (substitute* "tests/test_core.py"
9119 (("(core\\.load_lib)\\((\\[gllib\\], \\[\\])\\)"
9120 all fun args)
9121 (string-append "raises(ValueError, " fun ", " args ")")))
9122 (delete-file "tests/test_freeimage.py"))))))
9123 (inputs (list freeimage))
9124 (propagated-inputs
9125 (list python-imageio-ffmpeg python-numpy python-pillow python-psutil))
9126 (native-inputs
9127 (list python-pytest))
9128 (home-page "https://imageio.github.io/")
9129 (synopsis "Library for reading and writing a wide range of image data")
9130 (description
9131 "Imageio is a Python library that provides an easy interface to read and
9132write a wide range of image data, including animated images, video, volumetric
9133data, and scientific formats.")
9134 (license license:bsd-2)))
9135
9136(define-public python-pyvips
9137 (package
9138 (name "python-pyvips")
9139 (version "2.2.1")
9140 (source
9141 (origin
9142 (method url-fetch)
9143 (uri (pypi-uri "pyvips" version))
9144 (sha256
9145 (base32 "1dfbwwvnnsk4g2kj1pw654z9jq3mb72l1m8ma29858jpn12vn7dm"))))
9146 (build-system python-build-system)
9147 (arguments
9148 (list #:phases
9149 #~(modify-phases %standard-phases
9150 ;; Maybe switch to API mode (i.e., build the C extension)?
9151 ;; It is advertised as faster to start up and run.
9152 ;; However, even with ‘pkg-config’ and ‘python-pkgconfig’ in
9153 ;; ‘native-inputs’, the API mode build fails with:
9154 ;;
9155 ;; Falling back to ABI mode. Details: unable to find pkg-config package "vips"
9156 ;;
9157 ;; The build doesn't actually fail without the below
9158 ;; substitution, it's just slower because ‘setup.py’ tries
9159 ;; (unsuccessfully) to download the Python ‘pkgconfig’ module.
9160 (add-after 'unpack 'fix-build
9161 (lambda _
9162 (substitute* "setup.py"
9163 (("^( +setup_)API\\(\\)\n" _ prefix)
9164 (string-append prefix "ABI()\n")))))
9165 (add-after 'unpack 'fix-paths
9166 (lambda _
9167 (substitute* "pyvips/__init__.py"
9168 (("^( +_vips_libname) = '(libvips.so.42)'"
9169 _ var libname)
9170 (format #f "~a = '~a/lib/~a'"
9171 var #$(this-package-input "vips") libname))
9172 (("^( +_gobject_libname) = '(libgobject-2.0.so.0)'"
9173 _ var libname)
9174 (format #f "~a = '~a/lib/~a'"
9175 var #$(this-package-input "glib") libname)))))
9176 (replace 'check
9177 (lambda* (#:key tests? #:allow-other-keys)
9178 (when tests?
9179 (invoke "python" "setup.py" "test")))))))
9180 (native-inputs
9181 (list python-pyperf
9182 python-pytest
9183 python-pytest-flake8
9184 python-pytest-runner))
9185 (inputs
9186 (list glib vips))
9187 (propagated-inputs
9188 (list python-cffi))
9189 (home-page "https://github.com/libvips/pyvips")
9190 (synopsis "Python bindings for VIPS")
9191 (description "The @code{pyvips} package provides Python bindings for VIPS,
9192a multithreaded image-processing system with low memory needs.")
9193 (license license:expat)))
9194
9195(define-public python-pycparser
9196 (package
9197 (name "python-pycparser")
9198 (version "2.21")
9199 (source
9200 (origin
9201 (method url-fetch)
9202 (uri (pypi-uri "pycparser" version))
9203 (sha256
9204 (base32
9205 "01kjlyn5w2nn2saj8w1rhq7v26328pd91xwgqn32z1zp2bngsi76"))))
9206 (outputs '("out" "doc"))
9207 (build-system python-build-system)
9208 (arguments
9209 `(#:phases
9210 (modify-phases %standard-phases
9211 (replace 'check
9212 (lambda _
9213 (invoke "python" "-m" "unittest" "discover")))
9214 (add-after 'install 'install-doc
9215 (lambda* (#:key outputs #:allow-other-keys)
9216 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
9217 (doc (string-append data "/doc/" ,name "-" ,version))
9218 (examples (string-append doc "/examples")))
9219 (mkdir-p examples)
9220 (for-each (lambda (file)
9221 (copy-file (string-append "." file)
9222 (string-append doc file)))
9223 '("/README.rst" "/CHANGES" "/LICENSE"))
9224 (copy-recursively "examples" examples)))))))
9225 (home-page "https://github.com/eliben/pycparser")
9226 (synopsis "C parser in Python")
9227 (description
9228 "Pycparser is a complete parser of the C language, written in pure Python
9229using the PLY parsing library. It parses C code into an AST and can serve as
9230a front-end for C compilers or analysis tools.")
9231 (license license:bsd-3)))
9232
9233(define-public python2-pycparser
9234 (package-with-python2 python-pycparser))
9235
9236(define-public python-xlsxwriter
9237 (package
9238 (name "python-xlsxwriter")
9239 (version "3.0.3")
9240 (source
9241 (origin
9242 ;; There are no tests in the PyPI tarball.
9243 (method git-fetch)
9244 (uri (git-reference
9245 (url "https://github.com/jmcnamara/XlsxWriter")
9246 (commit (string-append "RELEASE_" version))))
9247 (file-name (git-file-name name version))
9248 (sha256
9249 (base32 "1lr7mmik6r4zns069i4zfx1cnwhz6snmlh2zsiry0cwx8cv33wpm"))))
9250 (build-system python-build-system)
9251 (home-page "https://github.com/jmcnamara/XlsxWriter")
9252 (synopsis "Python module for creating Excel XLSX files")
9253 (description
9254 "XlsxWriter is a Python module that can be used to write text, numbers,
9255formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
9256 (license license:bsd-2)))
9257
9258(define-public python-pywavelets
9259 (package
9260 (name "python-pywavelets")
9261 (version "1.2.0")
9262 (home-page "https://github.com/PyWavelets/pywt")
9263 (source (origin
9264 (method url-fetch)
9265 (uri (pypi-uri "PyWavelets" version))
9266 (sha256
9267 (base32
9268 "13csbr6ls9q9ww53z2xwwsj0hpsz88rj2iwp623h0kmv8yq6kgbc"))
9269 (snippet
9270 #~(begin
9271 (use-modules ((guix build utils)))
9272 (for-each delete-file
9273 (list
9274 "pywt/_extensions/_cwt.c"
9275 "pywt/_extensions/_dwt.c"
9276 "pywt/_extensions/_pywt.c"
9277 "pywt/_extensions/_pywt.h"
9278 "pywt/_extensions/_swt.c"))))))
9279 (build-system python-build-system)
9280 (arguments
9281 '(#:modules ((ice-9 ftw)
9282 (srfi srfi-1)
9283 (srfi srfi-26)
9284 (guix build utils)
9285 (guix build python-build-system))
9286 #:phases
9287 (modify-phases %standard-phases
9288 (replace 'check
9289 (lambda _
9290 (let ((cwd (getcwd))
9291 (libdir (find (cut string-prefix? "lib." <>)
9292 (scandir "build"))))
9293 (with-directory-excursion (string-append cwd "/build/" libdir)
9294 (invoke "pytest" "-vv"))))))))
9295 (native-inputs
9296 (list python-cython
9297 python-matplotlib ;for tests
9298 python-pytest))
9299 (propagated-inputs
9300 (list python-numpy))
9301 (synopsis "Wavelet transforms in Python")
9302 (description
9303 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
9304mathematical basis functions that are localized in both time and frequency.
9305Wavelet transforms are time-frequency transforms employing wavelets. They are
9306similar to Fourier transforms, the difference being that Fourier transforms are
9307localized only in frequency instead of in time and frequency.")
9308 (license license:expat)))
9309
9310(define-public python-pywal
9311 (package
9312 (name "python-pywal")
9313 (version "3.3.0")
9314 (source
9315 (origin
9316 (method git-fetch)
9317 (uri (git-reference
9318 (url "https://github.com/dylanaraps/pywal")
9319 (commit version)))
9320 (file-name (git-file-name name version))
9321 (sha256
9322 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
9323 (build-system python-build-system)
9324 (arguments
9325 `(#:phases
9326 (modify-phases %standard-phases
9327 (add-before 'check 'fix-home-directory
9328 (lambda _
9329 ;; Tests fail with "Permission denied: '/homeless-shelter'".
9330 (setenv "HOME" "/tmp")
9331 #t)))))
9332 (inputs
9333 (list imagemagick))
9334 (home-page "https://github.com/dylanaraps/pywal")
9335 (synopsis "Color palette generator and applicator")
9336 (description
9337 "Pywal is a tool that generates a color palette from the dominant colors
9338in an image. It then applies the colors system-wide and on-the-fly in all of
9339your favourite programs.")
9340 (license license:expat)))
9341
9342(define-public python-click-didyoumean
9343 (package
9344 (name "python-click-didyoumean")
9345 (version "0.3.0")
9346 (source
9347 (origin
9348 (method url-fetch)
9349 (uri (pypi-uri "click-didyoumean" version))
9350 (sha256
9351 (base32 "0dc0xrmqbw0idpx843ahzzvivmvx3fcfsm3k54lnssyra7cg117i"))))
9352 (build-system python-build-system)
9353 (arguments
9354 `(#:tests? #f)) ; no tests in PyPI and no setup.py in github
9355 (propagated-inputs
9356 (list python-click))
9357 (home-page "https://github.com/timofurrer/click-didyoumean")
9358 (synopsis "Git-like did-you-mean feature in Click")
9359 (description
9360 "This plugin enables git-like did-you-mean feature in Click.")
9361 (license license:expat)))
9362
9363(define-public python-pywinrm
9364 (package
9365 (name "python-pywinrm")
9366 (version "0.4.1")
9367 (source
9368 (origin
9369 (method url-fetch)
9370 (uri (pypi-uri "pywinrm" version))
9371 (sha256
9372 (base32
9373 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
9374 (build-system python-build-system)
9375 (propagated-inputs
9376 (list python-six python-requests_ntlm python-xmltodict
9377 python-kerberos))
9378 (native-inputs
9379 (list python-mock python-pytest))
9380 (home-page "https://github.com/diyan/pywinrm/")
9381 (synopsis
9382 "Python library for Windows Remote Management (WinRM)")
9383 (description
9384 "pywinrm is a Python client for the Windows Remote Management (WinRM)
9385service. It allows you to invoke commands on target Windows machines from
9386any machine that can run Python.")
9387 (license license:expat)))
9388
9389(define-public python-xcffib
9390 (package
9391 (name "python-xcffib")
9392 (version "0.11.1")
9393 (source
9394 (origin
9395 (method url-fetch)
9396 (uri (pypi-uri "xcffib" version))
9397 (sha256
9398 (base32
9399 "0nkglsm9nbhv238iagmmsjcz6lf1yfdvp5kmspphdj385vz9r50j"))))
9400 (build-system python-build-system)
9401 (inputs
9402 (list libxcb))
9403 (propagated-inputs
9404 (list python-cffi ; used at run time
9405 python-six))
9406 (arguments
9407 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
9408 #:tests? #f
9409 #:phases
9410 (modify-phases %standard-phases
9411 (add-after 'unpack 'fix-libxcb-path
9412 (lambda* (#:key inputs #:allow-other-keys)
9413 (let ((libxcb (assoc-ref inputs "libxcb")))
9414 (substitute* '("xcffib/__init__.py")
9415 (("soname = ctypes.util.find_library.*xcb.*")
9416 (string-append "soname = \"" libxcb "/lib/libxcb.so\"\n")))
9417 #t)))
9418 (add-after 'install 'install-doc
9419 (lambda* (#:key outputs #:allow-other-keys)
9420 (let ((doc (string-append (assoc-ref outputs "out") "/share"
9421 "/doc/" ,name "-" ,version)))
9422 (mkdir-p doc)
9423 (copy-file "README.md"
9424 (string-append doc "/README.md"))
9425 #t))))))
9426 (home-page "https://github.com/tych0/xcffib")
9427 (synopsis "XCB Python bindings")
9428 (description
9429 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
9430support for Python 3 and PyPy. It is based on cffi.")
9431 (license license:expat)))
9432
9433(define-public python-cairocffi
9434 (package
9435 (name "python-cairocffi")
9436 (version "1.3.0")
9437 (source
9438 (origin
9439 ;; The PyPI archive does not include the documentation, so use Git.
9440 (method git-fetch)
9441 (uri (git-reference
9442 (url "https://github.com/Kozea/cairocffi")
9443 (commit (string-append "v" version))))
9444 (file-name (git-file-name name version))
9445 (sha256
9446 (base32
9447 "0lylyxyyd8csjhn5kxwzrcr6ick6pvvm1wclpmb5ni28jznxn7lb"))))
9448 (build-system python-build-system)
9449 (outputs '("out" "doc"))
9450 (inputs
9451 (list glib gtk+ gdk-pixbuf cairo))
9452 (native-inputs
9453 (list python-numpy
9454 python-pytest
9455 python-pytest-cov
9456 python-pytest-runner
9457 python-sphinx
9458 python-sphinx-rtd-theme))
9459 (propagated-inputs
9460 (list python-xcffib)) ; used at run time
9461 (arguments
9462 `(#:phases
9463 (modify-phases %standard-phases
9464 (add-after 'unpack 'patch-paths
9465 (lambda* (#:key inputs #:allow-other-keys)
9466 (substitute* "cairocffi/__init__.py"
9467 ;; Hack the dynamic library loading mechanism.
9468 (("find_library\\(library_name\\)")
9469 "\"found\"")
9470 (("filenames = \\(library_filename,\\) \\+ filenames")
9471 "pass")
9472 (("libcairo.so.2")
9473 (search-input-file inputs "/lib/libcairo.so.2")))
9474 (substitute* "cairocffi/pixbuf.py"
9475 (("libgdk_pixbuf-2.0.so.0")
9476 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
9477 (("libgobject-2.0.so.0")
9478 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
9479 (("libglib-2.0.so.0")
9480 (search-input-file inputs "/lib/libglib-2.0.so.0"))
9481 (("libgdk-3.so.0")
9482 (search-input-file inputs "/lib/libgdk-3.so.0")))))
9483 (add-after 'unpack 'disable-linters
9484 ;; Their check fails; none of our business.
9485 (lambda _
9486 (substitute* "setup.cfg"
9487 ((".*pytest-flake8.*") "")
9488 ((".*pytest-isort.*") "")
9489 (("--flake8") "")
9490 (("--isort") ""))
9491 #t))
9492 (add-after 'install 'install-doc
9493 (lambda* (#:key inputs outputs #:allow-other-keys)
9494 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
9495 (doc (string-append data "/doc/" ,name "-" ,version))
9496 (html (string-append doc "/html")))
9497 (setenv "LD_LIBRARY_PATH"
9498 (string-append (assoc-ref inputs "cairo") "/lib" ":"
9499 (assoc-ref inputs "gdk-pixbuf") "/lib"))
9500 (setenv "LANG" "en_US.UTF-8")
9501 (mkdir-p html)
9502 (for-each (lambda (file)
9503 (copy-file (string-append "." file)
9504 (string-append doc file)))
9505 '("/README.rst" "/NEWS.rst"))
9506 (system* "python" "setup.py" "build_sphinx")
9507 (copy-recursively "docs/_build/html" html)
9508 #t))))))
9509 (home-page "https://github.com/Kozea/cairocffi")
9510 (synopsis "Python bindings and object-oriented API for Cairo")
9511 (description
9512 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
9513Python bindings and object-oriented API for cairo. Cairo is a 2D vector
9514graphics library with support for multiple backends including image buffers,
9515PNG, PostScript, PDF, and SVG file output.")
9516 (license license:bsd-3)))
9517
9518(define-public python-decorator
9519 (package
9520 (name "python-decorator")
9521 (version "5.0.9")
9522 (source
9523 (origin
9524 (method url-fetch)
9525 (uri (pypi-uri "decorator" version))
9526 (sha256
9527 (base32 "1mcy64hllgm938v8k1x2a4g0q9swsnrfnsvhz59kr28a6ajgpv3j"))))
9528 (build-system python-build-system)
9529 (home-page "https://pypi.org/project/decorator/")
9530 (synopsis "Python module to simplify usage of decorators")
9531 (description
9532 "The aim of the decorator module is to simplify the usage of decorators
9533for the average programmer, and to popularize decorators usage giving examples
9534of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
9535etc. The core of this module is a decorator factory.")
9536 (license license:expat)))
9537
9538
9539(define-public python-drmaa
9540 (package
9541 (name "python-drmaa")
9542 (version "0.7.7")
9543 (source
9544 (origin
9545 (method url-fetch)
9546 (uri (pypi-uri "drmaa" version))
9547 (sha256
9548 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
9549 (build-system python-build-system)
9550 ;; The test suite requires libdrmaa which is provided by the cluster
9551 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
9552 ;; should be set to the path of the libdrmaa library.
9553 (arguments
9554 '(#:tests? #f
9555 #:phases (modify-phases %standard-phases
9556 ;; Loading the library fails because DRMAA_LIBRARY_PATH
9557 ;; is not configured.
9558 (delete 'sanity-check))))
9559 (home-page "https://pypi.org/project/drmaa/")
9560 (synopsis "Python bindings for the DRMAA library")
9561 (description
9562 "A Python package for Distributed Resource Management (DRM) job
9563submission and control. This package is an implementation of the DRMAA 1.0
9564Python language binding specification.")
9565 (license license:bsd-3)))
9566
9567(define-public python-grako
9568 (package
9569 (name "python-grako")
9570 (version "3.99.9")
9571 (source
9572 (origin
9573 (method url-fetch)
9574 (uri
9575 (pypi-uri "grako" version ".zip"))
9576 (sha256
9577 (base32
9578 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
9579 (build-system python-build-system)
9580 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
9581 (native-inputs
9582 (list unzip python-pytest python-pytest-runner))
9583 (home-page "https://bitbucket.org/neogeny/grako")
9584 (synopsis "EBNF parser generator")
9585 (description
9586 "Grako takes a grammar in a variation of EBNF as input, and outputs a
9587memoizing PEG/Packrat parser in Python.")
9588 (license license:bsd-3)))
9589
9590(define-public python-grandalf
9591 (package
9592 (name "python-grandalf")
9593 (version "0.7")
9594 (source
9595 (origin
9596 ;; There's no source tarball on PyPI.
9597 (method git-fetch)
9598 (uri (git-reference
9599 (url "https://github.com/bdcht/grandalf")
9600 (commit (string-append "v" version))))
9601 (file-name (git-file-name name version))
9602 (sha256
9603 (base32
9604 "03p8w8ljpb87qbyldm3s6b7qi30hfcn43h33iwlgqcf31fjsyr4g"))))
9605 (build-system python-build-system)
9606 (arguments
9607 '(#:phases
9608 (modify-phases %standard-phases
9609 (replace 'check
9610 (lambda _
9611 (invoke "python" "setup.py" "pytest"))))))
9612 (native-inputs
9613 (list python-pytest python-pytest-runner))
9614 (propagated-inputs
9615 (list python-numpy python-ply))
9616 (home-page "https://github.com/bdcht/grandalf")
9617 (synopsis "Graph and drawing algorithms framework")
9618 (description
9619 "Grandalf is a Python package made for experimentations with graphs
9620drawing algorithms. It is written in pure Python, and currently implements
9621two layouts: the Sugiyama hierarchical layout and the force-driven or energy
9622minimization approach. While not as fast or featured as graphviz or other
9623libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
9624than thousands of nodes, while keeping the source code simple enough to tweak
9625and hack any part of it for experimental purpose. With a total of about 1500
9626lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
9627in less than 600 lines. The energy minimization approach is comprised of only
9628250 lines!
9629
9630Grandalf does only 2 not-so-simple things:
9631@itemize
9632@item computing the nodes (x,y) coordinates (based on provided nodes
9633dimensions, and a chosen layout)
9634@item routing the edges with lines or nurbs
9635@end itemize
9636
9637It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
9638will help you find where to draw things like nodes and edges, but it’s up to
9639you to actually draw things with your favorite toolkit.")
9640 ;; The user can choose either license.
9641 (license (list license:gpl2 license:epl1.0))))
9642
9643(define-public python-gridmap
9644 (package
9645 (name "python-gridmap")
9646 (version "0.14.0")
9647 (source
9648 (origin
9649 (method git-fetch)
9650 (uri (git-reference
9651 (url "https://github.com/pygridtools/gridmap")
9652 (commit (string-append "v" version))))
9653 (file-name (git-file-name name version))
9654 (sha256
9655 (base32 "0v0sgpg6pz8h61f9aqjf5xk0ipr512bbz8dxzjjylksj135qr19l"))))
9656 (build-system python-build-system)
9657 (arguments
9658 '(#:tests? #f ;FIXME: Requires python-cherrypy.
9659 #:phases (modify-phases %standard-phases
9660 ;; Importing the web server module requires cherrypy, too.
9661 (delete 'sanity-check))))
9662 (propagated-inputs
9663 (list python-psutil python-drmaa python-pyzmq))
9664 (home-page "https://github.com/pygridtools/gridmap")
9665 (synopsis "Create jobs on a cluster directly from Python")
9666 (description
9667 "Gridmap is a Python package to allow you to easily create jobs on the
9668cluster directly from Python. You can directly map Python functions onto the
9669cluster without needing to write any wrapper code yourself.")
9670 (license license:gpl3+)))
9671
9672(define-public python-honcho
9673 (package
9674 (name "python-honcho")
9675 (version "1.1.0")
9676 (source
9677 (origin
9678 (method git-fetch)
9679 (uri (git-reference
9680 (url "https://github.com/nickstenning/honcho")
9681 (commit (string-append "v" version))))
9682 (file-name (git-file-name name version))
9683 (sha256
9684 (base32 "1y0r8dw4pqcq7r4n58ixjdg1iy60lp0gxsd7d2jmhals16ij71rj"))))
9685 (build-system python-build-system)
9686 (native-inputs
9687 (list python-pytest python-mock python-tox which)) ;for tests
9688 (propagated-inputs
9689 (list python-jinja2))
9690 (arguments
9691 `(#:phases
9692 (modify-phases %standard-phases
9693 (delete 'check)
9694 (add-after 'install 'check
9695 (lambda* (#:key outputs inputs #:allow-other-keys)
9696 ;; fix honcho path in testsuite
9697 (substitute* "tests/conftest.py"
9698 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
9699 "/bin/honcho" "'")))
9700 ;; It's easier to run tests after install.
9701 ;; Make installed package available for running the tests
9702 (add-installed-pythonpath inputs outputs)
9703 ;; Skip failing test_export
9704 (invoke "py.test" "-v" "-k" "not test_export"))))))
9705 (home-page "https://github.com/nickstenning/honcho")
9706 (synopsis "Manage Procfile-based applications")
9707 (description
9708 "A Procfile is a file which describes how to run an application
9709consisting of several processes. honcho starts all listed processes.
9710The output of all running processes is collected by honcho and
9711displayed.")
9712 (license license:expat)))
9713
9714(define-public python-pebble
9715 (package
9716 (name "python-pebble")
9717 (version "4.6.1")
9718 (source
9719 (origin
9720 (method url-fetch)
9721 (uri (pypi-uri "Pebble" version))
9722 (sha256
9723 (base32 "16siqc3brbk7dp4d9sg48bjl6a8wyy24aib3il1hf4y2624draxh"))))
9724 (build-system python-build-system)
9725 (native-inputs
9726 (list python-pytest))
9727 (arguments
9728 `(#:phases
9729 (modify-phases %standard-phases
9730 (replace 'check
9731 (lambda _ (invoke "python" "-m" "pytest" "-sv"))))))
9732 (home-page "https://github.com/noxdafox/pebble")
9733 (synopsis "Threading and multiprocessing for Python")
9734 (description
9735 "Pebble aims to help manage threads and processes in an easier way. It
9736wraps Python's standard library threading and multiprocessing objects.")
9737 (license license:lgpl3+)))
9738
9739(define-public python-pexpect
9740 (package
9741 (name "python-pexpect")
9742 (version "4.8.0")
9743 (source
9744 (origin
9745 (method url-fetch)
9746 (uri (pypi-uri "pexpect" version))
9747 (sha256
9748 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
9749 (build-system python-build-system)
9750 (arguments
9751 `(#:phases
9752 (modify-phases %standard-phases
9753 (add-before 'check 'prepare-tests
9754 (lambda _
9755 (substitute* (find-files "tests")
9756 (("/bin/ls") (which "ls"))
9757 (("/bin/echo") (which "echo"))
9758 (("/bin/which") (which "which"))
9759 ;; Many tests try to use the /bin directory which
9760 ;; is not present in the build environment.
9761 ;; Use one that's non-empty and unlikely to change.
9762 (("/bin'") "/dev'")
9763 ;; Disable failing test. See upstream bug report
9764 ;; https://github.com/pexpect/pexpect/issues/568
9765 (("def test_bash") "def _test_bash"))
9766 ;; XXX: Socket connection test gets "Connection reset by peer".
9767 ;; Why does it not work? Delete for now.
9768 (delete-file "tests/test_socket.py")
9769 #t))
9770 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
9771 (native-inputs
9772 `(("python-nose" ,python-nose)
9773 ("python-pytest" ,python-pytest)
9774 ("man-db" ,man-db)
9775 ("which" ,which)
9776 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
9777 (propagated-inputs
9778 (list python-ptyprocess))
9779 (home-page "https://pexpect.readthedocs.org/")
9780 (synopsis "Controlling interactive console applications")
9781 (description
9782 "Pexpect is a pure Python module for spawning child applications;
9783controlling them; and responding to expected patterns in their output.
9784Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
9785child application and control it as if a human were typing commands.")
9786 (license license:isc)))
9787
9788(define-public python-sexpdata
9789 (package
9790 (name "python-sexpdata")
9791 (version "0.0.3")
9792 (source
9793 (origin
9794 (method url-fetch)
9795 (uri (pypi-uri "sexpdata" version))
9796 (sha256
9797 (base32
9798 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
9799 (build-system python-build-system)
9800 (home-page "https://github.com/jd-boyd/sexpdata")
9801 (synopsis "S-expression parser for Python")
9802 (description
9803 "Sexpdata is an S-expression parser/serializer. It has load and dump
9804functions like pickle, json or PyYAML module.")
9805 (license license:bsd-3)))
9806
9807(define-public python-pathlib2
9808 (package
9809 (name "python-pathlib2")
9810 (version "2.3.7.post1")
9811 (source
9812 (origin
9813 (method url-fetch)
9814 (uri (pypi-uri "pathlib2" version))
9815 (sha256
9816 (base32
9817 "0hf62d0lsf37vnr5fxqp5rfn85njgsr45j4rw71w10wbi6nyvq4z"))))
9818 (build-system python-build-system)
9819 (propagated-inputs
9820 (list python-scandir python-six))
9821 (home-page "https://pypi.org/project/pathlib2/")
9822 (synopsis "Object-oriented file system paths")
9823 (description "The goal of pathlib2 is to provide a backport of the
9824standard @code{pathlib} module which tracks the standard library module, so
9825all the newest features of the standard @code{pathlib} can be used also on
9826older Python versions.")
9827 (license license:expat)))
9828
9829(define-public python-pathy
9830 (package
9831 (name "python-pathy")
9832 (version "0.10.1")
9833 (source (origin
9834 (method url-fetch)
9835 (uri (pypi-uri "pathy" version))
9836 (sha256
9837 (base32
9838 "12v196q3rai33cfzrmb9pqfqv7ailngssjdrzdf8gzym9hdygmjc"))))
9839 (build-system pyproject-build-system)
9840 (propagated-inputs
9841 (list python-dataclasses python-smart-open python-typer))
9842 (native-inputs (list python-mock python-pytest))
9843 (home-page "https://github.com/justindujardin/pathy")
9844 (synopsis "Path interface for local and cloud bucket storage")
9845 (description "Pathy is a python package (with type annotations) for
9846working with Cloud Bucket storage providers using a @code{pathlib} interface.
9847It provides @code{pathlib.Path} subclasses for local and cloud bucket
9848storage.")
9849 (license license:asl2.0)))
9850
9851(define-public python-importlib-resources
9852 (package
9853 (name "python-importlib-resources")
9854 (version "5.12.0")
9855 (source (origin
9856 (method url-fetch)
9857 (uri (pypi-uri "importlib_resources" version))
9858 (sha256
9859 (base32
9860 "1xi2ggdfdj1bg7w728lvy6j3rjqhklalaanzmscpj7awpy4jbs2b"))))
9861 (build-system pyproject-build-system)
9862 (arguments
9863 (list
9864 #:phases
9865 '(modify-phases %standard-phases
9866 ;; The build system insists on ignoring the existing environment and
9867 ;; running "pip install".
9868 (add-after 'unpack 'do-not-use-pip-install
9869 (lambda _
9870 (substitute* "pyproject.toml"
9871 (("^build-backend.*") "\
9872build-backend = \"backend\"
9873backend_path = [\"_custom_build\"]\n")
9874 (("requires = .*") "requires = []\n"))
9875 (mkdir-p "_custom_build")
9876 (with-output-to-file "_custom_build/backend.py"
9877 (lambda _
9878 (display "\
9879from setuptools import build_meta as _orig
9880from setuptools.build_meta import *
9881def get_requires_for_build_wheel(config_settings=None):
9882 return []
9883def get_requires_for_build_sdist(config_settings=None):
9884 return []
9885")))
9886 (setenv "PYTHONPATH"
9887 (string-append (getcwd) "/_custom_build")))))))
9888 (native-inputs
9889 (list python-flake8
9890 python-pytest
9891 python-pytest-black
9892 python-pytest-checkdocs
9893 python-pytest-cov
9894 python-pytest-enabler
9895 python-pytest-flake8
9896 python-pytest-mypy
9897 python-setuptools-57
9898 python-setuptools-scm))
9899 (propagated-inputs
9900 (list python-zipp))
9901 (home-page "https://importlib-resources.readthedocs.io/")
9902 (synopsis "Read resources from Python packages")
9903 (description
9904 "@code{importlib_resources} is a backport of Python 3's standard library
9905@code{importlib.resources} module for Python 2.7, and Python 3.")
9906 (license license:asl2.0)))
9907
9908(define-public python-importlib-metadata
9909 (package
9910 (name "python-importlib-metadata")
9911 (version "5.2.0")
9912 (source
9913 (origin
9914 (method url-fetch)
9915 (uri (pypi-uri "importlib_metadata" version))
9916 (sha256
9917 (base32
9918 "1kf7qclcz820xl5wwjpzcwpfy6shj7ymwh4xzxvpl2xs5gb4hka0"))))
9919 (build-system python-build-system)
9920 (arguments
9921 (list
9922 #:phases
9923 #~(modify-phases %standard-phases
9924 ;; XXX: PEP 517 manual build/install procedures copied from
9925 ;; python-isort.
9926 (replace 'build
9927 (lambda _
9928 ;; ZIP does not support timestamps before 1980.
9929 (setenv "SOURCE_DATE_EPOCH" "315532800")
9930 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
9931 (replace 'install
9932 (lambda* (#:key outputs #:allow-other-keys)
9933 (let ((whl (car (find-files "dist" "\\.whl$"))))
9934 (invoke "pip" "--no-cache-dir" "--no-input"
9935 "install" "--no-deps" "--prefix" #$output whl))))
9936 (replace 'check
9937 (lambda* (#:key tests? #:allow-other-keys)
9938 (when tests?
9939 (invoke "pytest" "-vv" "tests")))))))
9940 (propagated-inputs (list python-zipp))
9941 (native-inputs
9942 (list python-pypa-build
9943 python-pyfakefs
9944 python-pytest
9945 python-setuptools-scm))
9946 (home-page "https://importlib-metadata.readthedocs.io/")
9947 (synopsis "Read metadata from Python packages")
9948 (description
9949 "@code{importlib_metadata} is a library which provides an API for
9950accessing an installed Python package's metadata, such as its entry points or
9951its top-level name. This functionality intends to replace most uses of
9952@code{pkg_resources} entry point API and metadata API. Along with
9953@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
9954need to use the older and less efficient @code{pkg_resources} package.")
9955 (license license:asl2.0)))
9956
9957(define-public python-importmagic
9958 (package
9959 (name "python-importmagic")
9960 (version "0.1.7")
9961 (source
9962 (origin
9963 (method url-fetch)
9964 (uri (pypi-uri "importmagic" version))
9965 (sha256
9966 (base32
9967 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
9968 (build-system python-build-system)
9969 (arguments
9970 (list #:phases
9971 #~(modify-phases %standard-phases
9972 (replace 'check
9973 (lambda* (#:key tests? #:allow-other-keys)
9974 (when tests?
9975 (invoke "pytest" "-v")))))))
9976 (native-inputs
9977 (list python-pytest))
9978 (home-page "https://github.com/alecthomas/importmagic")
9979 (synopsis "Library for adding, removing and managing Python imports")
9980 (description
9981 "Importmagic is a Python library for automatically managing imports by
9982finding unresolved symbols in Python code and their corresponding imports.")
9983 (license license:bsd-3)))
9984
9985(define-public python-inotify-simple
9986 (package
9987 (name "python-inotify-simple")
9988 (version "1.3.5")
9989 (source
9990 (origin
9991 (method git-fetch)
9992 (uri (git-reference
9993 (url "https://github.com/chrisjbillington/inotify_simple")
9994 (commit version)))
9995 (file-name (git-file-name name version))
9996 (sha256
9997 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
9998 (build-system python-build-system)
9999 (home-page
10000 "https://github.com/chrisjbillington/inotify_simple")
10001 (synopsis "Simple wrapper around inotify library")
10002 (description
10003 "@code{inotify-simple} is a simple wrapper around inotify library.")
10004 (license license:bsd-3)))
10005
10006(define-public python-jaraco-classes
10007 (package
10008 (name "python-jaraco-classes")
10009 (version "3.2.1")
10010 (source
10011 (origin
10012 (method url-fetch)
10013 (uri (pypi-uri "jaraco.classes" version))
10014 (sha256
10015 (base32 "0d6g7qvfv1jlzbzh6asprqdblqd59grvlvr3nwbdqdqrmwlbfm7d"))))
10016 (build-system python-build-system)
10017 (arguments
10018 (list
10019 #:phases
10020 #~(modify-phases %standard-phases
10021 (replace 'check
10022 (lambda* (#:key tests? #:allow-other-keys)
10023 (when tests?
10024 ;; Do not test the myproject.toml build as it tries to pull
10025 ;; dependencies from the Internet.
10026 (invoke "pytest" "-vv" "-k" "not project")))))))
10027 (native-inputs
10028 (list python-pytest
10029 python-pytest-black
10030 python-pytest-checkdocs
10031 python-pytest-cov
10032 python-pytest-enabler-bootstrap ;OK since not propagated
10033 python-pytest-flake8
10034 python-pytest-mypy
10035 python-setuptools-scm
10036 python-wheel))
10037 (propagated-inputs (list python-more-itertools))
10038 (home-page "https://github.com/jaraco/jaraco.classes")
10039 (synopsis "Utility functions for Python class constructs")
10040 (description "This Python library contains utility functions for Python
10041class constructs.")
10042 (license license:expat)))
10043
10044;;; Variant used to break a cycle with python-pytest-enabler.
10045(define-public python-jaraco-context-bootstrap
10046 (hidden-package
10047 (package
10048 (name "python-jaraco-context-bootstrap")
10049 (version "4.1.1")
10050 (source
10051 (origin
10052 (method url-fetch)
10053 (uri (pypi-uri "jaraco.context" version))
10054 (sha256
10055 (base32 "0hbjm1rpxf4pzmbdp9rh3ali4zqnlcr8m97bhh1nizxvzcpxim7h"))))
10056 (build-system python-build-system)
10057 (arguments (list #:tests? #f))
10058 (native-inputs (list python-setuptools-scm))
10059 (home-page "https://github.com/jaraco/jaraco.context")
10060 (synopsis "Context managers Python library")
10061 (description "This Python library provides context managers-related
10062procedures.")
10063 (license license:expat))))
10064
10065(define-public python-jaraco-context
10066 (package/inherit python-jaraco-context-bootstrap
10067 (name "python-jaraco-context")
10068 (arguments
10069 (substitute-keyword-arguments
10070 (package-arguments python-jaraco-context-bootstrap)
10071 ((#:tests? _ #f)
10072 (not (%current-target-system)))
10073 ((#:phases phases #~%standard-phases)
10074 #~(modify-phases #$phases
10075 (replace 'check
10076 (lambda* (#:key tests? #:allow-other-keys)
10077 (when tests?
10078 ;; Do not test the myproject.toml build as it tries to pull
10079 ;; dependencies from the Internet.
10080 (invoke "pytest" "-vv" "-k" "not project"))))))))
10081 (native-inputs
10082 (modify-inputs
10083 (package-native-inputs python-jaraco-context-bootstrap)
10084 (append python-pytest
10085 python-pytest-black
10086 python-pytest-checkdocs
10087 python-pytest-cov
10088 python-pytest-enabler-bootstrap ;OK since not propagated
10089 python-pytest-flake8
10090 python-pytest-mypy)))
10091 (properties (alist-delete 'hidden? (package-properties
10092 python-jaraco-context-bootstrap)))))
10093
10094;;; Variant used to break a cycle with python-pytest-enabler.
10095(define-public python-jaraco-functools-bootstrap
10096 (hidden-package
10097 (package
10098 (name "python-jaraco-functools-bootstrap")
10099 (version "3.5.0")
10100 (source
10101 (origin
10102 (method url-fetch)
10103 (uri (pypi-uri "jaraco.functools" version))
10104 (sha256
10105 (base32 "186xqzs3bqhjwajnprxy3sc3h0w5vdld8spc1dxjnn9720yykq1i"))))
10106 (build-system python-build-system)
10107 (arguments (list #:tests? #f))
10108 (native-inputs (list python-setuptools-scm))
10109 (propagated-inputs (list python-more-itertools))
10110 (home-page "https://github.com/jaraco/jaraco.functools")
10111 (synopsis "Python library extending Python's @code{functools}")
10112 (description "This library extends the standard @code{functools} Python
10113module with a few extra procedures.")
10114 (license license:expat))))
10115
10116(define-public python-jaraco-functools
10117 (package/inherit python-jaraco-functools-bootstrap
10118 (name "python-jaraco-functools")
10119 (arguments
10120 (substitute-keyword-arguments
10121 (package-arguments python-jaraco-functools-bootstrap)
10122 ((#:tests? _ #f)
10123 (not (%current-target-system)))
10124 ((#:phases phases #~%standard-phases)
10125 #~(modify-phases #$phases
10126 (replace 'check
10127 (lambda* (#:key tests? #:allow-other-keys)
10128 (when tests?
10129 ;; Do not test the myproject.toml build as it tries to pull
10130 ;; dependencies from the Internet. Do not run a test that
10131 ;; tries to emulate a broken proprietary CI set-up, fails
10132 ;; to do so correctly, and then throws an error about it.
10133 (invoke "pytest" "-vv" "-k"
10134 "not project and not test_function_throttled"))))))))
10135 (native-inputs
10136 (modify-inputs
10137 (package-native-inputs python-jaraco-functools-bootstrap)
10138 (append python-jaraco-classes
10139 python-pytest
10140 python-pytest-black
10141 python-pytest-checkdocs
10142 python-pytest-cov
10143 python-pytest-enabler-bootstrap ;OK since not propagated
10144 python-pytest-flake8
10145 python-pytest-mypy)))
10146 (properties (alist-delete 'hidden? (package-properties
10147 python-jaraco-functools-bootstrap)))))
10148
10149(define-public python-jaraco-packaging
10150 (package
10151 (name "python-jaraco-packaging")
10152 (version "6.1")
10153 (source
10154 (origin
10155 (method url-fetch)
10156 (uri (pypi-uri "jaraco.packaging" version))
10157 (sha256
10158 (base32
10159 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
10160 (build-system python-build-system)
10161 (propagated-inputs
10162 (list python-pytest
10163 python-pytest-checkdocs
10164 python-pytest-flake8
10165 python-rst.linker
10166 python-setuptools
10167 python-setuptools-scm
10168 python-six
10169 python-sphinx))
10170 (home-page "https://github.com/jaraco/jaraco.packaging")
10171 (synopsis "Tools to supplement packaging Python releases")
10172 (description
10173 "This package provides various tools to supplement packaging Python
10174releases.")
10175 (license license:expat)))
10176
10177(define-public python-jaraco-test
10178 (package
10179 (name "python-jaraco-test")
10180 (version "5.3.0")
10181 (source (origin
10182 (method url-fetch)
10183 (uri (pypi-uri "jaraco.test" version))
10184 (sha256
10185 (base32
10186 "0h0x8qmvfkfqvwdx2m7kwhn53sg26k8gkaas7s1730ak772zqrvz"))))
10187 (build-system pyproject-build-system)
10188 (arguments
10189 (list
10190 #:phases #~(modify-phases %standard-phases
10191 (replace 'check
10192 (lambda _
10193 (invoke "pytest" "-vv" "-k" "http"))))))
10194 (propagated-inputs (list python-jaraco-context python-jaraco-functools))
10195 (native-inputs (list python-flake8
10196 python-pytest
10197 python-pytest-black
10198 python-pytest-checkdocs
10199 python-pytest-cov
10200 python-pytest-enabler
10201 python-pytest-flake8
10202 python-pytest-mypy))
10203 (home-page "https://github.com/jaraco/jaraco.test")
10204 (synopsis "Testing support by jaraco")
10205 (description "This package provides testing support by jaraco.")
10206 (license license:expat)))
10207
10208(define-public python-simplegeneric
10209 (package
10210 (name "python-simplegeneric")
10211 (version "0.8.1")
10212 (source
10213 (origin
10214 (method url-fetch)
10215 (uri (pypi-uri "simplegeneric" version ".zip"))
10216 (sha256
10217 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
10218 (build-system python-build-system)
10219 (native-inputs
10220 (list unzip))
10221 (home-page "https://cheeseshop.python.org/pypi/simplegeneric")
10222 (synopsis "Python module for simple generic functions")
10223 (description
10224 "The simplegeneric module lets you define simple single-dispatch generic
10225functions, akin to Python’s built-in generic functions like @code{len()},
10226@code{iter()} and so on. However, instead of using specially-named methods,
10227these generic functions use simple lookup tables, akin to those used by
10228e.g. @code{pickle.dump()} and other generic functions found in the Python
10229standard library.")
10230 (license license:zpl2.1)))
10231
10232(define-public python-ipython-genutils
10233 ;; TODO: This package is retired, check if can be removed, see description.
10234 (package
10235 (name "python-ipython-genutils")
10236 (version "0.1.0")
10237 (source
10238 (origin
10239 (method url-fetch)
10240 (uri (pypi-uri "ipython_genutils" version))
10241 (sha256
10242 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
10243 (build-system python-build-system)
10244 (arguments `(#:tests? #f)) ; no tests
10245 (home-page "https://ipython.org")
10246 (synopsis "Vestigial utilities from IPython")
10247 (description
10248 "This package provides retired utilities from IPython. No packages
10249outside IPython/Jupyter should depend on it.
10250
10251This package shouldn't exist. It contains some common utilities shared by
10252Jupyter and IPython projects during The Big Split. As soon as possible, those
10253packages will remove their dependency on this, and this package will go
10254away.")
10255 (license license:bsd-3)))
10256
10257;;; Variant used to break a cycle with python-ipykernel.
10258(define-public python-ipyparallel-bootstrap
10259 (hidden-package
10260 (package
10261 (name "python-ipyparallel-bootstrap")
10262 (version "8.2.1")
10263 (source
10264 (origin
10265 (method url-fetch)
10266 (uri (pypi-uri "ipyparallel" version))
10267 (sha256
10268 (base32
10269 "0wiwfd7870zbmczzn96jqxxjf2zcbcaxnsl1ddn8hspwa8y4frzj"))))
10270 (build-system python-build-system)
10271 (arguments
10272 (list
10273 #:tests? #f
10274 #:phases #~(modify-phases %standard-phases
10275 ;; The python-ipykernel is normally propagated but is
10276 ;; removed from this package to break the cycle.
10277 (delete 'sanity-check))))
10278 (propagated-inputs
10279 (list python-dateutil
10280 python-decorator
10281 python-entrypoints
10282 python-ipython
10283 ;; python-ipykernel is omitted here to break a cycle.
10284 python-jupyter-client-bootstrap
10285 python-psutil
10286 python-pyzmq
10287 python-tornado-6
10288 python-tqdm
10289 python-traitlets))
10290 (home-page "https://ipython.org/")
10291 (synopsis "Interactive Parallel Computing with IPython")
10292 (description
10293 "@code{ipyparallel} is a Python package and collection of CLI scripts for
10294controlling clusters for Jupyter. @code{ipyparallel} contains the following
10295CLI scripts:
10296@enumerate
10297@item ipcluster - start/stop a cluster
10298@item ipcontroller - start a scheduler
10299@item ipengine - start an engine
10300@end enumerate")
10301 (license license:bsd-3))))
10302
10303(define-public python-ipyparallel
10304 (package
10305 (inherit python-ipyparallel-bootstrap)
10306 (name "python-ipyparallel")
10307 (arguments
10308 (list
10309 #:phases
10310 #~(modify-phases %standard-phases
10311 (replace 'check
10312 (lambda _
10313 (invoke "pytest" "-vv"))))))
10314 (native-inputs
10315 (list python-ipython
10316 python-pytest
10317 python-pytest-asyncio
10318 python-pytest-cov
10319 python-pytest-tornado
10320 python-testpath))
10321 (propagated-inputs
10322 (modify-inputs (package-propagated-inputs python-ipyparallel-bootstrap)
10323 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
10324 (append python-ipykernel)))
10325 (properties (alist-delete 'hidden? (package-properties
10326 python-ipyparallel-bootstrap)))))
10327
10328(define-public python-ipython-cluster-helper
10329 (package
10330 (name "python-ipython-cluster-helper")
10331 (version "0.6.4")
10332 (source
10333 (origin
10334 (method url-fetch)
10335 (uri (pypi-uri "ipython-cluster-helper" version))
10336 (sha256
10337 (base32
10338 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
10339 (modules '((guix build utils)))
10340 (snippet
10341 '(begin (substitute* "requirements.txt"
10342 (("ipython.*") "ipython\n"))
10343 #t))))
10344 (build-system python-build-system)
10345 (arguments
10346 `(#:tests? #f ; Test suite can't find IPython.
10347 #:phases
10348 (modify-phases %standard-phases
10349 (replace 'check
10350 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
10351 (if tests?
10352 (begin
10353 (setenv "HOME" (getcwd))
10354 (add-installed-pythonpath inputs outputs)
10355 (invoke "python" "example/example.py" "--local"))
10356 #t))))))
10357 (propagated-inputs
10358 (list python-ipyparallel
10359 python-ipython
10360 python-netifaces
10361 python-pyzmq
10362 python-setuptools
10363 python-six))
10364 (home-page "https://github.com/roryk/ipython-cluster-helper")
10365 (synopsis
10366 "Simplify IPython cluster start up and use for multiple schedulers")
10367 (description
10368 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
10369profile, launches a cluster and returns a view. On program exit it shuts the
10370cluster down and deletes the throwaway profile.")
10371 (license license:expat)))
10372
10373(define-public python-ipython-sql
10374 (package
10375 (name "python-ipython-sql")
10376 (version "0.4.1")
10377 (source
10378 (origin
10379 (method url-fetch)
10380 (uri (pypi-uri "ipython-sql" version))
10381 (sha256
10382 (base32 "1r6rz8jgrqzhkf2flwjw75d96g8l7kykmx5wli3q1988w96391ip"))))
10383 (build-system python-build-system)
10384 (arguments
10385 (list #:tests? #f ;must run under IPython
10386 #:phases
10387 #~(modify-phases %standard-phases
10388 (add-after 'unpack 'permit-newer-prettytable
10389 ;; See https://github.com/catherinedevlin/ipython-sql/issues/202
10390 (lambda _
10391 (substitute* "setup.py"
10392 (("prettytable<1")
10393 "prettytable")))))))
10394 (propagated-inputs
10395 (list python-ipython
10396 python-ipython-genutils
10397 python-prettytable
10398 python-six
10399 python-sqlalchemy
10400 python-sqlparse))
10401 (home-page "https://github.com/catherinedevlin/ipython-sql")
10402 (synopsis "RDBMS access via IPython")
10403 (description "This library connects to a database, using SQLAlchemy URL
10404connect strings, then issue SQL commands within IPython or IPython Notebook.")
10405 (license license:expat)))
10406
10407(define-public python-traitlets
10408 (package
10409 (name "python-traitlets")
10410 (version "5.9.0")
10411 (source
10412 (origin
10413 (method url-fetch)
10414 (uri (pypi-uri "traitlets" version))
10415 (sha256
10416 (base32
10417 "1ndslgsan1g5xhrvxrv2x03zcfvjb8nzfd90y1m7bkv8khdf5kgn"))))
10418 (build-system pyproject-build-system)
10419 (native-inputs
10420 (list python-hatchling
10421 python-pre-commit
10422 python-pytest
10423 python-pytest-mock))
10424 (home-page "https://ipython.org")
10425 (synopsis "Configuration system for Python applications")
10426 (description
10427 "Traitlets is a framework that lets Python classes have attributes with
10428type checking, dynamically calculated default values, and ‘on change’
10429callbacks. The package also includes a mechanism to use traitlets for
10430configuration, loading values from files or from command line arguments. This
10431is a distinct layer on top of traitlets, so you can use traitlets in your code
10432without using the configuration machinery.")
10433 (license license:bsd-3)))
10434
10435(define-public python-treelib
10436 (package
10437 (name "python-treelib")
10438 (version "1.6.1")
10439 (source (origin
10440 (method url-fetch)
10441 (uri (pypi-uri "treelib" version))
10442 (sha256
10443 (base32
10444 "1247rv9fbb8pw3xbkbz04q3vnvvva3hcw002gp1clp5psargzgqw"))))
10445 (build-system python-build-system)
10446 (propagated-inputs (list python-future))
10447 (home-page "https://github.com/caesar0301/treelib")
10448 (synopsis "Implementation of a tree structure in Python")
10449 (description
10450 "This package provides a Python implementation of a tree structure.")
10451 (license license:asl2.0)))
10452
10453(define-public python-jupyter-core
10454 (package
10455 (name "python-jupyter-core")
10456 (version "4.10.0")
10457 (source
10458 (origin
10459 (method url-fetch)
10460 (uri (string-append (pypi-uri "jupyter_core" version)))
10461 (sha256
10462 (base32
10463 "1v0s31rmwppdmww135hif03hy164j9kimirh24kxfcbvdfql9pm6"))))
10464 (build-system python-build-system)
10465 (arguments
10466 `(#:phases
10467 (modify-phases %standard-phases
10468 (replace 'check
10469 (lambda* (#:key tests? #:allow-other-keys)
10470 (when tests?
10471 ;; Some tests write to $HOME.
10472 (setenv "HOME" "/tmp")
10473 (invoke "pytest" "-vv"
10474 "-k"
10475 (string-append
10476 ;; XXX: These tests fail with "ModuleNotFoundError: No
10477 ;; module named 'jupyter_core'".
10478 "not test_argv0 and not test_path_priority "
10479 "and not test_not_on_path")))))
10480 (add-after 'unpack 'patch-testsuite
10481 (lambda _
10482 ;; test_not_on_path() and test_path_priority() try to run a test
10483 ;; that loads jupyter_core, so we need GUIX_PYTHONPATH
10484 (substitute* "jupyter_core/tests/test_command.py"
10485 (("env = \\{'PATH': ''\\}")
10486 "env = {'PATH': '', 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}")
10487 (("env = \\{'PATH': str\\(b\\)\\}")
10488 "env = {'PATH': str(b), 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}"))))
10489 ;; Migration is running whenever etc/jupyter exists, but the
10490 ;; Guix-managed directory will never contain any migratable IPython
10491 ;; config files and cannot be written to anyway, so just pretend we
10492 ;; already did that.
10493 (add-after 'install 'disable-migration
10494 (lambda* (#:key outputs #:allow-other-keys)
10495 (mkdir-p (string-append (assoc-ref outputs "out") "/etc/jupyter"))
10496 (invoke "touch"
10497 (string-append
10498 (assoc-ref outputs "out")
10499 "/etc/jupyter/migrated")))))))
10500 (propagated-inputs (list python-traitlets))
10501 (native-inputs (list python-pytest))
10502 ;; This package provides the `jupyter` binary and thus also exports the
10503 ;; search paths.
10504 (native-search-paths
10505 (list (search-path-specification
10506 (variable "JUPYTER_CONFIG_PATH")
10507 (files '("etc/jupyter")))
10508 (search-path-specification
10509 (variable "JUPYTER_PATH")
10510 (files '("share/jupyter")))))
10511 (home-page "https://jupyter.org/")
10512 (synopsis "Jupyter base package")
10513 (description
10514 "Jupyter core is the base package on which Jupyter projects rely.")
10515 (license license:bsd-3)))
10516
10517;; Bootstrap variant of jupyter-client, which breaks the loop between ipykernel
10518;; and jupyter-client by removing the former from its native-inputs and
10519;; disabling tests.
10520(define-public python-jupyter-client-bootstrap
10521 (hidden-package
10522 (package
10523 (name "python-jupyter-client-bootstrap")
10524 (version "7.2.2")
10525 (source
10526 (origin
10527 (method url-fetch)
10528 (uri (pypi-uri "jupyter_client" version))
10529 (sha256
10530 (base32
10531 "12pbp177bfb3710y1a5598mwn8ffhyzmpll67m0nmalb98savnwg"))))
10532 (build-system pyproject-build-system)
10533 (arguments
10534 (list
10535 #:tests? #f
10536 #:phases
10537 #~(modify-phases %standard-phases
10538 ;; The deprecation warnings break the tests.
10539 (add-after 'unpack 'hide-zmq-deprecation-warnings
10540 (lambda _
10541 (substitute* "pyproject.toml"
10542 (("\"ignore:There is no current event loop:DeprecationWarning:zmq\"," m)
10543 (string-append m "
10544\"ignore:zmq.eventloop.ioloop.*:DeprecationWarning\",
10545\"ignore:zmq.tests.BaseZMQTestCase.*:DeprecationWarning\"")))))
10546 (add-after 'unpack 'set-tool-file-names
10547 (lambda* (#:key inputs #:allow-other-keys)
10548 (substitute* "jupyter_client/localinterfaces.py"
10549 (("'ip'")
10550 (format #f "'~a'" (search-input-file inputs "sbin/ip")))))))))
10551 (inputs (list iproute))
10552 (propagated-inputs
10553 (list python-dateutil
10554 python-entrypoints
10555 python-jupyter-core
10556 python-nest-asyncio
10557 python-pyzmq
10558 python-tornado-6
10559 python-traitlets))
10560 (home-page "https://jupyter.org/")
10561 (synopsis "Jupyter protocol implementation and client libraries")
10562 (description
10563 "The @code{jupyter_client} package contains the reference implementation
10564of the Jupyter protocol. It also provides client and kernel management APIs
10565for working with kernels, and the @code{jupyter kernelspec} entrypoint for
10566installing @code{kernelspec}s for use with Jupyter frontends.")
10567 (license license:bsd-3))))
10568
10569(define-public python-jupyter-client
10570 (let ((base python-jupyter-client-bootstrap))
10571 (package
10572 (inherit base)
10573 (name "python-jupyter-client")
10574 (arguments
10575 (substitute-keyword-arguments (package-arguments base)
10576 ((#:tests? _ #f)
10577 (not (%current-target-system)))
10578 ((#:phases phases #~%standard-phases)
10579 #~(modify-phases #$phases
10580 (replace 'check
10581 (lambda* (#:key tests? #:allow-other-keys)
10582 (when tests?
10583 ;; Some tests try to write to $HOME.
10584 (setenv "HOME" "/tmp")
10585 (invoke "pytest" "-vv"
10586 "-k"
10587 ;; XXX "RuntimeError: Kernel died before replying
10588 ;; to kernel_info", but there's no more
10589 ;; information.
10590 "not test_start_parallel_process_kernels"))))))))
10591 (native-inputs
10592 (list python-pytest
10593 python-pytest-asyncio
10594 python-pytest-timeout
10595 python-async-generator
10596 python-ipython
10597 python-ipykernel-bootstrap))
10598 (properties (alist-delete 'hidden? (package-properties base))))))
10599
10600(define-public python-ipykernel
10601 (package
10602 (name "python-ipykernel")
10603 (version "6.13.0")
10604 (source
10605 (origin
10606 (method url-fetch)
10607 (uri (pypi-uri "ipykernel" version))
10608 (sha256
10609 (base32 "0q5yni8h08nadsn53f957p0pjsjhwl2b2lp1hqz3jn0854z2fa0f"))))
10610 (build-system pyproject-build-system)
10611 (arguments
10612 (list
10613 #:imported-modules `(,@%pyproject-build-system-modules
10614 (guix build syscalls))
10615 #:modules '((guix build pyproject-build-system)
10616 (guix build syscalls)
10617 (guix build utils)
10618 (ice-9 match))
10619 #:phases
10620 #~(modify-phases %standard-phases
10621 ;; The deprecation warnings break the tests.
10622 (add-after 'unpack 'hide-zmq-deprecation-warnings
10623 (lambda _
10624 (substitute* "pyproject.toml"
10625 (("\"ignore:There is no current event loop:DeprecationWarning\"" m)
10626 (string-append m ",
10627\"ignore:make_current is deprecated.*:DeprecationWarning\",
10628\"ignore:zmq.eventloop.ioloop.*:DeprecationWarning\",
10629\"ignore:zmq.tests.BaseZMQTestCase.*:DeprecationWarning\"")))))
10630 (replace 'check
10631 (lambda* (#:key tests? #:allow-other-keys)
10632 (when tests?
10633 (match (primitive-fork)
10634 (0 ;child process
10635 (set-child-subreaper!)
10636 ;; XXX: Tini provides proper PID1-like signal handling that
10637 ;; reaps zombie processes, necessary for the
10638 ;; 'test_shutdown_subprocesses' test to pass.
10639
10640 ;; TODO: Complete https://issues.guix.gnu.org/30948.
10641 (setenv "HOME" "/tmp")
10642 (execlp "tini" "--" "pytest" "-vv"))
10643 (pid
10644 (match (waitpid pid)
10645 ((_ . status)
10646 (unless (zero? status)
10647 (error "`pytest' exited with status"
10648 status)))))))))
10649 (add-after 'install 'set-python-file-name
10650 (lambda* (#:key inputs #:allow-other-keys)
10651 ;; Record the absolute file name of the 'python' executable in
10652 ;; 'kernel.json'.
10653 (substitute* (string-append #$output "/share/jupyter"
10654 "/kernels/python3/kernel.json")
10655 (("\"python\"")
10656 (format #f "~s" (search-input-file inputs
10657 "/bin/python3")))))))))
10658 (propagated-inputs
10659 (list python-debugpy
10660 python-ipython
10661 python-jupyter-client ;imported at runtime during connect
10662 python-matplotlib-inline
10663 ;;python-nest-asyncio
10664 ;;python-packaging
10665 python-psutil
10666 python-tornado-6
10667 python-traitlets))
10668 (inputs (list python)) ;for cross compilation
10669 (native-inputs
10670 (list python-flaky
10671 python-ipyparallel-bootstrap
10672 ;; XXX: Our Pytest package captures its native inputs in its
10673 ;; wrapper script (such as python-nose), which is used in the code
10674 ;; and causes deprecation warnings. Using the bootstrap variant
10675 ;; avoids that.
10676 python-pytest-bootstrap
10677 python-pytest-timeout
10678 tini))
10679 (home-page "https://ipython.org")
10680 (synopsis "IPython Kernel for Jupyter")
10681 (description "This package provides the IPython kernel for Jupyter.")
10682 (license license:bsd-3)))
10683
10684;; Bootstrap variant of ipykernel, which uses the bootstrap jupyter-client to
10685;; break the cycle between ipykernel and jupyter-client.
10686(define-public python-ipykernel-bootstrap
10687 (let ((parent python-ipykernel))
10688 (hidden-package
10689 (package
10690 (inherit parent)
10691 (name "python-ipykernel-bootstrap")
10692 (arguments (list #:tests? #f
10693 ;; The package should normally propagate ipykernel,
10694 ;; left out here to break the cycle.
10695 #:phases #~(modify-phases %standard-phases
10696 (delete 'sanity-check))))
10697 (native-inputs '())
10698 (propagated-inputs
10699 (modify-inputs (package-propagated-inputs parent)
10700 (replace "python-jupyter-client" python-jupyter-client-bootstrap)
10701 (append python-ipyparallel-bootstrap)))))))
10702
10703(define-public python-pari-jupyter
10704 (package
10705 (name "python-pari-jupyter")
10706 (version "1.4.1")
10707 (source
10708 (origin
10709 (method url-fetch)
10710 (uri (pypi-uri "pari-jupyter" version))
10711 (sha256
10712 (base32
10713 "1ikqvv335qfrhmlji0iclci6pnm2c3fvnxf031jr1d68j79g6ypd"))))
10714 (build-system python-build-system)
10715 (arguments '(#:tests? #f)) ;no test suite
10716 (inputs
10717 (list pari-gp readline python-ipykernel))
10718 (home-page "https://github.com/sagemath/pari-jupyter")
10719 (synopsis "Jupyter kernel for PARI/GP")
10720 (description "The package provides a PARI/GP kernel for Jupyter.")
10721 (license license:gpl3+)))
10722
10723(define-public python-backcall
10724 (package
10725 (name "python-backcall")
10726 (version "0.2.0")
10727 (source
10728 (origin
10729 (method url-fetch)
10730 (uri (pypi-uri "backcall" version))
10731 (sha256
10732 (base32
10733 "07jy4562lvnhkk6kfr3cphmizy88anlhmbwb8kdzlz2ypqkvzgaw"))))
10734 (build-system python-build-system)
10735 (home-page "https://github.com/takluyver/backcall/")
10736 (synopsis "Specifications for callback functions passed in to an API")
10737 (description
10738 "If your code lets other people supply callback functions, it's important
10739to specify the function signature you expect, and check that functions support
10740that. Adding extra parameters later would break other peoples code unless
10741you're careful. The @code{backcall} package provides a way of specifying the
10742callback signature using a prototype function.")
10743 (license license:bsd-3)))
10744
10745(define-public python-pubmed-parser
10746 (package
10747 (name "python-pubmed-parser")
10748 (version "0.3.1")
10749 (source (origin
10750 (method git-fetch)
10751 (uri (git-reference
10752 (url "https://github.com/titipata/pubmed_parser")
10753 (commit version)))
10754 (file-name (git-file-name name version))
10755 (sha256
10756 (base32
10757 "195cmjjg7xdwjj5455h78q7jnxnccia07a19xwndhlkxv7vk9v60"))))
10758 (build-system pyproject-build-system)
10759 (propagated-inputs
10760 (list python-lxml
10761 python-numpy
10762 python-requests
10763 python-six
10764 python-unidecode))
10765 (native-inputs
10766 (list python-pytest
10767 python-pytest-cov))
10768 (home-page "https://github.com/titipata/pubmed_parser")
10769 (synopsis "Parser for Pubmed Open-Access Subset and MEDLINE XML repository")
10770 (description
10771 "This package provides a Python parser for Pubmed Open-Access Subset and
10772MEDLINE XML repository.")
10773 (license license:expat)))
10774
10775(define-public python-pure-eval
10776 (package
10777 (name "python-pure-eval")
10778 (version "0.2.2")
10779 (source
10780 (origin
10781 (method url-fetch)
10782 (uri (pypi-uri "pure_eval" version))
10783 (sha256
10784 (base32 "1hwsm85cwqwh6d6x4vzcimla2865s6v19ms3ym81ganzyq534i9b"))))
10785 (build-system python-build-system)
10786 (native-inputs (list python-pytest python-setuptools-scm))
10787 (home-page "https://github.com/alexmojaki/pure_eval")
10788 (synopsis "Python library to evaluate abstract syntax tree nodes")
10789 (description "The @code{pure_eval} Python library can safely evaluate
10790abstract syntax tree (AST) nodes without side effects.")
10791 (license license:expat)))
10792
10793(define-public python-asttokens
10794 (package
10795 (name "python-asttokens")
10796 (version "2.2.1")
10797 (source
10798 (origin
10799 (method url-fetch)
10800 (uri (pypi-uri "asttokens" version))
10801 (sha256
10802 (base32 "1wwlpvnrh67z4228841zgpqc46vigslzmbvk2izbfc3g585i28j6"))))
10803 (build-system python-build-system)
10804 (propagated-inputs (list python-six))
10805 (native-inputs (list python-astroid python-pytest python-setuptools-scm))
10806 (home-page "https://github.com/gristlabs/asttokens")
10807 (synopsis "Python library to annotate abstract syntax trees")
10808 (description "The @code{asttokens} module annotates Python abstract syntax
10809trees (ASTs) with the positions of tokens and text in the source code that
10810generated them. It makes it possible for tools that work with logical AST
10811nodes to find the particular text that resulted in those nodes, for example
10812for automated refactoring or highlighting.")
10813 (license license:asl2.0)))
10814
10815(define-public python-littleutils
10816 (package
10817 (name "python-littleutils")
10818 (version "0.2.2")
10819 (source
10820 (origin
10821 (method url-fetch)
10822 (uri (pypi-uri "littleutils" version))
10823 (sha256
10824 (base32 "0vwijrylppmk0nbddqvn527r9cg3zw8d6zk6r58hslry42jf7jp6"))))
10825 (build-system python-build-system)
10826 (home-page "https://github.com/alexmojaki/littleutils")
10827 (synopsis "Python utility function collection")
10828 (description "@code{littleutils} is a small collection of Python utility
10829functions, useful in the context of writing unit tests among other uses.")
10830 (license license:expat)))
10831
10832(define-public python-stack-data
10833 (package
10834 (name "python-stack-data")
10835 (version "0.2.0")
10836 (source
10837 (origin
10838 (method url-fetch)
10839 (uri (pypi-uri "stack_data" version))
10840 (sha256
10841 (base32 "04lfcj5qrn4qikjw89qbdzqwm0xm4bgm4m8rll1rafk3pm0jssa5"))))
10842 (build-system python-build-system)
10843 (propagated-inputs (list python-asttokens python-executing python-pure-eval))
10844 (native-inputs
10845 (list python-cython
10846 python-littleutils
10847 python-pygments
10848 python-pytest
10849 python-setuptools-scm
10850 python-typeguard))
10851 (home-page "https://github.com/alexmojaki/stack_data")
10852 (synopsis "Python stack frame and traceback manipulation library")
10853 (description "The @code{stack_data} Python library extracts data from
10854stack frames and tracebacks. Is can be used to display more useful tracebacks
10855than the default.")
10856 (license license:expat)))
10857
10858(define-public python-ipython
10859 (package
10860 (name "python-ipython")
10861 (version "8.5.0")
10862 (source
10863 (origin
10864 (method url-fetch)
10865 (uri (pypi-uri "ipython" version ".tar.gz"))
10866 (sha256
10867 (base32 "114z175hnv1lgprj06zfcil7lkq013rggjbrc43gsxkmv1fdyyq9"))))
10868 (build-system python-build-system)
10869 (arguments
10870 `(#:phases
10871 (modify-phases %standard-phases
10872 (add-after 'unpack 'make-docs-reproducible
10873 (lambda _
10874 (substitute* "IPython/sphinxext/ipython_directive.py"
10875 ((".*import datetime") "")
10876 ((".*datetime.datetime.now\\(\\)") "")
10877 (("%timeit") "# %timeit"))))
10878 (replace 'check
10879 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
10880 (when tests?
10881 (setenv "HOME" "/tmp/") ;required by some tests
10882 (invoke "python" "-m" "pytest" "-vv")))))))
10883 (inputs (list readline which))
10884 (propagated-inputs
10885 (list python-backcall
10886 python-decorator
10887 python-jedi
10888 python-jinja2
10889 python-jsonschema
10890 python-matplotlib
10891 python-matplotlib-inline
10892 python-mistune
10893 python-nbformat
10894 python-numpy
10895 python-numpydoc
10896 python-pexpect
10897 python-pickleshare
10898 python-prompt-toolkit
10899 python-pygments
10900 python-pyzmq
10901 python-simplegeneric
10902 python-stack-data
10903 python-terminado
10904 python-traitlets))
10905 (native-inputs
10906 (list graphviz
10907 pkg-config
10908 ;; For tests.
10909 python-pytest
10910 python-requests
10911 python-testpath))
10912 (home-page "https://ipython.org")
10913 (synopsis "IPython is a tool for interactive computing in Python")
10914 (description
10915 "IPython provides a rich architecture for interactive computing with:
10916Powerful interactive shells, a browser-based notebook, support for interactive
10917data visualization, embeddable interpreters and tools for parallel
10918computing.")
10919 (properties '((cpe-name . "ipython")))
10920 (license license:bsd-3)))
10921
10922(define-public python-ipython-documentation
10923 (package
10924 (inherit python-ipython)
10925 (name "python-ipython-documentation")
10926 (version (package-version python-ipython))
10927 (arguments
10928 (list
10929 #:phases
10930 #~(modify-phases %standard-phases
10931 (add-after 'unpack 'set-pythonpath
10932 (lambda _
10933 ;; Ensure this fixed (via the
10934 ;; "python-ipython-documentation-chars.patch" patch) copy of
10935 ;; IPython gets used.
10936 (setenv "PYTHONPATH" (string-append (getcwd)))))
10937 (add-before 'build 'configure-sphinx-for-xelatex
10938 (lambda _
10939 ;; Use XeLaTeX instead of PDFLaTeX, as it can
10940 ;; cope with the Unicode characters present in the
10941 ;; contributors page, for example.
10942 (substitute* "docs/source/conf.py"
10943 (("project = 'IPython'.*" all)
10944 (string-append all "latex_engine = 'xelatex'\n")))
10945 ;; XXX: The Sphinx-generated ipython.tex specifies the GNU
10946 ;; FreeFont font to be searched via its extension, which uses
10947 ;; kpathsea instead of fontconfig and fail (see:
10948 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
10949 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
10950 ;; GUIX_TEXMF.
10951 (mkdir-p "texmf-dist/fonts/opentype/public")
10952 (symlink (string-append
10953 #$(this-package-native-input "font-gnu-freefont")
10954 "/share/fonts/opentype")
10955 (string-append
10956 (getcwd) "/"
10957 "texmf-dist/fonts/opentype/public/gnu-freefont"))
10958 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
10959 (getcwd) "/texmf-dist"))))
10960 (delete 'build)
10961 (delete 'check)
10962 (replace 'install
10963 (lambda* (#:key outputs #:allow-other-keys)
10964 (let* ((data (string-append #$output "/share"))
10965 (doc (string-append data "/doc/" #$name "-" #$version))
10966 (html (string-append doc "/html"))
10967 (info (string-append data "/info")))
10968 (invoke "make" "-C" "docs" "info" "html" "pdf"
10969 (string-append "SPHINXOPTS=-j"
10970 (number->string (parallel-job-count))))
10971 (install-file "COPYING.rst" doc)
10972 (copy-recursively "examples" (string-append doc "/examples"))
10973 ;; Install HTML documentation.
10974 (copy-recursively "docs/build/html" html)
10975 ;; Likewise for the PDF.
10976 (install-file "docs/build/latex/ipython.pdf" doc)
10977 ;; Likewise for the info manual.
10978 (install-file "docs/build/texinfo/ipython.info" info)
10979 (symlink (string-append html "/_images")
10980 (string-append info "/ipython-figures"))))))))
10981 (native-inputs
10982 (list fontconfig ;for XDG_DATA_DIRS to locate fonts
10983 font-gnu-freefont
10984 graphviz
10985 python-docrepr
10986 python-ipykernel
10987 python-sphinx
10988 python-sphinx-rtd-theme
10989 texinfo
10990 (texlive-updmap.cfg
10991 (list texlive-latexmk
10992 texlive-polyglossia
10993 texlive-xetex
10994 texlive-xindy))))))
10995
10996(define-public python-urwid
10997 (package
10998 (name "python-urwid")
10999 (version "2.1.2")
11000 (source
11001 (origin
11002 (method url-fetch)
11003 (uri (pypi-uri "urwid" version))
11004 (sha256
11005 (base32
11006 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
11007 (build-system python-build-system)
11008 (arguments
11009 (list
11010 #:phases
11011 #~(modify-phases %standard-phases
11012 (add-after 'unpack 'remove-vterm-tests
11013 ;; According to Debian these tests are cursed.
11014 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
11015 (lambda _
11016 (delete-file "urwid/tests/test_vterm.py"))))))
11017 (home-page "https://urwid.org")
11018 (synopsis "Console user interface library for Python")
11019 (description
11020 "Urwid is a curses-based UI/widget library for Python. It includes many
11021features useful for text console applications.")
11022 (license license:lgpl2.1+)))
11023
11024(define-public python-urwid-readline
11025 (package
11026 (name "python-urwid-readline")
11027 (version "0.13")
11028 (source
11029 (origin
11030 (method git-fetch)
11031 (uri (git-reference
11032 (url "https://github.com/rr-/urwid_readline")
11033 (commit version)))
11034 (file-name (git-file-name name version))
11035 (sha256
11036 (base32
11037 "0y9k86p31mlr9rwnrbljvfgl183r5j60yaj0r3scljn1m0mlg8qg"))))
11038 (build-system python-build-system)
11039 (arguments
11040 `(#:phases
11041 (modify-phases %standard-phases
11042 (replace 'check
11043 (lambda* (#:key tests? #:allow-other-keys)
11044 (when tests?
11045 (invoke "pytest" "-vv")))))))
11046 (propagated-inputs (list python-urwid))
11047 (native-inputs (list python-pytest))
11048 (home-page "https://github.com/rr-/urwid_readline")
11049 (synopsis "Text input widget for urwid that supports readline shortcuts")
11050 (description
11051 "This package provides a textbox edit widget for @code{python-urwid} that
11052supports @code{readline} shortcuts.")
11053 (license license:expat)))
11054
11055(define-public python-textdistance
11056 (package
11057 (name "python-textdistance")
11058 (version "4.2.1")
11059 (source
11060 (origin
11061 ;; There are no tests in the PyPI tarball.
11062 (method git-fetch)
11063 (uri (git-reference
11064 (url "https://github.com/life4/textdistance")
11065 (commit (string-append "v." version))))
11066 (file-name (git-file-name name version))
11067 (sha256
11068 (base32 "1g17i356fnny4k6hjr2ayy9k77jbvd6zzmngws2kbrnvhss1wgwf"))))
11069 (build-system python-build-system)
11070 (arguments
11071 `(#:test-target "pytest"
11072 #:phases
11073 (modify-phases %standard-phases
11074 (add-after 'unpack 'delete-external-test
11075 (lambda _
11076 ;; All tests in this file require external libraries.
11077 (delete-file "tests/test_external.py")
11078 #t)))))
11079 (native-inputs
11080 (list python-hypothesis
11081 python-isort
11082 python-numpy
11083 python-pytest
11084 python-pytest-runner
11085 python-tabulate))
11086 (home-page "https://github.com/life4/textdistance")
11087 (synopsis "Compute distance between the two texts")
11088 (description "@code{textdistance} is a pure Python library for comparing
11089distance between two or more sequences by many algorithms.")
11090 (license license:expat)))
11091
11092(define-public python-urwidtrees
11093 (package
11094 (name "python-urwidtrees")
11095 (version "1.0.3")
11096 (source
11097 (origin
11098 (method git-fetch)
11099 ;; package author intends on distributing via github rather than pypi:
11100 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
11101 (uri (git-reference
11102 (url "https://github.com/pazz/urwidtrees")
11103 (commit version)))
11104 (file-name (git-file-name name version))
11105 (sha256
11106 (base32
11107 "1y1vysx7jg0vbrarlsykhf7nmr8fc6k1fva1q3i98xq2m30s6r68"))))
11108 (build-system python-build-system)
11109 (arguments
11110 '(#:tests? #f)) ; no tests
11111 (propagated-inputs (list python-urwid))
11112 (native-inputs (list python-mock))
11113 (home-page "https://github.com/pazz/urwidtrees")
11114 (synopsis "Tree widgets for urwid")
11115 (description "Urwidtrees is a Widget Container API for the @code{urwid}
11116toolkit. Use it to build trees of widgets.")
11117 (license license:gpl3+)))
11118
11119(define-public python-ua-parser
11120 (package
11121 (name "python-ua-parser")
11122 (version "0.10.0")
11123 (source
11124 (origin
11125 (method url-fetch)
11126 (uri (pypi-uri "ua-parser" version))
11127 (sha256
11128 (base32
11129 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
11130 (build-system python-build-system)
11131 (arguments
11132 `(#:tests? #f)) ;no test suite in release
11133 (native-inputs
11134 (list python-pyyaml))
11135 (home-page "https://github.com/ua-parser/uap-python")
11136 (synopsis "User agent parser")
11137 (description
11138 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
11139 (license license:asl2.0)))
11140
11141(define-public python-user-agents
11142 (package
11143 (name "python-user-agents")
11144 (version "2.2.0")
11145 (source
11146 (origin
11147 (method url-fetch)
11148 (uri (pypi-uri "user-agents" version))
11149 (sha256
11150 (base32
11151 "09mddriffm9rkwr30081fy9n3cn976ms8pwc8p8hhlxnilbjavfk"))))
11152 (build-system python-build-system)
11153 (arguments
11154 `(#:tests? #f)) ;missing devices.json test file in release
11155 (propagated-inputs
11156 (list python-ua-parser))
11157 (home-page "https://github.com/selwin/python-user-agents")
11158 (synopsis "User Agent strings parsing library")
11159 (description
11160 "A library to identify devices (phones, tablets) and their capabilities by
11161parsing (browser/HTTP) user agent strings.")
11162 (license license:expat)))
11163
11164(define-public python-pydbus
11165 (package
11166 (name "python-pydbus")
11167 (version "0.6.0")
11168 (source
11169 (origin
11170 (method url-fetch)
11171 (uri (pypi-uri "pydbus" version))
11172 (sha256
11173 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
11174 (build-system python-build-system)
11175 (propagated-inputs (list python-pygobject))
11176 (home-page "https://github.com/LEW21/pydbus")
11177 (synopsis "Pythonic D-Bus library")
11178 (description "Pydbus provides a pythonic interface to the D-Bus
11179message bus system. Pydbus can be used to access remote objects and
11180also for object publication. It is based on PyGI, the Python GObject
11181Introspection bindings, which is the recommended way to use GLib from Python.")
11182 (license license:lgpl2.1+)))
11183
11184(define-public python-dbus
11185 (package
11186 (name "python-dbus")
11187 (version "1.2.18")
11188 (source
11189 (origin
11190 (method url-fetch)
11191 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
11192 "dbus-python-" version ".tar.gz"))
11193 (sha256
11194 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
11195 (build-system gnu-build-system)
11196 (native-inputs
11197 (list pkg-config))
11198 (inputs
11199 `(("python" ,python-wrapper)
11200 ("dbus-glib" ,dbus-glib)))
11201 (synopsis "Python bindings for D-bus")
11202 (description "python-dbus provides bindings for libdbus, the reference
11203implementation of D-Bus.")
11204 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
11205 (properties `((python2-variant . ,(delay python2-dbus))))
11206 (license license:expat)))
11207
11208(define-public python2-dbus
11209 (package/inherit python-dbus
11210 (name "python2-dbus")
11211 (inputs `(("python" ,python-2)
11212 ,@(alist-delete "python"
11213 (package-inputs python-dbus))))
11214 (arguments
11215 `(#:configure-flags '("PYTHON_VERSION=2")))))
11216
11217(define-public python-dbus-next
11218 (package
11219 (name "python-dbus-next")
11220 (version "0.2.3")
11221 (source
11222 (origin
11223 (method git-fetch)
11224 (uri (git-reference
11225 (url "https://github.com/altdesktop/python-dbus-next")
11226 (commit (string-append "v" version))))
11227 (file-name (git-file-name name version))
11228 (sha256
11229 (base32
11230 "1ahaz52kny1p9xxv6phvk4iq56rg8li390wywlxf2yslaij1188h"))))
11231 (build-system python-build-system)
11232 (native-inputs
11233 (list python-pytest))
11234 (home-page "https://github.com/altdesktop/python-dbus-next")
11235 (synopsis "Zero-dependency DBus library for Python with asyncio support")
11236 (description
11237 "This DBus library for Python aims to be a fully-featured high-level
11238library primarily geared towards integration of applications into desktop and
11239mobile environments.")
11240 (license license:expat)))
11241
11242(define-public python-notify2
11243 (package
11244 (name "python-notify2")
11245 (version "0.3.1")
11246 (source
11247 (origin
11248 (method url-fetch)
11249 (uri (pypi-uri "notify2" version))
11250 (sha256
11251 (base32
11252 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
11253 (build-system python-build-system)
11254 (arguments `(#:tests? #f)) ; tests depend on system state
11255 (propagated-inputs
11256 (list python-dbus))
11257 (home-page "https://bitbucket.org/takluyver/pynotify2")
11258 (synopsis "Python interface to D-Bus notifications")
11259 (description
11260 "Pynotify2 provides a Python interface for sending D-Bus notifications.
11261It is a reimplementation of pynotify in pure Python, and an alternative to
11262the GObject Introspection bindings to libnotify for non-GTK applications.")
11263 (license (list license:bsd-2
11264 license:lgpl2.1+))))
11265
11266;; beautifulsoup4 has a totally different namespace than 3.x,
11267;; and pypi seems to put it under its own name, so I guess we should too
11268(define-public python-beautifulsoup4
11269 (package
11270 (name "python-beautifulsoup4")
11271 (version "4.11.1")
11272 (source
11273 (origin
11274 (method url-fetch)
11275 (uri (pypi-uri "beautifulsoup4" version))
11276 (sha256
11277 (base32
11278 "14v68cpfzckfz63n9hnbsm271jvzvxscyijz83mhha7gcmdsb6md"))))
11279 (build-system python-build-system)
11280 (arguments
11281 '(#:phases (modify-phases %standard-phases
11282 (replace 'check
11283 (lambda* (#:key tests? #:allow-other-keys)
11284 (when tests?
11285 (invoke "pytest" "-vv")))))))
11286 (native-inputs
11287 (list python-pytest))
11288 (propagated-inputs
11289 (list python-soupsieve python-html5lib python-lxml))
11290 (home-page
11291 "https://www.crummy.com/software/BeautifulSoup/bs4/")
11292 (synopsis
11293 "Python screen-scraping library")
11294 (description
11295 "Beautiful Soup is a Python library designed for rapidly setting up
11296screen-scraping projects. It offers Pythonic idioms for navigating,
11297searching, and modifying a parse tree, providing a toolkit for
11298dissecting a document and extracting what you need. It automatically
11299converts incoming documents to Unicode and outgoing documents to UTF-8.")
11300 (license license:expat)))
11301
11302(define-public python-soupsieve
11303 (package
11304 (name "python-soupsieve")
11305 (version "2.2.1")
11306 (source
11307 (origin
11308 (method url-fetch)
11309 (uri (pypi-uri "soupsieve" version))
11310 (sha256
11311 (base32
11312 "1k70gpn2d3vgdyxbdy536dgm4kchcraxz6lmgsfg3324iy2789q5"))))
11313 (build-system python-build-system)
11314 (arguments
11315 ;;XXX: 2 tests fail currently despite claming they were to be
11316 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
11317 ;;don't want to create a circular dependency.
11318 (list #:tests? #f
11319 #:phases
11320 #~(modify-phases %standard-phases
11321 ;; Circular dependency with python-beautifulsoup4.
11322 (delete 'sanity-check))))
11323 (home-page "https://github.com/facelessuser/soupsieve")
11324 (synopsis "CSS selector library")
11325 (description
11326 "Soup Sieve is a CSS selector library designed to be used with Beautiful
11327Soup 4. It aims to provide selecting, matching, and filtering using modern
11328CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
11329specifications up through the latest CSS level 4 drafts and beyond (though
11330some are not yet implemented).")
11331 (license license:expat)))
11332
11333
11334(define-public python-netifaces
11335 (package
11336 (name "python-netifaces")
11337 (version "0.11.0")
11338 (source
11339 (origin
11340 (method url-fetch)
11341 (uri (pypi-uri "netifaces" version))
11342 (sha256
11343 (base32
11344 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
11345 (build-system python-build-system)
11346 (home-page "https://github.com/al45tair/netifaces")
11347 (synopsis
11348 "Python module for portable network interface information")
11349 (description
11350 "Netifaces is a Python module providing information on network
11351interfaces in an easy and portable manner.")
11352 (license license:expat)))
11353
11354(define-public python-networkx
11355 (package
11356 (name "python-networkx")
11357 (version "2.8.6")
11358 (source
11359 (origin
11360 (method url-fetch)
11361 (uri (pypi-uri "networkx" version))
11362 (sha256
11363 (base32 "19h18f5j79l7kmwm5cvm75fadjgmkzw5m3pyvb9cnq0860q7faxx"))))
11364 (build-system python-build-system)
11365 (arguments
11366 '(#:phases (modify-phases %standard-phases
11367 (replace 'check
11368 (lambda* (#:key tests? #:allow-other-keys)
11369 (if tests?
11370 (invoke "pytest" "-vv" "--pyargs" "networkx")
11371 (format #t "test suite not run~%")) #t)))))
11372 (propagated-inputs (list python-decorator))
11373 (native-inputs (list python-pytest))
11374 (home-page "https://networkx.github.io/")
11375 (synopsis
11376 "Python module for creating and manipulating graphs and networks")
11377 (description
11378 "NetworkX is a Python package for the creation, manipulation, and study
11379of the structure, dynamics, and functions of complex networks.")
11380 (license license:bsd-3)))
11381
11382
11383(define-public python-datrie
11384 (package
11385 (name "python-datrie")
11386 (version "0.8.2")
11387 (source
11388 (origin
11389 (method url-fetch)
11390 (uri (pypi-uri "datrie" version))
11391 (sha256
11392 (base32
11393 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
11394 (build-system python-build-system)
11395 (native-inputs
11396 (list python-cython python-hypothesis python-pytest
11397 python-pytest-runner))
11398 (home-page "https://github.com/kmike/datrie")
11399 (synopsis "Fast, efficiently stored trie for Python")
11400 (description
11401 "This package provides a fast, efficiently stored trie implementation for
11402Python.")
11403 (license license:lgpl2.1+)))
11404
11405(define-public python-amply
11406 (package
11407 (name "python-amply")
11408 (version "0.1.4")
11409 (source
11410 (origin
11411 (method url-fetch)
11412 (uri (pypi-uri "amply" version))
11413 (sha256
11414 (base32
11415 "0f1db9zp0rsfzxvaz55xwh8h5rfdgr9a2a715g06ic8nknsdq4nb"))))
11416 (build-system python-build-system)
11417 (propagated-inputs
11418 (list python-docutils python-pyparsing))
11419 (native-inputs
11420 (list python-setuptools-scm))
11421 (home-page "https://github.com/willu47/amply")
11422 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
11423 (description
11424 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
11425structures.")
11426 (license license:epl1.0)))
11427
11428(define-public python-pulp
11429 (package
11430 (name "python-pulp")
11431 (version "2.4")
11432 (source
11433 (origin
11434 (method url-fetch)
11435 (uri (pypi-uri "PuLP" version))
11436 (sha256
11437 (base32
11438 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
11439 (build-system python-build-system)
11440 (propagated-inputs
11441 (list python-amply))
11442 (home-page "https://github.com/coin-or/pulp")
11443 (synopsis "Linear Programming modeler")
11444 (description
11445 "PuLP is a Linear Programming modeler written in Python. PuLP can
11446generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
11447solve linear problems.")
11448 (license license:expat)))
11449
11450(define-public python-py-tes
11451 (package
11452 (name "python-py-tes")
11453 (version "0.4.2")
11454 (source
11455 (origin
11456 (method url-fetch)
11457 (uri (pypi-uri "py-tes" version))
11458 (sha256
11459 (base32 "0b272y392v0mnq0f3sm5kgcx8fn4qwfbym89hhvqxz3xkganr4pn"))))
11460 (build-system python-build-system)
11461 (propagated-inputs
11462 (list python-attrs python-dateutil python-future python-requests))
11463 (home-page "https://github.com/ohsu-comp-bio/py-tes")
11464 (synopsis "Library for communicating with the GA4GH Task Execution API")
11465 (description "This package provides a library for communicating with the
11466GA4GH Task Execution API.")
11467 (license license:expat)))
11468
11469(define-public python-toposort
11470 (package
11471 (name "python-toposort")
11472 (version "1.6")
11473 (source
11474 (origin
11475 (method url-fetch)
11476 (uri (pypi-uri "toposort" version))
11477 (sha256
11478 (base32
11479 "1b2hppzjg3p006qya3yfdnp76dwq8frl97lypdam0kw4xxb8yhm7"))))
11480 (build-system python-build-system)
11481 (home-page "https://gitlab.com/ericvsmith/toposort")
11482 (synopsis "Topological sort algorithm")
11483 (description
11484 "This package provides an implementation of a topological sort
11485algorithm.")
11486 (license license:asl2.0)))
11487
11488(define-public python-three-merge
11489 (package
11490 (name "python-three-merge")
11491 (version "0.1.1")
11492 (source
11493 (origin
11494 ;; There are no tests in the PyPI tarball.
11495 (method git-fetch)
11496 (uri (git-reference
11497 (url "https://github.com/spyder-ide/three-merge")
11498 (commit (string-append "v" version))))
11499 (file-name (git-file-name name version))
11500 (sha256
11501 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
11502 (build-system python-build-system)
11503 (arguments
11504 `(#:test-target "pytest"))
11505 (propagated-inputs
11506 (list python-diff-match-patch))
11507 (native-inputs
11508 (list python-flaky python-pytest python-pytest-cov
11509 python-pytest-runner python-pytest-timeout))
11510 (home-page "https://github.com/spyder-ide/three-merge")
11511 (synopsis "Library for merging two strings with respect to a base one")
11512 (description
11513 "This package provides a Python library to perform a 3-way merge between
11514strings, based on @code{diff-match-patch}. This library performs merges at a
11515character level, as opposed to most VCS systems, which opt for a line-based
11516approach.")
11517 (license license:expat)))
11518
11519(define-public snakemake
11520 (package
11521 (name "snakemake")
11522 (version "5.32.2")
11523 (source
11524 (origin
11525 (method url-fetch)
11526 (uri (pypi-uri "snakemake" version))
11527 (sha256
11528 (base32 "13013gdavwvyj1qr9xfi9fpwhb3km8c3z53bja5b7ic3sb2z6dgz"))))
11529 (build-system python-build-system)
11530 (arguments
11531 ;; TODO: Package missing test dependencies.
11532 '(#:tests? #f
11533 #:phases
11534 (modify-phases %standard-phases
11535 ;; For cluster execution Snakemake will call Python. Since there is
11536 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
11537 ;; this by calling the snakemake wrapper instead.
11538 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
11539 (lambda* (#:key outputs #:allow-other-keys)
11540 (substitute* "snakemake/executors/__init__.py"
11541 (("\\{sys.executable\\} -m snakemake")
11542 (string-append (assoc-ref outputs "out")
11543 "/bin/snakemake")))
11544 #t)))))
11545 (propagated-inputs
11546 (list python-appdirs
11547 python-configargparse
11548 python-datrie
11549 python-docutils
11550 python-gitpython
11551 python-jinja2
11552 python-jsonschema
11553 python-nbformat
11554 python-networkx
11555 python-psutil
11556 python-pulp
11557 python-pyyaml
11558 python-ratelimiter
11559 python-requests
11560 python-toposort
11561 python-wrapt))
11562 (home-page "https://snakemake.readthedocs.io")
11563 (synopsis "Python-based execution environment for make-like workflows")
11564 (description
11565 "Snakemake aims to reduce the complexity of creating workflows by
11566providing a clean and modern domain specific specification language (DSL) in
11567Python style, together with a fast and comfortable execution environment.")
11568 (license license:expat)))
11569
11570(define-public snakemake-6
11571 (package
11572 (inherit snakemake)
11573 (name "snakemake")
11574 (version "6.15.5")
11575 (source
11576 (origin
11577 (method git-fetch)
11578 (uri (git-reference
11579 (url "https://github.com/snakemake/snakemake")
11580 (commit (string-append "v" version))))
11581 (file-name (git-file-name name version))
11582 (sha256
11583 (base32 "09yrpi9f86r9yvcm2dfjs5zy87c4j31bxama77kfd6y8yfrrjlai"))))
11584 (build-system pyproject-build-system)
11585 (arguments
11586 (list
11587 #:phases
11588 #~(modify-phases %standard-phases
11589 ;; For cluster execution Snakemake will call Python. Since there is
11590 ;; no suitable GUIX_PYTHONPATH set, cluster execution will fail. We
11591 ;; fix this by calling the snakemake wrapper instead.
11592
11593 ;; XXX: There is another instance of sys.executable on line 692, but
11594 ;; it is not clear how to patch it.
11595 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
11596 (lambda* (#:key outputs #:allow-other-keys)
11597 (substitute* "snakemake/executors/__init__.py"
11598 (("\\{sys.executable\\} -m snakemake")
11599 (string-append #$output "/bin/snakemake")))))
11600 (add-after 'unpack 'patch-version
11601 (lambda _
11602 (substitute* "setup.py"
11603 (("version=versioneer.get_version\\(\\)")
11604 (format #f "version=~s" #$version)))
11605 (substitute* '("snakemake/_version.py"
11606 "versioneer.py")
11607 (("0\\+unknown") #$version))))
11608 (replace 'check
11609 (lambda* (#:key tests? #:allow-other-keys)
11610 (when tests?
11611 (setenv "HOME" "/tmp")
11612 ;; This test attempts to change S3 buckets on AWS and fails
11613 ;; because there are no AWS credentials.
11614 (delete-file "tests/test_tibanna.py")
11615 (invoke "pytest")))))))
11616 (propagated-inputs
11617 (list python-appdirs
11618 python-configargparse
11619 python-connection-pool
11620 python-datrie
11621 python-docutils
11622 python-filelock
11623 python-gitpython
11624 python-jinja2
11625 python-jsonschema
11626 python-nbformat
11627 python-networkx
11628 python-psutil
11629 python-pulp
11630 python-pyyaml
11631 python-py-tes
11632 python-ratelimiter
11633 python-requests
11634 python-smart-open
11635 python-stopit
11636 python-tabulate
11637 python-toposort
11638 python-wrapt))
11639 (native-inputs
11640 (list git-minimal
11641 python-wrapper
11642 python-pytest
11643 python-pandas
11644 python-requests-mock))))
11645
11646(define-public snakemake-7
11647 (package
11648 (inherit snakemake-6)
11649 (name "snakemake")
11650 (version "7.7.0")
11651 (source
11652 (origin
11653 (method git-fetch)
11654 (uri (git-reference
11655 (url "https://github.com/snakemake/snakemake")
11656 (commit (string-append "v" version))))
11657 (file-name (git-file-name name version))
11658 (sha256
11659 (base32 "1qrqbmx4cbis0wxr6dl2rdjv9v627sbirsz6v5c31vlbqwkvs04q"))))
11660 (build-system pyproject-build-system)
11661 (arguments
11662 (list
11663 #:phases
11664 #~(modify-phases %standard-phases
11665 ;; For cluster execution Snakemake will call Python. Since there is
11666 ;; no suitable GUIX_PYTHONPATH set, cluster execution will fail. We
11667 ;; fix this by calling the snakemake wrapper instead.
11668 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
11669 (lambda* (#:key outputs #:allow-other-keys)
11670 (substitute* "snakemake/executors/__init__.py"
11671 (("self\\.get_python_executable\\(\\),")
11672 "")
11673 (("\"-m snakemake\"")
11674 (string-append "\"" #$output
11675 "/bin/snakemake" "\"")))))
11676 (add-after 'unpack 'patch-version
11677 (lambda _
11678 (substitute* "setup.py"
11679 (("version=versioneer.get_version\\(\\)")
11680 (format #f "version=~s" #$version)))
11681 (substitute* '("snakemake/_version.py"
11682 "versioneer.py")
11683 (("0\\+unknown") #$version))))
11684 (replace 'check
11685 (lambda* (#:key tests? #:allow-other-keys)
11686 (when tests?
11687 (setenv "HOME" "/tmp")
11688 ;; This test attempts to change S3 buckets on AWS and fails
11689 ;; because there are no AWS credentials.
11690 (delete-file "tests/test_tibanna.py")
11691 ;; It's a similar story with this test, which requires access
11692 ;; to the Google Storage service.
11693 (delete-file "tests/test_google_lifesciences.py")
11694 (invoke "pytest")))))))
11695 (propagated-inputs
11696 (list python-appdirs
11697 python-configargparse
11698 python-connection-pool
11699 python-datrie
11700 python-docutils
11701 python-filelock
11702 python-gitpython
11703 python-jinja2
11704 python-jsonschema
11705 python-nbformat
11706 python-networkx
11707 python-psutil
11708 python-pulp
11709 python-pyyaml
11710 python-py-tes
11711 python-ratelimiter
11712 python-requests
11713 python-retry
11714 python-smart-open
11715 python-stopit
11716 python-tabulate
11717 python-toposort
11718 python-wrapt
11719 python-yte))
11720 (native-inputs
11721 (list git-minimal
11722 python-wrapper
11723 python-pytest
11724 python-pandas
11725 python-requests-mock))))
11726
11727(define-public python-pyqrcode
11728 (package
11729 (name "python-pyqrcode")
11730 (version "1.2.1")
11731 (source
11732 (origin
11733 (method url-fetch)
11734 (uri (pypi-uri "PyQRCode" version))
11735 (sha256
11736 (base32
11737 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
11738 (build-system python-build-system)
11739 (home-page
11740 "https://github.com/mnooner256/pyqrcode")
11741 (synopsis "QR code generator")
11742 (description
11743 "Pyqrcode is a QR code generator written purely in Python with
11744SVG, EPS, PNG and terminal output.")
11745 (license license:bsd-3)))
11746
11747(define-public python-seaborn
11748 (package
11749 (name "python-seaborn")
11750 (version "0.12.0")
11751 (source (origin
11752 (method url-fetch)
11753 (uri (pypi-uri "seaborn" version))
11754 (sha256
11755 (base32
11756 "08vvnp4ps86857imxz2l5xi2vir5xdcdp3apq4badb4b5llifgw9"))))
11757 (build-system pyproject-build-system)
11758 (propagated-inputs (list python-pandas python-matplotlib python-numpy
11759 python-scipy))
11760 (native-inputs (list python-flit-core python-pypa-build python-pytest))
11761 (home-page "https://seaborn.pydata.org/")
11762 (synopsis "Statistical data visualization")
11763 (description
11764 "Seaborn is a library for making attractive and informative statistical
11765graphics in Python. It is built on top of matplotlib and tightly integrated
11766with the PyData stack, including support for numpy and pandas data structures
11767and statistical routines from scipy and statsmodels.")
11768 (license license:bsd-3)))
11769
11770(define-public python-session-info
11771 (package
11772 (name "python-session-info")
11773 (version "1.0.0")
11774 (source (origin
11775 (method url-fetch)
11776 (uri (pypi-uri "session_info" version))
11777 (sha256
11778 (base32
11779 "1dxnrgaxd2nb44n423mnrx119hmnh2yxdnzaw8mg60x7rh1mxniw"))))
11780 (build-system python-build-system)
11781 (propagated-inputs (list python-stdlib-list))
11782 (home-page "https://gitlab.com/joelostblom/session_info")
11783 (synopsis "Output version information for modules currently loaded")
11784 (description
11785 "This package outputs version information for modules loaded in the current
11786session, Python, and the OS.")
11787 (license license:bsd-3)))
11788
11789(define-public python-mpmath
11790 (package
11791 (name "python-mpmath")
11792 (version "1.2.1")
11793 (source (origin
11794 (method git-fetch)
11795 (uri (git-reference
11796 (url "https://github.com/fredrik-johansson/mpmath")
11797 (commit "c6a35f9ee7c294bcf4e0517bc76b268843db9499")))
11798 (file-name (git-file-name name version))
11799 (sha256
11800 (base32
11801 "0ifw59fjjls3mas104rh0frilvab2fhk1dkjraxlqni5n9l676im"))))
11802 (build-system python-build-system)
11803 (arguments
11804 `(#:phases
11805 (modify-phases %standard-phases
11806 (add-before 'build 'set-version
11807 (lambda _
11808 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)
11809 ;; ZIP does not support timestamps before 1980.
11810 (setenv "SOURCE_DATE_EPOCH" "315532800")))
11811 (replace 'check
11812 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
11813 (when tests?
11814 (add-installed-pythonpath inputs outputs)
11815 (invoke "pytest" "-vv")))))))
11816 (native-inputs
11817 (list python-pytest python-setuptools-scm))
11818 (home-page "https://mpmath.org")
11819 (synopsis "Arbitrary-precision floating-point arithmetic in python")
11820 (description
11821 "@code{mpmath} can be used as an arbitrary-precision substitute for
11822Python's float/complex types and math/cmath modules, but also does much
11823more advanced mathematics.")
11824 (license license:bsd-3)))
11825
11826(define-public python-bigfloat
11827 (package
11828 (name "python-bigfloat")
11829 (version "0.4.0")
11830 (source
11831 (origin
11832 (method url-fetch)
11833 (uri (pypi-uri "bigfloat" version))
11834 (sha256
11835 (base32 "1f0c1hdr39bbl5rds5r1waa1papjmjiyp0ixs64mkjiahzg6pfaq"))))
11836 (build-system python-build-system)
11837 (inputs
11838 (list mpfr))
11839 (propagated-inputs
11840 (list python-six))
11841 (home-page "https://github.com/mdickinson/bigfloat")
11842 (synopsis "Arbitrary precision floating-point arithmetic for Python")
11843 (description
11844 "This package provides a Python interface to the MPFR library for
11845multiprecision arithmetic.")
11846 (license license:lgpl3+)))
11847
11848(define-public python-plac
11849 (package
11850 (name "python-plac")
11851 (version "1.3.5")
11852 (source
11853 (origin
11854 (method url-fetch)
11855 (uri (pypi-uri "plac" version))
11856 (sha256
11857 (base32 "1410h6jw1ksi24kb55xzkwqzba2qqjwiga1s354bf3s5s1jdig9q"))))
11858 (build-system python-build-system)
11859 (arguments
11860 '(#:phases
11861 (modify-phases %standard-phases
11862 (add-after 'unpack 'fix-tkinter
11863 (lambda _
11864 (substitute* "plac_tk.py"
11865 (("from Tkinter import Tk")
11866 "from tkinter import Tk")
11867 (("from ScrolledText import ScrolledText")
11868 "from tkinter.scrolledtext import ScrolledText")))))))
11869 (native-inputs
11870 `(("python-tkinter" ,python "tk")))
11871 (home-page "https://github.com/ialbert/plac")
11872 (synopsis "Command line arguments parser")
11873 (description "This package can generate command line parameters from
11874function signatures.")
11875 (license license:bsd-3)))
11876
11877(define-public python-yte
11878 (package
11879 (name "python-yte")
11880 (version "1.2.0")
11881 (source
11882 (origin
11883 (method url-fetch)
11884 (uri (pypi-uri "yte" version))
11885 (sha256
11886 (base32 "07hm1warpqi4ifqgkaz5sg887x4a44yhxafmpf835ywnpchg4s03"))))
11887 (build-system python-build-system)
11888 (arguments
11889 '(#:phases
11890 (modify-phases %standard-phases
11891 (add-after 'unpack 'set-HOME
11892 (lambda _ (setenv "HOME" "/tmp"))))))
11893 (propagated-inputs (list python-plac python-pyyaml))
11894 (home-page "https://github.com/koesterlab/yte")
11895 (synopsis "YAML template engine with Python expressions")
11896 (description
11897 "This package provides a YAML template engine with Python expressions.")
11898 (license license:expat)))
11899
11900(define-public python-syllables
11901 (package
11902 (name "python-syllables")
11903 (version "1.0.3")
11904 (source (origin
11905 (method url-fetch)
11906 (uri (pypi-uri "syllables" version))
11907 (sha256
11908 (base32
11909 "0wkl6h0rg6fbsxfp0a8fnibf3l4l6lbh6z12cvcilgb6qhxzpmv3"))))
11910 (build-system python-build-system)
11911 (home-page "https://github.com/prosegrinder/python-syllables")
11912 (synopsis "Package for estimating the number of syllables in a word")
11913 (description
11914 "This package provides a Python package for estimating the number of
11915syllables in a word.")
11916 (license license:gpl3)))
11917
11918(define-public python-sympy
11919 (package
11920 (name "python-sympy")
11921 (version "1.11.1")
11922 (source
11923 (origin
11924 (method url-fetch)
11925 (uri (pypi-uri "sympy" version))
11926 (sha256
11927 (base32 "0n46x1rfy8c2a9za3yp2va5icigxj805f9fmiq8c1drwwvf808z3"))))
11928 (build-system python-build-system)
11929 (arguments
11930 `(#:phases
11931 (modify-phases %standard-phases
11932 (replace 'check
11933 (lambda* (#:key outputs #:allow-other-keys)
11934 (invoke
11935 (or (which "python3") (which "python"))
11936 "-c" "import sympy; sympy.test(\"/core\")"))))))
11937 (propagated-inputs
11938 (list python-mpmath))
11939 (home-page "https://www.sympy.org/")
11940 (synopsis "Python library for symbolic mathematics")
11941 (description
11942 "SymPy is a Python library for symbolic mathematics. It aims to become a
11943full-featured computer algebra system (CAS) while keeping the code as simple
11944as possible in order to be comprehensible and easily extensible.")
11945 (license license:bsd-3)))
11946
11947(define-public python-q
11948 (package
11949 (name "python-q")
11950 (version "2.6")
11951 (source
11952 (origin
11953 (method url-fetch)
11954 (uri (pypi-uri "q" version))
11955 (sha256
11956 (base32
11957 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
11958 (build-system python-build-system)
11959 (home-page "https://github.com/zestyping/q")
11960 (synopsis "Quick-and-dirty debugging output for tired programmers")
11961 (description
11962 "q is a Python module for \"print\" style of debugging Python code. It
11963provides convenient short API for print out of values, tracebacks, and
11964falling into the Python interpreter.")
11965 (license license:asl2.0)))
11966
11967(define-public python-qnorm
11968 (package
11969 (name "python-qnorm")
11970 (version "0.8.1")
11971 (source (origin
11972 (method url-fetch)
11973 (uri (pypi-uri "qnorm" version))
11974 (sha256
11975 (base32
11976 "1iykxrvlg32h78d3cr0137x93w8krcwc8gdqyfj55id917pz7ck1"))))
11977 (build-system pyproject-build-system)
11978 (arguments
11979 (list
11980 #:tests? #false ;there are none
11981 #:phases
11982 #~(modify-phases %standard-phases
11983 (add-after 'unpack 'fix-pyproject-format
11984 (lambda _
11985 (substitute* "pyproject.toml"
11986 (("url = .*") (string-append "version = \"" #$version "\""))
11987 (("python_requires.*") "")
11988 (("packages =.*") "")
11989 (("install_requires") "dependencies")
11990 (("\"Maarten van der Sande <[email protected]>\"")
11991 "{ name = \"Maarten van der Sande\", email = \"[email protected]\"}")
11992 (("license = \"MIT\"") "license = { file = \"LICENSE\"}")))))))
11993 (propagated-inputs (list python-numba python-numpy python-pandas))
11994 (home-page "https://github.com/Maarten-vd-Sande/qnorm")
11995 (synopsis "Quantile normalization")
11996 (description "This tool implements quantile normalization. It properly
11997resolves rank ties, which is important when ties happen frequently, such as
11998when working with discrete numbers (integers) in count tables. This
11999implementation should be relatively fast, and can use multiple cores to sort
12000the columns and tie-resolvement is accelerated by numba.")
12001 (license license:expat)))
12002
12003(define-public python-xlib
12004 (package
12005 (name "python-xlib")
12006 (version "0.29")
12007 (source
12008 (origin
12009 (method git-fetch)
12010 (uri (git-reference
12011 (url "https://github.com/python-xlib/python-xlib")
12012 (commit version)))
12013 (file-name (git-file-name name version))
12014 (sha256
12015 (base32 "17cwd2knqm2vwrii3kqii9abwsnydhpg4byqx1vy7rjs6i1vbqfc"))))
12016 (build-system python-build-system)
12017 (arguments
12018 `(#:phases
12019 (modify-phases %standard-phases
12020 (add-before 'check 'start-xserver
12021 (lambda* (#:key inputs #:allow-other-keys)
12022 (let ((xorg-server (assoc-ref inputs "xorg-server")))
12023 ;; There must be a running X server and make check doesn't
12024 ;; start one. Therefore we must do it.
12025 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
12026 (setenv "DISPLAY" ":1")
12027 #t))))))
12028 (native-inputs
12029 (list python-mock python-setuptools-scm xorg-server))
12030 (propagated-inputs
12031 (list python-six))
12032 (home-page "https://github.com/python-xlib/python-xlib")
12033 (synopsis "Python X11 client library")
12034 (description
12035 "The Python X Library is intended to be a fully functional
12036X client library for Python programs. It is useful to implement
12037low-level X clients. It is written entirely in Python.")
12038 (license license:gpl2+)))
12039
12040(define-public python-singledispatch
12041 (package
12042 (name "python-singledispatch")
12043 (version "4.0.0")
12044 (source
12045 (origin
12046 (method url-fetch)
12047 (uri (pypi-uri "singledispatch" version))
12048 (sha256
12049 (base32
12050 "1z5qbbvvjvh3cwcjv57p7vzhayx0j1ysnvjq0d5py6k5d2ljghzk"))))
12051 (build-system pyproject-build-system)
12052 (native-inputs
12053 (list python-pytest
12054 python-six)) ; required for conversion, not at run-time
12055 (home-page
12056 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
12057 (synopsis "Backport of singledispatch feature from Python 3.4")
12058 (description
12059 "This library brings functools.singledispatch from Python 3.4 to Python
120602.6-3.3.")
12061 (license license:expat)))
12062
12063;; the python- version can be removed with python-3.5
12064(define-public python-backports-abc
12065 (package
12066 (name "python-backports-abc")
12067 (version "0.5")
12068 (source
12069 (origin
12070 (method url-fetch)
12071 (uri (pypi-uri "backports_abc" version))
12072 (sha256
12073 (base32
12074 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
12075 (build-system python-build-system)
12076 (home-page "https://github.com/cython/backports_abc")
12077 (synopsis "Backport of additions to the 'collections.abc' module")
12078 (description
12079 "Python-backports-abc provides a backport of additions to the
12080@code{collections.abc} module in Python-3.5.")
12081 (license license:psfl)))
12082
12083(define-public python-backports-csv
12084 (package
12085 (name "python-backports-csv")
12086 (version "1.0.7")
12087 (source
12088 (origin
12089 (method url-fetch)
12090 (uri (pypi-uri "backports.csv" version))
12091 (sha256
12092 (base32 "0vdx5jlhs91iizc8j8l8811nqprwvdx39pgkdc82w2qkfgzxyxqj"))))
12093 (build-system python-build-system)
12094 (home-page "https://github.com/ryanhiebert/backports.csv")
12095 (synopsis "Backport of Python 3's csv module for Python 2")
12096 (description
12097 "Provides a backport of Python 3's @code{csv} module for parsing
12098comma separated values. The API of the @code{csv} module in Python 2
12099is drastically different from the @code{csv} module in Python 3.
12100This is due, for the most part, to the difference between str in
12101Python 2 and Python 3.")
12102 (license license:psfl)))
12103
12104(define-public python-waf
12105 (package
12106 (name "python-waf")
12107 (version "2.0.19")
12108 (source (origin
12109 (method url-fetch)
12110 (uri (string-append "https://waf.io/"
12111 "waf-" version ".tar.bz2"))
12112 (sha256
12113 (base32
12114 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
12115 (build-system python-build-system)
12116 (arguments
12117 '(#:phases
12118 (modify-phases %standard-phases
12119 (replace 'build
12120 (lambda _
12121 ;; XXX: Find a way to add all extra tools.
12122 (let ((tools '("gccdeps"
12123 "clang_compilation_database")))
12124 (invoke "python" "waf-light" "configure" "build"
12125 (string-append "--tools="
12126 (string-join tools ","))))))
12127 (replace 'check
12128 (lambda _
12129 (invoke "python" "waf" "--version")))
12130 (replace 'install
12131 (lambda* (#:key outputs #:allow-other-keys)
12132 (let ((out (assoc-ref outputs "out")))
12133 (install-file "waf" (string-append out "/bin")))
12134 #t))
12135 ;; waf breaks when it is wrapped.
12136 (delete 'wrap))))
12137 (home-page "https://waf.io/")
12138 (synopsis "Python-based build system")
12139 (description
12140 "Waf is a Python-based framework for configuring, compiling and installing
12141applications.")
12142 (license license:bsd-3)))
12143
12144(define-public python-pyzmq
12145 (package
12146 (name "python-pyzmq")
12147 (version "25.1.0")
12148 (source
12149 (origin
12150 (method url-fetch)
12151 (uri (pypi-uri "pyzmq" version))
12152 (sha256
12153 (base32 "0mw9zf0h9sgn2cchw24vyxgyi2nfpyfacr0mh072hdjx8qii1i40"))
12154 (snippet
12155 #~(begin
12156 (use-modules (guix build utils))
12157 ;; The bundled zeromq source code.
12158 (delete-file-recursively "bundled")
12159 ;; Delete cythonized files.
12160 (for-each delete-file
12161 (list "zmq/backend/cython/context.c"
12162 "zmq/backend/cython/_device.c"
12163 "zmq/backend/cython/error.c"
12164 "zmq/backend/cython/message.c"
12165 "zmq/backend/cython/_poll.c"
12166 "zmq/backend/cython/_proxy_steerable.c"
12167 "zmq/backend/cython/socket.c"
12168 "zmq/backend/cython/utils.c"
12169 "zmq/backend/cython/_version.c"
12170 "zmq/devices/monitoredqueue.c"))))))
12171 (build-system python-build-system)
12172 (arguments
12173 `(#:configure-flags
12174 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
12175 #:phases
12176 (modify-phases %standard-phases
12177 (add-before 'build 'configure
12178 (lambda _
12179 ;; Our zeromq package is built with '--enable-drafts'; also
12180 ;; enable draft support for pyzmq so the draft test passes.
12181 (setenv "ZMQ_DRAFT_API" "1")))
12182 (add-before 'check 'build-extensions
12183 (lambda _
12184 ;; Cython extensions have to be built before running the tests.
12185 (invoke "python" "setup.py" "build_ext" "--inplace")))
12186 (replace 'check
12187 (lambda* (#:key tests? #:allow-other-keys)
12188 (when tests?
12189 (invoke "pytest" "-vv")))))))
12190 (inputs (list zeromq))
12191 (native-inputs
12192 (list pkg-config
12193 python-cython
12194 python-pytest
12195 python-pytest-asyncio
12196 python-tornado))
12197 (home-page "https://github.com/zeromq/pyzmq")
12198 (synopsis "Python bindings for 0MQ")
12199 (description
12200 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
12201 (license license:bsd-4)))
12202
12203(define-public python-immutabledict
12204 (package
12205 (name "python-immutabledict")
12206 (version "2.2.1")
12207 (source
12208 (origin
12209 (method url-fetch)
12210 (uri (pypi-uri "immutabledict" version))
12211 (sha256
12212 (base32 "0fpc4gbk7inpfbgdypsg6c18bmdjw8gwx47bjw0hvixn3gghxnqx"))))
12213 (build-system python-build-system)
12214 (arguments
12215 `(#:tests? #f)) ; no tests in PyPI release and no setup.py in GitHub
12216 (native-inputs
12217 (list python-pytest))
12218 (home-page "https://github.com/corenting/immutabledict")
12219 (synopsis "Immutable wrapper around dictionaries")
12220 (description
12221 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
12222It implements the complete mapping interface and can be used as a drop-in
12223replacement for dictionaries where immutability is desired.")
12224 (license license:expat)))
12225
12226(define-public python-emoji
12227 (package
12228 (name "python-emoji")
12229 (version "1.6.1")
12230 (source
12231 (origin
12232 (method url-fetch)
12233 (uri (pypi-uri "emoji" version))
12234 (sha256
12235 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))
12236 (build-system python-build-system)
12237 (arguments
12238 `(#:phases
12239 (modify-phases %standard-phases
12240 (replace 'check
12241 (lambda* (#:key tests? #:allow-other-keys)
12242 (when tests?
12243 (invoke "python" "-m" "pytest")))))))
12244 (native-inputs
12245 (list python-pytest))
12246 (home-page "https://github.com/carpedm20/emoji/")
12247 (synopsis "Emoji terminal output for Python")
12248 (description "This package provides Emoji terminal output for Python. The
12249entire set of Emoji codes as defined by the Unicode Consortium is supported in
12250addition to a bunch of aliases.")
12251 (license license:bsd-3)))
12252
12253(define-public python-sarge
12254 (package
12255 (name "python-sarge")
12256 (version "0.1.7.post1") ; post release only to correct errors in metadata
12257 (source
12258 (origin
12259 (method url-fetch)
12260 (uri (pypi-uri "sarge" version))
12261 (sha256
12262 (base32 "0g9a53mfnp96877n1yq2jdk1mcv3xm0d93iisvgcn2prdsp45zv4"))))
12263 (build-system python-build-system)
12264 (home-page "https://docs.red-dove.com/sarge/")
12265 (synopsis "Subprocess wrapper with command pipeline functionality")
12266 (description "@code{sarge} is a wrapper for subprocess which provides
12267command pipeline functionality.")
12268 (license license:bsd-3)))
12269
12270(define-public python-zipfly
12271 (package
12272 (name "python-zipfly")
12273 (version "6.0.5")
12274 (source
12275 (origin
12276 (method url-fetch)
12277 (uri (pypi-uri "zipfly" version))
12278 (sha256
12279 (base32
12280 "1h7g922a8lsqd69j8blgcgg0lcd8kz51b2p4glfqmgx4vi1nkick"))))
12281 (build-system python-build-system)
12282 (home-page "http://github.com/sandes/zipfly")
12283 (synopsis "Zip archive generator")
12284 (description "ZipFly is a zip archive generator. It was created to
12285generate very large zip archives for immediate sending out to clients, or
12286for writing large zip archives without memory inflation.")
12287 (license license:bsd-2)))
12288
12289(define-public python-zipstream-new
12290 (package
12291 (name "python-zipstream-new")
12292 (version "1.1.8")
12293 (source
12294 (origin
12295 (method git-fetch) ; no tests in PyPI release
12296 (uri (git-reference
12297 (url "https://github.com/arjan-s/python-zipstream")
12298 (commit (string-append "v" version))))
12299 (file-name (git-file-name name version))
12300 (sha256
12301 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
12302 (build-system python-build-system)
12303 (native-inputs
12304 (list python-nose))
12305 (home-page "https://github.com/arjan-s/python-zipstream")
12306 (synopsis "Zipfile generator that takes input files as well as streams")
12307 (description "@code{zipstream.py} is a zip archive generator based on
12308@code{zipfile.py}. It was created to generate a zip file generator for
12309streaming. This is beneficial for when you want to provide a downloadable
12310archive of a large collection of regular files, which would be infeasible
12311to generate the archive prior to downloading or of a very large file that
12312you do not want to store entirely on disk or on memory.")
12313 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
12314 (license license:gpl3)))
12315
12316(define-public python-sentry-sdk
12317 (package
12318 (name "python-sentry-sdk")
12319 (version "1.5.1")
12320 (source
12321 (origin
12322 (method git-fetch) ; no tests in PyPI release
12323 (uri (git-reference
12324 (url "https://github.com/getsentry/sentry-python")
12325 (commit version)))
12326 (file-name (git-file-name name version))
12327 (sha256
12328 (base32 "128bm136l5zprr3sqqb8j3d6k5i1fhz853mzvh3w8g0w1dw763mx"))))
12329 (build-system python-build-system)
12330 (arguments
12331 `(#:phases
12332 (modify-phases %standard-phases
12333 (replace 'check
12334 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
12335 (when tests?
12336 (add-installed-pythonpath inputs outputs)
12337 (invoke "python" "-m" "pytest" "-k"
12338 (string-append
12339 ;; This test requires extra dependencies.
12340 "not test_auto_enabling_integrations"
12341 "_catches_import_error"
12342 ;; Tests below run pip command.
12343 " and not test_unhandled_exception"
12344 " and not test_timeout_error"
12345 " and not test_performance_no_error"
12346 " and not test_performance_error"
12347 " and not test_traces_sampler_gets_correct"
12348 "_values_in_sampling_context"
12349 " and not test_handled_exception"
12350 ;; Tests below require network.
12351 " and not test_crumb_capture"
12352 " and not test_crumb_capture"
12353 " and not test_crumb_capture_hint"
12354 " and not test_httplib_misuse"
12355 ;; Fails with IndexError.
12356 " and not test_session_mode_defaults_to"
12357 "_request_mode_in_wsgi_handler"
12358 ;; Tests below fail with pytest 7
12359 " and not test_leaks"
12360 " and not test_basic"
12361 " and not test_keyboard_interrupt_is_captured"
12362 " and not test_transaction_with_error"
12363 " and not test_transaction_no_error"
12364 " and not test_start_span_to_start_transaction"
12365 " and not test_tracestate_computation"
12366 " and not test_doesnt_add_new_tracestate_to_transaction_when_none_given"
12367 " and not test_adds_tracestate_to_transaction_when_to_traceparent_called"
12368 " and not test_adds_tracestate_to_transaction_when_getting_trace_context"
12369 " and not test_tracestate_is_immutable_once_set"
12370 " and not test_to_traceparent"
12371 " and not test_to_tracestate"
12372 " and not test_sentrytrace_extraction"
12373 " and not test_tracestate_extraction"
12374 " and not test_iter_headers"
12375 " and not test_tracestate_reinflation"
12376 " and not test_continue_from_headers"
12377 " and not test_memory_usage"
12378 " and not test_transactions_do_not_go_through_before_send"
12379 " and not test_start_span_after_finish"
12380 " and not test_span_trimming"
12381 " and not test_transaction_naming"
12382 " and not test_start_transaction"
12383 " and not test_finds_transaction_on_scope"
12384 " and not test_finds_transaction_when_descendent_span_is_on_scope"
12385 " and not test_finds_orphan_span_on_scope"
12386 " and not test_finds_non_orphan_span_on_scope"
12387 " and not test_circular_references"))))))))
12388 (native-inputs
12389 (list python-django
12390 python-executing
12391 python-gevent
12392 python-jsonschema
12393 python-mock
12394 python-pyrsistent
12395 python-pytest
12396 python-pytest-cov
12397 python-pytest-django
12398 python-pytest-forked
12399 python-pytest-localserver
12400 python-werkzeug))
12401 (propagated-inputs
12402 (list python-certifi python-urllib3))
12403 (home-page "https://github.com/getsentry/sentry-python")
12404 (synopsis "Python SDK for Sentry")
12405 (description "This package provides a Python SDK for the Sentry
12406application monitoring and error tracking software.")
12407 (license license:bsd-2)))
12408
12409(define-public python-pep8
12410 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
12411 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
12412 ;; some dependents' test suites, and nothing more.
12413 (package
12414 (name "python-pep8")
12415 (version "1.7.0")
12416 (source
12417 (origin
12418 (method url-fetch)
12419 (uri (pypi-uri "pep8" version))
12420 (sha256
12421 (base32
12422 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
12423 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
12424 (build-system python-build-system)
12425 (home-page "https://pep8.readthedocs.org/")
12426 (synopsis "Python style guide checker")
12427 (description
12428 "This tools checks Python code against some of the style conventions in
12429PEP 8.")
12430 (license license:expat)))
12431
12432(define-public python-pep8-naming
12433 (package
12434 (name "python-pep8-naming")
12435 (version "0.13.0")
12436 (source
12437 (origin
12438 (method url-fetch)
12439 (uri (pypi-uri "pep8-naming" version))
12440 (sha256
12441 (base32
12442 "1dc0b6xw1cxp01v9zsv4ryk49rfs1lngfpvzsixgp8b7z3ffcf4z"))))
12443 (build-system python-build-system)
12444 (propagated-inputs (list python-flake8))
12445 (home-page "https://github.com/PyCQA/pep8-naming")
12446 (synopsis "Check PEP-8 naming conventions")
12447 (description
12448 "This package provides the @code{pep8-naming} Python module, a
12449plugin for flake8 to check PEP-8 naming conventions.")
12450 (license license:expat)))
12451
12452(define-public python-pep517
12453 (package
12454 (inherit python-pep517-bootstrap)
12455 (name "python-pep517")
12456 (arguments
12457 '(#:phases (modify-phases %standard-phases
12458 (replace 'check
12459 (lambda* (#:key tests? #:allow-other-keys)
12460 (delete-file "pytest.ini")
12461 (delete-file "tests/test_meta.py")
12462 (if tests?
12463 (invoke "pytest") #t))))))
12464 (native-inputs (list python-mock python-pytest python-testpath))))
12465
12466(define-public python-pyproject-metadata
12467 (package
12468 (name "python-pyproject-metadata")
12469 (version "0.6.1")
12470 (source
12471 (origin
12472 (method git-fetch)
12473 (uri (git-reference
12474 (url "https://github.com/FFY00/python-pyproject-metadata")
12475 (commit version)))
12476 (file-name (git-file-name name version))
12477 (sha256
12478 (base32
12479 "00zahgw9zjfqwf0218bj5k732aibnn68cq1p8f0wmbirb7fy5k31"))))
12480 (build-system pyproject-build-system)
12481 (propagated-inputs (list python-packaging))
12482 (native-inputs (list python-pypa-build python-pytest python-tomli))
12483 (home-page "https://github.com/FFY00/python-pyproject-metadata")
12484 (synopsis "Dataclass for PEP 621 metadata")
12485 (description "This project does not implement the parsing of
12486@file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
12487data structure representing PEP 621 metadata (already parsed), it will
12488validate this input and generate a PEP 643-compliant metadata
12489file (e.g. @file{PKG-INFO}).")
12490 (license license:expat)))
12491
12492;; pep621 was renamed to pyproject-metadata.
12493(define-public python-pep621
12494 (deprecated-package "python-pep621" python-pyproject-metadata))
12495
12496(define-public python-pyflakes
12497 (package
12498 (name "python-pyflakes")
12499 (version "2.4.0")
12500 (source
12501 (origin
12502 (method url-fetch)
12503 (uri (pypi-uri "pyflakes" version))
12504 (sha256
12505 (base32
12506 "0k5jn8jpxni264wxf6cc3xcd1qckc0pww30bsd77mwzdf8l5ra05"))))
12507 (build-system python-build-system)
12508 (home-page "https://github.com/PyCQA/pyflakes")
12509 (synopsis "Passive checker of Python programs")
12510 (description
12511 "Pyflakes statically checks Python source code for common errors.")
12512 (license license:expat)))
12513
12514(define-public python-pyflakes-2.2
12515 (package
12516 (inherit python-pyflakes)
12517 (version "2.2.0")
12518 (source (origin
12519 (method url-fetch)
12520 (uri (pypi-uri "pyflakes" version))
12521 (sha256
12522 (base32
12523 "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))
12524 (patches
12525 (search-patches "python-pyflakes-test-location.patch"))))))
12526
12527(define-public python-mccabe
12528 (package
12529 (name "python-mccabe")
12530 (version "0.6.1")
12531 (source
12532 (origin
12533 (method url-fetch)
12534 (uri (pypi-uri "mccabe" version))
12535 (sha256
12536 (base32
12537 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
12538 (build-system python-build-system)
12539 (native-inputs
12540 (list python-toml python-pytest-bootstrap python-pytest-runner))
12541 (home-page "https://github.com/PyCQA/mccabe")
12542 (synopsis "McCabe checker, plugin for flake8")
12543 (description "This package provides a Flake8 plug-in to compute the McCabe
12544cyclomatic complexity of Python source code.")
12545 (license license:expat)))
12546
12547(define-public python-autoflake8
12548 (package
12549 (name "python-autoflake8")
12550 (version "0.4.0")
12551 (source (origin
12552 (method git-fetch) ;for tests
12553 (uri (git-reference
12554 (url "https://github.com/fsouza/autoflake8")
12555 (commit (string-append "v" version))))
12556 (file-name (git-file-name name version))
12557 (sha256
12558 (base32
12559 "0jx7bkslbhr24yvq60pl39faz2r6g93f1zm1gygswl0rzr5zmgnh"))))
12560 (build-system pyproject-build-system)
12561 (native-inputs
12562 (list python-aiofiles
12563 python-poetry-core
12564 python-pytest
12565 python-pytest-xdist))
12566 (propagated-inputs (list python-pyflakes))
12567 (home-page "https://github.com/fsouza/autoflake8")
12568 (synopsis "Automatically fix issues reported by flake8")
12569 (description "Tool to automatically fix some issues reported by
12570@command{flake8}.")
12571 (license license:expat)))
12572
12573(define-public python-flake8
12574 (package
12575 (name "python-flake8")
12576 (version "4.0.1")
12577 (source (origin
12578 (method url-fetch)
12579 (uri (pypi-uri "flake8" version))
12580 (sha256
12581 (base32
12582 "03c7mnk34wfz7a0m5zq0273y94awz69fy5iww8alh4a4v96h6vl0"))))
12583 (build-system python-build-system)
12584 (arguments
12585 `(#:phases (modify-phases %standard-phases
12586 (replace 'check
12587 (lambda* (#:key tests? #:allow-other-keys)
12588 (when tests?
12589 (invoke "pytest" "-v")))))))
12590 (propagated-inputs
12591 (list python-entrypoints
12592 python-mccabe
12593 python-pycodestyle
12594 python-pyflakes))
12595 (native-inputs (list python-pytest))
12596 (home-page "https://gitlab.com/pycqa/flake8")
12597 (synopsis "The modular source code checker: pep8, pyflakes and co")
12598 (description
12599 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
12600 (license license:expat)))
12601
12602(define-public python-flake8-3.8
12603 (package
12604 (inherit python-flake8)
12605 (version "3.8.4")
12606 (source (origin
12607 (method url-fetch)
12608 (uri (pypi-uri "flake8" version))
12609 (sha256
12610 (base32
12611 "0fvcrsbyzjpcli8ldbpsdbpmf238nkvwc1dy4hy82lf63rvfinma"))))
12612 (propagated-inputs
12613 (list python-pycodestyle-2.6 python-entrypoints python-pyflakes-2.2
12614 python-mccabe))))
12615
12616(define-public python-flake8-blind-except
12617 (package
12618 (name "python-flake8-blind-except")
12619 (version "0.2.1")
12620 (source
12621 (origin
12622 (method url-fetch)
12623 (uri (pypi-uri "flake8-blind-except" version))
12624 (sha256
12625 (base32 "05nxsxfzfhwsm8gys90228imm2qbnqnw5y8bfqyfngnbkmd5fnpj"))))
12626 (build-system python-build-system)
12627 (arguments
12628 `(#:tests? #f)) ; no tests
12629 (native-inputs (list python-pycodestyle))
12630 (home-page "https://github.com/elijahandrews/flake8-blind-except")
12631 (synopsis "Check for blind @code{except:} statements")
12632 (description "This package provides a flake8 extension that checks for
12633blind @code{except:} statements.")
12634 (license license:expat)))
12635
12636(define-public python-flake8-bugbear
12637 (package
12638 (name "python-flake8-bugbear")
12639 (version "20.1.4")
12640 (source
12641 (origin
12642 (method url-fetch)
12643 (uri (pypi-uri "flake8-bugbear" version))
12644 (sha256
12645 (base32
12646 "0qiihb242fygzyrfynq913ak7cdmx8mcac9c0zk3y5gv16qf80mx"))))
12647 (build-system python-build-system)
12648 (arguments
12649 '(#:phases
12650 (modify-phases %standard-phases
12651 (add-before 'check 'disable-test
12652 (lambda _
12653 ;; This test fails on slow computers.
12654 (substitute* "tests/test_bugbear.py"
12655 (("def test_does_not_crash_on_any_valid_code")
12656 "def _test_does_not_crash_on_any_valid_code")))))))
12657 (native-inputs
12658 (list python-hypothesis python-hypothesmith))
12659 (propagated-inputs
12660 (list python-attrs python-flake8))
12661 (home-page "https://github.com/PyCQA/flake8-bugbear")
12662 (synopsis
12663 "Flake8 plugin for finding likely bugs and design problems in your program")
12664 (description
12665 "This package contains a plugin for Flake8 finding likely bugs and
12666design problems in your program. It contains warnings that don't belong
12667in pyflakes and pycodestyle.")
12668 (license license:expat)))
12669
12670(define-public python-flake8-continuation
12671 (package
12672 (name "python-flake8-continuation")
12673 (version "1.0.5")
12674 (source
12675 (origin
12676 (method url-fetch)
12677 (uri (pypi-uri "flake8-continuation" version))
12678 (sha256
12679 (base32
12680 "0dzaw8jr7yhlabxhrblnrizxx17xa9ngjnbr1kidg5lapq6b9q1y"))))
12681 (build-system python-build-system)
12682 (propagated-inputs
12683 (list python-flake8 python-pycodestyle python-six))
12684 (home-page "https://github.com/planetlabs/flake8-continuation")
12685 (synopsis "Flake8 Line Continuation Plugin")
12686 (description "A Flake8 plugin that checks for the line continuation
12687style to be in the preferred method according to PEP-8, specifically:
12688@quotation
12689The preferred way of wrapping long lines is by using Python's implied
12690line continuation inside parentheses, brackets and braces. Long lines
12691can be broken over multiple lines by wrapping expressions in parentheses.
12692These should be used in preference to using a backslash for line continuation.
12693@end quotation")
12694 (license license:asl2.0)))
12695
12696(define-public python-flake8-debugger
12697 (package
12698 (name "python-flake8-debugger")
12699 (version "4.1.2")
12700 (source
12701 (origin
12702 (method url-fetch)
12703 (uri (pypi-uri "flake8-debugger" version))
12704 (sha256
12705 (base32 "0h1qlzbxxhjsw6kg3mcml9h8byy77m9a5z06z2dnvqs115b05c2j"))))
12706 (build-system python-build-system)
12707 (arguments
12708 `(#:tests? #f)) ; no tests in PyPI and no setup.py in GitHub
12709 (propagated-inputs
12710 (list python-flake8 python-pycodestyle))
12711 (home-page "https://github.com/jbkahn/flake8-debugger")
12712 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
12713 (description "This package provides a Flake8 plugin that checks for
12714@code{ipdb} and @code{pdb} imports and set traces, as well as
12715@code{from IPython.terminal.embed}, @code{import InteractiveShellEmbed}
12716and @code{InteractiveShellEmbed()()}.")
12717 (license license:expat)))
12718
12719(define-public python-flake8-implicit-str-concat
12720 (package
12721 (name "python-flake8-implicit-str-concat")
12722 (version "0.2.0")
12723 (source
12724 (origin
12725 (method url-fetch)
12726 (uri (pypi-uri "flake8_implicit_str_concat" version))
12727 (sha256
12728 (base32 "1v0y29xlmbr2q12a4nnpm1dm9aw1mjiys1x8jif4z8c90d63cqm6"))))
12729 (build-system python-build-system)
12730 (arguments
12731 '(#:tests? #f ;no tests
12732 #:phases (modify-phases %standard-phases
12733 (add-after 'unpack 'loosen-requirements
12734 (lambda _
12735 ;; Permit newer versions of attrs. Remove for >0.2.
12736 (substitute* "setup.py"
12737 ((", <21") "")))))))
12738 (propagated-inputs
12739 (list python-attrs python-more-itertools))
12740 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
12741 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
12742 (description
12743 "This is a plugin for the Python code checking tool Flake8 to encourage
12744correct string literal concatenation.
12745
12746It looks for style problems like implicitly concatenated string literals on
12747the same line (which can be introduced by the code formatting tool Black), or
12748unnecessary plus operators for explicit string literal concatenation.")
12749 (license license:expat)))
12750
12751(define-public python-flake8-print
12752 (package
12753 (name "python-flake8-print")
12754 (version "4.0.0")
12755 (source
12756 (origin
12757 (method url-fetch)
12758 (uri (pypi-uri "flake8-print" version))
12759 (sha256
12760 (base32 "05k5kkvyk6fdmvnacxfzypk74vbl3pmva13dqg1aljfwnxsc7yjs"))))
12761 (build-system python-build-system)
12762 (propagated-inputs
12763 (list python-flake8 python-pycodestyle python-six))
12764 (home-page "https://github.com/jbkahn/flake8-print")
12765 (synopsis "Print statement checker plugin for Flake8")
12766 (description
12767 "This plugin for Flake8 checks for @code{print} statements in Python
12768files.")
12769 (license license:expat)))
12770
12771(define-public python-flake8-pyi
12772 (package
12773 (name "python-flake8-pyi")
12774 (version "20.10.0")
12775 (source
12776 (origin
12777 (method url-fetch)
12778 (uri (pypi-uri "flake8-pyi" version))
12779 (sha256
12780 (base32
12781 "0b27n2pmrxcc7nva4wp2i7mrag0fnq0firvhg1ljq593a45b5qyf"))))
12782 (build-system python-build-system)
12783 (propagated-inputs
12784 (list python-attrs python-flake8 python-pyflakes))
12785 (home-page "https://github.com/ambv/flake8-pyi")
12786 (synopsis
12787 "Flake8 plugin that provides specializations for type hinting stub files")
12788 (description
12789 "This package contains a plugin that provides specializations for
12790type hinting stub files, especially interesting for linting typeshed. It
12791adds the @file{.pyi} extension to the default value of the @code{--filename}
12792command-line argument to Flake8. This means stubs are linted by default with
12793this plugin enabled, without needing to explicitly list every file. It
12794modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
12795expressions after the entire file has been read. This enables support for
12796first-class forward references that stub files use.")
12797 (license license:expat)))
12798
12799(define-public python-flake8-pie
12800 (package
12801 (name "python-flake8-pie")
12802 (version "0.5.0")
12803 (source
12804 (origin
12805 (method url-fetch)
12806 (uri (pypi-uri "flake8-pie" version))
12807 (sha256
12808 (base32 "0kgipl5gljlp7aa7ykx15pswpzkd0d0qiznihb2z0d9a73181dyd"))))
12809 (build-system python-build-system)
12810 (home-page "https://github.com/sbdchd/flake8-pie")
12811 (synopsis "Flake8 extension that implements lints")
12812 (description
12813 "This package provides a flake8 extension that implements miscellaneous
12814lints.")
12815 (license license:bsd-2)))
12816
12817(define-public python-flake8-quotes
12818 (package
12819 (name "python-flake8-quotes")
12820 (version "3.2.0")
12821 (source
12822 (origin
12823 (method url-fetch)
12824 (uri (pypi-uri "flake8-quotes" version))
12825 (sha256
12826 (base32
12827 "0ph5s6lxgpzz4an0ax6s5xjqypqmngwr5b1i0h9pqhzghplic49z"))))
12828 (build-system python-build-system)
12829 (propagated-inputs
12830 (list python-flake8))
12831 (home-page "https://github.com/zheller/flake8-quotes/")
12832 (synopsis "Flake8 lint for quotes")
12833 (description "This package provides a Flake8 lint for quotes.")
12834 (license license:expat)))
12835
12836(define-public python-flake8-todo
12837 (package
12838 (name "python-flake8-todo")
12839 (version "0.7")
12840 (source
12841 (origin
12842 (method url-fetch)
12843 (uri (pypi-uri "flake8-todo" version))
12844 (sha256
12845 (base32
12846 "05arm0sch3r8248035kilmf01z0mxsahw6vpbbz0d343zy8m8k3f"))))
12847 (build-system python-build-system)
12848 (propagated-inputs
12849 (list python-pycodestyle))
12850 (home-page "https://github.com/schlamar/flake8-todo")
12851 (synopsis "TODO notes checker, plugin for flake8")
12852 (description
12853 "This package provides the @code{flake8-todo} Python module, a
12854TODO notes checker plugin for flake8.")
12855 (license license:expat)))
12856
12857(define-public python-flake8-isort
12858 (package
12859 (name "python-flake8-isort")
12860 (version "4.1.1")
12861 (source
12862 (origin
12863 (method url-fetch)
12864 (uri (pypi-uri "flake8-isort" version))
12865 (sha256
12866 (base32 "05r7z0j9rqgy0a9261bhisairrz6w8hy5hy5kf2mhvhfnx53056q"))))
12867 (build-system python-build-system)
12868 (arguments
12869 (list
12870 #:phases
12871 #~(modify-phases %standard-phases
12872 (replace 'check
12873 (lambda* (#:key tests? #:allow-other-keys)
12874 (when tests?
12875 (invoke "pytest" "-vv")))))))
12876 (propagated-inputs (list python-flake8 python-isort python-testfixtures))
12877 (native-inputs (list python-pytest))
12878 (home-page "https://github.com/gforcada/flake8-isort")
12879 (synopsis "Flake8 plugin integrating isort")
12880 (description "This package provides a flake8 plugin that integrates isort,
12881extending flake8 so that it can warn about badly sorted Python import
12882directives.")
12883 (license license:gpl2+)))
12884
12885(define-public python-autoflake
12886 (package
12887 (name "python-autoflake")
12888 (version "1.3.1")
12889 (source
12890 (origin
12891 (method url-fetch)
12892 (uri (pypi-uri "autoflake" version))
12893 (sha256
12894 (base32 "0nzr057dbmgprp4a52ymafdkdd5zp2wcqf42913xc7hhvvdbj338"))))
12895 (build-system python-build-system)
12896 (propagated-inputs
12897 (list python-pyflakes))
12898 (home-page "https://github.com/myint/autoflake")
12899 (synopsis "Removes unused imports and unused variables")
12900 (description
12901 "@code{autoflake} removes unused imports and unused variables from Python
12902code as reported by @code{pyflakes}.
12903
12904By default, it only removes unused imports for modules that are part of the
12905standard library. Removal of unused variables is also disabled by default.
12906It also removes useless @code{pass} statements.")
12907 (license license:expat)))
12908
12909(define-public python-mistune
12910 (package
12911 (name "python-mistune")
12912 (version "0.8.4")
12913 (source
12914 (origin
12915 (method url-fetch)
12916 (uri (pypi-uri "mistune" version))
12917 (sha256
12918 (base32
12919 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
12920 (build-system python-build-system)
12921 (native-inputs
12922 (list python-nose python-cython))
12923 (home-page "https://github.com/lepture/mistune")
12924 (synopsis "Markdown parser in pure Python")
12925 (description "This package provides a fast markdown parser in pure
12926Python.")
12927 (license license:bsd-3)))
12928
12929;; 2.0 is not released yet, but some packages have started using it.
12930(define-public python-mistune-next
12931 (package
12932 (inherit python-mistune)
12933 (name "python-mistune-next")
12934 (version "2.0.4")
12935 (source (origin
12936 (method url-fetch)
12937 (uri (pypi-uri "mistune" version))
12938 (sha256
12939 (base32
12940 "024q9l6mgd37wa25w7dhskv1m3zsj5lf0w9cfyx7l9p2adhadq4y"))))
12941 (arguments
12942 (list
12943 #:phases
12944 #~(modify-phases %standard-phases
12945 (replace 'check
12946 (lambda* (#:key tests? #:allow-other-keys)
12947 (when tests?
12948 (invoke "pytest" "-vv")))))))
12949 (native-inputs (list python-pytest))))
12950
12951(define-public python-markdown
12952 (package
12953 (name "python-markdown")
12954 (version "3.3.4")
12955 (source
12956 (origin
12957 (method url-fetch)
12958 (uri (pypi-uri "Markdown" version))
12959 (sha256
12960 (base32
12961 "0jbs73nincha8fkfxx267sfxac6pl0ckszjbqbb8gk4dhs8v9d9i"))))
12962 (build-system python-build-system)
12963 (native-inputs
12964 (list python-nose python-pyyaml))
12965 (home-page "https://python-markdown.github.io/")
12966 (synopsis "Python implementation of Markdown")
12967 (description
12968 "This package provides a Python implementation of John Gruber's
12969Markdown. The library features international input, various Markdown
12970extensions, and several HTML output formats. A command line wrapper
12971markdown_py is also provided to convert Markdown files to HTML.")
12972 (license license:bsd-3)))
12973
12974(define-public python-mdx-include
12975 (package
12976 (name "python-mdx-include")
12977 (version "1.4.1")
12978 (source (origin
12979 ;; Use git, as there are some test files missing from the PyPI
12980 ;; release, see https://github.com/neurobin/mdx_include/issues/9
12981 (method git-fetch)
12982 (uri (git-reference
12983 (url "https://github.com/neurobin/mdx_include")
12984 ;; Releases are not tagged on github, see
12985 ;; https://github.com/neurobin/mdx_include/issues/10
12986 (commit "683e6be7a00a1ef4d673ad0294458fa61bc97286")))
12987 (file-name (git-file-name name version))
12988 (sha256
12989 (base32
12990 "0qpzgln4ybd7pl0m9s19dv60aq9cvwrk7x3yz96kjhcywaa5w386"))))
12991 (build-system python-build-system)
12992 (arguments
12993 '(#:phases
12994 (modify-phases %standard-phases
12995 (add-before 'check 'disable-test-requiring-network
12996 (lambda _
12997 (substitute* "mdx_include/test/test.py"
12998 (("(\\s+def )test_(cache|config|default)\\(" _ pre post)
12999 (string-append pre "__off__test_" post "("))))))))
13000 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
13001 (home-page "https://github.com/neurobin/mdx_include")
13002 (synopsis "Python Markdown extension to include local or remote files")
13003 (description "Include extension for Python Markdown. It lets you include
13004local or remote (downloadable) files into your markdown at arbitrary
13005positions.
13006
13007This project is motivated by markdown-include and provides the same
13008functionalities with some extras.")
13009 (license license:bsd-3)))
13010
13011(define-public python-ptyprocess
13012 (package
13013 (name "python-ptyprocess")
13014 (version "0.5.2")
13015 (source
13016 (origin
13017 (method url-fetch)
13018 (uri (pypi-uri "ptyprocess" version))
13019 (sha256
13020 (base32
13021 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
13022 (build-system python-build-system)
13023 (native-inputs
13024 (list python-nose))
13025 (arguments
13026 `(#:phases
13027 (modify-phases %standard-phases
13028 (replace 'check
13029 (lambda _ (invoke "nosetests"))))))
13030 (home-page "https://github.com/pexpect/ptyprocess")
13031 (synopsis "Run a subprocess in a pseudo terminal")
13032 (description
13033 "This package provides a Python library used to launch a subprocess in a
13034pseudo terminal (pty), and interact with both the process and its pty.")
13035 (license license:isc)))
13036
13037(define-public python-cram
13038 (package
13039 (name "python-cram")
13040 (version "0.7")
13041 (home-page "https://bitheap.org/cram/")
13042 (source (origin
13043 (method url-fetch)
13044 (uri (list (string-append home-page "cram-"
13045 version ".tar.gz")
13046 (pypi-uri "cram" version)))
13047 (sha256
13048 (base32
13049 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
13050 (arguments
13051 '(#:phases
13052 (modify-phases %standard-phases
13053 (add-after 'unpack 'patch-source
13054 (lambda _
13055 (substitute* (find-files "cram" ".*\\.py$")
13056 ;; Replace default shell path.
13057 (("/bin/sh") (which "sh")))
13058 (substitute* (find-files "tests" ".*\\.t$")
13059 (("md5") "md5sum")
13060 (("/bin/bash") (which "bash"))
13061 (("/bin/sh") (which "sh")))
13062 (substitute* "cram/_test.py"
13063 ;; This hack works around a bug triggered by substituting
13064 ;; the /bin/sh paths. "tests/usage.t" compares the output of
13065 ;; "cram -h", which breaks the output at 80 characters. This
13066 ;; causes the line showing the default shell to break into two
13067 ;; lines, but the test expects a single line...
13068 (("env\\['COLUMNS'\\] = '80'")
13069 "env['COLUMNS'] = '160'"))
13070
13071 (substitute* "Makefile"
13072 ;; Recent versions of python-coverage have caused the test
13073 ;; coverage to decrease (as of version 0.7). Allow that.
13074 (("--fail-under=100")
13075 "--fail-under=90"))
13076
13077 #t))
13078 (replace 'check
13079 ;; The test phase uses the built library and executable.
13080 (lambda* (#:key inputs outputs #:allow-other-keys)
13081 (add-installed-pythonpath inputs outputs)
13082 (setenv "PATH" (string-append (getenv "PATH") ":"
13083 (assoc-ref outputs "out") "/bin"))
13084 (invoke "make" "test"))))))
13085 (build-system python-build-system)
13086 (native-inputs
13087 (list python-coverage which))
13088 (synopsis "Simple testing framework for command line applications")
13089 (description
13090 "Cram is a functional testing framework for command line applications.
13091Cram tests look like snippets of interactive shell sessions. Cram runs each
13092command and compares the command output in the test with the command’s actual
13093output.")
13094 (license license:gpl2+)))
13095
13096(define-public python-crccheck
13097 (package
13098 (name "python-crccheck")
13099 (version "1.1")
13100 (source
13101 (origin
13102 (method url-fetch)
13103 (uri (pypi-uri "crccheck" version))
13104 (sha256
13105 (base32 "15psg7wjfbpmmry54ffwg6pg63mnv7mkwmb0a7884axnr8qj55j5"))))
13106 (build-system python-build-system)
13107 (arguments
13108 (list
13109 #:phases
13110 #~(modify-phases %standard-phases
13111 (replace 'check
13112 (lambda* (#:key tests? #:allow-other-keys)
13113 (when tests?
13114 (invoke "pytest" "-vv")))))))
13115 (native-inputs (list python-pytest))
13116 (home-page "https://sourceforge.net/projects/crccheck/")
13117 (synopsis "Calculation library for CRCs and checksums")
13118 (description "@code{crccheck} is a calculation library for CRCs and
13119checksums. It implement more than a hundred checksum routines.")
13120 (license license:gpl3+)))
13121
13122(define-public python-crashtest
13123 (package
13124 (name "python-crashtest")
13125 (version "0.3.1")
13126 (source
13127 (origin
13128 (method url-fetch)
13129 (uri (pypi-uri "crashtest" version))
13130 (sha256
13131 (base32 "1p9p7mn8x2j9psc4jxab98897v4i9s4fliyfw8rp8v4bx1n7pjj2"))))
13132 (build-system python-build-system)
13133 (home-page "https://github.com/sdispater/crashtest")
13134 (synopsis "Manage Python errors with ease")
13135 (description
13136 "Python library that makes exceptions handling and inspection easier.")
13137 (license license:expat)))
13138
13139(define-public python-stdlib-list
13140 (package
13141 (name "python-stdlib-list")
13142 (version "0.8.0")
13143 (source (origin
13144 (method url-fetch)
13145 (uri (pypi-uri "stdlib-list" version))
13146 (sha256
13147 (base32
13148 "17vdn4q0sdlndc2fr9svapxx6366hnrhkn0fswp1xmr0jxqh7rd1"))))
13149 (build-system python-build-system)
13150 (arguments
13151 `(#:tests? #f)) ; Tests require more dependencies.
13152 (native-inputs
13153 (list python-sphinx))
13154 (home-page "https://github.com/jackmaney/python-stdlib-list")
13155 (synopsis "Python Standard Libraries")
13156 (description "This package contains a list of Python Standard Libraries.")
13157 (license license:expat)))
13158
13159(define-public python-stopit
13160 (package
13161 (name "python-stopit")
13162 (version "1.1.2")
13163 (source
13164 (origin
13165 (method url-fetch)
13166 (uri (pypi-uri "stopit" version))
13167 (sha256
13168 (base32 "0vcrcvky249q4rbgmwf18mwmnypfk8jpn4h6knyjf86r7xc9rwzp"))))
13169 (build-system python-build-system)
13170 (arguments '(#:tests? #f)) ;there are none
13171 (home-page "https://pypi.python.org/pypi/stopit")
13172 (synopsis "Timeout control decorator and context managers")
13173 (description
13174 "Raise asynchronous exceptions in other threads, control the timeout of
13175blocks or callables with two context managers and two decorators.")
13176 (license license:expat)))
13177
13178(define-public python-timeout-decorator
13179 (package
13180 (name "python-timeout-decorator")
13181 (version "0.5.0")
13182 (source (origin
13183 (method url-fetch)
13184 (uri (pypi-uri "timeout-decorator" version))
13185 (sha256
13186 (base32
13187 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
13188 (build-system python-build-system)
13189 (home-page "https://github.com/pnpnpn/timeout-decorator")
13190 (synopsis "Timeout decorator")
13191 (description "This package provides a decorator that raises an error
13192when an operation takes longer than expected.")
13193 (license license:expat)))
13194
13195(define-public python-straight-plugin
13196 (package
13197 (name "python-straight-plugin")
13198 (version "1.4.1")
13199 (source
13200 (origin
13201 (method url-fetch)
13202 (uri (pypi-uri "straight.plugin" version))
13203 (sha256
13204 (base32
13205 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
13206 (build-system python-build-system)
13207 (home-page "https://github.com/ironfroggy/straight.plugin")
13208 (synopsis "Simple namespaced plugin facility")
13209 (description "Straight Plugin provides a type of plugin you can create from
13210almost any existing Python modules, and an easy way for outside developers to
13211add functionality and customization to your projects with their own plugins.")
13212 (license license:expat)))
13213
13214(define-public python-pysendfile
13215 (package
13216 (name "python-pysendfile")
13217 (version "2.0.1")
13218 (source
13219 (origin
13220 (method url-fetch)
13221 (uri (pypi-uri "pysendfile" version))
13222 (sha256
13223 (base32 "05qf0m32isflln1zjgxlpw0wf469lj86vdwwqyizp1h94x5l22ji"))))
13224 (build-system python-build-system)
13225 (arguments
13226 (list
13227 #:phases #~(modify-phases %standard-phases
13228 (replace 'check
13229 (lambda* (#:key tests? #:allow-other-keys)
13230 (when tests?
13231 (setenv "HOME" "/tmp")
13232 (invoke "make" "test")))))))
13233 (home-page "https://github.com/giampaolo/pysendfile")
13234 (synopsis "Python interface to sendfile(2)")
13235 (description "The @{pysendfile} Python library provides an interface to
13236the @code{sendfile(2)} system call.")
13237 (license license:expat)))
13238
13239(define-public python-pyftpdlib
13240 (package
13241 (name "python-pyftpdlib")
13242 (version "1.5.7")
13243 (source
13244 (origin
13245 (method url-fetch)
13246 (uri (pypi-uri "pyftpdlib" version))
13247 (sha256
13248 (base32 "0vk5gcx4svjrpm014ykwxmijqihgb4ha17kb3yphk0nv6x0wx8vy"))))
13249 (build-system pyproject-build-system)
13250 ;; Using Pytest instead of the Makefile causes the command line tests to
13251 ;; fail on unknown Pytest arguments.
13252 (arguments (list #:test-flags #~(list "-k" "not TestCommandLineParser")))
13253 (native-inputs (list python-psutil python-pytest))
13254 (propagated-inputs (list python-pyopenssl python-pysendfile))
13255 (home-page "https://github.com/giampaolo/pyftpdlib/")
13256 (synopsis "Asynchronous and scalable Python FTP server library")
13257 (description "The Python FTP server library provides a high-level
13258interface to write efficient, scalable and asynchronous FTP servers with
13259Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
13260RFC-959} FTP server implementation available for Python, and has the following
13261traits:
13262@itemize
13263@item
13264It is lightweight, fast and scalable.
13265@item
13266It uses the @code{sendfile(2)} system call for uploads.
13267@item
13268It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
13269asynchronously.
13270@item
13271It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
13272IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
13273RFC-2640}) and MLSD/MLST commands (RFC-3659).
13274@item
13275It has a flexible system of @samp{authorizers} able to manage both
13276@samp{virtual} and @samp{real} users.
13277@end itemize")
13278 (license license:expat)))
13279
13280(define-public python-fs
13281 (package
13282 (name "python-fs")
13283 (version "2.4.16")
13284 (source
13285 (origin
13286 (method url-fetch)
13287 (uri (pypi-uri "fs" version))
13288 (sha256
13289 (base32 "04ykd7q49qgv13hl2n71lzihs2c9099r50lmd85vgx0k2bawg5xf"))))
13290 (build-system python-build-system)
13291 (arguments
13292 (list
13293 #:tests? (and (not (%current-target-system))
13294 (->bool (this-package-native-input "python-pytest")))
13295 #:phases #~(modify-phases %standard-phases
13296 (replace 'check
13297 (lambda* (#:key tests? #:allow-other-keys)
13298 (when tests?
13299 (setenv "HOME" "/tmp")
13300 (invoke "pytest" "-m" "not slow")))))))
13301 (propagated-inputs
13302 (list python-appdirs python-pytz python-six))
13303 (native-inputs
13304 ;; 'python-pyftpdlib' is needed for tests but it indirectly depends Rust,
13305 ;; which is currently unavailable on aarch64-linux. Remove all the test
13306 ;; dependencies in that case.
13307 (if (and (not (%current-target-system))
13308 (supported-package? python-pyftpdlib))
13309 (list python-mock python-parameterized python-pyftpdlib
13310 python-pytest)
13311 '()))
13312 (home-page "https://github.com/PyFilesystem/pyfilesystem2/")
13313 (synopsis "File system abstraction layer for Python")
13314 (description "PyFilesystem's @code{FS} object is a file system abstraction
13315sharing similarities with Python's own @code{file} object for single files.
13316It allows opening all the files under a given directory recursively, as a
13317single @code{FS} object. This enables, for example, counting the combined
13318number of lines in the contained files easily.")
13319 (license license:expat)))
13320
13321;;; Tests are left out in the main package to avoid cycles.
13322(define-public python-fonttools-minimal
13323 (hidden-package
13324 (package
13325 (name "python-fonttools-minimal")
13326 (version "4.39.3")
13327 (source (origin
13328 (method url-fetch)
13329 (uri (pypi-uri "fonttools" version ".zip"))
13330 (sha256
13331 (base32
13332 "1msibi5cmi5znykkg66dq7xshl07lkqjxhrz5hcipqvlggsvjd4j"))))
13333 (build-system python-build-system)
13334 (native-inputs
13335 (list unzip))
13336 (arguments '(#:tests? #f))
13337 (home-page "https://github.com/fonttools/fonttools")
13338 (synopsis "Tools to manipulate font files")
13339 (description
13340 "FontTools/TTX is a library to manipulate font files from Python. It
13341supports reading and writing of TrueType/OpenType fonts, reading and writing
13342of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
13343also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
13344from an XML-based format.")
13345 (license license:expat))))
13346
13347(define-public python-fonttools
13348 (let ((base python-fonttools-minimal))
13349 (package/inherit base
13350 (name "python-fonttools")
13351 (arguments
13352 (substitute-keyword-arguments (package-arguments base)
13353 ((#:tests? _ #f)
13354 (not (%current-target-system)))
13355 ((#:phases phases '%standard-phases)
13356 `(modify-phases ,phases
13357 (replace 'check
13358 (lambda* (#:key tests? #:allow-other-keys)
13359 (when tests?
13360 (invoke "pytest" "-vv"
13361 "-k"
13362 ;; XXX: These tests need .trm files that are
13363 ;; not shipped with the PyPI release.
13364 (format #f "not ~a"
13365 (string-join
13366 '("test_read_fontdimens_mathsy"
13367 "test_read_fontdimens_mathex"
13368 "test_read_fontdimens_vanilla"
13369 "test_read_boundary_char"
13370 "fontTools.tfmLib"
13371 ;; The MtiTest tests fail for unknown
13372 ;; reasons (see:
13373 ;; https://github.com/fonttools/
13374 ;; fonttools/issues/3078)
13375 "MtiTest")
13376 " and not "))))))))))
13377 (native-inputs
13378 (modify-inputs (package-native-inputs base)
13379 (append python-pytest)))
13380 (propagated-inputs
13381 (list python-brotli
13382 python-fs
13383 python-lxml
13384 python-lz4
13385 python-scipy
13386 python-unicodedata2
13387 python-zopfli))
13388 (properties (alist-delete 'hidden? (package-properties base))))))
13389
13390(define-public python-ly
13391 (package
13392 (name "python-ly")
13393 (version "0.9.5")
13394 (source
13395 (origin
13396 (method url-fetch)
13397 (uri (pypi-uri name version))
13398 (sha256
13399 (base32
13400 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
13401 (build-system python-build-system)
13402 (arguments
13403 ;; FIXME: Some tests need network access.
13404 '(#:tests? #f))
13405 (synopsis "Tool and library for manipulating LilyPond files")
13406 (description "This package provides a Python library to parse, manipulate
13407or create documents in LilyPond format. A command line program ly is also
13408provided that can be used to do various manipulations with LilyPond files.")
13409 (home-page "https://pypi.org/project/python-ly/")
13410 (license license:gpl2+)))
13411
13412(define-public python-appdirs
13413 (package
13414 (name "python-appdirs")
13415 (version "1.4.4")
13416 (source
13417 (origin
13418 (method url-fetch)
13419 (uri (pypi-uri "appdirs" version))
13420 (sha256
13421 (base32
13422 "0hfzmwknxqhg20aj83fx80vna74xfimg8sk18wb85fmin9kh2pbx"))))
13423 (build-system python-build-system)
13424 (home-page "https://github.com/ActiveState/appdirs")
13425 (synopsis
13426 "Determine platform-specific dirs, e.g. a \"user data dir\"")
13427 (description
13428 "This module provides a portable way of finding out where user data
13429should be stored on various operating systems.")
13430 (license license:expat)))
13431
13432(define-public python-gorilla
13433 (package
13434 (name "python-gorilla")
13435 (version "0.3.0")
13436 (source (origin
13437 (method url-fetch)
13438 (uri (pypi-uri "gorilla" version))
13439 (sha256
13440 (base32
13441 "0b40blcp6fih4nvqbilra4qw1dfccv1ahjmr41ac4d9rjadqkcpy"))))
13442 (build-system python-build-system)
13443 (home-page "https://github.com/christophercrouzet/gorilla")
13444 (synopsis "Convenient monkey patching with Python")
13445 (description
13446 "Gorilla is a Python library that provides a convenient approach to
13447monkey patching. Monkey patching is the process of modifying module and
13448class attributes at runtime with the purpose of replacing or extending
13449third-party code.")
13450 (license license:expat)))
13451
13452(define-public python-llfuse
13453 (package
13454 (name "python-llfuse")
13455 (version "1.4.4")
13456 (source (origin
13457 (method url-fetch)
13458 (uri (pypi-uri "llfuse" version))
13459 (sha256
13460 (base32
13461 "1jb4c9avvb0v3830xlbj1r9kj05i98vv6nq05105ppg57y7lq14j"))))
13462 (build-system python-build-system)
13463 (inputs
13464 (list fuse-2 attr))
13465 (native-inputs
13466 (list pkg-config python-pytest))
13467 (synopsis "Python bindings for FUSE")
13468 (description
13469 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
13470 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
13471 (license license:lgpl2.0+)))
13472
13473(define-public python-msgpack
13474 (package
13475 (name "python-msgpack")
13476 (version "1.0.4")
13477 (source (origin
13478 (method url-fetch)
13479 (uri (pypi-uri "msgpack" version))
13480 (sha256
13481 (base32
13482 "0pqzy1zclyhd42gfibhkcqymbspy5a6v421g87mh40h3iz0nkn7m"))))
13483 (build-system python-build-system)
13484 (arguments
13485 `(#:modules ((guix build utils)
13486 (guix build python-build-system)
13487 (ice-9 ftw)
13488 (srfi srfi-1)
13489 (srfi srfi-26))
13490 #:phases
13491 (modify-phases %standard-phases
13492 (replace 'check
13493 (lambda _
13494 (invoke "pytest" "-v" "test"))))))
13495 (native-inputs
13496 (list python-pytest))
13497 (synopsis "MessagePack (de)serializer")
13498 (description "MessagePack is a fast, compact binary serialization format,
13499suitable for similar data to JSON. This package provides CPython bindings for
13500reading and writing MessagePack data.")
13501 (home-page "https://pypi.org/project/msgpack/")
13502 (license license:asl2.0)))
13503
13504(define-public python-msgpack-1.0.2
13505 (package
13506 (inherit python-msgpack)
13507 (version "1.0.2")
13508 (source (origin
13509 (method url-fetch)
13510 (uri (pypi-uri "msgpack" version))
13511 (sha256
13512 (base32
13513 "1109s2yynrahwi64ikax68hx0mbclz8p35afmpphw5dwynb49q7s"))))))
13514
13515(define-public python-netaddr
13516 (package
13517 (name "python-netaddr")
13518 (version "0.8.0")
13519 (source
13520 (origin
13521 (method url-fetch)
13522 (uri (pypi-uri "netaddr" version))
13523 (sha256
13524 (base32
13525 "0hx2npi0wnhwlcybilgwlddw6qffx1mb7a3sj4p9s7bvl33mgk6n"))))
13526 (build-system python-build-system)
13527 (arguments `(#:tests? #f)) ;; No tests.
13528 (home-page "https://github.com/drkjam/netaddr/")
13529 (synopsis "Pythonic manipulation of network addresses")
13530 (description
13531 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
13532and MAC network addresses.")
13533 (license license:bsd-3)))
13534
13535(define-public python-openstep-plist
13536 (package
13537 (name "python-openstep-plist")
13538 (version "0.3.0")
13539 (home-page "https://github.com/fonttools/openstep-plist")
13540 (source (origin
13541 (method git-fetch)
13542 (uri (git-reference
13543 (url home-page)
13544 (commit (string-append "v" version))))
13545 (file-name (git-file-name name version))
13546 (sha256
13547 (base32
13548 "1rxjgzh0p069ncsr2986rn32vhdqyq35irbqg2559jh18456mkca"))))
13549 (build-system python-build-system)
13550 (arguments
13551 (list #:phases
13552 #~(modify-phases %standard-phases
13553 (add-after 'unpack 'pretend-version
13554 (lambda _
13555 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
13556 #$(package-version this-package))))
13557 (replace 'check
13558 (lambda* (#:key tests? #:allow-other-keys)
13559 (when tests?
13560 (invoke "pytest" "-vv")))))))
13561 (native-inputs
13562 (list python-cython python-pytest python-setuptools-scm))
13563 (synopsis "OpenStep plist parser and writer")
13564 (description
13565 "This package provides a parser for the \"old style\" OpenStep property
13566list format (also known as ASCII plist), written in Cython.")
13567 (license license:expat)))
13568
13569(define-public python-wrapt
13570 (package
13571 (name "python-wrapt")
13572 (version "1.11.2")
13573 (source
13574 (origin
13575 (method url-fetch)
13576 (uri (pypi-uri "wrapt" version))
13577 (sha256
13578 (base32
13579 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
13580 (build-system python-build-system)
13581 (arguments
13582 ;; Tests are not included in the tarball, they are only available in the
13583 ;; git repository.
13584 `(#:tests? #f))
13585 (home-page "https://github.com/GrahamDumpleton/wrapt")
13586 (synopsis "Module for decorators, wrappers and monkey patching")
13587 (description
13588 "The aim of the wrapt module is to provide a transparent object proxy for
13589 Python, which can be used as the basis for the construction of function
13590 wrappers and decorator functions.")
13591 (license license:bsd-2)))
13592
13593(define-public python-commentjson
13594 (package
13595 (name "python-commentjson")
13596 (version "0.9.0")
13597 (source (origin
13598 ;; The PyPI release is missing some test files.
13599 (method git-fetch)
13600 (uri (git-reference
13601 (url "https://github.com/vaidik/commentjson")
13602 (commit (string-append "v" version))))
13603 (file-name (git-file-name name version))
13604 (sha256
13605 (base32
13606 "01iscgrc6bkyrxbzmf46csbf9c0n7g6dygdmxs3fq8fkzrrciybl"))))
13607 (build-system python-build-system)
13608 (arguments
13609 `(#:modules ((guix build python-build-system)
13610 (guix build utils)
13611 (ice-9 ftw)
13612 (ice-9 textual-ports))
13613 #:phases
13614 (modify-phases %standard-phases
13615 (add-after 'unpack 'relax-requirements
13616 (lambda _
13617 (substitute* "setup.py"
13618 (("lark-parser>=0.7.1,<0.8.0")
13619 "lark-parser>=0.7.1"))))
13620 (add-after 'unpack 'delete-unspported-tests
13621 ;; Some tests rely on the 'test' module of Python itself,
13622 ;; which is not available with the Python package in Guix;
13623 ;; remove them.
13624 (lambda _
13625 ;; XXX: Copied from (guix build dub-build-system).
13626 (define (grep string file-name)
13627 (string-contains (call-with-input-file file-name get-string-all)
13628 string))
13629
13630 (with-directory-excursion "commentjson/tests/test_json"
13631 (let* ((dot? (lambda (x) (member x '("." ".."))))
13632 (test-files (scandir "." (negate dot?))))
13633 (for-each delete-file
13634 (filter (lambda (f) (grep "from test." f))
13635 test-files)))))))))
13636 (propagated-inputs
13637 (list python-lark-parser))
13638 (native-inputs
13639 (list python-six))
13640 (home-page "https://github.com/vaidik/commentjson")
13641 (synopsis "Python library for adding comments to JSON files")
13642 (description "Comment JSON is a Python package that helps you create JSON
13643files with Python and JavaScript style inline comments. Its API is very
13644similar to the Python standard library's @code{json} module.")
13645 (license license:expat)))
13646
13647(define-public python-resolvelib
13648 (package
13649 (name "python-resolvelib")
13650 (version "0.7.1")
13651 (source
13652 (origin
13653 ;; Tests are missing from the PyPI release.
13654 (method git-fetch)
13655 (uri (git-reference
13656 (url "https://github.com/sarugaku/resolvelib")
13657 (commit version)))
13658 (file-name (git-file-name name version))
13659 (sha256
13660 (base32
13661 "1fqz75riagizihvf4j7wc3zjw6kmg1dd8sf49aszyml105kb33n8"))))
13662 (build-system python-build-system)
13663 (arguments
13664 `(#:phases
13665 (modify-phases %standard-phases
13666 (replace 'check
13667 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
13668 (when tests?
13669 (add-installed-pythonpath inputs outputs)
13670 (invoke "pytest")))))))
13671 (native-inputs
13672 (list python-commentjson python-packaging python-pytest))
13673 (home-page "https://github.com/sarugaku/resolvelib")
13674 (synopsis "Abstract dependencies resolver")
13675 (description "The ResolveLib library provides a @code{Resolver} class that
13676includes dependency resolution logic.")
13677 (license license:isc)))
13678
13679;;; This older version is required by ansible-core.
13680(define-public python-resolvelib-0.5
13681 (package/inherit python-resolvelib
13682 (name "python-resolvelib")
13683 (version "0.5.4")
13684 (source
13685 (origin
13686 (method git-fetch)
13687 (uri (git-reference
13688 (url "https://github.com/sarugaku/resolvelib")
13689 (commit version)))
13690 (file-name (git-file-name name version))
13691 (sha256
13692 (base32
13693 "0697y330sqhiclk25v151qxg7aixzpj434lbg5qib0qlna5zg9la"))))))
13694
13695(define-public python-commonmark
13696 (package
13697 (name "python-commonmark")
13698 (version "0.9.1")
13699 (source
13700 (origin
13701 (method url-fetch)
13702 (uri (pypi-uri "commonmark" version))
13703 (sha256
13704 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
13705 (build-system python-build-system)
13706 (arguments
13707 `(#:phases
13708 (modify-phases %standard-phases
13709 (replace 'check
13710 (lambda* (#:key inputs outputs #:allow-other-keys)
13711 (add-installed-pythonpath inputs outputs)
13712 (invoke "python" "setup.py" "test"))))))
13713 (home-page "https://github.com/readthedocs/commonmark.py")
13714 (synopsis "Python parser for the CommonMark Markdown spec")
13715 (description
13716 "This module is a pure Python port of jgm's @code{commonmark.js}, a
13717Markdown parser and renderer for the CommonMark specification, using only
13718native modules.")
13719 (license license:bsd-3)))
13720
13721(define-public python-xlrd
13722 (package
13723 (name "python-xlrd")
13724 (version "2.0.1")
13725 (source (origin
13726 ;; The tests are not included in the PyPI archive.
13727 (method git-fetch)
13728 (uri (git-reference
13729 (url "https://github.com/python-excel/xlrd")
13730 (commit version)))
13731 (file-name (git-file-name name version))
13732 (sha256
13733 (base32
13734 "170asszffvf6rh5w169ic4h5kxgjkmdl3060vw737d4g1qfifvzz"))))
13735 (build-system python-build-system)
13736 (native-inputs
13737 (list python-pytest))
13738 (home-page "https://www.python-excel.org/")
13739 (synopsis "Library for extracting data from Excel files")
13740 (description "This package provides a library to extract data from
13741spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
13742@samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
13743Unicode-aware. It is not intended as an end-user tool.")
13744 (license license:bsd-3)))
13745
13746;;; Note: this package is unmaintained since 2018 (archived on GitHub).
13747(define-public python-xlwt
13748 (package
13749 (name "python-xlwt")
13750 (version "1.3.0")
13751 (source
13752 (origin
13753 (method url-fetch)
13754 (uri (pypi-uri "xlwt" version))
13755 (sha256
13756 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
13757 (build-system python-build-system)
13758 (arguments
13759 `(#:phases
13760 (modify-phases %standard-phases
13761 (replace 'check
13762 (lambda* (#:key tests? #:allow-other-keys)
13763 (when tests?
13764 (setenv "GUIX_PYTHONPATH"
13765 (string-append (getcwd) "/build/lib:"
13766 (getenv "GUIX_PYTHONPATH")))
13767 (invoke "nosetests" "-v")))))))
13768 (native-inputs
13769 `(("nose" ,python-nose)))
13770 (home-page "https://www.python-excel.org/")
13771 (synopsis "Library for creating spreadsheet Excel files")
13772 (description "@code{xlwt} is a library for writing data and formatting
13773information to older Excel files (i.e. .xls). The package itself is pure
13774Python with no dependencies on modules or packages outside the standard Python
13775distribution. It is not intended as an end-user tool.")
13776 (license license:bsd-3)))
13777
13778(define-public python-immutables
13779 (package
13780 (name "python-immutables")
13781 (version "0.18")
13782 (source
13783 (origin
13784 (method url-fetch)
13785 (uri (pypi-uri "immutables" version))
13786 (sha256
13787 (base32 "1x4cinh0xbl6p6p2yfm2s07mxxy3lf0zzai9gqpydk4482bwfdjk"))))
13788 (build-system python-build-system)
13789 (native-inputs (list python-mypy python-pytest))
13790 (home-page "https://github.com/MagicStack/immutables")
13791 (synopsis "High-performance immutable mapping type for Python")
13792 (description
13793 "An immutable mapping type for Python. The underlying datastructure is a
13794Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
13795functional languages.")
13796 (license license:asl2.0)))
13797
13798(define-public python-prettytable
13799 (package
13800 (name "python-prettytable")
13801 (version "3.3.0")
13802 (source
13803 (origin
13804 (method url-fetch)
13805 (uri (pypi-uri "prettytable" version))
13806 (sha256
13807 (base32
13808 "1c599w31i2ndzbkn85xwsgv9sd2j16r56dl922w4jh3rs97vb3hi"))))
13809 (build-system python-build-system)
13810 (arguments
13811 (list #:phases
13812 #~(modify-phases %standard-phases
13813 (replace 'check
13814 (lambda* (#:key tests? #:allow-other-keys)
13815 (when tests?
13816 (invoke "pytest" "-vv")))))))
13817 (native-inputs
13818 (list python-pytest
13819 python-pytest-lazy-fixture
13820 python-setuptools-scm))
13821 (propagated-inputs (list python-wcwidth))
13822 (home-page "https://github.com/jazzband/prettytable")
13823 (synopsis "Display tabular data in an ASCII table format")
13824 (description
13825 "A library designed to represent tabular data in visually appealing ASCII
13826tables. PrettyTable allows for selection of which columns are to be printed,
13827independent alignment of columns (left or right justified or centred) and
13828printing of sub-tables by specifying a row range.")
13829 (license license:bsd-3)))
13830
13831(define-public python-rtf-tokenize
13832 (package
13833 (name "python-rtf-tokenize")
13834 (version "1.0.0")
13835 (source (origin
13836 (method url-fetch)
13837 (uri (pypi-uri "rtf_tokenize" version))
13838 (sha256
13839 (base32
13840 "026njb9iwznycda83bln3gfivcnzdz6vy8y86xvbsy84s28g6gaw"))))
13841 (build-system python-build-system)
13842 (native-inputs (list python-pytest))
13843 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
13844 (synopsis "Simple RTF tokenizer")
13845 (description "This package is a simple RTF tokenizer.")
13846 (license license:gpl2+)))
13847
13848(define-public python-curio
13849 (package
13850 (name "python-curio")
13851 (version "1.5")
13852 (source
13853 (origin
13854 (method url-fetch)
13855 (uri (pypi-uri "curio" version))
13856 (sha256
13857 (base32 "045wwg16qadsalhicbv21p14sj8i4w0l57639j7dmdqbb4p2225g"))))
13858 (build-system python-build-system)
13859 (arguments
13860 `(#:phases
13861 (modify-phases %standard-phases
13862 (replace 'check
13863 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
13864 (when tests?
13865 (add-installed-pythonpath inputs outputs)
13866 (invoke "pytest" "-vv" "-k"
13867 (string-append
13868 ;; Tries to open an outgoing connection.
13869 "not test_ssl_outgoing "
13870 ;; This test fails since Python 3.9.9 (see:
13871 ;; https://github.com/dabeaz/curio/issues/347).
13872 "and not test_timeout"))))))))
13873 (native-inputs
13874 (list python-pytest))
13875 (home-page "https://github.com/dabeaz/curio")
13876 (synopsis "Coroutine-based library for concurrent Python")
13877 (description
13878 "Curio is a coroutine-based library for concurrent Python systems
13879programming. It provides standard programming abstractions such as as
13880tasks, sockets, files, locks, and queues.")
13881 (license license:bsd-3)))
13882
13883(define-public python-tables
13884 (package
13885 (name "python-tables")
13886 (version "3.6.1")
13887 (source
13888 (origin
13889 (method url-fetch)
13890 (uri (pypi-uri "tables" version))
13891 (sha256
13892 (base32
13893 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
13894 (modules '((guix build utils)))
13895 (snippet
13896 '(begin
13897 ;; Remove pre-compiled .pyc files from source.
13898 (for-each delete-file-recursively
13899 (find-files "." "__pycache__" #:directories? #t))
13900 (for-each delete-file (find-files "." "\\.pyc$"))
13901 (for-each delete-file
13902 (list "tables/_comp_bzip2.c"
13903 "tables/_comp_lzo.c"
13904 "tables/hdf5extension.c"
13905 "tables/indexesextension.c"
13906 "tables/linkextension.c"
13907 "tables/lrucacheextension.c"
13908 "tables/tableextension.c"
13909 "tables/utilsextension.c"))))))
13910 (build-system python-build-system)
13911 (arguments
13912 (list
13913 #:phases
13914 ;; FIXME: python-build-system does not pass configure-flags to "build"
13915 ;; or "check", so we must override the build and check phases.
13916 #~(modify-phases %standard-phases
13917 (add-after 'unpack 'use-gcc
13918 (lambda _
13919 (substitute* "setup.py"
13920 (("lib_dirs = \\[\\]")
13921 (string-append "lib_dirs = ["
13922 "'" #$(this-package-input "hdf5") "/lib',"
13923 "'" #$(this-package-input "bzip2") "/lib',"
13924 "'" #$(this-package-input "c-blosc") "/lib',"
13925 "]"))
13926 (("^( +)compiler = new_compiler\\(\\)" line indent)
13927 (string-append line
13928 "\n"
13929 indent
13930 "compiler.set_executables(compiler='gcc',"
13931 "compiler_so='gcc',"
13932 "linker_exe='gcc',"
13933 "linker_so='gcc -shared')")))))
13934 (add-after 'unpack 'disable-tuning
13935 (lambda _
13936 (substitute* "setup.py"
13937 (("cpu_flags = .*")
13938 "cpu_flags = ['sse2']\n"))))
13939 (replace 'build
13940 (lambda* (#:key inputs #:allow-other-keys)
13941 (invoke "python" "setup.py" "build"
13942 (string-append "--hdf5="
13943 (assoc-ref inputs "hdf5")))))
13944 (replace 'check
13945 (lambda* (#:key inputs #:allow-other-keys)
13946 (invoke "python" "setup.py" "check"
13947 (string-append "--hdf5="
13948 (assoc-ref inputs "hdf5"))))))))
13949 (propagated-inputs
13950 (list python-numexpr python-numpy))
13951 (native-inputs
13952 (list python-cython pkg-config))
13953 (inputs
13954 (list c-blosc hdf5-1.10 bzip2 lzo zlib))
13955 (home-page "https://www.pytables.org/")
13956 (synopsis "Hierarchical datasets for Python")
13957 (description "PyTables is a package for managing hierarchical datasets and
13958designed to efficiently cope with extremely large amounts of data.")
13959 (license license:bsd-3)))
13960
13961(define-public python-sniffio
13962 (package
13963 (name "python-sniffio")
13964 (version "1.2.0")
13965 (source
13966 (origin
13967 (method url-fetch)
13968 (uri (pypi-uri "sniffio" version))
13969 (sha256
13970 (base32 "1pnkvi6wvn4qd37y69n1ls6n8l63gfmn3pvb1jb50gqxxkn6wrn4"))))
13971 (build-system python-build-system)
13972 (arguments
13973 `(#:phases
13974 (modify-phases %standard-phases
13975 (replace 'check
13976 (lambda _
13977 (invoke "pytest" "-vv"))))))
13978 (native-inputs
13979 (list python-curio python-pytest python-pytest-cov))
13980 (home-page "https://github.com/python-trio/sniffio")
13981 (synopsis "Detect which async library a program is running under")
13982 (description "This package detects which async library a program is
13983running under. It supports multiple async I/O packages, like Trio, and
13984asyncio.")
13985 ;; Either license applies.
13986 (license (list license:expat license:asl2.0))))
13987
13988(define-public python-snuggs
13989 (package
13990 (name "python-snuggs")
13991 (version "1.4.7")
13992 (source (origin
13993 (method url-fetch)
13994 (uri (pypi-uri "snuggs" version))
13995 (sha256
13996 (base32
13997 "0yv1wayrw9g6k0c2f721kha7wsv0s1fdlxpf5x7f34iqzq9z272h"))))
13998 (build-system pyproject-build-system)
13999 (propagated-inputs (list python-numpy python-pyparsing))
14000 (native-inputs (list python-hypothesis python-pytest))
14001 (home-page "https://github.com/mapbox/snuggs")
14002 (synopsis "Snuggs are S-expressions for Numpy")
14003 (description "Snuggs are S-expressions for Numpy.")
14004 (license license:expat)))
14005
14006(define-public python-pytest-black
14007 (package
14008 (name "python-pytest-black")
14009 (version "0.3.12")
14010 (source
14011 (origin
14012 (method url-fetch)
14013 (uri (pypi-uri "pytest-black" version))
14014 (sha256
14015 (base32
14016 "19bmbcnaq02md8nnj6pywri3vps8sxnhysbfy386qkbn9w09ncqx"))))
14017 (build-system python-build-system)
14018 (propagated-inputs
14019 (list python-pytest python-black python-toml))
14020 (native-inputs
14021 (list python-setuptools-scm))
14022 (home-page "https://github.com/shopkeep/pytest-black")
14023 (synopsis "Pytest plugin to enable format checking with black")
14024 (description
14025 "This package provides a pytest plugin to enable format checking with the
14026Python code formatter \"black\".")
14027 (license license:expat)))
14028
14029(define-public python-geojson
14030 (package
14031 (name "python-geojson")
14032 (version "2.5.0")
14033 (source
14034 (origin
14035 (method url-fetch)
14036 (uri (pypi-uri "geojson" version))
14037 (sha256
14038 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
14039 (build-system python-build-system)
14040 (arguments
14041 ;; https://github.com/jazzband/geojson/issues/175
14042 `(#:tests? #f))
14043 (home-page "https://github.com/jazzband/geojson")
14044 (synopsis "Python bindings and utilities for GeoJSON")
14045 (description
14046 "This package provides Python bindings and utilities for
14047@uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
14048structures.")
14049 (license license:bsd-3)))
14050
14051(define-public wfetch
14052 (let ((commit "e1cfa37814aebc9eb56ce994ebe877b6a6f9a715")
14053 (revision "1"))
14054 (package
14055 (name "wfetch")
14056 (version (git-version "0.1-pre" revision commit))
14057 (home-page "https://github.com/Gcat101/Wfetch")
14058 (source
14059 (origin
14060 (method git-fetch)
14061 (uri (git-reference (url home-page)
14062 (commit commit)))
14063 (file-name (git-file-name name version))
14064 (sha256
14065 (base32 "1dmr85plx8zr6s14ym3r32g6crwxghkval5a24ah90ijx4dbn5q5"))))
14066 (build-system python-build-system)
14067 (arguments
14068 `(#:use-setuptools? #f ; no setup.py
14069 #:tests? #f ; no test suite
14070 #:phases
14071 (modify-phases %standard-phases
14072 (delete 'build)
14073 (replace 'install
14074 (lambda* (#:key outputs #:allow-other-keys)
14075 (let* ((out (assoc-ref outputs "out"))
14076 (bin (string-append out "/bin"))
14077 (share (string-append out "/share")))
14078 (mkdir-p share)
14079 (substitute* "wfetch/wfetch.py"
14080 (("os.sep, 'opt', 'wfetch'") (string-append "'" share "'")))
14081 (install-file "wfetch/wfetch.py" bin)
14082 (copy-recursively "wfetch/icons" share)))))))
14083 (inputs (list python-pyowm python-fire python-termcolor python-requests))
14084 (synopsis "Command-line tool to display weather info")
14085 (description
14086 "This package provides a tool similar to Neofetch/pfetch, but for
14087weather: it can display the weather condition, temperature, humidity, etc.
14088
14089To use it, you must first run:
14090
14091@example
14092export WEATHER_CLI_API=@var{your OpenWeatherMap API key}
14093@end example\n")
14094 (license license:gpl3+))))
14095
14096(define-public python-get-version
14097 (package
14098 (name "python-get-version")
14099 (version "2.1")
14100 (source
14101 (origin
14102 (method url-fetch)
14103 (uri (pypi-uri "get_version" version))
14104 (sha256
14105 (base32
14106 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
14107 (build-system python-build-system)
14108 (propagated-inputs
14109 (list python-pygments
14110 python-pytest
14111 python-pytest-black
14112 python-pytest-cov
14113 python-setuptools
14114 python-testpath))
14115 (home-page "https://github.com/flying-sheep/get_version")
14116 (synopsis "Version helper in the spirit of versioneer")
14117 (description
14118 "This package provides a version helper that lets you automatically use
14119the latest @code{vX.X.X} Git tag as the version in your Python package. It
14120also supports getting the version from Python source distributions or, once
14121your package is installed, via @code{pkg_resources} (part of
14122@code{setuptools}).")
14123 (license license:gpl3+)))
14124
14125(define-public python-filetype
14126 (package
14127 (name "python-filetype")
14128 (version "1.0.8")
14129 (source
14130 (origin
14131 (method url-fetch)
14132 (uri (pypi-uri "filetype" version))
14133 (sha256
14134 (base32 "05mkinkcn36v1cnb5hzay3zxmv7jmmflckxxp08rgzbkkf3i9pvp"))))
14135 (build-system python-build-system)
14136 (arguments
14137 `(#:phases
14138 (modify-phases %standard-phases
14139 (replace 'check
14140 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
14141 (when tests?
14142 (add-installed-pythonpath inputs outputs)
14143 (invoke "python" "-m" "pytest" "-k"
14144 (string-append
14145 ;; Both tests fail with FileNotFoundError.
14146 "not test_infer_zip_from_disk"
14147 " and not test_infer_tar_from_disk"))))))))
14148 (native-inputs
14149 (list python-pytest python-pytest-benchmark))
14150 (home-page "https://github.com/h2non/filetype.py")
14151 (synopsis "Infer file type and MIME type of any file/buffer")
14152 (description "@code{filetype} is a small and dependency free Python
14153package to infer file type and MIME type checking the magic numbers
14154signature of a file or buffer.")
14155 (license license:expat)))
14156
14157(define-public python-cachelib
14158 (package
14159 (name "python-cachelib")
14160 (version "0.4.1")
14161 (source
14162 (origin
14163 (method url-fetch)
14164 (uri (pypi-uri "cachelib" version))
14165 (sha256
14166 (base32 "0p4chkvbvffcllsny5rpzmsq2vyr24ql3kzif4ha0fxp3fp7vqk8"))))
14167 (build-system python-build-system)
14168 (arguments
14169 `(#:phases
14170 (modify-phases %standard-phases
14171 (replace 'check
14172 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
14173 (when tests?
14174 (add-installed-pythonpath inputs outputs)
14175 (invoke "pytest")))))))
14176 (native-inputs
14177 (list python-pytest python-pytest-xprocess))
14178 (home-page "https://github.com/pallets/cachelib")
14179 (synopsis "Collection of cache libraries")
14180 (description "Cachelib is a library extracted from @code{werkzeug} which
14181provides a collection of cache libraries in the same API interface.")
14182 (license license:bsd-3)))
14183
14184(define-public python-pylru
14185 (package
14186 (name "python-pylru")
14187 (version "1.2.0")
14188 (source
14189 (origin
14190 (method url-fetch)
14191 (uri (pypi-uri "pylru" version))
14192 (sha256
14193 (base32 "15yj46307sw703vjfkgnr04dqvaicmfcj0hc6yrciildp55r6bs9"))))
14194 (build-system python-build-system)
14195 (arguments
14196 `(#:phases
14197 (modify-phases %standard-phases
14198 (replace 'check
14199 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
14200 (when tests?
14201 (add-installed-pythonpath inputs outputs)
14202 (invoke "python" "test.py")))))))
14203 (home-page "https://github.com/jlhutch/pylru")
14204 (synopsis "Least recently used (LRU) cache implementation")
14205 (description
14206 "Pylru implements a true LRU cache along with several support classes.
14207Pylru provides a cache class with a simple dict interface. It also provides
14208classes to wrap any object that has a dict interface with a cache. Both
14209write-through and write-back semantics are supported. Pylru also provides
14210classes to wrap functions in a similar way, including a function decorator.")
14211 (license license:gpl2+)))
14212
14213(define-public python-legacy-api-wrap
14214 (package
14215 (name "python-legacy-api-wrap")
14216 (version "1.2")
14217 (source
14218 (origin
14219 (method url-fetch)
14220 (uri (pypi-uri "legacy-api-wrap" version))
14221 (sha256
14222 (base32
14223 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
14224 (build-system python-build-system)
14225 (propagated-inputs
14226 (list python-get-version python-pytest python-pytest-black
14227 python-pytest-cov python-setuptools))
14228 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
14229 (synopsis "Legacy API wrapper")
14230 (description "This module defines a decorator to wrap legacy APIs. The
14231primary use case is APIs defined before keyword-only parameters existed.")
14232 (license license:gpl3+)))
14233
14234(define-public python-langdetect
14235 (package
14236 (name "python-langdetect")
14237 (version "1.0.9")
14238 (source
14239 (origin
14240 (method url-fetch)
14241 (uri (pypi-uri "langdetect" version))
14242 (sha256
14243 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
14244 (build-system python-build-system)
14245 (propagated-inputs
14246 (list python-six))
14247 (home-page "https://github.com/Mimino666/langdetect")
14248 (synopsis "Language detection library")
14249 (description
14250 "This library is a port of Nakatani Shuyo's language-detection library
14251(version from 03/03/2014) to Python.")
14252 (license license:expat)))
14253
14254(define-public python-pyasn1
14255 (package
14256 (name "python-pyasn1")
14257 (version "0.4.8")
14258 (source
14259 (origin
14260 (method url-fetch)
14261 (uri (pypi-uri "pyasn1" version))
14262 (sha256
14263 (base32
14264 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
14265 (build-system python-build-system)
14266 (home-page "https://pyasn1.sourceforge.net/")
14267 (synopsis "ASN.1 types and codecs")
14268 (description
14269 "This is an implementation of ASN.1 types and codecs in Python. It is
14270suitable for a wide range of protocols based on the ASN.1 specification.")
14271 (license license:bsd-2)))
14272
14273(define-public python-pyasn1-modules
14274 (package
14275 (name "python-pyasn1-modules")
14276 (version "0.2.8")
14277 (source
14278 (origin
14279 (method url-fetch)
14280 (uri (pypi-uri "pyasn1-modules" version))
14281 (sha256
14282 (base32
14283 "0pp6dcagd8c2c9qx3lahc1rdwlnmm0y0siqr5icjq2r32b3q8pwh"))))
14284 (build-system python-build-system)
14285 (propagated-inputs
14286 (list python-pyasn1))
14287 (home-page "https://sourceforge.net/projects/pyasn1/")
14288 (synopsis "ASN.1 codec implementations")
14289 (description
14290 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
14291implementations of ASN.1-based codecs and protocols.")
14292 (license license:bsd-3)))
14293
14294(define-public python-ipaddress
14295 (package
14296 (name "python-ipaddress")
14297 (version "1.0.23")
14298 (source (origin
14299 (method url-fetch)
14300 (uri (pypi-uri "ipaddress" version))
14301 (sha256
14302 (base32
14303 "1qp743h30s04m3cg3yk3fycad930jv17q7dsslj4mfw0jlvf1y5p"))))
14304 (build-system python-build-system)
14305 (home-page "https://github.com/phihag/ipaddress")
14306 (synopsis "IP address manipulation library")
14307 (description
14308 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
14309 in Python. This library is used to create, poke at, and manipulate IPv4 and
14310 IPv6 addresses and networks.")
14311 (license license:psfl)))
14312
14313(define-public python-asn1tools
14314 (package
14315 (name "python-asn1tools")
14316 (version "0.166.0")
14317 (source
14318 (origin
14319 (method url-fetch)
14320 (uri (pypi-uri "asn1tools" version))
14321 (sha256
14322 (base32 "1hragm8dsm10rlyz67xslj01bycprlnimdmq1i2acns6kl6difpn"))))
14323 (build-system python-build-system)
14324 (propagated-inputs
14325 (list python-bitstruct python-diskcache python-prompt-toolkit
14326 python-pyparsing))
14327 (home-page "https://github.com/eerimoq/asn1tools")
14328 (synopsis "ASN.1 parsing, encoding and decoding")
14329 (description "This package provides ASN.1 parsing, encoding and decoding
14330for Python, including constraints checking. It supports several
14331codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
14332for OER and UPER.")
14333 (license license:expat)))
14334
14335(define-public python-idna
14336 (package
14337 (name "python-idna")
14338 (version "3.3")
14339 (source
14340 (origin
14341 (method url-fetch)
14342 (uri (pypi-uri "idna" version))
14343 (sha256
14344 (base32
14345 "0v8f6qjfi5i7qc5icsbv2pi24qy6k6m8wjqjvdf2sxjvlpq3yr4x"))))
14346 (build-system python-build-system)
14347 (home-page "https://github.com/kjd/idna")
14348 (synopsis "Internationalized domain names in applications")
14349 (description
14350 "This is a library to support the Internationalised Domain Names in
14351Applications (IDNA) protocol as specified in RFC 5891. This version of the
14352protocol is often referred to as “IDNA2008” and can produce different results
14353from the earlier standard from 2003. The library is also intended to act as a
14354suitable drop-in replacement for the “encodings.idna” module that comes with
14355the Python standard library but currently only supports the older 2003
14356specification.")
14357 (license license:bsd-4)))
14358
14359(define-public python-libsass
14360 (package
14361 (name "python-libsass")
14362 (version "0.20.1")
14363 (source
14364 (origin
14365 ;; PyPI tarball is missing some test files.
14366 (method git-fetch)
14367 (uri (git-reference
14368 (url "https://github.com/sass/libsass-python")
14369 (commit version)))
14370 (file-name (git-file-name name version))
14371 (sha256
14372 (base32 "1r0kgl7i6nnhgjl44sjw57k08gh2qr7l8slqih550dyxbf1akbxh"))))
14373 (build-system python-build-system)
14374 (arguments
14375 '(#:phases
14376 (modify-phases %standard-phases
14377 ;; Use Guix package of libsass instead of compiling from a checkout.
14378 (add-before 'build 'set-libsass
14379 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
14380 (replace 'check
14381 (lambda* (#:key tests? #:allow-other-keys)
14382 (when tests?
14383 (invoke "pytest" "sasstests.py"))))
14384 (add-after 'install 'delete-test
14385 (lambda* (#:key inputs outputs #:allow-other-keys)
14386 ;; Delete sasstests.py because it attempts to open a file
14387 ;; that is not installed when loaded, which breaks the sanity
14388 ;; check.
14389 (delete-file (string-append
14390 (assoc-ref outputs "out")
14391 "/lib/python"
14392 (python-version
14393 (dirname (dirname
14394 (search-input-file inputs "bin/python"))))
14395 "/site-packages/sasstests.py")))))))
14396 (native-inputs
14397 (list python-pytest python-werkzeug))
14398 (inputs
14399 (list libsass))
14400 (propagated-inputs
14401 (list python-six))
14402 (home-page "https://sass.github.io/libsass-python/")
14403 (synopsis "Straightforward binding of libsass for Python")
14404 (description
14405 "This package provides a simple Python extension module @code{sass} which
14406is binding LibSass.")
14407 (license license:expat)))
14408
14409(define-public python-idna-ssl
14410 (package
14411 (name "python-idna-ssl")
14412 (version "1.0.1")
14413 (source
14414 (origin
14415 (method url-fetch)
14416 (uri (pypi-uri "idna-ssl" version))
14417 (sha256
14418 (base32
14419 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
14420 (build-system python-build-system)
14421 (arguments
14422 `(#:tests? #f)) ;circular dependency with python-aiohttp
14423 (propagated-inputs (list python-idna))
14424 (home-page "https://github.com/aio-libs/idna-ssl")
14425 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
14426 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
14427domains support.")
14428 (license license:expat)))
14429
14430;;; Variant used to break a cycle with python-pip-run-bootstrap.
14431(define-public python-path-bootstrap
14432 (hidden-package
14433 (package
14434 (name "python-path-bootstrap")
14435 (version "16.4.0")
14436 (source
14437 (origin
14438 (method url-fetch)
14439 (uri (pypi-uri "path" version))
14440 (sha256
14441 (base32 "0lig13gxnfv98v790db1smvsbd3mnj7y8rwyiwhfi6xiqibygwms"))))
14442 (build-system pyproject-build-system)
14443 (arguments
14444 (list #:tests? #f))
14445 (native-inputs (list python-setuptools-scm))
14446 (home-page "https://github.com/jaraco/path")
14447 (synopsis "Object-oriented file system path manipulation library")
14448 (description "@code{path} (formerly @code{path.py}) implements path
14449objects as first-class entities, allowing common operations on files to be
14450invoked on those path objects directly.")
14451 (license license:expat))))
14452
14453(define-public python-path
14454 (package/inherit python-path-bootstrap
14455 (name "python-path")
14456 (arguments
14457 (substitute-keyword-arguments
14458 (package-arguments python-path-bootstrap)
14459 ((#:tests? _ #f)
14460 (not (%current-target-system)))
14461 ((#:test-flags flags #~'())
14462 #~(append (list "-k"
14463 (string-append
14464 ;; Do not test the myproject.toml build as it tries
14465 ;; to pull dependencies from the Internet.
14466 "not project "
14467 ;; This tests assumes a root user exists.
14468 "and not test_get_owner"))
14469 #$flags))))
14470 (native-inputs
14471 (modify-inputs (package-native-inputs python-path-bootstrap)
14472 (append python-appdirs
14473 python-packaging
14474 python-pygments
14475 python-pytest
14476 python-pytest-black
14477 python-pytest-checkdocs
14478 python-pytest-cov
14479 python-pytest-enabler
14480 python-pytest-flake8
14481 python-pytest-mypy)))
14482 (properties (alist-delete 'hidden?
14483 (package-properties
14484 python-path-bootstrap)))))
14485
14486(define-public python-pathpy
14487 (deprecated-package "python-pathpy" python-path))
14488
14489(define-public python-pretend
14490 (package
14491 (name "python-pretend")
14492 (version "1.0.9")
14493 (source
14494 (origin
14495 (method url-fetch)
14496 (uri (pypi-uri "pretend" version))
14497 (sha256
14498 (base32
14499 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
14500 (build-system python-build-system)
14501 (home-page "https://github.com/alex/pretend")
14502 (synopsis "Library for stubbing in Python")
14503 (description
14504 "Pretend is a library to make stubbing with Python easier. Stubbing is a
14505technique for writing tests. You may hear the term mixed up with mocks,
14506fakes, or doubles. Basically, a stub is an object that returns pre-canned
14507responses, rather than doing any computation.")
14508 (license license:bsd-3)))
14509
14510;;; Variant used to break a dependency cycle with
14511;;; python-pytest-perf-bootstrap.
14512(define-public python-pip-run-bootstrap
14513 (hidden-package
14514 (package
14515 (name "python-pip-run-bootstrap")
14516 (version "8.8.0")
14517 (source (origin
14518 (method git-fetch)
14519 (uri (git-reference
14520 (url "https://github.com/jaraco/pip-run")
14521 (commit (string-append "v" version))))
14522 (file-name (git-file-name name version))
14523 (sha256
14524 (base32
14525 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
14526 (build-system python-build-system)
14527 (arguments
14528 (list
14529 #:tests? #f
14530 #:phases
14531 #~(modify-phases %standard-phases
14532 (add-before 'build 'pretend-version
14533 ;; The version string is usually derived via setuptools-scm, but
14534 ;; without the git metadata available this fails.
14535 (lambda _
14536 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
14537 (native-inputs (list python-setuptools-scm))
14538 (propagated-inputs (list python-autocommand python-path-bootstrap
14539 python-packaging))
14540 (home-page "https://github.com/jaraco/pip-run")
14541 (synopsis "Dynamic dependency loader for Python")
14542 (description "The @command{pip-run} command provides on-demand temporary
14543package installation for a single interpreter run. It replaces this series of
14544commands:
14545@example
14546$ virtualenv --python pythonX.X --system-site-packages /tmp/env
14547$ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
14548$ /tmp/env/bin/python ...
14549$ rm -rf /tmp/env
14550@end example")
14551 (license license:expat))))
14552
14553(define-public python-pip-run
14554 (package/inherit python-pip-run-bootstrap
14555 (name "python-pip-run")
14556 (arguments
14557 (substitute-keyword-arguments (package-arguments python-pip-run-bootstrap)
14558 ((#:tests? _ #f)
14559 (not (%current-target-system)))
14560 ((#:phases phases #~%standard-phases)
14561 #~(modify-phases #$phases
14562 (replace 'check
14563 (lambda* (#:key tests? #:allow-other-keys)
14564 (when tests?
14565 (invoke "pytest" "-k"
14566 (string-append
14567 ;; Do not test the myproject.toml build as it tries
14568 ;; to pull dependencies from the internet.
14569 "not project "
14570 ;; These tests attempt to install dependencies from
14571 ;; the network and fail.
14572 "and not test_pkg_imported "
14573 "and not test_pkg_loaded_from_alternate_index ")))))))))
14574 (propagated-inputs
14575 (modify-inputs (package-propagated-inputs python-pip-run-bootstrap)
14576 (replace "python-path-bootstrap" python-path)))
14577 (native-inputs
14578 (modify-inputs (package-native-inputs python-pip-run-bootstrap)
14579 (append python-nbformat
14580 python-pygments
14581 python-pytest
14582 python-pytest-black
14583 python-pytest-checkdocs
14584 python-pytest-cov
14585 python-pytest-enabler
14586 python-pytest-flake8
14587 python-pytest-mypy)))
14588 (properties (alist-delete 'hidden? (package-properties
14589 python-pip-run-bootstrap)))))
14590
14591(define-public python-tlsh
14592 (package
14593 (name "python-tlsh")
14594 (version "4.11.2")
14595 (home-page "https://github.com/trendmicro/tlsh")
14596 (source
14597 (origin
14598 (method git-fetch)
14599 (uri (git-reference (url home-page) (commit version)))
14600 (file-name (git-file-name name version))
14601 (sha256
14602 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
14603 (build-system python-build-system)
14604 (arguments
14605 (list #:phases
14606 #~(modify-phases %standard-phases
14607 (add-before 'build 'configure
14608 (lambda _
14609 (invoke "cmake" "."))) ;to generate tlsh_version.h
14610 (add-after 'configure 'chdir
14611 (lambda _
14612 (chdir "py_ext")))
14613 (replace 'check
14614 (lambda* (#:key tests? #:allow-other-keys)
14615 (when tests?
14616 (with-directory-excursion "../Testing"
14617 (invoke "./python_test.sh"))))))))
14618 (native-inputs (list cmake-minimal))
14619 (synopsis "Fuzzy matching library for Python")
14620 (description
14621 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
14622Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
14623value which can be used for similarity comparisons. Similar objects have
14624similar hash values, which allows for the detection of similar objects by
14625comparing their hash values. The byte stream should have a sufficient amount
14626of complexity; for example, a byte stream of identical bytes will not generate
14627a hash value.")
14628 (license license:asl2.0)))
14629
14630(define-public python-termcolor
14631 (package
14632 (name "python-termcolor")
14633 (version "1.1.0")
14634 (source
14635 (origin
14636 (method url-fetch)
14637 (uri (pypi-uri "termcolor" version))
14638 (sha256
14639 (base32
14640 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
14641 (build-system python-build-system)
14642 (arguments
14643 ;; There are no tests.
14644 `(#:tests? #f))
14645 (home-page "https://pypi.org/project/termcolor/")
14646 (synopsis "ANSII Color formatting for terminal output")
14647 (description
14648 "This package provides ANSII Color formatting for output in terminals.")
14649 (license license:expat)))
14650
14651(define-public python-terminaltables
14652 (package
14653 (name "python-terminaltables")
14654 (version "3.1.0")
14655 (source
14656 (origin
14657 (method url-fetch)
14658 (uri (pypi-uri "terminaltables" version))
14659 (sha256
14660 (base32
14661 "109vhldk6nv1z3hzp4dyqf6rjvlhl0y2k5k7qcm9fcrq5swhxszk"))))
14662 (build-system python-build-system)
14663 (home-page "https://github.com/Robpol86/terminaltables")
14664 (synopsis
14665 "Generate simple tables in terminals from a nested list of strings")
14666 (description
14667 "This package makes it easy to draw tables in terminal/console
14668applications from a list of lists of strings. It supports multi-line rows.")
14669 (license license:expat)))
14670
14671(define-public python-libarchive-c
14672 (package
14673 (name "python-libarchive-c")
14674 (version "2.9")
14675 (source (origin
14676 (method url-fetch)
14677 (uri (pypi-uri "libarchive-c" version))
14678 (sha256
14679 (base32
14680 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
14681 (build-system python-build-system)
14682 (arguments
14683 '(#:phases (modify-phases %standard-phases
14684 (add-before
14685 'build 'reference-libarchive
14686 (lambda* (#:key inputs #:allow-other-keys)
14687 ;; Retain the absolute file name of libarchive.so.
14688 (let ((libarchive (assoc-ref inputs "libarchive")))
14689 (substitute* "libarchive/ffi.py"
14690 (("find_library\\('archive'\\)")
14691 (string-append "'" libarchive
14692 "/lib/libarchive.so'"))))))
14693 (replace 'check
14694 (lambda _ (invoke "pytest" "-vv"))))))
14695 (native-inputs
14696 (list python-mock python-pytest))
14697 (inputs
14698 (list libarchive))
14699 (home-page "https://github.com/Changaco/python-libarchive-c")
14700 (synopsis "Python interface to libarchive")
14701 (description
14702 "This package provides Python bindings to libarchive, a C library to
14703access possibly compressed archives in many different formats. It uses
14704Python's @code{ctypes} foreign function interface (FFI).")
14705 (license license:lgpl2.0+)))
14706
14707(define-public python-file
14708 (package/inherit file
14709 (name "python-file")
14710 (build-system python-build-system)
14711 (arguments
14712 '(#:tests? #f ;no tests
14713 #:configure-flags '("--single-version-externally-managed" "--root=/")
14714 #:phases (modify-phases %standard-phases
14715 (add-before 'build 'change-directory
14716 (lambda _
14717 (chdir "python")
14718 #t))
14719 (add-before 'build 'set-library-file-name
14720 (lambda* (#:key inputs #:allow-other-keys)
14721 (let ((file (assoc-ref inputs "file")))
14722 (substitute* "magic.py"
14723 (("find_library\\('magic'\\)")
14724 (string-append "'" file "/lib/libmagic.so'")))
14725 #t))))))
14726 (inputs `(("file" ,file)))
14727 (native-inputs (if (%current-target-system)
14728 `(("self" ,this-package))
14729 '()))
14730 (synopsis "Python bindings to the libmagic file type guesser")
14731 (description "This package provides Python bindings to the libmagic file
14732type guesser.
14733
14734Note that this module and the @code{python-magic} module both provide a
14735@file{magic.py} file; these two modules, which are different and were
14736developed separately, both serve the same purpose: provide Python bindings for
14737libmagic.")))
14738
14739(define-public python-pydevd
14740 ;; Use the latest commit, which includes cleanups that removes Python 2
14741 ;; syntax that would fail to build.
14742 (let ((revision "0")
14743 (commit "47e298499ef19563bb2ef5941a57046a35ae6868"))
14744 (package
14745 (name "python-pydevd")
14746 (version (git-version "2.8.0" revision commit))
14747 (source
14748 (origin
14749 (method git-fetch)
14750 (uri (git-reference
14751 (url "https://github.com/fabioz/PyDev.Debugger")
14752 (commit commit)))
14753 (modules '((guix build utils)))
14754 (snippet '(begin
14755 ;; Delete pre-built binaries.
14756 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
14757 ;; This source is generated via Cython.
14758 (delete-file "_pydevd_bundle/pydevd_cython.c")))
14759 (file-name (git-file-name name version))
14760 (sha256
14761 (base32
14762 "1yd017dh6xgxrqcyf8kk8jrr0a3zw895yfjih0z5jghyf0rck38q"))))
14763 (build-system python-build-system)
14764 (arguments
14765 (list
14766 #:phases
14767 #~(modify-phases %standard-phases
14768 (add-after 'unpack 'fix-tests
14769 (lambda _
14770 (substitute* "tests_python/test_convert_utilities.py"
14771 ;; Add missing trailing '/'.
14772 (("'\\\\\\\\usr\\\\\\\\bin\\\\\\\\') == '/usr/bin" all)
14773 (string-append all "/")))))
14774 (add-after 'unpack 'patch-command-paths
14775 (lambda* (#:key inputs #:allow-other-keys)
14776 (substitute* "_pydevd_bundle/pydevd_api.py"
14777 (("'kill'")
14778 (format #f "~s" (search-input-file inputs "bin/kill")))
14779 (("'pgrep'")
14780 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
14781 (add-after 'unpack 'generate-sources
14782 (lambda _
14783 (setenv "PYTHONPATH" (getcwd))
14784 (invoke "python" "build_tools/build.py")))
14785 (add-after 'unpack 'adjust-attach-binary-name
14786 (lambda _
14787 (substitute*
14788 '("pydevd_tracing.py"
14789 "pydevd_attach_to_process/add_code_to_python_process.py")
14790 (("def get_(target|python_helper_lib)_filename.*" all)
14791 (format #f "~a return ~s~%" all
14792 (string-append #$output "/lib/attach.so"))))))
14793 (add-after 'unpack 'patch-gdb
14794 (lambda* (#:key inputs #:allow-other-keys)
14795 (substitute*
14796 "pydevd_attach_to_process/add_code_to_python_process.py"
14797 (("'gdb',")
14798 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
14799 (add-after 'build 'build-attach-linux-binary
14800 (lambda _
14801 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
14802 "-fPIC" "-nostartfiles"
14803 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
14804 (replace 'check
14805 (lambda* (#:key tests? #:allow-other-keys)
14806 (when tests?
14807 (setenv "PYDEVD_USE_CYTHON" "YES")
14808 (invoke "pytest" "-vv"
14809 "-n" (number->string (parallel-job-count))
14810 "-k"
14811 (string-append
14812 ;; The two "break_01" tests have been failing on
14813 ;; Python 3.10:
14814 ;; <https://github.com/fabioz/PyDev.Debugger/issues/222>.
14815 "not test_set_pydevd_break_01 "
14816 ;; This one fails for unknown reasons.
14817 "and not test_completion_sockets_and_messages "
14818 ;; the GUI event loop requires an X server.
14819 "and not test_gui_event_loop_custom "
14820 ;; This test validates that 'pydevd' is not in the
14821 ;; exception message, but it is due to being part
14822 ;; of the build file name present in the message.
14823 "and not test_evaluate_exception_trace "
14824 ;; These fail on systems with YAMA LSM’s ptrace
14825 ;; scope > 0. Upstream issue:
14826 ;; https://github.com/fabioz/PyDev.Debugger/issues/218
14827 "and not test_attach_to_pid")))))
14828 (add-after 'install 'install-attach-binary
14829 (lambda _
14830 (install-file "attach.so"
14831 (string-append #$output "/lib"))))
14832 ;; Some modules aren't designed to be loadable by themselves, such
14833 ;; as 'pydev_app_engine_debug_startup' and fail.
14834 (delete 'sanity-check))))
14835 (native-inputs
14836 (list python-cython
14837 python-numpy
14838 python-psutil
14839 python-pytest
14840 python-pytest-xdist
14841 python-trio
14842 python-untangle))
14843 (inputs (list coreutils gdb procps))
14844 (home-page "https://github.com/fabioz/PyDev.Debugger/")
14845 (synopsis "Python debugger")
14846 (description "PyDev.Debugger is a capable Python debugger used in PyDev
14847and other @acronym{IDEs, Integrated Development Environments}.")
14848 (license license:epl1.0))))
14849
14850(define-public python-debugpy
14851 (package
14852 (name "python-debugpy")
14853 (version "1.6.0")
14854 (source
14855 (origin
14856 (method git-fetch)
14857 (uri (git-reference ;no tests in PyPI archive
14858 (url "https://github.com/microsoft/debugpy")
14859 (commit (string-append "v" version))))
14860 (file-name (git-file-name name version))
14861 (modules '((guix build utils)))
14862 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
14863 ;; attach binary.
14864 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
14865 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
14866 (sha256
14867 (base32
14868 "1dpfzs3p51648i7f3fz8dw5d0vrj39iwn1jhn0226idc02ybyqih"))))
14869 (build-system python-build-system)
14870 (arguments
14871 (list
14872 #:tests? #f ; Fail on systems with YAMA LSM’s ptrace scope > 0.
14873 #:phases
14874 #~(modify-phases %standard-phases
14875 (add-after 'unpack 'patch-sh-in-tests
14876 (lambda _
14877 (substitute* "tests/debugpy/test_run.py"
14878 (("#!/bin/sh")
14879 (string-append "#!" (which "sh"))))))
14880 (add-after 'unpack 'fix-version
14881 ;; Versioneer is useless when there is no git metadata.
14882 (lambda _
14883 (substitute* "setup.py"
14884 (("version=versioneer.get_version\\(),")
14885 (format #f "version=~s," #$version)))))
14886 (add-before 'build 'configure
14887 (lambda _
14888 ;; This adjusts the behavior of debugpy to load pydevd from
14889 ;; Python site packages.
14890 (setenv "DEBUGPY_BUNDLING_DISABLED" "1")))
14891 (replace 'check
14892 (lambda* (#:key tests? #:allow-other-keys)
14893 (when tests?
14894 (invoke "pytest" "-vv"
14895 "-n" (number->string (parallel-job-count))
14896 "-k"
14897 (string-append
14898 ;; These tests cannot be run in parallel because their
14899 ;; test data would not be copied by xdist and lead to
14900 ;; import errors. (see:
14901 ;; https://github.com/microsoft/debugpy/issues/342 and
14902 ;; https://github.com/microsoft/debugpy/issues/880).
14903 "not test_custom_python_args "
14904 "and not test_autokill "))))))))
14905 (native-inputs
14906 ;; See: https://raw.githubusercontent.com/microsoft/debugpy/
14907 ;; main/tests/requirements.txt.
14908 (list python-django
14909 python-gevent
14910 python-flask
14911 python-psutil
14912 python-pytest
14913 python-pytest-cov
14914 python-pytest-timeout
14915 python-pytest-xdist
14916 python-requests))
14917 (propagated-inputs (list python-pydevd))
14918 (home-page "https://aka.ms/debugpy")
14919 (synopsis "Debug Adapter Protocol Python implementation")
14920 (description "An implementation of the Debug Adapter Protocol for
14921Python.")
14922 (license license:expat)))
14923
14924(define-public python-debian
14925 (package
14926 (name "python-debian")
14927 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
14928 (version "0.1.49")
14929 (source
14930 (origin
14931 ;; Use git-fetch, as pypi doesn't include test suite.
14932 (method git-fetch)
14933 (uri (git-reference
14934 (url home-page)
14935 (commit version)))
14936 (file-name (git-file-name name version))
14937 (sha256
14938 (base32
14939 "190vy2ns0650icpwvv4qp6kr3c3i9jszy1vkdwpigxb96fs1bqf3"))
14940 (modules '((guix build utils)))
14941 (snippet
14942 #~(begin
14943 ;; python-apt, apt and dpkg are not yet available in guix,
14944 ;; and these tests heavily depend on them.
14945 (for-each delete-file
14946 '("lib/debian/tests/test_deb822.py"
14947 "lib/debian/tests/test_debfile.py"))
14948
14949 ;; for reproducible builds, otherwise python-debian
14950 ;; generates a _version.py including the date
14951 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
14952 (substitute* "lib/debian/_version.py"
14953 (("__CHANGELOG_VERSION__") #$version))))))
14954 (build-system python-build-system)
14955 (native-inputs
14956 (list python-pytest))
14957 (propagated-inputs
14958 (list python-six python-chardet))
14959 (synopsis "Debian package related modules")
14960 (description
14961 "This package provides Python modules that abstract many formats of
14962Debian-related files, such as:
14963@itemize
14964@item Debtags information;
14965@item @file{debian/changelog} files;
14966@item packages files, pdiffs;
14967@item control files of single or multiple RFC822-style paragraphs---e.g.
14968 @file{debian/control}, @file{.changes}, @file{.dsc};
14969@item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
14970 contained files and meta-information.
14971@end itemize")
14972 ;; Modules are either GPLv2+ or GPLv3+.
14973 (license license:gpl3+)))
14974
14975(define-public python-json-spec
14976 (package
14977 (name "python-json-spec")
14978 (version "0.11.0")
14979 (source
14980 (origin
14981 (method url-fetch)
14982 (uri (pypi-uri "json_spec" version))
14983 (sha256
14984 (base32
14985 "0fwxirzxx5s9l0lwnjl6ki39xw1fsjm0vr6cm67ws27fkmcxcry7"))))
14986 (build-system python-build-system)
14987 (propagated-inputs
14988 (list python-importlib-metadata
14989 python-termcolor))
14990 (native-inputs
14991 (list python-pytest))
14992 (home-page "https://json-spec.readthedocs.io/")
14993 (synopsis
14994 "JSON Schema, JSON Pointer and JSON Reference for Python")
14995 (description
14996 "This Python library implements several JSON specs, like JSON Schema,
14997JSON Reference and JSON Pointer.")
14998 (license license:bsd-3)))
14999
15000(define-public python-fastbencode
15001 (package
15002 (name "python-fastbencode")
15003 (version "0.0.7")
15004 (source
15005 (origin
15006 (method url-fetch)
15007 (uri (pypi-uri "fastbencode" version))
15008 (modules '((guix build utils)))
15009 ;; Delete pre-generated Cython C files.
15010 (snippet '(for-each delete-file (find-files "." "\\.c$")))
15011 (sha256
15012 (base32 "1r66w3vpmvfmssshjpgqaj2m14c8p94nymr96mwn61idajz9mg5n"))))
15013 (build-system python-build-system)
15014 (native-inputs (list python-cython))
15015 (home-page "https://github.com/breezy-team/fastbencode")
15016 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
15017 (description
15018 "The fastbencode Python package implements the bencode serialization
15019format for storing and transmitting loosely structured data, originally used
15020by BitTorrent.
15021
15022The format can encode four different types of values: byte strings, integers,
15023lists, and dictionaries (associative arrays). It's simple and unaffected by
15024endianness,
15025
15026This package includes both a pure-Python version and an optional C extension
15027based on Cython. Both provide the same functionality, but the C version has
15028significantly better performance.")
15029 (license (list license:expat ; _bencode_py.py
15030 license:gpl2+)))) ; __init__.py
15031
15032(define-public python-fastjsonschema
15033 (package
15034 (name "python-fastjsonschema")
15035 (version "2.15.1")
15036 (source
15037 (origin
15038 (method url-fetch)
15039 (uri (pypi-uri "fastjsonschema" version))
15040 (sha256
15041 (base32 "1ln2j60jzyn6p8i8ljygfgrji58hc23452g7nllkcjdk4p93c7v7"))))
15042 (build-system pyproject-build-system)
15043 (arguments `(#:tests? #f)) ;no tests included
15044 (native-inputs
15045 (list python-colorama
15046 python-json-spec
15047 python-jsonschema
15048 python-pylint
15049 python-pytest
15050 python-pytest-benchmark
15051 python-pytest-cache))
15052 (home-page
15053 "https://github.com/horejsek/python-fastjsonschema")
15054 (synopsis
15055 "Fast Python implementation of JSON schema")
15056 (description
15057 "This library implements validation of JSON documents by JSON schema for
15058drafts 04, 06 and 07.")
15059 (license license:bsd-3)))
15060
15061(define-public python-nbformat
15062 (package
15063 (name "python-nbformat")
15064 (version "5.3.0")
15065 ;; The PyPi release tarball lacks some test cases and test data.
15066 (source (origin
15067 (method git-fetch)
15068 (uri (git-reference
15069 (url "https://github.com/jupyter/nbformat")
15070 (commit version)))
15071 (sha256
15072 (base32
15073 "114c5c6cvpxhxj8zrw74351gcfzyzjh1jq3py4xf8wk9rahfay9z"))
15074 (file-name (git-file-name name version))))
15075 (build-system python-build-system)
15076 (arguments
15077 `(#:phases
15078 (modify-phases %standard-phases
15079 (replace 'check
15080 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
15081 (when tests?
15082 (invoke "pytest" "-vv")))))))
15083 (propagated-inputs
15084 (list python-fastjsonschema python-jsonschema python-jupyter-core
15085 python-traitlets))
15086 (native-inputs
15087 (list python-pytest
15088 python-testpath))
15089 (home-page "https://jupyter.org")
15090 (synopsis "Jupyter Notebook format")
15091 (description "This package provides the reference implementation of the
15092Jupyter Notebook format and Python APIs for working with notebooks.")
15093 (license license:bsd-3)))
15094
15095(define-public python-nb-clean
15096 (package
15097 (name "python-nb-clean")
15098 (version "2.1.0")
15099 (source
15100 (origin
15101 (method url-fetch)
15102 (uri (pypi-uri "nb-clean" version))
15103 (sha256
15104 (base32 "01qvk9n7rx15dhc23m8bj9bw5wdyxh6y18c5fm8hllmrd3ndsx14"))))
15105 (build-system python-build-system)
15106 (propagated-inputs (list python-nbformat))
15107 (home-page "https://github.com/srstevenson/nb-clean")
15108 (synopsis "Clean Jupyter notebooks for versioning")
15109 (description "This package cleans Jupyter notebooks of cell execution
15110counts, metadata, outputs, and empty cells, preparing them for committing to
15111version control. It provides a Git filter to automatically clean notebooks
15112before they're staged, and can also be used with other version control
15113systems, as a command line tool, and as a Python library.")
15114 (license license:isc)))
15115
15116(define-public python-bleach
15117 (package
15118 (name "python-bleach")
15119 (version "5.0.1")
15120 (source
15121 (origin
15122 (method url-fetch)
15123 (uri (pypi-uri "bleach" version))
15124 (sha256
15125 (base32 "0p089853pkwzf1j2zjlmw67pwbkk0whpzfx9dbrd56zb8xf2a0qd"))
15126 (snippet
15127 #~(begin
15128 (use-modules (guix build utils))
15129 (substitute* (find-files "." "\\.py$")
15130 (("bleach\\._vendor\\.html5lib") "html5lib"))
15131 (delete-file-recursively "bleach/_vendor/html5lib")))))
15132 (build-system pyproject-build-system)
15133 (propagated-inputs (list python-html5lib python-tinycss2 python-webencodings))
15134 (native-inputs (list python-pytest))
15135 (home-page "https://github.com/mozilla/bleach")
15136 (synopsis "Whitelist-based HTML-sanitizing tool")
15137 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
15138 (license license:asl2.0)))
15139
15140(define-public python-entrypoints
15141 (package
15142 (name "python-entrypoints")
15143 (version "0.3")
15144 (source
15145 (origin
15146 (method url-fetch)
15147 (uri (pypi-uri "entrypoints" version))
15148 (sha256
15149 (base32
15150 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
15151 (build-system python-build-system)
15152 ;; The package does not come with a setup.py file, so we have to generate
15153 ;; one ourselves.
15154 (arguments
15155 `(#:tests? #f
15156 #:phases
15157 (modify-phases %standard-phases
15158 (add-after 'unpack 'create-setup.py
15159 (lambda _
15160 (call-with-output-file "setup.py"
15161 (lambda (port)
15162 (format port "\
15163from setuptools import setup
15164setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
15165" ,version))))))))
15166 (home-page "https://github.com/takluyver/entrypoints")
15167 (synopsis "Discover and load entry points from installed Python packages")
15168 (description "Entry points are a way for Python packages to advertise
15169objects with some common interface. The most common examples are
15170@code{console_scripts} entry points, which define shell commands by
15171identifying a Python function to run. The @code{entrypoints} module contains
15172functions to find and load entry points.")
15173 (license license:expat)))
15174
15175(define-public python-epc
15176 (package
15177 (name "python-epc")
15178 (version "0.0.5")
15179 (source
15180 (origin
15181 (method url-fetch)
15182 (uri (pypi-uri "epc" version))
15183 (sha256
15184 (base32
15185 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
15186 (build-system python-build-system)
15187 (propagated-inputs
15188 (list python-sexpdata))
15189 (native-inputs
15190 (list python-nose))
15191 (home-page "https://github.com/tkf/python-epc")
15192 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
15193 (description
15194 "Python-EPC can call elisp functions from Python and Python functions
15195from elisp.")
15196 (license license:gpl3)))
15197
15198(define-public python-forex-python
15199 (package
15200 (name "python-forex-python")
15201 (version "1.5")
15202 (source
15203 (origin
15204 (method url-fetch)
15205 (uri (pypi-uri "forex-python" version))
15206 (sha256
15207 (base32 "1ma8cl1i2dh8aa99pifnlilyy4d1gd1s07fj0yd17wcbpsh532cj"))))
15208 (build-system python-build-system)
15209 (arguments
15210 ;; Tests are not included in the PyPI tarball. Also, the tests in the
15211 ;; repository require online data.
15212 `(#:tests? #f))
15213 (propagated-inputs
15214 (list python-requests python-simplejson))
15215 (home-page "https://github.com/MicroPyramid/forex-python")
15216 (synopsis "Foreign exchange rates and currency conversion")
15217 (description
15218 "@code{python-forex-python} can be used to manipulate foreign
15219exchange rates and to operate currency conversions.
15220
15221Features:
15222@itemize
15223@item List all currency rates.
15224@item BitCoin price for all currencies.
15225@item Converting amount to BitCoins.
15226@item Get historical rates for any day since 1999.
15227@item Conversion rate for one currency(ex; USD to INR).
15228@item Convert amount from one currency to other.('USD 10$' to INR).
15229@item Currency symbols.
15230@item Currency names.
15231@end itemize")
15232 (license license:expat)))
15233
15234(define-public python-simpleeval
15235 (package
15236 (name "python-simpleeval")
15237 (version "0.9.12")
15238 (source
15239 (origin
15240 (method url-fetch)
15241 (uri (pypi-uri "simpleeval" version))
15242 (sha256
15243 (base32 "0diysdzvx865yy2rjfah75ha2qfxaxz7r108kp7j2kkd903ya2ry"))))
15244 (build-system python-build-system)
15245 (home-page "https://github.com/danthedeckie/simpleeval")
15246 (synopsis "Simple, safe single expression evaluator library")
15247 (description
15248 "This package provides a quick single file library for easily adding
15249evaluatable expressions into python projects. Say you want to allow a user
15250to set an alarm volume, which could depend on the time of day, alarm level,
15251how many previous alarms had gone off, and if there is music playing at the
15252time.")
15253 (license license:expat)))
15254
15255(define-public python-nbconvert
15256 (package
15257 (name "python-nbconvert")
15258 (version "6.5.0")
15259 (source
15260 (origin
15261 (method url-fetch)
15262 (uri (pypi-uri "nbconvert" version))
15263 (sha256
15264 (base32
15265 "17g9xq4za7vvzml6l6d8zrzknhxsvgx02hymmsw9d1dygbi4cgi2"))))
15266 (build-system python-build-system)
15267 (arguments
15268 (list
15269 #:phases
15270 #~(modify-phases %standard-phases
15271 (add-after 'unpack 'fix-paths
15272 (lambda* (#:key inputs #:allow-other-keys)
15273 ;; Use pandoc binary from input.
15274 (substitute* "nbconvert/utils/pandoc.py"
15275 (("'pandoc'")
15276 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
15277 ;; Same for LaTeX.
15278 (substitute* "nbconvert/exporters/pdf.py"
15279 (("\"xelatex\"")
15280 (format #f "~s" (search-input-file inputs "bin/xelatex")))
15281 (("\"bibtex\"")
15282 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
15283 ;; Likewise for Inkscape.
15284 (substitute* "nbconvert/preprocessors/svg2pdf.py"
15285 (("inkscape_path = which\\(\"inkscape\")")
15286 (format #f "inkscape_path = ~s"
15287 (search-input-file inputs "bin/inkscape"))))))
15288 (replace 'check
15289 (lambda* (#:key tests? #:allow-other-keys)
15290 (when tests?
15291 ;; Tests depend on templates installed to output.
15292 (setenv "JUPYTER_PATH"
15293 (string-append #$output "/share/jupyter:"
15294 (getenv "JUPYTER_PATH")))
15295 ;; Step outside of the source directory to avoid having both
15296 ;; the installed package *and* the package from the source on
15297 ;; Python's path.
15298 (with-directory-excursion "/tmp"
15299 (invoke "pytest" "--pyargs" "nbconvert"
15300 "-vv" "-n" (number->string (parallel-job-count))
15301 "-k"
15302 (string-append
15303 ;; These tests require pyppeteer, not yet
15304 ;; available in Guix.
15305 "not test_webpdf_with_chromium "
15306 "and not test_webpdf.py "
15307 ;; These tests require ipywidgets, which would
15308 ;; introduce a dependency cycle.
15309 "and not test_execute_widgets_from_nbconvert "
15310 "and not test_execute_multiple_notebooks ")))))))))
15311 (inputs
15312 (list inkscape/stable pandoc))
15313 (native-inputs
15314 (list python-ipykernel
15315 ;; Adding ipywidgets would create a cycle.
15316 ;;python-ipywidgets
15317 ;; XXX: Disabled, not in guix.
15318 ;;python-pyppeteer
15319 python-pytest
15320 python-pytest-xdist))
15321 (propagated-inputs
15322 (list python-beautifulsoup4
15323 python-bleach
15324 python-defusedxml
15325 python-entrypoints
15326 python-jinja2
15327 python-jupyter-core
15328 python-mistune
15329 python-nbclient
15330 python-nbformat
15331 python-pandocfilters
15332 python-pygments
15333 python-jupyterlab-pygments
15334 python-testpath
15335 python-traitlets
15336 ;; Required, even if [serve] is not used.
15337 python-tornado-6
15338 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
15339 texlive-adjustbox
15340 texlive-booktabs
15341 texlive-caption
15342 texlive-collection-basic
15343 texlive-enumitem
15344 texlive-environ
15345 texlive-eurosym
15346 texlive-fancyvrb
15347 texlive-float
15348 texlive-fontspec
15349 texlive-geometry
15350 texlive-grffile
15351 texlive-hyperref
15352 texlive-jknapltx
15353 texlive-jknapltx
15354 texlive-lm
15355 texlive-lm-math
15356 texlive-mathpazo
15357 texlive-ms
15358 texlive-parskip
15359 texlive-pdfcol
15360 texlive-pgf
15361 texlive-rsfs
15362 texlive-stringenc
15363 texlive-tcolorbox
15364 texlive-titling
15365 texlive-tools
15366 texlive-trimspaces
15367 texlive-ucs
15368 texlive-ulem
15369 texlive-unicode-math
15370 texlive-upquote
15371 texlive-xcolor
15372 texlive-xetex
15373 texlive-zapfding))
15374 (home-page "https://jupyter.org")
15375 (synopsis "Converting Jupyter Notebooks")
15376 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
15377notebooks to various other formats via Jinja templates. It allows you to
15378convert an @code{.ipynb} notebook file into various static formats including:
15379
15380@enumerate
15381@item HTML
15382@item LaTeX
15383@item PDF
15384@item Reveal JS
15385@item Markdown (md)
15386@item ReStructured Text (rst)
15387@item executable script
15388@end enumerate\n")
15389 (license license:bsd-3)))
15390
15391(define-public python-notebook
15392 (package
15393 (name "python-notebook")
15394 (version "6.4.10")
15395 (source (origin
15396 (method url-fetch)
15397 (uri (pypi-uri "notebook" version))
15398 (sha256
15399 (base32
15400 "03p976xq1l9xf4djwk0snmywd0zck3i6gjngxsl874i8qrmsf214"))))
15401 (build-system python-build-system)
15402 (arguments
15403 `(#:phases
15404 (modify-phases %standard-phases
15405 (add-after 'unpack 'use-our-home-for-tests
15406 (lambda _
15407 ;; The 'get_patch_env' function in this file reads:
15408 ;; 'HOME': cls.home_dir
15409 ;; but for some reason, that definition of HOME is not what the
15410 ;; GLib/GIO trash mechanism honors, which would cause test
15411 ;; failures. Instead, set 'HOME' here to an existing directory
15412 ;; and let the tests honor it.
15413 (substitute* "notebook/tests/launchnotebook.py"
15414 (("'HOME': .*," all)
15415 (string-append "# " all "\n")))
15416 (setenv "HOME" (getcwd))))
15417 (replace 'check
15418 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
15419 ;; These tests require a browser.
15420 (delete-file-recursively "notebook/tests/selenium")
15421 (when tests?
15422 ;; Interferes with test expectations.
15423 (unsetenv "JUPYTER_CONFIG_PATH")
15424 ;; Some tests do not expect all files to be installed in the
15425 ;; same directory, but JUPYTER_PATH contains multiple entries.
15426 (unsetenv "JUPYTER_PATH")
15427 (invoke "pytest" "-vv"
15428 ;; TODO: This tests fails because nbconvert does not
15429 ;; list "python" as a format.
15430 "-k" "not test_list_formats")))))))
15431 (propagated-inputs
15432 (list python-argon2-cffi
15433 python-ipykernel
15434 python-ipython-genutils
15435 python-jinja2
15436 python-jupyter-client
15437 python-jupyter-core
15438 python-nest-asyncio
15439 python-nbconvert
15440 python-nbformat
15441 python-prometheus-client
15442 python-pyzmq
15443 python-send2trash
15444 python-terminado
15445 python-tornado-6
15446 python-traitlets))
15447 (native-inputs
15448 (list python-coverage
15449 python-nbval
15450 python-pytest
15451 python-pytest-cov
15452 python-requests
15453 python-requests-unixsocket))
15454 (home-page "https://jupyter.org/")
15455 (synopsis "Web-based notebook environment for interactive computing")
15456 (description
15457 "The Jupyter HTML notebook is a web-based notebook environment for
15458interactive computing.")
15459 (license license:bsd-3)))
15460
15461(define-public python-widgetsnbextension
15462 (package
15463 (name "python-widgetsnbextension")
15464 (version "3.5.1")
15465 (source
15466 (origin
15467 (method url-fetch)
15468 (uri (pypi-uri "widgetsnbextension" version))
15469 (sha256
15470 (base32
15471 "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
15472 (build-system python-build-system)
15473 (propagated-inputs
15474 (list python-notebook))
15475 (home-page "https://ipython.org")
15476 (synopsis "IPython HTML widgets for Jupyter")
15477 (description "This package provides interactive HTML widgets for Jupyter
15478notebooks.")
15479 (license license:bsd-3)))
15480
15481(define-public python-ipywidgets
15482 (package
15483 (name "python-ipywidgets")
15484 (version "7.6.3")
15485 (source
15486 (origin
15487 (method url-fetch)
15488 (uri (pypi-uri "ipywidgets" version))
15489 (sha256
15490 (base32
15491 "1w217j8i53x14l7b05fk300k222zs9vkcjaa1rbrw3sk43k466lz"))))
15492 (build-system python-build-system)
15493 (propagated-inputs
15494 (list python-ipykernel
15495 python-ipython
15496 python-jupyterlab-widgets
15497 python-nbformat
15498 python-traitlets
15499 python-widgetsnbextension))
15500 (native-inputs
15501 (list python-mock python-pytest python-pytest-cov))
15502 (home-page "https://ipython.org")
15503 (synopsis "IPython HTML widgets for Jupyter")
15504 (description "Ipywidgets are interactive HTML widgets for Jupyter
15505notebooks and the IPython kernel. Notebooks come alive when interactive
15506widgets are used. Users gain control of their data and can visualize changes
15507in the data.")
15508 (license license:bsd-3)))
15509
15510(define-public python-jupyter-console
15511 (package
15512 (name "python-jupyter-console")
15513 (version "6.4.0")
15514 (source
15515 (origin
15516 (method url-fetch)
15517 (uri (pypi-uri "jupyter_console" version))
15518 (sha256
15519 (base32
15520 "1iqrxhd8hvlyf8cqbc731ssnwm61wrycnbiczy5wsfahd3hlh8i4"))))
15521 (build-system python-build-system)
15522 (propagated-inputs
15523 (list python-ipykernel python-jupyter-client python-prompt-toolkit
15524 python-pygments))
15525 (native-inputs
15526 (list python-nose python-pytest))
15527 (home-page "https://jupyter.org")
15528 (synopsis "Jupyter terminal console")
15529 (description "This package provides a terminal-based console frontend for
15530Jupyter kernels. It also allows for console-based interaction with non-Python
15531Jupyter kernels such as IJulia and IRKernel.")
15532 (license license:bsd-3)))
15533
15534;; The python-ipython and python-jupyter-console require each other. To get
15535;; the functionality in both packages working, strip down the
15536;; python-jupyter-console package when using it as an input to python-ipython.
15537(define python-jupyter-console-minimal
15538 (package/inherit python-jupyter-console
15539 (name "python-jupyter-console-minimal")
15540 (arguments
15541 (substitute-keyword-arguments
15542 (package-arguments python-jupyter-console)
15543 ((#:phases phases)
15544 `(modify-phases ,phases
15545 (add-after 'install 'delete-bin
15546 (lambda* (#:key outputs #:allow-other-keys)
15547 ;; Delete the bin files, to avoid conflicts in profiles
15548 ;; where python-ipython and python-jupyter-console are
15549 ;; both present.
15550 (delete-file-recursively
15551 (string-append
15552 (assoc-ref outputs "out") "/bin"))))))))
15553 ;; Remove the python-ipython propagated input, to avoid the cycle
15554 (propagated-inputs
15555 (modify-inputs (package-propagated-inputs python-jupyter-console)
15556 (delete "python-ipython")))))
15557
15558(define-public python-qtconsole
15559 (package
15560 (name "python-qtconsole")
15561 (version "5.3.0")
15562 (source
15563 (origin
15564 (method url-fetch)
15565 (uri (pypi-uri "qtconsole" version))
15566 (sha256
15567 (base32 "09anp8g7vqi8z8wyi2lv21a2frd2dyhyrzvcrk2anijyqzyj0dcf"))))
15568 (build-system python-build-system)
15569 (arguments
15570 `(#:phases
15571 (modify-phases %standard-phases
15572 (add-before 'check 'pre-check
15573 (lambda _
15574 (setenv "QT_QPA_PLATFORM" "offscreen")
15575 (setenv "HOME" "/tmp")
15576 ;; FIXME: skip a failing test.
15577 (substitute* "qtconsole/tests/test_jupyter_widget.py"
15578 (("def test_other_output") "def _test_other_output")))))))
15579 (propagated-inputs
15580 (list python-ipykernel python-ipython-genutils python-jupyter-client
15581 python-jupyter-core python-pygments python-pyqt
15582 python-pyzmq python-qtpy python-traitlets))
15583 (native-inputs
15584 (list python-flaky python-pytest python-pytest-qt))
15585 (home-page "https://jupyter.org")
15586 (synopsis "Jupyter Qt console")
15587 (description "This package provides a Qt-based console for Jupyter with
15588support for rich media output.")
15589 (license license:bsd-3)))
15590
15591(define-public python-jsbeautifier
15592 (package
15593 (name "python-jsbeautifier")
15594 (version "1.10.2")
15595 (home-page "https://github.com/beautify-web/js-beautify")
15596 (source (origin
15597 (method git-fetch)
15598 (uri (git-reference
15599 (url home-page)
15600 (commit (string-append "v" version))))
15601 (file-name (git-file-name name version))
15602 (sha256
15603 (base32
15604 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
15605 (build-system python-build-system)
15606 (arguments
15607 `(#:phases (modify-phases %standard-phases
15608 (add-after 'unpack 'chdir
15609 (lambda _
15610 ;; The upstream Git repository contains all the code,
15611 ;; but this package only builds the python code.
15612 (chdir "python")
15613 #t))
15614 (add-after 'unpack 'patch-python-six-requirements
15615 (lambda _
15616 (substitute* "python/setup.py"
15617 (("six>=1.12.0")
15618 "six>=1.11.0"))
15619 #t)))))
15620 (propagated-inputs
15621 (list python-editorconfig python-six))
15622 (native-inputs
15623 (list python-pytest))
15624 (synopsis "JavaScript unobfuscator and beautifier")
15625 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
15626popular online obfuscators.")
15627 (license license:expat)))
15628
15629(define-public jupyter
15630 (package
15631 (name "jupyter")
15632 (version "1.0.0")
15633 (source
15634 (origin
15635 (method url-fetch)
15636 (uri (pypi-uri "jupyter" version))
15637 (sha256
15638 (base32
15639 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
15640 (build-system python-build-system)
15641 (arguments '(#:tests? #f)) ; there are none.
15642 (propagated-inputs
15643 (list python-ipykernel
15644 python-ipywidgets
15645 python-jupyter-console
15646 python-nbconvert
15647 python-notebook
15648 python-qtconsole))
15649 (home-page "https://jupyter.org")
15650 (synopsis "Web application for interactive documents")
15651 (description
15652 "The Jupyter Notebook is a web application that allows you to create and
15653share documents that contain live code, equations, visualizations and
15654explanatory text. Uses include: data cleaning and transformation, numerical
15655simulation, statistical modeling, machine learning and much more.")
15656 (license license:bsd-3)))
15657
15658(define-public python-chardet
15659 (package
15660 (name "python-chardet")
15661 (version "5.1.0")
15662 (source
15663 (origin
15664 (method url-fetch)
15665 (uri (pypi-uri "chardet" version))
15666 (sha256
15667 (base32
15668 "1r9ixxnish9j3dq4h0z0cwlkr4f5lgi6d8mhbzw59hbbjlmp2qhd"))))
15669 (native-inputs
15670 (list python-pytest))
15671 (build-system pyproject-build-system)
15672 (arguments
15673 (list #:test-flags
15674 ;; Disable test that fails sporadically:
15675 ;; https://github.com/chardet/chardet/issues/256
15676 #~'("-k" "not test_detect_all_and_detect_one_should_agree")
15677 #:phases
15678 #~(modify-phases %standard-phases
15679 ;; This package provides a 'chardetect' executable that only
15680 ;; depends on Python, so customize the wrap phase to avoid
15681 ;; adding pytest and friends in order to save size.
15682 ;; (See also <https://bugs.gnu.org/25235>.)
15683 (replace 'wrap
15684 (lambda* (#:key inputs outputs #:allow-other-keys)
15685 (let* ((sitedir (site-packages inputs outputs))
15686 (python (dirname (dirname
15687 (search-input-file
15688 inputs "bin/python"))))
15689 (python-sitedir
15690 (string-append python "/lib/python"
15691 (python-version python)
15692 "/site-packages")))
15693 (wrap-program (string-append #$output "/bin/chardetect")
15694 `("GUIX_PYTHONPATH" ":" suffix
15695 ,(list sitedir python-sitedir)))))))))
15696 (home-page "https://github.com/chardet/chardet")
15697 (synopsis "Universal encoding detector for Python 2 and 3")
15698 (description
15699 "This package provides @code{chardet}, a Python module that can
15700automatically detect a wide range of file encodings.")
15701 (license license:lgpl2.1+)))
15702
15703(define-public python-charset-normalizer
15704 (package
15705 (name "python-charset-normalizer")
15706 (version "2.1.0")
15707 (source
15708 (origin
15709 (method url-fetch)
15710 (uri (pypi-uri "charset-normalizer" version))
15711 (sha256
15712 (base32 "04zlajr77f6c7ai59l46as1idi0jjgbvj72lh4v5wfpz2s070pjp"))))
15713 (build-system python-build-system)
15714 (arguments
15715 (list #:phases
15716 #~(modify-phases %standard-phases
15717 ;; This package provides a 'normalizer' executable that only
15718 ;; depends on Python, so customize the wrap phase to avoid
15719 ;; adding pytest and friends in order to save size.
15720 ;; (See also <https://bugs.gnu.org/25235>.)
15721 (replace 'wrap
15722 (lambda* (#:key inputs outputs #:allow-other-keys)
15723 (let* ((sitedir (site-packages inputs outputs))
15724 (python (dirname (dirname
15725 (search-input-file
15726 inputs "bin/python"))))
15727 (python-sitedir
15728 (string-append python "/lib/python"
15729 (python-version python)
15730 "/site-packages")))
15731 (wrap-program (string-append #$output "/bin/normalizer")
15732 `("GUIX_PYTHONPATH" ":" suffix
15733 ,(list sitedir python-sitedir)))))))))
15734 (native-inputs
15735 (list python-pytest))
15736 (home-page "https://github.com/ousret/charset_normalizer")
15737 (synopsis "Universal Charset Detector, alternative to Chardet")
15738 (description "This library helps you read text from an unknown charset
15739encoding. Motivated by @code{chardet}, it tries to resolve the issue by
15740taking a new approach. All IANA character set names for which the Python core
15741library provides codecs are supported.")
15742 (license license:expat)))
15743
15744(define-public python-docopt
15745 (package
15746 (name "python-docopt")
15747 (version "0.6.2")
15748 (source
15749 (origin
15750 (method git-fetch)
15751 ;; The release on PyPI does not include tests.
15752 (uri (git-reference
15753 (url "https://github.com/docopt/docopt")
15754 (commit version)))
15755 (file-name (git-file-name name version))
15756 (sha256
15757 (base32
15758 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
15759 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
15760 (build-system python-build-system)
15761 (native-inputs
15762 (list python-pytest))
15763 (arguments
15764 `(#:phases
15765 (modify-phases %standard-phases
15766 (replace 'check
15767 (lambda* (#:key tests? #:allow-other-keys)
15768 (when tests?
15769 (invoke "py.test")))))))
15770 (home-page "http://docopt.org")
15771 (synopsis "Command-line interface description language for Python")
15772 (description "This library allows the user to define a command-line
15773interface from a program's help message rather than specifying it
15774programmatically with command-line parsers like @code{getopt} and
15775@code{argparse}.")
15776 (license license:expat)))
15777
15778(define-public python-pythonanywhere
15779 (package
15780 (name "python-pythonanywhere")
15781 (version "0.9.10")
15782 (source
15783 (origin
15784 (method git-fetch)
15785 (uri (git-reference
15786 (url "https://github.com/pythonanywhere/helper_scripts")
15787 (commit (string-append "v" version))))
15788 (file-name (git-file-name name version))
15789 (sha256
15790 (base32
15791 "0vzzc1g8pl7cb9yvm3n1j5zlzxf0jd423rzspc2kvpb8yhvydklx"))))
15792 (build-system python-build-system)
15793 (arguments
15794 `(#:phases
15795 (modify-phases %standard-phases
15796 (add-before 'check 'change-home
15797 (lambda _
15798 (setenv "HOME" "/tmp")))
15799 (replace 'check
15800 (lambda* (#:key tests? #:allow-other-keys)
15801 (when tests?
15802 ;; Exclude tests marked as slowtest that assume running
15803 ;; inside Git repository on system with virtualenvwrapper
15804 ;; installed.
15805 (invoke "pytest" "-m" "not slowtest")))))))
15806 (native-inputs
15807 (list python-pytest
15808 python-psutil
15809 python-responses
15810 python-pytest-mock))
15811 (propagated-inputs
15812 (list python-dateutil
15813 python-docopt
15814 python-packaging
15815 python-requests
15816 python-schema
15817 python-tabulate
15818 python-typer))
15819 (home-page "https://github.com/pythonanywhere/helper_scripts/")
15820 (synopsis "PythonAnywhere helper tools for users")
15821 (description "PythonAnywhere provides a command-line interface and an
15822application programming interface that allows managing Web apps and scheduled
15823tasks. It includes single-command deployment for the Django Girls tutorial.")
15824 (license license:expat)))
15825
15826(define-public python-pythondialog
15827 (package
15828 (name "python-pythondialog")
15829 (version "3.4.0")
15830 (source (origin
15831 (method url-fetch)
15832 (uri (pypi-uri "pythondialog" version))
15833 (sha256
15834 (base32
15835 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
15836 (build-system python-build-system)
15837 (arguments
15838 `(#:phases (modify-phases %standard-phases
15839 (add-after 'unpack 'patch-path
15840 (lambda* (#:key inputs #:allow-other-keys)
15841 (let* ((dialog (assoc-ref inputs "dialog")))
15842 (substitute* "dialog.py"
15843 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)") (string-append
15844 "os.getenv(\"PATH\") + \":"
15845 dialog
15846 "/bin\"")))
15847 #t))))
15848 #:tests? #f))
15849 (propagated-inputs (list dialog))
15850 (home-page "https://pythondialog.sourceforge.net/")
15851 (synopsis "Python interface to the UNIX dialog utility")
15852 (description
15853 "A Python wrapper for the dialog utility. Its purpose is to
15854provide an easy to use, pythonic and comprehensive Python interface to dialog.
15855This allows one to make simple text-mode user interfaces on Unix-like systems")
15856 (license license:lgpl2.1)))
15857
15858(define-public python-confection
15859 (package
15860 (name "python-confection")
15861 (version "0.0.4")
15862 (source (origin
15863 (method url-fetch)
15864 (uri (pypi-uri "confection" version))
15865 (sha256
15866 (base32
15867 "1ksfn10zhnpkcj3y0c3xs4dznvc062bk62x4c3ig0dd6bn4gbpdi"))))
15868 (build-system pyproject-build-system)
15869 (propagated-inputs (list python-pydantic python-srsly
15870 python-typing-extensions))
15871 (native-inputs (list python-pytest))
15872 (home-page "https://github.com/explosion/confection")
15873 (synopsis "Config system for Python")
15874 (description "Confection is a lightweight library that offers a
15875configuration system letting you conveniently describe arbitrary trees of
15876objects.")
15877 (license license:expat)))
15878
15879(define-public python-configobj
15880 (package
15881 (name "python-configobj")
15882 (version "5.0.6")
15883 (source (origin
15884 (method url-fetch)
15885 (uri (pypi-uri "configobj" version))
15886 (sha256
15887 (base32
15888 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
15889 ;; Patch setup.py so it looks for python-setuptools, which is
15890 ;; required to parse the keyword 'install_requires' in setup.py.
15891 (patches (search-patches "python-configobj-setuptools.patch"))))
15892 (build-system python-build-system)
15893 (propagated-inputs
15894 (list python-six))
15895 (synopsis "Config file reading, writing and validation")
15896 (description "ConfigObj is a simple but powerful config file reader and
15897writer: an ini file round tripper. Its main feature is that it is very easy to
15898use, with a straightforward programmer’s interface and a simple syntax for
15899config files.")
15900 (home-page "https://github.com/DiffSK/configobj")
15901 (license license:bsd-3)))
15902
15903(define-public python-omegaconf
15904 (package
15905 (name "python-omegaconf")
15906 (version "2.2.3")
15907 (source (origin
15908 (method git-fetch)
15909 (uri (git-reference
15910 (url "https://github.com/omry/omegaconf")
15911 (commit (string-append "v" version))))
15912 (file-name (git-file-name name version))
15913 (modules '((guix build utils)))
15914 (snippet #~(begin
15915 (delete-file-recursively "build_helpers/bin")
15916 (substitute* "build_helpers/build_helpers.py"
15917 (("java") "antlr4")
15918 (("\"-jar\",") "")
15919 (("str\\(build_dir / \"bin\" / \"antlr.*\"\\),") ""))))
15920 (sha256
15921 (base32
15922 "00rw1rkjycn0jdg3jmar6jdxb1pcb21jclm5g1921s9z8f5ii5dh"))))
15923 (build-system pyproject-build-system)
15924 (arguments
15925 (list #:phases
15926 #~(modify-phases %standard-phases
15927 (add-after 'unpack 'loosen-requirements
15928 (lambda _
15929 (substitute* "requirements/base.txt"
15930 (("antlr4-python3-runtime==")
15931 "antlr4-python3-runtime>=")))))))
15932 (propagated-inputs (list java-antlr4-runtime-python
15933 python-pydevd
15934 python-pyyaml))
15935 (native-inputs (list icedtea antlr4 python-pytest python-pytest-mock))
15936 (home-page "https://github.com/omry/omegaconf")
15937 (synopsis "Flexible configuration system")
15938 (description "OmegaConf is a hierarchical configuration system and
15939supports merging configurations from multiple sources. It provides a
15940consistent API regardless of how the configuration was created.")
15941 (license license:bsd-3)))
15942
15943(define-public python-configargparse
15944 (package
15945 (name "python-configargparse")
15946 (version "1.5.3")
15947 (source (origin
15948 (method url-fetch)
15949 (uri (pypi-uri "ConfigArgParse" version))
15950 (sha256
15951 (base32
15952 "17vky4ihicbf7nggg30xs7h3g5rxzwgch8vilnnrvdaacszkq2qv"))))
15953 (build-system pyproject-build-system)
15954 (native-inputs
15955 (list python-mock python-pytest))
15956 (synopsis "Replacement for argparse")
15957 (description "A drop-in replacement for argparse that allows options to also
15958be set via config files and/or environment variables.")
15959 (home-page "https://github.com/bw2/ConfigArgParse")
15960 (license license:expat)))
15961
15962(define-public python-connection-pool
15963 (package
15964 (name "python-connection-pool")
15965 (version "0.0.3")
15966 (source
15967 (origin
15968 (method url-fetch)
15969 (uri (pypi-uri "connection_pool" version))
15970 (sha256
15971 (base32 "1p6hfkcl4n3hhhcgjbaxn21i7b1yipag6j7dnilir4k5xxx9whmz"))))
15972 (build-system python-build-system)
15973 (home-page "https://github.com/zhouyl/ConnectionPool")
15974 (synopsis "Thread-safe connection pool")
15975 (description "This package provides a library implementing a thread-safe
15976connection pool.")
15977 (license license:expat)))
15978
15979(define-public python-argparse-manpage
15980 (package
15981 (name "python-argparse-manpage")
15982 (version "1.1")
15983 (source
15984 (origin
15985 (method url-fetch)
15986 (uri (pypi-uri "argparse-manpage" version))
15987 (sha256
15988 (base32
15989 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
15990 (build-system python-build-system)
15991 (home-page "https://github.com/praiskup/argparse-manpage")
15992 (synopsis "Build manual page from Python's ArgumentParser object")
15993 (description
15994 "This package provides tools to build manual pages from Python's
15995@code{ArgumentParser} object.")
15996 (license license:asl2.0)))
15997
15998(define-public python-contextlib2
15999 (package
16000 (name "python-contextlib2")
16001 (version "0.6.0.post1")
16002 (source
16003 (origin
16004 (method url-fetch)
16005 (uri (pypi-uri "contextlib2" version))
16006 (sha256
16007 (base32
16008 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
16009 (build-system python-build-system)
16010 (home-page "https://contextlib2.readthedocs.org/")
16011 (synopsis "Tools for decorators and context managers")
16012 (description "This module is primarily a backport of the Python
160133.2 contextlib to earlier Python versions. Like contextlib, it
16014provides utilities for common tasks involving decorators and context
16015managers. It also contains additional features that are not part of
16016the standard library.")
16017 (license license:psfl)))
16018
16019(define-public python-texttable
16020 (package
16021 (name "python-texttable")
16022 (version "1.6.4")
16023 (source
16024 (origin
16025 (method url-fetch)
16026 (uri (pypi-uri "texttable" version))
16027 (sha256
16028 (base32
16029 "1sbn821394rix6xgj3zqk743pj6nqm1qz81zgis2bcpp2ng7pvj2"))))
16030 (build-system python-build-system)
16031 (arguments
16032 `(#:phases
16033 (modify-phases %standard-phases
16034 (replace 'check
16035 (lambda* (#:key tests? #:allow-other-keys)
16036 (when tests? (invoke "pytest" "-vv" "tests.py")))))))
16037 (native-inputs
16038 (list python-pytest))
16039 (home-page "https://github.com/foutaise/texttable/")
16040 (synopsis "Python module for creating simple ASCII tables")
16041 (description "Texttable is a Python module for creating simple ASCII
16042tables.")
16043 (license license:expat)))
16044
16045(define-public python-atomicwrites
16046 (package
16047 (name "python-atomicwrites")
16048 (version "1.4.0")
16049 (source (origin
16050 (method url-fetch)
16051 (uri (pypi-uri "atomicwrites" version))
16052 (sha256
16053 (base32
16054 "0yla2svfhfqrcj8qbyqzx7wi4jy0dwcxvlkg0k3zjd54s5m3jw5f"))))
16055 (build-system python-build-system)
16056 (arguments `(#:tests? #f)) ;avoid circular dependency with pytest
16057 (synopsis "Atomic file writes in Python")
16058 (description "Library for atomic file writes using platform dependent tools
16059for atomic file system operations.")
16060 (home-page "https://github.com/untitaker/python-atomicwrites")
16061 (license license:expat)))
16062
16063(define-public python-qstylizer
16064 (package
16065 (name "python-qstylizer")
16066 (version "0.1.10")
16067 (source
16068 (origin
16069 (method git-fetch)
16070 (uri (git-reference
16071 (url "https://github.com/blambright/qstylizer")
16072 (commit version)))
16073 (file-name (git-file-name name version))
16074 (sha256
16075 (base32 "0zvkn6g1dn51kkw33v8qrlnwlmf5h6sw1ay3bh14ifjr8b9xsjjz"))))
16076 (build-system python-build-system)
16077 (arguments
16078 `(#:test-target "pytest"
16079 #:phases
16080 (modify-phases %standard-phases
16081 (add-before 'build 'set-pbr-version
16082 (lambda _
16083 (setenv "PBR_VERSION" "3.0.1"))))))
16084 (native-inputs
16085 (list python-pbr
16086 python-pytest
16087 python-pytest-catchlog
16088 python-pytest-cov
16089 python-pytest-mock
16090 python-pytest-runner
16091 python-pytest-xdist))
16092 (propagated-inputs
16093 (list python-inflection python-tinycss))
16094 (home-page "https://github.com/blambright/qstylizer")
16095 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
16096 (description "@code{qstylizer} is a Python package designed to help with
16097the construction of PyQt/PySide stylesheets.")
16098 (license license:expat)))
16099
16100(define-public python-click-threading
16101 (package
16102 (name "python-click-threading")
16103 (version "0.5.0")
16104 (source (origin
16105 (method url-fetch)
16106 (uri (pypi-uri "click-threading" version))
16107 (sha256
16108 (base32
16109 "0f9lmxwcq0y9lb8w0whbni7gwy12gbv74h1igh85qn9aq0iydkxd"))))
16110 (build-system python-build-system)
16111 (propagated-inputs
16112 (list python-click))
16113 (synopsis "Utilities for multithreading in Click")
16114 (description "This package provides utilities for multithreading in Click
16115applications.")
16116 (home-page "https://github.com/click-contrib/click-threading")
16117 (license license:expat)))
16118
16119(define-public python-click-log
16120 (package
16121 (name "python-click-log")
16122 (version "0.3.2")
16123 (source (origin
16124 (method url-fetch)
16125 (uri (pypi-uri "click-log" version))
16126 (sha256
16127 (base32
16128 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
16129 (build-system python-build-system)
16130 (propagated-inputs
16131 (list python-click))
16132 (synopsis "Logging for click applications")
16133 (description "This package provides a Python library for logging Click
16134applications.")
16135 (home-page "https://github.com/click-contrib/click-log")
16136 (license license:expat)))
16137
16138(define-public python-click-default-group
16139 (package
16140 (name "python-click-default-group")
16141 (version "1.2.2")
16142 (source (origin
16143 (method url-fetch)
16144 (uri (pypi-uri "click-default-group" version))
16145 (sha256
16146 (base32
16147 "015r78jk8gznfw0dphpwaqcx5mhg5822b55w5xbb6i7sin70wmnr"))))
16148 (build-system python-build-system)
16149 (arguments
16150 `(#:tests? #f)) ; no target
16151 (propagated-inputs
16152 (list python-click))
16153 (synopsis "Extends click.Group")
16154 (description "This package extends click.Group to invoke a command without
16155explicit subcommand name.")
16156 (home-page "https://github.com/click-contrib/click-default-group")
16157 (license license:bsd-3)))
16158
16159(define-public python-structlog
16160 (package
16161 (name "python-structlog")
16162 (version "23.1.0")
16163 (source
16164 (origin
16165 (method url-fetch)
16166 (uri (pypi-uri "structlog" version))
16167 (sha256
16168 (base32
16169 "0swh5wxghpzdkncsl3zhiq5bblkj4i5r3g00lldw2qyiswfnh397"))))
16170 (build-system pyproject-build-system)
16171 (native-inputs
16172 (list ;; For the build
16173 python-hatch-fancy-pypi-readme
16174 python-hatch-vcs
16175 python-hatchling
16176 ;; For the tests
16177 python-coverage
16178 python-freezegun
16179 python-pretend
16180 python-pytest
16181 python-pytest-asyncio
16182 python-simplejson
16183 python-twisted))
16184 (home-page "https://www.structlog.org/")
16185 (synopsis "Structured Logging for Python")
16186 (description "@code{structlog} changes logging in Python by adding structure
16187to your log entries.")
16188 (license (list license:asl2.0 license:expat))))
16189
16190(define-public python-apipkg
16191 (package
16192 (name "python-apipkg")
16193 (version "1.5")
16194 (source (origin
16195 (method url-fetch)
16196 (uri (pypi-uri "apipkg" version))
16197 (sha256
16198 (base32
16199 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
16200 (build-system python-build-system)
16201 (native-inputs
16202 (list python-pytest python-setuptools-scm))
16203 (synopsis "Namespace control and lazy-import mechanism")
16204 (description "With apipkg you can control the exported namespace of a Python
16205package and greatly reduce the number of imports for your users. It is a small
16206pure Python module that works on virtually all Python versions.")
16207 (home-page "https://github.com/pytest-dev/apipkg")
16208 (license license:expat)))
16209
16210(define-public python-execnet
16211 ;; The latest release (1.9.0) is old and lacks support for Pytest 7.2.
16212 (let ((commit "d6aa1a56773c2e887515d63e50b1d08338cb78a7")
16213 (revision "1"))
16214 (package
16215 (name "python-execnet")
16216 (version (git-version "1.9.0" revision commit))
16217 (source (origin
16218 (method git-fetch)
16219 (uri (git-reference
16220 (url "https://github.com/pytest-dev/execnet")
16221 (commit commit)))
16222 (file-name (git-file-name name version))
16223 (sha256
16224 (base32
16225 "0s60jggcjiw38b7xsh1q2lnnr4c4kaki7c5zsv7xyj7df8ngbbsm"))))
16226 (build-system pyproject-build-system)
16227 (arguments
16228 (list
16229 ;; ;; This test hasn't been updated for the latest Pytest yet:
16230 ;; #:test-flags #~(list "--ignore" "testing/test_rsync.py")
16231 #:phases
16232 #~(modify-phases %standard-phases
16233 (add-after 'unpack 'adjust-for-pytest-7.2+
16234 (lambda _
16235 ;; This test fails with an error because @py.test has been
16236 ;; deprecated for @pytest in recent Pytest.
16237 (substitute* "testing/test_rsync.py"
16238 (("@py.test")
16239 "@pytest"))))
16240 (add-before 'build 'pretend-version
16241 ;; The version string is usually derived via setuptools-scm, but
16242 ;; without the git metadata available this fails.
16243 (lambda _
16244 ;; hatch-vcs uses setuptools under the hood.
16245 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
16246 ;; Massage the version string to a PEP-0440 compatible
16247 ;; one.
16248 #$(car (string-split version #\-)))))
16249 (add-before 'check 'prepare-for-tests
16250 (lambda _
16251 ;; Unset PYTHONDONTWRITEBYTECODE to match the
16252 ;; expectations of a test in
16253 ;; 'testing/test_gateway.py'.
16254 (unsetenv "PYTHONDONTWRITEBYTECODE"))))))
16255 (native-inputs
16256 (list python-hatchling
16257 python-hatch-vcs
16258 python-py
16259 python-pytest
16260 python-pytest-timeout
16261 python-setuptools-scm))
16262 (synopsis "Rapid multi-Python deployment")
16263 (description "Execnet provides a share-nothing model with
16264channel-send/receive communication for distributing execution across many
16265Python interpreters across version, platform and network barriers. It has a
16266minimal and fast API targeting the following uses:
16267@enumerate
16268@item distribute tasks to (many) local or remote CPUs
16269@item write and deploy hybrid multi-process applications
16270@item write scripts to administer multiple environments
16271@end enumerate")
16272 (home-page "https://codespeak.net/execnet/")
16273 (license license:expat))))
16274
16275(define-public python-icalendar
16276 (package
16277 (name "python-icalendar")
16278 (version "4.1.0")
16279 (source (origin
16280 (method url-fetch)
16281 (uri (pypi-uri "icalendar" version))
16282 (sha256
16283 (base32
16284 "15dkq42rkqjdi17rpvmd1plnbwn4daby0nk1s1c3xi7w5v0bfj4p"))))
16285 (build-system python-build-system)
16286 (propagated-inputs
16287 (list python-dateutil python-pytz))
16288 (synopsis "Python library for parsing iCalendar files")
16289 (description "The icalendar package is a parser/generator of iCalendar
16290files for use with Python.")
16291 (home-page "https://github.com/collective/icalendar")
16292 (license license:bsd-2)))
16293
16294(define-public python-args
16295 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65") (revision "0"))
16296 (package
16297 (name "python-args")
16298 (version (git-version "0.1.0" revision commit))
16299 (home-page "https://github.com/kennethreitz-archive/args")
16300 (source (origin
16301 (method git-fetch)
16302 (uri (git-reference
16303 (url home-page)
16304 (commit commit)))
16305 (file-name (git-file-name name version))
16306 (sha256
16307 (base32
16308 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
16309 (build-system python-build-system)
16310 (arguments
16311 `(#:phases (modify-phases %standard-phases
16312 (add-after 'unpack 'patch-args.py
16313 (lambda _
16314 (substitute* "args.py"
16315 (("basestring") "str"))))
16316 (replace 'check
16317 (lambda* (#:key tests? #:allow-other-keys)
16318 (when tests?
16319 (invoke "nosetests" "-v")))))))
16320 (native-inputs (list python-nose))
16321 (synopsis "Command-line argument parser")
16322 (description
16323 "This library provides a Python module to parse command-line arguments.")
16324 (license license:bsd-3))))
16325
16326(define-public python-clint
16327 (package
16328 (name "python-clint")
16329 (version "0.5.1")
16330 (source (origin
16331 (method url-fetch)
16332 (uri (pypi-uri "clint" version))
16333 (sha256
16334 (base32
16335 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
16336 (build-system python-build-system)
16337 (arguments
16338 '(#:phases
16339 (modify-phases %standard-phases
16340 (replace 'check
16341 (lambda _ (invoke "py.test" "-v"))))))
16342 (native-inputs
16343 (list python-pytest))
16344 (propagated-inputs
16345 (list python-args))
16346 (home-page "https://github.com/kennethreitz/clint")
16347 (synopsis "Command-line interface tools")
16348 (description
16349 "Clint is a Python module filled with a set of tools for developing
16350command-line applications, including tools for colored and indented
16351output, progress bar display, and pipes.")
16352 (license license:isc)))
16353
16354(define-public python-rply
16355 (package
16356 (name "python-rply")
16357 (version "0.7.8")
16358 (source (origin
16359 (method url-fetch)
16360 (uri (pypi-uri "rply" version))
16361 (sha256
16362 (base32
16363 "1j81nddvnb145x4p81bnfpyai6g26i2dc1633ycsk025bb18m01a"))))
16364 (build-system python-build-system)
16365 (propagated-inputs
16366 (list python-appdirs))
16367 (home-page "https://github.com/alex/rply")
16368 (synopsis "Parser generator for Python")
16369 (description
16370 "This package provides a pure Python based parser generator, that also
16371works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
16372with a new public API, and RPython support.")
16373 (license license:bsd-3)))
16374
16375(define-public python-hy
16376 (package
16377 (name "python-hy")
16378 (version "0.26.0")
16379 (source
16380 (origin
16381 (method git-fetch) ; no tests in PyPI release
16382 (uri (git-reference
16383 (url "https://github.com/hylang/hy")
16384 (commit version)))
16385 (file-name (git-file-name name version))
16386 (sha256
16387 (base32 "1czhh7s81sg0nrnf4zv0ydqi4f7s6sywf4ks4fd59vpx441ca39v"))))
16388 (build-system python-build-system)
16389 (arguments
16390 (list
16391 #:phases
16392 #~(modify-phases %standard-phases
16393 ;; Hy includes a script that writes a version.py file that Hy uses to
16394 ;; report its version. That script uses information from the git
16395 ;; repository or the HY_VERSION environment variable. Therefore,
16396 ;; these phases set HY_VERSION and then remove the support scripts
16397 ;; which get installed in the root of the output.
16398 (add-after 'unpack 'set-version
16399 (lambda _
16400 (setenv "HY_VERSION" #$version)))
16401 (add-after 'install 'remove-installed-build-scripts
16402 (lambda _
16403 (delete-file-recursively (string-append #$output "/get_version"))))
16404 (replace 'check
16405 (lambda* (#:key tests? #:allow-other-keys)
16406 (when tests?
16407 (invoke "python" "-m" "pytest" "-k"
16408 (string-append ; skip some failed tests
16409 "not test_sys_executable"
16410 " and not test_circular_macro_require"
16411 " and not test_macro_require"
16412 " and not test_requires_pollutes_core"))))))))
16413 (native-inputs
16414 (list python-pytest python-wheel))
16415 (propagated-inputs
16416 (list python-funcparserlib))
16417 (home-page "https://docs.hylang.org/en/stable/")
16418 (synopsis "Lisp frontend to Python")
16419 (description
16420 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
16421its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
16422Python at your fingertips, in Lisp form.")
16423 (license license:expat)))
16424
16425(define-public python-hissp
16426 (package
16427 (name "python-hissp")
16428 (version "0.2.0")
16429 (source
16430 (origin
16431 (method url-fetch)
16432 (uri (pypi-uri "hissp" version))
16433 (sha256
16434 (base32
16435 "0yns7f0q699zn2ziagyas2nkndl7mp1hhssv9x9mpl7jxj2p5myw"))))
16436 (build-system python-build-system)
16437 (home-page "https://github.com/gilch/hissp")
16438 (synopsis "It's Python with a Lissp")
16439 (description "Hissp is a modular Lisp implementation that compiles to a
16440functional subset of Python—Syntactic macro metaprogramming with full access
16441to the Python ecosystem.")
16442 (license license:asl2.0)))
16443
16444(define-public python-promise
16445 (package
16446 (name "python-promise")
16447 (version "0.4.2")
16448 (source
16449 (origin
16450 (method url-fetch)
16451 (uri (pypi-uri "promise" version))
16452 (sha256
16453 (base32
16454 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
16455 (build-system python-build-system)
16456 ;; Tests wants python-futures, which is a python2 only program, and
16457 ;; can't be found by python-promise at test time.
16458 (arguments `(#:tests? #f))
16459 (home-page "https://github.com/syrusakbary/promise")
16460 (synopsis "Promises/A+ implementation for Python")
16461 (description
16462 "Promises/A+ implementation for Python")
16463 (license license:expat)))
16464
16465(define-public python-progress
16466 (package
16467 (name "python-progress")
16468 (version "1.6")
16469 (source
16470 (origin
16471 (method url-fetch)
16472 (uri (pypi-uri "progress" version))
16473 (sha256
16474 (base32 "1k9lpb7lqr6mywpnqcz71y6qny54xlgprdp327za2gy0nnc6xj69"))))
16475 (build-system python-build-system)
16476 (home-page "http://github.com/verigak/progress/")
16477 (synopsis "Progress reporting bars for Python")
16478 (description "This Python package provides progress reporting for visual
16479of progress of long running operations. There are multiple choices of
16480progress bars and spinners, with customizable options, such as width, fill
16481character, and suffix.")
16482 (license license:isc)))
16483
16484(define-public python-progressbar2
16485 (package
16486 (name "python-progressbar2")
16487 (version "3.51.3")
16488 (source
16489 (origin
16490 (method url-fetch)
16491 (uri (pypi-uri "progressbar2" version))
16492 (sha256
16493 (base32
16494 "0b2v3mim90rmfvixkaniz2qrs650sk230rzgd5zhcjfldmlqgxpc"))))
16495 (build-system python-build-system)
16496 (propagated-inputs
16497 (list python-six python-utils))
16498 (native-inputs
16499 (list python-flake8
16500 python-freezegun
16501 python-pycodestyle
16502 python-pytest
16503 python-pytest-cache
16504 python-pytest-cov
16505 python-pytest-flakes
16506 python-pytest-pep8
16507 python-sphinx))
16508 (home-page "https://github.com/WoLpH/python-progressbar")
16509 (synopsis "Text progress bar library for Python")
16510 (description
16511 "This package provides a Python progressbar library to provide
16512visual (yet text based) progress to long running operations.")
16513 (license license:bsd-3)))
16514
16515(define-public python-progressbar33
16516 (package
16517 (name "python-progressbar33")
16518 (version "2.4")
16519 (source
16520 (origin
16521 (method url-fetch)
16522 (uri (pypi-uri "progressbar33" version))
16523 (sha256
16524 (base32
16525 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
16526 (build-system python-build-system)
16527 (home-page "https://github.com/germangh/python-progressbar")
16528 (synopsis "Text progress bar library for Python")
16529 (description
16530 "This package provides a text progress bar library for Python. This
16531version only differs from the original @code{progressbar} package in that it
16532uses relative package imports instead of absolute imports, which is necessary
16533for the module to work under Python 3.3.")
16534 ;; Either or both of these licenses may be selected.
16535 (license (list license:lgpl2.1+ license:bsd-3))))
16536
16537(define-public python-colorama
16538 (package
16539 (name "python-colorama")
16540 (version "0.4.4")
16541 (source
16542 (origin
16543 (method url-fetch)
16544 (uri (pypi-uri "colorama" version))
16545 (sha256
16546 (base32 "16w62sm95hmh55rqxn4zwdz0bkh3fqm1qnz9cwi3s510iasb4har"))))
16547 (build-system python-build-system)
16548 (synopsis "Colored terminal text rendering for Python")
16549 (description "Colorama is a Python library for rendering colored terminal
16550text.")
16551 (home-page "https://pypi.org/project/colorama/")
16552 (license license:bsd-3)))
16553
16554;; awscli and botocore do not accept version 0.4.4
16555(define-public python-colorama-for-awscli
16556 (package
16557 (inherit python-colorama)
16558 (version "0.4.3")
16559 (source
16560 (origin
16561 (method url-fetch)
16562 (uri (pypi-uri "colorama" version))
16563 (sha256
16564 (base32 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))))
16565
16566(define-public python-moto
16567 (package
16568 (name "python-moto")
16569 (version "3.1.4")
16570 (source (origin
16571 (method url-fetch)
16572 (uri (pypi-uri "moto" version))
16573 (sha256
16574 (base32 "0dfnad1f9d5ybabs69dzc7x357z1r4jbhrhgw57gyic1qnmcw864"))))
16575 (build-system python-build-system)
16576 (arguments
16577 `(#:phases
16578 (modify-phases %standard-phases
16579 (add-after 'unpack 'patch-hardcoded-executable-names
16580 (lambda* (#:key inputs #:allow-other-keys)
16581 (let ((bash-exec (search-input-file inputs "/bin/sh")))
16582 (substitute* "moto/batch/models.py"
16583 (("/bin/sh") bash-exec))
16584 (substitute* (find-files "tests" "\\.py$")
16585 (("#!/bin/bash") (string-append "#!" bash-exec))))))
16586 (replace 'check
16587 (lambda* (#:key tests? #:allow-other-keys)
16588 (when tests?
16589 (invoke "pytest" "-vv" "-m" "not network" "-k"
16590 (string-append
16591 ;; XXX: This test is timing sensitive and may
16592 ;; fail non-deterministically.
16593 "not test_cancel_pending_job"
16594 ;; These tests require Docker.
16595 " and not test_terminate_job"
16596 " and not test_invoke_function_from_sqs_exception"
16597 " and not test_create_custom_lambda_resource__verify_cfnresponse_failed"
16598 " and not test_lambda_function"
16599
16600 ;; These tests also require the network.
16601 " and not test_put_record_batch_http_destination"
16602 " and not test_put_record_http_destination"
16603 " and not test_dependencies"
16604 " and not test_cancel_running_job"
16605 " and not test_container_overrides"))))))))
16606 (native-inputs
16607 (list python-flask
16608 python-flask-cors
16609 python-freezegun
16610 python-graphql-core
16611 python-pytest
16612 python-sure))
16613 (inputs
16614 (list bash-minimal))
16615 (propagated-inputs
16616 (list python-aws-xray-sdk
16617 python-boto3
16618 python-botocore
16619 python-cfn-lint
16620 python-cryptography
16621 python-dateutil
16622 python-docker
16623 python-importlib-metadata
16624 python-jinja2
16625 python-jose
16626 python-jsondiff
16627 python-markupsafe
16628 python-pytz
16629 python-pyyaml
16630 python-requests
16631 python-responses
16632 python-sshpubkeys
16633 python-werkzeug
16634 python-xmltodict))
16635 (home-page "https://github.com/spulec/moto")
16636 (synopsis "Mock out the boto library")
16637 (description
16638 "@code{moto} is a library designed to easily mock out the
16639@code{boto} library.")
16640 (license license:asl2.0)))
16641
16642(define-public python-rsa
16643 (package
16644 (name "python-rsa")
16645 (version "3.4.2")
16646 (source
16647 (origin
16648 (method url-fetch)
16649 (uri (pypi-uri "rsa" version))
16650 (sha256
16651 (base32
16652 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
16653 (build-system python-build-system)
16654 (propagated-inputs
16655 (list python-pyasn1))
16656 (synopsis "Pure-Python RSA implementation")
16657 (description "Python-RSA is a pure-Python RSA implementation. It supports
16658encryption and decryption, signing and verifying signatures, and key
16659generation according to PKCS#1 version 1.5. It can be used as a Python
16660library as well as on the command line.")
16661 (home-page "https://stuvel.eu/rsa")
16662 (license license:asl2.0)))
16663
16664(define-public python-plumbum
16665 (package
16666 (name "python-plumbum")
16667 (version "1.7.0")
16668 (source
16669 (origin
16670 (method url-fetch)
16671 (uri (pypi-uri "plumbum" version))
16672 (sha256
16673 (base32 "1kidj821k79dw064rlxh84xamb9h79ychg3pgj81jlvm5hs48xri"))))
16674 (build-system python-build-system)
16675 (arguments
16676 `(#:tests? #f)) ;no tests
16677 (native-inputs
16678 ;; XXX: Not actually used since there are no tests but required for
16679 ;; build.
16680 (list python-pytest))
16681 (home-page "https://plumbum.readthedocs.io")
16682 (synopsis "Python shell combinators library")
16683 (description
16684 "Plumbum is a library of tools for replacing shell scripts with Python
16685code.")
16686 (license license:expat)))
16687
16688(define-public python-deprecation
16689 (package
16690 (name "python-deprecation")
16691 (version "2.1.0")
16692 (source
16693 (origin
16694 (method url-fetch)
16695 (uri (pypi-uri "deprecation" version))
16696 (sha256
16697 (base32
16698 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
16699 (build-system python-build-system)
16700 (propagated-inputs
16701 (list python-packaging))
16702 (native-inputs
16703 (list python-unittest2))
16704 (home-page "https://deprecation.readthedocs.io/")
16705 (synopsis "Python library to handle automated deprecations")
16706 (description
16707 "This is a library that enables automated deprecations. It offers the
16708@code{deprecated()} decorator to wrap functions, providing proper warnings
16709both in documentation and via Python’s warnings system, as well as the
16710@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
16711that deprecated code is eventually removed.")
16712 (license license:asl2.0)))
16713
16714(define-public python-jmespath
16715 (package
16716 (name "python-jmespath")
16717 (version "1.0.0")
16718 (source
16719 (origin
16720 (method url-fetch)
16721 (uri (pypi-uri "jmespath" version))
16722 (sha256
16723 (base32
16724 "0pmzfi230zfgiq2rz896kbb9f7mp0lnrjdl6x1npvxfixn0f5454"))))
16725 (build-system python-build-system)
16726 (native-inputs
16727 (list python-nose))
16728 (synopsis "JSON Matching Expressions")
16729 (description "JMESPath (pronounced “james path”) is a Python library that
16730allows one to declaratively specify how to extract elements from a JSON
16731document.")
16732 (home-page "https://github.com/jmespath/jmespath.py")
16733 (license license:expat)))
16734
16735(define-public python-symengine
16736 (package
16737 (name "python-symengine")
16738 (version "0.10.0")
16739 (source
16740 (origin
16741 (method url-fetch)
16742 (uri (pypi-uri "symengine" version))
16743 (sha256
16744 (base32 "0i97lb6h8jk0k98805mkw6id5r537469zbh2d95320azq9nfj824"))))
16745 (build-system python-build-system)
16746 (arguments
16747 (list
16748 #:phases
16749 #~(modify-phases %standard-phases
16750 (replace 'check
16751 (lambda* (#:key tests? #:allow-other-keys)
16752 (if tests?
16753 ;; Run tests against installed package.
16754 (with-directory-excursion "/tmp"
16755 (invoke "nosetests" "-v" "symengine.tests"))
16756 (format #t "test suite not run~%")))))))
16757 (native-inputs
16758 (list cmake python-cython python-nose))
16759 (inputs
16760 (list symengine))
16761 (home-page "https://github.com/symengine/symengine.py")
16762 (synopsis "Python library providing wrappers to SymEngine")
16763 (description
16764 "This library provides a Python wrapper to SymEngine, a fast C++ symbolic
16765manipulation library.")
16766 (license license:expat)))
16767
16768(define-public python-uncertainties
16769 (package
16770 (name "python-uncertainties")
16771 (version "3.1.5")
16772 (source
16773 (origin
16774 (method url-fetch)
16775 (uri (pypi-uri "uncertainties" version))
16776 (sha256
16777 (base32
16778 "00z9xl40czmqk0vmxjvmjvwb41r893l4dad7nj1nh6blw3kw28li"))))
16779 (build-system python-build-system)
16780 ;; While there are test files, there is no "tests" directory, so the tests
16781 ;; fail.
16782 (arguments '(#:tests? #false))
16783 (propagated-inputs
16784 (list python-future))
16785 (native-inputs
16786 (list python-nose python-numpy))
16787 (home-page "https://uncertainties-python-package.readthedocs.io/")
16788 (synopsis "Calculations with uncertainties")
16789 (description
16790 "The uncertainties package transparently handles calculations with
16791numbers with uncertainties. It can also yield the derivatives of any
16792expression.")
16793 (license license:bsd-3)))
16794
16795(define-public python-unicodedata2
16796 (package
16797 (name "python-unicodedata2")
16798 (version "15.0.0")
16799 (source
16800 (origin
16801 (method url-fetch)
16802 (uri (pypi-uri "unicodedata2" version))
16803 (sha256
16804 (base32 "0bcgls7m2zndpd8whgznnd5908jbsa50si2bh88wsn0agcznhv7d"))))
16805 (build-system python-build-system)
16806 (home-page "https://github.com/fonttools/unicodedata2")
16807 (synopsis "Python unicodedata backport")
16808 (description "This package corresponds to the latest @code{unicodedata}
16809standard Python module.")
16810 (license license:asl2.0)))
16811
16812(define-public python-asteval
16813 (package
16814 (name "python-asteval")
16815 (version "0.9.23")
16816 (source
16817 (origin
16818 (method url-fetch)
16819 (uri (pypi-uri "asteval" version))
16820 (sha256
16821 (base32
16822 "0f54sd4w1a72ij1bcxs2x7dk9xf8bzclawijf1z18bqx9f96l2gm"))))
16823 (build-system python-build-system)
16824 (native-inputs
16825 (list python-pytest))
16826 (home-page "https://github.com/newville/asteval")
16827 (synopsis "Minimalistic evaluator of Python expressions")
16828 (description
16829 "This package provides a minimalistic evaluator of Python expression
16830using the @code{ast} module")
16831 (license license:expat)))
16832
16833(define-public python-lmfit
16834 (package
16835 (name "python-lmfit")
16836 (version "1.0.2")
16837 (source
16838 (origin
16839 (method url-fetch)
16840 (uri (pypi-uri "lmfit" version))
16841 (sha256
16842 (base32
16843 "0iab33jjb60f8kn0k0cqb0vjp1mdskks2n3kpn97zkw5cvjhq2b7"))))
16844 (build-system python-build-system)
16845 (propagated-inputs
16846 (list python-asteval python-numpy python-scipy python-uncertainties))
16847 (native-inputs
16848 (list python-pytest))
16849 (home-page "https://lmfit.github.io/lmfit-py/")
16850 (synopsis "Least-Squares minimization with bounds and constraints")
16851 (description
16852 "Lmfit provides a high-level interface to non-linear optimization and
16853curve fitting problems for Python. It builds on and extends many of the
16854optimization methods of @code{scipy.optimize}. Initially inspired by (and
16855named for) extending the Levenberg-Marquardt method from
16856@code{scipy.optimize.leastsq}, lmfit now provides a number of useful
16857enhancements to optimization and data fitting problems.")
16858 (license license:bsd-3)))
16859
16860(define-public python-bokeh
16861 (package
16862 (name "python-bokeh")
16863 (version "2.4.3")
16864 (source (origin
16865 (method url-fetch)
16866 (uri (pypi-uri "bokeh" version))
16867 (sha256
16868 (base32
16869 "00sbhya9vfdv3yi07j6mxwx1x1h9497nhd3smdjrcdxgc48q0czg"))))
16870 (build-system python-build-system)
16871 (arguments
16872 `(#:phases
16873 (modify-phases %standard-phases
16874 (replace 'check
16875 (lambda* (#:key tests? #:allow-other-keys)
16876 (when tests?
16877 ;; These require selenium.
16878 (delete-file "tests/unit/bokeh/io/test_export.py")
16879 (delete-file "tests/unit/bokeh/io/test_webdriver.py")
16880 (delete-file "tests/unit/bokeh/embed/test_standalone.py")
16881
16882 ;; Doesn't find ManagedServerLoop fixture
16883 (delete-file "tests/unit/bokeh/test_client_server.py")
16884
16885 ;; This fails because of the Guix wrapper around pytest
16886 (delete-file "tests/unit/bokeh/io/test_util__io.py")
16887
16888 ;; Fixture ipython not found.
16889 (delete-file "tests/unit/bokeh/application/handlers/test_notebook__handlers.py")
16890 (delete-file "tests/unit/bokeh/command/subcommands/test_info.py")
16891
16892 ;; pd fixture not found.
16893 (delete-file "tests/unit/bokeh/models/test_mappers.py")
16894 (delete-file "tests/unit/bokeh/models/util/test_structure.py")
16895 (delete-file "tests/unit/bokeh/plotting/test__plot.py")
16896 (delete-file "tests/unit/bokeh/plotting/test__graph.py")
16897 (delete-file "tests/unit/bokeh/plotting/test_figure.py")
16898 (delete-file "tests/unit/bokeh/core/test_json_encoder.py")
16899 (delete-file "tests/unit/bokeh/core/property/test_bases.py")
16900 (delete-file "tests/unit/bokeh/core/property/test_container.py")
16901 (delete-file "tests/unit/bokeh/core/property/test_dataspec.py")
16902 (delete-file "tests/unit/bokeh/core/property/test_datetime.py")
16903 (delete-file "tests/unit/bokeh/core/property/test_pandas.py")
16904
16905 ;; nx fixture not found.
16906 (delete-file "tests/unit/bokeh/plotting/test_graph.py")
16907 (delete-file "tests/unit/bokeh/models/test_graphs.py")
16908 (delete-file "tests/unit/bokeh/io/test_showing.py")
16909 (delete-file "tests/unit/bokeh/document/test_events__document.py")
16910
16911 ;; These tests need external sample data
16912 (delete-file-recursively "tests/unit/bokeh/sampledata/")
16913
16914 ;; Attempts to install something via npm.
16915 (delete-file "tests/unit/bokeh/test_ext.py")
16916
16917 ;; More failures due to set up problems.
16918 (delete-file "tests/unit/bokeh/server/test_server__server.py")
16919 (delete-file "tests/unit/bokeh/server/test_tornado__server.py")
16920 (delete-file "tests/unit/bokeh/util/test_serialization.py")
16921 (delete-file "tests/unit/bokeh/util/test_hex.py")
16922 (delete-file "tests/unit/bokeh/models/test_sources.py")
16923 (delete-file "tests/unit/bokeh/embed/test_bundle.py")
16924
16925 ;; XXX: This one test transforms a gif of a red box. It
16926 ;; transforms it all right but the base64 doesn't look as
16927 ;; expected, probably because of a change in pillow.
16928 (invoke "pytest" "-v" "-k" "not test_transform_PIL")))))))
16929 (propagated-inputs
16930 (list node-lts
16931 python-jinja2
16932 python-numpy
16933 python-packaging
16934 python-pillow
16935 python-pyyaml
16936 python-tornado-6
16937 python-typing-extensions))
16938 (native-inputs
16939 (list python-beautifulsoup4
16940 python-dateutil
16941 python-flaky
16942 python-mock
16943 python-nbconvert
16944 python-pandas
16945 python-pytest
16946 python-pytz
16947 python-requests))
16948 (home-page "https://github.com/bokeh/bokeh")
16949 (synopsis "Interactive plots and applications in the browser from Python")
16950 (description
16951 "This package provides tools for interactive plots and applications in the
16952browser from Python.")
16953 (license license:bsd-3)))
16954
16955(define-public python-boto
16956 (package
16957 (name "python-boto")
16958 (version "2.49.0")
16959 (source (origin
16960 (method url-fetch)
16961 (uri (pypi-uri "boto" version))
16962 (sha256
16963 (base32
16964 "0njy09c4wjx7ipxhwi6vv404nflyiasl78vwwxxpclnql903n3ga"))))
16965 (build-system python-build-system)
16966 (arguments
16967 ;; XXX: This package is unmaintained and has problems with newer versions
16968 ;; of Python 3 as well as test libraries. 'python-moto' still uses a
16969 ;; subset of this library, so keep it around for now, but disable tests.
16970 '(#:tests? #f))
16971 (propagated-inputs
16972 (list python-paramiko python-requests))
16973 (home-page "https://github.com/boto/boto")
16974 (synopsis "Python interfaces for Amazon Web Services")
16975 (description
16976 "This package provides various facilities for interacting with Amazon
16977Web Services through Python.
16978
16979This software is unmaintained, and new projects should use @code{boto3} instead.")
16980 (license license:expat)))
16981
16982(define-public python-botocore
16983 ;; Note: When updating botocore, also make sure that boto3 and awscli
16984 ;; are compatible.
16985 (package
16986 (name "python-botocore")
16987 (version "1.24.35")
16988 (source
16989 (origin
16990 (method url-fetch)
16991 (uri (pypi-uri "botocore" version))
16992 (sha256
16993 (base32
16994 "0rv8mvhq5s373zdjs2yb45hzvqcqdh2lp2rbb21jjc8ciwnl5d9n"))))
16995 (build-system python-build-system)
16996 (arguments
16997 ;; FIXME: Many tests are failing.
16998 '(#:tests? #f))
16999 (propagated-inputs
17000 (list python-dateutil python-jmespath python-urllib3))
17001 (home-page "https://github.com/boto/botocore")
17002 (synopsis "Low-level interface to AWS")
17003 (description "Botocore is a Python library that provides a low-level
17004interface to the Amazon Web Services (AWS) API.")
17005 (license license:asl2.0)))
17006
17007(define-public python-boto3
17008 (package
17009 (name "python-boto3")
17010 (version "1.21.35")
17011 (home-page "https://github.com/boto/boto3")
17012 (source (origin
17013 (method git-fetch)
17014 (uri (git-reference (url home-page) (commit version)))
17015 (file-name (git-file-name name version))
17016 (sha256
17017 (base32
17018 "1kdyf238rpfldnpzs0rdh3nhjn6hwfym4faskyhzlgzkf1smmbg1"))))
17019 (arguments
17020 `(#:phases
17021 (modify-phases %standard-phases
17022 (add-after 'unpack 'delete-network-tests
17023 ;; Deleting integration tests because they are trying to connect to AWS.
17024 (lambda _
17025 (delete-file-recursively "tests/integration")))
17026 (replace 'check
17027 (lambda* (#:key tests? #:allow-other-keys)
17028 (when tests?
17029 (invoke "pytest" "-v")))))))
17030 (build-system python-build-system)
17031 (native-inputs
17032 (list python-nose python-mock python-pytest))
17033 (propagated-inputs
17034 (list python-botocore python-jmespath python-s3transfer))
17035 (synopsis "AWS SDK for Python")
17036 (description
17037 "Boto3 is a Python library for writing programs that interact with
17038@acronym{AWS,Amazon Web Services}.")
17039 (license license:asl2.0)))
17040
17041(define-public python-pyfiglet
17042 (package
17043 (name "python-pyfiglet")
17044 (version "0.8.post1")
17045 (source
17046 (origin
17047 (method url-fetch)
17048 (uri (pypi-uri "pyfiglet" version))
17049 (sha256
17050 (base32
17051 "0f9n2076ga2ccsg174k2d7n0z4d44ml96yzc72s6g4nhalbk5hn6"))))
17052 (build-system python-build-system)
17053 (home-page "https://github.com/pwaller/pyfiglet")
17054 (synopsis "Draw ASCII art big letters in Python")
17055 (description "This module lets you draw large letter from ordinary characters
17056in pure Python.")
17057 (license license:expat)))
17058
17059(define-public python-xdg
17060 (package
17061 (name "python-xdg")
17062 (version "6.0.0")
17063 (source (origin
17064 (method url-fetch)
17065 (uri (pypi-uri "xdg" version))
17066 (sha256
17067 (base32
17068 "14hwk9j5zjc8rvirw95mrb07zdnpjaxjx2mj3rnq8pnlyaa809r4"))))
17069 (build-system pyproject-build-system)
17070 (native-inputs
17071 (list python-poetry-core))
17072 (home-page "https://github.com/srstevenson/xdg-base-dirs")
17073 (synopsis "Variables defined by the XDG Base Directory Specification")
17074 (description "xdg-base-dirs is a Python module that provides functions to
17075return paths to the directories defined by the XDG Base Directory
17076Specification, to save you from duplicating the same snippet of logic in every
17077Python utility you write that deals with user cache, configuration, or data
17078files.")
17079 (license license:isc)))
17080
17081(define-public python-xdo
17082 (package
17083 (name "python-xdo")
17084 (version "0.3")
17085 (source (origin
17086 (method url-fetch)
17087 (uri (string-append
17088 "http://http.debian.net/debian/pool/main/p/python-xdo/"
17089 "python-xdo_" version ".orig.tar.gz"))
17090 (sha256
17091 (base32
17092 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
17093 (build-system python-build-system)
17094 (arguments
17095 '(#:phases
17096 (modify-phases %standard-phases
17097 (add-before 'install 'patch-libxdo-path
17098 ;; Hardcode the path of dynamically loaded libxdo library.
17099 (lambda* (#:key inputs #:allow-other-keys)
17100 (let ((libxdo (string-append
17101 (assoc-ref inputs "xdotool")
17102 "/lib/libxdo.so"))
17103 (libc (string-append
17104 (assoc-ref inputs "libc")
17105 "/lib/libc.so.6")))
17106 (substitute* "xdo/_xdo.py"
17107 (("find_library\\(\"xdo\"\\)")
17108 (simple-format #f "\"~a\"" libxdo))
17109 (("ctypes\\.util\\.find_library\\('libc'\\)")
17110 (simple-format #f "\"~a\"" libc)))
17111 #t))))
17112 #:tests? #f)) ; no tests provided
17113 (propagated-inputs
17114 (list python-six))
17115 (inputs
17116 `(("xdotool" ,xdotool)
17117 ("libX11" ,libx11)))
17118 (home-page "https://tracker.debian.org/pkg/python-xdo")
17119 (synopsis "Python library for simulating X11 keyboard/mouse input")
17120 (description "Provides bindings to libxdo for manipulating X11 via simulated
17121input. (Note that this is mostly a legacy library; you may wish to look at
17122python-xdo for newer bindings.)")
17123 (license license:bsd-3)))
17124
17125(define-public python-xdoctest
17126 (package
17127 (name "python-xdoctest")
17128 (version "1.0.0")
17129 (source
17130 (origin
17131 (method url-fetch)
17132 (uri (pypi-uri "xdoctest" version))
17133 (sha256
17134 (base32 "0bgbmb9nqv95f9gfxqifqff1qaz5fnanjqy4hv7ygrjp2kksgfvy"))))
17135 (build-system python-build-system)
17136 (arguments
17137 (list #:phases
17138 #~(modify-phases %standard-phases
17139 (replace 'check
17140 (lambda* (#:key tests? #:allow-other-keys)
17141 (when tests?
17142 ;; A writable HOME is needed by the
17143 ;; 'import_module_from_path' test.
17144 (setenv "HOME" "/tmp")
17145 (invoke "pytest" "-vv")))))))
17146 (propagated-inputs (list python-six))
17147 (native-inputs (list python-pytest which))
17148 (home-page "https://github.com/Erotemic/xdoctest")
17149 (synopsis "Rewrite of the Python builtin doctest module")
17150 (description "This package provides a rewrite of the builtin doctest
17151module which leverages the Python @acronym{AST, Abstract Syntax Tree} instead
17152of @acronym{REGEXPs, regular expressions}.")
17153 (license license:asl2.0)))
17154
17155(define-public python-mako
17156 (package
17157 (name "python-mako")
17158 (version "1.2.2")
17159 (source
17160 (origin
17161 (method url-fetch)
17162 (uri (pypi-uri "Mako" version))
17163 (sha256
17164 (base32
17165 "0gqnv9py1dqp01jmf5zxp0vj2dbhq1l9zy55fai319iv6sdqc91p"))))
17166 (build-system python-build-system)
17167 (arguments
17168 `(#:phases (modify-phases %standard-phases
17169 (replace 'check
17170 (lambda* (#:key tests? #:allow-other-keys)
17171 (if tests?
17172 (invoke "pytest" "-vv")
17173 (format #t "test suite not run~%"))
17174 #t)))))
17175 (propagated-inputs
17176 (list python-markupsafe))
17177 (native-inputs
17178 (list python-mock python-pytest))
17179 (home-page "https://www.makotemplates.org/")
17180 (synopsis "Templating language for Python")
17181 (description "Mako is a templating language for Python that compiles
17182templates into Python modules.")
17183 (license license:expat)))
17184
17185(define-public python-waitress
17186 (package
17187 (name "python-waitress")
17188 (version "1.1.0")
17189 (source
17190 (origin
17191 (method url-fetch)
17192 (uri (pypi-uri "waitress" version))
17193 (patches (search-patches "python-waitress-fix-tests.patch"))
17194 (sha256
17195 (base32
17196 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
17197 (build-system python-build-system)
17198 (home-page "https://github.com/Pylons/waitress")
17199 (synopsis "Waitress WSGI server")
17200 (description "Waitress is meant to be a production-quality pure-Python WSGI
17201server with very acceptable performance.")
17202 (license license:zpl2.1)))
17203
17204(define-public python-whichcraft
17205 (package
17206 (name "python-whichcraft")
17207 (version "0.6.1")
17208 (source
17209 (origin
17210 (method url-fetch)
17211 (uri (pypi-uri "whichcraft" version))
17212 (sha256
17213 (base32
17214 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
17215 (build-system python-build-system)
17216 (native-inputs
17217 (list python-pytest))
17218 (home-page "https://github.com/pydanny/whichcraft")
17219 (synopsis "Cross-platform cross-python shutil.which functionality")
17220 (description
17221 "This package provides a shim of the shutil.which function that's
17222designed to work across multiple versions of Python.")
17223 (license license:bsd-3)))
17224
17225(define-public python-cookiecutter
17226 (package
17227 (name "python-cookiecutter")
17228 (version "1.7.3")
17229 (source
17230 (origin
17231 (method url-fetch)
17232 (uri (pypi-uri "cookiecutter" version))
17233 (sha256
17234 (base32 "0mx49whhwcxmvcak27zr7p7ndzkn3w7psfd7fzh3n91fi1r4v6kb"))))
17235 (build-system python-build-system)
17236 (native-inputs
17237 (list python-freezegun python-pytest python-pytest-catchlog
17238 python-pytest-cov python-pytest-mock))
17239 (propagated-inputs
17240 (list python-binaryornot
17241 python-click
17242 python-future
17243 python-jinja2
17244 python-jinja2-time
17245 python-poyo
17246 python-requests
17247 python-slugify
17248 python-text-unidecode
17249 python-whichcraft))
17250 (home-page "https://github.com/cookiecutter/cookiecutter")
17251 (synopsis
17252 "Command-line utility that creates projects from project templates")
17253 (description
17254 "This package provides a command-line utility that creates projects from
17255project templates, e.g. creating a Python package project from a Python package
17256project template.")
17257 (license license:bsd-3)))
17258
17259(define-public python-pyquery
17260 (package
17261 (name "python-pyquery")
17262 (version "1.2.17")
17263 (source
17264 (origin
17265 (method url-fetch)
17266 (uri (pypi-uri "pyquery" version))
17267 (sha256
17268 (base32
17269 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
17270 (build-system python-build-system)
17271 (native-inputs
17272 (list python-webob python-webtest))
17273 (propagated-inputs
17274 (list python-lxml python-cssselect))
17275 (home-page "https://github.com/gawel/pyquery")
17276 (synopsis "Make jQuery-like queries on xml documents")
17277 (description "pyquery allows you to make jQuery queries on xml documents.
17278The API is as much as possible the similar to jQuery. pyquery uses lxml for
17279fast xml and html manipulation.")
17280 (license license:bsd-3)))
17281
17282(define-public python-anyjson
17283 (package
17284 (name "python-anyjson")
17285 (version "0.3.3")
17286 (source
17287 (origin
17288 (method url-fetch)
17289 (uri (pypi-uri "anyjson" version))
17290 (sha256
17291 (base32
17292 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
17293 (build-system python-build-system)
17294 (arguments
17295 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
17296 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
17297 ;; whatever) so this transformation needs to be done before the tests
17298 ;; can be run. Maybe we could add a build step to transform beforehand
17299 ;; but it could be annoying/difficult.
17300 #:tests? #f))
17301 (native-inputs (list python-setuptools-57)) ;for use_2to3 support
17302 (home-page "https://bitbucket.org/runeh/anyjson/")
17303 (synopsis
17304 "Wraps best available JSON implementation in a common interface")
17305 (description
17306 "Anyjson loads whichever is the fastest JSON module installed
17307and provides a uniform API regardless of which JSON implementation is used.")
17308 (license license:bsd-3)))
17309
17310(define-public python-amqp
17311 (package
17312 (name "python-amqp")
17313 (version "5.1.1")
17314 (source
17315 (origin
17316 (method url-fetch)
17317 (uri (pypi-uri "amqp" version))
17318 (sha256
17319 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
17320 (build-system python-build-system)
17321 (arguments
17322 (list
17323 #:phases
17324 #~(modify-phases %standard-phases
17325 (replace 'check
17326 (lambda* (#:key tests? #:allow-other-keys)
17327 (when tests?
17328 (invoke "pytest" "-vv"
17329 "-c" "/dev/null" ;take control over pytest options
17330 ;; Integration tests require network connectivity.
17331 "--ignore" "t/integration")))))))
17332 (native-inputs (list python-pytest))
17333 (propagated-inputs (list python-vine))
17334 (home-page "https://github.com/celery/py-amqp")
17335 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
17336 (description
17337 "This is a fork of amqplib which was originally written by Barry Pederson.
17338It is maintained by the Celery project, and used by kombu as a pure python
17339alternative when librabbitmq is not available.")
17340 (license license:lgpl2.1+)))
17341
17342(define-public python-beniget
17343 (package
17344 (name "python-beniget")
17345 (version "0.4.1")
17346 (home-page "https://github.com/serge-sans-paille/beniget")
17347 (source
17348 (origin
17349 (method url-fetch)
17350 (uri (pypi-uri "beniget" version))
17351 (sha256
17352 (base32 "035c4f78yllpw2c5p1w92520rilm7nnpsqh7yvi3qmfhi8xlnmbm"))))
17353 (build-system python-build-system)
17354 (propagated-inputs
17355 (list python-gast))
17356 (synopsis "Extract semantic information about static Python code")
17357 (description
17358 "Beniget is a collection of analyzers for Python @acronym{AST,
17359Abstract Syntax Tree}. It is a building block for writing a static analyzer
17360or compiler for Python.")
17361 (license license:bsd-3)))
17362
17363(define-public python-txamqp
17364 (package
17365 (name "python-txamqp")
17366 (version "0.8.2")
17367 (source
17368 (origin
17369 (method url-fetch)
17370 (uri (pypi-uri "txAMQP" version))
17371 (sha256
17372 (base32
17373 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
17374 (build-system python-build-system)
17375 (propagated-inputs
17376 (list python-six python-twisted))
17377 (home-page "https://github.com/txamqp/txamqp")
17378 (synopsis "Communicate with AMQP peers and brokers using Twisted")
17379 (description
17380 "This package provides a Python library for communicating with AMQP peers
17381and brokers using the asynchronous networking framework Twisted. It contains
17382all the necessary code to connect, send and receive messages to/from an
17383AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
17384also includes support for using Thrift RPC over AMQP in Twisted
17385applications.")
17386 (license license:asl2.0)))
17387
17388(define-public python-kombu
17389 (package
17390 (name "python-kombu")
17391 (version "5.2.4")
17392 (source
17393 (origin
17394 (method url-fetch)
17395 (uri (pypi-uri "kombu" version))
17396 (sha256
17397 (base32 "044ng79gj04668kf5fmy7fjkw8302xyapskkn65ym52zfbpf7kip"))))
17398 (build-system python-build-system)
17399 (arguments
17400 (list
17401 #:phases
17402 #~(modify-phases %standard-phases
17403 (replace 'check
17404 (lambda* (#:key tests? #:allow-other-keys)
17405 (when tests?
17406 (invoke "pytest" "-vv"
17407 ;; The transport tests attempt to pass messages to
17408 ;; many different databases.
17409 "--ignore" "t/unit/transport")))))))
17410 (native-inputs
17411 (list python-case python-pyro4 python-pytest-sugar
17412 python-pytest python-pytz))
17413 (propagated-inputs
17414 (list python-amqp python-cached-property python-vine))
17415 (home-page "https://kombu.readthedocs.io")
17416 (synopsis "Message passing library for Python")
17417 (description "The aim of Kombu is to make messaging in Python as easy as
17418possible by providing an idiomatic high-level interface for the AMQ protocol,
17419and also provide proven and tested solutions to common messaging problems.
17420AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
17421message orientation, queuing, routing, reliability and security, for which the
17422RabbitMQ messaging server is the most popular implementation.")
17423 (license license:bsd-3)))
17424
17425(define-public python-billiard
17426 (package
17427 (name "python-billiard")
17428 (version "3.6.4.0")
17429 (source
17430 (origin
17431 (method url-fetch)
17432 (uri (pypi-uri "billiard" version))
17433 (sha256
17434 (base32 "0ismj2p8c66ykpss94rs0bfra5agxxmljz8r3gaq79r8valfb799"))))
17435 (build-system python-build-system)
17436 (arguments
17437 `(#:phases
17438 (modify-phases %standard-phases
17439 (add-after 'unpack 'remove-win-files
17440 (lambda _
17441 (for-each delete-file-recursively
17442 ;; test_multiprocessing seem to be written in Python2.
17443 '("t/integration/tests/test_multiprocessing.py"
17444 "t/unit/test_win32.py"
17445 "billiard/popen_spawn_win32.py"
17446 "billiard/_win.py")))))))
17447 (native-inputs
17448 (list python-case python-psutil python-pytest))
17449 (home-page "https://github.com/celery/billiard")
17450 (synopsis "Python multiprocessing fork with improvements and bugfixes")
17451 (description
17452 "Billiard is a fork of the Python 2.7 multiprocessing package. The
17453multiprocessing package itself is a renamed and updated version of R Oudkerk's
17454pyprocessing package. This standalone variant is intended to be compatible with
17455Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
17456 (license license:bsd-3)))
17457
17458(define-public python-celery
17459 (package
17460 (name "python-celery")
17461 (version "5.2.6")
17462 (source
17463 (origin
17464 (method url-fetch)
17465 (uri (pypi-uri "celery" version))
17466 (sha256
17467 (base32 "109lcqarrbmh95sk1dm4yxayq1h3i27f4w23ndk64mqgyfnqqffi"))))
17468 (build-system python-build-system)
17469 (arguments
17470 '(#:phases
17471 (modify-phases %standard-phases
17472 (add-after 'unpack 'relax-requirements
17473 (lambda _
17474 (substitute* "requirements/default.txt"
17475 (("pytz.*")
17476 "pytz\n"))))
17477 (replace 'check
17478 (lambda* (#:key tests? #:allow-other-keys)
17479 (when tests?
17480 (invoke "python" "-m" "pytest" "t"
17481 "--ignore" "t/integration" ;hangs tests
17482 ;; The MongoDB backend test appears to expect an older
17483 ;; version of MongoDB which provided its own bson
17484 ;; module, fails with " AttributeError: module 'bson'
17485 ;; has no attribute 'encode'".
17486 "--ignore" "t/unit/backends/test_mongodb.py"
17487 ;; AssertionErrors
17488 "-k" "not test_check_privileges_no_fchown ")))))))
17489 (native-inputs
17490 (list python-case
17491 python-dnspython
17492 python-flaky
17493 python-iniconfig
17494 python-moto
17495 python-msgpack
17496 python-pytest ;for pytest-subtests
17497 python-pytest-celery
17498 python-pytest-subtests
17499 python-pytest-timeout
17500 python-toml))
17501 (propagated-inputs
17502 (list python-billiard
17503 python-click
17504 python-click-didyoumean
17505 python-click-plugins
17506 python-click-repl
17507 python-kombu
17508 python-pytz
17509 python-vine))
17510 (home-page "https://celeryproject.org")
17511 (synopsis "Distributed Task Queue")
17512 (description "Celery is an asynchronous task queue/job queue based on
17513distributed message passing. It is focused on real-time operation, but
17514supports scheduling as well. The execution units, called tasks, are executed
17515concurrently on a single or more worker servers using multiprocessing,
17516Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
17517synchronously (wait until ready).")
17518 (license license:bsd-3)))
17519
17520(define-public python-cesium
17521 (package
17522 (name "python-cesium")
17523 (version "0.12.1")
17524 (source (origin
17525 (method url-fetch)
17526 (uri (pypi-uri "cesium" version))
17527 (sha256
17528 (base32
17529 "0jr0ycqz9ns6mcskm4sxx92k40fj3v0x9knjaw5ac9f3mpqxsfbv"))))
17530 (build-system pyproject-build-system)
17531 (arguments
17532 (list
17533 #:phases
17534 #~(modify-phases %standard-phases
17535 ;; The installed test files contain the /gnu/store location, not the
17536 ;; location of the discovered test files from the build directory.
17537 ;; The test framework doesn't like this. The easiest way around
17538 ;; this mismatch is to jump to the output directory.
17539 (add-before 'check 'check-chdir
17540 (lambda _ (chdir #$output))))))
17541 (propagated-inputs
17542 (list python-click ;XXX required by python-dask
17543 python-cloudpickle
17544 python-dask
17545 python-gatspy
17546 python-joblib
17547 python-numpy
17548 python-pandas
17549 python-scikit-learn
17550 python-scipy
17551 python-toolz))
17552 (native-inputs (list python-cython python-pytest python-setuptools-scm))
17553 (home-page "https://pypi.org/project/cesium/")
17554 (synopsis "Library for time-series feature extraction and processing")
17555 (description
17556 "Cesium is a library for time-series feature extraction and processing.")
17557 (license license:bsd-3)))
17558
17559(define-public python-translitcodec
17560 (package
17561 (name "python-translitcodec")
17562 (version "0.4.0")
17563 (source
17564 (origin
17565 (method url-fetch)
17566 (uri (pypi-uri "translitcodec" version))
17567 (sha256
17568 (base32
17569 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
17570 (build-system python-build-system)
17571 (arguments
17572 `(#:tests? #f)) ; no tests provided
17573 (home-page
17574 "https://github.com/claudep/translitcodec")
17575 (synopsis
17576 "Unicode to 8-bit charset transliteration codec")
17577 (description
17578 "This package contains codecs for transliterating ISO 10646 texts into
17579best-effort representations using smaller coded character sets (ASCII,
17580ISO 8859, etc.).")
17581 (license license:expat)))
17582
17583(define-public python-anyqt
17584 (package
17585 (name "python-anyqt")
17586 (version "0.2.0")
17587 (source
17588 (origin
17589 (method url-fetch)
17590 (uri (pypi-uri "AnyQt" version))
17591 (sha256
17592 (base32 "0fvnhdk0nzhlm1xydisvdq1w7lwaakdkbwb1rkyz4vd232wji4jb"))))
17593 (build-system python-build-system)
17594 (arguments
17595 `(#:tests? #f ;there are no tests
17596 #:phases
17597 (modify-phases %standard-phases
17598 (add-after 'unpack 'delete-files
17599 ;; Delete files related to other operating systems.
17600 (lambda _
17601 (delete-file "AnyQt/QtMacExtras.py")
17602 (delete-file "AnyQt/QtWinExtras.py"))))))
17603 (home-page "https://github.com/ales-erjavec/anyqt")
17604 (synopsis "PyQt4/PyQt5 compatibility layer")
17605 (description "AnyQt is a PyQt4/PyQt5 compatibility layer.")
17606 (license license:gpl3)))
17607
17608(define-public python-pyqtgraph
17609 (package
17610 (name "python-pyqtgraph")
17611 (version "0.13.1")
17612 (source
17613 (origin
17614 (method url-fetch)
17615 (uri (pypi-uri "pyqtgraph" version))
17616 (sha256
17617 (base32 "026wq2p7h1dmg2ldwhxiv28i5qld0llhnak06dxp4rdrkpsqg3v9"))))
17618 (build-system pyproject-build-system)
17619 (arguments
17620 ;; This test fails. It suggests to disable assert rewriting in Pytest,
17621 ;; but it still doesn't pass.
17622 (list #:test-flags #~'("-k" "not test_reload")
17623 #:phases
17624 #~(modify-phases %standard-phases
17625 (add-before 'check 'set-qpa
17626 (lambda _
17627 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
17628 (native-inputs
17629 (list python-pytest python-pytest-cov python-pytest-xdist))
17630 (inputs
17631 (list qtbase-5))
17632 (propagated-inputs
17633 (list python-h5py python-numpy python-pyopengl python-scipy
17634 python-pyqt))
17635 (home-page "https://www.pyqtgraph.org")
17636 (synopsis "Scientific graphics and GUI library for Python")
17637 (description
17638 "PyQtGraph is a Pure-python graphics library for PyQt5, PyQt6, PySide2
17639and PySide6. It is intended for use in mathematics, scientific or engineering
17640applications.")
17641 (license license:expat)))
17642
17643(define-public python-qasync
17644 (package
17645 (name "python-qasync")
17646 (version "0.22.0")
17647 (source
17648 (origin
17649 ;; There are no tests in the PyPI tarball.
17650 (method git-fetch)
17651 (uri (git-reference
17652 (url "https://github.com/CabbageDevelopment/qasync/")
17653 (commit (string-append "v" version))))
17654 (file-name (git-file-name name version))
17655 (sha256
17656 (base32 "1q9cllrwf94whr0f6mipa0hdq1rcyqvklwx19g35g2dav8f3xkjl"))))
17657 (build-system python-build-system)
17658 (arguments
17659 `(#:test-target "pytest"
17660 #:phases
17661 (modify-phases %standard-phases
17662 (add-before 'check 'set-qpa
17663 (lambda _
17664 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
17665 (native-inputs
17666 (list python-pytest python-pytest-runner))
17667 (propagated-inputs
17668 (list python-pyqt))
17669 (home-page "https://github.com/CabbageDevelopment/qasync")
17670 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
17671 (description
17672 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
17673by providing an implementation of the PEP 3156 event-loop.")
17674 (license license:bsd-2)))
17675
17676(define-public python-editor
17677 (package
17678 (name "python-editor")
17679 (version "1.0.4")
17680 (source
17681 (origin
17682 (method url-fetch)
17683 (uri (pypi-uri "python-editor" version))
17684 (sha256
17685 (base32
17686 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
17687 (build-system python-build-system)
17688 (arguments
17689 '(#:tests? #f)) ;XXX: needs a TTY and an editor
17690 (home-page "https://github.com/fmoo/python-editor")
17691 (synopsis "Programmatically open an editor, capture the result")
17692 (description
17693 "python-editor is a library that provides the editor module for
17694programmatically interfacing with your system's $EDITOR.")
17695 (license license:asl2.0)))
17696
17697(define-public python-multiprocessing-logging
17698 (package
17699 (name "python-multiprocessing-logging")
17700 (version "0.3.1")
17701 (home-page "https://github.com/jruere/multiprocessing-logging")
17702 (source (origin
17703 (method git-fetch)
17704 (uri (git-reference
17705 (url home-page)
17706 (commit (string-append "v" version))))
17707 (file-name (git-file-name name version))
17708 (sha256
17709 (base32
17710 "1625wy3djlr3b2fpd3vi822f8gw6b75mnls5a4318dbi9za5pf0y"))))
17711 (build-system python-build-system)
17712 (synopsis "Manage logs from multiple processes")
17713 (description
17714 "This Python module implements a multiprocessing-aware @code{Handler}
17715that, when set on the root @code{Logger}, will tunnel log records to the
17716main process so that they are handled correctly.")
17717 (license license:lgpl3+)))
17718
17719(define-public python-vobject
17720 (package
17721 (name "python-vobject")
17722 (version "0.9.6.1")
17723 (source (origin
17724 (method url-fetch)
17725 (uri (pypi-uri "vobject" version))
17726 (sha256
17727 (base32
17728 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
17729 (build-system python-build-system)
17730 (arguments
17731 '(;; The test suite relies on some non-portable Windows interfaces.
17732 #:tests? #f))
17733 (propagated-inputs
17734 (list python-dateutil python-pyicu))
17735 (synopsis "Parse and generate vCard and vCalendar files")
17736 (description "Vobject is intended to be a full featured Python package for
17737parsing and generating vCard and vCalendar files. Currently, iCalendar files
17738are supported and well tested. vCard 3.0 files are supported, and all data
17739should be imported, but only a few components are understood in a sophisticated
17740way.")
17741 (home-page "https://eventable.github.io/vobject/")
17742 (license license:asl2.0)))
17743
17744(define-public python-munkres
17745 (package
17746 (name "python-munkres")
17747 (version "1.1.4")
17748 (source (origin
17749 (method url-fetch)
17750 (uri (pypi-uri "munkres" version))
17751 (sha256
17752 (base32
17753 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
17754 (arguments
17755 (list
17756 #:phases
17757 '(modify-phases %standard-phases
17758 (add-after 'unpack 'disable-test
17759 (lambda _
17760 ;; See https://github.com/bmc/munkres/issues/40
17761 (substitute* "test/test_munkres.py"
17762 (("^def test_profit_float" m)
17763 (string-append "\
17764import platform
17765@pytest.mark.skipif(platform.architecture()[0] == \"32bit\",
17766 reason=\"Fails on 32 bit architectures\")
17767" m))))))))
17768 (build-system python-build-system)
17769 (native-inputs (list python-pytest))
17770 (home-page "https://software.clapper.org/munkres/")
17771 (synopsis "Implementation of the Munkres algorithm")
17772 (description "The Munkres module provides an implementation of the Munkres
17773algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
17774useful for solving the Assignment Problem.")
17775 (license license:bsd-3)))
17776
17777(define-public python-whoosh
17778 (package
17779 (name "python-whoosh")
17780 (version "2.7.4")
17781 (source
17782 (origin
17783 (method url-fetch)
17784 (uri (pypi-uri "Whoosh" version))
17785 (sha256
17786 (base32
17787 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
17788 (build-system python-build-system)
17789 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
17790 (native-inputs
17791 (list python-pytest))
17792 (home-page "https://bitbucket.org/mchaput/whoosh")
17793 (synopsis "Full text indexing, search, and spell checking library")
17794 (description
17795 "Whoosh is a fast, pure-Python full text indexing, search, and spell
17796checking library.")
17797 (license license:bsd-2)))
17798
17799(define-public python-codespell
17800 (package
17801 (name "python-codespell")
17802 (version "2.2.5")
17803 (source
17804 (origin
17805 (method url-fetch)
17806 (uri (pypi-uri "codespell" version))
17807 (sha256
17808 (base32 "0mmynpblhwbja0vmzbmbb9cgpxdl7b0lxaf9h2zr5dpddvgsv7vd"))))
17809 (build-system pyproject-build-system)
17810 (inputs
17811 (list python-chardet))
17812 (native-inputs
17813 (list python-flake8
17814 python-pygments
17815 python-pytest
17816 python-pytest-cov
17817 python-pytest-dependency
17818 python-tomli))
17819 (arguments
17820 `(#:phases
17821 (modify-phases %standard-phases
17822 (replace 'check
17823 (lambda* (#:key outputs tests? #:allow-other-keys)
17824 (when tests?
17825 ;; Make installed executable available for running the tests.
17826 (setenv "PATH"
17827 (string-append (assoc-ref outputs "out") "/bin"
17828 ":" (getenv "PATH")))
17829 (invoke "pytest" "-vv")))))))
17830 (home-page "https://github.com/codespell-project/codespell/")
17831 (synopsis "Spellchecker for code")
17832 (description "Codespell fixes common misspellings in text files.
17833It's designed primarily for checking misspelled words in source code,
17834but it can be used with other files as well. It does not check for word
17835membership in a complete dictionary, but instead looks for a set of
17836common misspellings. Therefore it should catch errors like \"adn\", but
17837it will not catch \"adnasdfasdf\". This also means it shouldn't
17838generate false-positives when you use a niche term it doesn't know
17839about.")
17840 (license
17841 (list
17842 ; for codespell and codespell_lib
17843 license:gpl2
17844 ; for dictionary*.txt
17845 license:cc-by-sa3.0))))
17846
17847(define-public python-pathlib
17848 (package
17849 (name "python-pathlib")
17850 (version "1.0.1")
17851 (source (origin
17852 (method url-fetch)
17853 (uri (pypi-uri "pathlib" version))
17854 (sha256
17855 (base32
17856 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
17857 (build-system python-build-system)
17858 ;; The tests depend on the internal "test" module, which does not provide
17859 ;; a stable interface.
17860 (arguments `(#:tests? #f))
17861 (home-page "https://pathlib.readthedocs.org/")
17862 (synopsis "Object-oriented file system paths")
17863 (description "Pathlib offers a set of classes to handle file system paths.
17864It offers the following advantages over using string objects:
17865
17866@enumerate
17867@item No more cumbersome use of os and os.path functions. Everything can
17868be done easily through operators, attribute accesses, and method calls.
17869@item Embodies the semantics of different path types. For example,
17870comparing Windows paths ignores casing.
17871@item Well-defined semantics, eliminating any inconsistencies or
17872ambiguities (forward vs. backward slashes, etc.).
17873@end enumerate
17874
17875Note: In Python 3.4, pathlib is now part of the standard library. For other
17876Python versions please consider python-pathlib2 instead, which tracks the
17877standard library module. This module (python-pathlib) isn't maintained
17878anymore.")
17879 (license license:expat)))
17880
17881(define-public python-jellyfish
17882 (package
17883 (name "python-jellyfish")
17884 (version "0.8.8")
17885 (source (origin
17886 (method url-fetch)
17887 (uri (pypi-uri "jellyfish" version))
17888 (sha256
17889 (base32
17890 "0p2s6b30sfffx8sya2i8kz0i0riw9fq1fi0k89s8kdgrmjf0h1h5"))))
17891 (build-system python-build-system)
17892 (arguments
17893 `(#:tests? #f ; XXX: Tests cannot find C coded version.
17894 #:phases
17895 (modify-phases %standard-phases
17896 (replace 'check
17897 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
17898 (when tests?
17899 (add-installed-pythonpath inputs outputs)
17900 (invoke "pytest" "-vv" "jellyfish/test.py")))))))
17901 (native-inputs
17902 (list python-pytest))
17903 (home-page "https://github.com/jamesturk/jellyfish")
17904 (synopsis "Approximate and phonetic matching of strings")
17905 (description "Jellyfish uses a variety of string comparison and phonetic
17906encoding algorithms to do fuzzy string matching.")
17907 (license license:bsd-2)))
17908
17909(define-public python-pdfminer-six
17910 (package
17911 (name "python-pdfminer-six")
17912 (version "20201018")
17913 ;; There are no tests in the PyPI tarball.
17914 (source
17915 (origin
17916 (method git-fetch)
17917 (uri (git-reference
17918 (url "https://github.com/pdfminer/pdfminer.six")
17919 (commit version)))
17920 (file-name (git-file-name name version))
17921 (sha256
17922 (base32 "1a2fxxnnjqbx344znpvx7cnv1881dk6585ibw01inhfq3w6yj2lr"))))
17923 (build-system python-build-system)
17924 (arguments
17925 `(#:phases
17926 (modify-phases %standard-phases
17927 ;; Tests write to the source tree.
17928 (add-after 'unpack 'make-git-checkout-writable
17929 (lambda _
17930 (for-each make-file-writable (find-files "."))
17931 #t))
17932 (replace 'check
17933 (lambda _
17934 (invoke "make" "test"))))))
17935 (propagated-inputs
17936 (list python-chardet python-cryptography python-sortedcontainers))
17937 (native-inputs
17938 (list python-nose python-tox))
17939 (home-page "https://github.com/pdfminer/pdfminer.six")
17940 (synopsis "PDF parser and analyzer")
17941 (description "@code{pdfminer.six} is a community maintained fork of
17942the original PDFMiner. It is a tool for extracting information from PDF
17943documents. It focuses on getting and analyzing text data. Pdfminer.six
17944extracts the text from a page directly from the sourcecode of the PDF. It
17945can also be used to get the exact location, font or color of the text.")
17946 (license license:expat)))
17947
17948(define-public python-rarfile
17949 (package
17950 (name "python-rarfile")
17951 (version "4.0")
17952 (source (origin
17953 (method url-fetch)
17954 (uri (pypi-uri "rarfile" version))
17955 (sha256
17956 (base32
17957 "1882wv9szcm29mnyhjmspyflyr2l7z73srn14w4dlnww49lqfm37"))))
17958 (build-system python-build-system)
17959 (arguments
17960 `(#:tests? #f ;; The bsdtar utility is very limited and most tests fail.
17961 #:phases
17962 (modify-phases %standard-phases
17963 (add-after 'unpack 'patch
17964 (lambda* (#:key inputs #:allow-other-keys)
17965 (substitute* "rarfile.py"
17966 ;; Disable unrar and unar, which are unavailable on Guix.
17967 (("(unrar|unar)=True" all tool) (string-append tool "=False"))
17968 ;; Hardcode path to bsdtar
17969 (("\"bsdtar\"")
17970 (string-append "\"" (assoc-ref inputs "libarchive") "/bin/bsdtar\"")))
17971 #t))
17972 (replace 'check
17973 (lambda* (#:key inputs tests? #:allow-other-keys)
17974 (when tests?
17975 (invoke "pytest" "-vv")))))))
17976 (native-inputs (list python-pytest))
17977 (inputs (list libarchive))
17978 (home-page "https://github.com/markokr/rarfile")
17979 (synopsis "RAR archive reader for Python")
17980 (description "This is Python module for RAR archive reading. The interface
17981is made as zipfile like as possible.")
17982 (license license:isc)))
17983
17984(define-public python-slugid
17985 (package
17986 (name "python-slugid")
17987 (version "2.0.0")
17988 (source
17989 (origin
17990 (method git-fetch)
17991 (uri (git-reference
17992 (url "https://github.com/taskcluster/slugid.py")
17993 (commit (string-append "v" version))))
17994 (file-name (git-file-name name version))
17995 (sha256
17996 (base32 "1h64p2jlqv6lsmw8h2j203kx3bhv72cwzpk5gdhsaamw30cp3h1i"))))
17997 (build-system python-build-system)
17998 (native-inputs (list python-nose))
17999 (arguments
18000 (list #:phases
18001 #~(modify-phases %standard-phases
18002 (replace 'check
18003 (lambda* (#:key inputs tests? #:allow-other-keys)
18004 (when tests?
18005 ;; The project uses tox to run the tests via nose.
18006 (invoke "nosetests" "-v" "test.py")))))))
18007 (home-page "http://taskcluster.github.io/slugid.py")
18008 (synopsis "Module for Base64 encoded UUID v4 slugs")
18009 (description "This package provides a module for generating v4
18010UUIDs and encoding them into 22 character URL-safe base64 slug
18011representation.")
18012 (license license:mpl2.0)))
18013
18014(define-public python-rich
18015 (package
18016 (name "python-rich")
18017 (version "12.4.1")
18018 (source (origin
18019 (method url-fetch)
18020 (uri (pypi-uri "rich" version))
18021 (sha256
18022 (base32
18023 "149vjb4cpf9mz14iig0b6d8065dm8aslp6pc45g9ipmp1wf00ffj"))))
18024 (build-system python-build-system)
18025 (arguments
18026 `(#:phases
18027 (modify-phases %standard-phases
18028 (replace 'check
18029 (lambda* (#:key inputs tests? #:allow-other-keys)
18030 (when tests?
18031 (copy-recursively (string-append
18032 (assoc-ref inputs "tests") "/tests")
18033 "tests")
18034 (invoke "python" "-m" "pytest" "-vv")))))))
18035 (propagated-inputs
18036 (list python-attrs python-colorama python-commonmark python-pygments
18037 python-typing-extensions))
18038 (native-inputs
18039 `(("python-pytest" ,python-pytest)
18040 ("tests"
18041 ;; The release on pypi comes without tests. We can't build from this
18042 ;; checkout, though, because installation requires an invocation of
18043 ;; poetry.
18044 ,(origin
18045 (method git-fetch)
18046 (uri (git-reference
18047 (url "https://github.com/willmcgugan/rich")
18048 (commit (string-append "v" version))))
18049 (file-name (git-file-name name version))
18050 (sha256
18051 (base32
18052 "17c3gljn8zv32xnpsgd3fqgqn4r7cdfqri41hridcpbhssdgkyp9"))))))
18053 (home-page "https://github.com/willmcgugan/rich")
18054 (synopsis "Render rich text and more to the terminal")
18055 (description
18056 "This is a Python package for rendering rich text, tables, progress bars,
18057syntax highlighting, markdown and more to the terminal.")
18058 (license license:expat)))
18059
18060(define-public python-rich-click
18061 (package
18062 (name "python-rich-click")
18063 (version "1.6.1")
18064 (source (origin
18065 (method url-fetch)
18066 (uri (pypi-uri "rich-click" version))
18067 (sha256
18068 (base32
18069 "0zkp2sn0vz1hhjbv9bf8fifyzi8ib2d7v7sfak8n3qn67rlrdzzq"))))
18070 (build-system python-build-system)
18071 (propagated-inputs
18072 (list python-click python-importlib-metadata python-rich))
18073 (native-inputs (list python-pre-commit))
18074 (home-page "https://github.com/ewels/rich-click")
18075 (synopsis "Format click help output nicely with rich")
18076 (description "Click is a \"Python package for creating beautiful command
18077line interfaces\". Rich is a \"Python library for rich text and beautiful
18078formatting in the terminal\". The intention of rich-click is to provide
18079attractive help output from click, formatted with rich, with minimal
18080customization required.")
18081 (license license:expat)))
18082
18083(define-public python-textual
18084 (package
18085 (name "python-textual")
18086 (version "0.1.18")
18087 (source (origin
18088 (method url-fetch)
18089 (uri (pypi-uri "textual" version))
18090 (sha256
18091 (base32
18092 "08yg5a51hz1axfj5hx28hx31gq5apcj6vpkkmawmiplisa73z25j"))))
18093 (build-system python-build-system)
18094 (arguments
18095 (let ((tests
18096 ;; The release on pypi comes without tests. We can't build
18097 ;; from this checkout, though, because installation requires
18098 ;; an invocation of poetry.
18099 (origin
18100 (method git-fetch)
18101 (uri (git-reference
18102 (url "https://github.com/Textualize/textual")
18103 (commit (string-append "v" version))))
18104 (file-name (git-file-name name version))
18105 (sha256
18106 (base32
18107 "0b3ycwqhp21mg9fvmadgxhgbvkwq6fd784l2xcmvy77rravrnnax")))))
18108 (list #:phases
18109 #~(modify-phases %standard-phases
18110 (replace 'check
18111 (lambda* (#:key tests? #:allow-other-keys)
18112 (when tests?
18113 (copy-recursively #$(file-append tests "/tests")
18114 "tests")
18115 (invoke "python" "-m" "pytest" "-vv"))))))))
18116 (propagated-inputs
18117 (list python-rich python-typing-extensions))
18118 (native-inputs
18119 (list python-pytest))
18120 (home-page "https://github.com/Textualize/textual")
18121 (synopsis "Build text user interfaces in Python")
18122 (description "Textual is a @acronym{TUI, Text User Interface} framework
18123for Python inspired by modern web development.")
18124 (license license:expat)))
18125
18126(define-public python-magic
18127 (package
18128 (name "python-magic")
18129 (version "0.4.27")
18130 (home-page "https://github.com/ahupp/python-magic")
18131 (source
18132 (origin
18133 (method git-fetch)
18134 (uri (git-reference (url home-page) (commit version)))
18135 (file-name (git-file-name name version))
18136 (sha256
18137 (base32
18138 "1x11kfn4g244fia9a7y4ly8dqv5zsxfg3l5azc54dl6gkp2bk7vx"))))
18139 (build-system python-build-system)
18140 (arguments
18141 '(#:phases (modify-phases %standard-phases
18142 ;; Replace a specific method call with a hard-coded
18143 ;; path to the necessary libmagic.so file in the
18144 ;; store. If we don't do this, then the method call
18145 ;; will fail to find the libmagic.so file, which in
18146 ;; turn will cause any application using
18147 ;; python-magic to fail.
18148 (add-before 'build 'hard-code-path-to-libmagic
18149 (lambda* (#:key inputs #:allow-other-keys)
18150 (let ((magic (search-input-file inputs "/lib/libmagic.so")))
18151 (substitute* "magic/loader.py"
18152 (("find_library\\('magic'\\)")
18153 (string-append "'" magic "'"))))))
18154 (replace 'check
18155 (lambda* (#:key tests? #:allow-other-keys)
18156 ;; The test suite mandates this variable.
18157 (setenv "LC_ALL" "en_US.UTF-8")
18158 (if tests?
18159 (with-directory-excursion "test"
18160 (invoke "python" "./libmagic_test.py"))
18161 (format #t "test suite not run~%")))))))
18162 (native-inputs
18163 (list which))
18164 (inputs
18165 ;; python-magic needs to be able to find libmagic.so.
18166 (list file))
18167 (synopsis "File type identification using libmagic")
18168 (description
18169 "This module uses ctypes to access the libmagic file type
18170identification library. It makes use of the local magic database and
18171supports both textual and MIME-type output. Note that this module and
18172the python-file module both provide a \"magic.py\" file; these two
18173modules, which are different and were developed separately, both serve
18174the same purpose: to provide Python bindings for libmagic.")
18175 (license license:expat)))
18176
18177(define-public s3cmd
18178 (package
18179 (name "s3cmd")
18180 (version "2.3.0")
18181 (source
18182 (origin
18183 (method git-fetch)
18184 (uri (git-reference
18185 (url "https://github.com/s3tools/s3cmd")
18186 (commit (string-append "v" version))))
18187 (file-name (git-file-name name version))
18188 (sha256
18189 (base32 "0rdgwwmmp8mdxc84bxq6k9a7v7z2qgc3df47djzs2b84gw81dglx"))))
18190 (build-system python-build-system)
18191 (arguments
18192 (list #:phases
18193 #~(modify-phases %standard-phases
18194 (add-after 'unpack 'hide-wrapping
18195 (lambda _
18196 (substitute* "S3/MultiPart.py"
18197 (("sys\\.argv\\[0\\]") "\"s3cmd\""))
18198 (substitute* "s3cmd"
18199 (("optparser\\.get_prog_name\\(\\)") "\"s3cmd\"")))))))
18200 (inputs
18201 (list python-dateutil
18202 python-magic))
18203 (home-page "https://s3tools.org/s3cmd")
18204 (synopsis "Command line tool for S3-compatible storage services")
18205 (description
18206 "S3cmd is a command line tool for uploading, retrieving and managing data
18207in storage services that are compatible with the Amazon Simple Storage
18208Service (S3) protocol, including S3 itself. It supports rsync-like backup,
18209GnuPG encryption, and more. It also supports management of Amazon's
18210CloudFront content delivery network.")
18211 (license license:gpl2+)))
18212
18213(define-public python-pkgconfig
18214 (package
18215 (name "python-pkgconfig")
18216 (version "1.3.1")
18217 (source
18218 (origin
18219 (method url-fetch)
18220 (uri (pypi-uri "pkgconfig" version))
18221 (sha256
18222 (base32
18223 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
18224 (build-system python-build-system)
18225 (native-inputs
18226 (list python-nose))
18227 (inputs
18228 (list pkg-config))
18229 (arguments
18230 `(#:phases
18231 (modify-phases %standard-phases
18232 (add-before 'build 'patch
18233 ;; Hard-code the path to pkg-config.
18234 (lambda _
18235 (substitute* "pkgconfig/pkgconfig.py"
18236 (("'pkg-config'")
18237 (string-append "'" (which "pkg-config") "'")))))
18238 (replace 'check
18239 (lambda _
18240 (invoke "nosetests" "test.py"))))))
18241 (home-page "https://github.com/matze/pkgconfig")
18242 (synopsis "Python interface for pkg-config")
18243 (description "This module provides a Python interface to pkg-config. It
18244can be used to find all pkg-config packages, check if a package exists,
18245check if a package meets certain version requirements, query CFLAGS and
18246LDFLAGS and parse the output to build extensions with setup.py.")
18247 (license license:expat)))
18248
18249(define-public python-bz2file
18250 (package
18251 (name "python-bz2file")
18252 (version "0.98")
18253 (source
18254 (origin
18255 (method url-fetch)
18256 (uri (pypi-uri "bz2file" version))
18257 (sha256
18258 (base32
18259 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
18260 (build-system python-build-system)
18261 (arguments
18262 `(#:tests? #f)) ; Tests use deprecated python modules.
18263 (home-page "https://github.com/nvawda/bz2file")
18264 (synopsis "Read and write bzip2-compressed files")
18265 (description
18266 "Bz2file is a Python library for reading and writing bzip2-compressed
18267files. It contains a drop-in replacement for the I/O interface in the
18268standard library's @code{bz2} module, including features from the latest
18269development version of CPython that are not available in older releases.")
18270 (license license:asl2.0)))
18271
18272(define-public python-future
18273 (package
18274 (name "python-future")
18275 (version "0.18.2")
18276 (source
18277 (origin
18278 (method url-fetch)
18279 (uri (pypi-uri "future" version))
18280 (sha256
18281 (base32
18282 "0zakvfj87gy6mn1nba06sdha63rn4njm7bhh0wzyrxhcny8avgmi"))))
18283 (build-system python-build-system)
18284 ;; Many tests connect to the network or are otherwise flawed.
18285 ;; https://github.com/PythonCharmers/python-future/issues/210
18286 (arguments
18287 `(#:tests? #f
18288 #:phases
18289 (modify-phases %standard-phases
18290 (replace 'sanity-check
18291 (let ((sanity-check (assoc-ref %standard-phases 'sanity-check)))
18292 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
18293 (let* ((files (find-files (site-packages inputs outputs)
18294 "top_level\\.txt"))
18295 (backups (map (lambda (f) (string-append f ".bak"))
18296 files)))
18297 (for-each copy-file files backups)
18298 (substitute* files
18299 ;; Nobody be usin' winreg on Guix
18300 ;; Also, don't force users to have tkinter when they don't
18301 ;; need it
18302 (("(winreg|tkinter)") ""))
18303 (apply sanity-check args)
18304 (for-each rename-file backups files))))))))
18305 (home-page "https://python-future.org")
18306 (synopsis "Single-source support for Python 3 and 2")
18307 (description
18308 "@code{python-future} is the missing compatibility layer between Python 2 and
18309Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
18310to support both Python 2 and Python 3 with minimal overhead.")
18311 (license license:expat)))
18312
18313(define-public python-cysignals
18314 (package
18315 (name "python-cysignals")
18316 (version "1.9.0")
18317 (source
18318 (origin
18319 (method url-fetch)
18320 (uri (pypi-uri "cysignals" version))
18321 (sha256
18322 (base32
18323 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
18324 (build-system python-build-system)
18325 (native-inputs
18326 (list python-cython python-sphinx))
18327 (inputs
18328 (list pari-gp))
18329 (arguments
18330 `(#:modules ((guix build python-build-system)
18331 ((guix build gnu-build-system) #:prefix gnu:)
18332 (guix build utils))
18333 ;; FIXME: Tests are executed after installation and currently fail
18334 ;; when not installing into standard locations; the author is working
18335 ;; on a fix.
18336 #:tests? #f
18337 #:phases
18338 (modify-phases %standard-phases
18339 (add-before
18340 'build 'configure
18341 (assoc-ref gnu:%standard-phases 'configure)))))
18342 (home-page
18343 "https://github.com/sagemath/cysignals")
18344 (synopsis
18345 "Handling of interrupts and signals for Cython")
18346 (description
18347 "The cysignals package provides mechanisms to handle interrupts (and
18348other signals and errors) in Cython code, using two related approaches,
18349for mixed Cython/Python code or external C libraries and pure Cython code,
18350respectively.")
18351 (license license:lgpl3+)))
18352
18353(define-public python-rope
18354 (package
18355 (name "python-rope")
18356 (version "1.1.1")
18357 (source
18358 (origin
18359 (method url-fetch)
18360 (uri (pypi-uri "rope" version))
18361 (sha256
18362 (base32
18363 "0bkzwkllxxdxd3w70xiy137lqvnlmmaplsc2ya3s23ss4kq8y10k"))))
18364 (build-system python-build-system)
18365 (arguments
18366 (list #:phases
18367 `(modify-phases %standard-phases
18368 (add-after 'unpack 'disable-broken-test
18369 (lambda _
18370 (substitute* "ropetest/contrib/autoimporttest.py"
18371 (("def test_search_module")
18372 "def __notest_search_module")
18373 (("def test_search_submodule")
18374 "def __notest_search_submodule")))))))
18375 (native-inputs
18376 (list python-pytest-timeout
18377 python-pytest))
18378 (home-page "https://github.com/python-rope/rope")
18379 (synopsis "Refactoring library for Python")
18380 (description "Rope is a refactoring library for Python. It facilitates
18381the renaming, moving and extracting of attributes, functions, modules, fields
18382and parameters in Python source code. These refactorings can also be applied
18383to occurrences in strings and comments.")
18384 (license license:lgpl3+)))
18385
18386(define-public python-py3status
18387 (package
18388 (name "python-py3status")
18389 (version "3.50")
18390 (source
18391 (origin
18392 (method url-fetch)
18393 (uri (pypi-uri "py3status" version))
18394 (sha256
18395 (base32 "0j2dx9lzpic15r8p0r0s3jmcskxpacahxl640b4864ldn5rlnh9d"))))
18396 (build-system python-build-system)
18397 (inputs
18398 (list file))
18399 (arguments
18400 '(#:phases
18401 (modify-phases %standard-phases
18402 ;; 'file' is used for detection of configuration file encoding
18403 ;; let's make link the dependency to particular input
18404 (add-before 'build 'patch-file-path
18405 (lambda* (#:key inputs #:allow-other-keys)
18406 (let ((file-path (assoc-ref inputs "file")))
18407 (substitute* "py3status/parse_config.py"
18408 (("\\[\"file\", \"-b\"")
18409 (string-append "['" file-path "/bin/file', '-b'")))
18410 #t))))
18411 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
18412 (home-page "https://github.com/ultrabug/py3status")
18413 (synopsis "Extensible i3status wrapper written in Python")
18414 (description "py3status is an i3status wrapper which extends i3status
18415functionality in a modular way, allowing you to extend your panel with your
18416own code, responding to click events and updating clock every second.")
18417 (license license:bsd-3)))
18418
18419(define-public python-tblib
18420 (package
18421 (name "python-tblib")
18422 (version "1.6.0")
18423 (source (origin
18424 (method url-fetch)
18425 (uri (pypi-uri "tblib" version))
18426 (sha256
18427 (base32
18428 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
18429 (build-system python-build-system)
18430 (arguments
18431 `(#:phases
18432 (modify-phases %standard-phases
18433 (replace 'check
18434 (lambda _
18435 (invoke "py.test" "-vv" "tests" "README.rst"))))))
18436 (native-inputs
18437 (list python-pytest python-six))
18438 (home-page "https://github.com/ionelmc/python-tblib")
18439 (synopsis "Traceback serialization library")
18440 (description
18441 "Traceback serialization allows you to:
18442
18443@enumerate
18444@item Pickle tracebacks and raise exceptions with pickled tracebacks in
18445different processes. This allows better error handling when running code over
18446multiple processes (imagine multiprocessing, billiard, futures, celery etc).
18447
18448@item Parse traceback strings and raise with the parsed tracebacks.
18449@end enumerate\n")
18450 (license license:bsd-3)))
18451
18452(define-public python-tftpy
18453 (package
18454 (name "python-tftpy")
18455 (version "0.8.2")
18456 (source
18457 (origin
18458 (method git-fetch) ;no tests in PyPI archive
18459 (uri (git-reference
18460 (url "https://github.com/msoulier/tftpy")
18461 (commit version)))
18462 (file-name (git-file-name name version))
18463 (sha256
18464 (base32
18465 "1gl04ps8h8r7av3h0zbm8gwmkqs9rkk5vf7n8mv2bzrkwvy9hacc"))))
18466 (build-system python-build-system)
18467 (arguments
18468 `(#:phases (modify-phases %standard-phases
18469 (replace 'check
18470 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
18471 (when tests?
18472 ;; The default DEBUG logging level is way too verbose.
18473 (substitute* "t/test.py"
18474 (("logging\\.DEBUG")
18475 "logging.INFO"))
18476 (invoke "python" "-m" "unittest" "t/test.py")))))))
18477 (home-page "https://tftpy.sourceforge.net/")
18478 (synopsis "Python trivial file transfer protocol (TFTP) library")
18479 (description "TFTPy is a trivial file transfer protocol (TFTP) Python
18480library. It can be used to act both as a TFTP client or TFTP server.")
18481 (license license:expat)))
18482
18483(define-public python-greenlet
18484 (package
18485 (name "python-greenlet")
18486 (version "2.0.1")
18487 (source
18488 (origin
18489 (method url-fetch)
18490 (uri (pypi-uri "greenlet" version))
18491 (sha256
18492 (base32 "0rqgxp1fai0fcyv46nd1389mxvk3ccixgdkwws70xnk08ib05rj2"))))
18493 (build-system python-build-system)
18494 (home-page "https://greenlet.readthedocs.io/")
18495 (synopsis "Lightweight in-process concurrent programming")
18496 (description
18497 "Greenlet package is a spin-off of Stackless, a version of CPython
18498that supports micro-threads called \"tasklets\". Tasklets run
18499pseudo-concurrently (typically in a single or a few OS-level threads) and
18500are synchronized with data exchanges on \"channels\".")
18501 (license (list license:psfl license:expat))))
18502
18503(define-public python-objgraph
18504 (package
18505 (name "python-objgraph")
18506 (version "3.4.1")
18507 (source
18508 (origin
18509 (method url-fetch)
18510 (uri (pypi-uri "objgraph" version))
18511 (sha256
18512 (base32
18513 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
18514 (build-system python-build-system)
18515 (propagated-inputs
18516 (list python-graphviz))
18517 (native-inputs
18518 (list python-mock graphviz))
18519 (home-page "https://mg.pov.lt/objgraph/")
18520 (synopsis "Draw Python object reference graphs with graphviz")
18521 (description
18522 "This package provides tools to draw Python object reference graphs with
18523graphviz.")
18524 (license license:expat)))
18525
18526(define-public python-gevent
18527 (package
18528 (name "python-gevent")
18529 (version "22.10.2")
18530 (source (origin
18531 (method url-fetch)
18532 (uri (pypi-uri "gevent" version))
18533 (sha256
18534 (base32
18535 "0ijwwm2yr7jgz8xs1rbvzj6gp7xw1pagf0i7g99b6dzffshiv80w"))
18536 (modules '((guix build utils)))
18537 (snippet
18538 '(begin
18539 ;; unbunding libev and c-ares
18540 (delete-file-recursively "deps")
18541 ;; Remove cythonized files.
18542 (with-directory-excursion "src/gevent"
18543 (for-each delete-file
18544 (append (list "resolver/cares.c"
18545 "queue.c"
18546 "local.c"
18547 "libev/corecext.h"
18548 "libev/corecext.c"
18549 "greenlet.c"
18550 "event.c"
18551 "_waiter.c"
18552 "_tracer.c"
18553 "_semaphore.c"
18554 "_imap.c"
18555 "_ident.c"
18556 "_hub_primitives.c"
18557 "_hub_local.c"
18558 "_greenlet_primitives.c"
18559 "_abstract_linkable.c")
18560 (find-files "." "\\.html$"))))))))
18561 (build-system python-build-system)
18562 (arguments
18563 `(#:modules ((ice-9 ftw)
18564 (ice-9 match)
18565 (srfi srfi-26)
18566 (guix build utils)
18567 (guix build python-build-system))
18568 #:phases (modify-phases %standard-phases
18569 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
18570 (lambda _
18571 (substitute* "src/gevent/subprocess.py"
18572 (("/bin/sh") (which "sh")))
18573 (for-each (lambda (file)
18574 (substitute* file
18575 (("/bin/sh") (which "sh"))
18576 (("/bin/true") (which "true"))))
18577 (find-files "src/greentest" "\\.py$"))))
18578 (add-before 'build 'do-not-use-bundled-sources
18579 (lambda _
18580 (setenv "GEVENTSETUP_EMBED" "0")
18581
18582 ;; Prevent building bundled libev.
18583 (substitute* "setup.py"
18584 (("run_make=_BUILDING")
18585 "run_make=False"))))
18586 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
18587 (lambda* (#:key inputs #:allow-other-keys)
18588 (let ((greenlet (string-append
18589 (assoc-ref inputs "python-greenlet")
18590 "/include")))
18591 (match (scandir greenlet
18592 (lambda (item)
18593 (string-prefix? "python" item)))
18594 ((python)
18595 (setenv "C_INCLUDE_PATH"
18596 (string-append greenlet "/" python ":"
18597 (or (getenv "C_INCLUDE_PATH")
18598 ""))))))))
18599 (add-before 'check 'pretend-to-be-CI
18600 (lambda _
18601 ;; A few tests are skipped due to network constraints or
18602 ;; get longer timeouts when running in a CI environment.
18603 ;; Piggy-back on that, as we need the same adjustments.
18604 (setenv "TRAVIS" "1")
18605 (setenv "APPVEYOR" "1")))
18606 (add-before 'check 'adjust-tests
18607 (lambda _
18608 (let ((disabled-tests
18609 '(;; These tests relies on networking which is
18610 ;; not available in the build container.
18611 "test__getaddrinfo_import.py"
18612 "test__server_pywsgi.py"
18613 ;; XXX: These tests borrow functionality from the
18614 ;; Python builtin 'test' module, but it is not
18615 ;; installed with the Guix Python distribution.
18616 "test_smtpd.py"
18617 "test_wsgiref.py"
18618 "test_urllib2.py"
18619 "test_thread.py"
18620 "test_threading.py"
18621 "test__threading_2.py"
18622 ;; These tests rely on KeyboardInterrupts which do not
18623 ;; work inside the build container for some reason
18624 ;; (lack of controlling terminal?).
18625 "test_subprocess.py"
18626 "test__issues461_471.py"
18627 ;; TODO: Patch out the tests that use getprotobyname, etc
18628 ;; instead of disabling all the tests from these files.
18629 "test__resolver_dnspython.py"
18630 "test__doctests.py"
18631 "test__all__.py"
18632 "test___config.py"
18633 "test__execmodules.py"
18634 ;; This test contains 'test_unlink', which
18635 ;; fails on i686 (see:
18636 ;; https://github.com/gevent/gevent/issues/1558).
18637 "test__core_stat.py")))
18638 (call-with-output-file "skipped_tests.txt"
18639 (lambda (port)
18640 (format port "~a~%"
18641 (string-join disabled-tests "\n")))))))
18642 (replace 'check
18643 (lambda _
18644 ;; Use the build daemons configured number of workers.
18645 (setenv "NWORKERS" (number->string (parallel-job-count)))
18646
18647 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
18648 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
18649 (propagated-inputs
18650 (list python-greenlet python-zope-event python-zope-interface))
18651 (native-inputs
18652 (list python-cython
18653 ;; For tests.
18654 python-dnspython python-psutil python-objgraph))
18655 (inputs
18656 (list c-ares libev))
18657 (home-page "https://www.gevent.org/")
18658 (synopsis "Coroutine-based network library")
18659 (description
18660 "@code{gevent} is a coroutine-based Python networking library that uses
18661@code{greenlet} to provide a high-level synchronous API on top of the
18662@code{libev} event loop.")
18663 (license license:expat)))
18664
18665(define-public python-fastimport
18666 (package
18667 (name "python-fastimport")
18668 (version "0.9.9")
18669 (source
18670 (origin
18671 (method url-fetch)
18672 (uri (pypi-uri "fastimport" version))
18673 (sha256
18674 (base32 "06gk14qgm9dxx3pzjn0ckdbywc8ial2bjfzddqwlr4bn1nnqkbll"))))
18675 (build-system python-build-system)
18676 (home-page "https://github.com/jelmer/python-fastimport")
18677 (synopsis "VCS fastimport parser and generator in Python")
18678 (description "This package provides a parser for and generator of the Git
18679@url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
18680format.")
18681 (license license:gpl2+)))
18682
18683(define-public python-twisted
18684 (package
18685 (name "python-twisted")
18686 (version "19.7.0")
18687 (source (origin
18688 (method url-fetch)
18689 (uri (pypi-uri "Twisted" version ".tar.bz2"))
18690 (sha256
18691 (base32
18692 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
18693 (build-system python-build-system)
18694 (arguments
18695 '(#:tests? #f ; FIXME: some tests fail
18696 #:phases
18697 (modify-phases %standard-phases
18698 ;; Remove scripts, because they depend on [conch]
18699 (add-after 'unpack 'remove-entrypoint
18700 (lambda _
18701 (substitute* "src/twisted/python/_setup.py"
18702 (("\".+ = twisted\\.conch\\.scripts\\..+\",") "")))))))
18703 (propagated-inputs
18704 (list python-zope-interface
18705 python-pyhamcrest
18706 python-incremental
18707 python-hyperlink
18708 python-constantly
18709 python-automat))
18710 (home-page "https://twistedmatrix.com/")
18711 (synopsis "Asynchronous networking framework written in Python")
18712 (description
18713 "Twisted is an extensible framework for Python programming, with special
18714focus on event-based network programming and multiprotocol integration.")
18715 (license license:expat)))
18716
18717(define-public python-pika
18718 (package
18719 (name "python-pika")
18720 (version "1.2.1")
18721 (source
18722 (origin
18723 (method git-fetch)
18724 (uri (git-reference
18725 (url "https://github.com/pika/pika")
18726 (commit version)))
18727 (file-name (git-file-name name version))
18728 (sha256
18729 (base32
18730 "0sqj3bg6jwign8vwvn337fbwy69sm684ns1vh5kbfnskq4him9i2"))))
18731 (build-system python-build-system)
18732 (arguments
18733 '(#:phases (modify-phases %standard-phases
18734 (add-after 'unpack 'disable-live-tests
18735 (lambda _
18736 ;; Disable tests that require RabbitMQ, which is not
18737 ;; yet available in Guix.
18738 (substitute* "nose2.cfg"
18739 (("tests=tests/unit,tests/acceptance")
18740 "start-dir=tests/unit"))
18741 (with-directory-excursion "tests"
18742 (for-each delete-file
18743 '("unit/base_connection_tests.py"
18744 "unit/threaded_test_wrapper_test.py")))))
18745 (replace 'check
18746 (lambda* (#:key tests? #:allow-other-keys)
18747 (when tests?
18748 (setenv "PYTHONPATH" (getcwd))
18749 (invoke "nose2" "-v")))))))
18750 (native-inputs
18751 (list python-mock
18752 python-nose2
18753 ;; These are optional at runtime, and provided here for tests.
18754 python-gevent
18755 python-tornado
18756 python-twisted))
18757 (home-page "https://pika.readthedocs.org")
18758 (synopsis "Pure Python AMQP Client Library")
18759 (description
18760 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
18761Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
18762network support library.")
18763 (license license:bsd-3)))
18764
18765(define-public python-ply
18766 (package
18767 (name "python-ply")
18768 (version "3.11")
18769 (source
18770 (origin
18771 (method url-fetch)
18772 (uri (pypi-uri "ply" version))
18773 (sha256
18774 (base32
18775 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
18776 (build-system python-build-system)
18777 (home-page "http://www.dabeaz.com/ply/")
18778 (synopsis "Python Lex & Yacc")
18779 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
18780It uses LR parsing and does extensive error checking.")
18781 (license license:bsd-3)))
18782
18783(define-public python-tabulate
18784 (package
18785 (name "python-tabulate")
18786 (version "0.8.9")
18787 (source (origin
18788 (method url-fetch)
18789 (uri (pypi-uri "tabulate" version))
18790 (sha256
18791 (base32
18792 "19qkdz8xwk5jxa5xn53mnk76qnh4ysm81vzj664jw1b0azr167gb"))))
18793 (build-system python-build-system)
18794 (arguments
18795 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
18796 ;; and the latest release is not tagged in the upstream repository.
18797 '(#:tests? #f))
18798 (home-page "https://bitbucket.org/astanin/python-tabulate")
18799 (synopsis "Pretty-print tabular data")
18800 (description
18801 "Tabulate is a library and command-line utility to pretty-print tabular
18802data in Python.")
18803 (license license:expat)))
18804
18805(define-public python-kazoo
18806 (package
18807 (name "python-kazoo")
18808 (version "2.8.0")
18809 (source
18810 (origin
18811 (method url-fetch)
18812 (uri (pypi-uri "kazoo" version))
18813 (sha256
18814 (base32
18815 "1zpj5cc8624w6i0pxgcxqkjwbkm4pkrv19d7wh5df3jais32g3jq"))))
18816 (build-system python-build-system)
18817 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
18818 (propagated-inputs
18819 (list python-six))
18820 (home-page "https://kazoo.readthedocs.org")
18821 (synopsis "High-level Zookeeper client library")
18822 (description
18823 "Kazoo is a Python client library for the Apache Zookeeper distributed
18824application service. It is designed to be easy to use and to avoid common
18825programming errors.")
18826 (license license:asl2.0)))
18827
18828(define-public python-pykafka
18829 (package
18830 (name "python-pykafka")
18831 (version "2.4.0")
18832 (source (origin
18833 (method url-fetch)
18834 (uri (pypi-uri "pykafka" version))
18835 (sha256
18836 (base32
18837 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
18838 (build-system python-build-system)
18839 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
18840 (propagated-inputs
18841 (list python-gevent python-kazoo python-tabulate))
18842 (inputs
18843 (list librdkafka))
18844 (home-page "https://pykafka.readthedocs.io/")
18845 (synopsis "Apache Kafka client for Python")
18846 (description
18847 "PyKafka is a client for the Apache Kafka distributed messaging system.
18848It includes Python implementations of Kafka producers and consumers, which
18849are optionally backed by a C extension built on librdkafka.")
18850 (license license:asl2.0)))
18851
18852(define-public python-wcwidth
18853 (package
18854 (name "python-wcwidth")
18855 (version "0.1.8")
18856 (source (origin
18857 (method url-fetch)
18858 (uri (pypi-uri "wcwidth" version))
18859 (sha256
18860 (base32
18861 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
18862 (build-system python-build-system)
18863 (home-page "https://github.com/jquast/wcwidth")
18864 (synopsis "Measure number of terminal column cells of wide-character codes")
18865 (description "Wcwidth measures the number of terminal column cells of
18866wide-character codes. It is useful for those implementing a terminal emulator,
18867or programs that carefully produce output to be interpreted by one. It is a
18868Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
18869specified in POSIX.1-2001 and POSIX.1-2008.")
18870 (license license:expat)))
18871
18872(define-public python-chai
18873 (package
18874 (name "python-chai")
18875 (version "1.1.2")
18876 (source (origin
18877 (method url-fetch)
18878 (uri (pypi-uri "chai" version))
18879 (sha256
18880 (base32
18881 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))
18882 (patches (search-patches "python-chai-drop-python2.patch"))))
18883 (build-system python-build-system)
18884 (home-page "https://github.com/agoragames/chai")
18885 (synopsis "Mocking framework for Python")
18886 (description
18887 "Chai provides an api for mocking, stubbing and spying your python
18888objects, patterned after the Mocha library for Ruby.")
18889 (license license:bsd-3)))
18890
18891(define-public python-inflect
18892 (package
18893 (name "python-inflect")
18894 (version "6.0.4")
18895 (source (origin
18896 (method url-fetch)
18897 (uri (pypi-uri "inflect" version))
18898 (sha256
18899 (base32
18900 "1sqj4svg2vbn4vq332nxnvky2433rgxbvjd529lddjmn2yd68hhq"))))
18901 (build-system pyproject-build-system)
18902 (arguments
18903 (list
18904 #:test-flags
18905 '(list "--ignore=_custom_build/backend.py"
18906 "-k" "not mypy-status")
18907 #:phases
18908 '(modify-phases %standard-phases
18909 ;; The build system insists on ignoring the existing environment and
18910 ;; running "pip install".
18911 (add-after 'unpack 'do-not-use-pip-install
18912 (lambda _
18913 (substitute* "pyproject.toml"
18914 (("^build-backend.*") "\
18915build-backend = \"backend\"
18916backend_path = [\"_custom_build\"]\n")
18917 (("requires = .*") "requires = []\n"))
18918 (mkdir-p "_custom_build")
18919 (with-output-to-file "_custom_build/backend.py"
18920 (lambda _
18921 (display "\
18922from setuptools import build_meta as _orig
18923from setuptools.build_meta import *
18924def get_requires_for_build_wheel(config_settings=None):
18925 return []
18926def get_requires_for_build_sdist(config_settings=None):
18927 return []
18928")))
18929 (setenv "PYTHONPATH"
18930 (string-append (getcwd) "/_custom_build")))))))
18931 (propagated-inputs (list python-pydantic))
18932 (native-inputs (list python-flake8
18933 python-pygments
18934 python-pytest
18935 python-pytest-black
18936 python-pytest-checkdocs
18937 python-pytest-cov
18938 python-pytest-enabler
18939 python-pytest-flake8
18940 python-pytest-mypy
18941 ;; For the version number
18942 python-setuptools-scm))
18943 (home-page "https://github.com/jaraco/inflect")
18944 (synopsis "Correctly generate plurals, singular nouns, ordinals, indefinite articles")
18945 (description
18946 "This Python module lets you correctly generate plurals, singular nouns,
18947ordinals, indefinite articles; it also can convert numbers to words.")
18948 (license license:expat)))
18949
18950(define-public python-inflection
18951 (package
18952 (name "python-inflection")
18953 (version "0.3.1")
18954 (source
18955 (origin (method url-fetch)
18956 (uri (pypi-uri "inflection" version))
18957 (sha256
18958 (base32
18959 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
18960 (build-system python-build-system)
18961 (native-inputs
18962 (list python-pytest))
18963 (home-page "https://github.com/jpvanhal/inflection")
18964 (synopsis "Python string transformation library")
18965 (description
18966 "Inflection is a string transformation library. It singularizes
18967and pluralizes English words, and transforms strings from CamelCase to
18968underscored string.")
18969 (license license:expat)))
18970
18971(define-public python-pylev
18972 (package
18973 (name "python-pylev")
18974 (version "1.3.0")
18975 (source (origin
18976 (method url-fetch)
18977 (uri (pypi-uri "pylev" version))
18978 (sha256
18979 (base32
18980 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
18981 (build-system python-build-system)
18982 (home-page "https://github.com/toastdriven/pylev")
18983 (synopsis "Levenshtein distance implementation in Python")
18984 (description "Pure Python Levenshtein implementation, based off the
18985Wikipedia code samples at
18986@url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
18987 (license license:bsd-3)))
18988
18989(define-public python-cleo
18990 (package
18991 (name "python-cleo")
18992 (version "0.8.1")
18993 (source (origin
18994 (method url-fetch)
18995 (uri (pypi-uri "cleo" version))
18996 (sha256
18997 (base32
18998 "17q6wi3q280kxmxzb2iwnnqih2xbljn18v0bjx2ip18p079j43ix"))))
18999 (build-system python-build-system)
19000 (native-inputs
19001 (list ;; For testing
19002 python-mock python-pytest-mock python-pytest))
19003 (propagated-inputs
19004 (list python-backpack python-clikit python-pastel python-pylev))
19005 (home-page "https://github.com/sdispater/cleo")
19006 (synopsis "Command-line arguments library for Python")
19007 (description
19008 "Cleo allows you to create command-line commands with signature in
19009docstring and colored output.")
19010 (license license:expat)))
19011
19012(define-public python-tomlkit
19013 (package
19014 (name "python-tomlkit")
19015 (version "0.11.6")
19016 (source
19017 (origin
19018 (method url-fetch)
19019 (uri (pypi-uri "tomlkit" version))
19020 (sha256
19021 (base32 "0wsxnv9bs7jk8ig8blj9c438a1ygvdad7y9cn1zr720nfbjm5fbi"))))
19022 (build-system python-build-system)
19023 (native-inputs
19024 (list python-pytest python-pyyaml))
19025 (home-page "https://github.com/sdispater/tomlkit")
19026 (synopsis "Style-preserving TOML library")
19027 (description
19028 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
19029preserves all comments, indentations, whitespace and internal element ordering,
19030and makes them accessible and editable via an intuitive API. It can also
19031create new TOML documents from scratch using the provided helpers. Part of the
19032implementation has been adapted, improved, and fixed from Molten.")
19033 (license license:expat)))
19034
19035(define-public python-shellingham
19036 (package
19037 (name "python-shellingham")
19038 (version "1.5.1")
19039 (source
19040 (origin
19041 (method url-fetch)
19042 (uri (pypi-uri "shellingham" version))
19043 (sha256
19044 (base32 "0iawv24xx6vhwbhqlxyyg901f8pf6abqyfg0711v1bvlipx83g21"))))
19045 (build-system python-build-system)
19046 (arguments
19047 '(#:phases
19048 (modify-phases %standard-phases
19049 (replace 'check
19050 (lambda* (#:key tests? #:allow-other-keys)
19051 (when tests?
19052 (invoke "python" "-m" "pytest" "-v")))))))
19053 (native-inputs
19054 (list python-pytest python-pytest-mock))
19055 (home-page "https://github.com/sarugaku/shellingham")
19056 (synopsis "Tool to detect surrounding shell")
19057 (description
19058 "Shellingham detects what shell the current Python executable is
19059running in.")
19060 (license license:isc)))
19061
19062(define-public python-memcached
19063 (package
19064 (name "python-memcached")
19065 (version "1.59")
19066 (source
19067 (origin
19068 (method url-fetch)
19069 (uri (pypi-uri "python-memcached" version))
19070 (sha256
19071 (base32
19072 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))
19073 (patches (search-patches "python-memcached-syntax-warnings.patch"))))
19074 (build-system python-build-system)
19075 (propagated-inputs (list python-six))
19076 (home-page
19077 "https://github.com/linsomniac/python-memcached")
19078 (synopsis "Pure python memcached client")
19079 (description
19080 "This software is a pure Python interface to the memcached memory cache
19081daemon. It is the client side software which allows storing values in one or
19082more, possibly remote, memcached servers.")
19083 (license license:psfl)))
19084
19085(define-public python-mergedeep
19086 (package
19087 (name "python-mergedeep")
19088 (version "1.3.4")
19089 (source
19090 (origin
19091 (method git-fetch)
19092 (uri (git-reference
19093 (url "https://github.com/clarketm/mergedeep")
19094 (commit (string-append "v" version))))
19095 (file-name (git-file-name name version))
19096 (sha256
19097 (base32
19098 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
19099 (build-system python-build-system)
19100 (native-inputs (list python-pytest))
19101 (home-page "https://github.com/clarketm/mergedeep")
19102 (synopsis "Deep merge function for Python")
19103 (description "This package provides a deep merge function for Python,
19104useful to combine multiple data objects as one.")
19105 (license license:expat)))
19106
19107(define-public python-clikit
19108 (package
19109 (name "python-clikit")
19110 (version "0.6.2")
19111 (source
19112 (origin
19113 (method url-fetch)
19114 (uri (pypi-uri "clikit" version))
19115 (sha256
19116 (base32
19117 "0ngdkmb73gkp5y00q7r9k1cdlfn0wyzws2wrqlshc4hlkbdyabj4"))))
19118 (build-system python-build-system)
19119 (arguments '(#:tests? #f)) ; no test in the PyPI tarball
19120 (propagated-inputs
19121 (list python-crashtest python-pastel python-pylev))
19122 (home-page "https://github.com/sdispater/clikit")
19123 (synopsis "Group of utilities to build command line interfaces")
19124 (description
19125 "CliKit is a group of utilities to build testable command line
19126interfaces.")
19127 (license license:expat)))
19128
19129(define-public python-msgpack-python
19130 (package
19131 (name "python-msgpack-python")
19132 (version "0.5.6")
19133 (source
19134 (origin
19135 (method url-fetch)
19136 (uri (pypi-uri "msgpack-python" version))
19137 (sha256
19138 (base32
19139 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
19140 (build-system python-build-system)
19141 (home-page "https://msgpack.org/")
19142 (synopsis "Package to deserialize messages in MessagePack binary format")
19143 (description
19144 "MessagePack is an efficient binary serialization format. It lets you
19145exchange data among multiple languages like JSON. But it's faster and
19146smaller. Small integers are encoded into a single byte, and typical short
19147strings require only one extra byte in addition to the strings themselves.")
19148 (license license:asl2.0)))
19149
19150(define-public python-cattrs
19151 (package
19152 (name "python-cattrs")
19153 (version "22.1.0")
19154 (source (origin
19155 (method git-fetch) ;for tests
19156 (uri (git-reference
19157 (url "https://github.com/python-attrs/cattrs")
19158 (commit (string-append "v" version))))
19159 (file-name (git-file-name name version))
19160 (sha256
19161 (base32
19162 "1n0h25gj6zd02kqyl040xpdvg4hpy1j92716sz0rg019xjqqijqb"))))
19163 (build-system pyproject-build-system)
19164 (arguments
19165 (list
19166 #:phases
19167 #~(modify-phases %standard-phases
19168 (add-after 'unpack 'adjust-for-older-attrs
19169 ;; Our older attrs package is using the 'attr' rather than 'attrs'
19170 ;; namespace.
19171 ;; TODO: Remove after python-attrs is updated to >= 21.4.0.
19172 (lambda _
19173 (substitute* (find-files "." "\\.py$")
19174 (("from attrs\\b")
19175 "from attr"))))
19176 (replace 'check
19177 (lambda* (#:key tests? #:allow-other-keys)
19178 (when tests?
19179 ;; Do not use the 'pytest' binary as it hard-codes an older
19180 ;; python-hypothesis version near the beginning of its
19181 ;; GUIX_PYTHONPATH.
19182 (invoke "python" "-m" "pytest" "-vv" "-c" "/dev/null" "tests"
19183 "-n" (number->string (parallel-job-count))
19184 ;; This test requires orjson, which needs the maturin
19185 ;; build system and new Rust dependencies.
19186 "--ignore" "tests/test_preconf.py")))))))
19187 (native-inputs
19188 (list python-hypothesis
19189 python-immutables
19190 python-msgpack
19191 python-poetry-core
19192 python-pymongo ;for the bson module
19193 python-pytest
19194 python-pytest-xdist))
19195 (propagated-inputs
19196 (list python-attrs
19197 python-exceptiongroup
19198 python-typing-extensions))
19199 (home-page "https://github.com/python-attrs/cattrs")
19200 (synopsis "Python library for structuring and unstructuring data")
19201 (description "@code{cattrs} is an Python library for structuring and
19202unstructuring data. @code{cattrs} works best with @code{attrs} classes,
19203@code{dataclasses} and the usual Python collections, but other kinds of
19204classes can also be supported by manually registering converters.")
19205 (license license:expat)))
19206
19207(define-public python-cachy
19208 (package
19209 (name "python-cachy")
19210 (version "0.3.0")
19211 (source
19212 (origin
19213 (method url-fetch)
19214 (uri (pypi-uri "cachy" version))
19215 (sha256
19216 (base32
19217 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
19218 (build-system python-build-system)
19219 (arguments
19220 '(#:phases
19221 (modify-phases %standard-phases
19222 (replace 'check
19223 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
19224 "pytest"))))))
19225 (native-inputs
19226 (list memcached python-fakeredis python-flexmock python-pifpaf
19227 python-pytest))
19228 (propagated-inputs
19229 (list python-memcached python-msgpack-python python-redis))
19230 (home-page "https://github.com/sdispater/cachy")
19231 (synopsis "Simple yet effective caching library")
19232 (description
19233 "Cachy provides a simple yet effective caching library. A simple but
19234powerful API: thread-safety; decorator syntax; support for memcached, redis,
19235database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
19236 (license license:expat)))
19237
19238(define-public poetry
19239 (package
19240 (name "poetry")
19241 (version "1.4.2")
19242 (source
19243 (origin
19244 (method url-fetch)
19245 (uri (pypi-uri "poetry" version))
19246 (sha256
19247 (base32
19248 "0g0vczn6qa4b2bdkq4k7fm1g739vyxp2iiblwwsrcmw24jj81m8b"))))
19249 (build-system python-build-system)
19250 (arguments
19251 `(#:tests? #f ;PyPI does not have tests
19252 ;; #:phases
19253 ;; (modify-phases %standard-phases
19254 ;; (add-before 'build 'patch-setup-py
19255 ;; (lambda _
19256 ;; (substitute* "setup.py"
19257 ;; ;; Relax some of the requirements.
19258 ;; (("(keyring>=21.2.0),<22.0.0" _ keyring) keyring)
19259 ;; (("(packaging>=20.4),<21.0" _ packaging) packaging)))))
19260 ))
19261 (propagated-inputs
19262 (list python-cachecontrol
19263 python-cachy
19264 python-cleo
19265 python-crashtest
19266 python-entrypoints
19267 python-html5lib
19268 python-keyring
19269 python-msgpack
19270 python-packaging
19271 python-pexpect
19272 python-pip
19273 python-pkginfo
19274 python-poetry-core
19275 python-requests
19276 python-requests-toolbelt
19277 python-shellingham
19278 python-tomlkit
19279 python-virtualenv))
19280 (home-page "https://python-poetry.org")
19281 (synopsis "Python dependency management and packaging made easy")
19282 (description "Poetry is a tool for dependency management and packaging
19283in Python. It allows you to declare the libraries your project depends on and
19284it will manage (install/update) them for you.")
19285 (license license:expat)))
19286
19287(define-public python-lark-parser
19288 (package
19289 (name "python-lark-parser")
19290 (version "0.9.0")
19291 (source (origin
19292 (method url-fetch)
19293 (uri (pypi-uri "lark-parser" version))
19294 (sha256
19295 (base32
19296 "1kd61asrb3h9spgsj4bslfbgp8q4271sw3hblk6f2vbbblv8jxcy"))))
19297 (build-system python-build-system)
19298 (home-page "https://github.com/lark-parser/lark")
19299 (synopsis "Multi-language parser for Python")
19300 (description
19301 "Lark is a parser built with a focus on ergonomics, performance and
19302resilience. Lark can parse all context-free languages. That means it is
19303capable of parsing almost any programming language out there, and to
19304some degree most natural languages too.")
19305 (license license:expat)))
19306
19307(define-public python-libcst
19308 (package
19309 (name "python-libcst")
19310 (version "0.3.8")
19311 (source (origin
19312 (method url-fetch)
19313 (uri (pypi-uri "libcst" version))
19314 (sha256
19315 (base32
19316 "05zsc61gsd2pyb6wiyh58zczndxi6rm4d2jl94rpf5cv1fzw6ks8"))))
19317 (build-system python-build-system)
19318 (arguments
19319 `(#:phases
19320 (modify-phases %standard-phases
19321 (add-after 'unpack 'remove-failing-tests
19322 (lambda _
19323 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/346>.
19324 (delete-file "libcst/tests/test_fuzz.py")
19325 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/347>.
19326 (delete-file "libcst/tests/test_pyre_integration.py")
19327 (delete-file "libcst/codemod/tests/test_codemod_cli.py")
19328 (delete-file "libcst/metadata/tests/test_full_repo_manager.py")
19329 (delete-file "libcst/metadata/tests/test_type_inference_provider.py")))
19330 (add-before 'check 'generate-test-data
19331 (lambda _
19332 (invoke "python" "-m" "libcst.codegen.generate" "visitors")
19333 (invoke "python" "-m" "libcst.codegen.generate" "return_types")))
19334 (replace 'check
19335 (lambda* (#:key tests? #:allow-other-keys)
19336 (when tests?
19337 (invoke "python" "-m" "unittest")))))))
19338 (native-inputs
19339 (list python-black python-isort))
19340 (propagated-inputs
19341 (list python-typing-extensions python-typing-inspect python-pyyaml))
19342 (home-page "https://github.com/Instagram/LibCST")
19343 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
19344 (description
19345 "LibCST parses Python source code as a CST tree that keeps all
19346formatting details (comments, whitespaces, parentheses, etc). It's useful
19347for building automated refactoring (codemod) applications and linters.
19348LibCST creates a compromise between an Abstract Syntax Tree (AST) and
19349a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
19350naming node types and fields, LibCST creates a lossless CST that looks and
19351feels like an AST.")
19352 (license (list license:expat
19353 ;; Some files unde libcst/_parser/ are under Python Software
19354 ;; Foundation license (see LICENSE file for details)
19355 license:psfl
19356 ;; libcst/_add_slots.py
19357 license:asl2.0))))
19358
19359(define-public python-libcst-minimal
19360 (hidden-package
19361 (package
19362 (inherit python-libcst)
19363 (name "python-libcst-minimal")
19364 (arguments '(#:tests? #f))
19365 (native-inputs '()))))
19366
19367(define-public python-typing-inspect
19368 (package
19369 (name "python-typing-inspect")
19370 (version "0.6.0")
19371 (source (origin
19372 (method url-fetch)
19373 (uri (pypi-uri "typing_inspect" version))
19374 (sha256
19375 (base32
19376 "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))
19377 (patches (search-patches "python-typing-inspect-fix.patch"))))
19378 (build-system python-build-system)
19379 (propagated-inputs
19380 (list python-mypy-extensions python-typing-extensions))
19381 (home-page "https://github.com/ilevkivskyi/typing_inspect")
19382 (synopsis "API for inspection of types in the Python @code{typing} module")
19383 (description
19384 "The @code{typing_inspect} module defines experimental API for runtime
19385inspection of types defined in the Python standard typing module.")
19386 (license license:expat)))
19387
19388(define-public python-lazy-loader
19389 (package
19390 (name "python-lazy-loader")
19391 (version "0.2")
19392 (source (origin
19393 (method url-fetch)
19394 (uri (pypi-uri "lazy_loader" version))
19395 (sha256
19396 (base32
19397 "12piaj94m5wbx33cxb80xgnsvzgya6cp90zj12qsq064fm8pmp0f"))))
19398 (build-system pyproject-build-system)
19399 (native-inputs
19400 (list python-pytest python-pytest-cov))
19401 (propagated-inputs
19402 (list python-flit-core))
19403 (home-page "https://scientific-python.org/specs/spec-0001/")
19404 (synopsis "Load subpackages and functions on demand")
19405 (description "@code{python-lazy-loader} makes it easy to load subpackages
19406and functions on demand. Its main features are:
19407
19408@itemize
19409@item Allow subpackages to be made visible to users without incurring import
19410costs.
19411@item Allow external libraries to be imported only when used, improving import
19412times.
19413@end itemize")
19414 (license license:bsd-3)))
19415
19416(define-public python-lazy-object-proxy
19417 (package
19418 (name "python-lazy-object-proxy")
19419 (version "1.5.1")
19420 (source (origin
19421 (method url-fetch)
19422 (uri (pypi-uri "lazy-object-proxy" version))
19423 (sha256
19424 (base32
19425 "0hwh29m9wa582ramj30p4pysckdrmki1z1b8iaaxk6mpfx2kc8wp"))))
19426 (native-inputs
19427 (list python-setuptools-scm))
19428 (build-system python-build-system)
19429 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
19430 (synopsis "Lazy object proxy for python")
19431 (description
19432 "Lazy object proxy is an object that wraps a callable but defers the call
19433until the object is actually required, and caches the result of said call.")
19434 (license license:bsd-2)))
19435
19436(define-public python-dnspython
19437 (package
19438 (name "python-dnspython")
19439 (version "2.1.0")
19440 (source (origin
19441 (method url-fetch)
19442 (uri (pypi-uri "dnspython" version ".zip"))
19443 (sha256
19444 (base32
19445 "1m0xvyby8baaxp6pfm0fgq8d2pq5dd8qm8bzfbrs009jaw5pza74"))))
19446 (build-system python-build-system)
19447 (arguments
19448 `(#:tests? #f ; XXX: requires internet access
19449 #:phases
19450 (modify-phases %standard-phases
19451 (add-after 'unpack 'patch-getprotobyname-calls
19452 ;; These calls are problematic in the build environment as there is
19453 ;; no /etc/protocols. This breaks the sanity-check phase of any
19454 ;; package depnding on this one.
19455 (lambda _
19456 (substitute* "dns/rdtypes/IN/WKS.py"
19457 (("socket.getprotobyname\\('tcp'\\)")
19458 "6")
19459 (("socket.getprotobyname\\('udp'\\)")
19460 "17")))))))
19461 (native-inputs (list unzip))
19462 (home-page "https://www.dnspython.org")
19463 (synopsis "DNS toolkit for Python")
19464 (description
19465 "dnspython is a DNS toolkit for Python. It supports almost all record
19466types. It can be used for queries, zone transfers, and dynamic updates.
19467It supports TSIG authenticated messages and EDNS0.")
19468 (license license:expat)))
19469
19470(define-public python-dnspython-1.16
19471 (package
19472 (inherit python-dnspython)
19473 (version "1.16.0")
19474 (source (origin
19475 (method url-fetch)
19476 (uri (string-append "http://www.dnspython.org/kits/"
19477 version "/dnspython-" version ".tar.gz"))
19478 (sha256
19479 (base32
19480 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
19481 (native-inputs '())))
19482
19483(define-public python-py3dns
19484 (package
19485 (name "python-py3dns")
19486 (version "3.2.1")
19487 (source
19488 (origin
19489 (method url-fetch)
19490 (uri (pypi-uri "py3dns" version))
19491 (sha256
19492 (base32
19493 "1r25f0ys5p37bhld7m7n4gb0lrysaym3w318w2f8bncq7r3d81qz"))))
19494 (build-system python-build-system)
19495 ;; This package wants to read /etc/resolv.conf. We can't patch it without
19496 ;; removing functionality so we copy from Nix and "just don't build it".
19497 (arguments
19498 `(#:phases
19499 (modify-phases %standard-phases
19500 (add-after 'unpack 'patch-source
19501 (lambda _
19502 (substitute* "setup.py"
19503 (("import DNS") "")
19504 (("DNS.__version__") (string-append "\"" ,version "\"")))))
19505 ;; For the same reason, drop the sanity check because the library
19506 ;; fails to load without /etc/resolv.conf.
19507 (delete 'sanity-check))
19508 #:tests? #f)) ; Also skip the tests.
19509 (home-page "https://launchpad.net/py3dns")
19510 (synopsis "Python 3 DNS library")
19511 (description "This Python 3 module provides a DNS API for looking up DNS
19512entries from within Python 3 modules and applications. This module is a
19513simple, lightweight implementation.")
19514 (license license:psfl)))
19515
19516(define-public python-email-validator
19517 (package
19518 (name "python-email-validator")
19519 (version "1.0.2")
19520 (source
19521 (origin (method url-fetch)
19522 (uri (pypi-uri "email_validator" version))
19523 (sha256
19524 (base32
19525 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
19526 (build-system python-build-system)
19527 (arguments
19528 '(#:phases
19529 (modify-phases %standard-phases
19530 (add-before 'build 'use-dnspython
19531 (lambda _
19532 (substitute* "setup.py"
19533 (("dnspython3") "dnspython"))
19534 #t)))))
19535 (propagated-inputs
19536 (list python-dnspython python-idna))
19537 (home-page "https://github.com/JoshData/python-email-validator")
19538 (synopsis "Email address validation library for Python")
19539 (description
19540 "This library validates email address syntax and deliverability.")
19541 (license license:cc0)))
19542
19543(define-public python-ukpostcodeparser
19544 (package
19545 (name "python-ukpostcodeparser")
19546 (version "1.1.2")
19547 (source (origin
19548 (method url-fetch)
19549 (uri (pypi-uri "UkPostcodeParser" version))
19550 (sha256
19551 (base32
19552 "03jkf1ygbwq3akzbcjyjk1akc1hv2sfgx90306pq1nwklbpn80lk"))))
19553 (build-system python-build-system)
19554 (arguments
19555 `(#:phases
19556 (modify-phases %standard-phases
19557 (replace 'check
19558 (lambda* (#:key tests? #:allow-other-keys)
19559 (when tests?
19560 ;; Tests for lowercase postcodes fail.
19561 (invoke "pytest" "-vv" "ukpostcodeparser/test/parser.py" "-k"
19562 (string-append "not test_091 "
19563 "and not test_097 "
19564 "and not test_098 "
19565 "and not test_125 "
19566 "and not test_131"))))))))
19567 (native-inputs
19568 (list python-pytest))
19569 (home-page "https://github.com/hamstah/ukpostcodeparser")
19570 (synopsis "UK Postcode parser for Python")
19571 (description
19572 "This library provides the @code{parse_uk_postcode} function for
19573parsing UK postcodes.")
19574 (license license:expat)))
19575
19576(define-public python-faker
19577 (package
19578 (name "python-faker")
19579 (version "15.0.0")
19580 (source (origin
19581 (method url-fetch)
19582 (uri (pypi-uri "Faker" version))
19583 (sha256
19584 (base32
19585 "1yx3gsivisf8ls43v0fgzy4n5q9625xrp9fr9cb5gp3h6k9cfpr4"))))
19586 (build-system python-build-system)
19587 (arguments
19588 '(#:phases
19589 (modify-phases %standard-phases
19590 (replace 'check
19591 (lambda* (#:key tests? #:allow-other-keys)
19592 (when tests?
19593 (invoke "python" "-m" "pytest" "-v")))))))
19594 (native-inputs
19595 (list python-freezegun
19596 python-pytest
19597 python-random2
19598 python-ukpostcodeparser
19599 python-validators))
19600 (propagated-inputs (list python-dateutil))
19601 (home-page "https://github.com/joke2k/faker")
19602 (synopsis "Python package that generates fake data")
19603 (description
19604 "Faker is a Python package that generates fake data such as names,
19605addresses, and phone numbers.")
19606 (license license:expat)))
19607
19608(define-public python-pyaml
19609 (package
19610 (name "python-pyaml")
19611 (version "21.10.1")
19612 (source (origin
19613 (method url-fetch)
19614 (uri (pypi-uri "pyaml" version))
19615 (sha256
19616 (base32
19617 "10w3frzqir5sbpglc9bwb8w414dsivmcvji07yxy61mz2gp9ylf6"))))
19618 (build-system python-build-system)
19619 (native-inputs
19620 (list python-unidecode))
19621 (propagated-inputs
19622 (list python-pyyaml))
19623 (home-page "https://github.com/mk-fg/pretty-yaml")
19624 (synopsis "YAML pretty-print library for Python")
19625 (description
19626 "pyaml is a PyYAML based python module to produce pretty and readable
19627YAML-serialized data.")
19628 (license license:wtfpl2)))
19629
19630(define-public python-pyyaml-env-tag
19631 (package
19632 (name "python-pyyaml-env-tag")
19633 (version "0.1")
19634 (source
19635 (origin
19636 (method url-fetch)
19637 (uri (pypi-uri "pyyaml_env_tag" version))
19638 (sha256
19639 (base32 "1nsva88jsmwn0cb9jnrfiz4dvs9xakkpgfii7g1xwkx1pmsjc2bh"))))
19640 (build-system python-build-system)
19641 (propagated-inputs (list python-pyyaml))
19642 (home-page "https://github.com/waylan/pyyaml-env-tag")
19643 (synopsis "Custom YAML tag for environment variables")
19644 (description "This package provides a custom YAML tag for referencing
19645environment variables in YAML files.")
19646 (license license:expat)))
19647
19648(define-public python-backpack
19649 (package
19650 (name "python-backpack")
19651 (version "0.1")
19652 (source
19653 (origin
19654 (method url-fetch)
19655 (uri (pypi-uri "backpack" version))
19656 (sha256
19657 (base32
19658 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
19659 (build-system python-build-system)
19660 (native-inputs
19661 (list python-pytest python-nose python-toml))
19662 (propagated-inputs
19663 (list python-simplejson))
19664 (home-page "https://github.com/sdispater/backpack")
19665 (synopsis "Utilities for working with Python collections")
19666 (description "Backpack provides some useful utilities for working with
19667collections of data.")
19668 (license license:expat)))
19669
19670(define-public python-prompt-toolkit
19671 (package
19672 (name "python-prompt-toolkit")
19673 (version "3.0.29")
19674 (source
19675 (origin
19676 (method url-fetch)
19677 (uri (pypi-uri "prompt_toolkit" version))
19678 (sha256
19679 (base32 "19vf5cahp3imdpwhgvk55g3dvqmc6ga175r4vkq79kffx1h0yr5x"))))
19680 (build-system python-build-system)
19681 (arguments
19682 `(#:phases
19683 (modify-phases %standard-phases
19684 (replace 'check
19685 (lambda* (#:key tests? #:allow-other-keys)
19686 (when tests?
19687 ;; HOME is needed for the test
19688 ;; "test_pathcompleter_can_expanduser".
19689 (setenv "HOME" "/tmp")
19690 (invoke "pytest" "-vv")))))))
19691 (propagated-inputs
19692 (list python-wcwidth))
19693 (native-inputs
19694 (list python-pytest))
19695 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
19696 (synopsis "Library for building command line interfaces in Python")
19697 (description
19698 "Prompt-Toolkit is a library for building interactive command line
19699interfaces in Python. It's like GNU Readline but it also features syntax
19700highlighting while typing, out-of-the-box multi-line input editing, advanced
19701code completion, incremental search, support for Chinese double-width
19702characters, mouse support, and auto suggestions.")
19703 (license license:bsd-3)))
19704
19705(define-public python-proselint
19706 (package
19707 (name "python-proselint")
19708 (version "0.13.0")
19709 (source
19710 (origin
19711 (method url-fetch)
19712 (uri (pypi-uri "proselint" version))
19713 (sha256
19714 (base32
19715 "0n1ahnq2mkgvh94g05xhc3l1fs3hh0ycskqlqivhhfdaq8ybdlkx"))))
19716 (build-system python-build-system)
19717 (arguments
19718 `(#:tests? #f
19719 #:phases
19720 (modify-phases %standard-phases
19721 (add-after 'unpack 'set-home-directory
19722 (lambda _
19723 (setenv "HOME" "/tmp"))))))
19724 (propagated-inputs
19725 (list python-click python-future python-six))
19726 (home-page "http://proselint.com/")
19727 (synopsis "Linter for prose")
19728 (description "@code{python-proselint} is a linter for English prose, that
19729scans through a file and detects issues.")
19730 (license license:bsd-3)))
19731
19732(define-public python-jedi
19733 (package
19734 (name "python-jedi")
19735 (version "0.18.2")
19736 (source
19737 (origin
19738 (method git-fetch)
19739 (uri (git-reference
19740 (url "https://github.com/davidhalter/jedi")
19741 (commit (string-append "v" version))
19742 (recursive? #true)))
19743 (file-name (git-file-name name version))
19744 (sha256
19745 (base32
19746 "1nhsajmkn3qj32k5z3ymrd3r6dz2aliv2pqb824m5kaib986dm44"))
19747 (modules '((guix build utils)))))
19748 (build-system python-build-system)
19749 (arguments
19750 `(#:phases
19751 (modify-phases %standard-phases
19752 (replace 'check
19753 (lambda* (#:key tests? #:allow-other-keys)
19754 (when tests?
19755 (setenv "HOME" "/tmp")
19756 (invoke "python" "-m" "pytest" "-vv")))))))
19757 (native-inputs
19758 (list python-colorama python-docopt python-pytest))
19759 (propagated-inputs
19760 (list python-parso))
19761 (home-page "https://github.com/davidhalter/jedi")
19762 (synopsis "Autocompletion and static analysis library for Python")
19763 (description
19764 "Jedi is a static analysis tool for Python that can be used in Integrated
19765Development Environments (@dfn{IDE}s) and text editors. It understands Python
19766on a deeper level than many other static analysis frameworks for Python.
19767
19768Jedi understands docstrings and you can use Jedi autocompletion in your REPL
19769as well.")
19770 (license license:expat)))
19771
19772(define-public ptpython
19773 (package
19774 (name "ptpython")
19775 (version "3.0.20")
19776 (source (origin
19777 (method url-fetch)
19778 (uri (pypi-uri "ptpython" version))
19779 (sha256
19780 (base32
19781 "1mjfyr5gwrs1qbizh6nki0nv6hahmg8mhhqxi1qc6pfa4znlrzga"))))
19782 (build-system python-build-system)
19783 (arguments
19784 `(#:tests? #f)) ;there are no tests
19785 (propagated-inputs
19786 (list python-appdirs python-black python-jedi python-prompt-toolkit
19787 python-pygments))
19788 (home-page "https://github.com/jonathanslenders/ptpython")
19789 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
19790 (description
19791 "ptpython is a Python read-eval-print loop with IDE-like features.
19792It supports syntax highlighting, multiline editing, autocompletion, mouse,
19793color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
19794etc.")
19795 (license license:bsd-3)))
19796
19797(define-public python-easyprocess
19798 (package
19799 (name "python-easyprocess")
19800 (version "0.3")
19801 (source
19802 (origin
19803 (method url-fetch)
19804 (uri (pypi-uri "EasyProcess" version))
19805 (sha256
19806 (base32 "115rzzr0hx4af4m6krf7dxn8851n4l8jfxahjzjc2r0zq2m8v57v"))))
19807 (build-system python-build-system)
19808 (arguments
19809 ;; Tests require pyvirtualdisplay, which requires this package.
19810 `(#:tests? #f))
19811 (home-page "https://github.com/ponty/easyprocess")
19812 (synopsis "Python subprocess interface")
19813 (description
19814 "@code{easyprocess} is an easy to use Python subprocess interface.")
19815 (license license:bsd-3)))
19816
19817(define-public python-entrypoint2
19818 (package
19819 (name "python-entrypoint2")
19820 (version "0.2.4")
19821 (source
19822 (origin
19823 (method url-fetch)
19824 (uri (pypi-uri "entrypoint2" version))
19825 (sha256
19826 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
19827 (build-system python-build-system)
19828 (arguments
19829 `(#:test-target "pytest"))
19830 (native-inputs
19831 (list python-easyprocess python-pytest python-pytest-runner))
19832 (home-page "https://github.com/ponty/entrypoint2")
19833 (synopsis "Command-line interface for Python modules")
19834 (description
19835 "@code{entrypoint2} is an easy to use command-line interface for Python
19836 modules based on @code{argparse}. It translates function signature and
19837 documentation to argparse configuration.")
19838 (license license:bsd-3)))
19839
19840(define-public python-pyvirtualdisplay
19841 (package
19842 (name "python-pyvirtualdisplay")
19843 (version "2.1")
19844 (source
19845 (origin
19846 (method url-fetch)
19847 (uri (pypi-uri "PyVirtualDisplay" version))
19848 (sha256
19849 (base32 "1z2fzgiw3xv3m1d9ppn53g07zhnpj05addiz56sm6ircxibnjk4x"))))
19850 (build-system python-build-system)
19851 (arguments
19852 ;; Tests fail with:
19853 ;; FileNotFoundError: [Errno 2] No such file or directory: 'Xvnc'.
19854 `(#:tests? #f))
19855 (native-inputs
19856 (list python-entrypoint2 python-psutil python-pytest
19857 python-pytest-runner))
19858 (propagated-inputs
19859 (list python-easyprocess python-pillow))
19860 (home-page "https://github.com/ponty/pyvirtualdisplay")
19861 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
19862 (description
19863 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
19864 (license license:bsd-3)))
19865
19866(define-public python-stem
19867 (package
19868 (name "python-stem")
19869 (version "1.8.0")
19870 (source
19871 (origin
19872 (method url-fetch)
19873 (uri (pypi-uri "stem" version))
19874 (sha256
19875 (base32
19876 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
19877 (build-system python-build-system)
19878 (arguments
19879 `(#:phases
19880 (modify-phases %standard-phases
19881 (add-after 'unpack 'fix-tests
19882 ;; See https://github.com/torproject/stem/issues/56
19883 (lambda _
19884 (substitute* "run_tests.py"
19885 (("test\\.task\\.MOCK_VERSION,")
19886 ""))))
19887 (replace 'check
19888 (lambda _
19889 (invoke "./run_tests.py" "--unit")
19890 #t)))))
19891 (native-inputs
19892 (list python-mock python-pycodestyle python-pyflakes))
19893 (home-page "https://stem.torproject.org/")
19894 (synopsis
19895 "Python controller library that allows applications to interact with Tor")
19896 (description
19897 "Stem is a Python controller library for Tor. With it you can use Tor's
19898 control protocol to script against the Tor process and read descriptor data
19899 relays publish about themselves.")
19900 (license license:lgpl3)))
19901
19902(define-public python-pyserial
19903 (package
19904 (name "python-pyserial")
19905 (version "3.5")
19906 (source
19907 (origin
19908 (method url-fetch)
19909 (uri (pypi-uri "pyserial" version))
19910 (sha256
19911 (base32
19912 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
19913 (build-system python-build-system)
19914 (arguments
19915 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
19916 ;; #:phases
19917 ;; (modify-phases %standard-phases
19918 ;; (replace 'check
19919 ;; (lambda _
19920 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
19921 (home-page
19922 "https://github.com/pyserial/pyserial")
19923 (synopsis "Python Serial Port Bindings")
19924 (description "@code{pyserial} provide serial port bindings for Python. It
19925 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
19926 and/or Xon/Xoff. The port is accessed in RAW mode.")
19927 (license license:bsd-3)))
19928
19929(define-public python-pyserial-asyncio
19930 (package
19931 (name "python-pyserial-asyncio")
19932 (version "0.6")
19933 (source
19934 (origin
19935 (method url-fetch)
19936 (uri (pypi-uri "pyserial-asyncio" version))
19937 (sha256
19938 (base32 "0bx3syngmq2j9mh81byzka1x4ilw8ac9mbx52zn7b7ayw0ijj0xn"))))
19939 (build-system python-build-system)
19940 (propagated-inputs (list python-pyserial))
19941 (home-page "https://github.com/pyserial/pyserial-asyncio")
19942 (synopsis "Pyserial asynchronous I/O extension")
19943 (description "This package extends Pyserial with asynchronous I/O
19944 support.")
19945 (license license:bsd-3)))
19946
19947(define-public python-pymodbus
19948 (package
19949 (name "python-pymodbus")
19950 (version "2.5.3")
19951 (source
19952 (origin
19953 (method git-fetch)
19954 (uri (git-reference
19955 (url "https://github.com/riptideio/pymodbus")
19956 (commit (string-append "v" version))))
19957 (file-name (git-file-name name version))
19958 (sha256
19959 (base32
19960 "0kjjrx7xrlx0pf3y67hhr4xvqrly3xzmvf6ic5as61m6z19m7zd5"))))
19961 (build-system python-build-system)
19962 (arguments
19963 `(#:phases (modify-phases %standard-phases
19964 (add-after 'unpack 'disable-problematic-tests
19965 (lambda _
19966 ;; The following test modules rely on Python's own
19967 ;; 'test' module, which is not distributed in the Python
19968 ;; package of Guix.
19969 (delete-file "test/test_client_async_asyncio.py")
19970 (delete-file "test/test_client_sync_diag.py")
19971 ;; The following test module requires the asynctest
19972 ;; library, abandoned without support for Python 3.9+
19973 ;; (see:
19974 ;; https://github.com/riptideio/pymodbus/issues/681).
19975 (delete-file "test/test_server_asyncio.py")))
19976 (replace 'check
19977 (lambda* (#:key tests? #:allow-other-keys)
19978 (when tests?
19979 (invoke "python" "-m" "pytest")))))))
19980 (native-inputs
19981 (list python-mock
19982 python-pytest
19983 python-redis
19984 python-sqlalchemy
19985 python-tornado
19986 python-twisted))
19987 (propagated-inputs
19988 (list python-pyserial
19989 python-six
19990 ;; For the REPL.
19991 python-aiohttp
19992 python-click
19993 python-prompt-toolkit
19994 python-pygments
19995 python-pyserial-asyncio))
19996 (home-page "https://github.com/riptideio/pymodbus/")
19997 (synopsis "Modbus protocol stack in Python")
19998 (description "Pymodbus is a full Modbus protocol implementation using
19999 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
20000 communications core. It includes the following @emph{client} features:
20001 @itemize
20002 @item full read/write protocol on discrete and register
20003 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
20004 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
20005 @item asynchronous and synchronous versions
20006 @item payload builder/decoder utilities
20007 @item pymodbus read eval print loop (REPL).
20008 @end itemize
20009 It also includes the following @emph{server} features:
20010 @itemize
20011 @item can function as a fully implemented Modbus server
20012 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
20013 @item asynchronous and synchronous versions
20014 @item full server control context (device information, counters, etc)
20015 @item a number of backing contexts (database, redis, sqlite, a slave device).
20016 @end itemize")
20017 (license license:bsd-3)))
20018
20019(define-public python-exodriver
20020 (package
20021 (name "python-exodriver")
20022 (version "2.6.0")
20023 (source (origin
20024 (method git-fetch)
20025 (uri (git-reference
20026 (url "https://github.com/labjack/exodriver")
20027 (commit (string-append "v" version))))
20028 (file-name (git-file-name name version))
20029 (sha256
20030 (base32
20031 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
20032 (outputs (list "out"
20033 "doc")) ;544 KiB of examples
20034 (build-system gnu-build-system)
20035 (arguments
20036 (list
20037 #:tests? #f ;no test suite
20038 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
20039 (string-append "PREFIX=" #$output)
20040 "RUN_LDCONFIG=0"
20041 "LINK_SO=1")
20042 #:phases
20043 #~(modify-phases %standard-phases
20044 (delete 'configure)
20045 (replace 'build
20046 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
20047 (with-directory-excursion "liblabjackusb"
20048 (apply (assoc-ref %standard-phases 'build)
20049 `(,@args #:make-flags ,make-flags)))))
20050 (replace 'install
20051 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
20052 (with-directory-excursion "liblabjackusb"
20053 (apply (assoc-ref %standard-phases 'install)
20054 `(,@args #:make-flags ,make-flags)))
20055 ;; Install udev rules.
20056 (install-file "90-labjack.rules"
20057 (string-append #$output "/lib/udev/rules.d"))
20058 ;; Install examples.
20059 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
20060 (mkdir-p doc)
20061 (copy-recursively "examples"
20062 (string-append doc "/examples"))))))))
20063 (inputs (list libusb))
20064 (home-page "https://github.com/labjack/exodriver")
20065 (synopsis "USB driver for LabJack data acquisition instruments")
20066 (description "This package provides @code{liblabjackusb}, a USB library for low-level
20067communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
20068instruments. A udev rule is also included to allow unprivileged users to
20069communicate with the instruments via USB.")
20070 (license license:expat))) ;see README
20071
20072(define-public python-labjack
20073 (package
20074 (name "python-labjack")
20075 (version "2.0.4")
20076 (source (origin
20077 (method url-fetch)
20078 (uri (pypi-uri "LabJackPython" version))
20079 (sha256
20080 (base32
20081 "013bjqdi05vlbdqprr6kqi8gs4qhqc7rnyp1klw8k6fng77rpdzz"))))
20082 (build-system python-build-system)
20083 (arguments
20084 (list
20085 #:tests? #f ;no test suite
20086 #:phases
20087 #~(modify-phases %standard-phases
20088 (add-after 'unpack 'patch-liblabjackusb.so
20089 (lambda* (#:key inputs #:allow-other-keys)
20090 (substitute* (find-files "." "\\.py$")
20091 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
20092 (format #f "ctypes.CDLL(~s"
20093 (search-input-file inputs
20094 "lib/liblabjackusb.so")))))))))
20095 ;; exodriver is provided as a regular input, as only its shared object is
20096 ;; used, not its Python API.
20097 (inputs (list python-exodriver))
20098 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
20099 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
20100 (description "This Python library allows communicating with the U3, U6,
20101UE9 and U12 LabJack data acquisition (DAQ) modules.")
20102 (license license:expat))) ;see setup.py
20103
20104(define-public python-kivy-garden
20105 (package
20106 (name "python-kivy-garden")
20107 (version "0.1.4")
20108 (source
20109 (origin
20110 (method url-fetch)
20111 (uri (pypi-uri "kivy-garden" version))
20112 (sha256
20113 (base32 "0wkcpr2zc1q5jb0bi7v2dgc0vs5h1y7j42mviyh764j2i0kz8mn2"))))
20114 (build-system python-build-system)
20115 (arguments
20116 '(#:phases (modify-phases %standard-phases
20117 (add-after 'install 'remove-bat-file
20118 (lambda* (#:key outputs #:allow-other-keys)
20119 (let ((out (assoc-ref outputs "out")))
20120 (delete-file
20121 (string-append out "/bin/garden.bat"))))))))
20122 (propagated-inputs
20123 (list python-requests))
20124 (home-page "https://github.com/kivy-garden/garden")
20125 (synopsis "Garden tool for Kivy flowers")
20126 (description
20127 "This package provides the @command{garden} command to install packages
20128for Kivy, the multitouch application platform.")
20129 (license license:expat)))
20130
20131(define-public python-kivy
20132 (package
20133 (name "python-kivy")
20134 (version "2.1.0")
20135 (source
20136 (origin
20137 (method url-fetch)
20138 (uri (pypi-uri "Kivy" version))
20139 (file-name (string-append name "-" version ".tar.gz"))
20140 (sha256
20141 (base32
20142 "1cq4djfn7h8560mvz94dydsldg2jpp5w9rby7nafgmbh7fxg65is"))))
20143 (build-system python-build-system)
20144 (arguments
20145 `(#:tests? #f ; Tests require many optional packages
20146 #:phases
20147 (modify-phases %standard-phases
20148 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
20149 (lambda* (#:key inputs #:allow-other-keys)
20150 (setenv "KIVY_SDL2_PATH"
20151 (search-input-directory inputs "/include/SDL2"))))
20152 (add-before 'build 'set-home
20153 (lambda _
20154 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
20155 (setenv "HOME" (getcwd)))))))
20156 (native-inputs
20157 (list pkg-config python-cython))
20158 (inputs
20159 (list gstreamer
20160 mesa
20161 (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
20162 python-docutils
20163 python-kivy-garden
20164 python-pygments))
20165 (home-page "https://kivy.org")
20166 (synopsis "Multitouch application framework")
20167 (description
20168 "Kivy is a software library for rapid development of hardware-accelerated
20169multitouch applications.")
20170 (license license:expat)))
20171
20172(define-public python-kivymd
20173 (package
20174 (name "python-kivymd")
20175 (version "0.104.2")
20176 (source
20177 (origin
20178 (method url-fetch)
20179 (uri (pypi-uri "kivymd" version))
20180 (sha256
20181 (base32 "04lwy6j0agrdwa4a6dl6qs97nx9ysmscmm8psvdzjpyj8aa1zg4p"))))
20182 (build-system python-build-system)
20183 (arguments
20184 `(#:tests? #f ;tests require network
20185 #:phases
20186 (modify-phases %standard-phases
20187 (add-before 'sanity-check 'set-home
20188 (lambda _
20189 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
20190 (setenv "HOME" (getcwd)))))))
20191 (native-inputs (list python-docutils))
20192 (propagated-inputs
20193 (list python-kivy python-pillow python-pygments python-kivy-garden))
20194 (home-page "https://github.com/kivymd/KivyMD")
20195 (synopsis "Material Design compliant widgets for use with Kivy")
20196 (description
20197 "This package provides Kivy widgets that approximate Google's Material
20198Design spec without sacrificing ease of use or application performance.")
20199 (license license:expat)))
20200
20201(define-public python-asynckivy
20202 (package
20203 (name "python-asynckivy")
20204 (version "0.5.3")
20205 (source
20206 (origin
20207 (method url-fetch)
20208 (uri
20209 (pypi-uri "asynckivy" version))
20210 (sha256
20211 (base32 "0ivjvch8yn3k1ybfp7c1nm8mhc0ymg7d04mq54lly7yjvg0jvcni"))))
20212 (build-system python-build-system)
20213 (arguments
20214 `(#:phases
20215 (modify-phases %standard-phases
20216 (add-before 'check 'set-home
20217 (lambda _
20218 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
20219 (setenv "HOME" (getcwd)))))))
20220 (propagated-inputs (list python-kivy python-asyncgui))
20221 (home-page "https://github.com/gottadiveintopython/asynckivy")
20222 (synopsis "Async library for Kivy")
20223 (description
20224 "This package provides async versions of Kivy functions to avoid the
20225callback-heavy mode of interaction typical in some Kivy applications.")
20226 (license license:expat)))
20227
20228(define-public python-asyncgui
20229 (package
20230 (name "python-asyncgui")
20231 (version "0.5.3")
20232 (source (origin
20233 (method url-fetch)
20234 (uri (pypi-uri "asyncgui" version))
20235 (sha256
20236 (base32
20237 "0614130afg2qc1qq4p82piskvvx6lpjl4nlsakbjzdyd78xywnb7"))))
20238 (build-system python-build-system)
20239 (home-page "https://github.com/gottadiveintopython/asyncgui")
20240 (synopsis "Enables async/await without an event loop")
20241 (description "This package provides support for async/await applications
20242without requiring an event loop, useful for creative responsive GUIs.")
20243 (license license:expat)))
20244
20245(define-public python-asynctest
20246 (package
20247 (name "python-asynctest")
20248 (version "0.13.0")
20249 (source (origin
20250 (method url-fetch)
20251 (uri (pypi-uri "asynctest" version))
20252 (sha256
20253 (base32
20254 "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
20255 (build-system python-build-system)
20256 (arguments
20257 ;; The test suite appears to be incompatible with Python 3.9+, completes
20258 ;; with 25 failures and 41 errors out of 220 tests (see:
20259 ;; https://github.com/Martiusweb/asynctest/issues/149).
20260 (list #:tests? #f
20261 #:phases #~(modify-phases %standard-phases
20262 (replace 'check
20263 (lambda* (#:key tests? #:allow-other-keys)
20264 (when tests?
20265 (invoke "python" "-m" "unittest" "test")))))))
20266 (home-page "https://github.com/Martiusweb/asynctest/")
20267 (synopsis "Unittest extensions for testing asyncio libraries")
20268 (description
20269 "The @code{asynctest} Python package is built on top of the standard
20270@code{unittest} module and cuts down boilerplate code when testing libraries
20271for @code{asyncio}.")
20272 (license license:asl2.0)))
20273
20274(define-public python-binaryornot
20275 (package
20276 (name "python-binaryornot")
20277 (version "0.4.4")
20278 (source (origin
20279 (method url-fetch)
20280 (uri (pypi-uri "binaryornot" version))
20281 (sha256
20282 (base32
20283 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
20284 (build-system python-build-system)
20285 (arguments
20286 `(#:phases
20287 (modify-phases %standard-phases
20288 (add-after 'unpack 'patch-tests
20289 (lambda _
20290 ;; TypeError: binary() got an unexpected keyword argument
20291 ;; 'average_size'.
20292 (substitute* "tests/test_check.py"
20293 (("average_size=512") ""))
20294 #t)))))
20295 (propagated-inputs
20296 (list python-chardet python-hypothesis))
20297 (home-page "https://github.com/audreyr/binaryornot")
20298 (synopsis "Package to check if a file is binary or text")
20299 (description "Ultra-lightweight pure Python package to check if a file is
20300 binary or text.")
20301 (license license:bsd-3)))
20302
20303(define-public binwalk
20304 (package
20305 (name "binwalk")
20306 (version "2.3.4")
20307 (source
20308 (origin
20309 (method git-fetch)
20310 (uri (git-reference
20311 (url "https://github.com/ReFirmLabs/binwalk")
20312 (commit (string-append "v" version))))
20313 (file-name (git-file-name name version))
20314 (sha256
20315 (base32 "0cfm1khckq986l0q68kmfyfagc6zmb94hgjjm847fjcil77dnlw6"))
20316 (modules '((guix build utils)))
20317 (snippet
20318 #~(begin
20319 (for-each delete-file
20320 (list "testing/tests/input-vectors/firmware.zip"
20321 "testing/tests/test_firmware_zip.py"))))))
20322 (build-system python-build-system)
20323 (arguments
20324 `(#:phases
20325 (modify-phases %standard-phases
20326 (add-before 'check 'set-home
20327 (lambda _
20328 (setenv "HOME" ""))))))
20329 (native-inputs
20330 (list python-coverage python-nose))
20331 (home-page "https://github.com/ReFirmLabs/binwalk")
20332 (synopsis "Firmware analysis tool")
20333 (description "Binwalk is a tool for analyzing, reverse engineering, and
20334 extracting firmware images")
20335 (license license:expat)))
20336
20337(define-public python-binwalk
20338 (deprecated-package "python-binwalk" binwalk))
20339
20340(define-public python-bson
20341 (package
20342 (name "python-bson")
20343 (version "0.5.10")
20344 (source
20345 (origin
20346 (method git-fetch) ;for tests
20347 (uri (git-reference
20348 (url "https://github.com/py-bson/bson")
20349 (commit version)))
20350 (file-name (git-file-name name version))
20351 (sha256
20352 (base32
20353 "1vpy4rsvm3hhawvbg9rbw4j36ck8qylkhm8cjy0q6imvinkd2als"))))
20354 (build-system python-build-system)
20355 (arguments
20356 '(#:phases
20357 (modify-phases %standard-phases
20358 (replace 'check
20359 (lambda* (#:key tests? #:allow-other-keys)
20360 (when tests?
20361 (invoke "./test.py")))))))
20362 (propagated-inputs (list python-dateutil python-six))
20363 (home-page "https://github.com/py-bson/bson")
20364 (synopsis "BSON (Binary JSON) codec for Python")
20365 (description "@code{bson} is a Python library implementing a BSON (Binary
20366JSON) codec.")
20367 (license license:asl2.0)))
20368
20369(define-public python-nltk
20370 (package
20371 (name "python-nltk")
20372 (version "3.6.2")
20373 (source (origin
20374 (method url-fetch)
20375 (uri (pypi-uri "nltk" version ".zip"))
20376 (sha256
20377 (base32
20378 "1sq32lwgij9h8rsksymnxxr7bqfw3vgx5ijw4azbj6k2xnmmdmap"))))
20379 (build-system python-build-system)
20380 (arguments
20381 '(;; The tests require some extra resources to be downloaded.
20382 ;; TODO Try packaging these resources.
20383 #:tests? #f))
20384 (propagated-inputs
20385 (list python-click python-joblib python-regex python-tqdm))
20386 (native-inputs
20387 (list unzip))
20388 (home-page "http://nltk.org/")
20389 (synopsis "Natural Language Toolkit")
20390 (description "It provides interfaces to over 50 corpora and lexical
20391 resources such as WordNet, along with a suite of text processing libraries
20392 for classification, tokenization, stemming, tagging, parsing, and semantic
20393 reasoning, wrappers for natural language processing libraries.")
20394 (license license:asl2.0)))
20395
20396;; Versions >=3.5 breaks backward-compatibility,
20397;; so we keep version 3.4.x around for a while.
20398(define-public python-nltk-3.4
20399 (package
20400 (inherit python-nltk)
20401 (version "3.4.5")
20402 (source
20403 (origin
20404 (method url-fetch)
20405 (uri (pypi-uri "nltk" version ".zip"))
20406 (sha256
20407 (base32 "153x2clrnigs74jdgnn3qmljdjj4gprmvpdvh49i18ls4m8mbm5y"))))
20408 (propagated-inputs (list python-six))))
20409
20410(define-public python-pymongo
20411 (package
20412 (name "python-pymongo")
20413 (version "4.1.1")
20414 (source (origin
20415 (method url-fetch)
20416 (uri (pypi-uri "pymongo" version))
20417 (sha256
20418 (base32
20419 "1m9hc2a4kgg10xy3g5x00z4a7rrk9s0rbf5qfypwnhq0kdfg5f6p"))))
20420 (build-system python-build-system)
20421 (propagated-inputs
20422 (list python-certifi))
20423 (home-page "https://github.com/mongodb/mongo-python-driver")
20424 (synopsis "Python driver for MongoDB")
20425 (description "Python driver for MongoDB.")
20426 (license license:asl2.0)))
20427
20428(define-public python-consul
20429 (package
20430 (name "python-consul")
20431 (version "0.6.1")
20432 (source
20433 (origin
20434 (method url-fetch)
20435 (uri (pypi-uri "python-consul" version))
20436 (sha256
20437 (base32
20438 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
20439 (build-system python-build-system)
20440 (arguments
20441 '(#:tests? #f)) ; The tests are not distributed
20442 (propagated-inputs
20443 (list python-requests python-six))
20444 (home-page "https://github.com/cablehead/python-consul")
20445 (synopsis "Python client for Consul")
20446 (description
20447 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
20448 discovery, monitoring and configuration.")
20449 (license license:expat)))
20450
20451(define-public python-schematics
20452 (package
20453 (name "python-schematics")
20454 (version "1.1.1")
20455 (source
20456 (origin
20457 (method git-fetch)
20458 (uri (git-reference
20459 (url "https://github.com/schematics/schematics")
20460 (commit (string-append "v" version))))
20461 (file-name (git-file-name name version))
20462 (sha256
20463 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
20464 (build-system python-build-system)
20465 (propagated-inputs
20466 (list python-six))
20467 (arguments
20468 ;; The tests require a bunch of not very nice packages with fixed
20469 ;; version requirements (e.g. python-coveralls).
20470 `(#:tests? #f))
20471 (home-page "https://github.com/schematics/schematics")
20472 (synopsis "Python Data Structures for Humans")
20473 (description "Python Data Structures for Humans.")
20474 (license license:bsd-3)))
20475
20476(define-public python-odfpy
20477 (package
20478 (name "python-odfpy")
20479 (version "1.4.1")
20480 (source (origin
20481 (method url-fetch)
20482 (uri (pypi-uri "odfpy" version))
20483 (sha256
20484 (base32
20485 "1v1qqk9p12qla85yscq2g413l3qasn6yr4ncyc934465b5p6lxnv"))))
20486 (arguments
20487 `(#:phases
20488 (modify-phases %standard-phases
20489 (replace 'check
20490 (lambda _
20491 (invoke "pytest" "-vv"))))))
20492 (build-system python-build-system)
20493 (native-inputs
20494 (list python-pytest))
20495 (propagated-inputs
20496 (list python-defusedxml))
20497 (home-page "https://github.com/eea/odfpy")
20498 (synopsis "Python API and tools to manipulate OpenDocument files")
20499 (description "Collection of libraries and utility programs written in
20500 Python to manipulate OpenDocument 1.2 files.")
20501 (license
20502 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
20503 ;; number of files with other licenses.
20504 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
20505
20506(define-public python-natsort
20507 (package
20508 (name "python-natsort")
20509 (version "7.1.1")
20510 (source (origin
20511 (method url-fetch)
20512 (uri (pypi-uri "natsort" version))
20513 (sha256
20514 (base32
20515 "00y49bfsi7rrsd1s42gc2w95a6arl9ipdsx2493hr0v54fj07ih0"))))
20516 (build-system python-build-system)
20517 (arguments
20518 `(#:phases
20519 (modify-phases %standard-phases
20520 (add-after 'unpack 'remove-test-hypothesis-deadlines
20521 (lambda _
20522 (substitute* "tests/test_utils.py"
20523 (("from hypothesis import given")
20524 "from hypothesis import given, settings")
20525 (("( +)@given" all spaces)
20526 (string-append spaces "@settings(deadline=None)\n" all)))))
20527 (replace 'check
20528 (lambda* (#:key tests? #:allow-other-keys)
20529 (when tests?
20530 (invoke "pytest" "-v")))))))
20531 (native-inputs
20532 (list python-hypothesis python-pytest-cov python-pytest-mock
20533 python-pytest))
20534 (propagated-inputs ; TODO: Add python-fastnumbers.
20535 (list python-pyicu))
20536 (home-page "https://github.com/SethMMorton/natsort")
20537 (synopsis "Natural sorting for python and shell")
20538 (description
20539 "Natsort lets you apply natural sorting on lists instead of
20540lexicographical. If you use the built-in @code{sorted} method in python on a
20541list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
20542it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
20543@code{a9}]}. Natsort provides a function @code{natsorted} that identifies
20544numbers and sorts them separately from strings. It can also sort version
20545numbers, real numbers, mixed types and more, and comes with a shell command
20546@command{natsort} that exposes this functionality in the command line.")
20547 (license license:expat)))
20548
20549(define-public glances
20550 (package
20551 (name "glances")
20552 (version "3.4.0.3")
20553 (source
20554 (origin
20555 (method url-fetch)
20556 (uri (pypi-uri "Glances" version))
20557 (sha256
20558 (base32 "0pf8hxbgwkhv8l5frg61b073vscz5a7bz1al7xhn36fvh10xbcg7"))
20559 (modules '((guix build utils)))
20560 (snippet
20561 '(begin
20562 ;; Glances phones PyPI for weekly update checks by default.
20563 ;; Disable these. The user can re-enable them if desired.
20564 (substitute* "glances/outdated.py"
20565 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
20566 (string-append indentation
20567 "self.args.disable_check_update = True\n"
20568 line)))
20569 #t))))
20570 (build-system python-build-system)
20571 (propagated-inputs
20572 (list python-defusedxml python-future python-packaging python-psutil python-ujson))
20573 (home-page "https://github.com/nicolargo/glances")
20574 (synopsis "Cross-platform curses-based monitoring tool")
20575 (description
20576 "Glances is a curses-based monitoring tool for a wide variety of platforms.
20577 Glances uses the PsUtil library to get information from your system. It
20578 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
20579 (license license:lgpl3+)))
20580
20581(define-public python-graphql-core
20582 (package
20583 (name "python-graphql-core")
20584 (version "3.1.2")
20585 (source
20586 (origin
20587 (method url-fetch)
20588 (uri (pypi-uri "graphql-core" version))
20589 (sha256
20590 (base32
20591 "0fjv5w2wvgdr8gb27v241bavliipyir9fdz48rsgc3xapm644mn0"))))
20592 (build-system python-build-system)
20593 (arguments
20594 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
20595 #:phases
20596 (modify-phases %standard-phases
20597 (add-after 'unpack 'patch-hardcoded-version
20598 (lambda _ (substitute*
20599 "setup.py"
20600 (("'gevent==1.1rc1'") "'gevent'"))
20601 #t)))))
20602 (native-inputs
20603 (list python-gevent python-mock python-pytest-mock))
20604 (propagated-inputs
20605 (list python-promise python-six))
20606 (home-page "https://github.com/graphql-python/graphql-core")
20607 (synopsis "GraphQL implementation for Python")
20608 (description
20609 "GraphQL implementation for Python. GraphQL is a data query language and
20610 runtime designed and used to request and deliver data to mobile and web apps.
20611 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
20612 to Python.")
20613 (license license:expat)))
20614
20615(define-public python-graphql-relay
20616 (package
20617 (name "python-graphql-relay")
20618 (version "3.1.0")
20619 (source
20620 (origin
20621 (method url-fetch)
20622 (uri (pypi-uri "graphql-relay" version))
20623 (sha256
20624 (base32
20625 "1d70vwam9gjhx7fqzsa03x7lc6ivcqki5r9pk8m7rslmb7pagmbh"))))
20626 (build-system python-build-system)
20627 (arguments
20628 '(#:phases
20629 (modify-phases %standard-phases
20630 (replace 'check
20631 (lambda* (#:key tests? #:allow-other-keys)
20632 (when tests?
20633 (invoke "pytest" "tests")))))))
20634 (native-inputs
20635 (list
20636 python-pytest
20637 python-pytest-asyncio))
20638 (propagated-inputs
20639 (list python-graphql-core))
20640 (home-page "https://github.com/graphql-python/graphql-relay-py")
20641 (synopsis "Relay implementation for Python")
20642 (description
20643 "This is a library to allow the easy creation of Relay-compliant servers
20644 using the GraphQL Python reference implementation of a GraphQL server. It
20645 should be noted that the code is a exact port of the original
20646 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
20647 from Facebook.")
20648 (license license:expat)))
20649
20650(define-public python-graphene
20651 (package
20652 (name "python-graphene")
20653 (version "3.0")
20654 (source
20655 (origin
20656 (method url-fetch)
20657 (uri (pypi-uri "graphene" version))
20658 (sha256
20659 (base32
20660 "08m1n2ydk48c18cvl8474v3pwwacjl1vgq61m9qs00122mp0cj5g"))))
20661 (build-system python-build-system)
20662 (propagated-inputs
20663 (list python-graphql-core python-graphql-relay python-aniso8601
20664 python-promise python-six))
20665 (arguments
20666 `(#:tests? #f)) ; no tests/ in the PyPI tarball
20667 (home-page "https://graphene-python.org/")
20668 (synopsis "GraphQL Framework for Python")
20669 (description
20670 "Graphene is a Python library for building GraphQL schemas/types.
20671 A GraphQL schema describes your data model, and provides a GraphQL server
20672 with an associated set of resolve methods that know how to fetch data.")
20673 (license license:expat)))
20674
20675(define-public python-random2
20676 (package
20677 (name "python-random2")
20678 (version "1.0.1")
20679 (source (origin
20680 (method url-fetch)
20681 (uri (pypi-uri "random2" version ".zip"))
20682 (sha256
20683 (base32
20684 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))
20685 (patches
20686 (search-patches "python-random2-getrandbits-test.patch"))))
20687 (build-system python-build-system)
20688 (native-inputs (list unzip))
20689 (home-page "https://pypi.python.org/pypi/random2")
20690 (synopsis "Python 3 version of the Python 2 @code{random} module")
20691 (description
20692 "This package provides a Python 3 ported version of Python 2.7’s
20693 @code{random} module. It has also been back-ported to work in Python 2.6.
20694
20695 In Python 3, the implementation of @code{randrange()} was changed, so that
20696 even with the same seed you get different sequences in Python 2 and 3.
20697
20698 This package closes that gap, allowing stable random number generation
20699 between the different Python versions.")
20700 (license license:psfl)))
20701
20702(define-public python-snowballstemmer
20703 (package
20704 (name "python-snowballstemmer")
20705 (version "2.0.0")
20706 (source (origin
20707 (method url-fetch)
20708 (uri (pypi-uri "snowballstemmer" version))
20709 (sha256
20710 (base32
20711 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
20712 (build-system python-build-system)
20713 (arguments
20714 `(;; No tests exist
20715 #:tests? #f))
20716 (home-page "https://github.com/shibukawa/snowball_py")
20717 (synopsis "Snowball stemming library collection for Python")
20718 (description "This package provides 16 word stemmer algorithms generated
20719 from Snowball algorithms. It includes the 15 original ones plus the Poerter
20720 English stemmer.")
20721 (license license:bsd-3)))
20722
20723(define-public python-setproctitle
20724 (package
20725 (name "python-setproctitle")
20726 (version "1.3.2")
20727 (source
20728 (origin
20729 (method url-fetch)
20730 (uri (pypi-uri "setproctitle" version))
20731 (sha256
20732 (base32
20733 "1zbp6kyzfbrmbh9j3idai0mnpa28zn5db3k5l07jc3c3gj89gyxr"))))
20734 (build-system python-build-system)
20735 (arguments
20736 '(#:phases
20737 (modify-phases %standard-phases
20738 (replace 'check
20739 (lambda* (#:key tests? #:allow-other-keys)
20740 (setenv "PYTHON" (or (which "python3") (which "python")))
20741 (setenv "PYCONFIG" (if (which "python3-config")
20742 "python3-config --embed"
20743 "python-config"))
20744 (substitute* "tests/conftest.py"
20745 (("cc") "gcc"))
20746 (when tests?
20747 (invoke "pytest" "tests/")))))))
20748 (native-inputs
20749 (list procps python-pytest)) ; required for tests
20750 (home-page "https://github.com/dvarrazzo/py-setproctitle")
20751 (synopsis
20752 "Setproctitle implementation for Python to customize the process title")
20753 (description "The library allows a process to change its title (as displayed
20754by system tools such as @code{ps} and @code{top}).
20755
20756Changing the title is mostly useful in multi-process systems, for example when a
20757master process is forked: changing the children's title allows identifying the
20758task each process is busy with. The technique is used by PostgreSQL and the
20759OpenSSH Server for example.")
20760 (license license:bsd-3)))
20761
20762(define-public python-pyelftools
20763 (package
20764 (name "python-pyelftools")
20765 (version "0.29")
20766 (home-page "https://github.com/eliben/pyelftools")
20767 (source
20768 (origin
20769 (method git-fetch)
20770 (uri (git-reference (url home-page)
20771 (commit (string-append "v" version))))
20772 (file-name (git-file-name name version))
20773 (sha256
20774 (base32 "1mi7i9zlhkkap4q50ciak57ia46mj2jzq0713m3dh0x8j05k9xml"))
20775 (snippet
20776 ;; Delete bundled readelf executable.
20777 '(delete-file "test/external_tools/readelf"))))
20778 (build-system python-build-system)
20779 (arguments
20780 '(#:phases (modify-phases %standard-phases
20781 (replace 'check
20782 (lambda* (#:key tests? #:allow-other-keys)
20783 (when tests?
20784 ;; Taken from tox.ini.
20785 (invoke "python" "test/run_all_unittests.py")
20786 (invoke "python" "test/run_examples_test.py")
20787 (invoke "python" "test/run_readelf_tests.py")))))))
20788 (synopsis
20789 "Analyze binary and library file information")
20790 (description "This Python library provides interfaces for parsing and
20791 analyzing two binary and library file formats ; the Executable and Linking
20792 Format (ELF), and debugging information in the Debugging With Attributed
20793 Record Format (DWARF).")
20794 (license license:public-domain)))
20795
20796(define-public python-pefile
20797 (package
20798 (name "python-pefile")
20799 (version "2022.5.30")
20800 (source (origin
20801 (method git-fetch)
20802 (uri (git-reference
20803 (url "https://github.com/erocarrera/pefile")
20804 (commit (string-append "v" version))))
20805 (file-name (git-file-name name version))
20806 (sha256
20807 (base32
20808 "1qj90a0s2gd5hn2zggypqc1077inid5dcl1fp5973b04kf2b9z8a"))))
20809 (build-system python-build-system)
20810 (propagated-inputs (list python-future))
20811 (home-page "https://github.com/erocarrera/pefile")
20812 (synopsis "Portable Executable (PE) file parser")
20813 (description "This python library provides interfaces for parsing and
20814working with Portable Executable (PE) files. It makes to most information
20815from the header, as well as section details and data available.")
20816 (license license:expat)))
20817
20818(define-public python-imagesize
20819 (package
20820 (name "python-imagesize")
20821 (version "1.2.0")
20822 (source
20823 (origin
20824 (method url-fetch)
20825 (uri (pypi-uri "imagesize" version))
20826 (sha256
20827 (base32
20828 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
20829 (build-system python-build-system)
20830 (home-page "https://github.com/shibukawa/imagesize_py")
20831 (synopsis "Gets image size of files in various formats in Python")
20832 (description
20833 "This package allows determination of image size from
20834 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
20835 (license license:expat)))
20836
20837(define-public python-termstyle
20838 (package
20839 (name "python-termstyle")
20840 (version "0.1.11")
20841 (source
20842 (origin
20843 (method url-fetch)
20844 (uri (pypi-uri "termstyle" version))
20845 (sha256
20846 (base32
20847 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
20848 (build-system python-build-system)
20849 (arguments
20850 '(#:phases
20851 (modify-phases %standard-phases
20852 (replace 'check
20853 (lambda _
20854 (invoke "python" "test3.py"))))))
20855 (home-page "https://github.com/gfxmonk/termstyle")
20856 (synopsis "Console text coloring for Python")
20857 (description "This package provides console text coloring for Python.")
20858 (license license:bsd-3)))
20859
20860(define-public python-argcomplete
20861 (package
20862 (name "python-argcomplete")
20863 (version "1.11.1")
20864 (source
20865 (origin
20866 (method url-fetch)
20867 (uri (pypi-uri "argcomplete" version))
20868 (sha256
20869 (base32
20870 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
20871 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
20872 (build-system python-build-system)
20873 (native-inputs
20874 (list python-coverage
20875 python-flake8
20876 python-pexpect
20877 python-wheel
20878 tcsh
20879 fish
20880 bash)) ;full Bash for 'test_file_completion'
20881 (home-page "https://github.com/kislyuk/argcomplete")
20882 (synopsis "Shell tab completion for Python argparse")
20883 (description "argcomplete provides extensible command line tab completion
20884 of arguments and options for Python scripts using @code{argparse}. It's
20885 particularly useful for programs with many options or sub-parsers that can
20886 dynamically suggest completions ; for example, when browsing resources over the
20887 network.")
20888 (license license:asl2.0)))
20889
20890(define-public python-csscompressor
20891 (package
20892 (name "python-csscompressor")
20893 (version "0.9.5")
20894 (source
20895 (origin
20896 (method url-fetch)
20897 (uri (pypi-uri "csscompressor" version))
20898 (sha256
20899 (base32
20900 "018ssffvlpnc1salmnpyl52c11glzzwj4k9f757hl4pkpjnjp8mg"))))
20901 (build-system python-build-system)
20902 (arguments
20903 '(#:phases
20904 (modify-phases %standard-phases
20905 (replace 'check
20906 (lambda _
20907 (invoke "py.test"))))))
20908 (native-inputs
20909 (list python-pytest))
20910 (home-page "https://github.com/sprymix/csscompressor")
20911 (synopsis "Python port of YUI CSS Compressor")
20912 (description
20913 "This package provides a python port of YUI CSS Compressor.")
20914 (license license:bsd-3)))
20915
20916(define-public python-rcssmin
20917 (package
20918 (name "python-rcssmin")
20919 (version "1.0.6")
20920 (source
20921 (origin
20922 (method url-fetch)
20923 (uri (pypi-uri "rcssmin" version))
20924 (sha256
20925 (base32
20926 "0w42l4dhxghcz7pj3q7hkxp015mvb8z2cq9sfxbl31npsfavd1ya"))))
20927 (build-system python-build-system)
20928 (arguments
20929 '(#:phases
20930 (modify-phases %standard-phases
20931 (replace 'check
20932 (lambda _
20933 (invoke "python" "run_tests.py" "tests"))))))
20934 (home-page "http://opensource.perlig.de/rcssmin/")
20935 (synopsis "CSS Minifier")
20936 (description "The minifier is based on the semantics of the YUI compressor,
20937 which itself is based on the rule list by Isaac Schlueter.")
20938 (license license:asl2.0)))
20939
20940(define-public python-rjsmin
20941 (package
20942 (name "python-rjsmin")
20943 (version "1.1.0")
20944 (source
20945 (origin
20946 (method url-fetch)
20947 (uri (pypi-uri "rjsmin" version))
20948 (sha256
20949 (base32
20950 "0cmc72rlkvzz8fl89bc83czkx0pcvhzj7yn7m29r8pgnf5fcfpdi"))
20951 (modules '((guix build utils)))
20952 (snippet
20953 '(begin
20954 (for-each delete-file (find-files "bench" "\\.js$"))
20955 #t))))
20956 (build-system python-build-system)
20957 (arguments
20958 '(#:tests? #f ; Not all test files included.
20959 #:phases
20960 (modify-phases %standard-phases
20961 (replace 'check
20962 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
20963 (add-installed-pythonpath inputs outputs)
20964 (if tests?
20965 (invoke "py.test" "-vv" "tests")
20966 #t))))))
20967 (native-inputs
20968 (list python-pytest))
20969 (home-page "http://opensource.perlig.de/rjsmin/")
20970 (synopsis "Javascript Minifier")
20971 (description "@code{rJSmin} is a javascript minifier written in Python. The
20972 minifier is based on the semantics of jsmin.c by Douglas Crockford. The module
20973 is a re-implementation aiming for speed, so it can be used at runtime (rather
20974 than during a preprocessing step).")
20975 (license license:asl2.0)))
20976
20977(define-public python-xopen
20978 (package
20979 (name "python-xopen")
20980 (version "1.7.0")
20981 (source
20982 (origin
20983 (method url-fetch)
20984 (uri (pypi-uri "xopen" version))
20985 (sha256
20986 (base32
20987 "17qda88irg77qdm2kkxq4zgdhwfgykcpdgd4cx3xfpp9k219q7wh"))))
20988 (build-system pyproject-build-system)
20989 (propagated-inputs
20990 (list pigz python-isal python-typing-extensions))
20991 (native-inputs
20992 (list python-pytest python-pytest-timeout python-setuptools-scm))
20993 (home-page "https://github.com/marcelm/xopen/")
20994 (synopsis "Open compressed files transparently")
20995 (description "This module provides an @code{xopen} function that works
20996like Python's built-in @code{open} function, but can also deal with compressed
20997files. Supported compression formats are gzip, bzip2 and, xz, and are
20998automatically recognized by their file extensions. The focus is on being as
20999efficient as possible on all supported Python versions.")
21000 (license license:expat)))
21001
21002(define-public python-cheetah
21003 (package
21004 (name "python-cheetah")
21005 (version "3.3.1")
21006 (source
21007 (origin
21008 (method url-fetch)
21009 (uri (pypi-uri "CT3" version))
21010 (sha256
21011 (base32
21012 "1j36vampqip18jx0jzngb9rnkhhhl8hqnscg117y0d6cgrgm57qw"))))
21013 (build-system python-build-system)
21014 (arguments
21015 `(#:phases (modify-phases %standard-phases
21016 (add-after 'unpack 'use-absolute-python
21017 (lambda _
21018 (substitute* "Cheetah/CheetahWrapper.py"
21019 (("#!/usr/bin/env python")
21020 (string-append "#!" (which "python"))))))
21021 (add-after 'unpack 'fix-tests
21022 (lambda _
21023 (substitute* "Cheetah/Tests/ImportHooks.py"
21024 (("os.path.dirname\\(__file__\\)")
21025 (string-append "'" (getcwd) "/Cheetah/Tests'")))))
21026 (replace 'check
21027 (lambda _
21028 (setenv "TMPDIR" "/tmp")
21029 (substitute* "Cheetah/Tests/Test.py"
21030 (("unittest.TextTestRunner\\(\\)")
21031 "unittest.TextTestRunner(verbosity=2)"))
21032
21033 (invoke "python" "Cheetah/Tests/Test.py"))))))
21034 (propagated-inputs
21035 (list python-markdown)) ;optional
21036 (home-page "https://cheetahtemplate.org/")
21037 (synopsis "Template engine")
21038 (description "Cheetah is a text-based template engine and Python code
21039 generator.
21040
21041 Cheetah can be used as a standalone templating utility or referenced as
21042 a library from other Python applications. It has many potential uses,
21043 but web developers looking for a viable alternative to ASP, JSP, PHP and
21044 PSP are expected to be its principle user group.
21045
21046 Features:
21047 @enumerate
21048 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
21049 text-based format.
21050 @item Cleanly separates content, graphic design, and program code.
21051 @item Blends the power and flexibility of Python with a simple template language
21052 that non-programmers can understand.
21053 @item Gives template writers full access to any Python data structure, module,
21054 function, object, or method in their templates.
21055 @item Makes code reuse easy by providing an object-orientated interface to
21056 templates that is accessible from Python code or other Cheetah templates.
21057 One template can subclass another and selectively reimplement sections of it.
21058 @item Provides a simple, yet powerful, caching mechanism that can dramatically
21059 improve the performance of a dynamic website.
21060 @item Compiles templates into optimized, yet readable, Python code.
21061 @end enumerate")
21062 (license (license:x11-style "file://LICENSE"))))
21063
21064(define-public python-chevron
21065 (package
21066 (name "python-chevron")
21067 (version "0.14.0")
21068 (source (origin
21069 (method url-fetch)
21070 (uri (pypi-uri "chevron" version))
21071 (sha256
21072 (base32
21073 "1gqfh00ics2k1sm5g46l3bi8cl5fc5d1cwzh1ylvcxvdvypklqc7"))))
21074 (build-system pyproject-build-system)
21075 (arguments (list #:tests? #false)) ;there are none
21076 (home-page "https://github.com/noahmorrison/chevron")
21077 (synopsis "Mustache templating language renderer")
21078 (description "This package provides a Python implementation of the
21079Mustache templating language renderer.")
21080 (license license:expat)))
21081
21082(define-public python-duckdb
21083 (package
21084 (name "python-duckdb")
21085 (version "0.8.0")
21086 (source (origin
21087 (method url-fetch)
21088 (uri (pypi-uri "duckdb" version))
21089 (sha256
21090 (base32
21091 "13y1gs565q51li5fi9m7fpf0sqns8frsaii6v95acwjhmdds73f6"))))
21092 (build-system pyproject-build-system)
21093 (arguments
21094 (list
21095 #:test-flags
21096 '(list "--ignore=tests/slow/test_h2oai_arrow.py"
21097 ;; Don't install anything, thank you.
21098 "-k" "not test_install_non_existent_extension")
21099 #:phases
21100 #~(modify-phases %standard-phases
21101 ;; Tests need this
21102 (add-before 'check 'set-HOME
21103 (lambda _ (setenv "HOME" "/tmp")))
21104 (add-before 'build 'set-version
21105 (lambda _
21106 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
21107 (substitute* "setup.py"
21108 (("\"setuptools_scm<7.0.0\",") ""))))
21109 ;; Later versions of pybind replace "_" with "const_name".
21110 (add-after 'unpack 'pybind-compatibility
21111 (lambda _
21112 (with-directory-excursion "src/include/duckdb_python"
21113 (substitute* '("python_objects.hpp"
21114 "pyfilesystem.hpp"
21115 "pybind11/conversions/pyconnection_default.hpp")
21116 (("const_name") "_"))))))))
21117 (native-inputs
21118 (list pybind11
21119 python-fsspec
21120 python-google-cloud-storage
21121 python-mypy
21122 python-numpy
21123 python-pandas
21124 python-psutil
21125 python-pyarrow
21126 python-pytest
21127 python-pytest-runner
21128 python-setuptools-scm))
21129 (home-page "https://www.duckdb.org")
21130 (synopsis "DuckDB embedded database")
21131 (description "DuckDB is an in-process SQL OLAP database management
21132system.")
21133 (license license:expat)))
21134
21135(define-public python-dulwich
21136 (package
21137 (name "python-dulwich")
21138 (version "0.20.30")
21139 (source
21140 (origin
21141 (method url-fetch)
21142 (uri (list (string-append "https://www.dulwich.io/releases/"
21143 "dulwich-" version ".tar.gz")
21144 (pypi-uri "dulwich" version)))
21145 (sha256
21146 (base32
21147 "0hafaff30bmkj30b8pwpwsy3fz5h6c1pn98ihqcvl5zndflr1h22"))))
21148 (build-system python-build-system)
21149 (arguments
21150 '(#:phases
21151 (modify-phases %standard-phases
21152 (add-before 'check 'fix-tests
21153 (lambda* (#:key inputs #:allow-other-keys)
21154 (substitute* '("dulwich/tests/test_repository.py"
21155 "dulwich/tests/test_porcelain.py"
21156 "dulwich/tests/test_hooks.py")
21157 (("/bin/sh") (search-input-file inputs "/bin/sh")))
21158 (setenv "TEST_RUNNER" "unittest")
21159 (setenv "PYTHONHASHSEED" "random"))))))
21160 (propagated-inputs
21161 (list python-fastimport python-urllib3))
21162 (native-inputs
21163 (list python-mock python-geventhttpclient python-gpg
21164 git gnupg))
21165 (home-page "https://www.dulwich.io/")
21166 (synopsis "Git implementation in Python")
21167 (description "Dulwich is an implementation of the Git file formats and
21168 protocols written in pure Python.")
21169 ;; Can be used with either license.
21170 (license (list license:asl2.0 license:gpl2+))))
21171
21172(define-public python-pbkdf2
21173 (package
21174 (name "python-pbkdf2")
21175 (version "1.3")
21176 (source
21177 (origin
21178 (method url-fetch)
21179 (uri (pypi-uri "pbkdf2" version))
21180 (sha256
21181 (base32
21182 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
21183 (build-system python-build-system)
21184 (arguments
21185 '(#:phases
21186 (modify-phases %standard-phases
21187 (replace 'check
21188 (lambda _
21189 (invoke "python" "test/test_pbkdf2.py"))))))
21190 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
21191 (synopsis "Password-based key derivation")
21192 (description "This module implements the password-based key derivation
21193 function, PBKDF2, specified in RSA PKCS#5 v2.0.
21194
21195 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
21196 is part of the RSA Public Key Cryptography Standards series. The provided
21197 implementation takes a password or a passphrase and a salt value (and
21198 optionally a iteration count, a digest module, and a MAC module) and provides
21199 a file-like object from which an arbitrarily-sized key can be read.")
21200 (license license:expat)))
21201
21202(define-public python-qrcode
21203 (package
21204 (name "python-qrcode")
21205 (version "7.3.1")
21206 (source
21207 (origin
21208 (method url-fetch)
21209 (uri (pypi-uri "qrcode" version))
21210 (sha256
21211 (base32 "0y35jlwfvkgn9341lzshyaqgpp61vysjh107vhdd96ya83r6ynip"))))
21212 (build-system python-build-system)
21213 (arguments
21214 ;; FIXME: Tests require packaging 'pymaging'.
21215 '(#:tests? #f))
21216 (propagated-inputs
21217 (list python-lxml ; for SVG output
21218 python-pillow)) ; for PNG output
21219 (home-page "https://github.com/lincolnloop/python-qrcode")
21220 (synopsis "QR Code image generator")
21221 (description "This package provides a pure Python QR Code generator
21222 module. It uses the Python Imaging Library (PIL) to allow for the generation
21223 of QR Codes.
21224
21225 In addition this package provides a command line tool to generate QR codes and
21226 either write these QR codes to a file or do the output as ascii art at the
21227 console.")
21228 (license license:bsd-3)))
21229
21230(define-public python-rst2ansi
21231 (package
21232 (name "python-rst2ansi")
21233 (version "0.1.5")
21234 (source
21235 (origin
21236 (method url-fetch)
21237 (uri (pypi-uri "rst2ansi" version))
21238 (sha256
21239 (base32
21240 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
21241 (build-system python-build-system)
21242 (propagated-inputs
21243 (list python-docutils))
21244 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
21245 (synopsis "Convert RST to ANSI-decorated console output")
21246 (description
21247 "Python module dedicated to rendering RST (reStructuredText) documents
21248 to ansi-escaped strings suitable for display in a terminal.")
21249 (license license:expat)))
21250
21251(define-public python-ansi2html
21252 (package
21253 (name "python-ansi2html")
21254 (version "1.2.0")
21255 (source
21256 (origin
21257 (method url-fetch)
21258 (uri (pypi-uri "ansi2html" version))
21259 (sha256
21260 (base32
21261 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
21262 (build-system python-build-system)
21263 (native-inputs
21264 (list python-mock python-nose))
21265 (propagated-inputs
21266 (list python-six))
21267 (home-page "https://github.com/ralphbean/ansi2html")
21268 (synopsis "Convert ANSI-decorated console output to HTML")
21269 (description
21270 "@command{ansi2html} is a Python library and command line utility for
21271 converting text with ANSI color codes to HTML or LaTeX.")
21272 (license license:gpl3+)))
21273
21274(define-public python-easy-ansi
21275 (package
21276 (name "python-easy-ansi")
21277 (version "0.3")
21278 (source
21279 (origin
21280 (method git-fetch)
21281 (uri (git-reference
21282 (url "https://gitlab.com/joeysbytes/easy-ansi")
21283 (commit (string-append "v" version))))
21284 (file-name (git-file-name name version))
21285 (sha256
21286 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
21287 (build-system python-build-system)
21288 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
21289 (synopsis "Terminal framework API")
21290 (description
21291 "Easy ANSI is a terminal framework API to give you an easy way to use
21292 colors, cursor control movements, and line/box drawing. It is not meant as a
21293 replacement to more full-featured frameworks (such as curses or urwid), but as
21294 a tool to quickly create nice-looking screens in your terminal window. You
21295 can even create animations with the cursor controls.")
21296 (license license:expat)))
21297
21298(define-public python-ddt
21299 (package
21300 (name "python-ddt")
21301 (version "1.4.2")
21302 (source
21303 (origin
21304 (method url-fetch)
21305 (uri (pypi-uri "ddt" version))
21306 (sha256
21307 (base32
21308 "0y2k756qjz1rhpivi60hy29b4bf0bh3wck39i1mn6pkil9k779k4"))))
21309 (build-system python-build-system)
21310 (native-inputs
21311 (list python-pytest))
21312 (propagated-inputs
21313 (list python-pyyaml))
21314 (home-page "https://github.com/datadriventests/ddt")
21315 (synopsis "Data-Driven Tests")
21316 (description
21317 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
21318 running it with different test data, and make it appear as multiple test
21319 cases.")
21320 (license license:expat)))
21321
21322(define-public python-pycountry
21323 (package
21324 (name "python-pycountry")
21325 (version "22.3.5")
21326 (source
21327 (origin
21328 (method url-fetch)
21329 (uri (pypi-uri "pycountry" version))
21330 (sha256
21331 (base32
21332 "0ihnkh86zz01vi46gcwgq6h71jrpj7hq71zi13c98n2qdhj3l5mj"))))
21333 (build-system python-build-system)
21334 (home-page "https://bitbucket.org/flyingcircus/pycountry")
21335 (synopsis "ISO databases for languages, countries, currencies, etc.")
21336 (description
21337 "@code{pycountry} provides the ISO databases for the standards:
21338 @enumerate
21339 @item 639-3 (Languages)
21340 @item 3166 (Countries)
21341 @item 3166-3 (Deleted Countries)
21342 @item 3166-2 (Subdivisions of countries)
21343 @item 4217 (Currencies)
21344 @item 15924 (Scripts)
21345 @end enumerate
21346 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
21347 through a Python API.")
21348 (license license:lgpl2.1+)))
21349
21350(define-public [email protected]
21351 (package
21352 (inherit python-pycountry)
21353 (name "python-pycountry")
21354 (version "20.7.3")
21355 (source
21356 (origin
21357 (method url-fetch)
21358 (uri (pypi-uri "pycountry" version))
21359 (sha256
21360 (base32 "0hnbabsmqimx5hqh0jbd2f64i8fhzhhbrvid57048hs5sd9ll241"))))))
21361
21362(define-public python-pycosat
21363 (package
21364 (name "python-pycosat")
21365 (version "0.6.3")
21366 (source
21367 (origin
21368 (method url-fetch)
21369 (uri (pypi-uri "pycosat" version ".zip"))
21370 (sha256
21371 (base32
21372 "1vg0f2fwcybpdqv92z0hwdl603n2safh3fqvjjxkksd78r4qg6ac"))))
21373 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
21374 (build-system python-build-system)
21375 (native-inputs
21376 (list unzip))
21377 (home-page "https://github.com/ContinuumIO/pycosat")
21378 (synopsis "Bindings to picosat (a SAT solver)")
21379 (description
21380 "This package provides efficient Python bindings to @code{picosat} on
21381 the C level. When importing pycosat, the @code{picosat} solver becomes part
21382 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
21383 Problem} (SAT) solver.")
21384 (license license:expat)))
21385
21386(define-public python-pypeg2
21387 (package
21388 (name "python-pypeg2")
21389 (version "2.15.2")
21390 (source
21391 (origin
21392 (method url-fetch)
21393 (uri (pypi-uri "pyPEG2" version))
21394 (sha256
21395 (base32
21396 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
21397 (build-system python-build-system)
21398 (propagated-inputs (list python-lxml))
21399 (arguments
21400 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
21401 '(#:tests? #f))
21402 (home-page "https://fdik.org/pyPEG/")
21403 (synopsis "Parsing Expression Grammars in Python")
21404 (description "PyPEG is an intrinsic parser interpreter framework for
21405 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
21406 parse many formal languages.")
21407 (license license:gpl2)))
21408
21409(define-public python-incremental
21410 (package
21411 (name "python-incremental")
21412 (version "17.5.0")
21413 (source
21414 (origin
21415 (method url-fetch)
21416 (uri (pypi-uri "incremental" version))
21417 (sha256
21418 (base32
21419 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
21420 (build-system python-build-system)
21421 (home-page "https://github.com/hawkowl/incremental")
21422 (synopsis "Library for versioning Python projects")
21423 (description "Incremental is a small library that versions your Python
21424 projects.")
21425 (license license:expat)))
21426
21427(define-public python-invoke
21428 (package
21429 (name "python-invoke")
21430 (home-page "https://www.pyinvoke.org/")
21431 (version "1.6.0")
21432 (source (origin
21433 (method url-fetch)
21434 (uri (pypi-uri "invoke" version))
21435 (sha256
21436 (base32
21437 "1lsql9daabfr31c7syva5myc5bka45k57ygs9fliv63qrwp1wk9p"))))
21438 (build-system python-build-system)
21439 (arguments
21440 ;; XXX: Requires many dependencies that are not yet in Guix.
21441 `(#:tests? #f
21442 #:phases
21443 (modify-phases %standard-phases
21444 (add-after 'unpack 'delete-python2-code
21445 (lambda _
21446 (delete-file-recursively "invoke/vendor/yaml2")))
21447 (add-after 'unpack 'fix-bash-path
21448 (lambda* (#:key inputs #:allow-other-keys)
21449 (let ((bash (assoc-ref inputs "bash")))
21450 (substitute* "invoke/config.py"
21451 (("shell = \"/bin/bash\"")
21452 (string-append "shell = \"" bash "/bin/bash\"")))))))))
21453 (inputs
21454 `(("bash" ,bash-minimal)))
21455 (synopsis "Pythonic task execution")
21456 (description
21457 "Invoke is a Python task execution tool and library, drawing inspiration
21458 from various sources to arrive at a powerful and clean feature set. It is
21459 evolved from the Fabric project, but focuses on local and abstract concerns
21460 instead of servers and network commands.")
21461 (license license:bsd-3)))
21462
21463(define-public python-automat
21464 (package
21465 (name "python-automat")
21466 (version "20.2.0")
21467 (source (origin
21468 (method url-fetch)
21469 (uri (pypi-uri "Automat" version))
21470 (sha256
21471 (base32
21472 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
21473 (build-system python-build-system)
21474 ;; We disable the tests because they require python-twisted, while
21475 ;; python-twisted depends on python-automat. Twisted is optional, but the
21476 ;; tests fail if it is not available. Also see
21477 ;; <https://github.com/glyph/automat/issues/71>.
21478 (arguments
21479 `(#:tests? #f
21480 #:phases
21481 (modify-phases %standard-phases
21482 ;; Remove script, because it depends on python-twisted.
21483 (add-after 'unpack 'remove-entrypoint
21484 (lambda _
21485 (substitute* "setup.py"
21486 (("\"automat-visualize = automat._visualize:tool\"") "")))))))
21487 (native-inputs
21488 (list python-m2r python-setuptools-scm python-graphviz))
21489 (propagated-inputs
21490 (list python-six python-attrs))
21491 (home-page "https://github.com/glyph/Automat")
21492 (synopsis "Self-service finite-state machines")
21493 (description "Automat is a library for concise, idiomatic Python
21494 expression of finite-state automata (particularly deterministic finite-state
21495 transducers).")
21496 (license license:expat)))
21497
21498(define-public python-m2r
21499 (package
21500 (name "python-m2r")
21501 (version "0.3.1")
21502 (source (origin
21503 (method url-fetch)
21504 (uri (pypi-uri "m2r" version))
21505 (sha256
21506 (base32
21507 "1asnwazfznbs0r7x03pj5ns4npz18z3kli538sgdicfg97y6gyxa"))
21508 (modules '((guix build utils)))
21509 (snippet
21510 ;; Adjust test regex for Python 3.10 compatibility.
21511 ;; Taken from upstream pull request:
21512 ;; https://github.com/miyakogi/m2r/pull/62
21513 '(substitute* "tests/test_cli.py"
21514 (("self.assertIn\\('optional arguments:', message\\)")
21515 "self.assertRegex(message, r'option(s|al arguments):')")))))
21516 (build-system python-build-system)
21517 (propagated-inputs
21518 (list python-docutils python-mistune))
21519 (native-inputs
21520 (list python-pygments python-mock))
21521 (home-page "https://github.com/miyakogi/m2r")
21522 (synopsis "Markdown to reStructuredText converter")
21523 (description "M2R converts a markdown file including reST markups to valid
21524 reST format.")
21525 (license license:expat)))
21526
21527(define-public python-constantly
21528 (package
21529 (name "python-constantly")
21530 (version "15.1.0")
21531 (source (origin
21532 (method url-fetch)
21533 (uri (pypi-uri "constantly" version))
21534 (sha256
21535 (base32
21536 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
21537 (build-system python-build-system)
21538 (home-page "https://github.com/twisted/constantly")
21539 (synopsis "Symbolic constants in Python")
21540 (description "Constantly is a Python library that provides symbolic
21541 constant support. It includes collections and constants with text, numeric,
21542 and bit flag values.")
21543 (license license:expat)))
21544
21545(define-public python-attrdict3
21546 (package
21547 (name "python-attrdict3")
21548 (version "2.0.2")
21549 (source (origin
21550 (method url-fetch)
21551 (uri (pypi-uri "attrdict3" version))
21552 (sha256
21553 (base32
21554 "1s2z6c9jam5azm746l49wsqsyi29zbbrknq1axsw230jl4f1fk00"))))
21555 (build-system python-build-system)
21556 ;; The package is no longer maintained and tests need some work.
21557 (arguments '(#:tests? #f))
21558 (propagated-inputs (list python-six))
21559 (home-page "https://github.com/pirofti/AttrDict3")
21560 (synopsis "Attribute-style access dictionaries")
21561 (description
21562 "This package provides mapping objects whose elements can be accessed
21563both as keys and as attributes.")
21564 (license license:expat)))
21565
21566(define-public python-attrs
21567 (package
21568 (name "python-attrs")
21569 (version "21.2.0")
21570 (source (origin
21571 (method url-fetch)
21572 (uri (pypi-uri "attrs" version))
21573 (sha256
21574 (base32
21575 "1yzmwi5d197p0qhl7rl4xi9q1w8mk9i3zn6hrl22knbcrb1slspg"))))
21576 (build-system python-build-system)
21577 (arguments
21578 `(#:phases (modify-phases %standard-phases
21579 (add-after 'unpack 'remove-test-hypothesis-deadlines
21580 (lambda _
21581 (substitute* "tests/test_make.py"
21582 (("assume, given") "assume, given, settings")
21583 (("( +)@given" all spaces)
21584 (string-append spaces "@settings(deadline=None)\n" all)))))
21585 (replace 'check
21586 (lambda* (#:key tests? #:allow-other-keys)
21587 (when tests?
21588 (invoke "pytest")))))))
21589 (native-inputs
21590 (list python-coverage python-hypothesis python-pympler python-pytest
21591 python-six))
21592 (home-page "https://github.com/python-attrs/attrs/")
21593 (synopsis "Attributes without boilerplate")
21594 (description "@code{attrs} is a Python package with class decorators that
21595 ease the chores of implementing the most common attribute-related object
21596 protocols.")
21597 (license license:expat)))
21598
21599(define-public python-attrs-bootstrap
21600 (package
21601 (inherit python-attrs)
21602 (name "python-attrs-bootstrap")
21603 (native-inputs `())
21604 (arguments `(#:tests? #f))))
21605
21606(define-public python-cliapp
21607 (package
21608 (name "python-cliapp")
21609 (version "1.20180812.1")
21610 (source
21611 (origin
21612 (method url-fetch)
21613 (uri (string-append
21614 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
21615 version ".tar.gz"))
21616 (sha256
21617 (base32
21618 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
21619 (build-system python-build-system)
21620 (arguments
21621 `(;; XXX: The tests only do style and coverage checks, which
21622 ;; fails due to deprecation warnings, etc.
21623 #:tests? #f))
21624 (native-inputs
21625 (list python-coverage-test-runner python-pep8))
21626 (propagated-inputs
21627 (list python-pyaml))
21628 (home-page "https://liw.fi/cliapp/")
21629 (synopsis "Python framework for command line programs")
21630 (description "@code{cliapp} is a Python framework for command line
21631 programs. It contains the typical stuff such programs need to do, such
21632 as parsing the command line for options, and iterating over input files.")
21633 (license license:gpl2+)))
21634
21635(define-public python-ttystatus
21636 (package
21637 (name "python-ttystatus")
21638 (version "0.38")
21639 (source
21640 (origin
21641 (method git-fetch)
21642 (uri (git-reference
21643 (url "http://git.liw.fi/ttystatus")
21644 ;; There are no tags after ttystatus-0.36.
21645 (commit "e9fc573326c5d1348f5fe56263b4f7a8c32f58c9")))
21646 (sha256
21647 (base32 "0v49q839nrwdm19c83wfmj6n2kw80xslwq9k0n5509r2h7wzjiqj"))
21648 (file-name (git-file-name name version))))
21649 (build-system python-build-system)
21650 (native-inputs
21651 (list python-coverage-test-runner python-pep8))
21652 (arguments
21653 `(#:phases
21654 (modify-phases %standard-phases
21655 ;; check phase needs to be run before the build phase. If not,
21656 ;; coverage-test-runner looks for tests for the built source files,
21657 ;; and fails.
21658 (delete 'check)
21659 (add-before 'build 'check
21660 (lambda _ (invoke "make" "check"))))))
21661 (home-page "https://liw.fi/ttystatus/")
21662 (synopsis "Python library for progress reporting and
21663 status updates on terminals")
21664 (description "@code{ttystatus} is a Python library for showing progress
21665 reporting and status updates on terminals, for command line programs.
21666 Output is automatically adapted to the width of the terminal: truncated
21667 if it does not fit, and resized if the terminal size changes.")
21668 (license license:gpl3+)))
21669
21670(define-public python-astroid
21671 (package
21672 (name "python-astroid")
21673 (version "2.11.7")
21674 (source
21675 (origin
21676 (method git-fetch)
21677 (uri (git-reference
21678 (url "https://github.com/PyCQA/astroid")
21679 (commit (string-append "v" version))))
21680 (file-name (git-file-name name version))
21681 (sha256
21682 (base32 "0lmm5bhszg1nj0xsjnh5nm39if2jzpa3ycgvhy6ddycz28dy568y"))))
21683 (build-system python-build-system)
21684 (propagated-inputs
21685 (list python-lazy-object-proxy python-typing-extensions python-wrapt))
21686 (native-inputs
21687 (list python-pytest python-pytest-runner))
21688 (home-page "https://github.com/PyCQA/astroid")
21689 (synopsis "Python source code base representation")
21690 (description "@code{python-astroid} provides a common base representation
21691of Python source code for projects such as pychecker, pyreverse, pylint, etc.
21692It provides a compatible representation which comes from the _ast module. It
21693rebuilds the tree generated by the builtin _ast module by recursively walking
21694down the AST and building an extended ast. The new node classes have
21695additional methods and attributes for different usages. They include some
21696support for static inference and local name scopes. Furthermore, astroid
21697builds partial trees by inspecting living objects.")
21698 (license license:lgpl2.1+)))
21699
21700(define-public python-isbnlib
21701 (package
21702 (name "python-isbnlib")
21703 (version "3.10.4")
21704 (source
21705 (origin
21706 (method url-fetch)
21707 (uri (pypi-uri "isbnlib" version))
21708 (sha256
21709 (base32
21710 "0iin0x2xqwyphyyzd0mzrq5v5xm7b6dlbb294k4dywra5qvbrgzm"))))
21711 (build-system python-build-system)
21712 (arguments '(#:tests? #f)) ; No test
21713 (home-page "https://github.com/xlcnd/isbnlib")
21714 (synopsis "Python library to work with ISBN strings")
21715 (description "@code{python-isbnlib} is a (pure) python library that provides
21716 several useful methods and functions to validate, clean, transform, hyphenate and
21717 get metadata for ISBN strings. Its origin was as the core of isbntools. This short
21718 version, is suitable to be include as a dependency in other projects.")
21719 (license license:lgpl3+)))
21720
21721(define-public python-isort
21722 (package
21723 (name "python-isort")
21724 (version "5.12.0")
21725 (source
21726 (origin
21727 (method git-fetch)
21728 (uri (git-reference
21729 ;; Tests pass only from the Github sources
21730 (url "https://github.com/timothycrosley/isort")
21731 (commit version)))
21732 (file-name (git-file-name name version))
21733 (modules '((guix build utils)))
21734 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
21735 (sha256
21736 (base32
21737 "1vbwc4gpffclf6hw08lvvgqlvsgfjlw7gjsm28jfcrln2pixla7j"))))
21738 (build-system python-build-system)
21739 (arguments
21740 (list
21741 #:phases
21742 #~(modify-phases %standard-phases
21743 (replace 'build
21744 (lambda _
21745 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
21746 (replace 'install
21747 (lambda _
21748 (let ((whl (car (find-files "dist" "\\.whl$"))))
21749 (invoke "pip" "--no-cache-dir" "--no-input"
21750 "install" "--no-deps" "--prefix" #$output whl))))
21751 (add-after 'install 'install-example-plugins
21752 (lambda _
21753 (for-each (lambda (source-directory)
21754 (invoke "python" "-m" "build" "--wheel"
21755 "--no-isolation" "--outdir=dist"
21756 source-directory))
21757 '("example_isort_formatting_plugin"
21758 "example_isort_sorting_plugin"
21759 "example_shared_isort_profile"))
21760 ;; Install them to temporary storage, for the test.
21761 (setenv "HOME" (getcwd))
21762 (let ((example-whls (find-files "dist" "^example.*\\.whl$")))
21763 (apply invoke "pip" "--no-cache-dir" "--no-input"
21764 "install" "--user" "--no-deps" example-whls))))
21765 (replace 'check
21766 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
21767 (when tests?
21768 (let ((bin (string-append #$output "/bin")))
21769 (setenv "PATH" (string-append (getenv "PATH") ":" bin)))
21770 (invoke "pytest" "-vv" "tests/unit/"
21771 "-k" "not test_gitignore" ;requires git
21772 "--ignore=tests/unit/test_deprecated_finders.py")))))))
21773 (native-inputs
21774 (list python-black
21775 python-colorama
21776 python-hypothesmith
21777 python-libcst-minimal
21778 python-natsort
21779 python-poetry-core
21780 python-pylama
21781 python-pypa-build
21782 python-pytest-mock
21783 python-pytest))
21784 (home-page "https://github.com/PyCQA/isort")
21785 (synopsis "Python utility/library to sort python imports")
21786 (description "@code{python-isort} is a python utility/library to sort
21787 imports alphabetically, and automatically separated into sections. It
21788 provides a command line utility, a python library and plugins for various
21789 editors.")
21790 (license license:expat)))
21791
21792(define-public python-configparser
21793 (package
21794 (name "python-configparser")
21795 (version "4.0.2")
21796 (source
21797 (origin
21798 (method url-fetch)
21799 (uri (pypi-uri "configparser" version))
21800 (sha256
21801 (base32
21802 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
21803 (native-inputs
21804 (list python-setuptools-scm))
21805 (build-system python-build-system)
21806 (home-page "https://github.com/jaraco/configparser/")
21807 (synopsis "Backport of configparser from python 3.5")
21808 (description "@code{python-configparser} is a backport of
21809 @code{configparser} from Python 3.5 so that it can be used directly
21810 in other versions.")
21811 (license license:expat)))
21812
21813(define-public python-iniconfig
21814 (package
21815 (name "python-iniconfig")
21816 (version "1.1.1")
21817 (source
21818 (origin
21819 (method url-fetch)
21820 (uri (pypi-uri "iniconfig" version))
21821 (sha256
21822 (base32
21823 "0ckzngs3scaa1mcfmsi1w40a1l8cxxnncscrxzjjwjyisx8z0fmw"))))
21824 (build-system python-build-system)
21825 (home-page "https://github.com/RonnyPfannschmidt/iniconfig")
21826 (synopsis "Simple INI-file parser")
21827 (description "The @code{iniconfig} package provides a small and simple
21828 INI-file parser module having a unique set of features ; @code{iniconfig}
21829 @itemize
21830 @item maintains the order of sections and entries ;
21831 @item supports multi-line values with or without line-continuations ;
21832 @item supports \"#\" comments everywhere ;
21833 @item raises errors with proper line-numbers ;
21834 @item raises an error when two sections have the same name.
21835 @end itemize")
21836 (license license:expat)))
21837
21838(define-public python-mamba
21839 (package
21840 (name "python-mamba")
21841 (version "0.11.2")
21842 (source (origin
21843 (method url-fetch)
21844 (uri (pypi-uri "mamba" version))
21845 (sha256
21846 (base32
21847 "15m4dpnpv9m60pdaygvwgi43fwqaivs3qxfxhspwrp47sbgwdkvm"))))
21848 (build-system python-build-system)
21849 (arguments `(#:tests? #f)) ; No test
21850 (propagated-inputs
21851 (list python-clint python-coverage))
21852 (home-page "https://nestorsalceda.com/mamba/")
21853 (synopsis "Test runner for Python")
21854 (description
21855 "Mamba is a Behaviour-Driven Development tool for Python developers.
21856 Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
21857 (license license:expat)))
21858
21859(define-public python-mando
21860 (package
21861 (name "python-mando")
21862 (version "0.7.1")
21863 (source (origin
21864 (method url-fetch)
21865 (uri (pypi-uri "mando" version))
21866 (sha256
21867 (base32
21868 "001mikga36i811pbc95rb45m2kzivkx4xb0fn3pzl4xnnjcskfhq"))))
21869 (build-system python-build-system)
21870 (arguments
21871 (list #:phases
21872 #~(modify-phases %standard-phases
21873 (replace 'check
21874 (lambda* (#:key tests? #:allow-other-keys)
21875 (when tests?
21876 (invoke "pytest" "-vv")))))))
21877 (propagated-inputs
21878 (list python-rst2ansi python-six))
21879 (native-inputs
21880 (list python-pytest))
21881 (home-page "https://mando.readthedocs.org/")
21882 (synopsis
21883 "Wrapper around argparse, allowing creation of complete CLI applications")
21884 (description
21885 "This package is a wrapper around argparse, allowing you to write complete CLI
21886 applications in seconds while maintaining all the flexibility.")
21887 (license license:expat)))
21888
21889(define-public python-mwclient
21890 (package
21891 (name "python-mwclient")
21892 (version "0.10.1")
21893 (source
21894 (origin
21895 (method git-fetch)
21896 ;; The PyPI version wouldn't contain tests.
21897 (uri (git-reference
21898 (url "https://github.com/mwclient/mwclient")
21899 (commit (string-append "v" version))))
21900 (file-name (git-file-name name version))
21901 (sha256
21902 (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
21903 (build-system python-build-system)
21904 (propagated-inputs
21905 (list python-requests-oauthlib python-six))
21906 (native-inputs
21907 (list python-mock python-pytest python-pytest-cov
21908 python-pytest-runner python-responses))
21909 (home-page "https://github.com/btongminh/mwclient")
21910 (synopsis "MediaWiki API client")
21911 (description "This package provides a MediaWiki API client.")
21912 (license license:expat)))
21913
21914(define-public python-kneed
21915 (package
21916 (name "python-kneed")
21917 (version "0.7.0")
21918 (source
21919 (origin
21920 (method url-fetch)
21921 (uri (pypi-uri "kneed" version))
21922 (sha256
21923 (base32 "0vkwi0pr7nfkp3c46hnmx0275yx68v96v10rmspv0wis33x6f39l"))))
21924 (build-system python-build-system)
21925 (propagated-inputs
21926 (list python-matplotlib python-numpy python-scipy))
21927 (home-page "https://github.com/arvkevi/kneed")
21928 (synopsis "Knee-point detection in Python")
21929 (description "This package implements the kneedle algorithm. Given a set
21930of x and y values, kneed will return the knee point of the function. The knee
21931point is the point of maximum curvature.")
21932 (license license:bsd-3)))
21933
21934(define-public python-utils
21935 (package
21936 (name "python-utils")
21937 (version "2.4.0")
21938 (source (origin
21939 (method url-fetch)
21940 (uri (pypi-uri "python-utils" version))
21941 (sha256
21942 (base32
21943 "12c0glzkm81ljgf6pwh0d4rmdm1r7vvgg3ifzp8yp9cfyngw07zj"))))
21944 (build-system python-build-system)
21945 (arguments
21946 `(#:phases
21947 (modify-phases %standard-phases
21948 (replace 'check
21949 (lambda* (#:key inputs outputs #:allow-other-keys)
21950 (add-installed-pythonpath inputs outputs)
21951 (delete-file "pytest.ini")
21952 (invoke "pytest" "-vv"))))))
21953 (native-inputs
21954 `(("pytest-runner" ,python-pytest-runner)
21955 ("pytest" ,python-pytest)
21956 ("six" ,python-six)))
21957 (home-page "https://github.com/WoLpH/python-utils")
21958 (synopsis "Convenient utilities not included with the standard Python install")
21959 (description
21960 "Python Utils is a collection of small Python functions and classes which
21961 make common patterns shorter and easier.")
21962 (license license:bsd-2)))
21963
21964(define-public python-diff-cover
21965 (package
21966 (name "python-diff-cover")
21967 (version "7.5.0")
21968 (source (origin
21969 (method url-fetch)
21970 (uri (pypi-uri "diff_cover" version))
21971 (sha256
21972 (base32
21973 "1z7bxnij2sqsiz9313nwcak7nshakpq4b6c05v13hkqyhd505cx4"))))
21974 (build-system pyproject-build-system)
21975 (arguments
21976 (list
21977 #:test-flags
21978 ;; missing fixture 'datadir'.
21979 '(list "--ignore=tests/test_clover_violations_reporter.py"
21980 ;; Difference in line breaks
21981 "-k" "not test_html_with_external_css")))
21982 (propagated-inputs
21983 (list python-chardet
21984 python-jinja2
21985 python-pluggy
21986 python-pygments
21987 python-tomli))
21988 (native-inputs
21989 (list python-flake8
21990 python-poetry-core
21991 python-pylint
21992 python-pytest
21993 python-pytest-flake8
21994 python-pytest-mock))
21995 (home-page "https://github.com/Bachmann1234/diff-cover")
21996 (synopsis "Run coverage and linting reports on diffs")
21997 (description "Automatically find diff lines that need test coverage. It
21998also finds diff lines that have violations (according to tools such as
21999pycodestyle, pyflakes, flake8, or pylint). This is used as a code quality
22000metric during code reviews.")
22001 (license license:asl2.0)))
22002
22003(define-public python-diff-match-patch
22004 (package
22005 (name "python-diff-match-patch")
22006 (version "20200713")
22007 (source
22008 (origin
22009 (method url-fetch)
22010 (uri (pypi-uri "diff-match-patch" version))
22011 (sha256
22012 (base32
22013 "063s8zcxz787xfg7d1wxpqh59fxg3iz85ww9zhyz4vaqm80mlvys"))))
22014 (build-system python-build-system)
22015 (arguments
22016 `(#:phases (modify-phases %standard-phases
22017 (replace 'check
22018 (lambda* (#:key tests? #:allow-other-keys)
22019 (when tests?
22020 (invoke "python" "-m" "unittest"
22021 "diff_match_patch.tests")))))))
22022 (home-page "https://github.com/diff-match-patch-python/diff-match-patch")
22023 (synopsis "Synchronize plain text")
22024 (description "Diff Match and Patch libraries offer robust algorithms to
22025 perform the operations required for synchronizing plain text.")
22026 (license license:asl2.0)))
22027
22028(define-public python-icdiff
22029 (package
22030 (name "python-icdiff")
22031 (version "2.0.5")
22032 (source (origin
22033 (method git-fetch)
22034 (uri (git-reference
22035 (url "https://github.com/jeffkaufman/icdiff")
22036 (commit (string-append "release-" version))))
22037 (file-name (git-file-name name version))
22038 (sha256
22039 (base32
22040 "14gr9j2h7sfw47pwfzspm4zinywhqmzm4a0qz5c2k9wbixz120a4"))))
22041 (build-system python-build-system)
22042 (home-page "https://www.jefftk.com/icdiff")
22043 (synopsis "Improved colored diff")
22044 (description "This package provides colored diff functions that highlight
22045parts of the lines that were modified.")
22046 (license license:psfl)))
22047
22048(define-public python-dirsync
22049 (package
22050 (name "python-dirsync")
22051 (version "2.2.5")
22052 (source
22053 (origin
22054 (method url-fetch)
22055 (uri (pypi-uri "dirsync" version))
22056 (sha256
22057 (base32
22058 "1gm82jddm1lkazdi8lfsl1b3vi1z0252ng60mzjym8irnv94qfhy"))))
22059 (build-system python-build-system)
22060 (propagated-inputs
22061 (list python-six))
22062 (home-page "https://github.com/tkhyn/dirsync")
22063 (synopsis "Advanced directory tree synchronisation tool")
22064 (description "Advanced directory tree synchronisation tool.")
22065 (license license:expat)))
22066
22067(define-public python-levenshtein
22068 (package
22069 (name "python-levenshtein")
22070 (version "0.12.2")
22071 (source
22072 (origin
22073 (method url-fetch)
22074 (uri (pypi-uri "python-Levenshtein" version))
22075 (sha256
22076 (base32
22077 "1xj60gymwx1jl2ra9razx2wk8nb9cv1i7l8d14qsp8a8s7xra8yw"))))
22078 (build-system python-build-system)
22079 (home-page "https://github.com/ztane/python-Levenshtein")
22080 (synopsis "Fast computation of Levenshtein distance and string similarity")
22081 (description
22082 "The Levenshtein Python C extension module contains functions for fast computation of
22083 @enumerate
22084 @item Levenshtein (edit) distance, and edit operations
22085 @item string similarity
22086 @item approximate median strings, and generally string averaging
22087 @item string sequence and set similarity
22088 @end enumerate
22089 It supports both normal and Unicode strings.")
22090 (license license:gpl2+)))
22091
22092(define-public python-scandir
22093 (package
22094 (name "python-scandir")
22095 (version "1.10.0")
22096 (source
22097 (origin
22098 (method url-fetch)
22099 (uri (pypi-uri "scandir" version))
22100 (sha256
22101 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
22102 (build-system python-build-system)
22103 (arguments
22104 `(#:phases (modify-phases %standard-phases
22105 (replace 'check
22106 (lambda _
22107 (invoke "python" "test/run_tests.py"))))))
22108 (home-page "https://github.com/benhoyt/scandir")
22109 (synopsis "Directory iteration function")
22110 (description
22111 "Directory iteration function like os.listdir(), except that instead of
22112 returning a list of bare filenames, it yields DirEntry objects that include
22113 file type and stat information along with the name. Using scandir() increases
22114 the speed of os.walk() by 2-20 times (depending on the platform and file
22115 system) by avoiding unnecessary calls to os.stat() in most cases.
22116
22117 This package is part of the Python standard library since version 3.5.")
22118 (license license:bsd-3)))
22119
22120(define-public python-factory-boy
22121 (package
22122 (name "python-factory-boy")
22123 (version "3.2.1")
22124 (source
22125 (origin
22126 (method url-fetch)
22127 (uri (pypi-uri "factory_boy" version))
22128 (sha256
22129 (base32 "0pm5lbvnwm0kg5i6z611rg907yw1gy551f2advmpaz041ixjg3d9"))))
22130 (build-system python-build-system)
22131 (arguments
22132 ;; Tests are not included in the tarball.
22133 `(#:tests? #f))
22134 (propagated-inputs (list python-faker))
22135 (home-page "https://github.com/benhoyt/scandir")
22136 (synopsis "Versatile test fixtures replacement")
22137 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
22138factory_girl. As a fixtures replacement tool, it aims to replace static, hard
22139to maintain fixtures with easy-to-use factories for complex object. Instead
22140of building an exhaustive test setup with every possible combination of corner
22141cases, factory_boy allows you to use objects customized for the current test,
22142while only declaring the test-specific fields.")
22143 (license license:expat)))
22144
22145(define-public python-translate-toolkit
22146 (package
22147 (name "python-translate-toolkit")
22148 (version "3.6.2")
22149 (source
22150 (origin
22151 (method url-fetch)
22152 (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
22153 (sha256
22154 (base32 "0m4cpsp7x7h5m5agg4ybscf7y86wla46q2lvxpi2myplb6qlgcli"))))
22155 (build-system python-build-system)
22156 (native-inputs
22157 (list python-pytest python-sphinx))
22158 (propagated-inputs
22159 (list python-babel
22160 python-beautifulsoup4
22161 python-chardet
22162 python-diff-match-patch
22163 python-levenshtein
22164 python-lxml
22165 python-six
22166 python-vobject
22167 python-pyyaml))
22168 (arguments
22169 ;; TODO: tests are not run, because they end with
22170 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
22171 ;; 'parse_funcs'
22172 ;; during test setup.
22173 (list #:tests? #f
22174 #:phases
22175 #~(modify-phases %standard-phases
22176 ;; translate-toolkit has many optional dependencies (see
22177 ;; optional.txt), which the sanity check does not understand.
22178 (delete 'sanity-check))))
22179 (home-page "https://toolkit.translatehouse.org")
22180 (synopsis "Tools and API for translation and localization engineering")
22181 (description
22182 "Tools and API for translation and localization engineering. It contains
22183 several utilities, as well as an API for building localization tools.")
22184 (license license:gpl2+)))
22185
22186(define-public python-gtts
22187 (package
22188 (name "python-gtts")
22189 (version "2.3.1")
22190 (source (origin
22191 (method url-fetch)
22192 (uri (pypi-uri "gTTS" version))
22193 (sha256
22194 (base32
22195 "1jsg1prpzr7gj5sn385mkv2v1i8xfc83ycm87hvsi2j0y366plps"))))
22196 (build-system pyproject-build-system)
22197 (arguments
22198 ;; Disable tests that require internet.
22199 (list #:test-flags '(list "-k" "not net")))
22200 (native-inputs
22201 (list python-pytest python-testfixtures python-click python-requests))
22202 (home-page "https://github.com/pndurette/gTTS")
22203 (synopsis "Google Translate text-to-speech interface")
22204 (description
22205 "Google Text-to-Speech (gTTS) is a Python library and CLI tool to
22206interface with the Google Translate text-to-speech API. It lets you write
22207spoken MP3 data to a file, a file-like object (bytestring) for further audio
22208manipulation, or @code{stdout}.")
22209 (license license:expat)))
22210
22211(define-public python-packaging
22212 (package/inherit python-packaging-bootstrap
22213 (name "python-packaging")
22214 (arguments
22215 `(#:phases (modify-phases %standard-phases
22216 (replace 'check
22217 (lambda* (#:key tests? #:allow-other-keys)
22218 (if tests?
22219 (invoke "pytest" "-vv")
22220 (format #t "test suite not run~%")))))))
22221 (native-inputs (list python-pretend python-pytest))
22222 (propagated-inputs (list python-pyparsing python-six))
22223 (home-page "https://github.com/pypa/packaging")
22224 (synopsis "Core utilities for Python packages")
22225 (description "Packaging is a Python module for dealing with Python packages.
22226 It offers an interface for working with package versions, names, and dependency
22227 information.")
22228 ;; From 'LICENSE': This software is made available under the terms of
22229 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
22230 ;; Contributions to this software is made under the terms of *both* these
22231 ;; licenses.
22232 (license (list license:asl2.0 license:bsd-2))))
22233
22234(define-public python-relatorio
22235 (package
22236 (name "python-relatorio")
22237 (version "0.10.0")
22238 (source
22239 (origin
22240 (method url-fetch)
22241 (uri (pypi-uri "relatorio" version))
22242 (sha256
22243 (base32
22244 "09nhrz80dfm60nssbvjgz4czzy4yzfa8gxczcdlzbgcnnvm914vb"))))
22245 (build-system python-build-system)
22246 (propagated-inputs
22247 (list python-lxml python-genshi))
22248 (native-inputs
22249 (list python-magic))
22250 (home-page "https://relatorio.tryton.org/")
22251 (synopsis "Templating library able to output ODT and PDF files")
22252 (description "Relatorio is a templating library which provides a way to
22253 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
22254 for more filetypes can be easily added by creating plugins for them.")
22255 (license license:gpl3+)))
22256
22257(define-public python-radon
22258 (package
22259 (name "python-radon")
22260 (version "5.1.0")
22261 (source
22262 (origin
22263 (method url-fetch)
22264 (uri (pypi-uri "radon" version))
22265 (sha256
22266 (base32
22267 "1vmf56zsf3paa1jadjcjghiv2kxwiismyayq42ggnqpqwm98f7fb"))))
22268 (build-system python-build-system)
22269 (arguments
22270 `(#:phases (modify-phases %standard-phases
22271 (add-after 'unpack 'relax-requirements
22272 (lambda _
22273 (substitute* "setup.py"
22274 ((".*'future'.*")
22275 "")
22276 (("mando>=0\\.6,<0\\.7")
22277 "mando>=0.6")
22278 (("colorama==0.4.1")
22279 "colorama>=0.4.1"))))
22280 (replace 'check
22281 (lambda _
22282 (invoke "python" "radon/tests/run.py"))))))
22283 (propagated-inputs (list python-colorama python-mando))
22284 (native-inputs (list python-pytest python-pytest-mock))
22285 (home-page "https://radon.readthedocs.org/")
22286 (synopsis "Code Metrics in Python")
22287 (description "Radon is a Python tool which computes various code metrics.
22288 Supported metrics are:
22289 @itemize @bullet
22290 @item raw metrics: SLOC, comment lines, blank lines, &c.
22291 @item Cyclomatic Complexity (i.e., McCabe’s Complexity)
22292 @item Halstead metrics (all of them)
22293 @item the Maintainability Index (a Visual Studio metric)
22294 @end itemize")
22295 (license license:expat)))
22296
22297(define-public python-sure
22298 (package
22299 (name "python-sure")
22300 (version "2.0.1")
22301 (source
22302 (origin
22303 (method url-fetch)
22304 (uri (pypi-uri "sure" version))
22305 (sha256
22306 (base32
22307 "1jmrskj399idw1czx6dvy2zfaijnwi02b55vx979ixp7q2mnzz68"))))
22308 (build-system python-build-system)
22309 (propagated-inputs
22310 (list python-mock python-six))
22311 (native-inputs
22312 (list python-nose python-rednose))
22313 (home-page "https://github.com/gabrielfalcao/sure")
22314 (synopsis "Automated testing library in python for python")
22315 (description
22316 "Sure is a python library that leverages a DSL for writing assertions.
22317 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
22318 (license license:gpl3+)))
22319
22320(define-public python-misaka
22321 (package
22322 (name "python-misaka")
22323 (version "2.1.1")
22324 (source
22325 (origin
22326 (method url-fetch)
22327 (uri (pypi-uri "misaka" version))
22328 (sha256
22329 (base32
22330 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
22331 (build-system python-build-system)
22332 (arguments
22333 `(;; Line 37 of setup.py calls self.run_command('develop')
22334 ;; in the 'check' phase. This command seems to be trying
22335 ;; to write to
22336 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
22337 ;; for which it does not have the permission to write.
22338 #:tests? #f))
22339 (propagated-inputs
22340 (list python-cffi))
22341 (home-page "https://github.com/FSX/misaka")
22342 (synopsis "Python binding for Hoedown")
22343 (description
22344 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
22345 library written in C. It features a fast HTML renderer and functionality to make custom
22346 renderers (e.g. man pages or LaTeX).")
22347 (license license:expat)))
22348
22349(define-public python-jsonpointer
22350 (package
22351 (name "python-jsonpointer")
22352 (version "1.10")
22353 (source
22354 (origin
22355 (method url-fetch)
22356 (uri (pypi-uri "jsonpointer" version))
22357 (sha256
22358 (base32
22359 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
22360 (build-system python-build-system)
22361 (home-page "https://github.com/stefankoegl/python-json-pointer")
22362 (synopsis "Identify specific nodes in a JSON document")
22363 (description "@code{jsonpointer} allows you to access specific nodes
22364 by path in a JSON document (see RFC 6901).")
22365 (license license:bsd-3)))
22366
22367(define-public python-jsonpatch
22368 (package
22369 (name "python-jsonpatch")
22370 (version "1.16")
22371 (source
22372 (origin
22373 (method git-fetch)
22374 ;; pypi version lacks tests.js
22375 (uri (git-reference
22376 (url "https://github.com/stefankoegl/python-json-patch")
22377 (commit (string-append "v" version))))
22378 (file-name (git-file-name name version))
22379 (sha256
22380 (base32
22381 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
22382 (build-system python-build-system)
22383 (propagated-inputs
22384 (list python-jsonpointer))
22385 (home-page "https://github.com/stefankoegl/python-json-patch")
22386 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
22387 (description "@code{jsonpatch} is a library and program that allows
22388 applying JSON Patches according to RFC 6902.")
22389 (license license:bsd-3)))
22390
22391(define-public python-jsonpatch-0.4
22392 (package (inherit python-jsonpatch)
22393 (name "python-jsonpatch")
22394 (version "0.4")
22395 (source
22396 (origin
22397 (method git-fetch)
22398 (uri (git-reference
22399 (url "https://github.com/stefankoegl/python-json-patch")
22400 (commit (string-append "v" version))))
22401 (file-name (git-file-name name version))
22402 (sha256
22403 (base32
22404 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
22405
22406(define-public python-rfc3986
22407 (package
22408 (name "python-rfc3986")
22409 (version "1.4.0")
22410 (source (origin
22411 (method url-fetch)
22412 (uri (pypi-uri "rfc3986" version))
22413 (sha256
22414 (base32
22415 "17dvx15m3r49bmif5zlli8kzjd6bys6psixzbp14sd5367d9h8qi"))))
22416 (build-system python-build-system)
22417 (arguments
22418 `(#:phases
22419 (modify-phases %standard-phases
22420 (replace 'check
22421 (lambda _
22422 (invoke "pytest" "-v"))))))
22423 (native-inputs
22424 (list python-pytest))
22425 (home-page "https://rfc3986.readthedocs.io/")
22426 (synopsis "Parse and validate URI references")
22427 (description
22428 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
22429 validation and authority parsing. This module also supports RFC@tie{}6874
22430 which adds support for zone identifiers to IPv6 addresses.")
22431 (license license:asl2.0)))
22432
22433(define-public python-rfc3987
22434 (package
22435 (name "python-rfc3987")
22436 (version "1.3.7")
22437 (source
22438 (origin
22439 (method url-fetch)
22440 (uri (pypi-uri "rfc3987" version))
22441 (sha256
22442 (base32
22443 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
22444 (build-system python-build-system)
22445 (home-page "https://pypi.org/project/rfc3987/")
22446 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
22447 (description "@code{rfc3987} provides routines for parsing and
22448 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
22449 (license license:gpl3+)))
22450
22451;; The latest commit contains fixes for building with both python3 and python2.
22452(define-public python-rfc6555
22453 (let ((commit "1a181b432312731f6742a5eb558dae4761d32361")
22454 (revision "1"))
22455 (package
22456 (name "python-rfc6555")
22457 (version (git-version "0.0.0" revision commit))
22458 (source (origin
22459 (method git-fetch)
22460 (uri (git-reference
22461 (url "https://github.com/sethmlarson/rfc6555")
22462 (commit commit)))
22463 (file-name (git-file-name name version))
22464 (sha256
22465 (base32
22466 "1bxl17j9vs69cshcqnlwamr03hnykxqnwz3mdgi6x3s2k4q18npp"))))
22467 (build-system python-build-system)
22468 (arguments
22469 '(#:phases
22470 (modify-phases %standard-phases
22471 (replace 'check
22472 (lambda* (#:key tests? #:allow-other-keys)
22473 (if tests?
22474 ;; Other tests require network access.
22475 (invoke "pytest" "tests/test_ipv6.py")
22476 #t))))))
22477 (native-inputs
22478 (list python-pytest))
22479 (home-page "https://pypi.org/project/rfc6555/")
22480 (synopsis "Python implementation of RFC 6555")
22481 (description
22482 "Python implementation of the Happy Eyeballs Algorithm described in RFC
22483 6555. Provided with a single file and dead-simple API to allow easy vendoring
22484 and integration into other projects.")
22485 (license license:asl2.0))))
22486
22487(define-public python-bagit
22488 (package
22489 (name "python-bagit")
22490 (version "1.7.0")
22491 (source
22492 (origin
22493 (method url-fetch)
22494 (uri (pypi-uri "bagit" version))
22495 (sha256
22496 (base32
22497 "1m6y04qmig0b5hzb35lnaw3d2yfydb7alyr1579yblvgs3da6j7j"))))
22498 (build-system python-build-system)
22499 (native-inputs
22500 (list python-setuptools-scm python-coverage python-mock))
22501 (home-page "https://libraryofcongress.github.io/bagit-python/")
22502 (synopsis "Create and validate BagIt packages")
22503 (description "Bagit is a Python library and command line utility for working
22504 with BagIt style packages. BagIt is a minimalist packaging format for digital
22505 preservation.")
22506 (license license:cc0)))
22507
22508(define-public python-prov
22509 (package
22510 (name "python-prov")
22511 (version "2.0.0")
22512 (source
22513 (origin
22514 (method url-fetch)
22515 (uri (pypi-uri "prov" version))
22516 (sha256
22517 (base32
22518 "1vi2fj31vygfcqrkimdmk52q2ldw08g9fn4v4zlgdfgcjlhqyhxn"))))
22519 (build-system python-build-system)
22520 (propagated-inputs
22521 (list python-dateutil python-lxml python-networkx python-rdflib-5))
22522 (native-inputs
22523 (list graphviz python-pydot))
22524 (home-page "https://github.com/trungdong/prov")
22525 (synopsis
22526 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
22527 (description
22528 "This package provides a library for W3C Provenance Data Model supporting
22529 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
22530 (license license:expat)))
22531
22532(define-public python-arcp
22533 (package
22534 (name "python-arcp")
22535 (version "0.2.1")
22536 (source
22537 (origin
22538 (method url-fetch)
22539 (uri (pypi-uri "arcp" version))
22540 (sha256
22541 (base32
22542 "1p8mfyjssa6pbn5dp6pyzv9yy6kwm2rz5jn2kjbq5vy9f9wsq5sw"))))
22543 (build-system python-build-system)
22544 (native-inputs
22545 (list python-pytest))
22546 (home-page "https://arcp.readthedocs.io/")
22547 (synopsis
22548 "Archive and Package URI parser and generator")
22549 (description
22550 "@acronym{arcp, Archive and Package} provides functions for creating
22551 @code{arcp_} URIs, which can be used for identifying or parsing hypermedia files
22552 packaged in an archive or package, like a ZIP file. arcp URIs can be used to
22553 consume or reference hypermedia resources bundled inside a file archive or an
22554 application package, as well as to resolve URIs for archive resources within a
22555 programmatic framework. This URI scheme provides mechanisms to generate a
22556 unique base URI to represent the root of the archive, so that relative URI
22557 references in a bundled resource can be resolved within the archive without
22558 having to extract the archive content on the local file system. An arcp URI can
22559 be used for purposes of isolation (e.g. when consuming multiple archives),
22560 security constraints (avoiding \"climb out\" from the archive), or for
22561 externally identiyfing sub-resources referenced by hypermedia formats.")
22562 (license license:asl2.0)))
22563
22564(define-public python-shellescape
22565 (package
22566 (name "python-shellescape")
22567 (version "3.8.1")
22568 (source
22569 (origin
22570 (method git-fetch)
22571 (uri (git-reference
22572 (url "https://github.com/chrissimpkins/shellescape")
22573 (commit (string-append "v" version))))
22574 (file-name (git-file-name name version))
22575 (sha256
22576 (base32
22577 "0wzccxk139qx1lb2g70f5b2yh9zq15nr2mgvqdbfabg5zm0vf1qw"))))
22578 (build-system python-build-system)
22579 (arguments
22580 '(#:phases
22581 (modify-phases %standard-phases
22582 (replace 'check
22583 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
22584 (when tests?
22585 (add-installed-pythonpath inputs outputs)
22586 (invoke "python" "tests/test_shellescape.py"))
22587 #t)))))
22588 (native-inputs
22589 (list python-pytest))
22590 (home-page "https://github.com/chrissimpkins/shellescape")
22591 (synopsis
22592 "Shell escape a string to safely use it as a token in a shell command")
22593 (description
22594 "The shellescape Python module defines the @code{shellescape.quote()}
22595 function that returns a shell-escaped version of a Python string. This is a
22596 backport of the @code{shlex.quote()} function from Python 3.8 that makes it
22597 accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
22598 (license license:expat)))
22599
22600(define-public python-validators
22601 (package
22602 (name "python-validators")
22603 (version "0.18.2")
22604 (source (origin
22605 (method url-fetch)
22606 (uri (pypi-uri "validators" version))
22607 (sha256
22608 (base32
22609 "19lypf7hm7p203ay3v8zmckc5rv6889zkfdm16nki1972f99mk9p"))))
22610 (build-system python-build-system)
22611 (arguments
22612 '(#:phases (modify-phases %standard-phases
22613 (replace 'check
22614 (lambda _
22615 (invoke "pytest" "-vv"))))))
22616 (propagated-inputs
22617 (list python-decorator python-six))
22618 (native-inputs
22619 (list python-flake8 python-isort python-pytest))
22620 (home-page "https://github.com/kvesteri/validators")
22621 (synopsis "Data validation library")
22622 (description
22623 "This package contains validators for different things such as email
22624 addresses, IP addresses, URLs, hashes and more. It has been designed to
22625 be easy to use and not require defining a schema or form just to validate
22626 some input.")
22627 (license license:expat)))
22628
22629(define-public python-validate-email
22630 (package
22631 (name "python-validate-email")
22632 (version "1.3")
22633 (source
22634 (origin
22635 (method url-fetch)
22636 (uri (pypi-uri "validate_email" version))
22637 (sha256
22638 (base32
22639 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
22640 (build-system python-build-system)
22641 (home-page "https://github.com/syrusakbary/validate_email")
22642 (synopsis "Verifies if an email address is valid and really exists")
22643 (description "@code{validate_email} can be used to verify if an email
22644 address is valid and really exists.")
22645 (license license:lgpl3+)))
22646
22647(define-public python-flex
22648 (package
22649 (name "python-flex")
22650 (version "6.10.0")
22651 (source
22652 (origin
22653 (method url-fetch)
22654 (uri (pypi-uri "flex" version))
22655 (sha256
22656 (base32
22657 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
22658 (build-system python-build-system)
22659 (propagated-inputs
22660 (list python-click
22661 python-iso8601
22662 python-jsonpointer
22663 python-pyyaml
22664 python-requests
22665 python-rfc3987
22666 python-six
22667 python-validate-email))
22668 (home-page "https://github.com/pipermerriam/flex")
22669 (synopsis "Validates Swagger schemata")
22670 (description "@code{flex} can be used to validate Swagger schemata.")
22671 (license license:bsd-3)))
22672
22673(define-public python-marshmallow
22674 (package
22675 (name "python-marshmallow")
22676 (version "3.19.0")
22677 (source
22678 (origin
22679 (method url-fetch)
22680 (uri (pypi-uri "marshmallow" version))
22681 (sha256
22682 (base32
22683 "0y6vpq2p5841kcw2qil68la0rx9z1vmxzj3dxjv99kjhsq7jq0wh"))))
22684 (build-system pyproject-build-system)
22685 (propagated-inputs
22686 (list python-packaging))
22687 (native-inputs
22688 (list python-flake8
22689 python-flake8-bugbear
22690 python-mypy
22691 python-pytest
22692 python-pytz
22693 python-simplejson))
22694 (home-page "https://github.com/marshmallow-code/marshmallow")
22695 (synopsis "Convert complex datatypes to and from native Python datatypes")
22696 (description "@code{marshmallow} provides a library for converting complex
22697datatypes to and from native Python datatypes.")
22698 (license license:expat)))
22699
22700(define-public python-marshmallow-jsonapi
22701 (package
22702 (name "python-marshmallow-jsonapi")
22703 (version "0.24.0")
22704 (source
22705 (origin
22706 (method url-fetch)
22707 (uri (pypi-uri "marshmallow-jsonapi" version))
22708 (sha256
22709 (base32 "1d9pxcgmln4gls99vwj1h24qv0lz7fb2jqmqrsiv1pid1snc125x"))))
22710 (build-system python-build-system)
22711 (propagated-inputs
22712 (list python-marshmallow))
22713 (native-inputs
22714 (list python-faker
22715 python-flake8
22716 python-flake8-bugbear
22717 python-flask
22718 python-mock
22719 python-pytest
22720 python-tox))
22721 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
22722 (synopsis "JSON:API 1.0 formatting with Marshmallow")
22723 (description
22724 "The marshmallow-jsonapi package provides a simple way to produce
22725 @uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web framework.
22726 It includes optional utilities to integrate with Flask.")
22727 (license license:expat)))
22728
22729(define-public python-apispec
22730 (package
22731 (name "python-apispec")
22732 (version "6.0.2")
22733 (source
22734 (origin
22735 (method url-fetch)
22736 (uri (pypi-uri "apispec" version))
22737 (sha256
22738 (base32
22739 "11vqxwdxmm7qmyhdbxk4gnx37nbzmn266ah92gi4pvzd76vq0vg7"))))
22740 (build-system pyproject-build-system)
22741 (arguments
22742 (list
22743 ;; Disable validation tests since they require
22744 ;; the optional 'prance' library which is not
22745 ;; yet in Guix.
22746 #:test-flags '(list "-k" "not openapi_tools_validate")))
22747 (propagated-inputs
22748 (list python-packaging))
22749 (native-inputs
22750 (list python-flake8
22751 python-flake8-bugbear
22752 python-marshmallow
22753 python-mypy
22754 python-pytest
22755 python-pyyaml))
22756 (home-page "https://github.com/marshmallow-code/apispec")
22757 (synopsis "Swagger/OpenAPI specification generator")
22758 (description "@code{python-apispec} is a pluggable API specification
22759generator. It currently supports the OpenAPI specification, formerly known as
22760Swagger.")
22761 (license license:expat)))
22762
22763(define-public python-apispec-webframeworks
22764 (package
22765 (name "python-apispec-webframeworks")
22766 (version "0.5.2")
22767 (source (origin
22768 (method url-fetch)
22769 (uri (pypi-uri "apispec-webframeworks" version))
22770 (sha256
22771 (base32
22772 "1wyw30402xq2a8icrsjmy9v43jyvawcjd85ccb2zicqlg4k5pcqd"))))
22773 (build-system pyproject-build-system)
22774 (propagated-inputs (list python-apispec))
22775 (native-inputs
22776 (list python-bottle
22777 python-flake8
22778 python-flake8-bugbear
22779 python-flask
22780 python-mock
22781 python-pytest
22782 python-pyyaml
22783 python-tornado
22784 python-tox))
22785 (home-page "https://github.com/marshmallow-code/apispec-webframeworks")
22786 (synopsis "Web framework plugins for apispec")
22787 (description "This package provides plugins for using @code{apispec} with
22788web frameworks.")
22789 (license license:expat)))
22790
22791(define-public python-flasgger
22792 (package
22793 (name "python-flasgger")
22794 (version "0.9.5")
22795 (source
22796 (origin
22797 (method git-fetch)
22798 (uri (git-reference
22799 (url "https://github.com/rochacbruno/flasgger")
22800 (commit version)))
22801 (file-name (git-file-name name version))
22802 (sha256
22803 (base32 "0a2djgfq905a4in16068qz0ikg88dm4nbckaamhaz2v9khllr0bi"))))
22804 (build-system pyproject-build-system)
22805 (arguments
22806 (list
22807 ;; This test fails due to missing fixtures
22808 #:test-flags '(list "-k" "not test_swag")
22809 #:phases
22810 '(modify-phases %standard-phases
22811 (add-after 'unpack 'prepare-check
22812 (lambda _
22813 ;; This requires a dummy package "flasgger_package" to be installed.
22814 (delete-file "examples/package_example.py")
22815 ;; These fail with an internal server error
22816 (for-each delete-file '("examples/marshmallow_apispec.py"
22817 "examples/validation.py")))))))
22818 (propagated-inputs
22819 (list python-flask python-pyyaml python-jsonschema python-mistune
22820 python-six))
22821 (native-inputs
22822 (list python-apispec
22823 python-apispec-webframeworks
22824 python-decorator
22825 python-flake8
22826 python-flask-jwt
22827 python-flask-restful
22828 python-flex
22829 python-marshmallow
22830 python-pytest
22831 python-pytest-cov))
22832 (home-page "https://github.com/rochacbruno/flasgger/")
22833 (synopsis "Extract Swagger specs from your Flask project")
22834 (description "@code{python-flasgger} allows extracting Swagger specs
22835 from your Flask project. It is a fork of Flask-Swagger.")
22836 (license license:expat)))
22837
22838(define-public python-swagger-spec-validator
22839 (package
22840 (name "python-swagger-spec-validator")
22841 (version "2.4.3")
22842 (source
22843 (origin
22844 (method url-fetch)
22845 (uri (pypi-uri "swagger-spec-validator" version))
22846 (sha256
22847 (base32
22848 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
22849 (build-system python-build-system)
22850 (propagated-inputs
22851 (list python-jsonschema python-pyyaml python-six))
22852 (home-page
22853 "https://github.com/Yelp/swagger_spec_validator")
22854 (synopsis "Validation of Swagger specifications")
22855 (description "@code{swagger_spec_validator} provides a library for
22856 validating Swagger API specifications.")
22857 (license license:asl2.0)))
22858
22859(define-public python-apache-libcloud
22860 (package
22861 (name "python-apache-libcloud")
22862 (version "3.1.0")
22863 (source
22864 (origin
22865 (method url-fetch)
22866 (uri (pypi-uri "apache-libcloud" version))
22867 (sha256
22868 (base32
22869 "1b28j265kvibgxrgxx0gwfm6cmv252c8ph1j2vb0cpms8ph5if5v"))))
22870 (build-system python-build-system)
22871 (arguments
22872 '(#:phases
22873 (modify-phases %standard-phases
22874 (add-after 'unpack 'patch-ssh
22875 (lambda* (#:key inputs #:allow-other-keys)
22876 (substitute* "libcloud/compute/ssh.py"
22877 (("'ssh'")
22878 (string-append "'" (search-input-file inputs "/bin/ssh")
22879 "'")))))
22880 (add-after 'unpack 'patch-tests
22881 (lambda _
22882 (substitute* "libcloud/test/compute/test_ssh_client.py"
22883 (("^class ShellOutSSHClientTests")
22884 "@unittest.skip(\"Guix container doesn't have ssh service\")
22885class ShellOutSSHClientTests"))))
22886 (add-before 'check 'copy-secret
22887 (lambda _
22888 (copy-file "libcloud/test/secrets.py-dist"
22889 "libcloud/test/secrets.py"))))))
22890 (inputs
22891 (list openssh))
22892 (propagated-inputs
22893 (list python-paramiko python-requests))
22894 (native-inputs
22895 (list python-lockfile python-mock python-pytest python-pytest-runner
22896 python-requests-mock))
22897 (home-page "https://libcloud.apache.org/")
22898 (synopsis "Unified Cloud API")
22899 (description "@code{libcloud} is a Python library for interacting with
22900 many of the popular cloud service providers using a unified API.")
22901 (license license:asl2.0)))
22902
22903(define-public python-smmap
22904 (package
22905 (name "python-smmap")
22906 (version "3.0.1")
22907 (source
22908 (origin
22909 (method url-fetch)
22910 (uri (pypi-uri "smmap" version))
22911 (sha256
22912 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
22913 (build-system python-build-system)
22914 (native-inputs
22915 (list python-nosexcover))
22916 (home-page "https://github.com/Byron/smmap")
22917 (synopsis "Python sliding window memory map manager")
22918 (description "@code{smmap} is a pure Python implementation of a sliding
22919 window memory map manager.")
22920 (license license:bsd-3)))
22921
22922(define-public python-regex
22923 (package
22924 (name "python-regex")
22925 (version "2022.1.18")
22926 (source (origin
22927 (method url-fetch)
22928 (uri (pypi-uri "regex" version))
22929 (sha256
22930 (base32
22931 "05ir92d0cmv8wkafn3r05j5q47l6shg7cpdblp2a8m407b02vwwp"))))
22932 (build-system python-build-system)
22933 (arguments
22934 '(#:phases
22935 (modify-phases %standard-phases
22936 (replace 'check
22937 (lambda* (#:key inputs outputs #:allow-other-keys)
22938 (add-installed-pythonpath inputs outputs)
22939 (invoke "python" "-c"
22940 "from regex.test_regex import test_main ; test_main()"))))))
22941 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
22942 (synopsis "Alternative regular expression module")
22943 (description "This regular expression implementation is backwards-
22944compatible with the standard @code{re} module, but offers additional
22945functionality like full case-folding for case-insensitive matches in Unicode.")
22946 (license license:psfl)))
22947
22948(define-public python-pyopengl
22949 (package
22950 (name "python-pyopengl")
22951 (version "3.1.6")
22952 (source
22953 (origin
22954 (method url-fetch)
22955 (uri (pypi-uri "PyOpenGL" version))
22956 (sha256
22957 (base32
22958 "09syrsfrcknr1k2wmj05gfd5d0dyjfxzbipzbd0agv9775vwi9lf"))))
22959 (build-system python-build-system)
22960 (inputs
22961 (list mesa freeglut glu))
22962 (arguments
22963 `(#:tests? #f ; Tests fail: AttributeError: 'GLXPlatform' object has no
22964 ;attribute 'OSMesa'
22965 #:phases
22966 (modify-phases %standard-phases
22967 (add-before 'build 'fix-paths
22968 (lambda* (#:key inputs outputs #:allow-other-keys)
22969 (substitute* '("OpenGL/platform/ctypesloader.py")
22970 (("filenames_to_try = \\[\\]") "filenames_to_try = [name]"))
22971 (substitute* '("OpenGL/platform/glx.py" "tests/check_glut_load.py")
22972 (("'GL'")
22973 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGL.so'"))
22974 (("'GLU'")
22975 (string-append "'" (assoc-ref inputs "glu") "/lib/libGLU.so'"))
22976 (("'glut',")
22977 (string-append "'" (assoc-ref inputs "freeglut") "/lib/libglut.so',"))
22978 (("'GLESv1_CM'")
22979 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv1_CM.so'"))
22980 (("'GLESv2'")
22981 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv2.so'")))
22982 ;; Not providing libgle. It seems to be very old.
22983 #t)))))
22984 (home-page "https://pyopengl.sourceforge.net")
22985 (synopsis "Standard OpenGL bindings for Python")
22986 (description
22987 "PyOpenGL is the most common cross platform Python binding to OpenGL and
22988related APIs. The binding is created using the standard @code{ctypes}
22989library.")
22990 (license license:bsd-3)))
22991
22992(define-public python-pyopengl-accelerate
22993 (package
22994 (inherit python-pyopengl)
22995 (name "python-pyopengl-accelerate")
22996 (version "3.1.6")
22997 (source
22998 (origin
22999 (method url-fetch)
23000 (uri (pypi-uri "PyOpenGL-accelerate" version))
23001 (sha256
23002 (base32
23003 "1hydrpdn4p4z6mlczcg1y4s0z8si3rs6zq8x4ql558pcaq1312md"))))
23004 (inputs
23005 (list mesa python-numpy)) ; for cython module
23006 ; numpy_formathandler, thus not propagated
23007 (arguments
23008 `(#:tests? #f
23009 #:phases
23010 (modify-phases %standard-phases
23011 (delete 'fix-paths))))
23012 (synopsis "Acceleration code for PyOpenGL")
23013 (description
23014 "This is the Cython-coded accelerator module for PyOpenGL.")))
23015
23016(define-public python-glcontext
23017 (package
23018 (name "python-glcontext")
23019 (version "2.4.0")
23020 (source (origin
23021 (method git-fetch)
23022 (uri (git-reference
23023 (url "https://github.com/moderngl/glcontext")
23024 (commit version)))
23025 (file-name (git-file-name name version))
23026 (sha256
23027 (base32
23028 "0zzpwyqg19y600n09xz07cxk4jimh9vjraszda7g7ipijq6iasac"))))
23029 (build-system pyproject-build-system)
23030 (arguments
23031 (list #:phases #~(modify-phases %standard-phases
23032 (add-before 'build 'fix-lib-paths
23033 (lambda* (#:key inputs outputs #:allow-other-keys)
23034 (let ((mesa (assoc-ref inputs "mesa"))
23035 (libx11 (assoc-ref inputs "libx11")))
23036 (substitute* '("glcontext/x11.cpp"
23037 "glcontext/egl.cpp")
23038 (("\"libGL.so\"")
23039 (string-append "\"" mesa "/lib/libGL.so\""))
23040 (("\"libEGL.so\"")
23041 (string-append "\"" mesa "/lib/libEGL.so\""))
23042 (("\"libX11.so\"")
23043 (string-append "\"" libx11 "/lib/libX11.so\"")))
23044 (substitute* '("glcontext/__init__.py")
23045 (("find_library\\('GL'\\)")
23046 (string-append "'" mesa "/lib/libGL.so'"))
23047 (("find_library\\('EGL'\\)")
23048 (string-append "'" mesa "/lib/libEGL.so'"))
23049 (("find_library\\(\"X11\"\\)")
23050 (string-append "'" libx11 "/lib/libX11.so'"))))))
23051 (replace 'check
23052 (lambda* (#:key inputs outputs tests?
23053 #:allow-other-keys)
23054 (when tests?
23055 (system "Xvfb :1 &")
23056 (setenv "DISPLAY" ":1")
23057 (add-installed-pythonpath inputs outputs)
23058 (invoke "pytest" "tests")))))))
23059 (inputs (list libx11 mesa))
23060 (native-inputs (list xorg-server-for-tests python-pytest python-psutil))
23061 (home-page "https://github.com/moderngl/glcontext")
23062 (synopsis "Portable OpenGL Context for ModernGL")
23063 (description "Python-glcontext is a library providing an OpenGL
23064implementation for ModernGL on multiple platforms.")
23065 (license license:expat)))
23066
23067(define-public python-rencode
23068 (package
23069 (name "python-rencode")
23070 (version "1.0.5")
23071 (source
23072 (origin
23073 (method url-fetch)
23074 (uri (pypi-uri "rencode" version))
23075 (sha256
23076 (base32
23077 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
23078 (build-system python-build-system)
23079 (arguments
23080 `(#:phases
23081 (modify-phases %standard-phases
23082 (add-before 'check 'delete-bogus-test
23083 ;; This test requires /home/aresch/Downloads, which is not provided by
23084 ;; the build environment.
23085 (lambda _
23086 (delete-file "rencode/t.py")
23087 #t)))))
23088 (native-inputs (list pkg-config python-cython))
23089 (home-page "https://github.com/aresch/rencode")
23090 (synopsis "Serialization of heterogeneous data structures")
23091 (description
23092 "The @code{rencode} module is a data structure serialization library,
23093similar to @code{bencode} from the BitTorrent project. For complex,
23094heterogeneous data structures with many small elements, r-encoding stake up
23095significantly less space than b-encodings. This version of rencode is a
23096complete rewrite in Cython to attempt to increase the performance over the
23097pure Python module.")
23098 (license license:bsd-3)))
23099
23100(define-public python-pysocks
23101 (package
23102 (name "python-pysocks")
23103 (version "1.7.1")
23104 (source
23105 (origin
23106 (method url-fetch)
23107 (uri (pypi-uri "PySocks" version))
23108 (sha256
23109 (base32
23110 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
23111 (build-system python-build-system)
23112 (arguments `(#:tests? #f))
23113 (home-page "https://github.com/Anorov/PySocks")
23114 (synopsis "SOCKS client module")
23115 (description "@code{pysocks} is an updated and semi-actively maintained
23116version of @code{SocksiPy} with bug fixes and extra features.")
23117 (license license:bsd-3)))
23118
23119(define-public python-pydiff
23120 (package
23121 (name "python-pydiff")
23122 (version "0.2")
23123 (source
23124 (origin
23125 (method url-fetch)
23126 (uri (pypi-uri "pydiff" version))
23127 (sha256
23128 (base32
23129 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
23130 (build-system python-build-system)
23131 (home-page "https://github.com/myint/pydiff")
23132 (synopsis "Library to diff two Python files at the bytecode level")
23133 (description
23134 "@code{pydiff} makes it easy to look for actual code changes while
23135ignoring formatting changes.")
23136 (license license:expat)))
23137
23138(define-public python-pydub
23139 (package
23140 (name "python-pydub")
23141 (version "0.25.1")
23142 (source
23143 (origin
23144 (method url-fetch)
23145 (uri (pypi-uri "pydub" version))
23146 (sha256
23147 (base32
23148 "03ykn2kp6qglsrzqi5h79z5cp3kl9mknasv0d6jv5jj9k77362lq"))))
23149 (build-system python-build-system)
23150 (arguments
23151 `(#:phases
23152 (modify-phases %standard-phases
23153 (add-after 'unpack 'fix-ffmpeg-path
23154 (lambda* (#:key inputs #:allow-other-keys)
23155 (let ((ffmpeg (assoc-ref inputs "ffmpeg")))
23156 (substitute* '("pydub/utils.py")
23157 (("return \"ffmpeg\"")
23158 (string-append "return \"" ffmpeg "/bin/ffmpeg\""))
23159 (("return \"ffplay\"")
23160 (string-append "return \"" ffmpeg "/bin/ffplay\""))
23161 (("return \"ffprobe\"")
23162 (string-append "return \"" ffmpeg "/bin/ffprobe\""))
23163 (("warn\\(\"Couldn't find ff") "# warn\\(\"Couldn't find ff"))
23164 #t))))))
23165 (home-page "https://pydub.com")
23166 (inputs
23167 (list ffmpeg))
23168 (propagated-inputs
23169 (list python-scipy))
23170 (synopsis "Manipulate audio with a high level interface in Python")
23171 (description
23172 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
23173@code{ffmpeg} to open various audio formats.")
23174 (license license:expat))) ; MIT license
23175
23176(define-public python-tqdm
23177 (package
23178 (name "python-tqdm")
23179 (version "4.64.1")
23180 (source
23181 (origin
23182 (method url-fetch)
23183 (uri (pypi-uri "tqdm" version))
23184 (sha256
23185 (base32
23186 "1r7i9kswpnrx4ppfvzz6discb04j1rqkqxdwa2sc2la900m6hksz"))))
23187 (build-system python-build-system)
23188 (arguments
23189 '(#:phases (modify-phases %standard-phases
23190 (replace 'check
23191 (lambda _
23192 (invoke "pytest" "-vv"
23193 "-o" "asyncio_mode=auto"
23194 "-k" "not perf"))))))
23195 (native-inputs
23196 (list python-pytest python-pytest-asyncio python-pytest-timeout
23197 python-setuptools-scm python-toml))
23198 (home-page "https://github.com/tqdm/tqdm")
23199 (synopsis "Fast, extensible progress meter")
23200 (description
23201 "Make loops show a progress bar on the console by just wrapping any
23202iterable with @code{|tqdm(iterable)|}. Offers many options to define
23203design and layout.")
23204 (license (list license:mpl2.0 license:expat))))
23205
23206(define-public python-pkginfo
23207 (package
23208 (name "python-pkginfo")
23209 (version "1.8.3")
23210 (source
23211 (origin
23212 (method url-fetch)
23213 (uri (pypi-uri "pkginfo" version))
23214 (sha256
23215 (base32 "0z46w559hrl79gf7navgzimj21ma821wka27jh58fvyqilqs8kd8"))))
23216 (build-system python-build-system)
23217 (native-inputs
23218 (list python-wheel))
23219 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
23220 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
23221 (description
23222 "API to query the distutils metadata written in @file{PKG-INFO} inside a
23223source distriubtion (an sdist) or a binary distribution (e.g., created by
23224running bdist_egg). It can also query the EGG-INFO directory of an installed
23225distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
23226created by running @code{python setup.py develop}).")
23227 (license license:expat)))
23228
23229(define-public python-twine
23230 (package
23231 (name "python-twine")
23232 (version "1.15.0")
23233 (source
23234 (origin
23235 (method url-fetch)
23236 (uri (pypi-uri "twine" version))
23237 (sha256
23238 (base32 "11rpd653zcgzkq3sgwkzs3mpxl3r5rij59745ni84ikv8smjmlm3"))))
23239 (build-system python-build-system)
23240 (propagated-inputs
23241 (list python-tqdm
23242 python-packaging
23243 python-pkginfo
23244 python-readme-renderer
23245 python-requests
23246 python-requests-toolbelt))
23247 (home-page "https://github.com/pypa/twine")
23248 (synopsis "Collection of utilities for interacting with PyPI")
23249 (description
23250 "@code{twine} currently supports registering projects and uploading
23251distributions. It authenticates the user over HTTPS, allows them to pre-sign
23252their files and supports any packaging format (including wheels).")
23253 (license license:asl2.0)))
23254
23255(define-public python-linecache2
23256 (package
23257 (name "python-linecache2")
23258 (version "1.0.0")
23259 (source
23260 (origin
23261 (method url-fetch)
23262 (uri (pypi-uri "linecache2" version))
23263 (sha256
23264 (base32
23265 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
23266 (build-system python-build-system)
23267 (arguments
23268 `(;; The tests depend on unittest2, and our version is a bit too old.
23269 #:tests? #f))
23270 (native-inputs
23271 `(("python-pbr" ,python-pbr-minimal)))
23272 (home-page
23273 "https://github.com/testing-cabal/linecache2")
23274 (synopsis "Backports of the linecache module")
23275 (description
23276 "The linecache module allows one to get any line from any file, while
23277attempting to optimize internally, using a cache, the common case where many
23278lines are read from a single file.")
23279 (license license:psfl)))
23280
23281(define-public python-traceback2
23282 (package
23283 (name "python-traceback2")
23284 (version "1.4.0")
23285 (source
23286 (origin
23287 (method url-fetch)
23288 (uri (pypi-uri "traceback2" version))
23289 (sha256
23290 (base32
23291 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
23292 (build-system python-build-system)
23293 (arguments
23294 `(;; python-traceback2 and python-unittest2 depend on one another.
23295 #:tests? #f))
23296 (native-inputs
23297 `(("python-pbr" ,python-pbr-minimal)))
23298 (propagated-inputs
23299 (list python-linecache2 python-six))
23300 (home-page
23301 "https://github.com/testing-cabal/traceback2")
23302 (synopsis "Backports of the traceback module")
23303 (description
23304 "This module provides a standard interface to extract, format and print
23305stack traces of Python programs. It exactly mimics the behavior of the Python
23306interpreter when it prints a stack trace.")
23307 (license license:psfl)))
23308
23309(define-public python-ratelimiter
23310 (package
23311 (name "python-ratelimiter")
23312 (version "1.2.0")
23313 (source
23314 (origin
23315 (method url-fetch)
23316 (uri (pypi-uri "ratelimiter" version))
23317 (sha256
23318 (base32
23319 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
23320 (build-system python-build-system)
23321 (arguments
23322 '(#:tests? #f)) ; There are no tests in the pypi archive.
23323 (home-page "https://github.com/RazerM/ratelimiter")
23324 (synopsis "Simple rate limiting object")
23325 (description
23326 "The @code{ratelimiter} module ensures that an operation will not be
23327executed more than a given number of times during a given period.")
23328 (license license:asl2.0)))
23329
23330(define-public python-jsonrpclib-pelix
23331 (package
23332 (name "python-jsonrpclib-pelix")
23333 (version "0.3.2")
23334 (source
23335 (origin
23336 (method url-fetch)
23337 (uri (pypi-uri "jsonrpclib-pelix" version))
23338 (sha256
23339 (base32
23340 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
23341 (build-system python-build-system)
23342 (arguments
23343 `(#:tests? #f)) ; no tests in PyPI tarball
23344 (home-page "https://github.com/tcalmant/jsonrpclib/")
23345 (synopsis "JSON-RPC 2.0 client library for Python")
23346 (description
23347 "This library implements the JSON-RPC v2.0
23348specification (backwards-compatible) as a client library for Python. This
23349version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
23350services.")
23351 (license license:asl2.0)))
23352
23353(define-public python-setuptools-scm-git-archive
23354 (package
23355 (name "python-setuptools-scm-git-archive")
23356 (version "1.0")
23357 (source
23358 (origin
23359 (method url-fetch)
23360 (uri (pypi-uri "setuptools_scm_git_archive" version))
23361 (sha256
23362 (base32
23363 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
23364 (build-system python-build-system)
23365 (arguments
23366 '(#:phases (modify-phases %standard-phases
23367 (add-after 'unpack 'dont-install-defunct-egginfo
23368 (lambda _
23369 ;; When a ".git" directory is missing, the setup.py
23370 ;; script invokes setuptools.setup twice, once with
23371 ;; "0" as the version. Prevent that.
23372 (substitute* "setup.py"
23373 (("if not isdir\\('\\.git'\\):")
23374 "if False:")))))))
23375 (native-inputs
23376 (list python-pytest))
23377 (propagated-inputs
23378 (list python-setuptools-scm))
23379 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
23380 (synopsis "Setuptools_scm plugin for git archives")
23381 (description
23382 "The setuptools_scm_git_archive package is a plugin to
23383setuptools_scm, which supports obtaining versions from git archives that
23384belong to tagged versions.")
23385 (license license:expat)))
23386
23387(define-public python-setuptools-git
23388 (package
23389 (name "python-setuptools-git")
23390 (version "1.2")
23391 (source
23392 (origin
23393 (method url-fetch)
23394 (uri (pypi-uri "setuptools-git" version))
23395 (sha256
23396 (base32
23397 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
23398 (build-system python-build-system)
23399 (arguments
23400 `(#:phases
23401 (modify-phases %standard-phases
23402 ;; This is needed for tests.
23403 (add-after 'unpack 'configure-git
23404 (lambda _
23405 (setenv "HOME" "/tmp")
23406 (invoke "git" "config" "--global" "user.email" "guix")
23407 (invoke "git" "config" "--global" "user.name" "guix")
23408 #t)))))
23409 (native-inputs
23410 `(("git" ,git-minimal)))
23411 (home-page "https://github.com/msabramo/setuptools-git")
23412 (synopsis "Setuptools revision control system plugin for Git")
23413 (description
23414 "This package provides a plugin for Setuptools for revision control with
23415Git.")
23416 (license license:bsd-3)))
23417
23418(define-public python-setuptools-rust
23419 (package
23420 (name "python-setuptools-rust")
23421 (version "1.6.0")
23422 (source
23423 (origin
23424 (method url-fetch)
23425 (uri (pypi-uri "setuptools-rust" version))
23426 (sha256
23427 (base32 "0qi274r0fcnvxa8vs8vyhcknnzhq8pd0ig5zk1wmjc63x96p6vn8"))))
23428 (build-system pyproject-build-system)
23429 (arguments '(#:tests? #f)) ;no tests
23430 (propagated-inputs
23431 (list python-semantic-version python-typing-extensions))
23432 (home-page "https://github.com/PyO3/setuptools-rust")
23433 (synopsis "Setuptools plugin for Rust extensions")
23434 (description
23435 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
23436Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
23437 (license license:expat)))
23438
23439(define-public python-pyclipper
23440 (package
23441 (name "python-pyclipper")
23442 (version "1.3.0.post3")
23443 (source
23444 (origin
23445 (method url-fetch)
23446 (uri (pypi-uri "pyclipper" version))
23447 (sha256
23448 (base32 "0vqzbmq2di1jaj6230m5i1ld0mg6wdb1c6r6i5zli54varavr7v3"))
23449 (modules '((guix build utils)))
23450 (snippet
23451 '(begin
23452 ;; This file is generated by Cython.
23453 (delete-file "src/pyclipper/_pyclipper.cpp") #t))))
23454 (build-system python-build-system)
23455 (arguments
23456 `(#:phases
23457 (modify-phases %standard-phases
23458 (add-before 'build 'cythonize-sources
23459 (lambda _
23460 (with-directory-excursion "src/pyclipper"
23461 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
23462 (native-inputs
23463 (list python-cython python-setuptools-scm
23464 python-pytest python-pytest-runner))
23465 (home-page "https://github.com/greginvm/pyclipper")
23466 (synopsis "Wrapper for Angus Johnson's Clipper library")
23467 (description
23468 "Pyclipper is a Cython wrapper for the C++ translation of the
23469Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
23470 (license license:expat)))
23471
23472(define-public python-tempdir
23473 (package
23474 (name "python-tempdir")
23475 (version "0.7.1")
23476 (source
23477 (origin
23478 (method url-fetch)
23479 (uri (pypi-uri "tempdir" version))
23480 (sha256
23481 (base32
23482 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
23483 (build-system python-build-system)
23484 (home-page "https://pypi.org/project/tempdir/")
23485 (arguments
23486 ;; the package has no tests
23487 '(#:tests? #f))
23488 (synopsis "Python library for managing temporary directories")
23489 (description
23490 "This library manages temporary directories that are automatically
23491deleted with all their contents when they are no longer needed. It is
23492particularly convenient for use in tests.")
23493 (license license:expat)))
23494
23495(define-public python-tempora
23496 (package
23497 (name "python-tempora")
23498 (version "5.0.1")
23499 (source
23500 (origin
23501 (method url-fetch)
23502 (uri (pypi-uri "tempora" version))
23503 (sha256
23504 (base32 "09wirlk5vmxlhl9rnxp7g5qz2nsd6b0gnzk5fczbz0s8lsbz386b"))))
23505 (build-system pyproject-build-system)
23506 (arguments
23507 ;; Do not test the myproject.toml build as it tries to pull
23508 ;; dependencies from the Internet.
23509 (list #:test-flags #~'("-k" "not project")))
23510 (native-inputs
23511 (list python-freezegun
23512 python-pytest
23513 python-pytest-black
23514 python-pytest-checkdocs
23515 python-pytest-cov
23516 python-pytest-enabler
23517 python-pytest-flake8
23518 python-pytest-freezegun
23519 python-pytest-mypy
23520 python-setuptools-scm
23521 python-types-freezegun
23522 python-types-pytz))
23523 (propagated-inputs (list python-jaraco-functools python-pytz))
23524 (home-page "https://github.com/jaraco/tempora")
23525 (synopsis "Python date and time objects and routines")
23526 (description "The @code{tempora} Python library contains miscellaneous
23527date and time related utilities and constants, routines for measuring,
23528profiling, and getting datetime-aware @acronym{UTC, Coordinated Universal
23529Time} values as well as an event scheduler.")
23530 (license license:expat)))
23531
23532(define-public python-activepapers
23533 (package
23534 (name "python-activepapers")
23535 (version "0.2.2")
23536 (source
23537 (origin
23538 (method url-fetch)
23539 (uri (pypi-uri "ActivePapers.Py" version))
23540 (sha256
23541 (base32
23542 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
23543 (build-system python-build-system)
23544 (arguments
23545 `(#:modules ((ice-9 ftw)
23546 (srfi srfi-1)
23547 (guix build utils)
23548 (guix build python-build-system))
23549
23550 #:phases
23551 (modify-phases %standard-phases
23552 (add-after 'unpack 'delete-python2-code
23553 (lambda _
23554 (for-each delete-file
23555 '("lib/activepapers/builtins2.py"
23556 "lib/activepapers/standardlib2.py"
23557 "lib/activepapers/utility2.py"))))
23558 (replace 'check
23559 (lambda _
23560 ;; Deactivate the test cases that download files
23561 (setenv "NO_NETWORK_ACCESS" "1")
23562 ;; For some strange reason, some tests fail if nosetests runs all
23563 ;; test modules in a single execution. They pass if each test
23564 ;; module is run individually.
23565 (for-each (lambda (filename)
23566 (invoke "nosetests"
23567 (string-append "tests/" filename)))
23568 (scandir "tests"
23569 (lambda (filename)
23570 (string-suffix? ".py" filename)))))))))
23571 (native-inputs
23572 (list python-tempdir python-nose))
23573 (propagated-inputs
23574 (list python-h5py))
23575 (home-page "https://www.activepapers.org/")
23576 (synopsis "Executable papers for scientific computing")
23577 (description
23578 "ActivePapers is a tool for working with executable papers, which
23579combine data, code, and documentation in single-file packages,
23580suitable for publication as supplementary material or on repositories
23581such as figshare or Zenodo.")
23582 (license license:bsd-3)))
23583
23584(define-public python-semver
23585 (package
23586 (name "python-semver")
23587 (version "2.9.0")
23588 (source
23589 (origin
23590 (method url-fetch)
23591 (uri (pypi-uri "semver" version))
23592 (sha256
23593 (base32
23594 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
23595 (build-system python-build-system)
23596 (arguments
23597 `(#:phases (modify-phases %standard-phases
23598 (replace 'check
23599 (lambda _
23600 (delete-file "setup.cfg")
23601 (invoke "py.test"))))))
23602 (native-inputs
23603 (list python-pytest))
23604 (home-page "https://github.com/k-bx/python-semver")
23605 (synopsis "Python helper for Semantic Versioning")
23606 (description "This package provides a Python library for
23607@url{Semantic Versioning, http://semver.org/}.")
23608 (license license:bsd-3)))
23609
23610(define-public python-pyro4
23611 (package
23612 (name "python-pyro4")
23613 (version "4.77")
23614 (source
23615 (origin
23616 (method url-fetch)
23617 (uri (pypi-uri "Pyro4" version))
23618 (sha256
23619 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
23620 (build-system python-build-system)
23621 (arguments
23622 '(#:tests? #f)) ;FIXME: Some tests require network access.
23623 (native-inputs
23624 (list python-cloudpickle python-dill python-msgpack))
23625 (propagated-inputs
23626 (list python-serpent))
23627 (home-page "https://pyro4.readthedocs.io")
23628 (synopsis "Distributed object middleware for Python")
23629 (description
23630 "Pyro enables you to build applications in which objects can talk to each
23631other over the network. You can just use normal Python method calls to call
23632objects on other machines, also known as remote procedure calls (RPC).")
23633 (license license:expat)))
23634
23635(define-public python-phonenumbers
23636 (package
23637 (name "python-phonenumbers")
23638 (version "8.9.1")
23639 (source
23640 (origin
23641 (method url-fetch)
23642 (uri (pypi-uri "phonenumbers" version))
23643 (sha256
23644 (base32
23645 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
23646 (build-system python-build-system)
23647 (home-page
23648 "https://github.com/daviddrysdale/python-phonenumbers")
23649 (synopsis
23650 "Python library for dealing with international phone numbers")
23651 (description
23652 "This package provides a Python port of Google's libphonenumber library.")
23653 (license license:asl2.0)))
23654
23655(define-public python-heapdict
23656 (package
23657 (name "python-heapdict")
23658 (version "1.0.1")
23659 (source
23660 (origin
23661 (method url-fetch)
23662 (uri (pypi-uri "HeapDict" version))
23663 (sha256
23664 (base32
23665 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
23666 (build-system python-build-system)
23667 (home-page "http://stutzbachenterprises.com/")
23668 (synopsis "Heap with decrease-key and increase-key operations")
23669 (description
23670 "heapdict implements the MutableMapping ABC, meaning it works pretty much
23671like a regular Python @code{dict}. It’s designed to be used as a priority
23672queue.")
23673 (license license:bsd-3)))
23674
23675(define-public python-zict
23676 (package
23677 (name "python-zict")
23678 (version "3.0.0")
23679 (source
23680 (origin
23681 (method url-fetch)
23682 (uri (pypi-uri "zict" version))
23683 (sha256
23684 (base32
23685 "19gvr41xi5fazkzkg33kwrk70sv50hygng0cg70ayym9nriy48g3"))))
23686 (build-system pyproject-build-system)
23687 (arguments
23688 (list
23689 #:test-flags
23690 ;; This uses "importorskip", but it won't skip.
23691 '(list "--ignore=tests/test_lmdb.py")))
23692 (propagated-inputs
23693 (list python-heapdict))
23694 (native-inputs
23695 (list python-pytest
23696 python-pytest-asyncio
23697 python-pytest-repeat
23698 python-pytest-timeout))
23699 (home-page "https://zict.readthedocs.io/en/latest/")
23700 (synopsis "Composable mutable mapping tools")
23701 (description "This package provides abstract @code{MutableMapping} classes
23702that consume and build on other @code{MutableMappings}. Several of these can
23703be composed with one another to form intuitive interfaces over complex storage
23704systems policies.")
23705 (license license:bsd-3)))
23706
23707(define-public python-send2trash
23708 (package
23709 (name "python-send2trash")
23710 (version "1.8.0")
23711 (source
23712 (origin (method git-fetch)
23713 ;; Source tarball on PyPI doesn't include tests.
23714 (uri (git-reference
23715 (url "https://github.com/arsenetar/send2trash")
23716 (commit version)))
23717 (file-name (git-file-name name version))
23718 (sha256
23719 (base32
23720 "1k7dfypaaq4f36fbciaasv72j6wgjihw8d88axmz9c329bz8v5qx"))))
23721 (build-system python-build-system)
23722 (arguments
23723 '(#:phases
23724 (modify-phases %standard-phases
23725 (add-before 'check 'pre-check
23726 (lambda _
23727 (setenv "HOME" "/tmp")))
23728 (replace 'check
23729 (lambda* (#:key tests? #:allow-other-keys)
23730 (when tests?
23731 (invoke "pytest" "-vv")))))))
23732 (native-inputs (list python-pytest))
23733 (home-page "https://github.com/arsenetar/send2trash")
23734 (synopsis "Send files to the user's @file{~/Trash} directory")
23735 (description "This package provides a Python library to send files to the
23736user's @file{~/Trash} directory.")
23737 (license license:bsd-3)))
23738
23739(define-public python-pyfavicon
23740 (package
23741 (name "python-pyfavicon")
23742 (version "0.1.1")
23743 (source
23744 (origin
23745 (method url-fetch)
23746 (uri (pypi-uri "pyfavicon" version))
23747 (sha256
23748 (base32 "15wfpa99hvcfsv8j0m8iprmydi2p4qkhm86qfx485244y0ia5mgx"))))
23749 (build-system python-build-system)
23750 (arguments
23751 ;; There are no tests in the PyPI tarball and the tests from the
23752 ;; repository require online data.
23753 '(#:tests? #f))
23754 (propagated-inputs
23755 (list python-aiohttp python-beautifulsoup4 python-pillow))
23756 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
23757 (synopsis "Async favicon fetcher")
23758 (description
23759 "@code{pyfavicon} is an async favicon fetcher.")
23760 (license license:expat)))
23761
23762(define-public python-yamllint
23763 (package
23764 (name "python-yamllint")
23765 (version "1.31.0")
23766 (source
23767 (origin
23768 (method url-fetch)
23769 (uri (pypi-uri "yamllint" version))
23770 (sha256
23771 (base32 "0rbs7xq7y7bp3k75z7jamrdrrfyp95hifsz0hwm1cgkk5z8z30rd"))))
23772 (build-system python-build-system)
23773 (propagated-inputs
23774 (list python-pathspec python-pyyaml python-setuptools))
23775 (home-page "https://github.com/adrienverge/yamllint")
23776 (synopsis "Linter for YAML files")
23777 (description
23778 "Yamllint is a linter for YAML files. yamllint does not only check for
23779syntax validity, but for weirdnesses like key repetition and cosmetic problems
23780such as lines length, trailing spaces, indentation, etc.")
23781 (license license:gpl3+)))
23782
23783(define-public python-yapf
23784 (package
23785 (name "python-yapf")
23786 (version "0.29.0")
23787 (source
23788 (origin
23789 (method url-fetch)
23790 (uri (pypi-uri "yapf" version))
23791 (sha256
23792 (base32
23793 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
23794 (build-system python-build-system)
23795 (home-page "https://github.com/google/yapf")
23796 (synopsis "Formatter for Python code")
23797 (description "YAPF is a formatter for Python code. It's based off of
23798@dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
23799takes the code and reformats it to the best formatting that conforms to the
23800style guide, even if the original code didn't violate the style guide.")
23801 (license license:asl2.0)))
23802
23803(define-public python-yq
23804 (package
23805 (name "python-yq")
23806 (version "3.1.0")
23807 (source
23808 (origin
23809 (method url-fetch)
23810 (uri (pypi-uri "yq" version))
23811 (sha256
23812 (base32
23813 "1wklgs3d9si475nffw9agq5kgk8bdicbsmlj4sx4kiw64ji4ma1h"))))
23814 (build-system python-build-system)
23815 (arguments
23816 '(#:phases
23817 (modify-phases %standard-phases
23818 (add-after 'unpack 'patch
23819 (lambda* (#:key inputs #:allow-other-keys)
23820 (substitute* "yq/__init__.py"
23821 (("Popen\\(\\[\"jq")
23822 (string-append
23823 "Popen([\""
23824 (assoc-ref inputs "jq")
23825 "/bin/jq")))
23826 #t)))))
23827 (inputs
23828 (list python-argcomplete python-pyyaml python-xmltodict python-toml jq))
23829 (native-inputs
23830 (list python-coverage python-flake8 python-setuptools-scm python-wheel))
23831 (home-page "https://github.com/kislyuk/yq")
23832 (synopsis "Command-line YAML/XML processor")
23833 (description
23834 "This package provides @command{yq} and @command{xq} for processing YAML
23835and XML respectively. The processing is done through @command{jq}, @command{jq}
23836filters can be used to process the data as it passes through.")
23837 (license license:asl2.0)))
23838
23839(define-public python-gyp
23840 (let ((commit "9d09418933ea2f75cc416e5ce38d15f62acd5c9a")
23841 (revision "1"))
23842 (package
23843 (name "python-gyp")
23844 ;; Google does not release versions,
23845 ;; based on second most recent commit date.
23846 (version (git-version "0.0.0" revision commit))
23847 (source
23848 (origin
23849 ;; Google does not release tarballs,
23850 ;; git checkout is needed.
23851 (method git-fetch)
23852 (uri (git-reference
23853 (url "https://chromium.googlesource.com/external/gyp")
23854 (commit commit)))
23855 (file-name (git-file-name name version))
23856 (sha256
23857 (base32
23858 "0ay99rc5msqjpjl7fy1l69f8mvn08wnh2pgr08ijdih9z88xaa5x"))))
23859 (build-system python-build-system)
23860 (propagated-inputs (list python-six))
23861 (home-page "https://gyp.gsrc.io/")
23862 (synopsis "GYP is a Meta-Build system")
23863 (description
23864 "GYP builds build systems for large, cross platform applications.
23865It can be used to generate XCode projects, Visual Studio projects, Ninja build
23866files, and Makefiles.")
23867 (license license:bsd-3))))
23868
23869(define-public python-whatever
23870 (package
23871 (name "python-whatever")
23872 (version "0.6")
23873 (source
23874 (origin
23875 (method git-fetch)
23876 (uri (git-reference
23877 (url "https://github.com/Suor/whatever")
23878 (commit version)))
23879 (file-name (git-file-name name version))
23880 (sha256
23881 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
23882 (build-system pyproject-build-system)
23883 (native-inputs
23884 (list python-pytest))
23885 (home-page "https://github.com/Suor/whatever")
23886 (synopsis "Make anonymous functions by partial application of operators")
23887 (description "@code{whatever} provides an easy way to make anonymous
23888functions by partial application of operators.")
23889 (license license:bsd-3)))
23890
23891(define-public python-funcy
23892 (package
23893 (name "python-funcy")
23894 (version "1.11")
23895 (source
23896 (origin
23897 (method git-fetch)
23898 (uri (git-reference
23899 (url "https://github.com/Suor/funcy")
23900 (commit version)))
23901 (sha256
23902 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
23903 (file-name (git-file-name name version))))
23904 (build-system pyproject-build-system)
23905 (native-inputs
23906 (list python-pytest python-whatever))
23907 (home-page "https://github.com/Suor/funcy")
23908 (synopsis "Functional tools")
23909 (description "@code{funcy} is a library that provides functional tools.
23910Examples are:
23911@enumerate
23912@item merge - Merges collections of the same type
23913@item walk - Type-preserving map
23914@item select - Selects a part of a collection
23915@item take - Takes the first n items of a collection
23916@item first - Takes the first item of a collection
23917@item remove - Predicated-removes items of a collection
23918@item concat - Concatenates two collections
23919@item flatten - Flattens a collection with subcollections
23920@item distinct - Returns only distinct items
23921@item split - Predicated-splits a collection
23922@item split_at - Splits a collection at a given item
23923@item group_by - Groups items by group
23924@item pairwise - Pairs off adjacent items
23925@item partial - Partially-applies a function
23926@item curry - Curries a function
23927@item compose - Composes functions
23928@item complement - Complements a predicate
23929@item all_fn - \"all\" with predicate
23930@end enumerate")
23931 (license license:bsd-3)))
23932
23933(define-public python-isoweek
23934 (package
23935 (name "python-isoweek")
23936 (version "1.3.3")
23937 (source
23938 (origin
23939 (method url-fetch)
23940 (uri (pypi-uri "isoweek" version))
23941 (sha256
23942 (base32
23943 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
23944 (build-system python-build-system)
23945 (home-page "https://github.com/gisle/isoweek")
23946 (synopsis "Objects representing a week")
23947 (description "The @code{isoweek} module provide the class Week that
23948implements the week definition of ISO 8601. This standard also defines
23949a notation for identifying weeks; yyyyWww (where the W is a literal).
23950Week instances stringify to this form.")
23951 (license license:bsd-3)))
23952
23953(define-public python-pyzbar
23954 (package
23955 (name "python-pyzbar")
23956 (version "0.1.8")
23957 (source
23958 (origin
23959 ;; There's no source tarball on PyPI.
23960 (method git-fetch)
23961 (uri (git-reference
23962 (url "https://github.com/NaturalHistoryMuseum/pyzbar")
23963 (commit (string-append "v" version))))
23964 (file-name (git-file-name name version))
23965 (sha256
23966 (base32 "1fqlfg5p2v9lzzzi0si2sz54lblprk6jjjhjw54b64lp58c1yhsl"))))
23967 (build-system python-build-system)
23968 (arguments
23969 `(#:phases
23970 (modify-phases %standard-phases
23971 (add-after 'unpack 'remove-failing-test
23972 (lambda _
23973 ;; This tests if find_library was called once, but we remove
23974 ;; the call in the stage below to make the library find libzbar.
23975 (delete-file "pyzbar/tests/test_zbar_library.py")
23976 #t))
23977 (add-before 'build 'set-library-file-name
23978 (lambda* (#:key inputs #:allow-other-keys)
23979 (let ((libzbar (assoc-ref inputs "zbar")))
23980 (substitute* "pyzbar/zbar_library.py"
23981 (("find_library\\('zbar'\\)")
23982 (string-append "'" libzbar "/lib/libzbar.so.0'")))
23983 #t))))))
23984 (native-inputs
23985 (list pkg-config python-numpy python-pillow))
23986 (inputs
23987 (list zbar))
23988 (home-page "https://github.com/NaturalHistoryMuseum/pyzbar/")
23989 (synopsis "Read one-dimensional barcodes and QR codes")
23990 (description
23991 "Read one-dimensional barcodes and QR codes using the zbar library.
23992
23993Features:
23994
23995@itemize
23996@item Pure python
23997@item Works with PIL / Pillow images, OpenCV / numpy ndarrays, and raw bytes
23998@item Decodes locations of barcodes
23999@item No dependencies, other than the zbar library itself
24000@end itemize")
24001 (license license:expat)))
24002
24003(define-public python-tokenize-rt
24004 (package
24005 (name "python-tokenize-rt")
24006 (version "2.0.1")
24007 (source
24008 (origin
24009 (method url-fetch)
24010 (uri (pypi-uri "tokenize-rt" version))
24011 (sha256
24012 (base32
24013 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
24014 (build-system python-build-system)
24015 (home-page "https://github.com/asottile/tokenize-rt")
24016 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
24017 (description
24018 "This Python library is a wrapper around @code{tokenize} from the Python
24019standard library. It provides two additional tokens @code{ESCAPED_NL} and
24020@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
24021and @code{tokens_to_src} to roundtrip.")
24022 (license license:expat)))
24023
24024(define-public python-future-fstrings
24025 (package
24026 (name "python-future-fstrings")
24027 (version "0.4.1")
24028 (source
24029 (origin
24030 (method url-fetch)
24031 (uri (pypi-uri "future_fstrings" version))
24032 (sha256
24033 (base32
24034 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
24035 (build-system python-build-system)
24036 (propagated-inputs
24037 (list python-tokenize-rt))
24038 (home-page "https://github.com/asottile/future-fstrings")
24039 (synopsis "Backport of fstrings to Python < 3.6")
24040 (description
24041 "This package provides a UTF-8 compatible encoding
24042@code{future_fstrings}, which performs source manipulation. It decodes the
24043source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
24044@code{f} strings.")
24045 (license license:expat)))
24046
24047(define-public python-typed-ast
24048 (package
24049 (name "python-typed-ast")
24050 (version "1.5.1")
24051 (source
24052 (origin
24053 (method git-fetch)
24054 (uri (git-reference
24055 (url "https://github.com/python/typed_ast")
24056 (commit version)))
24057 (sha256
24058 (base32 "1xfcs5246c8v5600aaa8zs7ii4sxb62q6r3sb2fgazyjx97wrxd9"))
24059 (file-name (git-file-name name version))))
24060 (build-system python-build-system)
24061 (arguments
24062 `(#:phases
24063 (modify-phases %standard-phases
24064 (replace 'check
24065 (lambda _
24066 (invoke "pytest"))))))
24067 (native-inputs (list python-pytest))
24068 (home-page "https://github.com/python/typed_ast")
24069 (synopsis "Fork of Python @code{ast} modules with type comment support")
24070 (description "This package provides a parser similar to the standard
24071@code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
24072include PEP 484 type comments and are independent of the version of Python
24073under which they are run. The @code{typed_ast} parsers produce the standard
24074Python AST (plus type comments), and are both fast and correct, as they are
24075based on the CPython 2.7 and 3.7 parsers.")
24076 ;; See the file "LICENSE" for the details.
24077 (license (list license:psfl
24078 license:asl2.0
24079 license:expat)))) ;ast27/Parser/spark.py
24080
24081(define-public python-typer
24082 (package
24083 (name "python-typer")
24084 (version "0.6.1")
24085 (source
24086 (origin
24087 (method git-fetch)
24088 (uri (git-reference
24089 (url "https://github.com/tiangolo/typer")
24090 (commit version)))
24091 (file-name (git-file-name name version))
24092 (sha256
24093 (base32 "1knv353qhkl2imav3jfp6bgq47m8wkkqhq1dzmqg2sv8rsy7zgl7"))))
24094 (build-system pyproject-build-system)
24095 (arguments
24096 (list
24097 #:test-flags
24098 '(let ((disabled-tests (list "test_show_completion"
24099 "test_install_completion")))
24100 (list "-k" (string-append "not "
24101 (string-join disabled-tests
24102 " and not "))))
24103 #:phases
24104 #~(modify-phases %standard-phases
24105 ;; Unfortunately, this doesn't seem to be enough to fix these two
24106 ;; tests, but we'll patch this anyway.
24107 (add-after 'unpack 'patch-shell-reference
24108 (lambda _
24109 (substitute* "tests/test_completion/test_completion.py"
24110 (("\"bash\"") (string-append "\"" (which "bash") "\""))
24111 (("\"/bin/bash\"")
24112 (string-append "\"" (which "bash") "\"")))))
24113 (add-before 'check 'pre-check
24114 (lambda* (#:key tests? #:allow-other-keys)
24115 (when tests?
24116 (setenv "HOME" "/tmp") ; some tests need it
24117 ;; This is for completion tests
24118 (with-output-to-file "/tmp/.bashrc"
24119 (lambda _ (display "# dummy")))))))))
24120 (propagated-inputs
24121 (list python-click))
24122 (native-inputs
24123 (list python-coverage python-flit python-pytest python-rich
24124 python-shellingham))
24125 (home-page "https://github.com/tiangolo/typer")
24126 (synopsis "Typer builds CLI based on Python type hints")
24127 (description
24128 "Typer is a library for building CLI applications. It's based on Python
241293.6+ type hints.")
24130 ;; MIT license
24131 (license license:expat)))
24132
24133(define-public python-typeguard
24134 (package
24135 (name "python-typeguard")
24136 (version "2.13.3")
24137 (source
24138 (origin
24139 (method url-fetch)
24140 (uri (pypi-uri "typeguard" version))
24141 (sha256
24142 (base32 "1i5qzcyw2715h1g1hvj7fxykck2bkxyshpngjr3nfcx1lf6smv80"))
24143 (patches (search-patches "python-typeguard-python3.10.patch"))))
24144 (build-system python-build-system)
24145 (arguments
24146 (list
24147 #:phases
24148 #~(modify-phases %standard-phases
24149 (replace 'check
24150 (lambda* (#:key tests? #:allow-other-keys)
24151 (when tests?
24152 (invoke "pytest" "-vv" "-k"
24153 ;; XXX: These fail when installed as a library:
24154 ;; https://github.com/agronholm/typeguard/issues/176
24155 "not usefixtures and not test_cached_module")))))))
24156 (native-inputs
24157 (list python-mypy python-pytest python-typing-extensions))
24158 (home-page "https://github.com/agronholm/typeguard")
24159 (synopsis "Run-time type checker for Python")
24160 (description
24161 "@code{typeguard} provides run-time type checking for functions defined
24162with PEP 484 argument (and return) type annotations.")
24163 (license license:expat)))
24164
24165(define-public bpython
24166 (package
24167 (name "bpython")
24168 (version "0.24")
24169 (source
24170 (origin
24171 (method url-fetch)
24172 (uri (pypi-uri "bpython" version))
24173 (sha256
24174 (base32 "1g9xzl49skghd9q2a8b71gg1n97lfnj9in2kzcmzsj4cgbynywwq"))))
24175 (build-system python-build-system)
24176 (arguments
24177 `(#:phases
24178 (modify-phases %standard-phases
24179 (add-after 'unpack 'remove-failing-test
24180 (lambda _
24181 ;; Remove failing test. FIXME: make it pass
24182 (delete-file "bpython/test/test_args.py")
24183 #t))
24184 (add-after 'wrap 'add-aliases
24185 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
24186 (lambda* (#:key outputs #:allow-other-keys)
24187 (let ((out (assoc-ref outputs "out")))
24188 (for-each
24189 (lambda (old new)
24190 (symlink old (string-append out "/bin/" new)))
24191 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
24192 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
24193 #t)))))
24194 (propagated-inputs
24195 (list python-pygments
24196 python-requests
24197 python-curtsies
24198 python-greenlet
24199 python-cwcwidth
24200 python-pyxdg
24201 ;; optional dependencies
24202 python-urwid ; for bpython-urwid only
24203 python-watchdog
24204 python-jedi))
24205 (native-inputs
24206 (list python-sphinx python-mock python-tox python-wheel))
24207 (home-page "https://bpython-interpreter.org/")
24208 (synopsis "Fancy interface to the Python interpreter")
24209 (description "Bpython is a fancy interface to the Python
24210interpreter. bpython's main features are
24211
24212@enumerate
24213@item in-line syntax highlighting,
24214@item readline-like autocomplete with suggestions displayed as you type,
24215@item expected parameter list for any Python function,
24216@item \"rewind\" function to pop the last line of code from memory and
24217 re-evaluate,
24218@item send the code you've entered off to a pastebin,
24219@item save the code you've entered to a file, and
24220@item auto-indentation.
24221@end enumerate")
24222 (license license:expat)))
24223
24224(define-public python-pyinotify
24225 (package
24226 (name "python-pyinotify")
24227 (version "0.9.6")
24228 (source (origin
24229 (method url-fetch)
24230 (uri (pypi-uri "pyinotify" version))
24231 (sha256
24232 (base32
24233 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
24234 (build-system python-build-system)
24235 (arguments `(#:tests? #f)) ;no tests
24236 (home-page "https://github.com/seb-m/pyinotify")
24237 (synopsis "Python library for monitoring inotify events")
24238 (description
24239 "@code{pyinotify} provides a Python interface for monitoring
24240file system events on Linux.")
24241 (license license:expat)))
24242
24243
24244(define-public python-more-itertools
24245 (package
24246 (name "python-more-itertools")
24247 (version "8.2.0")
24248 (source
24249 (origin
24250 (method url-fetch)
24251 (uri (pypi-uri "more-itertools" version))
24252 (sha256
24253 (base32
24254 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
24255 (build-system python-build-system)
24256 (home-page "https://github.com/erikrose/more-itertools")
24257 (synopsis "More routines for operating on iterables, beyond itertools")
24258 (description "Python's built-in @code{itertools} module implements a
24259number of iterator building blocks inspired by constructs from APL, Haskell,
24260and SML. @code{more-itertools} includes additional building blocks for
24261working with iterables.")
24262 (license license:expat)))
24263
24264(define-public python-latexcodec
24265 (package
24266 (name "python-latexcodec")
24267 (version "2.0.1")
24268 (source
24269 (origin
24270 (method url-fetch)
24271 (uri (pypi-uri "latexcodec" version))
24272 (sha256
24273 (base32 "16pynfnn8y8xp55yp06i721fccv5dlx9ba6k5bzcwq9j6wf5b8ia"))))
24274 (build-system python-build-system)
24275 (propagated-inputs
24276 (list python-six))
24277 (home-page "https://readthedocs.org/projects/latexcodec/")
24278 (synopsis "Work with LaTeX code in Python")
24279 (description "Lexer and codec to work with LaTeX code in Python.")
24280 (license license:expat)))
24281
24282(define-public python-pybloom-live
24283 (package
24284 (name "python-pybloom-live")
24285 (version "4.0.0")
24286 (source (origin
24287 (method url-fetch)
24288 (uri (pypi-uri "pybloom_live" version))
24289 (sha256
24290 (base32
24291 "040i6bjqvl33j30v865shsk30s3h7f16pqwiaj5kig857dfmqm4r"))))
24292 (build-system pyproject-build-system)
24293 (propagated-inputs (list python-bitarray python-xxhash))
24294 (native-inputs (list python-pytest))
24295 (home-page "https://github.com/joseph-fox/python-bloomfilter")
24296 (synopsis "Bloom filter")
24297 (description "This package provides a scalable Bloom filter implemented in
24298Python.")
24299 (license license:expat)))
24300
24301(define-public python-pybtex
24302 (package
24303 (name "python-pybtex")
24304 (version "0.24.0")
24305 (source
24306 (origin
24307 (method url-fetch)
24308 (uri (pypi-uri "pybtex" version))
24309 (sha256
24310 (base32 "0ma7sc10hk6caq5zghbk865vrlaynz7x5z630z0facqpnqssx3l1"))))
24311 (build-system python-build-system)
24312 (native-inputs
24313 (list python-pytest))
24314 (propagated-inputs
24315 (list python-latexcodec python-pyyaml python-six))
24316 (arguments
24317 (list
24318 #:phases #~(modify-phases %standard-phases
24319 (replace 'check
24320 (lambda* (#:key tests? #:allow-other-keys)
24321 (when tests?
24322 (invoke "pytest")))))))
24323 (home-page "https://pybtex.org/")
24324 (synopsis "BibTeX-compatible bibliography processor")
24325 (description "Pybtex is a BibTeX-compatible bibliography processor written
24326in Python. You can simply type pybtex instead of bibtex.")
24327 (license license:expat)))
24328
24329(define-public python-onetimepass
24330 (package
24331 (name "python-onetimepass")
24332 (version "1.0.1")
24333 (source
24334 (origin
24335 (method url-fetch)
24336 (uri (pypi-uri "onetimepass" version))
24337 (sha256
24338 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
24339 (build-system python-build-system)
24340 (propagated-inputs (list python-six))
24341 (home-page "https://github.com/tadeck/onetimepass/")
24342 (synopsis "One-time password library")
24343 (description "Python one-time password library for HMAC-based (HOTP) and
24344time-based (TOTP) passwords.")
24345 (license license:expat)))
24346
24347(define-public python-parso
24348 (package
24349 (name "python-parso")
24350 (version "0.8.3")
24351 (source
24352 (origin
24353 (method url-fetch)
24354 (uri (pypi-uri "parso" version))
24355 (sha256
24356 (base32 "185gkxq92kqiw2h5zp1cmyn04055x0lix4hmi5c077xm1clvw1wc"))
24357 (patches
24358 (search-patches "python-parso-unit-tests-in-3.10.patch"))))
24359 (native-inputs
24360 (list python-pytest))
24361 (build-system python-build-system)
24362 (arguments
24363 `(#:phases
24364 (modify-phases %standard-phases
24365 (replace 'check
24366 (lambda* (#:key tests? #:allow-other-keys)
24367 (when tests?
24368 (invoke "pytest" "-vv")))))))
24369 (home-page "https://github.com/davidhalter/parso")
24370 (synopsis "Python Parser")
24371 (description "Parso is a Python parser that supports error recovery and
24372round-trip parsing for different Python versions (in multiple Python versions).
24373Parso is also able to list multiple syntax errors in your Python file.")
24374 (license license:expat)))
24375
24376(define-public python-async-generator
24377 (package
24378 (name "python-async-generator")
24379 (version "1.10")
24380 (source
24381 (origin
24382 (method url-fetch)
24383 (uri (pypi-uri "async_generator" version))
24384 (sha256
24385 (base32
24386 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
24387 (build-system python-build-system)
24388 (native-inputs
24389 (list python-pytest))
24390 (home-page "https://github.com/python-trio/async_generator")
24391 (synopsis "Async generators and context managers for Python 3.5+")
24392 (description "@code{async_generator} back-ports Python 3.6's native async
24393generators and Python 3.7's context managers into Python 3.5.")
24394 ;; Dual licensed.
24395 (license (list license:expat license:asl2.0))))
24396
24397(define-public python-async-timeout
24398 (package
24399 (name "python-async-timeout")
24400 (version "4.0.2")
24401 (source
24402 (origin
24403 (method url-fetch)
24404 (uri (pypi-uri "async-timeout" version))
24405 (sha256
24406 (base32
24407 "05bbjz16n1a7m1s3lmcwri2x5rc7hnh6f2hdr2lbflnv1mjf2qr1"))))
24408 (build-system python-build-system)
24409 (home-page "https://github.com/aio-libs/async-timeout")
24410 (synopsis "Timeout context manager for asyncio programs")
24411 (description "@code{async-timeout} provides a timeout timeout context
24412manager compatible with @code{asyncio}.")
24413 (license license:asl2.0)))
24414
24415(define-public python-glob2
24416 (package
24417 (name "python-glob2")
24418 (version "0.7")
24419 (source
24420 (origin
24421 (method git-fetch)
24422 (uri (git-reference
24423 (url "https://github.com/miracle2k/python-glob2")
24424 (commit (string-append "v" version))))
24425 (file-name (git-file-name name version))
24426 (sha256
24427 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
24428 (build-system python-build-system)
24429 (home-page "https://github.com/miracle2k/python-glob2/")
24430 (synopsis "Extended Version of the python buildin glob module")
24431 (description "This is an extended version of the Python
24432@url{http://docs.python.org/library/glob.html, built-in glob module} which
24433adds:
24434
24435@itemize
24436@item The ability to capture the text matched by glob patterns, and return
24437those matches alongside the file names.
24438@item A recursive @code{**} globbing syntax, akin for example to the
24439@code{globstar} option of Bash.
24440@item The ability to replace the file system functions used, in order to glob
24441on virtual file systems.
24442@item Compatible with Python 2 and Python 3 (tested with 3.3).
24443@end itemize
24444
24445Glob2 currently based on the glob code from Python 3.3.1.")
24446 (license license:bsd-2)))
24447
24448(define-public python-gipc
24449 (package
24450 (name "python-gipc")
24451 (version "0.6.0")
24452 (source
24453 (origin
24454 (method url-fetch)
24455 (uri (pypi-uri "gipc" version ".zip"))
24456 (sha256
24457 (base32
24458 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
24459 (build-system python-build-system)
24460 (native-inputs
24461 (list unzip))
24462 (propagated-inputs
24463 (list python-gevent))
24464 (home-page "https://gehrcke.de/gipc/")
24465 (synopsis "Child process management in the context of gevent")
24466 (description "Usage of Python's multiprocessing package in a
24467gevent-powered application may raise problems. With @code{gipc},
24468process-based child processes can safely be created anywhere within a
24469gevent-powered application.")
24470 (license license:expat)))
24471
24472(define-public python-beautifultable
24473 (package
24474 (name "python-beautifultable")
24475 (version "1.0.0")
24476 (source
24477 (origin
24478 (method url-fetch)
24479 (uri (pypi-uri "beautifultable" version))
24480 (sha256
24481 (base32
24482 "0wwlbifcbpzy3wfv6yzsxncarsngzizmmxbn6cy5gazlcq7h4k5x"))))
24483 (build-system python-build-system)
24484 (propagated-inputs
24485 (list python-wcwidth))
24486 (arguments
24487 `(#:phases
24488 (modify-phases %standard-phases
24489 (add-after 'unpack 'patch-setup.py
24490 (lambda _
24491 (substitute* "setup.py"
24492 (("setup\\(")
24493 "setup(\n test_suite=\"test\",")))))))
24494 (home-page "https://github.com/pri22296/beautifultable")
24495 (synopsis "Print ASCII tables for terminals")
24496 (description "@code{python-beautifultable} provides a class for easily
24497printing tabular data in a visually appealing ASCII format to a terminal.
24498
24499Features include, but are not limited to:
24500@itemize
24501@item Full customization of the look and feel of the table
24502@item Row and column accessors.
24503@item Full support for colors using ANSI sequences or any library.
24504@item Plenty of predefined styles and option to create custom ones.
24505@item Support for Unicode characters.
24506@item Supports streaming table when data is slow to retrieve.
24507@end itemize")
24508 (license license:expat)))
24509
24510(define-public python-globber
24511 (package
24512 (name "python-globber")
24513 (version "0.2.1")
24514 (source
24515 (origin
24516 (method git-fetch)
24517 (uri (git-reference
24518 (url "https://github.com/asharov/globber")
24519 (commit version)))
24520 (file-name (git-file-name name version))
24521 (sha256
24522 (base32
24523 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
24524 (build-system python-build-system)
24525 (home-page "https://github.com/asharov/globber")
24526 (synopsis "Library for string matching with glob patterns")
24527 (description
24528 "Globber is a Python library for matching file names against glob patterns.
24529In contrast to other glob-matching libraries, it matches arbitrary strings and
24530doesn't require the matched names to be existing files. In addition, it
24531supports the globstar @code{**} operator to match an arbitrary number of
24532path components.")
24533 (license license:asl2.0)))
24534
24535(define-public python-git-hammer
24536 (package
24537 (name "python-git-hammer")
24538 (version "0.3.1")
24539 (source
24540 (origin
24541 (method git-fetch)
24542 (uri (git-reference
24543 (url "https://github.com/asharov/git-hammer")
24544 (commit version)))
24545 (file-name (git-file-name name version))
24546 (sha256
24547 (base32
24548 "0f9xlk86ijzpdj25hr1q4wcy8k72v3w470ngwm9mpdkfj8ng84wr"))))
24549 (build-system python-build-system)
24550 (arguments
24551 `(#:phases
24552 (modify-phases %standard-phases
24553 (add-after 'unpack 'patch-setup.py
24554 (lambda _
24555 (substitute* "setup.py"
24556 (("setup\\(")
24557 "setup(\n test_suite=\"test\",")))))))
24558 (propagated-inputs
24559 (list python-beautifultable
24560 python-dateutil
24561 python-gitpython
24562 python-globber
24563 python-matplotlib
24564 python-sqlalchemy
24565 python-sqlalchemy-utils))
24566 (home-page "https://github.com/asharov/git-hammer")
24567 (synopsis "Provide statistics for git repositories")
24568 (description
24569 "Git Hammer is a statistics tool for projects in git repositories.
24570Its major feature is tracking the number of lines authored by each person for every
24571commit, but it also includes some other useful statistics.")
24572 (license license:asl2.0)))
24573
24574(define-public python-fusepy
24575 (package
24576 (name "python-fusepy")
24577 (version "2.0.4")
24578 (source
24579 (origin
24580 (method url-fetch)
24581 (uri (pypi-uri "fusepy" version))
24582 (sha256
24583 (base32
24584 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
24585 (build-system python-build-system)
24586 (arguments
24587 `(#:phases
24588 (modify-phases %standard-phases
24589 (add-before 'build 'set-library-file-name
24590 (lambda* (#:key inputs #:allow-other-keys)
24591 (let ((fuse (assoc-ref inputs "fuse")))
24592 (substitute* "fuse.py"
24593 (("find_library\\('fuse'\\)")
24594 (string-append "'" fuse "/lib/libfuse.so'")))))))))
24595 (propagated-inputs
24596 (list fuse-2))
24597 (home-page "https://github.com/fusepy/fusepy")
24598 (synopsis "Simple ctypes bindings for FUSE")
24599 (description "Python module that provides a simple interface to FUSE and
24600MacFUSE. The binding is created using the standard @code{ctypes} library.")
24601 (license license:isc)))
24602
24603(define-public python-fusepyng
24604 (package
24605 (name "python-fusepyng")
24606 (version "1.0.7")
24607 (source
24608 (origin
24609 (method url-fetch)
24610 (uri (pypi-uri "fusepyng" version))
24611 (sha256
24612 (base32
24613 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
24614 (build-system python-build-system)
24615 (arguments
24616 '(#:phases
24617 (modify-phases %standard-phases
24618 (add-after 'unpack 'set-libfuse-path
24619 (lambda* (#:key inputs #:allow-other-keys)
24620 (let ((fuse (assoc-ref inputs "fuse")))
24621 (substitute* "fusepyng.py"
24622 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
24623 (string-append "\"" fuse "/lib/libfuse.so\"")))))))))
24624 (inputs
24625 (list fuse-2))
24626 (propagated-inputs
24627 (list python-paramiko))
24628 (home-page "https://github.com/rianhunter/fusepyng")
24629 (synopsis "Simple ctypes bindings for FUSE")
24630 (description "@code{fusepyng} is a Python module that provides a simple
24631interface to FUSE on various operating systems. It's just one file and is
24632implemented using @code{ctypes}.")
24633 (license license:isc)))
24634
24635(define-public python-update-checker
24636 (package
24637 (name "python-update-checker")
24638 (version "0.18.0")
24639 (source
24640 (origin
24641 (method url-fetch)
24642 (uri (pypi-uri "update-checker" version))
24643 (sha256
24644 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
24645 (build-system python-build-system)
24646 (propagated-inputs (list python-requests))
24647 (native-inputs (list python-black python-flake8 python-pytest))
24648 (home-page "https://github.com/bboe/update_checker")
24649 (synopsis "Python module that will check for package updates")
24650 (description "This package provides a Python module that will check for
24651package updates.")
24652 (license license:bsd-2)))
24653
24654(define-public python-userspacefs
24655 (package
24656 (name "python-userspacefs")
24657 (version "2.0.5")
24658 (source
24659 (origin
24660 (method url-fetch)
24661 (uri (pypi-uri "userspacefs" version))
24662 (sha256
24663 (base32
24664 "0v0qkdwfc61s2yiq7d7amin93x5biypfmi9pfhf8yj1rdpx5yvsx"))))
24665 (build-system python-build-system)
24666 (propagated-inputs
24667 (list python-fusepyng))
24668 (home-page "https://github.com/rianhunter/userspacefs")
24669 (synopsis "User-space file systems for Python")
24670 (description
24671 "@code{userspacefs} is a library that allows you to easily write
24672user-space file systems in Python.")
24673 (license license:gpl3+)))
24674
24675(define-public python-stone
24676 (package
24677 (name "python-stone")
24678 (version "3.2.1")
24679 (source
24680 (origin
24681 (method url-fetch)
24682 (uri (pypi-uri "stone" version))
24683 (sha256
24684 (base32
24685 "0xby5mpsms7b2rv8j6mvxzmzz5i9ii01brb9ylxz6kiv2i08piwv"))))
24686 (build-system python-build-system)
24687 (arguments
24688 `(#:phases
24689 (modify-phases %standard-phases
24690 (add-after 'unpack 'change-version-requirements
24691 (lambda _
24692 ;; Match the requirement in test/requirements.txt
24693 (substitute* "setup.py"
24694 (("pytest < 5") "pytest < 7"))
24695 ;; We don't care about a coverage report.
24696 (substitute* "test/requirements.txt"
24697 (("coverage.*") "coverage\n"))))
24698 (replace 'check
24699 (lambda* (#:key tests? #:allow-other-keys)
24700 (when tests?
24701 ;; These tests don't import currectly.
24702 (delete-file "test/test_js_client.py")
24703 (delete-file "test/test_tsd_types.py")
24704 (delete-file "test/test_python_gen.py")
24705 (invoke "pytest")))))))
24706 (propagated-inputs
24707 (list python-ply python-six))
24708 (native-inputs
24709 (list python-coverage python-mock python-pytest python-pytest-runner))
24710 (home-page "https://github.com/dropbox/stone")
24711 (synopsis "Official Api Spec Language for Dropbox")
24712 (description
24713 "Stone is an interface description language (IDL) for APIs.")
24714 (license license:expat)))
24715
24716(define-public pybind11
24717 (package
24718 (name "pybind11")
24719 (version "2.8.1")
24720 (source (origin
24721 (method git-fetch)
24722 (uri (git-reference
24723 (url "https://github.com/pybind/pybind11")
24724 (commit (string-append "v" version))))
24725 (sha256
24726 (base32
24727 "10hrkrh78sk7k0ydw1ghmp7gvpwmkby0l2s0kf2iaj9sz0vijkhs"))
24728 (file-name (git-file-name name version))))
24729 (build-system cmake-build-system)
24730 (native-inputs
24731 `(("python" ,python-wrapper)
24732
24733 ;; The following dependencies are used for tests.
24734 ("python-pytest" ,python-pytest)
24735 ("catch" ,catch2-1)
24736 ("eigen" ,eigen)))
24737 (arguments
24738 `(#:configure-flags
24739 (list (string-append "-DCATCH_INCLUDE_DIR="
24740 (assoc-ref %build-inputs "catch")
24741 "/include/catch"))
24742
24743 #:phases (modify-phases %standard-phases
24744 (add-after 'install 'install-python
24745 (lambda* (#:key outputs #:allow-other-keys)
24746 (let ((out (assoc-ref outputs "out")))
24747 (with-directory-excursion "../source"
24748 (setenv "PYBIND11_USE_CMAKE" "yes")
24749 (invoke "python" "setup.py" "install"
24750 "--single-version-externally-managed"
24751 "--root=/"
24752 (string-append "--prefix=" out)))))))
24753
24754 #:test-target "check"))
24755 (home-page "https://github.com/pybind/pybind11/")
24756 (synopsis "Seamless operability between C++11 and Python")
24757 (description
24758 "@code{pybind11} is a lightweight header-only library that exposes C++
24759types in Python and vice versa, mainly to create Python bindings of existing
24760C++ code. Its goals and syntax are similar to the @code{Boost.Python}
24761library: to minimize boilerplate code in traditional extension modules by
24762inferring type information using compile-time introspection.")
24763 (license license:bsd-3)))
24764
24765;; This is needed for python-vaex-core.
24766(define-public pybind11-2.3
24767 (package
24768 (inherit pybind11)
24769 (name "pybind11")
24770 (version "2.3.0")
24771 (source (origin
24772 (method git-fetch)
24773 (uri (git-reference
24774 (url "https://github.com/pybind/pybind11")
24775 (commit (string-append "v" version))))
24776 (sha256
24777 (base32
24778 "11b6dniri8m05spfd2a19irz82shf4sdca73566bniggrf3zclnf"))
24779 (file-name (git-file-name name version))))
24780 (arguments
24781 (substitute-keyword-arguments (package-arguments pybind11)
24782 ((#:tests? tests? #false)
24783 #false)))))
24784
24785(define-public python-pooch
24786 (package
24787 (name "python-pooch")
24788 (version "1.3.0")
24789 (source
24790 (origin
24791 (method url-fetch)
24792 (uri (pypi-uri "pooch" version))
24793 (sha256
24794 (base32 "1618adsg9r8fsv422sv35z1i723q3a1iir5v7dv2sklh4pl4im1h"))))
24795 (build-system python-build-system)
24796 (arguments
24797 `(#:tests? #f)) ;requires online data
24798 (propagated-inputs
24799 (list python-appdirs python-packaging python-requests))
24800 (home-page "https://github.com/fatiando/pooch")
24801 (synopsis "Manage your Python library's sample data files")
24802 (description
24803 "Pooch manages your Python library's sample data files: it automatically
24804downloads and stores them in a local directory, with support for versioning
24805and corruption checks.")
24806 (license license:bsd-3)))
24807
24808(define-public python-fasteners
24809 (package
24810 (name "python-fasteners")
24811 (version "0.15")
24812 (source
24813 (origin
24814 (method url-fetch)
24815 (uri (pypi-uri "fasteners" version))
24816 (sha256
24817 (base32
24818 "1vzmz1xh38b84dv0f4hlp7arwmx8wjlih6lf964bpy8dnyk6s5rs"))))
24819 (build-system python-build-system)
24820 (propagated-inputs
24821 (list python-monotonic python-six))
24822 (native-inputs
24823 (list python-testtools))
24824 (home-page "https://github.com/harlowja/fasteners")
24825 (synopsis "Python package that provides useful locks")
24826 (description
24827 "This package provides a Python program that provides following locks:
24828
24829@itemize
24830@item Locking decorator
24831@item Reader-writer locks
24832@item Inter-process locks
24833@item Generic helpers
24834@end itemize\n")
24835 (license license:asl2.0)))
24836
24837(define-public python-requests-file
24838 (package
24839 (name "python-requests-file")
24840 (version "1.5.1")
24841 (source
24842 (origin
24843 (method url-fetch)
24844 (uri (pypi-uri "requests-file" version))
24845 (sha256
24846 (base32 "13kx4k83i9zcv20h0fnmawwwdzhcmw1z97mqib1h379qsc445mq7"))))
24847 (build-system python-build-system)
24848 (arguments
24849 `(#:phases
24850 (modify-phases %standard-phases
24851 (replace 'check
24852 (lambda* (#:key tests? #:allow-other-keys)
24853 (when tests?
24854 (invoke "python" "tests/test_requests_file.py")))))))
24855 (propagated-inputs
24856 (list python-requests python-six))
24857 (home-page "https://github.com/dashea/requests-file")
24858 (synopsis "File transport adapter for Requests")
24859 (description
24860 "Requests-File is a transport adapter for use with the Requests Python
24861library to allow local file system access via @code{file://} URLs.")
24862 (license license:asl2.0)))
24863
24864(define-public python-identify
24865 (package
24866 (name "python-identify")
24867 (version "1.4.25")
24868 (source
24869 (origin
24870 ;; There are no tests in the PyPI tarball.
24871 (method git-fetch)
24872 (uri (git-reference
24873 (url "https://github.com/chriskuehl/identify")
24874 (commit (string-append "v" version))))
24875 (file-name (git-file-name name version))
24876 (sha256
24877 (base32 "1fqgci6skckcq0x5pnxh6k2qjzn1ndsrgha1j6wwv1ld4g9bd3hz"))))
24878 (build-system python-build-system)
24879 (arguments
24880 `(#:phases
24881 (modify-phases %standard-phases
24882 ;; system-error "utime" "~A" ("No such file or directory")
24883 (delete 'ensure-no-mtimes-pre-1980)
24884 (replace 'check
24885 (lambda* (#:key tests? #:allow-other-keys)
24886 (when tests?
24887 (invoke "pytest" "-vv")))))))
24888 (native-inputs
24889 (list python-coverage python-pytest))
24890 (propagated-inputs
24891 (list python-editdistance))
24892 (home-page "https://github.com/chriskuehl/identify")
24893 (synopsis "File identification library for Python")
24894 (description
24895 "@code{identify} is a file identification library for Python. Given
24896a file (or some information about a file), return a set of standardized tags
24897identifying what the file is.")
24898 (license license:expat)))
24899
24900(define-public python-tldextract
24901 (package
24902 (name "python-tldextract")
24903 (version "3.3.0")
24904 (source
24905 (origin
24906 (method url-fetch)
24907 (uri (pypi-uri "tldextract" version))
24908 (sha256
24909 (base32
24910 "1wac4yvcpgqjvls770mfx165amvy7gr00nnd2w24bqqwyamj9kdd"))))
24911 (build-system python-build-system)
24912 (native-inputs
24913 (list python-pytest python-responses python-setuptools-scm))
24914 (propagated-inputs
24915 (list python-filelock python-idna python-requests python-requests-file))
24916 (home-page
24917 "https://github.com/john-kurkowski/tldextract")
24918 (synopsis
24919 "Separate the TLD from the registered domain and subdomains of a URL")
24920 (description
24921 "TLDExtract accurately separates the TLD from the registered domain and
24922subdomains of a URL, using the Public Suffix List. By default, this includes
24923the public ICANN TLDs and their exceptions. It can optionally support the
24924Public Suffix List's private domains as well.")
24925 (license license:bsd-3)))
24926
24927(define-public python-tldr
24928 (package
24929 (name "python-tldr")
24930 (version "3.1.0")
24931 (source
24932 (origin
24933 ;; There's no test in PyPI.
24934 (method git-fetch)
24935 (uri (git-reference
24936 (url "https://github.com/tldr-pages/tldr-python-client")
24937 (commit version)))
24938 (file-name (git-file-name name version))
24939 (sha256
24940 (base32 "1hxmprqg8c4cvs19n7f80f3y7jj74i8sc2dmq2gdjmsdrb54bbzc"))))
24941 (build-system python-build-system)
24942 (arguments
24943 (list #:phases
24944 #~(modify-phases %standard-phases
24945 (add-after 'build 'build-doc
24946 (lambda _
24947 (invoke "make" "-C" "docs")))
24948 (replace 'check
24949 (lambda* (#:key tests? #:allow-other-keys)
24950 (when tests?
24951 ;; This test fails. It tries to open a network socket.
24952 (invoke "pytest" "-vv" "-k" "not test_error_message")))))))
24953 (native-inputs
24954 (list python-pytest python-pytest-runner python-sphinx-argparse))
24955 (inputs
24956 (list python-argcomplete python-colorama python-termcolor python-shtab))
24957 (home-page "https://github.com/tldr-pages/tldr-python-client")
24958 (synopsis "Python command-line client for tldr pages")
24959 (description "This package provides the @code{tldr} command allowing users
24960to view @code{tldr} pages from a shell. The @code{tldr} pages are a community
24961effort to simplify the man pages with practical examples.")
24962 (license license:expat))) ; MIT license
24963
24964(define-public python-nodeenv
24965 (package
24966 (name "python-nodeenv")
24967 (version "1.4.0")
24968 (source
24969 (origin
24970 ;; There's no tarball in PyPI.
24971 (method git-fetch)
24972 (uri (git-reference
24973 (url "https://github.com/ekalinin/nodeenv")
24974 (commit version)))
24975 (file-name (git-file-name name version))
24976 (sha256
24977 (base32 "0y443icx0w7jlzmxmmcm4q8dqfiwgafbb9cp8jpm68mbqxbz40a7"))))
24978 (build-system python-build-system)
24979 (arguments
24980 `(#:phases
24981 (modify-phases %standard-phases
24982 (replace 'check
24983 (lambda _
24984 ;; This test fails. It tries to open a network socket.
24985 (invoke "pytest" "-vv" "-k" "not test_smoke"))))))
24986 (native-inputs
24987 (list python-coverage python-mock python-pytest))
24988 (home-page "https://ekalinin.github.io/nodeenv/")
24989 (synopsis "Create isolated node.js environments")
24990 (description
24991 "Nodeenv (node.js virtual environment) is a tool to create isolated
24992node.js environments. It creates an environment that has its own installation
24993directories, that doesn't share libraries with other node.js virtual
24994environments.")
24995 (license license:bsd-3)))
24996
24997(define-public python-pynamecheap
24998 (package
24999 (name "python-pynamecheap")
25000 (version "0.0.3")
25001 (source
25002 (origin
25003 (method url-fetch)
25004 (uri (pypi-uri "PyNamecheap" version))
25005 (sha256
25006 (base32
25007 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
25008 (build-system python-build-system)
25009 (propagated-inputs
25010 (list python-requests))
25011 (home-page
25012 "https://github.com/Bemmu/PyNamecheap")
25013 (synopsis
25014 "Namecheap API client in Python")
25015 (description
25016 "PyNamecheap is a Namecheap API client in Python.")
25017 (license license:expat)))
25018
25019(define-public python-pynixutil
25020 (package
25021 (name "python-pynixutil")
25022 (version "0.5.0")
25023 (source (origin
25024 (method git-fetch)
25025 (uri (git-reference
25026 (url "https://github.com/nix-community/pynixutil")
25027 (commit version)))
25028 (file-name (git-file-name name version))
25029 ;; Derivation test uses nix.
25030 (modules '((guix build utils)))
25031 (snippet '(delete-file "tests/test_drv.py"))
25032 (sha256
25033 (base32
25034 "1lnspcai7mqpv73bbd8kgyw63fxwgkwvfkl09b2bl5y2g2v7np6m"))))
25035 (build-system pyproject-build-system)
25036 (native-inputs (list poetry python-pytest))
25037 (home-page "https://github.com/nix-community/pynixutil")
25038 (synopsis "Utility functions for working with data from Nix in Python")
25039 (description
25040 "@code{pynixutil} provides functions for base32 encoding/decoding and
25041derivation parsing, namingly @code{b32decode()}, @code{b32encode()} and
25042@code{drvparse()}.")
25043 (license license:expat)))
25044
25045(define-public python-dns-lexicon
25046 (package
25047 (name "python-dns-lexicon")
25048 (version "2.4.0")
25049 (source
25050 (origin
25051 (method url-fetch)
25052 (uri (pypi-uri "dns-lexicon" version))
25053 (sha256
25054 (base32
25055 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
25056 (build-system python-build-system)
25057 (arguments
25058 `(#:tests? #f)) ;requires internet access
25059 (propagated-inputs
25060 (list python-future python-pynamecheap python-requests
25061 python-tldextract python-urllib3))
25062 (home-page "https://github.com/AnalogJ/lexicon")
25063 (synopsis
25064 "Manipulate DNS records on various DNS providers")
25065 (description
25066 "Lexicon provides a way to manipulate DNS records on multiple DNS
25067providers in a standardized way. It has a CLI but it can also be used as a
25068Python library. It was designed to be used in automation, specifically with
25069Let's Encrypt.")
25070 (license license:expat)))
25071
25072(define-public python-cfgv
25073 (package
25074 (name "python-cfgv")
25075 (version "3.3.1")
25076 (source
25077 (origin
25078 ;; There are no tests in the PyPI tarball.
25079 (method git-fetch)
25080 (uri (git-reference
25081 (url "https://github.com/asottile/cfgv")
25082 (commit (string-append "v" version))))
25083 (file-name (git-file-name name version))
25084 (sha256
25085 (base32 "1pci97cmn3v45sfch9s3lshidrl0309ls9byidic0l8drkwnkwcj"))))
25086 (build-system python-build-system)
25087 (arguments
25088 `(#:phases
25089 (modify-phases %standard-phases
25090 (replace 'check
25091 (lambda* (#:key tests? #:allow-other-keys)
25092 (when tests?
25093 (invoke "pytest" "-vv")))))))
25094 (native-inputs
25095 (list python-pytest))
25096 (home-page "https://github.com/asottile/cfgv")
25097 (synopsis "Configuration validation library")
25098 (description
25099 "This library helps to validate configuration files and produce human
25100readable error messages.")
25101 (license license:expat)))
25102
25103(define-public python-commandlines
25104 (package
25105 (name "python-commandlines")
25106 (version "0.4.1")
25107 (source
25108 (origin
25109 (method url-fetch)
25110 (uri (pypi-uri "commandlines" version))
25111 (sha256
25112 (base32
25113 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
25114 (build-system python-build-system)
25115 (home-page "https://github.com/chrissimpkins/commandlines")
25116 (synopsis "Command line argument to object parsing library")
25117 (description
25118 "@code{Commandlines} is a Python library for command line application
25119development that supports command line argument parsing, command string
25120validation testing and application logic.")
25121 (license license:expat)))
25122
25123;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
25124;; python-numba. They have a very unflexible relationship.
25125(define-public python-numba
25126 (package
25127 (name "python-numba")
25128 (version "0.56.4")
25129 (source
25130 (origin
25131 (method url-fetch)
25132 (uri (pypi-uri "numba" version))
25133 (sha256
25134 (base32
25135 "1vlnmirhay8gl36cxa94nvlgs41k9p7vdkp0xzbq65682bsgxn9j"))))
25136 (build-system python-build-system)
25137 (arguments
25138 `(#:phases
25139 (modify-phases %standard-phases
25140 (add-after 'unpack 'disable-proprietary-features
25141 (lambda _
25142 (setenv "NUMBA_DISABLE_HSA" "1")
25143 (setenv "NUMBA_DISABLE_CUDA" "1")))
25144 (add-after 'unpack 'disable-failing-tests
25145 (lambda _
25146 ;; This one test fails because a deprecation warning is printed.
25147 (substitute* "numba/tests/test_import.py"
25148 (("def test_no_accidental_warnings")
25149 "def disabled_test_no_accidental_warnings"))))
25150 (replace 'check
25151 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
25152 (when tests?
25153 (add-installed-pythonpath inputs outputs)
25154 ;; Something is wrong with the PYTHONPATH when running the
25155 ;; tests from the build directory, as it complains about not being
25156 ;; able to import certain modules.
25157 (with-directory-excursion "/tmp"
25158 (setenv "HOME" (getcwd))
25159 (invoke "python3" "-m" "numba.runtests" "-v" "-m"))))))))
25160 (propagated-inputs
25161 (list python-llvmlite python-numpy python-singledispatch))
25162 (native-inputs ;for tests
25163 (list python-jinja2 python-pygments))
25164 (home-page "https://numba.pydata.org")
25165 (synopsis "Compile Python code using LLVM")
25166 (description "Numba gives you the power to speed up your applications with
25167high performance functions written directly in Python. With a few
25168annotations, array-oriented and math-heavy Python code can be just-in-time
25169compiled to native machine instructions, similar in performance to C, C++ and
25170Fortran, without having to switch languages or Python interpreters.
25171
25172Numba works by generating optimized machine code using the LLVM compiler
25173infrastructure at import time, runtime, or statically (using the included pycc
25174tool).")
25175 (license license:bsd-3)))
25176
25177(define-public python-numcodecs
25178 (package
25179 (name "python-numcodecs")
25180 (version "0.10.2")
25181 (source
25182 (origin
25183 (method url-fetch)
25184 (uri (pypi-uri "numcodecs" version))
25185 (sha256
25186 (base32
25187 "1i2rvm1f23dapcf6w3mj4877jzq5f24bhfa0fafbv1nr7xmqr0r2"))
25188 (modules '((guix build utils)))
25189 (snippet
25190 '(begin
25191 (delete-file-recursively "c-blosc")
25192 (for-each delete-file '("numcodecs/blosc.c"
25193 "numcodecs/compat_ext.c"
25194 "numcodecs/lz4.c"
25195 "numcodecs/vlen.c"
25196 "numcodecs/zstd.c"))))))
25197 (build-system pyproject-build-system)
25198 (arguments
25199 (list
25200 #:phases
25201 '(modify-phases %standard-phases
25202 (add-after 'unpack 'disable-avx2
25203 (lambda _
25204 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
25205 (add-after 'unpack 'unbundle
25206 (lambda _
25207 (substitute* "setup.py"
25208 (("sources=sources \\+ blosc_sources,")
25209 "sources=sources,")
25210 (("extra_compile_args=extra_compile_args")
25211 "extra_compile_args=list(base_compile_args)")
25212 (("'numcodecs.zstd',")
25213 "'numcodecs.zstd', libraries=['zstd'], ")
25214 (("'numcodecs.lz4',")
25215 "'numcodecs.lz4', libraries=['lz4'], ")
25216 (("'numcodecs.blosc',")
25217 "'numcodecs.blosc', libraries=['blosc'], "))))
25218 (add-before 'check 'build-extensions
25219 (lambda _
25220 ;; Cython extensions have to be built before running the tests.
25221 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
25222 (inputs
25223 (list c-blosc lz4 zlib
25224 `(,zstd "lib")))
25225 (propagated-inputs
25226 (list python-entrypoints
25227 python-numpy
25228 python-msgpack
25229 python-typing-extensions))
25230 (native-inputs
25231 (list python-cython python-pytest python-setuptools-scm))
25232 (home-page "https://github.com/zarr-developers/numcodecs")
25233 (synopsis "Buffer compression and transformation codecs")
25234 (description
25235 "This Python package provides buffer compression and transformation
25236codecs for use in data storage and communication applications.")
25237 (license license:expat)))
25238
25239(define-public python-asciitree
25240 (package
25241 (name "python-asciitree")
25242 (version "0.3.3")
25243 (source
25244 (origin
25245 (method url-fetch)
25246 (uri (pypi-uri "asciitree" version))
25247 (sha256
25248 (base32
25249 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
25250 (build-system python-build-system)
25251 (home-page "https://github.com/mbr/asciitree")
25252 (synopsis "Draws ASCII trees")
25253 (description "This package draws tree structures using characters.")
25254 (license license:expat)))
25255
25256(define-public python-zarr
25257 (package
25258 (name "python-zarr")
25259 (version "2.13.3")
25260 (source
25261 (origin
25262 (method url-fetch)
25263 (uri (pypi-uri "zarr" version))
25264 (sha256
25265 (base32
25266 "135ls2q7zc98pk61a5cnh88j4hnnavcwasrswdjqyqvcc68b096v"))))
25267 (build-system python-build-system)
25268 (arguments
25269 `(#:phases
25270 (modify-phases %standard-phases
25271 (add-after 'unpack 'disable-service-tests
25272 (lambda _
25273 (setenv "ZARR_TEST_ABS" "0")
25274 (setenv "ZARR_TEST_MONGO" "0")
25275 (setenv "ZARR_TEST_REDIS" "0")
25276 #t))
25277 (replace 'check
25278 (lambda _
25279 (invoke "pytest" "-vv" "-k" "not lmdb")
25280 #t)))))
25281 (propagated-inputs
25282 (list python-asciitree python-fasteners python-numcodecs
25283 python-numpy))
25284 (native-inputs
25285 (list python-pytest python-setuptools-scm))
25286 (home-page "https://github.com/zarr-developers/zarr-python")
25287 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
25288 (description
25289 "This package provides an implementation of chunked, compressed,
25290N-dimensional arrays for Python.")
25291 (license license:expat)))
25292
25293(define-public python-anndata
25294 (package
25295 (name "python-anndata")
25296 (version "0.8.0")
25297 (source
25298 (origin
25299 ;; The tarball from PyPi doesn't include tests.
25300 (method git-fetch)
25301 (uri (git-reference
25302 (url "https://github.com/theislab/anndata")
25303 (commit version)))
25304 (file-name (git-file-name name version))
25305 (sha256
25306 (base32
25307 "0v7npqrg1rdm8jzw22a45c0mqrmsv05r3k88i3lhzi0pzzxca1i1"))))
25308 (build-system pyproject-build-system)
25309 (arguments
25310 (list
25311 #:test-flags
25312 '(list "-k" "not concatenation.rst")
25313 #:phases
25314 #~(modify-phases %standard-phases
25315 ;; Doctests require scanpy from (gnu packages bioinformatics)
25316 (add-after 'unpack 'disable-doctests
25317 (lambda _
25318 (substitute* "pyproject.toml"
25319 (("--doctest-modules") ""))))
25320 (add-before 'build 'set-version
25321 (lambda _
25322 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
25323 (substitute* "anndata/_metadata.py"
25324 (("__version__ =.*")
25325 (string-append "__version__ = \"" #$version "\"\n")))
25326 ;; ZIP does not support timestamps before 1980.
25327 (setenv "SOURCE_DATE_EPOCH" "315532800"))))))
25328 (propagated-inputs
25329 (list python-h5py
25330 python-importlib-metadata
25331 python-natsort
25332 python-numcodecs
25333 python-packaging
25334 python-pandas
25335 python-scipy
25336 python-scikit-learn
25337 python-zarr))
25338 (native-inputs
25339 (list python-boltons
25340 python-joblib
25341 python-pytest
25342 python-toml
25343 python-flit
25344 python-setuptools-scm))
25345 (home-page "https://github.com/theislab/anndata")
25346 (synopsis "Annotated data for data analysis pipelines")
25347 (description "Anndata is a package for simple (functional) high-level APIs
25348for data analysis pipelines. In this context, it provides an efficient,
25349scalable way of keeping track of data together with learned annotations and
25350reduces the code overhead typically encountered when using a mostly
25351object-oriented library such as @code{scikit-learn}.")
25352 (license license:bsd-3)))
25353
25354(define-public python-dill
25355 (package
25356 (name "python-dill")
25357 (version "0.3.6")
25358 (source
25359 (origin
25360 (method url-fetch)
25361 (uri (pypi-uri "dill" version))
25362 (sha256
25363 (base32 "0wr37zwyiprrv29jcc1hl5cla72faiwfs0mhvbxxhmkqd3rmbnz5"))))
25364 (build-system pyproject-build-system)
25365 (arguments
25366 `(#:phases
25367 (modify-phases %standard-phases
25368 (replace 'check
25369 (lambda* (#:key tests? #:allow-other-keys)
25370 (when tests?
25371 (with-directory-excursion "/tmp"
25372 (invoke "nosetests" "-v"))))))))
25373 (native-inputs
25374 (list python-nose))
25375 (home-page "https://pypi.org/project/dill/")
25376 (synopsis "Serialize all of Python")
25377 (description "Dill extends Python's @code{pickle} module for serializing
25378and de-serializing Python objects to the majority of the built-in Python
25379types. Dill provides the user the same interface as the @code{pickle} module,
25380and also includes some additional features. In addition to pickling Python
25381objects, @code{dill} provides the ability to save the state of an interpreter
25382session in a single command. Hence, it would be feasible to save a
25383interpreter session, close the interpreter, ship the pickled file to another
25384computer, open a new interpreter, unpickle the session and thus continue from
25385the saved state of the original interpreter session.")
25386 (license license:bsd-3)))
25387
25388(define-public python-multiprocess
25389 (package
25390 (name "python-multiprocess")
25391 (version "0.70.14")
25392 (source
25393 (origin
25394 (method url-fetch)
25395 (uri (pypi-uri "multiprocess" version))
25396 (sha256
25397 (base32
25398 "0splzd9w9yi42vl7b6mm99vb82jp2adhdrizw1xd4q125z0szp9y"))))
25399 (build-system pyproject-build-system)
25400 (arguments
25401 (list
25402 #:phases
25403 '(modify-phases %standard-phases
25404 (add-after 'unpack 'disable-broken-tests
25405 (lambda _
25406 ;; The "wait_result" and "shared_memory..." tests are broken as
25407 ;; there is no keyboard interrupt.
25408 ;;
25409 ;; The "preload_resources" test fails as it cannot find
25410 ;; mp_preload.py.
25411 (substitute* "py3.10/multiprocess/tests/__init__.py"
25412 (("^(.*)def test_(\
25413wait_result|\
25414shared_memory_SharedMemoryServer_ignores_sigint|\
25415preload_resources\
25416)" line indent)
25417 (string-append indent
25418 "@unittest.skip(\"Disabled by Guix\")\n"
25419 line)))))
25420 (replace 'check
25421 (lambda* (#:key tests? #:allow-other-keys)
25422 (when tests?
25423 (invoke "python" "-m" "multiprocess.tests")))))))
25424 (propagated-inputs
25425 (list python-dill))
25426 (home-page "https://pypi.org/project/multiprocess/")
25427 (synopsis "Multiprocessing and multithreading in Python")
25428 (description
25429 "This package is a fork of the multiprocessing Python package, a package
25430which supports the spawning of processes using the API of the standard
25431library's @code{threading} module.")
25432 (license license:bsd-3)))
25433
25434(define-public python-multiprocessing-on-dill
25435 (package
25436 (name "python-multiprocessing-on-dill")
25437 (version "3.5.0a4")
25438 (source (origin
25439 (method url-fetch)
25440 (uri (pypi-uri "multiprocessing_on_dill" version))
25441 (sha256
25442 (base32
25443 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
25444 (build-system python-build-system)
25445 (arguments
25446 (list
25447 #:phases
25448 #~(modify-phases %standard-phases
25449 (replace 'check
25450 (lambda* (#:key tests? #:allow-other-keys)
25451 (when tests?
25452 (invoke "pytest" "-vv")))))))
25453 (propagated-inputs (list python-dill))
25454 (native-inputs (list python-check-manifest python-pytest python-wheel))
25455 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
25456 (synopsis "Multiprocessing using dill instead of pickle")
25457 (description
25458 "This package provides a friendly fork of multiprocessing which uses dill
25459instead of pickle.")
25460 (license license:psfl)))
25461
25462(define-public python-toolrack
25463 (package
25464 (name "python-toolrack")
25465 (version "3.0.1")
25466 (source
25467 (origin
25468 (method git-fetch)
25469 (uri (git-reference
25470 (url "https://github.com/albertodonato/toolrack")
25471 (commit (string-append "v" version))))
25472 (file-name (git-file-name name version))
25473 (sha256
25474 (base32
25475 "0ych11b7nchnkhqgf7dgivbvn2lzafjsi7nhb1an5zjjyns39gpx"))))
25476 (build-system python-build-system)
25477 (arguments
25478 (list
25479 #:phases
25480 #~(modify-phases %standard-phases
25481 (add-after 'unpack 'patch-/bin/sh
25482 (lambda _
25483 (substitute* "toolrack/aio/tests/test_process.py"
25484 (("/bin/sh")
25485 (which "sh")))))
25486 (replace 'check
25487 (lambda* (#:key tests? #:allow-other-keys)
25488 (when tests?
25489 (invoke "pytest" "-vv" "--pyargs" "toolrack"
25490 "-k"
25491 (string-append
25492 ;; These tests fail for unknown reason comparing the
25493 ;; expected output of shell scripts.
25494 "not test_parse_stderr "
25495 "and not test_parse_no_ending_newline "
25496 "and not test_parse_stdout"))))))))
25497 (native-inputs (list python-pytest python-pytest-asyncio
25498 python-pytest-mock))
25499 (home-page "https://github.com/albertodonato/toolrack")
25500 (synopsis "Collection of Python utility functions and classes")
25501 (description "This package provides a collection of miscellaneous utility
25502functions and classes.")
25503 (license license:lgpl3+)))
25504
25505(define-public python-toolz
25506 (package
25507 (name "python-toolz")
25508 (version "0.11.2")
25509 (source
25510 (origin
25511 (method url-fetch)
25512 (uri (pypi-uri "toolz" version))
25513 (sha256
25514 (base32
25515 "0cxwlh8dz8gq0l0bzchjnqqwhdp261nfd958ppqm518k2mg2scbb"))))
25516 (build-system python-build-system)
25517 (arguments
25518 `(#:phases
25519 (modify-phases %standard-phases
25520 (replace 'check
25521 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
25522 (when tests?
25523 (add-installed-pythonpath inputs outputs)
25524 (invoke "python" "-m" "pytest" "--doctest-modules"
25525 "--pyargs" "toolz")))))))
25526 (native-inputs
25527 (list python-pytest))
25528 (home-page "https://github.com/pytoolz/toolz/")
25529 (synopsis "List processing tools and functional utilities")
25530 (description
25531 "This package provides a set of utility functions for iterators,
25532functions, and dictionaries.")
25533 (license license:bsd-3)))
25534
25535(define-public python-cytoolz
25536 (package
25537 (name "python-cytoolz")
25538 (version "0.11.2")
25539 (source
25540 (origin
25541 (method url-fetch)
25542 (uri (pypi-uri "cytoolz" version))
25543 (sha256
25544 (base32
25545 "1d12mgaippxxhn24w2hj0my3aqkx80fks5g4wzfdsvl0acqnc8za"))
25546 (modules '((guix build utils)))
25547 (snippet
25548 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
25549 (build-system python-build-system)
25550 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
25551 ;; 'exceptions'"
25552 (arguments '(#:tests? #f))
25553 (propagated-inputs
25554 (list python-toolz))
25555 (native-inputs
25556 (list python-cython))
25557 (home-page "https://github.com/pytoolz/cytoolz")
25558 (synopsis "High performance functional utilities")
25559 (description
25560 "The cytoolz package implements the same API as provided by toolz. The
25561main differences are that @code{cytoolz} is faster and cytoolz offers a C API
25562that is accessible to other projects developed in Cython.")
25563 (license license:bsd-3)))
25564
25565(define-public python-sortedcollections
25566 (package
25567 (name "python-sortedcollections")
25568 (version "2.1.0")
25569 (source
25570 (origin
25571 (method url-fetch)
25572 (uri (pypi-uri "sortedcollections" version))
25573 (sha256
25574 (base32
25575 "1kfabpnjyjm5ml2zspry9jy3xq49aybchgaa4ahic2jqdjfn1sfq"))))
25576 (build-system python-build-system)
25577 (propagated-inputs
25578 (list python-sortedcontainers))
25579 (arguments '(#:tests? #f)) ; Tests not included in release tarball.
25580 (home-page "https://www.grantjenks.com/docs/sortedcollections/")
25581 (synopsis "Python Sorted Collections")
25582 (description "Sorted Collections is a Python sorted collections library.")
25583 (license license:asl2.0)))
25584
25585(define-public python-sortedcontainers
25586 (package
25587 (name "python-sortedcontainers")
25588 (version "2.4.0")
25589 (source
25590 (origin
25591 (method url-fetch)
25592 (uri (pypi-uri "sortedcontainers" version))
25593 (sha256
25594 (base32
25595 "126vpywl7aly6zir033a9indgyficlzl68qls61nn2y3djhabji5"))))
25596 (build-system python-build-system)
25597 (arguments
25598 ;; TODO: Circular dependency on pytest.
25599 '(#:tests? #f))
25600 (home-page "https://grantjenks.com/docs/sortedcontainers/")
25601 (synopsis "Sorted List, Sorted Dict, Sorted Set")
25602 (description
25603 "This package provides a sorted collections library, written in
25604pure-Python.")
25605 (license license:asl2.0)))
25606
25607(define python-cloudpickle-testpkg
25608 (package
25609 (name "python-cloudpickle-testpkg")
25610 (version "1.6.0")
25611 (source
25612 (origin
25613 ;; Archive on pypi does not include test infrastructure.
25614 (method git-fetch)
25615 (uri (git-reference
25616 (url "https://github.com/cloudpipe/cloudpickle")
25617 (commit (string-append "v" version))))
25618 (file-name (git-file-name name version))
25619 (sha256
25620 (base32
25621 "1584d21d4rcpryn8yfz0pjnjprk4zm367m0razdcz8cjbsh0dxp6"))))
25622 (build-system python-build-system)
25623 (arguments
25624 '(#:phases
25625 (modify-phases %standard-phases
25626 (add-after 'unpack 'chdir
25627 (lambda _ (chdir "tests/cloudpickle_testpkg"))))))
25628 (home-page "https://github.com/cloudpipe/cloudpickle")
25629 (synopsis "Extended pickling support for Python objects")
25630 (description
25631 "Cloudpickle makes it possible to serialize Python constructs not
25632supported by the default pickle module from the Python standard library. It
25633is especially useful for cluster computing where Python expressions are
25634shipped over the network to execute on remote hosts, possibly close to the
25635data.")
25636 (license license:bsd-3)))
25637
25638(define-public python-cloudpickle
25639 (package
25640 (inherit python-cloudpickle-testpkg)
25641 (name "python-cloudpickle")
25642 (build-system python-build-system)
25643 (arguments
25644 '(#:phases
25645 (modify-phases %standard-phases
25646 (replace 'check
25647 (lambda* (#:key tests? #:allow-other-keys)
25648 (if tests?
25649 (invoke "pytest" "-s" "-vv")
25650 (format #t "test suite not run~%")))))))
25651 (native-inputs
25652 (list ;; For tests.
25653 python-cloudpickle-testpkg python-psutil python-pytest
25654 python-tornado-6))
25655 (home-page "https://github.com/cloudpipe/cloudpickle")
25656 (synopsis "Extended pickling support for Python objects")
25657 (description
25658 "Cloudpickle makes it possible to serialize Python constructs not
25659supported by the default pickle module from the Python standard library. It
25660is especially useful for cluster computing where Python expressions are
25661shipped over the network to execute on remote hosts, possibly close to the
25662data.")
25663 (license license:bsd-3)))
25664
25665(define-public python-locket
25666 (package
25667 (name "python-locket")
25668 (version "1.0.0")
25669 (source
25670 (origin
25671 (method url-fetch)
25672 (uri (pypi-uri "locket" version))
25673 (sha256
25674 (base32
25675 "0cm6290zm3ba62n2x2piy3s8d41hrmffda2nw18ggfwb582lq3aw"))))
25676 (build-system python-build-system)
25677 (home-page "https://github.com/mwilliamson/locket.py")
25678 (synopsis "File-based locks for Python")
25679 (description
25680 "Locket implements a lock that can be used by multiple processes provided
25681they use the same path.")
25682 (license license:bsd-2)))
25683
25684(define-public python-blosc
25685 (package
25686 (name "python-blosc")
25687 (version "1.11.1")
25688 (source
25689 (origin
25690 (method url-fetch)
25691 (uri (pypi-uri "blosc" version))
25692 (sha256
25693 (base32
25694 "0xmjs28sgpnb940zrhw010dq2m9d8a5h4fgnjyk6645fgfr1j8f2"))
25695 (snippet
25696 #~(begin (use-modules (guix build utils))
25697 (delete-file-recursively "blosc/c-blosc")))))
25698 (build-system python-build-system)
25699 (arguments
25700 (list #:phases
25701 #~(modify-phases %standard-phases
25702 (add-after 'unpack 'find-blosc
25703 (lambda* (#:key inputs #:allow-other-keys)
25704 (setenv "USE_SYSTEM_BLOSC" "1")
25705 (setenv "Blosc_ROOT" #$(this-package-input "c-blosc"))))
25706 (replace 'check
25707 (lambda* (#:key tests? #:allow-other-keys)
25708 (when tests?
25709 (invoke "python" "-m" "blosc.test")))))))
25710 (propagated-inputs
25711 (list python-scikit-build python-numpy))
25712 (inputs (list c-blosc))
25713 (native-inputs (list cmake-minimal))
25714 (home-page "https://github.com/blosc/python-blosc")
25715 (synopsis "Python wrapper for the Blosc data compressor library")
25716 (description "Blosc is a high performance compressor optimized for binary
25717data. It has been designed to transmit data to the processor cache faster
25718than the traditional, non-compressed, direct memory fetch approach via a
25719@code{memcpy()} system call.
25720
25721Blosc works well for compressing numerical arrays that contains data with
25722relatively low entropy, like sparse data, time series, grids with
25723regular-spaced values, etc.
25724
25725This Python package wraps the Blosc library.")
25726 (license license:bsd-3)))
25727
25728(define-public python-partd
25729 (package
25730 (name "python-partd")
25731 (version "1.2.0")
25732 (source
25733 (origin
25734 (method url-fetch)
25735 (uri (pypi-uri "partd" version))
25736 (sha256
25737 (base32
25738 "1sy3vdfyyx3bc5590zb7gwpsmimqz8m992x9hsydq8nmhixqjrxa"))))
25739 (build-system python-build-system)
25740 (propagated-inputs
25741 (list python-blosc
25742 python-locket
25743 python-numpy
25744 python-pandas
25745 python-pyzmq
25746 python-toolz))
25747 (home-page "https://github.com/dask/partd/")
25748 (synopsis "Appendable key-value storage")
25749 (description "Partd stores key-value pairs. Values are raw bytes. We
25750append on old values. Partd excels at shuffling operations.")
25751 (license license:bsd-3)))
25752
25753(define-public python-fsspec
25754 (package
25755 (name "python-fsspec")
25756 (version "2023.5.0")
25757 (source
25758 (origin
25759 (method git-fetch)
25760 (uri (git-reference
25761 (url "https://github.com/fsspec/filesystem_spec")
25762 (commit version)))
25763 (file-name (git-file-name name version))
25764 (sha256
25765 (base32
25766 "0c0brw5s4330rj0yjcrqi56hanvaahn43854jai70qzqg1qvyl88"))))
25767 (build-system pyproject-build-system)
25768 (arguments
25769 (list
25770 #:phases
25771 #~(modify-phases %standard-phases
25772 (add-after 'unpack 'fix-version
25773 (lambda _
25774 (substitute* "fsspec/__init__.py"
25775 (("__version__ = .*")
25776 (string-append "__version__ = \"" #$version "\"")))
25777 (substitute* "setup.py"
25778 (("versioneer.get_version\\(\\)")
25779 (string-append "\"" #$version "\""))))))
25780 #:test-flags
25781 '(list
25782 ;; requires internet access
25783 "--ignore=fsspec/implementations/tests/test_dbfs.py")))
25784 (propagated-inputs
25785 (list python-aiohttp python-libarchive-c python-requests python-tqdm))
25786 (native-inputs
25787 (list python-pytest python-pytest-mock python-numpy))
25788 (home-page "https://github.com/intake/filesystem_spec")
25789 (synopsis "File-system specification")
25790 (description "The purpose of this package is to produce a template or
25791specification for a file-system interface, that specific implementations
25792should follow, so that applications making use of them can rely on a common
25793behavior and not have to worry about the specific internal implementation
25794decisions with any given backend.")
25795 (license license:bsd-3)))
25796
25797;; Note: Remember to update python-distributed when updating dask.
25798(define-public python-dask
25799 (package
25800 (name "python-dask")
25801 (version "2023.7.0")
25802 (source
25803 (origin
25804 (method git-fetch)
25805 (uri (git-reference
25806 (url "https://github.com/dask/dask/")
25807 (commit "8523b3bae2ec0183d9d92cc536a3405f15189b7e")))
25808 (file-name (git-file-name name version))
25809 (sha256
25810 (base32 "1x617m0jlc63v938kqga9mhflhac3aj1ylq5mkpf2g9pd9x2hcbz"))))
25811 (build-system pyproject-build-system)
25812 (arguments
25813 (list
25814 ;; Avoid coverage
25815 #:test-flags
25816 #~(list "-m" "not gpu and not slow and not network"
25817 "-k" (string-append
25818 ;; This one cannot be interrupted.
25819 "not test_interrupt"
25820 ;; This one expects a deprecation warning that never
25821 ;; comes.
25822 " and not test_RandomState_only_funcs")
25823 ;; Tests must run from the output directory, because otherwise
25824 ;; it complains about the difference between the target
25825 ;; directory embedded in the pyc files and the source directory
25826 ;; from which we run tests.
25827 (getcwd))
25828 #:phases
25829 #~(modify-phases %standard-phases
25830 (add-after 'unpack 'versioneer
25831 (lambda _
25832 ;; Our version of versioneer needs setup.cfg. This is adapted
25833 ;; from pyproject.toml.
25834 (with-output-to-file "setup.cfg"
25835 (lambda ()
25836 (display "\
25837[versioneer]
25838VCS = git
25839style = pep440
25840versionfile_source = dask/_version.py
25841versionfile_build = dask/_version.py
25842tag_prefix =
25843parentdir_prefix = dask-
25844")))
25845 (invoke "versioneer" "install")
25846 (substitute* "setup.py"
25847 (("versioneer.get_version\\(\\)")
25848 (string-append "\"" #$version "\"")))))
25849 (add-after 'unpack 'fix-pytest-config
25850 (lambda _
25851 ;; This option is not supported by our version of pytest.
25852 (substitute* "pyproject.toml"
25853 (("--cov-config=pyproject.toml") ""))))
25854 (add-before 'check 'pre-check
25855 (lambda _ (chdir "/tmp"))))))
25856 (propagated-inputs
25857 (list python-cloudpickle
25858 python-fsspec
25859 python-importlib-metadata ;needed at runtime for dask/_compatibility.py
25860 python-numpy
25861 python-packaging
25862 python-pandas
25863 python-partd
25864 python-toolz
25865 python-pyyaml))
25866 (native-inputs
25867 (list python-click
25868 python-importlib-metadata
25869 python-pytest python-pytest-runner python-pytest-rerunfailures
25870 python-versioneer))
25871 (home-page "https://github.com/dask/dask/")
25872 (synopsis "Parallel computing with task scheduling")
25873 (description
25874 "Dask is a flexible parallel computing library for analytics. It
25875consists of two components: dynamic task scheduling optimized for computation,
25876and large data collections like parallel arrays, dataframes, and lists that
25877extend common interfaces like NumPy, Pandas, or Python iterators to
25878larger-than-memory or distributed environments. These parallel collections
25879run on top of the dynamic task schedulers.")
25880 (license license:bsd-3)))
25881
25882(define-public python-ilinkedlist
25883 (package
25884 (name "python-ilinkedlist")
25885 (version "0.4.0")
25886 (source
25887 (origin
25888 (method url-fetch)
25889 (uri (pypi-uri "ilinkedlist" version))
25890 (sha256
25891 (base32
25892 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
25893 (build-system python-build-system)
25894 (native-inputs (list python-pytest))
25895 (inputs (list python))
25896 (home-page "https://github.com/luther9/ilinkedlist-py")
25897 (synopsis "Immutable linked list library")
25898 (description
25899 "This is a implementation of immutable linked lists for Python. It
25900contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
25901Since a linked list is treated as immutable, it is hashable, and its length
25902can be retrieved in constant time. Some of the terminology is inspired by
25903LISP. It is possible to create an improper list by creating a @code{Pair}
25904with a non-list @code{cdr}.")
25905 (license license:gpl3+)))
25906
25907(define-public python-readlike
25908 (package
25909 (name "python-readlike")
25910 (version "0.1.3")
25911 (source
25912 (origin
25913 (method url-fetch)
25914 (uri (pypi-uri "readlike" version))
25915 (sha256
25916 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
25917 (build-system python-build-system)
25918 (home-page "https://github.com/jangler/readlike")
25919 (synopsis "GNU Readline-like line editing module")
25920 (description
25921 "This Python module provides line editing functions similar to the default
25922Emacs-style ones of GNU Readline. Unlike the Python standard library's
25923@code{readline} package, this one allows access to those capabilities in settings
25924outside of a standard command-line interface. It is especially well-suited to
25925interfacing with Urwid, due to a shared syntax for describing key inputs.
25926
25927Currently, all stateless Readline commands are implemented. Yanking and history
25928are not supported.")
25929 (license license:expat)))
25930
25931(define-public python-reparser
25932 (package
25933 (name "python-reparser")
25934 (version "1.4.3")
25935 (source
25936 (origin
25937 (method url-fetch)
25938 (uri (pypi-uri "ReParser" version))
25939 (sha256
25940 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
25941 (build-system python-build-system)
25942 (home-page "https://github.com/xmikos/reparser")
25943 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
25944 (description
25945 "This Python library provides a simple lexer/parser for inline markup based
25946on regular expressions.")
25947 (license license:expat)))
25948
25949(define-public python-retrying
25950 (package
25951 (name "python-retrying")
25952 (version "1.3.3")
25953 (source
25954 (origin
25955 (method git-fetch)
25956 (uri (git-reference
25957 (url "https://github.com/rholder/retrying")
25958 (commit (string-append "v" version))))
25959 (file-name (git-file-name name version))
25960 (sha256
25961 (base32
25962 "1kqipkbdaw5s1xg0gi29awm03vp1x8dz24pjidgxagvkvrjpzhi7"))))
25963 (build-system python-build-system)
25964 (propagated-inputs
25965 (list python-six))
25966 (home-page "https://github.com/rholder/retrying")
25967 (synopsis "Library for adding retry behavior")
25968 (description "Retrying is a general-purpose retrying library to simplify
25969the task of adding retry behavior to just about anything.
25970
25971Features:
25972
25973@itemize
25974@item Generic Decorator API.
25975@item Specify stop condition (i.e. limit by number of attempts).
25976@item Specify wait condition (i.e. exponential backoff sleeping between attempts).
25977@item Customize retrying on Exceptions.
25978@item Customize retrying on expected returned result.
25979@end itemize")
25980 (license license:asl2.0)))
25981
25982(define-public python-precis-i18n
25983 (package
25984 (name "python-precis-i18n")
25985 (version "1.0.3")
25986 (source
25987 (origin
25988 (method url-fetch)
25989 (uri (pypi-uri "precis_i18n" version))
25990 (sha256
25991 (base32
25992 "1qfb78zpx565vqkg0xhx75pna9sc35m370vpcz82982c8ix3ypyz"))))
25993 (build-system python-build-system)
25994 (home-page "https://github.com/byllyfish/precis_i18n")
25995 (synopsis "Implementation of the PRECIS framework")
25996 (description
25997 "This module implements the PRECIS Framework as described in RFC 8264,
25998RFC 8265 and RFC 8266.")
25999 (license license:expat)))
26000
26001(define-public python-absl-py
26002 (package
26003 (name "python-absl-py")
26004 (version "1.4.0")
26005 (source
26006 (origin
26007 (method url-fetch)
26008 (uri (pypi-uri "absl-py" version))
26009 (sha256
26010 (base32
26011 "0ga3b0m8lfsv1m3260p83lhis52yvz3d42q8gip4gfj823849hnj"))))
26012 (build-system pyproject-build-system)
26013 (home-page "https://github.com/abseil/abseil-py")
26014 (synopsis "Abseil Python common libraries")
26015 (description
26016 "This package provides the Abseil Python Common Libraries, a collection
26017of Python libraries for building Python applications.")
26018 (license license:asl2.0)))
26019
26020(define-public python-astor
26021 (package
26022 (name "python-astor")
26023 (version "0.8.1")
26024 (source
26025 (origin
26026 (method url-fetch)
26027 (uri (pypi-uri "astor" version))
26028 (sha256
26029 (base32
26030 "0ppscdzzvxpznclkmhhj53iz314x3pfv4yc7c6gwxqgljgdgyvka"))))
26031 (build-system python-build-system)
26032 ;; FIXME: There are two errors and two test failures.
26033 (arguments `(#:tests? #f))
26034 (home-page "https://github.com/berkerpeksag/astor")
26035 (synopsis "Read and write Python ASTs")
26036 (description "Astor is designed to allow easy manipulation of Python
26037source via the Abstract Syntax Tree.")
26038 (license license:bsd-3)))
26039
26040(define-public python-astunparse
26041 (package
26042 (name "python-astunparse")
26043 (version "1.6.3")
26044 (source
26045 (origin
26046 (method url-fetch)
26047 (uri (pypi-uri "astunparse" version))
26048 (sha256
26049 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
26050 (build-system python-build-system)
26051 (arguments '(#:tests? #f)) ; there are none
26052 (propagated-inputs
26053 (list python-six python-wheel))
26054 (home-page "https://github.com/simonpercivall/astunparse")
26055 (synopsis "AST unparser for Python")
26056 (description "This package provides an AST unparser for Python. It is a
26057factored out version of @code{unparse} found in the Python source
26058distribution.")
26059 (license license:bsd-3)))
26060
26061(define-public python-gast
26062 (package
26063 (name "python-gast")
26064 (version "0.5.3")
26065 (source
26066 (origin
26067 (method url-fetch)
26068 (uri (pypi-uri "gast" version))
26069 (sha256
26070 (base32 "1sidaczriw54pfkj3523y9j9q2harrczc1qqgnfaylz641ca5gng"))))
26071 (build-system python-build-system)
26072 (arguments
26073 '(#:phases (modify-phases %standard-phases
26074 (replace 'check
26075 (lambda* (#:key tests? #:allow-other-keys)
26076 (when tests?
26077 (invoke "pytest" "-vv")))))))
26078 (native-inputs
26079 (list python-pytest))
26080 (propagated-inputs
26081 (list python-astunparse))
26082 (home-page "https://github.com/serge-sans-paille/gast/")
26083 (synopsis "Generic Python AST that abstracts the underlying Python version")
26084 (description
26085 "GAST provides a compatibility layer between the AST of various Python
26086versions, as produced by @code{ast.parse} from the standard @code{ast}
26087module.")
26088 (license license:bsd-3)))
26089
26090(define-public python-wikidata
26091 (package
26092 (name "python-wikidata")
26093 (version "0.6.1")
26094 (source
26095 (origin
26096 (method url-fetch)
26097 (uri (pypi-uri "Wikidata" version))
26098 (sha256
26099 (base32
26100 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
26101 (build-system python-build-system)
26102 (propagated-inputs
26103 (list python-babel))
26104 (home-page "https://github.com/dahlia/wikidata")
26105 (synopsis "Wikidata client library")
26106 (description
26107 "This package provides a Python interface to
26108@url{https://www.wikidata.org/, Wikidata}.")
26109 (properties '((upstream-name . "Wikidata")))
26110 (license license:gpl3+)))
26111
26112(define-public python-doctest-ignore-unicode
26113 (package
26114 (name "python-doctest-ignore-unicode")
26115 (version "0.1.2")
26116 (source
26117 (origin
26118 (method url-fetch)
26119 (uri (pypi-uri "doctest-ignore-unicode" version))
26120 (sha256
26121 (base32
26122 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
26123 (build-system python-build-system)
26124 (native-inputs
26125 (list python-nose))
26126 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
26127 (synopsis "Ignore Unicode literal prefixes in doctests")
26128 (description
26129 "This package adds support for a flag to ignore Unicode literal prefixes
26130in doctests.")
26131 (license license:asl2.0)))
26132
26133(define-public python-attr
26134 (package
26135 (name "python-attr")
26136 (version "0.3.1")
26137 (source
26138 (origin
26139 (method url-fetch)
26140 (uri (pypi-uri "attr" version))
26141 (sha256
26142 (base32
26143 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
26144 (build-system python-build-system)
26145 (home-page "https://github.com/denis-ryzhkov/attr")
26146 (synopsis "Decorator for attributes of target function or class")
26147 (description "Simple decorator to set attributes of target function or
26148class in a @acronym{DRY, Don't Repeat Yourself} way.")
26149 (license license:expat)))
26150
26151(define-public python-construct
26152 (package
26153 (name "python-construct")
26154 (version "2.10.68")
26155 (source
26156 (origin
26157 ;; There are no tests in the PyPI tarball.
26158 (method git-fetch)
26159 (uri (git-reference
26160 (url "https://github.com/construct/construct")
26161 (commit (string-append "v" version))))
26162 (file-name (git-file-name name version))
26163 (sha256
26164 (base32 "1b59kq8scxhn9afqgmksk45n53gawylqm8gw3k0vmljg274xi7vf"))))
26165 (build-system python-build-system)
26166 (arguments
26167 (list #:phases
26168 #~(modify-phases %standard-phases
26169 (replace 'check
26170 (lambda* (#:key tests? #:allow-other-keys)
26171 (when tests?
26172 (invoke "pytest" "-v" "tests/")))))))
26173 (native-inputs
26174 (list python-pytest python-pytest-benchmark))
26175 (propagated-inputs
26176 (list python-arrow
26177 python-cloudpickle
26178 python-lz4
26179 python-numpy
26180 python-ruamel.yaml))
26181 (home-page "https://construct.readthedocs.io")
26182 (synopsis "Declarative and symmetrical parser and builder for binary data")
26183 (description
26184 "This package provides both simple, atomic constructs (such as
26185integers of various sizes), as well as composite ones which allow you
26186form hierarchical and sequential structures of increasing complexity.
26187It features bit and byte granularity, easy debugging and testing, an
26188easy-to-extend subclass system, and lots of primitive constructs to
26189make your work easier.")
26190 (license license:expat)))
26191
26192(define-public python-outcome
26193 (package
26194 (name "python-outcome")
26195 (version "1.2.0")
26196 (source
26197 (origin
26198 (method url-fetch)
26199 (uri (pypi-uri "outcome" version))
26200 (sha256
26201 (base32 "0wi6bmsfn73aw1hbpa1nhhshlx9k2vxcl7kp3z7h78sxwhyvv0kg"))))
26202 (build-system python-build-system)
26203 (arguments
26204 `(#:phases
26205 (modify-phases %standard-phases
26206 (replace 'check
26207 (lambda* (#:key inputs outputs #:allow-other-keys)
26208 (add-installed-pythonpath inputs outputs)
26209 (invoke "pytest" "-vv"))))))
26210 (native-inputs
26211 (list python-pytest python-pytest-cov python-pytest-asyncio))
26212 (propagated-inputs
26213 (list python-attrs))
26214 (home-page "https://github.com/python-trio/outcome")
26215 (synopsis "Capture the outcome of Python function calls")
26216 (description
26217 "Capture the outcome of Python function calls. Extracted from the Trio
26218project.")
26219 ;; Either license applies.
26220 (license (list license:expat license:asl2.0))))
26221
26222(define-public python-trio
26223 (package
26224 (name "python-trio")
26225 (version "0.21.0")
26226 (source
26227 (origin
26228 (method url-fetch)
26229 (uri (pypi-uri "trio" version))
26230 (sha256
26231 (base32 "04qwzy4295ajxpns0hrmn3asma80sjpimzpb3i877vwynsvkjgsj"))))
26232 (build-system python-build-system)
26233 (arguments
26234 `(#:phases
26235 (modify-phases %standard-phases
26236 (add-after 'unpack 'patch-sleep
26237 (lambda _
26238 (substitute* "trio/tests/test_subprocess.py"
26239 (("/bin/sleep")
26240 (which "sleep")))))
26241 (add-before 'check 'change-home
26242 (lambda _
26243 ;; Tests require a writable home.
26244 (setenv "HOME" "/tmp")))
26245 (replace 'check
26246 (lambda* (#:key tests? #:allow-other-keys)
26247 (when tests?
26248 (invoke "pytest" "-vv"
26249 "-n" (number->string (parallel-job-count))
26250 "-k"
26251 (string-append
26252 ;; This test times out.
26253 "not test_ki_protection_works"
26254 ;; Assertion errors.
26255 " and not test_guest_mode_ki"
26256 " and not test_run_in_trio_thread_ki"
26257 " and not test_simple_cancel_scope_usage_doesnt_create\
26258_cyclic_garbage"
26259 " and not test_nursery_cancel_doesnt_create_cyclic_garbage"
26260 " and not test_cancel_scope_exit_doesnt_create_cyclic_garbage"
26261 " and not test_locals_destroyed_promptly_on_cancel"
26262 " and not test_ipython_exc_handler"
26263 " and not test_for_leaking_fds"
26264 ;; Signals don’t work in the build sandbox.
26265 " and not test_open_signal_receiver"
26266 ;; These try to raise KeyboardInterrupt which does not work
26267 ;; in the build environment.
26268 " and not test_ki_self"
26269 " and not test_ki_wakes_us_up"
26270 ;; Failure in name resolution.
26271 " and not test_getnameinfo"
26272 " and not test_SocketType_resolve"
26273 ;; OSError: protocol not found.
26274 " and not test_getprotobyname"
26275 ;; EOFError: Ran out of input.
26276 " and not test_static_tool_sees_all_symbols")
26277 "trio/tests")))))))
26278 (native-inputs
26279 (list python-astor
26280 python-ipython
26281 python-jedi
26282 python-pylint
26283 python-pyopenssl
26284 python-pytest
26285 python-pytest-xdist
26286 python-pytest-cov
26287 python-trustme))
26288 (propagated-inputs
26289 (list python-async-generator
26290 python-attrs
26291 python-cffi
26292 python-exceptiongroup
26293 python-idna
26294 python-outcome
26295 python-sniffio
26296 python-sortedcontainers))
26297 (home-page "https://github.com/python-trio/trio")
26298 (synopsis "Friendly Python library for async concurrency and I/O")
26299 (description
26300 "Trio strives to be a production-quality, async/await-native I/O library
26301for Python. Like all async libraries, its main purpose is to help you write
26302programs that do multiple things at the same time with parallelized I/O.")
26303 ;; Either license applies.
26304 (license (list license:expat license:asl2.0))))
26305
26306(define-public python-trio-typing
26307 (package
26308 (name "python-trio-typing")
26309 (version "0.8.0")
26310 (source
26311 (origin
26312 (method url-fetch)
26313 (uri (pypi-uri "trio-typing" version))
26314 (sha256
26315 (base32 "15wa66cs165wawh4pi808ac43n67b8jqddi5ppdcbkj5gfi68hpi"))))
26316 (build-system pyproject-build-system)
26317 (native-inputs (list python-attrs python-pytest))
26318 (propagated-inputs
26319 (list python-mypy python-mypy-extensions python-trio
26320 python-typing-extensions))
26321 (home-page "https://github.com/python-trio/trio-typing")
26322 (synopsis "Static type checking support for Trio and related projects")
26323 (description
26324 "This package provides:
26325
26326@itemize
26327@item PEP 561 typing stubs packages for the Trio project packages:
26328
26329@itemize
26330@item trio (@code{trio-stubs})
26331@item outcome (@code{outcome-stubs})
26332@item async_generator (@code{async_generator-stubs})
26333@end itemize
26334
26335@item A package @code{trio_typing} containing types that Trio programs often
26336want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
26337a mypy plugin that smooths over some limitations in the basic type hints.
26338@end itemize")
26339 ;; Either license applies.
26340 (license (list license:expat license:asl2.0))))
26341
26342(define-public python-trio-websocket
26343 (package
26344 (name "python-trio-websocket")
26345 (version "0.9.2")
26346 (source
26347 (origin
26348 (method git-fetch) ;no tests in pypi archive
26349 (uri (git-reference
26350 (url "https://github.com/HyperionGray/trio-websocket")
26351 (commit version)))
26352 (file-name (git-file-name name version))
26353 (sha256
26354 (base32 "1yk2ak991kbl30xg8ldpggack1lwkizd7s5cpr28ir34z8iyjnpi"))))
26355 (build-system python-build-system)
26356 (arguments
26357 `(#:phases
26358 (modify-phases %standard-phases
26359 (replace 'check
26360 (lambda* (#:key tests? #:allow-other-keys)
26361 (when tests? (invoke "pytest" "-vv")))))))
26362 (native-inputs (list python-pytest python-pytest-trio python-trustme))
26363 (propagated-inputs (list python-async-generator python-trio python-wsproto))
26364 (home-page "https://github.com/HyperionGray/trio-websocket")
26365 (synopsis "WebSocket library for Trio")
26366 (description "This library implements both server and client aspects of
26367the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
26368striving for safety, correctness, and ergonomics. It is based on the
26369@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
26370@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
26371the majority of the WebSocket protocol, including framing, codecs, and events.
26372This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
26373the Trio framework}.")
26374 (license license:expat)))
26375
26376(define-public python-humanize
26377 (package
26378 (name "python-humanize")
26379 (version "0.5.1")
26380 (source
26381 (origin
26382 (method url-fetch)
26383 (uri (pypi-uri "humanize" version))
26384 (sha256
26385 (base32
26386 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
26387 (arguments
26388 '(#:tests? #f)) ; tests not in pypi archive
26389 (build-system python-build-system)
26390 (home-page "https://github.com/jmoiron/humanize")
26391 (synopsis "Print numerical information in a human-readable form")
26392 (description "This package provides a Python module that displays numbers
26393and dates in \"human readable\" forms. For example, it would display
26394\"12345591313\" as \"12.3 billion\".")
26395 (license license:expat)))
26396
26397(define-public python-txaio
26398 (package
26399 (name "python-txaio")
26400 (version "18.8.1")
26401 (source
26402 (origin
26403 (method url-fetch)
26404 (uri (pypi-uri "txaio" version))
26405 (sha256
26406 (base32
26407 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
26408 (build-system python-build-system)
26409 (propagated-inputs
26410 (list python-twisted python-six))
26411 (home-page "https://github.com/crossbario/txaio")
26412 (synopsis "Compatibility layer between Python asyncio and Twisted")
26413 (description "Txaio provides a compatibility layer between the Python
26414@code{asyncio} module and @code{Twisted}.")
26415 (license license:expat)))
26416
26417(define-public python-toolshed
26418 (package
26419 (name "python-toolshed")
26420 (version "0.4.6")
26421 (source
26422 (origin
26423 (method url-fetch)
26424 (uri (pypi-uri "toolshed" version))
26425 (sha256
26426 (base32
26427 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
26428 (build-system python-build-system)
26429 (native-inputs
26430 (list python-nose))
26431 (home-page "https://github.com/brentp/toolshed/")
26432 (synopsis "Collection of modules and functions for working with data")
26433 (description "This is a collection of well-tested, simple modules and
26434functions that aim to reduce boilerplate when working with data.")
26435 (license license:bsd-2)))
26436
26437(define-public python-annoy
26438 (package
26439 (name "python-annoy")
26440 (version "1.15.1")
26441 (source
26442 (origin
26443 (method url-fetch)
26444 (uri (pypi-uri "annoy" version))
26445 (sha256
26446 (base32
26447 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
26448 (build-system python-build-system)
26449 (native-inputs
26450 (list python-nose))
26451 (home-page "https://github.com/spotify/annoy/")
26452 (synopsis "Approximate nearest neighbors library")
26453 (description
26454 "Annoy is a C++ library with Python bindings to search for points in
26455space that are close to a given query point. It also creates large read-only
26456file-based data structures that are @code{mmap}ped into memory so that many
26457processes may share the same data.")
26458 (license license:asl2.0)))
26459
26460(define-public python-croniter
26461 (package
26462 (name "python-croniter")
26463 (version "1.3.4")
26464 (source (origin
26465 (method url-fetch)
26466 (uri (pypi-uri "croniter" version))
26467 (sha256
26468 (base32
26469 "1whbm26m9kpn0klgr9dqiqpp83ki9nhpxifaq9afcjw32rckcs9i"))))
26470 (build-system python-build-system)
26471 (propagated-inputs (list python-dateutil))
26472 (home-page "https://github.com/kiorky/croniter")
26473 (synopsis "Iterate datetime objects with cron-like syntax")
26474 (description
26475 "@code{croniter} provides iteration for datetime object with cron-like
26476format.")
26477 (license license:expat)))
26478
26479(define-public python-crontab
26480 (package
26481 (name "python-crontab")
26482 (version "2.5.1")
26483 (source
26484 (origin
26485 (method url-fetch)
26486 (uri (pypi-uri name version))
26487 (sha256
26488 (base32 "0cccrqc10r8781ba81x8r2frs3pl2m4hkm599k5358ak0xr7xgjb"))))
26489 (build-system python-build-system)
26490 (arguments
26491 ;; Comptability tests fail so they are disabled.
26492 `(#:tests? #f))
26493 (inputs
26494 (list python-dateutil))
26495 (home-page "https://gitlab.com/doctormo/python-crontab/")
26496 (synopsis "Module for reading and writing crontab files")
26497 (description "This Python module can read, write crontab files, and
26498access the system cron automatically and simply using a direct API.")
26499 (license license:lgpl3+)))
26500
26501(define-public python-pylzma
26502 (package
26503 (name "python-pylzma")
26504 (version "0.5.0")
26505 (source
26506 (origin
26507 (method url-fetch)
26508 (uri (pypi-uri "pylzma" version))
26509 (sha256
26510 (base32
26511 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
26512 (build-system python-build-system)
26513 (home-page "https://www.joachim-bauch.de/projects/pylzma/")
26514 (synopsis "Python bindings for the LZMA library by Igor Pavlov")
26515 (description "This package provides Python bindings for the LZMA library
26516by Igor Pavlov.")
26517 (license license:lgpl2.1+)))
26518
26519(define-public python-ifaddr
26520 (package
26521 (name "python-ifaddr")
26522 (version "0.1.7")
26523 (source
26524 (origin
26525 (method url-fetch)
26526 (uri (pypi-uri "ifaddr" version))
26527 (sha256
26528 (base32
26529 "150sxdlicwrphmhnv03ykxplyd2jdrxz0mikgnivavgilrn8m7hz"))))
26530 (build-system python-build-system)
26531 (arguments
26532 `(#:phases
26533 (modify-phases %standard-phases
26534 (replace 'check
26535 (lambda _ (invoke "nosetests"))))))
26536 (native-inputs
26537 (list python-nose))
26538 (home-page "https://github.com/pydron/ifaddr")
26539 (synopsis "Network interface and IP address enumeration library")
26540 (description "This package provides a network interface and IP address
26541enumeration library in Python.")
26542 (license license:expat)))
26543
26544(define-public python-zeroconf
26545 (package
26546 (name "python-zeroconf")
26547 (version "0.38.1")
26548 (source
26549 (origin
26550 (method git-fetch) ; no tests in PyPI release
26551 (uri (git-reference
26552 (url "https://github.com/jstasiak/python-zeroconf")
26553 (commit version)))
26554 (file-name (git-file-name name version))
26555 (sha256
26556 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
26557 (build-system python-build-system)
26558 (arguments
26559 `(#:phases
26560 (modify-phases %standard-phases
26561 (replace 'check
26562 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
26563 (when tests?
26564 (add-installed-pythonpath inputs outputs)
26565 (invoke "python" "-m" "pytest" "-k"
26566 (string-append
26567 ;; Networking isn't available for these tests.
26568 "not test_integration_with_listener_ipv6"
26569 " and not test_launch_and_close_v4_v6"
26570 " and not test_launch_and_close_context_manager"
26571 " and not test_launch_and_close"
26572 " and not test_close_multiple_times"))))))))
26573 (native-inputs
26574 (list python-pytest))
26575 (propagated-inputs
26576 (list python-ifaddr))
26577 (home-page "https://github.com/jstasiak/python-zeroconf")
26578 (synopsis "Pure Python mDNS service discovery")
26579 (description "Pure Python multicast DNS (mDNS) service discovery library
26580(Bonjour/Avahi compatible).")
26581 (license license:lgpl2.1+)))
26582
26583(define-public python-bsddb3
26584 (package
26585 (name "python-bsddb3")
26586 (version "6.2.9")
26587 (source
26588 (origin
26589 (method url-fetch)
26590 (uri (pypi-uri "bsddb3" version))
26591 (sha256
26592 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
26593 (build-system python-build-system)
26594 (inputs
26595 (list bdb))
26596 (arguments
26597 '(#:phases
26598 (modify-phases %standard-phases
26599 (add-after 'unpack 'configure-locations
26600 (lambda* (#:key inputs #:allow-other-keys)
26601 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
26602 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
26603 #t))
26604 (replace 'check
26605 (lambda _
26606 (invoke "python3" "test3.py" "-v"))))))
26607 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
26608 (synopsis "Python bindings for Oracle Berkeley DB")
26609 (description
26610 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
26611C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
26612Transaction objects, and each of these is exposed as a Python type in the
26613bsddb3.db module. The database objects can use various access methods: btree,
26614hash, recno, and queue. Complete support of Berkeley DB distributed
26615transactions. Complete support for Berkeley DB Replication Manager.
26616Complete support for Berkeley DB Base Replication. Support for RPC.")
26617 (license license:bsd-3)))
26618
26619(define-public python-dbfread
26620 (package
26621 (name "python-dbfread")
26622 (version "2.0.7")
26623 (source (origin
26624 (method url-fetch)
26625 (uri (pypi-uri "dbfread" version))
26626 (sha256
26627 (base32
26628 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
26629 (build-system python-build-system)
26630 (native-inputs
26631 (list python-pytest))
26632 (home-page "https://dbfread.readthedocs.io")
26633 (synopsis "Read DBF Files with Python")
26634 (description
26635 "This library reads DBF files and returns the data as native Python data
26636types for further processing. It is primarily intended for batch jobs and
26637one-off scripts.")
26638 (license license:expat)))
26639
26640(define-public python-cached-property
26641 (package
26642 (name "python-cached-property")
26643 (version "1.5.2")
26644 (source
26645 (origin
26646 (method url-fetch)
26647 (uri (pypi-uri "cached-property" version))
26648 (sha256
26649 (base32
26650 "0c51i6yzg6dlq6zhk4c6nv33mg8gv05kkan36k9b5jzf71c7b9cz"))))
26651 (build-system python-build-system)
26652 (arguments
26653 `(#:phases
26654 (modify-phases %standard-phases
26655 ;; https://github.com/pydanny/cached-property/issues/131
26656 ;; recent versions of freezegun break one test
26657 (add-after 'unpack 'disable-broken-test
26658 (lambda _
26659 (substitute* "tests/test_cached_property.py"
26660 (("def test_threads_ttl_expiry\\(self\\)" m)
26661 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
26662 " " m)))
26663 #t)))))
26664 (native-inputs
26665 (list python-freezegun))
26666 (home-page
26667 "https://github.com/pydanny/cached-property")
26668 (synopsis
26669 "Decorator for caching properties in classes")
26670 (description
26671 "This package provides a decorator which makes caching
26672time-or-computationally-expensive properties quick and easy and works in Python
266732 or 3.")
26674 (license license:bsd-3)))
26675
26676(define-public python-folium
26677 (package
26678 (name "python-folium")
26679 (version "0.13.0")
26680 (source
26681 (origin
26682 ;; PyPI has a ".whl" file but not a proper source release.
26683 ;; Thus, fetch code from Git.
26684 (method git-fetch)
26685 (uri (git-reference
26686 (url "https://github.com/python-visualization/folium")
26687 (commit (string-append "v" version))))
26688 (file-name (git-file-name name version))
26689 (sha256
26690 (base32 "00adpdi1890zzzg7ffp04hmx59igdcdpyqa129vnmwqh54b5a006"))))
26691 (build-system python-build-system)
26692 (propagated-inputs
26693 (list python-branca python-jinja2 python-numpy python-requests))
26694 (native-inputs
26695 (list python-pytest))
26696 (home-page "https://github.com/python-visualization/folium")
26697 (synopsis "Make beautiful maps with Leaflet.js & Python")
26698 (description "@code{folium} makes it easy to visualize data that’s been
26699manipulated in Python on an interactive leaflet map. It enables both the
26700binding of data to a map for @code{choropleth} visualizations as well as
26701passing rich vector/raster/HTML visualizations as markers on the map.
26702
26703The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
26704Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
26705supports Image, Video, GeoJSON and TopoJSON overlays.")
26706 (license license:expat)))
26707
26708(define-public python-mercantile
26709 (package
26710 (name "python-mercantile")
26711 (version "1.2.1")
26712 (source
26713 (origin
26714 (method url-fetch)
26715 (uri (pypi-uri "mercantile" version))
26716 (sha256
26717 (base32 "0sxmndhzzrvss5irsgzfrk51k6jihwcb7661992mizdgbnqnsg7s"))))
26718 (build-system python-build-system)
26719 (propagated-inputs (list python-click))
26720 (native-inputs
26721 (list python-check-manifest python-hypothesis python-pytest))
26722 (home-page "https://github.com/mapbox/mercantile")
26723 (synopsis "Web mercator XYZ tile utilities")
26724 (description "The mercantile module provides @code{ul(xtile, ytile, zoom)}
26725and @code{bounds(xtile, ytile, zoom)} functions that respectively return the
26726upper left corner and bounding longitudes and latitudes for XYZ tiles, a
26727@code{xy(lng, lat)} function that returns spherical mercator x and y
26728coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
26729containing a given point, and quadkey conversion functions
26730@code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
26731translating between quadkey and tile coordinates.")
26732 (license license:bsd-3)))
26733
26734(define-public python-xyzservices
26735 (package
26736 (name "python-xyzservices")
26737 (version "2022.4.0")
26738 (source
26739 (origin
26740 (method url-fetch)
26741 (uri (pypi-uri "xyzservices" version))
26742 (sha256
26743 (base32 "1paxv4i0dws85md7csv7pf80jl3xh792mx8rxnsrk61ks3ivbsyg"))))
26744 (build-system python-build-system)
26745 (arguments
26746 '(#:phases
26747 (modify-phases %standard-phases
26748 (replace 'check
26749 (lambda* (#:key tests? #:allow-other-keys)
26750 (when tests?
26751 (invoke "pytest" "-vv")))))))
26752 (native-inputs
26753 (list python-pytest python-mercantile python-requests))
26754 (home-page "https://github.com/geopandas/xyzservices")
26755 (synopsis "Source of XYZ tiles providers")
26756 (description "@code{xyzservices} is a lightweight library providing a
26757repository of available XYZ services offering raster basemap tiles. The
26758repository is provided via Python API and as a compressed JSON file.")
26759 (license license:bsd-3)))
26760
26761(define-public jube
26762 (package
26763 ;; This is a command-line tool, so no "python-" prefix.
26764 (name "jube")
26765 (version "2.2.2")
26766 (source (origin
26767 (method url-fetch)
26768 (uri (string-append
26769 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
26770 version))
26771 (sha256
26772 (base32
26773 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
26774 (file-name (string-append "jube-" version ".tar.gz"))))
26775 (build-system python-build-system)
26776 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
26777 (synopsis "Benchmarking environment")
26778 (description
26779 "JUBE helps perform and analyze benchmarks in a systematic way. For each
26780benchmarked application, benchmark data is stored in a format that allows JUBE
26781to deduct the desired information. This data can be parsed by automatic pre-
26782and post-processing scripts that draw information and store it more densely
26783for manual interpretation.")
26784 (license license:gpl3+)))
26785
26786(define-public python-pyroutelib3
26787 (package
26788 (name "python-pyroutelib3")
26789 (version "1.3.post1")
26790 (source
26791 (origin
26792 (method url-fetch)
26793 (uri (pypi-uri "pyroutelib3" version))
26794 (sha256
26795 (base32
26796 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
26797 (build-system python-build-system)
26798 (propagated-inputs
26799 (list python-dateutil))
26800 (home-page "https://github.com/MKuranowski/pyroutelib3")
26801 (synopsis "Library for simple routing on OSM data")
26802 (description "Library for simple routing on OSM data")
26803 (license license:gpl3+)))
26804
26805(define-public python-bibtexparser
26806 (package
26807 (name "python-bibtexparser")
26808 (version "1.4.0")
26809 (source (origin
26810 (method url-fetch)
26811 (uri (pypi-uri "bibtexparser" version))
26812 (sha256
26813 (base32
26814 "1rmc178qqb8814v3pcfv4qgl8rxmkd11d56limkqmi776jyf4z6a"))))
26815 (build-system python-build-system)
26816 (propagated-inputs (list python-pyparsing))
26817 (native-inputs (list python-future))
26818 (home-page "https://github.com/sciunto-org/python-bibtexparser")
26819 (synopsis "Python library to parse BibTeX files")
26820 (description "BibtexParser is a Python library to parse BibTeX files.")
26821 (license (list license:bsd-3 license:lgpl3))))
26822
26823(define-public python-distro
26824 (package
26825 (name "python-distro")
26826 (version "1.6.0")
26827 (source
26828 (origin
26829 (method url-fetch)
26830 (uri (pypi-uri "distro" version))
26831 (sha256
26832 (base32
26833 "09441261dd3c8b2gv15vhw1cryzg60lmgpkk07v6hpwwkyhfbxc3"))))
26834 (build-system python-build-system)
26835 (native-inputs
26836 (list python-pytest))
26837 (home-page "https://github.com/nir0s/distro")
26838 (synopsis
26839 "OS platform information API")
26840 (description
26841 "@code{distro} provides information about the OS distribution it runs on,
26842such as a reliable machine-readable ID, or version information.
26843
26844It is the recommended replacement for Python's original
26845`platform.linux_distribution` function (which will be removed in Python 3.8).
26846@code{distro} also provides a command-line interface to output the platform
26847information in various formats.")
26848 (license license:asl2.0)))
26849
26850(define-public python-cairosvg
26851 (package
26852 (name "python-cairosvg")
26853 (version "2.5.0")
26854 (source
26855 (origin
26856 (method url-fetch)
26857 (uri (pypi-uri "CairoSVG" version))
26858 (sha256
26859 (base32 "1ylsisha2cc4w0yydxwhy7idkfw1inl9fsipxsrm7vyby080vi9z"))))
26860 (build-system python-build-system)
26861 (arguments
26862 `(#:phases
26863 (modify-phases %standard-phases
26864 (replace 'check
26865 (lambda _ (invoke "pytest"))))))
26866 (propagated-inputs
26867 (list python-cairocffi python-cssselect2 python-defusedxml
26868 python-pillow python-tinycss2))
26869 (native-inputs
26870 (list python-pytest-flake8 python-pytest-isort python-pytest-runner))
26871 (home-page "https://cairosvg.org/")
26872 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
26873 (description "CairoSVG is a SVG converter based on Cairo. It can export
26874SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
26875SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
26876parsed, the result is drawn to a Cairo surface that can be exported to
26877qvarious formats: PDF, PostScript, PNG and even SVG.")
26878 (license license:lgpl3+)))
26879
26880(define-public python-pyphen
26881 (package
26882 (name "python-pyphen")
26883 (version "0.10.0")
26884 (source
26885 (origin
26886 (method url-fetch)
26887 (uri (pypi-uri "Pyphen" version))
26888 (sha256
26889 (base32 "0a1iwrgs4hzwzz60q4i1813kbzimhm0i4q8grh8vqkxhnkgj36vi"))))
26890 (build-system python-build-system)
26891 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
26892 ;; embedded set provided by upstream - like Debian does.
26893 (home-page "https://github.com/Kozea/Pyphen")
26894 (synopsis "Pure Python module to hyphenate text")
26895 (description "Pyphen is a pure Python module to hyphenate text using
26896existing Hunspell hyphenation dictionaries.")
26897 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
26898
26899(define-public python-intelhex
26900 (package
26901 (name "python-intelhex")
26902 (version "2.3.0")
26903 (source
26904 (origin
26905 (method url-fetch)
26906 (uri (pypi-uri "intelhex" version))
26907 (sha256
26908 (base32
26909 "14q04p6qs47ab9w55232ylrdn4wm9rswz36s6x999x0rlxhp6aw9"))))
26910 (build-system python-build-system)
26911 (home-page "https://pypi.org/project/IntelHex/")
26912 (synopsis "Python library for Intel HEX files manipulations")
26913 (description "The Intel HEX file format is widely used in microprocessors
26914and microcontrollers area (embedded systems etc.) as the de facto standard for
26915representation of code to be programmed into microelectronic devices. This
26916package provides an intelhex Python library to read, write, create from
26917scratch and manipulate data from Intel HEX file format. It also includes
26918several convenience Python scripts, including \"classic\" hex2bin and bin2hex
26919converters and more, those based on the library itself.")
26920 (license license:bsd-3)))
26921
26922(define-public python-interlap
26923 (package
26924 (name "python-interlap")
26925 (version "0.2.7")
26926 (source (origin
26927 (method url-fetch)
26928 (uri (pypi-uri "interlap" version))
26929 (sha256
26930 (base32
26931 "1jbfh00bkrf0i5psa6n75rlgmqp5389xixa9j29w8rxhah6g7r1i"))))
26932 (build-system python-build-system)
26933 (home-page "https://brentp.github.io/interlap")
26934 (synopsis "Fast, simple interval overlap testing")
26935 (description "InterLap does fast interval overlap testing with a simple Python data
26936structure.")
26937 (license license:expat)))
26938
26939(define-public python-pykwalify
26940 (package
26941 (name "python-pykwalify")
26942 (version "1.7.0")
26943 (source
26944 (origin
26945 (method url-fetch)
26946 (uri (pypi-uri "pykwalify" version))
26947 (sha256
26948 (base32
26949 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
26950 (build-system python-build-system)
26951 (arguments '(#:tests? #f)) ;missing dependencies
26952 (propagated-inputs
26953 (list python-dateutil python-docopt python-pyyaml))
26954 (home-page "https://github.com/grokzen/pykwalify")
26955 (synopsis
26956 "Python lib/cli for JSON/YAML schema validation")
26957 (description
26958 "This package provides a parser, schema validator, and data binding tool
26959for YAML and JSON.")
26960 (license license:expat)))
26961
26962(define-public python-dbusmock
26963 (package
26964 (name "python-dbusmock")
26965 (version "0.25.0")
26966 (source
26967 (origin
26968 (method url-fetch)
26969 (uri (pypi-uri "python-dbusmock" version))
26970 (sha256
26971 (base32
26972 "1nwl0gzzds2g1w1gfxfzlgrkb5hr1rrdyn619ml25c6b1rjyfk3g"))))
26973 (build-system python-build-system)
26974 (arguments
26975 `(#:imported-modules (,@%python-build-system-modules
26976 (guix build syscalls))
26977 #:modules ((guix build python-build-system)
26978 (guix build syscalls)
26979 (guix build utils)
26980 (ice-9 match))
26981 #:phases
26982 (modify-phases %standard-phases
26983 (add-after 'unpack 'patch-paths
26984 (lambda* (#:key inputs #:allow-other-keys)
26985 (substitute* "tests/test_code.py"
26986 (("/bin/bash") (which "bash")))
26987 (substitute* "dbusmock/testcase.py"
26988 (("'dbus-daemon'")
26989 (string-append "'" (assoc-ref inputs "dbus")
26990 "/bin/dbus-daemon'")))))
26991 (replace 'check
26992 (lambda* (#:key tests? #:allow-other-keys)
26993 (when tests?
26994 (match (primitive-fork)
26995 (0 ;child process
26996 (set-child-subreaper!)
26997 ;; Use tini so that signals are properly handled and
26998 ;; doubly-forked processes get reaped; otherwise,
26999 ;; python-dbusmock would waste time polling for the dbus
27000 ;; processes it spawns to be reaped, in vain.
27001 (execlp "tini" "--" "pytest" "-vv"))
27002 (pid
27003 (match (waitpid pid)
27004 ((_ . status)
27005 (unless (zero? status)
27006 (error "`pytest' exited with status"
27007 status))))))))))))
27008 (native-inputs
27009 (list dbus python-pytest tini which))
27010 (inputs
27011 (list dbus))
27012 (propagated-inputs
27013 (list python-dbus python-pygobject))
27014 (home-page "https://github.com/martinpitt/python-dbusmock")
27015 (synopsis "Python library for mock D-Bus objects")
27016 (description "python-dbusmock allows for the easy creation of mock objects on
27017D-Bus. This is useful for writing tests for software which talks to D-Bus
27018services such as upower, systemd, logind, gnome-session or others, and it is
27019hard (or impossible without root privileges) to set the state of the real
27020services to what you expect in your tests.")
27021 (license license:lgpl3+)))
27022
27023(define-public python-jsonplus
27024 (package
27025 (name "python-jsonplus")
27026 (version "0.8.0")
27027 (home-page "https://github.com/randomir/jsonplus")
27028 (source (origin
27029 (method url-fetch)
27030 (uri (pypi-uri "jsonplus" version))
27031 (sha256
27032 (base32
27033 "05yv3dw813zwas9snz124k2hki49y268b3mx0gj9w7v1nrjmglq1"))))
27034 (build-system python-build-system)
27035 ;; XXX: No tests on PyPI, and the repository has no tags.
27036 (arguments '(#:tests? #f))
27037 (propagated-inputs
27038 (list python-dateutil python-simplejson python-sortedcontainers))
27039 (synopsis "Serialize Python types to/from JSON")
27040 (description
27041 "This package provides functionality to serialize arbitrary data types
27042to and from JSON. Common data types are implemented and it is easy to
27043register custom encoders and decoders.")
27044 (license license:expat)))
27045
27046(define-public python-ujson
27047 (package
27048 (name "python-ujson")
27049 (version "5.7.0")
27050 (source
27051 (origin
27052 (method url-fetch)
27053 (uri (pypi-uri "ujson" version))
27054 (sha256
27055 (base32
27056 "08vvyfyg4qvjy2vxrvc0qix5zmd0j6wd0icvmhc633xfvkayb277"))
27057 (modules '((guix build utils)))
27058 (snippet
27059 '(begin (delete-file-recursively "deps") #t))))
27060 (build-system python-build-system)
27061 (arguments
27062 `(#:phases
27063 (modify-phases %standard-phases
27064 (add-after 'unpack 'link-to-system-double-conversion
27065 (lambda* (#:key inputs #:allow-other-keys)
27066 (let ((d-c (assoc-ref inputs "double-conversion")))
27067 (substitute* "setup.py"
27068 (("./deps/double-conversion/double-conversion\"")
27069 (string-append d-c "/include/double-conversion\""))
27070 (("-lstdc++" stdc)
27071 (string-append "-L" d-c "/lib\","
27072 " \"-ldouble-conversion\","
27073 " \"" stdc)))
27074 #t)))
27075 (replace 'check
27076 (lambda* (#:key inputs outputs #:allow-other-keys)
27077 (add-installed-pythonpath inputs outputs)
27078 (invoke "pytest"))))))
27079 (native-inputs
27080 (list double-conversion python-setuptools-scm python-pytest))
27081 (home-page "https://github.com/ultrajson/ultrajson")
27082 (synopsis "Ultra fast JSON encoder and decoder for Python")
27083 (description
27084 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
27085bindings for Python 3.")
27086 (license license:bsd-3)))
27087
27088(define-public python-iocapture
27089 ;; The latest release is more than a year older than this commit.
27090 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
27091 (revision "1"))
27092 (package
27093 (name "python-iocapture")
27094 (version "0.1.2")
27095 (source
27096 (origin
27097 (method git-fetch)
27098 (uri (git-reference
27099 (url "https://github.com/oinume/iocapture")
27100 (commit commit)))
27101 (file-name (git-file-name name version))
27102 (sha256
27103 (base32
27104 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
27105 (build-system python-build-system)
27106 (arguments
27107 `(#:phases
27108 (modify-phases %standard-phases
27109 (delete 'check)
27110 (add-after 'install 'check
27111 (lambda* (#:key inputs outputs #:allow-other-keys)
27112 (add-installed-pythonpath inputs outputs)
27113 (invoke "py.test" "-v" "tests")
27114 #t)))))
27115 (propagated-inputs
27116 (list python-flexmock python-pytest python-pytest-cov python-six))
27117 (home-page "https://github.com/oinume/iocapture")
27118 (synopsis "Python capturing tool for stdout and stderr")
27119 (description
27120 "This package helps you to capture the standard out (stdout) and the
27121standard error channel (stderr) in your program.")
27122 (license license:expat))))
27123
27124(define-public python-anyio
27125 (package
27126 (name "python-anyio")
27127 (version "3.6.2")
27128 (source
27129 (origin
27130 (method url-fetch)
27131 (uri (pypi-uri "anyio" version))
27132 (sha256
27133 (base32
27134 "08bljjq5xq0l9id36q3vvjgygirq7g7q2bs41hdg82p379khvsi5"))))
27135 (build-system python-build-system)
27136 (arguments
27137 `(#:phases
27138 (modify-phases %standard-phases
27139 (replace 'check
27140 (lambda* (#:key tests? #:allow-other-keys)
27141 (when tests?
27142 (invoke
27143 "pytest" "-vv" "-p" "no:asyncio"
27144 "-m" "not network"
27145 "-k"
27146 (string-append
27147 "not test_is_block_device"
27148
27149 ;; These fail because of network (or specifically IPv6
27150 ;; network) access (see:
27151 ;; https://github.com/agronholm/anyio/issues/417).
27152 " and not test_accept"
27153 " and not test_accept_after_close"
27154 " and not test_close_during_receive"
27155 " and not test_close_from_other_task"
27156 " and not test_concurrent_receive"
27157 " and not test_concurrent_send"
27158 " and not test_connect_tcp_with_tls"
27159 " and not test_connect_tcp_with_tls_cert_check_fail"
27160 " and not test_connection_refused"
27161 " and not test_extra_attributes"
27162 " and not test_getaddrinfo"
27163 " and not test_getnameinfo"
27164 " and not test_happy_eyeballs"
27165 " and not test_iterate"
27166 " and not test_receive_after_close"
27167 " and not test_receive_timeout"
27168 " and not test_reuse_port"
27169 " and not test_run_process"
27170 " and not test_send_after_close"
27171 " and not test_send_after_eof"
27172 " and not test_send_after_peer_closed"
27173 " and not test_send_eof"
27174 " and not test_send_large_buffer"
27175 " and not test_send_receive"
27176 " and not test_socket_options"
27177 " and not test_unretrieved_future_exception_server_crash"))))))))
27178 (propagated-inputs
27179 (list python-contextvars
27180 python-dataclasses
27181 python-idna
27182 python-sniffio
27183 python-typing-extensions))
27184 (native-inputs
27185 (list python-contextlib2
27186 python-coverage
27187 python-hypothesis
27188 python-mock
27189 python-pytest
27190 python-pytest-mock
27191 python-setuptools-scm
27192 python-trio
27193 python-trustme
27194 python-uvloop))
27195 (home-page "https://github.com/agronholm/anyio")
27196 (synopsis "Compatibility layer for multiple asynchronous event loops")
27197 (description
27198 "AnyIO is an asynchronous networking and concurrency library that works
27199on top of either asyncio or trio. It implements trio-like structured
27200concurrency on top of asyncio, and works in harmony with the native SC of trio
27201itself.")
27202 (license license:expat)))
27203
27204(define-public python-argh
27205 ;; There are 21 commits since the latest release containing important
27206 ;; improvements.
27207 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
27208 (revision "1"))
27209 (package
27210 (name "python-argh")
27211 (version (git-version "0.26.2" revision commit))
27212 (source
27213 (origin
27214 (method git-fetch)
27215 (uri (git-reference
27216 (url "https://github.com/neithere/argh")
27217 (commit commit)))
27218 (file-name (git-file-name name version))
27219 (sha256
27220 (base32
27221 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
27222 (build-system python-build-system)
27223 (arguments
27224 '(#:phases
27225 (modify-phases %standard-phases
27226 (add-after 'unpack 'patch-tests
27227 (lambda _
27228 ;; Fix test failures on Python 3.9.9+.
27229 ;; Taken via <https://github.com/neithere/argh/issues/148>.
27230 (substitute* "test/test_integration.py"
27231 (("assert run\\(p, '(bar|orig-name|nest bar)', exit=True\\)\
27232\\.startswith\\('invalid choice'\\)" _ name)
27233 (string-append "assert 'invalid choice' in \
27234run(p, '" name "', exit=True)")))))
27235 (replace 'check
27236 (lambda* (#:key tests? #:allow-other-keys)
27237 (when tests?
27238 (invoke "pytest" "-vv")))))))
27239 (propagated-inputs
27240 (list python-iocapture python-mock python-pytest python-pytest-cov
27241 python-pytest-xdist))
27242 (home-page "https://github.com/neithere/argh/")
27243 (synopsis "Argparse wrapper with natural syntax")
27244 (description
27245 "python-argh is a small library that provides several layers of
27246abstraction on top of @code{python-argparse}. The layers can be mixed. It is
27247always possible to declare a command with the highest possible (and least
27248flexible) layer and then tune the behaviour with any of the lower layers
27249including the native API of @code{python-argparse}.")
27250 (license license:lgpl3+))))
27251
27252(define-public python-ppft
27253 (package
27254 (name "python-ppft")
27255 (version "1.6.6.1")
27256 (source
27257 (origin
27258 (method url-fetch)
27259 (uri (pypi-uri "ppft" version))
27260 (sha256
27261 (base32
27262 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
27263 (build-system python-build-system)
27264 (arguments '(#:tests? #f)) ; there are none
27265 (propagated-inputs
27266 (list python-six))
27267 (home-page "https://pypi.org/project/ppft/")
27268 (synopsis "Fork of Parallel Python")
27269 (description
27270 "This package is a fork of Parallel Python. The Parallel Python
27271module (@code{pp}) provides an easy and efficient way to create
27272parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
27273computers and clusters. It features cross-platform portability and dynamic
27274load balancing.")
27275 (license license:bsd-3)))
27276
27277(define-public python-pox
27278 (package
27279 (name "python-pox")
27280 (version "0.2.7")
27281 (source
27282 (origin
27283 (method url-fetch)
27284 (uri (pypi-uri "pox" version))
27285 (sha256
27286 (base32
27287 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
27288 (build-system python-build-system)
27289 (arguments
27290 `(#:phases
27291 (modify-phases %standard-phases
27292 (replace 'check
27293 (lambda _
27294 (mkdir-p "/tmp/guix")
27295 (setenv "SHELL" "bash")
27296 (setenv "USERNAME" "guix")
27297 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
27298 (invoke "py.test" "-vv")
27299 #t)))))
27300 (native-inputs
27301 (list python-pytest which))
27302 (home-page "https://pypi.org/project/pox/")
27303 (synopsis "Python utilities for file system exploration and automated builds")
27304 (description
27305 "Pox provides a collection of utilities for navigating and manipulating
27306file systems. This module is designed to facilitate some of the low-level
27307operating system interactions that are useful when exploring a file system on a
27308remote host. Pox provides Python equivalents of several shell commands such
27309as @command{which} and @command{find}. These commands allow automated
27310discovery of what has been installed on an operating system, and where the
27311essential tools are located.")
27312 (license license:bsd-3)))
27313
27314(define-public python-pathos
27315 (package
27316 (name "python-pathos")
27317 (version "0.2.5")
27318 (source
27319 (origin
27320 (method url-fetch)
27321 (uri (pypi-uri "pathos" version))
27322 (sha256
27323 (base32
27324 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
27325 (build-system python-build-system)
27326 (arguments
27327 '(#:phases
27328 (modify-phases %standard-phases
27329 (replace 'check
27330 (lambda _
27331 (invoke "python" "./tests/__main__.py"))))))
27332 (propagated-inputs
27333 (list python-dill python-multiprocess python-pox python-ppft))
27334 (native-inputs
27335 (list python-pytest))
27336 (home-page "https://pypi.org/project/pathos/")
27337 (synopsis
27338 "Parallel graph management and execution in heterogeneous computing")
27339 (description
27340 "Python-pathos is a framework for heterogeneous computing. It provides a
27341consistent high-level interface for configuring and launching parallel
27342computations across heterogeneous resources. Python-pathos provides configurable
27343launchers for parallel and distributed computing, where each launcher contains
27344the syntactic logic to configure and launch jobs in an execution environment.")
27345 (license license:bsd-3)))
27346
27347(define-public python-flit
27348 (package
27349 (name "python-flit")
27350 (version "3.8.0") ;same as python-flit-core
27351 (source
27352 (origin
27353 (method url-fetch)
27354 (uri (pypi-uri "flit" version))
27355 (sha256
27356 (base32 "0dz9sp2zlhkmk6sm5gapbbb30f7xq3n3jn5zxx5pkp25ppsaiwnh"))))
27357 (build-system pyproject-build-system)
27358 (arguments
27359 (list
27360 #:test-flags
27361 ;; These tests fail when FLIT_NO_NETWORK is set
27362 '(list "-k" "not test_invalid_classifier \
27363and not test_install_requires \
27364and not test_install_requires_extra \
27365and not test_validate_classifiers_private")
27366 #:phases
27367 #~(modify-phases %standard-phases
27368 (add-before 'check 'pre-check
27369 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
27370 (when tests?
27371 (setenv "HOME" "/tmp")
27372 (setenv "FLIT_NO_NETWORK" "1")))))))
27373 (propagated-inputs
27374 (list python-pypa-build
27375 python-tomli-w
27376 python-flit-core
27377 python-docutils
27378 python-requests))
27379 (native-inputs
27380 (list python-responses
27381 python-pygments-github-lexers
27382 python-pytest
27383 python-pytest-cov
27384 python-sphinx
27385 python-sphinxcontrib-github-alt
27386 python-testpath))
27387 (home-page "https://flit.readthedocs.io/")
27388 (synopsis "Simple packaging tool for simple packages")
27389 (description "Flit is a simple way to put Python packages and modules on
27390PyPI. Flit packages a single importable module or package at a time, using
27391the import name as the name on PyPI. All subpackages and data files within a
27392package are included automatically.")
27393 (license license:bsd-3)))
27394
27395(define-public python-pathtools
27396 (package
27397 (name "python-pathtools")
27398 (version "0.1.2")
27399 (source
27400 (origin
27401 (method url-fetch)
27402 (uri (pypi-uri "pathtools" version))
27403 (sha256
27404 (base32
27405 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
27406 (build-system python-build-system)
27407 (home-page
27408 "https://github.com/gorakhargosh/pathtools")
27409 (synopsis "Path utilities for Python")
27410 (description "Pattern matching and various utilities for file systems
27411paths.")
27412 (license license:expat)))
27413
27414(define-public python-fastentrypoints
27415 (package
27416 (name "python-fastentrypoints")
27417 (version "0.12")
27418 (source
27419 (origin
27420 (method url-fetch)
27421 (uri (pypi-uri "fastentrypoints" version))
27422 (sha256
27423 (base32
27424 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
27425 (build-system python-build-system)
27426 (home-page
27427 "https://github.com/ninjaaron/fast-entry_points")
27428 (synopsis
27429 "Makes entry_points specified in setup.py load more quickly")
27430 (description
27431 "Using entry_points in your setup.py makes scripts that start really
27432slowly because it imports pkg_resources. This package allows such setup
27433scripts to load entry points more quickly.")
27434 (license license:bsd-3)))
27435
27436(define-public python-funcparserlib
27437 (package
27438 (name "python-funcparserlib")
27439 (version "1.0.1")
27440 (source
27441 (origin
27442 ;; Source tarball on PyPi lacks tests.
27443 (method git-fetch)
27444 (uri (git-reference
27445 (url "https://github.com/vlasovskikh/funcparserlib")
27446 (commit version)))
27447 (file-name (git-file-name name version))
27448 (sha256
27449 (base32 "0dw3i4fyf3j9h1l7xfgs99fc2w2axk6xqk0sdag43k444ss4hkrc"))))
27450 (build-system pyproject-build-system)
27451 (arguments
27452 '(#:phases
27453 (modify-phases %standard-phases
27454 (replace 'check
27455 (lambda* (#:key tests? #:allow-other-keys)
27456 (when tests?
27457 (invoke "python" "-m" "unittest" "discover" "-v")))))))
27458 ;; ModuleNotFoundError: No module named 'poetry'
27459 (native-inputs (list python-poetry-core))
27460 (home-page "https://github.com/vlasovskikh/funcparserlib")
27461 (synopsis
27462 "Recursive descent parsing library based on functional combinators")
27463 (description
27464 "This package is a recursive descent parsing library for Python based on
27465functional combinators. Parser combinators are just higher-order functions
27466that take parsers as their arguments and return them as result values.")
27467 (license license:expat)))
27468
27469(define-public python-speg
27470 (package
27471 (name "python-speg")
27472 (version "0.3")
27473 (source
27474 (origin
27475 (method url-fetch)
27476 (uri (pypi-uri "speg" version ".zip"))
27477 (sha256
27478 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
27479 (arguments
27480 `(#:tests? #f)) ;FIXME: tests fail, not sure why
27481 (native-inputs
27482 (list unzip))
27483 (build-system python-build-system)
27484 (home-page "https://github.com/avakar/speg")
27485 (synopsis "PEG-based parser interpreter with memoization")
27486 (description "This package is a PEG-based parser and interpreter with
27487memoization.")
27488 (license license:expat)))
27489
27490(define-public python-cson
27491 (package
27492 (name "python-cson")
27493 (version "0.8")
27494 (source
27495 (origin
27496 (method url-fetch)
27497 (uri (pypi-uri "cson" version))
27498 (sha256
27499 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
27500 (build-system python-build-system)
27501 (propagated-inputs
27502 (list python-speg))
27503 (home-page "https://github.com/avakar/pycson")
27504 (synopsis "Parser for Coffeescript Object Notation (CSON)")
27505 (description "This package is a parser for Coffeescript Object
27506Notation (CSON).")
27507 (license license:expat)))
27508
27509(define-public python-aionotify
27510 (package
27511 (name "python-aionotify")
27512 (version "0.2.0")
27513 (source
27514 (origin
27515 ;; Source tarball on PyPi lacks tests
27516 (method git-fetch)
27517 (uri (git-reference
27518 (url "https://github.com/rbarrois/aionotify")
27519 (commit (string-append "v" version))))
27520 (file-name (git-file-name name version))
27521 (sha256
27522 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))
27523 (patches (search-patches "python-aionotify-0.2.0-py3.8.patch"))))
27524 (build-system python-build-system)
27525 (home-page "https://github.com/rbarrois/aionotify")
27526 (synopsis "Asyncio-powered inotify library")
27527 (description
27528 "@code{aionotify} is a simple, asyncio-based inotify library.")
27529 (license license:bsd-3)))
27530
27531(define-public python-forbiddenfruit
27532 (package
27533 (name "python-forbiddenfruit")
27534 (version "0.1.3")
27535 (source
27536 (origin
27537 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
27538 (method git-fetch)
27539 (uri (git-reference
27540 (url "https://github.com/clarete/forbiddenfruit")
27541 (commit version)))
27542 (file-name (git-file-name name version))
27543 (sha256
27544 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
27545 (build-system python-build-system)
27546 (arguments
27547 '(#:phases
27548 (modify-phases %standard-phases
27549 (replace 'check
27550 (lambda _
27551 (invoke "make" "SKIP_DEPS=1"))))))
27552 (native-inputs
27553 (list python-nose python-coverage))
27554 (home-page "https://github.com/clarete/forbiddenfruit")
27555 (synopsis "Patch python built-in objects")
27556 (description "This project allows Python code to extend built-in types.")
27557 (license (list license:gpl3+ license:expat))))
27558
27559(define-public python-k5test
27560 (package
27561 (name "python-k5test")
27562 (version "0.10.3")
27563 (source
27564 (origin
27565 (method url-fetch)
27566 (uri (pypi-uri "k5test" version))
27567 (sha256
27568 (base32
27569 "07sp9hc6nkbgzywvr2ivcik03wibs6gmxm1k33l1b8v3mnyfx7cw"))))
27570 (build-system python-build-system)
27571 (propagated-inputs
27572 (list python-six
27573 ;; `which`, `kadmin.local` binaries called inside library
27574 which mit-krb5))
27575 (native-inputs (list mit-krb5))
27576 (arguments
27577 '(#:phases
27578 (modify-phases %standard-phases
27579 (add-after 'unpack 'apply-upstream-fixes
27580 (lambda* _
27581 (substitute* "k5test/realm.py"
27582 ;; Upstream commit f6b302d94dbdce37a1b81cc3faeeac4dc637b0e9.
27583 (("'kadmin_local'") "'kadmin.local'")
27584 ;; Upstream commit 3aef84515cf3d1a171c66856c898d0a5cbbd03ea.
27585 (("\\.stop_daemon") "._stop_daemon")))))))
27586 (home-page "https://github.com/pythongssapi/k5test")
27587 (synopsis "Library for setting up self-contained Kerberos 5 environments")
27588 (description
27589 "@code{k5test} is a library for setting up self-contained Kerberos 5
27590environments, and running Python unit tests inside those environments. It is
27591based on the file of the same name found alongside the MIT Kerberos 5 unit
27592tests.")
27593 (license license:isc)))
27594
27595(define-public python-gssapi
27596 (package
27597 (name "python-gssapi")
27598 (version "1.8.2")
27599 (source
27600 (origin
27601 (method url-fetch)
27602 (uri (pypi-uri "gssapi" version))
27603 (sha256
27604 (base32
27605 "16n86nr19s95czvc1a9mdhs1kiq77qkcjp2c1rk5h4f93h10m3mp"))))
27606 (build-system python-build-system)
27607 (propagated-inputs
27608 (list python-decorator python-six))
27609 (inputs
27610 (list mit-krb5))
27611 ;; for tests
27612 (native-inputs
27613 (list python-parameterized python-k5test python-nose
27614 python-cython))
27615 (home-page "https://github.com/pythongssapi/python-gssapi")
27616 (synopsis "Python GSSAPI Wrapper")
27617 (description
27618 "Python-GSSAPI provides both low-level and high level wrappers around the
27619GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
27620also be usable with other GSSAPI mechanisms.")
27621 (license license:isc)))
27622
27623(define-public python-check-manifest
27624 (package
27625 (name "python-check-manifest")
27626 (version "0.49")
27627 (source
27628 (origin
27629 (method url-fetch)
27630 (uri (pypi-uri "check-manifest" version))
27631 (sha256
27632 (base32
27633 "05plc1835zz1w1k7wpf2n6jir71ds1w7nz3535lj5ks2am2419k4"))))
27634 (build-system pyproject-build-system)
27635 (arguments
27636 '(;; This test requires setting up a venv which does not work
27637 ;; properly in the build environment.
27638 #:test-flags '("-k" "not test_build_sdist_pep517_isolated")
27639 #:phases
27640 (modify-phases %standard-phases
27641 ;; Tests use git submodule commands over the file transport, which
27642 ;; has been disabled in git, see CVE-2022-39253. Enable these
27643 ;; commands to allow checks to succeed.
27644 (add-before 'check 'allow-git-submodule-add
27645 (lambda _
27646 (setenv "HOME" "/tmp")
27647 (invoke "git" "config" "--global"
27648 "protocol.file.allow" "always"))))))
27649 (native-inputs
27650 (list git-minimal/pinned python-pytest))
27651 (propagated-inputs
27652 (list python-pypa-build python-setuptools))
27653 (home-page "https://github.com/mgedmin/check-manifest")
27654 (synopsis "Check MANIFEST.in in a Python source package for completeness")
27655 (description "Python package can include a MANIFEST.in file to help with
27656sending package files to the Python Package Index. This package checks that
27657file to ensure it completely and accurately describes your project.")
27658 (license license:expat)))
27659
27660(define-public python-android-stringslib
27661 (package
27662 (name "python-android-stringslib")
27663 (version "0.1.2")
27664 (source
27665 (origin
27666 (method git-fetch)
27667 (uri (git-reference
27668 (url "https://framagit.org/tyreunom/python-android-strings-lib")
27669 (commit (string-append "v" version))))
27670 (file-name (git-file-name name version))
27671 (sha256
27672 (base32
27673 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
27674 (build-system python-build-system)
27675 (arguments
27676 `(#:tests? #f))
27677 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
27678 (synopsis "Android strings.xml support")
27679 (description "Android Strings Lib provides support for android's strings.xml
27680files. These files are used to translate strings in android apps.")
27681 (license license:expat)))
27682
27683(define-public python-watchdog
27684 (package
27685 (name "python-watchdog")
27686 (version "2.1.6")
27687 (source
27688 (origin
27689 (method url-fetch)
27690 (uri (pypi-uri "watchdog" version))
27691 (sha256
27692 (base32 "1rx2nyl0cyj0v4ja795cl3gi26577c5wg48syr3byz3ndkgpavm3"))))
27693 (build-system python-build-system)
27694 (arguments
27695 `(#:phases
27696 (modify-phases %standard-phases
27697 (replace 'check
27698 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
27699 (when tests?
27700 (add-installed-pythonpath inputs outputs)
27701 (invoke "python" "-m" "pytest" "-k"
27702 ;; This test failed.
27703 "not test_kill_auto_restart")))))))
27704 (propagated-inputs
27705 (list python-pathtools python-pyyaml))
27706 (native-inputs
27707 (list python-pytest-cov python-pytest-timeout))
27708 (home-page "https://github.com/gorakhargosh/watchdog")
27709 (synopsis "File system events monitoring")
27710 (description "This package provides a way to monitor file system events
27711such as a file modification and trigger an action. This is similar to inotify,
27712but portable.")
27713 (license license:asl2.0)))
27714
27715(define-public python-watchgod
27716 (package
27717 (name "python-watchgod")
27718 (version "0.8.1")
27719 (source
27720 (origin
27721 ;; There are no tests in the PyPI tarball.
27722 (method git-fetch)
27723 (uri (git-reference
27724 (url "https://github.com/samuelcolvin/watchgod")
27725 (commit (string-append "v" version))))
27726 (file-name (git-file-name name version))
27727 (sha256
27728 (base32 "0zm9xd2qf3d74l67yv8j3zhhhvi0vp25vhkg46l9d7flh9m04qrp"))))
27729 (build-system pyproject-build-system)
27730 (arguments
27731 (list #:test-flags '(list "-o" "asyncio_mode=auto"
27732 ;; PytestUnraisableExceptionWarning
27733 "-k" "not test_watch_log and not test_awatch")))
27734 (native-inputs
27735 (list python-anyio
27736 python-coverage
27737 python-pygments
27738 python-pytest
27739 python-pytest-asyncio
27740 python-pytest-cov
27741 python-pytest-mock
27742 python-pytest-sugar
27743 python-pytest-toolbox))
27744 (home-page "https://github.com/samuelcolvin/watchgod")
27745 (synopsis "Simple, modern file watching and code reload in Python")
27746 (description
27747 "Simple, modern file watching and code reload in Python inspired by
27748@code{watchdog}. Among the differences are a unified approach for each
27749operating systems and an elegant approach to concurrency using threading.")
27750 (license license:expat)))
27751
27752(define-public python-wget
27753 (package
27754 (name "python-wget")
27755 (version "3.2")
27756 (source
27757 (origin
27758 (method url-fetch)
27759 (uri (pypi-uri "wget" version ".zip"))
27760 (sha256
27761 (base32
27762 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
27763 (build-system python-build-system)
27764 (native-inputs (list unzip))
27765 (home-page "https://bitbucket.org/techtonik/python-wget/")
27766 (synopsis "Pure Python download utility")
27767 (description "The python-wget library provides an API to download files
27768with features similar to the @command{wget} utility.")
27769 (license license:unlicense)))
27770
27771(define-public offlate
27772 (package
27773 (name "offlate")
27774 (version "0.6.1")
27775 (source
27776 (origin
27777 (method git-fetch)
27778 (uri (git-reference
27779 (url "https://framagit.org/tyreunom/offlate")
27780 (commit version)))
27781 (file-name (git-file-name name version))
27782 (sha256
27783 (base32
27784 "1sx5cv8pamyw1m089b6x8ykaxdkx26jk9cblhbzlf0m3ckz52jik"))))
27785 (build-system python-build-system)
27786 (arguments
27787 ;; No tests
27788 `(#:tests? #f
27789 #:phases
27790 (modify-phases %standard-phases
27791 (add-before 'build 'generate-fonts
27792 (lambda _
27793 (invoke "make" "fonts")))
27794 (add-before 'build 'generate-translations
27795 (lambda _
27796 (invoke "make" "update-langs"))))))
27797 (propagated-inputs
27798 (list python-android-stringslib
27799 python-dateutil
27800 python-gitlab
27801 python-lxml
27802 python-polib
27803 python-pycountry
27804 python-pyenchant
27805 python-pygit2
27806 python-pygithub
27807 python-pyqt
27808 python-requests
27809 python-ruamel.yaml
27810 python-translate-toolkit
27811 python-translation-finder
27812 python-watchdog))
27813 (native-inputs
27814 (list qttools-5 fontforge))
27815 (home-page "https://framagit.org/tyreunom/offlate")
27816 (synopsis "Offline translation interface for online translation tools")
27817 (description "Offlate offers a unified interface for different translation
27818file formats, as well as many different online translation platforms. You can
27819use it to get work from online platforms, specialized such as the Translation
27820Project, or not such a gitlab instance when your upstream doesn't use any
27821dedicated platform. The tool proposes a unified interface for any format and
27822an upload option to send your work back to the platform.")
27823 (license license:gpl3+)))
27824
27825(define-public python-titlecase
27826 (package
27827 (name "python-titlecase")
27828 (version "2.4")
27829 (source
27830 (origin
27831 (method url-fetch)
27832 (uri (pypi-uri "titlecase" version))
27833 (sha256
27834 (base32
27835 "00h92jdpj108z4sb6dpayfblpax20698290jnbyi5z5iwk5974i6"))))
27836 (build-system python-build-system)
27837 (home-page "https://github.com/ppannuto/python-titlecase")
27838 (synopsis "Capitalize strings similar to book titles")
27839 (description
27840 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
27841It capitalizes (predominantly English) strings in a way that is similar to
27842book titles, using the New York Times Manual of Style to leave certain words
27843lowercase.")
27844 (license license:expat)))
27845
27846(define-public python-pypng
27847 (package
27848 (name "python-pypng")
27849 (version "0.0.20")
27850 (source
27851 (origin
27852 (method url-fetch)
27853 (uri (pypi-uri "pypng" version))
27854 (sha256
27855 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
27856 (build-system python-build-system)
27857 (home-page "https://github.com/drj11/pypng")
27858 (synopsis "Pure Python PNG image encoder/decoder")
27859 (description
27860 "The PyPNG module implements support for PNG images. It reads and writes
27861PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
27862pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
27863LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
27864images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
27865A number of optional chunks can be specified (when writing) and
27866understood (when reading): tRNS, bKGD, gAMA.
27867
27868PyPNG is not a high level toolkit for image processing (like PIL) and does not
27869aim at being a replacement or competitor. Its strength lies in fine-grained
27870extensive support of PNG features. It can also read and write Netpbm PAM
27871files, with a focus on its use as an intermediate format for implementing
27872custom PNG processing.")
27873 (license license:expat)))
27874
27875(define-public python-fuzzywuzzy
27876 (package
27877 (name "python-fuzzywuzzy")
27878 (version "0.18.0")
27879 (source
27880 (origin
27881 (method url-fetch)
27882 (uri (pypi-uri "fuzzywuzzy" version))
27883 (sha256
27884 (base32
27885 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
27886 (build-system python-build-system)
27887 (native-inputs
27888 (list python-hypothesis python-pycodestyle python-pytest))
27889 (propagated-inputs
27890 (list python-levenshtein))
27891 (home-page "https://github.com/seatgeek/fuzzywuzzy")
27892 (synopsis "Fuzzy string matching in Python")
27893 (description "Approximate string matching using
27894@emph{Levenshtein Distance} to calculate the differences between
27895sequences.")
27896 (license license:gpl2)))
27897
27898(define-public python-block-tracing
27899 (package
27900 (name "python-block-tracing")
27901 (version "1.0.1")
27902 (source
27903 (origin
27904 (method url-fetch)
27905 (uri (pypi-uri "block_tracing" version))
27906 (sha256
27907 (base32
27908 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
27909 (build-system python-build-system)
27910 (arguments '(#:tests? #f)) ; no tests
27911 (home-page "https://github.com/rianhunter/block_tracing")
27912 (synopsis "Protect process memory")
27913 (description
27914 "@code{block_tracing} is a tiny Python library that can be used to
27915prevent debuggers and other applications from inspecting the memory within
27916your process.")
27917 (license license:expat)))
27918
27919(define-public python-gcovr
27920 (package
27921 (name "python-gcovr")
27922 (version "4.2")
27923 (source
27924 (origin
27925 (method url-fetch)
27926 (uri (pypi-uri "gcovr" version))
27927 (sha256
27928 (base32
27929 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
27930 (build-system python-build-system)
27931 (propagated-inputs
27932 (list python-lxml python-jinja2))
27933 (home-page "https://gcovr.com/")
27934 (synopsis "Utility for generating code coverage results")
27935 (description
27936 "Gcovr provides a utility for managing the use of the GNU gcov
27937utility and generating summarized code coverage results. It is inspired
27938by the Python coverage.py package, which provides a similar utility for
27939Python.")
27940 (license license:bsd-3)))
27941
27942(define-public python-owslib
27943 (package
27944 (name "python-owslib")
27945 (version "0.19.2")
27946 (source
27947 (origin
27948 (method url-fetch)
27949 (uri (pypi-uri "OWSLib" version))
27950 (sha256
27951 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
27952 (build-system python-build-system)
27953 (arguments
27954 ;; TODO: package dependencies required for tests.
27955 '(#:tests? #f
27956 #:phases (modify-phases %standard-phases
27957 (delete 'sanity-check))))
27958 (synopsis "Interface for Open Geospatial Consortium web service")
27959 (description
27960 "OWSLib is a Python package for client programming with Open Geospatial
27961Consortium (OGC) web service (hence OWS) interface standards, and their related
27962content models.")
27963 (home-page "https://geopython.github.io/OWSLib/")
27964 (license license:bsd-3)))
27965
27966(define-public python-docusign-esign
27967 (package
27968 (name "python-docusign-esign")
27969 (version "3.1.0")
27970 (source (origin
27971 (method url-fetch)
27972 (uri (pypi-uri "docusign_esign" version))
27973 (sha256
27974 (base32
27975 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
27976 (build-system python-build-system)
27977 ;; Testing requires undocumented setup changes, and so testing is disabled here.
27978 (arguments `(#:tests? #f))
27979 (propagated-inputs
27980 (list python-certifi
27981 python-six
27982 python-dateutil
27983 python-urllib3
27984 python-pyjwt
27985 python-cryptography
27986 python-nose))
27987 (synopsis "DocuSign Python Client")
27988 (description "The Official DocuSign Python Client Library used to interact
27989 with the eSign REST API. Send, sign, and approve documents using this client.")
27990 (home-page "https://www.docusign.com/devcenter")
27991 (license license:expat)))
27992
27993(define-public python-xattr
27994 (package
27995 (name "python-xattr")
27996 (version "0.9.9")
27997 (source
27998 (origin
27999 (method url-fetch)
28000 (uri (pypi-uri "xattr" version))
28001 (sha256
28002 (base32
28003 "0ipkfblyvp5hylahjkw9zss1ii9xnwjypr3b3ncv989szcg7xjq9"))))
28004 (build-system python-build-system)
28005 (propagated-inputs
28006 (list python-cffi))
28007 (home-page "https://github.com/xattr/xattr")
28008 (synopsis
28009 "Python wrapper for extended file system attributes")
28010 (description "This package provides a Python wrapper for using extended
28011file system attributes. Extended attributes extend the basic attributes of files
28012and directories in the file system. They are stored as name:data pairs
28013associated with file system objects (files, directories, symlinks, etc).")
28014 (license license:expat)))
28015
28016(define-public python-json-logger
28017 (package
28018 (name "python-json-logger")
28019 (version "0.1.11")
28020 (source
28021 (origin
28022 (method url-fetch)
28023 (uri (pypi-uri "python-json-logger" version))
28024 (sha256
28025 (base32
28026 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
28027 (build-system python-build-system)
28028 (home-page
28029 "https://github.com/madzak/python-json-logger")
28030 (synopsis "JSON log formatter in Python")
28031 (description "This library allows standard Python logging to output log data
28032as JSON objects. With JSON we can make our logs more readable by machines and
28033we can stop writing custom parsers for syslog-type records.")
28034 (license license:bsd-3)))
28035
28036(define-public python-daiquiri
28037 (package
28038 (name "python-daiquiri")
28039 (version "2.1.1")
28040 (source
28041 (origin
28042 (method url-fetch)
28043 (uri (pypi-uri "daiquiri" version))
28044 (sha256
28045 (base32
28046 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
28047 (build-system python-build-system)
28048 (propagated-inputs
28049 (list python-json-logger))
28050 (native-inputs
28051 (list python-mock python-pytest python-setuptools-scm python-six))
28052 (home-page "https://github.com/jd/daiquiri")
28053 (synopsis
28054 "Library to configure Python logging easily")
28055 (description "The daiquiri library provides an easy way to configure
28056logging in Python. It also provides some custom formatters and handlers.")
28057 (license license:asl2.0)))
28058
28059(define-public python-pifpaf
28060 (package
28061 (name "python-pifpaf")
28062 (version "3.1.5")
28063 (source
28064 (origin
28065 (method url-fetch)
28066 (uri (pypi-uri "pifpaf" version))
28067 (sha256
28068 (base32
28069 "19bdmxldc2m570isl7hbqgbb20si4sin7pi5fw8sv9py8dyv2s4n"))))
28070 (build-system python-build-system)
28071 (arguments
28072 '(#:phases
28073 (modify-phases %standard-phases
28074 (replace 'check
28075 (lambda _
28076 (invoke "python" "setup.py" "testr" "--slowest"
28077 "--testr-args=until-failure"))))))
28078 (propagated-inputs
28079 (list python-click
28080 python-daiquiri
28081 python-fixtures
28082 python-jinja2
28083 python-pbr
28084 python-psutil
28085 python-xattr))
28086 (native-inputs
28087 (list python-mock python-os-testr python-requests
28088 python-testrepository python-testtools))
28089 (home-page "https://github.com/jd/pifpaf")
28090 (synopsis "Tools and fixtures to manage daemons for testing in Python")
28091 (description "Pifpaf is a suite of fixtures and a command-line tool that
28092starts and stops daemons for a quick throw-away usage. This is typically
28093useful when needing these daemons to run integration testing. It originally
28094evolved from its precursor @code{overtest}.")
28095 (license license:asl2.0)))
28096
28097(define-public python-pytest-check-links
28098 (package
28099 (name "python-pytest-check-links")
28100 (version "0.3.0")
28101 (source
28102 (origin
28103 (method url-fetch)
28104 ;; URI uses underscores
28105 (uri (pypi-uri "pytest_check_links" version))
28106 (sha256
28107 (base32
28108 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
28109 (build-system python-build-system)
28110 (propagated-inputs
28111 (list python-docutils
28112 python-html5lib
28113 python-nbconvert
28114 python-nbformat
28115 python-pytest
28116 python-six))
28117 (native-inputs
28118 (list python-pbr-minimal))
28119 (home-page "https://github.com/minrk/pytest-check-links")
28120 (synopsis "Check links in files")
28121 (description "This package provides a pytest plugin that checks URLs for
28122HTML-containing files.")
28123 (license license:bsd-3)))
28124
28125(define-public python-json5
28126 (package
28127 (name "python-json5")
28128 (version "0.8.5")
28129 (source
28130 (origin
28131 ;; sample.json5 is missing from PyPi source tarball
28132 (method git-fetch)
28133 (uri (git-reference
28134 (url "https://github.com/dpranke/pyjson5")
28135 (commit (string-append "v" version))))
28136 (file-name (git-file-name name version))
28137 (sha256
28138 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
28139 (build-system python-build-system)
28140 (home-page "https://github.com/dpranke/pyjson5")
28141 (synopsis
28142 "Python implementation of the JSON5 data format")
28143 (description
28144 "JSON5 extends the JSON data interchange format to make it slightly more
28145usable as a configuration language. This Python package implements parsing and
28146dumping of JSON5 data structures.")
28147 (license license:asl2.0)))
28148
28149(define-public python-freetype-py
28150 (package
28151 (name "python-freetype-py")
28152 (version "2.3.0")
28153 (source
28154 (origin
28155 (method url-fetch)
28156 (uri (pypi-uri "freetype-py" version ".zip"))
28157 (sha256
28158 (base32 "1l55wzy21jmdayjna29ahzxrf2fp68580978rs6kap1a4zilrdpr"))))
28159 (build-system python-build-system)
28160 (native-inputs
28161 (list python-setuptools-scm
28162 unzip))
28163 (inputs (list freetype))
28164 (arguments
28165 `(#:phases
28166 ;; Note: the pypi archive does not contain tests, but running the check
28167 ;; phase will at least test whether the module loads correctly.
28168 (modify-phases %standard-phases
28169 (add-before 'build 'embed-library-reference
28170 (lambda* (#:key inputs #:allow-other-keys)
28171 (substitute* "freetype/raw.py"
28172 (("^(filename = ).*" _ >)
28173 (string-append > "\"" (search-input-file inputs "/lib/libfreetype.so")
28174 "\"\n"))))))))
28175 (home-page "https://github.com/rougier/freetype-py")
28176 (synopsis "Freetype python bindings")
28177 (description "Freetype Python provides bindings for the FreeType
28178library. Only the high-level API is bound.")
28179 (license license:bsd-3)))
28180
28181(define-public python-frozendict
28182 (package
28183 (name "python-frozendict")
28184 (version "2.3.4")
28185 (source
28186 (origin
28187 (method url-fetch)
28188 (uri (pypi-uri "frozendict" version))
28189 (sha256
28190 (base32 "0y3zn57i1q5192f7l4w2z2zsy3rrx50g563msaq954r58s1v3d0m"))))
28191 (build-system python-build-system)
28192 (home-page "https://github.com/Marco-Sulla/python-frozendict")
28193 (synopsis "Simple immutable mapping for Python")
28194 (description
28195 "@dfn{frozendict} is an immutable wrapper around dictionaries that
28196implements the complete mapping interface. It can be used as a drop-in
28197replacement for dictionaries where immutability is desired.")
28198 (license license:expat)))
28199
28200(define-public python-unpaddedbase64
28201 (package
28202 (name "python-unpaddedbase64")
28203 (version "2.1.0")
28204 (source
28205 (origin
28206 (method url-fetch)
28207 (uri (pypi-uri "unpaddedbase64" version))
28208 (sha256
28209 (base32 "01ghlmw63fgslwj8j74vkpf1kqvr7a4agm6nyn89vqwx106ccwvj"))))
28210 (build-system python-build-system)
28211 (arguments
28212 `(#:phases
28213 (modify-phases %standard-phases
28214 (replace 'check
28215 (lambda* (#:key inputs tests? #:allow-other-keys)
28216 (when tests?
28217 (copy-recursively (string-append
28218 (assoc-ref inputs "tests") "/tests")
28219 "tests")
28220 (invoke "python" "-m" "pytest" "-vv")))))))
28221 (native-inputs
28222 `(("python-pytest" ,python-pytest)
28223 ("tests"
28224 ;; The release on pypi comes without tests. We can't build from this
28225 ;; checkout, though, because installation requires an invocation of
28226 ;; poetry.
28227 ,(origin
28228 (method git-fetch)
28229 (uri (git-reference
28230 (url "https://github.com/matrix-org/python-unpaddedbase64")
28231 (commit (string-append "v" version))))
28232 (file-name (git-file-name name version))
28233 (sha256
28234 (base32
28235 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))))
28236 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
28237 (synopsis "Encode and decode Base64 without “=” padding")
28238 (description
28239 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
28240using “=” characters. However this conveys no benefit so many protocols
28241choose to use Base64 without the “=” padding.")
28242 (license license:asl2.0)))
28243
28244(define-public python-py-cpuinfo
28245 ;; This is the first commit where riscv64-linux support is available.
28246 ;; We can move back to pypi releases with the next release.
28247 (let ((commit "4d6987e5c30f2ebacb20781892c01329042cce60")
28248 (revision "1"))
28249 (package
28250 (name "python-py-cpuinfo")
28251 (version (git-version "8.0.0" revision commit))
28252 (source
28253 (origin
28254 (method git-fetch)
28255 (uri (git-reference
28256 (url "https://github.com/workhorsy/py-cpuinfo")
28257 (commit commit)))
28258 (file-name (git-file-name name version))
28259 (sha256
28260 (base32
28261 "0h5wi1bfcqqr1x3j1pa7dmkx7siprsyksbsy80fl2sdrrgpji0b0"))))
28262 (build-system python-build-system)
28263 (home-page "https://github.com/workhorsy/py-cpuinfo")
28264 (synopsis "Get CPU info with Python")
28265 (description
28266 "This Python module returns the CPU info by using the best sources of
28267information for your operating system.")
28268 (license license:expat))))
28269
28270(define-public python-canonicaljson
28271 (package
28272 (name "python-canonicaljson")
28273 (version "1.6.3")
28274 (source
28275 (origin
28276 (method url-fetch)
28277 (uri (pypi-uri "canonicaljson" version))
28278 (sha256
28279 (base32 "0j5lq191jkd483q6xzc16c9fahxf15lrv03mvah9ka3lq85pcnfa"))))
28280 (build-system pyproject-build-system)
28281 (arguments
28282 (list
28283 #:phases
28284 #~(modify-phases %standard-phases
28285 (add-after 'unpack 'loosen-requirements
28286 (lambda _
28287 ;; Permit newer versions of setuptools_scm
28288 (substitute* "pyproject.toml"
28289 ((">= 2.0.0, <3") ">= 2.0.0")))))))
28290 (native-inputs
28291 (list python-pypa-build python-pytest python-setuptools python-setuptools-scm))
28292 (propagated-inputs
28293 (list python-six python-frozendict python-simplejson))
28294 (home-page "https://github.com/matrix-org/python-canonicaljson")
28295 (synopsis "Canonical JSON")
28296 (description
28297 "Deterministically encode JSON.
28298
28299@itemize
28300@item Encodes objects and arrays as RFC 7159 JSON.
28301@item Sorts object keys so that you get the same result each time.
28302@item Has no insignificant whitespace to make the output as small as possible.
28303@item Escapes only the characters that must be escaped, U+0000 to
28304 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
28305@item Uses the shortest escape sequence for each escaped character.
28306@item Encodes the JSON as UTF-8.
28307@item Can encode frozendict immutable dictionaries.
28308@end itemize")
28309 (license license:asl2.0)))
28310
28311(define-public python-signedjson
28312 (package
28313 (name "python-signedjson")
28314 (version "1.1.1")
28315 (source
28316 (origin
28317 (method url-fetch)
28318 (uri (pypi-uri "signedjson" version))
28319 (sha256
28320 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
28321 (build-system python-build-system)
28322 (propagated-inputs
28323 (list python-canonicaljson python-importlib-metadata python-pynacl
28324 python-typing-extensions python-unpaddedbase64))
28325 (native-inputs
28326 (list python-setuptools-scm))
28327 (home-page "https://github.com/matrix-org/python-signedjson")
28328 (synopsis "Sign JSON objects with ED25519 signatures")
28329 (description
28330 "Sign JSON objects with ED25519 signatures.
28331
28332@itemize
28333@item More than one entity can sign the same object.
28334@item Each entity can sign the object with more than one key making it easier to
28335rotate keys
28336@item ED25519 can be replaced with a different algorithm.
28337@item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
28338key.
28339@end itemize")
28340 (license license:asl2.0)))
28341
28342(define-public python-daemonize
28343 (package
28344 (name "python-daemonize")
28345 (version "2.5.0")
28346 (source
28347 (origin
28348 (method url-fetch)
28349 (uri (pypi-uri "daemonize" version))
28350 (sha256
28351 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
28352 (build-system python-build-system)
28353 (home-page "https://github.com/thesharp/daemonize")
28354 (synopsis "Library for writing system daemons in Python")
28355 (description "Daemonize is a library for writing system daemons in Python.")
28356 (license license:expat)))
28357
28358(define-public python-pymacaroons
28359 (package
28360 (name "python-pymacaroons")
28361 (version "0.13.0")
28362 (source
28363 (origin
28364 (method url-fetch)
28365 (uri (pypi-uri "pymacaroons" version))
28366 (sha256
28367 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
28368 (build-system python-build-system)
28369 (propagated-inputs
28370 (list python-six python-pynacl))
28371 (home-page "https://github.com/ecordell/pymacaroons")
28372 (synopsis "Python Macaroon Library")
28373 (description
28374 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
28375tokens, macaroons embed caveats that define specific authorization
28376requirements for the target service, the service that issued the root macaroon
28377and which is capable of verifying the integrity of macaroons it receives.
28378
28379Macaroons allow for delegation and attenuation of authorization. They are
28380simple and fast to verify, and decouple authorization policy from the
28381enforcement of that policy.")
28382 (license license:expat)))
28383
28384(define-public python-ldap3
28385 (package
28386 (name "python-ldap3")
28387 (version "2.7")
28388 (home-page "https://github.com/cannatag/ldap3")
28389 (source
28390 (origin
28391 (method git-fetch)
28392 (uri (git-reference (url home-page)
28393 (commit (string-append "v" version))))
28394 (file-name (git-file-name name version))
28395 (sha256
28396 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
28397 (build-system python-build-system)
28398 (arguments
28399 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
28400 #:phases (modify-phases %standard-phases
28401 (replace 'check
28402 (lambda* (#:key tests? #:allow-other-keys)
28403 (when tests?
28404 (invoke "nosetests" "-s" "test"))
28405 #t)))))
28406 (native-inputs
28407 (list python-nose))
28408 (propagated-inputs
28409 (list python-gssapi python-pyasn1))
28410 (synopsis "Python LDAP client")
28411 (description
28412 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
28413library.")
28414 (license license:lgpl3+)))
28415
28416(define-public python-boltons
28417 (package
28418 (name "python-boltons")
28419 (version "23.0.0")
28420 (source
28421 (origin
28422 (method url-fetch)
28423 (uri (pypi-uri "boltons" version))
28424 (sha256
28425 (base32
28426 "1c5lpqi74i55li0wvpyxnircj40na797x7447k53an2j54cafl4c"))))
28427 (build-system python-build-system)
28428 (home-page "https://github.com/mahmoud/boltons")
28429 (synopsis "Extensions to the Python standard library")
28430 (description
28431 "Boltons is a set of over 230 pure-Python utilities in the same spirit
28432as — and yet conspicuously missing from — the standard library, including:
28433
28434@itemize
28435@item Atomic file saving, bolted on with fileutils
28436@item A highly-optimized OrderedMultiDict, in dictutils
28437@item Two types of PriorityQueue, in queueutils
28438@item Chunked and windowed iteration, in iterutils
28439@item Recursive data structure iteration and merging, with iterutils.remap
28440@item Exponential backoff functionality, including jitter, through
28441iterutils.backoff
28442@item A full-featured TracebackInfo type, for representing stack traces, in
28443tbutils
28444@end itemize")
28445 (license license:bsd-3)))
28446
28447(define-public python-eliot
28448 (package
28449 (name "python-eliot")
28450 (version "1.13.0")
28451 (source
28452 (origin
28453 (method url-fetch)
28454 (uri (pypi-uri "eliot" version))
28455 (sha256
28456 (base32 "1xzzhsjrrw430dc84vamf683bwp9i0nr86xf2iav6yla615ijq2p"))))
28457 (build-system python-build-system)
28458 (arguments
28459 `(#:phases
28460 (modify-phases %standard-phases
28461 (add-after 'unpack 'remove-journald-support
28462 (lambda _
28463 (for-each delete-file
28464 '("eliot/tests/test_journald.py"
28465 "eliot/journald.py"))
28466 #t))
28467 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
28468 ;; remove command-line tool's tests. TODO eliot-prettyprint should
28469 ;; be installed and these tests should pass.
28470 (lambda _
28471 (delete-file "eliot/tests/test_prettyprint.py")
28472 #t))
28473 (add-after 'remove-eliot-prettyprint-tests 'remove-failing-tests
28474 (lambda _
28475 ;; These tests started to fail after updating python-pandas to
28476 ;; 1.3.3 and python-dask to 2021.9.1.
28477 (substitute* "eliot/tests/test_validation.py"
28478 (("test_omitLoggerFromActionType")
28479 "_test_omitLoggerFromActionType")
28480 (("test_logCallsDefaultLoggerWrite")
28481 "_test_logCallsDefaultLoggerWrite"))
28482 #t)))))
28483 (propagated-inputs
28484 (list python-boltons python-pyrsistent python-six
28485 python-zope-interface))
28486 (native-inputs
28487 (list python-black
28488 python-coverage
28489 python-dask
28490 python-flake8
28491 python-hypothesis
28492 python-pytest
28493 python-setuptools
28494 python-sphinx
28495 python-sphinx-rtd-theme
28496 python-testtools
28497 python-twine
28498 python-twisted))
28499 (home-page "https://github.com/itamarst/eliot/")
28500 (synopsis "Eliot: the logging system that tells you why it happened")
28501 (description
28502 "@dfn{eliot} is a Python logging system that outputs causal chains of
28503actions: actions can spawn other actions, and eventually they either succeed
28504or fail. The resulting logs tell you the story of what your software did: what
28505happened, and what caused it.")
28506 (license license:asl2.0)))
28507
28508(define-public python-pem
28509 (package
28510 (name "python-pem")
28511 (version "20.1.0")
28512 (source
28513 (origin
28514 (method url-fetch)
28515 (uri (pypi-uri "pem" version))
28516 (sha256
28517 (base32
28518 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
28519 (build-system python-build-system)
28520 (native-inputs
28521 (list python-certifi
28522 python-coverage
28523 python-pretend
28524 python-pyopenssl
28525 python-pytest
28526 python-sphinx
28527 python-twisted))
28528 (home-page "https://pem.readthedocs.io/")
28529 (synopsis "Easy PEM file parsing in Python")
28530 (description
28531 "This package provides a Python module for parsing and splitting PEM files.")
28532 (license license:expat)))
28533
28534(define-public python-txsni
28535 ;; We need a few commits on top of 0.1.9 for compatibility with newer
28536 ;; Python and OpenSSL.
28537 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
28538 (revision "0"))
28539 (package
28540 (name "python-txsni")
28541 (version (git-version "0.1.9" revision commit))
28542 (home-page "https://github.com/glyph/txsni")
28543 (source
28544 (origin
28545 (method git-fetch)
28546 (uri (git-reference (url home-page) (commit commit)))
28547 (file-name (git-file-name name version))
28548 (sha256
28549 (base32
28550 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
28551 (build-system python-build-system)
28552 (propagated-inputs
28553 (list python-pyopenssl python-service-identity python-twisted))
28554 (synopsis "Run TLS servers with Twisted")
28555 (description
28556 "This package provides an easy-to-use SNI endpoint for use
28557with the Twisted web framework.")
28558 (license license:expat))))
28559
28560(define-public python-txacme
28561 (package
28562 (name "python-txacme")
28563 (version "0.9.2")
28564 (source
28565 (origin
28566 (method url-fetch)
28567 (uri (pypi-uri "txacme" version))
28568 (sha256
28569 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
28570 (build-system python-build-system)
28571 (propagated-inputs
28572 (list python-acme
28573 python-attrs
28574 python-eliot
28575 python-josepy
28576 python-pem
28577 python-treq
28578 python-twisted
28579 python-txsni))
28580 (native-inputs
28581 (list python-fixtures
28582 python-hypothesis
28583 python-mock
28584 python-service-identity
28585 python-testrepository
28586 python-testscenarios
28587 python-testtools))
28588 (home-page "https://github.com/twisted/txacme")
28589 (synopsis "Twisted implexmentation of the ACME protocol")
28590 (description
28591 "ACME is Automatic Certificate Management Environment, a protocol that
28592allows clients and certificate authorities to automate verification and
28593certificate issuance. The ACME protocol is used by the free Let's Encrypt
28594Certificate Authority.
28595
28596txacme is an implementation of the protocol for Twisted, the event-driven
28597networking engine for Python.")
28598 (license license:expat)))
28599
28600(define-public python-pysaml2
28601 (package
28602 (name "python-pysaml2")
28603 (version "6.5.1")
28604 (source
28605 (origin
28606 (method url-fetch)
28607 (uri (pypi-uri "pysaml2" version))
28608 (sha256
28609 (base32
28610 "1xk2x0slz1f8cqv7vn77qx99xfd1mshhswiwrljk9m72w2m9iivd"))))
28611 (build-system python-build-system)
28612 (propagated-inputs
28613 (list python-cryptography
28614 python-dateutil
28615 python-defusedxml
28616 python-importlib-resources
28617 python-pyopenssl
28618 python-pytz
28619 python-requests
28620 python-six
28621 python-xmlschema))
28622 (home-page "https://idpy.org")
28623 (synopsis "Python implementation of SAML Version 2 Standard")
28624 (description
28625 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
28626It contains all necessary pieces for building a SAML2 service provider or
28627an identity provider. The distribution contains examples of both.
28628
28629This package was originally written to work in a WSGI environment, but
28630there are extensions that allow you to use it with other frameworks.")
28631 (license license:asl2.0)))
28632
28633(define-public python-click-plugins
28634 (package
28635 (name "python-click-plugins")
28636 (version "1.1.1")
28637 (source
28638 (origin
28639 (method url-fetch)
28640 (uri (pypi-uri "click-plugins" version))
28641 (sha256
28642 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
28643 (build-system python-build-system)
28644 (native-inputs
28645 (list python-pytest))
28646 (propagated-inputs
28647 (list python-click))
28648 (synopsis "Extension for Click to register external CLI commands")
28649 (description "This package provides n extension module for Click to
28650register external CLI commands via setuptools entry-points.")
28651 (home-page "https://github.com/click-contrib/click-plugins")
28652 (license license:bsd-3)))
28653
28654(define-public python-diceware
28655 (package
28656 (name "python-diceware")
28657 (version "0.9.6")
28658 (source
28659 (origin
28660 (method url-fetch)
28661 (uri (pypi-uri "diceware" version))
28662 (sha256
28663 (base32
28664 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
28665 (build-system python-build-system)
28666 (native-inputs
28667 (list python-coverage python-pytest python-pytest-runner))
28668 (home-page "https://github.com/ulif/diceware/")
28669 (synopsis "Generates memorable passphrases")
28670 (description "This package generates passphrases by concatenating words
28671randomly picked from wordlists. It supports several sources of
28672randomness (including real life dice) and different wordlists (including
28673cryptographically signed ones).")
28674 (license license:gpl3+)))
28675
28676(define-public python-dictdiffer
28677 (package
28678 (name "python-dictdiffer")
28679 (version "0.9.0")
28680 (source (origin
28681 (method url-fetch)
28682 (uri (pypi-uri "dictdiffer" version))
28683 (sha256
28684 (base32
28685 "0y3mk74qm2q9hsm37892i1wzn8bbdrvbs4nmnvqwq4z6pxgwzfhp"))))
28686 (build-system python-build-system)
28687 (arguments
28688 ;; XXX: The PyPI tarball lacks tests and the git repository
28689 ;; fails to determine version.
28690 '(#:tests? #f))
28691 (native-inputs
28692 (list python-pytest-runner python-setuptools-scm))
28693 (home-page "https://github.com/inveniosoftware/dictdiffer")
28694 (synopsis "Diff and patch Python dictionary objects")
28695 (description
28696 "Dictdiffer is a Python module that helps you to diff and patch
28697dictionaries.")
28698 (license license:expat)))
28699
28700(define-public python-dictpath
28701 (package
28702 (name "python-dictpath")
28703 (version "0.1.3")
28704 (source
28705 (origin
28706 (method url-fetch)
28707 (uri (pypi-uri "dictpath" version))
28708 (sha256
28709 (base32 "1n4hq4wbgaw59bbb16nhkgg5wk8sl4iw940vjrgx4xmifqxxw73m"))))
28710 (build-system python-build-system)
28711 (native-inputs (list python-pytest python-pytest-cov python-pytest-flake8))
28712 (home-page "https://github.com/p1c2u/pathable")
28713 (synopsis "Object-oriented path library for Python")
28714 (description "This object-oriented dictionary path Python library enables
28715traversing resources like paths or accessing resources on demand with separate
28716accessor layer.")
28717 (license license:asl2.0)))
28718
28719(define-public pyzo
28720 (package
28721 (name "pyzo")
28722 (version "4.12.8")
28723 (source
28724 (origin
28725 (method git-fetch)
28726 (uri (git-reference
28727 (url "https://github.com/pyzo/pyzo")
28728 (commit (string-append "v" version))))
28729 (file-name (git-file-name name version))
28730 (sha256
28731 (base32
28732 "036snpv6j63bv9z9mbq317qb43zwsj1m8vljra3c0kiakahp7cc3"))))
28733 (build-system python-build-system)
28734 (arguments
28735 `(#:phases
28736 (modify-phases %standard-phases
28737 (add-before 'check 'fix-home-directory
28738 (lambda _
28739 ;; Tests fail with "Permission denied: '/homeless-shelter'".
28740 (setenv "HOME" "/tmp"))))
28741 ;; Tests fail with "Uncaught Python exception: python: undefined
28742 ;; symbol: objc_getClass".
28743 #:tests? #f))
28744 (propagated-inputs
28745 (list python-pyqt))
28746 (home-page "https://pyzo.org")
28747 (synopsis
28748 "Python IDE for scientific computing")
28749 (description
28750 "Pyzo is a Python IDE focused on interactivity and introspection,
28751which makes it very suitable for scientific computing. Its practical
28752design is aimed at simplicity and efficiency.
28753
28754It consists of two main components, the editor and the shell, and uses
28755a set of pluggable tools to help the programmer in various ways. Some
28756example tools are source structure, project manager, interactive help,
28757workspace...")
28758 (license license:bsd-2)))
28759
28760(define-public python-osc
28761 (package
28762 (name "python-osc")
28763 (version "1.7.4")
28764 (source
28765 (origin
28766 (method url-fetch)
28767 (uri (pypi-uri "python-osc" version))
28768 (sha256
28769 (base32
28770 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
28771 (build-system python-build-system)
28772 (home-page "https://github.com/attwad/python-osc")
28773 (synopsis "Open Sound Control server and client implementations")
28774 (description
28775 "@code{python-osc} is a pure Python library with no external
28776dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
28777Open Sound Control 1.0} specification.")
28778 (license license:unlicense)))
28779
28780(define-public python-voluptuous
28781 (package
28782 (name "python-voluptuous")
28783 (version "0.11.7")
28784 (source
28785 (origin
28786 (method url-fetch)
28787 (uri (pypi-uri "voluptuous" version))
28788 (sha256
28789 (base32
28790 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
28791 (build-system python-build-system)
28792 (native-inputs
28793 (list python-nose))
28794 (home-page "https://github.com/alecthomas/voluptuous")
28795 (synopsis "Python data validation library")
28796 (description
28797 "Voluptuous is a Python data validation library. It is primarily
28798intended for validating data coming into Python as JSON, YAML, etc.")
28799 (license license:bsd-3)))
28800
28801(define-public python-cmd2
28802 (package
28803 (name "python-cmd2")
28804 (version "2.3.3")
28805 (source
28806 (origin
28807 (method url-fetch)
28808 (uri (pypi-uri "cmd2" version))
28809 (sha256
28810 (base32
28811 "0h1naik558qh48gx2iyy0a0khvw5fz0in69y84mbrhsm9nq7w3bm"))))
28812 (build-system python-build-system)
28813 (arguments
28814 '(#:phases
28815 (modify-phases %standard-phases
28816 (replace 'check
28817 (lambda* (#:key tests? #:allow-other-keys)
28818 (if tests?
28819 (invoke "pytest" "-vv" "-k"
28820 ;; These tests fail because no EDITOR is in PATH.
28821 "not test_find_editor_not_specified \
28822and not test_transcript")
28823 (format #t "test suite not run~%")))))))
28824 (propagated-inputs
28825 (list python-attrs python-colorama python-pyperclip python-wcwidth))
28826 (native-inputs
28827 (list python-invoke
28828 python-mock
28829 python-pytest
28830 python-pytest-cov
28831 python-pytest-mock
28832 python-setuptools-scm))
28833 (home-page "https://github.com/python-cmd2/cmd2")
28834 (synopsis "Tool for building interactive command line applications")
28835 (description
28836 "Cmd2 is a tool for building interactive command line applications in
28837Python. Its goal is to make it quick and easy for developers to build
28838feature-rich and user-friendly interactive command line applications. It
28839provides a simple API which is an extension of Python's built-in @code{cmd}
28840module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
28841make your life easier and eliminates much of the boilerplate code which would
28842be necessary when using @code{cmd}.")
28843 (license license:expat)))
28844
28845(define-public python-pytidylib
28846 (package
28847 (name "python-pytidylib")
28848 (version "0.3.2")
28849 (source (origin
28850 (method url-fetch)
28851 (uri (pypi-uri "pytidylib" version))
28852 (sha256
28853 (base32
28854 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
28855 (build-system python-build-system)
28856 (arguments
28857 '(#:phases
28858 (modify-phases %standard-phases
28859 (add-after 'unpack 'fix-queue-import
28860 (lambda _
28861 ;; Adjust Queue import for Python 3. Remove for versions >=0.4.0.
28862 (substitute* "tests/threadsafety.py"
28863 (("from Queue import Queue")
28864 "from queue import Queue"))))
28865 (add-before 'build 'qualify-libtidy
28866 (lambda* (#:key inputs #:allow-other-keys)
28867 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
28868 (substitute* "tidylib/tidy.py"
28869 (("ctypes\\.util\\.find_library\\('tidy'\\)")
28870 (format #f "'~a'" libtidy)))
28871 #t))))))
28872 (inputs (list tidy-html))
28873 (home-page "https://github.com/countergram/pytidylib")
28874 (synopsis "Python wrapper for HTML Tidy library")
28875 (description
28876 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
28877allows you, from Python code, to “fix” invalid (X)HTML markup.")
28878 (license license:expat)))
28879
28880(define-public python-mujson
28881 (package
28882 (name "python-mujson")
28883 (version "1.4")
28884 (source
28885 (origin
28886 (method url-fetch)
28887 (uri (pypi-uri "mujson" version))
28888 (sha256
28889 (base32
28890 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
28891 (build-system python-build-system)
28892 (home-page "https://github.com/mattgiles/mujson")
28893 (synopsis "Use the fastest JSON functions available at import time")
28894 (description "This package selects the fastest JSON functions available
28895at import time.")
28896 (license license:expat)))
28897
28898(define-public python-bashlex
28899 (package
28900 (name "python-bashlex")
28901 (version "0.14")
28902 (source
28903 (origin
28904 (method url-fetch)
28905 (uri (pypi-uri "bashlex" version))
28906 (sha256
28907 (base32
28908 "1z9g96fgsfpdwawp4sb5x6hbdhmda7kgmcrqlf9xx4bs1f8f14js"))))
28909 (build-system python-build-system)
28910 (arguments
28911 `(#:phases
28912 (modify-phases %standard-phases
28913 (add-before 'build 'pregenerate-yacc-tables
28914 (lambda _
28915 ;; parser.py caches tables, which attempts to write to site lib
28916 ;; see https://github.com/idank/bashlex/issues/51
28917 (invoke "python" "-c" "import bashlex"))))))
28918 (home-page
28919 "https://github.com/idank/bashlex")
28920 (synopsis "Python parser for bash")
28921 (description "@code{bashlex} is a Python port of the parser used
28922internally by GNU bash.
28923
28924For the most part it's transliterated from C, the major differences are:
28925
28926@itemize
28927@item it does not execute anything
28928@item it is reentrant
28929@item it generates a complete AST
28930@end itemize
28931")
28932 (license license:gpl3+)))
28933
28934(define-public python-jinxed
28935 (package
28936 (name "python-jinxed")
28937 (version "1.0.0")
28938 (source
28939 (origin
28940 (method url-fetch)
28941 (uri (pypi-uri "jinxed" version))
28942 (sha256
28943 (base32
28944 "1n7vl03rhjd0xhjgbjlh8x9f8yfbhamcwkgvs4jg7g5qj8f0wk89"))))
28945 (build-system python-build-system)
28946 (arguments
28947 '(#:phases
28948 (modify-phases %standard-phases
28949 (add-before 'check 'set-environment-variables
28950 (lambda* (#:key inputs #:allow-other-keys)
28951 (let ((ncurses (assoc-ref inputs "ncurses")))
28952 (setenv "TERM" "LINUX")
28953 (setenv "TERMINFO" (string-append ncurses "/share/terminfo"))
28954 #t))))
28955 #:tests? #f)) ; _curses.error: setupterm: could not find terminal
28956 (native-inputs
28957 (list ncurses))
28958 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
28959 (synopsis "Jinxed Terminal Library")
28960 (description
28961 "Jinxed is an implementation of a subset of the Python curses library.")
28962 (license license:mpl2.0)))
28963
28964(define-public python-svgutils
28965 (package
28966 (name "python-svgutils")
28967 (version "0.3.4")
28968 (source
28969 (origin
28970 (method url-fetch)
28971 (uri (pypi-uri "svgutils" version))
28972 (sha256
28973 (base32
28974 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
28975 (build-system python-build-system)
28976 (propagated-inputs
28977 (list python-lxml))
28978 (home-page "https://svgutils.readthedocs.io")
28979 (synopsis "Python SVG editor")
28980 (description "This is an utility package that helps with editing and
28981concatenating SVG files. It is especially directed at scientists preparing
28982final figures for submission to journals. So far it supports arbitrary
28983placement and scaling of SVG figures and adding markers, such as labels.")
28984 (license license:expat)))
28985
28986(define-public python-blessed
28987 (package
28988 (name "python-blessed")
28989 (version "1.20.0")
28990 (source
28991 (origin
28992 (method url-fetch)
28993 (uri (pypi-uri "blessed" version))
28994 (sha256
28995 (base32
28996 "103ng3ap33xs6i7606q3k6rwvjva9l7qi8j7vw08y13ffkw6gp9c"))
28997 (snippet
28998 ;; Don't get hung up on Windows test failures.
28999 '(delete-file "blessed/win_terminal.py"))))
29000 (build-system pyproject-build-system)
29001 (arguments
29002 (list
29003 ;; Avoid python-pytest-coverage
29004 #:test-flags '(list "-c /dev/null")))
29005 (propagated-inputs (list python-six python-wcwidth))
29006 (native-inputs (list python-pytest))
29007 (home-page "https://github.com/jquast/blessed")
29008 (synopsis "Wrapper around terminal capabilities")
29009 (description
29010 "Blessed is a thin, practical wrapper around terminal styling, screen
29011positioning, and keyboard input.")
29012 (license license:expat)))
29013
29014(define-public python-readme-renderer
29015 (package
29016 (name "python-readme-renderer")
29017 (version "34.0")
29018 (source
29019 (origin
29020 (method url-fetch)
29021 (uri (pypi-uri "readme_renderer" version))
29022 (sha256
29023 (base32
29024 "1c75h9znffc2lh4j56yg23l5ifj5l8fbdq3kfigi8vbh45zx3d6z"))))
29025 (build-system python-build-system)
29026 (arguments
29027 '(#:phases (modify-phases %standard-phases
29028 (add-after 'unpack 'loosen-cmarkgfm-dependency
29029 (lambda _
29030 ;; Permit newer versions of cmarkgfm.
29031 (substitute* "setup.py"
29032 (("cmarkgfm>=0\\.5\\.0,<0\\.7\\.0")
29033 "cmarkgfm>=0.5.0"))))
29034 (replace 'check
29035 (lambda* (#:key tests? #:allow-other-keys)
29036 (when tests?
29037 ;; The GFM tests fail due to slight differences in the
29038 ;; generated vs expected HTML due to using a more
29039 ;; recent bleach version (see:
29040 ;; https://github.com/pypa/readme_renderer/issues/234).
29041 (invoke "pytest" "-vv" "-k" "not GFM")))))))
29042 (propagated-inputs
29043 (list python-bleach python-docutils python-pygments
29044
29045 ;; Optional dependencies.
29046 python-cmarkgfm)) ;required by postorius
29047 (native-inputs
29048 (list python-mock python-pytest))
29049 (home-page "https://github.com/pypa/readme_renderer")
29050 (synopsis "Render README files in Warehouse")
29051 (description
29052 "Readme Renderer is a library that will safely render arbitrary README
29053files into HTML. It is designed to be used in Warehouse to render the
29054@code{long_description} for packages. It can handle Markdown, reStructuredText,
29055and plain text.")
29056 (license license:asl2.0)))
29057
29058(define-public python-lazr-delegates
29059 (package
29060 (name "python-lazr-delegates")
29061 (version "2.0.4")
29062 (source
29063 (origin
29064 (method url-fetch)
29065 (uri (pypi-uri "lazr.delegates" version))
29066 (sha256
29067 (base32
29068 "1rdnl85j9ayp8n85l0ciip621j9dcziz5qnmv2m7krgwgcn31vfx"))))
29069 (build-system python-build-system)
29070 (arguments
29071 '(#:phases
29072 (modify-phases %standard-phases
29073 (replace 'check
29074 (lambda* (#:key tests? #:allow-other-keys)
29075 (when tests? (invoke "nosetests")))))))
29076 (native-inputs
29077 (list python-nose))
29078 (propagated-inputs
29079 (list python-zope-interface))
29080 (home-page "https://launchpad.net/lazr.delegates")
29081 (synopsis "Easily write objects that delegate behavior")
29082 (description
29083 "The @code{lazr.delegates} package makes it easy to write objects that
29084delegate behavior to another object. The new object adds some property or
29085behavior on to the other object, while still providing the underlying interface,
29086and delegating behavior.")
29087 (license license:lgpl3)))
29088
29089(define-public python-lazr-config
29090 (package
29091 (name "python-lazr-config")
29092 (version "2.2.3")
29093 (source
29094 (origin
29095 (method url-fetch)
29096 (uri (pypi-uri "lazr.config" version))
29097 (sha256
29098 (base32
29099 "1qdbrzl61q7cjhbnxvw9y3frcr935y7diwy15xrwcv9ynvw76jmp"))))
29100 (build-system python-build-system)
29101 (arguments
29102 '(#:phases
29103 (modify-phases %standard-phases
29104 (replace 'check
29105 (lambda _
29106 (invoke "python" "-s" "-m" "nose" "-P" "lazr"))))))
29107 (native-inputs
29108 (list python-nose))
29109 (propagated-inputs
29110 (list python-lazr-delegates python-zope-interface))
29111 (home-page "https://launchpad.net/lazr.config")
29112 (synopsis "Create configuration schemas and process and validate configurations")
29113 (description
29114 "The LAZR config system is typically used to manage process configuration.
29115Process configuration is for saying how things change when we run systems on
29116different machines, or under different circumstances. This system uses ini-like
29117file format of section, keys, and values. The config file supports inheritance
29118to minimize duplication of information across files. The format supports schema
29119validation.")
29120 (license license:lgpl3)))
29121
29122(define-public python-flufl-bounce
29123 (package
29124 (name "python-flufl-bounce")
29125 (version "4.0")
29126 (source
29127 (origin
29128 (method url-fetch)
29129 (uri (pypi-uri "flufl.bounce" version))
29130 (sha256
29131 (base32
29132 "0c9qc2l47lyqnpwskp6vvi7m3jqh6hx42v6d35dgxh3fjzmlll15"))))
29133 (build-system python-build-system)
29134 (arguments
29135 (list #:phases
29136 #~(modify-phases %standard-phases
29137 (replace 'check
29138 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29139 (when tests?
29140 (with-directory-excursion
29141 (string-append (site-packages inputs outputs) "/flufl")
29142 (invoke "python" "-m" "nose2" "-v"))))))))
29143 (propagated-inputs
29144 (list python-atpublic python-zope-interface))
29145 (native-inputs
29146 (list python-flufl-testing python-nose2))
29147 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
29148 (synopsis "Email bounce detectors")
29149 (description "The @code{flufl.bounce} library provides a set of heuristics
29150and an API for detecting the original bouncing email addresses from a bounce
29151message. Many formats found in the wild are supported, as are VERP and
29152RFC 3464.")
29153 (license (list license:asl2.0
29154 license:lgpl3)))) ; only for setup_headers.py
29155
29156(define-public python-flufl-i18n
29157 (package
29158 (name "python-flufl-i18n")
29159 (version "3.0")
29160 (source
29161 (origin
29162 (method url-fetch)
29163 (uri (pypi-uri "flufl.i18n" version))
29164 (sha256
29165 (base32
29166 "1flwpn1xhgc957zj3zxw92dhdjh0lsy0hdvzq32dzqpsajfsvq1r"))))
29167 (build-system python-build-system)
29168 (propagated-inputs
29169 (list python-atpublic))
29170 (home-page "https://flufli18n.readthedocs.io")
29171 (synopsis "API for Python internationalization")
29172 (description
29173 "This package provides a high-level, convenient API for managing
29174internationalization/translation contexts in Python applications. There is a
29175simple API for single-context applications, such as command line scripts which
29176only need to translate into one language during the entire course of their
29177execution. There is a more flexible, but still convenient API for multi-context
29178applications, such as servers, which may need to switch language contexts for
29179different tasks.")
29180 (license license:asl2.0)))
29181
29182(define-public python-flufl-lock
29183 (package
29184 (name "python-flufl-lock")
29185 (version "4.0")
29186 (source
29187 (origin
29188 (method url-fetch)
29189 (uri (pypi-uri "flufl.lock" version))
29190 (sha256
29191 (base32
29192 "055941zyma3wfx25jhm8wcsghpv3jc3iwi1gdrdjhzcnfhn62lxq"))))
29193 (build-system python-build-system)
29194 (propagated-inputs
29195 (list python-atpublic python-psutil))
29196 (home-page "https://flufllock.readthedocs.io")
29197 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
29198 (description
29199 "The @dfn{flufl.lock} package provides NFS-safe file locking with
29200timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
29201@code{open} system call but uses a lockfile. Lock objects support lock-breaking
29202and have a maximum lifetime built-in.")
29203 (license (list license:asl2.0
29204 license:lgpl3)))) ; only for setup_helpers.py
29205
29206(define-public python-flufl-testing
29207 (package
29208 (name "python-flufl-testing")
29209 (version "0.8")
29210 (source
29211 (origin
29212 (method url-fetch)
29213 (uri (pypi-uri "flufl.testing" version))
29214 (sha256
29215 (base32
29216 "1nkm95mhcfhl4x5jgs6y97ikszaxsfh07nyawsih6cxxm6l62641"))))
29217 (build-system python-build-system)
29218 (arguments '(#:tests? #f)) ;no tests
29219 (home-page "https://gitlab.com/warsaw/flufl.testing")
29220 (synopsis "Collection of test tool plugins")
29221 (description
29222 "This package contains a small collection of test tool plugins for
29223@code{nose2} and @code{flake8}.")
29224 (license license:asl2.0)))
29225
29226(define-public python-devtools
29227 (package
29228 (name "python-devtools")
29229 (version "0.6")
29230 (source
29231 (origin
29232 (method git-fetch)
29233 (uri (git-reference
29234 (url "https://github.com/samuelcolvin/python-devtools")
29235 (commit (string-append "v" version))))
29236 (file-name (git-file-name name version))
29237 (sha256
29238 (base32 "15zczdcm90wl54c68f1qjb05nkd5bjsc9xjl3lk4frs7k7wkmrvp"))))
29239 (build-system python-build-system)
29240 (native-inputs
29241 (list python-pytest python-pytest-mock))
29242 (propagated-inputs
29243 (list python-pygments))
29244 (arguments
29245 `(#:phases (modify-phases %standard-phases
29246 (replace 'check
29247 (lambda _
29248 (invoke "pytest")
29249 #t)))))
29250 (home-page "https://github.com/samuelcolvin/python-devtools")
29251 (synopsis "Debug command and development tools")
29252 (description
29253 "This package provides a debug print command and other development tools.
29254It adds a simple and readable way to print stuff during development.")
29255 (license license:expat)))
29256
29257(define-public python-dateparser
29258 (package
29259 (name "python-dateparser")
29260 (version "1.1.3")
29261 (source
29262 (origin
29263 (method url-fetch)
29264 (uri (pypi-uri "dateparser" version))
29265 (sha256
29266 (base32
29267 "19fbgq1zrwx10kljmdbs3p0y2m2xsgww20pqzw4kv6161zipsymf"))))
29268 (build-system pyproject-build-system)
29269 (propagated-inputs
29270 (list python-dateutil python-pytz python-regex python-ruamel.yaml
29271 python-tzlocal))
29272 (native-inputs
29273 (list python-flake8 python-pytest python-parameterized tzdata-for-tests))
29274 (arguments
29275 `(#:phases
29276 (modify-phases %standard-phases
29277 (add-before 'check 'set-check-environment
29278 (lambda* (#:key inputs #:allow-other-keys)
29279 (setenv "TZ" "UTC")
29280 (setenv "TZDIR"
29281 (search-input-directory inputs
29282 "share/zoneinfo"))))
29283 (add-before 'check 'delete-failing-tests
29284 (lambda _
29285 (with-directory-excursion "tests"
29286 (for-each delete-file
29287 '("test_dateparser_data_integrity.py"
29288 "test_hijri.py"
29289 "test_jalali.py"
29290 "test_language_detect.py"))))))))
29291 (home-page "https://github.com/scrapinghub/dateparser")
29292 (synopsis
29293 "Date parsing library designed to parse dates from HTML pages")
29294 (description
29295 "@code{python-dateparser} provides modules to easily parse localized
29296dates in almost any string formats commonly found on web pages.")
29297 (license license:bsd-3)))
29298
29299(define-public python-dparse
29300 (package
29301 (name "python-dparse")
29302 (version "0.5.1")
29303 (source
29304 (origin
29305 (method url-fetch)
29306 (uri (pypi-uri "dparse" version))
29307 (sha256
29308 (base32
29309 "0rzkg3nymsbwdjc0ms2bsajkda02jipwyp3xk97qj71f21lz3dd1"))))
29310 (build-system python-build-system)
29311 (native-inputs
29312 (list python-pytest))
29313 (propagated-inputs
29314 (list python-packaging python-pyyaml python-toml))
29315 (home-page "https://github.com/pyupio/dparse")
29316 (synopsis "Parser for Python dependency files")
29317 (description "This package provides a parser for Python dependency files.")
29318 (license license:expat)))
29319
29320(define-public python-dpath
29321 (package
29322 (name "python-dpath")
29323 (version "2.0.1")
29324 (source
29325 (origin
29326 (method url-fetch)
29327 (uri (pypi-uri "dpath" version))
29328 (sha256
29329 (base32
29330 "1ymi9ssk7i0mx3mviplf4csfvzibdd6wyj4qzj6s487n9xgnp85y"))))
29331 (build-system python-build-system)
29332 (native-inputs
29333 (list python-hypothesis python-mock python-nose))
29334 (arguments
29335 '(#:phases
29336 (modify-phases %standard-phases
29337 (replace 'check
29338 (lambda* (#:key inputs outputs #:allow-other-keys)
29339 (add-installed-pythonpath inputs outputs)
29340 ;; This invokation is taken from tox.ini.
29341 (invoke "nosetests" "-d" "-v" "tests/"))))))
29342 (home-page "https://github.com/akesterson/dpath-python")
29343 (synopsis "File-system-like pathing and searching for dictionaries")
29344 (description
29345 "@code{python-dpath} is a library for accessing and searching
29346dictionaries via /slashed/paths ala xpath.
29347
29348Basically it lets you glob over a dictionary as if it were a file system. It
29349allows you to specify globs (ala the bash eglob syntax, through some advanced
29350fnmatch.fnmatch magic) to access dictionary elements, and provides some
29351facility for filtering those results.")
29352 (license license:expat)))
29353
29354(define-public python-safety
29355 (package
29356 (name "python-safety")
29357 (version "1.9.0")
29358 (source
29359 (origin
29360 (method url-fetch)
29361 (uri (pypi-uri "safety" version))
29362 (sha256
29363 (base32
29364 "1j801xsxfzavjbzhhc934awvnk1b7jc0qsw3jp3ys0241mlj1gr3"))))
29365 (build-system python-build-system)
29366 (arguments
29367 `(#:phases
29368 (modify-phases %standard-phases
29369 (add-after 'unpack 'disable-tests
29370 (lambda _
29371 (substitute* "tests/test_safety.py"
29372 ;; requires network
29373 (("def test_check_live") "def _test_check_live"))
29374 #t)))))
29375 (propagated-inputs
29376 (list python-click python-dparse python-packaging python-requests))
29377 (home-page "https://github.com/pyupio/safety")
29378 (synopsis "Check installed dependencies for known vulnerabilities")
29379 (description "Safety checks installed dependencies for known vulnerabilities.
29380By default it uses the open Python vulnerability database Safety DB.")
29381 (license license:expat)))
29382
29383(define-public python-pypandoc
29384 (package
29385 (name "python-pypandoc")
29386 (version "1.7.5")
29387 (source
29388 (origin
29389 (method url-fetch)
29390 (uri (pypi-uri "pypandoc" version))
29391 (sha256
29392 (base32
29393 "0l6a8ngzpx363q2jskxxkx6psfhqrvc4js80dmn16r3vw6m2cb40"))))
29394 (build-system python-build-system)
29395 (inputs
29396 (list pandoc python-pandocfilters))
29397 (propagated-inputs
29398 `(("wheel" ,python-wheel)))
29399 (native-inputs
29400 `(("texlive" ,(texlive-updmap.cfg (list texlive-lm texlive-xcolor)))))
29401 (arguments
29402 `(#:phases
29403 (modify-phases %standard-phases
29404 (add-before 'check 'disable-tests
29405 (lambda _
29406 ;; Disable test requiring network access
29407 (substitute* "tests.py"
29408 (("test_basic_conversion_from_http_url")
29409 "skip_test_basic_conversion_from_http_url"))
29410 #t)))))
29411 (home-page "https://github.com/bebraw/pypandoc")
29412 (synopsis "Python wrapper for pandoc")
29413 (description "pypandoc is a thin Python wrapper around pandoc
29414and pandoc-citeproc.")
29415 (license license:expat)))
29416
29417(define-public python-rnc2rng
29418 (package
29419 (name "python-rnc2rng")
29420 (version "2.6.6")
29421 (source
29422 (origin
29423 (method url-fetch)
29424 (uri (pypi-uri "rnc2rng" version))
29425 (sha256
29426 (base32
29427 "1wbqvz2bhq2f5kqi7q2q3m9y5vs9rj970zhnjh502pvvhmbx20as"))))
29428 (build-system python-build-system)
29429 (propagated-inputs
29430 (list python-rply))
29431 (arguments
29432 `(#:phases (modify-phases %standard-phases
29433 (replace 'check
29434 (lambda _
29435 (invoke "python" "test.py"))))))
29436 (home-page "https://github.com/djc/rnc2rng")
29437 (synopsis "Convert RELAX NG Compact to regular syntax")
29438 (description
29439 "This package provides the @command{rnc2rng} command-line tool as well as
29440a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
29441equivalent schemata in the XML-based default RELAX NG syntax.")
29442 (license license:expat)))
29443
29444(define-public python-telethon
29445 (package
29446 (name "python-telethon")
29447 (version "1.17.5")
29448 (source
29449 (origin
29450 (method git-fetch)
29451 (uri (git-reference
29452 (url "https://github.com/LonamiWebs/Telethon")
29453 (commit (string-append "v" version))))
29454 (file-name (git-file-name name version))
29455 (sha256
29456 (base32 "0l9fhdrq576vllgi9aam45xzw5xi6jhgdv5zz8i4ygssdp7cm8jl"))))
29457 (build-system python-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 "py.test" "-v"))
29465 #t)))))
29466 (propagated-inputs
29467 (list python-rsa python-pyaes))
29468 (native-inputs
29469 (list python-pytest python-pytest-asyncio python-pytest-trio))
29470 (home-page "https://docs.telethon.dev")
29471 (synopsis "Full-featured Telegram client library for Python 3")
29472 (description "This library is designed to make it easy to write Python
29473programs that can interact with Telegram.")
29474 (license license:expat)))
29475
29476(define-public python-citeproc-py
29477 (package
29478 (name "python-citeproc-py")
29479 (version "0.5.1")
29480 (source
29481 (origin
29482 (method url-fetch)
29483 (uri (pypi-uri "citeproc-py" version))
29484 (sha256
29485 (base32
29486 "00aaff50jy4j0nakdzq9258z1gzrac9baarli2ymgspj88jg5968"))))
29487 (build-system python-build-system)
29488 (propagated-inputs
29489 (list python-lxml python-rnc2rng))
29490 (home-page
29491 "https://github.com/brechtm/citeproc-py")
29492 (synopsis "Citations and bibliography formatter")
29493 (description
29494 "Citeproc-py is a CSL processor for Python. It aims to implement the
29495CSL 1.0.1 specification. citeproc-py can output styled citations and
29496bibliographies in a number of different output formats. Currently supported
29497are plain text, reStructuredText and HTML.")
29498 (license license:bsd-2)))
29499
29500(define-public python-inform
29501 (package
29502 (name "python-inform")
29503 (version "1.23.0")
29504 (source
29505 (origin
29506 (method url-fetch)
29507 (uri (pypi-uri "inform" version))
29508 (sha256
29509 (base32
29510 "0dvc5klbnbryrvspp45nmlg02g40j7xspcz7lqsm0c0dj0z29zdz"))))
29511 (build-system python-build-system)
29512 (arguments
29513 `(#:tests? #f)) ; PyPI tarball lacks tests
29514 (native-inputs
29515 (list python-hypothesis python-pytest-cov python-pytest-runner))
29516 (propagated-inputs
29517 (list python-arrow python-six))
29518 (home-page "https://inform.readthedocs.io")
29519 (synopsis "Print & logging utilities for communicating with user")
29520 (description
29521 "Inform is designed to display messages from programs that are typically run from
29522a console. It provides a collection of ‘print’ functions that allow you to simply and
29523cleanly print different types of messages.")
29524 (license license:gpl3+)))
29525
29526(define-public python-nestedtext
29527 (package
29528 (name "python-nestedtext")
29529 (version "1.0.0")
29530 (source
29531 (origin
29532 (method url-fetch)
29533 (uri (pypi-uri "nestedtext" version))
29534 (sha256
29535 (base32
29536 "0xjx863n7yd1xmkwhy48lhmqrmlzgbx3civhk386hvrzyq4sx148"))))
29537 (build-system python-build-system)
29538 (arguments
29539 `(#:tests? #f)) ; PyPI tarball lacks tests
29540 (propagated-inputs
29541 (list python-inform))
29542 (home-page "https://nestedtext.org")
29543 (synopsis "Human readable and writable data interchange format")
29544 (description
29545 "NestedText is a file format for holding data that is to be entered, edited, or
29546viewed by people. It allows data to be organized into a nested collection of
29547dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
29548without the complexity and risk of YAML and without the syntactic clutter of JSON.
29549NestedText is both simple and natural. Only a small number of concepts and rules must
29550be kept in mind when creating it. It is easily created, modified, or viewed with
29551a text editor and easily understood and used by both programmers and non-programmers.")
29552 (license license:expat))) ; MIT license
29553
29554(define-public python-nest-asyncio
29555 (package
29556 (name "python-nest-asyncio")
29557 (version "1.5.5")
29558 (source
29559 (origin
29560 (method url-fetch)
29561 (uri (pypi-uri "nest_asyncio" version))
29562 (sha256
29563 (base32
29564 "0rbdw7lry66yj13hh4w63yzflnapdal1ffl237k8nsa2v4f2jhp4"))))
29565 (build-system python-build-system)
29566 (home-page "https://github.com/erdewit/nest_asyncio")
29567 (synopsis "Patch asyncio to allow nested event loops")
29568 (description
29569 "By design @code{asyncio} does not allow its event loop to be nested.
29570This presents a practical problem: when in an environment where the event loop
29571is already running it's impossible to run tasks and wait for the result. This
29572module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
29573@code{loop.run_until_complete}.")
29574 (license license:bsd-3)))
29575
29576(define-public python-simpervisor
29577 (package
29578 (name "python-simpervisor")
29579 (version "0.4")
29580 (source
29581 (origin
29582 ;; Tests not included in release.
29583 (method git-fetch)
29584 (uri (git-reference
29585 (url "https://github.com/yuvipanda/simpervisor")
29586 (commit (string-append "v" version))))
29587 (file-name (git-file-name name version))
29588 (sha256
29589 (base32 "1brsisx7saf4ic0dih1n5y7rbdbwn1ywv9pl32bch3061r46prvv"))))
29590 (build-system python-build-system)
29591 (arguments
29592 `(#:tests? #f ; Test suite can't find aiohttp.
29593 #:phases
29594 (modify-phases %standard-phases
29595 (replace 'check
29596 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
29597 (when tests?
29598 (add-installed-pythonpath inputs outputs)
29599 (invoke "pytest" "--maxfail" "3" "--verbose"))
29600 #t)))))
29601 (native-inputs
29602 (list python-aiohttp python-pytest python-pytest-asyncio))
29603 (home-page "https://github.com/yuvipanda/simpervisor")
29604 (synopsis "Simple async process supervisor")
29605 (description
29606 "This package provides a simple async process supervisor in Python.")
29607 (license license:bsd-3)))
29608
29609(define-public python-parallel
29610 (package
29611 (name "python-parallel")
29612 (version "1.6.4.4")
29613 (source
29614 (origin
29615 (method url-fetch)
29616 (uri (string-append
29617 "https://www.parallelpython.com/downloads/pp/pp-"
29618 version ".zip"))
29619 (sha256
29620 (base32
29621 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
29622 (native-inputs
29623 (list unzip))
29624 (propagated-inputs
29625 (list python-six))
29626 (build-system python-build-system)
29627 (arguments '(#:tests? #f)) ; No test suite.
29628 (home-page "https://www.parallelpython.com")
29629 (synopsis "Parallel and distributed programming for Python")
29630 (description "Parallel Python module (PP) provides an easy and efficient
29631way to create parallel-enabled applications for SMP computers and clusters.
29632PP module features cross-platform portability and dynamic load balancing.
29633Thus applications written with PP will parallelize efficiently even on
29634heterogeneous and multi-platform clusters (including clusters running other
29635applications with variable CPU loads).")
29636 (license license:bsd-3)))
29637
29638(define-public python-djvulibre
29639 (package
29640 (name "python-djvulibre")
29641 (version "0.8.6")
29642 (source
29643 (origin
29644 (method url-fetch)
29645 (uri (pypi-uri "python-djvulibre" version))
29646 (sha256
29647 (base32 "089smpq29ll0z37lnq26r2f72d31i33xm9fw9pc6hlcsm6nbjbiv"))))
29648 (build-system python-build-system)
29649 (native-inputs
29650 (list ghostscript pkg-config python-nose))
29651 (inputs
29652 (list djvulibre python-cython))
29653 (arguments
29654 `(#:phases
29655 (modify-phases %standard-phases
29656 (add-after 'unpack 'fix-tests
29657 (lambda _
29658 ;; Unit tests try to load the 'dllpath.py' and fail, because it
29659 ;; doesn't make sense on GNU/Linux.
29660 (delete-file "djvu/dllpath.py")
29661 #t)))))
29662 (synopsis "Python bindings for DjVuLibre")
29663 (description "This is a set of Python bindings for the DjVuLibre library.")
29664 (home-page "https://jwilk.net/software/python-djvulibre")
29665 (license license:gpl2)))
29666
29667(define-public python-version
29668 ;; No version tags available in the git repo; just using bare commit instead.
29669 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
29670 (revision "1"))
29671 (package
29672 (name "python-version")
29673 (version (git-version "0.0.2" revision commit))
29674 (source (origin
29675 (method git-fetch)
29676 (uri (git-reference
29677 (url "https://gitlab.com/halfak/python_version")
29678 (commit commit)))
29679 (file-name (git-file-name name version))
29680 (sha256
29681 (base32
29682 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
29683 (build-system python-build-system)
29684 (home-page "https://gitlab.com/halfak/python_version")
29685 (synopsis "Python version checking utility")
29686 (description
29687 "This package provides a simple utility for checking the python version.")
29688 (license license:expat))))
29689
29690(define-public python-versioneer
29691 (package
29692 (name "python-versioneer")
29693 (version "0.21")
29694 (source
29695 (origin
29696 (method url-fetch)
29697 (uri (pypi-uri "versioneer" version))
29698 (sha256
29699 (base32
29700 "084fglxafbzvf1vbkzfajvs9qwnvjwwn8pxql9nrlpyipv5xpwk4"))
29701 (patches (search-patches "python-versioneer-guix-support.patch"))))
29702 (build-system python-build-system)
29703 (home-page
29704 "https://github.com/python-versioneer/python-versioneer")
29705 (synopsis
29706 "Version-string management for VCS-controlled trees")
29707 (description
29708 "@code{versioneer} is a tool for managing a recorded version number in
29709distutils-based python projects. The goal is to remove the tedious and
29710error-prone \"update the embedded version string\" step from your release
29711process.")
29712 (license license:public-domain)))
29713
29714(define-public python-gamera
29715 (package
29716 (name "python-gamera")
29717 (version "4.0.0")
29718 (source
29719 (origin
29720 (method url-fetch)
29721 (uri (string-append "https://gamera.informatik.hsnr.de/download/"
29722 "gamera-" version ".tar.gz"))
29723 (sha256
29724 (base32 "0fhlwbvpm3k54n4aa1y6qd348jqrb54ak9p0ic16drx7f07dsq05"))
29725 (modules '((guix build utils)))
29726 (snippet
29727 '(begin
29728 ;; Remove bundled libraries.
29729 (for-each delete-file-recursively
29730 '("src/libpng-1.2.5"
29731 "src/libtiff"
29732 "src/zlib-1.2.8"))))))
29733 (build-system python-build-system)
29734 (arguments
29735 `(#:phases
29736 (modify-phases %standard-phases
29737 (add-after 'unpack 'disable-wx-support
29738 (lambda _
29739 (substitute* "setup.py"
29740 (("no_wx = False")
29741 "no_wx = True"))))
29742 (replace 'check
29743 (lambda* (#:key tests? #:allow-other-keys)
29744 (when tests?
29745 ;; Some tests require a writable HOME directory and test
29746 ;; directory.
29747 (setenv "HOME" "/tmp")
29748 (mkdir "tests/tmp") ;the code assumes this directory exists
29749 ;; (for-each make-file-writable (find-files "tests"))
29750 (with-directory-excursion "tests"
29751 (invoke "pytest" "-vv"
29752 ;; This test causes gamera/gendoc.py to be loaded,
29753 ;; which fails due to the missing docutils, pygments
29754 ;; and silvercity (very old, unpackaged) libraries.
29755 "--ignore" "test_plugins.py"
29756 ;; This test triggers a segfault (see:
29757 ;; https://github.com/hsnr-gamera/gamera-4/issues/47).
29758 "--ignore" "test_rle.py"))))))))
29759 (native-inputs (list python-pytest))
29760 (inputs (list libpng libtiff zlib))
29761 (synopsis "Framework for building document analysis applications")
29762 (description
29763 "Gamera is a toolkit for building document image recognition systems.")
29764 (home-page "https://gamera.informatik.hsnr.de/")
29765 (license license:gpl2+)))
29766
29767(define-public python-contextvars
29768 (package
29769 (name "python-contextvars")
29770 (version "2.4")
29771 (source
29772 (origin
29773 (method url-fetch)
29774 (uri (pypi-uri "contextvars" version))
29775 (sha256
29776 (base32
29777 "17n3w8c20kgkgc6khaafdhhlcdj4bzman4paxqsl7harma59137k"))))
29778 (build-system python-build-system)
29779 (propagated-inputs
29780 (list python-immutables))
29781 (home-page
29782 "https://github.com/MagicStack/contextvars")
29783 (synopsis "PEP 567 Backport")
29784 (description "This package implements a backport of Python 3.7
29785@code{contextvars} module (see PEP 567) for Python 3.6.")
29786 (license license:asl2.0)))
29787
29788(define-public python-aiofiles
29789 (package
29790 (name "python-aiofiles")
29791 (version "23.1.0")
29792 (source
29793 (origin
29794 (method url-fetch)
29795 (uri (pypi-uri "aiofiles" version))
29796 (sha256
29797 (base32
29798 "0d8n79slihf1lkbh2m6yw51rlq6n6vssljsdacbdpq0rkbglglpd"))))
29799 (build-system python-build-system)
29800 (home-page "https://github.com/Tinche/aiofiles")
29801 (synopsis "File support for @code{asyncio}")
29802 (description "@code{python-aiofiles} is a library for handling local
29803disk files in asyncio applications.")
29804 (license license:asl2.0)))
29805
29806(define-public python-pyre-extensions
29807 (package
29808 (name "python-pyre-extensions")
29809 (version "0.0.18")
29810 (source
29811 (origin
29812 (method url-fetch)
29813 (uri (pypi-uri "pyre-extensions" version))
29814 (sha256
29815 (base32
29816 "0c5cbbqrfyjwakdh3kbwxis6mbrbwky1z1fqslgszgpcj4g43q30"))))
29817 (build-system python-build-system)
29818 (propagated-inputs
29819 (list python-typing-extensions python-typing-inspect))
29820 (home-page "https://pyre-check.org")
29821 (synopsis
29822 "Type system extensions for use with @code{python-pyre}")
29823 (description
29824 "@code{python-pyre-extensions} defines extensions to the standard
29825@code{typing} module that are supported by the Pyre typechecker.")
29826 (license license:expat)))
29827
29828(define-public python-dataclasses
29829 (package
29830 (name "python-dataclasses")
29831 (version "0.8")
29832 (source
29833 (origin
29834 (method url-fetch)
29835 (uri (pypi-uri "dataclasses" version))
29836 (sha256
29837 (base32
29838 "15sc12nrc7gxwb30vfa6frzdnpmbap9ibi1fr1yrbkra6izhcyc4"))))
29839 (build-system python-build-system)
29840 (home-page
29841 "https://github.com/ericvsmith/dataclasses")
29842 (synopsis
29843 "Backport of the @code{dataclasses} module for Python 3.6")
29844 (description
29845 "This is an implementation of PEP 557, Data Classes. It is a
29846backport of the @code{dataclasses} module for Python 3.6.")
29847 (license license:asl2.0)))
29848
29849(define-public python-pywatchman
29850 (package
29851 (name "python-pywatchman")
29852 (version "1.4.1")
29853 (source
29854 (origin
29855 (method url-fetch)
29856 (uri (pypi-uri "pywatchman" version))
29857 (sha256
29858 (base32
29859 "1yf2gm20wc3djpb5larxii3l55xxby0il2ns3q0v1byyfnr7w16h"))))
29860 (build-system python-build-system)
29861 (arguments
29862 `(#:tests? #f)) ;there are none
29863 (home-page
29864 "https://facebook.github.io/watchman/")
29865 (synopsis "Watchman client for python")
29866 (description "@code{python-pywatchman} is a library to connect and
29867query Watchman to discover file changes.")
29868 (license license:bsd-3)))
29869
29870(define-public python-roundrobin
29871 (package
29872 (name "python-roundrobin")
29873 (version "0.0.2")
29874 (source (origin
29875 (method url-fetch)
29876 (uri (pypi-uri "roundrobin" version))
29877 (sha256
29878 (base32 "1akwhvfyi0120zg2xkhfc6jwfkirz5x90yyvw06bndhaaxwcnc5c"))))
29879 (build-system python-build-system)
29880 (arguments '(#:tests? #f)) ;no tests on PyPI and no tags in repo
29881 (home-page "https://github.com/linnik/roundrobin")
29882 (synopsis "Collection of roundrobin utilities")
29883 (description
29884 "This package provides a collection of utilities for round-robin
29885distribution in Python.")
29886 (license license:expat)))
29887
29888(define-public python-helpdev
29889 (package
29890 (name "python-helpdev")
29891 (version "0.7.1")
29892 (source
29893 (origin
29894 (method url-fetch)
29895 (uri (pypi-uri "helpdev" version))
29896 (sha256
29897 (base32
29898 "0gfvj28i82va7c264jl2p4cdsl3lpf9fpb9cyjnis55crfdafqmv"))))
29899 (build-system python-build-system)
29900 (arguments
29901 `(#:phases
29902 (modify-phases %standard-phases
29903 (replace 'check
29904 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
29905 (when tests?
29906 (add-installed-pythonpath inputs outputs)
29907 (invoke "pytest" "tests"))
29908 #t)))))
29909 (propagated-inputs
29910 (list python-importlib-metadata))
29911 (native-inputs
29912 (list python-pytest))
29913 (home-page "https://gitlab.com/dpizetta/helpdev")
29914 (synopsis
29915 "Extract information about the Python environment easily")
29916 (description
29917 "Helpdev is a library to easily extract information about the Python
29918environment.")
29919 (license license:expat)))
29920
29921(define-public python-logutils
29922 (package
29923 (name "python-logutils")
29924 (version "0.3.5")
29925 (source
29926 (origin
29927 (method url-fetch)
29928 (uri (pypi-uri "logutils" version))
29929 (sha256
29930 (base32
29931 "10lsi5wv5ysnvf9ya4ncbix6mmipnv5067sf2cglc2f2sljql1dw"))))
29932 (build-system python-build-system)
29933 (home-page "https://bitbucket.org/vinay.sajip/logutils/")
29934 (synopsis "Logging utilities")
29935 (description "This package provides a set of handlers for the Python
29936standard library logging package. Some of these handlers are out-of-scope
29937for the standard library, and so they are packaged here. Others are updated
29938versions which have appeared in recent Python releases, but are usable with
29939older versions of Python and so are packaged here.")
29940 (license license:bsd-3)))
29941
29942(define-public python-loguru
29943 (package
29944 (name "python-loguru")
29945 (version "0.7.0")
29946 (source (origin
29947 (method url-fetch)
29948 (uri (pypi-uri "loguru" version))
29949 (sha256
29950 (base32
29951 "1q83kr9zwwxchgyzf8gc6wi68ch5391mwzfxb5wlvs3axly0a4hn"))))
29952 (build-system pyproject-build-system)
29953 (arguments
29954 (list
29955 #:test-flags
29956 ;; All of these fail with: error: Cannot find implementation or library
29957 ;; stub for module named "loguru"
29958 '(list "--ignore=tests/typesafety/test_logger.yml")))
29959 (propagated-inputs (list python-colorama))
29960 (native-inputs (list python-colorama
29961 python-freezegun
29962 python-mypy
29963 python-pre-commit
29964 python-pytest
29965 python-pytest-cov
29966 python-pytest-mypy-plugins
29967 python-sphinx
29968 python-sphinx-autobuild
29969 python-sphinx-rtd-theme
29970 python-tox))
29971 (home-page "https://github.com/Delgan/loguru")
29972 (synopsis "Python logging made (stupidly) simple")
29973 (description "Python logging made (stupidly) simple")
29974 (license license:expat)))
29975
29976(define-public python-helper
29977 (package
29978 (name "python-helper")
29979 (version "2.5.0")
29980 (source (origin
29981 (method url-fetch)
29982 (uri (pypi-uri "helper" version))
29983 (sha256
29984 (base32
29985 "1d2j64wgbggzv5rhvil10zndp2w78wa5np5w0psj122ws9qr9wsa"))))
29986 (build-system python-build-system)
29987 (native-inputs
29988 (list python-mock))
29989 (propagated-inputs
29990 (list python-logutils python-pyyaml))
29991 (home-page "https://github.com/gmr/helper")
29992 (synopsis "Library for writing configurable applications and daemons")
29993 (description
29994 "This package provides procedures for quickly writing configurable
29995applications and daemons.")
29996 (license license:bsd-3)))
29997
29998(define-public python-qtsass
29999 (package
30000 (name "python-qtsass")
30001 (version "0.3.0")
30002 (source
30003 (origin
30004 ;; There are no tests in the PyPI tarball.
30005 (method git-fetch)
30006 (uri (git-reference
30007 (url "https://github.com/spyder-ide/qtsass/")
30008 (commit (string-append "v" version))))
30009 (file-name (git-file-name name version))
30010 (sha256
30011 (base32 "09s04aa14d8jqbh71clrb5y7vcmkxlp94mwmvzrkxahry3bk03cb"))))
30012 (build-system python-build-system)
30013 (arguments
30014 `(#:test-target "pytest"
30015 #:phases
30016 (modify-phases %standard-phases
30017 ;; Tests need to read and write files.
30018 (add-before 'check 'make-git-checkout-writable
30019 (lambda _
30020 (for-each make-file-writable (find-files "."))
30021 #t)))))
30022 (native-inputs
30023 (list python-pytest python-pytest-cov python-pytest-runner))
30024 (propagated-inputs
30025 (list python-libsass))
30026 (home-page "https://github.com/spyder-ide/qtsass")
30027 (synopsis "Compile SCSS files to valid Qt stylesheets")
30028 (description
30029 "Besides being used in web development, CSS is also the way to stylize
30030Qt-based desktop applications. However, Qt's CSS has a few variations that
30031prevent the direct use of SASS compiler.
30032
30033The purpose of this tool is to fill the gap between SASS and Qt-CSS by
30034handling those variations.")
30035 (license license:expat)))
30036
30037(define-public python-qdarkstyle
30038 (package
30039 (name "python-qdarkstyle")
30040 (version "2.8.1")
30041 (source
30042 (origin
30043 (method url-fetch)
30044 (uri (pypi-uri "QDarkStyle" version))
30045 (sha256
30046 (base32
30047 "0883vzg35fzpyl1aiijzpfcdfvpq5vi325w0m7xkx7nxplh02fym"))))
30048 (build-system python-build-system)
30049 (arguments
30050 `(;; Fails unable to detect valid Qt bindings even when
30051 ;; added as native-inputs.
30052 #:tests? #f))
30053 (propagated-inputs
30054 (list python-helpdev python-qtpy))
30055 (home-page
30056 "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
30057 (synopsis
30058 "Complete dark stylesheet for Python and Qt applications")
30059 (description "QDarkStyle is the most complete dark stylesheet for Python and
30060Qt applications.")
30061 (license license:expat)))
30062
30063(define-public python-bitstring
30064 (package
30065 (name "python-bitstring")
30066 (version "3.1.7")
30067 (source
30068 (origin
30069 (method url-fetch)
30070 (uri (pypi-uri "bitstring" version))
30071 (sha256
30072 (base32
30073 "0jl6192dwrlm5ybkbh7ywmyaymrc3cmz9y07nm7qdli9n9rfpwzx"))))
30074 (build-system python-build-system)
30075 (arguments
30076 `(#:phases
30077 (modify-phases %standard-phases
30078 (replace 'check
30079 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30080 (when tests?
30081 (add-installed-pythonpath inputs outputs)
30082 (with-directory-excursion "test"
30083 (invoke "pytest")))
30084 #t)))))
30085 (native-inputs
30086 (list python-pytest))
30087 (home-page "https://github.com/scott-griffiths/bitstring")
30088 (synopsis
30089 "Simple construction, analysis and modification of binary data")
30090 (description
30091 "Bitstring is a library for simple construction, analysis and modification
30092 of binary data.")
30093 (license license:expat)))
30094
30095(define-public python-confuse
30096 (package
30097 (name "python-confuse")
30098 (version "1.5.0")
30099 (source
30100 (origin
30101 (method url-fetch)
30102 (uri (pypi-uri "confuse" version))
30103 (sha256
30104 (base32
30105 "0bh2kyj8wd7h9gg4nsvrbykl5ly0f70f0wi3fbm204b1f0fcmywj"))))
30106 (build-system python-build-system)
30107 (propagated-inputs
30108 (list python-pyyaml))
30109 (home-page "https://github.com/beetbox/confuse")
30110 (synopsis "Painless YAML configuration")
30111 (description "Confuse is a configuration library for Python that uses
30112YAML. It takes care of defaults, overrides, type checking, command-line
30113integration, human-readable errors, and standard OS-specific locations.")
30114 (license license:expat)))
30115
30116(define-public python-reflink
30117 (package
30118 (name "python-reflink")
30119 (version "0.2.1")
30120 (source
30121 (origin
30122 (method url-fetch)
30123 (uri (pypi-uri "reflink" version))
30124 (sha256
30125 (base32
30126 "0fkf3sd958g9hvr3jwlhnhqqzrwxljrc3grsf3yknh94vf13a9f9"))))
30127 (build-system python-build-system)
30128 (arguments
30129 `(#:tests? #false)) ; almost all tests want to run mkfs.btrfs
30130 (propagated-inputs
30131 (list python-cffi))
30132 (native-inputs
30133 (list python-pytest python-pytest-runner))
30134 (home-page "https://gitlab.com/rubdos/pyreflink")
30135 (synopsis "Python wrapper around reflink system call")
30136 (description
30137 "Python reflink wraps around platform specific @code{reflink}
30138implementations.")
30139 (license license:expat)))
30140
30141(define-public python-retry
30142 (package
30143 (name "python-retry")
30144 (version "0.9.2")
30145 (source (origin
30146 (method url-fetch)
30147 (uri (pypi-uri "retry" version))
30148 (sha256
30149 (base32 "197v6qrh6858bhzzrjgk2zdqrybppymb1lsvdxnm1i39kfwsigzq"))))
30150 (build-system python-build-system)
30151 (arguments
30152 (list #:phases
30153 #~(modify-phases %standard-phases
30154 (replace 'check
30155 (lambda* (#:key tests? #:allow-other-keys)
30156 (when tests? (invoke "pytest" "-vv")))))))
30157 (native-inputs (list python-pbr python-pytest))
30158 (propagated-inputs (list python-decorator python-py))
30159 (home-page "https://github.com/invl/retry")
30160 (synopsis "Retry decorator")
30161 (description
30162 "@code{retry} is an easy to use retry decorator for Python. It can be
30163used to retry a function a given number of times.")
30164 (license license:asl2.0)))
30165
30166(define-public python-pivy
30167 (package
30168 (name "python-pivy")
30169 (version "0.6.5")
30170 (source
30171 (origin
30172 (method git-fetch)
30173 (uri (git-reference
30174 (url "https://github.com/coin3d/pivy")
30175 (commit version)))
30176 (file-name (git-file-name name version))
30177 (sha256
30178 (base32 "0vids7sxk8w5vr73xdnf8xdci71a7syl6cd35aiisppbqyyfmykx"))))
30179 (build-system python-build-system)
30180 (arguments
30181 `(;; The test suite fails due to an import cycle between 'pivy' and '_coin'
30182 #:tests? #f
30183 #:phases
30184 (modify-phases %standard-phases
30185 (add-after 'unpack 'patch-cmake-include-dirs
30186 (lambda _
30187 ;; Patch buildsystem to respect Coin3D include directory
30188 (substitute* "CMakeLists.txt"
30189 (("\\$\\{SoQt_INCLUDE_DIRS}")
30190 "${Coin_INCLUDE_DIR};${SoQt_INCLUDE_DIRS}"))
30191 #t)))))
30192 (native-inputs
30193 (list cmake swig))
30194 (inputs
30195 (list python-wrapper
30196 qtbase-5
30197 libxi
30198 libice
30199 soqt
30200 glew
30201 coin3D))
30202 (home-page "https://github.com/coin3d/pivy")
30203 (synopsis "Python bindings to Coin3D")
30204 (description
30205 "Pivy provides python bindings for Coin, a 3D graphics library with an
30206Application Programming Interface based on the Open Inventor 2.1 API.")
30207 (license license:isc)))
30208
30209(define-public python-crayons
30210 (package
30211 (name "python-crayons")
30212 (version "0.4.0")
30213 (source
30214 (origin
30215 (method url-fetch)
30216 (uri (pypi-uri "crayons" version))
30217 (sha256
30218 (base32
30219 "0gw106k4b6y8mw7pp52awxyplj2bwvwk315k4sywzwh0g1abfcxx"))))
30220 (build-system python-build-system)
30221 (propagated-inputs
30222 (list python-colorama))
30223 (home-page "https://github.com/MasterOdin/crayons")
30224 (synopsis "TextUI colors for Python")
30225 (description "This package gives you colored strings for the terminal.
30226Crayons automatically wraps a given string in the foreground color and
30227restores the original state after the string is printed.")
30228 (license license:expat)))
30229
30230(define-public python-sane
30231 (package
30232 (name "python-sane")
30233 (version "2.9.1")
30234 (source
30235 (origin
30236 (method url-fetch)
30237 (uri (pypi-uri name version))
30238 (sha256
30239 (base32
30240 "1pi597z94n2mkd821ln52fq0g727n2jxfskf280ip3kf7jw8w294"))))
30241 (build-system python-build-system)
30242 (native-inputs
30243 (list python-pytest))
30244 (inputs
30245 (list sane-backends))
30246 (home-page "https://github.com/python-pillow/Sane")
30247 (synopsis "Python interface to the SANE scanner")
30248 (description "This package provides Python interface to the SANE scanner
30249and frame grabber interface.")
30250 (license (license:non-copyleft
30251 ;; Yet another variant of the X/MIT license.
30252 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
30253
30254(define-public python-scikit-build
30255 (package
30256 (name "python-scikit-build")
30257 (version "0.17.6")
30258 (source
30259 (origin
30260 (method url-fetch)
30261 (uri (pypi-uri "scikit_build" version))
30262 (sha256
30263 (base32 "17awdvpzj4bn50gk4gmj20r2xcjr5y8lfl2bk582di1pdfim26mm"))))
30264 (build-system pyproject-build-system)
30265 (arguments
30266 (list
30267 #:phases
30268 #~(modify-phases %standard-phases
30269 (add-after 'unpack 'patch-cmake-executable
30270 (lambda* (#:key inputs #:allow-other-keys)
30271 (substitute* "skbuild/constants.py"
30272 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
30273 (format #f "~a ~s~%" head
30274 (search-input-file inputs "bin/cmake"))))))
30275 (replace 'check
30276 (lambda* (#:key tests? #:allow-other-keys)
30277 (when tests?
30278 ;; These tests attempt to pull dependencies from the Internet.
30279 (delete-file "tests/test_distribution.py")
30280 (delete-file "tests/test_pep518.py")
30281 ;; The tests marked as "isolate" are tests that require access
30282 ;; to the network.
30283 (invoke "pytest" "-vv" "-m" "not isolated"
30284 "-n" (number->string (parallel-job-count))
30285 "-k" (string-append
30286 ;; These tests attempt to write to read-only
30287 ;; Python install directory.
30288 "not test_install_command "
30289 "and not test_test_command "
30290 "and not test_hello_develop "
30291 ;; These sdist-related tests fail for unknown
30292 ;; reasons (see:
30293 ;; https://github.com/scikit-build/scikit-build/issues/689).
30294 "and not test_hello_sdist_with_base "
30295 "and not test_manifest_in_sdist "
30296 "and not test_hello_sdist "
30297 "and not test_sdist_with_symlinks "
30298 ;; These are not parallel safe and fail
30299 ;; nondeterministically (see:
30300 ;; https://github.com/scikit-build/scikit-build/issues/711).
30301 "and not test_generator_cleanup "
30302 "and not test_generator_selection "))))))))
30303 (native-inputs
30304 (list cmake-minimal
30305 gfortran
30306 git-minimal/pinned ;for tests
30307 ninja
30308 python-coverage
30309 python-cython
30310 python-hatchling
30311 python-hatch-fancy-pypi-readme
30312 python-hatch-vcs
30313 python-mock
30314 python-packaging
30315 python-path
30316 python-pytest
30317 python-pytest-cov
30318 python-pytest-mock
30319 python-pytest-virtualenv
30320 python-pytest-xdist
30321 python-requests
30322 python-setuptools-scm
30323 python-virtualenv))
30324 (propagated-inputs
30325 (list python-distro python-packaging python-tomli python-wheel))
30326 (home-page "https://github.com/scikit-build/scikit-build")
30327 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
30328 (description "Scikit-build is an improved build system generator for
30329CPython C/C++/Fortran/Cython extensions. It has support for additional
30330compilers, build systems, cross compilation, and locating dependencies and
30331determining their build requirements. The scikit-build package is
30332fundamentally just glue between the @code{setuptools} Python module and
30333CMake.")
30334 (license license:expat)))
30335
30336(define-public python-screenkey
30337 (package
30338 (name "python-screenkey")
30339 (version "1.4")
30340 (source
30341 (origin
30342 (method git-fetch)
30343 (uri (git-reference
30344 (url "https://gitlab.com/screenkey/screenkey")
30345 (commit (string-append "v" version))))
30346 (file-name (git-file-name name version))
30347 (sha256
30348 (base32
30349 "1rfngmkh01g5192pi04r1fm7vsz6hg9k3qd313sn9rl9xkjgp11l"))))
30350 (build-system python-build-system)
30351 (arguments
30352 `(#:phases
30353 (modify-phases %standard-phases
30354 (add-after 'unpack 'fix-dlopen-paths
30355 (lambda* (#:key inputs outputs #:allow-other-keys)
30356 (let* ((x11 (assoc-ref inputs "libx11"))
30357 (xtst (assoc-ref inputs "libxtst")))
30358 (substitute* "Screenkey/xlib.py"
30359 (("libX11.so.6")
30360 (string-append x11 "/lib/libX11.so.6")))
30361 (substitute* "Screenkey/xlib.py"
30362 (("libXtst.so.6")
30363 (string-append xtst "/lib/libXtst.so.6")))
30364 #t)))
30365 (add-after 'install 'wrap-screenkey
30366 (lambda* (#:key outputs #:allow-other-keys)
30367 (wrap-program
30368 (string-append (assoc-ref outputs "out") "/bin/screenkey")
30369 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
30370 `("GI_TYPELIB_PATH"
30371 ":" prefix (,(getenv "GI_TYPELIB_PATH")))))))))
30372 (inputs
30373 (list python-distutils-extra
30374 python-tokenize-rt
30375 libx11
30376 libxtst
30377 gtk+
30378 python-pygobject
30379 python-pycairo
30380 python-setuptools-git
30381 python-babel))
30382 (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
30383 (synopsis
30384 "Screencast tool to display pressed keys")
30385 (description
30386 "Screenkey is a screencast tool to display your keys inspired by
30387Screenflick.")
30388 (license license:gpl3+)))
30389
30390(define-public python-jinja2-cli
30391 (package
30392 (name "python-jinja2-cli")
30393 (version "0.7.0")
30394 (source
30395 (origin
30396 (method url-fetch)
30397 (uri (pypi-uri "jinja2-cli" version))
30398 (sha256
30399 (base32
30400 "0vikx7v6fbvww6kfrv0k5a24jyv3ak7nindg60906pdd1m9qvkcw"))))
30401 (build-system python-build-system)
30402 (propagated-inputs
30403 (list python-jinja2))
30404 (native-inputs
30405 (list python-flake8 python-jinja2 python-pytest))
30406 (home-page "https://github.com/mattrobenolt/jinja2-cli")
30407 (synopsis "Command-line interface to Jinja2")
30408 (description
30409 "This package provides a command-line interface (CLI) to the Jinja2
30410template engine.")
30411 (license license:bsd-3)))
30412
30413(define-public python-readability
30414 (package
30415 (name "python-readability")
30416 (version "0.3.1")
30417 (source
30418 (origin
30419 (method url-fetch)
30420 (uri (pypi-uri "readability" version))
30421 (sha256
30422 (base32
30423 "1b8gq3g2zwvx0aivvdg56cc0bn7xw6f2v6psmxdx9aiipkw0s0zr"))))
30424 (build-system python-build-system)
30425 (home-page
30426 "https://github.com/andreasvc/readability/")
30427 (synopsis
30428 "Measure the readability of a given text using surface
30429characteristics")
30430 (description
30431 "This package provides a Python library that is an implementation of
30432traditional readability measures based on simple surface
30433characteristics. These measures are basically linear regressions based on the
30434number of words, syllables, and sentences.")
30435 (license license:asl2.0)))
30436
30437(define-public python-readability-lxml
30438 (package
30439 (name "python-readability-lxml")
30440 (version "0.8.1")
30441 (source (origin
30442 (method git-fetch)
30443 (uri (git-reference
30444 (url "https://github.com/buriy/python-readability")
30445 (commit (string-append "v" version))))
30446 (file-name (git-file-name name version))
30447 (sha256
30448 (base32
30449 "13nfy2v0pbbf62jn9qwgi489gg97hbb22q6w3f78mnvjxd2m19rh"))
30450 (snippet
30451 #~(begin (delete-file "readability/compat/two.py")))))
30452 (build-system python-build-system)
30453 (arguments
30454 (list
30455 #:phases
30456 #~(modify-phases %standard-phases
30457 (replace 'check
30458 (lambda* (#:key tests? #:allow-other-keys)
30459 (when tests?
30460 (invoke "python" "-m" "pytest" "-v" "tests/")))))))
30461 (propagated-inputs (list python-chardet python-cssselect python-lxml))
30462 (native-inputs (list python-timeout-decorator python-pytest))
30463 (home-page "http://github.com/buriy/python-readability")
30464 (synopsis "HTML to text parser")
30465 (description
30466 "This package provides classes and function that strip gratuitous markup
30467from web pages to make them easier to read.")
30468 (license license:asl2.0)))
30469
30470(define-public python-listparser
30471 (package
30472 (name "python-listparser")
30473 (version "0.18")
30474 (source
30475 (origin
30476 (method url-fetch)
30477 (uri (pypi-uri "listparser" version))
30478 (sha256
30479 (base32
30480 "0hdqs1mmayw1r8yla43hgb4d9y3zqs5483vgf8j9ygczkd2wrq2b"))))
30481 (build-system python-build-system)
30482 (home-page
30483 "https://github.com/kurtmckee/listparser")
30484 (synopsis
30485 "Parse subscription lists in Python")
30486 (description
30487 "This package provides a Python library that can parse OPML, FOAF, and
30488iGoogle subscription lists.")
30489 (license license:expat)))
30490
30491(define-public python-smartypants
30492 (package
30493 (name "python-smartypants")
30494 (version "2.0.1")
30495 (source
30496 (origin
30497 ;; There's no source tarball for 2.0.1 on PyPI.
30498 (method git-fetch)
30499 (uri (git-reference
30500 (url "https://github.com/leohemsted/smartypants.py")
30501 (commit (string-append "v" version))))
30502 (file-name (git-file-name name version))
30503 (sha256
30504 (base32 "00p1gnb9pzb3svdq3c5b9b332gsp50wrqqa39gj00m133zadanjp"))))
30505 (build-system python-build-system)
30506 (arguments
30507 '(#:phases
30508 (modify-phases %standard-phases
30509 (replace 'check
30510 ;; Its `setup.py test` doesn't report failure with exit status, so
30511 ;; we use `nose` instead.
30512 (lambda _
30513 (invoke "nosetests" "-v" "--exclude=^load_tests$"))))))
30514 (native-inputs
30515 ;; For tests.
30516 (list python-docutils python-nose python-pygments))
30517 (home-page "https://github.com/leohemsted/smartypants.py")
30518 (synopsis "Translate punctuation characters into smart quotes")
30519 (description
30520 "@command{smartpants} can perform the following transformations:
30521@enumerate
30522@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
30523@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
30524entities
30525@item Dashes (-- and ---) into en- and em-dash entities
30526@item Three consecutive dots (... or . . .) into an ellipsis entity
30527@end enumerate")
30528 (license license:bsd-3)))
30529
30530(define-public python-typogrify
30531 (package
30532 (name "python-typogrify")
30533 (version "2.0.7")
30534 (source (origin
30535 (method url-fetch)
30536 (uri (pypi-uri "typogrify" version))
30537 (sha256
30538 (base32
30539 "0f6b2gnnxjbx1fbmkcscc6qjr4hi78kwm1wx4b766ha3va66dr4b"))))
30540 (build-system python-build-system)
30541 (arguments
30542 '(#:phases
30543 (modify-phases %standard-phases
30544 (replace 'check
30545 (lambda _
30546 (invoke "nosetests" "-v"))))))
30547 (propagated-inputs
30548 (list python-smartypants))
30549 (native-inputs
30550 ;; For tests.
30551 (list python-nose))
30552 (home-page "https://github.com/mintchaos/typogrify")
30553 (synopsis "Filters to transform text into typographically-improved HTML")
30554 (description
30555 "@code{typogrify} provides a set of custom filters that automatically
30556apply various transformations to plain text in order to yield
30557typographically-improved HTML. While often used in conjunction with Jinja and
30558Django template systems, the filters can be used in any environment.")
30559 (license license:bsd-3)))
30560
30561(define-public python-ld
30562 (package
30563 (name "python-ld")
30564 (version "0.5.0")
30565 (source
30566 (origin
30567 (method url-fetch)
30568 (uri (pypi-uri "ld" version))
30569 (sha256
30570 (base32
30571 "1k4ydp5rgkv4985v459kcl06i1igjm1ywvh2vkbi9ck1zyyri1z5"))))
30572 (build-system python-build-system)
30573 (propagated-inputs
30574 (list python-six))
30575 (home-page "https://github.com/nir0s/ld")
30576 (synopsis "OS platform information API")
30577 (description
30578 "The ld package provides information about the GNU/Linux distribution it
30579runs on, such as a reliable machine-readable ID, or version information.")
30580 (license license:asl2.0)))
30581
30582(define-public python-quicktions
30583 (package
30584 (name "python-quicktions")
30585 (version "1.11")
30586 (source
30587 (origin
30588 (method url-fetch)
30589 (uri (pypi-uri "quicktions" version))
30590 (sha256
30591 (base32
30592 "1px21a6x527i1bsr2p6bbf3jziqpvd1vjkvvzh13gsy4iip0yvzn"))
30593 (modules '((guix build utils)))
30594 (snippet
30595 '(begin
30596 ;; This file is generated by Cython.
30597 (delete-file "src/quicktions.c") #t))))
30598 (build-system python-build-system)
30599 (arguments
30600 `(#:phases
30601 (modify-phases %standard-phases
30602 (add-before 'build 'cythonize-sources
30603 (lambda _
30604 (with-directory-excursion "src"
30605 (invoke "cython" "quicktions.pyx"))))
30606 (replace 'check
30607 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30608 (when tests?
30609 (add-installed-pythonpath inputs outputs)
30610 (invoke "pytest"))
30611 #t)))))
30612 (native-inputs
30613 (list python-cython python-pytest))
30614 (home-page "https://github.com/scoder/quicktions")
30615 (synopsis "Fast fractions data type for rational numbers")
30616 (description
30617 "This package provides fast fractions data type for rational numbers. It
30618is the cythonized version of @code{fractions.Fraction}.")
30619 (license license:psfl)))
30620
30621(define-public python-pathvalidate
30622 (package
30623 (name "python-pathvalidate")
30624 (version "2.4.1")
30625 (source
30626 (origin
30627 (method url-fetch)
30628 (uri (pypi-uri "pathvalidate" version))
30629 (sha256
30630 (base32 "0s14ycjgb44lxr2wg8lrq3b7kybmmrbf7yqz47xrqgn2gr6dk6rw"))))
30631 (build-system python-build-system)
30632 (arguments
30633 '(#:tests? #f))
30634 ;; Tests disabled because of circular dependencies.
30635 ;; pathvalidate tests depend on pytest-md-report, which
30636 ;; depends on pathvalidate.
30637 (native-inputs
30638 (list python-allpairspy python-click python-faker python-pytest))
30639 (home-page "https://github.com/thombashi/pathvalidate")
30640 (synopsis "Sanitize strings representing paths")
30641 (description
30642 "@code{pathvalidate} is a Python library to sanitize/validate strings
30643representing paths or filenames.")
30644 (license license:expat)))
30645
30646(define-public python-escapism
30647 (package
30648 (name "python-escapism")
30649 (version "1.0.1")
30650 (source
30651 (origin
30652 (method url-fetch)
30653 (uri (pypi-uri "escapism" version))
30654 (sha256
30655 (base32
30656 "1v74243wifcwhj5zkdiispxc9kb1xvnfzilg8bq308pjnkgnn9bk"))))
30657 (build-system python-build-system)
30658 (home-page "https://github.com/minrk/escapism")
30659 (synopsis "Simple, generic library for escaping strings")
30660 (description
30661 "This Python library provides a programming interface to, given a set of
30662safe characters and an escape character, escape safe strings and unescape the
30663result.")
30664 (license license:expat)))
30665
30666(define-public python-recommonmark
30667 (package
30668 (name "python-recommonmark")
30669 (version "0.7.1")
30670 (source
30671 (origin
30672 (method url-fetch)
30673 (uri (pypi-uri "recommonmark" version))
30674 (sha256
30675 (base32
30676 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
30677 (build-system python-build-system)
30678 (propagated-inputs
30679 (list python-commonmark python-docutils python-sphinx))
30680 (arguments
30681 '(#:phases (modify-phases %standard-phases
30682 (add-after 'unpack 'delete-test-sphinx
30683 (lambda* (#:key outputs #:allow-other-keys)
30684 (let* ((out (assoc-ref outputs "out")))
30685 (delete-file "tests/test_sphinx.py")))))))
30686 (home-page "https://github.com/readthedocs/recommonmark")
30687 (synopsis "Docutils-compatibility bridge to CommonMark")
30688 (description
30689 "This package provides a docutils-compatibility bridge to CommonMark that
30690lets you write CommonMark inside of Docutils & Sphinx projects.")
30691 (license license:expat)))
30692
30693(define-public python-redo
30694 ;; The latest release isn't tagged:
30695 ;; https://github.com/mozilla-releng/redo/issues/76
30696 (let ((commit "50cfe8e3656f253f9e51df3a998530351d2d9a8c")
30697 (revision "0"))
30698 (package
30699 (name "python-redo")
30700 (version (git-version "2.0.4" revision commit))
30701 (source
30702 (origin
30703 (method git-fetch) ; There are no tests in the PyPI release.
30704 (uri (git-reference
30705 (url "https://github.com/mozilla-releng/redo")
30706 (commit commit)))
30707 (file-name (git-file-name name version))
30708 (sha256
30709 (base32 "0xpylx97qr4ikdhsr208ri41007mpp57a4n8mmlmlqmdljmsdpdb"))))
30710 (build-system python-build-system)
30711 (native-inputs
30712 (list python-mock
30713 python-pytest))
30714 (arguments
30715 (list #:phases
30716 #~(modify-phases %standard-phases
30717 (replace 'check
30718 (lambda* (#:key tests? #:allow-other-keys)
30719 (when tests?
30720 ;; The project uses tox to run the tests via pytest.
30721 (invoke "pytest")))))))
30722 (home-page "https://github.com/mozilla-releng/redo")
30723 (synopsis "Utilities to retry Python callables")
30724 (description "Redo provides various means to add seamless ability to
30725retry to any Python callable.")
30726 (license license:mpl2.0))))
30727
30728(define-public python-pyhull
30729 (package
30730 (name "python-pyhull")
30731 (version "2015.2.1")
30732 (source
30733 (origin
30734 (method url-fetch)
30735 (uri (pypi-uri "pyhull" version))
30736 (sha256
30737 (base32
30738 "091sph52c4yk1jlm5w8xidxpzbia9r7s42bnb23q4m4b56ihmzyj"))))
30739 (build-system python-build-system)
30740 (propagated-inputs
30741 (list python-numpy))
30742 (home-page "https://github.com/materialsvirtuallab/pyhull")
30743 (synopsis "Python wrapper to Qhull")
30744 (description
30745 "This package provides a Python wrapper to @uref{http://www.qhull.org/,
30746Qhull} for the computation of the convex hull, Delaunay triangulation, and
30747Voronoi diagram.")
30748 (license license:expat)))
30749
30750(define-public python-opcodes
30751 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
30752 ;; version number, which is what we use here.
30753 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
30754 (package
30755 (name "python-opcodes")
30756 (version "0.3.14") ;from 'opcodes/__init__.py'
30757 (home-page "https://github.com/Maratyszcza/Opcodes")
30758 (source (origin
30759 (method git-fetch)
30760 (uri (git-reference (url home-page) (commit commit)))
30761 (file-name (git-file-name name version))
30762 (sha256
30763 (base32
30764 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
30765 (build-system python-build-system)
30766 (synopsis "Database of processor instructions and opcodes")
30767 (description
30768 "This project documents instruction sets in a format convenient for
30769tools development. An instruction set is represented by three files:
30770
30771@itemize
30772@item an XML file that describes instructions;
30773@item an XSD file that describes the structure of the XML file;
30774@item a Python module that reads the XML file and represents it as a set of
30775Python objects;
30776@end itemize
30777
30778It currently provides descriptions for most user-mode x86, x86_64, and k1om
30779instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
30780and BMI2).")
30781 (license license:bsd-2))))
30782
30783(define-public python-peachpy
30784 ;; There is no tag in this repo.
30785 (let ((commit "913d74c35a6b1d330e90bfc055208ce5b06b35a0")
30786 (version "0.2.0") ;from 'peachpy/__init__.py'
30787 (revision "2"))
30788 (package
30789 (name "python-peachpy")
30790 (version (git-version version revision commit))
30791 (home-page "https://github.com/Maratyszcza/PeachPy")
30792 (source (origin
30793 (method git-fetch)
30794 (uri (git-reference (url home-page) (commit commit)))
30795 (file-name (git-file-name name version))
30796 (sha256
30797 (base32
30798 "1wnqxspxsacw4556q0b9fbw11nhrkgn6gs8g43jdnpa35f3z9kb6"))
30799 (patches (search-patches "python-peachpy-determinism.patch"))))
30800 (build-system python-build-system)
30801 (arguments
30802 '(#:phases (modify-phases %standard-phases
30803 (replace 'check
30804 (lambda* (#:key tests? #:allow-other-keys)
30805 (when tests?
30806 (invoke "nosetests")))))))
30807 (native-inputs
30808 (list python-nose python-rednose python-setuptools))
30809 (propagated-inputs
30810 (list python-six python-opcodes))
30811 (synopsis "Efficient assembly code generation in Python")
30812 (description
30813 "PeachPy is a Python framework for writing high-performance assembly kernels.
30814PeachPy aims to simplify writing optimized assembly kernels while preserving
30815all optimization opportunities of traditional assembly.
30816
30817PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
30818for the Go language tool chain; it adapts to different calling conventions and
30819application binary interfaces (ABIs); it takes care of register allocation; it
30820supports x86_64 instructions up to AVX-512 and SHA.")
30821 (license license:bsd-2))))
30822
30823(define-public python-sgmllib3k
30824 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
30825 (revision "1"))
30826 (package
30827 (name "python-sgmllib3k")
30828 (version
30829 (git-version "1.0.0" revision commit))
30830 (source
30831 (origin
30832 (method git-fetch)
30833 (uri (git-reference
30834 (url "https://github.com/hsoft/sgmllib")
30835 (commit commit)))
30836 (file-name (git-file-name name version))
30837 (sha256
30838 (base32
30839 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))
30840 (patches (search-patches "python-sgmllib3k-assertions.patch"))))
30841 (build-system python-build-system)
30842 (home-page "https://github.com/hsoft/sgmllib")
30843 (synopsis "Python 3 port of sgmllib")
30844 (description "This package provides an unmaintained port of sgmllib to
30845Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
30846Generalized Mark-up Language}.")
30847 (license license:bsd-3))))
30848
30849(define-public python-cwcwidth
30850 (package
30851 (name "python-cwcwidth")
30852 (version "0.1.4")
30853 (source
30854 (origin
30855 (method url-fetch)
30856 (uri (pypi-uri "cwcwidth" version))
30857 (sha256
30858 (base32
30859 "1azrphpkcyggg38xvkfb9dpc4xmmm90p02kf8dkqd4d6j5w96aj8"))))
30860 (build-system python-build-system)
30861 (native-inputs
30862 (list python-cython python-pytest python-setuptools-scm python-toml
30863 python-wheel))
30864 (home-page
30865 "https://github.com/sebastinas/cwcwidth")
30866 (synopsis "Python bindings for wc(s)width")
30867 (description "This package provides bindings for wcwidth and wcswidth
30868functions defined in POSIX.1-2001 and POSIX.1-2008.")
30869 (license license:expat)))
30870
30871(define-public python-pyan3
30872 (package
30873 (name "python-pyan3")
30874 (version "1.2.0")
30875 (source
30876 (origin
30877 ;; Source tarball on PyPI lacks tests.
30878 (method git-fetch)
30879 (uri (git-reference
30880 (url "https://github.com/Technologicat/pyan")
30881 (commit (string-append "v" version))))
30882 (file-name (git-file-name name version))
30883 (sha256
30884 (base32
30885 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
30886 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
30887 "python-pyan3-fix-absolute-path-bug.patch"))))
30888 (build-system python-build-system)
30889 (arguments
30890 `(#:phases
30891 (modify-phases %standard-phases
30892 (replace 'check
30893 (lambda* (#:key tests? #:allow-other-keys)
30894 (when tests?
30895 ;; Extend PYTHONPATH so the built package will be found.
30896 (setenv "GUIX_PYTHONPATH"
30897 (string-append (getcwd) ":" (getenv "GUIX_PYTHONPATH")))
30898 (invoke "pytest")))))))
30899 (native-inputs
30900 (list python-pytest python-pytest-cov python-wheel))
30901 (propagated-inputs
30902 (list python-jinja2))
30903 (home-page "https://github.com/Technologicat/pyan")
30904 (synopsis "Offline call graph generator for Python 3")
30905 (description "Pyan takes one or more Python source files, performs
30906a (rather superficial) static analysis, and constructs a directed graph of the
30907objects in the combined source, and how they define or use each other. The
30908graph can be output for rendering by GraphViz or yEd.")
30909 (license license:gpl2)))
30910
30911(define-public python-multipledispatch
30912 (package
30913 (name "python-multipledispatch")
30914 (version "0.6.0")
30915 (source
30916 (origin
30917 (method url-fetch)
30918 (uri (pypi-uri "multipledispatch" version))
30919 (sha256
30920 (base32
30921 "1slblghfjg9fdi9zpd7gmrkvfbv20nrdgnrymcnbky8bzm8i9ax7"))))
30922 (build-system python-build-system)
30923 (propagated-inputs (list python-six))
30924 (home-page "https://github.com/mrocklin/multipledispatch/")
30925 (synopsis "Multiple dispatch for Python based on pattern matching")
30926 (description "This library provides an efficient mechanism for overloading
30927function implementations based on the types of the arguments.")
30928 (license license:bsd-3)))
30929
30930(define-public python-logical-unification
30931 (package
30932 (name "python-logical-unification")
30933 (version "0.4.3")
30934 (source
30935 (origin
30936 (method url-fetch)
30937 (uri (pypi-uri "logical-unification" version))
30938 (sha256
30939 (base32
30940 "0j57953hi7kg2rl0163vzjzsvzdyjimnklhx6idf5vaqqf1d3p1j"))))
30941 (build-system python-build-system)
30942 (propagated-inputs
30943 (list python-multipledispatch python-toolz))
30944 (home-page "https://github.com/pythological/unification/")
30945 (synopsis "Logical unification in Python for solving symbolic expressions")
30946 (description "This library provides algorithms and data types for solving
30947symbolic expressions in pure Python using the technique of logical unification.")
30948 (license license:bsd-3)))
30949
30950(define-public python-cons
30951 (package
30952 (name "python-cons")
30953 (version "0.4.2")
30954 (source
30955 (origin
30956 (method url-fetch)
30957 (uri (pypi-uri "cons" version))
30958 (sha256
30959 (base32
30960 "0w9giq196wps7mbm47c4shdzs5yvwvqajqzkim2p92i51sm5qgvm"))))
30961 (build-system python-build-system)
30962 (native-inputs
30963 (list python-pytest python-toml))
30964 (propagated-inputs
30965 (list python-logical-unification))
30966 (home-page "https://github.com/pythological/python-cons")
30967 (synopsis "Cons cell data structures and related algorithms for Python")
30968 (description
30969 "This library implements algorithms and data structures for Lisp-style
30970cons cells in Python.")
30971 (license license:lgpl3+)))
30972
30973(define-public python-etuples
30974 (package
30975 (name "python-etuples")
30976 (version "0.3.3")
30977 (source
30978 (origin
30979 (method url-fetch)
30980 (uri (pypi-uri "etuples" version))
30981 (sha256
30982 (base32
30983 "0jhfyp177v37rl0i7wqfx7q6s5qkz027hl283d1x8d0vm3w0zqc8"))))
30984 (build-system python-build-system)
30985 (propagated-inputs
30986 (list python-cons python-multipledispatch))
30987 (home-page "https://github.com/pythological/etuples")
30988 (synopsis "S-expressions in Python")
30989 (description
30990 "This library implements eval'able S-expression in Python using tuple-like objects.")
30991 (license license:asl2.0)))
30992
30993(define-public python-minikanren
30994 (package
30995 (name "python-minikanren")
30996 (version "1.0.1")
30997 (source
30998 (origin
30999 (method git-fetch)
31000 (uri (git-reference
31001 (url "https://github.com/pythological/kanren")
31002 (commit (string-append "v" version))))
31003 (file-name (git-file-name name version))
31004 (sha256
31005 (base32 "0g7wfj5hxalwz7k1301nsjqhjpzsif1bj6wjm2x2kavlm2ypv9jc"))))
31006 (build-system python-build-system)
31007 (arguments
31008 '(#:phases (modify-phases %standard-phases
31009 (replace 'check
31010 (lambda* (#:key tests? #:allow-other-keys)
31011 (when tests?
31012 (invoke "python" "-m" "pytest" "-v" "tests/" "kanren/"))
31013 #t)))))
31014 (native-inputs
31015 (list python-coveralls
31016 python-pydocstyle
31017 python-pytest
31018 python-pytest-cov
31019 python-pylint
31020 python-black
31021 python-sympy
31022 python-versioneer
31023 python-coverage))
31024 (propagated-inputs
31025 (list python-toolz python-cons python-multipledispatch
31026 python-etuples python-logical-unification))
31027 (home-page "https://github.com/pythological/kanren")
31028 (synopsis "Relational logic programming in pure Python")
31029 (description
31030 "The minikanren library provides an algorithmic core for computer algebra
31031systems in Python.")
31032 (license license:bsd-3)))
31033
31034(define-public python-dotenv
31035 (package
31036 (name "python-dotenv")
31037 (version "0.20.0")
31038 (source
31039 (origin
31040 (method url-fetch)
31041 (uri (pypi-uri "python-dotenv" version))
31042 (sha256
31043 (base32 "13s9imfd0k4d7b1qy5wfqzw5vyj6rhmcrccsdz1l4g39b55b1qxp"))))
31044 (build-system python-build-system)
31045 (arguments
31046 `(#:phases
31047 (modify-phases %standard-phases
31048 (replace 'check
31049 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
31050 (when tests?
31051 (add-installed-pythonpath inputs outputs)
31052 (setenv "PATH" (string-append (getenv "PATH") ":"
31053 (assoc-ref outputs "out") "/bin"))
31054 ;; Skip the ipython tests.
31055 (delete-file "tests/test_ipython.py")
31056 (invoke "python" "-m" "pytest")))))))
31057 (propagated-inputs
31058 (list python-click))
31059 (native-inputs
31060 (list python-mock python-pytest python-sh))
31061 (home-page "https://saurabh-kumar.com/python-dotenv/")
31062 (synopsis "Setup environment variables according to .env files")
31063 (description
31064 "This package provides the @code{python-dotenv} Python module to read
31065key-value pairs from a @code{.env} file and set them as environment variables.")
31066 (license license:bsd-3)))
31067
31068(define-public python-dotenv-0.13.0
31069 (package (inherit python-dotenv)
31070 (name "python-dotenv")
31071 (version "0.13.0")
31072 (source
31073 (origin
31074 (method url-fetch)
31075 (uri (pypi-uri "python-dotenv" version))
31076 (sha256
31077 (base32
31078 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))))
31079
31080(define-public date2name
31081 (let ((commit "6c8f37277e8ec82aa50f90b8921422be30c4e798")
31082 (revision "1"))
31083 (package
31084 (name "date2name")
31085 (version (git-version "0.0" revision commit))
31086 (source
31087 (origin
31088 (method git-fetch)
31089 (uri (git-reference
31090 (url "https://github.com/novoid/date2name")
31091 (commit commit)))
31092 (file-name (git-file-name name version))
31093 (sha256
31094 (base32
31095 "1vq96b7n16d932nyfhnzwdwxff0zrqanidmwr4cxj2p67ad9y3w7"))))
31096 (build-system python-build-system)
31097 (arguments
31098 `(#:tests? #f ; no tests
31099 #:phases
31100 (modify-phases %standard-phases
31101 (delete 'build)
31102 (replace 'install
31103 (lambda* (#:key outputs #:allow-other-keys)
31104 (let* ((bindir (string-append (assoc-ref outputs "out") "/bin"))
31105 (binary (string-append bindir "/date2name")))
31106 (mkdir-p bindir)
31107 (copy-file "date2name/__init__.py" binary)
31108 (chmod binary #o555)))))))
31109 (synopsis "Handling time-stamps and date-stamps in file names")
31110 (description "By default, date2name gets the modification time of matching
31111files and directories and adds a datestamp in standard ISO 8601+ format
31112YYYY-MM-DD at the beginning of the file or directory name.")
31113 (home-page "https://github.com/novoid/date2name")
31114 (license license:gpl3+))))
31115
31116(define-public python-braintree
31117 (package
31118 (name "python-braintree")
31119 (version "4.12.0")
31120 (source
31121 (origin
31122 (method url-fetch)
31123 (uri (pypi-uri "braintree" version))
31124 (sha256
31125 (base32 "19kli85q18p80nsn8fm4ql6axpr7bllfqg5chv2ywhr8zr8bssll"))))
31126 (build-system python-build-system)
31127 (propagated-inputs
31128 (list python-requests))
31129 (home-page
31130 "https://developers.braintreepayments.com/python/sdk/server/overview")
31131 (synopsis "Braintree Python Library")
31132 (description "The Braintree Python SDK provides integration access to the
31133Braintree Gateway. Braintree is a US-based payments service provider.")
31134 (license license:expat)))
31135
31136(define-public python-markuppy
31137 (package
31138 (name "python-markuppy")
31139 (version "1.14")
31140 (source
31141 (origin
31142 (method url-fetch)
31143 (uri (pypi-uri "MarkupPy" version))
31144 (sha256
31145 (base32 "0pqdmpxbr8iq22b4css2gz5z6s01ddpzyj25x27kgbs2lp0f5phs"))))
31146 (build-system python-build-system)
31147 (home-page "https://github.com/tylerbakke/MarkupPy")
31148 (synopsis "Pythonic HTML/XML generator")
31149 (description "This Python module attempts to make it easier to generate
31150HTML/XML from a Python program in an intuitive, lightweight, customizable and
31151pythonic way.")
31152 (license license:expat)))
31153
31154(define-public python-tablib
31155 (package
31156 (name "python-tablib")
31157 (version "3.0.0")
31158 (source
31159 (origin
31160 (method url-fetch)
31161 (uri (pypi-uri "tablib" version))
31162 (sha256
31163 (base32 "03f1z6jq6rf67gwhbm9ma4rydm8h447a5nh5lcs5l8jg8l4aqg7q"))))
31164 (build-system python-build-system)
31165 (arguments
31166 '(#:phases
31167 (modify-phases %standard-phases
31168 (replace 'check
31169 (lambda* (#:key tests? #:allow-other-keys)
31170 (when tests?
31171 (setenv "GUIX_PYTHONPATH"
31172 (string-append (getcwd) "/build/lib:"
31173 (getenv "GUIX_PYTHONPATH")))
31174 (invoke "pytest")))))))
31175 (native-inputs
31176 (list python-pandas ;; required for test-suite
31177 python-pytest python-pytest-cov python-setuptools-scm))
31178 (propagated-inputs
31179 (list python-markuppy
31180 python-odfpy
31181 python-openpyxl
31182 python-pyyaml
31183 python-tabulate
31184 python-xlrd
31185 python-xlwt))
31186 (home-page "https://tablib.readthedocs.io")
31187 (synopsis "Format agnostic tabular data library")
31188 (description "@code{tablib} is a format-agnostic tabular dataset library,
31189written in Python. Supported output formats are Excel (Sets + Books),
31190JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
31191TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
31192
31193@code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
31194quite huge, this Guix package doesn't depend on pandas. In case, just also
31195install @code{python-pandas}.")
31196 (license license:expat)))
31197
31198(define-public python-csb43
31199 (package
31200 (name "python-csb43")
31201 (version "0.9.1")
31202 (source
31203 (origin
31204 (method url-fetch)
31205 (uri (pypi-uri "csb43" version))
31206 (sha256
31207 (base32 "0r0csl9npncnkfafg3rg6xr38d1qr0sxvq7wn7mg9bq41hvvh1si"))))
31208 (build-system python-build-system)
31209 (native-inputs
31210 (list python-lxml))
31211 (propagated-inputs
31212 (list python-pycountry python-pyyaml python-tablib))
31213 (home-page "https://bitbucket.org/wmj/csb43")
31214 (synopsis "Tools for converting from the Spanish banks' format CSB norm
3121543 (CSB43)")
31216 (description "This package provides tools to convert files in the format
31217used by multiple Spanish banks (standard 43 of the Spanish Banking Council
31218[CSB43] / Spanish Banking Association [AEB43]) to other formats.
31219
31220Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
31221spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
31222 (license license:lgpl3)))
31223
31224(define-public python-febelfin-coda
31225 (package
31226 (name "python-febelfin-coda")
31227 (version "0.2.0")
31228 (source
31229 (origin
31230 (method url-fetch)
31231 (uri (pypi-uri "febelfin-coda" version))
31232 (sha256
31233 (base32 "1isnf87gxlvfbmackv7b2c978vmnj7ij0v4svhyjl8pbb9hwjsvm"))))
31234 (build-system python-build-system)
31235 (home-page "https://coda.b2ck.com/")
31236 (synopsis "Module to parse Belgian CODA files")
31237 (description "This package provides a module to parse Coded statement of
31238account (CODA) files as defined be the Belgian Febelfin bank standard.")
31239 (license license:bsd-3)))
31240
31241(define-public python-ofxparse
31242 (package
31243 (name "python-ofxparse")
31244 (version "0.21")
31245 (source
31246 (origin
31247 (method url-fetch)
31248 (uri (pypi-uri "ofxparse" version))
31249 (sha256
31250 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
31251 (build-system python-build-system)
31252 (arguments
31253 '(#:phases
31254 (modify-phases %standard-phases
31255 (replace 'check
31256 (lambda* (#:key tests? #:allow-other-keys)
31257 (when tests?
31258 (invoke "nosetests" "-v")))))))
31259 (native-inputs
31260 (list python-nose))
31261 (propagated-inputs
31262 (list python-beautifulsoup4 python-lxml python-six))
31263 (home-page "http://sites.google.com/site/ofxparse")
31264 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
31265format")
31266 (description "@code{ofxparse} is a parser for Open Financial
31267Exchange (.ofx) format files. OFX files are available from almost any online
31268banking site, so they work well if you want to pull together your finances
31269from multiple sources. Online trading accounts also often provide account
31270statements in OFX files.")
31271 (license license:expat)))
31272
31273(define-public python-rfc3339-validator
31274 (package
31275 (name "python-rfc3339-validator")
31276 (version "0.1.4")
31277 (source
31278 (origin
31279 (method url-fetch)
31280 (uri (pypi-uri "rfc3339_validator" version))
31281 (sha256
31282 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
31283 (build-system python-build-system)
31284 (native-inputs (list python-hypothesis
31285 python-pytest
31286 python-pytest-runner
31287 python-strict-rfc3339))
31288 (propagated-inputs (list python-six))
31289 (home-page "https://github.com/naimetti/rfc3339-validator")
31290 (synopsis "Python RFC3339 validator")
31291 (description "This package provides a pure Python RFC3339 validator.")
31292 (license license:expat)))
31293
31294(define-public python-strict-rfc3339
31295 (package
31296 (name "python-strict-rfc3339")
31297 (version "0.7")
31298 (source
31299 (origin
31300 (method git-fetch) ;no tests in pypi release
31301 (uri (git-reference
31302 (url "https://github.com/danielrichman/strict-rfc3339")
31303 (commit (string-append "version-" version))))
31304 (file-name (git-file-name name version))
31305 (sha256
31306 (base32
31307 "0b12bh9v9gwkm89kxbidxw2z81lg8fx1v5fzgs313v1wgx6qb09p"))))
31308 (build-system python-build-system)
31309 (arguments
31310 (list
31311 #:phases
31312 #~(modify-phases %standard-phases
31313 (replace 'check
31314 (lambda* (#:key tests? #:allow-other-keys)
31315 (when tests?
31316 (invoke "pytest" "-vv"
31317 ;; The timestamp to local offset tests fail due to
31318 ;; missing timezone data (see:
31319 ;; https://github.com/danielrichman/strict-rfc3339/issues/9).
31320 "-k" "not LocalOffset")))))))
31321 (native-inputs (list python-pytest))
31322 (home-page "https://github.com/danielrichman/strict-rfc3339")
31323 (synopsis "RFC3339 procedures library")
31324 (description "The @code{strict_rfc3339} Python module provides strict,
31325simple, lightweight RFC3339 procedures. It enables or aims to:
31326@itemize
31327@item Convert UNIX timestamps to and from RFC3339.
31328@item Produce RFC3339 strings with a UTC offset (Z) or with the offset that
31329the C time module reports is the local timezone offset.
31330@item Be simple with minimal dependencies/libraries.
31331@item Avoid timezones as much as possible.
31332@item Be very strict and follow RFC3339.
31333@end itemize")
31334 (license license:gpl3+)))
31335
31336(define-public python-stripe
31337 (package
31338 (name "python-stripe")
31339 (version "2.60.0")
31340 (source
31341 (origin
31342 (method url-fetch)
31343 (uri (pypi-uri "stripe" version))
31344 (sha256
31345 (base32 "0258lzh4qikhinfggnlfh5aklcvg7lrvl8giqrh0yf0l61wvfrl9"))))
31346 (build-system python-build-system)
31347 (arguments
31348 '(#:tests? #f)) ;; tests require network
31349 (propagated-inputs
31350 (list python-requests))
31351 (home-page "https://github.com/stripe/stripe-python")
31352 (synopsis "Python bindings for the Stripe financial services' API")
31353 (description "This package provides access to the Stripe financial
31354services' API. It includes a pre-defined set of classes for API resources
31355that initialize themselves dynamically from API responses which makes it
31356compatible with a wide range of versions of the Stripe API.")
31357 (license license:expat)))
31358
31359(define-public python-platformdirs
31360 (package
31361 (name "python-platformdirs")
31362 (version "2.4.1")
31363 (source
31364 (origin
31365 (method url-fetch)
31366 (uri (pypi-uri "platformdirs" version))
31367 (sha256
31368 (base32 "1njz0h4iky8iglrb85cd07hpa3lp1a2dfr934dj65hxwzvfk61j4"))))
31369 (build-system python-build-system)
31370 (arguments
31371 '(#:phases (modify-phases %standard-phases
31372 (replace 'check
31373 (lambda* (#:key tests? #:allow-other-keys)
31374 (when tests?
31375 (invoke "pytest" "-vv")))))))
31376 (native-inputs
31377 (list python-appdirs python-pytest python-pytest-mock
31378 python-setuptools-scm))
31379 (home-page "https://github.com/platformdirs/platformdirs")
31380 (synopsis "Determine the appropriate platform-specific directories")
31381 (description "When writing applications, finding the right location to
31382store user data and configuration varies per platform. Even for
31383single-platform apps, there may by plenty of nuances in figuring out the right
31384location. This small Python module determines the appropriate
31385platform-specific directories, e.g. the ``user data dir''.")
31386 (license license:expat)))
31387
31388(define-public python-json2html
31389 (package
31390 (name "python-json2html")
31391 (version "1.3.0")
31392 (source
31393 ;; There are no tests in the PyPI tarball.
31394 (origin
31395 (method git-fetch)
31396 (uri (git-reference
31397 (url "https://github.com/softvar/json2html")
31398 (commit (string-append "v" version))))
31399 (file-name (git-file-name name version))
31400 (sha256
31401 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
31402 (build-system python-build-system)
31403 (arguments
31404 '(#:phases
31405 (modify-phases %standard-phases
31406 (replace 'check
31407 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
31408 (when tests?
31409 (add-installed-pythonpath inputs outputs)
31410 (invoke "python" "test/run_tests.py")))))))
31411 (home-page "https://github.com/softvar/json2html")
31412 (synopsis "Convert JSON to HTML table")
31413 (description "@code{python-json2html} is a python module to convert JSON
31414into a human readable HTML table representation.")
31415 (license license:expat)))
31416
31417(define-public python-face
31418 (package
31419 (name "python-face")
31420 (version "20.1.1")
31421 (source
31422 (origin
31423 (method url-fetch)
31424 (uri (pypi-uri "face" version))
31425 (sha256
31426 (base32 "0gpd9f0rmbv3rd2szi2na37l29fabkwazikjrxc6wca1lddwlnbx"))))
31427 (build-system python-build-system)
31428 (arguments
31429 '(#:phases
31430 (modify-phases %standard-phases
31431 (replace 'check
31432 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
31433 (when tests?
31434 ;; Make installed package available for running the tests.
31435 (add-installed-pythonpath inputs outputs)
31436 (invoke "pytest" "-v")))))))
31437 (native-inputs
31438 (list python-pytest))
31439 (propagated-inputs
31440 (list python-boltons))
31441 (home-page "https://github.com/mahmoud/face")
31442 (synopsis "CLI parsing and dispatching microframework")
31443 (description "@code{python-face} is a Pythonic microframework for building
31444command-line applications.
31445
31446@itemize
31447@item First-class subcommand support
31448@item Powerful middleware architecture
31449@item Separate parser layer
31450@item Built-in flagfile support
31451@item Handy testing utilities
31452@item Themeable help display
31453@end itemize")
31454 (license license:bsd-3)))
31455
31456(define-public python-glom
31457 (package
31458 (name "python-glom")
31459 (version "20.11.0")
31460 (source
31461 (origin
31462 (method url-fetch)
31463 (uri (pypi-uri "glom" version))
31464 (sha256
31465 (base32 "04pba09vdr3qjvqvy14g60fscdsi35chbbyqpczdp76cpir101al"))))
31466 (build-system python-build-system)
31467 (arguments
31468 '(#:phases
31469 (modify-phases %standard-phases
31470 (replace 'check
31471 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
31472 (when tests?
31473 ;; Make installed executable available for running the tests.
31474 (setenv "PATH"
31475 (string-append (assoc-ref outputs "out") "/bin"
31476 ":" (getenv "PATH")))
31477 (invoke "pytest" "-v")))))))
31478 (native-inputs
31479 (list python-pytest python-pyyaml))
31480 (propagated-inputs
31481 (list python-attrs python-boltons python-face))
31482 (home-page "https://github.com/mahmoud/glom")
31483 (synopsis "Declaratively restructure data")
31484 (description "Real applications have real data, and real data
31485nests---objects inside of objects inside of lists of objects. glom is a new
31486and powerful way to handle real-world data, featuring:
31487
31488@itemize
31489@item Path-based access to nested data structures
31490@item Readable, meaningful error messages
31491@item Declarative data transformation, using lightweight, Pythonic specifications
31492@item Built-in data exploration and debugging features
31493@end itemize")
31494 (license license:bsd-3)))
31495
31496(define-public python-box
31497 (package
31498 (name "python-box")
31499 (version "5.3.0")
31500 (source
31501 (origin
31502 (method url-fetch)
31503 (uri (pypi-uri "python-box" version))
31504 (sha256
31505 (base32
31506 "0jhrdif57khx2hsw1q6a9x42knwcvq8ijgqyq1jmll6y6ifyzm2f"))))
31507 (build-system python-build-system)
31508 (propagated-inputs
31509 (list python-msgpack python-ruamel.yaml python-toml))
31510 (home-page "https://github.com/cdgriffith/Box")
31511 (synopsis "Advanced Python dictionaries with dot notation access")
31512 (description
31513 "This package provides the @code{python-box} Python module.
31514It implements advanced Python dictionaries with dot notation access.")
31515 (license license:expat)))
31516
31517(define-public python-fields
31518 (package
31519 (name "python-fields")
31520 (version "5.0.0")
31521 (source
31522 (origin
31523 (method url-fetch)
31524 (uri (pypi-uri "fields" version))
31525 (sha256
31526 (base32 "09sppvhhkhkv9zc9g994m53z15v92csxwcf42ggkaknlv01smm1i"))))
31527 (build-system python-build-system)
31528 (home-page "https://python-fields.readthedocs.io/")
31529 (synopsis "Python container class boilerplate killer")
31530 (description "Avoid repetetive boilerplate code in Python classes.")
31531 (license license:bsd-3)))
31532
31533(define-public python-aspectlib
31534 (package
31535 (name "python-aspectlib")
31536 (version "1.5.2")
31537 (source
31538 (origin
31539 (method url-fetch)
31540 (uri (pypi-uri "aspectlib" version))
31541 (sha256
31542 (base32 "1am4ycf292zbmgz791z393v63w7qrynf8q5p9db2wwf2qj1fqxfj"))))
31543 (build-system python-build-system)
31544 (propagated-inputs (list python-fields))
31545 (home-page "https://github.com/ionelmc/python-aspectlib")
31546 (synopsis
31547 "Python monkey-patching and decorators")
31548 (description
31549 "This package provides an aspect-oriented programming, monkey-patch
31550and decorators library. It is useful when changing behavior in existing
31551code is desired. It includes tools for debugging and testing:
31552simple mock/record and a complete capture/replay framework.")
31553 (license license:bsd-2)))
31554
31555(define-public python-ijson
31556 (package
31557 (name "python-ijson")
31558 (version "3.1.4")
31559 (source
31560 (origin
31561 (method url-fetch)
31562 (uri (pypi-uri "ijson" version))
31563 (sha256
31564 (base32 "1sp463ywj4jv5cp6hsv2qwiima30d09xsabxb2dyq5b17jp0640x"))))
31565 (arguments
31566 `(#:phases
31567 (modify-phases %standard-phases
31568 ;; the tests run by the default setup.py require yajl 1.x,
31569 ;; but we have 2.x. yajl 1.x support is going to be removed
31570 ;; anyway, so use pytest to avoid running the yajl1-related
31571 ;; tests. See: https://github.com/ICRAR/ijson/issues/55
31572 (replace 'check
31573 (lambda* (#:key tests? #:allow-other-keys)
31574 (when tests?
31575 (invoke "pytest" "-vv")))))))
31576 (inputs
31577 ;; yajl is optional, but compiling with it makes faster
31578 ;; backends available to ijson:
31579 (list yajl))
31580 (native-inputs
31581 (list python-pytest))
31582 (build-system python-build-system)
31583 (home-page "https://github.com/ICRAR/ijson")
31584 (synopsis "Iterative JSON parser with Python iterator interfaces")
31585 (description
31586 "Ijson is an iterative JSON parser with standard Python iterator
31587interfaces.")
31588 (license license:bsd-3)))
31589
31590(define-public python-ordered-set
31591 (package
31592 (name "python-ordered-set")
31593 (version "4.1.0")
31594 (source
31595 (origin
31596 (method url-fetch)
31597 (uri (pypi-uri "ordered-set" version))
31598 (sha256
31599 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
31600 (build-system python-build-system)
31601 (arguments
31602 (list #:phases
31603 #~(modify-phases %standard-phases
31604 (replace 'check
31605 (lambda* (#:key tests? #:allow-other-keys)
31606 (when tests?
31607 (invoke "pytest" "-vv")))))))
31608 (native-inputs (list python-cython python-pytest))
31609 (home-page "https://github.com/simonpercivall/orderedset")
31610 (synopsis "Ordered Set implementation in Cython")
31611 (description "This library provides an @code{OrderedSet} data type that
31612works like a regular set, but remembers insertion order. It supports the full
31613Python @code{set} interface.")
31614 (license license:asl2.0)))
31615
31616(define-public python-orgparse
31617 (package
31618 (name "python-orgparse")
31619 (version "0.3.0")
31620 (source
31621 (origin
31622 (method url-fetch)
31623 (uri (pypi-uri "orgparse" version))
31624 (sha256
31625 (base32 "14iv4pg3rma9560plg0w943x04mr2cmrssda43y2d1x9acrd2n71"))))
31626 (build-system python-build-system)
31627 (arguments
31628 `(#:phases
31629 (modify-phases %standard-phases
31630 (replace 'check
31631 (lambda* (#:key tests? #:allow-other-keys)
31632 (when tests?
31633 (invoke "pytest" "-vv" "orgparse/tests")))))))
31634 (native-inputs
31635 (list python-pytest python-setuptools-scm))
31636 (home-page "https://github.com/karlicoss/orgparse")
31637 (synopsis "Emacs Org mode parser in Python")
31638 (description
31639 "This package is a Python module for reading Emacs Org mode files.")
31640 (license license:bsd-3)))
31641
31642(define-public dynaconf
31643 (package
31644 (name "dynaconf")
31645 (version "3.1.7")
31646 (source
31647 (origin
31648 (method git-fetch)
31649 (uri
31650 (git-reference
31651 (url "https://github.com/rochacbruno/dynaconf")
31652 (commit version)))
31653 (file-name (git-file-name name version))
31654 (sha256
31655 (base32
31656 "0pjyjsdzairpn5vq8nzddhxwxmr18grn272nj31wcy2ipwdl3c3h"))
31657 (patches (search-patches "dynaconf-unvendor-deps.patch"))
31658 (modules '((guix build utils)))
31659 (snippet '(begin
31660 ;; Remove vendored dependencies
31661 (let ((unvendor '("click" "dotenv" "ruamel" "toml")))
31662 (with-directory-excursion "dynaconf/vendor"
31663 (for-each delete-file-recursively unvendor))
31664 (with-directory-excursion "dynaconf/vendor_src"
31665 (for-each delete-file-recursively unvendor)))))))
31666 (build-system python-build-system)
31667 (arguments
31668 `(#:phases
31669 (modify-phases %standard-phases
31670 (add-after 'unpack 'patch-for-click-8
31671 (lambda _
31672 (substitute* "dynaconf/cli.py"
31673 (("click.get_os_args\\()") ;deprecated from Click 8.1+
31674 "sys.argv[1:]"))))
31675 (replace 'check
31676 (lambda* (#:key tests? outputs #:allow-other-keys)
31677 (when tests?
31678 ;; These tests depend on hvac and a live Vault process.
31679 (delete-file "tests/test_vault.py")
31680 (invoke "make" "test_only")))))))
31681 (propagated-inputs
31682 (list python-click python-configobj python-dotenv-0.13.0
31683 python-ruamel.yaml python-toml))
31684 (native-inputs
31685 (list python-django python-flask python-pytest python-pytest-cov
31686 python-pytest-mock))
31687 (home-page "https://www.dynaconf.com/")
31688 (synopsis "The dynamic configurator for your Python project")
31689 (description
31690 "This package provides @code{dynaconf} the dynamic configurator manager for
31691your Python project. It provides features such as:
31692
31693@itemize
31694@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
31695@item Settings management (default values, validation, parsing, templating);
31696@item Protection of sensitive information (passwords/tokens);
31697@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
31698loaders;
31699@item Full support for environment variables to override existing settings
31700(dotenv support included);
31701@item Optional layered system for multiple environments @code{[default,
31702development, testing, production]};
31703@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
31704@item Built-in extensions for Django and Flask web frameworks;
31705@item CLI for common operations such as @code{init, list, write, validate, export}.
31706@end itemize")
31707 (license license:expat)))
31708
31709(define-public python-pudb
31710 (package
31711 (name "python-pudb")
31712 (version "2022.1.3")
31713 (source (origin
31714 (method url-fetch)
31715 (uri (pypi-uri "pudb" version))
31716 (sha256
31717 (base32
31718 "0jk61qgacvwy6zkz1f55jawax4ggb1aawy6w3wnfkzqrkvd3ms2q"))))
31719 (build-system python-build-system)
31720 (arguments
31721 `(#:phases (modify-phases %standard-phases
31722 (add-before 'check 'fix-read-only-home
31723 (lambda _
31724 (setenv "HOME" "/tmp")))
31725 (replace 'check
31726 (lambda* (#:key tests? #:allow-other-keys)
31727 (when tests?
31728 (invoke "pytest" "-vv")))))))
31729 (native-inputs (list python-pytest python-pytest-mock python-numpy))
31730 (propagated-inputs (list python-jedi python-pygments python-urwid
31731 python-urwid-readline))
31732 (home-page "https://documen.tician.de/pudb/")
31733 (synopsis "Console-based Python debugger")
31734 (description
31735 "@command{pudb} is a full-screen, console-based Python debugger providing
31736all the niceties of modern GUI-based debuggers in a more lightweight and
31737keyboard-friendly package.")
31738 (license license:expat)))
31739
31740(define-public pudb
31741 (deprecated-package "pudb" python-pudb))
31742
31743(define-public python-iwlib
31744 (package
31745 (name "python-iwlib")
31746 (version "1.7.0")
31747 (source
31748 (origin
31749 (method url-fetch)
31750 (uri (pypi-uri "iwlib" version))
31751 (sha256
31752 (base32 "18bd35wn7zclalpqbry42pf7bjrdggxkkw58mc0k1vkhg9czc1d8"))))
31753 (build-system python-build-system)
31754 (inputs
31755 (list wireless-tools))
31756 (propagated-inputs (list python-cffi))
31757 (home-page "https://github.com/nhoad/python-iwlib")
31758 (synopsis "Python module to interface with iwlib")
31759 (description
31760 "This package provides a Python interface to iw wireless tools.")
31761 (license license:gpl2)))
31762
31763(define-public python-pdoc3
31764 (package
31765 (name "python-pdoc3")
31766 (version "0.10.0")
31767 (source
31768 (origin
31769 (method url-fetch)
31770 (uri (pypi-uri "pdoc3" version))
31771 (sha256
31772 (base32 "1dz4hw10ngidzg9cjvflc8nlrwrjbb3ijhmaw4w6f039p6yff8jz"))
31773 (patches
31774 (search-patches "python-pdoc3-tests.patch"))))
31775 (build-system python-build-system)
31776 (native-inputs
31777 (list python-setuptools-git python-setuptools-scm))
31778 (propagated-inputs (list python-mako python-markdown))
31779 (home-page "https://pdoc3.github.io/pdoc/")
31780 (synopsis "Auto-generate API documentation for Python projects")
31781 (description
31782 "This package auto-generates API documentation from Python projects
31783already existing modules and objects docstrings.")
31784 (license license:agpl3+)))
31785
31786(define-public python-piexif
31787 (package
31788 (name "python-piexif")
31789 (version "1.1.3")
31790 (source
31791 (origin
31792 (method url-fetch)
31793 (uri (pypi-uri "piexif" version ".zip"))
31794 (sha256
31795 (base32 "06sz58q4mrw472p8fbnq7wsj8zpi5js5r8phm2hiwfmz0v33bjw3"))
31796 (patches
31797 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
31798 (build-system python-build-system)
31799 (native-inputs
31800 (list unzip python-pillow))
31801 (home-page "https://github.com/hMatoba/Piexif")
31802 (synopsis "Simplify exif manipulations with Python")
31803 (description "Piexif simplifies interacting with EXIF data in
31804Python. It includes the tools necessary for extracting, creating,
31805manipulating, converting and writing EXIF data to JPEG, WebP and TIFF files.")
31806 (license license:expat)))
31807
31808(define-public python-pyrss2gen
31809 (package
31810 (name "python-pyrss2gen")
31811 (version "1.1")
31812 (source
31813 (origin
31814 (method url-fetch)
31815 (uri (pypi-uri "PyRSS2Gen" version))
31816 (sha256
31817 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
31818 (build-system python-build-system)
31819 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
31820 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
31821 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
31822PyRSS2Gen builds the feed up by using a XML generator.")
31823 (license license:bsd-3)))
31824
31825(define-public python-yapsy
31826 (package
31827 (name "python-yapsy")
31828 (version "1.12.2")
31829 (source
31830 (origin
31831 (method url-fetch)
31832 (uri (pypi-uri "Yapsy" version))
31833 (sha256
31834 (base32 "12rznbnswfw0w7qfbvmmffr9r317gl1rqg36nijwzsklkjgks4fq"))))
31835 (build-system python-build-system)
31836 (home-page "https://yapsy.sourceforge.net")
31837 (synopsis "Simple plugin system for Python applications")
31838 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
31839implementing the core mechanisms needed to build a plugin system into a wider
31840application.
31841
31842The main purpose is to depend only on Python's standard libraries and to
31843implement only the basic functionalities needed to detect, load and keep track
31844of several plugins.")
31845 (license license:bsd-3)))
31846
31847(define-public python-doit
31848 (package
31849 (name "python-doit")
31850 (version "0.34.0")
31851 (source
31852 (origin
31853 (method url-fetch)
31854 (uri (pypi-uri "doit" version))
31855 (sha256
31856 (base32 "0bf0m9n0hyjvjpv051zd26725j8jr23gyvc37v3kkadwbh8dxwcf"))))
31857 (build-system python-build-system)
31858 (propagated-inputs
31859 (list python-cloudpickle python-pyinotify))
31860 (native-inputs
31861 (list python-pytest))
31862 (home-page "https://pydoit.org")
31863 (synopsis "Automation tool to execute any kind of task in a build-tools
31864fashion")
31865 (description "doit is an automation tool that brings the power of
31866build-tools to execute any kind of task.
31867
31868A task describes some computation to be done (actions), and contains some
31869extra meta-data. The actions can be external programs or Python functions. A
31870single task may define more than one action.doit uses the task’s meta-data
31871to:
31872
31873@itemize
31874@item cache task results
31875@item correct execution order
31876@item parallel execution
31877@item powerful dependency system
31878@end itemize")
31879 (license license:expat)))
31880
31881(define-public python-phpserialize
31882 (package
31883 (name "python-phpserialize")
31884 (version "1.3")
31885 (source
31886 (origin
31887 (method url-fetch)
31888 (uri (pypi-uri "phpserialize" version))
31889 (sha256
31890 (base32 "19qgkb9z4zjbjxlpwh2w6pxkz2j3iymnydi69jl0jg905lqjsrxz"))))
31891 (build-system python-build-system)
31892 (arguments
31893 (list
31894 ;; tests missing in pypi archive, anhow they are quite simple and not worth any hassle
31895 #:tests? #f))
31896 (home-page "http://github.com/mitsuhiko/phpserialize")
31897 (synopsis "Python port of the serialize and unserialize functions of PHP")
31898 (description
31899 "This package provides a port of the serialize and unserialize functions of PHP for Python")
31900 (license license:bsd-3)))
31901
31902(define-public nikola
31903 (package
31904 (name "nikola")
31905 (version "8.2.2")
31906 (source
31907 (origin
31908 (method url-fetch)
31909 (uri (pypi-uri "Nikola" version))
31910 (sha256
31911 (base32 "1h96y4sfypp2fbqxa8xrqch5f7r3srm2ly222k9w2n143h2spx4m"))))
31912 (build-system python-build-system)
31913 (propagated-inputs
31914 (list python-babel
31915 python-blinker
31916 python-dateutil
31917 python-docutils
31918 python-doit
31919 python-jinja2 ;; for themes
31920 python-lxml
31921 python-mako
31922 python-markdown
31923 python-natsort
31924 python-notebook ;; for ipynb
31925 python-phpserialize ;; for wordpress import
31926 python-piexif
31927 python-pillow
31928 python-pygments
31929 python-pyrss2gen
31930 python-requests
31931 python-ruamel.yaml ;; for YAML metadata
31932 python-toml
31933 python-unidecode
31934 python-yapsy))
31935 (native-inputs
31936 (list python-coverage
31937 python-flake8
31938 python-freezegun
31939 python-pytest
31940 python-pytest-cov))
31941 (arguments
31942 (list
31943 #:phases
31944 #~(modify-phases %standard-phases
31945 (replace 'check
31946 (lambda* (#:key tests? #:allow-other-keys)
31947 (when tests?
31948 (invoke "pytest" "tests" "--no-cov"
31949 "-k" "not test_compiling_markdown[hilite]")))))))
31950 (home-page "https://getnikola.com/")
31951 (synopsis "Modular, fast and simple static website and blog generator")
31952 (description "Nikola generates static websites and blogs. Out of the box,
31953it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
31954and has plugins for many other formats.")
31955 (license license:expat)))
31956
31957(define-public nbss-upload
31958 (package
31959 (name "nbss-upload")
31960 (version "0.1")
31961 (source
31962 (origin
31963 (method url-fetch)
31964 (uri (pypi-uri "nbss-upload" version))
31965 (sha256
31966 (base32 "0jhyfm7w2ssknmh9789fmpnf79xr7sxbdcjwak6hfha6qparvk38"))))
31967 (build-system python-build-system)
31968 (propagated-inputs
31969 (list python-requests))
31970 (arguments
31971 `(#:tests? #f)) ;no tests
31972 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
31973 (synopsis "Upload notebooks to a notebooksharing.space instance")
31974 (description
31975"Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
31976notebooksharing.space instance.")
31977 (license license:bsd-3)))
31978
31979(define-public python-reedsolo
31980 (package
31981 (name "python-reedsolo")
31982 (version "1.5.4")
31983 (source
31984 (origin
31985 (method url-fetch)
31986 (uri (pypi-uri "reedsolo" version))
31987 (sha256
31988 (base32 "09q15ji9iac3nmmxrcdvz8ynldvvqanqy3hs6q3cp327hgf5rcmq"))))
31989 (build-system python-build-system)
31990 (home-page "https://github.com/tomerfiliba/reedsolomon")
31991 (synopsis "Pure-Python Reed Solomon encoder/decoder")
31992 (description "A pure-python universal errors-and-erasures Reed-Solomon
31993Codec, based on the tutorial at Wikiversity. This is a burst-type
31994implementation, so that it supports any Galois field higher than 2^3,
31995but not binary streams.")
31996 (license license:public-domain)))
31997
31998(define-public python-esprima
31999 (package
32000 (name "python-esprima")
32001 (version "4.0.1")
32002 (source
32003 (origin
32004 (method url-fetch)
32005 (uri (pypi-uri "esprima" version))
32006 (sha256
32007 (base32 "1vi32g991lxcxzmncfiszh8m9bwkh4887szskkdi0a9wdn3imnq8"))))
32008 (build-system python-build-system)
32009 (home-page "https://github.com/Kronuz/esprima-python")
32010 (synopsis
32011 "ECMAScript parsing infrastructure for analysis in Python")
32012 (description
32013 "This package provides ECMAScript parsing infrastructure for
32014multipurpose analysis in Python.")
32015 (license license:bsd-3)))
32016
32017(define-public python-types-dataclasses
32018 (package
32019 (name "python-types-dataclasses")
32020 (version "0.6.1")
32021 (source (origin
32022 (method url-fetch)
32023 (uri (pypi-uri "types-dataclasses" version))
32024 (sha256
32025 (base32
32026 "1mq6qd365m8ml889zl5dxj9kncjv71iq1d1fvgj59y0ixlpm6s35"))))
32027 (build-system python-build-system)
32028 (home-page "https://github.com/python/typeshed")
32029 (synopsis "Typing stubs for dataclasses")
32030 (description
32031 "This package provides a collection of library stubs for Python, with
32032static types.")
32033 (license license:asl2.0)))
32034
32035(define-public python-types-docutils
32036 (package
32037 (name "python-types-docutils")
32038 (version "0.18.2")
32039 (source
32040 (origin
32041 (method url-fetch)
32042 (uri (pypi-uri "types-docutils" version))
32043 (sha256
32044 (base32 "14ypv0x6fk1pjw0bvvr1lkb2g6dvq2pwvbd5b5pzjl6182fhmaim"))))
32045 (build-system python-build-system)
32046 (home-page "https://github.com/python/typeshed")
32047 (synopsis "Typing stubs for docutils")
32048 (description "This package provides a collection of library stubs for
32049Python, with static types.")
32050 (license license:asl2.0)))
32051
32052(define-public python-types-requests
32053 (package
32054 (name "python-types-requests")
32055 (version "2.30.0.0")
32056 (source (origin
32057 (method url-fetch)
32058 (uri (pypi-uri "types-requests" version))
32059 (sha256
32060 (base32
32061 "0cas3cjkhrvsz2rmqnhqiihy9j79wxi9xbih8jk0p9r48c2q3iyy"))))
32062 (build-system pyproject-build-system)
32063 (propagated-inputs (list python-types-urllib3))
32064 (home-page "https://github.com/python/typeshed")
32065 (synopsis "Typing stubs for requests")
32066 (description "This package provides typing stubs for requests.")
32067 (license license:asl2.0)))
32068
32069(define-public python-types-setuptools
32070 (package
32071 (name "python-types-setuptools")
32072 (version "67.6.0.5")
32073 (source (origin
32074 (method url-fetch)
32075 (uri (pypi-uri "types-setuptools" version))
32076 (sha256
32077 (base32
32078 "0qlrxgl4mz6hs8z4qnl91hsa8mqcfm6397s3s3j21imxqxk8ww1s"))))
32079 (build-system python-build-system)
32080 (home-page "https://github.com/python/typeshed")
32081 (synopsis "Typing stubs for setuptools")
32082 (description "This package provides typing stubs for setuptools.")
32083 (license license:asl2.0)))
32084
32085(define-public python-types-urllib3
32086 (package
32087 (name "python-types-urllib3")
32088 (version "1.26.25.12")
32089 (source (origin
32090 (method url-fetch)
32091 (uri (pypi-uri "types-urllib3" version))
32092 (sha256
32093 (base32
32094 "0zcipjdnbnc8ymk8mh9n5mypa0qr03rqj98lbmahldcdrrap6md1"))))
32095 (build-system pyproject-build-system)
32096 (home-page "https://github.com/python/typeshed")
32097 (synopsis "Typing stubs for urllib3")
32098 (description "This package provides typing stubs for urllib3.")
32099 (license license:asl2.0)))
32100
32101(define-public python-typeshed-client
32102 (package
32103 (name "python-typeshed-client")
32104 (version "2.3.0")
32105 (source (origin
32106 (method url-fetch)
32107 (uri (pypi-uri "typeshed_client" version))
32108 (sha256
32109 (base32
32110 "1vdwp1jjg27b22qxgm49v21nb8vm1iki3bfsm0fnq2rsz5alfwz2"))))
32111 (build-system pyproject-build-system)
32112 (propagated-inputs (list python-importlib-resources))
32113 (home-page "https://github.com/JelleZijlstra/typeshed_client")
32114 (synopsis "Library for accessing stubs in typeshed")
32115 (description
32116 "This package provides a library for accessing stubs in typeshed.")
32117 (license license:expat)))
32118
32119(define-public python-psycopg2-binary
32120 (package
32121 (name "python-psycopg2-binary")
32122 (version "2.9.3")
32123 (source (origin
32124 (method url-fetch)
32125 (uri (pypi-uri "psycopg2-binary" version))
32126 (sha256
32127 (base32
32128 "0kpaxg3lg5wg5ww5kxmzi2z2d7arsx13ci915d8a2pf17lqza7bn"))))
32129 (build-system python-build-system)
32130 (inputs (list postgresql))
32131 (arguments
32132 ;; Tests are disable because they need a live instance of PostgreSQL.
32133 '(#:tests? #f))
32134 (home-page "https://psycopg.org/")
32135 (synopsis "PostgreSQL database adapter for Python")
32136 (description
32137 "Psycopg is a PostgreSQL database adapter for the Python programming
32138language. Its main features are the complete implementation of the Python DB
32139API 2.0 specification and the thread safety (several threads can share the
32140same connection). It was designed for heavily multi-threaded applications
32141that create and destroy lots of cursors and make a large number of concurrent
32142@code{INSERT}s or @code{UPDATE}s.
32143
32144Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
32145being both efficient and secure. It features client-side and
32146server-side cursors, asynchronous communication and notifications,
32147@code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
32148out-of-the-box and adapted to matching PostgreSQL data types;
32149adaptation can be extended and customized thanks to a flexible objects
32150adaptation system.
32151
32152Psycopg 2 is both Unicode and Python 3 friendly.")
32153 (license license:lgpl3+)))
32154
32155(define-public python-pyfuse3
32156 (package
32157 (name "python-pyfuse3")
32158 (version "3.2.1")
32159 (source
32160 (origin
32161 (method url-fetch)
32162 (uri (pypi-uri "pyfuse3" version))
32163 (sha256
32164 (base32 "0cvybynv9igssfa4l13q09gb6m7afmwk34wsbq8jk14sqpd4dl92"))))
32165 (build-system python-build-system)
32166 (native-inputs (list pkg-config))
32167 (inputs (list fuse))
32168 (propagated-inputs (list python-pytest-trio))
32169 (home-page "https://github.com/libfuse/pyfuse3")
32170 (synopsis "Python bindings to FUSE 3")
32171 (description "This package provides Python 3 bindings for libfuse 3 with
32172async I/O support.")
32173 (license license:gpl2+)))
32174
32175(define-public python-ansicolors
32176 (package
32177 (name "python-ansicolors")
32178 (version "1.1.8")
32179 (source
32180 (origin
32181 (method url-fetch)
32182 (uri (pypi-uri "ansicolors" version ".zip"))
32183 (sha256
32184 (base32 "1q3jqglkq4z0f6nkkn8bswcwqg012i2grrc27kabr8286dg4zycr"))))
32185 (build-system python-build-system)
32186 (native-inputs
32187 (list python-tox
32188 python-pytest-cov
32189 unzip))
32190 (home-page "https://github.com/jonathaneunice/colors/")
32191 (synopsis "ANSI colors for Python")
32192 (description
32193 "This package adds ANSI colors and decorations to your strings.")
32194 (license license:isc)))
32195
32196(define-public python-types-freezegun
32197 (package
32198 (name "python-types-freezegun")
32199 (version "1.1.8")
32200 (source
32201 (origin
32202 (method url-fetch)
32203 (uri (pypi-uri "types-freezegun" version))
32204 (sha256
32205 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
32206 (build-system python-build-system)
32207 (home-page "https://github.com/python/typeshed")
32208 (synopsis "Typing stubs for @code{freezegun}")
32209 (description "This package contains typing stubs for for @code{freezegun}, a
32210very small subset the Python stubs contained in the complete @code{typeshed}
32211collection.")
32212 (license license:asl2.0)))
32213
32214(define-public python-types-protobuf
32215 (package
32216 (name "python-types-protobuf")
32217 (version "3.20.1")
32218 (source (origin
32219 (method url-fetch)
32220 (uri (pypi-uri "types-protobuf" version))
32221 (sha256
32222 (base32
32223 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
32224 (build-system python-build-system)
32225 (home-page "https://github.com/python/typeshed")
32226 (synopsis "Typing stubs for @code{protobuf}")
32227 (description "This package contains typing stubs for @code{protobuf}, a
32228very small subset the Python stubs contained in the complete @code{typeshed}
32229collection.")
32230 (license license:asl2.0)))
32231
32232(define-public python-types-pytz
32233 (package
32234 (name "python-types-pytz")
32235 (version "2021.3.6")
32236 (source
32237 (origin
32238 (method url-fetch)
32239 (uri (pypi-uri "types-pytz" version))
32240 (sha256
32241 (base32 "14yr5hg2ww8s4a0mz2bkd549fv8qgm538fnzxvqv92ld1pcpym3l"))))
32242 (build-system python-build-system)
32243 (home-page "https://github.com/python/typeshed")
32244 (synopsis "Typing stubs for pytz")
32245 (description "This package contains typing stubs for @code{pytz}, a very
32246small subset the Python stubs contained in the complete @code{typeshed}
32247collection.")
32248 (license license:asl2.0)))
32249
32250(define-public python-types-toml
32251 (package
32252 (name "python-types-toml")
32253 (version "0.10.5")
32254 (source
32255 (origin
32256 (method url-fetch)
32257 (uri (pypi-uri "types-toml" version))
32258 (sha256
32259 (base32 "10400bd3yv6rjfnq8galskkbpqz1sfx9sfgr5qwvw04270x4cjgr"))))
32260 (build-system python-build-system)
32261 (home-page "https://github.com/python/typeshed")
32262 (synopsis "Typing stubs for TOML")
32263 (description "This package contains typing stubs for TOML, a very small
32264subset the Python stubs contained in the complete @code{typeshed}
32265collection.")
32266 (license license:asl2.0)))
32267
32268(define-public python-types-ujson
32269 (package
32270 (name "python-types-ujson")
32271 (version "4.2.1")
32272 (source (origin
32273 (method url-fetch)
32274 (uri (pypi-uri "types-ujson" version))
32275 (sha256
32276 (base32
32277 "0k9n9hsq4k2zaakdwbkcsvi7m8d3mv2y9yl6f171y58ld4qpcxcy"))))
32278 (build-system python-build-system)
32279 (home-page "https://github.com/python/typeshed")
32280 (synopsis "Typing stubs for ujson")
32281 (description
32282 "This is a PEP 561 type stub package for the ujson package. It can be
32283used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
32284uses ujson.")
32285 (license license:asl2.0)))
32286
32287(define-public python-stltools
32288 (package
32289 (name "python-stltools")
32290 (version "2022.01.20")
32291 (source (origin
32292 (method git-fetch)
32293 (uri (git-reference
32294 (url "https://github.com/rsmith-nl/stltools")
32295 (commit version)))
32296 (file-name (git-file-name name version))
32297 (sha256
32298 (base32
32299 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
32300 (build-system python-build-system)
32301 (arguments
32302 `(#:use-setuptools? #f
32303 #:phases
32304 (modify-phases %standard-phases
32305 (delete 'build)
32306 (replace 'install
32307 (lambda* (#:key inputs outputs #:allow-other-keys)
32308 (let ((moddir (string-append (site-packages inputs outputs) "/stltools"))
32309 (bindir (string-append (assoc-ref outputs "out") "/bin")))
32310 (copy-recursively "stltools" moddir)
32311 (mkdir-p bindir)
32312 (for-each
32313 (lambda (script)
32314 (let ((source (string-append script ".py"))
32315 (target (string-append bindir "/" script)))
32316 (copy-file source target)
32317 (chmod target #o555)))
32318 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo")))))
32319 (replace 'check
32320 (lambda* (#:key tests? #:allow-other-keys)
32321 (when tests?
32322 (invoke "py.test" "-v")))))))
32323 (propagated-inputs (list python-pycairo))
32324 (native-inputs (list python-pytest))
32325 (home-page "https://github.com/rsmith-nl/stltools")
32326 (synopsis "Python modules and scripts for handling STL files")
32327 (description "This package consists of Python modules and scripts for
32328manipulating stereolithography (STL) files. It can convert STL files into
32329POV-ray meshes, PDF and PostScript. The Python modules allow for reading and
32330writing STL files. It supports both the text and binary forms of STL.")
32331 (license license:expat)))
32332
32333(define-public python-multipart
32334 (package
32335 (name "python-multipart")
32336 (version "0.0.5")
32337 (source (origin
32338 (method url-fetch)
32339 (uri (pypi-uri "python-multipart" version))
32340 (sha256
32341 (base32
32342 "0hzshd665rl1bkwvaj9va4j3gs8nmb478fbvligx20663xhmzfzp"))))
32343 (build-system python-build-system)
32344 (propagated-inputs (list python-six))
32345 (native-inputs (list python-pyyaml python-mock python-pytest-cov))
32346 (arguments
32347 `(#:phases (modify-phases %standard-phases
32348 ;; There is a bug in the test_suit specification.
32349 (add-after 'unpack 'patch-test-suite
32350 (lambda _
32351 ;; Make compatible with PyYAML 6.
32352 (substitute* "multipart/tests/test_multipart.py"
32353 (("yaml.load")
32354 "yaml.safe_load"))
32355 (substitute* "setup.py"
32356 (("test_suite = 'multipart.tests.suite'")
32357 "test_suite = 'multipart.tests.test_multipart.suite'"))
32358 ;; Needed by PyYAML 6.0.
32359 (substitute* "multipart/tests/test_multipart.py"
32360 (("yaml_data = yaml.load\\(f\\)")
32361 "yaml_data = yaml.load(f, Loader=yaml.SafeLoader)")))))))
32362 (home-page "https://github.com/andrew-d/python-multipart")
32363 (synopsis "Streaming multipart parser for Python")
32364 (description
32365 "This package provides a streaming multipart parser for Python.")
32366 (license license:asl2.0)))
32367
32368(define-public python-aiopg
32369 (package
32370 (name "python-aiopg")
32371 (version "1.3.3")
32372 (source (origin
32373 (method url-fetch)
32374 (uri (pypi-uri "aiopg" version))
32375 (sha256
32376 (base32
32377 "1mwmypsfzh8adjbyvf7kqv9h3k1kf5ykhi1g3ahw4wqdxaj6nz2l"))))
32378 (build-system python-build-system)
32379 (native-inputs (list python-sqlalchemy))
32380 (propagated-inputs (list python-async-timeout python-psycopg2-binary))
32381 (home-page "https://aiopg.readthedocs.io")
32382 (synopsis "Postgres integration with asyncio")
32383 (description
32384 "aiopg is a library for accessing a PostgreSQL
32385database from the asyncio (PEP-3156/tulip) framework. It wraps
32386asynchronous features of the Psycopg database driver.")
32387 (license license:bsd-3)))
32388
32389(define-public python-verspec
32390 (package
32391 (name "python-verspec")
32392 (version "0.1.0")
32393 (source (origin
32394 (method url-fetch)
32395 (uri (pypi-uri "verspec" version))
32396 (sha256
32397 (base32
32398 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
32399 (build-system python-build-system)
32400 (native-inputs (list python-coverage python-flake8 python-mypy
32401 python-pretend python-pytest))
32402 (arguments
32403 `(#:phases (modify-phases %standard-phases
32404 (replace 'check
32405 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
32406 (when tests?
32407 (add-installed-pythonpath inputs outputs)
32408 (invoke "touch" "test/__init__.py")
32409 (invoke "pytest")))))))
32410 (home-page "https://github.com/jimporter/verspec")
32411 (synopsis "Flexible version handling for Python")
32412 (description
32413 "This Python library handles software versions and specifiers. It is
32414adapted from the @code{packaging} package.")
32415 (license (list license:bsd-2 license:asl2.0))))
32416
32417(define-public python-shtab
32418 (package
32419 (name "python-shtab")
32420 (version "1.5.3")
32421 (source
32422 (origin
32423 (method url-fetch)
32424 (uri (pypi-uri "shtab" version))
32425 (sha256
32426 (base32 "127mymfm7r0hddk2vknqq34fj6dirj6ip990i3g4isx0lsd7pnsc"))))
32427 (build-system python-build-system)
32428 (native-inputs
32429 (list bash
32430 python-pytest
32431 python-pytest-cov
32432 python-pytest-timeout
32433 python-setuptools-scm
32434 python-wheel))
32435 (arguments
32436 `(#:phases
32437 (modify-phases %standard-phases
32438 (replace
32439 'check
32440 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
32441 (when tests?
32442 (add-installed-pythonpath inputs outputs)
32443 (invoke "pytest")))))))
32444 (home-page "https://github.com/iterative/shtab")
32445 (synopsis "Automagic shell tab completion for Python CLI applications")
32446 (description
32447 "This package automatically generates shell tab completion scripts for
32448Python CLI apps.")
32449 (license license:asl2.0)))
32450
32451(define-public python-style
32452 (package
32453 (name "python-style")
32454 (version "1.1.6")
32455 (source
32456 (origin
32457 (method url-fetch)
32458 (uri (pypi-uri "style" version))
32459 (sha256
32460 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
32461 (build-system python-build-system)
32462 (home-page "https://github.com/lmittmann/style")
32463 (synopsis "Terminal string styling")
32464 (description
32465"@code{python-style} is a simple terminal string styling package. Its API is
32466a port of the chalk package for javascript.")
32467 (license license:expat)))
32468
32469(define-public python-sre-yield
32470 (package
32471 (name "python-sre-yield")
32472 (version "1.2")
32473 (source
32474 (origin
32475 (method url-fetch)
32476 (uri (pypi-uri "sre_yield" version))
32477 (sha256
32478 (base32
32479 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
32480 (build-system python-build-system)
32481 (native-inputs (list python-nose))
32482 (home-page "https://github.com/google/sre_yield")
32483 (synopsis "Expands a regular expression to its possible matches")
32484 (description
32485 "The goal of sre_yield is to efficiently generate all values that can
32486match a given regular expression, or count possible matches efficiently. It
32487uses the parsed regular expression, so you get a much more accurate result
32488than trying to just split strings.")
32489 (license license:asl2.0)))
32490
32491(define-public python-srsly
32492 (package
32493 (name "python-srsly")
32494 (version "2.4.7")
32495 (source (origin
32496 (method url-fetch)
32497 (uri (pypi-uri "srsly" version))
32498 (sha256
32499 (base32
32500 "022x0djlkl6pgh9yrd4avlai1n6y4hxm9l1xnb6630kpi12wrhlk"))))
32501 (build-system pyproject-build-system)
32502 (arguments
32503 (list
32504 #:phases
32505 #~(modify-phases %standard-phases
32506 (add-before 'check 'build-extensions
32507 (lambda _
32508 ;; Cython extensions have to be built before running the tests.
32509 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
32510 (propagated-inputs (list python-catalogue))
32511 (native-inputs
32512 (list python-cython
32513 python-pytest
32514 python-pytest-timeout
32515 python-mock
32516 python-numpy
32517 python-psutil))
32518 (home-page "https://github.com/explosion/srsly")
32519 (synopsis "Serialization utilities for Python")
32520 (description "This package bundles some of the best Python serialization
32521libraries into one standalone package, with a high-level API that makes it
32522easy to write code that's correct across platforms and Pythons.")
32523 (license license:expat)))
32524
32525(define-public python-pyperf
32526 (package
32527 (name "python-pyperf")
32528 (version "2.3.1")
32529 (source
32530 (origin
32531 (method url-fetch)
32532 (uri (pypi-uri "pyperf" version))
32533 (sha256
32534 (base32 "189qf9wdbig0fk4n3bavx8acgdbay5lllfvw48jvbfaafb7y5hja"))))
32535 (build-system python-build-system)
32536 (arguments
32537 '(#:phases
32538 (modify-phases %standard-phases
32539 (add-after 'unpack 'fix-tests
32540 (lambda _
32541 ;; Some of these tests fail with:
32542 ;;
32543 ;; ModuleNotFoundError: No module named 'pyperf'
32544 ;;
32545 ;; even when calling ‘add-installed-pythonpath’ in the ‘check’
32546 ;; phase.
32547 (delete-file "pyperf/tests/test_examples.py")))
32548 (replace 'check
32549 (lambda* (#:key tests? #:allow-other-keys)
32550 (when tests?
32551 ;; From tox.ini's ‘testenv.commands’.
32552 (invoke "python" "-bb" "-Wd"
32553 "-m" "unittest" "discover"
32554 "-s" "pyperf/tests/" "-v")))))))
32555 (native-inputs
32556 (list python-psutil))
32557 (home-page "https://github.com/psf/pyperf")
32558 (synopsis "Toolkit for running Python benchmarks")
32559 (description "The Python @code{pyperf} module is a toolkit for writing,
32560running and analyzing benchmarks. It features a simple API that can:
32561
32562@itemize
32563@item automatically calibrate a benchmark for a time budget;
32564@item spawn multiple worker processes;
32565@item compute the mean and standard deviation;
32566@item detect if a benchmark result seems unstable;
32567@item store benchmark results in JSON format;
32568@item support multiple units: seconds, bytes and integer.
32569@end itemize")
32570 (license license:expat)))
32571
32572(define-public python-pydispatcher
32573 (package
32574 (name "python-pydispatcher")
32575 (version "2.0.5")
32576 (source
32577 (origin
32578 (method url-fetch)
32579 (uri (pypi-uri "PyDispatcher" version))
32580 (sha256
32581 (base32 "1bswbmhlbqdxlgbxlb6xrlm4k253sg8nvpl1whgsys8p3fg0cw2m"))))
32582 (build-system python-build-system)
32583 (arguments
32584 `(#:phases
32585 (modify-phases %standard-phases
32586 (replace 'check
32587 (lambda* (#:key tests? #:allow-other-keys)
32588 (when tests?
32589 (invoke "pytest")))))))
32590 (native-inputs (list python-pytest))
32591 (home-page "https://pydispatcher.sourceforge.net")
32592 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
32593 (description "PyDispatcher is an enhanced version of Patrick K. O’Brien’s
32594original @code{dispatcher.py} module. It provides the Python programmer with
32595a robust mechanism for event routing within various application contexts.
32596
32597Included in the package are the robustapply and saferef modules, which
32598provide the ability to selectively apply arguments to callable objects
32599and to reference instance methods using weak-references.")
32600 (license license:bsd-3)))
32601
32602(define-public python-pyee
32603 (package
32604 (name "python-pyee")
32605 (version "9.0.4")
32606 (source
32607 (origin
32608 (method url-fetch)
32609 (uri (pypi-uri "pyee" version))
32610 (sha256
32611 (base32 "0cjbxbqr9f8bn2h3ra69d550qj2r1hmsgrh5nx31ywmwia9c8w17"))))
32612 (build-system python-build-system)
32613 (propagated-inputs (list python-typing-extensions))
32614 (native-inputs (list python-twisted python-trio))
32615 (home-page "https://github.com/jfhbrook/pyee")
32616 (synopsis "Emit events with Python")
32617 (description
32618 "This package provides a port of node.js's EventEmitter to python.
32619Additionally, it includes a number of subclasses useful for implementing async
32620and threaded programming in python, such as async/await.")
32621 (license license:expat)))
32622
32623(define-public python-queuelib
32624 (package
32625 (name "python-queuelib")
32626 (version "1.6.2")
32627 (source
32628 (origin
32629 (method url-fetch)
32630 (uri (pypi-uri "queuelib" version))
32631 (sha256
32632 (base32 "1lpwq8wx3025i14y5h0hbald2ypbarf081pql6cqcak4y9kp482b"))))
32633 (build-system python-build-system)
32634 (native-inputs (list python-pytest))
32635 (home-page "https://github.com/scrapy/queuelib")
32636 (synopsis
32637 "Collection of persistent (disk-based) and non-persistent (memory-based) queues")
32638 (description "Queuelib is a Python library that implements object
32639collections which are stored in memory or persisted to disk, provide a
32640simple API, and run fast.
32641
32642Queuelib provides collections for queues (FIFO), stacks (LIFO), queues
32643sorted by priority and queues that are emptied in a round-robin
32644fashion.")
32645 (license license:bsd-3)))
32646
32647(define-public python-posix-ipc
32648 (package
32649 (name "python-posix-ipc")
32650 (version "1.0.5")
32651 (source
32652 (origin
32653 ;; The source distributed on PyPI is prebuild.
32654 (method git-fetch)
32655 (uri (git-reference
32656 (url "https://github.com/osvenskan/posix_ipc")
32657 (commit (string-append "rel" version))))
32658 (file-name (git-file-name name version))
32659 (sha256
32660 (base32 "17y4d0pmvp199c5hbs602ailhlh9f9zv89kmpbd8jhyl6rgaxsvs"))))
32661 (build-system python-build-system)
32662 (arguments
32663 (list #:phases
32664 #~(modify-phases %standard-phases
32665 (add-after 'unpack 'patch-cc-path
32666 (lambda _
32667 (substitute* "prober.py"
32668 (("cmd = .cc")
32669 (string-append "cmd = \"" #$(cc-for-target)))))))))
32670 (home-page "https://semanchuk.com/philip/posix_ipc/")
32671 (synopsis "POSIX IPC primitives for Python")
32672 (description
32673 "This package provides POSIX IPC primitives - semaphores, shared memory and
32674message queues for Python.")
32675 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
32676
32677(define-public python-itemadapter
32678 (package
32679 (name "python-itemadapter")
32680 (version "0.8.0")
32681 (source
32682 (origin
32683 (method url-fetch)
32684 (uri (pypi-uri "itemadapter" version))
32685 (sha256
32686 (base32 "1aa898gjgwy3axxfrgsh4kdvhp6n6wz3ccdishq0gh8azf2q8xbp"))))
32687 (build-system python-build-system)
32688 (home-page "https://github.com/scrapy/itemadapter")
32689 (synopsis "Common interface for data container classes")
32690 (description "The ItemAdapter class is a wrapper for data container
32691objects, providing a common interface to handle objects of different
32692types in an uniform manner, regardless of their underlying implementation.
32693
32694Currently supported types are:
32695@itemize
32696@item scrapy.item.Item
32697@item dict
32698@item dataclass-based classes
32699@item attrs-based classes
32700@item pydantic-based classes
32701@end itemize
32702
32703Additionally, interaction with arbitrary types is supported by
32704implementing a pre-defined interface.")
32705 (license license:bsd-3)))
32706
32707(define-public python-itemloaders
32708 (package
32709 (name "python-itemloaders")
32710 (version "1.1.0")
32711 (source
32712 (origin
32713 (method url-fetch)
32714 (uri (pypi-uri "itemloaders" version))
32715 (sha256
32716 (base32 "0j2aw4ipalj208594x80blpgkh1i63gqqa4nb67b823av9hirn11"))))
32717 (build-system pyproject-build-system)
32718 (native-inputs (list python-pytest))
32719 (propagated-inputs
32720 (list python-itemadapter python-jmespath python-parsel python-w3lib))
32721 (home-page "https://github.com/scrapy/itemloaders")
32722 (synopsis "Base library for scrapy's ItemLoader")
32723 (description "Itemloaders is a library that helps you collect data
32724from HTML and XML sources. It comes in handy to extract data from web
32725pages, as it supports data extraction using CSS and XPath Selectors.
32726
32727It’s specially useful when you need to standardize the data from many
32728sources. For example, it allows you to have all your casting and
32729parsing rules in a single place.")
32730 (license license:bsd-3)))
32731
32732(define-public python-iteround
32733 (package
32734 (name "python-iteround")
32735 (version "1.0.4")
32736 ;; PyPI only has wheels.
32737 (source (origin
32738 (method git-fetch)
32739 (uri (git-reference
32740 (url "https://github.com/cgdeboer/iteround")
32741 (commit (string-append "v" version))))
32742 (file-name (git-file-name name version))
32743 (sha256
32744 (base32 "1irw4sqrsgpc0ibxdv1hlx0d0jr1fqs48bj6mpfylzqkag9ywlfj"))))
32745 (build-system pyproject-build-system)
32746 (native-inputs
32747 (list python-pytest))
32748 (home-page "https://github.com/cgdeboer/iteround")
32749 (synopsis "Sum-safe rounding for Iterables")
32750 (description "Iteround is a standard library sum-safe rounding library for
32751Python iterables (lists, tuples, dicts).")
32752 (license license:expat)))
32753
32754(define-public python-hypy-utils
32755 (package
32756 (name "python-hypy-utils")
32757 (version "1.0.6")
32758 (source (origin
32759 (method url-fetch)
32760 (uri (pypi-uri "hypy_utils" version))
32761 (sha256
32762 (base32
32763 "05csk0x8ivavq88x457cq5hwjcdirfbkzj7bbg5qgnpnf2dxxhiw"))))
32764 (build-system python-build-system)
32765 (home-page "https://github.com/hykilpikonna/HyPyUtils")
32766 (synopsis "Python utility functions for HyDEV")
32767 (description "This module provides Python utility functions for modifying
32768and setting the color of terminal output, via HyDEV.")
32769 (license license:expat)))
32770
32771(define-public python-mike
32772 (package
32773 (name "python-mike")
32774 (version "1.1.2")
32775 (source (origin
32776 (method url-fetch)
32777 (uri (pypi-uri "mike" version))
32778 (sha256
32779 (base32
32780 "0yxp816x7s948xsd0fifvq9shg01xdxlifd9rzf5y2rd9iwz3hsn"))))
32781 (build-system python-build-system)
32782 (native-inputs
32783 (list python-coverage python-flake8 python-shtab))
32784 (propagated-inputs
32785 (list python-jinja2 python-mkdocs python-pyyaml python-verspec))
32786 (home-page "https://github.com/jimporter/mike")
32787 (synopsis "Manage multiple versions of MkDocs-powered documentation")
32788 (description
32789 "This package provides a Python utility to easily deploy multiple
32790versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
32791to Github via gh-pages.")
32792 (license license:bsd-3)))
32793
32794(define-public python-arpeggio
32795 (package
32796 (name "python-arpeggio")
32797 (version "2.0.0")
32798 (source (origin
32799 (method url-fetch)
32800 (uri (pypi-uri "Arpeggio" version))
32801 (sha256
32802 (base32
32803 "0ggdsck1wpladd5bh9drhkmm86bblgk2wagrhn3sdf4v04wkic6n"))))
32804 (build-system python-build-system)
32805 (native-inputs (list python-coverage
32806 python-coveralls
32807 python-flake8
32808 python-mike
32809 python-mkdocs
32810 python-pytest
32811 python-pytest-runner
32812 python-twine
32813 python-wheel))
32814 (home-page "https://github.com/textX/Arpeggio")
32815 (synopsis "Packrat parser interpreter for Python")
32816 (description
32817 "This Python library provides a recursive descent parser with backtracking
32818and memoization (a.k.a. packrat parser). Arpeggio grammars are based on PEG
32819formalism. Arpeggio's main use is a foundation for a toolchain for DSL
32820development but it can be used for all sorts of general purpose parsing.")
32821 (license license:expat)))
32822
32823(define-public python-flatten-json
32824 (package
32825 (name "python-flatten-json")
32826 (version "0.1.13")
32827 (source
32828 (origin
32829 (method url-fetch)
32830 (uri (pypi-uri "flatten_json" version))
32831 (sha256
32832 (base32 "007m28gfs7pmz2rqqjxpial6skzw26hrfi8vrdy9agi9x0rj6dgf"))))
32833 (build-system python-build-system)
32834 (propagated-inputs (list python-six))
32835 (home-page "https://github.com/amirziai/flatten")
32836 (synopsis "Flatten JSON objects")
32837 (description
32838 "The @code{flatten_json} Python library flattens the hierarchy in your
32839object, which can be useful if you want to force your objects into a table.")
32840 (license license:expat)))
32841
32842(define-public python-deepdiff
32843 (package
32844 (name "python-deepdiff")
32845 (version "6.3.0")
32846 (source (origin
32847 (method url-fetch)
32848 (uri (pypi-uri "deepdiff" version))
32849 (sha256
32850 (base32
32851 "0i5nnb3nppi2vgbhiakpxiagyhx7l1f50hzcl8fcgica4bkz2fva"))))
32852 (build-system pyproject-build-system)
32853 (propagated-inputs (list python-ordered-set))
32854 (native-inputs
32855 (list python-click
32856 python-dateutil
32857 python-jsonpickle
32858 python-mock
32859 python-numpy
32860 python-pytest
32861 python-pyyaml))
32862 (home-page "https://github.com/seperman/deepdiff")
32863 (synopsis "Deep difference and search of any Python object/data")
32864 (description
32865 "This package provides tools for computing deep differences and searching
32866of any Python object/data. Recreate objects by adding adding deltas to each
32867other.")
32868 (license license:expat)))
32869
32870(define-public python-deepmerge
32871 (package
32872 (name "python-deepmerge")
32873 (version "1.0.1")
32874 (source
32875 (origin
32876 (method url-fetch)
32877 (uri (pypi-uri "deepmerge" version))
32878 (sha256
32879 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
32880 (build-system pyproject-build-system)
32881 (arguments
32882 (list
32883 #:phases
32884 #~(modify-phases %standard-phases
32885 (add-before 'build 'set-version
32886 (lambda _
32887 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
32888 (native-inputs
32889 (list python-setuptools-scm
32890 python-pytest))
32891 (home-page "https://deepmerge.readthedocs.io/en/latest/")
32892 (synopsis "Merge nested data structures")
32893 (description
32894 "The @code{deep-merge} Python library provides a toolset to deeply merge
32895nested data structures in Python like lists and dictionaries.")
32896 (license license:expat)))
32897
32898(define-public python-murmurhash3
32899 (package
32900 (name "python-murmurhash3")
32901 (version "2.3.5")
32902 (source (origin
32903 (method url-fetch)
32904 (uri (pypi-uri "murmurhash3" version))
32905 (sha256
32906 (base32
32907 "1gdzys1212dx70byz07ipknbw1awbqskh6aznlkm85js8b8qfczm"))))
32908 (build-system python-build-system)
32909 (native-inputs (list python-cython python-pytest))
32910 (inputs (list python))
32911 (arguments
32912 (list #:modules
32913 '((ice-9 ftw) (ice-9 match)
32914 (guix build utils)
32915 (guix build python-build-system))
32916 #:phases
32917 #~(modify-phases %standard-phases
32918 (add-after 'unpack 'set-source-file-times-to-1980
32919 (lambda _
32920 (let ((circa-1980 (* 10 366 24 60 60)))
32921 (ftw "."
32922 (lambda (file stat flag)
32923 (utime file circa-1980 circa-1980) #t))))))))
32924 (home-page "https://github.com/veegee/mmh3")
32925 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
32926 (description
32927 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
32928of fast and robust hash functions. This library is a Python extension module
32929written in C.")
32930 (license license:public-domain)))
32931
32932(define-public python-murmurhash
32933 (package
32934 (name "python-murmurhash")
32935 (version "1.0.7")
32936 (source (origin
32937 (method url-fetch)
32938 (uri (pypi-uri "murmurhash" version))
32939 (sha256
32940 (base32
32941 "0vwkn98c703nvsigl2nz99rax2pafkx3djjfkgc49jiipmp3j2k3"))))
32942 (build-system python-build-system)
32943 (native-inputs (list python-cython python-pytest))
32944 (inputs (list python python-murmurhash3))
32945 (arguments
32946 (list #:modules
32947 '((ice-9 ftw) (ice-9 match)
32948 (guix build utils)
32949 (guix build python-build-system))
32950 #:phases
32951 #~(modify-phases %standard-phases
32952 (add-after 'unpack 'set-source-file-times-to-1980
32953 (lambda _
32954 (let ((circa-1980 (* 10 366 24 60 60)))
32955 (ftw "."
32956 (lambda (file stat flag)
32957 (utime file circa-1980 circa-1980) #t))))))))
32958 (home-page "https://github.com/explosion/murmurhash")
32959 (synopsis "Cython bindings for MurmurHash2")
32960 (description "This package provides Cython bindings for MurmurHash2.")
32961 (license license:expat)))
32962
32963;; Scooby requires for its test suite a ‘pyvips’ package that is missing its
32964;; VIPS dependency.
32965(define python-pyvips-for-python-scooby
32966 (package
32967 (inherit python-pyvips)
32968 (name "python-pyvips-for-python-scooby")
32969 (arguments
32970 (substitute-keyword-arguments (package-arguments python-pyvips)
32971 ((#:phases phases)
32972 #~(modify-phases #$phases
32973 (delete 'fix-paths)
32974 ;; The checks won't succeed without VIPS.
32975 (delete 'check)
32976 (delete 'sanity-check)))))
32977 (inputs
32978 (modify-inputs (package-inputs python-pyvips)
32979 (delete "vips")))
32980 (synopsis "pyvips for Scooby's test suite")))
32981
32982(define-public python-scooby
32983 (package
32984 (name "python-scooby")
32985 (version "0.5.12")
32986 (source
32987 ;; The PyPI tarball does not contain the tests.
32988 (origin
32989 (method git-fetch)
32990 (uri (git-reference
32991 (url "https://github.com/banesullivan/scooby")
32992 (commit (string-append "v" version))))
32993 (file-name (git-file-name name version))
32994 (sha256
32995 (base32 "1gkpmz8wl3jg8ylf1na35308sznw2g9wx33zqlyq5i2gpy2ml9mw"))))
32996 (build-system python-build-system)
32997 (native-inputs
32998 (list python-beautifulsoup4
32999 python-numpy
33000 python-pytest
33001 python-pytest-cov
33002 python-pyvips-for-python-scooby
33003 python-scipy))
33004 (propagated-inputs
33005 (list python-psutil))
33006 (arguments
33007 '(#:phases
33008 (modify-phases %standard-phases
33009 (add-after 'unpack 'fix-tests
33010 (lambda _
33011 (substitute* "tests/test_scooby.py"
33012 ;; The test suite uses the no-version PyPI package
33013 ;; (https://pypi.org/project/no-version/),
33014 ;; but it doesn't seem worth packaging in Guix just for this.
33015 (("scooby\\.report\\.VERSION_NOT_FOUND")
33016 "scooby.report.MODULE_NOT_FOUND")
33017 (("^ +import no_version # noqa.*") ""))))
33018 (replace 'check
33019 (lambda* (#:key tests? #:allow-other-keys)
33020 (when tests?
33021 (invoke "pytest")))))))
33022 (home-page "https://github.com/banesullivan/scooby")
33023 (synopsis "Report hardware information and Python package versions")
33024 (description
33025 "The Scooby package reports the following information about the currently
33026running system:
33027
33028@itemize
33029@item operating system name;
33030@item hardware information including machine type (e.g., @samp{i386},
33031@samp{x86_64}, etc.), CPU count and total RAM;
33032@item Python environment (e.g., Python, IPython, etc.);
33033@item file system name;
33034@item Python version;
33035@item versions of specified Python packages.
33036@end itemize
33037
33038It can generate reports as HTML tables or plain text lists.
33039
33040Scooby has no required dependencies, and only few optional dependencies.")
33041 (license license:expat)))
33042
33043(define-public python-cymem
33044 (package
33045 (name "python-cymem")
33046 (version "2.0.6")
33047 (source (origin
33048 (method url-fetch)
33049 (uri (pypi-uri "cymem" version))
33050 (sha256
33051 (base32
33052 "0pkyy60zk9654sj991w111p1l0m8wvz36nslw96x6nb9h6sjb5qn"))))
33053 (build-system python-build-system)
33054 (native-inputs
33055 (list python-cython
33056 python-pytest))
33057 (inputs
33058 (list python))
33059 (arguments
33060 (list
33061 #:modules '((ice-9 ftw)
33062 (ice-9 match)
33063 (guix build utils)
33064 (guix build python-build-system))
33065 #:phases
33066 #~(modify-phases %standard-phases
33067 (add-after 'unpack 'set-source-file-times-to-1980
33068 ;; XXX One of the tests uses a ZIP library to pack up some of the
33069 ;; source tree, and fails with "ZIP does not support timestamps
33070 ;; before 1980". Work around this by setting the file times in the
33071 ;; source tree to sometime in early 1980.
33072 (lambda _
33073 (let ((circa-1980 (* 10 366 24 60 60)))
33074 (ftw "." (lambda (file stat flag)
33075 (utime file circa-1980 circa-1980)
33076 #t))))))))
33077 (home-page "https://github.com/explosion/cymem")
33078 (synopsis "Cython memory pool for RAII-style memory management")
33079 (description
33080 "Cymem provides two small memory-management helpers for Cython. They make it
33081easy to tie memory to a Python object's life-cycle, so that the memory is freed
33082when the object is garbage collected.")
33083 (license license:expat)))
33084
33085(define-public python-preshed
33086 (package
33087 (name "python-preshed")
33088 (version "3.0.6")
33089 (source (origin
33090 (method url-fetch)
33091 (uri (pypi-uri "preshed" version))
33092 (sha256
33093 (base32
33094 "0akpydd23xqxx9d04drsnw9140rb3cv07r1zpzqz5wm0lf47afzv"))))
33095 (build-system python-build-system)
33096 (native-inputs (list python-cython python-cymem python-pytest))
33097 (inputs (list python python-cymem python-murmurhash))
33098 (arguments
33099 (list #:modules
33100 '((ice-9 ftw) (ice-9 match)
33101 (guix build utils)
33102 (guix build python-build-system))
33103 #:phases
33104 #~(modify-phases %standard-phases
33105 (add-after 'unpack 'set-source-file-times-to-1980
33106 (lambda _
33107 (let ((circa-1980 (* 10 366 24 60 60)))
33108 (ftw "."
33109 (lambda (file stat flag)
33110 (utime file circa-1980 circa-1980) #t))))))))
33111 (home-page "https://github.com/explosion/preshed")
33112 (synopsis "Cython hash tables that assume keys are pre-hashed")
33113 (description
33114 "Simple but high performance Cython hash table mapping pre-randomized keys
33115to void* values.")
33116 (license license:expat)))
33117
33118(define-public python-catalogue
33119 (package
33120 (name "python-catalogue")
33121 (version "2.0.7")
33122 (source (origin
33123 (method url-fetch)
33124 (uri (pypi-uri "catalogue" version))
33125 (sha256
33126 (base32
33127 "0srdxiil2xys8q1gpc1nvzhvis3a33d8a7amk2i1rlpbg6p36pak"))))
33128 (build-system python-build-system)
33129 (native-inputs (list python-pytest))
33130 (inputs (list python python-zipp python-typing-extensions python-mypy))
33131 (home-page "https://github.com/explosion/catalogue")
33132 (synopsis "Lightweight function registries for your library")
33133 (description
33134 "\"catalogue\" is a tiny, zero-dependencies library that
33135makes it easy to add function (or object) registries to your code. Function
33136registries are helpful when you have objects that need to be both easily
33137serializable and fully customizable. Instead of passing a function into your
33138object, you pass in an identifier name, which the object can use to lookup the
33139function from the registry. This makes the object easy to serialize, because the
33140name is a simple string. If you instead saved the function, you'd have to use
33141Pickle for serialization, which has many drawbacks.")
33142 (license license:expat)))
33143
33144(define-public python-wasabi
33145 (package
33146 (name "python-wasabi")
33147 (version "0.9.1")
33148 (source (origin
33149 (method url-fetch)
33150 (uri (pypi-uri "wasabi" version))
33151 (sha256
33152 (base32
33153 "1kwqfalq7qxs9f7xb2m055g01qpbznyzxl7sjnzjdvvhkczg39md"))))
33154 (build-system python-build-system)
33155 (native-inputs (list python-pytest))
33156 (home-page "https://github.com/ines/wasabi")
33157 (synopsis "Console printing and formatting toolkit")
33158 (description
33159 "This package provides a lightweight console printing and formatting
33160toolkit for Python.")
33161 (license license:expat)))
33162
33163(define-public python-srt
33164 (package
33165 (name "python-srt")
33166 (version "3.5.2")
33167 (source (origin
33168 (method url-fetch)
33169 (uri (pypi-uri "srt" version))
33170 (sha256
33171 (base32
33172 "0l24710spxarijmv3h7iicvx0lv6m3d4xg77nd9kyv8jwifav93s"))))
33173 (build-system python-build-system)
33174 (home-page "https://github.com/cdown/srt")
33175 (synopsis "SRT parsing library")
33176 (description
33177 "This package provides a Python library for parsing, modifying, and
33178composing subtitles in the SRT file format.")
33179 (license license:expat)))
33180
33181(define-public python-gatt
33182 (package
33183 (name "python-gatt")
33184 (version "0.2.7")
33185 (source (origin
33186 (method url-fetch)
33187 (uri (pypi-uri "gatt" version))
33188 (sha256
33189 (base32
33190 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
33191 (propagated-inputs (list python-dbus python-pygobject))
33192 (build-system python-build-system)
33193 (home-page "https://github.com/getsenic/gatt-python")
33194 (synopsis "Bluetooth GATT SDK for Python")
33195 (description "The Bluetooth @acronym{GATT, Generic ATTribute Profile}
33196@acronym{SDK, Software Development Kit} for Python helps you implement and
33197communicate with any Bluetooth Low Energy device that has a GATT
33198profile. It supports:
33199
33200@itemize @bullet
33201@item Discovering nearby Bluetooth Low Energy devices
33202@item Connecting and disconnecting devices
33203@item Implementing your custom GATT profile
33204@item Accessing all GATT services
33205@item Accessing all GATT characteristics
33206@item Reading characteristic values
33207@item Writing characteristic values
33208@item Subscribing for characteristic value change notifications
33209@end itemize
33210
33211Currently, Linux is the only platform supported by this library.")
33212 (license license:expat)))
33213
33214(define-public python-clrprint
33215 (package
33216 (name "python-clrprint")
33217 (version "2.0.1")
33218 (source (origin
33219 (method url-fetch)
33220 (uri (pypi-uri "clrprint" version))
33221 (sha256
33222 (base32
33223 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
33224 (build-system python-build-system)
33225 (arguments '(#:tests? #f)) ;there are no tests
33226 (propagated-inputs (list python-colorama python-termcolor))
33227 (home-page "https://github.com/AbhijithAJ/clrprint")
33228 (synopsis "Print colorful output in the terminal")
33229 (description "@code{clrprint} is developed to print colorful output in the
33230terminal. It has red, blue, green, yellow, purple and black/white (default)
33231colors.")
33232 (license license:expat)))
33233
33234(define-public python-musical-scales
33235 (package
33236 (name "python-musical-scales")
33237 (version "1.0.1")
33238 (source (origin
33239 (method url-fetch)
33240 (uri (pypi-uri "musical-scales" version))
33241 (sha256
33242 (base32
33243 "1ckn8n37i7b65h0i385ycn0w8sg9na0iabz0kmhxxc1wj0hddkw9"))))
33244 (build-system python-build-system)
33245 (native-inputs (list python-wheel))
33246 (home-page "https://github.com/hmillerbakewell/musical-scale")
33247 (synopsis "Retrieve a scale based on a given mode and starting note")
33248 (description
33249 "Retrieve a scale based on a given mode and starting note.
33250Information about these scales can be
33251@url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
33252Wikipedia}.")
33253 (license license:expat)))
33254
33255(define-public python-langcodes
33256 (package
33257 (name "python-langcodes")
33258 (version "3.3.0")
33259 (source (origin
33260 (method url-fetch)
33261 (uri (pypi-uri "langcodes" version))
33262 (sha256
33263 (base32
33264 "1xkyh3qdcigb18qiimbwl2669y22hhdmd89mqcd270c7lbahfkbr"))))
33265 (build-system python-build-system)
33266 (native-inputs (list python-pytest))
33267 (home-page "https://github.com/rspeer/langcodes")
33268 (synopsis "Python library for working with language codes")
33269 (description
33270 "This package provides a Python library for working with and comparing
33271language codes.
33272
33273@code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
3327447}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
3327547 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
33276with it, and it also implements recommendations from the
33277@url{http://cldr.unicode.org/, Unicode CLDR}.
33278
33279@code{python-langcodes} can also refer to a database of language properties
33280and names, built from Unicode CLDR and the IANA subtag registry, if you
33281install @code{python-language-data}.")
33282 (license license:expat)))
33283
33284(define-public python-geomet
33285 (package
33286 (name "python-geomet")
33287 (version "0.3.0")
33288 (source (origin
33289 (method url-fetch)
33290 (uri (pypi-uri "geomet" version))
33291 (sha256
33292 (base32
33293 "06rfvadx5dr5xrgsc5bsmqil9c9kff6i13xl988gy0gfg0cl2lnb"))))
33294 (build-system python-build-system)
33295 (propagated-inputs (list python-click python-six))
33296 (home-page "https://github.com/geomet/geomet")
33297 (synopsis "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or
33298GeoPackage Binary")
33299 (description "This package provides utilities and functions for converting
33300GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
33301versa. Extended WKB/WKT are also supported.")
33302 (license license:asl2.0)))
33303
33304(define-public python-cogapp
33305 (package
33306 (name "python-cogapp")
33307 (version "3.3.0")
33308 (source (origin
33309 (method url-fetch)
33310 (uri (pypi-uri "cogapp" version))
33311 (sha256
33312 (base32
33313 "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
33314 (build-system pyproject-build-system)
33315 (native-inputs (list python-pytest))
33316 (home-page "https://nedbatchelder.com/code/cog")
33317 (synopsis "Content generation tool that leverages Python")
33318 (description "Cog is a file generation tool. It allows using pieces of
33319Python code as generators in your source files to generate arbitrary text.")
33320 (license license:expat)))
33321
33322(define-public python-bsdiff4
33323 (package
33324 (name "python-bsdiff4")
33325 (version "1.2.2")
33326 (home-page "https://github.com/ilanschnell/bsdiff4")
33327 (source (origin
33328 (method git-fetch)
33329 (uri (git-reference
33330 (url home-page)
33331 (commit version)))
33332 (file-name (git-file-name name version))
33333 (sha256
33334 (base32
33335 "1fa0vkmbr0a9xifq7i5gfcf7ifn739i1fdij8awynm299fsqvvhx"))))
33336 (build-system python-build-system)
33337 (synopsis "Binary diff and patch using the BSDIFF4 format")
33338 (description "This package provides a Python library for the @code{bsdiff}
33339binary diff utility. It also provides two command-line tools, @code{bsdiff4}
33340and @code{bspatch4}.")
33341 (license license:bsd-2)))
33342
33343(define-public python-mpv
33344 (package
33345 (name "python-mpv")
33346 (version "1.0.1")
33347 (source
33348 (origin
33349 ;; python-mpv from pypi does not include the tests directory.
33350 (method git-fetch)
33351 (uri (git-reference
33352 (url "https://github.com/jaseg/python-mpv")
33353 (commit (string-append "v" version))))
33354 (file-name (git-file-name name version))
33355 (sha256
33356 (base32
33357 "10w6j3n62ap45sf6q487kz8z6g58sha37i14fa2hhng794z7a8jh"))
33358 (modules '((guix build utils)))
33359 (snippet
33360 #~(begin
33361 ;; One of the tests never completes, so neutering it using
33362 ;; early return allows other test to run without issue.
33363 (substitute* "tests/test_mpv.py"
33364 ;; Note the typo in "prooperty" - this was fixed later in
33365 ;; upstream but has no effect on whether the tests hangs or not.
33366 (("test_wait_for_prooperty_event_overflow.*" line)
33367 ;; The long whitespace between \n and return is to match the
33368 ;; identation level, which is significant in python.
33369 (string-append line "\n return\n")))))))
33370 (build-system python-build-system)
33371 (arguments
33372 (list #:phases
33373 #~(modify-phases %standard-phases
33374 (add-before 'build 'patch-reference-to-mpv
33375 (lambda* (#:key inputs #:allow-other-keys)
33376 ;; Without an absolute path it is not able find and
33377 ;; load the libmpv library.
33378 (substitute* "mpv.py"
33379 (("sofile = .*")
33380 (string-append "sofile = \""
33381 (search-input-file inputs "/lib/libmpv.so")
33382 "\"\n")))))
33383 (add-before 'check 'prepare-for-tests
33384 (lambda _
33385 ;; Fontconfig throws errors when it has no cache dir to use.
33386 (setenv "XDG_CACHE_HOME" (getcwd))
33387 ;; Some tests fail without a writable and readable HOME.
33388 (setenv "HOME" (getcwd)))))))
33389 (native-inputs
33390 (list python-xvfbwrapper)) ; needed for tests only
33391 (inputs (list mpv))
33392 (propagated-inputs (list python-pillow)) ; for raw screenshots
33393 (home-page "https://github.com/jaseg/python-mpv")
33394 (synopsis "Python interface to the mpv media player")
33395 (description
33396 "python-mpv is a ctypes-based python interface to the mpv media player.
33397It gives you more or less full control of all features of the player, just
33398as the lua interface does.")
33399 ;; From the project's README:
33400 ;; python-mpv inherits the underlying libmpv's license, which can be either
33401 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
33402 ;; copyright page.
33403 (license license:gpl2+)))
33404
33405(define-public python-biblib
33406 (let ((upstream-version "0.1.0")
33407 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
33408 (revision "1"))
33409 (package
33410 (name "python-biblib")
33411 (version (git-version upstream-version revision commit))
33412 (source
33413 (origin
33414 (method git-fetch)
33415 (uri (git-reference
33416 (url "https://github.com/aclements/biblib")
33417 (commit commit)))
33418 (sha256
33419 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
33420 (file-name (git-file-name name version))))
33421 (build-system python-build-system)
33422 (home-page "https://github.com/aclements/biblib")
33423 (synopsis "BibTeX parsing and transformation library")
33424 (description
33425 "Biblib provides a simple, standalone Python 3 package for parsing
33426BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
33427entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
33428source code for BibTeX and hence (barring bugs in translation) should be fully
33429compatible with BibTeX's own parser.")
33430 ;; N.B. It seems the parser was translated from WEB by hand: this
33431 ;; package does not contain any generated files.
33432 (license license:expat))))
33433
33434(define-public python-i3ipc
33435 (package
33436 (name "python-i3ipc")
33437 (version "2.2.1")
33438 (source (origin
33439 (method git-fetch)
33440 (uri (git-reference
33441 (url "https://github.com/altdesktop/i3ipc-python")
33442 (commit (string-append "v" version))))
33443 (file-name (git-file-name name version))
33444 (sha256
33445 (base32
33446 "13bzs9dcv27czpnnbgz7a037lm8h991c8gk0qzzk5mq5yak24715"))))
33447 (build-system python-build-system)
33448 (arguments (list #:tests? #f)) ;FIXME: some tests are unable to run
33449 (propagated-inputs (list python-xlib))
33450 (home-page "https://github.com/altdesktop/i3ipc-python")
33451 (synopsis "Python library for controlling i3 and Sway")
33452 (description
33453 "This package provides a Python library for controlling the i3 and Sway
33454window managers.")
33455 (license license:bsd-3)))
33456
33457(define-public i3-autotiling
33458 (package
33459 (name "i3-autotiling")
33460 (version "1.8")
33461 (source (origin
33462 (method git-fetch)
33463 (uri (git-reference
33464 (url "https://github.com/nwg-piotr/autotiling")
33465 (commit (string-append "v" version))))
33466 (file-name (git-file-name name version))
33467 (sha256
33468 (base32
33469 "1nsm0gd45ys4ghlzrvjrf0lvcyhvpx58lz8gg325a762wn5a4a72"))))
33470 (build-system python-build-system)
33471 (arguments (list #:tests? #f)) ;no tests
33472 (native-inputs (list python-wheel))
33473 (propagated-inputs (list python-i3ipc))
33474 (home-page "https://github.com/nwg-piotr/autotiling")
33475 (synopsis "Automatically tile windows in i3 and Sway")
33476 (description
33477 "Script for Sway and i3 to automatically switch the horizontal/vertical
33478 window split orientation.")
33479 (license license:gpl3)))
33480
33481(define-public python-cyclic
33482 (package
33483 (name "python-cyclic")
33484 (version "1.0.0")
33485 (source (origin
33486 ;; Use git, as there are some test files missing from the PyPI
33487 ;; release, see https://github.com/neurobin/cyclic/issues/1
33488 (method git-fetch)
33489 (uri (git-reference
33490 (url "https://github.com/neurobin/cyclic")
33491 ;; Release is not tagged on github, see
33492 ;; https://github.com/neurobin/cyclic/issues/2
33493 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
33494 (file-name (git-file-name name version))
33495 (sha256
33496 (base32
33497 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
33498 (build-system python-build-system)
33499 (home-page "https://github.com/neurobin/cyclic")
33500 (synopsis "Handle cyclic relations")
33501 (description "This package handles cyclic relations compared by value.")
33502 (license license:bsd-3)))
33503
33504(define-public python-rcslice
33505 (package
33506 (name "python-rcslice")
33507 (version "1.1.0")
33508 (source (origin
33509 ;; Use git, as there are some test files missing from the PyPI
33510 ;; release, see https://github.com/neurobin/rcslice/issues/1
33511 (method git-fetch)
33512 (uri (git-reference
33513 (url "https://github.com/neurobin/rcslice")
33514 ;; Releases are not tagged on github, see
33515 ;; https://github.com/neurobin/rcslice/issues/2
33516 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
33517 (file-name (git-file-name name version))
33518 (sha256
33519 (base32
33520 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
33521 (build-system python-build-system)
33522 (home-page "https://github.com/neurobin/rcslice")
33523 (synopsis "Slice a list of sliceables")
33524 (description "This package provides Python module to slice a list of
33525sliceables (1 indexed, both start and end index are inclusive). Helps to
33526slice file content line by line or column by column or a combination of
33527both.")
33528 (license license:bsd-3)))
33529
33530(define-public python-types-orjson
33531 (package
33532 (name "python-types-orjson")
33533 (version "3.6.2")
33534 (source (origin
33535 (method url-fetch)
33536 (uri (pypi-uri "types-orjson" version))
33537 (sha256
33538 (base32
33539 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
33540 (build-system python-build-system)
33541 (home-page "https://github.com/python/typeshed")
33542 (synopsis "Typing stubs for orjson")
33543 (description "This is a PEP 561 type stub package for the @code{orjson}
33544package. It can be used by type-checking tools like mypy, PyCharm, pytype
33545etc. to check code that uses @code{orjson}.")
33546 (license license:asl2.0)))
33547
33548(define-public python-nanoid
33549 ;; There are no tests on PyPi.
33550 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
33551 (revision "0"))
33552 (package
33553 (name "python-nanoid")
33554 (version "2.0.0")
33555 (source
33556 (origin
33557 (method git-fetch)
33558 (uri
33559 (git-reference
33560 (url "https://github.com/puyuan/py-nanoid")
33561 (commit commit)))
33562 (file-name (git-file-name name commit))
33563 (sha256
33564 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
33565 (build-system python-build-system)
33566 (native-inputs (list python-pytest))
33567 (arguments
33568 '(#:phases
33569 (modify-phases %standard-phases
33570 (replace 'check
33571 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
33572 (when tests?
33573 (invoke "pytest")))))))
33574 (home-page "https://github.com/puyuan/py-nanoid")
33575 (synopsis "Unique string ID generator")
33576 (description
33577 "This package provides a tiny, secure, URL-friendly, unique string ID
33578generator for Python.")
33579 (license license:expat))))
33580
33581(define-public python-misskey
33582 (package
33583 (name "python-misskey")
33584 (version "4.1.0")
33585 (source (origin
33586 (method git-fetch)
33587 (uri (git-reference
33588 (url "https://github.com/YuzuRyo61/Misskey.py")
33589 (commit (string-append "v" version))))
33590 (file-name (git-file-name name version))
33591 (sha256
33592 (base32
33593 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
33594 (build-system python-build-system)
33595 (arguments (list #:tests? #f)) ;needs network
33596 (propagated-inputs (list python-requests))
33597 (home-page "https://misskeypy.readthedocs.io")
33598 (synopsis "Python bindings for Misskey's API")
33599 (description
33600 "This package provides access to Misskey's API. Misskey is a SNS
33601platform using the ActivityPub protocol.")
33602 (license license:expat)))
33603
33604(define-public python-lief
33605 (package
33606 (name "python-lief")
33607 (version "0.12.3")
33608 (source (origin
33609 (method git-fetch)
33610 (uri (git-reference
33611 (url "https://github.com/lief-project/LIEF")
33612 (commit version)))
33613 (file-name (git-file-name name version))
33614 (sha256
33615 (base32
33616 "11i6hqmcjh56y554kqhl61698n9v66j2qk1c1g63mv2w07h2z661"))))
33617 (build-system python-build-system)
33618 (native-inputs (list cmake))
33619 (arguments
33620 (list
33621 #:tests? #f ;needs network
33622 #:phases #~(modify-phases %standard-phases
33623 (replace 'build
33624 (lambda _
33625 (invoke
33626 "python" "setup.py" "--sdk" "build"
33627 (string-append
33628 "-j" (number->string (parallel-job-count)))))))))
33629 (home-page "https://github.com/lief-project/LIEF")
33630 (synopsis "Library to instrument executable formats")
33631 (description
33632 "@code{python-lief} is a cross platform library which can parse, modify
33633and abstract ELF, PE and MachO formats.")
33634 (license license:asl2.0)))
33635
33636(define-public python-eris
33637 (package
33638 (name "python-eris")
33639 (version "0.0.2")
33640 (source (origin
33641 (method url-fetch)
33642 (uri (pypi-uri "eris" version))
33643 (sha256
33644 (base32
33645 "16wbmahmfzdzrsjbn8jzi79vhghrzvvlcgnym20q0v3p3i4x47pq"))))
33646 (build-system python-build-system)
33647 (propagated-inputs (list python-pycryptodome))
33648 (home-page "https://codeberg.org/eris/python-eris")
33649 (synopsis "Python implementation of ERIS")
33650 (description
33651"Python implementation of the @acronym{ERIS, Encoding for Robust Immutable
33652Storage}.")
33653 (license license:lgpl3+)))
33654
33655(define-public shrinkwrap
33656 (package
33657 (name "shrinkwrap")
33658 (version "0.1.0")
33659 (source (origin
33660 (method git-fetch)
33661 (uri (git-reference
33662 (url "https://github.com/fzakaria/shrinkwrap")
33663 (commit (string-append "v" version))))
33664 (file-name (git-file-name name version))
33665 (modules '((guix build utils)))
33666 (snippet '(substitute* "pyproject.toml"
33667 (("lief = \"0\\.12\\.0\"") "lief = \"*\"")))
33668 (sha256
33669 (base32
33670 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
33671 (build-system pyproject-build-system)
33672 (native-inputs
33673 (list python-click
33674 python-poetry-core
33675 python-pypa-build
33676 python-pytest))
33677 (inputs (list python-lief python-sh))
33678 (home-page "https://github.com/fzakaria/shrinkwrap")
33679 (synopsis "Emboss needed dependencies on the top level executable")
33680 (description
33681 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
33682shared objects, and lift them up to the executable referenced by absolute
33683path.")
33684 (license license:expat)))
33685
33686(define-public staticsite
33687 (package
33688 (name "staticsite")
33689 (version "2.3")
33690 (source (origin
33691 (method git-fetch)
33692 (uri (git-reference
33693 (url "https://github.com/spanezz/staticsite")
33694 (commit (string-append "v" version))))
33695 (file-name (git-file-name name version))
33696 (sha256
33697 (base32
33698 "1rhr25xydvnlrrcz389j3f6nknmczm5x11cagrji1qww70piwy08"))))
33699 (build-system pyproject-build-system)
33700 (arguments
33701 (list
33702 #:phases
33703 #~(modify-phases %standard-phases
33704 (add-after 'unpack 'use-themes-in-output
33705 (lambda _
33706 (substitute* "staticsite/global_settings.py"
33707 (("/usr/share/staticsite") #$output))))
33708 (add-after 'install 'install-themes
33709 (lambda _
33710 (let ((themedir (string-append #$output "/themes")))
33711 (copy-recursively "themes" themedir)))))))
33712 (native-inputs
33713 (list perl-image-exiftool
33714 python-dateutil
33715 python-docutils
33716 python-jinja2
33717 python-markdown
33718 python-pillow
33719 python-pyinotify
33720 python-pytz
33721 python-pyyaml
33722 python-ruamel.yaml
33723 python-slugify
33724 python-tornado
33725 tzdata-for-tests))
33726 (home-page "https://github.com/spanezz/staticsite")
33727 (synopsis "Static site generator")
33728 (description "Statistic is a static site generator based on Markdown and
33729Jinja2.")
33730 (license (list license:gpl3+ license:expat))))
33731
33732(define-public python-pymonad
33733 (package
33734 (name "python-pymonad")
33735 (version "2.4.0")
33736 ;; The tests are incomplete in the PyPI archive.
33737 (source (origin
33738 (method git-fetch)
33739 (uri (git-reference
33740 (url "https://github.com/jasondelaat/pymonad")
33741 (commit (string-append "v" version))))
33742 (file-name (git-file-name name version))
33743 (sha256
33744 (base32
33745 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
33746 (build-system python-build-system)
33747 (arguments
33748 `(#:phases
33749 (modify-phases %standard-phases
33750 (replace 'check
33751 (lambda* (#:key tests? #:allow-other-keys)
33752 (when tests?
33753 (invoke "./run_tests.sh")))))))
33754 (home-page "https://github.com/jasondelaat/pymonad")
33755 (synopsis "Monadic style functional programming for Python")
33756 (description "@code{python-pymonad} implements data structures typically
33757available in purely functional or functional first programming languages such
33758as Haskell and F#. Included are
33759
33760@itemize
33761@item Monad and Monoid data types with several common monads such as Maybe and
33762State
33763@item Useful tools such as the @code{@@curry} decorator for defining curried
33764functions
33765@item Type annotations to help ensure correct usage
33766@end itemize")
33767 (license license:bsd-3)))
33768
33769(define-public python-markdown-strings
33770 (package
33771 (name "python-markdown-strings")
33772 (version "3.3.0")
33773 (source (origin
33774 (method git-fetch)
33775 (uri (git-reference
33776 (url "https://github.com/awesmubarak/markdown_strings.git")
33777 (commit (string-append "v" version))))
33778 (file-name (git-file-name name version))
33779 (sha256
33780 (base32
33781 "0064ni7s3k8hqw61wi9m31icxp61f8adhija2qsp46hclcwx7vz2"))))
33782 (build-system python-build-system)
33783 (propagated-inputs (list python-lxml python-six))
33784 (home-page "https://github.com/awesmubarak/markdown_strings")
33785 (synopsis "Python library to create markdown-formatted text")
33786 (description "This package allows the programmatic creation of
33787markdown-compliant strings.")
33788 (license license:expat)))
33789
33790(define-public python-zbarlight
33791 (package
33792 (name "python-zbarlight")
33793 (version "3.0")
33794 (source (origin
33795 (method url-fetch)
33796 (uri (pypi-uri "zbarlight" version))
33797 (sha256
33798 (base32
33799 "1v5c9bim8af6g8kgxp2dhm96n5vkr8sqi56w0bdh1xy49v03lw3g"))))
33800 (build-system pyproject-build-system)
33801 (propagated-inputs (list python-pillow))
33802 (inputs (list zbar))
33803 (home-page "https://github.com/Polyconseil/zbarlight")
33804 (synopsis "Simple Python wrapper for the zbar barcode library")
33805 (description "Zbarlight is a simple wrapper for the zbar library. It can
33806read all zbar supported codes.")
33807 (license license:bsd-3)))
33808
33809(define-public python-zeroc-ice
33810 (package
33811 (name "python-zeroc-ice")
33812 (version "3.7.9")
33813 (source (origin
33814 (method url-fetch)
33815 (uri (pypi-uri "zeroc-ice" version))
33816 (sha256
33817 (base32
33818 "0bqkrjxp2fbz34x3wxkxji39kxinypzg8q2994sibiay29mpipxb"))))
33819 (build-system pyproject-build-system)
33820 (inputs (list openssl))
33821 (home-page "https://zeroc.com")
33822 (synopsis "RPC framework")
33823 (description
33824 "Ice is a comprehensive RPC framework. Ice helps you network your
33825software by taking care of all interactions with low-level network programming
33826interfaces.")
33827 (license license:gpl2)))
33828
33829(define-public python-zeroc-ice-3.6
33830 (package
33831 (inherit python-zeroc-ice)
33832 (version "3.6.5")
33833 (source (origin
33834 (method url-fetch)
33835 (uri (pypi-uri "zeroc-ice" version))
33836 (sha256
33837 (base32
33838 "0mikjfvq26kh8asnn9v55z41pap4c5ypymqnwwi4xkavc3mzyda2"))))))
33839
33840;;;
33841;;; Avoid adding new packages to the end of this file. To reduce the chances
33842;;; of a merge conflict, place them above by existing packages with similar
33843;;; functionality or similar names.
33844;;;