projects/guix·blob version-1.4.0 · refs

31488 lines · 1.1 MiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2013 Nikita Karetnikov <[email protected]>
3;;; Copyright © 2013-2022 Ludovic Courtès <[email protected]>
4;;; Copyright © 2013, 2014, 2015, 2016, 2019 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, 2016, 2017, 2018, 2019, 2020, 2021, 2022 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, 2016, 2017, 2018, 2019, 2020, 2021, 2022 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, 2017, 2018, 2021, 2022 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-2022 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 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 Jack Hill <[email protected]>
62;;; Copyright © 2019, 2020, 2021, 2022 Guillaume Le Vaillant <[email protected]>
63;;; Copyright © 2019, 2020 Alex Griffin <[email protected]>
64;;; Copyright © 2019, 2020, 2021, 2022 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, 2022 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 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, 2022 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 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 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 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;;;
135;;; This file is part of GNU Guix.
136;;;
137;;; GNU Guix is free software; you can redistribute it and/or modify it
138;;; under the terms of the GNU General Public License as published by
139;;; the Free Software Foundation; either version 3 of the License, or (at
140;;; your option) any later version.
141;;;
142;;; GNU Guix is distributed in the hope that it will be useful, but
143;;; WITHOUT ANY WARRANTY; without even the implied warranty of
144;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
145;;; GNU General Public License for more details.
146;;;
147;;; You should have received a copy of the GNU General Public License
148;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
149
150(define-module (gnu packages python-xyz)
151 #:use-module ((guix licenses) #:prefix license:)
152 #:use-module (gnu packages)
153 #:use-module (gnu packages algebra)
154 #:use-module (gnu packages adns)
155 #:use-module (gnu packages aidc)
156 #:use-module (gnu packages attr)
157 #:use-module (gnu packages backup)
158 #:use-module (gnu packages bash)
159 #:use-module (gnu packages check)
160 #:use-module (gnu packages cmake)
161 #:use-module (gnu packages compression)
162 #:use-module (gnu packages crypto)
163 #:use-module (gnu packages databases)
164 #:use-module (gnu packages dbm)
165 #:use-module (gnu packages django)
166 #:use-module (gnu packages djvu)
167 #:use-module (gnu packages docker)
168 #:use-module (gnu packages documentation)
169 #:use-module (gnu packages enchant)
170 #:use-module (gnu packages file)
171 #:use-module (gnu packages fontutils)
172 #:use-module (gnu packages fonts)
173 #:use-module (gnu packages freedesktop)
174 #:use-module (gnu packages gdb)
175 #:use-module (gnu packages gcc)
176 #:use-module (gnu packages geo)
177 #:use-module (gnu packages ghostscript)
178 #:use-module (gnu packages gl)
179 #:use-module (gnu packages glib)
180 #:use-module (gnu packages gnome)
181 #:use-module (gnu packages gnupg)
182 #:use-module (gnu packages graphviz)
183 #:use-module (gnu packages graphics)
184 #:use-module (gnu packages gsasl)
185 #:use-module (gnu packages gstreamer)
186 #:use-module (gnu packages gtk)
187 #:use-module (gnu packages haskell-xyz)
188 #:use-module (gnu packages icu4c)
189 #:use-module (gnu packages inkscape)
190 #:use-module (gnu packages image)
191 #:use-module (gnu packages image-processing)
192 #:use-module (gnu packages imagemagick)
193 #:use-module (gnu packages jupyter)
194 #:use-module (gnu packages kerberos)
195 #:use-module (gnu packages libevent)
196 #:use-module (gnu packages libffi)
197 #:use-module (gnu packages libidn)
198 #:use-module (gnu packages libusb)
199 #:use-module (gnu packages linux)
200 #:use-module (gnu packages llvm)
201 #:use-module (gnu packages man)
202 #:use-module (gnu packages markup)
203 #:use-module (gnu packages maths)
204 #:use-module (gnu packages monitoring)
205 #:use-module (gnu packages multiprecision)
206 #:use-module (gnu packages networking)
207 #:use-module (gnu packages ncurses)
208 #:use-module (gnu packages node)
209 #:use-module (gnu packages ninja)
210 #:use-module (gnu packages openstack)
211 #:use-module (gnu packages pcre)
212 #:use-module (gnu packages pdf)
213 #:use-module (gnu packages perl)
214 #:use-module (gnu packages photo)
215 #:use-module (gnu packages pkg-config)
216 #:use-module (gnu packages protobuf)
217 #:use-module (gnu packages python)
218 #:use-module (gnu packages python-build)
219 #:use-module (gnu packages python-check)
220 #:use-module (gnu packages python-compression)
221 #:use-module (gnu packages python-crypto)
222 #:use-module (gnu packages python-science)
223 #:use-module (gnu packages python-web)
224 #:use-module (gnu packages qt)
225 #:use-module (gnu packages rdf)
226 #:use-module (gnu packages readline)
227 #:use-module (gnu packages regex)
228 #:use-module (gnu packages sdl)
229 #:use-module (gnu packages scanner)
230 #:use-module (gnu packages search)
231 #:use-module (gnu packages serialization)
232 #:use-module (gnu packages shells)
233 #:use-module (gnu packages sphinx)
234 #:use-module (gnu packages ssh)
235 #:use-module (gnu packages swig)
236 #:use-module (gnu packages terminals)
237 #:use-module (gnu packages tex)
238 #:use-module (gnu packages texinfo)
239 #:use-module (gnu packages textutils)
240 #:use-module (gnu packages time)
241 #:use-module (gnu packages tls)
242 #:use-module (gnu packages version-control)
243 #:use-module (gnu packages video)
244 #:use-module (gnu packages web)
245 #:use-module (gnu packages wxwidgets)
246 #:use-module (gnu packages base)
247 #:use-module (gnu packages xml)
248 #:use-module (gnu packages xorg)
249 #:use-module (gnu packages xdisorg)
250 #:use-module (gnu packages tcl)
251 #:use-module (gnu packages bdw-gc)
252 #:use-module (gnu packages serialization)
253 #:use-module (guix packages)
254 #:use-module (guix download)
255 #:use-module (guix gexp)
256 #:use-module (guix git-download)
257 #:use-module (guix hg-download)
258 #:use-module (guix gexp)
259 #:use-module (guix utils)
260 #:use-module (guix build-system gnu)
261 #:use-module (guix build-system cmake)
262 #:use-module (guix build-system pyproject)
263 #:use-module (guix build-system python)
264 #:use-module (guix build-system trivial)
265 #:use-module (srfi srfi-1)
266 #:use-module (srfi srfi-26))
267
268(define-public python-xmldiff
269 (package
270 (name "python-xmldiff")
271 (version "2.4")
272 (source
273 (origin
274 (method url-fetch)
275 (uri (pypi-uri "xmldiff" version))
276 (sha256
277 (base32 "0qygxi3z1jwb0471k7bh5gcqf7wqm4xhrkmwhf36gjgjw46a5gh5"))))
278 (build-system python-build-system)
279 (propagated-inputs (list python-lxml python-six))
280 (home-page "https://github.com/Shoobx/xmldiff")
281 (synopsis "Creates diffs of XML files")
282 (description "This Python tool figures out the differences between two
283similar XML files, in the same way the @command{diff} utility does it.")
284 (license license:expat)))
285
286(define-public python-janus
287 (package
288 (name "python-janus")
289 (version "0.6.1")
290 (source
291 (origin
292 (method url-fetch)
293 (uri (pypi-uri "janus" version))
294 (sha256
295 (base32 "030xvl2vghi5ispfalhvch1rl6i2jsy5bf1dgjafa7vifppy04j7"))))
296 (build-system python-build-system)
297 (arguments
298 `(#:phases
299 (modify-phases %standard-phases
300 (replace 'check
301 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
302 (when tests?
303 (add-installed-pythonpath inputs outputs)
304 (invoke "pytest" "--cov=janus" "--cov=tests")))))))
305 (native-inputs
306 (list python-pytest python-pytest-cov python-pytest-asyncio))
307 (home-page "https://github.com/aio-libs/janus/")
308 (synopsis
309 "Sync-async queue to interoperate between asyncio tasks and classic threads")
310 (description
311 "Mixed sync-async queue, supposed to be used for communicating between
312classic synchronous (threaded) code and asynchronous (in terms of
313@url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
314@url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
315library has two faces: synchronous and asynchronous interface. Synchronous is
316fully compatible with
317@url{https://docs.python.org/3/library/queue.html,standard queue},
318asynchronous one follows
319@url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
320design}.")
321 (license license:asl2.0)))
322
323(define-public python-jupytext
324 (package
325 (name "python-jupytext")
326 (version "1.14.1")
327 (source
328 (origin
329 (method git-fetch)
330 (uri (git-reference
331 (url "https://github.com/mwouts/jupytext")
332 (commit (string-append "v" version))))
333 (file-name (git-file-name name version))
334 (sha256
335 (base32 "0gqpvphrp2ja9ggadx0rrk0sqbpz6kqqg62qqmw4k17469lphc8c"))))
336 (build-system python-build-system)
337 (arguments
338 (list
339 #:phases
340 #~(modify-phases %standard-phases
341 (replace 'check
342 (lambda* (#:key tests? #:allow-other-keys)
343 ;; some tests fail when HOME=/homeless-shelter.
344 (setenv "HOME" "/tmp")
345 ;; OSError: [Errno 18] Invalid cross-device link
346 (setenv "TMPDIR" "/tmp")
347 (when tests?
348 (let ((disabled-tests
349 (list "test_create_header_with_set_formats"
350 "test_pre_commit_hook"
351 "test_sync_with_pre_commit_hook")))
352 (invoke "pytest" "-vv" "-k"
353 (string-append "not "
354 (string-join disabled-tests
355 " and not "))))))))))
356 (native-inputs
357 (list git-minimal
358 python-autopep8
359 python-black
360 python-flake8
361 python-gitpython
362 python-isort
363 python-ipython-genutils
364 python-jupyter-server
365 python-pre-commit
366 python-pytest
367 python-pyaml))
368 (propagated-inputs
369 (list python-markdown-it-py
370 python-mdit-py-plugins
371 python-nbformat))
372 (home-page "https://github.com/mwouts/jupytext")
373 (synopsis
374 "Jupyter notebooks as Markdown documents, Julia, Python or R scripts")
375 (description
376 "Jupytext is a plugin for Jupyter that can save Jupyter notebooks as
377either Markdown files or scripts in many languages. Common use cases for
378Jupytext are:
379
380@itemize
381@item version control on Jupyter Notebooks
382@item editing, merging or refactoring notebooks in your favorite text editor
383@item applying Q&A checks on notebooks.
384@end itemize
385")
386 (license license:expat)))
387
388(define-public python-logzero
389 (package
390 (name "python-logzero")
391 (version "1.7.0")
392 (source
393 (origin
394 (method url-fetch)
395 (uri (pypi-uri "logzero" version))
396 (sha256
397 (base32 "10nh186vk6hpnpfycym44gja4fja0jyzw7q8dwimfd1rmv9xswvz"))))
398 (build-system python-build-system)
399 (native-inputs
400 (list python-pytest python-pytest-runner))
401 (arguments
402 `(#:phases
403 (modify-phases %standard-phases
404 (replace 'check
405 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
406 (when tests?
407 (add-installed-pythonpath inputs outputs)
408 (invoke "pytest")))))))
409 (home-page "https://github.com/metachris/logzero")
410 (synopsis "Robust and effective logging for Python")
411 (description
412 "@code{logzero} provides a fully configured Python logger object for
413easy logging and rotating to a console or a file.")
414 (license license:expat)))
415
416(define-public python-logbook
417 (package
418 (name "python-logbook")
419 (version "1.5.3")
420 (source
421 (origin
422 (method url-fetch)
423 (uri (pypi-uri "Logbook" version))
424 (sha256
425 (base32 "1s1gyfw621vid7qqvhddq6c3z2895ci4lq3g0r1swvpml2nm9x36"))))
426 (build-system python-build-system)
427 (arguments
428 `(#:phases
429 (modify-phases %standard-phases
430 (add-before 'build 'cythonize-sources
431 (lambda _
432 (with-directory-excursion "logbook"
433 (invoke "cython" "_speedups.pyx"))))
434 (replace 'check
435 (lambda* (#:key tests? #:allow-other-keys)
436 (when tests?
437 ;; Check cython build also
438 (setenv "CYBUILD" "True")
439 (invoke "pytest" "--cov=logbook" "-r" "s" "tests")))))))
440 (native-inputs
441 (list python-cython python-mock python-pytest python-pytest-cov
442 python-brotli))
443 (home-page "https://github.com/getlogbook/logbook")
444 (synopsis "Logbook is a logging replacement for Python")
445 (description
446 "Logbook is a logging system for Python that replaces the standard
447library’s logging module. It was designed with both complex and simple
448applications in mind and the idea to make logging fun.")
449 (license license:bsd-3)))
450
451(define-public python-ubelt
452 (package
453 (name "python-ubelt")
454 (version "1.0.1")
455 (source
456 (origin
457 (method git-fetch)
458 (uri (git-reference
459 (url "https://github.com/Erotemic/ubelt")
460 (commit (string-append "v" version))))
461 (file-name (git-file-name name version))
462 (sha256
463 (base32
464 "0hac9nqqvqfbca2s4g0mp1fnj0ah60bg9fb8234ibna3jww8qs33"))))
465 (build-system python-build-system)
466 (arguments
467 (list #:phases
468 #~(modify-phases %standard-phases
469 (replace 'check
470 (lambda* (#:key tests? #:allow-other-keys)
471 (when tests?
472 (setenv "HOME" "/tmp") ;else the test suite hangs
473 (invoke "pytest" "-vv" "-k"
474 (string-append
475 ;; The builder user home doesn't match HOME,
476 ;; which causes this test to fail.
477 "not userhome "
478 ;; This one pointlessly tries
479 ;; locating various binaries on
480 ;; the path.
481 "and not find_exe"))))))))
482 (propagated-inputs (list python-ordered-set))
483 (native-inputs
484 (list python-pytest
485 python-requests
486 python-xdoctest))
487 (home-page "https://github.com/Erotemic/ubelt")
488 (synopsis "Python library for hashing, caching, timing and more")
489 (description "Ubelt is a small library of simple functions that extend the
490Python standard library. It includes an @acronym{API, Application Programming
491Interface} to simplify common problems such as caching, timing, computing
492progress, among other things.")
493 (license license:asl2.0)))
494
495(define-public python-ueberzug
496 (package
497 (name "python-ueberzug")
498 (version "18.1.9")
499 (source
500 (origin
501 (method url-fetch)
502 (uri (pypi-uri "ueberzug" version))
503 (sha256
504 (base32
505 "1hxd45dnwa9yv908acarr98n2drmar66wzq9z2qd3irj24srzr3w"))))
506 (build-system python-build-system)
507 (inputs
508 (list libx11 libxext))
509 (propagated-inputs
510 (list python-attrs python-docopt python-pillow python-xlib))
511 (home-page "https://github.com/seebye/ueberzug")
512 (synopsis "Command line util to display images in combination with X11")
513 (description "Überzug is a command line util which draws images on
514terminals by using child windows. The advantages of using Überzug are:
515@itemize
516@item No race conditions as a new window is created to display images.
517@item Expose events will be processed, so images will be redrawn on switch
518workspaces.
519@item Tmux support (excluding multi pane windows).
520@item Terminals without the WINDOWID environment variable are supported.
521@item Chars are used as position - and size unit.
522@item No memory leak (/ unlimited cache).
523@end itemize")
524 (license license:gpl3+)))
525
526(define-public python-fire
527 (package
528 (name "python-fire")
529 (version "0.4.0")
530 (source
531 (origin
532 (method url-fetch)
533 (uri (pypi-uri "fire" version))
534 (sha256
535 (base32
536 "0qka44n88y3qcj7xz0k0f3qb4phcg4z0wvd4jcii9lcr6rvbiqn5"))))
537 (build-system python-build-system)
538 (native-inputs
539 (list python-pytest))
540 (arguments
541 '(#:phases
542 (modify-phases %standard-phases
543 (replace 'check
544 (lambda* (#:key tests? #:allow-other-keys)
545 (when tests?
546 (invoke "pytest")))))))
547 (inputs
548 (list python-six python-termcolor))
549 (synopsis "Library for automatically generating command line interfaces")
550 (description
551 "Fire is a library for automatically generating command line interfaces
552from absolutely any Python object. The following are the advantages:
553@itemize
554@item A simple way to create a CLI in Python.
555@item A helpful tool for developing and debugging Python code.
556@item Helps with exploring existing code or turning other people's code into a
557command line interface.
558@item Makes transitioning between Bash and Python easier.
559@item Makes using a Python REPL easier by setting up the REPL with the modules
560and variables you'll need already imported and created.
561@end itemize")
562 (home-page "https://github.com/google/python-fire")
563 (license license:asl2.0)))
564
565(define-public python-dotmap
566 (package
567 (name "python-dotmap")
568 (version "1.3.30")
569 (source (origin
570 (method url-fetch)
571 (uri (pypi-uri "dotmap" version))
572 (sha256
573 (base32
574 "0s5kb2v7jd0narz6m6jcicak3h5pw290wz21cdsv8pq77y9sf8aq"))))
575 (build-system python-build-system)
576 (home-page "https://github.com/drgrib/dotmap")
577 (synopsis "Ordered, dynamically-expandable dot-access dictionary")
578 (description
579 "DotMap is a dot-access dictionary subclass that has dynamic
580hierarchy creation, can be initialized with keys, can be initialized from a
581dictionary, can be convert to a dictionary, and is ordered by insertion.")
582 (license license:expat)))
583
584(define-public python-twodict
585 (package
586 (name "python-twodict")
587 (version "1.2")
588 (source
589 (origin
590 (method url-fetch)
591 (uri (pypi-uri "twodict" version))
592 (sha256
593 (base32 "0ifv7dv18jn2lg0a3l6zdlvmmlda2ivixfjbsda58a2ay6kxznr0"))))
594 (build-system python-build-system)
595 (home-page "https://github.com/MrS0m30n3/twodict")
596 (synopsis "Two way ordered dictionary for Python")
597 (description "TwoDict is a custom dictionary in which you can get the
598key:value relationship but you can also get the value:key relationship. It also
599remembers the order in which the items were inserted and supports almost all the
600features of the Python's built-in dict.")
601 (license license:unlicense)))
602
603(define-public python-argopt
604 (package
605 (name "python-argopt")
606 (version "0.7.0")
607 (source (origin
608 (method url-fetch)
609 (uri (pypi-uri "argopt" version))
610 (sha256
611 (base32
612 "0ybs7kkp0cpl8zn1lvf7481xhssg1bbhh5la2cjzdm5yibashyxa"))))
613 (build-system python-build-system)
614 (native-inputs
615 (list python-coverage python-nose python-setuptools ; Won't build without this.
616 python-setuptools-scm))
617 (propagated-inputs
618 (list python-toml python-flake8))
619 (home-page "https://github.com/casperdcl/argopt")
620 (synopsis "Generate a command-line interface from a docstring")
621 (description "This package provides tools to define a command line interface
622from a docstring rather than the other way around.")
623 (license license:mpl2.0)))
624
625(define-public python-cachetools
626 (package
627 (name "python-cachetools")
628 (version "4.2.2")
629 (source (origin
630 (method url-fetch)
631 (uri (pypi-uri "cachetools" version))
632 (sha256
633 (base32
634 "1zqc098gk6y614lxwqd9z2gm8lldgvrpid133pnlm4m048gfvdb1"))))
635 (build-system python-build-system)
636 (home-page "https://github.com/tkem/cachetools/")
637 (synopsis "Extensible memoizing collections and decorators")
638 (description "This module provides various memoizing collections and
639decorators, including variants of the Python standard library's
640@code{lru_cache} function decorator.")
641 (license license:expat)))
642
643(define-public python-cobib
644 (package
645 (name "python-cobib")
646 (version "3.5.2")
647 (source (origin
648 (method url-fetch)
649 (uri (pypi-uri "cobib" version))
650 (file-name (string-append name "-" version ".tar.gz"))
651 (sha256
652 (base32
653 "16nbrbvascbf6cb7yvn9q793dy8zx703pqrmk3mswib9a19mnx3n"))))
654 (build-system python-build-system)
655 (propagated-inputs
656 (list python-beautifulsoup4
657 python-bibtexparser
658 python-pylatexenc
659 python-requests
660 python-requests-oauthlib
661 python-ruamel.yaml))
662 (native-inputs
663 (list python-future
664 python-pyte
665 python-pytest))
666 (home-page "https://gitlab.com/mrossinek/cobib")
667 (synopsis "Terminal-based bibliography management tool")
668 (description
669 "@command{cobib} is a command-line based bibliography management tool.
670It uses a plain-text database, a location-independent library, and features
671git integration, command-line support, and a curses-based TUI.")
672 (license license:expat)))
673
674(define-public python-colorful
675 (package
676 (name "python-colorful")
677 (version "0.5.4")
678 (source
679 (origin
680 (method git-fetch) ; no tests data in PyPi package
681 (uri (git-reference
682 (url "https://github.com/timofurrer/colorful")
683 (commit (string-append "v" version))))
684 (file-name (git-file-name name version))
685 (sha256
686 (base32 "1fcz5v8b318a3dsdha4c874jsf3wmcw3f25bv2csixclyzacli98"))))
687 (build-system pyproject-build-system)
688 (native-inputs
689 (list python-coverage python-flake8 python-pytest))
690 (propagated-inputs
691 (list python-colorama))
692 (home-page "http://github.com/timofurrer/colorful")
693 (synopsis "Terminal string styling")
694 (description "Colorful provides an array of text styles, that can be used
695as functions or string constants to form colored terminal output.")
696 (license license:expat)))
697
698(define-public python-yaspin
699 (package
700 (name "python-yaspin")
701 (version "1.5.0")
702 (source
703 (origin
704 (method url-fetch)
705 (uri
706 (pypi-uri "yaspin" version))
707 (sha256
708 (base32 "1iirah0kydrdp505qnjj6gi54avcr7z0hbkfx9vmh8myr30rpz6q"))))
709 (build-system python-build-system)
710 (native-inputs
711 (list python-pytest))
712 (home-page "https://github.com/pavdmyt/yaspin")
713 (synopsis "Yet Another Terminal Spinner")
714 (description "Yaspin provides a terminal spinner to indicate the progress
715during long operations.")
716 (license license:expat)))
717
718(define-public python-lunr
719 (package
720 (name "python-lunr")
721 (version "0.6.0")
722 (source
723 (origin
724 (method url-fetch)
725 (uri
726 (pypi-uri "lunr" version))
727 (sha256
728 (base32 "106akalywfmnypzkdrhgz4n4740a8xayspybsw59kq06vz8i2qrc"))))
729 (build-system python-build-system)
730 (native-inputs
731 (list python-mock python-pytest))
732 (propagated-inputs
733 (list python-nltk-3.4))
734 (home-page
735 "https://github.com/yeraydiazdiaz/lunr.py")
736 (synopsis "Full-text search library")
737 (description "This package provides python library for full-text search.
738It indexes documents and provides a search interface for retrieving documents
739that best match text queries.")
740 (license license:expat)))
741
742(define-public python-mdit-py-plugins
743 (package
744 (name "python-mdit-py-plugins")
745 (version "0.3.1")
746 (source (origin
747 (method git-fetch) ;for tests
748 (uri (git-reference
749 (url "https://github.com/executablebooks/mdit-py-plugins")
750 (commit (string-append "v" version))))
751 (file-name (git-file-name name version))
752 (sha256
753 (base32
754 "00ybbfb6dzn9q5qnvnm8bmhd84s215ik7pcdb4r35zhwiv2ikizz"))))
755 (build-system pyproject-build-system)
756 (propagated-inputs
757 (list python-markdown-it-py
758 python-attrs))
759 (native-inputs
760 (list python-coverage
761 python-flit-core
762 python-pytest
763 python-pytest-cov
764 python-pytest-regressions))
765 (home-page "https://github.com/executablebooks/mdit-py-plugins")
766 (synopsis "Collection of plugins for markdown-it-py")
767 (description "This package contains a collection of plugins for
768@code{markdown-it-py} like:
769@enumerate
770@item amsmath,
771@item attrs,
772@item container,
773@item definition list,
774@item dollarmath,
775@item field list,
776@item footnote,
777@item textmath, and
778@item wordcount.
779@end enumerate")
780 (license license:expat)))
781
782(define-public python-mdurl
783 (package
784 (name "python-mdurl")
785 (version "0.1.2")
786 (source
787 (origin
788 (method git-fetch) ; no tests data in PyPi package
789 (uri (git-reference
790 (url "https://github.com/executablebooks/mdurl")
791 (commit version)))
792 (file-name (git-file-name name version))
793 (sha256
794 (base32 "0csc777q42jzv4zgdzxmwp8xqlb92ws1jvj09m2smh4klw67q5f3"))))
795 (build-system pyproject-build-system)
796 (native-inputs (list python-flit python-pytest))
797 (home-page "https://github.com/executablebooks/mdurl")
798 (synopsis "Markdown URL utilities")
799 (description
800 "This package implements a Python port of the JavaScript @code{mdurl}.")
801 (license license:expat)))
802
803(define-public python-mrkd
804 (package
805 (name "python-mrkd")
806 (version "0.2.0")
807 (source
808 (origin
809 (method url-fetch)
810 (uri (pypi-uri "mrkd" version))
811 (sha256
812 (base32 "1bvaqbna1ihb4y2mv9pmvqcq3r9j6lwbbii99dani8lxx4dqqvs5"))))
813 (build-system python-build-system)
814 (propagated-inputs
815 (list python-jinja2 python-mistune python-pygments))
816 (home-page "https://pypi.org/project/mrkd/")
817 (synopsis "Python Markdown implementation")
818 (description
819 "@code{mrkd} writes man pages using Markdown, and convert them to Roff or
820HTML")
821 (license license:bsd-3)))
822
823(define-public python-mkdocs
824 (package
825 (name "python-mkdocs")
826 (version "1.3.0")
827 (source
828 (origin
829 ;; The tests suite appears to be incomplete in the PyPI archive.
830 (method git-fetch)
831 (uri (git-reference
832 (url "https://github.com/mkdocs/mkdocs")
833 (commit version)))
834 (file-name (git-file-name name version))
835 (sha256
836 (base32
837 "1n5rdllrxvhnxmdrddf55p3s86dakx0rq2gg6bj6pr6jg2pn932b"))))
838 (build-system python-build-system)
839 (arguments
840 `(#:phases
841 (modify-phases %standard-phases
842 ;; Requirements refer to a specific version of dependencies,
843 ;; which are too old. So we patch to refer to any later version.
844 (add-after 'unpack 'patch-requirements
845 (lambda _
846 (substitute* "setup.py"
847 (("==") ">="))))
848 (replace 'check
849 (lambda* (#:key tests? #:allow-other-keys)
850 (when tests?
851 (invoke "python" "-m" "unittest"
852 "discover" "-p" "*tests.py" "mkdocs"
853 "--top-level-directory" ".")))))))
854 (propagated-inputs
855 (list python-babel
856 python-click
857 python-ghp-import
858 python-importlib-metadata
859 python-jinja2
860 python-markdown
861 python-markupsafe
862 python-mdx-gh-links
863 python-mergedeep
864 python-packaging
865 python-pyyaml
866 python-pyyaml-env-tag
867 python-watchdog))
868 (home-page "https://www.mkdocs.org")
869 (synopsis "Project documentation with Markdown")
870 (description "MkDocs is a static site generator geared towards building
871project documentation. Documentation source files are written in Markdown, and
872configured with a single YAML configuration file.")
873 (license license:bsd-3)))
874
875(define-public python-mkdocs-markdownextradata-plugin
876 (package
877 (name "python-mkdocs-markdownextradata-plugin")
878 (version "0.2.5")
879 (source (origin
880 ;; Use git, as there are some test files missing from the PyPI release,
881 ;; see https://github.com/rosscdh/mkdocs-markdownextradata-plugin/issues/41.
882 (method git-fetch)
883 (uri (git-reference
884 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
885 (commit version)))
886 (file-name (git-file-name name version))
887 (sha256
888 (base32
889 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
890 (build-system python-build-system)
891 (native-inputs (list python-pytest))
892 (propagated-inputs (list python-mkdocs python-pyyaml))
893 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
894 (synopsis "Inject mkdocs.yml extra variables into the MkDocs markdown
895template")
896 (description
897 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
898variables into the markdown template")
899 (license license:expat)))
900
901(define-public python-pymdown-extensions
902 (package
903 (name "python-pymdown-extensions")
904 (version "8.1.1")
905 (source
906 (origin
907 (method url-fetch)
908 (uri
909 (pypi-uri "pymdown-extensions" version))
910 (sha256
911 (base32 "0d8pdndrl1kj105lq7r6kw2dnhcvll6h2qs07w71mcpi7gx728v3"))))
912 (build-system python-build-system)
913 ;; FIXME: "AssertionError: False is not true"
914 (arguments
915 `(#:tests? #f))
916 (propagated-inputs
917 (list python-markdown))
918 (home-page "https://github.com/facelessuser/pymdown-extensions")
919 (synopsis "Extension pack for Python Markdown")
920 (description "PyMdown Extensions is a collection of extensions for Python
921Markdown. All extensions are found under the module namespace of pymdownx.")
922 (license license:expat)))
923
924(define-public python-plotille
925 (package
926 (name "python-plotille")
927 (version "4.0.2")
928 (source (origin
929 (method url-fetch)
930 (uri (pypi-uri "plotille" version))
931 (sha256
932 (base32
933 "0fvsk6glxfphhqy405h05rj3v95jd1byl5hv2fyd5l31wln23shj"))))
934 (build-system python-build-system)
935 (native-inputs (list python-six))
936 (home-page "https://github.com/tammoippen/plotille")
937 (synopsis "Plot in the terminal using braille dots")
938 (description
939 "Plotille provides a figure class and graphing functions to create plots,
940scatter plots, histograms and heatmaps in the terminal using braille dots.")
941 (license license:expat)))
942
943(define-public python-mdx-gh-links
944 (package
945 (name "python-mdx-gh-links")
946 (version "0.2")
947 (source
948 (origin
949 (method url-fetch)
950 (uri (pypi-uri "mdx_gh_links" version))
951 (sha256
952 (base32 "167k1jbp3jifxbnlpi6wy0z1skam7gqv2sixb5bhggb2vypqvysr"))))
953 (build-system python-build-system)
954 (arguments (list #:tests? #f)) ;tests connect github
955 (propagated-inputs (list python-markdown))
956 (home-page "https://github.com/Python-Markdown/github-links/")
957 (synopsis "Python-Markdown extension adding support for shorthand links")
958 (description "This package is an extension to Python-Markdown which adds
959support for shorthand links to GitHub users, repositories, issues and
960commits.")
961 (license license:bsd-3)))
962
963(define-public python-mkdocs-material
964 (package
965 (name "python-mkdocs-material")
966 (version "7.1.3")
967 (source
968 (origin
969 (method url-fetch)
970 (uri
971 (pypi-uri "mkdocs-material" version))
972 (sha256
973 (base32 "0ci9xiasq9nfn09v11m7p49vzazdbgslw7rpzjd6y3hsmn9vljz3"))))
974 (build-system python-build-system)
975 (arguments
976 `(#:phases
977 (modify-phases %standard-phases
978 ;; Requirement mkdocs-material-extensions
979 ;; in-turn requires mkdocs-material. This causes
980 ;; circular dependency, so we remove this requirement.
981 (add-after 'unpack 'patch-requirements
982 (lambda _
983 (substitute* "requirements.txt"
984 (("mkdocs-material-extensions.*$") "")))))))
985 (propagated-inputs
986 (list python-markdown python-mkdocs python-pygments
987 python-pymdown-extensions))
988 (home-page "https://squidfunk.github.io/mkdocs-material/")
989 (synopsis "Material Design theme for MkDocs")
990 (description "This package provides a theme plugin for the static site
991generator MkDocs.")
992 (license license:expat)))
993
994(define-public python-slixmpp
995 (package
996 (name "python-slixmpp")
997 (version "1.5.2")
998 (source
999 (origin
1000 (method git-fetch)
1001 (uri
1002 (git-reference
1003 (url "https://lab.louiz.org/poezio/slixmpp.git")
1004 (commit
1005 (string-append "slix-" version))))
1006 (file-name
1007 (git-file-name name version))
1008 (sha256
1009 (base32 "15mqxcws14bjvh5jcfwl86zsvrymkdw3ya07vb44md7vfnsnclwx"))))
1010 (build-system python-build-system)
1011 (arguments
1012 `(#:phases
1013 (modify-phases %standard-phases
1014 (add-after 'unpack 'patch
1015 (lambda _
1016 (substitute* "setup.py"
1017 (("'CC', 'cc'")
1018 "'CC', 'gcc'"))
1019 #t)))))
1020 (native-inputs
1021 `(("cython" ,python-cython)
1022 ("gnupg" ,gnupg)
1023 ("pkg-config" ,pkg-config)))
1024 (propagated-inputs
1025 (list python-aiodns python-aiohttp python-pyasn1
1026 python-pyasn1-modules))
1027 (inputs
1028 (list libidn python)) ; We are building a Python extension.
1029 (synopsis "XMPP library without threads")
1030 (description "Slixmpp is a XMPP library for Python 3.7+. It is a fork of
1031SleekXMPP. Its goal is to only rewrite the core of the library (the low level
1032socket handling, the timers, the events dispatching) in order to remove all
1033threads.")
1034 (home-page "https://lab.louiz.org/poezio/slixmpp")
1035 (license license:expat)))
1036
1037(define-public python-tenacity
1038 (package
1039 (name "python-tenacity")
1040 (version "8.0.1")
1041 (source (origin
1042 (method url-fetch)
1043 (uri (pypi-uri "tenacity" version))
1044 (sha256
1045 (base32
1046 "0bwkvjpjfyi9dgszzad9aww2vc00w3bczjnbifi92cp7wch2l923"))))
1047 (build-system python-build-system)
1048 (native-inputs
1049 (list python-setuptools-scm python-tornado python-typeguard
1050 python-pytest))
1051 (arguments
1052 (list #:phases
1053 #~(modify-phases %standard-phases
1054 (replace 'check
1055 (lambda _ (invoke "pytest" "-vv"))))))
1056 (home-page "https://github.com/jd/tenacity")
1057 (synopsis "Retrying library for python")
1058 (description "Tenacity is a general-purpose python library to simplify the
1059task of adding retry behavior to just about anything.")
1060 (license license:asl2.0)))
1061
1062(define-public python-pytelegrambotapi
1063 (package
1064 (name "python-pytelegrambotapi")
1065 (version "3.7.4")
1066 (source
1067 (origin
1068 (method git-fetch)
1069 (uri (git-reference
1070 (url "https://github.com/eternnoir/pyTelegramBotAPI")
1071 (commit version)))
1072 (file-name (git-file-name name version))
1073 (sha256
1074 (base32 "0r7g5zs0fk3g2dxvbpl0pi730x7r2kalrhn30fs0pvc15a59fmxz"))))
1075 (build-system python-build-system)
1076 (arguments
1077 `(#:phases
1078 (modify-phases %standard-phases
1079 (replace 'check
1080 (lambda* (#:key tests? #:allow-other-keys)
1081 (when tests?
1082 (with-directory-excursion "tests"
1083 (invoke "py.test")))
1084 #t)))))
1085 (propagated-inputs
1086 (list python-requests))
1087 (native-inputs
1088 (list python-pytest))
1089 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
1090 (synopsis "Python Telegram bot api")
1091 (description "This package provides a simple, but extensible Python
1092implementation for the Telegram Bot API.")
1093 (license license:gpl2)))
1094
1095(define-public python-colorlog
1096 (package
1097 (name "python-colorlog")
1098 (version "6.6.0")
1099 (source
1100 (origin
1101 (method url-fetch)
1102 (uri (pypi-uri "colorlog" version))
1103 (sha256
1104 (base32 "1s7x0v872h8aks8xp01wmv6hzisxqjrh1svbbcycir0980h76krl"))))
1105 (build-system python-build-system)
1106 (arguments
1107 `(#:phases
1108 (modify-phases %standard-phases
1109 (replace 'check
1110 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
1111 (when tests?
1112 (add-installed-pythonpath inputs outputs)
1113 (invoke "python" "-m" "pytest")))))))
1114 (native-inputs
1115 (list python-pytest))
1116 (home-page "https://github.com/borntyping/python-colorlog")
1117 (synopsis "Log formatting with colors for python")
1118 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
1119with Python's logging module that outputs records using terminal colors.")
1120 (license license:expat)))
1121
1122(define-public python-pyprind
1123 (package
1124 (name "python-pyprind")
1125 (version "2.11.3")
1126 (source (origin
1127 (method url-fetch)
1128 (uri (pypi-uri "PyPrind" version))
1129 (sha256
1130 (base32
1131 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
1132 (build-system python-build-system)
1133 (propagated-inputs
1134 (list python-psutil))
1135 (home-page "https://github.com/rasbt/pyprind")
1136 (synopsis "Python Progress Bar and Percent Indicator Utility")
1137 (description "The PyPrind (Python Progress Indicator) module provides a
1138progress bar and a percentage indicator object that let you track the progress
1139of a loop structure or other iterative computation.")
1140 (license license:bsd-3)))
1141
1142(define-public python-glymur
1143 (package
1144 (name "python-glymur")
1145 (version "0.12.0")
1146 (source
1147 (origin
1148 (method git-fetch) ; no tests data in PyPi package
1149 (uri (git-reference
1150 (url "https://github.com/quintusdias/glymur")
1151 (commit (string-append "v" version))))
1152 (file-name (git-file-name name version))
1153 (sha256
1154 (base32 "03nny8k42yxdyw7sjv43szmg23x3rqplbaf7m0a0lpvwla1dl78i"))))
1155 (build-system pyproject-build-system)
1156 (arguments
1157 (list
1158 #:phases
1159 #~(modify-phases %standard-phases
1160 (add-after 'unpack 'patch-library-locations
1161 (lambda* (#:key inputs #:allow-other-keys)
1162 ;; XXX: It's a workaround for Python inability to find the
1163 ;; .so libraries with ctypes.util.find_library()
1164 (substitute* '("glymur/config.py")
1165 (("path = find_library\\(libname\\)")
1166 (string-append
1167 "if libname == \"openjp2\":\n"
1168 " path = \""
1169 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
1170 " elif libname == \"tiff\":\n"
1171 " path = \""
1172 (search-input-file inputs "/lib/libtiff.so") "\"\n"
1173 " elif libname == \"c\":\n"
1174 " path = \""
1175 (search-input-file inputs "/lib/libc.so.6") "\"\n")))))
1176 (add-before 'check 'disable-failing-tests
1177 (lambda _
1178 ;; Failing test due to inability of
1179 ;; ctypes.util.find_library() to determine library path,
1180 ;; which is patched above.
1181 (delete-file "tests/test_config.py"))))))
1182 (native-inputs
1183 (list python-pytest))
1184 (inputs
1185 (list openjpeg ; glymur/lib/openjp2.py
1186 libtiff)) ; glymur/lib/tiff.py
1187 (propagated-inputs
1188 (list python-lxml
1189 python-numpy
1190 python-packaging))
1191 (home-page "https://github.com/quintusdias/glymur")
1192 (synopsis "Python interface to OpenJPEG and LibTIFF")
1193 (description
1194 "This package provides Python interface to the OpenJPEG library which
1195allows one to read and write JPEG 2000 files")
1196 (license license:expat)))
1197
1198(define-public python-gphoto2
1199 (package
1200 (name "python-gphoto2")
1201 (version "2.2.1")
1202 (source (origin
1203 (method url-fetch)
1204 (uri (pypi-uri "gphoto2" version))
1205 (sha256
1206 (base32
1207 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
1208 (build-system python-build-system)
1209 (native-inputs
1210 (list pkg-config))
1211 (inputs
1212 (list libgphoto2))
1213 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
1214 (synopsis "Python interface to libgphoto2")
1215 (description "@code{python-gphoto2} is a comprehensive Python interface
1216(or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
1217automatically generate the interface code.")
1218 (license license:gpl3+)))
1219
1220(define-public python-colour
1221 (package
1222 (name "python-colour")
1223 (version "0.1.5")
1224 (source (origin
1225 (method url-fetch)
1226 (uri (pypi-uri "colour" version))
1227 (sha256
1228 (base32
1229 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
1230 (build-system python-build-system)
1231 (native-inputs
1232 (list python-d2to1))
1233 (home-page "https://github.com/vaab/colour")
1234 (synopsis "Convert and manipulate various color representations")
1235 (description "Pythonic way to manipulate color representations (HSL, RVB,
1236web, X11, ...).")
1237 (license license:expat)))
1238
1239(define-public python-d2to1
1240 (package
1241 (name "python-d2to1")
1242 (version "0.2.12.post1")
1243 (source (origin
1244 (method url-fetch)
1245 (uri (pypi-uri "d2to1" version))
1246 (sha256
1247 (base32
1248 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
1249 (build-system python-build-system)
1250 (native-inputs
1251 (list python-nose))
1252 (home-page "https://github.com/embray/d2to1")
1253 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
1254in python")
1255 (description "The python package d2to1 (the d is for distutils) allows
1256using distutils2-like setup.cfg files for a package's metadata with a
1257distribute/setuptools setup.py script.")
1258 (license license:bsd-2)))
1259
1260(define-public python-rawkit
1261 (package
1262 (name "python-rawkit")
1263 (version "0.6.0")
1264 (source (origin
1265 (method url-fetch)
1266 (uri (pypi-uri "rawkit" version))
1267 (sha256
1268 (base32
1269 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
1270 (build-system python-build-system)
1271 (native-inputs
1272 (list python-pytest python-mock))
1273 (inputs
1274 (list libraw))
1275 (home-page "https://rawkit.readthedocs.io")
1276 (synopsis "Ctypes-based LibRaw binding for Python")
1277 (description "The rawkit package provides two modules: rawkit and libraw.
1278The rawkit module provides a high-level Pythonic interface for developing raw
1279photos, while the libraw module provides a CTypes based interface for
1280interacting with the low-level LibRaw C APIs.")
1281 (license license:expat)))
1282
1283(define-public python-easygui
1284 (package
1285 (name "python-easygui")
1286 (version "0.98.1")
1287 (source (origin
1288 (method url-fetch)
1289 (uri (pypi-uri "easygui" version))
1290 (sha256
1291 (base32
1292 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
1293 (build-system python-build-system)
1294 (propagated-inputs
1295 (list `(,python "tk")))
1296 (home-page "https://github.com/robertlugg/easygui")
1297 (synopsis "GUI programming module for Python")
1298 (description "EasyGUI is a module for very simple, very easy GUI
1299programming in Python. EasyGUI is different from other GUI generators in that
1300EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
1301simple function calls.")
1302 (license license:bsd-3)))
1303
1304(define-public python-pymd4c
1305 (package
1306 (name "python-pymd4c")
1307 (version "0.4.6.0b1")
1308 (source
1309 (origin
1310 (method url-fetch)
1311 (uri (pypi-uri "pymd4c" version))
1312 (sha256
1313 (base32 "07s3arn85ri92im6x3ipljdmrxmpik7irs06i6lm17j1x6j9841d"))))
1314 (build-system python-build-system)
1315 (inputs
1316 (list md4c))
1317 (native-inputs
1318 (list python-flake8 python-pkgconfig pkg-config))
1319 (home-page "https://github.com/dominickpastore/pymd4c")
1320 (synopsis "Python bindings for MD4C")
1321 (description
1322 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
1323to CommonMark.")
1324 (license license:expat)))
1325
1326(define-public python-pymediainfo
1327 (package
1328 (name "python-pymediainfo")
1329 (version "4.1")
1330 (source
1331 (origin
1332 (method url-fetch)
1333 (uri (pypi-uri "pymediainfo" version))
1334 (sha256
1335 (base32
1336 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
1337 (build-system python-build-system)
1338 (native-inputs
1339 (list python-setuptools-scm python-pytest))
1340 (inputs
1341 (list libmediainfo))
1342 (arguments
1343 `(#:phases
1344 (modify-phases %standard-phases
1345 (add-after 'unpack 'patch-libmediainfo
1346 (lambda _
1347 (substitute* "pymediainfo/__init__.py"
1348 (("libmediainfo.so.0")
1349 (search-input-file %build-inputs
1350 "/lib/libmediainfo.so.0")))))
1351 (replace 'check
1352 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
1353 (when tests?
1354 (add-installed-pythonpath inputs outputs)
1355 ;; Skip the only failing test "test_parse_url" because it tries
1356 ;; to access the internet.
1357 (invoke "pytest" "-vv" "-k" "not test_parse_url")))))))
1358 (home-page
1359 "https://github.com/sbraz/pymediainfo")
1360 (synopsis
1361 "Python wrapper for the mediainfo library")
1362 (description
1363 "This package provides a Python wrapper for the mediainfo library to
1364access the technical and tag data for video and audio files.")
1365 (license license:expat)))
1366
1367(define-public python-psutil
1368 (package
1369 (name "python-psutil")
1370 (version "5.9.2")
1371 (source
1372 (origin
1373 (method url-fetch)
1374 (uri (pypi-uri "psutil" version))
1375 (sha256
1376 (base32 "0p1bf6ndcssqh0ic828ggwhzhm67mzj3ffq6043v0fvc1fhn3f7y"))))
1377 (build-system python-build-system)
1378 (arguments
1379 ;; FIXME: some tests do not return and time out. Some tests fail because
1380 ;; some processes survive kill().
1381 '(#:tests? #f))
1382 (home-page "https://github.com/giampaolo/psutil")
1383 (synopsis "Library for retrieving information on running processes")
1384 (description
1385 "@code{psutil} (Python system and process utilities) is a library for
1386retrieving information on running processes and system utilization (CPU,
1387memory, disks, network) in Python. It is useful mainly for system monitoring,
1388profiling and limiting process resources and management of running processes.
1389It implements many functionalities offered by command line tools such as: ps,
1390top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
1391iotop, uptime, pidof, tty, taskset, pmap.")
1392 (license license:bsd-3)))
1393
1394(define-public python-shapely
1395 (package
1396 (name "python-shapely")
1397 (version "1.8.4")
1398 (source
1399 (origin
1400 (method url-fetch)
1401 (uri (pypi-uri "Shapely" version))
1402 (sha256
1403 (base32 "130rqd0czi128wm5pdn47v4m6czxd7pkzanbya8q48gsm8ffb5d1"))))
1404 (build-system python-build-system)
1405 (native-inputs
1406 (list python-cython python-matplotlib python-pytest
1407 python-pytest-cov))
1408 (inputs
1409 (list geos))
1410 (propagated-inputs
1411 (list python-numpy))
1412 (arguments
1413 `(#:phases
1414 (modify-phases %standard-phases
1415 (add-after 'unpack 'patch-geos-path
1416 (lambda* (#:key inputs #:allow-other-keys)
1417 (let ((geos (assoc-ref inputs "geos"))
1418 (glibc (assoc-ref inputs ,(if (%current-target-system)
1419 "cross-libc" "libc"))))
1420 (substitute* '("shapely/geos.py" "shapely/_buildcfg.py")
1421 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
1422 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
1423 geos "/lib/libgeos_c.so'])"))
1424 (("free = load_dll\\('c'\\)\\.free")
1425 (string-append "free = load_dll('c', fallbacks=['"
1426 glibc "/lib/libc.so.6']).free"))
1427 (("free = load_dll\\('c', fallbacks=.*\\)\\.free")
1428 (string-append "free = load_dll('c', fallbacks=['"
1429 glibc "/lib/libc.so.6']).free"))))
1430 #t)))))
1431 (home-page "https://github.com/Toblerity/Shapely")
1432 (synopsis "Library for the manipulation and analysis of geometric objects")
1433 (description "Shapely is a Python package for manipulation and analysis of
1434planar geometric objects. It is based on the @code{GEOS} library.")
1435 (license license:bsd-3)))
1436
1437(define-public python-shortuuid
1438 (package
1439 (name "python-shortuuid")
1440 (version "0.5.0")
1441 (source
1442 (origin
1443 (method url-fetch)
1444 (uri (pypi-uri "shortuuid" version))
1445 (sha256
1446 (base32
1447 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
1448 (build-system python-build-system)
1449 (native-inputs
1450 (list python-pep8))
1451 (home-page "https://github.com/skorokithakis/shortuuid")
1452 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
1453 (description
1454 "@code{shortuuid} is a Python library for generating concise, unambiguous
1455and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
1456module and then similar looking characters are removed.")
1457 (license license:bsd-3)))
1458
1459(define-public python-logwrap
1460 (package
1461 (name "python-logwrap")
1462 (version "8.2.0.post0")
1463 (source
1464 (origin
1465 (method url-fetch)
1466 (uri (pypi-uri "logwrap" version))
1467 (sha256
1468 (base32
1469 "1dv7gny3rfci5cal2ipr6d0pcz3yhka7af96dfsd3ir1mxy8p1j9"))))
1470 (build-system python-build-system)
1471 (arguments
1472 `(#:tests? #f ; Tests not included in pypi release.
1473 #:phases
1474 (modify-phases %standard-phases
1475 (replace 'check
1476 (lambda* (#:key tests? #:allow-other-keys)
1477 (when tests?
1478 (invoke "pytest"))
1479 #t)))))
1480 (native-inputs
1481 (list python-cython python-pytest python-setuptools-scm python-toml
1482 python-wheel))
1483 (home-page "https://github.com/python-useful-helpers/logwrap")
1484 (synopsis "Decorator for logging function arguments")
1485 (description "This package provides a decorator to log function arguments
1486and function call return values in a human-readable way.")
1487 (license license:asl2.0)))
1488
1489(define-public python-clyent
1490 (package
1491 (name "python-clyent")
1492 (version "1.2.1")
1493 (source
1494 (origin
1495 (method url-fetch)
1496 (uri (pypi-uri "clyent" version))
1497 (sha256
1498 (base32
1499 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
1500 (build-system python-build-system)
1501 (native-inputs
1502 (list python-mock))
1503 (home-page "https://github.com/Anaconda-Platform/clyent")
1504 (synopsis "Command line client library")
1505 (description "Clyent is a Python command line utility library. It is used
1506by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
1507 (license license:bsd-3)))
1508
1509(define-public python-babel
1510 (package
1511 (name "python-babel")
1512 (version "2.10.3")
1513 (source
1514 (origin
1515 (method url-fetch)
1516 (uri (pypi-uri "Babel" version))
1517 (sha256
1518 (base32
1519 "0l9cvfmsz0hlvcinxaf6xf2f02ldgw3xq9i1fc7lk5zf24vma53n"))))
1520 (build-system python-build-system)
1521 (native-inputs
1522 (list python-freezegun python-pytest tzdata-for-tests))
1523 (propagated-inputs
1524 (list python-pytz))
1525 (arguments
1526 `(#:phases (modify-phases %standard-phases
1527 (replace 'check
1528 (lambda _
1529 (invoke "pytest" "-vv"))))))
1530 (home-page "https://babel.pocoo.org/")
1531 (synopsis
1532 "Tools for internationalizing Python applications")
1533 (description
1534 "Babel is composed of two major parts:
1535- tools to build and work with gettext message catalogs
1536- a Python interface to the CLDR (Common Locale Data Repository), providing
1537access to various locale display names, localized number and date formatting,
1538etc.")
1539 (license license:bsd-3)))
1540
1541(define-public python-bidict
1542 (package
1543 (name "python-bidict")
1544 (version "0.21.2")
1545 (source
1546 (origin
1547 (method url-fetch)
1548 (uri (pypi-uri "bidict" version))
1549 (sha256
1550 (base32
1551 "02dy0b1k7qlhn7ajyzkrvxhyhjj0hzcq6ws3zjml9hkdz5znz92g"))))
1552 (build-system python-build-system)
1553 (native-inputs
1554 (list python-coverage
1555 python-hypothesis
1556 python-pre-commit
1557 python-py
1558 python-pytest
1559 python-pytest-benchmark
1560 python-pytest-cov
1561 python-setuptools-scm
1562 python-sortedcollections
1563 python-sortedcontainers
1564 python-sphinx
1565 python-sphinx-autodoc-typehints
1566 python-tox))
1567 (arguments
1568 `(#:phases (modify-phases %standard-phases
1569 (add-after 'unpack 'relax-reqs
1570 (lambda _
1571 (substitute* "setup.py"
1572 (("sortedcollections < 2") "sortedcollections"))
1573 #t))
1574 (replace 'check
1575 (lambda _ (invoke "./run_tests.py"))))))
1576 (home-page "https://bidict.readthedocs.io")
1577 (synopsis "Bidirectional mapping library")
1578 (description "The @code{bidict} library provides several data structures
1579for working with bidirectional mappings in Python.")
1580 (license license:mpl2.0)))
1581
1582(define-public python-bip39
1583 (package
1584 (name "python-bip39")
1585 (version "0.0.2")
1586 (source
1587 (origin
1588 (method url-fetch)
1589 (uri (pypi-uri "bip39" version))
1590 (sha256
1591 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
1592 (build-system python-build-system)
1593 (native-inputs (list python-pytest))
1594 (home-page "https://github.com/de-centralized-systems/python-bip39/")
1595 (synopsis "Self-contained and simple BIP39 implementation in Python")
1596 (description
1597 "This package provides a self-contained and simple BIP39
1598implementation written in Python. It includes a @code{bip39.py} executable.
1599
1600BIP39 is a standardized mapping between binary data (the @emph{entropy}),
1601and a list of words that are easier to remember for humans (the
1602@emph{mnemonic}).")
1603 (license license:expat)))
1604
1605(define-public python-bitarray
1606 (package
1607 (name "python-bitarray")
1608 (version "1.4.0")
1609 (source (origin
1610 (method url-fetch)
1611 (uri (pypi-uri "bitarray" version))
1612 (sha256
1613 (base32
1614 "177fj6wbw5jln54wpp6plcqy2329wjkwqwvgz7022rrg3xfrq49g"))))
1615 (build-system python-build-system)
1616 (home-page "https://github.com/ilanschnell/bitarray")
1617 (synopsis "Efficient arrays of booleans")
1618 (description "This package provides an object type which efficiently
1619represents an array of booleans. Bitarrays are sequence types and behave very
1620much like usual lists. Eight bits are represented by one byte in a contiguous
1621block of memory. The user can select between two representations:
1622little-endian and big-endian. All of the functionality is implemented in C.
1623Methods for accessing the machine representation are provided. This can be
1624useful when bit level access to binary files is required, such as portable
1625bitmap image files. Also, when dealing with compressed data which uses
1626variable bit length encoding, you may find this module useful.")
1627 (license license:psfl)))
1628
1629(define-public python-boolean.py
1630 (package
1631 (name "python-boolean.py")
1632 (version "3.6")
1633 (source
1634 (origin
1635 ;; There's no source tarball on PyPI.
1636 (method git-fetch)
1637 (uri (git-reference
1638 (url "https://github.com/bastikr/boolean.py")
1639 (commit (string-append "v" version))))
1640 (file-name (git-file-name name version))
1641 (sha256
1642 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
1643 (build-system python-build-system)
1644 (home-page "https://github.com/bastikr/boolean.py")
1645 (synopsis "Boolean algebra in one Python module")
1646 (description
1647 "This is a small Python library that implements boolean algebra.
1648It defines two base elements, @code{TRUE} and @code{FALSE}, and a
1649@code{Symbol} class that can take on one of these two values. Calculations
1650are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
1651compositions like @code{XOR} and @code{NAND} are emulated on top of them.
1652Expressions are constructed from parsed strings or directly in Python.")
1653 (license license:bsd-2)))
1654
1655(define-public python-hdf4
1656 (package
1657 (name "python-hdf4")
1658 (version "0.9")
1659 (source
1660 (origin
1661 (method url-fetch)
1662 (uri (pypi-uri name version))
1663 (sha256
1664 (base32
1665 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
1666 (build-system python-build-system)
1667 (native-inputs `(("nose" ,python-nose)))
1668 (propagated-inputs `(("numpy" ,python-numpy)))
1669 (inputs
1670 `(("hdf4" ,hdf4)
1671 ("libjpeg" ,libjpeg-turbo)
1672 ("zlib" ,zlib)))
1673 (arguments
1674 `(#:phases
1675 (modify-phases %standard-phases
1676 (replace 'check
1677 (lambda _
1678 (invoke "./runexamples.sh")
1679 (invoke "nosetests" "-v"))))))
1680 (home-page "https://github.com/fhs/python-hdf4")
1681 (synopsis "Python interface to the NCSA HDF4 library")
1682 (description
1683 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
1684which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
1685NetCDF files can also be read and modified. Python-HDF4 is a fork of
1686@url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
1687 (license license:expat)))
1688
1689(define-public python-h5netcdf
1690 (package
1691 (name "python-h5netcdf")
1692 (version "1.0.1")
1693 (source
1694 (origin
1695 (method url-fetch)
1696 (uri (pypi-uri "h5netcdf" version))
1697 (sha256
1698 (base32 "1b2dcgf5rwy7pb7hr4prkc5vgcw9qc2was20dmnj90lbrpx08rvp"))))
1699 (build-system python-build-system)
1700 (arguments
1701 (list #:phases
1702 #~(modify-phases %standard-phases
1703 (replace 'check
1704 (lambda* (#:key tests? #:allow-other-keys)
1705 (when tests?
1706 (invoke "pytest" "-vv" "h5netcdf/tests")))))))
1707 (native-inputs
1708 (list python-netcdf4
1709 python-pytest
1710 python-setuptools-scm))
1711 (propagated-inputs
1712 (list python-h5py python-packaging))
1713 (home-page "https://h5netcdf.org")
1714 (synopsis "Python interface for the netCDF4 file-format based on h5py")
1715 (description "This package provides Python interface for the netCDF4
1716file-format that reads and writes local or remote HDF5 files directly via h5py
1717or h5pyd, without relying on the Unidata netCDF library")
1718 (license license:bsd-3)))
1719
1720(define-public python-h5py
1721 (package
1722 (name "python-h5py")
1723 (version "3.6.0")
1724 (source
1725 (origin
1726 (method url-fetch)
1727 (uri (pypi-uri "h5py" version))
1728 (sha256
1729 (base32
1730 "0afv805vqrm5071g7alwv41920nhh8kjv4m5nbia9awj9a0x4ll7"))))
1731 (build-system python-build-system)
1732 (arguments
1733 `(#:tests? #f ; no test target
1734 #:phases
1735 (modify-phases %standard-phases
1736 (add-after 'unpack 'fix-hdf5-paths
1737 (lambda* (#:key inputs #:allow-other-keys)
1738 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5")))))))
1739 (propagated-inputs
1740 (list python-six python-numpy))
1741 (inputs
1742 (list hdf5-1.10))
1743 (native-inputs
1744 (list python-cython python-pkgconfig pkg-config))
1745 (home-page "https://www.h5py.org/")
1746 (synopsis "Read and write HDF5 files from Python")
1747 (description
1748 "The h5py package provides both a high- and low-level interface to the
1749HDF5 library from Python. The low-level interface is intended to be a
1750complete wrapping of the HDF5 API, while the high-level component supports
1751access to HDF5 files, datasets and groups using established Python and NumPy
1752concepts.")
1753 (license license:bsd-3)))
1754
1755(define-public python-hnswlib
1756 (package
1757 (name "python-hnswlib")
1758 (version "0.5.2")
1759 (source
1760 (origin
1761 (method url-fetch)
1762 (uri (pypi-uri "hnswlib" version))
1763 (sha256
1764 (base32 "0wf1cwmxmdzfqmfhrkqdxb5spf21ylgl2bidswhzjrqhwf35c9qf"))))
1765 (build-system python-build-system)
1766 (arguments
1767 `(#:phases
1768 (modify-phases %standard-phases
1769 (add-after 'unpack 'disable-native-optimization
1770 (lambda _
1771 (substitute* "setup.py"
1772 ((", '-march=native'") "")))))))
1773 (propagated-inputs
1774 (list python-numpy))
1775 (native-inputs
1776 (list pybind11))
1777 (home-page "https://github.com/nmslib/hnswlib")
1778 (synopsis "Fast approximate nearest neighbor search")
1779 (description "Hnswlib is a header-only C++ implementation of fast
1780approximate nearest neighbor search with Python bindings.")
1781 (license license:asl2.0)))
1782
1783(define-public python-pylatexenc
1784 (package
1785 (name "python-pylatexenc")
1786 (version "2.10")
1787 (source (origin
1788 (method url-fetch)
1789 (uri (pypi-uri "pylatexenc" version))
1790 (file-name (string-append name "-" version ".tar.gz"))
1791 (sha256
1792 (base32
1793 "1ls09z47b5md71gkxcj7fd87ynpvv2walgp2w6z31p26xf2gvn1x"))))
1794 (build-system python-build-system)
1795 (home-page "https://github.com/phfaist/pylatexenc")
1796 (synopsis "LaTeX parser for Unicode/LaTeX conversion")
1797 (description
1798 "@code{python-pylatexenc} is a LaTeX parser providing LaTeX-to-Unicode and
1799Unicode-to-LaTeX conversion.")
1800 (license license:expat)))
1801
1802(define-public python-pyls-black
1803 (package
1804 (name "python-pyls-black")
1805 (version "0.4.7")
1806 (source
1807 (origin
1808 ;; There are no tests in the PyPI tarball.
1809 (method git-fetch)
1810 (uri (git-reference
1811 (url "https://github.com/rupert/pyls-black/")
1812 (commit (string-append "v" version))))
1813 (file-name (git-file-name name version))
1814 (sha256
1815 (base32 "0bkhfnlik89j3yamr20br4wm8975f20v33wabi2nyxvj10whr5dj"))
1816 ;; Patch to work with python-lsp-server. Taken from
1817 ;; <https://github.com/rupert/pyls-black/pull/37>.
1818 (modules '((guix build utils)))
1819 (snippet
1820 '(begin
1821 (substitute* "setup.cfg"
1822 (("python-language-server")
1823 "python-lsp-server"))
1824 (substitute* '("pyls_black/plugin.py" "tests/test_plugin.py")
1825 (("pyls_format_document")
1826 "pylsp_format_document")
1827 (("pyls_format_range")
1828 "pylsp_format_range")
1829 (("from pyls([ \\.])" _ char)
1830 (string-append "from pylsp" char)))))))
1831 (build-system python-build-system)
1832 (arguments
1833 `(#:test-target "pytest"))
1834 (propagated-inputs
1835 (list python-black python-lsp-server python-tomli))
1836 (native-inputs
1837 (list python-flake8 python-isort python-mypy python-pytest
1838 python-pytest-runner))
1839 (home-page "https://github.com/rupert/pyls-black")
1840 (synopsis "Black plugin for the Python Language Server")
1841 (description "Black plugin for the Python Language Server.")
1842 (license license:expat)))
1843
1844(define-public python-sh
1845 (package
1846 (name "python-sh")
1847 (version "1.14.2")
1848 (source
1849 (origin
1850 (method url-fetch)
1851 (uri (pypi-uri "sh" version))
1852 (sha256
1853 (base32
1854 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
1855 (build-system python-build-system)
1856 (arguments
1857 '(#:phases
1858 (modify-phases %standard-phases
1859 (replace 'check
1860 (lambda _
1861 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
1862 (setenv "HOME" "/tmp")
1863 (invoke "python" "sh.py" "test"))))))
1864 (native-inputs
1865 (list python-coverage))
1866 (home-page "https://github.com/amoffat/sh")
1867 (synopsis "Python subprocess replacement")
1868 (description "This package provides a replacement for Python's
1869@code{subprocess} feature.")
1870 (license license:expat)))
1871
1872(define-public python-cftime
1873 (package
1874 (name "python-cftime")
1875 (version "1.5.1.1")
1876 (source
1877 (origin
1878 (method url-fetch)
1879 (uri (pypi-uri "cftime" version))
1880 (sha256
1881 (base32 "0l1a22zlhdpgaisibvvm7dhij4vzfm661rnv00y2snpyqxpdgi3d"))))
1882 (build-system python-build-system)
1883 (propagated-inputs
1884 (list python-numpy))
1885 (native-inputs
1886 (list python-check-manifest
1887 python-coverage
1888 python-coveralls
1889 python-cython
1890 python-pytest-cov
1891 python-sphinx
1892 python-twine
1893 python-wheel))
1894 (home-page "https://unidata.github.io/cftime/")
1895 (synopsis "Library for time handling")
1896 (description
1897 "This package provides time-handling functionality that used to be part
1898of the netcdf4 package before.")
1899 (license license:expat)))
1900
1901(define-public python-netcdf4
1902 (package
1903 (name "python-netcdf4")
1904 (version "1.6.0")
1905 (source
1906 (origin
1907 (method url-fetch)
1908 (uri (pypi-uri "netCDF4" version))
1909 (sha256
1910 (base32
1911 "0qxs8r1qmsmg760wm5q0wqlcm7hdd3k7cghryw6wvqd3v5rs7vwm"))))
1912 (build-system python-build-system)
1913 (arguments
1914 '(#:phases
1915 (modify-phases %standard-phases
1916 (add-after 'unpack 'configure-locations
1917 (lambda* (#:key inputs #:allow-other-keys)
1918 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
1919 #t)))))
1920 (native-inputs
1921 (list python-cython))
1922 (propagated-inputs
1923 (list python-numpy python-cftime))
1924 (inputs
1925 (list netcdf hdf4 hdf5))
1926 (home-page "https://github.com/Unidata/netcdf4-python")
1927 (synopsis "Python/numpy interface to the netCDF library")
1928 (description "Netcdf4-python is a Python interface to the netCDF C
1929library. netCDF version 4 has many features not found in earlier
1930versions of the library and is implemented on top of HDF5. This module
1931can read and write files in both the new netCDF 4 and the old netCDF 3
1932format, and can create files that are readable by HDF5 clients. The
1933API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
1934to users of that module.")
1935 ;; The software is mainly ISC, but includes some files covered
1936 ;; by the Expat license.
1937 (license (list license:isc license:expat))))
1938
1939(define-public python-ncclient
1940 (package
1941 (name "python-ncclient")
1942 (version "0.6.12")
1943 (source
1944 (origin
1945 (method git-fetch) ;no tests in PyPI release
1946 (uri (git-reference
1947 (url "https://github.com/ncclient/ncclient")
1948 (commit (string-append "v" version))))
1949 (file-name (git-file-name name version))
1950 (sha256
1951 (base32
1952 "0cb568z5syg6hh0dv813bw7s1mjy7ga5xzxbm9naf4zz2qfdg4js"))))
1953 (build-system python-build-system)
1954 (arguments
1955 `(#:phases (modify-phases %standard-phases
1956 (replace 'check
1957 (lambda* (#:key tests? #:allow-other-keys)
1958 (when tests?
1959 (invoke "pytest")))))))
1960 (native-inputs
1961 (list python-pytest))
1962 (propagated-inputs
1963 (list python-lxml python-paramiko))
1964 (home-page "https://github.com/ncclient/ncclient")
1965 (synopsis "Python library for NETCONF clients")
1966 (description "@code{ncclient} is a Python library that facilitates
1967client-side scripting and application development around the NETCONF
1968protocol.")
1969 (license license:asl2.0)))
1970
1971(define-public python-ncls
1972 (package
1973 (name "python-ncls")
1974 (version "0.0.65")
1975 (source (origin
1976 (method url-fetch)
1977 (uri (pypi-uri "ncls" version))
1978 (sha256
1979 (base32
1980 "1wx06xqknd2r98w8z93f47g5dpxzn92kamhj8vkq0nj569hf7cg1"))))
1981 (build-system python-build-system)
1982 (propagated-inputs (list python-numpy))
1983 (home-page "https://github.com/endrebak/ncls")
1984 (synopsis "Nested containment list data structure")
1985 (description
1986 "This package provides a wrapper for the nested containment list data
1987structure. It is a static interval-tree that is fast for both construction
1988and lookups.")
1989 (license license:bsd-3)))
1990
1991(define-public python-license-expression
1992 (package
1993 (name "python-license-expression")
1994 (version "1.2")
1995 (source
1996 (origin
1997 (method url-fetch)
1998 (uri (pypi-uri "license-expression" version))
1999 (sha256
2000 (base32 "1g0sgphss8hbi1rpl4avy1nmbixmy9v194xdbvkjgl90vzgy2q3r"))))
2001 (build-system python-build-system)
2002 (propagated-inputs
2003 (list python-boolean.py))
2004 (home-page "https://github.com/nexB/license-expression")
2005 (synopsis "Apply boolean logic to license expressions")
2006 (description
2007 "This Python module defines a tiny language to evaluate and compare
2008license expressions using boolean logic. Logical combinations of licenses can
2009be tested for equality, containment, and equivalence. They can be normalised
2010and simplified. It supports SPDX license expressions as well as other naming
2011conventions and aliases in the same expression.")
2012 (license license:gpl2+)))
2013
2014(define-public python-wand
2015 (package
2016 (name "python-wand")
2017 (version "0.6.10")
2018 (source
2019 (origin
2020 (method url-fetch)
2021 (uri (pypi-uri "Wand" version))
2022 (sha256
2023 (base32 "0mywzs235skwq670c80achrd34kangwy24793k1nij3651zllgrp"))))
2024 (build-system python-build-system)
2025 (arguments
2026 `(#:phases
2027 (modify-phases %standard-phases
2028 (add-after 'unpack 'find-magickwand
2029 (lambda* (#:key inputs #:allow-other-keys)
2030 (setenv "MAGICK_HOME" (assoc-ref inputs "imagemagick"))
2031 (setenv "WAND_MAGICK_LIBRARY_SUFFIX" ".Q16"))))))
2032 (native-inputs
2033 (list python-pytest))
2034 (inputs
2035 (list imagemagick))
2036 (home-page "https://docs.wand-py.org/")
2037 (synopsis "MagickWand API binding for Python")
2038 (description
2039 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
2040 (license license:expat)))
2041
2042(define-public python-lockfile
2043 (package
2044 (name "python-lockfile")
2045 (version "0.12.2")
2046 (source
2047 (origin
2048 (method url-fetch)
2049 (uri (pypi-uri "lockfile" version))
2050 (sha256
2051 (base32
2052 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
2053 (build-system python-build-system)
2054 (arguments '(#:test-target "check"))
2055 (native-inputs
2056 (list python-pbr))
2057 (home-page "https://launchpad.net/pylockfile")
2058 (synopsis "Platform-independent file locking module")
2059 (description
2060 "The lockfile package exports a LockFile class which provides a simple
2061API for locking files.")
2062 (license license:expat)))
2063
2064(define-public python-fb-re2
2065 (package
2066 (name "python-fb-re2")
2067 (version "1.0.7")
2068 (source
2069 (origin
2070 (method git-fetch)
2071 (uri (git-reference
2072 (url "https://github.com/facebook/pyre2")
2073 (commit (string-append "v" version))))
2074 (file-name (git-file-name name version))
2075 (sha256
2076 (base32
2077 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
2078 (build-system python-build-system)
2079 (inputs
2080 (list re2))
2081 (home-page "https://github.com/facebook/pyre2")
2082 (synopsis "Python wrapper for RE2")
2083 (description "This package provides a Python extension that wraps Google's
2084RE2 regular expression library. It implements many of the features of
2085Python's built-in @code{re} module with compatible interfaces.")
2086 (license license:bsd-3)))
2087
2088(define-public python-filelock
2089 (package
2090 (name "python-filelock")
2091 (version "3.0.12")
2092 (source
2093 (origin
2094 (method url-fetch)
2095 (uri (pypi-uri "filelock" version))
2096 (sha256
2097 (base32
2098 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
2099 (build-system python-build-system)
2100 (home-page
2101 "https://github.com/benediktschmitt/py-filelock")
2102 (synopsis "Platform independent file lock")
2103 (description "@code{filelock} contains a single module implementing
2104a platform independent file lock in Python, which provides a simple way of
2105inter-process communication.")
2106 (license license:unlicense)))
2107
2108(define-public python-semantic-version
2109 (package
2110 (name "python-semantic-version")
2111 (version "2.8.5")
2112 (source
2113 (origin
2114 (method url-fetch)
2115 (uri (pypi-uri "semantic_version" version))
2116 (sha256
2117 (base32
2118 "0m4avx8zdkzc7qglv5zlr54g8yna5vl098drg5396ql7aph2vjyj"))))
2119 (build-system python-build-system)
2120 (home-page "https://github.com/rbarrois/python-semanticversion")
2121 (synopsis "Semantic versioning module for Python")
2122 (description
2123 "The @code{semantic_version} class is a small library for handling
2124@uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
2125
2126It can compare versions, generate a new version that represents a bump in one of
2127the version levels, and check whether any given string is a proper semantic
2128version identifier.")
2129 (license license:bsd-3)))
2130
2131(define-public python-serpent
2132 (package
2133 (name "python-serpent")
2134 (version "1.28")
2135 (source
2136 (origin
2137 (method url-fetch)
2138 (uri (pypi-uri "serpent" version))
2139 (sha256
2140 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
2141 (build-system python-build-system)
2142 (native-inputs
2143 (list python-attrs python-pytz))
2144 (home-page "https://github.com/irmen/Serpent")
2145 (synopsis "Serializer for literal Python expressions")
2146 (description
2147 "Serpent provides @code{ast.literal_eval()}-compatible object tree
2148serialization. It serializes an object tree into bytes (an utf-8 encoded
2149string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
2150to rebuild the original object tree.
2151
2152Because only safe literals are encoded, it is safe to send serpent data to
2153other machines, such as over the network.")
2154 (license license:expat)))
2155
2156(define-public python-setuptools-declarative-requirements
2157 (package
2158 (name "python-setuptools-declarative-requirements")
2159 (version "1.2.0")
2160 (source
2161 (origin
2162 (method url-fetch)
2163 (uri (pypi-uri
2164 "setuptools-declarative-requirements"
2165 version))
2166 (sha256
2167 (base32
2168 "1l8zmcnp9h8sp8hsw7b81djaa1a9yig0y7i4phh5pihqz1gdn7yi"))))
2169 (build-system python-build-system)
2170 (native-inputs
2171 (list python-pytest python-setuptools-scm))
2172 (propagated-inputs
2173 (list python-toml python-wheel))
2174 (home-page
2175 "https://github.com/s0undt3ch/setuptools-declarative-requirements")
2176 (synopsis "File support for setuptools declarative setup.cfg")
2177 (description
2178 "This package provides file support for setuptools declarative
2179@code{setup.cfg}.")
2180 (license license:asl2.0)))
2181
2182;; The setuptools provided by Python 3.9 is too new for Tensorflow.
2183(define-public python-setuptools-for-tensorflow
2184 (hidden-package
2185 (package
2186 (inherit python-setuptools)
2187 (version "39.1.0")
2188 (source (origin
2189 (inherit (package-source python-setuptools))
2190 (uri (pypi-uri "setuptools" version ".zip"))
2191 (sha256
2192 (base32
2193 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65"))))
2194 (arguments
2195 `(#:tests? #f ; tests require vendored resources
2196 #:phases
2197 (modify-phases %standard-phases
2198 (add-after 'unpack 'compatibility-fixes
2199 (lambda _
2200 ;; Python 3.9 no longer has HTMLParser
2201 (substitute* "setuptools/py33compat.py"
2202 (("html_parser.HTMLParser\\(\\).unescape")
2203 "html.unescape"))
2204 ;; This needs distutils.msvc9compiler
2205 (delete-file "setuptools/tests/test_msvc.py"))))))
2206 (native-inputs
2207 (list python-pytest python-mock python-six)))))
2208
2209(define-public python-uniseg
2210 (package
2211 (name "python-uniseg")
2212 (version "0.7.1")
2213 (source
2214 (origin
2215 (method url-fetch)
2216 (uri (pypi-uri "uniseg" version ".zip"))
2217 (sha256
2218 (base32
2219 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
2220 (build-system python-build-system)
2221 (arguments
2222 '(#:tests? #f)) ; The test suite requires network access.
2223 (native-inputs
2224 (list unzip))
2225 (home-page
2226 "https://bitbucket.org/emptypage/uniseg-python")
2227 (synopsis
2228 "Python library to determine Unicode text segmentations")
2229 (description
2230 "Uniseg is a Python package used to determine Unicode text segmentations.
2231Supported segmentations include:
2232@enumerate
2233@item @dfn{Code point} (any value in the Unicode codespace)
2234@item @dfn{Grapheme cluster} (user-perceived character made of a single or
2235multiple Unicode code points, e.g. \"G\" + acute-accent)
2236@item Word break
2237@item Sentence break
2238@item Line break
2239@end enumerate")
2240 (license license:expat)))
2241
2242(define-public python-humanfriendly
2243 (package
2244 (name "python-humanfriendly")
2245 (version "8.2")
2246 (source
2247 (origin
2248 (method url-fetch)
2249 (uri (pypi-uri "humanfriendly" version))
2250 (sha256
2251 (base32
2252 "04ixg8b7p6xc8x8lffhi7wfl77xhszakhd0s6j0cf6a84j8yqlmz"))))
2253 (build-system python-build-system)
2254 (arguments
2255 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
2256 #:tests? #f))
2257 (home-page "https://humanfriendly.readthedocs.io")
2258 (synopsis "Human-friendly input and output in Python")
2259 (description
2260 "The functions and classes in @code{humanfriendly} can be used to make
2261text interfaces more user-friendly. It includes tools to parse and format
2262numbers, file sizes, and timespans, timers for long-running operations, menus
2263to allow the user to choose from a list of options, and terminal interaction
2264helpers.")
2265 (license license:expat)))
2266
2267(define-public python-textparser
2268 (package
2269 (name "python-textparser")
2270 (version "0.23.0")
2271 (source
2272 (origin
2273 (method url-fetch)
2274 (uri (pypi-uri "textparser" version))
2275 (sha256
2276 (base32
2277 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
2278 (build-system python-build-system)
2279 (home-page "https://github.com/eerimoq/textparser")
2280 (synopsis "Fast text parser for Python")
2281 (description "This library provides a text parser written in the Python
2282language. It aims to be fast.")
2283 (license license:expat)))
2284
2285(define-public python-aenum
2286 (package
2287 (name "python-aenum")
2288 (version "2.2.4")
2289 (source
2290 (origin
2291 (method url-fetch)
2292 (uri (pypi-uri "aenum" version))
2293 (sha256
2294 (base32 "0r1812bjm72x73pl7y4yhffr4zbdjgxa08avsy4b3di0pqgqv0l1"))))
2295 (build-system python-build-system)
2296 (arguments
2297 `(#:phases (modify-phases %standard-phases
2298 (replace 'check
2299 (lambda _
2300 ;; We must run the test suite module directly, as it
2301 ;; fails to define the 'tempdir' variable in scope for
2302 ;; the tests otherwise
2303 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
2304 ;; issues/32/running-tests-with-python-setuppy-test).
2305 (invoke "python3" "aenum/test.py")
2306 ;; This one fails with "NameError: name
2307 ;; 'test_pickle_dump_load' is not defined" (see:
2308 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
2309 ;; /error-running-the-test_v3py-test-suite).
2310 ;; (invoke "python3" "aenum/test_v3.py")
2311 #t)))))
2312 (home-page "https://bitbucket.org/stoneleaf/aenum")
2313 (synopsis "Advanced enumerations, namedtuples and constants for Python")
2314 (description "The aenum library includes an @code{Enum} base class, a
2315metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
2316class.")
2317 (license license:bsd-3)))
2318
2319(define-public python-can
2320 (package
2321 (name "python-can")
2322 (version "4.0.0")
2323 (source
2324 (origin
2325 (method url-fetch)
2326 (uri (pypi-uri "python-can" version))
2327 (sha256
2328 (base32
2329 "0pcbdgdw94lc2sxd56w6wdsshrs9dd5d3wp0x4sfd0drzx32inar"))))
2330 (build-system python-build-system)
2331 (arguments
2332 `(#:phases (modify-phases %standard-phases
2333 (add-after 'unpack 'relax-version-requirements
2334 (lambda _
2335 (substitute* "setup.py"
2336 (("mock~=2\\.0") "mock")
2337 (("coverage<5") "coverage")
2338 (("pytest~=4\\.6") "pytest")
2339 (("pytest-timeout~=1\\.3") "pytest-timeout")
2340 (("pytest-cov.*") "pytest-cov\n")
2341 (("hypothesis~=4\\.56") "hypothesis"))))
2342 (add-after 'unpack 'fix-broken-tests
2343 ;; The tests try to run two scripts it expects should be
2344 ;; in PATH, but they aren't at this time (see:
2345 ;; https://github.com/hardbyte/python-can/issues/805).
2346 (lambda _
2347 (substitute* "test/test_scripts.py"
2348 (("\"can_logger\\.py --help\"") "")
2349 (("\"can_player\\.py --help\"") ""))))
2350 (replace 'check
2351 (lambda* (#:key tests? #:allow-other-keys)
2352 (when tests?
2353 (invoke "pytest" "-vv" "test"
2354 ;; Disable tests which require specific CAN
2355 ;; drivers we have no package for in Guix.
2356 "--ignore" "test/test_interface_canalystii.py"
2357 ;; These tests fail with "OSError: [Errno 19]
2358 ;; No such device".
2359 "-k" "not BasicTestUdpMulticastBusIPv")))))))
2360 (propagated-inputs
2361 (list python-msgpack python-typing-extensions python-wrapt))
2362 (native-inputs
2363 (list python-codecov
2364 python-coverage
2365 python-future
2366 python-hypothesis
2367 python-mock
2368 python-parameterized
2369 python-pyserial
2370 python-pytest
2371 python-pytest-cov
2372 python-pytest-runner
2373 python-pytest-timeout))
2374 (home-page "https://github.com/hardbyte/python-can")
2375 (synopsis "Controller Area Network (CAN) interface module for Python")
2376 (description "This package defines the @code{can} module, which provides
2377controller area network (CAN) support for Python developers; providing common
2378abstractions to different hardware devices, and a suite of utilities for
2379sending and receiving messages on a CAN bus.")
2380 (license license:lgpl3+)))
2381
2382(define-public python-canopen
2383 (package
2384 (name "python-canopen")
2385 (version "2.0.0")
2386 (source
2387 (origin
2388 (method url-fetch)
2389 (uri (pypi-uri "canopen" version))
2390 (sha256
2391 (base32 "1nb543wb37kj95v6bhh272lm5gkpi41q3pnsl1fxlyizm2gamj5w"))))
2392 (build-system python-build-system)
2393 (native-inputs (list python-packaging))
2394 (propagated-inputs (list python-can))
2395 (home-page "https://github.com/christiansandberg/canopen")
2396 (synopsis "CANopen stack implementation")
2397 (description
2398 "This package provides a Python implementation of the
2399@uref{https://www.can-cia.org/canopen/,CANopen standard} for
2400@acronym{CANs, controller-area networks}. The aim of the project is to
2401support the most common parts of the CiA 301 standard in a simple
2402Pythonic interface. It is mainly targeted for testing and automation
2403tasks rather than a standard compliant master implementation.")
2404 (license license:expat)))
2405
2406(define-public python-caniusepython3
2407 (package
2408 (name "python-caniusepython3")
2409 (version "7.2.0")
2410 (source
2411 (origin
2412 (method url-fetch)
2413 (uri (pypi-uri "caniusepython3" version))
2414 (sha256
2415 (base32
2416 "0a755444ln38j8d7xb3yw0wzpd0mjrzfn6zqvsh06nw1vdaq4l28"))))
2417 (build-system python-build-system)
2418 (arguments
2419 `(#:phases (modify-phases %standard-phases
2420 (add-after 'unpack 'relax-requirements
2421 (lambda _
2422 (substitute* "setup.py"
2423 ;; These are for compatibility with Python 2.
2424 ((".*'argparse', 'backports.functools_lru_cache',.*")
2425 ""))
2426 (substitute* "dev_requirements.txt"
2427 ((".*pylint.*") "")) ;not actually required
2428 #t))
2429 (replace 'check
2430 (lambda _
2431 (invoke "py.test" "-k" "not NetworkTests"))))))
2432 (propagated-inputs
2433 (list python-distlib python-packaging python-requests))
2434 (native-inputs
2435 (list python-mock python-pytest))
2436 (home-page "https://github.com/brettcannon/caniusepython3")
2437 (synopsis "Check for Python 3-incompatible Python libraries")
2438 (description "The @command{caniusepython3} command scans your project and
2439reports the Python 3-incompatible libraries it found. It can also be used as
2440a library.")
2441 (license license:asl2.0)))
2442
2443(define-public python-diskcache
2444 (package
2445 (name "python-diskcache")
2446 (version "4.1.0")
2447 (source
2448 (origin
2449 (method url-fetch)
2450 (uri (pypi-uri "diskcache" version))
2451 (sha256
2452 (base32
2453 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
2454 (build-system python-build-system)
2455 (arguments
2456 `(#:tests? #f)) ;test suite not included in the release
2457 (home-page "http://www.grantjenks.com/docs/diskcache/")
2458 (synopsis "Disk and file backed cache library")
2459 (description "DiskCache is a disk and file backed persistent cache.")
2460 (license license:asl2.0)))
2461
2462(define-public python-argparse-addons
2463 (package
2464 (name "python-argparse-addons")
2465 (version "0.7.0")
2466 (source
2467 (origin
2468 (method url-fetch)
2469 (uri (pypi-uri "argparse_addons" version))
2470 (sha256
2471 (base32 "1yx54dmnr3xggjcjk6bbdafvzp6cynrakl56wyz3jglmfvk0znpm"))))
2472 (build-system python-build-system)
2473 (home-page "https://github.com/eerimoq/argparse_addons")
2474 (synopsis "Extensions for Python's @code{argparse} library")
2475 (description "This Python library provides additional types and actions
2476for the standard @code{argparse} library.")
2477 (license license:expat)))
2478
2479(define-public python-bitstruct
2480 (package
2481 (name "python-bitstruct")
2482 (version "8.14.0")
2483 (source
2484 (origin
2485 (method url-fetch)
2486 (uri (pypi-uri "bitstruct" version))
2487 (sha256
2488 (base32
2489 "149c73yrqbph71bbyf925r2mbh2jdymqxc6d49lnylpiflf1j313"))))
2490 (build-system python-build-system)
2491 (home-page "https://github.com/eerimoq/bitstruct")
2492 (synopsis "Python values to and C bit field structs converter")
2493 (description "This module performs conversions between Python values and C
2494bit field structs represented as Python byte strings. It is intended to have
2495a similar interface as the @code{struct} module from Python, but working on
2496bits instead of primitive data types like @code{char}, @code{int}, etc.")
2497 (license license:expat)))
2498
2499(define-public python-cantools
2500 (package
2501 (name "python-cantools")
2502 (version "37.0.7")
2503 (source
2504 (origin
2505 ;; We take the sources from the Git repository as the documentation is
2506 ;; not included with the PyPI archive.
2507 (method git-fetch)
2508 (uri (git-reference
2509 (url "https://github.com/eerimoq/cantools")
2510 (commit version)))
2511 (file-name (git-file-name name version))
2512 (sha256
2513 (base32
2514 "1qcf1fcwif7w70qmhxw2b8kqh420igbinq60p1chzf98xcb0ansx"))))
2515 (build-system python-build-system)
2516 (arguments
2517 (list
2518 #:phases
2519 #~(modify-phases %standard-phases
2520 (add-after 'build 'build-doc
2521 (lambda _
2522 ;; See: https://github.com/eerimoq/cantools/issues/190.
2523 (substitute* "README.rst"
2524 (("https://github.com/eerimoq/cantools/raw/master\
2525/docs/monitor.png")
2526 "monitor.png"))
2527 (invoke "make" "-C" "docs" "man" "info")))
2528 (add-after 'install 'install-doc
2529 (lambda* (#:key outputs #:allow-other-keys)
2530 (let* ((info (string-append #$output "/share/info"))
2531 (man1 (string-append #$output "/share/man/man1")))
2532 (install-file "docs/_build/texinfo/cantools.info" info)
2533 (install-file "docs/_build/man/cantools.1" man1)))))))
2534 (native-inputs (list python-sphinx texinfo))
2535 (propagated-inputs
2536 (list python-argparse-addons
2537 python-bitstruct
2538 python-can
2539 python-crccheck
2540 python-diskcache
2541 python-matplotlib
2542 python-parameterized
2543 python-textparser))
2544 (home-page "https://github.com/eerimoq/cantools")
2545 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
2546 (description "This package includes Controller Area Network (CAN) related
2547tools that can be used to:
2548@itemize
2549@item parse DBC, KCD, SYM, ARXML 4 and CDD files
2550@item encode and decode CAN messages
2551@item multiplex simple and extended signals
2552@item diagnose DID encoding and decoding
2553@item dump the CAN decoder output
2554@item test CAN nodes
2555@item generate C source code
2556@item monitor the CAN bus
2557@end itemize")
2558 (license license:expat)))
2559
2560(define-public python-capturer
2561 (package
2562 (name "python-capturer")
2563 (version "2.4")
2564 (source
2565 (origin
2566 (method url-fetch)
2567 (uri (pypi-uri "capturer" version))
2568 (sha256
2569 (base32
2570 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
2571 (build-system python-build-system)
2572 (arguments
2573 `(#:tests? #f))
2574 (propagated-inputs
2575 (list python-humanfriendly))
2576 (home-page "https://capturer.readthedocs.io")
2577 (synopsis "Capture stdout and stderr streams of the current process")
2578 (description
2579 "The capturer package makes it easy to capture the stdout and stderr
2580streams of the current process and subprocesses. Output can be relayed
2581to the terminal in real time but is also available to the Python program
2582for additional processing.")
2583 (license license:expat)))
2584
2585(define-public python-case
2586 (package
2587 (name "python-case")
2588 (version "1.5.3")
2589 (source
2590 (origin
2591 (method url-fetch)
2592 (uri (pypi-uri "case" version))
2593 (sha256
2594 (base32
2595 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
2596 (build-system python-build-system)
2597 (propagated-inputs
2598 (list python-mock python-nose python-six))
2599 (native-inputs
2600 (list python-coverage))
2601 (home-page "https://github.com/celery/case")
2602 (synopsis "Unittest utilities and convenience methods")
2603 (description
2604 "The @code{case} package provides utilities on top of unittest, including
2605some helpful Python 2 compatibility convenience methods.")
2606 (license license:bsd-3)))
2607
2608(define-public python-verboselogs
2609 (package
2610 (name "python-verboselogs")
2611 (version "1.7")
2612 (source
2613 (origin
2614 (method url-fetch)
2615 (uri (pypi-uri "verboselogs" version))
2616 (sha256
2617 (base32
2618 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
2619 (build-system python-build-system)
2620 (arguments
2621 `(#:phases
2622 (modify-phases %standard-phases
2623 (replace 'check
2624 (lambda _
2625 ;; Do not run pylint plugin test, as astroid is an old
2626 ;; unsupported version.
2627 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
2628 "verboselogs/tests.py"))))))
2629 (native-inputs
2630 (list python-mock python-pytest))
2631 (home-page "https://verboselogs.readthedocs.io")
2632 (synopsis "Verbose logging level for Python's logging module")
2633 (description
2634 "The @code{verboselogs} package extends Python's @code{logging} module to
2635add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
2636 (license license:expat)))
2637
2638(define-public python-coloredlogs
2639 (package
2640 (name "python-coloredlogs")
2641 (version "10.0")
2642 (source
2643 (origin
2644 (method url-fetch)
2645 (uri (pypi-uri "coloredlogs" version))
2646 (sha256
2647 (base32
2648 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
2649 (build-system python-build-system)
2650 (arguments
2651 `(;Tests require some updated modules
2652 #:tests? #f))
2653 (propagated-inputs
2654 (list python-capturer))
2655 (home-page "https://coloredlogs.readthedocs.io")
2656 (synopsis "Colored stream handler for Python's logging module")
2657 (description
2658 "The @code{coloredlogs} package enables colored terminal output for
2659Python's logging module. The @code{ColoredFormatter} class inherits from
2660@code{logging.Formatter} and uses ANSI escape sequences to render your logging
2661messages in color.")
2662 (license license:expat)))
2663
2664(define-public python-editorconfig
2665 (package
2666 (name "python-editorconfig")
2667 (version "0.12.2")
2668 (source
2669 (origin
2670 (method url-fetch)
2671 (uri (pypi-uri "EditorConfig" version))
2672 (sha256
2673 (base32
2674 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
2675 (build-system python-build-system)
2676 (home-page "https://editorconfig.org/")
2677 (synopsis "EditorConfig bindings for python")
2678 (description "The EditorConfig project consists of a file format for
2679defining coding styles and a collection of text editor plugins that enable
2680editors to read the file format and adhere to defined styles. EditorConfig
2681files are easily readable and they work nicely with version control systems.")
2682 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
2683 (license (list license:bsd-2 license:psfl))))
2684
2685(define-public dosage
2686 (package
2687 (name "dosage")
2688 (version "2.17")
2689 (source
2690 (origin
2691 (method url-fetch)
2692 (uri (pypi-uri "dosage" version))
2693 (sha256
2694 (base32
2695 "0vmxgn9wd3j80hp4gr5iq06jrl4gryz5zgfdd2ah30d12sfcfig0"))))
2696 (build-system python-build-system)
2697 (propagated-inputs
2698 (list python-cached-property
2699 python-colorama
2700 python-imagesize
2701 python-importlib-metadata
2702 python-lxml
2703 python-requests
2704 python-six))
2705 (native-inputs
2706 (list python-pytest-cov python-pytest-xdist python-responses
2707 python-setuptools-scm))
2708 (home-page "https://github.com/webcomics/dosage")
2709 (synopsis "Comic strip downloader and archiver")
2710 (description "Dosage is designed to keep a local copy of specific webcomics and other
2711picture-based content such as Picture of the Day sites. With the @command{dosage}
2712command-line script you can get the latest strip of a webcomic, catch-up to the last strip
2713downloaded, or download a strip for a particular date or index, if possible.")
2714 (license license:expat)))
2715
2716(define-public python-et-xmlfile
2717 (package
2718 (name "python-et-xmlfile")
2719 (version "1.1")
2720 (source
2721 (origin
2722 ;; Use a checkout because the PyPI archive does not contain tests.
2723 (method hg-fetch)
2724 (uri (hg-reference
2725 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
2726 (changeset version)))
2727 (file-name (string-append name "-" version "-checkout"))
2728 (sha256
2729 (base32 "09r8rjc5bhkqrm5c4n9jrlvad8vrvbyswl9g0wrc1qc7nzh9mpw7"))))
2730 (build-system python-build-system)
2731 (arguments
2732 (list #:phases
2733 #~(modify-phases %standard-phases
2734 (replace 'check
2735 (lambda* (#:key tests? #:allow-other-keys)
2736 (when tests?
2737 (invoke "pytest" "-vv")))))))
2738 (native-inputs
2739 (list python-pytest python-lxml)) ;used for the tests
2740 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
2741 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
2742 (description "This Python library is based upon the @code{xmlfile} module
2743from @code{lxml}. It aims to provide a low memory, compatible implementation
2744of @code{xmlfile}.")
2745 (license license:expat)))
2746
2747(define-public python-openpyxl
2748 (package
2749 (name "python-openpyxl")
2750 (version "3.0.9")
2751 (source
2752 (origin
2753 ;; We use the upstream repository, as the tests are not included in the
2754 ;; PyPI releases.
2755 (method hg-fetch)
2756 (uri (hg-reference
2757 (url "https://foss.heptapod.net/openpyxl/openpyxl")
2758 (changeset version)))
2759 (file-name (string-append name "-" version "-checkout"))
2760 (sha256
2761 (base32 "1p8xvc2gjw6zyzbd7qdvc3x178sm00ymrbyh9539l4fpzgxh0j9c"))))
2762 (build-system python-build-system)
2763 (arguments
2764 `(#:phases (modify-phases %standard-phases
2765 (replace 'check
2766 (lambda _
2767 (invoke "pytest"))))))
2768 (native-inputs (list python-lxml python-pillow python-pytest))
2769 (propagated-inputs (list python-et-xmlfile python-jdcal))
2770 (home-page "https://openpyxl.readthedocs.io")
2771 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
2772 (description
2773 "This Python library allows reading and writing to the Excel XLSX, XLSM,
2774XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
2775standard.")
2776 (license license:expat)))
2777
2778(define-public python-eventlet
2779 (package
2780 (name "python-eventlet")
2781 (version "0.33.0")
2782 (source
2783 (origin
2784 (method url-fetch)
2785 (uri (pypi-uri "eventlet" version))
2786 (sha256
2787 (base32
2788 "07qlyhcm0f28sxdizawvdf3d50m3hnbzz5kg3fjp7chvki44y540"))))
2789 (build-system python-build-system)
2790 (propagated-inputs
2791 (list python-dnspython python-greenlet python-monotonic python-six))
2792 (native-inputs
2793 (list python-nose))
2794 (arguments
2795 '(#:phases
2796 (modify-phases %standard-phases
2797 (add-after 'unpack 'avoid-OSError
2798 (lambda _
2799 ;; If eventlet tries to load greendns, an OSError is thrown when
2800 ;; getprotobyname is called. Thankfully there is an environment
2801 ;; variable to disable the greendns import, so use it:
2802 (setenv "EVENTLET_NO_GREENDNS" "yes")))
2803 (add-after 'unpack 'delete-broken-tests
2804 (lambda _
2805 (delete-file "tests/greendns_test.py")
2806 (delete-file "tests/socket_test.py")))
2807 ;; See https://github.com/eventlet/eventlet/issues/562#issuecomment-714183009
2808 (replace 'check
2809 (lambda* (#:key tests? #:allow-other-keys)
2810 (when tests?
2811 (invoke "nosetests" "-v" "tests/")))))))
2812 (home-page "https://eventlet.net")
2813 (synopsis "Concurrent networking library for Python")
2814 (description
2815 "Eventlet is a concurrent networking library for Python that
2816allows you to change how you run your code, not how you write it.
2817It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
2818Coroutines ensure that the developer uses a blocking style of programming
2819that is similar to threading, but provide the benefits of non-blocking I/O.
2820The event dispatch is implicit, which means you can easily use @code{Eventlet}
2821from the Python interpreter, or as a small part of a larger application.")
2822 (license license:expat)))
2823
2824(define-public python-sinfo
2825 (package
2826 (name "python-sinfo")
2827 (version "0.3.4")
2828 (source (origin
2829 (method url-fetch)
2830 (uri (pypi-uri "sinfo" version))
2831 (sha256
2832 (base32
2833 "0kdsp883mx0lfyykv0p12bvs203kdm3skb8bw5wf2pc7kb393sl1"))))
2834 (build-system python-build-system)
2835 (propagated-inputs
2836 (list python-stdlib-list))
2837 (home-page "https://gitlab.com/joelostblom/session_info")
2838 (synopsis "Output module version information loaded in a Python session")
2839 (description "This package outputs version information for modules loaded
2840in the current session, Python, and the OS.")
2841 (license license:bsd-3)))
2842
2843(define-public python-six
2844 (package/inherit python-six-bootstrap
2845 (name "python-six")
2846 (arguments
2847 `(#:phases
2848 (modify-phases %standard-phases
2849 (replace 'check
2850 (lambda _
2851 (invoke "pytest" "-v"))))))
2852 (native-inputs
2853 `(("python-pytest" ,python-pytest-bootstrap)))))
2854
2855(define-public python2-six
2856 (let ((base (package-with-python2 python-six)))
2857 (package
2858 (inherit base)
2859 ;; Reduce Python 2 closure by disabling tests and removing the native
2860 ;; inputs.
2861 (arguments (substitute-keyword-arguments (package-arguments base)
2862 ((#:phases phases)
2863 `(modify-phases ,phases
2864 (delete 'check)))))
2865 (native-inputs '()))))
2866
2867(define-public python-schedule
2868 (package
2869 (name "python-schedule")
2870 (version "0.4.3")
2871 (source
2872 (origin
2873 (method url-fetch)
2874 (uri (pypi-uri "schedule" version))
2875 (sha256
2876 (base32
2877 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
2878 (build-system python-build-system)
2879 (native-inputs
2880 (list python-pytest python-mock))
2881 (home-page "https://github.com/dbader/schedule")
2882 (synopsis "Schedule periodic function calls in Python")
2883 (description
2884 "Schedule is an in-process scheduler for periodic jobs that uses the
2885builder pattern for configuration. Schedule lets you run Python functions (or
2886any other callable) periodically at pre-determined intervals using a simple,
2887human-friendly syntax.")
2888 (license license:expat)))
2889
2890(define-public python-scour
2891 (package
2892 (name "python-scour")
2893 (version "0.38.2")
2894 (source
2895 (origin
2896 (method git-fetch)
2897 (uri
2898 (git-reference
2899 (url "https://github.com/scour-project/scour")
2900 (commit
2901 (string-append "v" version))))
2902 (file-name (git-file-name name version))
2903 (sha256
2904 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
2905 (propagated-inputs
2906 (list python-six))
2907 (build-system python-build-system)
2908 (home-page "https://github.com/scour-project/scour")
2909 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
2910 (description "The goal of Scour is to output a file that renders
2911identically at a fraction of the size by removing a lot of redundant
2912information created by most SVG editors. Optimization options are typically
2913lossless but can be tweaked for more aggressive cleaning.")
2914 (license license:asl2.0)))
2915
2916(define-public python-mechanize
2917 (package
2918 (name "python-mechanize")
2919 (version "0.4.5")
2920 (source
2921 (origin
2922 (method url-fetch)
2923 (uri (pypi-uri "mechanize" version))
2924 (sha256
2925 (base32
2926 "1z9kqcwb8gfq2l6i42z624kxpd8692a0c8gw2x5bbm7n848w2mb3"))))
2927 (build-system python-build-system)
2928 (propagated-inputs
2929 (list python-html5lib))
2930 (home-page "https://github.com/python-mechanize/mechanize")
2931 (synopsis
2932 "Stateful programmatic web browsing in Python")
2933 (description
2934 "Mechanize implements stateful programmatic web browsing in Python,
2935after Andy Lester’s Perl module WWW::Mechanize.")
2936 (license license:bsd-3)))
2937
2938(define-public python-simpleaudio
2939 (package
2940 (name "python-simpleaudio")
2941 (version "1.0.4")
2942 (source
2943 (origin
2944 (method url-fetch)
2945 (uri (pypi-uri "simpleaudio" version))
2946 (sha256
2947 (base32
2948 "07glihg0fpca0gvbbvqs9q815w8xhflzdvg72yvlsm23j9j8h739"))))
2949 (build-system python-build-system)
2950 (arguments
2951 `(#:tests? #f))
2952 (inputs
2953 (list alsa-lib))
2954 (home-page
2955 "https://github.com/hamiltron/py-simple-audio")
2956 (synopsis "Simple, asynchronous audio playback for Python 3")
2957 (description
2958 "The @code{simplaudio} package provides cross-platform, dependency-free
2959audio playback capability for Python 3 on OSX, Windows, and Linux.")
2960 (license license:expat))) ; MIT license
2961
2962(define-public python-jsonalias
2963 (package
2964 (name "python-jsonalias")
2965 (version "0.1.1")
2966 (source (origin
2967 (method url-fetch)
2968 (uri (pypi-uri "jsonalias" version))
2969 (sha256
2970 (base32
2971 "0sd7c3vyvfhhpnan77ax4f0x1whjcb5iz7jhjky7kmcpaf9lvw34"))))
2972 (build-system python-build-system)
2973 (arguments (list #:tests? #f)) ; There are no tests.
2974 (home-page "https://github.com/kevinheavey/jsonalias/")
2975 (synopsis "JSON type alias for Python")
2976 (description
2977 "This package provides a microlibrary that defines a JSON type alias for
2978Python.")
2979 (license license:expat)))
2980
2981(define-public python-simplejson
2982 (package
2983 (name "python-simplejson")
2984 (version "3.17.6")
2985 (source
2986 (origin
2987 (method url-fetch)
2988 (uri (pypi-uri "simplejson" version))
2989 (sha256
2990 (base32
2991 "19pqqn01y6qmhhv8q6dh4p1acav49kl923kklnns2qxz5a6h766g"))))
2992 (build-system python-build-system)
2993 (native-inputs
2994 (list python-toml))
2995 (home-page "https://simplejson.readthedocs.io/en/latest")
2996 (synopsis
2997 "Json library for Python")
2998 (description
2999 "JSON (JavaScript Object Notation) is a subset of JavaScript
3000syntax (ECMA-262 3rd edition) used as a lightweight data interchange
3001format.
3002
3003Simplejson exposes an API familiar to users of the standard library marshal
3004and pickle modules. It is the externally maintained version of the json
3005library contained in Python 2.6, but maintains compatibility with Python 2.5
3006and (currently) has significant performance advantages, even without using
3007the optional C extension for speedups. Simplejson is also supported on
3008Python 3.3+.")
3009 (license license:x11)))
3010
3011
3012(define-public python-pyicu
3013 (package
3014 (name "python-pyicu")
3015 (version "2.9")
3016 (source
3017 (origin
3018 (method url-fetch)
3019 (uri (pypi-uri "PyICU" version))
3020 (sha256
3021 (base32
3022 "0y2qhh443vydi3y7kmhyb6kz3z6d7qq7ld0sg88mfqalcp7dca9w"))))
3023 (build-system python-build-system)
3024 (inputs
3025 (list icu4c))
3026 (native-inputs
3027 (list python-pytest python-six))
3028 (home-page "https://gitlab.pyicu.org/main/pyicu")
3029 (synopsis "Python extension wrapping the ICU C++ API")
3030 (description
3031 "PyICU is a python extension wrapping the ICU C++ API.")
3032 (license license:x11)))
3033
3034(define-public python-dogtail
3035 (package
3036 (name "python-dogtail")
3037 (version "0.9.11")
3038 (source (origin
3039 (method url-fetch)
3040 (uri
3041 (string-append
3042 "https://gitlab.com/dogtail/dogtail/-/raw/released/"
3043 "dogtail-" version ".tar.gz"))
3044 (sha256
3045 (base32
3046 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
3047 (build-system python-build-system)
3048 (arguments
3049 `(#:tests? #f ; TODO Launching dbus for the tests
3050 ; fails
3051 #:phases
3052 (modify-phases %standard-phases
3053 (replace 'check
3054 (lambda* (#:key tests? #:allow-other-keys)
3055 (when tests?
3056 (system "Xvfb :1 &")
3057 (setenv "DISPLAY" ":1")
3058 (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
3059 #t)))))
3060 (propagated-inputs
3061 (list python-pygobject python-pycairo python-pyatspi))
3062 (native-inputs
3063 `(("python-nose" ,python-nose)
3064 ("gtk+" ,gtk+)
3065 ("xvfb" ,xorg-server)
3066 ("dbus" ,dbus)
3067 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
3068 ("gobject-introspection" ,gobject-introspection)))
3069 (home-page "https://gitlab.com/dogtail/dogtail/")
3070 (synopsis "GUI test tool and automation framework written in Python")
3071 (description
3072 "Dogtail is a GUI test tool and automation framework written in Python.
3073It uses Accessibility (a11y) technologies to communicate with desktop
3074applications. dogtail scripts are written in Python and executed like any
3075other Python program.")
3076 (license license:gpl2+)))
3077
3078(define-public python-doxyqml
3079 (package
3080 (name "python-doxyqml")
3081 (version "0.5.1")
3082 (source (origin
3083 (method url-fetch)
3084 (uri (pypi-uri "doxyqml" version))
3085 (sha256
3086 (base32
3087 "1f0jjqvamly4hn7f1palvq27z6yr694rfzyxrb6g0ysbbawxkvq9"))))
3088 (build-system python-build-system)
3089 (home-page "http://agateau.com/projects/doxyqml")
3090 (synopsis "Doxygen input filter for QML files")
3091 (description
3092 "This package provides a Doxygen input filter for QML files.")
3093 (license license:bsd-3)))
3094
3095(define-public python-doxypypy
3096 (package
3097 (name "python-doxypypy")
3098 (version "0.8.8.6")
3099 (source (origin
3100 (method url-fetch)
3101 (uri (pypi-uri "doxypypy" version))
3102 (sha256
3103 (base32
3104 "06z0vbh975g42z5szbfvn9i3bif3xwr5pncqd4fvjzjkbi2p2xb2"))))
3105 (build-system python-build-system)
3106 (arguments '(#:tests? #f)) ;no test suite
3107 (home-page "https://github.com/Feneric/doxypypy")
3108 (synopsis "Doxygen filter for Python")
3109 (description
3110 "This package provides a Doxygen filter for Python.")
3111 (license license:gpl2+)))
3112
3113(define-public python-empy
3114 (package
3115 (name "python-empy")
3116 (version "3.3.3")
3117 (source (origin
3118 (method url-fetch)
3119 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
3120 version ".tar.gz"))
3121 (sha256
3122 (base32
3123 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
3124 (build-system python-build-system)
3125 (arguments
3126 `(#:tests? #f)) ; python2 only
3127 (home-page "http://www.alcyone.com/software/empy/")
3128 (synopsis "Templating system for Python")
3129 (description
3130 "EmPy is a system for embedding Python expressions and statements in
3131template text; it takes an EmPy source file, processes it, and produces
3132output. This is accomplished via expansions, which are special signals to the
3133EmPy system and are set off by a special prefix (by default the at sign, @@).
3134EmPy can expand arbitrary Python expressions and statements in this way, as
3135well as a variety of special forms. Textual data not explicitly delimited in
3136this way is sent unaffected to the output, allowing Python to be used in
3137effect as a markup language. Also supported are callbacks via hooks,
3138recording and playback via diversions, and dynamic, chainable filters. The
3139system is highly configurable via command line options and embedded
3140commands.")
3141 (license license:lgpl2.1+)))
3142
3143(define-public python-parse-type
3144 (package
3145 (name "python-parse-type")
3146 (version "0.6.0")
3147 (source
3148 (origin
3149 (method url-fetch)
3150 (uri (pypi-uri "parse_type" version))
3151 (sha256
3152 (base32
3153 "07smqnzc9km7sbvxfyx4gdm9njrx58x8grdw6gs4gva81rk3rd10"))))
3154 (build-system python-build-system)
3155 (arguments
3156 '(#:phases
3157 (modify-phases %standard-phases
3158 (replace 'check
3159 (lambda* (#:key tests? #:allow-other-keys)
3160 (when tests?
3161 (invoke "pytest" "-vv" "-c" "/dev/null")))))))
3162 (propagated-inputs (list python-six python-parse))
3163 (native-inputs (list python-pytest))
3164 (home-page "https://github.com/jenisys/parse_type")
3165 (synopsis "Extended parse module")
3166 (description "Parse_type extends the python parse module.")
3167 (license license:bsd-3)))
3168
3169(define-public python-parse
3170 (package
3171 (name "python-parse")
3172 (version "1.18.0")
3173 (source
3174 (origin
3175 (method url-fetch)
3176 (uri (pypi-uri "parse" version))
3177 (sha256
3178 (base32
3179 "19063x4xdjpaf7rfxai6jpgm2k4yvkq7wha8aa8cagbjsqr60rli"))))
3180 (build-system python-build-system)
3181 (arguments
3182 `(#:phases
3183 (modify-phases %standard-phases
3184 (replace 'check
3185 (lambda _ (invoke "python" "test_parse.py"))))))
3186 (home-page "https://github.com/r1chardj0n3s/parse")
3187 (synopsis "Parse strings")
3188 (description
3189 "Parse strings using a specification based on the Python @code{format()}
3190syntax.")
3191 (license license:x11)))
3192
3193(define-public python-polib
3194 (package
3195 (name "python-polib")
3196 (version "1.1.0")
3197 (source (origin
3198 (method url-fetch)
3199 (uri (pypi-uri "polib" version))
3200 (sha256
3201 (base32
3202 "0aikb8gcarhifn3sadrbbs5czagih9hjv250gsrgy9v1d49pvn7s"))))
3203 (build-system python-build-system)
3204 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
3205 (synopsis "Manipulate, create and modify gettext files")
3206 (description "Polib can manipulate any gettext format (po, pot and mo)
3207files. It can be used to create po files from scratch or to modify
3208existing ones.")
3209 (license license:expat)))
3210
3211(define-public python-polling2
3212 (package
3213 (name "python-polling2")
3214 (version "0.5.0")
3215 (source
3216 (origin
3217 (method url-fetch)
3218 (uri (pypi-uri "polling2" version))
3219 (sha256
3220 (base32 "0hp3238fv6k1qk43gv4jwnv1mwlkmx33akbj560b9nvsry1dmdwh"))))
3221 (build-system python-build-system)
3222 (arguments '(#:tests? #false)) ; no tests included
3223 (native-inputs
3224 (list python-mock python-pytest python-pytest-runner))
3225 (home-page "https://github.com/ddmee/polling2")
3226 (synopsis "Polling utility with many configurable options")
3227 (description "Polling2 is a utility used to wait for a function to return
3228a certain expected condition.")
3229 (license license:expat)))
3230
3231(define-public python-poyo
3232 (package
3233 (name "python-poyo")
3234 (version "0.5.0")
3235 (source
3236 (origin
3237 (method url-fetch)
3238 (uri (pypi-uri "poyo" version))
3239 (sha256
3240 (base32
3241 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
3242 (build-system python-build-system)
3243 (home-page "https://github.com/hackebrot/poyo")
3244 (synopsis "Lightweight YAML Parser for Python")
3245 (description
3246 "This package provides a lightweight YAML Parser for Python. It supports
3247only a chosen subset of the YAML format that is required to parse cookiecutter
3248user configuration files. It does not have support for serializing into YAML
3249and is not compatible with JSON.")
3250 (license license:expat)))
3251
3252(define-public python-exceptiongroup
3253 (package
3254 (name "python-exceptiongroup")
3255 (version "1.0.0rc8")
3256 (source (origin
3257 (method git-fetch)
3258 (uri (git-reference
3259 (url "https://github.com/agronholm/exceptiongroup")
3260 (commit version)))
3261 (file-name (git-file-name name version))
3262 (sha256
3263 (base32
3264 "0xsbpv22n51p6yvyvz231mf8zhbi1i88b4zmacaxxx31zrq5ifv4"))))
3265 (build-system python-build-system)
3266 (arguments
3267 (list
3268 #:phases
3269 #~(modify-phases %standard-phases
3270 ;; XXX: PEP 517 manual build/install procedures copied from
3271 ;; python-isort.
3272 (replace 'build
3273 (lambda _
3274 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
3275 ;; ZIP does not support timestamps before 1980.
3276 (setenv "SOURCE_DATE_EPOCH" "315532800")
3277 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
3278 (replace 'install
3279 (lambda* (#:key outputs #:allow-other-keys)
3280 (let ((whl (car (find-files "dist" "\\.whl$"))))
3281 (invoke "pip" "--no-cache-dir" "--no-input"
3282 "install" "--no-deps" "--prefix" #$output whl))))
3283 (replace 'check
3284 (lambda* (#:key tests? #:allow-other-keys)
3285 (when tests?
3286 (invoke "pytest" "-vv" "tests")))))))
3287 (native-inputs (list python-flit-scm python-pypa-build python-pytest))
3288 (home-page "https://github.com/agronholm/exceptiongroup")
3289 (synopsis "PEP 654 backport from Python 3.11")
3290 (description "This is a backport of the @code{BaseExceptionGroup} and
3291@code{ExceptionGroup} classes from Python 3.11.")
3292 (license license:expat)))
3293
3294(define-public python-extension-helpers
3295(package
3296 (name "python-extension-helpers")
3297 (version "0.1")
3298 (source
3299 (origin
3300 (method url-fetch)
3301 (uri (pypi-uri "extension-helpers" version))
3302 (sha256
3303 (base32 "10iqjzmya2h4sk765dlm1pbqypwlqyh8rw59a5m9i63d3klnz2mc"))))
3304 (build-system python-build-system)
3305 (native-inputs
3306 (list python-coverage python-pytest-astropy python-pytest-cov
3307 python-setuptools-scm))
3308 (home-page "https://github.com/astropy/astropy-helpers")
3309 (synopsis
3310 "Utilities for building and installing packages in the Astropy ecosystem")
3311 (description
3312 "The extension-helpers package includes many build, installation, and
3313documentation-related tools used by the Astropy project.")
3314 (license license:bsd-3)))
3315
3316(define-public python-extras
3317 (package
3318 (name "python-extras")
3319 (version "1.0.0")
3320 (source
3321 (origin
3322 (method url-fetch)
3323 (uri (pypi-uri "extras" version))
3324 (sha256
3325 (base32
3326 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
3327 (build-system python-build-system)
3328 (arguments
3329 ;; FIXME: Circular dependency on testtools.
3330 '(#:tests? #f))
3331 (home-page "https://github.com/testing-cabal/extras")
3332 (synopsis "Useful extensions to the Python standard library")
3333 (description
3334 "Extras is a set of extensions to the Python standard library.")
3335 (license license:expat)))
3336
3337(define-public python-mimeparse
3338 (package
3339 (name "python-mimeparse")
3340 (version "1.6.0")
3341 (source
3342 (origin
3343 (method url-fetch)
3344 (uri (pypi-uri "python-mimeparse" version))
3345 (sha256
3346 (base32
3347 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
3348 (build-system python-build-system)
3349 (arguments
3350 '(#:phases
3351 (modify-phases %standard-phases
3352 (replace 'check
3353 (lambda _
3354 (invoke "./mimeparse_test.py"))))))
3355 (home-page
3356 "https://github.com/dbtsai/python-mimeparse")
3357 (synopsis "Python library for parsing MIME types")
3358 (description
3359 "Mimeparse provides basic functions for parsing MIME type names and
3360matching them against a list of media-ranges.")
3361 (license license:expat)))
3362
3363(define-public python-miniboa
3364 (package
3365 (name "python-miniboa")
3366 (version "1.0.8")
3367 (source
3368 (origin
3369 (method url-fetch)
3370 (uri (pypi-uri "miniboa" version))
3371 (sha256
3372 (base32
3373 "002c1aki9hsrwj5plrwdrf3sk8rn95fqylqyjx2arrjfpsih4dgs"))))
3374 (build-system python-build-system)
3375 (home-page "https://github.com/shmup/miniboa")
3376 (synopsis "Simple, single-threaded Telnet server")
3377 (description
3378 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
3379server.")
3380 (license license:asl2.0)))
3381
3382(define-public python-pafy
3383 (package
3384 (name "python-pafy")
3385 (version "0.5.3.1")
3386 (source
3387 (origin
3388 (method url-fetch)
3389 (uri (pypi-uri "pafy" version))
3390 (sha256
3391 (base32
3392 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
3393 (build-system python-build-system)
3394 (arguments
3395 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
3396 (propagated-inputs
3397 ;; Youtube-dl is a python package which is imported in the file
3398 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
3399 (list youtube-dl))
3400 (home-page "https://np1.github.io/pafy/")
3401 (synopsis "Retrieve YouTube content and metadata")
3402 (description
3403 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
3404 (license license:lgpl3+)))
3405
3406(define-public python-miniupnpc
3407 (package
3408 (name "python-miniupnpc")
3409 (version "2.2.3")
3410 (source
3411 (origin
3412 (method git-fetch)
3413 (uri
3414 (git-reference
3415 (url "https://github.com/miniupnp/miniupnp")
3416 (commit
3417 (string-append
3418 "miniupnpc_" (string-replace-substring version "." "_")))))
3419 (file-name
3420 (git-file-name name version))
3421 (sha256
3422 (base32 "03q1rlzvfzm15g1bfw2zqzavlsyaypnaf2k3cz6ha7k5rirkdy0l"))))
3423 (build-system python-build-system)
3424 (arguments
3425 (list
3426 #:phases
3427 #~(modify-phases %standard-phases
3428 (add-after 'unpack 'subdir
3429 (lambda* (#:key inputs #:allow-other-keys)
3430 (chdir "miniupnpc")
3431 (setenv "CC" #$(cc-for-target))
3432 (substitute* "Makefile"
3433 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
3434 (add-before 'subdir 'remove-kernel-version
3435 ;; Avoid embedding the running kernel version for reproducible builds
3436 (lambda _
3437 (substitute*
3438 "miniupnpc/updateminiupnpcstrings.sh"
3439 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix")))))))
3440 (inputs (list python)) ;we are building a Python extension
3441 (synopsis "UPnP client for Python")
3442 (description "Miniupnpc is a client library for Python programs to set up
3443port forwards using @acronym{UPnP, Universal Plug and Play}.")
3444 (home-page "http://miniupnp.free.fr")
3445 (license license:bsd-3)))
3446
3447(define-public python-py
3448 (package
3449 (name "python-py")
3450 (version "1.10.0")
3451 (source
3452 (origin
3453 (method url-fetch)
3454 (uri (pypi-uri "py" version))
3455 (sha256
3456 (base32
3457 "1lqvkqk3b440g9z82gqbzlzas84wrm6ir8kplzhzavmn2pd1pf11"))))
3458 (build-system python-build-system)
3459 (arguments
3460 ;; FIXME: "ImportError: 'test' module incorrectly imported from
3461 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
3462 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
3463 ;; Is this module globally installed?"
3464 '(#:tests? #f))
3465 (native-inputs
3466 (list python-setuptools-scm))
3467 (home-page "https://github.com/pytest-dev/py")
3468 (synopsis "Python library for parsing, I/O, instrospection, and logging")
3469 (description
3470 "Py is a Python library for file name parsing, .ini file parsing, I/O,
3471code introspection, and logging.")
3472 (license license:expat)))
3473
3474;; Recent versions of python-fixtures and python-testrepository need
3475;; python-pbr for packaging, which itself needs these two packages for
3476;; testing.
3477;; To fix this circular dependency, we use a build of python-pbr, based on the
3478;; same source, just without any test dependencies and with tests disabled.
3479;; python-pbr-minmal is then used to package python-fixtures and
3480;; python-testrepository.
3481;; Strictly speaking we currently could remove the test-requirements from the
3482;; normal python-pbr package (and save this package) since test are disabled
3483;; there anyway. But this may change in future.
3484(define-public python-pbr-minimal
3485 (package
3486 (name "python-pbr-minimal")
3487 (version "5.5.1")
3488 (source
3489 (origin
3490 (method url-fetch)
3491 (uri (pypi-uri "pbr" version))
3492 (sha256
3493 (base32
3494 "1j8k5d4rdhy5bw5ai1vkjzln2albah94in3vvyvxa0n42fv81baz"))))
3495 (build-system python-build-system)
3496 (arguments
3497 `(#:tests? #f))
3498 (home-page "https://docs.openstack.org/pbr/latest/")
3499 (synopsis "Minimal build of python-pbr used for bootstrapping")
3500 (description
3501 "Used only for bootstrapping python2-pbr, you should not need this.")
3502 (license license:asl2.0)))
3503
3504(define-public python-pbr
3505 (package
3506 (inherit python-pbr-minimal)
3507 (name "python-pbr")
3508 (arguments
3509 `(#:tests? #f)) ;; Most tests seem to use the Internet.
3510 (propagated-inputs
3511 (list git)) ;; pbr actually uses the "git" binary.
3512 (native-inputs
3513 `(("python-fixtures" ,python-fixtures-bootstrap)
3514 ;; discover, coverage, hacking, subunit
3515 ("python-mock" ,python-mock)
3516 ("python-six" ,python-six)
3517 ("python-sphinx" ,python-sphinx)
3518 ("python-testrepository" ,python-testrepository-bootstrap)
3519 ("python-testresources" ,python-testresources-bootstrap)
3520 ("python-testscenarios" ,python-testscenarios-bootstrap)
3521 ("python-testtools" ,python-testtools-bootstrap)
3522 ("python-virtualenv" ,python-virtualenv)))
3523 (synopsis "Enhance the default behavior of Python’s setuptools")
3524 (description
3525 "Python Build Reasonableness (PBR) is a library that injects some useful
3526and sensible default behaviors into your setuptools run. It will set
3527versions, process requirements files and generate AUTHORS and ChangeLog file
3528from git information.
3529")))
3530
3531(define-public python-pyrsistent
3532 (package
3533 (name "python-pyrsistent")
3534 (version "0.16.0")
3535 (home-page "https://github.com/tobgu/pyrsistent")
3536 (source (origin
3537 (method url-fetch)
3538 (uri (pypi-uri "pyrsistent" version))
3539 (sha256
3540 (base32
3541 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
3542 (build-system python-build-system)
3543 (arguments
3544 '(#:phases (modify-phases %standard-phases
3545 ;; The package works fine with newer Pytest and Hypothesis, but
3546 ;; has pinned older versions to stay compatible with Python 2.
3547 (add-before 'check 'loosen-pytest-requirement
3548 (lambda _
3549 (substitute* "setup.py"
3550 (("pytest<5") "pytest")
3551 (("hypothesis<5") "hypothesis"))
3552 #t)))))
3553 (native-inputs
3554 (list python-hypothesis python-pytest python-pytest-runner))
3555 (propagated-inputs
3556 (list python-six))
3557 (synopsis "Persistent data structures for Python")
3558 (description
3559 "Pyrsistent is a number of persistent collections (by some referred to as
3560functional data structures). Persistent in the sense that they are immutable.
3561
3562All methods on a data structure that would normally mutate it instead return a
3563new copy of the structure containing the requested updates. The original
3564structure is left untouched.")
3565 (license license:expat)))
3566
3567(define-public python-exif-read
3568 (package
3569 (name "python-exif-read")
3570 (version "2.1.2")
3571 (source (origin
3572 (method url-fetch)
3573 (uri (pypi-uri "ExifRead" version))
3574 (sha256
3575 (base32
3576 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
3577 (build-system python-build-system)
3578 (arguments `(#:tests? #f)) ; no tests
3579 (home-page "https://github.com/ianare/exif-py")
3580 (synopsis "Python library to extract EXIF data from image files")
3581 (description
3582 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
3583files.")
3584 (license license:bsd-3)))
3585
3586(define-public python-pyld
3587 (package
3588 (name "python-pyld")
3589 (version "1.0.5")
3590 (source (origin
3591 (method url-fetch)
3592 (uri (pypi-uri "PyLD" version))
3593 (sha256
3594 (base32
3595 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
3596 (build-system python-build-system)
3597 (home-page "https://github.com/digitalbazaar/pyld")
3598 (synopsis "Python implementation of the JSON-LD specification")
3599 (description
3600 "PyLD is an implementation of the JSON-LD specification.")
3601 (license license:bsd-3)))
3602
3603(define-public python-cli-helpers
3604 (package
3605 (name "python-cli-helpers")
3606 (version "2.2.1")
3607 (source
3608 (origin
3609 ;; There's no source tarball on PyPI.
3610 (method git-fetch)
3611 (uri (git-reference
3612 (url "https://github.com/dbcli/cli_helpers")
3613 (commit (string-append "v" version))))
3614 (file-name (git-file-name name version))
3615 (sha256
3616 (base32 "1hzavh9v9lkd1dn9f0nvg80f7v4banxvcrj10zy72przqz51k1sb"))))
3617 (build-system python-build-system)
3618 (native-inputs
3619 (list python-pytest))
3620 (propagated-inputs
3621 (list python-wcwidth python-configobj python-tabulate))
3622 (home-page "https://github.com/dbcli/cli_helpers")
3623 (synopsis "Helpers for building command-line apps")
3624 (description
3625 "CLI Helpers is a Python package that makes it easy to perform common
3626tasks when building command-line apps. It's a helper library for command-line
3627interfaces.")
3628 (license license:bsd-3)))
3629
3630(define-public python-click
3631 (package
3632 (name "python-click")
3633 (version "8.1.3")
3634 (source
3635 (origin
3636 (method url-fetch)
3637 (uri (pypi-uri "click" version))
3638 (sha256
3639 (base32
3640 "13kvp8visj5xh9d43brnda6q0kc1s40flxa5cw0p0a9hzf5dr0kn"))))
3641 (build-system python-build-system)
3642 (arguments
3643 `(#:phases
3644 (modify-phases %standard-phases
3645 (replace 'check
3646 (lambda* (#:key tests? #:allow-other-keys)
3647 (when tests?
3648 (invoke "pytest" "-vv")))))))
3649 (native-inputs (list python-pytest))
3650 (home-page "https://palletsprojects.com/p/click/")
3651 (synopsis "Command line library for Python")
3652 (description
3653 "Click is a Python package for creating command line interfaces in a
3654composable way with as little code as necessary. Its name stands for
3655\"Command Line Interface Creation Kit\". It's highly configurable but comes
3656with sensible defaults out of the box.")
3657 (license license:bsd-3)))
3658
3659(define-public python-click-7
3660 (package (inherit python-click)
3661 (name "python-click")
3662 (version "7.1.2")
3663 (source
3664 (origin
3665 (method url-fetch)
3666 (uri (pypi-uri "click" version))
3667 (sha256
3668 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
3669 (arguments `())))
3670
3671(define-public python-click-5
3672 (package (inherit python-click)
3673 (name "python-click")
3674 (version "5.1")
3675 (source
3676 (origin
3677 (method url-fetch)
3678 (uri (pypi-uri "click" version))
3679 (sha256
3680 (base32 "0njsm0wn31l21bi118g5825ma5sa3rwn7v2x4wjd7yiiahkri337"))))
3681 (arguments `())))
3682
3683(define-public python-cligj
3684 (package
3685 (name "python-cligj")
3686 (version "0.7.2")
3687 (source
3688 (origin
3689 (method url-fetch)
3690 (uri (pypi-uri "cligj" version))
3691 (sha256
3692 (base32
3693 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
3694 (build-system python-build-system)
3695 (propagated-inputs
3696 (list python-click))
3697 (native-inputs
3698 (list python-pytest-cov))
3699 (home-page "https://github.com/mapbox/cligj")
3700 (synopsis "Click params for command line interfaces to GeoJSON")
3701 (description
3702 "cligj is for Python developers who create command line interfaces
3703for geospatial data. cligj allows you to quickly build consistent,
3704well-tested and interoperable CLIs for handling GeoJSON.")
3705 (license license:bsd-3)))
3706
3707(define-public python-vcversioner
3708 (package
3709 (name "python-vcversioner")
3710 (version "2.16.0.0")
3711 (source
3712 (origin
3713 (method url-fetch)
3714 (uri (pypi-uri "vcversioner" version))
3715 (sha256
3716 (base32
3717 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
3718 (build-system python-build-system)
3719 (synopsis "Python library for version number discovery")
3720 (description "Vcversioner is a Python library that inspects tagging
3721information in a variety of version control systems in order to discover
3722version numbers.")
3723 (home-page "https://github.com/habnabit/vcversioner")
3724 (license license:isc)))
3725
3726(define-public python-jdcal
3727 (package
3728 (name "python-jdcal")
3729 (version "1.4.1")
3730 (source
3731 (origin
3732 (method url-fetch)
3733 (uri (pypi-uri "jdcal" version))
3734 (sha256
3735 (base32
3736 "1j6g19jf21qprjsr8h0r7nsbss366gy8j9izq8cz53gbjvh74a27"))))
3737 (build-system python-build-system)
3738 (arguments
3739 (list #:phases
3740 #~(modify-phases %standard-phases
3741 (replace 'check
3742 (lambda* (#:key tests? #:allow-other-keys)
3743 (when tests?
3744 (invoke "pytest" "-vv")))))))
3745 (native-inputs
3746 (list python-pytest))
3747 (home-page "https://github.com/phn/jdcal")
3748 (synopsis "Functions to convert between Julian dates Gregorian dates")
3749 (description "This Python library provides functions for converting
3750between Julian dates and Gregorian dates.")
3751 (license license:bsd-2)))
3752
3753(define-public python-jsondiff
3754 (package
3755 (name "python-jsondiff")
3756 (version "1.2.0")
3757 (source
3758 (origin
3759 (method url-fetch)
3760 (uri (pypi-uri "jsondiff" version))
3761 (sha256
3762 (base32
3763 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
3764 (build-system python-build-system)
3765 (native-inputs
3766 (list python-nose python-nose-random))
3767 (home-page
3768 "https://github.com/fzumstein/jsondiff")
3769 (synopsis "Compare JSON and JSON-like structures in Python")
3770 (description "@code{jsondiff} is a Python library which lets you
3771compare, diff, and patch JSON and JSON-like structures in Python.")
3772 (license license:expat)))
3773
3774(define-public python-jsonschema
3775 (package
3776 (name "python-jsonschema")
3777 (version "3.2.0")
3778 (source (origin
3779 (method url-fetch)
3780 (uri (pypi-uri "jsonschema" version))
3781 (sha256
3782 (base32
3783 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
3784 (build-system python-build-system)
3785 (arguments
3786 '(#:phases
3787 (modify-phases %standard-phases
3788 (replace 'check
3789 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3790 (when tests?
3791 (setenv "JSON_SCHEMA_TEST_SUITE" "json")
3792 (invoke "trial" "jsonschema")))))))
3793 (native-inputs
3794 `(("python-setuptools_scm" ,python-setuptools-scm)
3795 ("python-twisted" ,python-twisted)))
3796 (propagated-inputs
3797 (list python-attrs python-pyrsistent python-six))
3798 (home-page "https://github.com/Julian/jsonschema")
3799 (synopsis "Implementation of JSON Schema for Python")
3800 (description
3801 "Jsonschema is an implementation of JSON Schema for Python.")
3802 (license license:expat)))
3803
3804;;; TODO: Make the default python-jsonschema on core-updates
3805(define-public python-jsonschema-next
3806 (package
3807 (inherit python-jsonschema)
3808 (version "4.5.1")
3809 (source
3810 (origin
3811 (method url-fetch)
3812 (uri (pypi-uri "jsonschema" version))
3813 (sha256
3814 (base32 "1z0x22691jva7lwfcfh377jdmlz68zhiawxzl53k631l34k8hvbw"))))
3815 (arguments
3816 (substitute-keyword-arguments (package-arguments python-jsonschema)
3817 ((#:phases phases)
3818 #~(modify-phases #$phases
3819 ;; XXX: PEP 517 manual build/install procedures copied from
3820 ;; python-isort.
3821 (replace 'build
3822 (lambda _
3823 ;; ZIP does not support timestamps before 1980.
3824 (setenv "SOURCE_DATE_EPOCH" "315532800")
3825 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
3826 (replace 'install
3827 (lambda* (#:key outputs #:allow-other-keys)
3828 (let ((whl (car (find-files "dist" "\\.whl$"))))
3829 (invoke "pip" "--no-cache-dir" "--no-input"
3830 "install" "--no-deps" "--prefix" #$output whl))))))))
3831 (native-inputs (list python-pypa-build
3832 python-setuptools-scm
3833 python-twisted))
3834 (propagated-inputs
3835 (list python-attrs
3836 python-importlib-metadata
3837 python-pyrsistent
3838 python-typing-extensions))))
3839
3840(define-public python-schema
3841 (package
3842 (name "python-schema")
3843 (version "0.6.6")
3844 (source
3845 (origin
3846 (method url-fetch)
3847 (uri (pypi-uri "schema" version))
3848 (sha256
3849 (base32
3850 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
3851 (build-system python-build-system)
3852 (native-inputs
3853 (list python-pytest))
3854 (home-page "https://github.com/keleshev/schema")
3855 (synopsis "Simple data validation library")
3856 (description
3857 "@code{python-schema} is a library for validating Python data
3858structures, such as those obtained from config-files, forms, external
3859services or command-line parsing, converted from JSON/YAML (or
3860something else) to Python data-types.")
3861 (license license:psfl)))
3862
3863(define-public python-schema-0.5
3864 (package (inherit python-schema)
3865 (version "0.5.0")
3866 (source
3867 (origin
3868 (method url-fetch)
3869 (uri (pypi-uri "schema" version))
3870 (sha256
3871 (base32
3872 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
3873
3874(define-public python-kitchen
3875 (package
3876 (name "python-kitchen")
3877 (version "1.2.5")
3878 (source
3879 (origin
3880 (method url-fetch)
3881 (uri (pypi-uri "kitchen" version))
3882 (sha256
3883 (base32
3884 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
3885 (build-system python-build-system)
3886 (propagated-inputs
3887 (list python-chardet))
3888 (home-page "https://github.com/fedora-infra/kitchen")
3889 (synopsis "Python API for snippets")
3890 (description "@code{kitchen} module provides a python API for all sorts of
3891little useful snippets of code that everybody ends up writing for their projects
3892but never seem big enough to build an independent release. Use kitchen and stop
3893cutting and pasting that code over and over.")
3894 (license (list license:lgpl2.1+
3895 ;; subprocess.py, test_subprocess.py,
3896 ;; kitchen/pycompat25/defaultdict.py:
3897 license:psfl))))
3898
3899(define-public python-roman
3900 (package
3901 (name "python-roman")
3902 (version "3.3")
3903 (source
3904 (origin
3905 (method url-fetch)
3906 (uri (pypi-uri "roman" version))
3907 (sha256
3908 (base32
3909 "0gyp2bmw47jgpm8j64gydzqq838bgxz5gh6cm57lxlr7p26sqiic"))))
3910 (build-system python-build-system)
3911 (home-page "https://github.com/zopefoundation/roman")
3912 (synopsis "Integer to Roman numerals converter")
3913 (description
3914 "This package provides a small helper library to convert Arabic Numbers
3915to Roman Numerals.")
3916 (license license:psfl)))
3917
3918(define-public python-unidecode
3919 (package
3920 (name "python-unidecode")
3921 (version "1.1.1")
3922 (source (origin
3923 (method url-fetch)
3924 (uri (pypi-uri "Unidecode" version))
3925 (sha256
3926 (base32
3927 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
3928 (build-system python-build-system)
3929 (home-page "https://pypi.org/project/Unidecode/")
3930 (synopsis "ASCII transliterations of Unicode text")
3931 (description
3932 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
3933useful when integrating with legacy code that doesn't support Unicode, or for
3934ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
3935machine identifiers from human-readable Unicode strings that should still be
3936somewhat intelligible.")
3937 (license license:gpl2+)))
3938
3939(define-public python-text-unidecode
3940 (package
3941 (name "python-text-unidecode")
3942 (version "1.3")
3943 (source (origin
3944 (method url-fetch)
3945 (uri (pypi-uri "text-unidecode" version))
3946 (sha256
3947 (base32
3948 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
3949 (build-system python-build-system)
3950 (arguments
3951 '(#:phases (modify-phases %standard-phases
3952 (replace 'check
3953 (lambda _
3954 (invoke "pytest" "-vv"))))))
3955 (native-inputs
3956 (list python-pytest))
3957 (home-page "https://github.com/kmike/text-unidecode/")
3958 (synopsis "Decode Unicode data")
3959 (description
3960 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
3961Perl library. It can create ASCII representations of Unicode data. In general
3962users should prefer the @code{python-unidecode} package which offers better
3963memory usage and transliteration quality.")
3964 ;; The user can choose either license.
3965 (license (list license:clarified-artistic license:gpl2+))))
3966
3967(define-public python-pyjwt
3968 (package
3969 (name "python-pyjwt")
3970 (version "2.4.0")
3971 (source
3972 (origin
3973 (method url-fetch)
3974 (uri (pypi-uri "PyJWT" version))
3975 (sha256
3976 (base32
3977 "1fmbcwfw1463wjzwbcgg3s16rad6kfb1mc5y7jbkp6v9ihh0hafl"))))
3978 (build-system python-build-system)
3979 (arguments
3980 '(#:phases (modify-phases %standard-phases
3981 (replace 'check
3982 (lambda* (#:key tests? #:allow-other-keys)
3983 (when tests?
3984 (invoke "pytest" "-vv")))))))
3985 (native-inputs
3986 (list python-cryptography python-pytest))
3987 (home-page "https://github.com/progrium/pyjwt")
3988 (synopsis "JSON Web Token implementation in Python")
3989 (description
3990 "PyJWT is a JSON Web Token implementation written in Python.")
3991 (license license:expat)))
3992
3993(define-public python-pymsgbox
3994 (package
3995 (name "python-pymsgbox")
3996 (version "1.0.6")
3997 (source
3998 (origin
3999 (method git-fetch)
4000 (uri (git-reference
4001 ;; LICENSE.txt is not present on pypi
4002 (url "https://github.com/asweigart/PyMsgBox")
4003 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
4004 (file-name (git-file-name name version))
4005 (sha256
4006 (base32
4007 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
4008 (arguments
4009 ;; Circular dependency to run tests:
4010 ;; Tests need pyautogui, which depends on pymsgbox.
4011 '(#:tests? #f))
4012 (build-system python-build-system)
4013 (home-page "https://github.com/asweigart/PyMsgBox")
4014 (synopsis "Python module for JavaScript-like message boxes")
4015 (description
4016 "PyMsgBox is a simple, cross-platform, pure Python module for
4017JavaScript-like message boxes. Types of dialog boxes include:
4018@enumerate
4019@item alert
4020@item confirm
4021@item prompt
4022@item password
4023@end enumerate
4024")
4025 (license license:bsd-3)))
4026
4027(define-public python-pympler
4028 (package
4029 (name "python-pympler")
4030 (home-page "https://pythonhosted.org/Pympler/")
4031 (version "1.0.1")
4032 (source (origin
4033 (method url-fetch)
4034 (uri (pypi-uri "Pympler" version))
4035 (sha256
4036 (base32
4037 "1ynkqpv2akldmvkll5vh5zhwj433s1d59iv0f76lygyak4silgwr"))))
4038 (build-system python-build-system)
4039 (synopsis "Measure, monitor and analyze memory behavior")
4040 (description
4041 "Pympler is a development tool to measure, monitor and analyze
4042the memory behavior of Python objects in a running Python application.
4043
4044By pympling a Python application, detailed insight in the size and the
4045lifetime of Python objects can be obtained. Undesirable or unexpected
4046runtime behavior like memory bloat and other @samp{pymples} can easily
4047be identified.
4048
4049A web profiling frontend exposes process statistics, garbage
4050visualisation and class tracker statistics.")
4051 (license license:asl2.0)))
4052
4053(define-public python-itsdangerous
4054 (package
4055 (name "python-itsdangerous")
4056 (version "2.0.1")
4057 (source
4058 (origin
4059 (method url-fetch)
4060 (uri (pypi-uri "itsdangerous" version))
4061 (sha256
4062 (base32
4063 "1w6gfb2zhbcmrfj6digwzw1z68w6zg1q87rm6la2m412zil4swly"))))
4064 (build-system python-build-system)
4065 (home-page "https://palletsprojects.com/p/itsdangerous/")
4066 (synopsis "Python library for passing data to/from untrusted environments")
4067 (description
4068 "Itsdangerous provides various helpers to pass trusted data to untrusted
4069environments and back.")
4070 (license license:bsd-3)))
4071
4072(define-public python-pyyaml
4073 (package
4074 (name "python-pyyaml")
4075 (version "6.0")
4076 (source
4077 (origin
4078 (method url-fetch)
4079 (uri (pypi-uri "PyYAML" version))
4080 (sha256
4081 (base32
4082 "18imkjacvpxfgg1lbpraqywx3j7hr5dv99d242byqvrh2jf53yv8"))))
4083 (build-system python-build-system)
4084 (inputs
4085 (list libyaml python-cython))
4086 (home-page "https://pyyaml.org")
4087 (synopsis "YAML parser and emitter for Python")
4088 (description
4089 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
4090complete YAML 1.1 parser, Unicode support, pickle support, capable extension
4091API, and sensible error messages. PyYAML supports standard YAML tags and
4092provides Python-specific tags that represent an arbitrary Python object.")
4093 (license license:expat)))
4094
4095(define-public python-pyyaml-5
4096 (package
4097 (inherit python-pyyaml)
4098 (version "5.4.1")
4099 (source
4100 (origin
4101 (method url-fetch)
4102 (uri (pypi-uri "PyYAML" version))
4103 (sha256
4104 (base32
4105 "0pm440pmpvgv5rbbnm8hk4qga5a292kvlm1bh3x2nwr8pb5p8xv0"))))))
4106
4107(define-public python-vine
4108 (package
4109 (name "python-vine")
4110 (version "5.0.0")
4111 (source
4112 (origin
4113 (method url-fetch)
4114 (uri (pypi-uri "vine" version))
4115 (sha256
4116 (base32 "0zk3pm0g7s4qfn0gk28lfmsyplvisaxi6826cgpq5njkm4j1cfvx"))))
4117 (build-system python-build-system)
4118 (native-inputs
4119 (list python-pytest python-case))
4120 (home-page "https://github.com/celery/vine")
4121 (synopsis "Promises for Python")
4122 (description
4123 "@code{vine} provides a special implementation of promises in that it can
4124be used both for \"promise of a value\" and lazy evaluation. The biggest
4125upside for this is that everything in a promise can also be a promise,
4126e.g. filters, callbacks and errbacks can all be promises.")
4127 (license license:bsd-3)))
4128
4129(define-public python-virtualenv
4130 (package
4131 (name "python-virtualenv")
4132 (version "20.3.1")
4133 (source
4134 (origin
4135 (method url-fetch)
4136 (uri (pypi-uri "virtualenv" version))
4137 (sha256
4138 (base32
4139 "1nbhnpzswcf3lmzn5xabmfdd7ki8r2w2i37y6wml54di6qi1l48c"))))
4140 (build-system python-build-system)
4141 (native-inputs
4142 (list python-mock python-pytest python-setuptools-scm))
4143 (propagated-inputs
4144 (list python-appdirs python-distlib python-filelock python-six))
4145 (home-page "https://virtualenv.pypa.io/")
4146 (synopsis "Virtual Python environment builder")
4147 (description
4148 "Virtualenv is a tool to create isolated Python environments.")
4149 (license license:expat)))
4150
4151(define-public python-crossenv
4152 (package
4153 (name "python-crossenv")
4154 (version "1.3.0")
4155 (source
4156 (origin
4157 (method url-fetch)
4158 (uri (pypi-uri "crossenv" version))
4159 (sha256
4160 (base32
4161 "07rv4650n19740ixmnsf4qbxyqlgi7f5m1cy8cq0gl01q3r6hps4"))))
4162 (build-system python-build-system)
4163 (arguments
4164 (list #:tests? #f)) ; tests not distributed on pypi
4165 (home-page "https://github.com/benfogle/virtualenv")
4166 (synopsis "Cross-compiling virtualenv for Python")
4167 (description "This package is a tool for cross-compiling extension
4168modules. It creates a special virtual environment such that @command{pip} or
4169@file{setup.py} will cross compile packages for you, usually with no further
4170work on your part.")
4171 (license license:expat)))
4172
4173(define-public python-uc-micro-py
4174 (package
4175 (name "python-uc-micro-py")
4176 (version "1.0.1")
4177 (source (origin
4178 (method git-fetch) ;for tests
4179 (uri (git-reference
4180 (url "https://github.com/tsutsu3/uc.micro-py")
4181 (commit (string-append "v" version))))
4182 (file-name (git-file-name name version))
4183 (sha256
4184 (base32
4185 "17f55gi55rg47nm88fn3f8851ph03dgykdp011lxr3j6hk18lyfv"))))
4186 (build-system pyproject-build-system)
4187 (native-inputs (list python-pytest))
4188 (home-page "https://github.com/tsutsu3/uc.micro-py")
4189 (synopsis "Unicode data files for linkify-it-py projects")
4190 (description "This package contains a micro subset of Unicode data files
4191for linkify-it-py projects.")
4192 (license license:expat)))
4193
4194(define-public python-linkify-it-py
4195 (package
4196 (name "python-linkify-it-py")
4197 (version "2.0.0")
4198 (source (origin
4199 (method git-fetch) ;for tests
4200 (uri (git-reference
4201 (url "https://github.com/tsutsu3/linkify-it-py")
4202 (commit (string-append "v" version))))
4203 (file-name (git-file-name name version))
4204 (sha256
4205 (base32
4206 "0fg0a1lc8xbb62y9krxcp708ll58dxcwm8i7rrwpkd5sh2229f6x"))))
4207 (build-system pyproject-build-system)
4208 (propagated-inputs (list python-uc-micro-py))
4209 (native-inputs (list python-pytest))
4210 (home-page "https://github.com/tsutsu3/linkify-it-py")
4211 (synopsis "Links recognition library with full Unicode support")
4212 (description "This is Python port of
4213@url{https://github.com/markdown-it/linkify-it, linkify-it}, which is a links
4214recognition library with full Unicode support. It has features like:
4215@itemize
4216@item Full unicode support, with @i{astral} characters
4217@item International domains support
4218@item Allows rules extension and custom normalizers.
4219@end itemize")
4220 (license license:expat)))
4221
4222(define-public python-markdown-it-py
4223 (package
4224 (name "python-markdown-it-py")
4225 (version "2.1.0")
4226 (source (origin
4227 (method url-fetch)
4228 (uri (pypi-uri "markdown-it-py" version))
4229 (sha256
4230 (base32
4231 "1nh75i72584r70alhqc479gys04s5m5g3vq601yf2njbs7z5jzng"))))
4232 (build-system python-build-system)
4233 (arguments
4234 (list
4235 #:tests? #f ;pypi source does not contains tests
4236 #:phases
4237 #~(modify-phases %standard-phases
4238 (replace 'build
4239 (lambda _ (invoke "flit" "build")))
4240 (replace 'install
4241 (lambda* (#:key inputs outputs #:allow-other-keys)
4242 (add-installed-pythonpath inputs outputs)
4243 (for-each
4244 (lambda (wheel)
4245 (invoke "python" "-m" "pip" "install"
4246 wheel (string-append "--prefix=" #$output)))
4247 (find-files "dist" "\\.whl$")))))))
4248 (native-inputs (list python-flit))
4249 (propagated-inputs
4250 (list python-mdurl
4251 python-typing-extensions))
4252 (home-page "https://github.com/executablebooks/markdown-it-py")
4253 (synopsis "Python port of markdown-it")
4254 (description
4255 "This is a Python port of @code{markdown-it}, and some of its associated
4256plugins. The driving design philosophy of the port has been to change as
4257little of the fundamental code structure (file names, function name, etc) as
4258possible.")
4259 (license license:expat)))
4260
4261(define-public python-markupsafe
4262 (package
4263 (name "python-markupsafe")
4264 (version "2.0.1")
4265 (source
4266 (origin
4267 (method url-fetch)
4268 (uri (pypi-uri "MarkupSafe" version))
4269 (sha256
4270 (base32
4271 "02k2ynmqvvd0z0gakkf8s4idyb606r7zgga41jrkhqmigy06fk2r"))))
4272 (build-system python-build-system)
4273 (arguments
4274 `(#:phases (modify-phases %standard-phases
4275 (replace 'check
4276 (lambda* (#:key tests? #:allow-other-keys)
4277 (when tests?
4278 (invoke "pytest" "-vv")))))))
4279 (native-inputs
4280 (list python-pytest))
4281 (home-page "https://github.com/mitsuhiko/markupsafe")
4282 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
4283 (description
4284 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
4285for Python.")
4286 (license license:bsd-3)))
4287
4288
4289(define-public python-jinja2
4290 (package
4291 (name "python-jinja2")
4292 (version "3.1.1")
4293 (source
4294 (origin
4295 (method url-fetch)
4296 (uri (pypi-uri "Jinja2" version))
4297 (sha256
4298 (base32
4299 "1saawzys14l1p4kafs7hkihmnvqjq8fwxjmkjiqx3jq1nm5ys2v4"))))
4300 (build-system python-build-system)
4301 (arguments
4302 '(#:phases (modify-phases %standard-phases
4303 (replace 'check
4304 (lambda* (#:key tests? #:allow-other-keys)
4305 (if tests?
4306 (invoke "pytest" "-vv")
4307 (format #t "test suite not run~%")))))))
4308 (native-inputs (list python-pytest))
4309 (propagated-inputs (list python-markupsafe))
4310 (home-page "https://jinja.palletsprojects.com/")
4311 (synopsis "Python template engine")
4312 (description
4313 "Jinja2 is a small but fast and easy to use stand-alone template engine
4314written in pure Python.")
4315 (license license:bsd-3)))
4316
4317
4318(define-public python-jinja2-time
4319 (package
4320 (name "python-jinja2-time")
4321 (version "0.2.0")
4322 (source
4323 (origin
4324 (method url-fetch)
4325 (uri (pypi-uri "jinja2-time" version))
4326 (sha256
4327 (base32
4328 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
4329 (build-system python-build-system)
4330 (propagated-inputs
4331 (list python-arrow python-jinja2))
4332 (home-page
4333 "https://github.com/hackebrot/jinja2-time")
4334 (synopsis "Jinja2 Extension for Dates and Times")
4335 (description
4336 "This package provides an extension for the template engine Jinja2. It
4337adds a 'now' tag providing a convenient access to the arrow.now() API from
4338templates. A format string can be provided to control the output.")
4339 (license license:expat)))
4340
4341(define-public python-pysdl2
4342 (package
4343 (name "python-pysdl2")
4344 (version "0.9.11")
4345 (source (origin
4346 (method url-fetch)
4347 (uri (pypi-uri "PySDL2" version))
4348 (sha256
4349 (base32
4350 "19id1qswgcj4v4j5kn49shq1xxx3slhjpm0102w87mczsdbi1rck"))))
4351 (build-system python-build-system)
4352 (arguments
4353 (list #:tests? #f ;; Requires /dev/dri, OpenGL module, etc.
4354 #:phases
4355 #~(modify-phases %standard-phases
4356 (add-after 'unpack 'patch-paths
4357 (lambda* (#:key inputs #:allow-other-keys)
4358 (substitute* "sdl2/dll.py"
4359 ;; Disable pysdl2-dll. It can't be packaged on GNU Guix
4360 ;; as it duplicates an existing package (sdl2).
4361 (("prepath = os\\.getenv\\('PYSDL2_DLL_PATH'\\)")
4362 "prepath = \"system\"")
4363 (("^import sdl2dll$") "")
4364 (("postpath = os\\.getenv\\('PYSDL2_DLL_PATH'\\)")
4365 "postpath = \"system\"")
4366 (("DLL\\(.*, os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)\\)")
4367 (string-append
4368 "DLL(\"SDL2\", [\"SDL2\", \"SDL2-2.0\", \"SDL2-2.0.0\"], \""
4369 (dirname (search-input-file inputs "/lib/libSDL2.so"))
4370 "\")")))
4371 (substitute* "sdl2/sdlimage.py"
4372 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4373 (string-append
4374 "\""
4375 (dirname (search-input-file inputs "/lib/libSDL2_image.so"))
4376 "\"")))
4377 (substitute* "sdl2/sdlgfx.py"
4378 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4379 (string-append
4380 "\""
4381 (dirname (search-input-file inputs "/lib/libSDL2_gfx.so"))
4382 "\"")))
4383 (substitute* "sdl2/sdlmixer.py"
4384 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4385 (string-append
4386 "\""
4387 (dirname (search-input-file inputs "/lib/libSDL2_mixer.so"))
4388 "\"")))
4389 (substitute* "sdl2/sdlttf.py"
4390 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4391 (string-append
4392 "\""
4393 (dirname (search-input-file inputs "/lib/libSDL2_ttf.so"))
4394 "\""))))))))
4395 (inputs
4396 (list sdl2 sdl2-image sdl2-gfx sdl2-mixer sdl2-ttf))
4397 (home-page "https://github.com/py-sdl/py-sdl2")
4398 (synopsis "Python bindings around the SDL2 game development library")
4399 (description "PySDL2 is a pure Python wrapper around the @code{SDL2},
4400@code{SDL2_mixer}, @code{SDL2_image}, @code{SDL2_ttf}, and @code{SDL2_gfx}
4401libraries. Instead of relying on C code, it uses the built-in ctypes module
4402to interface with SDL2, and provides simple Python classes and wrappers for
4403common SDL2 functionality.")
4404 (license license:cc0)))
4405
4406(define-public python-pystache
4407 (package
4408 (name "python-pystache")
4409 (version "0.6.0")
4410 (source (origin
4411 (method url-fetch)
4412 (uri (pypi-uri "pystache" version))
4413 (sha256
4414 (base32
4415 "03a73ppf5vxnsk6az5ackvc0hp6xqv2f4hi1s5c4nk4s2jr95gwk"))))
4416 (build-system python-build-system)
4417 (arguments
4418 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
4419 (home-page "http://defunkt.io/pystache/")
4420 (synopsis "Python logic-less template engine")
4421 (description
4422 "Pystache is a Python implementation of the framework agnostic,
4423logic-free templating system Mustache.")
4424 (license license:expat)))
4425
4426(define-public python-pystitcher
4427 (package
4428 (name "python-pystitcher")
4429 (version "1.0.4")
4430 (source
4431 (origin
4432 (method git-fetch)
4433 (uri
4434 (git-reference
4435 (url "https://github.com/captn3m0/pystitcher")
4436 (commit
4437 (string-append "v" version))))
4438 (file-name
4439 (git-file-name name version))
4440 (sha256
4441 (base32 "03yrzqhcsjdj5zprrk3bh5bbyqfy3vfhxra9974vmkir3m121394"))))
4442 (build-system python-build-system)
4443 (inputs
4444 (list python-html5lib python-importlib-metadata python-markdown
4445 python-pypdf3 python-validators))
4446 (home-page "https://github.com/captn3m0/pystitcher")
4447 (synopsis "Declaratively stitch together a PDF file from multiple sources")
4448 (description
4449 "This package stitches your PDF files together, generating customizable
4450bookmarks using a declarative input in the form of a markdown file.")
4451 (license license:expat)))
4452
4453(define-public python-joblib
4454 (package
4455 (name "python-joblib")
4456 (version "1.1.0")
4457 (source (origin
4458 (method url-fetch)
4459 (uri (pypi-uri "joblib" version))
4460 (sha256
4461 (base32
4462 "0d8ypyhsw1bjr96zan9ms8wbvnzbjqxniq4vcszghcrps7ngqn21"))))
4463 (build-system python-build-system)
4464 (arguments
4465 `(#:phases
4466 (modify-phases %standard-phases
4467 (replace 'check
4468 (lambda* (#:key tests? #:allow-other-keys)
4469 (when tests?
4470 (setenv "JOBLIB_MULTIPROCESSING" "0")
4471 (invoke "pytest" "-v" "joblib"
4472 ;; We disable this test to avoid having to depend on ipython/jupyter
4473 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))))))
4474 (native-inputs
4475 (list python-pytest))
4476 (home-page "https://joblib.readthedocs.io/")
4477 (synopsis "Using Python functions as pipeline jobs")
4478 (description
4479 "Joblib is a set of tools to provide lightweight pipelining in Python.
4480In particular, joblib offers: transparent disk-caching of the output values
4481and lazy re-evaluation (memoize pattern), easy simple parallel computing
4482logging and tracing of the execution.")
4483 (license license:bsd-3)))
4484
4485
4486(define-public python-daemon
4487 (package
4488 (name "python-daemon")
4489 (version "2.3.0")
4490 (source
4491 (origin
4492 (method url-fetch)
4493 (uri (pypi-uri "python-daemon" version))
4494 (sha256
4495 (base32
4496 "1bxfn2bq56sd4w0nm9mqy8y0905m7fc8vmhnjxlrf49vcbqr7adx"))))
4497 (build-system python-build-system)
4498 (arguments
4499 `(#:phases
4500 (modify-phases %standard-phases
4501 (add-before 'check 'adjust-tests
4502 (lambda _
4503 ;; Drop use of testtools.helpers.safe_hasattr which has
4504 ;; been removed in favor of hasattr.
4505 (substitute* "test/test_metadata.py"
4506 (("testtools\\.helpers\\.safe_hasattr")
4507 "hasattr"))
4508 ;; FIXME: Determine why test fails
4509 (substitute* "test/test_daemon.py"
4510 (("test_detaches_process_context")
4511 "skip_test_detaches_process_context")))))))
4512 (propagated-inputs
4513 (list python-lockfile))
4514 (native-inputs
4515 (list python-coverage
4516 python-testtools
4517 python-testscenarios
4518 python-twine
4519 python-mock
4520 python-docutils))
4521 (home-page "https://pagure.io/python-daemon/")
4522 (synopsis "Python library for making a Unix daemon process")
4523 (description "Python-daemon is a library that assists a Python program to
4524turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
4525
4526This library provides a @code{DaemonContext} class that manages the following
4527important tasks for becoming a daemon process:
4528@enumerate
4529@item Detach the process into its own process group.
4530@item Set process environment appropriate for running inside a chroot.
4531@item Renounce suid and sgid privileges.
4532@item Close all open file descriptors.
4533@item Change the working directory, uid, gid, and umask.
4534@item Set appropriate signal handlers.
4535@item Open new file descriptors for stdin, stdout, and stderr.
4536@item Manage a specified PID lock file.
4537@item Register cleanup functions for at-exit processing.
4538@end enumerate")
4539 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
4540 (license (list license:asl2.0 license:gpl3+))))
4541
4542(define-public python-anytree
4543 (package
4544 (name "python-anytree")
4545 (version "2.8.0")
4546 (source (origin
4547 (method url-fetch)
4548 (uri (pypi-uri "anytree" version))
4549 (sha256
4550 (base32
4551 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
4552 (build-system python-build-system)
4553 (propagated-inputs
4554 (list python-six))
4555 (native-inputs
4556 (list ;; For tests.
4557 graphviz ;for 'dot'
4558 python-nose))
4559 (home-page "https://github.com/c0fec0de/anytree")
4560 (synopsis "Lightweight tree data library")
4561 (description
4562 "@code{anytree} is a simple, lightweight, and extensible tree data
4563structure for Python.")
4564 (license license:asl2.0)))
4565
4566(define-public autokey
4567 (package
4568 (name "autokey")
4569 (version "0.95.10")
4570 (source (origin
4571 (method git-fetch)
4572 (uri (git-reference
4573 (url "https://github.com/autokey/autokey")
4574 (commit (string-append "v" version))))
4575 (file-name (git-file-name name version))
4576 (sha256
4577 (base32
4578 "0f0cqfnb49wwdy7zl2f2ypcnd5pc8r8n7z7ssxkq20d4xfxlgamr"))))
4579 (build-system python-build-system)
4580 (arguments
4581 (list
4582 ;; Tests are deprecated and broken until next version, see
4583 ;; https://github.com/autokey/autokey/issues/327
4584 #:tests? #f
4585 #:phases
4586 #~(modify-phases %standard-phases
4587 (add-after 'unpack 'fix-paths
4588 (lambda* (#:key inputs #:allow-other-keys)
4589 (substitute* "lib/autokey/scripting.py"
4590 (("\"wmctrl\"")
4591 (string-append "\"" (search-input-file inputs "bin/wmctrl") "\""))
4592 (("\"zenity\"")
4593 (string-append "\"" (search-input-file inputs "bin/zenity") "\"")))
4594 (substitute* "autokey-shell"
4595 (("'ipython3'")
4596 (string-append "'" (search-input-file inputs "bin/ipython3") "'"))
4597 (("'python3'")
4598 (string-append "'" (search-input-file inputs "bin/python3") "'")))))
4599 ;; Use 'prefix' instead of '=' to allow the user to use additional
4600 ;; GI paths from their autokey scripts. GUIX_PYTHONPATH is already
4601 ;; wrapped with prefix in python-build-system's wrap.
4602 (add-before 'wrap 'wrap-autokey-gi
4603 (lambda _
4604 (let ((gi-typelib-path (getenv "GI_TYPELIB_PATH")))
4605 (for-each
4606 (lambda (program)
4607 (wrap-program program
4608 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
4609 (map (lambda (name)
4610 (string-append #$output "/bin/" name))
4611 '("autokey-gtk"
4612 "autokey-shell")))))))))
4613 (inputs
4614 (list bash-minimal ; for wrap-program
4615 gtksourceview-3
4616 libappindicator
4617 libnotify
4618 python-dbus
4619 python-ipython
4620 python-pygobject
4621 python-pyinotify
4622 python-pyqt+qscintilla
4623 python-xlib
4624 wmctrl
4625 zenity))
4626 (home-page "https://github.com/autokey/autokey")
4627 (synopsis
4628 "Keyboard and GUI automation utility")
4629 (description
4630 "AutoKey is a desktop automation utility for X11. It allows the automation of
4631virtually any task by responding to typed abbreviations and hotkeys. It
4632offers a full-featured GUI (GTK and QT versions) that makes it highly
4633accessible for novices, as well as a scripting interface offering the full
4634flexibility and power of the Python language.")
4635 (license license:gpl3+)))
4636
4637(define-public python-docutils
4638 (package
4639 (name "python-docutils")
4640 (version "0.17.1")
4641 (source
4642 (origin
4643 (method url-fetch)
4644 (uri (pypi-uri "docutils" version))
4645 (sha256
4646 (base32
4647 "09gii36lp1bs26cpxqyfd20xahnpbrbjzcnba2xq08y3wk97frb8"))))
4648 (build-system python-build-system)
4649 (arguments
4650 '(#:phases (modify-phases %standard-phases
4651 (replace 'check
4652 (lambda* (#:key tests? #:allow-other-keys)
4653 (if tests?
4654 (invoke "python" "test/alltests.py")
4655 (format #t "test suite not run~%"))
4656 #t)))))
4657 (home-page "http://docutils.sourceforge.net/")
4658 (synopsis "Python Documentation Utilities")
4659 (description
4660 "Docutils is a modular system for processing documentation into useful
4661formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
4662easy to use markup language, for input.
4663
4664This package provides tools for converting @file{.rst} files to other formats
4665via commands such as @command{rst2man}, as well as supporting Python code.")
4666 ;; Most of the source code is public domain, but some source files are
4667 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
4668 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
4669
4670;; TODO: Make this the default in the next rebuild cycle.
4671(define-public python-docutils-0.19
4672 (package
4673 (inherit python-docutils)
4674 (version "0.19")
4675 (source (origin
4676 (method url-fetch)
4677 (uri (pypi-uri "docutils" version))
4678 (sha256
4679 (base32
4680 "1rprvir116g5rz2bgzkzgyn6mv0z8582rz7bgxbpy2y3adkmm69k"))))))
4681
4682;; awscli refuses to be built with docutils < 0.16.
4683(define-public python-docutils-0.15
4684 (package
4685 (inherit python-docutils)
4686 (version "0.15")
4687 (source (origin
4688 (method url-fetch)
4689 (uri (pypi-uri "docutils" version))
4690 (sha256
4691 (base32
4692 "0ja8q6mdj6xv62jjw3phv8j5nfqi5x8hnfy4pqfcjcgz4b34k8sl"))))
4693 ;; tests contain Python 2 syntax.
4694 (arguments '(#:tests? #false))))
4695
4696(define-public python-restructuredtext-lint
4697 (package
4698 (name "python-restructuredtext-lint")
4699 (version "1.3.0")
4700 (source
4701 (origin
4702 (method url-fetch)
4703 (uri (pypi-uri "restructuredtext-lint" version))
4704 (sha256
4705 (base32
4706 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
4707 (build-system python-build-system)
4708 (arguments
4709 `(#:phases
4710 (modify-phases %standard-phases
4711 (delete 'check)
4712 (add-after 'install 'check
4713 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4714 (when tests?
4715 (add-installed-pythonpath inputs outputs)
4716 (invoke "nosetests" "-v"))
4717 #t)))))
4718 (propagated-inputs
4719 (list python-docutils))
4720 (native-inputs
4721 (list python-nose))
4722 (home-page "https://github.com/twolfson/restructuredtext-lint")
4723 (synopsis "reStructuredText linter")
4724 (description "This package provides a linter for the reStructuredText
4725format.")
4726 (license license:unlicense)))
4727
4728(define-public python-click-repl
4729 (package
4730 (name "python-click-repl")
4731 (version "0.2.0")
4732 (source
4733 (origin
4734 (method git-fetch) ; no tests in PyPI release
4735 (uri (git-reference
4736 (url "https://github.com/click-contrib/click-repl")
4737 (commit version)))
4738 (file-name (git-file-name name version))
4739 (sha256
4740 (base32 "16ybsnwlj2jlqcfxflky8jz7i3nhrd3f6mvkpgs95618l8lx994i"))))
4741 (build-system python-build-system)
4742 (arguments
4743 `(#:phases
4744 (modify-phases %standard-phases
4745 (replace 'check
4746 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4747 (when tests?
4748 (add-installed-pythonpath inputs outputs)
4749 (invoke "python" "-m" "pytest")))))))
4750 (native-inputs
4751 (list python-pytest))
4752 (propagated-inputs
4753 (list python-click python-prompt-toolkit python-six))
4754 (home-page "https://github.com/untitaker/click-repl")
4755 (synopsis "REPL plugin for Click")
4756 (description "This package provides a REPL plugin for Click.")
4757 (license license:expat)))
4758
4759(define-public python-doc8
4760 (package
4761 (name "python-doc8")
4762 (version "0.8.0")
4763 (source
4764 (origin
4765 (method url-fetch)
4766 (uri (pypi-uri "doc8" version))
4767 (sha256
4768 (base32
4769 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
4770 (build-system python-build-system)
4771 (arguments
4772 `(#:phases
4773 (modify-phases %standard-phases
4774 (delete 'check)
4775 (add-after 'install 'check
4776 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4777 (when tests?
4778 (add-installed-pythonpath inputs outputs)
4779 (invoke "pytest" "-v"))
4780 #t)))))
4781 (propagated-inputs
4782 (list python-chardet python-docutils python-restructuredtext-lint
4783 python-six python-stevedore))
4784 (native-inputs
4785 (list python-testtools python-pytest))
4786 (home-page "https://launchpad.net/doc8")
4787 (synopsis
4788 "Style checker for Sphinx (or other) RST documentation")
4789 (description
4790 "Doc8 is an opinionated style checker for reStructured Text and plain
4791text styles of documentation.")
4792 (license license:asl2.0)))
4793
4794(define-public python-pygments
4795 (package
4796 (name "python-pygments")
4797 (version "2.12.0")
4798 (source
4799 (origin
4800 (method url-fetch)
4801 (uri (pypi-uri "Pygments" version))
4802 (sha256
4803 (base32
4804 "1sr6iqh21xi6p8aba4wa9pqfhjbbpcvn9jcsx0ggy4lniw8idcay"))))
4805 (build-system python-build-system)
4806 (arguments
4807 ;; FIXME: Tests require sphinx, which depends on this.
4808 '(#:tests? #f))
4809 (home-page "https://pygments.org/")
4810 (synopsis "Syntax highlighting")
4811 (description
4812 "Pygments is a syntax highlighting package written in Python.")
4813 (license license:bsd-2)))
4814
4815(define-public python-pygments-github-lexers
4816 (package
4817 (name "python-pygments-github-lexers")
4818 (version "0.0.5")
4819 (source
4820 (origin
4821 (method url-fetch)
4822 (uri (pypi-uri "pygments-github-lexers" version))
4823 (sha256
4824 (base32
4825 "0cz14clcc9z4pn79ll8hp3xzgsrfjscak5zfsvlgrz6ngkkmgjma"))))
4826 (build-system python-build-system)
4827 (propagated-inputs
4828 (list python-pygments))
4829 (home-page "https://github.com/liluo/pygments-github-lexers")
4830 (synopsis "Pygments Github custom lexers")
4831 (description "This package installs Github custom lexers to Pygments.")
4832 (license license:bsd-3)))
4833
4834(define-public python-bump2version
4835 (package
4836 (name "python-bump2version")
4837 (version "1.0.1")
4838 (source
4839 (origin
4840 (method url-fetch)
4841 (uri (pypi-uri "bump2version" version))
4842 (sha256
4843 (base32 "1rinm4gv1fyh7xjv3v6r1p3zh5kl4ry2qifz5f7frx31mnzv4b3n"))))
4844 (build-system python-build-system)
4845 (arguments
4846 ;; XXX: Tests fail with "bumpversion: error: the following arguments are
4847 ;; required: --new-version".
4848 `(#:tests? #false))
4849 (home-page "https://github.com/c4urself/bump2version")
4850 (synopsis "Version-bump your software with a single command!")
4851 (description
4852 "This package provides a small command line tool to simplify releasing
4853software by updating all version strings in your source code by the correct
4854increment. It also creates commits and tags.")
4855 (license license:expat)))
4856
4857(define-public python-bumpversion
4858 (package
4859 (name "python-bumpversion")
4860 (version "0.5.3")
4861 (source
4862 (origin
4863 (method url-fetch)
4864 (uri (pypi-uri "bumpversion" version))
4865 (sha256
4866 (base32
4867 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
4868 (build-system python-build-system)
4869 (home-page "https://github.com/peritus/bumpversion")
4870 (synopsis "Tool to bump software version")
4871 (description "This tool provides a command-line interface (CLI) to bump a
4872software version simply.")
4873 (license license:expat)))
4874
4875(define-public python-deprecated
4876 (package
4877 (name "python-deprecated")
4878 (version "1.2.13")
4879 (source
4880 (origin
4881 (method git-fetch)
4882 (uri (git-reference
4883 (url "https://github.com/tantale/deprecated")
4884 (commit (string-append "v" version))))
4885 (file-name (git-file-name name version))
4886 (sha256
4887 (base32
4888 "0v4ys9xr8lski2r98da99spsj6hjlnnqgnhhmyhrm66myiix885c"))))
4889 (build-system python-build-system)
4890 (arguments
4891 `(#:phases (modify-phases %standard-phases
4892 (replace 'check
4893 (lambda* (#:key tests? #:allow-other-keys)
4894 (when tests?
4895 (invoke "pytest")))))))
4896 (propagated-inputs
4897 (list python-wrapt))
4898 (native-inputs
4899 (list python-bumpversion python-pytest python-pytest-cov
4900 python-sphinx python-tox))
4901 (home-page "https://github.com/tantale/deprecated")
4902 (synopsis "Python decorator to deprecate classes, functions or methods")
4903 (description "The @code{deprecated} decorator provides a convenient way to deprecate
4904to deprecate classes, functions or methods.")
4905 (license license:expat)))
4906
4907(define-public python-pygithub
4908 (package
4909 (name "python-pygithub")
4910 (version "1.55")
4911 (source
4912 ;; We fetch from the Git repo because there are no tests in the PyPI
4913 ;; archive.
4914 (origin
4915 (method git-fetch)
4916 (uri (git-reference
4917 (url "https://github.com/PyGithub/PyGithub")
4918 (commit (string-append "v" version))))
4919 (file-name (git-file-name name version))
4920 (sha256
4921 (base32 "082bxffpy4h97dsay3l75cpgfjj10kywkvicnm6xscwvah285q9y"))))
4922 (build-system python-build-system)
4923 (arguments
4924 `(#:phases
4925 (modify-phases %standard-phases
4926 (replace 'check
4927 (lambda* (#:key tests? #:allow-other-keys)
4928 (when tests?
4929 (invoke "pytest"))
4930 #t)))))
4931 (propagated-inputs
4932 (list python-cryptography python-deprecated python-pyjwt
4933 python-pynacl python-requests))
4934 (native-inputs
4935 (list python-httpretty python-pytest))
4936 (home-page "https://pygithub.readthedocs.io/en/latest/")
4937 (synopsis "Python library for the GitHub API")
4938 (description "This library allows managing GitHub resources such as
4939repositories, user profiles, and organizations in your Python applications,
4940using version 3 of the GitHub application programming interface (API).")
4941 (license license:lgpl3+)))
4942
4943(define-public python-rellu
4944 (package
4945 (name "python-rellu")
4946 (version "0.7")
4947 (source
4948 (origin
4949 (method url-fetch)
4950 (uri (pypi-uri "rellu" version))
4951 (sha256
4952 (base32
4953 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
4954 (build-system python-build-system)
4955 (propagated-inputs
4956 (list python-invoke python-pygithub))
4957 (home-page "https://github.com/robotframework/rellu")
4958 (synopsis "Utilities to create PyPI releases")
4959 (description "This collection of utilities contains tooling and templates
4960to assist in creating releases on GitHub and publishing them on PyPI. It is
4961designed to be used by Robot Framework and tools and libraries in its
4962ecosystem, but can naturally be used also by other projects.")
4963 (license license:asl2.0)))
4964
4965(define-public python-robotframework
4966 (package
4967 (name "python-robotframework")
4968 (version "5.0.1")
4969 ;; There are no tests in the PyPI archive.
4970 (source
4971 (origin
4972 (method git-fetch)
4973 (uri (git-reference
4974 (url "https://github.com/robotframework/robotframework")
4975 (commit (string-append "v" version))))
4976 (file-name (git-file-name name version))
4977 (sha256
4978 (base32 "0jjr71npzrm5mv16pya3m2dqaqgf6sc45yca5kfmc5lfislig5b8"))
4979 (patches (search-patches
4980 "python-robotframework-atest.patch"
4981 "python-robotframework-source-date-epoch.patch"))))
4982 (build-system python-build-system)
4983 (arguments
4984 (list
4985 #:modules '((guix build python-build-system)
4986 (guix build utils)
4987 (ice-9 ftw)
4988 (ice-9 match)
4989 (srfi srfi-26))
4990 #:phases
4991 #~(modify-phases %standard-phases
4992 (add-after 'unpack 'delete-problematic-tests
4993 (lambda _
4994 ;; Tests such as 'Tilde and username in path' rely on HOME and
4995 ;; USER being set, on top of the user's /etc/passwd home
4996 ;; directory not being '/', as is the case in the Guix build
4997 ;; container.
4998 (delete-file "atest/robot/standard_libraries/\
4999operating_system/path_expansion.robot")))
5000 (add-before 'build 'build-and-install-doc
5001 (lambda* (#:key outputs #:allow-other-keys)
5002 (let ((doc (string-append (assoc-ref outputs "doc")
5003 "/share/doc/robotframework")))
5004 (invoke "invoke" "library-docs" "all")
5005 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
5006 (mkdir-p doc)
5007 (with-directory-excursion "dist"
5008 (define user-guide-dir
5009 (match (scandir "." (cut string-prefix?
5010 "robotframework-userguide-" <>))
5011 ((dir) dir)
5012 (_ (error "could not find the user guide directory"))))
5013 (copy-recursively user-guide-dir doc)))))
5014 (replace 'check
5015 (lambda* (#:key native-inputs inputs tests?
5016 #:allow-other-keys)
5017 (when tests?
5018 ;; Some tests require timezone data. Otherwise, they
5019 ;; look up /etc/localtime, which doesn't exist, and
5020 ;; fail with:
5021 ;;
5022 ;; OverflowError: mktime argument out of range
5023 (setenv "TZDIR"
5024 (search-input-directory
5025 (or native-inputs inputs) "share/zoneinfo"))
5026 (setenv "TZ" "Europe/Paris")
5027
5028 (format #t "Running unit tests...~%")
5029 (invoke "utest/run.py")
5030
5031 (format #t "Running acceptance tests...~%")
5032 (invoke "xvfb-run" "atest/run.py")))))))
5033 (native-inputs
5034 (list python-docutils
5035 python-jsonschema-next
5036 python-invoke
5037 python-lxml
5038 python-pygments
5039 python-pyyaml
5040 python-rellu
5041 `(,python "tk") ;used when building the HTML doc
5042 python-xmlschema
5043 scrot ;for taking screenshots
5044 tzdata-for-tests
5045 xvfb-run))
5046 (outputs '("out" "doc"))
5047 (home-page "https://robotframework.org")
5048 (synopsis "Generic automation framework")
5049 (description "Robot Framework is a generic automation framework for
5050acceptance testing, acceptance test driven development (ATDD), and robotic
5051process automation (RPA).")
5052 (license license:asl2.0)))
5053
5054(define-public python-robotframework-datadriver
5055 (package
5056 (name "python-robotframework-datadriver")
5057 (version "1.6.1")
5058 (source
5059 (origin
5060 (method url-fetch)
5061 (uri (pypi-uri "robotframework-datadriver" version))
5062 (sha256
5063 (base32 "0mcyr3v98nvfnvffy096qp3jqslas7l8hh0j00lpi0mp12cd0qk9"))))
5064 (build-system python-build-system)
5065 (arguments
5066 `(#:phases
5067 (modify-phases %standard-phases
5068 (add-before 'check 'skip-problematic-tests
5069 (lambda _
5070 ;; The test file 'tab-csv-file-name.tsv' contains special
5071 ;; characters for which there is no locale in the build
5072 ;; environment, causing one test to fail.
5073 (delete-file-recursively "atest/TestCases/csv_reader_config")))
5074 (replace 'check
5075 (lambda* (#:key tests? #:allow-other-keys)
5076 (when tests?
5077 (with-directory-excursion "atest"
5078 (invoke "sh" "run_atest.sh"))))))))
5079 (native-inputs (list python-docutils
5080 python-robotframework-stacktrace))
5081 (propagated-inputs (list python-openpyxl
5082 python-pandas
5083 python-pygments
5084 python-robotframework))
5085 (home-page "https://github.com/Snooz82/robotframework-datadriver")
5086 (synopsis "Data-driven test extension for Robot Framework")
5087 (description "DataDriver is a data-driven extension for Robot Framework.
5088DataDriver uses the Listener Interface of Robot Framework to create new test
5089cases based on a data file that contains the test data. DataDriver supports
5090data files in the CSV, XLS or XLSX formats.")
5091 (license license:asl2.0)))
5092
5093(define-public python-robotframework-lint
5094 ;; There is no properly tagged release; the commit below seems to correspond
5095 ;; to the 0.9 stable release available from PyPI. The tests are not
5096 ;; included in the PyPI archive, so we fetch the sources from the upstream
5097 ;; Git repo.
5098 (let ((commit "b0619ac58a8b1be125f9c98856a664594614570f")
5099 (revision "0"))
5100 (package
5101 (name "python-robotframework-lint")
5102 (version (git-version "1.1" ;version taken from 'rflint/version.py'
5103 revision commit))
5104 (source
5105 (origin
5106 (method git-fetch)
5107 (uri (git-reference
5108 (url "https://github.com/boakley/robotframework-lint")
5109 (commit commit)))
5110 (file-name (git-file-name name version))
5111 (sha256
5112 (base32
5113 "180npmvzqync25b2scs878gv8q4y17dsinxyjcc10bw22msfap6b"))))
5114 (build-system python-build-system)
5115 (arguments
5116 `(#:phases
5117 (modify-phases %standard-phases
5118 (replace 'check
5119 (lambda _
5120 (invoke "python" "-m" "robot" "-A"
5121 "tests/conf/default.args" "tests"))))))
5122 (propagated-inputs
5123 (list python-robotframework))
5124 (home-page "https://github.com/boakley/robotframework-lint/")
5125 (synopsis "Static analysis tool (linter) for Robot Framework")
5126 (description "This package provides the @code{rflint} command-line
5127utility, a static analysis tool (linter) for Robot Framework source files.")
5128 (license license:asl2.0))))
5129
5130(define-public python-robotframework-pabot
5131 (package
5132 (name "python-robotframework-pabot")
5133 (version "2.7.0")
5134 (source
5135 (origin
5136 ;; There are no tests in the PyPI archive.
5137 (method git-fetch)
5138 (uri (git-reference
5139 (url "https://github.com/mkorpela/pabot")
5140 (commit version)))
5141 (file-name (git-file-name name version))
5142 (sha256
5143 (base32
5144 "0246vvyaxax0nzlrffvp9vg6mh5jmvbbm87azignf0gakjidr7nn"))))
5145 (build-system python-build-system)
5146 (arguments
5147 (list
5148 #:phases #~(modify-phases %standard-phases
5149 (replace 'check
5150 (lambda* (#:key tests? #:allow-other-keys)
5151 (when tests?
5152 (invoke "pytest" "-vv" "tests")))))))
5153 (propagated-inputs
5154 (list python-robotframework python-robotframework-stacktrace))
5155 (native-inputs
5156 (list python-pytest))
5157 (home-page "https://pabot.org")
5158 (synopsis "Parallel test runner for Robot Framework")
5159 (description "Pabot is a parallel executor for Robot Framework tests.")
5160 (license license:asl2.0)))
5161
5162(define-public python-sshtunnel
5163 (package
5164 (name "python-sshtunnel")
5165 (version "0.4.0")
5166 (source (origin
5167 (method url-fetch)
5168 (uri (pypi-uri "sshtunnel" version))
5169 (sha256
5170 (base32
5171 "1z7rdgpp9m36ysh9pfzrn3vyiaj05bkjvcjdhj8vz0fvfjkhxjz7"))))
5172 (build-system python-build-system)
5173 (arguments
5174 `(#:phases
5175 (modify-phases %standard-phases
5176 (replace 'check
5177 (lambda* (#:key tests? #:allow-other-keys)
5178 (when tests? (invoke "pytest" "-vv" "tests")))))))
5179 (propagated-inputs (list python-paramiko))
5180 (native-inputs (list openssh python-pytest))
5181 (home-page "https://github.com/pahaz/sshtunnel")
5182 (synopsis "Python SSH tunnels library")
5183 (description "@code{sshtunnel} is a Python module for easily creating SSH
5184tunnels in the background, using Python.")
5185 (license license:expat)))
5186
5187(define-public python-robotframework-sshtunnellibrary
5188 (package
5189 (name "python-robotframework-sshtunnellibrary")
5190 (version "1.0.0")
5191 (source (origin
5192 (method git-fetch)
5193 (uri (git-reference
5194 (url "https://github.com/C-Squad/robotframework-sshtunnellibrary")
5195 (commit (string-append "v" version))))
5196 (file-name (git-file-name name version))
5197 (sha256
5198 (base32
5199 "1vkkmkb8iql13xpbyj4hvnnmfgzqlr8rffgryp2082cadb3w7xrd"))))
5200 (build-system python-build-system)
5201 (arguments
5202 (list #:phases #~(modify-phases %standard-phases
5203 (replace 'check
5204 (lambda* (#:key tests? #:allow-other-keys)
5205 (when tests?
5206 (invoke "python" "-m" "unittest"
5207 "discover" "-s" "test")))))))
5208 (propagated-inputs (list python-robotframework python-sshtunnel))
5209 (home-page "https://github.com/C-Squad/robotframework-sshtunnellibrary")
5210 (synopsis "Alternative RobotFramework library for SSH tunnels")
5211 (description "SSHTunnelLibrary is an alternative RobotFramework
5212library (to the more official one that comes from the
5213@code{robotframework-sshlibrary} package) to support SSH tunnels.")
5214 (license license:asl2.0)))
5215
5216(define-public python-robotframework-stacktrace
5217 (package
5218 (name "python-robotframework-stacktrace")
5219 (version "0.4.1")
5220 (source
5221 (origin
5222 (method url-fetch)
5223 (uri (pypi-uri "robotframework-stacktrace" version))
5224 (sha256
5225 (base32 "19gnwr7da1zz9clhwsmvqfjf02d195i61lzpq4253dcsgrpb6v79"))))
5226 (build-system python-build-system)
5227 (arguments
5228 ;; The test suite fails (see:
5229 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
5230 `(#:tests? #f
5231 #:phases
5232 (modify-phases %standard-phases
5233 (replace 'check
5234 (lambda* (#:key tests? #:allow-other-keys)
5235 (when tests?
5236 (with-directory-excursion "tests"
5237 (invoke "python" "-m" "robot" "."))))))))
5238 (propagated-inputs (list python-robotframework))
5239 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
5240 (synopsis "Robot Framework listener to print a stack trace on error")
5241 (description "StackTrace is a Robot Framework listener that prints a stack
5242trace directly to the terminal to ease debugging.")
5243 (license license:asl2.0)))
5244
5245(define-public python-robotframework-sshlibrary
5246 (package
5247 (name "python-robotframework-sshlibrary")
5248 (version "3.8.0")
5249 ;; There are no tests in the PyPI archive.
5250 (source
5251 (origin
5252 (method git-fetch)
5253 (uri (git-reference
5254 (url "https://github.com/robotframework/SSHLibrary")
5255 (commit (string-append "v" version))))
5256 (file-name (git-file-name name version))
5257 (sha256
5258 (base32
5259 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
5260 (patches (search-patches
5261 "python-robotframework-sshlibrary-rf5-compat.patch"))))
5262 (build-system python-build-system)
5263 (arguments
5264 `(#:phases
5265 (modify-phases %standard-phases
5266 (add-before 'build 'build-and-install-doc
5267 (lambda* (#:key outputs #:allow-other-keys)
5268 (let ((doc (string-append
5269 (assoc-ref outputs "doc")
5270 "/share/doc/robotframework-sshlibrary")))
5271 (invoke "chmod" "-R" "+w" "docs")
5272 (invoke "invoke" "kw-docs" "project-docs")
5273 (mkdir-p doc)
5274 (for-each delete-file (find-files "docs" "\\.rst"))
5275 (copy-recursively "docs" doc))))
5276 (replace 'check
5277 (lambda* (#:key tests? #:allow-other-keys)
5278 (when tests?
5279 ;; Some tests require an SSH server; we remove them.
5280 (delete-file "utest/test_client_api.py")
5281 (delete-file "utest/test_scp.py")
5282 (invoke "python" "utest/run.py")))))))
5283 (propagated-inputs
5284 (list python-robotframework python-paramiko python-scp))
5285 (native-inputs
5286 (list openssh
5287 which
5288 ;; To generate the documentation
5289 python-docutils
5290 python-invoke
5291 python-pygments
5292 python-rellu))
5293 (outputs '("out" "doc"))
5294 (home-page "https://github.com/robotframework/SSHLibrary")
5295 (synopsis "Robot Framework library for SSH and SFTP")
5296 (description "SSHLibrary is a Robot Framework library providing support
5297for SSH and SFTP. It has the following main usages:
5298@itemize @bullet
5299@item Executing commands on the remote machine, either blocking or non-blocking.
5300@item Writing and reading in an interactive shell.
5301@item Transferring files and directories over SFTP.
5302@item Ensuring that files and directories exist on the remote machine.
5303@end itemize")
5304 (license license:asl2.0)))
5305
5306(define-public python-robotframework-pythonlibcore
5307 (package
5308 (name "python-robotframework-pythonlibcore")
5309 (version "3.0.0")
5310 (source
5311 (origin
5312 (method git-fetch) ;no tests in pypi archive
5313 (uri (git-reference
5314 (url "https://github.com/robotframework/PythonLibCore")
5315 (commit (string-append "v" version))))
5316 (file-name (git-file-name name version))
5317 (sha256
5318 (base32
5319 "0v89v8va65l6inh0fb34qgxawx6p29pnrmw4n5941yzdi3804rc4"))))
5320 (build-system python-build-system)
5321 (arguments
5322 `(#:phases (modify-phases %standard-phases
5323 (replace 'check
5324 (lambda* (#:key tests? #:allow-other-keys)
5325 (when tests?
5326 (invoke "utest/run.py")))))))
5327 (native-inputs
5328 (list python-pytest python-pytest-cov python-pytest-mockito
5329 python-robotframework))
5330 (home-page "https://github.com/robotframework/PythonLibCore")
5331 (synopsis "Robot Framework Python library tools")
5332 (description "PythonLibCore provides tools for creating larger test
5333libraries for Robot Framework using Python. The Robot Framework hybrid and
5334dynamic library APIs give more flexibility for library than the static library
5335API, but they also set requirements for libraries which need to be implemented
5336in the library side. PythonLibCore eases the problem by providing a simpler
5337interface and by handling all the requirements towards the Robot Framework
5338library APIs.")
5339 (license license:asl2.0)))
5340
5341(define-public python-robotframework-seleniumlibrary
5342 (package
5343 (name "python-robotframework-seleniumlibrary")
5344 (version "5.1.3")
5345 (source
5346 (origin
5347 (method url-fetch)
5348 (uri (pypi-uri "robotframework-seleniumlibrary" version))
5349 (sha256
5350 (base32 "1dihrbcid9i7daw2qy6h3xsvwaxzmyip820jw5z11n60qrl006pm"))))
5351 (build-system python-build-system)
5352 ;; XXX: Tests require ungoogled-chromium, but the chromium module would
5353 ;; introduce a cycle if imported here.
5354 (propagated-inputs
5355 (list python-robotframework python-robotframework-pythonlibcore
5356 python-selenium))
5357 (home-page "https://github.com/robotframework/SeleniumLibrary")
5358 (synopsis "Web testing library for Robot Framework")
5359 (description "SeleniumLibrary is a web testing library for Robot Framework
5360that utilizes the Selenium tool internally.")
5361 (license license:asl2.0)))
5362
5363(define-public python-robotframework-seleniumscreenshots
5364 (package
5365 (name "python-robotframework-seleniumscreenshots")
5366 (version "0.9.5")
5367 (source
5368 (origin
5369 (method url-fetch)
5370 (uri (pypi-uri "robotframework-seleniumscreenshots" version))
5371 (sha256
5372 (base32 "05qv323hvjmy62h33ryrjaa9k1hyvp8hq5qnj8j1x3ap2ci3q3s0"))))
5373 (build-system python-build-system)
5374 (arguments
5375 ;; XXX: The tests require a relatively complicated setup configured in
5376 ;; their CI with Nix (!).
5377 `(#:tests? #f))
5378 (propagated-inputs
5379 (list python-robotframework python-robotframework-seleniumlibrary))
5380 (home-page "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
5381 (synopsis "Robot Framework library for annotating and cropping screenshots")
5382 (description "The SeleniumScreenshots library for Robot Framework provides
5383keywords for annotating and cropping screenshots taken with SeleniumLibrary.
5384It is useful for scripting automatically updated screenshots for documentation
5385or for visual regression testing purposes.")
5386 (license license:bsd-3)))
5387
5388(define-public python-rstr
5389 (package
5390 (name "python-rstr")
5391 (version "2.2.6")
5392 (source
5393 (origin
5394 (method url-fetch)
5395 (uri (pypi-uri "rstr" version))
5396 (sha256
5397 (base32
5398 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
5399 (build-system python-build-system)
5400 (home-page "https://github.com/leapfrogonline/rstr")
5401 (synopsis "Generate random strings in Python")
5402 (description "This package provides a python module for generating
5403random strings of various types. It could be useful for fuzz testing,
5404generating dummy data, or other applications. It has no dependencies
5405outside the standard library.")
5406 (license license:bsd-3)))
5407
5408(define-public python-scp
5409 (package
5410 (name "python-scp")
5411 (version "0.13.3")
5412 (source
5413 (origin
5414 (method url-fetch)
5415 (uri (pypi-uri "scp" version))
5416 (sha256
5417 (base32 "1m2v09m407p097cy3xy5rxicqfzrqjwf8v5rd4qhfqkk7lllimwb"))))
5418 (build-system python-build-system)
5419 (arguments
5420 '(#:tests? #f)) ;tests require an SSH server
5421 (propagated-inputs
5422 (list python-paramiko))
5423 (home-page "https://github.com/jbardin/scp.py")
5424 (synopsis "SCP protocol module for Python and Paramiko")
5425 (description "The scp module extends the Paramiko library to send and
5426receive files via the SCP1 protocol, as implemented by the OpenSSH
5427@command{scp} program.")
5428 (license license:gpl2+)))
5429
5430(define-public python-rst.linker
5431 (package
5432 (name "python-rst.linker")
5433 (version "1.11")
5434 (source
5435 (origin
5436 (method url-fetch)
5437 (uri (pypi-uri "rst.linker" version))
5438 (sha256
5439 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
5440 (build-system python-build-system)
5441 (propagated-inputs
5442 (list python-dateutil python-six))
5443 (native-inputs
5444 (list python-setuptools-scm))
5445 ;; Test would require path.py, which would introduce a cyclic dependence.
5446 (arguments `(#:tests? #f))
5447 ;; Note: As of version 1.7 the documentation is not worth building.
5448 (home-page "https://github.com/jaraco/rst.linker")
5449 (synopsis "Sphinx plugin to add links and timestamps")
5450 (description "rst.linker automatically replaces text by a
5451reStructuredText external reference or timestamps. It's primary purpose is to
5452augment the changelog, but it can be used for other documents, too.")
5453 (license license:expat)))
5454
5455(define-public python-sshpubkeys
5456 (package
5457 (name "python-sshpubkeys")
5458 (version "3.1.0")
5459 (home-page "https://github.com/ojarva/python-sshpubkeys")
5460 (source (origin
5461 (method git-fetch)
5462 (uri (git-reference
5463 (url home-page)
5464 (commit (string-append "v" version))))
5465 (file-name (git-file-name name version))
5466 (sha256
5467 (base32
5468 "1h4gwmcfn84kkqh83km1vfz8sc5kr2g4gzgzmr8gz704jmqiv7nq"))))
5469 (build-system python-build-system)
5470 (propagated-inputs
5471 (list python-cryptography python-ecdsa))
5472 (synopsis "OpenSSH public key parser")
5473 (description
5474 "This package provides a library for parsing and validating OpenSSH
5475public key files.")
5476 (license license:bsd-3)))
5477
5478(define-public python-feedgenerator
5479 (package
5480 (name "python-feedgenerator")
5481 (version "1.9")
5482 (source
5483 (origin
5484 (method url-fetch)
5485 (uri (pypi-uri "feedgenerator" version))
5486 (sha256
5487 (base32
5488 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
5489 (modules '((guix build utils)))
5490 (snippet
5491 '(begin
5492 ;; Remove pre-compiled .pyc files from source.
5493 (for-each delete-file-recursively
5494 (find-files "." "__pycache__" #:directories? #t))
5495 (for-each delete-file (find-files "." "\\.pyc$"))
5496 #t))))
5497 (build-system python-build-system)
5498 (propagated-inputs
5499 (list python-pytz python-six))
5500 (home-page "https://github.com/getpelican/feedgenerator")
5501 (synopsis
5502 "Standalone version of Django's Atom/RSS feed generator")
5503 (description
5504 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
5505which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
5506 (license license:bsd-3)))
5507
5508(define-public python-lsp-jsonrpc
5509 (package
5510 (name "python-lsp-jsonrpc")
5511 (version "1.0.0")
5512 (source
5513 (origin
5514 (method url-fetch)
5515 (uri (pypi-uri "python-lsp-jsonrpc" version))
5516 (sha256
5517 (base32
5518 "1gb0fsamxndhplx25v8m0b3k7aknzy454fpa0qsqsqnv6c3igv3v"))))
5519 (build-system python-build-system)
5520 (native-inputs
5521 (list python-mock python-pytest))
5522 (propagated-inputs
5523 (list python-ujson))
5524 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
5525 (synopsis "JSON RPC 2.0 server library")
5526 (description
5527 "This package provides a JSON RPC 2.0 server library for Python.")
5528 (license license:expat)))
5529
5530(define-public python-jsonrpc-server
5531 (deprecated-package "python-jsonrpc-server" python-lsp-jsonrpc))
5532
5533(define-public python-pydantic
5534 (package
5535 (name "python-pydantic")
5536 (version "1.9.1")
5537 (source
5538 (origin
5539 (method git-fetch)
5540 (uri (git-reference
5541 (url "https://github.com/samuelcolvin/pydantic")
5542 (commit (string-append "v" version))))
5543 (file-name (git-file-name name version))
5544 (sha256
5545 (base32 "1406kgppqa7524mxllsipj7gb8fn7pwf51l11lqik59xjhsfv94f"))))
5546 (build-system python-build-system)
5547 (arguments
5548 '(#:phases
5549 (modify-phases %standard-phases
5550 (replace 'check
5551 (lambda _ (invoke "pytest" "-vv"))))))
5552 (native-inputs
5553 (list python-pytest python-pytest-mock))
5554 (propagated-inputs
5555 (list python-typing-extensions))
5556 (home-page "https://github.com/samuelcolvin/pydantic")
5557 (synopsis "Python data validation and settings management")
5558 (description
5559 "Pydantic enforces type hints at runtime, and provides user friendly
5560errors when data is invalid.")
5561 (license license:expat)))
5562
5563(define-public python-pydantic-cli
5564 (package
5565 (name "python-pydantic-cli")
5566 (version "4.3.0")
5567 (source
5568 (origin
5569 (method git-fetch) ;for tests
5570 (uri (git-reference
5571 (url "https://github.com/mpkocher/pydantic-cli")
5572 (commit (string-append "v" version))))
5573 (file-name (git-file-name name version))
5574 (sha256
5575 (base32
5576 "1v4dx6n60rbsan5zpw2rgdih7lb3h0xclagn1p6zfwl0r9l9cvym"))))
5577 (build-system python-build-system)
5578 (propagated-inputs
5579 (list python-pydantic))
5580 (native-inputs
5581 (list python-black
5582 python-mypy
5583 python-pytest))
5584 (home-page "https://github.com/mpkocher/pydantic-cli")
5585 (synopsis "Turn Pydantic defined data models into CLI tools")
5586 (description
5587 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
5588Interfaces} via data models provided in the JSON format.")
5589 (license license:expat)))
5590
5591(define-public python-pydocstyle
5592 (package
5593 (name "python-pydocstyle")
5594 (version "3.0.0")
5595 (source
5596 (origin
5597 (method url-fetch)
5598 (uri (pypi-uri "pydocstyle" version))
5599 (sha256
5600 (base32
5601 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
5602 (build-system python-build-system)
5603 (propagated-inputs
5604 (list python-six python-snowballstemmer))
5605 (home-page
5606 "https://github.com/PyCQA/pydocstyle/")
5607 (synopsis "Python docstring style checker")
5608 (description
5609 "This package provides a style checker for the Python Language
5610Server (PLS).")
5611 (license license:expat)))
5612
5613(define-public python-lsp-server
5614 (package
5615 (name "python-lsp-server")
5616 (version "1.3.3")
5617 (source
5618 (origin
5619 (method url-fetch)
5620 (uri (pypi-uri "python-lsp-server" version))
5621 (sha256
5622 (base32
5623 "0h6wxzmm6qjfwkkn3mnzn1fpmcp23fpbk74bi8p540q1nzccqj0v"))))
5624 (build-system python-build-system)
5625 (arguments
5626 `(#:phases
5627 (modify-phases %standard-phases
5628 (add-before 'check 'set-HOME
5629 (lambda _ (setenv "HOME" "/tmp")))
5630 (replace 'check
5631 (lambda _
5632 ;; Disable failing test.
5633 (invoke "python" "-m" "pytest" "-k"
5634 "not test_pyqt_completion"))))))
5635 (propagated-inputs
5636 (list python-autopep8
5637 python-pydocstyle
5638 python-flake8
5639 python-future
5640 python-jedi
5641 python-lsp-jsonrpc
5642 python-pluggy
5643 python-pycodestyle
5644 python-pyflakes
5645 python-rope
5646 python-ujson
5647 python-yapf))
5648 (native-inputs
5649 (list python-coverage
5650 python-flaky
5651 python-matplotlib
5652 python-mock
5653 python-numpy
5654 python-pandas
5655 python-pylint
5656 python-pytest
5657 python-pytest-cov
5658 python-versioneer))
5659 (home-page "https://github.com/python-lsp/python-lsp-server")
5660 (synopsis "Python implementation of the Language Server Protocol")
5661 (description
5662"The Python Language Server @command{pylsp} is an implementation of the
5663Python 3 language specification for the Language Server Protocol (LSP).
5664This tool is used in text editing environments to provide a complete
5665and integrated feature-set for programming Python effectively.")
5666 (license license:expat)))
5667
5668(define-public python-language-server
5669 (deprecated-package "python-language-server" python-lsp-server))
5670
5671(define-public python-pathspec
5672 (package
5673 (name "python-pathspec")
5674 (version "0.9.0")
5675 (source
5676 (origin
5677 (method url-fetch)
5678 (uri (pypi-uri "pathspec" version))
5679 (sha256
5680 (base32
5681 "1cdbdb3s6ldnjpwbi0bgl0xlmw4mbfxk08bbdxc3srx26na4jr75"))))
5682 (build-system python-build-system)
5683 (home-page "https://github.com/cpburnz/python-path-specification")
5684 (synopsis "Utility library for gitignore style pattern matching of file paths")
5685 (description
5686 "This package provides a utility library for gitignore style pattern
5687matching of file paths.")
5688 (license license:mpl2.0)))
5689
5690(define-public python-black
5691 (package
5692 (name "python-black")
5693 (version "22.3.0")
5694 (source
5695 (origin
5696 (method url-fetch)
5697 (uri (pypi-uri "black" version))
5698 (sha256
5699 (base32
5700 "0yfahlqc7dsdp1js0cbv706apldnfnlbal9b53cww8n0hs40n0im"))))
5701 (build-system python-build-system)
5702 (arguments
5703 `(#:phases
5704 (modify-phases %standard-phases
5705 (add-after 'patch-source-shebangs 'use-absolute-file-names
5706 (lambda* (#:key native-inputs inputs #:allow-other-keys)
5707 (let* ((inpts (or native-inputs inputs))
5708 (python3 (search-input-file inpts "/bin/python3")))
5709 (substitute* (find-files "tests" "\\.py$")
5710 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
5711 (string-append "#!" python3 (if (string? minor-version)
5712 minor-version
5713 "")))))))
5714 (replace 'check
5715 (lambda* (#:key tests? #:allow-other-keys)
5716 (when tests? (invoke "pytest" "-vv")))))))
5717 (propagated-inputs
5718 (list python-click
5719 python-attrs
5720 python-appdirs
5721 python-pathspec
5722 python-mypy-extensions
5723 python-platformdirs
5724 python-regex
5725 python-tomli
5726 python-typed-ast
5727 python-typing-extensions))
5728 (native-inputs
5729 (list python-pytest python-pytest-aiohttp python-setuptools-scm))
5730 (home-page "https://github.com/psf/black")
5731 (synopsis "The uncompromising code formatter")
5732 (description "Black is the uncompromising Python code formatter.")
5733 (license license:expat)))
5734
5735(define-public python-black-macchiato
5736 (package
5737 (name "python-black-macchiato")
5738 (version "1.3.0")
5739 (source
5740 (origin
5741 (method url-fetch)
5742 (uri (pypi-uri "black-macchiato" version))
5743 (sha256
5744 (base32
5745 "1drp5p697ni1xn5y2lbjpalgpkzy2i4cyxjj5pk4dxr0vk97dd7i"))))
5746 (build-system python-build-system)
5747 (propagated-inputs
5748 (list python-black))
5749 (home-page "https://github.com/wbolster/black-macchiato")
5750 (synopsis "Partial @code{python-black} formatting")
5751 (description
5752 "This package is built on top the @{python-black} code formatter to
5753enable formatting of partial files.")
5754 (license license:bsd-3)))
5755
5756(define-public python-blinker
5757 (package
5758 (name "python-blinker")
5759 (version "1.4")
5760 (source
5761 (origin
5762 (method url-fetch)
5763 (uri (pypi-uri "blinker" version))
5764 (sha256
5765 (base32
5766 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
5767 (build-system python-build-system)
5768 (home-page "https://pythonhosted.org/blinker/")
5769 (synopsis "Fast, simple object-to-object and broadcast signaling")
5770 (description
5771 "Blinker provides a fast dispatching system that allows any number of
5772interested parties to subscribe to events, or \"signals\".")
5773 (license license:expat)))
5774
5775(define-public pelican
5776 (package
5777 (name "pelican")
5778 (version "4.7.2")
5779 (source
5780 (origin
5781 (method url-fetch)
5782 (uri (pypi-uri "pelican" version))
5783 (sha256
5784 (base32 "0m1kndc98hhnlq0yl05f4lzccw555pkxnrajj6lks18yh491kw8w"))))
5785 (build-system python-build-system)
5786 (inputs
5787 (list python-blinker
5788 python-dateutil
5789 ;; Ignoring `guix lint` warning as python-docutils is used to support
5790 ;; reStructuredText processing at runtime.
5791 python-docutils
5792 python-feedgenerator
5793 python-jinja2
5794 python-markdown
5795 python-pygments
5796 python-pytz
5797 python-rich
5798 python-unidecode))
5799 (home-page "https://blog.getpelican.com/")
5800 (arguments
5801 `(;; XXX Requires a lot more packages to do unit tests :P
5802 #:tests? #f))
5803 (synopsis "Python-based static site publishing system")
5804 (description
5805 "Pelican is a tool to generate a static blog from reStructuredText,
5806Markdown input files, and more. Pelican uses Jinja2 for templating
5807and is very extensible.")
5808 (license license:agpl3+)))
5809
5810(define-public mallard-ducktype
5811 (package
5812 (name "mallard-ducktype")
5813 (version "1.0.2")
5814 (source
5815 (origin
5816 (method git-fetch)
5817 ;; git-reference because tests are not included in pypi source tarball
5818 ;; https://issues.guix.gnu.org/issue/36755#2
5819 (uri (git-reference
5820 (url "https://github.com/projectmallard/mallard-ducktype")
5821 (commit version)))
5822 (file-name (git-file-name name version))
5823 (sha256
5824 (base32
5825 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
5826 (build-system python-build-system)
5827 (arguments
5828 '(#:phases
5829 (modify-phases %standard-phases
5830 (replace 'check
5831 (lambda _
5832 (with-directory-excursion "tests"
5833 (invoke "sh" "runtests")))))))
5834 (home-page "http://projectmallard.org")
5835 (synopsis "Convert Ducktype to Mallard documentation markup")
5836 (description
5837 "Ducktype is a lightweight syntax that can represent all the semantics
5838of the Mallard XML documentation system. Ducktype files can be converted to
5839Mallard using the @command{ducktype} tool. The yelp-tools package
5840provides additional functionality on the produced Mallard documents.")
5841 (license license:expat)))
5842
5843(define-public python-cython
5844 (package
5845 (name "python-cython")
5846 (version "0.29.32")
5847 (source
5848 (origin
5849 (method url-fetch)
5850 (uri (pypi-uri "Cython" version))
5851 (sha256
5852 (base32 "1xqsihpqnfal29nb5kmw8z71nd4jbsnbz7p3lkr094xpb13wycw7"))))
5853 (build-system python-build-system)
5854 ;; we need the full python package and not just the python-wrapper
5855 ;; because we need libpython3.3m.so
5856 (inputs
5857 (list python))
5858 (arguments
5859 `(#:phases
5860 (modify-phases %standard-phases
5861 (add-before 'check 'set-HOME
5862 ;; some tests require access to "$HOME/.cython"
5863 (lambda _ (setenv "HOME" "/tmp")))
5864 (replace 'check
5865 (lambda* (#:key tests? #:allow-other-keys)
5866 ;; Disable compiler optimizations to greatly reduce the running
5867 ;; time of the test suite.
5868 (setenv "CFLAGS" "-O0")
5869
5870 (when tests?
5871 (invoke "python" "runtests.py" "-vv"
5872 "-j" (number->string (parallel-job-count))
5873 ;; XXX: On 32-bit architectures, running the parallel tests
5874 ;; fails on many-core systems, see
5875 ;; <https://github.com/cython/cython/issues/2807>.
5876 ,@(if (not (target-64bit?))
5877 '("-x" "run.parallel")
5878 '())
5879 ;; This test fails when running on 24 cores.
5880 "-x" "cpp_stl_conversion")))))))
5881 (home-page "https://cython.org/")
5882 (synopsis "C extensions for Python")
5883 (description "Cython is an optimising static compiler for both the Python
5884programming language and the extended Cython programming language. It makes
5885writing C extensions for Python as easy as Python itself.")
5886 (license license:asl2.0)))
5887
5888(define-public python-cython-3
5889 (package
5890 (inherit python-cython)
5891 ;; Cython 3 is not officially released yet, so distinguish the name
5892 ;; for now.
5893 (name "python-cython-next")
5894 (version "3.0.0a10")
5895 (source (origin
5896 (method url-fetch)
5897 (uri (pypi-uri "Cython" version))
5898 (sha256
5899 (base32
5900 "17fqacrpis05w1rpi7d7sbimrk20xf8h6d3vrz5nf6ix3899abil"))))
5901 (properties '())))
5902
5903;; NOTE: when upgrading numpy please make sure that python-numba,
5904;; python-pandas and python-scipy still build, as these three packages are
5905;; often used together.
5906(define-public python-numpy
5907 (package
5908 (name "python-numpy")
5909 (version "1.21.6")
5910 (source
5911 (origin
5912 (method url-fetch)
5913 (uri (string-append
5914 "https://github.com/numpy/numpy/releases/download/v"
5915 version "/numpy-" version ".tar.gz"))
5916 (sha256
5917 (base32
5918 "0b0c5y35rd3mvwfk5is1d5ppfw9nl4d2rgx9xkwh1p0w394wdvyl"))))
5919 (build-system python-build-system)
5920 (arguments
5921 (list
5922 #:modules '((guix build utils)
5923 (guix build python-build-system)
5924 (ice-9 format))
5925 #:phases
5926 #~(modify-phases %standard-phases
5927 (add-before 'build 'parallelize-build
5928 (lambda _
5929 (setenv "NPY_NUM_BUILD_JOBS"
5930 (number->string (parallel-job-count)))))
5931 (add-before 'build 'configure-blas
5932 (lambda* (#:key inputs #:allow-other-keys)
5933 (call-with-output-file "site.cfg"
5934 (lambda (port)
5935 (format port
5936 "\
5937[openblas]
5938libraries = openblas
5939library_dirs = ~a/lib
5940include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
5941 (add-before 'build 'fix-executable-paths
5942 (lambda* (#:key inputs #:allow-other-keys)
5943 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
5944 ;; instead of /bin/sh.
5945 (substitute* "numpy/distutils/exec_command.py"
5946 (("'/bin/sh'")
5947 (format #f "~s" (search-input-file inputs "bin/bash"))))
5948 ;; Don't try to call '/bin/true' specifically.
5949 (substitute* "numpy/core/tests/test_cpu_features.py"
5950 (("/bin/true") (search-input-file inputs "bin/true")))))
5951 (replace 'check
5952 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
5953 (when tests?
5954 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
5955 "-j" (number->string (parallel-job-count))
5956 ;; Contrary to scipy, the runtests.py script of numpy
5957 ;; does *not* automatically provide -n when -j is used
5958 ;; (see: https://github.com/numpy/numpy/issues/21359).
5959 "--" "-n" (number->string (parallel-job-count))
5960 "-k" (string-append
5961 ;; These tests may fail on 32-bit systems (see:
5962 ;; https://github.com/numpy/numpy/issues/18387).
5963 "not test_float_remainder_overflow "
5964 "and not test_pareto"
5965 ;; These tests seem to fail on machines without
5966 ;; an FPU is still under investigation upstream.
5967 ;; https://github.com/numpy/numpy/issues/20635
5968 #$@(if (target-riscv64?)
5969 `(" and not test_float"
5970 " and not test_fpclass")
5971 '())))))))))
5972 (native-inputs
5973 (list python-cython
5974 python-hypothesis-next
5975 python-pytest
5976 python-pytest-xdist
5977 gfortran))
5978 (inputs (list bash openblas))
5979 (home-page "https://numpy.org")
5980 (synopsis "Fundamental package for scientific computing with Python")
5981 (description "NumPy is the fundamental package for scientific computing
5982with Python. It contains among other things: a powerful N-dimensional array
5983object, sophisticated (broadcasting) functions, tools for integrating C/C++
5984and Fortran code, useful linear algebra, Fourier transform, and random number
5985capabilities.")
5986 (properties
5987 '((upstream-name . "numpy")))
5988 (license license:bsd-3)))
5989
5990(define-public python-numpy-next
5991 (package
5992 (inherit python-numpy)
5993 (name "python-numpy-next")
5994 (version "1.22.3")
5995 (source
5996 (origin
5997 (inherit (package-source python-numpy))
5998 (method url-fetch)
5999 (uri (string-append
6000 "https://github.com/numpy/numpy/releases/download/v"
6001 version "/numpy-" version ".tar.gz"))
6002 (sha256
6003 (base32
6004 "19dw91pqbqcniw2z57kiyqs1qp56g7kqy1bdyv664g8s62sc01m9"))))))
6005
6006(define-public python-numpy-documentation
6007 (package
6008 (inherit python-numpy)
6009 (name "python-numpy-documentation")
6010 (arguments
6011 (list
6012 #:tests? #f ;we're only generating the documentation
6013 #:phases
6014 #~(modify-phases %standard-phases
6015 (add-before 'build 'add-gnu-freefont-to-texmf
6016 (lambda _
6017 ;; XXX: The Sphinx-generated tex output specifies the GNU
6018 ;; FreeFont font to be searched via its extension, which uses
6019 ;; kpathsea instead of fontconfig and fail (see:
6020 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
6021 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
6022 ;; GUIX_TEXMF.
6023 (mkdir-p "texmf-dist/fonts/opentype/public")
6024 (symlink (string-append
6025 #$(this-package-native-input "font-gnu-freefont")
6026 "/share/fonts/opentype")
6027 (string-append
6028 (getcwd) "/"
6029 "texmf-dist/fonts/opentype/public/gnu-freefont"))
6030 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
6031 (getcwd) "/texmf-dist"))))
6032 (delete 'build)
6033 (replace 'install
6034 (lambda _
6035 (let* ((data (string-append #$output "/share"))
6036 (doc (string-append data "/doc/numpy"))
6037 (html (string-append doc "/html"))
6038 (info (string-append data "/info"))
6039 (sphinxopts (string-append
6040 "SPHINXOPTS=-j"
6041 (number->string (parallel-job-count)))))
6042 (with-directory-excursion "doc"
6043 ;; Do not treat warnings as errors.
6044 (substitute* "Makefile"
6045 ((" -WT ") " -T "))
6046 (setenv "HOME" "/tmp")
6047 ;; Build the PDF documentation.
6048 (invoke "make" "latex-build" sphinxopts)
6049 (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
6050 ;; Build the HTML documentation
6051 (invoke "make" "html" sphinxopts)
6052 ;; Build the Info documentation. The issues worked around
6053 ;; below can be tracked at
6054 ;; https://github.com/numpy/numpy/issues/12278.
6055 (substitute* "source/conf.py"
6056 ;; The root document should be "index", not "contents".
6057 (("\"contents\"") "'index'")
6058 ;; Disable Sphinx extensions that produce broken Texinfo.
6059 ((".*'numpydoc'.*") "")
6060 ((".*'sphinx.ext.autosummary'.*") ""))
6061 (invoke "make" "info" sphinxopts)
6062 ;; Install the HTML documentation.
6063 (mkdir-p html)
6064 (copy-recursively "build/html" html)
6065 ;; Install the PDF reference and user manuals.
6066 (install-file "build/latex/numpy-ref.pdf" doc)
6067 (install-file "build/latex/numpy-user.pdf" doc)
6068 ;; Install the info manual.
6069 (install-file "build/texinfo/numpy.info" info)
6070 (symlink (string-append html "/_images")
6071 (string-append info "/numpy-figures")))))))))
6072 (native-inputs
6073 (list font-gnu-freefont
6074 perl
6075 python-breathe
6076 python-ipython
6077 python-matplotlib
6078 python-numpy
6079 python-numpydoc
6080 python-pandas
6081 python-pydata-sphinx-theme
6082 python-scipy ;used by matplotlib
6083 python-sphinx-4
6084 python-sphinx-panels
6085 texinfo
6086 texlive-bin
6087 texlive-cbfonts
6088 texlive-cm-super
6089 texlive-greek-fontenc
6090 texlive-latex-expdlist
6091 texlive-polyglossia
6092 texlive-xindy))
6093 (inputs '())
6094 (propagated-inputs '())
6095 (synopsis "Documentation for the @code{python-numpy} package")
6096 (description "This package provides the complete NumPy documentation in
6097the Texinfo, HTML, and PDF formats.")))
6098
6099(define-public python-munch
6100 (package
6101 (name "python-munch")
6102 (version "2.5.0")
6103 (source
6104 (origin
6105 (method url-fetch)
6106 (uri (pypi-uri "munch" version))
6107 (sha256
6108 (base32
6109 "1lnvlic9g68hcmgdnv5bzp0nx2bf1kjclj54gx0s7nyl4ipmywrd"))))
6110 (build-system python-build-system)
6111 (native-inputs (list python-pbr python-pytest))
6112 (propagated-inputs (list python-six))
6113 (home-page "https://github.com/Infinidat/munch")
6114 (synopsis "Dot-accessible dictionary")
6115 (description "Munch is a dot-accessible dictionary similar to JavaScript
6116objects.")
6117 (license license:expat)))
6118
6119(define-public python-colormath
6120 (package
6121 (name "python-colormath")
6122 (version "3.0.0")
6123 (source
6124 (origin
6125 (method url-fetch)
6126 (uri (pypi-uri "colormath" version))
6127 (sha256
6128 (base32
6129 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
6130 (build-system python-build-system)
6131 (propagated-inputs
6132 (list python-networkx python-numpy))
6133 (home-page "https://github.com/gtaylor/python-colormath")
6134 (synopsis "Color math and conversion library")
6135 (description
6136 "This is a Python library for color math and conversions.")
6137 (license license:bsd-3)))
6138
6139(define-public python-sparse
6140 (package
6141 (name "python-sparse")
6142 (version "0.13.0")
6143 (source
6144 (origin
6145 (method url-fetch)
6146 (uri (pypi-uri "sparse" version))
6147 (sha256
6148 (base32
6149 "05ar1lhq1yy4nb78s7vpb1wz4ac4kj0r4lrd7yrf23kpmaacjpb8"))))
6150 (build-system python-build-system)
6151 (arguments
6152 `(#:phases
6153 (modify-phases %standard-phases
6154 (replace 'check
6155 (lambda* (#:key tests? #:allow-other-keys)
6156 (when tests?
6157 (invoke "python" "-m" "pytest" "-v")))))))
6158 (propagated-inputs
6159 (list python-numba python-numpy python-scipy))
6160 (native-inputs
6161 (list python-dask python-pytest python-pytest-black
6162 python-pytest-cov))
6163 (home-page "https://github.com/pydata/sparse/")
6164 (synopsis "Library for multi-dimensional sparse arrays")
6165 (description
6166 "This package implements sparse arrays of arbitrary dimension on top of
6167@code{numpy} and @code{scipy.sparse}. Sparse array is a matrix in which most
6168of the elements are zero. @code{python-sparse} generalizes the
6169@code{scipy.sparse.coo_matrix} and @code{scipy.sparse.dok_matrix} layouts, but
6170extends beyond just rows and columns to an arbitrary number of dimensions.
6171Additionally, this project maintains compatibility with the
6172@code{numpy.ndarray} interface rather than the @code{numpy.matrix} interface
6173used in @code{scipy.sparse}. These differences make this project useful in
6174certain situations where @code{scipy.sparse} matrices are not well suited, but
6175it should not be considered a full replacement. It lacks layouts that are not
6176easily generalized like @dfn{compressed sparse row/column}(CSR/CSC) and
6177depends on @code{scipy.sparse} for some computations.")
6178 (license license:bsd-3)))
6179
6180(define-public python-spectra
6181 (package
6182 (name "python-spectra")
6183 (version "0.0.11")
6184 (source
6185 (origin
6186 (method url-fetch)
6187 (uri (pypi-uri "spectra" version))
6188 (sha256
6189 (base32
6190 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
6191 (build-system python-build-system)
6192 (arguments
6193 `(#:phases
6194 (modify-phases %standard-phases
6195 (replace 'check
6196 (lambda _ (invoke "nosetests" "-v"))))))
6197 (propagated-inputs
6198 (list python-colormath))
6199 (native-inputs
6200 (list python-nose))
6201 (home-page "https://github.com/jsvine/spectra")
6202 (synopsis "Color scales and color conversion")
6203 (description
6204 "This package provides a Python library intended to make color math,
6205color scales, and color space conversion easy. It has support for:
6206
6207@enumerate
6208@item Color scales
6209@item Color ranges
6210@item Color blending
6211@item Brightening/darkening colors
6212@item Saturating/desaturating colors
6213@item Conversion to/from multiple color spaces.
6214@end enumerate\n")
6215 (license license:expat)))
6216
6217(define-public python-pyspnego
6218 (package
6219 (name "python-pyspnego")
6220 (version "0.1.6")
6221 (source
6222 (origin
6223 (method git-fetch) ;no tests in PyPI release
6224 (uri (git-reference
6225 (url "https://github.com/jborean93/pyspnego")
6226 (commit (string-append "v" version))))
6227 (file-name (git-file-name name version))
6228 (sha256
6229 (base32
6230 "0pfh2x0539f0k2qi2pbjm64b2fqp64c63xxpinvg1yfaw915kgpb"))))
6231 (build-system python-build-system)
6232 (arguments
6233 `(#:phases (modify-phases %standard-phases
6234 (replace 'check
6235 (lambda* (#:key tests? #:allow-other-keys)
6236 (when tests?
6237 (invoke "pytest")))))))
6238 (native-inputs
6239 (list python-pytest python-pytest-mock))
6240 (propagated-inputs
6241 (list python-cryptography python-gssapi python-ruamel.yaml))
6242 (home-page "https://github.com/jborean93/pyspnego")
6243 (synopsis "Python SPNEGO library")
6244 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
6245Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
6246parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
6247readable format.")
6248 (license license:expat)))
6249
6250(define-public python-pygit2
6251 (package
6252 (name "python-pygit2")
6253 (version "1.9.2")
6254 (source
6255 (origin
6256 (method url-fetch)
6257 (uri (pypi-uri "pygit2" version))
6258 (sha256
6259 (base32 "068bwhirigbh2435abyv4shdxgxvyfqf4dxfmhd4hihivwrl9290"))))
6260 (build-system python-build-system)
6261 (arguments
6262 `(#:phases (modify-phases %standard-phases
6263 (replace 'check
6264 (lambda* (#:key tests? #:allow-other-keys)
6265 (when tests?
6266 (invoke "pytest" "-v")))))))
6267 (propagated-inputs
6268 (list python-cached-property python-cffi libgit2))
6269 (native-inputs
6270 (list python-pytest))
6271 (home-page "https://github.com/libgit2/pygit2")
6272 (synopsis "Python bindings for libgit2")
6273 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
6274 ;; GPL2.0 only, with linking exception.
6275 (license license:gpl2)))
6276
6277(define-public python-patiencediff
6278 (package
6279 (name "python-patiencediff")
6280 (version "0.2.0")
6281 (source
6282 (origin
6283 (method url-fetch)
6284 (uri (pypi-uri "patiencediff" version))
6285 (sha256
6286 (base32
6287 "0yjk50lsd4gnllxls925xbcdxwvmda37w2a1shk0p1nvl3fcha6q"))))
6288 (build-system python-build-system)
6289 (home-page "https://www.breezy-vcs.org/")
6290 (synopsis "Python implementation of the patiencediff algorithm")
6291 (description
6292 "This package contains a Python implementation of the @code{patiencediff}
6293algorithm. Patiencediff provides a good balance of performance, nice output for
6294humans, and implementation simplicity.")
6295 (license license:gpl2)))
6296
6297(define-public python-wmctrl
6298 (package
6299 (name "python-wmctrl")
6300 (version "0.4")
6301 (source
6302 (origin
6303 (method url-fetch)
6304 (uri (pypi-uri "wmctrl" version))
6305 (sha256
6306 (base32
6307 "1q0l1sqnj5wma87k3dsgmsyph464syjc6fl8qcpa41nan1rgzjv6"))))
6308 (build-system python-build-system)
6309 (arguments
6310 `(#:phases (modify-phases %standard-phases
6311 (add-after 'unpack 'patch-paths
6312 (lambda* (#:key inputs #:allow-other-keys)
6313 (let ((wmctrl (assoc-ref inputs "wmctrl")))
6314 (substitute* "wmctrl.py"
6315 (("'wmctrl")
6316 (string-append "'" wmctrl "/bin/wmctrl")))))))))
6317 (inputs (list wmctrl))
6318 (propagated-inputs (list python-attrs))
6319 (home-page "https://github.com/antocuni/wmctrl")
6320 (synopsis "Tool to programmatically control Xorg windows")
6321 (description "This package provides a library for programmatically
6322controlling Xorg windows using Python. The library relies on the
6323@command{wmctrl} to do so.")
6324 (license license:expat)))
6325
6326(define-public python-fancycompleter
6327 (package
6328 (name "python-fancycompleter")
6329 (version "0.9.1")
6330 (source
6331 (origin
6332 (method url-fetch)
6333 (uri (pypi-uri "fancycompleter" version))
6334 (sha256
6335 (base32 "0wkj4h01pxa8prv59zl09a0i3w26k835bfpjgvyvsai4mswgxq09"))))
6336 (build-system python-build-system)
6337 (arguments
6338 `(#:phases (modify-phases %standard-phases
6339 (add-after 'unpack 'fix-setup.py
6340 (lambda _
6341 (substitute* "setup.py"
6342 ((".*setupmeta.*")
6343 "")
6344 (("versioning=.*")
6345 (string-append "version='" ,version "',"))
6346 ((".*pyrepl.*") ;broken on Python 3
6347 "")))))))
6348 (home-page "https://github.com/pdbpp/fancycompleter")
6349 (synopsis "TAB completion library for Python")
6350 (description "@code{fancycompleter} is a module that adds TAB completion
6351to the interactive prompt. It is an extension of the @code{rlcompleter}
6352module from the standard Python library.")
6353 (license license:bsd-3)))
6354
6355(define-public python-ipdb
6356 (package
6357 (name "python-ipdb")
6358 (version "0.13.9")
6359 (source
6360 (origin
6361 (method url-fetch)
6362 (uri (pypi-uri "ipdb" version))
6363 (sha256
6364 (base32 "1ibql99agjf2gj7y0svzd5m0h81hailf4p3sj3yl9i1i8ykdj6wm"))))
6365 (build-system python-build-system)
6366 (arguments
6367 (list #:phases #~(modify-phases %standard-phases
6368 (replace 'check
6369 (lambda* (#:key tests? #:allow-other-keys)
6370 (when tests?
6371 (invoke "python" "-m" "unittest" "discover")))))))
6372 (propagated-inputs (list python-ipython python-toml python-decorator))
6373 (home-page "https://github.com/gotcha/ipdb")
6374 (synopsis "IPython-enhanced Python debugger (pdb)")
6375 (description "@code{ipdb} exports functions to access the IPython
6376debugger, which features tab completion, syntax highlighting, better
6377tracebacks and better introspection than Python's standard @command{pdb}
6378debugger, with which it shares the same interface.")
6379 (license license:bsd-3)))
6380
6381(define-public python-pdbpp
6382 (package
6383 (name "python-pdbpp")
6384 (version "0.10.3")
6385 (source
6386 (origin
6387 (method url-fetch)
6388 (uri (pypi-uri "pdbpp" version))
6389 (sha256
6390 (base32
6391 "1xb9yvi30rb1cdpvfdk2kg79vh3anvkz91r8bwvfp3iqv97kzr6r"))))
6392 (build-system python-build-system)
6393 (arguments
6394 `(#:phases
6395 (modify-phases %standard-phases
6396 (replace 'check
6397 (lambda* (#:key tests? #:allow-other-keys)
6398 (when tests?
6399 (invoke "pytest"
6400 "-k"
6401 (string-append
6402 ;; These tests seem to require a real TTY.
6403 "not interaction_restores_previous_sigint_handler "
6404 "and not python_m_pdb_uses_pdbpp"))))))))
6405 (propagated-inputs
6406 (list python-fancycompleter python-pygments python-wmctrl))
6407 (native-inputs
6408 (list python-pytest python-setuptools-scm))
6409 (home-page "https://github.com/pdbpp/pdbpp")
6410 (synopsis "Drop-in replacement for pdb")
6411 (description "Pdb++ is a drop-in replacement for @code{pdb}. It
6412includes the following improvements compared to @code{pdb}:
6413@itemize
6414@item auto-completion
6415@item syntax highlighting of code listings
6416@item sticky mode
6417@item new commands to be used from the interactive (Pdb++) prompt
6418@item smart command parsing
6419@item additional convenience functions in the @code{pdb} module.
6420@end itemize")
6421 (license license:bsd-3)))
6422
6423(define-public python-pdftotext
6424 (package
6425 (name "python-pdftotext")
6426 (version "2.1.6")
6427 (source
6428 (origin
6429 (method url-fetch)
6430 (uri (pypi-uri "pdftotext" version))
6431 (sha256
6432 (base32 "1555wbgr5spj8xflrs4mwsrdmba2f9s72nk50xzqk9ghxaxdvy6a"))))
6433 (build-system python-build-system)
6434 (inputs
6435 (list poppler))
6436 (home-page "https://github.com/jalan/pdftotext")
6437 (synopsis "Simple PDF text extraction")
6438 (description "Pdftotext is a Python library of PDF text extraction.")
6439 (license license:expat)))
6440
6441(define-public python-pluginbase
6442 (package
6443 (name "python-pluginbase")
6444 (version "1.0.1")
6445 (source
6446 (origin
6447 (method url-fetch)
6448 (uri (pypi-uri "pluginbase" version))
6449 (sha256
6450 (base32
6451 "11z2vvbp13828y0x3w39f29p9r9xcix7h7c4fff2w8yfiylk6v7z"))))
6452 (build-system python-build-system)
6453 (arguments
6454 `(#:phases (modify-phases %standard-phases
6455 (replace 'check
6456 (lambda* (#:key tests? #:allow-other-keys)
6457 (when tests?
6458 (invoke "make" "test")))))))
6459 (native-inputs (list python-pytest))
6460 (home-page "https://github.com/mitsuhiko/pluginbase")
6461 (synopsis "Simple but flexible plugin system for Python")
6462 (description "PluginBase is a library useful in the development of
6463flexible plugin systems in Python.")
6464 (license license:bsd-3)))
6465
6466(define-public python-node-semver
6467 (package
6468 (name "python-node-semver")
6469 (version "0.8.1")
6470 (source
6471 (origin
6472 (method url-fetch)
6473 (uri (pypi-uri "node-semver" version))
6474 (sha256
6475 (base32
6476 "000ypfns5x72b41w5f9pk6k3jnr35scliqfbvmilyvv0178005i8"))))
6477 (build-system python-build-system)
6478 (native-inputs
6479 (list python-pytest))
6480 (home-page "https://github.com/podhmo/python-node-semver")
6481 (synopsis "Python port of node-semver")
6482 (description "This module provides a Python version of node-semver, a
6483semantic version parser for Node.js.")
6484 (license license:expat)))
6485
6486(define-public python-patch-ng
6487 (package
6488 (name "python-patch-ng")
6489 (version "1.17.4")
6490 (source
6491 (origin
6492 (method git-fetch) ;no tests in PyPI archive
6493 (uri (git-reference
6494 (url "https://github.com/conan-io/python-patch-ng")
6495 (commit version)))
6496 (file-name (git-file-name name version))
6497 (sha256
6498 (base32
6499 "0qxn4ss2s54qy87xrpcybz26kp2fwlaq41x4k9jcmp6d7p0w569m"))))
6500 (build-system python-build-system)
6501 (arguments
6502 `(#:phases (modify-phases %standard-phases
6503 (replace 'check
6504 (lambda* (#:key tests? #:allow-other-keys)
6505 (when tests?
6506 (invoke "tests/run_tests.py" "-v")))))))
6507 (home-page "https://github.com/conan-io/python-patch-ng")
6508 (synopsis "Python library to parse and apply unified diffs")
6509 (description "Patch NG (New Generation) is a command and Python library to
6510parse and apply unified diffs. It has features such as:
6511@itemize
6512@item automatic correction of common patch formatting corruption
6513@item patch format detection (SVN, Hg, Git)
6514@item nice diffstat histogram.
6515@end itemize")
6516 (license license:expat)))
6517
6518(define-public python-numpydoc
6519 (package
6520 (name "python-numpydoc")
6521 (version "1.2.1")
6522 (source
6523 (origin
6524 (method url-fetch)
6525 (uri (pypi-uri "numpydoc" version))
6526 (sha256
6527 (base32
6528 "1xjsli2fqks4iv3524v1d329siad7bbsi4kr174zvhsl1pnjds3w"))))
6529 (build-system python-build-system)
6530 (arguments
6531 `(#:phases
6532 (modify-phases %standard-phases
6533 (add-after 'unpack 'relax-requirements
6534 (lambda _
6535 (substitute* "setup.py"
6536 (("'Jinja2>=2.10,<3.1'")
6537 "'Jinja2>=2.10'"))))
6538 (replace 'check
6539 (lambda* (#:key tests? #:allow-other-keys)
6540 (when tests?
6541 (invoke "pytest" "-v" "numpydoc/tests"
6542 ;; TODO: unclear why these fail.
6543 "-k" "not test_MyClass and not test_my_function")))))))
6544 (propagated-inputs (list python-jinja2 python-sphinx))
6545 (native-inputs (list python-matplotlib python-pytest python-pytest-cov))
6546 (home-page "https://pypi.org/project/numpydoc/")
6547 (synopsis "Numpy's Sphinx extensions")
6548 (description "Sphinx extension to support docstrings in Numpy format.")
6549 (license license:bsd-2)))
6550
6551(define-public python-numexpr
6552 (package
6553 (name "python-numexpr")
6554 (version "2.7.3")
6555 (source
6556 (origin
6557 (method url-fetch)
6558 (uri (pypi-uri "numexpr" version))
6559 (sha256
6560 (base32
6561 "09d8yfsx33ddwfkpn8805w2mxnn4cvf47yc66g4azldpz4lnaqa3"))))
6562 (build-system python-build-system)
6563 (arguments `(#:tests? #f)) ; no tests included
6564 (propagated-inputs
6565 (list python-numpy))
6566 (home-page "https://github.com/pydata/numexpr")
6567 (synopsis "Fast numerical expression evaluator for NumPy")
6568 (description
6569 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
6570expressions that operate on arrays are accelerated and use less memory than
6571doing the same calculation in Python. In addition, its multi-threaded
6572capabilities can make use of all your cores, which may accelerate
6573computations, most specially if they are not memory-bounded (e.g. those using
6574transcendental functions).")
6575 (license license:expat)))
6576
6577(define-public python-cycler
6578 (package
6579 (name "python-cycler")
6580 (version "0.10.0")
6581 (source (origin
6582 (method url-fetch)
6583 (uri (pypi-uri "cycler" version))
6584 (sha256
6585 (base32
6586 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
6587 (build-system python-build-system)
6588 (arguments
6589 ;; XXX: The current version requires 'coveralls' which we don't have.
6590 ;; Enable this for the next release which uses 'python-pytest'.
6591 '(#:tests? #f))
6592 (propagated-inputs
6593 (list python-six))
6594 (home-page "https://matplotlib.org/cycler/")
6595 (synopsis "Composable keyword argument iterator")
6596 (description
6597 "When using @code{matplotlib} and plotting more than one line, it is
6598common to want to be able to want to be able to cycle over one or more artist
6599styles; but the plotting logic can quickly become involved.
6600To address this and enable easy cycling over arbitrary @code{kwargs}, the
6601@code{Cycler} class was developed.")
6602 (license license:bsd-3)))
6603
6604(define-public python-colorspacious
6605 (package
6606 (name "python-colorspacious")
6607 (version "1.1.2")
6608 (source
6609 (origin
6610 (method git-fetch)
6611 (uri (git-reference
6612 (url "https://github.com/njsmith/colorspacious")
6613 (commit (string-append "v" version))))
6614 (file-name (git-file-name name version))
6615 (sha256
6616 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
6617 (build-system python-build-system)
6618 (propagated-inputs
6619 (list python-numpy))
6620 (native-inputs
6621 (list python-nose))
6622 (arguments
6623 `(#:phases
6624 (modify-phases %standard-phases
6625 (replace 'check
6626 (lambda _
6627 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
6628 (home-page "https://github.com/njsmith/colorspacious")
6629 (synopsis "Python library for colorspace conversions")
6630 (description "@code{colorspacious} is a Python library that lets you
6631convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
6632 (license license:expat)))
6633
6634(define-public python-proto-matcher
6635 (package
6636 (name "python-proto-matcher")
6637 (version "0.0.3")
6638 (source
6639 (origin
6640 (method url-fetch)
6641 (uri (pypi-uri "proto_matcher" version))
6642 (sha256
6643 (base32 "1644x0hrl398ji3281n44ymfgc3cspzfagjckhqjn4nja5nlikxg"))))
6644 (build-system python-build-system)
6645 (arguments
6646 `(#:tests? #f)) ;no test suite
6647 (propagated-inputs
6648 (list python-protobuf python-pyhamcrest))
6649 (home-page "https://github.com/dayfine/proto-matcher")
6650 (synopsis "PyHamcrest test matchers for protocol buffers")
6651 (description "This package provides the following PyHamcrest test
6652matchers, that enable matching a protocol buffer message:
6653@table @code
6654@item equals_proto
6655Test the argument equals the given protobuf message.
6656@item approximately
6657Test the argument equals the given protobuf message, while comparing any float
6658field using approximation.
6659@item ignoring_field_paths
6660Test the argument equals the given protobuf message, while ignoring those
6661fields specified in the field paths.
6662@item ignoring_repeated_field_ordering
6663Test the argument equals the given protobuf message, ignoring the ordering of
6664any repeated field.
6665@item partially
6666Test the argument partially equals the given protobuf message, i.e. if a field
6667is in the argument but not in the expected message, it's ignored in the
6668comparison.
6669@end table")
6670 (license license:asl2.0)))
6671
6672(define-public python-matplotlib
6673 (package
6674 (name "python-matplotlib")
6675 (version "3.5.2")
6676 (source
6677 (origin
6678 (method url-fetch)
6679 (uri (pypi-uri "matplotlib" version))
6680 (sha256
6681 (base32 "18h78s5ld1i6mz00w258hy29909nfr3ddq6ry9kq18agw468bks8"))))
6682 (build-system python-build-system)
6683 (arguments
6684 (list
6685 #:phases
6686 #~(modify-phases %standard-phases
6687 (add-before 'build 'pretend-version
6688 ;; The version string is usually derived via setuptools-scm, but
6689 ;; without the git metadata available, the version string is set to
6690 ;; '0.0.0'.
6691 (lambda _
6692 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
6693 (add-after 'unpack 'fix-and-disable-failing-tests
6694 ;; XXX: Disable all image comparison tests because we're using a
6695 ;; newer version of FreeType than matplotlib expects. This leads
6696 ;; to minor differences throughout the tests.
6697 (lambda _
6698 (substitute* (append (find-files "lib/matplotlib/tests/"
6699 "test_.*\\.py$")
6700 (find-files "lib/mpl_toolkits/tests"
6701 "test_.*\\.py$"))
6702 (("^from matplotlib" match)
6703 (string-append "import pytest\n" match))
6704 (("( *)@([^_]+_)*(image_comparison|check_figures_equal)" match
6705 indent)
6706 (string-append indent "@pytest.mark.skip(\
6707reason=\"unknown minor image differences\")\n" match)))
6708 (substitute* "lib/matplotlib/tests/test_animation.py"
6709 (("/bin/sh") (which "sh")))
6710 (for-each delete-file
6711 ;; test_normal_axes, test_get_tightbbox_polar
6712 '("lib/matplotlib/tests/test_axes.py"
6713 "lib/matplotlib/tests/test_polar.py"
6714 ;; We don't use the webagg backend and this test
6715 ;; forces it.
6716 "lib/matplotlib/tests/test_backend_webagg.py"
6717 ;; test_outward_ticks
6718 "lib/matplotlib/tests/test_tightlayout.py"
6719 ;; test_hidden_axes fails with minor extent
6720 ;; differences, possibly due to the use of a
6721 ;; different version of FreeType.
6722 "lib/matplotlib/tests/test_constrainedlayout.py"
6723 ;; Fontconfig returns no fonts.
6724 "lib/matplotlib/tests/test_font_manager.py"
6725 ;; The images comparison test fails
6726 ;; non-deterministically when run in parallel (see:
6727 ;; https://github.com/matplotlib/matplotlib/issues/22992).
6728 "lib/matplotlib/tests/test_compare_images.py"))))
6729 (add-before 'build 'configure-environment
6730 (lambda* (#:key inputs #:allow-other-keys)
6731 ;; Fix rounding errors when using the x87 FPU.
6732 (when (string-prefix? "i686" #$(%current-system))
6733 (setenv "CFLAGS" "-ffloat-store"))
6734 (call-with-output-file "mplsetup.cfg"
6735 (lambda (port)
6736 (format port "\
6737[libs]
6738system_freetype = true
6739system_qhull = true
6740
6741[rc_options]
6742backend=Agg
6743
6744[directories]
6745basedirlist = ~a,~a
6746
6747[packages]
6748tests = True~%" (assoc-ref inputs "tcl") (assoc-ref inputs "tk"))))))
6749 (replace 'check
6750 (lambda* (#:key tests? #:allow-other-keys)
6751 (when tests?
6752 ;; Step out of the source directory to avoid interference.
6753 (with-directory-excursion "/tmp"
6754 ;; Run the installed tests, which is what we want since not
6755 ;; everything gets built in the source directory.
6756 (invoke "pytest"
6757 "-n" (number->string (parallel-job-count))
6758 "-m" "not network" "--pyargs" "matplotlib"
6759 ;; The 'test_lazy_auto_backend_selection' fails
6760 ;; because it would require an X server; skip it.
6761 "-k" "not test_lazy_auto_backend_selection"))))))))
6762 (propagated-inputs
6763 (list gobject-introspection
6764 python-cairocffi
6765 python-certifi
6766 python-cycler
6767 python-dateutil
6768 python-fonttools
6769 python-kiwisolver
6770 python-numpy
6771 python-packaging
6772 python-pillow
6773 ;; ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
6774 ;; ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
6775 ;; ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
6776 ;; ;; object. For this reason we need to import both libraries.
6777 ;; python-pycairo
6778 python-pygobject
6779 python-pyparsing
6780 python-pytz
6781 python-six
6782 `(,python "tk")
6783 python-wxpython))
6784 (inputs
6785 (list cairo
6786 freetype
6787 glib
6788 libpng
6789 qhull
6790 tcl
6791 tk))
6792 (native-inputs
6793 (list pkg-config
6794 python-pytest
6795 python-pytest-timeout
6796 python-pytest-xdist
6797 python-setuptools-scm
6798 python-setuptools-scm-git-archive))
6799 (home-page "https://matplotlib.org/")
6800 (synopsis "2D plotting library for Python")
6801 (description
6802 "Matplotlib is a Python 2D plotting library which produces publication
6803quality figures in a variety of hardcopy formats and interactive environments
6804across platforms. Matplotlib can be used in Python scripts, the python and
6805ipython shell, web application servers, and six graphical user interface
6806toolkits.")
6807 (license license:psfl)))
6808
6809(define-public python-matplotlib-documentation
6810 (package
6811 (inherit python-matplotlib)
6812 (name "python-matplotlib-documentation")
6813 (arguments
6814 (list
6815 #:tests? #f ;we're only generating documentation
6816 #:phases
6817 #~(modify-phases %standard-phases
6818 (replace 'build
6819 (lambda _
6820 (setenv "HOME" "/tmp")
6821 (chdir "doc")
6822 (substitute* "conf.py"
6823 ;; The sphinx_panels extension causes a "TypeError: first
6824 ;; argument must be callable" to be raised when generating the
6825 ;; info target; remove it (see:
6826 ;; https://github.com/executablebooks/sphinx-panels/issues/74).
6827 ((".*'sphinx_panels',.*") ""))
6828 (invoke "make" "html" "info"
6829 ;; Don't abort on warnings; build in parallel.
6830 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
6831 (replace 'install
6832 (lambda _
6833 (let* ((data (string-append #$output "/share"))
6834 (doc (string-append data "/doc/matplotlib"))
6835 (info (string-append data "/info"))
6836 (html (string-append doc "/html")))
6837 (mkdir-p html)
6838 (copy-recursively "build/html" html)
6839 (install-file "build/texinfo/matplotlib.info" info)
6840 ;; The "matplotlib-figures" directory contains are a subset of
6841 ;; the images produced for the html target; simply create a
6842 ;; symlink to it, saving about 11 MiB.
6843 (symlink (string-append html "/_images")
6844 (string-append info "/matplotlib-figures"))))))))
6845 (native-inputs
6846 (list graphviz
6847 inkscape/stable
6848 python-colorspacious
6849 python-mpl-sphinx-theme
6850 python-scipy
6851 python-sphinx
6852 python-sphinx-copybutton
6853 python-sphinx-gallery
6854 python-sphinxcontrib-svg2pdfconverter
6855 python-numpydoc
6856 python-ipython
6857 python-ipywidgets
6858 texlive-amsfonts
6859 texlive-amsmath
6860 texlive-babel
6861 texlive-fontspec
6862 texlive-unicode-math
6863 texlive-etoolbox
6864 texlive-latex-expdlist
6865 texlive-underscore
6866 texlive-latex-type1cm
6867 texlive-times
6868 texinfo))
6869 (synopsis "Documentation for the @code{python-matplotlib} package")))
6870
6871(define-public python-matplotlib-inline
6872 (package
6873 (name "python-matplotlib-inline")
6874 (version "0.1.3")
6875 (source
6876 (origin
6877 (method url-fetch)
6878 (uri (pypi-uri "matplotlib-inline" version))
6879 (sha256
6880 (base32 "1vilzwj3xp00mxprmmn1hlafm3p23vn56s46kx3ra4qd5signjx0"))))
6881 (build-system python-build-system)
6882 (propagated-inputs
6883 (list python-matplotlib python-traitlets))
6884 (arguments
6885 ;; Tests disabled because of a circular dependency with ipython.
6886 `(#:tests? #f))
6887 (home-page "https://github.com/ipython/matplotlib-inline")
6888 (synopsis "Inline Matplotlib backend for Jupyter")
6889 (description
6890 "This package provides a Matplotlib inline back-end for IPython and
6891Jupyter.")
6892 (license license:bsd-3)))
6893
6894(define-public python-matplotlib-venn
6895 (package
6896 (name "python-matplotlib-venn")
6897 (version "0.11.5")
6898 (source
6899 (origin
6900 (method url-fetch)
6901 (uri (pypi-uri "matplotlib-venn" version ".zip"))
6902 (sha256
6903 (base32
6904 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
6905 (build-system python-build-system)
6906 (arguments '(#:tests? #f)) ; tests are not included
6907 (propagated-inputs
6908 (list python-matplotlib python-numpy python-scipy))
6909 (native-inputs
6910 (list unzip))
6911 (home-page "https://github.com/konstantint/matplotlib-venn")
6912 (synopsis "Plot area-proportional Venn diagrams")
6913 (description
6914 "This package provides tools for plotting area-proportional two- and
6915three-way Venn diagrams in @code{matplotlib}.")
6916 (license license:expat)))
6917
6918(define-public python-pysnptools
6919 (package
6920 (name "python-pysnptools")
6921 (version "0.4.11")
6922 (source
6923 (origin
6924 (method url-fetch)
6925 (uri (pypi-uri "pysnptools" version))
6926 (sha256
6927 (base32
6928 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
6929 (build-system python-build-system)
6930 (arguments
6931 `(#:tests? #f ; no test data are included
6932 #:phases
6933 (modify-phases %standard-phases
6934 (replace 'check
6935 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6936 (if tests?
6937 (begin
6938 (add-installed-pythonpath inputs outputs)
6939 (invoke "python3" "pysnptools/test.py"))
6940 #t))))))
6941 (propagated-inputs
6942 (list python-dill
6943 python-h5py
6944 python-numpy
6945 python-pandas
6946 python-psutil
6947 python-scipy))
6948 (native-inputs
6949 (list python-cython))
6950 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
6951 (synopsis "Library for reading and manipulating genetic data")
6952 (description
6953 "PySnpTools is a library for reading and manipulating genetic data. It
6954can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
6955those files. It can also efficiently manipulate ranges of integers using set
6956operators such as union, intersection, and difference.")
6957 (license license:asl2.0)))
6958
6959(define-public python-pykdtree
6960 (package
6961 (name "python-pykdtree")
6962 (version "1.3.4")
6963 (source
6964 (origin
6965 (method url-fetch)
6966 (uri (pypi-uri "pykdtree" version))
6967 (sha256
6968 (base32 "0p8n2ljdacfixkiw092974dmhy4s1c0h032ii1z9kwi9h5h5rgmy"))))
6969 (build-system python-build-system)
6970 (native-inputs
6971 (list python-nose))
6972 (propagated-inputs
6973 (list python-numpy))
6974 (home-page "https://github.com/storpipfugl/pykdtree")
6975 (synopsis "Fast kd-tree implementation with OpenMP-enabled queries")
6976 (description
6977 "@code{pykdtree} is a kd-tree implementation for fast nearest neighbour
6978search in Python.")
6979 (license license:lgpl3+)))
6980
6981(define-public python-wurlitzer
6982 (package
6983 (name "python-wurlitzer")
6984 (version "2.0.1")
6985 (source
6986 (origin
6987 (method url-fetch)
6988 (uri (pypi-uri "wurlitzer" version))
6989 (sha256
6990 (base32 "0hvmbc41kdwrjns8z1s4a59a4azdvzb8q3vs7nn1li4qm4l0g3yh"))))
6991 (build-system python-build-system)
6992 (arguments
6993 '(#:phases
6994 (modify-phases %standard-phases
6995 (replace 'check
6996 (lambda _
6997 (invoke "pytest" "-vv" "test.py"))))))
6998 (native-inputs
6999 (list python-mock python-pytest))
7000 (home-page "https://github.com/minrk/wurlitzer")
7001 (synopsis "Capture C-level output in context managers")
7002 (description
7003 "This library helps to redirect @code{sys.stdout} to a stream or a file
7004while executing some piece of code, including C code running within a Python
7005process.")
7006 (license license:expat)))
7007
7008(define-public python-socksipy-branch
7009 (package
7010 (name "python-socksipy-branch")
7011 (version "1.01")
7012 (source
7013 (origin
7014 (method url-fetch)
7015 (uri (pypi-uri "SocksiPy-branch" version))
7016 (sha256
7017 (base32
7018 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
7019 (build-system python-build-system)
7020 (arguments
7021 `(#:tests? #f)) ; There are no tests
7022 (home-page "https://code.google.com/archive/p/socksipy-branch/")
7023 (synopsis "Python SOCKS module")
7024 (description
7025 "SocksiPy - A Python SOCKS client module. It provides a
7026socket-like interface that supports connections to any TCP
7027service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
7028The original version was developed by Dan Haim, this is a
7029branch created by Mario Vilas to address some open issues,
7030as the original project seems to have been abandoned circa 2007.")
7031 (license license:bsd-3)))
7032
7033(define-public python-socksipychain
7034 (package
7035 (name "python-socksipychain")
7036 (version "2.1.2")
7037 (source
7038 (origin
7039 (method git-fetch)
7040 (uri (git-reference
7041 (url "https://github.com/pagekite/PySocksipyChain")
7042 (commit (string-append "v" version))))
7043 (file-name (git-file-name name version))
7044 (sha256
7045 (base32
7046 "02pp994qmiivkdx4y6az5q80l6rzy8g6d2ipvp7kns7lsxvmc2y7"))))
7047 (build-system python-build-system)
7048 (arguments
7049 `(#:tests? #f)) ; Tests try to access the network.
7050 (propagated-inputs
7051 (list python-six))
7052 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
7053 (synopsis "Python SOCKS module with chained proxies support")
7054 (description
7055 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
7056adds support for arbitrary chaining of proxy servers and various modes of
7057TLS/SSL encryption. It was developed for use in PageKite, and also includes
7058a simple netcat replacement with chaining support.")
7059 (license license:bsd-3)))
7060
7061(define-public python-pycodestyle
7062 (package
7063 (name "python-pycodestyle")
7064 (version "2.8.0")
7065 (source
7066 (origin
7067 (method url-fetch)
7068 (uri (pypi-uri "pycodestyle" version))
7069 (sha256
7070 (base32
7071 "0zxyrg8029lzjhima6l5nk6y0z6lm5wfp9qchz3s33j3xx3mipgd"))))
7072 (build-system python-build-system)
7073 (arguments
7074 `(#:phases
7075 (modify-phases %standard-phases
7076 (replace 'check
7077 (lambda* (#:key tests? #:allow-other-keys)
7078 (when tests?
7079 (invoke "pytest" "-vv")))))))
7080 (native-inputs
7081 (list python-pytest))
7082 (home-page "https://pycodestyle.readthedocs.io/")
7083 (synopsis "Python style guide checker")
7084 (description "@code{pycodestyle} (formerly pep8) is a tool to check
7085Python code against some of the style conventions in
7086@url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
7087 (license license:expat)))
7088
7089(define-public python-pycodestyle-2.6
7090 (package
7091 (inherit python-pycodestyle)
7092 (version "2.6.0")
7093 (source (origin
7094 (method url-fetch)
7095 (uri (pypi-uri "pycodestyle" version))
7096 (sha256
7097 (base32
7098 "0bhr6ia0hmgx3nhgibc9pmkzhlh1zcqk707i5fbxgs702ll7v2n5"))))))
7099
7100(define-public python-multidict
7101 (package
7102 (name "python-multidict")
7103 (version "5.2.0")
7104 (source
7105 (origin
7106 (method url-fetch)
7107 (uri (pypi-uri "multidict" version))
7108 (sha256
7109 (base32
7110 "1kjrxav572j45xvr1iy60zb2g8zqvrinzdkl4ax36js4vczckl8d"))))
7111 (build-system python-build-system)
7112 (arguments
7113 '(#:phases (modify-phases %standard-phases
7114 (replace 'check
7115 (lambda* (#:key tests? #:allow-other-keys)
7116 (if tests?
7117 (invoke "pytest" "-vv")
7118 (format #t "test suite not run~%")))))))
7119 (native-inputs
7120 (list python-pytest python-pytest-cov))
7121 (home-page "https://github.com/aio-libs/multidict/")
7122 (synopsis "Multidict implementation")
7123 (description "Multidict is dict-like collection of key-value pairs
7124where key might be occurred more than once in the container.")
7125 (license license:asl2.0)))
7126
7127(define-public python-orderedmultidict
7128 (package
7129 (name "python-orderedmultidict")
7130 (version "1.0.1")
7131 (source
7132 (origin
7133 (method url-fetch)
7134 (uri (pypi-uri "orderedmultidict" version))
7135 (sha256
7136 (base32
7137 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
7138 (build-system python-build-system)
7139 (propagated-inputs
7140 (list python-six))
7141 (native-inputs
7142 (list python-flake8 python-pycodestyle))
7143 (home-page "https://github.com/gruns/orderedmultidict")
7144 (synopsis "Python Ordered Multivalue Dictionary - omdict")
7145 (description "This package contains a library for ordered multivalue
7146dictionaries. A multivalue dictionary is a dictionary that can store
7147multiple values for the same key. An ordered multivalue dictionary is a
7148multivalue dictionary that retains the order of insertions and deletions.")
7149 (license license:unlicense)))
7150
7151(define-public python-autocommand
7152 (package
7153 (name "python-autocommand")
7154 (version "2.2.1")
7155 (source
7156 (origin
7157 (method url-fetch)
7158 (uri (pypi-uri "autocommand" version))
7159 (sha256
7160 (base32 "03qp9xx4dq81ljhf56r21gp5j0lpqs1vaw99g0d84i97s3lj1m7y"))))
7161 (build-system python-build-system)
7162 (arguments
7163 (list
7164 #:phases
7165 #~(modify-phases %standard-phases
7166 (replace 'check
7167 (lambda* (#:key tests? #:allow-other-keys)
7168 (when tests?
7169 ;; This test fails with an invalid syntax error on 'task1 =
7170 ;; asyncio.async(coro_1())' (see:
7171 ;; https://github.com/Lucretiel/autocommand/issues/20).
7172 (delete-file "test/test_autoasync.py")
7173 (invoke "pytest" "-vv")))))))
7174 (native-inputs (list python-pytest python-pytest-asyncio))
7175 (home-page "https://github.com/Lucretiel/autocommand")
7176 (synopsis "Python library to build a command-line from a function")
7177 (description "@code{autocommand} is library to automatically generate and
7178run simple @code{argparse} parsers from function signatures.")
7179 (license license:lgpl3+)))
7180
7181(define-public python-autopage
7182 (package
7183 (name "python-autopage")
7184 (version "0.5.1")
7185 (source (origin
7186 (method url-fetch)
7187 (uri (pypi-uri "autopage" version))
7188 (sha256
7189 (base32
7190 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
7191 (build-system pyproject-build-system)
7192 (arguments
7193 (list
7194 #:phases
7195 #~(modify-phases %standard-phases
7196 (add-before 'check 'disable-e2e-tests
7197 (lambda _
7198 ;; These tests rely on KeyboardInterrupts which do not
7199 ;; work in the build container.
7200 (delete-file "autopage/tests/test_end_to_end.py"))))))
7201 (native-inputs
7202 (list python-pypa-build
7203 python-setuptools
7204 python-wheel
7205 ;; For tests.
7206 python-fixtures
7207 python-pytest
7208 python-testtools))
7209 (home-page "https://github.com/zaneb/autopage")
7210 (synopsis "Automatic paging for console output")
7211 (description
7212 "Autopage is a Python library to automatically display terminal output
7213from a program in a @dfn{pager} such as @command{less}.")
7214 (license license:asl2.0)))
7215
7216(define-public python-autopep8
7217 (package
7218 (name "python-autopep8")
7219 (version "1.5.3")
7220 (source
7221 (origin
7222 (method url-fetch)
7223 (uri (pypi-uri "autopep8" version))
7224 (sha256
7225 (base32
7226 "1w6vh627vrmgfbvrdcxrc3k4gxcldrb2lpgxv9irkdds851qrzb0"))))
7227 (build-system python-build-system)
7228 (propagated-inputs
7229 (list python-pycodestyle python-toml))
7230 (home-page "https://github.com/hhatto/autopep8")
7231 (synopsis "Format Python code according to the PEP 8 style guide")
7232 (description
7233 "@code{autopep8} automatically formats Python code to conform to
7234the PEP 8 style guide. It uses the pycodestyle utility to determine
7235what parts of the code needs to be formatted. @code{autopep8} is
7236capable of fixing most of the formatting issues that can be reported
7237by pycodestyle.")
7238 (license (license:non-copyleft
7239 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
7240
7241(define-public python-distlib
7242 (package
7243 (name "python-distlib")
7244 (version "0.3.1")
7245 (source
7246 (origin
7247 (method url-fetch)
7248 (uri (pypi-uri "distlib" version ".zip"))
7249 (sha256
7250 (base32
7251 "1wdzv7fsjhrkhh1wfkarlhcwa8m00mgcpdsvknmf2qy8f9l13xpd"))))
7252 (build-system python-build-system)
7253 (arguments
7254 `(#:phases
7255 (modify-phases %standard-phases
7256 (add-before 'build 'no-/bin/sh
7257 (lambda _
7258 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
7259 (("/bin/sh") (which "sh")))
7260 #t))
7261 (add-before 'check 'prepare-test-env
7262 (lambda _
7263 (setenv "HOME" "/tmp")
7264 ;; NOTE: Any value works, the variable just has to be present.
7265 (setenv "SKIP_ONLINE" "1")
7266 #t)))))
7267 (native-inputs (list unzip))
7268 (home-page "https://bitbucket.org/pypa/distlib")
7269 (synopsis "Distribution utilities")
7270 (description "Distlib is a library which implements low-level functions that
7271relate to packaging and distribution of Python software. It is intended to be
7272used as the basis for third-party packaging tools.")
7273 (license license:psfl)))
7274
7275(define-public python-distutils-extra
7276 (package
7277 (name "python-distutils-extra")
7278 (version "2.38")
7279 (source
7280 (origin
7281 (method url-fetch)
7282 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
7283 version "/+download/python-distutils-extra-"
7284 version ".tar.gz"))
7285 (sha256
7286 (base32
7287 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
7288 (build-system python-build-system)
7289 (home-page "https://launchpad.net/python-distutils-extra/")
7290 (synopsis "Enhancements to Python's distutils")
7291 (description
7292 "The python-distutils-extra module enables you to easily integrate
7293gettext support, themed icons, and scrollkeeper-based documentation into
7294Python's distutils.")
7295 (license license:gpl2)))
7296
7297(define-public python-olefile
7298 (package
7299 (name "python-olefile")
7300 (version "0.46")
7301 (source
7302 (origin
7303 (method url-fetch)
7304 (uri (string-append "https://github.com/decalage2/olefile/releases/"
7305 "download/v" version "/olefile-" version ".tar.gz"))
7306 (file-name (string-append name "-" version ".tar.gz"))
7307 (sha256
7308 (base32
7309 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
7310 (build-system python-build-system)
7311 (home-page "https://www.decalage.info/python/olefileio")
7312 (synopsis "Read and write Microsoft OLE2 files")
7313 (description
7314 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
7315Storage or Compound Document, Microsoft Office). It is an improved version of
7316the OleFileIO module from PIL, the Python Image Library.")
7317 (license license:bsd-3)))
7318
7319(define-public python-pypdf3
7320 (package
7321 (name "python-pypdf3")
7322 (version "1.0.5")
7323 (source
7324 (origin
7325 (method url-fetch)
7326 (uri (pypi-uri "PyPDF3" version))
7327 (sha256
7328 (base32 "018hlq9q2qa96vw4j7ppq352znykldwy98h2w9qcpkvpi93sjqhc"))))
7329 (build-system python-build-system)
7330 (propagated-inputs
7331 (list python-tqdm))
7332 (home-page "https://github.com/sfneal/PyPDF3")
7333 (synopsis "Utility to read and write PDFs with Python")
7334 (description "PyPDF3 is a pure-python PDF library capable of splitting,
7335merging together, cropping, and transforming the pages of PDF files. It can
7336also add custom data, viewing options, and passwords to PDF files. It can
7337retrieve text and metadata from PDFs as well as merge entire files together.")
7338 (license license:bsd-3)))
7339
7340(define-public python-pikepdf
7341 (package
7342 (name "python-pikepdf")
7343 (version "2.16.1")
7344 (source
7345 (origin
7346 (method url-fetch)
7347 (uri (pypi-uri "pikepdf" version))
7348 (sha256
7349 (base32 "1phdpi9cm2pbvgcxqvwr8ck327sxhdw4dnxmzhrbf7hzydmgykg2"))))
7350 (build-system python-build-system)
7351 (arguments
7352 `(#:tests? #false)) ;require python-xmp-toolkit
7353 (native-inputs
7354 (list pybind11
7355 python-setuptools
7356 python-setuptools-scm
7357 python-setuptools-scm-git-archive
7358 python-toml
7359 python-wheel))
7360 (inputs
7361 (list qpdf))
7362 (propagated-inputs
7363 (list python-lxml python-pillow))
7364 (home-page "https://github.com/pikepdf/pikepdf")
7365 (synopsis "Read and write PDFs with Python")
7366 (description
7367 "pikepdf is a Python library for reading and writing PDF files.")
7368 (license license:mpl2.0)))
7369
7370(define-public python-pillow
7371 (package
7372 (name "python-pillow")
7373 (version "9.2.0")
7374 (source (origin
7375 (method url-fetch)
7376 (uri (pypi-uri "Pillow" version))
7377 (sha256
7378 (base32
7379 "011wgm1mssjchpva9wsi2a07im9czyjvik137xlp5f0g7vykdrkm"))
7380 (modules '((guix build utils)))
7381 (snippet '(begin
7382 (delete-file-recursively "src/thirdparty")))))
7383 (build-system python-build-system)
7384 (native-inputs (list python-pytest))
7385 (inputs (list freetype
7386 lcms
7387 libjpeg-turbo
7388 libtiff
7389 libwebp
7390 openjpeg
7391 zlib))
7392 (propagated-inputs (list python-olefile))
7393 (arguments
7394 `(#:phases (modify-phases %standard-phases
7395 (add-after 'unpack 'patch-ldconfig
7396 (lambda _
7397 (substitute* "setup.py"
7398 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
7399 (replace 'check
7400 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
7401 (when tests?
7402 (setenv "HOME"
7403 (getcwd))
7404 (add-installed-pythonpath inputs outputs)
7405 (invoke "python" "selftest.py" "--installed")
7406 (invoke "python" "-m" "pytest" "-vv")))))))
7407 (home-page "https://python-pillow.org")
7408 (synopsis "Fork of the Python Imaging Library")
7409 (description
7410 "The Python Imaging Library adds image processing capabilities to your
7411Python interpreter. This library provides extensive file format support, an
7412efficient internal representation, and fairly powerful image processing
7413capabilities. The core image library is designed for fast access to data
7414stored in a few basic pixel formats. It should provide a solid foundation for
7415a general image processing tool.")
7416 (properties `((cpe-name . "pillow")))
7417 (license (license:x11-style
7418 "http://www.pythonware.com/products/pil/license.htm"
7419 "The PIL Software License"))))
7420
7421(define-public python-pillow-2.9
7422 (package
7423 (inherit python-pillow)
7424 (version "2.9.0")
7425 (source
7426 (origin
7427 (method url-fetch)
7428 (uri (pypi-uri "Pillow" version))
7429 (sha256
7430 (base32
7431 "0ada7lf3lmbdsqm3b7ja920p1pllyfhmqndr85ikpj77fmz9s5qg"))))
7432 (arguments
7433 (substitute-keyword-arguments (package-arguments python-pillow)
7434 ((#:tests? _ #f) #f)))
7435 (properties '((hidden? #t)))))
7436
7437(define-public python-pillow-simd
7438 (package
7439 (inherit python-pillow)
7440 (name "python-pillow-simd")
7441 (version "9.0.0.post1")
7442 ;; The PyPI tarball does not include test files.
7443 (source
7444 (origin
7445 (method git-fetch)
7446 (uri (git-reference
7447 (url "https://github.com/uploadcare/pillow-simd")
7448 (commit (string-append "v" version))))
7449 (file-name (git-file-name name version))
7450 (sha256
7451 (base32 "1dnvsln451aw3qy2cxg2ndd5mcanf5nrhxw9l7mcam730635hdm9"))))
7452 (inputs
7453 (modify-inputs (package-inputs python-pillow)
7454 (prepend libraqm libimagequant)))
7455 (home-page "https://github.com/uploadcare/pillow-simd")
7456 (synopsis "Fork of the Python Imaging Library (Pillow)")
7457 (description "This package is a fork of Pillow which adds support for SIMD
7458parallelism.")))
7459
7460(define-public python-imagecodecs
7461 (package
7462 (name "python-imagecodecs")
7463 (version "2021.3.31")
7464 (source
7465 (origin
7466 (method url-fetch)
7467 (uri (pypi-uri "imagecodecs" version))
7468 (sha256
7469 (base32
7470 "0q7pslb6wd56vbcq2mdxwsiha32mxjr7mgqqfbq5w42q601p9pi0"))
7471 (modules '((guix build utils)))
7472 (snippet
7473 '(begin
7474 ;; Unbundle 3rd party modules.
7475 (delete-file-recursively "3rdparty")
7476 ;; Delete pre-generated Cython files.
7477 (for-each delete-file (find-files "imagecodecs" "_.*\\.c$"))
7478 #t))))
7479 (build-system python-build-system)
7480 (arguments
7481 `(#:tests? #f ; Tests are disabled, because dependencies are missing.
7482 #:phases
7483 (modify-phases %standard-phases
7484 (add-after 'unpack 'create-configuration
7485 (lambda* (#:key inputs #:allow-other-keys)
7486 ;; By default everything is enabled. We can selectively disable
7487 ;; extensions (and thus dependencies) by deleting them from the
7488 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
7489 (call-with-output-file "imagecodecs_distributor_setup.py"
7490 (lambda (port)
7491 (format port "\
7492def customize_build(EXTENSIONS, OPTIONS):
7493 del EXTENSIONS['aec']
7494 del EXTENSIONS['avif']
7495 del EXTENSIONS['bitshuffle']
7496 del EXTENSIONS['deflate']
7497 del EXTENSIONS['jpeg2k']
7498 del EXTENSIONS['jpeg12']
7499 del EXTENSIONS['jpegls']
7500 del EXTENSIONS['jpegxl']
7501 del EXTENSIONS['jpegxr']
7502 del EXTENSIONS['lerc']
7503 del EXTENSIONS['ljpeg']
7504 del EXTENSIONS['lzf']
7505 del EXTENSIONS['zfp']
7506 del EXTENSIONS['zopfli']
7507 OPTIONS['cythonize']
7508")))))
7509 ;; XXX: The installed scripts import packages that depend on
7510 ;; this package; disable import check to avoid the cycle.
7511 (delete 'sanity-check))))
7512 (inputs
7513 (list c-blosc
7514 giflib
7515 brotli
7516 libjpeg-turbo
7517 libpng
7518 libtiff
7519 libwebp
7520 lz4
7521 snappy
7522 xz
7523 zlib
7524 `(,zstd "lib")))
7525 (propagated-inputs
7526 ;; For the Python library.
7527 (list python-numpy))
7528 (native-inputs
7529 ;; For building.
7530 (list python-cython
7531 ;; For testing. Incomplete.
7532 ;("python-numcodecs" ,python-numcodecs)
7533 ;("python-zarr" ,python-zarr)
7534 ;("python-pytest" ,python-pytest)
7535 ))
7536 (home-page "https://www.lfd.uci.edu/~gohlke/")
7537 (synopsis
7538 "Image transformation, compression, and decompression codecs")
7539 (description
7540 "Imagecodecs is a Python library that provides block-oriented, in-memory
7541buffer transformation, compression, and decompression functions for use in the
7542tifffile, czifile, and other scientific image input/output modules.")
7543 (license license:bsd-3)))
7544
7545(define-public python-property-manager
7546 (package
7547 (name "python-property-manager")
7548 (version "3.0")
7549 (source
7550 (origin
7551 (method url-fetch)
7552 (uri (pypi-uri "property-manager" version))
7553 (sha256
7554 (base32 "0m3w4spr8f39xnm65naw29ncal4r453kn7ndqb63rwbsmslnvrwk"))))
7555 (build-system python-build-system)
7556 (native-inputs
7557 (list python-pytest-cov))
7558 (propagated-inputs
7559 (list python-verboselogs
7560 python-humanfriendly
7561 python-coloredlogs))
7562 (home-page "https://github.com/xolox/python-property-manager")
7563 (synopsis "Useful property variants for Python programming")
7564 (description "The @code{property-manager} package defines several custom
7565property variants for Python programming including required properties,
7566writable properties, cached properties, etc.")
7567 (license license:expat))) ; MIT license
7568
7569(define-public python-executing
7570 (package
7571 (name "python-executing")
7572 (version "0.8.2")
7573 (source
7574 (origin
7575 (method url-fetch)
7576 (uri (pypi-uri "executing" version))
7577 (sha256
7578 (base32 "08q0xh9fd8k41sqpp23q6fb9bf7yj4y2q6sv30pj36vvk8pg8fy2"))))
7579 (build-system python-build-system)
7580 (arguments
7581 `(#:tests? #f)) ; TODO: tests require python-asttokens
7582 (native-inputs
7583 (list python-setuptools-scm python-toml))
7584 (home-page "https://github.com/alexmojaki/executing")
7585 (synopsis "Get information about what a Python frame is currently doing")
7586 (description "This package lets you get information about what a frame is
7587currently doing, particularly the AST node being executed.")
7588 (license license:expat)))
7589
7590(define-public python-executor
7591 (package
7592 (name "python-executor")
7593 (version "23.2")
7594 (source
7595 (origin
7596 (method url-fetch)
7597 (uri (pypi-uri "executor" version))
7598 (sha256
7599 (base32 "0g83yr54j0vcwhy6h7n0jsd7q0q630kwa6v9kqzlzrm9xj6c3ip1"))))
7600 (build-system python-build-system)
7601 (arguments
7602 `(#:tests? #f)) ; TODO: tests require root/sudo
7603 (propagated-inputs
7604 (list python-six
7605 python-property-manager
7606 python-fasteners
7607 python-virtualenv))
7608 (home-page "https://github.com/xolox/python-executor")
7609 (synopsis "Programmer friendly subprocess wrapper")
7610 (description "The @code{executor} package is a simple wrapper for Python’s
7611subprocess module that makes it very easy to handle subprocesses on UNIX
7612systems with proper escaping of arguments and error checking currently doing,
7613particularly the AST node being executed.")
7614 (license license:expat))) ; MIT license
7615
7616(define-public python-roifile
7617 (package
7618 (name "python-roifile")
7619 (version "2020.11.28")
7620 (source
7621 (origin
7622 (method url-fetch)
7623 (uri (pypi-uri "roifile" version))
7624 (sha256
7625 (base32
7626 "04argnc7qccybkrj9ww18bf81ghsghhh93hnqy3p111rcdlyn66p"))))
7627 (build-system python-build-system)
7628 (arguments `(#:tests? #f)) ; there are none
7629 (propagated-inputs
7630 (list python-numpy))
7631 (home-page "https://www.lfd.uci.edu/~gohlke/")
7632 (synopsis "Read and write ImageJ ROI format")
7633 (description "Roifile is a Python library to read, write, create, and plot
7634ImageJ ROIs, an undocumented and ImageJ application specific format to store
7635regions of interest, geometric shapes, paths, text, etc for image overlays.")
7636 (license license:bsd-3)))
7637
7638(define-public python-tifffile
7639 (package
7640 (name "python-tifffile")
7641 (version "2021.4.8")
7642 (source
7643 (origin
7644 (method url-fetch)
7645 (uri (pypi-uri "tifffile" version))
7646 (sha256
7647 (base32
7648 "16r0hw7shka1bqf28bv198lj2jhf2r9gy3s5zv4nf5cfsfm8pajm"))))
7649 (build-system python-build-system)
7650 ;; Tests require lfdfiles, which depends on tifffile
7651 (arguments `(#:tests? #f))
7652 (propagated-inputs
7653 (list python-numpy python-imagecodecs))
7654 (home-page "https://www.lfd.uci.edu/~gohlke/")
7655 (synopsis "Read and write TIFF(r) files")
7656 (description "This package lets you read image and metadata from many
7657bio-scientific formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,
7658NIH, ImageJ, MicroManager, MD GEL, and FluoView files. It also lets you write
7659numpy arrays to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
7660 (license license:bsd-3)))
7661
7662(define-public python-lfdfiles
7663 (package
7664 (name "python-lfdfiles")
7665 (version "2021.2.22")
7666 (source
7667 (origin
7668 (method url-fetch)
7669 (uri (pypi-uri "lfdfiles" version))
7670 (sha256
7671 (base32
7672 "12fxm4v805dgjrih7x6jnl1wd7y7jw1rkhjs3d4am8s6qk1cbar2"))
7673 (modules '((guix build utils)))
7674 (snippet
7675 '(begin
7676 ;; Delete pre-generated Cython files.
7677 (for-each delete-file (find-files "lfdfiles" "_.*\\.c$"))
7678 #t))))
7679 (build-system python-build-system)
7680 (arguments
7681 `(#:tests? #f)) ; No tests exist, despite a test dependency on pytest.
7682 (propagated-inputs
7683 (list python-click python-numpy python-tifffile))
7684 (native-inputs (list python-cython))
7685 (home-page "https://www.lfd.uci.edu/~gohlke/")
7686 (synopsis "Work with LFD data files")
7687 (description
7688 "Lfdfiles is a Python library and console script for reading, writing,
7689converting, and viewing many of the proprietary file formats used to store
7690experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
7691 (license license:bsd-3)))
7692
7693(define-public python-imageio
7694 (package
7695 (name "python-imageio")
7696 (version "2.8.0")
7697 (source
7698 (origin
7699 (method url-fetch)
7700 (uri (pypi-uri "imageio" version))
7701 (sha256
7702 (base32
7703 "1ksjl523fm0fikrd85llxfba35rc1qsgwadgr6mbn9kis79xcpzv"))))
7704 (build-system python-build-system)
7705 (arguments
7706 `(#:tests? #f ; many tests require online data
7707 #:phases
7708 (modify-phases %standard-phases
7709 (replace 'check
7710 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
7711 (if tests?
7712 (begin
7713 ;; Make installed package available for running the tests.
7714 (add-installed-pythonpath inputs outputs)
7715 (invoke "pytest" "-vv"))
7716 #t))))))
7717 (propagated-inputs
7718 (list python-numpy python-pillow python-psutil))
7719 (native-inputs
7720 (list python-pytest))
7721 (home-page "https://imageio.github.io/")
7722 (synopsis "Library for reading and writing a wide range of image data")
7723 (description
7724 "Imageio is a Python library that provides an easy interface to read and
7725write a wide range of image data, including animated images, video, volumetric
7726data, and scientific formats.")
7727 (license license:bsd-2)))
7728
7729(define-public python-pyvips
7730 (package
7731 (name "python-pyvips")
7732 (version "2.2.1")
7733 (source
7734 (origin
7735 (method url-fetch)
7736 (uri (pypi-uri "pyvips" version))
7737 (sha256
7738 (base32 "1dfbwwvnnsk4g2kj1pw654z9jq3mb72l1m8ma29858jpn12vn7dm"))))
7739 (build-system python-build-system)
7740 (arguments
7741 (list #:phases
7742 #~(modify-phases %standard-phases
7743 ;; Maybe switch to API mode (i.e., build the C extension)?
7744 ;; It is advertised as faster to start up and run.
7745 ;; However, even with ‘pkg-config’ and ‘python-pkgconfig’ in
7746 ;; ‘native-inputs’, the API mode build fails with:
7747 ;;
7748 ;; Falling back to ABI mode. Details: unable to find pkg-config package "vips"
7749 ;;
7750 ;; The build doesn't actually fail without the below
7751 ;; substitution, it's just slower because ‘setup.py’ tries
7752 ;; (unsuccessfully) to download the Python ‘pkgconfig’ module.
7753 (add-after 'unpack 'fix-build
7754 (lambda _
7755 (substitute* "setup.py"
7756 (("^( +setup_)API\\(\\)\n" _ prefix)
7757 (string-append prefix "ABI()\n")))))
7758 (add-after 'unpack 'fix-paths
7759 (lambda _
7760 (substitute* "pyvips/__init__.py"
7761 (("^( +_vips_libname) = '(libvips.so.42)'"
7762 _ var libname)
7763 (format #f "~a = '~a/lib/~a'"
7764 var #$(this-package-input "vips") libname))
7765 (("^( +_gobject_libname) = '(libgobject-2.0.so.0)'"
7766 _ var libname)
7767 (format #f "~a = '~a/lib/~a'"
7768 var #$(this-package-input "glib") libname)))))
7769 (replace 'check
7770 (lambda* (#:key tests? #:allow-other-keys)
7771 (when tests?
7772 (invoke "python" "setup.py" "test")))))))
7773 (native-inputs
7774 (list python-pyperf
7775 python-pytest
7776 python-pytest-flake8
7777 python-pytest-runner))
7778 (inputs
7779 (list glib vips))
7780 (propagated-inputs
7781 (list python-cffi))
7782 (home-page "https://github.com/libvips/pyvips")
7783 (synopsis "Python bindings for VIPS")
7784 (description "The @code{pyvips} package provides Python bindings for VIPS,
7785a multithreaded image-processing system with low memory needs.")
7786 (license license:expat)))
7787
7788(define-public python-pycparser
7789 (package
7790 (name "python-pycparser")
7791 (version "2.21")
7792 (source
7793 (origin
7794 (method url-fetch)
7795 (uri (pypi-uri "pycparser" version))
7796 (sha256
7797 (base32
7798 "01kjlyn5w2nn2saj8w1rhq7v26328pd91xwgqn32z1zp2bngsi76"))))
7799 (outputs '("out" "doc"))
7800 (build-system python-build-system)
7801 (arguments
7802 `(#:phases
7803 (modify-phases %standard-phases
7804 (replace 'check
7805 (lambda _
7806 (invoke "python" "-m" "unittest" "discover")))
7807 (add-after 'install 'install-doc
7808 (lambda* (#:key outputs #:allow-other-keys)
7809 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
7810 (doc (string-append data "/doc/" ,name "-" ,version))
7811 (examples (string-append doc "/examples")))
7812 (mkdir-p examples)
7813 (for-each (lambda (file)
7814 (copy-file (string-append "." file)
7815 (string-append doc file)))
7816 '("/README.rst" "/CHANGES" "/LICENSE"))
7817 (copy-recursively "examples" examples)))))))
7818 (home-page "https://github.com/eliben/pycparser")
7819 (synopsis "C parser in Python")
7820 (description
7821 "Pycparser is a complete parser of the C language, written in pure Python
7822using the PLY parsing library. It parses C code into an AST and can serve as
7823a front-end for C compilers or analysis tools.")
7824 (license license:bsd-3)))
7825
7826(define-public python2-pycparser
7827 (package-with-python2 python-pycparser))
7828
7829(define-public python-xlsxwriter
7830 (package
7831 (name "python-xlsxwriter")
7832 (version "3.0.3")
7833 (source
7834 (origin
7835 ;; There are no tests in the PyPI tarball.
7836 (method git-fetch)
7837 (uri (git-reference
7838 (url "https://github.com/jmcnamara/XlsxWriter")
7839 (commit (string-append "RELEASE_" version))))
7840 (file-name (git-file-name name version))
7841 (sha256
7842 (base32 "1lr7mmik6r4zns069i4zfx1cnwhz6snmlh2zsiry0cwx8cv33wpm"))))
7843 (build-system python-build-system)
7844 (home-page "https://github.com/jmcnamara/XlsxWriter")
7845 (synopsis "Python module for creating Excel XLSX files")
7846 (description
7847 "XlsxWriter is a Python module that can be used to write text, numbers,
7848formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
7849 (license license:bsd-2)))
7850
7851(define-public python-pywavelets
7852 (package
7853 (name "python-pywavelets")
7854 (version "1.2.0")
7855 (home-page "https://github.com/PyWavelets/pywt")
7856 (source (origin
7857 (method url-fetch)
7858 (uri (pypi-uri "PyWavelets" version))
7859 (sha256
7860 (base32
7861 "13csbr6ls9q9ww53z2xwwsj0hpsz88rj2iwp623h0kmv8yq6kgbc"))
7862 (snippet
7863 #~(begin
7864 (use-modules ((guix build utils)))
7865 (for-each delete-file
7866 (list
7867 "pywt/_extensions/_cwt.c"
7868 "pywt/_extensions/_dwt.c"
7869 "pywt/_extensions/_pywt.c"
7870 "pywt/_extensions/_pywt.h"
7871 "pywt/_extensions/_swt.c"))))))
7872 (build-system python-build-system)
7873 (arguments
7874 '(#:modules ((ice-9 ftw)
7875 (srfi srfi-1)
7876 (srfi srfi-26)
7877 (guix build utils)
7878 (guix build python-build-system))
7879 #:phases
7880 (modify-phases %standard-phases
7881 (replace 'check
7882 (lambda _
7883 (let ((cwd (getcwd))
7884 (libdir (find (cut string-prefix? "lib." <>)
7885 (scandir "build"))))
7886 (with-directory-excursion (string-append cwd "/build/" libdir)
7887 (invoke "pytest" "-vv"))))))))
7888 (native-inputs
7889 (list python-cython
7890 python-matplotlib ;for tests
7891 python-pytest))
7892 (propagated-inputs
7893 (list python-numpy))
7894 (synopsis "Wavelet transforms in Python")
7895 (description
7896 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
7897mathematical basis functions that are localized in both time and frequency.
7898Wavelet transforms are time-frequency transforms employing wavelets. They are
7899similar to Fourier transforms, the difference being that Fourier transforms are
7900localized only in frequency instead of in time and frequency.")
7901 (license license:expat)))
7902
7903(define-public python-pywal
7904 (package
7905 (name "python-pywal")
7906 (version "3.3.0")
7907 (source
7908 (origin
7909 (method git-fetch)
7910 (uri (git-reference
7911 (url "https://github.com/dylanaraps/pywal")
7912 (commit version)))
7913 (file-name (git-file-name name version))
7914 (sha256
7915 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
7916 (build-system python-build-system)
7917 (arguments
7918 `(#:phases
7919 (modify-phases %standard-phases
7920 (add-before 'check 'fix-home-directory
7921 (lambda _
7922 ;; Tests fail with "Permission denied: '/homeless-shelter'".
7923 (setenv "HOME" "/tmp")
7924 #t)))))
7925 (inputs
7926 (list imagemagick))
7927 (home-page "https://github.com/dylanaraps/pywal")
7928 (synopsis "Color palette generator and applicator")
7929 (description
7930 "Pywal is a tool that generates a color palette from the dominant colors
7931in an image. It then applies the colors system-wide and on-the-fly in all of
7932your favourite programs.")
7933 (license license:expat)))
7934
7935(define-public python-click-didyoumean
7936 (package
7937 (name "python-click-didyoumean")
7938 (version "0.3.0")
7939 (source
7940 (origin
7941 (method url-fetch)
7942 (uri (pypi-uri "click-didyoumean" version))
7943 (sha256
7944 (base32 "0dc0xrmqbw0idpx843ahzzvivmvx3fcfsm3k54lnssyra7cg117i"))))
7945 (build-system python-build-system)
7946 (arguments
7947 `(#:tests? #f)) ; no tests in PyPI and no setup.py in github
7948 (propagated-inputs
7949 (list python-click))
7950 (home-page "https://github.com/timofurrer/click-didyoumean")
7951 (synopsis "Git-like did-you-mean feature in Click")
7952 (description
7953 "This plugin enables git-like did-you-mean feature in Click.")
7954 (license license:expat)))
7955
7956(define-public python-pywinrm
7957 (package
7958 (name "python-pywinrm")
7959 (version "0.4.1")
7960 (source
7961 (origin
7962 (method url-fetch)
7963 (uri (pypi-uri "pywinrm" version))
7964 (sha256
7965 (base32
7966 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
7967 (build-system python-build-system)
7968 (propagated-inputs
7969 (list python-six python-requests_ntlm python-xmltodict
7970 python-kerberos))
7971 (native-inputs
7972 (list python-mock python-pytest))
7973 (home-page "https://github.com/diyan/pywinrm/")
7974 (synopsis
7975 "Python library for Windows Remote Management (WinRM)")
7976 (description
7977 "pywinrm is a Python client for the Windows Remote Management (WinRM)
7978service. It allows you to invoke commands on target Windows machines from
7979any machine that can run Python.")
7980 (license license:expat)))
7981
7982(define-public python-xcffib
7983 (package
7984 (name "python-xcffib")
7985 (version "0.11.1")
7986 (source
7987 (origin
7988 (method url-fetch)
7989 (uri (pypi-uri "xcffib" version))
7990 (sha256
7991 (base32
7992 "0nkglsm9nbhv238iagmmsjcz6lf1yfdvp5kmspphdj385vz9r50j"))))
7993 (build-system python-build-system)
7994 (inputs
7995 (list libxcb))
7996 (propagated-inputs
7997 (list python-cffi ; used at run time
7998 python-six))
7999 (arguments
8000 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
8001 #:tests? #f
8002 #:phases
8003 (modify-phases %standard-phases
8004 (add-after 'unpack 'fix-libxcb-path
8005 (lambda* (#:key inputs #:allow-other-keys)
8006 (let ((libxcb (assoc-ref inputs "libxcb")))
8007 (substitute* '("xcffib/__init__.py")
8008 (("soname = ctypes.util.find_library.*xcb.*")
8009 (string-append "soname = \"" libxcb "/lib/libxcb.so\"\n")))
8010 #t)))
8011 (add-after 'install 'install-doc
8012 (lambda* (#:key outputs #:allow-other-keys)
8013 (let ((doc (string-append (assoc-ref outputs "out") "/share"
8014 "/doc/" ,name "-" ,version)))
8015 (mkdir-p doc)
8016 (copy-file "README.md"
8017 (string-append doc "/README.md"))
8018 #t))))))
8019 (home-page "https://github.com/tych0/xcffib")
8020 (synopsis "XCB Python bindings")
8021 (description
8022 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
8023support for Python 3 and PyPy. It is based on cffi.")
8024 (license license:expat)))
8025
8026(define-public python-cairocffi
8027 (package
8028 (name "python-cairocffi")
8029 (version "1.3.0")
8030 (source
8031 (origin
8032 ;; The PyPI archive does not include the documentation, so use Git.
8033 (method git-fetch)
8034 (uri (git-reference
8035 (url "https://github.com/Kozea/cairocffi")
8036 (commit (string-append "v" version))))
8037 (file-name (git-file-name name version))
8038 (sha256
8039 (base32
8040 "0lylyxyyd8csjhn5kxwzrcr6ick6pvvm1wclpmb5ni28jznxn7lb"))))
8041 (build-system python-build-system)
8042 (outputs '("out" "doc"))
8043 (inputs
8044 (list glib gtk+ gdk-pixbuf cairo))
8045 (native-inputs
8046 (list python-numpy
8047 python-pytest
8048 python-pytest-cov
8049 python-pytest-runner
8050 python-sphinx
8051 python-sphinx-rtd-theme))
8052 (propagated-inputs
8053 (list python-xcffib)) ; used at run time
8054 (arguments
8055 `(#:phases
8056 (modify-phases %standard-phases
8057 (add-after 'unpack 'patch-paths
8058 (lambda* (#:key inputs #:allow-other-keys)
8059 (substitute* "cairocffi/__init__.py"
8060 ;; Hack the dynamic library loading mechanism.
8061 (("find_library\\(library_name\\)")
8062 "\"found\"")
8063 (("filenames = \\(library_filename,\\) \\+ filenames")
8064 "pass")
8065 (("libcairo.so.2")
8066 (search-input-file inputs "/lib/libcairo.so.2")))
8067 (substitute* "cairocffi/pixbuf.py"
8068 (("libgdk_pixbuf-2.0.so.0")
8069 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
8070 (("libgobject-2.0.so.0")
8071 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
8072 (("libglib-2.0.so.0")
8073 (search-input-file inputs "/lib/libglib-2.0.so.0"))
8074 (("libgdk-3.so.0")
8075 (search-input-file inputs "/lib/libgdk-3.so.0")))))
8076 (add-after 'unpack 'disable-linters
8077 ;; Their check fails; none of our business.
8078 (lambda _
8079 (substitute* "setup.cfg"
8080 ((".*pytest-flake8.*") "")
8081 ((".*pytest-isort.*") "")
8082 (("--flake8") "")
8083 (("--isort") ""))
8084 #t))
8085 (add-after 'install 'install-doc
8086 (lambda* (#:key inputs outputs #:allow-other-keys)
8087 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
8088 (doc (string-append data "/doc/" ,name "-" ,version))
8089 (html (string-append doc "/html")))
8090 (setenv "LD_LIBRARY_PATH"
8091 (string-append (assoc-ref inputs "cairo") "/lib" ":"
8092 (assoc-ref inputs "gdk-pixbuf") "/lib"))
8093 (setenv "LANG" "en_US.UTF-8")
8094 (mkdir-p html)
8095 (for-each (lambda (file)
8096 (copy-file (string-append "." file)
8097 (string-append doc file)))
8098 '("/README.rst" "/NEWS.rst"))
8099 (system* "python" "setup.py" "build_sphinx")
8100 (copy-recursively "docs/_build/html" html)
8101 #t))))))
8102 (home-page "https://github.com/Kozea/cairocffi")
8103 (synopsis "Python bindings and object-oriented API for Cairo")
8104 (description
8105 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
8106Python bindings and object-oriented API for cairo. Cairo is a 2D vector
8107graphics library with support for multiple backends including image buffers,
8108PNG, PostScript, PDF, and SVG file output.")
8109 (license license:bsd-3)))
8110
8111(define-public python-decorator
8112 (package
8113 (name "python-decorator")
8114 (version "5.0.9")
8115 (source
8116 (origin
8117 (method url-fetch)
8118 (uri (pypi-uri "decorator" version))
8119 (sha256
8120 (base32 "1mcy64hllgm938v8k1x2a4g0q9swsnrfnsvhz59kr28a6ajgpv3j"))))
8121 (build-system python-build-system)
8122 (home-page "https://pypi.org/project/decorator/")
8123 (synopsis "Python module to simplify usage of decorators")
8124 (description
8125 "The aim of the decorator module is to simplify the usage of decorators
8126for the average programmer, and to popularize decorators usage giving examples
8127of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
8128etc. The core of this module is a decorator factory.")
8129 (license license:expat)))
8130
8131
8132(define-public python-drmaa
8133 (package
8134 (name "python-drmaa")
8135 (version "0.7.7")
8136 (source
8137 (origin
8138 (method url-fetch)
8139 (uri (pypi-uri "drmaa" version))
8140 (sha256
8141 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
8142 (build-system python-build-system)
8143 ;; The test suite requires libdrmaa which is provided by the cluster
8144 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
8145 ;; should be set to the path of the libdrmaa library.
8146 (arguments
8147 '(#:tests? #f
8148 #:phases (modify-phases %standard-phases
8149 ;; Loading the library fails because DRMAA_LIBRARY_PATH
8150 ;; is not configured.
8151 (delete 'sanity-check))))
8152 (home-page "https://pypi.org/project/drmaa/")
8153 (synopsis "Python bindings for the DRMAA library")
8154 (description
8155 "A Python package for Distributed Resource Management (DRM) job
8156submission and control. This package is an implementation of the DRMAA 1.0
8157Python language binding specification.")
8158 (license license:bsd-3)))
8159
8160(define-public python-grako
8161 (package
8162 (name "python-grako")
8163 (version "3.99.9")
8164 (source
8165 (origin
8166 (method url-fetch)
8167 (uri
8168 (pypi-uri "grako" version ".zip"))
8169 (sha256
8170 (base32
8171 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
8172 (build-system python-build-system)
8173 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
8174 (native-inputs
8175 (list unzip python-pytest python-pytest-runner))
8176 (home-page "https://bitbucket.org/neogeny/grako")
8177 (synopsis "EBNF parser generator")
8178 (description
8179 "Grako takes a grammar in a variation of EBNF as input, and outputs a
8180memoizing PEG/Packrat parser in Python.")
8181 (license license:bsd-3)))
8182
8183(define-public python-grandalf
8184 (package
8185 (name "python-grandalf")
8186 (version "0.7")
8187 (source
8188 (origin
8189 ;; There's no source tarball on PyPI.
8190 (method git-fetch)
8191 (uri (git-reference
8192 (url "https://github.com/bdcht/grandalf")
8193 (commit (string-append "v" version))))
8194 (file-name (git-file-name name version))
8195 (sha256
8196 (base32
8197 "03p8w8ljpb87qbyldm3s6b7qi30hfcn43h33iwlgqcf31fjsyr4g"))))
8198 (build-system python-build-system)
8199 (arguments
8200 '(#:phases
8201 (modify-phases %standard-phases
8202 (replace 'check
8203 (lambda _
8204 (invoke "python" "setup.py" "pytest"))))))
8205 (native-inputs
8206 (list python-pytest python-pytest-runner))
8207 (propagated-inputs
8208 (list python-numpy python-ply))
8209 (home-page "https://github.com/bdcht/grandalf")
8210 (synopsis "Graph and drawing algorithms framework")
8211 (description
8212 "Grandalf is a Python package made for experimentations with graphs
8213drawing algorithms. It is written in pure Python, and currently implements
8214two layouts: the Sugiyama hierarchical layout and the force-driven or energy
8215minimization approach. While not as fast or featured as graphviz or other
8216libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
8217than thousands of nodes, while keeping the source code simple enough to tweak
8218and hack any part of it for experimental purpose. With a total of about 1500
8219lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
8220in less than 600 lines. The energy minimization approach is comprised of only
8221250 lines!
8222
8223Grandalf does only 2 not-so-simple things:
8224@itemize
8225@item computing the nodes (x,y) coordinates (based on provided nodes
8226dimensions, and a chosen layout)
8227@item routing the edges with lines or nurbs
8228@end itemize
8229
8230It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
8231will help you find where to draw things like nodes and edges, but it’s up to
8232you to actually draw things with your favorite toolkit.")
8233 ;; The user can choose either license.
8234 (license (list license:gpl2 license:epl1.0))))
8235
8236(define-public python-gridmap
8237 (package
8238 (name "python-gridmap")
8239 (version "0.14.0")
8240 (source
8241 (origin
8242 (method git-fetch)
8243 (uri (git-reference
8244 (url "https://github.com/pygridtools/gridmap")
8245 (commit (string-append "v" version))))
8246 (file-name (git-file-name name version))
8247 (sha256
8248 (base32 "0v0sgpg6pz8h61f9aqjf5xk0ipr512bbz8dxzjjylksj135qr19l"))))
8249 (build-system python-build-system)
8250 (arguments
8251 '(#:tests? #f ;FIXME: Requires python-cherrypy.
8252 #:phases (modify-phases %standard-phases
8253 ;; Importing the web server module requires cherrypy, too.
8254 (delete 'sanity-check))))
8255 (propagated-inputs
8256 (list python-psutil python-drmaa python-pyzmq))
8257 (home-page "https://github.com/pygridtools/gridmap")
8258 (synopsis "Create jobs on a cluster directly from Python")
8259 (description
8260 "Gridmap is a Python package to allow you to easily create jobs on the
8261cluster directly from Python. You can directly map Python functions onto the
8262cluster without needing to write any wrapper code yourself.")
8263 (license license:gpl3+)))
8264
8265(define-public python-honcho
8266 (package
8267 (name "python-honcho")
8268 (version "1.1.0")
8269 (source
8270 (origin
8271 (method git-fetch)
8272 (uri (git-reference
8273 (url "https://github.com/nickstenning/honcho")
8274 (commit (string-append "v" version))))
8275 (file-name (git-file-name name version))
8276 (sha256
8277 (base32 "1y0r8dw4pqcq7r4n58ixjdg1iy60lp0gxsd7d2jmhals16ij71rj"))))
8278 (build-system python-build-system)
8279 (native-inputs
8280 (list python-pytest python-mock python-tox which)) ;for tests
8281 (propagated-inputs
8282 (list python-jinja2))
8283 (arguments
8284 `(#:phases
8285 (modify-phases %standard-phases
8286 (delete 'check)
8287 (add-after 'install 'check
8288 (lambda* (#:key outputs inputs #:allow-other-keys)
8289 ;; fix honcho path in testsuite
8290 (substitute* "tests/conftest.py"
8291 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
8292 "/bin/honcho" "'")))
8293 ;; It's easier to run tests after install.
8294 ;; Make installed package available for running the tests
8295 (add-installed-pythonpath inputs outputs)
8296 ;; Skip failing test_export
8297 (invoke "py.test" "-v" "-k" "not test_export"))))))
8298 (home-page "https://github.com/nickstenning/honcho")
8299 (synopsis "Manage Procfile-based applications")
8300 (description
8301 "A Procfile is a file which describes how to run an application
8302consisting of several processes. honcho starts all listed processes.
8303The output of all running processes is collected by honcho and
8304displayed.")
8305 (license license:expat)))
8306
8307(define-public python-pebble
8308 (package
8309 (name "python-pebble")
8310 (version "4.6.1")
8311 (source
8312 (origin
8313 (method url-fetch)
8314 (uri (pypi-uri "Pebble" version))
8315 (sha256
8316 (base32 "16siqc3brbk7dp4d9sg48bjl6a8wyy24aib3il1hf4y2624draxh"))))
8317 (build-system python-build-system)
8318 (native-inputs
8319 (list python-pytest))
8320 (arguments
8321 `(#:phases
8322 (modify-phases %standard-phases
8323 (replace 'check
8324 (lambda _ (invoke "python" "-m" "pytest" "-sv"))))))
8325 (home-page "https://github.com/noxdafox/pebble")
8326 (synopsis "Threading and multiprocessing for Python")
8327 (description
8328 "Pebble aims to help manage threads and processes in an easier way. It
8329wraps Python's standard library threading and multiprocessing objects.")
8330 (license license:lgpl3+)))
8331
8332(define-public python-pexpect
8333 (package
8334 (name "python-pexpect")
8335 (version "4.8.0")
8336 (source
8337 (origin
8338 (method url-fetch)
8339 (uri (pypi-uri "pexpect" version))
8340 (sha256
8341 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
8342 (build-system python-build-system)
8343 (arguments
8344 `(#:phases
8345 (modify-phases %standard-phases
8346 (add-before 'check 'prepare-tests
8347 (lambda _
8348 (substitute* (find-files "tests")
8349 (("/bin/ls") (which "ls"))
8350 (("/bin/echo") (which "echo"))
8351 (("/bin/which") (which "which"))
8352 ;; Many tests try to use the /bin directory which
8353 ;; is not present in the build environment.
8354 ;; Use one that's non-empty and unlikely to change.
8355 (("/bin'") "/dev'")
8356 ;; Disable failing test. See upstream bug report
8357 ;; https://github.com/pexpect/pexpect/issues/568
8358 (("def test_bash") "def _test_bash"))
8359 ;; XXX: Socket connection test gets "Connection reset by peer".
8360 ;; Why does it not work? Delete for now.
8361 (delete-file "tests/test_socket.py")
8362 #t))
8363 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
8364 (native-inputs
8365 `(("python-nose" ,python-nose)
8366 ("python-pytest" ,python-pytest)
8367 ("man-db" ,man-db)
8368 ("which" ,which)
8369 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
8370 (propagated-inputs
8371 (list python-ptyprocess))
8372 (home-page "http://pexpect.readthedocs.org/")
8373 (synopsis "Controlling interactive console applications")
8374 (description
8375 "Pexpect is a pure Python module for spawning child applications;
8376controlling them; and responding to expected patterns in their output.
8377Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
8378child application and control it as if a human were typing commands.")
8379 (license license:isc)))
8380
8381(define-public python-sexpdata
8382 (package
8383 (name "python-sexpdata")
8384 (version "0.0.3")
8385 (source
8386 (origin
8387 (method url-fetch)
8388 (uri (pypi-uri "sexpdata" version))
8389 (sha256
8390 (base32
8391 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
8392 (build-system python-build-system)
8393 (home-page "https://github.com/jd-boyd/sexpdata")
8394 (synopsis "S-expression parser for Python")
8395 (description
8396 "Sexpdata is an S-expression parser/serializer. It has load and dump
8397functions like pickle, json or PyYAML module.")
8398 (license license:bsd-3)))
8399
8400(define-public python-pathlib2
8401 (package
8402 (name "python-pathlib2")
8403 (version "2.3.7.post1")
8404 (source
8405 (origin
8406 (method url-fetch)
8407 (uri (pypi-uri "pathlib2" version))
8408 (sha256
8409 (base32
8410 "0hf62d0lsf37vnr5fxqp5rfn85njgsr45j4rw71w10wbi6nyvq4z"))))
8411 (build-system python-build-system)
8412 (propagated-inputs
8413 (list python-scandir python-six))
8414 (home-page "https://pypi.org/project/pathlib2/")
8415 (synopsis "Object-oriented file system paths")
8416 (description "The goal of pathlib2 is to provide a backport of the
8417standard @code{pathlib} module which tracks the standard library module, so
8418all the newest features of the standard @code{pathlib} can be used also on
8419older Python versions.")
8420 (license license:expat)))
8421
8422(define-public python-importlib-resources
8423 (package
8424 (name "python-importlib-resources")
8425 (version "3.0.0")
8426 (source (origin
8427 (method url-fetch)
8428 (uri (pypi-uri "importlib_resources" version))
8429 (sha256
8430 (base32
8431 "1hq626mx5jl9zfl0wdrjkxsnh8qd98fqv322n68b9251xjk4bxqr"))))
8432 (build-system python-build-system)
8433 (native-inputs (list python-setuptools-scm python-toml))
8434 (home-page "http://importlib-resources.readthedocs.io/")
8435 (synopsis "Read resources from Python packages")
8436 (description
8437 "@code{importlib_resources} is a backport of Python 3's standard library
8438@code{importlib.resources} module for Python 2.7, and Python 3.")
8439 (license license:asl2.0)))
8440
8441(define-public python-importlib-metadata
8442 (package
8443 (name "python-importlib-metadata")
8444 (version "4.11.3")
8445 (source
8446 (origin
8447 (method url-fetch)
8448 (uri (pypi-uri "importlib_metadata" version))
8449 (sha256
8450 (base32
8451 "0f951zynlh39yicqnhrs3p1qa5p3g6ajjfcggf12y51ppxz5jk7a"))))
8452 (build-system python-build-system)
8453 (arguments
8454 (list
8455 #:phases
8456 #~(modify-phases %standard-phases
8457 ;; XXX: PEP 517 manual build/install procedures copied from
8458 ;; python-isort.
8459 (replace 'build
8460 (lambda _
8461 ;; ZIP does not support timestamps before 1980.
8462 (setenv "SOURCE_DATE_EPOCH" "315532800")
8463 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
8464 (replace 'install
8465 (lambda* (#:key outputs #:allow-other-keys)
8466 (let ((whl (car (find-files "dist" "\\.whl$"))))
8467 (invoke "pip" "--no-cache-dir" "--no-input"
8468 "install" "--no-deps" "--prefix" #$output whl))))
8469 (replace 'check
8470 (lambda* (#:key tests? #:allow-other-keys)
8471 (when tests?
8472 (invoke "pytest" "-vv" "tests")))))))
8473 (propagated-inputs (list python-zipp))
8474 (native-inputs
8475 (list python-pypa-build
8476 python-pyfakefs
8477 python-pytest
8478 python-setuptools-scm))
8479 (home-page "https://importlib-metadata.readthedocs.io/")
8480 (synopsis "Read metadata from Python packages")
8481 (description
8482 "@code{importlib_metadata} is a library which provides an API for
8483accessing an installed Python package's metadata, such as its entry points or
8484its top-level name. This functionality intends to replace most uses of
8485@code{pkg_resources} entry point API and metadata API. Along with
8486@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
8487need to use the older and less efficient @code{pkg_resources} package.")
8488 (license license:asl2.0)))
8489
8490(define-public python-importmagic
8491 (package
8492 (name "python-importmagic")
8493 (version "0.1.7")
8494 (source
8495 (origin
8496 (method url-fetch)
8497 (uri (pypi-uri "importmagic" version))
8498 (sha256
8499 (base32
8500 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
8501 (build-system python-build-system)
8502 (arguments
8503 (list #:phases
8504 #~(modify-phases %standard-phases
8505 (replace 'check
8506 (lambda* (#:key tests? #:allow-other-keys)
8507 (when tests?
8508 (invoke "pytest" "-v")))))))
8509 (native-inputs
8510 (list python-pytest))
8511 (home-page "https://github.com/alecthomas/importmagic")
8512 (synopsis "Library for adding, removing and managing Python imports")
8513 (description
8514 "Importmagic is a Python library for automatically managing imports by
8515finding unresolved symbols in Python code and their corresponding imports.")
8516 (license license:bsd-3)))
8517
8518(define-public python-inotify-simple
8519 (package
8520 (name "python-inotify-simple")
8521 (version "1.3.5")
8522 (source
8523 (origin
8524 (method git-fetch)
8525 (uri (git-reference
8526 (url "https://github.com/chrisjbillington/inotify_simple")
8527 (commit version)))
8528 (file-name (git-file-name name version))
8529 (sha256
8530 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
8531 (build-system python-build-system)
8532 (home-page
8533 "https://github.com/chrisjbillington/inotify_simple")
8534 (synopsis "Simple wrapper around inotify library")
8535 (description
8536 "@code{inotify-simple} is a simple wrapper around inotify library.")
8537 (license license:bsd-3)))
8538
8539(define-public python-jaraco-classes
8540 (package
8541 (name "python-jaraco-classes")
8542 (version "3.2.1")
8543 (source
8544 (origin
8545 (method url-fetch)
8546 (uri (pypi-uri "jaraco.classes" version))
8547 (sha256
8548 (base32 "0d6g7qvfv1jlzbzh6asprqdblqd59grvlvr3nwbdqdqrmwlbfm7d"))))
8549 (build-system python-build-system)
8550 (arguments
8551 (list
8552 #:phases
8553 #~(modify-phases %standard-phases
8554 (replace 'check
8555 (lambda* (#:key tests? #:allow-other-keys)
8556 (when tests?
8557 ;; Do not test the myproject.toml build as it tries to pull
8558 ;; dependencies from the Internet.
8559 (invoke "pytest" "-vv" "-k" "not project")))))))
8560 (native-inputs
8561 (list python-pytest
8562 python-pytest-black
8563 python-pytest-checkdocs
8564 python-pytest-cov
8565 python-pytest-enabler-bootstrap ;OK since not propagated
8566 python-pytest-flake8
8567 python-pytest-mypy
8568 python-setuptools-scm
8569 python-wheel))
8570 (propagated-inputs (list python-more-itertools))
8571 (home-page "https://github.com/jaraco/jaraco.classes")
8572 (synopsis "Utility functions for Python class constructs")
8573 (description "This Python library contains utility functions for Python
8574class constructs.")
8575 (license license:expat)))
8576
8577;;; Variant used to break a cycle with python-pytest-enabler.
8578(define-public python-jaraco-context-bootstrap
8579 (hidden-package
8580 (package
8581 (name "python-jaraco-context-bootstrap")
8582 (version "4.1.1")
8583 (source
8584 (origin
8585 (method url-fetch)
8586 (uri (pypi-uri "jaraco.context" version))
8587 (sha256
8588 (base32 "0hbjm1rpxf4pzmbdp9rh3ali4zqnlcr8m97bhh1nizxvzcpxim7h"))))
8589 (build-system python-build-system)
8590 (arguments (list #:tests? #f))
8591 (native-inputs (list python-setuptools-scm))
8592 (home-page "https://github.com/jaraco/jaraco.context")
8593 (synopsis "Context managers Python library")
8594 (description "This Python library provides context managers-related
8595procedures.")
8596 (license license:expat))))
8597
8598(define-public python-jaraco-context
8599 (package/inherit python-jaraco-context-bootstrap
8600 (name "python-jaraco-context")
8601 (arguments
8602 (substitute-keyword-arguments
8603 (package-arguments python-jaraco-context-bootstrap)
8604 ((#:tests? _ #f)
8605 (not (%current-target-system)))
8606 ((#:phases phases #~%standard-phases)
8607 #~(modify-phases #$phases
8608 (replace 'check
8609 (lambda* (#:key tests? #:allow-other-keys)
8610 (when tests?
8611 ;; Do not test the myproject.toml build as it tries to pull
8612 ;; dependencies from the Internet.
8613 (invoke "pytest" "-vv" "-k" "not project"))))))))
8614 (native-inputs
8615 (modify-inputs
8616 (package-native-inputs python-jaraco-context-bootstrap)
8617 (append python-pytest
8618 python-pytest-black
8619 python-pytest-checkdocs
8620 python-pytest-cov
8621 python-pytest-enabler-bootstrap ;OK since not propagated
8622 python-pytest-flake8
8623 python-pytest-mypy)))
8624 (properties (alist-delete 'hidden? (package-properties
8625 python-jaraco-context-bootstrap)))))
8626
8627;;; Variant used to break a cycle with python-pytest-enabler.
8628(define-public python-jaraco-functools-bootstrap
8629 (hidden-package
8630 (package
8631 (name "python-jaraco-functools-bootstrap")
8632 (version "3.5.0")
8633 (source
8634 (origin
8635 (method url-fetch)
8636 (uri (pypi-uri "jaraco.functools" version))
8637 (sha256
8638 (base32 "186xqzs3bqhjwajnprxy3sc3h0w5vdld8spc1dxjnn9720yykq1i"))))
8639 (build-system python-build-system)
8640 (arguments (list #:tests? #f))
8641 (native-inputs (list python-setuptools-scm))
8642 (propagated-inputs (list python-more-itertools))
8643 (home-page "https://github.com/jaraco/jaraco.functools")
8644 (synopsis "Python library extending Python's @code{functools}")
8645 (description "This library extends the standard @code{functools} Python
8646module with a few extra procedures.")
8647 (license license:expat))))
8648
8649(define-public python-jaraco-functools
8650 (package/inherit python-jaraco-functools-bootstrap
8651 (name "python-jaraco-functools")
8652 (arguments
8653 (substitute-keyword-arguments
8654 (package-arguments python-jaraco-functools-bootstrap)
8655 ((#:tests? _ #f)
8656 (not (%current-target-system)))
8657 ((#:phases phases #~%standard-phases)
8658 #~(modify-phases #$phases
8659 (replace 'check
8660 (lambda* (#:key tests? #:allow-other-keys)
8661 (when tests?
8662 ;; Do not test the myproject.toml build as it tries to pull
8663 ;; dependencies from the Internet. Do not run a test that
8664 ;; tries to emulate a broken proprietary CI set-up, fails
8665 ;; to do so correctly, and then throws an error about it.
8666 (invoke "pytest" "-vv" "-k"
8667 "not project and not test_function_throttled"))))))))
8668 (native-inputs
8669 (modify-inputs
8670 (package-native-inputs python-jaraco-functools-bootstrap)
8671 (append python-jaraco-classes
8672 python-pytest
8673 python-pytest-black
8674 python-pytest-checkdocs
8675 python-pytest-cov
8676 python-pytest-enabler-bootstrap ;OK since not propagated
8677 python-pytest-flake8
8678 python-pytest-mypy)))
8679 (properties (alist-delete 'hidden? (package-properties
8680 python-jaraco-functools-bootstrap)))))
8681
8682(define-public python-jaraco-packaging
8683 (package
8684 (name "python-jaraco-packaging")
8685 (version "6.1")
8686 (source
8687 (origin
8688 (method url-fetch)
8689 (uri (pypi-uri "jaraco.packaging" version))
8690 (sha256
8691 (base32
8692 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
8693 (build-system python-build-system)
8694 (propagated-inputs
8695 (list python-pytest
8696 python-pytest-checkdocs
8697 python-pytest-flake8
8698 python-rst.linker
8699 python-setuptools
8700 python-setuptools-scm
8701 python-six
8702 python-sphinx))
8703 (home-page "https://github.com/jaraco/jaraco.packaging")
8704 (synopsis "Tools to supplement packaging Python releases")
8705 (description
8706 "This package provides various tools to supplement packaging Python
8707releases.")
8708 (license license:expat)))
8709
8710(define-public python-simplegeneric
8711 (package
8712 (name "python-simplegeneric")
8713 (version "0.8.1")
8714 (source
8715 (origin
8716 (method url-fetch)
8717 (uri (pypi-uri "simplegeneric" version ".zip"))
8718 (sha256
8719 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
8720 (build-system python-build-system)
8721 (native-inputs
8722 (list unzip))
8723 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
8724 (synopsis "Python module for simple generic functions")
8725 (description
8726 "The simplegeneric module lets you define simple single-dispatch generic
8727functions, akin to Python’s built-in generic functions like @code{len()},
8728@code{iter()} and so on. However, instead of using specially-named methods,
8729these generic functions use simple lookup tables, akin to those used by
8730e.g. @code{pickle.dump()} and other generic functions found in the Python
8731standard library.")
8732 (license license:zpl2.1)))
8733
8734(define-public python-ipython-genutils
8735 ;; TODO: This package is retired, check if can be removed, see description.
8736 (package
8737 (name "python-ipython-genutils")
8738 (version "0.1.0")
8739 (source
8740 (origin
8741 (method url-fetch)
8742 (uri (pypi-uri "ipython_genutils" version))
8743 (sha256
8744 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
8745 (build-system python-build-system)
8746 (arguments `(#:tests? #f)) ; no tests
8747 (home-page "https://ipython.org")
8748 (synopsis "Vestigial utilities from IPython")
8749 (description
8750 "This package provides retired utilities from IPython. No packages
8751outside IPython/Jupyter should depend on it.
8752
8753This package shouldn't exist. It contains some common utilities shared by
8754Jupyter and IPython projects during The Big Split. As soon as possible, those
8755packages will remove their dependency on this, and this package will go
8756away.")
8757 (license license:bsd-3)))
8758
8759;;; Variant used to break a cycle with python-ipykernel.
8760(define-public python-ipyparallel-bootstrap
8761 (hidden-package
8762 (package
8763 (name "python-ipyparallel-bootstrap")
8764 (version "8.2.1")
8765 (source
8766 (origin
8767 (method url-fetch)
8768 (uri (pypi-uri "ipyparallel" version))
8769 (sha256
8770 (base32
8771 "0wiwfd7870zbmczzn96jqxxjf2zcbcaxnsl1ddn8hspwa8y4frzj"))))
8772 (build-system python-build-system)
8773 (arguments
8774 (list
8775 #:tests? #f
8776 #:phases #~(modify-phases %standard-phases
8777 ;; The python-ipykernel is normally propagated but is
8778 ;; removed from this package to break the cycle.
8779 (delete 'sanity-check))))
8780 (propagated-inputs
8781 (list python-dateutil
8782 python-decorator
8783 python-entrypoints
8784 python-ipython
8785 ;; python-ipykernel is omitted here to break a cycle.
8786 python-jupyter-client-bootstrap
8787 python-psutil
8788 python-pyzmq
8789 python-tornado-6
8790 python-tqdm
8791 python-traitlets))
8792 (home-page "https://ipython.org/")
8793 (synopsis "Interactive Parallel Computing with IPython")
8794 (description
8795 "@code{ipyparallel} is a Python package and collection of CLI scripts for
8796controlling clusters for Jupyter. @code{ipyparallel} contains the following
8797CLI scripts:
8798@enumerate
8799@item ipcluster - start/stop a cluster
8800@item ipcontroller - start a scheduler
8801@item ipengine - start an engine
8802@end enumerate")
8803 (license license:bsd-3))))
8804
8805(define-public python-ipyparallel
8806 (package
8807 (inherit python-ipyparallel-bootstrap)
8808 (name "python-ipyparallel")
8809 (arguments
8810 (list
8811 #:phases
8812 #~(modify-phases %standard-phases
8813 (replace 'check
8814 (lambda _
8815 (invoke "pytest" "-vv"))))))
8816 (native-inputs
8817 (list python-ipython
8818 python-pytest
8819 python-pytest-asyncio
8820 python-pytest-cov
8821 python-pytest-tornado
8822 python-testpath))
8823 (propagated-inputs
8824 (modify-inputs (package-propagated-inputs python-ipyparallel-bootstrap)
8825 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
8826 (append python-ipykernel)))
8827 (properties (alist-delete 'hidden? (package-properties
8828 python-ipyparallel-bootstrap)))))
8829
8830(define-public python-ipython-cluster-helper
8831 (package
8832 (name "python-ipython-cluster-helper")
8833 (version "0.6.4")
8834 (source
8835 (origin
8836 (method url-fetch)
8837 (uri (pypi-uri "ipython-cluster-helper" version))
8838 (sha256
8839 (base32
8840 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
8841 (modules '((guix build utils)))
8842 (snippet
8843 '(begin (substitute* "requirements.txt"
8844 (("ipython.*") "ipython\n"))
8845 #t))))
8846 (build-system python-build-system)
8847 (arguments
8848 `(#:tests? #f ; Test suite can't find IPython.
8849 #:phases
8850 (modify-phases %standard-phases
8851 (replace 'check
8852 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
8853 (if tests?
8854 (begin
8855 (setenv "HOME" (getcwd))
8856 (add-installed-pythonpath inputs outputs)
8857 (invoke "python" "example/example.py" "--local"))
8858 #t))))))
8859 (propagated-inputs
8860 (list python-ipyparallel
8861 python-ipython
8862 python-netifaces
8863 python-pyzmq
8864 python-setuptools
8865 python-six))
8866 (home-page "https://github.com/roryk/ipython-cluster-helper")
8867 (synopsis
8868 "Simplify IPython cluster start up and use for multiple schedulers")
8869 (description
8870 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
8871profile, launches a cluster and returns a view. On program exit it shuts the
8872cluster down and deletes the throwaway profile.")
8873 (license license:expat)))
8874
8875(define-public python-ipython-sql
8876 (package
8877 (name "python-ipython-sql")
8878 (version "0.4.1")
8879 (source
8880 (origin
8881 (method url-fetch)
8882 (uri (pypi-uri "ipython-sql" version))
8883 (sha256
8884 (base32 "1r6rz8jgrqzhkf2flwjw75d96g8l7kykmx5wli3q1988w96391ip"))))
8885 (build-system python-build-system)
8886 (arguments
8887 (list #:tests? #f ;must run under IPython
8888 #:phases
8889 #~(modify-phases %standard-phases
8890 (add-after 'unpack 'permit-newer-prettytable
8891 ;; See https://github.com/catherinedevlin/ipython-sql/issues/202
8892 (lambda _
8893 (substitute* "setup.py"
8894 (("prettytable<1")
8895 "prettytable")))))))
8896 (propagated-inputs
8897 (list python-ipython
8898 python-ipython-genutils
8899 python-prettytable
8900 python-six
8901 python-sqlalchemy
8902 python-sqlparse))
8903 (home-page "https://github.com/catherinedevlin/ipython-sql")
8904 (synopsis "RDBMS access via IPython")
8905 (description "This library connects to a database, using SQLAlchemy URL
8906connect strings, then issue SQL commands within IPython or IPython Notebook.")
8907 (license license:expat)))
8908
8909(define-public python-traitlets
8910 (package
8911 (name "python-traitlets")
8912 (version "5.1.1")
8913 (source
8914 (origin
8915 (method url-fetch)
8916 (uri (pypi-uri "traitlets" version))
8917 (sha256
8918 (base32
8919 "1ivhxglsrnhqw4g98ihddn7i5f6976gpk31fijwq473wb9n4b7q5"))))
8920 (build-system python-build-system)
8921 (arguments
8922 `(#:phases
8923 (modify-phases %standard-phases
8924 (replace 'check (lambda* (#:key tests? #:allow-other-keys)
8925 (when tests?
8926 (invoke "pytest" "-vv" "traitlets")))))))
8927 (native-inputs
8928 (list python-pytest))
8929 (home-page "https://ipython.org")
8930 (synopsis "Configuration system for Python applications")
8931 (description
8932 "Traitlets is a framework that lets Python classes have attributes with
8933type checking, dynamically calculated default values, and ‘on change’
8934callbacks. The package also includes a mechanism to use traitlets for
8935configuration, loading values from files or from command line arguments. This
8936is a distinct layer on top of traitlets, so you can use traitlets in your code
8937without using the configuration machinery.")
8938 (license license:bsd-3)))
8939
8940(define-public python-jupyter-core
8941 (package
8942 (name "python-jupyter-core")
8943 (version "4.10.0")
8944 (source
8945 (origin
8946 (method url-fetch)
8947 (uri (string-append (pypi-uri "jupyter_core" version)))
8948 (sha256
8949 (base32
8950 "1v0s31rmwppdmww135hif03hy164j9kimirh24kxfcbvdfql9pm6"))))
8951 (build-system python-build-system)
8952 (arguments
8953 `(#:phases
8954 (modify-phases %standard-phases
8955 (replace 'check
8956 (lambda* (#:key tests? #:allow-other-keys)
8957 (when tests?
8958 ;; Some tests write to $HOME.
8959 (setenv "HOME" "/tmp")
8960 (invoke "pytest" "-vv"
8961 "-k"
8962 (string-append
8963 ;; XXX: These tests fail with "ModuleNotFoundError: No
8964 ;; module named 'jupyter_core'".
8965 "not test_argv0 and not test_path_priority "
8966 "and not test_not_on_path")))))
8967 (add-after 'unpack 'patch-testsuite
8968 (lambda _
8969 ;; test_not_on_path() and test_path_priority() try to run a test
8970 ;; that loads jupyter_core, so we need GUIX_PYTHONPATH
8971 (substitute* "jupyter_core/tests/test_command.py"
8972 (("env = \\{'PATH': ''\\}")
8973 "env = {'PATH': '', 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}")
8974 (("env = \\{'PATH': str\\(b\\)\\}")
8975 "env = {'PATH': str(b), 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}"))))
8976 ;; Migration is running whenever etc/jupyter exists, but the
8977 ;; Guix-managed directory will never contain any migratable IPython
8978 ;; config files and cannot be written to anyway, so just pretend we
8979 ;; already did that.
8980 (add-after 'install 'disable-migration
8981 (lambda* (#:key outputs #:allow-other-keys)
8982 (mkdir-p (string-append (assoc-ref outputs "out") "/etc/jupyter"))
8983 (invoke "touch"
8984 (string-append
8985 (assoc-ref outputs "out")
8986 "/etc/jupyter/migrated")))))))
8987 (propagated-inputs (list python-traitlets))
8988 (native-inputs (list python-pytest))
8989 ;; This package provides the `jupyter` binary and thus also exports the
8990 ;; search paths.
8991 (native-search-paths
8992 (list (search-path-specification
8993 (variable "JUPYTER_CONFIG_PATH")
8994 (files '("etc/jupyter")))
8995 (search-path-specification
8996 (variable "JUPYTER_PATH")
8997 (files '("share/jupyter")))))
8998 (home-page "https://jupyter.org/")
8999 (synopsis "Jupyter base package")
9000 (description
9001 "Jupyter core is the base package on which Jupyter projects rely.")
9002 (license license:bsd-3)))
9003
9004;; Bootstrap variant of jupyter-client, which breaks the loop between ipykernel
9005;; and jupyter-client by removing the former from its native-inputs and
9006;; disabling tests.
9007(define-public python-jupyter-client-bootstrap
9008 (hidden-package
9009 (package
9010 (name "python-jupyter-client-bootstrap")
9011 (version "7.2.2")
9012 (source
9013 (origin
9014 (method url-fetch)
9015 (uri (pypi-uri "jupyter_client" version))
9016 (sha256
9017 (base32
9018 "12pbp177bfb3710y1a5598mwn8ffhyzmpll67m0nmalb98savnwg"))))
9019 (build-system python-build-system)
9020 (arguments
9021 (list
9022 #:tests? #f
9023 #:phases
9024 #~(modify-phases %standard-phases
9025 (add-after 'unpack 'set-tool-file-names
9026 (lambda* (#:key inputs #:allow-other-keys)
9027 (substitute* "jupyter_client/localinterfaces.py"
9028 (("'ip'")
9029 (format #f "'~a'" (search-input-file inputs "sbin/ip")))))))))
9030 (inputs (list iproute))
9031 (propagated-inputs
9032 (list python-dateutil
9033 python-entrypoints
9034 python-jupyter-core
9035 python-nest-asyncio
9036 python-pyzmq
9037 python-tornado-6
9038 python-traitlets))
9039 (home-page "https://jupyter.org/")
9040 (synopsis "Jupyter protocol implementation and client libraries")
9041 (description
9042 "The @code{jupyter_client} package contains the reference implementation
9043of the Jupyter protocol. It also provides client and kernel management APIs
9044for working with kernels, and the @code{jupyter kernelspec} entrypoint for
9045installing @code{kernelspec}s for use with Jupyter frontends.")
9046 (license license:bsd-3))))
9047
9048(define-public python-jupyter-client
9049 (let ((base python-jupyter-client-bootstrap))
9050 (package
9051 (inherit base)
9052 (name "python-jupyter-client")
9053 (arguments
9054 (substitute-keyword-arguments (package-arguments base)
9055 ((#:tests? _ #f)
9056 (not (%current-target-system)))
9057 ((#:phases phases #~%standard-phases)
9058 #~(modify-phases #$phases
9059 (replace 'check
9060 (lambda* (#:key tests? #:allow-other-keys)
9061 (when tests?
9062 ;; Some tests try to write to $HOME.
9063 (setenv "HOME" "/tmp")
9064 (invoke "pytest" "-vv"))))))))
9065 (native-inputs
9066 (list python-pytest
9067 python-pytest-asyncio
9068 python-pytest-timeout
9069 python-async-generator
9070 python-ipython
9071 python-ipykernel-bootstrap))
9072 (properties (alist-delete 'hidden? (package-properties base))))))
9073
9074(define-public python-ipykernel
9075 (package
9076 (name "python-ipykernel")
9077 (version "6.13.0")
9078 (source
9079 (origin
9080 (method url-fetch)
9081 (uri (pypi-uri "ipykernel" version))
9082 (sha256
9083 (base32 "0q5yni8h08nadsn53f957p0pjsjhwl2b2lp1hqz3jn0854z2fa0f"))))
9084 (build-system python-build-system)
9085 (arguments
9086 (list
9087 #:imported-modules `(,@%python-build-system-modules
9088 (guix build syscalls))
9089 #:modules '((guix build python-build-system)
9090 (guix build syscalls)
9091 (guix build utils)
9092 (ice-9 match))
9093 #:phases
9094 #~(modify-phases %standard-phases
9095 (replace 'check
9096 (lambda* (#:key tests? #:allow-other-keys)
9097 (when tests?
9098 (match (primitive-fork)
9099 (0 ;child process
9100 (set-child-subreaper!)
9101 ;; XXX: Tini provides proper PID1-like signal handling that
9102 ;; reaps zombie processes, necessary for the
9103 ;; 'test_shutdown_subprocesses' test to pass.
9104
9105 ;; TODO: Complete https://issues.guix.gnu.org/30948.
9106 (setenv "HOME" "/tmp")
9107 (execlp "tini" "--" "pytest" "-vv"))
9108 (pid
9109 (match (waitpid pid)
9110 ((_ . status)
9111 (unless (zero? status)
9112 (error "`pytest' exited with status"
9113 status)))))))))
9114 (add-after 'install 'set-python-file-name
9115 (lambda* (#:key inputs #:allow-other-keys)
9116 ;; Record the absolute file name of the 'python' executable in
9117 ;; 'kernel.json'.
9118 (substitute* (string-append #$output "/share/jupyter"
9119 "/kernels/python3/kernel.json")
9120 (("\"python\"")
9121 (format #f "~s" (search-input-file inputs
9122 "/bin/python3")))))))))
9123 (propagated-inputs
9124 (list python-debugpy
9125 python-ipython
9126 python-jupyter-client ;imported at runtime during connect
9127 python-matplotlib-inline
9128 ;;python-nest-asyncio
9129 ;;python-packaging
9130 python-psutil
9131 python-tornado-6
9132 python-traitlets))
9133 (inputs (list python)) ;for cross compilation
9134 (native-inputs
9135 (list python-flaky
9136 python-ipyparallel-bootstrap
9137 ;; XXX: Our Pytest package captures its native inputs in its
9138 ;; wrapper script (such as python-nose), which is used in the code
9139 ;; and causes deprecation warnings. Using the bootstrap variant
9140 ;; avoids that.
9141 python-pytest-bootstrap
9142 python-pytest-timeout
9143 tini))
9144 (home-page "https://ipython.org")
9145 (synopsis "IPython Kernel for Jupyter")
9146 (description "This package provides the IPython kernel for Jupyter.")
9147 (license license:bsd-3)))
9148
9149;; Bootstrap variant of ipykernel, which uses the bootstrap jupyter-client to
9150;; break the cycle between ipykernel and jupyter-client.
9151(define-public python-ipykernel-bootstrap
9152 (let ((parent python-ipykernel))
9153 (hidden-package
9154 (package
9155 (inherit parent)
9156 (name "python-ipykernel-bootstrap")
9157 (arguments (list #:tests? #f
9158 ;; The package should normally propagate ipykernel,
9159 ;; left out here to break the cycle.
9160 #:phases #~(modify-phases %standard-phases
9161 (delete 'sanity-check))))
9162 (native-inputs '())
9163 (propagated-inputs
9164 (modify-inputs (package-propagated-inputs parent)
9165 (replace "python-jupyter-client" python-jupyter-client-bootstrap)
9166 (append python-ipyparallel-bootstrap)))))))
9167
9168(define-public python-pari-jupyter
9169 (package
9170 (name "python-pari-jupyter")
9171 (version "1.4.1")
9172 (source
9173 (origin
9174 (method url-fetch)
9175 (uri (pypi-uri "pari-jupyter" version))
9176 (sha256
9177 (base32
9178 "1ikqvv335qfrhmlji0iclci6pnm2c3fvnxf031jr1d68j79g6ypd"))))
9179 (build-system python-build-system)
9180 (arguments '(#:tests? #f)) ;no test suite
9181 (inputs
9182 (list pari-gp readline python-ipykernel))
9183 (home-page "https://github.com/sagemath/pari-jupyter")
9184 (synopsis "Jupyter kernel for PARI/GP")
9185 (description "The package provides a PARI/GP kernel for Jupyter.")
9186 (license license:gpl3+)))
9187
9188(define-public python-backcall
9189 (package
9190 (name "python-backcall")
9191 (version "0.2.0")
9192 (source
9193 (origin
9194 (method url-fetch)
9195 (uri (pypi-uri "backcall" version))
9196 (sha256
9197 (base32
9198 "07jy4562lvnhkk6kfr3cphmizy88anlhmbwb8kdzlz2ypqkvzgaw"))))
9199 (build-system python-build-system)
9200 (home-page "https://github.com/takluyver/backcall/")
9201 (synopsis "Specifications for callback functions passed in to an API")
9202 (description
9203 "If your code lets other people supply callback functions, it's important
9204to specify the function signature you expect, and check that functions support
9205that. Adding extra parameters later would break other peoples code unless
9206you're careful. The @code{backcall} package provides a way of specifying the
9207callback signature using a prototype function.")
9208 (license license:bsd-3)))
9209
9210(define-public python-pure-eval
9211 (package
9212 (name "python-pure-eval")
9213 (version "0.2.2")
9214 (source
9215 (origin
9216 (method url-fetch)
9217 (uri (pypi-uri "pure_eval" version))
9218 (sha256
9219 (base32 "1hwsm85cwqwh6d6x4vzcimla2865s6v19ms3ym81ganzyq534i9b"))))
9220 (build-system python-build-system)
9221 (native-inputs (list python-pytest python-setuptools-scm))
9222 (home-page "https://github.com/alexmojaki/pure_eval")
9223 (synopsis "Python library to evaluate abstract syntax tree nodes")
9224 (description "The @code{pure_eval} Python library can safely evaluate
9225abstract syntax tree (AST) nodes without side effects.")
9226 (license license:expat)))
9227
9228(define-public python-asttokens
9229 (package
9230 (name "python-asttokens")
9231 (version "2.0.5")
9232 (source
9233 (origin
9234 (method url-fetch)
9235 (uri (pypi-uri "asttokens" version))
9236 (sha256
9237 (base32 "1mglbkikxvnhrk3inbx0v1qzxwd38qjr6l35sn098yicy0ac2m4s"))))
9238 (build-system python-build-system)
9239 (propagated-inputs (list python-six))
9240 (native-inputs (list python-astroid python-pytest python-setuptools-scm))
9241 (home-page "https://github.com/gristlabs/asttokens")
9242 (synopsis "Python library to annotate abstract syntax trees")
9243 (description "The @code{asttokens} module annotates Python abstract syntax
9244trees (ASTs) with the positions of tokens and text in the source code that
9245generated them. It makes it possible for tools that work with logical AST
9246nodes to find the particular text that resulted in those nodes, for example
9247for automated refactoring or highlighting.")
9248 (license license:asl2.0)))
9249
9250(define-public python-littleutils
9251 (package
9252 (name "python-littleutils")
9253 (version "0.2.2")
9254 (source
9255 (origin
9256 (method url-fetch)
9257 (uri (pypi-uri "littleutils" version))
9258 (sha256
9259 (base32 "0vwijrylppmk0nbddqvn527r9cg3zw8d6zk6r58hslry42jf7jp6"))))
9260 (build-system python-build-system)
9261 (home-page "https://github.com/alexmojaki/littleutils")
9262 (synopsis "Python utility function collection")
9263 (description "@code{littleutils} is a small collection of Python utility
9264functions, useful in the context of writing unit tests among other uses.")
9265 (license license:expat)))
9266
9267(define-public python-stack-data
9268 (package
9269 (name "python-stack-data")
9270 (version "0.2.0")
9271 (source
9272 (origin
9273 (method url-fetch)
9274 (uri (pypi-uri "stack_data" version))
9275 (sha256
9276 (base32 "04lfcj5qrn4qikjw89qbdzqwm0xm4bgm4m8rll1rafk3pm0jssa5"))))
9277 (build-system python-build-system)
9278 (propagated-inputs (list python-asttokens python-executing python-pure-eval))
9279 (native-inputs
9280 (list python-cython
9281 python-littleutils
9282 python-pygments
9283 python-pytest
9284 python-setuptools-scm
9285 python-typeguard))
9286 (home-page "https://github.com/alexmojaki/stack_data")
9287 (synopsis "Python stack frame and traceback manipulation library")
9288 (description "The @code{stack_data} Python library extracts data from
9289stack frames and tracebacks. Is can be used to display more useful tracebacks
9290than the default.")
9291 (license license:expat)))
9292
9293(define-public python-ipython
9294 (package
9295 (name "python-ipython")
9296 (version "8.2.0")
9297 (source
9298 (origin
9299 (method url-fetch)
9300 (uri (pypi-uri "ipython" version ".tar.gz"))
9301 (sha256
9302 (base32 "1hcxa713wh3axa57412iy02rj0494ljvv6gpnls4lndc5h9yprbh"))))
9303 (build-system python-build-system)
9304 (arguments
9305 `(#:phases
9306 (modify-phases %standard-phases
9307 (add-after 'unpack 'make-docs-reproducible
9308 (lambda _
9309 (substitute* "IPython/sphinxext/ipython_directive.py"
9310 ((".*import datetime") "")
9311 ((".*datetime.datetime.now\\(\\)") "")
9312 (("%timeit") "# %timeit"))))
9313 (replace 'check
9314 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
9315 (when tests?
9316 (setenv "HOME" "/tmp/") ;required by some tests
9317 (invoke "python" "-m" "pytest" "-vv")))))))
9318 (inputs (list readline which))
9319 (propagated-inputs
9320 (list python-backcall
9321 python-decorator
9322 python-jedi
9323 python-jinja2
9324 python-jsonschema
9325 python-matplotlib
9326 python-matplotlib-inline
9327 python-mistune
9328 python-nbformat
9329 python-numpy
9330 python-numpydoc
9331 python-pexpect
9332 python-pickleshare
9333 python-prompt-toolkit
9334 python-pygments
9335 python-pyzmq
9336 python-simplegeneric
9337 python-stack-data
9338 python-terminado
9339 python-traitlets))
9340 (native-inputs
9341 (list graphviz
9342 pkg-config
9343 ;; For tests.
9344 python-pytest
9345 python-requests
9346 python-testpath))
9347 (home-page "https://ipython.org")
9348 (synopsis "IPython is a tool for interactive computing in Python")
9349 (description
9350 "IPython provides a rich architecture for interactive computing with:
9351Powerful interactive shells, a browser-based notebook, support for interactive
9352data visualization, embeddable interpreters and tools for parallel
9353computing.")
9354 (properties '((cpe-name . "ipython")))
9355 (license license:bsd-3)))
9356
9357(define-public python-ipython-documentation
9358 (package
9359 (inherit python-ipython)
9360 (name "python-ipython-documentation")
9361 (version (package-version python-ipython))
9362 (source
9363 (origin
9364 (inherit (package-source python-ipython))
9365 (patches (append (search-patches
9366 "python-ipython-documentation-chars.patch"
9367 "python-ipython-documentation-repro.patch")
9368 (origin-patches (package-source python-ipython))))))
9369 (arguments
9370 (list
9371 #:phases
9372 #~(modify-phases %standard-phases
9373 (add-after 'unpack 'set-pythonpath
9374 (lambda _
9375 ;; Ensure this fixed (via the
9376 ;; "python-ipython-documentation-chars.patch" patch) copy of
9377 ;; IPython gets used.
9378 (setenv "PYTHONPATH" (string-append (getcwd)))))
9379 (add-before 'build 'configure-sphinx-for-xelatex
9380 (lambda _
9381 ;; Use XeLaTeX instead of PDFLaTeX, as it can
9382 ;; cope with the Unicode characters present in the
9383 ;; contributors page, for example.
9384 (substitute* "docs/source/conf.py"
9385 (("project = 'IPython'.*" all)
9386 (string-append all "latex_engine = 'xelatex'\n")))
9387 ;; XXX: The Sphinx-generated ipython.tex specifies the GNU
9388 ;; FreeFont font to be searched via its extension, which uses
9389 ;; kpathsea instead of fontconfig and fail (see:
9390 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
9391 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
9392 ;; GUIX_TEXMF.
9393 (mkdir-p "texmf-dist/fonts/opentype/public")
9394 (symlink (string-append
9395 #$(this-package-native-input "font-gnu-freefont")
9396 "/share/fonts/opentype")
9397 (string-append
9398 (getcwd) "/"
9399 "texmf-dist/fonts/opentype/public/gnu-freefont"))
9400 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
9401 (getcwd) "/texmf-dist"))))
9402 (delete 'build)
9403 (delete 'check)
9404 (replace 'install
9405 (lambda* (#:key outputs #:allow-other-keys)
9406 (let* ((data (string-append #$output "/share"))
9407 (doc (string-append data "/doc/" #$name "-" #$version))
9408 (html (string-append doc "/html"))
9409 (info (string-append data "/info")))
9410 (invoke "make" "-C" "docs" "info" "html" "pdf"
9411 (string-append "SPHINXOPTS=-j"
9412 (number->string (parallel-job-count))))
9413 (install-file "COPYING.rst" doc)
9414 (copy-recursively "examples" (string-append doc "/examples"))
9415 ;; Install HTML documentation.
9416 (copy-recursively "docs/build/html" html)
9417 ;; Likewise for the PDF.
9418 (install-file "docs/build/latex/ipython.pdf" doc)
9419 ;; Likewise for the info manual.
9420 (install-file "docs/build/texinfo/ipython.info" info)
9421 (symlink (string-append html "/_images")
9422 (string-append info "/ipython-figures"))))))))
9423 (native-inputs
9424 (list fontconfig ;for XDG_DATA_DIRS to locate fonts
9425 font-gnu-freefont
9426 graphviz
9427 python-docrepr
9428 python-sphinx
9429 python-sphinx-rtd-theme
9430 texinfo
9431 texlive-bin
9432 texlive-polyglossia
9433 texlive-xindy))))
9434
9435(define-public python-urwid
9436 (package
9437 (name "python-urwid")
9438 (version "2.1.2")
9439 (source
9440 (origin
9441 (method url-fetch)
9442 (uri (pypi-uri "urwid" version))
9443 (sha256
9444 (base32
9445 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
9446 (build-system python-build-system)
9447 (arguments
9448 (list
9449 #:phases
9450 #~(modify-phases %standard-phases
9451 (add-after 'unpack 'remove-vterm-tests
9452 ;; According to Debian these tests are cursed.
9453 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
9454 (lambda _
9455 (delete-file "urwid/tests/test_vterm.py"))))))
9456 (home-page "http://urwid.org")
9457 (synopsis "Console user interface library for Python")
9458 (description
9459 "Urwid is a curses-based UI/widget library for Python. It includes many
9460features useful for text console applications.")
9461 (license license:lgpl2.1+)))
9462
9463(define-public python-urwid-readline
9464 (package
9465 (name "python-urwid-readline")
9466 (version "0.13")
9467 (source
9468 (origin
9469 (method git-fetch)
9470 (uri (git-reference
9471 (url "https://github.com/rr-/urwid_readline")
9472 (commit version)))
9473 (file-name (git-file-name name version))
9474 (sha256
9475 (base32
9476 "0y9k86p31mlr9rwnrbljvfgl183r5j60yaj0r3scljn1m0mlg8qg"))))
9477 (build-system python-build-system)
9478 (arguments
9479 `(#:phases
9480 (modify-phases %standard-phases
9481 (replace 'check
9482 (lambda* (#:key tests? #:allow-other-keys)
9483 (when tests?
9484 (invoke "pytest" "-vv")))))))
9485 (propagated-inputs (list python-urwid))
9486 (native-inputs (list python-pytest))
9487 (home-page "https://github.com/rr-/urwid_readline")
9488 (synopsis "Text input widget for urwid that supports readline shortcuts")
9489 (description
9490 "This package provides a textbox edit widget for @code{python-urwid} that
9491supports @code{readline} shortcuts.")
9492 (license license:expat)))
9493
9494(define-public python-textdistance
9495 (package
9496 (name "python-textdistance")
9497 (version "4.2.1")
9498 (source
9499 (origin
9500 ;; There are no tests in the PyPI tarball.
9501 (method git-fetch)
9502 (uri (git-reference
9503 (url "https://github.com/life4/textdistance")
9504 (commit (string-append "v." version))))
9505 (file-name (git-file-name name version))
9506 (sha256
9507 (base32 "1g17i356fnny4k6hjr2ayy9k77jbvd6zzmngws2kbrnvhss1wgwf"))))
9508 (build-system python-build-system)
9509 (arguments
9510 `(#:test-target "pytest"
9511 #:phases
9512 (modify-phases %standard-phases
9513 (add-after 'unpack 'delete-external-test
9514 (lambda _
9515 ;; All tests in this file require external libraries.
9516 (delete-file "tests/test_external.py")
9517 #t)))))
9518 (native-inputs
9519 (list python-hypothesis
9520 python-isort
9521 python-numpy
9522 python-pytest
9523 python-pytest-runner
9524 python-tabulate))
9525 (home-page "https://github.com/life4/textdistance")
9526 (synopsis "Compute distance between the two texts")
9527 (description "@code{textdistance} is a pure Python library for comparing
9528distance between two or more sequences by many algorithms.")
9529 (license license:expat)))
9530
9531(define-public python-urwidtrees
9532 (package
9533 (name "python-urwidtrees")
9534 (version "1.0.3")
9535 (source
9536 (origin
9537 (method git-fetch)
9538 ;; package author intends on distributing via github rather than pypi:
9539 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
9540 (uri (git-reference
9541 (url "https://github.com/pazz/urwidtrees")
9542 (commit version)))
9543 (file-name (git-file-name name version))
9544 (sha256
9545 (base32
9546 "1y1vysx7jg0vbrarlsykhf7nmr8fc6k1fva1q3i98xq2m30s6r68"))))
9547 (build-system python-build-system)
9548 (arguments
9549 '(#:tests? #f)) ; no tests
9550 (propagated-inputs (list python-urwid))
9551 (native-inputs (list python-mock))
9552 (home-page "https://github.com/pazz/urwidtrees")
9553 (synopsis "Tree widgets for urwid")
9554 (description "Urwidtrees is a Widget Container API for the @code{urwid}
9555toolkit. Use it to build trees of widgets.")
9556 (license license:gpl3+)))
9557
9558(define-public python-ua-parser
9559 (package
9560 (name "python-ua-parser")
9561 (version "0.10.0")
9562 (source
9563 (origin
9564 (method url-fetch)
9565 (uri (pypi-uri "ua-parser" version))
9566 (sha256
9567 (base32
9568 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
9569 (build-system python-build-system)
9570 (arguments
9571 `(#:tests? #f)) ;no test suite in release
9572 (native-inputs
9573 (list python-pyyaml))
9574 (home-page "https://github.com/ua-parser/uap-python")
9575 (synopsis "User agent parser")
9576 (description
9577 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
9578 (license license:asl2.0)))
9579
9580(define-public python-user-agents
9581 (package
9582 (name "python-user-agents")
9583 (version "2.2.0")
9584 (source
9585 (origin
9586 (method url-fetch)
9587 (uri (pypi-uri "user-agents" version))
9588 (sha256
9589 (base32
9590 "09mddriffm9rkwr30081fy9n3cn976ms8pwc8p8hhlxnilbjavfk"))))
9591 (build-system python-build-system)
9592 (arguments
9593 `(#:tests? #f)) ;missing devices.json test file in release
9594 (propagated-inputs
9595 (list python-ua-parser))
9596 (home-page "https://github.com/selwin/python-user-agents")
9597 (synopsis "User Agent strings parsing library")
9598 (description
9599 "A library to identify devices (phones, tablets) and their capabilities by
9600parsing (browser/HTTP) user agent strings.")
9601 (license license:expat)))
9602
9603(define-public python-pydbus
9604 (package
9605 (name "python-pydbus")
9606 (version "0.6.0")
9607 (source
9608 (origin
9609 (method url-fetch)
9610 (uri (pypi-uri "pydbus" version))
9611 (sha256
9612 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
9613 (build-system python-build-system)
9614 (propagated-inputs (list python-pygobject))
9615 (home-page "https://github.com/LEW21/pydbus")
9616 (synopsis "Pythonic D-Bus library")
9617 (description "Pydbus provides a pythonic interface to the D-Bus
9618message bus system. Pydbus can be used to access remote objects and
9619also for object publication. It is based on PyGI, the Python GObject
9620Introspection bindings, which is the recommended way to use GLib from Python.")
9621 (license license:lgpl2.1+)))
9622
9623(define-public python-dbus
9624 (package
9625 (name "python-dbus")
9626 (version "1.2.18")
9627 (source
9628 (origin
9629 (method url-fetch)
9630 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
9631 "dbus-python-" version ".tar.gz"))
9632 (sha256
9633 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
9634 (build-system gnu-build-system)
9635 (native-inputs
9636 (list pkg-config))
9637 (inputs
9638 `(("python" ,python-wrapper)
9639 ("dbus-glib" ,dbus-glib)))
9640 (synopsis "Python bindings for D-bus")
9641 (description "python-dbus provides bindings for libdbus, the reference
9642implementation of D-Bus.")
9643 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
9644 (properties `((python2-variant . ,(delay python2-dbus))))
9645 (license license:expat)))
9646
9647(define-public python2-dbus
9648 (package/inherit python-dbus
9649 (name "python2-dbus")
9650 (inputs `(("python" ,python-2)
9651 ,@(alist-delete "python"
9652 (package-inputs python-dbus))))
9653 (arguments
9654 `(#:configure-flags '("PYTHON_VERSION=2")))))
9655
9656(define-public python-dbus-next
9657 (package
9658 (name "python-dbus-next")
9659 (version "0.2.3")
9660 (source
9661 (origin
9662 (method git-fetch)
9663 (uri (git-reference
9664 (url "https://github.com/altdesktop/python-dbus-next")
9665 (commit (string-append "v" version))))
9666 (file-name (git-file-name name version))
9667 (sha256
9668 (base32
9669 "1ahaz52kny1p9xxv6phvk4iq56rg8li390wywlxf2yslaij1188h"))))
9670 (build-system python-build-system)
9671 (native-inputs
9672 (list python-pytest))
9673 (home-page "https://github.com/altdesktop/python-dbus-next")
9674 (synopsis "Zero-dependency DBus library for Python with asyncio support")
9675 (description
9676 "This DBus library for Python aims to be a fully-featured high-level
9677library primarily geared towards integration of applications into desktop and
9678mobile environments.")
9679 (license license:expat)))
9680
9681(define-public python-notify2
9682 (package
9683 (name "python-notify2")
9684 (version "0.3.1")
9685 (source
9686 (origin
9687 (method url-fetch)
9688 (uri (pypi-uri "notify2" version))
9689 (sha256
9690 (base32
9691 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
9692 (build-system python-build-system)
9693 (arguments `(#:tests? #f)) ; tests depend on system state
9694 (propagated-inputs
9695 (list python-dbus))
9696 (home-page "https://bitbucket.org/takluyver/pynotify2")
9697 (synopsis "Python interface to D-Bus notifications")
9698 (description
9699 "Pynotify2 provides a Python interface for sending D-Bus notifications.
9700It is a reimplementation of pynotify in pure Python, and an alternative to
9701the GObject Introspection bindings to libnotify for non-GTK applications.")
9702 (license (list license:bsd-2
9703 license:lgpl2.1+))))
9704
9705;; beautifulsoup4 has a totally different namespace than 3.x,
9706;; and pypi seems to put it under its own name, so I guess we should too
9707(define-public python-beautifulsoup4
9708 (package
9709 (name "python-beautifulsoup4")
9710 (version "4.11.1")
9711 (source
9712 (origin
9713 (method url-fetch)
9714 (uri (pypi-uri "beautifulsoup4" version))
9715 (sha256
9716 (base32
9717 "14v68cpfzckfz63n9hnbsm271jvzvxscyijz83mhha7gcmdsb6md"))))
9718 (build-system python-build-system)
9719 (arguments
9720 '(#:phases (modify-phases %standard-phases
9721 (replace 'check
9722 (lambda* (#:key tests? #:allow-other-keys)
9723 (when tests?
9724 (invoke "pytest" "-vv")))))))
9725 (native-inputs
9726 (list python-pytest))
9727 (propagated-inputs
9728 (list python-soupsieve python-html5lib python-lxml))
9729 (home-page
9730 "https://www.crummy.com/software/BeautifulSoup/bs4/")
9731 (synopsis
9732 "Python screen-scraping library")
9733 (description
9734 "Beautiful Soup is a Python library designed for rapidly setting up
9735screen-scraping projects. It offers Pythonic idioms for navigating,
9736searching, and modifying a parse tree, providing a toolkit for
9737dissecting a document and extracting what you need. It automatically
9738converts incoming documents to Unicode and outgoing documents to UTF-8.")
9739 (license license:expat)))
9740
9741(define-public python-soupsieve
9742 (package
9743 (name "python-soupsieve")
9744 (version "2.2.1")
9745 (source
9746 (origin
9747 (method url-fetch)
9748 (uri (pypi-uri "soupsieve" version))
9749 (sha256
9750 (base32
9751 "1k70gpn2d3vgdyxbdy536dgm4kchcraxz6lmgsfg3324iy2789q5"))))
9752 (build-system python-build-system)
9753 (arguments
9754 ;;XXX: 2 tests fail currently despite claming they were to be
9755 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
9756 ;;don't want to create a circular dependency.
9757 (list #:tests? #f
9758 #:phases
9759 #~(modify-phases %standard-phases
9760 ;; Circular dependency with python-beautifulsoup4.
9761 (delete 'sanity-check))))
9762 (home-page "https://github.com/facelessuser/soupsieve")
9763 (synopsis "CSS selector library")
9764 (description
9765 "Soup Sieve is a CSS selector library designed to be used with Beautiful
9766Soup 4. It aims to provide selecting, matching, and filtering using modern
9767CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
9768specifications up through the latest CSS level 4 drafts and beyond (though
9769some are not yet implemented).")
9770 (license license:expat)))
9771
9772
9773(define-public python-netifaces
9774 (package
9775 (name "python-netifaces")
9776 (version "0.11.0")
9777 (source
9778 (origin
9779 (method url-fetch)
9780 (uri (pypi-uri "netifaces" version))
9781 (sha256
9782 (base32
9783 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
9784 (build-system python-build-system)
9785 (home-page "https://github.com/al45tair/netifaces")
9786 (synopsis
9787 "Python module for portable network interface information")
9788 (description
9789 "Netifaces is a Python module providing information on network
9790interfaces in an easy and portable manner.")
9791 (license license:expat)))
9792
9793(define-public python-networkx
9794 (package
9795 (name "python-networkx")
9796 (version "2.8.6")
9797 (source
9798 (origin
9799 (method url-fetch)
9800 (uri (pypi-uri "networkx" version))
9801 (sha256
9802 (base32 "19h18f5j79l7kmwm5cvm75fadjgmkzw5m3pyvb9cnq0860q7faxx"))))
9803 (build-system python-build-system)
9804 (arguments
9805 '(#:phases (modify-phases %standard-phases
9806 (replace 'check
9807 (lambda* (#:key tests? #:allow-other-keys)
9808 (if tests?
9809 (invoke "pytest" "-vv" "--pyargs" "networkx")
9810 (format #t "test suite not run~%")) #t)))))
9811 (propagated-inputs (list python-decorator))
9812 (native-inputs (list python-pytest))
9813 (home-page "https://networkx.github.io/")
9814 (synopsis
9815 "Python module for creating and manipulating graphs and networks")
9816 (description
9817 "NetworkX is a Python package for the creation, manipulation, and study
9818of the structure, dynamics, and functions of complex networks.")
9819 (license license:bsd-3)))
9820
9821
9822(define-public python-datrie
9823 (package
9824 (name "python-datrie")
9825 (version "0.8.2")
9826 (source
9827 (origin
9828 (method url-fetch)
9829 (uri (pypi-uri "datrie" version))
9830 (sha256
9831 (base32
9832 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
9833 (build-system python-build-system)
9834 (native-inputs
9835 (list python-cython python-hypothesis python-pytest
9836 python-pytest-runner))
9837 (home-page "https://github.com/kmike/datrie")
9838 (synopsis "Fast, efficiently stored trie for Python")
9839 (description
9840 "This package provides a fast, efficiently stored trie implementation for
9841Python.")
9842 (license license:lgpl2.1+)))
9843
9844(define-public python-amply
9845 (package
9846 (name "python-amply")
9847 (version "0.1.4")
9848 (source
9849 (origin
9850 (method url-fetch)
9851 (uri (pypi-uri "amply" version))
9852 (sha256
9853 (base32
9854 "0f1db9zp0rsfzxvaz55xwh8h5rfdgr9a2a715g06ic8nknsdq4nb"))))
9855 (build-system python-build-system)
9856 (propagated-inputs
9857 (list python-docutils python-pyparsing))
9858 (native-inputs
9859 (list python-setuptools-scm))
9860 (home-page "https://github.com/willu47/amply")
9861 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
9862 (description
9863 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
9864structures.")
9865 (license license:epl1.0)))
9866
9867(define-public python-pulp
9868 (package
9869 (name "python-pulp")
9870 (version "2.4")
9871 (source
9872 (origin
9873 (method url-fetch)
9874 (uri (pypi-uri "PuLP" version))
9875 (sha256
9876 (base32
9877 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
9878 (build-system python-build-system)
9879 (propagated-inputs
9880 (list python-amply))
9881 (home-page "https://github.com/coin-or/pulp")
9882 (synopsis "Linear Programming modeler")
9883 (description
9884 "PuLP is a Linear Programming modeler written in Python. PuLP can
9885generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
9886solve linear problems.")
9887 (license license:expat)))
9888
9889(define-public python-py-tes
9890 (package
9891 (name "python-py-tes")
9892 (version "0.4.2")
9893 (source
9894 (origin
9895 (method url-fetch)
9896 (uri (pypi-uri "py-tes" version))
9897 (sha256
9898 (base32 "0b272y392v0mnq0f3sm5kgcx8fn4qwfbym89hhvqxz3xkganr4pn"))))
9899 (build-system python-build-system)
9900 (propagated-inputs
9901 (list python-attrs python-dateutil python-future python-requests))
9902 (home-page "https://github.com/ohsu-comp-bio/py-tes")
9903 (synopsis "Library for communicating with the GA4GH Task Execution API")
9904 (description "This package provides a library for communicating with the
9905GA4GH Task Execution API.")
9906 (license license:expat)))
9907
9908(define-public python-toposort
9909 (package
9910 (name "python-toposort")
9911 (version "1.6")
9912 (source
9913 (origin
9914 (method url-fetch)
9915 (uri (pypi-uri "toposort" version))
9916 (sha256
9917 (base32
9918 "1b2hppzjg3p006qya3yfdnp76dwq8frl97lypdam0kw4xxb8yhm7"))))
9919 (build-system python-build-system)
9920 (home-page "https://gitlab.com/ericvsmith/toposort")
9921 (synopsis "Topological sort algorithm")
9922 (description
9923 "This package provides an implementation of a topological sort
9924algorithm.")
9925 (license license:asl2.0)))
9926
9927(define-public python-three-merge
9928 (package
9929 (name "python-three-merge")
9930 (version "0.1.1")
9931 (source
9932 (origin
9933 ;; There are no tests in the PyPI tarball.
9934 (method git-fetch)
9935 (uri (git-reference
9936 (url "https://github.com/spyder-ide/three-merge")
9937 (commit (string-append "v" version))))
9938 (file-name (git-file-name name version))
9939 (sha256
9940 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
9941 (build-system python-build-system)
9942 (arguments
9943 `(#:test-target "pytest"))
9944 (propagated-inputs
9945 (list python-diff-match-patch))
9946 (native-inputs
9947 (list python-flaky python-pytest python-pytest-cov
9948 python-pytest-runner python-pytest-timeout))
9949 (home-page "https://github.com/spyder-ide/three-merge")
9950 (synopsis "Library for merging two strings with respect to a base one")
9951 (description
9952 "This package provides a Python library to perform a 3-way merge between
9953strings, based on @code{diff-match-patch}. This library performs merges at a
9954character level, as opposed to most VCS systems, which opt for a line-based
9955approach.")
9956 (license license:expat)))
9957
9958(define-public snakemake
9959 (package
9960 (name "snakemake")
9961 (version "5.32.2")
9962 (source
9963 (origin
9964 (method url-fetch)
9965 (uri (pypi-uri "snakemake" version))
9966 (sha256
9967 (base32 "13013gdavwvyj1qr9xfi9fpwhb3km8c3z53bja5b7ic3sb2z6dgz"))))
9968 (build-system python-build-system)
9969 (arguments
9970 ;; TODO: Package missing test dependencies.
9971 '(#:tests? #f
9972 #:phases
9973 (modify-phases %standard-phases
9974 ;; For cluster execution Snakemake will call Python. Since there is
9975 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
9976 ;; this by calling the snakemake wrapper instead.
9977 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
9978 (lambda* (#:key outputs #:allow-other-keys)
9979 (substitute* "snakemake/executors/__init__.py"
9980 (("\\{sys.executable\\} -m snakemake")
9981 (string-append (assoc-ref outputs "out")
9982 "/bin/snakemake")))
9983 #t)))))
9984 (propagated-inputs
9985 (list python-appdirs
9986 python-configargparse
9987 python-datrie
9988 python-docutils
9989 python-gitpython
9990 python-jinja2
9991 python-jsonschema
9992 python-nbformat
9993 python-networkx
9994 python-psutil
9995 python-pulp
9996 python-pyyaml
9997 python-ratelimiter
9998 python-requests
9999 python-toposort
10000 python-wrapt))
10001 (home-page "https://snakemake.readthedocs.io")
10002 (synopsis "Python-based execution environment for make-like workflows")
10003 (description
10004 "Snakemake aims to reduce the complexity of creating workflows by
10005providing a clean and modern domain specific specification language (DSL) in
10006Python style, together with a fast and comfortable execution environment.")
10007 (license license:expat)))
10008
10009(define-public snakemake-6
10010 (package
10011 (inherit snakemake)
10012 (name "snakemake")
10013 (version "6.15.5")
10014 (source
10015 (origin
10016 (method git-fetch)
10017 (uri (git-reference
10018 (url "https://github.com/snakemake/snakemake")
10019 (commit (string-append "v" version))))
10020 (file-name (git-file-name name version))
10021 (sha256
10022 (base32 "09yrpi9f86r9yvcm2dfjs5zy87c4j31bxama77kfd6y8yfrrjlai"))))
10023 (build-system python-build-system)
10024 (arguments
10025 '(#:phases
10026 (modify-phases %standard-phases
10027 ;; For cluster execution Snakemake will call Python. Since there is
10028 ;; no suitable GUIX_PYTHONPATH set, cluster execution will fail. We
10029 ;; fix this by calling the snakemake wrapper instead.
10030
10031 ;; XXX: There is another instance of sys.executable on line 692, but
10032 ;; it is not clear how to patch it.
10033 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
10034 (lambda* (#:key outputs #:allow-other-keys)
10035 (substitute* "snakemake/executors/__init__.py"
10036 (("\\{sys.executable\\} -m snakemake")
10037 (string-append (assoc-ref outputs "out")
10038 "/bin/snakemake")))))
10039 (replace 'check
10040 (lambda* (#:key tests? #:allow-other-keys)
10041 (when tests?
10042 (setenv "HOME" "/tmp")
10043 ;; This test attempts to change S3 buckets on AWS and fails
10044 ;; because there are no AWS credentials.
10045 (delete-file "tests/test_tibanna.py")
10046 (invoke "pytest")))))))
10047 (propagated-inputs
10048 (list python-appdirs
10049 python-configargparse
10050 python-connection-pool
10051 python-datrie
10052 python-docutils
10053 python-filelock
10054 python-gitpython
10055 python-jinja2
10056 python-jsonschema
10057 python-nbformat
10058 python-networkx
10059 python-psutil
10060 python-pulp
10061 python-pyyaml
10062 python-py-tes
10063 python-ratelimiter
10064 python-requests
10065 python-smart-open
10066 python-stopit
10067 python-tabulate
10068 python-toposort
10069 python-wrapt))
10070 (native-inputs
10071 (list git-minimal
10072 python-wrapper
10073 python-pytest
10074 python-pandas
10075 python-requests-mock))))
10076
10077(define-public snakemake-7
10078 (package
10079 (inherit snakemake-6)
10080 (name "snakemake")
10081 (version "7.7.0")
10082 (source
10083 (origin
10084 (method git-fetch)
10085 (uri (git-reference
10086 (url "https://github.com/snakemake/snakemake")
10087 (commit (string-append "v" version))))
10088 (file-name (git-file-name name version))
10089 (sha256
10090 (base32 "1qrqbmx4cbis0wxr6dl2rdjv9v627sbirsz6v5c31vlbqwkvs04q"))))
10091 (build-system python-build-system)
10092 (arguments
10093 '(#:phases
10094 (modify-phases %standard-phases
10095 ;; For cluster execution Snakemake will call Python. Since there is
10096 ;; no suitable GUIX_PYTHONPATH set, cluster execution will fail. We
10097 ;; fix this by calling the snakemake wrapper instead.
10098 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
10099 (lambda* (#:key outputs #:allow-other-keys)
10100 (substitute* "snakemake/executors/__init__.py"
10101 (("self\\.get_python_executable\\(\\),")
10102 "")
10103 (("\"-m snakemake\"")
10104 (string-append "\"" (assoc-ref outputs "out")
10105 "/bin/snakemake" "\"")))))
10106 (replace 'check
10107 (lambda* (#:key tests? #:allow-other-keys)
10108 (when tests?
10109 (setenv "HOME" "/tmp")
10110 ;; This test attempts to change S3 buckets on AWS and fails
10111 ;; because there are no AWS credentials.
10112 (delete-file "tests/test_tibanna.py")
10113 ;; It's a similar story with this test, which requires access
10114 ;; to the Google Storage service.
10115 (delete-file "tests/test_google_lifesciences.py")
10116 (invoke "pytest")))))))
10117 (propagated-inputs
10118 (list python-appdirs
10119 python-configargparse
10120 python-connection-pool
10121 python-datrie
10122 python-docutils
10123 python-filelock
10124 python-gitpython
10125 python-jinja2
10126 python-jsonschema
10127 python-nbformat
10128 python-networkx
10129 python-psutil
10130 python-pulp
10131 python-pyyaml
10132 python-py-tes
10133 python-ratelimiter
10134 python-requests
10135 python-retry
10136 python-smart-open
10137 python-stopit
10138 python-tabulate
10139 python-toposort
10140 python-wrapt
10141 python-yte))
10142 (native-inputs
10143 (list git-minimal
10144 python-wrapper
10145 python-pytest
10146 python-pandas
10147 python-requests-mock))))
10148
10149(define-public python-pyqrcode
10150 (package
10151 (name "python-pyqrcode")
10152 (version "1.2.1")
10153 (source
10154 (origin
10155 (method url-fetch)
10156 (uri (pypi-uri "PyQRCode" version))
10157 (sha256
10158 (base32
10159 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
10160 (build-system python-build-system)
10161 (home-page
10162 "https://github.com/mnooner256/pyqrcode")
10163 (synopsis "QR code generator")
10164 (description
10165 "Pyqrcode is a QR code generator written purely in Python with
10166SVG, EPS, PNG and terminal output.")
10167 (license license:bsd-3)))
10168
10169(define-public python-seaborn
10170 (package
10171 (name "python-seaborn")
10172 (version "0.11.2")
10173 (source (origin
10174 (method url-fetch)
10175 (uri (pypi-uri "seaborn" version))
10176 (sha256
10177 (base32
10178 "1xpl3zb945sihsiwm9q1yyx84sakk1phcg0fprj6i0j0dllfjifg"))
10179 (patches (search-patches "python-seaborn-kde-test.patch"
10180 "python-seaborn-2690.patch"))))
10181 (build-system python-build-system)
10182 (arguments
10183 `(#:phases (modify-phases %standard-phases
10184 (add-after 'unpack 'patch-more-tests
10185 (lambda _
10186 (substitute* "seaborn/tests/test_distributions.py"
10187 (("get_contour_color\\(ax\\.collections\\[0\\]\\)")
10188 "get_contour_color(ax.collections[0])")
10189 (("c\\.get_color\\(\\)") "get_contour_color(c)")
10190 (("def test_hue_ignores_cmap")
10191 "def skip_test_hue_ignores_cmap")
10192 (("def test_fill_artists")
10193 "def skip_test_fill_artists")
10194 (("def test_with_rug") "def skip_test_with_rug"))))
10195 (add-before 'check 'start-xserver
10196 (lambda _
10197 (system "Xvfb :1 &")
10198 (setenv "DISPLAY" ":1")))
10199 (replace 'check
10200 (lambda* (#:key tests? #:allow-other-keys)
10201 (when tests?
10202 (invoke "pytest" "seaborn")))))))
10203 (propagated-inputs (list python-pandas python-matplotlib python-numpy
10204 python-scipy))
10205 (native-inputs (list python-pytest xorg-server-for-tests))
10206 (home-page "https://seaborn.pydata.org/")
10207 (synopsis "Statistical data visualization")
10208 (description
10209 "Seaborn is a library for making attractive and informative statistical
10210graphics in Python. It is built on top of matplotlib and tightly integrated
10211with the PyData stack, including support for numpy and pandas data structures
10212and statistical routines from scipy and statsmodels.")
10213 (license license:bsd-3)))
10214
10215
10216(define-public python-session-info
10217 (package
10218 (name "python-session-info")
10219 (version "1.0.0")
10220 (source (origin
10221 (method url-fetch)
10222 (uri (pypi-uri "session_info" version))
10223 (sha256
10224 (base32
10225 "1dxnrgaxd2nb44n423mnrx119hmnh2yxdnzaw8mg60x7rh1mxniw"))))
10226 (build-system python-build-system)
10227 (propagated-inputs (list python-stdlib-list))
10228 (home-page "https://gitlab.com/joelostblom/session_info")
10229 (synopsis "Output version information for modules currently loaded")
10230 (description
10231 "This package outputs version information for modules loaded in the current
10232session, Python, and the OS.")
10233 (license license:bsd-3)))
10234
10235(define-public python-mpmath
10236 (package
10237 (name "python-mpmath")
10238 (version "1.2.1")
10239 (source (origin
10240 (method git-fetch)
10241 (uri (git-reference
10242 (url "https://github.com/fredrik-johansson/mpmath")
10243 (commit "c6a35f9ee7c294bcf4e0517bc76b268843db9499")))
10244 (file-name (git-file-name name version))
10245 (sha256
10246 (base32
10247 "0ifw59fjjls3mas104rh0frilvab2fhk1dkjraxlqni5n9l676im"))))
10248 (build-system python-build-system)
10249 (arguments
10250 `(#:phases
10251 (modify-phases %standard-phases
10252 (add-before 'build 'set-version
10253 (lambda _
10254 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)
10255 ;; ZIP does not support timestamps before 1980.
10256 (setenv "SOURCE_DATE_EPOCH" "315532800")))
10257 (replace 'check
10258 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
10259 (when tests?
10260 (add-installed-pythonpath inputs outputs)
10261 (invoke "pytest" "-vv")))))))
10262 (native-inputs
10263 (list python-pytest python-setuptools-scm))
10264 (home-page "https://mpmath.org")
10265 (synopsis "Arbitrary-precision floating-point arithmetic in python")
10266 (description
10267 "@code{mpmath} can be used as an arbitrary-precision substitute for
10268Python's float/complex types and math/cmath modules, but also does much
10269more advanced mathematics.")
10270 (license license:bsd-3)))
10271
10272(define-public python-bigfloat
10273 (package
10274 (name "python-bigfloat")
10275 (version "0.4.0")
10276 (source
10277 (origin
10278 (method url-fetch)
10279 (uri (pypi-uri "bigfloat" version))
10280 (sha256
10281 (base32 "1f0c1hdr39bbl5rds5r1waa1papjmjiyp0ixs64mkjiahzg6pfaq"))))
10282 (build-system python-build-system)
10283 (inputs
10284 (list mpfr))
10285 (propagated-inputs
10286 (list python-six))
10287 (home-page "https://github.com/mdickinson/bigfloat")
10288 (synopsis "Arbitrary precision floating-point arithmetic for Python")
10289 (description
10290 "This package provides a Python interface to the MPFR library for
10291multiprecision arithmetic.")
10292 (license license:lgpl3+)))
10293
10294(define-public python-plac
10295 (package
10296 (name "python-plac")
10297 (version "1.3.5")
10298 (source
10299 (origin
10300 (method url-fetch)
10301 (uri (pypi-uri "plac" version))
10302 (sha256
10303 (base32 "1410h6jw1ksi24kb55xzkwqzba2qqjwiga1s354bf3s5s1jdig9q"))))
10304 (build-system python-build-system)
10305 (arguments
10306 '(#:phases
10307 (modify-phases %standard-phases
10308 (add-after 'unpack 'fix-tkinter
10309 (lambda _
10310 (substitute* "plac_tk.py"
10311 (("from Tkinter import Tk")
10312 "from tkinter import Tk")
10313 (("from ScrolledText import ScrolledText")
10314 "from tkinter.scrolledtext import ScrolledText")))))))
10315 (native-inputs
10316 `(("python-tkinter" ,python "tk")))
10317 (home-page "https://github.com/ialbert/plac")
10318 (synopsis "Command line arguments parser")
10319 (description "This package can generate command line parameters from
10320function signatures.")
10321 (license license:bsd-3)))
10322
10323(define-public python-yte
10324 (package
10325 (name "python-yte")
10326 (version "1.2.0")
10327 (source
10328 (origin
10329 (method url-fetch)
10330 (uri (pypi-uri "yte" version))
10331 (sha256
10332 (base32 "07hm1warpqi4ifqgkaz5sg887x4a44yhxafmpf835ywnpchg4s03"))))
10333 (build-system python-build-system)
10334 (arguments
10335 '(#:phases
10336 (modify-phases %standard-phases
10337 (add-after 'unpack 'set-HOME
10338 (lambda _ (setenv "HOME" "/tmp"))))))
10339 (propagated-inputs (list python-plac python-pyyaml))
10340 (home-page "https://github.com/koesterlab/yte")
10341 (synopsis "YAML template engine with Python expressions")
10342 (description
10343 "This package provides a YAML template engine with Python expressions.")
10344 (license license:expat)))
10345
10346(define-public python-syllables
10347 (package
10348 (name "python-syllables")
10349 (version "1.0.3")
10350 (source (origin
10351 (method url-fetch)
10352 (uri (pypi-uri "syllables" version))
10353 (sha256
10354 (base32
10355 "0wkl6h0rg6fbsxfp0a8fnibf3l4l6lbh6z12cvcilgb6qhxzpmv3"))))
10356 (build-system python-build-system)
10357 (home-page "https://github.com/prosegrinder/python-syllables")
10358 (synopsis "Package for estimating the number of syllables in a word")
10359 (description
10360 "This package provides a Python package for estimating the number of
10361syllables in a word.")
10362 (license license:gpl3)))
10363
10364(define-public python-sympy
10365 (package
10366 (name "python-sympy")
10367 (version "1.11.1")
10368 (source
10369 (origin
10370 (method url-fetch)
10371 (uri (pypi-uri "sympy" version))
10372 (sha256
10373 (base32 "0n46x1rfy8c2a9za3yp2va5icigxj805f9fmiq8c1drwwvf808z3"))))
10374 (build-system python-build-system)
10375 (arguments
10376 `(#:phases
10377 (modify-phases %standard-phases
10378 (replace 'check
10379 (lambda* (#:key outputs #:allow-other-keys)
10380 (invoke
10381 (or (which "python3") (which "python"))
10382 "-c" "import sympy; sympy.test(\"/core\")"))))))
10383 (propagated-inputs
10384 (list python-mpmath))
10385 (home-page "https://www.sympy.org/")
10386 (synopsis "Python library for symbolic mathematics")
10387 (description
10388 "SymPy is a Python library for symbolic mathematics. It aims to become a
10389full-featured computer algebra system (CAS) while keeping the code as simple
10390as possible in order to be comprehensible and easily extensible.")
10391 (license license:bsd-3)))
10392
10393(define-public python-q
10394 (package
10395 (name "python-q")
10396 (version "2.6")
10397 (source
10398 (origin
10399 (method url-fetch)
10400 (uri (pypi-uri "q" version))
10401 (sha256
10402 (base32
10403 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
10404 (build-system python-build-system)
10405 (home-page "https://github.com/zestyping/q")
10406 (synopsis "Quick-and-dirty debugging output for tired programmers")
10407 (description
10408 "q is a Python module for \"print\" style of debugging Python code. It
10409provides convenient short API for print out of values, tracebacks, and
10410falling into the Python interpreter.")
10411 (license license:asl2.0)))
10412
10413(define-public python-xlib
10414 (package
10415 (name "python-xlib")
10416 (version "0.29")
10417 (source
10418 (origin
10419 (method git-fetch)
10420 (uri (git-reference
10421 (url "https://github.com/python-xlib/python-xlib")
10422 (commit version)))
10423 (file-name (git-file-name name version))
10424 (sha256
10425 (base32 "17cwd2knqm2vwrii3kqii9abwsnydhpg4byqx1vy7rjs6i1vbqfc"))))
10426 (build-system python-build-system)
10427 (arguments
10428 `(#:phases
10429 (modify-phases %standard-phases
10430 (add-before 'check 'start-xserver
10431 (lambda* (#:key inputs #:allow-other-keys)
10432 (let ((xorg-server (assoc-ref inputs "xorg-server")))
10433 ;; There must be a running X server and make check doesn't
10434 ;; start one. Therefore we must do it.
10435 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
10436 (setenv "DISPLAY" ":1")
10437 #t))))))
10438 (native-inputs
10439 (list python-mock python-setuptools-scm xorg-server))
10440 (propagated-inputs
10441 (list python-six))
10442 (home-page "https://github.com/python-xlib/python-xlib")
10443 (synopsis "Python X11 client library")
10444 (description
10445 "The Python X Library is intended to be a fully functional
10446X client library for Python programs. It is useful to implement
10447low-level X clients. It is written entirely in Python.")
10448 (license license:gpl2+)))
10449
10450(define-public python-singledispatch
10451 (package
10452 (name "python-singledispatch")
10453 (version "3.4.0.3")
10454 (source
10455 (origin
10456 (method url-fetch)
10457 (uri (pypi-uri "singledispatch" version))
10458 (sha256
10459 (base32
10460 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
10461 (build-system python-build-system)
10462 (native-inputs
10463 (list python-six)) ; required for conversion, not at run-time
10464 (home-page
10465 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
10466 (synopsis "Backport of singledispatch feature from Python 3.4")
10467 (description
10468 "This library brings functools.singledispatch from Python 3.4 to Python
104692.6-3.3.")
10470 (license license:expat)))
10471
10472;; the python- version can be removed with python-3.5
10473(define-public python-backports-abc
10474 (package
10475 (name "python-backports-abc")
10476 (version "0.5")
10477 (source
10478 (origin
10479 (method url-fetch)
10480 (uri (pypi-uri "backports_abc" version))
10481 (sha256
10482 (base32
10483 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
10484 (build-system python-build-system)
10485 (home-page "https://github.com/cython/backports_abc")
10486 (synopsis "Backport of additions to the 'collections.abc' module")
10487 (description
10488 "Python-backports-abc provides a backport of additions to the
10489@code{collections.abc} module in Python-3.5.")
10490 (license license:psfl)))
10491
10492(define-public python-backports-csv
10493 (package
10494 (name "python-backports-csv")
10495 (version "1.0.7")
10496 (source
10497 (origin
10498 (method url-fetch)
10499 (uri (pypi-uri "backports.csv" version))
10500 (sha256
10501 (base32 "0vdx5jlhs91iizc8j8l8811nqprwvdx39pgkdc82w2qkfgzxyxqj"))))
10502 (build-system python-build-system)
10503 (home-page "https://github.com/ryanhiebert/backports.csv")
10504 (synopsis "Backport of Python 3's csv module for Python 2")
10505 (description
10506 "Provides a backport of Python 3's @code{csv} module for parsing
10507comma separated values. The API of the @code{csv} module in Python 2
10508is drastically different from the @code{csv} module in Python 3.
10509This is due, for the most part, to the difference between str in
10510Python 2 and Python 3.")
10511 (license license:psfl)))
10512
10513(define-public python-waf
10514 (package
10515 (name "python-waf")
10516 (version "2.0.19")
10517 (source (origin
10518 (method url-fetch)
10519 (uri (string-append "https://waf.io/"
10520 "waf-" version ".tar.bz2"))
10521 (sha256
10522 (base32
10523 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
10524 (build-system python-build-system)
10525 (arguments
10526 '(#:phases
10527 (modify-phases %standard-phases
10528 (replace 'build
10529 (lambda _
10530 ;; XXX: Find a way to add all extra tools.
10531 (let ((tools '("gccdeps"
10532 "clang_compilation_database")))
10533 (invoke "python" "waf-light" "configure" "build"
10534 (string-append "--tools="
10535 (string-join tools ","))))))
10536 (replace 'check
10537 (lambda _
10538 (invoke "python" "waf" "--version")))
10539 (replace 'install
10540 (lambda* (#:key outputs #:allow-other-keys)
10541 (let ((out (assoc-ref outputs "out")))
10542 (install-file "waf" (string-append out "/bin")))
10543 #t))
10544 ;; waf breaks when it is wrapped.
10545 (delete 'wrap))))
10546 (home-page "https://waf.io/")
10547 (synopsis "Python-based build system")
10548 (description
10549 "Waf is a Python-based framework for configuring, compiling and installing
10550applications.")
10551 (license license:bsd-3)))
10552
10553(define-public python-pyzmq
10554 (package
10555 (name "python-pyzmq")
10556 (version "22.3.0")
10557 (source
10558 (origin
10559 (method url-fetch)
10560 (uri (pypi-uri "pyzmq" version))
10561 (sha256
10562 (base32 "0737kizh53n4rjq1xbm6nhr0bq65xflg04i1d8fcky0nwwrw1pcf"))
10563 (snippet
10564 #~(begin
10565 (use-modules (guix build utils))
10566 ;; The bundled zeromq source code.
10567 (delete-file-recursively "bundled")
10568 ;; Delete cythonized files.
10569 (for-each delete-file
10570 (list "zmq/backend/cython/constants.c"
10571 "zmq/backend/cython/context.c"
10572 "zmq/backend/cython/_device.c"
10573 "zmq/backend/cython/error.c"
10574 "zmq/backend/cython/message.c"
10575 "zmq/backend/cython/_poll.c"
10576 "zmq/backend/cython/_proxy_steerable.c"
10577 "zmq/backend/cython/socket.c"
10578 "zmq/backend/cython/utils.c"
10579 "zmq/backend/cython/_version.c"
10580 "zmq/devices/monitoredqueue.c"))))))
10581 (build-system python-build-system)
10582 (arguments
10583 `(#:configure-flags
10584 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
10585 #:phases
10586 (modify-phases %standard-phases
10587 (add-before 'check 'build-extensions
10588 (lambda _
10589 ;; Cython extensions have to be built before running the tests.
10590 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
10591 (inputs
10592 (list zeromq))
10593 (native-inputs
10594 (list pkg-config python-cython python-pytest))
10595 (home-page "https://github.com/zeromq/pyzmq")
10596 (synopsis "Python bindings for 0MQ")
10597 (description
10598 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
10599 (license license:bsd-4)))
10600
10601(define-public python-immutabledict
10602 (package
10603 (name "python-immutabledict")
10604 (version "2.2.1")
10605 (source
10606 (origin
10607 (method url-fetch)
10608 (uri (pypi-uri "immutabledict" version))
10609 (sha256
10610 (base32 "0fpc4gbk7inpfbgdypsg6c18bmdjw8gwx47bjw0hvixn3gghxnqx"))))
10611 (build-system python-build-system)
10612 (arguments
10613 `(#:tests? #f)) ; no tests in PyPI release and no setup.py in GitHub
10614 (native-inputs
10615 (list python-pytest))
10616 (home-page "https://github.com/corenting/immutabledict")
10617 (synopsis "Immutable wrapper around dictionaries")
10618 (description
10619 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
10620It implements the complete mapping interface and can be used as a drop-in
10621replacement for dictionaries where immutability is desired.")
10622 (license license:expat)))
10623
10624(define-public python-emoji
10625 (package
10626 (name "python-emoji")
10627 (version "1.6.1")
10628 (source
10629 (origin
10630 (method url-fetch)
10631 (uri (pypi-uri "emoji" version))
10632 (sha256
10633 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))
10634 (build-system python-build-system)
10635 (arguments
10636 `(#:phases
10637 (modify-phases %standard-phases
10638 (replace 'check
10639 (lambda* (#:key tests? #:allow-other-keys)
10640 (when tests?
10641 (invoke "python" "-m" "pytest")))))))
10642 (native-inputs
10643 (list python-pytest))
10644 (home-page "https://github.com/carpedm20/emoji/")
10645 (synopsis "Emoji terminal output for Python")
10646 (description "This package provides Emoji terminal output for Python. The
10647entire set of Emoji codes as defined by the Unicode Consortium is supported in
10648addition to a bunch of aliases.")
10649 (license license:bsd-3)))
10650
10651(define-public python-sarge
10652 (package
10653 (name "python-sarge")
10654 (version "0.1.7.post1") ; post release only to correct errors in metadata
10655 (source
10656 (origin
10657 (method url-fetch)
10658 (uri (pypi-uri "sarge" version))
10659 (sha256
10660 (base32 "0g9a53mfnp96877n1yq2jdk1mcv3xm0d93iisvgcn2prdsp45zv4"))))
10661 (build-system python-build-system)
10662 (home-page "https://docs.red-dove.com/sarge/")
10663 (synopsis "Subprocess wrapper with command pipeline functionality")
10664 (description "@code{sarge} is a wrapper for subprocess which provides
10665command pipeline functionality.")
10666 (license license:bsd-3)))
10667
10668(define-public python-zipstream-new
10669 (package
10670 (name "python-zipstream-new")
10671 (version "1.1.8")
10672 (source
10673 (origin
10674 (method git-fetch) ; no tests in PyPI release
10675 (uri (git-reference
10676 (url "https://github.com/arjan-s/python-zipstream")
10677 (commit (string-append "v" version))))
10678 (file-name (git-file-name name version))
10679 (sha256
10680 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
10681 (build-system python-build-system)
10682 (native-inputs
10683 (list python-nose))
10684 (home-page "https://github.com/arjan-s/python-zipstream")
10685 (synopsis "Zipfile generator that takes input files as well as streams")
10686 (description "@code{zipstream.py} is a zip archive generator based on
10687@code{zipfile.py}. It was created to generate a zip file generator for
10688streaming. This is beneficial for when you want to provide a downloadable
10689archive of a large collection of regular files, which would be infeasible
10690to generate the archive prior to downloading or of a very large file that
10691you do not want to store entirely on disk or on memory.")
10692 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
10693 (license license:gpl3)))
10694
10695(define-public python-sentry-sdk
10696 (package
10697 (name "python-sentry-sdk")
10698 (version "1.5.1")
10699 (source
10700 (origin
10701 (method git-fetch) ; no tests in PyPI release
10702 (uri (git-reference
10703 (url "https://github.com/getsentry/sentry-python")
10704 (commit version)))
10705 (file-name (git-file-name name version))
10706 (sha256
10707 (base32 "128bm136l5zprr3sqqb8j3d6k5i1fhz853mzvh3w8g0w1dw763mx"))))
10708 (build-system python-build-system)
10709 (arguments
10710 `(#:phases
10711 (modify-phases %standard-phases
10712 (replace 'check
10713 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
10714 (when tests?
10715 (add-installed-pythonpath inputs outputs)
10716 (invoke "python" "-m" "pytest" "-k"
10717 (string-append
10718 ;; This test requires extra dependencies.
10719 "not test_auto_enabling_integrations"
10720 "_catches_import_error"
10721 ;; Tests below run pip command.
10722 " and not test_unhandled_exception"
10723 " and not test_timeout_error"
10724 " and not test_performance_no_error"
10725 " and not test_performance_error"
10726 " and not test_traces_sampler_gets_correct"
10727 "_values_in_sampling_context"
10728 " and not test_handled_exception"
10729 ;; Tests below require network.
10730 " and not test_crumb_capture"
10731 " and not test_crumb_capture"
10732 " and not test_crumb_capture_hint"
10733 " and not test_httplib_misuse"
10734 ;; Fails with IndexError.
10735 " and not test_session_mode_defaults_to"
10736 "_request_mode_in_wsgi_handler"))))))))
10737 (native-inputs
10738 (list python-django
10739 python-executing
10740 python-gevent
10741 python-jsonschema
10742 python-mock
10743 python-pyrsistent
10744 python-pytest
10745 python-pytest-cov
10746 python-pytest-django
10747 python-pytest-forked
10748 python-pytest-localserver
10749 python-werkzeug))
10750 (propagated-inputs
10751 (list python-certifi python-urllib3))
10752 (home-page "https://github.com/getsentry/sentry-python")
10753 (synopsis "Python SDK for Sentry")
10754 (description "This package provides a Python SDK for the Sentry
10755application monitoring and error tracking software.")
10756 (license license:bsd-2)))
10757
10758(define-public python-pep8
10759 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
10760 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
10761 ;; some dependents' test suites, and nothing more.
10762 (package
10763 (name "python-pep8")
10764 (version "1.7.0")
10765 (source
10766 (origin
10767 (method url-fetch)
10768 (uri (pypi-uri "pep8" version))
10769 (sha256
10770 (base32
10771 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
10772 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
10773 (build-system python-build-system)
10774 (home-page "https://pep8.readthedocs.org/")
10775 (synopsis "Python style guide checker")
10776 (description
10777 "This tools checks Python code against some of the style conventions in
10778PEP 8.")
10779 (license license:expat)))
10780
10781(define-public python-pep8-naming
10782 (package
10783 (name "python-pep8-naming")
10784 (version "0.13.0")
10785 (source
10786 (origin
10787 (method url-fetch)
10788 (uri (pypi-uri "pep8-naming" version))
10789 (sha256
10790 (base32
10791 "1dc0b6xw1cxp01v9zsv4ryk49rfs1lngfpvzsixgp8b7z3ffcf4z"))))
10792 (build-system python-build-system)
10793 (propagated-inputs (list python-flake8))
10794 (home-page "https://github.com/PyCQA/pep8-naming")
10795 (synopsis "Check PEP-8 naming conventions")
10796 (description
10797 "This package provides the @code{pep8-naming} Python module, a
10798plugin for flake8 to check PEP-8 naming conventions.")
10799 (license license:expat)))
10800
10801(define-public python-pep517
10802 (package
10803 (inherit python-pep517-bootstrap)
10804 (name "python-pep517")
10805 (arguments
10806 '(#:phases (modify-phases %standard-phases
10807 (replace 'check
10808 (lambda* (#:key tests? #:allow-other-keys)
10809 (delete-file "pytest.ini")
10810 (delete-file "tests/test_meta.py")
10811 (if tests?
10812 (invoke "pytest") #t))))))
10813 (native-inputs (list python-mock python-pytest python-testpath))))
10814
10815(define-public python-pyproject-metadata
10816 (package
10817 (name "python-pyproject-metadata")
10818 (version "0.6.1")
10819 (source
10820 (origin
10821 (method git-fetch)
10822 (uri (git-reference
10823 (url "https://github.com/FFY00/python-pyproject-metadata")
10824 (commit version)))
10825 (file-name (git-file-name name version))
10826 (sha256
10827 (base32
10828 "00zahgw9zjfqwf0218bj5k732aibnn68cq1p8f0wmbirb7fy5k31"))))
10829 (build-system python-build-system)
10830 (arguments
10831 (list
10832 #:phases
10833 #~(modify-phases %standard-phases
10834 ;; XXX: PEP 517 manual build/install procedures copied from
10835 ;; python-isort.
10836 (replace 'build
10837 (lambda _
10838 ;; ZIP does not support timestamps before 1980.
10839 (setenv "SOURCE_DATE_EPOCH" "315532800")
10840 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
10841 (replace 'check
10842 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
10843 (when tests?
10844 (invoke "pytest" "-vv"
10845 ;; Two parameterized test_load tests are currently
10846 ;; failing (see:
10847 ;; https://github.com/FFY00/python-pep621/issues/14).
10848 "-k" "not test_load"))))
10849 (replace 'install
10850 (lambda* (#:key outputs #:allow-other-keys)
10851 (let ((whl (car (find-files "dist" "\\.whl$"))))
10852 (invoke "pip" "--no-cache-dir" "--no-input"
10853 "install" "--no-deps" "--prefix" #$output whl)))))))
10854 (propagated-inputs (list python-packaging))
10855 (native-inputs (list python-pypa-build python-pytest python-tomli))
10856 (home-page "https://github.com/FFY00/python-pyproject-metadata")
10857 (synopsis "Dataclass for PEP 621 metadata")
10858 (description "This project does not implement the parsing of
10859@file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
10860data structure representing PEP 621 metadata (already parsed), it will
10861validate this input and generate a PEP 643-compliant metadata
10862file (e.g. @file{PKG-INFO}).")
10863 (license license:expat)))
10864
10865;; pep621 was renamed to pyproject-metadata.
10866(define-public python-pep621
10867 (deprecated-package "python-pep621" python-pyproject-metadata))
10868
10869(define-public python-pyflakes
10870 (package
10871 (name "python-pyflakes")
10872 (version "2.4.0")
10873 (source
10874 (origin
10875 (method url-fetch)
10876 (uri (pypi-uri "pyflakes" version))
10877 (sha256
10878 (base32
10879 "0k5jn8jpxni264wxf6cc3xcd1qckc0pww30bsd77mwzdf8l5ra05"))))
10880 (build-system python-build-system)
10881 (home-page "https://github.com/PyCQA/pyflakes")
10882 (synopsis "Passive checker of Python programs")
10883 (description
10884 "Pyflakes statically checks Python source code for common errors.")
10885 (license license:expat)))
10886
10887(define-public python-pyflakes-2.2
10888 (package
10889 (inherit python-pyflakes)
10890 (version "2.2.0")
10891 (source (origin
10892 (method url-fetch)
10893 (uri (pypi-uri "pyflakes" version))
10894 (sha256
10895 (base32
10896 "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))
10897 (patches
10898 (search-patches "python-pyflakes-test-location.patch"))))))
10899
10900(define-public python-mccabe
10901 (package
10902 (name "python-mccabe")
10903 (version "0.6.1")
10904 (source
10905 (origin
10906 (method url-fetch)
10907 (uri (pypi-uri "mccabe" version))
10908 (sha256
10909 (base32
10910 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
10911 (build-system python-build-system)
10912 (native-inputs
10913 (list python-toml python-pytest-bootstrap python-pytest-runner))
10914 (home-page "https://github.com/PyCQA/mccabe")
10915 (synopsis "McCabe checker, plugin for flake8")
10916 (description "This package provides a Flake8 plug-in to compute the McCabe
10917cyclomatic complexity of Python source code.")
10918 (license license:expat)))
10919
10920(define-public python-autoflake8
10921 (package
10922 (name "python-autoflake8")
10923 (version "0.4.0")
10924 (source (origin
10925 (method git-fetch) ;for tests
10926 (uri (git-reference
10927 (url "https://github.com/fsouza/autoflake8")
10928 (commit (string-append "v" version))))
10929 (file-name (git-file-name name version))
10930 (sha256
10931 (base32
10932 "0jx7bkslbhr24yvq60pl39faz2r6g93f1zm1gygswl0rzr5zmgnh"))))
10933 (build-system pyproject-build-system)
10934 (native-inputs
10935 (list python-aiofiles
10936 python-poetry-core
10937 python-pytest
10938 python-pytest-xdist))
10939 (propagated-inputs (list python-pyflakes))
10940 (home-page "https://github.com/fsouza/autoflake8")
10941 (synopsis "Automatically fix issues reported by flake8")
10942 (description "Tool to automatically fix some issues reported by
10943@command{flake8}.")
10944 (license license:expat)))
10945
10946(define-public python-flake8
10947 (package
10948 (name "python-flake8")
10949 (version "4.0.1")
10950 (source (origin
10951 (method url-fetch)
10952 (uri (pypi-uri "flake8" version))
10953 (sha256
10954 (base32
10955 "03c7mnk34wfz7a0m5zq0273y94awz69fy5iww8alh4a4v96h6vl0"))))
10956 (build-system python-build-system)
10957 (arguments
10958 `(#:phases (modify-phases %standard-phases
10959 (replace 'check
10960 (lambda* (#:key tests? #:allow-other-keys)
10961 (when tests?
10962 (invoke "pytest" "-v")))))))
10963 (propagated-inputs
10964 (list python-entrypoints
10965 python-mccabe
10966 python-pycodestyle
10967 python-pyflakes))
10968 (native-inputs (list python-pytest))
10969 (home-page "https://gitlab.com/pycqa/flake8")
10970 (synopsis "The modular source code checker: pep8, pyflakes and co")
10971 (description
10972 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
10973 (license license:expat)))
10974
10975(define-public python-flake8-3.8
10976 (package
10977 (inherit python-flake8)
10978 (version "3.8.4")
10979 (source (origin
10980 (method url-fetch)
10981 (uri (pypi-uri "flake8" version))
10982 (sha256
10983 (base32
10984 "0fvcrsbyzjpcli8ldbpsdbpmf238nkvwc1dy4hy82lf63rvfinma"))))
10985 (propagated-inputs
10986 (list python-pycodestyle-2.6 python-entrypoints python-pyflakes-2.2
10987 python-mccabe))))
10988
10989(define-public python-flake8-blind-except
10990 (package
10991 (name "python-flake8-blind-except")
10992 (version "0.2.1")
10993 (source
10994 (origin
10995 (method url-fetch)
10996 (uri (pypi-uri "flake8-blind-except" version))
10997 (sha256
10998 (base32 "05nxsxfzfhwsm8gys90228imm2qbnqnw5y8bfqyfngnbkmd5fnpj"))))
10999 (build-system python-build-system)
11000 (arguments
11001 `(#:tests? #f)) ; no tests
11002 (native-inputs (list python-pycodestyle))
11003 (home-page "https://github.com/elijahandrews/flake8-blind-except")
11004 (synopsis "Check for blind @code{except:} statements")
11005 (description "This package provides a flake8 extension that checks for
11006blind @code{except:} statements.")
11007 (license license:expat)))
11008
11009(define-public python-flake8-bugbear
11010 (package
11011 (name "python-flake8-bugbear")
11012 (version "20.1.4")
11013 (source
11014 (origin
11015 (method url-fetch)
11016 (uri (pypi-uri "flake8-bugbear" version))
11017 (sha256
11018 (base32
11019 "0qiihb242fygzyrfynq913ak7cdmx8mcac9c0zk3y5gv16qf80mx"))))
11020 (build-system python-build-system)
11021 (arguments
11022 '(#:phases
11023 (modify-phases %standard-phases
11024 (add-before 'check 'disable-test
11025 (lambda _
11026 ;; This test fails on slow computers.
11027 (substitute* "tests/test_bugbear.py"
11028 (("def test_does_not_crash_on_any_valid_code")
11029 "def _test_does_not_crash_on_any_valid_code")))))))
11030 (native-inputs
11031 (list python-hypothesis python-hypothesmith))
11032 (propagated-inputs
11033 (list python-attrs python-flake8))
11034 (home-page "https://github.com/PyCQA/flake8-bugbear")
11035 (synopsis
11036 "Flake8 plugin for finding likely bugs and design problems in your program")
11037 (description
11038 "This package contains a plugin for Flake8 finding likely bugs and
11039design problems in your program. It contains warnings that don't belong
11040in pyflakes and pycodestyle.")
11041 (license license:expat)))
11042
11043(define-public python-flake8-continuation
11044 (package
11045 (name "python-flake8-continuation")
11046 (version "1.0.5")
11047 (source
11048 (origin
11049 (method url-fetch)
11050 (uri (pypi-uri "flake8-continuation" version))
11051 (sha256
11052 (base32
11053 "0dzaw8jr7yhlabxhrblnrizxx17xa9ngjnbr1kidg5lapq6b9q1y"))))
11054 (build-system python-build-system)
11055 (propagated-inputs
11056 (list python-flake8 python-pycodestyle python-six))
11057 (home-page "https://github.com/planetlabs/flake8-continuation")
11058 (synopsis "Flake8 Line Continuation Plugin")
11059 (description "A Flake8 plugin that checks for the line continuation
11060style to be in the preferred method according to PEP-8, specifically:
11061@quotation
11062The preferred way of wrapping long lines is by using Python's implied
11063line continuation inside parentheses, brackets and braces. Long lines
11064can be broken over multiple lines by wrapping expressions in parentheses.
11065These should be used in preference to using a backslash for line continuation.
11066@end quotation")
11067 (license license:asl2.0)))
11068
11069(define-public python-flake8-debugger
11070 (package
11071 (name "python-flake8-debugger")
11072 (version "4.1.2")
11073 (source
11074 (origin
11075 (method url-fetch)
11076 (uri (pypi-uri "flake8-debugger" version))
11077 (sha256
11078 (base32 "0h1qlzbxxhjsw6kg3mcml9h8byy77m9a5z06z2dnvqs115b05c2j"))))
11079 (build-system python-build-system)
11080 (arguments
11081 `(#:tests? #f)) ; no tests in PyPI and no setup.py in GitHub
11082 (propagated-inputs
11083 (list python-flake8 python-pycodestyle))
11084 (home-page "https://github.com/jbkahn/flake8-debugger")
11085 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
11086 (description "This package provides a Flake8 plugin that checks for
11087@code{ipdb} and @code{pdb} imports and set traces, as well as
11088@code{from IPython.terminal.embed}, @code{import InteractiveShellEmbed}
11089and @code{InteractiveShellEmbed()()}.")
11090 (license license:expat)))
11091
11092(define-public python-flake8-implicit-str-concat
11093 (package
11094 (name "python-flake8-implicit-str-concat")
11095 (version "0.2.0")
11096 (source
11097 (origin
11098 (method url-fetch)
11099 (uri (pypi-uri "flake8_implicit_str_concat" version))
11100 (sha256
11101 (base32 "1v0y29xlmbr2q12a4nnpm1dm9aw1mjiys1x8jif4z8c90d63cqm6"))))
11102 (build-system python-build-system)
11103 (arguments
11104 '(#:tests? #f ;no tests
11105 #:phases (modify-phases %standard-phases
11106 (add-after 'unpack 'loosen-requirements
11107 (lambda _
11108 ;; Permit newer versions of attrs. Remove for >0.2.
11109 (substitute* "setup.py"
11110 ((", <21") "")))))))
11111 (propagated-inputs
11112 (list python-attrs python-more-itertools))
11113 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
11114 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
11115 (description
11116 "This is a plugin for the Python code checking tool Flake8 to encourage
11117correct string literal concatenation.
11118
11119It looks for style problems like implicitly concatenated string literals on
11120the same line (which can be introduced by the code formatting tool Black), or
11121unnecessary plus operators for explicit string literal concatenation.")
11122 (license license:expat)))
11123
11124(define-public python-flake8-print
11125 (package
11126 (name "python-flake8-print")
11127 (version "4.0.0")
11128 (source
11129 (origin
11130 (method url-fetch)
11131 (uri (pypi-uri "flake8-print" version))
11132 (sha256
11133 (base32 "05k5kkvyk6fdmvnacxfzypk74vbl3pmva13dqg1aljfwnxsc7yjs"))))
11134 (build-system python-build-system)
11135 (propagated-inputs
11136 (list python-flake8 python-pycodestyle python-six))
11137 (home-page "https://github.com/jbkahn/flake8-print")
11138 (synopsis "Print statement checker plugin for Flake8")
11139 (description
11140 "This plugin for Flake8 checks for @code{print} statements in Python
11141files.")
11142 (license license:expat)))
11143
11144(define-public python-flake8-pyi
11145 (package
11146 (name "python-flake8-pyi")
11147 (version "20.10.0")
11148 (source
11149 (origin
11150 (method url-fetch)
11151 (uri (pypi-uri "flake8-pyi" version))
11152 (sha256
11153 (base32
11154 "0b27n2pmrxcc7nva4wp2i7mrag0fnq0firvhg1ljq593a45b5qyf"))))
11155 (build-system python-build-system)
11156 (propagated-inputs
11157 (list python-attrs python-flake8 python-pyflakes))
11158 (home-page "https://github.com/ambv/flake8-pyi")
11159 (synopsis
11160 "Flake8 plugin that provides specializations for type hinting stub files")
11161 (description
11162 "This package contains a plugin that provides specializations for
11163type hinting stub files, especially interesting for linting typeshed. It
11164adds the @file{.pyi} extension to the default value of the @code{--filename}
11165command-line argument to Flake8. This means stubs are linted by default with
11166this plugin enabled, without needing to explicitly list every file. It
11167modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
11168expressions after the entire file has been read. This enables support for
11169first-class forward references that stub files use.")
11170 (license license:expat)))
11171
11172(define-public python-flake8-pie
11173 (package
11174 (name "python-flake8-pie")
11175 (version "0.5.0")
11176 (source
11177 (origin
11178 (method url-fetch)
11179 (uri (pypi-uri "flake8-pie" version))
11180 (sha256
11181 (base32 "0kgipl5gljlp7aa7ykx15pswpzkd0d0qiznihb2z0d9a73181dyd"))))
11182 (build-system python-build-system)
11183 (home-page "https://github.com/sbdchd/flake8-pie")
11184 (synopsis "Flake8 extension that implements lints")
11185 (description
11186 "This package provides a flake8 extension that implements miscellaneous
11187lints.")
11188 (license license:bsd-2)))
11189
11190(define-public python-flake8-quotes
11191 (package
11192 (name "python-flake8-quotes")
11193 (version "3.2.0")
11194 (source
11195 (origin
11196 (method url-fetch)
11197 (uri (pypi-uri "flake8-quotes" version))
11198 (sha256
11199 (base32
11200 "0ph5s6lxgpzz4an0ax6s5xjqypqmngwr5b1i0h9pqhzghplic49z"))))
11201 (build-system python-build-system)
11202 (propagated-inputs
11203 (list python-flake8))
11204 (home-page "https://github.com/zheller/flake8-quotes/")
11205 (synopsis "Flake8 lint for quotes")
11206 (description "This package provides a Flake8 lint for quotes.")
11207 (license license:expat)))
11208
11209(define-public python-flake8-todo
11210 (package
11211 (name "python-flake8-todo")
11212 (version "0.7")
11213 (source
11214 (origin
11215 (method url-fetch)
11216 (uri (pypi-uri "flake8-todo" version))
11217 (sha256
11218 (base32
11219 "05arm0sch3r8248035kilmf01z0mxsahw6vpbbz0d343zy8m8k3f"))))
11220 (build-system python-build-system)
11221 (propagated-inputs
11222 (list python-pycodestyle))
11223 (home-page "https://github.com/schlamar/flake8-todo")
11224 (synopsis "TODO notes checker, plugin for flake8")
11225 (description
11226 "This package provides the @code{flake8-todo} Python module, a
11227TODO notes checker plugin for flake8.")
11228 (license license:expat)))
11229
11230(define-public python-flake8-isort
11231 (package
11232 (name "python-flake8-isort")
11233 (version "4.1.1")
11234 (source
11235 (origin
11236 (method url-fetch)
11237 (uri (pypi-uri "flake8-isort" version))
11238 (sha256
11239 (base32 "05r7z0j9rqgy0a9261bhisairrz6w8hy5hy5kf2mhvhfnx53056q"))))
11240 (build-system python-build-system)
11241 (arguments
11242 (list
11243 #:phases
11244 #~(modify-phases %standard-phases
11245 (replace 'check
11246 (lambda* (#:key tests? #:allow-other-keys)
11247 (when tests?
11248 (invoke "pytest" "-vv")))))))
11249 (propagated-inputs (list python-flake8 python-isort python-testfixtures))
11250 (native-inputs (list python-pytest))
11251 (home-page "https://github.com/gforcada/flake8-isort")
11252 (synopsis "Flake8 plugin integrating isort")
11253 (description "This package provides a flake8 plugin that integrates isort,
11254extending flake8 so that it can warn about badly sorted Python import
11255directives.")
11256 (license license:gpl2+)))
11257
11258(define-public python-autoflake
11259 (package
11260 (name "python-autoflake")
11261 (version "1.3.1")
11262 (source
11263 (origin
11264 (method url-fetch)
11265 (uri (pypi-uri "autoflake" version))
11266 (sha256
11267 (base32 "0nzr057dbmgprp4a52ymafdkdd5zp2wcqf42913xc7hhvvdbj338"))))
11268 (build-system python-build-system)
11269 (propagated-inputs
11270 (list python-pyflakes))
11271 (home-page "https://github.com/myint/autoflake")
11272 (synopsis "Removes unused imports and unused variables")
11273 (description
11274 "@code{autoflake} removes unused imports and unused variables from Python
11275code as reported by @code{pyflakes}.
11276
11277By default, it only removes unused imports for modules that are part of the
11278standard library. Removal of unused variables is also disabled by default.
11279It also removes useless @code{pass} statements.")
11280 (license license:expat)))
11281
11282(define-public python-mistune
11283 (package
11284 (name "python-mistune")
11285 (version "0.8.4")
11286 (source
11287 (origin
11288 (method url-fetch)
11289 (uri (pypi-uri "mistune" version))
11290 (sha256
11291 (base32
11292 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
11293 (build-system python-build-system)
11294 (native-inputs
11295 (list python-nose python-cython))
11296 (home-page "https://github.com/lepture/mistune")
11297 (synopsis "Markdown parser in pure Python")
11298 (description "This package provides a fast markdown parser in pure
11299Python.")
11300 (license license:bsd-3)))
11301
11302;; 2.0 is not released yet, but some packages have started using it.
11303(define-public python-mistune-next
11304 (package
11305 (inherit python-mistune)
11306 (name "python-mistune-next")
11307 (version "2.0.4")
11308 (source (origin
11309 (method url-fetch)
11310 (uri (pypi-uri "mistune" version))
11311 (sha256
11312 (base32
11313 "024q9l6mgd37wa25w7dhskv1m3zsj5lf0w9cfyx7l9p2adhadq4y"))))
11314 (arguments
11315 (list
11316 #:phases
11317 #~(modify-phases %standard-phases
11318 (replace 'check
11319 (lambda* (#:key tests? #:allow-other-keys)
11320 (when tests?
11321 (invoke "pytest" "-vv")))))))
11322 (native-inputs (list python-pytest))))
11323
11324(define-public python-markdown
11325 (package
11326 (name "python-markdown")
11327 (version "3.3.4")
11328 (source
11329 (origin
11330 (method url-fetch)
11331 (uri (pypi-uri "Markdown" version))
11332 (sha256
11333 (base32
11334 "0jbs73nincha8fkfxx267sfxac6pl0ckszjbqbb8gk4dhs8v9d9i"))))
11335 (build-system python-build-system)
11336 (native-inputs
11337 (list python-nose python-pyyaml))
11338 (home-page "https://python-markdown.github.io/")
11339 (synopsis "Python implementation of Markdown")
11340 (description
11341 "This package provides a Python implementation of John Gruber's
11342Markdown. The library features international input, various Markdown
11343extensions, and several HTML output formats. A command line wrapper
11344markdown_py is also provided to convert Markdown files to HTML.")
11345 (license license:bsd-3)))
11346
11347(define-public python-mdx-include
11348 (package
11349 (name "python-mdx-include")
11350 (version "1.4.1")
11351 (source (origin
11352 ;; Use git, as there are some test files missing from the PyPI
11353 ;; release, see https://github.com/neurobin/mdx_include/issues/9
11354 (method git-fetch)
11355 (uri (git-reference
11356 (url "https://github.com/neurobin/mdx_include")
11357 ;; Releases are not tagged on github, see
11358 ;; https://github.com/neurobin/mdx_include/issues/10
11359 (commit "683e6be7a00a1ef4d673ad0294458fa61bc97286")))
11360 (file-name (git-file-name name version))
11361 (sha256
11362 (base32
11363 "0qpzgln4ybd7pl0m9s19dv60aq9cvwrk7x3yz96kjhcywaa5w386"))))
11364 (build-system python-build-system)
11365 (arguments
11366 '(#:phases
11367 (modify-phases %standard-phases
11368 (add-before 'check 'disable-test-requiring-network
11369 (lambda _
11370 (substitute* "mdx_include/test/test.py"
11371 (("(\\s+def )test_(cache|config|default)\\(" _ pre post)
11372 (string-append pre "__off__test_" post "("))))))))
11373 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
11374 (home-page "https://github.com/neurobin/mdx_include")
11375 (synopsis "Python Markdown extension to include local or remote files")
11376 (description "Include extension for Python Markdown. It lets you include
11377local or remote (downloadable) files into your markdown at arbitrary
11378positions.
11379
11380This project is motivated by markdown-include and provides the same
11381functionalities with some extras.")
11382 (license license:bsd-3)))
11383
11384(define-public python-ptyprocess
11385 (package
11386 (name "python-ptyprocess")
11387 (version "0.5.2")
11388 (source
11389 (origin
11390 (method url-fetch)
11391 (uri (pypi-uri "ptyprocess" version))
11392 (sha256
11393 (base32
11394 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
11395 (build-system python-build-system)
11396 (native-inputs
11397 (list python-nose))
11398 (arguments
11399 `(#:phases
11400 (modify-phases %standard-phases
11401 (replace 'check
11402 (lambda _ (invoke "nosetests"))))))
11403 (home-page "https://github.com/pexpect/ptyprocess")
11404 (synopsis "Run a subprocess in a pseudo terminal")
11405 (description
11406 "This package provides a Python library used to launch a subprocess in a
11407pseudo terminal (pty), and interact with both the process and its pty.")
11408 (license license:isc)))
11409
11410(define-public python-cram
11411 (package
11412 (name "python-cram")
11413 (version "0.7")
11414 (home-page "https://bitheap.org/cram/")
11415 (source (origin
11416 (method url-fetch)
11417 (uri (list (string-append home-page "cram-"
11418 version ".tar.gz")
11419 (pypi-uri "cram" version)))
11420 (sha256
11421 (base32
11422 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
11423 (arguments
11424 '(#:phases
11425 (modify-phases %standard-phases
11426 (add-after 'unpack 'patch-source
11427 (lambda _
11428 (substitute* (find-files "cram" ".*\\.py$")
11429 ;; Replace default shell path.
11430 (("/bin/sh") (which "sh")))
11431 (substitute* (find-files "tests" ".*\\.t$")
11432 (("md5") "md5sum")
11433 (("/bin/bash") (which "bash"))
11434 (("/bin/sh") (which "sh")))
11435 (substitute* "cram/_test.py"
11436 ;; This hack works around a bug triggered by substituting
11437 ;; the /bin/sh paths. "tests/usage.t" compares the output of
11438 ;; "cram -h", which breaks the output at 80 characters. This
11439 ;; causes the line showing the default shell to break into two
11440 ;; lines, but the test expects a single line...
11441 (("env\\['COLUMNS'\\] = '80'")
11442 "env['COLUMNS'] = '160'"))
11443
11444 (substitute* "Makefile"
11445 ;; Recent versions of python-coverage have caused the test
11446 ;; coverage to decrease (as of version 0.7). Allow that.
11447 (("--fail-under=100")
11448 "--fail-under=90"))
11449
11450 #t))
11451 (replace 'check
11452 ;; The test phase uses the built library and executable.
11453 (lambda* (#:key inputs outputs #:allow-other-keys)
11454 (add-installed-pythonpath inputs outputs)
11455 (setenv "PATH" (string-append (getenv "PATH") ":"
11456 (assoc-ref outputs "out") "/bin"))
11457 (invoke "make" "test"))))))
11458 (build-system python-build-system)
11459 (native-inputs
11460 (list python-coverage which))
11461 (synopsis "Simple testing framework for command line applications")
11462 (description
11463 "Cram is a functional testing framework for command line applications.
11464Cram tests look like snippets of interactive shell sessions. Cram runs each
11465command and compares the command output in the test with the command’s actual
11466output.")
11467 (license license:gpl2+)))
11468
11469(define-public python-crccheck
11470 (package
11471 (name "python-crccheck")
11472 (version "1.1")
11473 (source
11474 (origin
11475 (method url-fetch)
11476 (uri (pypi-uri "crccheck" version))
11477 (sha256
11478 (base32 "15psg7wjfbpmmry54ffwg6pg63mnv7mkwmb0a7884axnr8qj55j5"))))
11479 (build-system python-build-system)
11480 (arguments
11481 (list
11482 #:phases
11483 #~(modify-phases %standard-phases
11484 (replace 'check
11485 (lambda* (#:key tests? #:allow-other-keys)
11486 (when tests?
11487 (invoke "pytest" "-vv")))))))
11488 (native-inputs (list python-pytest))
11489 (home-page "https://sourceforge.net/projects/crccheck/")
11490 (synopsis "Calculation library for CRCs and checksums")
11491 (description "@code{crccheck} is a calculation library for CRCs and
11492checksums. It implement more than a hundred checksum routines.")
11493 (license license:gpl3+)))
11494
11495(define-public python-crashtest
11496 (package
11497 (name "python-crashtest")
11498 (version "0.3.1")
11499 (source
11500 (origin
11501 (method url-fetch)
11502 (uri (pypi-uri "crashtest" version))
11503 (sha256
11504 (base32 "1p9p7mn8x2j9psc4jxab98897v4i9s4fliyfw8rp8v4bx1n7pjj2"))))
11505 (build-system python-build-system)
11506 (home-page "https://github.com/sdispater/crashtest")
11507 (synopsis "Manage Python errors with ease")
11508 (description
11509 "Python library that makes exceptions handling and inspection easier.")
11510 (license license:expat)))
11511
11512(define-public python-stdlib-list
11513 (package
11514 (name "python-stdlib-list")
11515 (version "0.8.0")
11516 (source (origin
11517 (method url-fetch)
11518 (uri (pypi-uri "stdlib-list" version))
11519 (sha256
11520 (base32
11521 "17vdn4q0sdlndc2fr9svapxx6366hnrhkn0fswp1xmr0jxqh7rd1"))))
11522 (build-system python-build-system)
11523 (arguments
11524 `(#:tests? #f)) ; Tests require more dependencies.
11525 (native-inputs
11526 (list python-sphinx))
11527 (home-page "https://github.com/jackmaney/python-stdlib-list")
11528 (synopsis "Python Standard Libraries")
11529 (description "This package contains a list of Python Standard Libraries.")
11530 (license license:expat)))
11531
11532(define-public python-stopit
11533 (package
11534 (name "python-stopit")
11535 (version "1.1.2")
11536 (source
11537 (origin
11538 (method url-fetch)
11539 (uri (pypi-uri "stopit" version))
11540 (sha256
11541 (base32 "0vcrcvky249q4rbgmwf18mwmnypfk8jpn4h6knyjf86r7xc9rwzp"))))
11542 (build-system python-build-system)
11543 (arguments '(#:tests? #f)) ;there are none
11544 (home-page "https://pypi.python.org/pypi/stopit")
11545 (synopsis "Timeout control decorator and context managers")
11546 (description
11547 "Raise asynchronous exceptions in other threads, control the timeout of
11548blocks or callables with two context managers and two decorators.")
11549 (license license:expat)))
11550
11551(define-public python-timeout-decorator
11552 (package
11553 (name "python-timeout-decorator")
11554 (version "0.5.0")
11555 (source (origin
11556 (method url-fetch)
11557 (uri (pypi-uri "timeout-decorator" version))
11558 (sha256
11559 (base32
11560 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
11561 (build-system python-build-system)
11562 (home-page "https://github.com/pnpnpn/timeout-decorator")
11563 (synopsis "Timeout decorator")
11564 (description "This package provides a decorator that raises an error
11565when an operation takes longer than expected.")
11566 (license license:expat)))
11567
11568(define-public python-straight-plugin
11569 (package
11570 (name "python-straight-plugin")
11571 (version "1.4.1")
11572 (source
11573 (origin
11574 (method url-fetch)
11575 (uri (pypi-uri "straight.plugin" version))
11576 (sha256
11577 (base32
11578 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
11579 (build-system python-build-system)
11580 (home-page "https://github.com/ironfroggy/straight.plugin")
11581 (synopsis "Simple namespaced plugin facility")
11582 (description "Straight Plugin provides a type of plugin you can create from
11583almost any existing Python modules, and an easy way for outside developers to
11584add functionality and customization to your projects with their own plugins.")
11585 (license license:expat)))
11586
11587(define-public python-pysendfile
11588 (package
11589 (name "python-pysendfile")
11590 (version "2.0.1")
11591 (source
11592 (origin
11593 (method url-fetch)
11594 (uri (pypi-uri "pysendfile" version))
11595 (sha256
11596 (base32 "05qf0m32isflln1zjgxlpw0wf469lj86vdwwqyizp1h94x5l22ji"))))
11597 (build-system python-build-system)
11598 (arguments
11599 (list
11600 #:phases #~(modify-phases %standard-phases
11601 (replace 'check
11602 (lambda* (#:key tests? #:allow-other-keys)
11603 (when tests?
11604 (setenv "HOME" "/tmp")
11605 (invoke "make" "test")))))))
11606 (home-page "https://github.com/giampaolo/pysendfile")
11607 (synopsis "Python interface to sendfile(2)")
11608 (description "The @{pysendfile} Python library provides an interface to
11609the @code{sendfile(2)} system call.")
11610 (license license:expat)))
11611
11612(define-public python-pyftpdlib
11613 (package
11614 (name "python-pyftpdlib")
11615 (version "1.5.6")
11616 (source
11617 (origin
11618 (method url-fetch)
11619 (uri (pypi-uri "pyftpdlib" version))
11620 (sha256
11621 (base32 "0pnv2byzmzg84q5nmmhn1xafvfil85qa5y52bj455br93zc5b9px"))))
11622 (build-system python-build-system)
11623 (arguments
11624 (list
11625 #:phases
11626 #~(modify-phases %standard-phases
11627 (replace 'check
11628 (lambda* (#:key tests? #:allow-other-keys)
11629 (when tests?
11630 (invoke
11631 "pytest"
11632 ;; Deselect failing tests.
11633 "-k" (string-append
11634 ;; Using Pytest instead of the Makefile causes the
11635 ;; command line tests to fail on unknown Pytest
11636 ;; arguments.
11637 "not TestCommandLineParser "
11638 ;; https://github.com/giampaolo/pyftpdlib/issues/478
11639 "and not test_use_gmt_times "
11640 ;; https://github.com/giampaolo/pyftpdlib/issues/550
11641 "and not test_masquerade_address "
11642 ;; https://github.com/giampaolo/pyftpdlib/issues/500
11643 "and not test_rest_on_stor "
11644 "and not test_stor_ascii"))))))))
11645 (native-inputs (list python-psutil python-pytest))
11646 (propagated-inputs (list python-pyopenssl python-pysendfile))
11647 (home-page "https://github.com/giampaolo/pyftpdlib/")
11648 (synopsis "Asynchronous and scalable Python FTP server library")
11649 (description "The Python FTP server library provides a high-level
11650interface to write efficient, scalable and asynchronous FTP servers with
11651Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
11652RFC-959} FTP server implementation available for Python, and has the following
11653traits:
11654@itemize
11655@item
11656It is lightweight, fast and scalable.
11657@item
11658It uses the @code{sendfile(2)} system call for uploads.
11659@item
11660It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
11661asynchronously.
11662@item
11663It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
11664IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
11665RFC-2640}) and MLSD/MLST commands (RFC-3659).
11666@item
11667It has a flexible system of @samp{authorizers} able to manage both
11668@samp{virtual} and @samp{real} users.
11669@end itemize")
11670 (license license:expat)))
11671
11672(define-public python-fs
11673 (package
11674 (name "python-fs")
11675 (version "2.4.16")
11676 (source
11677 (origin
11678 (method url-fetch)
11679 (uri (pypi-uri "fs" version))
11680 (sha256
11681 (base32 "04ykd7q49qgv13hl2n71lzihs2c9099r50lmd85vgx0k2bawg5xf"))))
11682 (build-system python-build-system)
11683 (arguments
11684 (list
11685 #:phases #~(modify-phases %standard-phases
11686 (replace 'check
11687 (lambda* (#:key tests? #:allow-other-keys)
11688 (when tests?
11689 (setenv "HOME" "/tmp")
11690 (invoke "pytest" "-m" "not slow")))))))
11691 (propagated-inputs
11692 (list python-appdirs python-pytz python-six))
11693 (native-inputs
11694 (list python-mock python-parameterized python-pyftpdlib python-pytest))
11695 (home-page "https://github.com/PyFilesystem/pyfilesystem2/")
11696 (synopsis "File system abstraction layer for Python")
11697 (description "PyFilesystem's @code{FS} object is a file system abstraction
11698sharing similarities with Python's own @code{file} object for single files.
11699It allows opening all the files under a given directory recursively, as a
11700single @code{FS} object. This enables, for example, counting the combined
11701number of lines in the contained files easily.")
11702 (license license:expat)))
11703
11704;;; Tests are left out in the main package to avoid cycles.
11705(define-public python-fonttools
11706 (hidden-package
11707 (package
11708 (name "python-fonttools")
11709 (version "4.28.5")
11710 (source (origin
11711 (method url-fetch)
11712 (uri (pypi-uri "fonttools" version ".zip"))
11713 (sha256
11714 (base32
11715 "1jhl5n3rfqq7fznvsh6r80n7ylap1a7ppq1040y8cflhyz80ap2l"))))
11716 (build-system python-build-system)
11717 (native-inputs
11718 (list unzip))
11719 (arguments '(#:tests? #f))
11720 (home-page "https://github.com/fonttools/fonttools")
11721 (synopsis "Tools to manipulate font files")
11722 (description
11723 "FontTools/TTX is a library to manipulate font files from Python. It
11724supports reading and writing of TrueType/OpenType fonts, reading and writing
11725of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
11726also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
11727from an XML-based format.")
11728 (license license:expat))))
11729
11730;;; Rename 'python-fonttools' in next cycle, renaming the current
11731;;; 'python-fonttools' to 'python-fonttools-minimal'.
11732(define-public python-fonttools-full
11733 (package/inherit python-fonttools
11734 (arguments
11735 (substitute-keyword-arguments (package-arguments python-fonttools)
11736 ((#:tests? _ #f)
11737 (not (%current-target-system)))
11738 ((#:phases phases '%standard-phases)
11739 `(modify-phases ,phases
11740 (replace 'check
11741 (lambda* (#:key tests? #:allow-other-keys)
11742 (when tests?
11743 (invoke "pytest" "-vv"
11744 "-k"
11745 ;; XXX: These tests need .trm files that are
11746 ;; not shipped with the PyPI release.
11747 (format #f "not ~a"
11748 (string-join
11749 '("test_read_fontdimens_mathsy"
11750 "test_read_fontdimens_mathex"
11751 "test_read_fontdimens_vanilla"
11752 "test_read_boundary_char"
11753 "fontTools.tfmLib")
11754 " and not "))))))))))
11755 (native-inputs
11756 (modify-inputs (package-native-inputs python-fonttools)
11757 (append python-pytest)))
11758 (propagated-inputs
11759 (list python-brotli
11760 python-fs
11761 python-lxml
11762 python-lz4
11763 python-scipy
11764 python-unicodedata2
11765 python-zopfli))
11766 (properties (alist-delete 'hidden? (package-properties python-fonttools)))))
11767
11768(define-public python-fonttools-next
11769 (package
11770 (inherit python-fonttools-full)
11771 (version "4.37.1")
11772 (source (origin
11773 (inherit (package-source python-fonttools-full))
11774 (method url-fetch)
11775 (uri (pypi-uri "fonttools" version ".zip"))
11776 (sha256
11777 (base32
11778 "1ryc1wca2v92wn24baryj5fr32lspl8rbsig32fnkxp1islf21j6"))))))
11779
11780(define-public python-ly
11781 (package
11782 (name "python-ly")
11783 (version "0.9.5")
11784 (source
11785 (origin
11786 (method url-fetch)
11787 (uri (pypi-uri name version))
11788 (sha256
11789 (base32
11790 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
11791 (build-system python-build-system)
11792 (arguments
11793 ;; FIXME: Some tests need network access.
11794 '(#:tests? #f))
11795 (synopsis "Tool and library for manipulating LilyPond files")
11796 (description "This package provides a Python library to parse, manipulate
11797or create documents in LilyPond format. A command line program ly is also
11798provided that can be used to do various manipulations with LilyPond files.")
11799 (home-page "https://pypi.org/project/python-ly/")
11800 (license license:gpl2+)))
11801
11802(define-public python-appdirs
11803 (package
11804 (name "python-appdirs")
11805 (version "1.4.3")
11806 (source
11807 (origin
11808 (method url-fetch)
11809 (uri (pypi-uri "appdirs" version))
11810 (sha256
11811 (base32
11812 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
11813 (build-system python-build-system)
11814 (home-page "https://github.com/ActiveState/appdirs")
11815 (synopsis
11816 "Determine platform-specific dirs, e.g. a \"user data dir\"")
11817 (description
11818 "This module provides a portable way of finding out where user data
11819should be stored on various operating systems.")
11820 (license license:expat)))
11821
11822(define-public python-gorilla
11823 (package
11824 (name "python-gorilla")
11825 (version "0.3.0")
11826 (source (origin
11827 (method url-fetch)
11828 (uri (pypi-uri "gorilla" version))
11829 (sha256
11830 (base32
11831 "0b40blcp6fih4nvqbilra4qw1dfccv1ahjmr41ac4d9rjadqkcpy"))))
11832 (build-system python-build-system)
11833 (home-page "https://github.com/christophercrouzet/gorilla")
11834 (synopsis "Convenient monkey patching with Python")
11835 (description
11836 "Gorilla is a Python library that provides a convenient approach to
11837monkey patching. Monkey patching is the process of modifying module and
11838class attributes at runtime with the purpose of replacing or extending
11839third-party code.")
11840 (license license:expat)))
11841
11842(define-public python-llfuse
11843 (package
11844 (name "python-llfuse")
11845 (version "1.4.1")
11846 (source (origin
11847 (method url-fetch)
11848 (uri (pypi-uri "llfuse" version))
11849 (sha256
11850 (base32
11851 "1jaf790rsxvz3hs9fbr3hrnmg0xzl6a2bqfa10bbbsjsdbcpk762"))))
11852 (build-system python-build-system)
11853 (inputs
11854 (list fuse attr))
11855 (native-inputs
11856 (list pkg-config python-pytest))
11857 (synopsis "Python bindings for FUSE")
11858 (description
11859 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
11860 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
11861 (license license:lgpl2.0+)))
11862
11863(define-public python-msgpack
11864 (package
11865 (name "python-msgpack")
11866 (version "1.0.4")
11867 (source (origin
11868 (method url-fetch)
11869 (uri (pypi-uri "msgpack" version))
11870 (sha256
11871 (base32
11872 "0pqzy1zclyhd42gfibhkcqymbspy5a6v421g87mh40h3iz0nkn7m"))))
11873 (build-system python-build-system)
11874 (arguments
11875 `(#:modules ((guix build utils)
11876 (guix build python-build-system)
11877 (ice-9 ftw)
11878 (srfi srfi-1)
11879 (srfi srfi-26))
11880 #:phases
11881 (modify-phases %standard-phases
11882 (replace 'check
11883 (lambda _
11884 (invoke "pytest" "-v" "test"))))))
11885 (native-inputs
11886 (list python-pytest))
11887 (synopsis "MessagePack (de)serializer")
11888 (description "MessagePack is a fast, compact binary serialization format,
11889suitable for similar data to JSON. This package provides CPython bindings for
11890reading and writing MessagePack data.")
11891 (home-page "https://pypi.org/project/msgpack/")
11892 (license license:asl2.0)))
11893
11894(define-public python-msgpack-1.0.2
11895 (package
11896 (inherit python-msgpack)
11897 (version "1.0.2")
11898 (source (origin
11899 (method url-fetch)
11900 (uri (pypi-uri "msgpack" version))
11901 (sha256
11902 (base32
11903 "1109s2yynrahwi64ikax68hx0mbclz8p35afmpphw5dwynb49q7s"))))))
11904
11905;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
11906;; release 0.5. Some packages like borg still call it by the old name for now.
11907;; <https://bugs.gnu.org/30662>
11908(define-public python-msgpack-transitional
11909 (package
11910 (inherit python-msgpack)
11911 (name "python-msgpack-transitional")
11912 (version "0.5.6")
11913 (source (origin
11914 (method url-fetch)
11915 (uri (pypi-uri "msgpack" version))
11916 (sha256
11917 (base32
11918 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
11919 (arguments
11920 (substitute-keyword-arguments (package-arguments python-msgpack)
11921 ((#:phases phases)
11922 `(modify-phases ,phases
11923 (add-after 'unpack 'configure-transitional
11924 (lambda _
11925 ;; Keep using the old name.
11926 (substitute* "setup.py"
11927 (("TRANSITIONAL = False")
11928 "TRANSITIONAL = 1"))
11929 ;; This old version is not compatible with Python 3.9
11930 (substitute* '("test/test_buffer.py" "test/test_extension.py")
11931 ((".tostring\\(") ".tobytes("))
11932 (substitute* '("test/test_buffer.py" "test/test_extension.py")
11933 ((".fromstring\\(") ".frombytes("))
11934 #t))))))))
11935
11936(define-public python-netaddr
11937 (package
11938 (name "python-netaddr")
11939 (version "0.8.0")
11940 (source
11941 (origin
11942 (method url-fetch)
11943 (uri (pypi-uri "netaddr" version))
11944 (sha256
11945 (base32
11946 "0hx2npi0wnhwlcybilgwlddw6qffx1mb7a3sj4p9s7bvl33mgk6n"))))
11947 (build-system python-build-system)
11948 (arguments `(#:tests? #f)) ;; No tests.
11949 (home-page "https://github.com/drkjam/netaddr/")
11950 (synopsis "Pythonic manipulation of network addresses")
11951 (description
11952 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
11953and MAC network addresses.")
11954 (license license:bsd-3)))
11955
11956(define-public python-openstep-plist
11957 (package
11958 (name "python-openstep-plist")
11959 (version "0.3.0")
11960 (home-page "https://github.com/fonttools/openstep-plist")
11961 (source (origin
11962 (method git-fetch)
11963 (uri (git-reference
11964 (url home-page)
11965 (commit (string-append "v" version))))
11966 (file-name (git-file-name name version))
11967 (sha256
11968 (base32
11969 "1rxjgzh0p069ncsr2986rn32vhdqyq35irbqg2559jh18456mkca"))))
11970 (build-system python-build-system)
11971 (arguments
11972 (list #:phases
11973 #~(modify-phases %standard-phases
11974 (add-after 'unpack 'pretend-version
11975 (lambda _
11976 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
11977 #$(package-version this-package))))
11978 (replace 'check
11979 (lambda* (#:key tests? #:allow-other-keys)
11980 (when tests?
11981 (invoke "pytest" "-vv")))))))
11982 (native-inputs
11983 (list python-cython python-pytest python-setuptools-scm))
11984 (synopsis "OpenStep plist parser and writer")
11985 (description
11986 "This package provides a parser for the \"old style\" OpenStep property
11987list format (also known as ASCII plist), written in Cython.")
11988 (license license:expat)))
11989
11990(define-public python-wrapt
11991 (package
11992 (name "python-wrapt")
11993 (version "1.11.2")
11994 (source
11995 (origin
11996 (method url-fetch)
11997 (uri (pypi-uri "wrapt" version))
11998 (sha256
11999 (base32
12000 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
12001 (build-system python-build-system)
12002 (arguments
12003 ;; Tests are not included in the tarball, they are only available in the
12004 ;; git repository.
12005 `(#:tests? #f))
12006 (home-page "https://github.com/GrahamDumpleton/wrapt")
12007 (synopsis "Module for decorators, wrappers and monkey patching")
12008 (description
12009 "The aim of the wrapt module is to provide a transparent object proxy for
12010 Python, which can be used as the basis for the construction of function
12011 wrappers and decorator functions.")
12012 (license license:bsd-2)))
12013
12014(define-public python-commentjson
12015 (package
12016 (name "python-commentjson")
12017 (version "0.9.0")
12018 (source (origin
12019 ;; The PyPI release is missing some test files.
12020 (method git-fetch)
12021 (uri (git-reference
12022 (url "https://github.com/vaidik/commentjson")
12023 (commit (string-append "v" version))))
12024 (file-name (git-file-name name version))
12025 (sha256
12026 (base32
12027 "01iscgrc6bkyrxbzmf46csbf9c0n7g6dygdmxs3fq8fkzrrciybl"))))
12028 (build-system python-build-system)
12029 (arguments
12030 `(#:modules ((guix build python-build-system)
12031 (guix build utils)
12032 (ice-9 ftw)
12033 (ice-9 textual-ports))
12034 #:phases
12035 (modify-phases %standard-phases
12036 (add-after 'unpack 'relax-requirements
12037 (lambda _
12038 (substitute* "setup.py"
12039 (("lark-parser>=0.7.1,<0.8.0")
12040 "lark-parser>=0.7.1"))))
12041 (add-after 'unpack 'delete-unspported-tests
12042 ;; Some tests rely on the 'test' module of Python itself,
12043 ;; which is not available with the Python package in Guix;
12044 ;; remove them.
12045 (lambda _
12046 ;; XXX: Copied from (guix build dub-build-system).
12047 (define (grep string file-name)
12048 (string-contains (call-with-input-file file-name get-string-all)
12049 string))
12050
12051 (with-directory-excursion "commentjson/tests/test_json"
12052 (let* ((dot? (lambda (x) (member x '("." ".."))))
12053 (test-files (scandir "." (negate dot?))))
12054 (for-each delete-file
12055 (filter (lambda (f) (grep "from test." f))
12056 test-files)))))))))
12057 (propagated-inputs
12058 (list python-lark-parser))
12059 (native-inputs
12060 (list python-six))
12061 (home-page "https://github.com/vaidik/commentjson")
12062 (synopsis "Python library for adding comments to JSON files")
12063 (description "Comment JSON is a Python package that helps you create JSON
12064files with Python and JavaScript style inline comments. Its API is very
12065similar to the Python standard library's @code{json} module.")
12066 (license license:expat)))
12067
12068(define-public python-resolvelib
12069 (package
12070 (name "python-resolvelib")
12071 (version "0.7.1")
12072 (source
12073 (origin
12074 ;; Tests are missing from the PyPI release.
12075 (method git-fetch)
12076 (uri (git-reference
12077 (url "https://github.com/sarugaku/resolvelib")
12078 (commit version)))
12079 (file-name (git-file-name name version))
12080 (sha256
12081 (base32
12082 "1fqz75riagizihvf4j7wc3zjw6kmg1dd8sf49aszyml105kb33n8"))))
12083 (build-system python-build-system)
12084 (arguments
12085 `(#:phases
12086 (modify-phases %standard-phases
12087 (replace 'check
12088 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
12089 (when tests?
12090 (add-installed-pythonpath inputs outputs)
12091 (invoke "pytest")))))))
12092 (native-inputs
12093 (list python-commentjson python-packaging python-pytest))
12094 (home-page "https://github.com/sarugaku/resolvelib")
12095 (synopsis "Abstract dependencies resolver")
12096 (description "The ResolveLib library provides a @code{Resolver} class that
12097includes dependency resolution logic.")
12098 (license license:isc)))
12099
12100;;; This older version is required by ansible-core.
12101(define-public python-resolvelib-0.5
12102 (package/inherit python-resolvelib
12103 (name "python-resolvelib")
12104 (version "0.5.4")
12105 (source
12106 (origin
12107 (method git-fetch)
12108 (uri (git-reference
12109 (url "https://github.com/sarugaku/resolvelib")
12110 (commit version)))
12111 (file-name (git-file-name name version))
12112 (sha256
12113 (base32
12114 "0697y330sqhiclk25v151qxg7aixzpj434lbg5qib0qlna5zg9la"))))))
12115
12116(define-public python-commonmark
12117 (package
12118 (name "python-commonmark")
12119 (version "0.9.1")
12120 (source
12121 (origin
12122 (method url-fetch)
12123 (uri (pypi-uri "commonmark" version))
12124 (sha256
12125 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
12126 (build-system python-build-system)
12127 (arguments
12128 `(#:phases
12129 (modify-phases %standard-phases
12130 (replace 'check
12131 (lambda* (#:key inputs outputs #:allow-other-keys)
12132 (add-installed-pythonpath inputs outputs)
12133 (invoke "python" "setup.py" "test"))))))
12134 (home-page "https://github.com/readthedocs/commonmark.py")
12135 (synopsis "Python parser for the CommonMark Markdown spec")
12136 (description
12137 "This module is a pure Python port of jgm's @code{commonmark.js}, a
12138Markdown parser and renderer for the CommonMark specification, using only
12139native modules.")
12140 (license license:bsd-3)))
12141
12142(define-public python-xlrd
12143 (package
12144 (name "python-xlrd")
12145 (version "2.0.1")
12146 (source (origin
12147 ;; The tests are not included in the PyPI archive.
12148 (method git-fetch)
12149 (uri (git-reference
12150 (url "https://github.com/python-excel/xlrd")
12151 (commit version)))
12152 (file-name (git-file-name name version))
12153 (sha256
12154 (base32
12155 "170asszffvf6rh5w169ic4h5kxgjkmdl3060vw737d4g1qfifvzz"))))
12156 (build-system python-build-system)
12157 (native-inputs
12158 (list python-pytest))
12159 (home-page "http://www.python-excel.org/")
12160 (synopsis "Library for extracting data from Excel files")
12161 (description "This package provides a library to extract data from
12162spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
12163@samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
12164Unicode-aware. It is not intended as an end-user tool.")
12165 (license license:bsd-3)))
12166
12167;;; Note: this package is unmaintained since 2018 (archived on GitHub).
12168(define-public python-xlwt
12169 (package
12170 (name "python-xlwt")
12171 (version "1.3.0")
12172 (source
12173 (origin
12174 (method url-fetch)
12175 (uri (pypi-uri "xlwt" version))
12176 (sha256
12177 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
12178 (build-system python-build-system)
12179 (arguments
12180 `(#:phases
12181 (modify-phases %standard-phases
12182 (replace 'check
12183 (lambda* (#:key tests? #:allow-other-keys)
12184 (when tests?
12185 (setenv "GUIX_PYTHONPATH"
12186 (string-append (getcwd) "/build/lib:"
12187 (getenv "GUIX_PYTHONPATH")))
12188 (invoke "nosetests" "-v")))))))
12189 (native-inputs
12190 `(("nose" ,python-nose)))
12191 (home-page "http://www.python-excel.org/")
12192 (synopsis "Library for creating spreadsheet Excel files")
12193 (description "@code{xlwt} is a library for writing data and formatting
12194information to older Excel files (i.e. .xls). The package itself is pure
12195Python with no dependencies on modules or packages outside the standard Python
12196distribution. It is not intended as an end-user tool.")
12197 (license license:bsd-3)))
12198
12199(define-public python-immutables
12200 (package
12201 (name "python-immutables")
12202 (version "0.18")
12203 (source
12204 (origin
12205 (method url-fetch)
12206 (uri (pypi-uri "immutables" version))
12207 (sha256
12208 (base32 "1x4cinh0xbl6p6p2yfm2s07mxxy3lf0zzai9gqpydk4482bwfdjk"))))
12209 (build-system python-build-system)
12210 (native-inputs (list python-mypy python-pytest))
12211 (home-page "https://github.com/MagicStack/immutables")
12212 (synopsis "High-performance immutable mapping type for Python")
12213 (description
12214 "An immutable mapping type for Python. The underlying datastructure is a
12215Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
12216functional languages.")
12217 (license license:asl2.0)))
12218
12219(define-public python-prettytable
12220 (package
12221 (name "python-prettytable")
12222 (version "3.3.0")
12223 (source
12224 (origin
12225 (method url-fetch)
12226 (uri (pypi-uri "prettytable" version))
12227 (sha256
12228 (base32
12229 "1c599w31i2ndzbkn85xwsgv9sd2j16r56dl922w4jh3rs97vb3hi"))))
12230 (build-system python-build-system)
12231 (arguments
12232 (list #:phases
12233 #~(modify-phases %standard-phases
12234 (replace 'check
12235 (lambda* (#:key tests? #:allow-other-keys)
12236 (when tests?
12237 (invoke "pytest" "-vv")))))))
12238 (native-inputs
12239 (list python-pytest
12240 python-pytest-lazy-fixture
12241 python-setuptools-scm))
12242 (propagated-inputs (list python-wcwidth))
12243 (home-page "https://github.com/jazzband/prettytable")
12244 (synopsis "Display tabular data in an ASCII table format")
12245 (description
12246 "A library designed to represent tabular data in visually appealing ASCII
12247tables. PrettyTable allows for selection of which columns are to be printed,
12248independent alignment of columns (left or right justified or centred) and
12249printing of sub-tables by specifying a row range.")
12250 (license license:bsd-3)))
12251
12252(define-public python-rtf-tokenize
12253 (package
12254 (name "python-rtf-tokenize")
12255 (version "1.0.0")
12256 (source (origin
12257 (method url-fetch)
12258 (uri (pypi-uri "rtf_tokenize" version))
12259 (sha256
12260 (base32
12261 "026njb9iwznycda83bln3gfivcnzdz6vy8y86xvbsy84s28g6gaw"))))
12262 (build-system python-build-system)
12263 (native-inputs (list python-pytest))
12264 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
12265 (synopsis "Simple RTF tokenizer")
12266 (description "This package is a simple RTF tokenizer.")
12267 (license license:gpl2+)))
12268
12269(define-public python-curio
12270 (package
12271 (name "python-curio")
12272 (version "1.5")
12273 (source
12274 (origin
12275 (method url-fetch)
12276 (uri (pypi-uri "curio" version))
12277 (sha256
12278 (base32 "045wwg16qadsalhicbv21p14sj8i4w0l57639j7dmdqbb4p2225g"))))
12279 (build-system python-build-system)
12280 (arguments
12281 `(#:phases
12282 (modify-phases %standard-phases
12283 (replace 'check
12284 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
12285 (when tests?
12286 (add-installed-pythonpath inputs outputs)
12287 (invoke "pytest" "-vv" "-k"
12288 (string-append
12289 ;; Tries to open an outgoing connection.
12290 "not test_ssl_outgoing "
12291 ;; This test fails since Python 3.9.9 (see:
12292 ;; https://github.com/dabeaz/curio/issues/347).
12293 "and not test_timeout"))))))))
12294 (native-inputs
12295 (list python-pytest))
12296 (home-page "https://github.com/dabeaz/curio")
12297 (synopsis "Coroutine-based library for concurrent Python")
12298 (description
12299 "Curio is a coroutine-based library for concurrent Python systems
12300programming. It provides standard programming abstractions such as as
12301tasks, sockets, files, locks, and queues.")
12302 (license license:bsd-3)))
12303
12304(define-public python-tables
12305 (package
12306 (name "python-tables")
12307 (version "3.6.1")
12308 (source
12309 (origin
12310 (method url-fetch)
12311 (uri (pypi-uri "tables" version))
12312 (sha256
12313 (base32
12314 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
12315 (modules '((guix build utils)))
12316 (snippet
12317 '(begin
12318 ;; Remove pre-compiled .pyc files from source.
12319 (for-each delete-file-recursively
12320 (find-files "." "__pycache__" #:directories? #t))
12321 (for-each delete-file (find-files "." "\\.pyc$"))
12322 #t))))
12323 (build-system python-build-system)
12324 (arguments
12325 `(;; FIXME: python-build-system does not pass configure-flags to "build"
12326 ;; or "check", so we must override the build and check phases.
12327 #:phases
12328 (modify-phases %standard-phases
12329 (add-after 'unpack 'use-gcc
12330 (lambda _
12331 (substitute* "setup.py"
12332 (("^( +)compiler = new_compiler\\(\\)" line indent)
12333 (string-append line
12334 "\n"
12335 indent
12336 "compiler.set_executables(compiler='gcc',"
12337 "compiler_so='gcc',"
12338 "linker_exe='gcc',"
12339 "linker_so='gcc -shared')")))
12340 #t))
12341 (add-after 'unpack 'disable-tuning
12342 (lambda _
12343 (substitute* "setup.py"
12344 (("cpu_flags = .*")
12345 "cpu_flags = ['sse2']\n"))
12346 #t))
12347 (replace 'build
12348 (lambda* (#:key inputs #:allow-other-keys)
12349 (invoke "python" "setup.py" "build"
12350 (string-append "--hdf5="
12351 (assoc-ref inputs "hdf5")))))
12352 (replace 'check
12353 (lambda* (#:key inputs #:allow-other-keys)
12354 (invoke "python" "setup.py" "check"
12355 (string-append "--hdf5="
12356 (assoc-ref inputs "hdf5"))))))))
12357 (propagated-inputs
12358 (list python-numexpr python-numpy))
12359 (native-inputs
12360 (list python-cython pkg-config))
12361 (inputs
12362 (list hdf5-1.10 bzip2 zlib))
12363 (home-page "https://www.pytables.org/")
12364 (synopsis "Hierarchical datasets for Python")
12365 (description "PyTables is a package for managing hierarchical datasets and
12366designed to efficiently cope with extremely large amounts of data.")
12367 (license license:bsd-3)))
12368
12369(define-public python-sniffio
12370 (package
12371 (name "python-sniffio")
12372 (version "1.2.0")
12373 (source
12374 (origin
12375 (method url-fetch)
12376 (uri (pypi-uri "sniffio" version))
12377 (sha256
12378 (base32 "1pnkvi6wvn4qd37y69n1ls6n8l63gfmn3pvb1jb50gqxxkn6wrn4"))))
12379 (build-system python-build-system)
12380 (arguments
12381 `(#:phases
12382 (modify-phases %standard-phases
12383 (replace 'check
12384 (lambda _
12385 (invoke "pytest" "-vv"))))))
12386 (native-inputs
12387 (list python-curio python-pytest python-pytest-cov))
12388 (home-page "https://github.com/python-trio/sniffio")
12389 (synopsis "Detect which async library a program is running under")
12390 (description "This package detects which async library a program is
12391running under. It supports multiple async I/O packages, like Trio, and
12392asyncio.")
12393 ;; Either license applies.
12394 (license (list license:expat license:asl2.0))))
12395
12396(define-public python-pytest-black
12397 (package
12398 (name "python-pytest-black")
12399 (version "0.3.12")
12400 (source
12401 (origin
12402 (method url-fetch)
12403 (uri (pypi-uri "pytest-black" version))
12404 (sha256
12405 (base32
12406 "19bmbcnaq02md8nnj6pywri3vps8sxnhysbfy386qkbn9w09ncqx"))))
12407 (build-system python-build-system)
12408 (propagated-inputs
12409 (list python-pytest python-black python-toml))
12410 (native-inputs
12411 (list python-setuptools-scm))
12412 (home-page "https://github.com/shopkeep/pytest-black")
12413 (synopsis "Pytest plugin to enable format checking with black")
12414 (description
12415 "This package provides a pytest plugin to enable format checking with the
12416Python code formatter \"black\".")
12417 (license license:expat)))
12418
12419(define-public python-geojson
12420 (package
12421 (name "python-geojson")
12422 (version "2.5.0")
12423 (source
12424 (origin
12425 (method url-fetch)
12426 (uri (pypi-uri "geojson" version))
12427 (sha256
12428 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
12429 (build-system python-build-system)
12430 (arguments
12431 ;; https://github.com/jazzband/geojson/issues/175
12432 `(#:tests? #f))
12433 (home-page "https://github.com/jazzband/geojson")
12434 (synopsis "Python bindings and utilities for GeoJSON")
12435 (description
12436 "This package provides Python bindings and utilities for
12437@uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
12438structures.")
12439 (license license:bsd-3)))
12440
12441(define-public wfetch
12442 (let ((commit "e1cfa37814aebc9eb56ce994ebe877b6a6f9a715")
12443 (revision "1"))
12444 (package
12445 (name "wfetch")
12446 (version (git-version "0.1-pre" revision commit))
12447 (home-page "https://github.com/Gcat101/Wfetch")
12448 (source
12449 (origin
12450 (method git-fetch)
12451 (uri (git-reference (url home-page)
12452 (commit commit)))
12453 (file-name (git-file-name name version))
12454 (sha256
12455 (base32 "1dmr85plx8zr6s14ym3r32g6crwxghkval5a24ah90ijx4dbn5q5"))))
12456 (build-system python-build-system)
12457 (arguments
12458 `(#:use-setuptools? #f ; no setup.py
12459 #:tests? #f ; no test suite
12460 #:phases
12461 (modify-phases %standard-phases
12462 (delete 'build)
12463 (replace 'install
12464 (lambda* (#:key outputs #:allow-other-keys)
12465 (let* ((out (assoc-ref outputs "out"))
12466 (bin (string-append out "/bin"))
12467 (share (string-append out "/share")))
12468 (mkdir-p share)
12469 (substitute* "wfetch/wfetch.py"
12470 (("os.sep, 'opt', 'wfetch'") (string-append "'" share "'")))
12471 (install-file "wfetch/wfetch.py" bin)
12472 (copy-recursively "wfetch/icons" share)))))))
12473 (inputs (list python-pyowm python-fire python-termcolor python-requests))
12474 (synopsis "Command-line tool to display weather info")
12475 (description
12476 "This package provides a tool similar to Neofetch/pfetch, but for
12477weather: it can display the weather condition, temperature, humidity, etc.
12478
12479To use it, you must first run:
12480
12481@example
12482export WEATHER_CLI_API=@var{your OpenWeatherMap API key}
12483@end example\n")
12484 (license license:gpl3+))))
12485
12486(define-public python-get-version
12487 (package
12488 (name "python-get-version")
12489 (version "2.1")
12490 (source
12491 (origin
12492 (method url-fetch)
12493 (uri (pypi-uri "get_version" version))
12494 (sha256
12495 (base32
12496 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
12497 (build-system python-build-system)
12498 (propagated-inputs
12499 (list python-pygments
12500 python-pytest
12501 python-pytest-black
12502 python-pytest-cov
12503 python-setuptools
12504 python-testpath))
12505 (home-page "https://github.com/flying-sheep/get_version")
12506 (synopsis "Version helper in the spirit of versioneer")
12507 (description
12508 "This package provides a version helper that lets you automatically use
12509the latest @code{vX.X.X} Git tag as the version in your Python package. It
12510also supports getting the version from Python source distributions or, once
12511your package is installed, via @code{pkg_resources} (part of
12512@code{setuptools}).")
12513 (license license:gpl3+)))
12514
12515(define-public python-filetype
12516 (package
12517 (name "python-filetype")
12518 (version "1.0.8")
12519 (source
12520 (origin
12521 (method url-fetch)
12522 (uri (pypi-uri "filetype" version))
12523 (sha256
12524 (base32 "05mkinkcn36v1cnb5hzay3zxmv7jmmflckxxp08rgzbkkf3i9pvp"))))
12525 (build-system python-build-system)
12526 (arguments
12527 `(#:phases
12528 (modify-phases %standard-phases
12529 (replace 'check
12530 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
12531 (when tests?
12532 (add-installed-pythonpath inputs outputs)
12533 (invoke "python" "-m" "pytest" "-k"
12534 (string-append
12535 ;; Both tests fail with FileNotFoundError.
12536 "not test_infer_zip_from_disk"
12537 " and not test_infer_tar_from_disk"))))))))
12538 (native-inputs
12539 (list python-pytest python-pytest-benchmark))
12540 (home-page "https://github.com/h2non/filetype.py")
12541 (synopsis "Infer file type and MIME type of any file/buffer")
12542 (description "@code{filetype} is a small and dependency free Python
12543package to infer file type and MIME type checking the magic numbers
12544signature of a file or buffer.")
12545 (license license:expat)))
12546
12547(define-public python-cachelib
12548 (package
12549 (name "python-cachelib")
12550 (version "0.4.1")
12551 (source
12552 (origin
12553 (method url-fetch)
12554 (uri (pypi-uri "cachelib" version))
12555 (sha256
12556 (base32 "0p4chkvbvffcllsny5rpzmsq2vyr24ql3kzif4ha0fxp3fp7vqk8"))))
12557 (build-system python-build-system)
12558 (arguments
12559 `(#:phases
12560 (modify-phases %standard-phases
12561 (replace 'check
12562 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
12563 (when tests?
12564 (add-installed-pythonpath inputs outputs)
12565 (invoke "pytest")))))))
12566 (native-inputs
12567 (list python-pytest python-pytest-xprocess))
12568 (home-page "https://github.com/pallets/cachelib")
12569 (synopsis "Collection of cache libraries")
12570 (description "Cachelib is a library extracted from @code{werkzeug} which
12571provides a collection of cache libraries in the same API interface.")
12572 (license license:bsd-3)))
12573
12574(define-public python-pylru
12575 (package
12576 (name "python-pylru")
12577 (version "1.2.0")
12578 (source
12579 (origin
12580 (method url-fetch)
12581 (uri (pypi-uri "pylru" version))
12582 (sha256
12583 (base32 "15yj46307sw703vjfkgnr04dqvaicmfcj0hc6yrciildp55r6bs9"))))
12584 (build-system python-build-system)
12585 (arguments
12586 `(#:phases
12587 (modify-phases %standard-phases
12588 (replace 'check
12589 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
12590 (when tests?
12591 (add-installed-pythonpath inputs outputs)
12592 (invoke "python" "test.py")))))))
12593 (home-page "https://github.com/jlhutch/pylru")
12594 (synopsis "Least recently used (LRU) cache implementation")
12595 (description
12596 "Pylru implements a true LRU cache along with several support classes.
12597Pylru provides a cache class with a simple dict interface. It also provides
12598classes to wrap any object that has a dict interface with a cache. Both
12599write-through and write-back semantics are supported. Pylru also provides
12600classes to wrap functions in a similar way, including a function decorator.")
12601 (license license:gpl2+)))
12602
12603(define-public python-legacy-api-wrap
12604 (package
12605 (name "python-legacy-api-wrap")
12606 (version "1.2")
12607 (source
12608 (origin
12609 (method url-fetch)
12610 (uri (pypi-uri "legacy-api-wrap" version))
12611 (sha256
12612 (base32
12613 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
12614 (build-system python-build-system)
12615 (propagated-inputs
12616 (list python-get-version python-pytest python-pytest-black
12617 python-pytest-cov python-setuptools))
12618 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
12619 (synopsis "Legacy API wrapper")
12620 (description "This module defines a decorator to wrap legacy APIs. The
12621primary use case is APIs defined before keyword-only parameters existed.")
12622 (license license:gpl3+)))
12623
12624(define-public python-langdetect
12625 (package
12626 (name "python-langdetect")
12627 (version "1.0.9")
12628 (source
12629 (origin
12630 (method url-fetch)
12631 (uri (pypi-uri "langdetect" version))
12632 (sha256
12633 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
12634 (build-system python-build-system)
12635 (propagated-inputs
12636 (list python-six))
12637 (home-page "https://github.com/Mimino666/langdetect")
12638 (synopsis "Language detection library")
12639 (description
12640 "This library is a port of Nakatani Shuyo's language-detection library
12641(version from 03/03/2014) to Python.")
12642 (license license:expat)))
12643
12644(define-public python-pyasn1
12645 (package
12646 (name "python-pyasn1")
12647 (version "0.4.8")
12648 (source
12649 (origin
12650 (method url-fetch)
12651 (uri (pypi-uri "pyasn1" version))
12652 (sha256
12653 (base32
12654 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
12655 (build-system python-build-system)
12656 (home-page "http://pyasn1.sourceforge.net/")
12657 (synopsis "ASN.1 types and codecs")
12658 (description
12659 "This is an implementation of ASN.1 types and codecs in Python. It is
12660suitable for a wide range of protocols based on the ASN.1 specification.")
12661 (license license:bsd-2)))
12662
12663(define-public python-pyasn1-modules
12664 (package
12665 (name "python-pyasn1-modules")
12666 (version "0.2.8")
12667 (source
12668 (origin
12669 (method url-fetch)
12670 (uri (pypi-uri "pyasn1-modules" version))
12671 (sha256
12672 (base32
12673 "0pp6dcagd8c2c9qx3lahc1rdwlnmm0y0siqr5icjq2r32b3q8pwh"))))
12674 (build-system python-build-system)
12675 (propagated-inputs
12676 (list python-pyasn1))
12677 (home-page "https://sourceforge.net/projects/pyasn1/")
12678 (synopsis "ASN.1 codec implementations")
12679 (description
12680 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
12681implementations of ASN.1-based codecs and protocols.")
12682 (license license:bsd-3)))
12683
12684(define-public python-ipaddress
12685 (package
12686 (name "python-ipaddress")
12687 (version "1.0.23")
12688 (source (origin
12689 (method url-fetch)
12690 (uri (pypi-uri "ipaddress" version))
12691 (sha256
12692 (base32
12693 "1qp743h30s04m3cg3yk3fycad930jv17q7dsslj4mfw0jlvf1y5p"))))
12694 (build-system python-build-system)
12695 (home-page "https://github.com/phihag/ipaddress")
12696 (synopsis "IP address manipulation library")
12697 (description
12698 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
12699 in Python. This library is used to create, poke at, and manipulate IPv4 and
12700 IPv6 addresses and networks.")
12701 (license license:psfl)))
12702
12703(define-public python-asn1tools
12704 (package
12705 (name "python-asn1tools")
12706 (version "0.158.0")
12707 (source
12708 (origin
12709 (method url-fetch)
12710 (uri (pypi-uri "asn1tools" version))
12711 (sha256
12712 (base32 "1k88a1azmyvp2ab6qcf2i40dig5abhyn7cmlyhmwwh8kr3syvma0"))))
12713 (build-system python-build-system)
12714 (propagated-inputs
12715 (list python-bitstruct python-diskcache python-prompt-toolkit
12716 python-pyparsing))
12717 (home-page "https://github.com/eerimoq/asn1tools")
12718 (synopsis "ASN.1 parsing, encoding and decoding")
12719 (description "This package provides ASN.1 parsing, encoding and decoding
12720for Python, including constraints checking. It supports several
12721codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
12722for OER and UPER.")
12723 (license license:expat)))
12724
12725(define-public python-idna
12726 (package
12727 (name "python-idna")
12728 (version "3.3")
12729 (source
12730 (origin
12731 (method url-fetch)
12732 (uri (pypi-uri "idna" version))
12733 (sha256
12734 (base32
12735 "0v8f6qjfi5i7qc5icsbv2pi24qy6k6m8wjqjvdf2sxjvlpq3yr4x"))))
12736 (build-system python-build-system)
12737 (home-page "https://github.com/kjd/idna")
12738 (synopsis "Internationalized domain names in applications")
12739 (description
12740 "This is a library to support the Internationalised Domain Names in
12741Applications (IDNA) protocol as specified in RFC 5891. This version of the
12742protocol is often referred to as “IDNA2008” and can produce different results
12743from the earlier standard from 2003. The library is also intended to act as a
12744suitable drop-in replacement for the “encodings.idna” module that comes with
12745the Python standard library but currently only supports the older 2003
12746specification.")
12747 (license license:bsd-4)))
12748
12749(define-public python-libsass
12750 (package
12751 (name "python-libsass")
12752 (version "0.20.1")
12753 (source
12754 (origin
12755 ;; PyPI tarball is missing some test files.
12756 (method git-fetch)
12757 (uri (git-reference
12758 (url "https://github.com/sass/libsass-python")
12759 (commit version)))
12760 (file-name (git-file-name name version))
12761 (sha256
12762 (base32 "1r0kgl7i6nnhgjl44sjw57k08gh2qr7l8slqih550dyxbf1akbxh"))))
12763 (build-system python-build-system)
12764 (arguments
12765 '(#:phases
12766 (modify-phases %standard-phases
12767 ;; Use Guix package of libsass instead of compiling from a checkout.
12768 (add-before 'build 'set-libsass
12769 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
12770 (replace 'check
12771 (lambda* (#:key tests? #:allow-other-keys)
12772 (when tests?
12773 (invoke "pytest" "sasstests.py"))))
12774 (add-after 'install 'delete-test
12775 (lambda* (#:key inputs outputs #:allow-other-keys)
12776 ;; Delete sasstests.py because it attempts to open a file
12777 ;; that is not installed when loaded, which breaks the sanity
12778 ;; check.
12779 (delete-file (string-append
12780 (assoc-ref outputs "out")
12781 "/lib/python"
12782 (python-version
12783 (dirname (dirname
12784 (search-input-file inputs "bin/python"))))
12785 "/site-packages/sasstests.py")))))))
12786 (native-inputs
12787 (list python-pytest python-werkzeug))
12788 (inputs
12789 (list libsass))
12790 (propagated-inputs
12791 (list python-six))
12792 (home-page "https://sass.github.io/libsass-python/")
12793 (synopsis "Straightforward binding of libsass for Python")
12794 (description
12795 "This package provides a simple Python extension module @code{sass} which
12796is binding LibSass.")
12797 (license license:expat)))
12798
12799(define-public python-idna-ssl
12800 (package
12801 (name "python-idna-ssl")
12802 (version "1.0.1")
12803 (source
12804 (origin
12805 (method url-fetch)
12806 (uri (pypi-uri "idna-ssl" version))
12807 (sha256
12808 (base32
12809 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
12810 (build-system python-build-system)
12811 (arguments
12812 `(#:tests? #f)) ;circular dependency with python-aiohttp
12813 (propagated-inputs (list python-idna))
12814 (home-page "https://github.com/aio-libs/idna-ssl")
12815 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
12816 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
12817domains support.")
12818 (license license:expat)))
12819
12820;;; Variant used to break a cycle with python-pip-run-bootstrap.
12821(define-public python-path-bootstrap
12822 (hidden-package
12823 (package
12824 (name "python-path-bootstrap")
12825 (version "16.4.0")
12826 (source
12827 (origin
12828 (method url-fetch)
12829 (uri (pypi-uri "path" version))
12830 (sha256
12831 (base32 "0lig13gxnfv98v790db1smvsbd3mnj7y8rwyiwhfi6xiqibygwms"))))
12832 (build-system pyproject-build-system)
12833 (arguments
12834 (list #:tests? #f))
12835 (native-inputs (list python-setuptools-scm))
12836 (home-page "https://github.com/jaraco/path")
12837 (synopsis "Object-oriented file system path manipulation library")
12838 (description "@code{path} (formerly @code{path.py}) implements path
12839objects as first-class entities, allowing common operations on files to be
12840invoked on those path objects directly.")
12841 (license license:expat))))
12842
12843(define-public python-path
12844 (package/inherit python-path-bootstrap
12845 (name "python-path")
12846 (arguments
12847 (substitute-keyword-arguments
12848 (package-arguments python-path-bootstrap)
12849 ((#:tests? _ #f)
12850 (not (%current-target-system)))
12851 ((#:test-flags flags #~'())
12852 #~(append (list "-k"
12853 (string-append
12854 ;; Do not test the myproject.toml build as it tries
12855 ;; to pull dependencies from the Internet.
12856 "not project "
12857 ;; This tests assumes a root user exists.
12858 "and not test_get_owner"))
12859 #$flags))))
12860 (native-inputs
12861 (modify-inputs (package-native-inputs python-path-bootstrap)
12862 (append python-appdirs
12863 python-packaging
12864 python-pygments
12865 python-pytest
12866 python-pytest-black
12867 python-pytest-checkdocs
12868 python-pytest-cov
12869 python-pytest-enabler
12870 python-pytest-flake8
12871 python-pytest-mypy)))
12872 (properties (alist-delete 'hidden?
12873 (package-properties
12874 python-path-bootstrap)))))
12875
12876(define-public python-pathpy
12877 (deprecated-package "python-pathpy" python-path))
12878
12879(define-public python-pretend
12880 (package
12881 (name "python-pretend")
12882 (version "1.0.9")
12883 (source
12884 (origin
12885 (method url-fetch)
12886 (uri (pypi-uri "pretend" version))
12887 (sha256
12888 (base32
12889 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
12890 (build-system python-build-system)
12891 (home-page "https://github.com/alex/pretend")
12892 (synopsis "Library for stubbing in Python")
12893 (description
12894 "Pretend is a library to make stubbing with Python easier. Stubbing is a
12895technique for writing tests. You may hear the term mixed up with mocks,
12896fakes, or doubles. Basically, a stub is an object that returns pre-canned
12897responses, rather than doing any computation.")
12898 (license license:bsd-3)))
12899
12900;;; Variant used to break a dependency cycle with
12901;;; python-pytest-perf-bootstrap.
12902(define-public python-pip-run-bootstrap
12903 (hidden-package
12904 (package
12905 (name "python-pip-run-bootstrap")
12906 (version "8.8.0")
12907 (source (origin
12908 (method git-fetch)
12909 (uri (git-reference
12910 (url "https://github.com/jaraco/pip-run")
12911 (commit (string-append "v" version))))
12912 (file-name (git-file-name name version))
12913 (sha256
12914 (base32
12915 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
12916 (build-system python-build-system)
12917 (arguments
12918 (list
12919 #:tests? #f
12920 #:phases
12921 #~(modify-phases %standard-phases
12922 (add-before 'build 'pretend-version
12923 ;; The version string is usually derived via setuptools-scm, but
12924 ;; without the git metadata available this fails.
12925 (lambda _
12926 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
12927 (native-inputs (list python-setuptools-scm))
12928 (propagated-inputs (list python-autocommand python-path-bootstrap
12929 python-packaging))
12930 (home-page "https://github.com/jaraco/pip-run")
12931 (synopsis "Dynamic dependency loader for Python")
12932 (description "The @command{pip-run} command provides on-demand temporary
12933package installation for a single interpreter run. It replaces this series of
12934commands:
12935@example
12936$ virtualenv --python pythonX.X --system-site-packages /tmp/env
12937$ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
12938$ /tmp/env/bin/python ...
12939$ rm -rf /tmp/env
12940@end example")
12941 (license license:expat))))
12942
12943(define-public python-pip-run
12944 (package/inherit python-pip-run-bootstrap
12945 (name "python-pip-run")
12946 (arguments
12947 (substitute-keyword-arguments (package-arguments python-pip-run-bootstrap)
12948 ((#:tests? _ #f)
12949 (not (%current-target-system)))
12950 ((#:phases phases #~%standard-phases)
12951 #~(modify-phases #$phases
12952 (replace 'check
12953 (lambda* (#:key tests? #:allow-other-keys)
12954 (when tests?
12955 (invoke "pytest" "-k"
12956 (string-append
12957 ;; Do not test the myproject.toml build as it tries
12958 ;; to pull dependencies from the internet.
12959 "not project "
12960 ;; These tests attempt to install dependencies from
12961 ;; the network and fail.
12962 "and not test_pkg_imported "
12963 "and not test_pkg_loaded_from_alternate_index ")))))))))
12964 (propagated-inputs
12965 (modify-inputs (package-propagated-inputs python-pip-run-bootstrap)
12966 (replace "python-path-bootstrap" python-path)))
12967 (native-inputs
12968 (modify-inputs (package-native-inputs python-pip-run-bootstrap)
12969 (append python-nbformat
12970 python-pygments
12971 python-pytest
12972 python-pytest-black
12973 python-pytest-checkdocs
12974 python-pytest-cov
12975 python-pytest-enabler
12976 python-pytest-flake8
12977 python-pytest-mypy)))
12978 (properties (alist-delete 'hidden? (package-properties
12979 python-pip-run-bootstrap)))))
12980
12981(define-public python-tlsh
12982 (package
12983 (name "python-tlsh")
12984 (version "4.11.2")
12985 (home-page "https://github.com/trendmicro/tlsh")
12986 (source
12987 (origin
12988 (method git-fetch)
12989 (uri (git-reference (url home-page) (commit version)))
12990 (file-name (git-file-name name version))
12991 (sha256
12992 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
12993 (build-system cmake-build-system)
12994 (arguments
12995 (list #:out-of-source? #f
12996 #:phases
12997 #~(modify-phases %standard-phases
12998 (replace 'install
12999 (lambda _
13000 ;; Build and install the Python bindings. The underlying
13001 ;; C++ library is apparently not meant to be installed.
13002 (with-directory-excursion "py_ext"
13003 (and (system* "python" "setup.py" "build")
13004 (system* "python" "setup.py" "install"
13005 (string-append "--prefix=" #$output))))))
13006 ;; Delay tests until the phase above has run.
13007 (delete 'check)
13008 (add-after 'install 'check
13009 (lambda* (#:key tests? #:allow-other-keys)
13010 (substitute* "Testing/python_test.sh"
13011 ;; The script sets up a working PYTHONPATH, but does not
13012 ;; export it for all subsequent test commands. Fix that.
13013 (("^PYTHONPATH=\".*" all)
13014 (string-append all "\nexport PYTHONPATH\n")))
13015 (when tests?
13016 (with-directory-excursion "Testing"
13017 (invoke "./python_test.sh"))))))))
13018 (inputs (list python-wrapper)) ;for the bindings
13019 (synopsis "Fuzzy matching library for Python")
13020 (description
13021 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
13022Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
13023value which can be used for similarity comparisons. Similar objects have
13024similar hash values, which allows for the detection of similar objects by
13025comparing their hash values. The byte stream should have a sufficient amount
13026of complexity; for example, a byte stream of identical bytes will not generate
13027a hash value.")
13028 (license license:asl2.0)))
13029
13030(define-public python-termcolor
13031 (package
13032 (name "python-termcolor")
13033 (version "1.1.0")
13034 (source
13035 (origin
13036 (method url-fetch)
13037 (uri (pypi-uri "termcolor" version))
13038 (sha256
13039 (base32
13040 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
13041 (build-system python-build-system)
13042 (arguments
13043 ;; There are no tests.
13044 `(#:tests? #f))
13045 (home-page "https://pypi.org/project/termcolor/")
13046 (synopsis "ANSII Color formatting for terminal output")
13047 (description
13048 "This package provides ANSII Color formatting for output in terminals.")
13049 (license license:expat)))
13050
13051(define-public python-terminaltables
13052 (package
13053 (name "python-terminaltables")
13054 (version "3.1.0")
13055 (source
13056 (origin
13057 (method url-fetch)
13058 (uri (pypi-uri "terminaltables" version))
13059 (sha256
13060 (base32
13061 "109vhldk6nv1z3hzp4dyqf6rjvlhl0y2k5k7qcm9fcrq5swhxszk"))))
13062 (build-system python-build-system)
13063 (home-page "https://github.com/Robpol86/terminaltables")
13064 (synopsis
13065 "Generate simple tables in terminals from a nested list of strings")
13066 (description
13067 "This package makes it easy to draw tables in terminal/console
13068applications from a list of lists of strings. It supports multi-line rows.")
13069 (license license:expat)))
13070
13071(define-public python-libarchive-c
13072 (package
13073 (name "python-libarchive-c")
13074 (version "2.9")
13075 (source (origin
13076 (method url-fetch)
13077 (uri (pypi-uri "libarchive-c" version))
13078 (sha256
13079 (base32
13080 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
13081 (build-system python-build-system)
13082 (arguments
13083 '(#:phases (modify-phases %standard-phases
13084 (add-before
13085 'build 'reference-libarchive
13086 (lambda* (#:key inputs #:allow-other-keys)
13087 ;; Retain the absolute file name of libarchive.so.
13088 (let ((libarchive (assoc-ref inputs "libarchive")))
13089 (substitute* "libarchive/ffi.py"
13090 (("find_library\\('archive'\\)")
13091 (string-append "'" libarchive
13092 "/lib/libarchive.so'"))))))
13093 (replace 'check
13094 (lambda _ (invoke "pytest" "-vv"))))))
13095 (native-inputs
13096 (list python-mock python-pytest))
13097 (inputs
13098 (list libarchive))
13099 (home-page "https://github.com/Changaco/python-libarchive-c")
13100 (synopsis "Python interface to libarchive")
13101 (description
13102 "This package provides Python bindings to libarchive, a C library to
13103access possibly compressed archives in many different formats. It uses
13104Python's @code{ctypes} foreign function interface (FFI).")
13105 (license license:lgpl2.0+)))
13106
13107(define-public python-file
13108 (package/inherit file
13109 (name "python-file")
13110 (build-system python-build-system)
13111 (arguments
13112 '(#:tests? #f ;no tests
13113 #:configure-flags '("--single-version-externally-managed" "--root=/")
13114 #:phases (modify-phases %standard-phases
13115 (add-before 'build 'change-directory
13116 (lambda _
13117 (chdir "python")
13118 #t))
13119 (add-before 'build 'set-library-file-name
13120 (lambda* (#:key inputs #:allow-other-keys)
13121 (let ((file (assoc-ref inputs "file")))
13122 (substitute* "magic.py"
13123 (("find_library\\('magic'\\)")
13124 (string-append "'" file "/lib/libmagic.so'")))
13125 #t))))))
13126 (inputs `(("file" ,file)))
13127 (native-inputs (if (%current-target-system)
13128 `(("self" ,this-package))
13129 '()))
13130 (synopsis "Python bindings to the libmagic file type guesser")
13131 (description "This package provides Python bindings to the libmagic file
13132type guesser.
13133
13134Note that this module and the @code{python-magic} module both provide a
13135@file{magic.py} file; these two modules, which are different and were
13136developed separately, both serve the same purpose: provide Python bindings for
13137libmagic.")))
13138
13139(define-public python-pydevd
13140 ;; Use the latest commit, which includes cleanups that removes Python 2
13141 ;; syntax that would fail to build.
13142 (let ((revision "0")
13143 (commit "47e298499ef19563bb2ef5941a57046a35ae6868"))
13144 (package
13145 (name "python-pydevd")
13146 (version (git-version "2.8.0" revision commit))
13147 (source
13148 (origin
13149 (method git-fetch)
13150 (uri (git-reference
13151 (url "https://github.com/fabioz/PyDev.Debugger")
13152 (commit commit)))
13153 (modules '((guix build utils)))
13154 (snippet '(begin
13155 ;; Delete pre-built binaries.
13156 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
13157 ;; This source is generated via Cython.
13158 (delete-file "_pydevd_bundle/pydevd_cython.c")))
13159 (file-name (git-file-name name version))
13160 (sha256
13161 (base32
13162 "1yd017dh6xgxrqcyf8kk8jrr0a3zw895yfjih0z5jghyf0rck38q"))))
13163 (build-system python-build-system)
13164 (arguments
13165 (list
13166 #:phases
13167 #~(modify-phases %standard-phases
13168 (add-after 'unpack 'fix-tests
13169 (lambda _
13170 (substitute* "tests_python/test_convert_utilities.py"
13171 ;; Add missing trailing '/'.
13172 (("'\\\\\\\\usr\\\\\\\\bin\\\\\\\\') == '/usr/bin" all)
13173 (string-append all "/")))))
13174 (add-after 'unpack 'patch-command-paths
13175 (lambda* (#:key inputs #:allow-other-keys)
13176 (substitute* "_pydevd_bundle/pydevd_api.py"
13177 (("'kill'")
13178 (format #f "~s" (search-input-file inputs "bin/kill")))
13179 (("'pgrep'")
13180 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
13181 (add-after 'unpack 'generate-sources
13182 (lambda _
13183 (setenv "PYTHONPATH" (getcwd))
13184 (invoke "python" "build_tools/build.py")))
13185 (add-after 'unpack 'adjust-attach-binary-name
13186 (lambda _
13187 (substitute*
13188 '("pydevd_tracing.py"
13189 "pydevd_attach_to_process/add_code_to_python_process.py")
13190 (("def get_(target|python_helper_lib)_filename.*" all)
13191 (format #f "~a return ~s~%" all
13192 (string-append #$output "/lib/attach.so"))))))
13193 (add-after 'unpack 'patch-gdb
13194 (lambda* (#:key inputs #:allow-other-keys)
13195 (substitute*
13196 "pydevd_attach_to_process/add_code_to_python_process.py"
13197 (("'gdb',")
13198 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
13199 (add-after 'build 'build-attach-linux-binary
13200 (lambda _
13201 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
13202 "-fPIC" "-nostartfiles"
13203 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
13204 (replace 'check
13205 (lambda* (#:key tests? #:allow-other-keys)
13206 (when tests?
13207 (setenv "PYDEVD_USE_CYTHON" "YES")
13208 (invoke "pytest" "-vv"
13209 "-n" (number->string (parallel-job-count))
13210 "-k"
13211 (string-append
13212 ;; the GUI event loop requires an X server.
13213 "not test_gui_event_loop_custom "
13214 ;; This test validates that 'pydevd' is not in the
13215 ;; exception message, but it is due to being part
13216 ;; of the build file name present in the message.
13217 "and not test_evaluate_exception_trace "
13218 ;; These fail on systems with YAMA LSM’s ptrace
13219 ;; scope > 0. Upstream issue:
13220 ;; https://github.com/fabioz/PyDev.Debugger/issues/218
13221 "and not test_attach_to_pid")))))
13222 (add-after 'install 'install-attach-binary
13223 (lambda _
13224 (install-file "attach.so"
13225 (string-append #$output "/lib"))))
13226 ;; Some modules aren't designed to be loadable by themselves, such
13227 ;; as 'pydev_app_engine_debug_startup' and fail.
13228 (delete 'sanity-check))))
13229 (native-inputs
13230 (list python-cython
13231 python-numpy
13232 python-psutil
13233 python-pytest
13234 python-pytest-xdist
13235 python-trio
13236 python-untangle))
13237 (inputs (list coreutils gdb procps))
13238 (home-page "https://github.com/fabioz/PyDev.Debugger/")
13239 (synopsis "Python debugger")
13240 (description "PyDev.Debugger is a capable Python debugger used in PyDev
13241and other @acronym{IDEs, Integrated Development Environments}.")
13242 (license license:epl1.0))))
13243
13244(define-public python-debugpy
13245 (package
13246 (name "python-debugpy")
13247 (version "1.6.0")
13248 (source
13249 (origin
13250 (method git-fetch)
13251 (uri (git-reference ;no tests in PyPI archive
13252 (url "https://github.com/microsoft/debugpy")
13253 (commit (string-append "v" version))))
13254 (file-name (git-file-name name version))
13255 (modules '((guix build utils)))
13256 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
13257 ;; attach binary.
13258 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
13259 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
13260 (sha256
13261 (base32
13262 "1dpfzs3p51648i7f3fz8dw5d0vrj39iwn1jhn0226idc02ybyqih"))))
13263 (build-system python-build-system)
13264 (arguments
13265 (list
13266 #:tests? #f ; Fail on systems with YAMA LSM’s ptrace scope > 0.
13267 #:phases
13268 #~(modify-phases %standard-phases
13269 (add-after 'unpack 'patch-sh-in-tests
13270 (lambda _
13271 (substitute* "tests/debugpy/test_run.py"
13272 (("#!/bin/sh")
13273 (string-append "#!" (which "sh"))))))
13274 (add-after 'unpack 'fix-version
13275 ;; Versioneer is useless when there is no git metadata.
13276 (lambda _
13277 (substitute* "setup.py"
13278 (("version=versioneer.get_version\\(),")
13279 (format #f "version=~s," #$version)))))
13280 (add-before 'build 'configure
13281 (lambda _
13282 ;; This adjusts the behavior of debugpy to load pydevd from
13283 ;; Python site packages.
13284 (setenv "DEBUGPY_BUNDLING_DISABLED" "1")))
13285 (replace 'check
13286 (lambda* (#:key tests? #:allow-other-keys)
13287 (when tests?
13288 (invoke "pytest" "-vv"
13289 "-n" (number->string (parallel-job-count))
13290 "-k"
13291 (string-append
13292 ;; These tests cannot be run in parallel because their
13293 ;; test data would not be copied by xdist and lead to
13294 ;; import errors. (see:
13295 ;; https://github.com/microsoft/debugpy/issues/342 and
13296 ;; https://github.com/microsoft/debugpy/issues/880).
13297 "not test_custom_python_args "
13298 "and not test_autokill "))))))))
13299 (native-inputs
13300 ;; See: https://raw.githubusercontent.com/microsoft/debugpy/
13301 ;; main/tests/requirements.txt.
13302 (list python-django
13303 python-gevent
13304 python-flask
13305 python-psutil
13306 python-pytest
13307 python-pytest-cov
13308 python-pytest-timeout
13309 python-pytest-xdist
13310 python-requests))
13311 (propagated-inputs (list python-pydevd))
13312 (home-page "https://aka.ms/debugpy")
13313 (synopsis "Debug Adapter Protocol Python implementation")
13314 (description "An implementation of the Debug Adapter Protocol for
13315Python.")
13316 (license license:expat)))
13317
13318(define-public python-debian
13319 (package
13320 (name "python-debian")
13321 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
13322 (version "0.1.36")
13323 (source
13324 (origin
13325 ;; Use git-fetch, as pypi doesn't include test suite.
13326 (method git-fetch)
13327 (uri (git-reference
13328 (url home-page)
13329 (commit version)))
13330 (file-name (git-file-name name version))
13331 (sha256
13332 (base32
13333 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
13334 (build-system python-build-system)
13335 (arguments
13336 `(#:phases (modify-phases %standard-phases
13337 (add-after 'unpack 'set-version
13338 ;; for reproducible builds, otherwise python-debian
13339 ;; generates a _version.py including the date
13340 (lambda _
13341 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
13342 (substitute* "lib/debian/_version.py"
13343 (("__CHANGELOG_VERSION__") ,version))))
13344 (add-after 'unpack 'remove-debian-specific-tests
13345 ;; python-apt, apt and dpkg are not yet available in guix,
13346 ;; and these tests heavily depend on them.
13347 (lambda _
13348 (delete-file "lib/debian/tests/test_deb822.py")
13349 (delete-file "lib/debian/tests/test_debfile.py")
13350 #t)))))
13351 (propagated-inputs
13352 (list python-six python-chardet))
13353 (synopsis "Debian package related modules")
13354 (description
13355 ;; XXX: Use @enumerate instead of @itemize to work around
13356 ;; <http://bugs.gnu.org/21772>.
13357 "This package provides Python modules that abstract many formats of
13358Debian-related files, such as:
13359
13360@enumerate
13361@item Debtags information;
13362@item @file{debian/changelog} files;
13363@item packages files, pdiffs;
13364@item control files of single or multiple RFC822-style paragraphs---e.g.
13365 @file{debian/control}, @file{.changes}, @file{.dsc};
13366@item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
13367 contained files and meta-information.
13368@end enumerate\n")
13369
13370 ;; Modules are either GPLv2+ or GPLv3+.
13371 (license license:gpl3+)))
13372
13373(define-public python-json-spec
13374 (package
13375 (name "python-json-spec")
13376 (version "0.10.1")
13377 (source
13378 (origin
13379 (method url-fetch)
13380 (uri (pypi-uri "json-spec" version))
13381 (sha256
13382 (base32
13383 "06dpbsq61ja9r89wpa2pzdii47qh3xri9ajdrgn1awfl102znchb"))))
13384 (build-system python-build-system)
13385 (propagated-inputs
13386 (list python-pathlib python-six))
13387 (native-inputs
13388 (list python-pytest))
13389 (home-page "http://py.errorist.io/json-spec")
13390 (synopsis
13391 "JSON Schema, JSON Pointer and JSON Reference for Python")
13392 (description
13393 "This Python library implements several JSON specs, like JSON Schema,
13394JSON Reference and JSON Pointer.")
13395 (license license:bsd-3)))
13396
13397(define-public python-fastbencode
13398 (package
13399 (name "python-fastbencode")
13400 (version "0.0.7")
13401 (source
13402 (origin
13403 (method url-fetch)
13404 (uri (pypi-uri "fastbencode" version))
13405 (modules '((guix build utils)))
13406 ;; Delete pre-generated Cython C files.
13407 (snippet '(for-each delete-file (find-files "." "\\.c$")))
13408 (sha256
13409 (base32 "1r66w3vpmvfmssshjpgqaj2m14c8p94nymr96mwn61idajz9mg5n"))))
13410 (build-system python-build-system)
13411 (native-inputs (list python-cython))
13412 (home-page "https://github.com/breezy-team/fastbencode")
13413 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
13414 (description
13415 "The fastbencode Python package implements the bencode serialization
13416format for storing and transmitting loosely structured data, originally used
13417by BitTorrent.
13418
13419The format can encode four different types of values: byte strings, integers,
13420lists, and dictionaries (associative arrays). It's simple and unaffected by
13421endianness,
13422
13423This package includes both a pure-Python version and an optional C extension
13424based on Cython. Both provide the same functionality, but the C version has
13425significantly better performance.")
13426 (license (list license:expat ; _bencode_py.py
13427 license:gpl2+)))) ; __init__.py
13428
13429(define-public python-fastjsonschema
13430 (package
13431 (name "python-fastjsonschema")
13432 (version "2.15.1")
13433 (source
13434 (origin
13435 (method url-fetch)
13436 (uri (pypi-uri "fastjsonschema" version))
13437 (sha256
13438 (base32 "1ln2j60jzyn6p8i8ljygfgrji58hc23452g7nllkcjdk4p93c7v7"))))
13439 (build-system python-build-system)
13440 (arguments
13441 `(#:tests? #f ; Fail with a strange backtrace ending in importlib.
13442 #:phases
13443 (modify-phases %standard-phases
13444 (replace 'check
13445 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
13446 (when tests?
13447 (invoke "pytest" "-vv" "-m" "not benchmark")))))))
13448 (native-inputs
13449 (list python-colorama
13450 python-json-spec
13451 python-jsonschema
13452 python-pylint
13453 python-pytest
13454 python-pytest-benchmark
13455 python-pytest-cache
13456 python-validictory))
13457 (home-page
13458 "https://github.com/horejsek/python-fastjsonschema")
13459 (synopsis
13460 "Fast Python implementation of JSON schema")
13461 (description
13462 "This library implements validation of JSON documents by JSON schema for
13463drafts 04, 06 and 07.")
13464 (license license:bsd-3)))
13465
13466(define-public python-nbformat
13467 (package
13468 (name "python-nbformat")
13469 (version "5.3.0")
13470 ;; The PyPi release tarball lacks some test cases and test data.
13471 (source (origin
13472 (method git-fetch)
13473 (uri (git-reference
13474 (url "https://github.com/jupyter/nbformat")
13475 (commit version)))
13476 (sha256
13477 (base32
13478 "114c5c6cvpxhxj8zrw74351gcfzyzjh1jq3py4xf8wk9rahfay9z"))
13479 (file-name (git-file-name name version))))
13480 (build-system python-build-system)
13481 (arguments
13482 `(#:phases
13483 (modify-phases %standard-phases
13484 (replace 'check
13485 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
13486 (when tests?
13487 (invoke "pytest" "-vv")))))))
13488 (propagated-inputs
13489 (list python-fastjsonschema python-jsonschema python-jupyter-core
13490 python-traitlets))
13491 (native-inputs
13492 (list python-pytest
13493 python-testpath))
13494 (home-page "https://jupyter.org")
13495 (synopsis "Jupyter Notebook format")
13496 (description "This package provides the reference implementation of the
13497Jupyter Notebook format and Python APIs for working with notebooks.")
13498 (license license:bsd-3)))
13499
13500(define-public python-nb-clean
13501 (package
13502 (name "python-nb-clean")
13503 (version "2.1.0")
13504 (source
13505 (origin
13506 (method url-fetch)
13507 (uri (pypi-uri "nb-clean" version))
13508 (sha256
13509 (base32 "01qvk9n7rx15dhc23m8bj9bw5wdyxh6y18c5fm8hllmrd3ndsx14"))))
13510 (build-system python-build-system)
13511 (propagated-inputs (list python-nbformat))
13512 (home-page "https://github.com/srstevenson/nb-clean")
13513 (synopsis "Clean Jupyter notebooks for versioning")
13514 (description "This package cleans Jupyter notebooks of cell execution
13515counts, metadata, outputs, and empty cells, preparing them for committing to
13516version control. It provides a Git filter to automatically clean notebooks
13517before they're staged, and can also be used with other version control
13518systems, as a command line tool, and as a Python library.")
13519 (license license:isc)))
13520
13521(define-public python-bleach
13522 (package
13523 (name "python-bleach")
13524 (version "5.0.0")
13525 (source
13526 (origin
13527 (method url-fetch)
13528 (uri (pypi-uri "bleach" version))
13529 (sha256
13530 (base32 "0rc5avysbsl3w3i2qvb6522263zhwlvf50w0ifs8776w9c2wrmn6"))))
13531 (build-system python-build-system)
13532 (arguments
13533 '(#:phases (modify-phases %standard-phases
13534 (replace 'check
13535 (lambda* (#:key tests? #:allow-other-keys)
13536 (when tests? (invoke "pytest" "-vv")))))))
13537 (propagated-inputs (list python-tinycss2 python-webencodings))
13538 (native-inputs (list python-pytest))
13539 (home-page "https://github.com/mozilla/bleach")
13540 (synopsis "Whitelist-based HTML-sanitizing tool")
13541 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
13542 (license license:asl2.0)))
13543
13544(define-public python-entrypoints
13545 (package
13546 (name "python-entrypoints")
13547 (version "0.3")
13548 (source
13549 (origin
13550 (method url-fetch)
13551 (uri (pypi-uri "entrypoints" version))
13552 (sha256
13553 (base32
13554 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
13555 (build-system python-build-system)
13556 ;; The package does not come with a setup.py file, so we have to generate
13557 ;; one ourselves.
13558 (arguments
13559 `(#:tests? #f
13560 #:phases
13561 (modify-phases %standard-phases
13562 (add-after 'unpack 'create-setup.py
13563 (lambda _
13564 (call-with-output-file "setup.py"
13565 (lambda (port)
13566 (format port "\
13567from setuptools import setup
13568setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
13569" ,version))))))))
13570 (home-page "https://github.com/takluyver/entrypoints")
13571 (synopsis "Discover and load entry points from installed Python packages")
13572 (description "Entry points are a way for Python packages to advertise
13573objects with some common interface. The most common examples are
13574@code{console_scripts} entry points, which define shell commands by
13575identifying a Python function to run. The @code{entrypoints} module contains
13576functions to find and load entry points.")
13577 (license license:expat)))
13578
13579(define-public python-epc
13580 (package
13581 (name "python-epc")
13582 (version "0.0.5")
13583 (source
13584 (origin
13585 (method url-fetch)
13586 (uri (pypi-uri "epc" version))
13587 (sha256
13588 (base32
13589 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
13590 (build-system python-build-system)
13591 (propagated-inputs
13592 (list python-sexpdata))
13593 (native-inputs
13594 (list python-nose))
13595 (home-page "https://github.com/tkf/python-epc")
13596 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
13597 (description
13598 "Python-EPC can call elisp functions from Python and Python functions
13599from elisp.")
13600 (license license:gpl3)))
13601
13602(define-public python-forex-python
13603 (package
13604 (name "python-forex-python")
13605 (version "1.5")
13606 (source
13607 (origin
13608 (method url-fetch)
13609 (uri (pypi-uri "forex-python" version))
13610 (sha256
13611 (base32 "1ma8cl1i2dh8aa99pifnlilyy4d1gd1s07fj0yd17wcbpsh532cj"))))
13612 (build-system python-build-system)
13613 (arguments
13614 ;; Tests are not included in the PyPI tarball. Also, the tests in the
13615 ;; repository require online data.
13616 `(#:tests? #f))
13617 (propagated-inputs
13618 (list python-requests python-simplejson))
13619 (home-page "https://github.com/MicroPyramid/forex-python")
13620 (synopsis "Foreign exchange rates and currency conversion")
13621 (description
13622 "@code{python-forex-python} can be used to manipulate foreign
13623exchange rates and to operate currency conversions.
13624
13625Features:
13626@itemize
13627@item List all currency rates.
13628@item BitCoin price for all currencies.
13629@item Converting amount to BitCoins.
13630@item Get historical rates for any day since 1999.
13631@item Conversion rate for one currency(ex; USD to INR).
13632@item Convert amount from one currency to other.('USD 10$' to INR).
13633@item Currency symbols.
13634@item Currency names.
13635@end itemize")
13636 (license license:expat)))
13637
13638(define-public python-simpleeval
13639 (package
13640 (name "python-simpleeval")
13641 (version "0.9.12")
13642 (source
13643 (origin
13644 (method url-fetch)
13645 (uri (pypi-uri "simpleeval" version))
13646 (sha256
13647 (base32 "0diysdzvx865yy2rjfah75ha2qfxaxz7r108kp7j2kkd903ya2ry"))))
13648 (build-system python-build-system)
13649 (home-page "https://github.com/danthedeckie/simpleeval")
13650 (synopsis "Simple, safe single expression evaluator library")
13651 (description
13652 "This package provides a quick single file library for easily adding
13653evaluatable expressions into python projects. Say you want to allow a user
13654to set an alarm volume, which could depend on the time of day, alarm level,
13655how many previous alarms had gone off, and if there is music playing at the
13656time.")
13657 (license license:expat)))
13658
13659(define-public python-nbconvert
13660 (package
13661 (name "python-nbconvert")
13662 (version "6.5.0")
13663 (source
13664 (origin
13665 (method url-fetch)
13666 (uri (pypi-uri "nbconvert" version))
13667 (sha256
13668 (base32
13669 "17g9xq4za7vvzml6l6d8zrzknhxsvgx02hymmsw9d1dygbi4cgi2"))))
13670 (build-system python-build-system)
13671 (arguments
13672 (list
13673 #:phases
13674 #~(modify-phases %standard-phases
13675 (add-after 'unpack 'fix-paths
13676 (lambda* (#:key inputs #:allow-other-keys)
13677 ;; Use pandoc binary from input.
13678 (substitute* "nbconvert/utils/pandoc.py"
13679 (("'pandoc'")
13680 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
13681 ;; Same for LaTeX.
13682 (substitute* "nbconvert/exporters/pdf.py"
13683 (("\"xelatex\"")
13684 (format #f "~s" (search-input-file inputs "bin/xelatex")))
13685 (("\"bibtex\"")
13686 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
13687 ;; Likewise for Inkscape.
13688 (substitute* "nbconvert/preprocessors/svg2pdf.py"
13689 (("inkscape_path = which\\(\"inkscape\")")
13690 (format #f "inkscape_path = ~s"
13691 (search-input-file inputs "bin/inkscape"))))))
13692 (replace 'check
13693 (lambda* (#:key tests? #:allow-other-keys)
13694 (when tests?
13695 ;; Tests depend on templates installed to output.
13696 (setenv "JUPYTER_PATH"
13697 (string-append #$output "/share/jupyter:"
13698 (getenv "JUPYTER_PATH")))
13699 ;; Step outside of the source directory to avoid having both
13700 ;; the installed package *and* the package from the source on
13701 ;; Python's path.
13702 (with-directory-excursion "/tmp"
13703 (invoke "pytest" "--pyargs" "nbconvert"
13704 "-vv" "-n" (number->string (parallel-job-count))
13705 "-k"
13706 (string-append
13707 ;; These tests require pyppeteer, not yet
13708 ;; available in Guix.
13709 "not test_webpdf_with_chromium "
13710 "and not test_webpdf.py "
13711 ;; These tests require ipywidgets, which would
13712 ;; introduce a dependency cycle.
13713 "and not test_execute_widgets_from_nbconvert "
13714 "and not test_execute_multiple_notebooks ")))))))))
13715 (inputs
13716 (list inkscape/stable pandoc))
13717 (native-inputs
13718 (list python-ipykernel
13719 ;; Adding ipywidgets would create a cycle.
13720 ;;python-ipywidgets
13721 ;;python-pyppeteer ;TODO: package me
13722 python-pytest
13723 python-pytest-xdist))
13724 (propagated-inputs
13725 (list python-beautifulsoup4
13726 python-bleach
13727 python-defusedxml
13728 python-entrypoints
13729 python-jinja2
13730 python-jupyter-core
13731 python-mistune
13732 python-nbclient
13733 python-nbformat
13734 python-pandocfilters
13735 python-pygments
13736 python-jupyterlab-pygments
13737 python-testpath
13738 python-traitlets
13739 ;; Required, even if [serve] is not used.
13740 python-tornado-6
13741 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
13742 texlive-adjustbox
13743 texlive-booktabs
13744 texlive-caption
13745 texlive-enumitem
13746 texlive-fontspec
13747 texlive-generic-iftex
13748 texlive-grffile
13749 texlive-hyperref
13750 texlive-latex-fancyvrb
13751 texlive-latex-float
13752 texlive-latex-geometry
13753 texlive-latex-jknapltx
13754 texlive-latex-ms
13755 texlive-latex-parskip
13756 texlive-latex-trimspaces
13757 texlive-latex-upquote
13758 texlive-stringenc
13759 texlive-tcolorbox
13760 texlive-titling
13761 texlive-tools
13762 texlive-ulem
13763 texlive-unicode-math
13764 texlive-xcolor
13765 (texlive-updmap.cfg (list texlive-amsfonts
13766 texlive-amsmath
13767 texlive-eurosym
13768 texlive-fonts-rsfs
13769 texlive-jknappen
13770 texlive-latex-ucs
13771 texlive-lm
13772 texlive-lm-math
13773 texlive-mathpazo
13774 texlive-oberdiek
13775 texlive-zapfding))))
13776 (home-page "https://jupyter.org")
13777 (synopsis "Converting Jupyter Notebooks")
13778 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
13779notebooks to various other formats via Jinja templates. It allows you to
13780convert an @code{.ipynb} notebook file into various static formats including:
13781
13782@enumerate
13783@item HTML
13784@item LaTeX
13785@item PDF
13786@item Reveal JS
13787@item Markdown (md)
13788@item ReStructured Text (rst)
13789@item executable script
13790@end enumerate\n")
13791 (license license:bsd-3)))
13792
13793(define-public python-notebook
13794 (package
13795 (name "python-notebook")
13796 (version "6.4.10")
13797 (source (origin
13798 (method url-fetch)
13799 (uri (pypi-uri "notebook" version))
13800 (sha256
13801 (base32
13802 "03p976xq1l9xf4djwk0snmywd0zck3i6gjngxsl874i8qrmsf214"))))
13803 (build-system python-build-system)
13804 (arguments
13805 `(#:phases
13806 (modify-phases %standard-phases
13807 (add-after 'unpack 'use-our-home-for-tests
13808 (lambda _
13809 ;; The 'get_patch_env' function in this file reads:
13810 ;; 'HOME': cls.home_dir
13811 ;; but for some reason, that definition of HOME is not what the
13812 ;; GLib/GIO trash mechanism honors, which would cause test
13813 ;; failures. Instead, set 'HOME' here to an existing directory
13814 ;; and let the tests honor it.
13815 (substitute* "notebook/tests/launchnotebook.py"
13816 (("'HOME': .*," all)
13817 (string-append "# " all "\n")))
13818 (setenv "HOME" (getcwd))))
13819 (replace 'check
13820 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
13821 ;; These tests require a browser.
13822 (delete-file-recursively "notebook/tests/selenium")
13823 (when tests?
13824 ;; Interferes with test expectations.
13825 (unsetenv "JUPYTER_CONFIG_PATH")
13826 ;; Some tests do not expect all files to be installed in the
13827 ;; same directory, but JUPYTER_PATH contains multiple entries.
13828 (unsetenv "JUPYTER_PATH")
13829 (invoke "pytest" "-vv"
13830 ;; TODO: This tests fails because nbconvert does not
13831 ;; list "python" as a format.
13832 "-k" "not test_list_formats")))))))
13833 (propagated-inputs
13834 (list python-argon2-cffi
13835 python-ipykernel
13836 python-ipython-genutils
13837 python-jinja2
13838 python-jupyter-client
13839 python-jupyter-core
13840 python-nest-asyncio
13841 python-nbconvert
13842 python-nbformat
13843 python-prometheus-client
13844 python-pyzmq
13845 python-send2trash
13846 python-terminado
13847 python-tornado-6
13848 python-traitlets))
13849 (native-inputs
13850 (list python-coverage
13851 python-nbval
13852 python-pytest
13853 python-pytest-cov
13854 python-requests
13855 python-requests-unixsocket))
13856 (home-page "https://jupyter.org/")
13857 (synopsis "Web-based notebook environment for interactive computing")
13858 (description
13859 "The Jupyter HTML notebook is a web-based notebook environment for
13860interactive computing.")
13861 (license license:bsd-3)))
13862
13863(define-public python-widgetsnbextension
13864 (package
13865 (name "python-widgetsnbextension")
13866 (version "3.5.1")
13867 (source
13868 (origin
13869 (method url-fetch)
13870 (uri (pypi-uri "widgetsnbextension" version))
13871 (sha256
13872 (base32
13873 "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
13874 (build-system python-build-system)
13875 (propagated-inputs
13876 (list python-notebook))
13877 (home-page "https://ipython.org")
13878 (synopsis "IPython HTML widgets for Jupyter")
13879 (description "This package provides interactive HTML widgets for Jupyter
13880notebooks.")
13881 (license license:bsd-3)))
13882
13883(define-public python-ipywidgets
13884 (package
13885 (name "python-ipywidgets")
13886 (version "7.6.3")
13887 (source
13888 (origin
13889 (method url-fetch)
13890 (uri (pypi-uri "ipywidgets" version))
13891 (sha256
13892 (base32
13893 "1w217j8i53x14l7b05fk300k222zs9vkcjaa1rbrw3sk43k466lz"))))
13894 (build-system python-build-system)
13895 (propagated-inputs
13896 (list python-ipykernel
13897 python-ipython
13898 python-jupyterlab-widgets
13899 python-nbformat
13900 python-traitlets
13901 python-widgetsnbextension))
13902 (native-inputs
13903 (list python-mock python-pytest python-pytest-cov))
13904 (home-page "https://ipython.org")
13905 (synopsis "IPython HTML widgets for Jupyter")
13906 (description "Ipywidgets are interactive HTML widgets for Jupyter
13907notebooks and the IPython kernel. Notebooks come alive when interactive
13908widgets are used. Users gain control of their data and can visualize changes
13909in the data.")
13910 (license license:bsd-3)))
13911
13912(define-public python-jupyter-console
13913 (package
13914 (name "python-jupyter-console")
13915 (version "6.4.0")
13916 (source
13917 (origin
13918 (method url-fetch)
13919 (uri (pypi-uri "jupyter_console" version))
13920 (sha256
13921 (base32
13922 "1iqrxhd8hvlyf8cqbc731ssnwm61wrycnbiczy5wsfahd3hlh8i4"))))
13923 (build-system python-build-system)
13924 (propagated-inputs
13925 (list python-ipykernel python-jupyter-client python-prompt-toolkit
13926 python-pygments))
13927 (native-inputs
13928 (list python-nose python-pytest))
13929 (home-page "https://jupyter.org")
13930 (synopsis "Jupyter terminal console")
13931 (description "This package provides a terminal-based console frontend for
13932Jupyter kernels. It also allows for console-based interaction with non-Python
13933Jupyter kernels such as IJulia and IRKernel.")
13934 (license license:bsd-3)))
13935
13936;; The python-ipython and python-jupyter-console require each other. To get
13937;; the functionality in both packages working, strip down the
13938;; python-jupyter-console package when using it as an input to python-ipython.
13939(define python-jupyter-console-minimal
13940 (package/inherit python-jupyter-console
13941 (name "python-jupyter-console-minimal")
13942 (arguments
13943 (substitute-keyword-arguments
13944 (package-arguments python-jupyter-console)
13945 ((#:phases phases)
13946 `(modify-phases ,phases
13947 (add-after 'install 'delete-bin
13948 (lambda* (#:key outputs #:allow-other-keys)
13949 ;; Delete the bin files, to avoid conflicts in profiles
13950 ;; where python-ipython and python-jupyter-console are
13951 ;; both present.
13952 (delete-file-recursively
13953 (string-append
13954 (assoc-ref outputs "out") "/bin"))))))))
13955 ;; Remove the python-ipython propagated input, to avoid the cycle
13956 (propagated-inputs
13957 (modify-inputs (package-propagated-inputs python-jupyter-console)
13958 (delete "python-ipython")))))
13959
13960(define-public python-qtconsole
13961 (package
13962 (name "python-qtconsole")
13963 (version "5.3.0")
13964 (source
13965 (origin
13966 (method url-fetch)
13967 (uri (pypi-uri "qtconsole" version))
13968 (sha256
13969 (base32 "09anp8g7vqi8z8wyi2lv21a2frd2dyhyrzvcrk2anijyqzyj0dcf"))))
13970 (build-system python-build-system)
13971 (arguments
13972 `(#:phases
13973 (modify-phases %standard-phases
13974 (add-before 'check 'pre-check
13975 (lambda _
13976 (setenv "QT_QPA_PLATFORM" "offscreen")
13977 (setenv "HOME" "/tmp")
13978 ;; FIXME: skip a failing test.
13979 (substitute* "qtconsole/tests/test_jupyter_widget.py"
13980 (("def test_other_output") "def _test_other_output")))))))
13981 (propagated-inputs
13982 (list python-ipykernel python-ipython-genutils python-jupyter-client
13983 python-jupyter-core python-pygments python-pyqt-without-qtwebkit
13984 python-pyzmq python-qtpy python-traitlets))
13985 (native-inputs
13986 (list python-flaky python-pytest python-pytest-qt))
13987 (home-page "https://jupyter.org")
13988 (synopsis "Jupyter Qt console")
13989 (description "This package provides a Qt-based console for Jupyter with
13990support for rich media output.")
13991 (license license:bsd-3)))
13992
13993(define-public python-jsbeautifier
13994 (package
13995 (name "python-jsbeautifier")
13996 (version "1.10.2")
13997 (home-page "https://github.com/beautify-web/js-beautify")
13998 (source (origin
13999 (method git-fetch)
14000 (uri (git-reference
14001 (url home-page)
14002 (commit (string-append "v" version))))
14003 (file-name (git-file-name name version))
14004 (sha256
14005 (base32
14006 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
14007 (build-system python-build-system)
14008 (arguments
14009 `(#:phases (modify-phases %standard-phases
14010 (add-after 'unpack 'chdir
14011 (lambda _
14012 ;; The upstream Git repository contains all the code,
14013 ;; but this package only builds the python code.
14014 (chdir "python")
14015 #t))
14016 (add-after 'unpack 'patch-python-six-requirements
14017 (lambda _
14018 (substitute* "python/setup.py"
14019 (("six>=1.12.0")
14020 "six>=1.11.0"))
14021 #t)))))
14022 (propagated-inputs
14023 (list python-editorconfig python-six))
14024 (native-inputs
14025 (list python-pytest))
14026 (synopsis "JavaScript unobfuscator and beautifier")
14027 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
14028popular online obfuscators.")
14029 (license license:expat)))
14030
14031(define-public jupyter
14032 (package
14033 (name "jupyter")
14034 (version "1.0.0")
14035 (source
14036 (origin
14037 (method url-fetch)
14038 (uri (pypi-uri "jupyter" version))
14039 (sha256
14040 (base32
14041 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
14042 (build-system python-build-system)
14043 (arguments '(#:tests? #f)) ; there are none.
14044 (propagated-inputs
14045 (list python-ipykernel
14046 python-ipywidgets
14047 python-jupyter-console
14048 python-nbconvert
14049 python-notebook
14050 python-qtconsole))
14051 (home-page "https://jupyter.org")
14052 (synopsis "Web application for interactive documents")
14053 (description
14054 "The Jupyter Notebook is a web application that allows you to create and
14055share documents that contain live code, equations, visualizations and
14056explanatory text. Uses include: data cleaning and transformation, numerical
14057simulation, statistical modeling, machine learning and much more.")
14058 (license license:bsd-3)))
14059
14060(define-public python-chardet
14061 (package
14062 (name "python-chardet")
14063 (version "5.0.0")
14064 (source
14065 (origin
14066 (method url-fetch)
14067 (uri (pypi-uri "chardet" version))
14068 (sha256
14069 (base32
14070 "1amqmz8731ly6f9rkbk09w4jqgmmgyxykd1bawhgrdbqzlmxys03"))))
14071 (native-inputs
14072 (list python-pytest))
14073 (build-system python-build-system)
14074 (arguments
14075 (list #:phases
14076 #~(modify-phases %standard-phases
14077 (replace 'check
14078 (lambda _
14079 (invoke "pytest" "-vv" "-k"
14080 ;; Disable test that fails sporadically:
14081 ;; https://github.com/chardet/chardet/issues/256
14082 "not test_detect_all_and_detect_one_should_agree")))
14083 ;; This package provides a 'chardetect' executable that only
14084 ;; depends on Python, so customize the wrap phase to avoid
14085 ;; adding pytest and friends in order to save size.
14086 ;; (See also <https://bugs.gnu.org/25235>.)
14087 (replace 'wrap
14088 (lambda* (#:key inputs outputs #:allow-other-keys)
14089 (let* ((sitedir (site-packages inputs outputs))
14090 (python (dirname (dirname
14091 (search-input-file
14092 inputs "bin/python"))))
14093 (python-sitedir
14094 (string-append python "/lib/python"
14095 (python-version python)
14096 "/site-packages")))
14097 (wrap-program (string-append #$output "/bin/chardetect")
14098 `("GUIX_PYTHONPATH" ":" suffix
14099 ,(list sitedir python-sitedir)))))))))
14100 (home-page "https://github.com/chardet/chardet")
14101 (synopsis "Universal encoding detector for Python 2 and 3")
14102 (description
14103 "This package provides @code{chardet}, a Python module that can
14104automatically detect a wide range of file encodings.")
14105 (license license:lgpl2.1+)))
14106
14107(define-public python-charset-normalizer
14108 (package
14109 (name "python-charset-normalizer")
14110 (version "2.1.0")
14111 (source
14112 (origin
14113 (method url-fetch)
14114 (uri (pypi-uri "charset-normalizer" version))
14115 (sha256
14116 (base32 "04zlajr77f6c7ai59l46as1idi0jjgbvj72lh4v5wfpz2s070pjp"))))
14117 (build-system python-build-system)
14118 (arguments
14119 (list #:phases
14120 #~(modify-phases %standard-phases
14121 ;; This package provides a 'normalizer' executable that only
14122 ;; depends on Python, so customize the wrap phase to avoid
14123 ;; adding pytest and friends in order to save size.
14124 ;; (See also <https://bugs.gnu.org/25235>.)
14125 (replace 'wrap
14126 (lambda* (#:key inputs outputs #:allow-other-keys)
14127 (let* ((sitedir (site-packages inputs outputs))
14128 (python (dirname (dirname
14129 (search-input-file
14130 inputs "bin/python"))))
14131 (python-sitedir
14132 (string-append python "/lib/python"
14133 (python-version python)
14134 "/site-packages")))
14135 (wrap-program (string-append #$output "/bin/normalizer")
14136 `("GUIX_PYTHONPATH" ":" suffix
14137 ,(list sitedir python-sitedir)))))))))
14138 (native-inputs
14139 (list python-pytest))
14140 (home-page "https://github.com/ousret/charset_normalizer")
14141 (synopsis "Universal Charset Detector, alternative to Chardet")
14142 (description "This library helps you read text from an unknown charset
14143encoding. Motivated by @code{chardet}, it tries to resolve the issue by
14144taking a new approach. All IANA character set names for which the Python core
14145library provides codecs are supported.")
14146 (license license:expat)))
14147
14148(define-public python-docopt
14149 (package
14150 (name "python-docopt")
14151 (version "0.6.2")
14152 (source
14153 (origin
14154 (method git-fetch)
14155 ;; The release on PyPI does not include tests.
14156 (uri (git-reference
14157 (url "https://github.com/docopt/docopt")
14158 (commit version)))
14159 (file-name (git-file-name name version))
14160 (sha256
14161 (base32
14162 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
14163 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
14164 (build-system python-build-system)
14165 (native-inputs
14166 (list python-pytest))
14167 (arguments
14168 `(#:phases
14169 (modify-phases %standard-phases
14170 (replace 'check
14171 (lambda* (#:key tests? #:allow-other-keys)
14172 (when tests?
14173 (invoke "py.test")))))))
14174 (home-page "http://docopt.org")
14175 (synopsis "Command-line interface description language for Python")
14176 (description "This library allows the user to define a command-line
14177interface from a program's help message rather than specifying it
14178programmatically with command-line parsers like @code{getopt} and
14179@code{argparse}.")
14180 (license license:expat)))
14181
14182(define-public python-pythonanywhere
14183 (package
14184 (name "python-pythonanywhere")
14185 (version "0.9.10")
14186 (source
14187 (origin
14188 (method git-fetch)
14189 (uri (git-reference
14190 (url "https://github.com/pythonanywhere/helper_scripts")
14191 (commit (string-append "v" version))))
14192 (file-name (git-file-name name version))
14193 (sha256
14194 (base32
14195 "0vzzc1g8pl7cb9yvm3n1j5zlzxf0jd423rzspc2kvpb8yhvydklx"))))
14196 (build-system python-build-system)
14197 (arguments
14198 `(#:phases
14199 (modify-phases %standard-phases
14200 (add-before 'check 'change-home
14201 (lambda _
14202 (setenv "HOME" "/tmp")))
14203 (replace 'check
14204 (lambda* (#:key tests? #:allow-other-keys)
14205 (when tests?
14206 ;; Exclude tests marked as slowtest that assume running
14207 ;; inside Git repository on system with virtualenvwrapper
14208 ;; installed.
14209 (invoke "pytest" "-m" "not slowtest")))))))
14210 (native-inputs
14211 (list python-pytest
14212 python-psutil
14213 python-responses
14214 python-pytest-mock))
14215 (propagated-inputs
14216 (list python-dateutil
14217 python-docopt
14218 python-packaging
14219 python-requests
14220 python-schema
14221 python-tabulate
14222 python-typer))
14223 (home-page "https://github.com/pythonanywhere/helper_scripts/")
14224 (synopsis "PythonAnywhere helper tools for users")
14225 (description "PythonAnywhere provides a command-line interface and an
14226application programming interface that allows managing Web apps and scheduled
14227tasks. It includes single-command deployment for the Django Girls tutorial.")
14228 (license license:expat)))
14229
14230(define-public python-pythondialog
14231 (package
14232 (name "python-pythondialog")
14233 (version "3.4.0")
14234 (source (origin
14235 (method url-fetch)
14236 (uri (pypi-uri "pythondialog" version))
14237 (sha256
14238 (base32
14239 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
14240 (build-system python-build-system)
14241 (arguments
14242 `(#:phases (modify-phases %standard-phases
14243 (add-after 'unpack 'patch-path
14244 (lambda* (#:key inputs #:allow-other-keys)
14245 (let* ((dialog (assoc-ref inputs "dialog")))
14246 (substitute* "dialog.py"
14247 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)") (string-append
14248 "os.getenv(\"PATH\") + \":"
14249 dialog
14250 "/bin\"")))
14251 #t))))
14252 #:tests? #f))
14253 (propagated-inputs (list dialog))
14254 (home-page "http://pythondialog.sourceforge.net/")
14255 (synopsis "Python interface to the UNIX dialog utility")
14256 (description
14257 "A Python wrapper for the dialog utility. Its purpose is to
14258provide an easy to use, pythonic and comprehensive Python interface to dialog.
14259This allows one to make simple text-mode user interfaces on Unix-like systems")
14260 (license license:lgpl2.1)))
14261
14262(define-public python-configobj
14263 (package
14264 (name "python-configobj")
14265 (version "5.0.6")
14266 (source (origin
14267 (method url-fetch)
14268 (uri (pypi-uri "configobj" version))
14269 (sha256
14270 (base32
14271 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
14272 ;; Patch setup.py so it looks for python-setuptools, which is
14273 ;; required to parse the keyword 'install_requires' in setup.py.
14274 (patches (search-patches "python-configobj-setuptools.patch"))))
14275 (build-system python-build-system)
14276 (propagated-inputs
14277 (list python-six))
14278 (synopsis "Config file reading, writing and validation")
14279 (description "ConfigObj is a simple but powerful config file reader and
14280writer: an ini file round tripper. Its main feature is that it is very easy to
14281use, with a straightforward programmer’s interface and a simple syntax for
14282config files.")
14283 (home-page "https://github.com/DiffSK/configobj")
14284 (license license:bsd-3)))
14285
14286(define-public python-configargparse
14287 (package
14288 (name "python-configargparse")
14289 (version "1.2.3")
14290 (source (origin
14291 (method url-fetch)
14292 (uri (pypi-uri "ConfigArgParse" version))
14293 (sha256
14294 (base32
14295 "1p1pzpf5qpf80bfxsx1mbw9blyhhypjvhl3i60pbmhfmhvlpplgd"))))
14296 (build-system python-build-system)
14297 (native-inputs
14298 (list python-pyyaml))
14299 (arguments
14300 `(#:phases
14301 (modify-phases %standard-phases
14302 (replace 'check
14303 (lambda _
14304 ;; Bypass setuptools-shim because one test relies on "setup.py"
14305 ;; being the first argument passed to the python call.
14306 ;;
14307 ;; NOTE: Many tests do not run because they rely on Python's
14308 ;; built-in test.test_argparse, but we remove the unit tests from
14309 ;; our Python installation.
14310 (invoke "python" "setup.py" "test"))))))
14311 (synopsis "Replacement for argparse")
14312 (description "A drop-in replacement for argparse that allows options to also
14313be set via config files and/or environment variables.")
14314 (home-page "https://github.com/bw2/ConfigArgParse")
14315 (license license:expat)))
14316
14317(define-public python-connection-pool
14318 (package
14319 (name "python-connection-pool")
14320 (version "0.0.3")
14321 (source
14322 (origin
14323 (method url-fetch)
14324 (uri (pypi-uri "connection_pool" version))
14325 (sha256
14326 (base32 "1p6hfkcl4n3hhhcgjbaxn21i7b1yipag6j7dnilir4k5xxx9whmz"))))
14327 (build-system python-build-system)
14328 (home-page "https://github.com/zhouyl/ConnectionPool")
14329 (synopsis "Thread-safe connection pool")
14330 (description "This package provides a library implementing a thread-safe
14331connection pool.")
14332 (license license:expat)))
14333
14334(define-public python-argparse-manpage
14335 (package
14336 (name "python-argparse-manpage")
14337 (version "1.1")
14338 (source
14339 (origin
14340 (method url-fetch)
14341 (uri (pypi-uri "argparse-manpage" version))
14342 (sha256
14343 (base32
14344 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
14345 (build-system python-build-system)
14346 (home-page "https://github.com/praiskup/argparse-manpage")
14347 (synopsis "Build manual page from Python's ArgumentParser object")
14348 (description
14349 "This package provides tools to build manual pages from Python's
14350@code{ArgumentParser} object.")
14351 (license license:asl2.0)))
14352
14353(define-public python-contextlib2
14354 (package
14355 (name "python-contextlib2")
14356 (version "0.6.0.post1")
14357 (source
14358 (origin
14359 (method url-fetch)
14360 (uri (pypi-uri "contextlib2" version))
14361 (sha256
14362 (base32
14363 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
14364 (build-system python-build-system)
14365 (home-page "https://contextlib2.readthedocs.org/")
14366 (synopsis "Tools for decorators and context managers")
14367 (description "This module is primarily a backport of the Python
143683.2 contextlib to earlier Python versions. Like contextlib, it
14369provides utilities for common tasks involving decorators and context
14370managers. It also contains additional features that are not part of
14371the standard library.")
14372 (license license:psfl)))
14373
14374(define-public python-texttable
14375 (package
14376 (name "python-texttable")
14377 (version "1.6.4")
14378 (source
14379 (origin
14380 (method url-fetch)
14381 (uri (pypi-uri "texttable" version))
14382 (sha256
14383 (base32
14384 "1sbn821394rix6xgj3zqk743pj6nqm1qz81zgis2bcpp2ng7pvj2"))))
14385 (build-system python-build-system)
14386 (arguments
14387 `(#:phases
14388 (modify-phases %standard-phases
14389 (replace 'check
14390 (lambda* (#:key tests? #:allow-other-keys)
14391 (when tests? (invoke "pytest" "-vv" "tests.py")))))))
14392 (native-inputs
14393 (list python-pytest))
14394 (home-page "https://github.com/foutaise/texttable/")
14395 (synopsis "Python module for creating simple ASCII tables")
14396 (description "Texttable is a Python module for creating simple ASCII
14397tables.")
14398 (license license:expat)))
14399
14400(define-public python-atomicwrites
14401 (package
14402 (name "python-atomicwrites")
14403 (version "1.4.0")
14404 (source (origin
14405 (method url-fetch)
14406 (uri (pypi-uri "atomicwrites" version))
14407 (sha256
14408 (base32
14409 "0yla2svfhfqrcj8qbyqzx7wi4jy0dwcxvlkg0k3zjd54s5m3jw5f"))))
14410 (build-system python-build-system)
14411 (arguments `(#:tests? #f)) ;avoid circular dependency with pytest
14412 (synopsis "Atomic file writes in Python")
14413 (description "Library for atomic file writes using platform dependent tools
14414for atomic file system operations.")
14415 (home-page "https://github.com/untitaker/python-atomicwrites")
14416 (license license:expat)))
14417
14418(define-public python-qstylizer
14419 (package
14420 (name "python-qstylizer")
14421 (version "0.1.10")
14422 (source
14423 (origin
14424 (method git-fetch)
14425 (uri (git-reference
14426 (url "https://github.com/blambright/qstylizer")
14427 (commit version)))
14428 (file-name (git-file-name name version))
14429 (sha256
14430 (base32 "0zvkn6g1dn51kkw33v8qrlnwlmf5h6sw1ay3bh14ifjr8b9xsjjz"))))
14431 (build-system python-build-system)
14432 (arguments
14433 `(#:test-target "pytest"
14434 #:phases
14435 (modify-phases %standard-phases
14436 (add-before 'build 'set-pbr-version
14437 (lambda _
14438 (setenv "PBR_VERSION" "3.0.1"))))))
14439 (native-inputs
14440 (list python-pbr
14441 python-pytest
14442 python-pytest-catchlog
14443 python-pytest-cov
14444 python-pytest-mock
14445 python-pytest-runner
14446 python-pytest-xdist))
14447 (propagated-inputs
14448 (list python-inflection python-tinycss))
14449 (home-page "https://github.com/blambright/qstylizer")
14450 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
14451 (description "@code{qstylizer} is a Python package designed to help with
14452the construction of PyQt/PySide stylesheets.")
14453 (license license:expat)))
14454
14455(define-public python-click-threading
14456 (package
14457 (name "python-click-threading")
14458 (version "0.5.0")
14459 (source (origin
14460 (method url-fetch)
14461 (uri (pypi-uri "click-threading" version))
14462 (sha256
14463 (base32
14464 "0f9lmxwcq0y9lb8w0whbni7gwy12gbv74h1igh85qn9aq0iydkxd"))))
14465 (build-system python-build-system)
14466 (propagated-inputs
14467 (list python-click))
14468 (synopsis "Utilities for multithreading in Click")
14469 (description "This package provides utilities for multithreading in Click
14470applications.")
14471 (home-page "https://github.com/click-contrib/click-threading")
14472 (license license:expat)))
14473
14474(define-public python-click-log
14475 (package
14476 (name "python-click-log")
14477 (version "0.3.2")
14478 (source (origin
14479 (method url-fetch)
14480 (uri (pypi-uri "click-log" version))
14481 (sha256
14482 (base32
14483 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
14484 (build-system python-build-system)
14485 (propagated-inputs
14486 (list python-click))
14487 (synopsis "Logging for click applications")
14488 (description "This package provides a Python library for logging Click
14489applications.")
14490 (home-page "https://github.com/click-contrib/click-log")
14491 (license license:expat)))
14492
14493(define-public python-click-default-group
14494 (package
14495 (name "python-click-default-group")
14496 (version "1.2.2")
14497 (source (origin
14498 (method url-fetch)
14499 (uri (pypi-uri "click-default-group" version))
14500 (sha256
14501 (base32
14502 "015r78jk8gznfw0dphpwaqcx5mhg5822b55w5xbb6i7sin70wmnr"))))
14503 (build-system python-build-system)
14504 (arguments
14505 `(#:tests? #f)) ; no target
14506 (propagated-inputs
14507 (list python-click))
14508 (synopsis "Extends click.Group")
14509 (description "This package extends click.Group to invoke a command without
14510explicit subcommand name.")
14511 (home-page "https://github.com/click-contrib/click-default-group")
14512 (license license:bsd-3)))
14513
14514(define-public python-structlog
14515 (package
14516 (name "python-structlog")
14517 (version "20.2.0")
14518 (source
14519 (origin
14520 (method url-fetch)
14521 (uri (pypi-uri "structlog" version))
14522 (sha256
14523 (base32
14524 "0x1i21vn3xjfa3j9ijbblia5z0jlzc9aqvpqc26sy16i8yjxyydg"))))
14525 (build-system python-build-system)
14526 (arguments
14527 `(#:phases
14528 (modify-phases %standard-phases
14529 (replace 'check
14530 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
14531 (when tests?
14532 (add-installed-pythonpath inputs outputs)
14533 (invoke "pytest"))
14534 #t)))))
14535 (native-inputs
14536 (list python-coverage
14537 python-freezegun
14538 python-pretend
14539 python-pytest
14540 python-pytest-asyncio
14541 python-simplejson
14542 python-twisted))
14543 (home-page "https://www.structlog.org/")
14544 (synopsis "Structured Logging for Python")
14545 (description "@code{structlog} changes logging in Python by adding structure
14546to your log entries.")
14547 (license (list license:asl2.0 license:expat))))
14548
14549(define-public python-apipkg
14550 (package
14551 (name "python-apipkg")
14552 (version "1.5")
14553 (source (origin
14554 (method url-fetch)
14555 (uri (pypi-uri "apipkg" version))
14556 (sha256
14557 (base32
14558 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
14559 (build-system python-build-system)
14560 (native-inputs
14561 (list python-pytest python-setuptools-scm))
14562 (synopsis "Namespace control and lazy-import mechanism")
14563 (description "With apipkg you can control the exported namespace of a Python
14564package and greatly reduce the number of imports for your users. It is a small
14565pure Python module that works on virtually all Python versions.")
14566 (home-page "https://github.com/pytest-dev/apipkg")
14567 (license license:expat)))
14568
14569(define-public python-execnet
14570 (package
14571 (name "python-execnet")
14572 (version "1.9.0")
14573 (source (origin
14574 (method url-fetch)
14575 (uri (pypi-uri "execnet" version))
14576 (sha256
14577 (base32
14578 "1ia7dvrh0gvzzpi758mx55f9flr16bzdqlmi12swm4ncm4xlyscg"))
14579 (patches (search-patches "python-execnet-read-only-fix.patch"))))
14580 (build-system python-build-system)
14581 (arguments
14582 `(#:phases
14583 (modify-phases %standard-phases
14584 (replace 'check
14585 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
14586 (when tests?
14587 ;; Unset PYTHONDONTWRITEBYTECODE to match the
14588 ;; expectations of a test in
14589 ;; 'testing/test_gateway.py'.
14590 (unsetenv "PYTHONDONTWRITEBYTECODE")
14591
14592 (add-installed-pythonpath inputs outputs)
14593 (invoke "pytest" "-vv")))))))
14594 (native-inputs
14595 (list python-pytest python-setuptools-scm))
14596 (synopsis "Rapid multi-Python deployment")
14597 (description "Execnet provides a share-nothing model with
14598channel-send/receive communication for distributing execution across many
14599Python interpreters across version, platform and network barriers. It has a
14600minimal and fast API targeting the following uses:
14601@enumerate
14602@item distribute tasks to (many) local or remote CPUs
14603@item write and deploy hybrid multi-process applications
14604@item write scripts to administer multiple environments
14605@end enumerate")
14606 (home-page "https://codespeak.net/execnet/")
14607 (license license:expat)))
14608
14609(define-public python-icalendar
14610 (package
14611 (name "python-icalendar")
14612 (version "4.1.0")
14613 (source (origin
14614 (method url-fetch)
14615 (uri (pypi-uri "icalendar" version))
14616 (sha256
14617 (base32
14618 "15dkq42rkqjdi17rpvmd1plnbwn4daby0nk1s1c3xi7w5v0bfj4p"))))
14619 (build-system python-build-system)
14620 (propagated-inputs
14621 (list python-dateutil python-pytz))
14622 (synopsis "Python library for parsing iCalendar files")
14623 (description "The icalendar package is a parser/generator of iCalendar
14624files for use with Python.")
14625 (home-page "https://github.com/collective/icalendar")
14626 (license license:bsd-2)))
14627
14628(define-public python-args
14629 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65") (revision "0"))
14630 (package
14631 (name "python-args")
14632 (version (git-version "0.1.0" revision commit))
14633 (home-page "https://github.com/kennethreitz-archive/args")
14634 (source (origin
14635 (method git-fetch)
14636 (uri (git-reference
14637 (url home-page)
14638 (commit commit)))
14639 (file-name (git-file-name name version))
14640 (sha256
14641 (base32
14642 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
14643 (build-system python-build-system)
14644 (arguments
14645 `(#:phases (modify-phases %standard-phases
14646 (add-after 'unpack 'patch-args.py
14647 (lambda _
14648 (substitute* "args.py"
14649 (("basestring") "str"))))
14650 (replace 'check
14651 (lambda* (#:key tests? #:allow-other-keys)
14652 (when tests?
14653 (invoke "nosetests" "-v")))))))
14654 (native-inputs (list python-nose))
14655 (synopsis "Command-line argument parser")
14656 (description
14657 "This library provides a Python module to parse command-line arguments.")
14658 (license license:bsd-3))))
14659
14660(define-public python-clint
14661 (package
14662 (name "python-clint")
14663 (version "0.5.1")
14664 (source (origin
14665 (method url-fetch)
14666 (uri (pypi-uri "clint" version))
14667 (sha256
14668 (base32
14669 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
14670 (build-system python-build-system)
14671 (arguments
14672 '(#:phases
14673 (modify-phases %standard-phases
14674 (replace 'check
14675 (lambda _ (invoke "py.test" "-v"))))))
14676 (native-inputs
14677 (list python-pytest))
14678 (propagated-inputs
14679 (list python-args))
14680 (home-page "https://github.com/kennethreitz/clint")
14681 (synopsis "Command-line interface tools")
14682 (description
14683 "Clint is a Python module filled with a set of tools for developing
14684command-line applications, including tools for colored and indented
14685output, progress bar display, and pipes.")
14686 (license license:isc)))
14687
14688(define-public python-rply
14689 (package
14690 (name "python-rply")
14691 (version "0.7.8")
14692 (source (origin
14693 (method url-fetch)
14694 (uri (pypi-uri "rply" version))
14695 (sha256
14696 (base32
14697 "1j81nddvnb145x4p81bnfpyai6g26i2dc1633ycsk025bb18m01a"))))
14698 (build-system python-build-system)
14699 (propagated-inputs
14700 (list python-appdirs))
14701 (home-page "https://github.com/alex/rply")
14702 (synopsis "Parser generator for Python")
14703 (description
14704 "This package provides a pure Python based parser generator, that also
14705works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
14706with a new public API, and RPython support.")
14707 (license license:bsd-3)))
14708
14709(define-public python-hy
14710 (package
14711 (name "python-hy")
14712 (version "0.24.0")
14713 (source
14714 (origin
14715 (method git-fetch) ; no tests in PyPI release
14716 (uri (git-reference
14717 (url "https://github.com/hylang/hy")
14718 (commit version)))
14719 (file-name (git-file-name name version))
14720 (sha256
14721 (base32 "1s458ymd9g3s8k2ccc300jr4w66c7q3vhmhs9z3d3a4qg0xdhs9y"))))
14722 (build-system python-build-system)
14723 (arguments
14724 '(#:phases
14725 (modify-phases %standard-phases
14726 (replace 'check
14727 (lambda* (#:key tests? #:allow-other-keys)
14728 (when tests?
14729 (invoke "python" "-m" "pytest" "-k"
14730 (string-append ; skip some failed tests
14731 "not test_sys_executable"
14732 " and not test_circular_macro_require"
14733 " and not test_macro_require"
14734 " and not test_requires_pollutes_core"))))))))
14735 (native-inputs
14736 (list python-pytest-7.1 python-wheel))
14737 (propagated-inputs
14738 (list python-colorama python-funcparserlib))
14739 (home-page "https://docs.hylang.org/en/stable/")
14740 (synopsis "Lisp frontend to Python")
14741 (description
14742 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
14743its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
14744Python at your fingertips, in Lisp form.")
14745 (license license:expat)))
14746
14747(define-public python-hissp
14748 (package
14749 (name "python-hissp")
14750 (version "0.2.0")
14751 (source
14752 (origin
14753 (method url-fetch)
14754 (uri (pypi-uri "hissp" version))
14755 (sha256
14756 (base32
14757 "0yns7f0q699zn2ziagyas2nkndl7mp1hhssv9x9mpl7jxj2p5myw"))))
14758 (build-system python-build-system)
14759 (home-page "https://github.com/gilch/hissp")
14760 (synopsis "It's Python with a Lissp")
14761 (description "Hissp is a modular Lisp implementation that compiles to a
14762functional subset of Python—Syntactic macro metaprogramming with full access
14763to the Python ecosystem.")
14764 (license license:asl2.0)))
14765
14766(define-public python-promise
14767 (package
14768 (name "python-promise")
14769 (version "0.4.2")
14770 (source
14771 (origin
14772 (method url-fetch)
14773 (uri (pypi-uri "promise" version))
14774 (sha256
14775 (base32
14776 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
14777 (build-system python-build-system)
14778 ;; Tests wants python-futures, which is a python2 only program, and
14779 ;; can't be found by python-promise at test time.
14780 (arguments `(#:tests? #f))
14781 (home-page "https://github.com/syrusakbary/promise")
14782 (synopsis "Promises/A+ implementation for Python")
14783 (description
14784 "Promises/A+ implementation for Python")
14785 (license license:expat)))
14786
14787(define-public python-progress
14788 (package
14789 (name "python-progress")
14790 (version "1.6")
14791 (source
14792 (origin
14793 (method url-fetch)
14794 (uri (pypi-uri "progress" version))
14795 (sha256
14796 (base32 "1k9lpb7lqr6mywpnqcz71y6qny54xlgprdp327za2gy0nnc6xj69"))))
14797 (build-system python-build-system)
14798 (home-page "http://github.com/verigak/progress/")
14799 (synopsis "Progress reporting bars for Python")
14800 (description "This Python package provides progress reporting for visual
14801of progress of long running operations. There are multiple choices of
14802progress bars and spinners, with customizable options, such as width, fill
14803character, and suffix.")
14804 (license license:isc)))
14805
14806(define-public python-progressbar2
14807 (package
14808 (name "python-progressbar2")
14809 (version "3.51.3")
14810 (source
14811 (origin
14812 (method url-fetch)
14813 (uri (pypi-uri "progressbar2" version))
14814 (sha256
14815 (base32
14816 "0b2v3mim90rmfvixkaniz2qrs650sk230rzgd5zhcjfldmlqgxpc"))))
14817 (build-system python-build-system)
14818 (propagated-inputs
14819 (list python-six python-utils))
14820 (native-inputs
14821 (list python-flake8
14822 python-freezegun
14823 python-pycodestyle
14824 python-pytest
14825 python-pytest-cache
14826 python-pytest-cov
14827 python-pytest-flakes
14828 python-pytest-pep8
14829 python-sphinx))
14830 (home-page "https://github.com/WoLpH/python-progressbar")
14831 (synopsis "Text progress bar library for Python")
14832 (description
14833 "This package provides a Python progressbar library to provide
14834visual (yet text based) progress to long running operations.")
14835 (license license:bsd-3)))
14836
14837(define-public python-progressbar33
14838 (package
14839 (name "python-progressbar33")
14840 (version "2.4")
14841 (source
14842 (origin
14843 (method url-fetch)
14844 (uri (pypi-uri "progressbar33" version))
14845 (sha256
14846 (base32
14847 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
14848 (build-system python-build-system)
14849 (home-page "https://github.com/germangh/python-progressbar")
14850 (synopsis "Text progress bar library for Python")
14851 (description
14852 "This package provides a text progress bar library for Python. This
14853version only differs from the original @code{progressbar} package in that it
14854uses relative package imports instead of absolute imports, which is necessary
14855for the module to work under Python 3.3.")
14856 ;; Either or both of these licenses may be selected.
14857 (license (list license:lgpl2.1+ license:bsd-3))))
14858
14859(define-public python-colorama
14860 (package
14861 (name "python-colorama")
14862 (version "0.4.4")
14863 (source
14864 (origin
14865 (method url-fetch)
14866 (uri (pypi-uri "colorama" version))
14867 (sha256
14868 (base32 "16w62sm95hmh55rqxn4zwdz0bkh3fqm1qnz9cwi3s510iasb4har"))))
14869 (build-system python-build-system)
14870 (synopsis "Colored terminal text rendering for Python")
14871 (description "Colorama is a Python library for rendering colored terminal
14872text.")
14873 (home-page "https://pypi.org/project/colorama/")
14874 (license license:bsd-3)))
14875
14876;; awscli and botocore do not accept version 0.4.4
14877(define-public python-colorama-for-awscli
14878 (package
14879 (inherit python-colorama)
14880 (version "0.4.3")
14881 (source
14882 (origin
14883 (method url-fetch)
14884 (uri (pypi-uri "colorama" version))
14885 (sha256
14886 (base32 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))))
14887
14888(define-public python-moto
14889 (package
14890 (name "python-moto")
14891 (version "3.1.4")
14892 (source (origin
14893 (method url-fetch)
14894 (uri (pypi-uri "moto" version))
14895 (sha256
14896 (base32 "0dfnad1f9d5ybabs69dzc7x357z1r4jbhrhgw57gyic1qnmcw864"))))
14897 (build-system python-build-system)
14898 (arguments
14899 `(#:phases
14900 (modify-phases %standard-phases
14901 (add-after 'unpack 'patch-hardcoded-executable-names
14902 (lambda* (#:key inputs #:allow-other-keys)
14903 (let ((bash-exec (search-input-file inputs "/bin/sh")))
14904 (substitute* "moto/batch/models.py"
14905 (("/bin/sh") bash-exec))
14906 (substitute* (find-files "tests" "\\.py$")
14907 (("#!/bin/bash") (string-append "#!" bash-exec))))))
14908 (replace 'check
14909 (lambda* (#:key tests? #:allow-other-keys)
14910 (when tests?
14911 (invoke "pytest" "-vv" "-m" "not network" "-k"
14912 (string-append
14913 ;; XXX: This test is timing sensitive and may
14914 ;; fail non-deterministically.
14915 "not test_cancel_pending_job"
14916 ;; These tests require Docker.
14917 " and not test_terminate_job"
14918 " and not test_invoke_function_from_sqs_exception"
14919 " and not test_create_custom_lambda_resource__verify_cfnresponse_failed"
14920 " and not test_lambda_function"
14921
14922 ;; These tests also require the network.
14923 " and not test_put_record_batch_http_destination"
14924 " and not test_put_record_http_destination"
14925 " and not test_dependencies"
14926 " and not test_cancel_running_job"
14927 " and not test_container_overrides"))))))))
14928 (native-inputs
14929 (list python-flask
14930 python-flask-cors
14931 python-freezegun
14932 python-graphql-core
14933 python-pytest
14934 python-sure))
14935 (inputs
14936 (list bash-minimal))
14937 (propagated-inputs
14938 (list python-aws-xray-sdk
14939 python-boto3
14940 python-botocore
14941 python-cfn-lint
14942 python-cryptography
14943 python-dateutil
14944 python-docker
14945 python-importlib-metadata
14946 python-jinja2
14947 python-jose
14948 python-jsondiff
14949 python-markupsafe
14950 python-pytz
14951 python-pyyaml
14952 python-requests
14953 python-responses
14954 python-sshpubkeys
14955 python-werkzeug
14956 python-xmltodict))
14957 (home-page "https://github.com/spulec/moto")
14958 (synopsis "Mock out the boto library")
14959 (description
14960 "@code{moto} is a library designed to easily mock out the
14961@code{boto} library.")
14962 (license license:asl2.0)))
14963
14964(define-public python-rsa
14965 (package
14966 (name "python-rsa")
14967 (version "3.4.2")
14968 (source
14969 (origin
14970 (method url-fetch)
14971 (uri (pypi-uri "rsa" version))
14972 (sha256
14973 (base32
14974 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
14975 (build-system python-build-system)
14976 (propagated-inputs
14977 (list python-pyasn1))
14978 (synopsis "Pure-Python RSA implementation")
14979 (description "Python-RSA is a pure-Python RSA implementation. It supports
14980encryption and decryption, signing and verifying signatures, and key
14981generation according to PKCS#1 version 1.5. It can be used as a Python
14982library as well as on the command line.")
14983 (home-page "https://stuvel.eu/rsa")
14984 (license license:asl2.0)))
14985
14986(define-public python-pluggy
14987 (package
14988 (name "python-pluggy")
14989 (version "0.13.1")
14990 (source
14991 (origin
14992 (method url-fetch)
14993 (uri (pypi-uri "pluggy" version))
14994 (sha256
14995 (base32
14996 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
14997 (build-system python-build-system)
14998 (native-inputs
14999 (list python-setuptools-scm))
15000 (synopsis "Plugin and hook calling mechanism for Python")
15001 (description "Pluggy is an extraction of the plugin manager as used by
15002Pytest but stripped of Pytest specific details.")
15003 (home-page "https://pypi.org/project/pluggy/")
15004 (license license:expat)))
15005
15006(define-public python-plumbum
15007 (package
15008 (name "python-plumbum")
15009 (version "1.7.0")
15010 (source
15011 (origin
15012 (method url-fetch)
15013 (uri (pypi-uri "plumbum" version))
15014 (sha256
15015 (base32 "1kidj821k79dw064rlxh84xamb9h79ychg3pgj81jlvm5hs48xri"))))
15016 (build-system python-build-system)
15017 (arguments
15018 `(#:tests? #f)) ;no tests
15019 (native-inputs
15020 ;; XXX: Not actually used since there are no tests but required for
15021 ;; build.
15022 (list python-pytest))
15023 (home-page "https://plumbum.readthedocs.io")
15024 (synopsis "Python shell combinators library")
15025 (description
15026 "Plumbum is a library of tools for replacing shell scripts with Python
15027code.")
15028 (license license:expat)))
15029
15030(define-public python-deprecation
15031 (package
15032 (name "python-deprecation")
15033 (version "2.1.0")
15034 (source
15035 (origin
15036 (method url-fetch)
15037 (uri (pypi-uri "deprecation" version))
15038 (sha256
15039 (base32
15040 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
15041 (build-system python-build-system)
15042 (propagated-inputs
15043 (list python-packaging))
15044 (native-inputs
15045 (list python-unittest2))
15046 (home-page "https://deprecation.readthedocs.io/")
15047 (synopsis "Python library to handle automated deprecations")
15048 (description
15049 "This is a library that enables automated deprecations. It offers the
15050@code{deprecated()} decorator to wrap functions, providing proper warnings
15051both in documentation and via Python’s warnings system, as well as the
15052@code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
15053that deprecated code is eventually removed.")
15054 (license license:asl2.0)))
15055
15056(define-public python-jmespath
15057 (package
15058 (name "python-jmespath")
15059 (version "1.0.0")
15060 (source
15061 (origin
15062 (method url-fetch)
15063 (uri (pypi-uri "jmespath" version))
15064 (sha256
15065 (base32
15066 "0pmzfi230zfgiq2rz896kbb9f7mp0lnrjdl6x1npvxfixn0f5454"))))
15067 (build-system python-build-system)
15068 (native-inputs
15069 (list python-nose))
15070 (synopsis "JSON Matching Expressions")
15071 (description "JMESPath (pronounced “james path”) is a Python library that
15072allows one to declaratively specify how to extract elements from a JSON
15073document.")
15074 (home-page "https://github.com/jmespath/jmespath.py")
15075 (license license:expat)))
15076
15077(define-public python-symengine
15078 (package
15079 (name "python-symengine")
15080 (version "0.9.2")
15081 (source
15082 (origin
15083 (method url-fetch)
15084 (uri (pypi-uri "symengine" version))
15085 (sha256
15086 (base32 "0qjgdbnb10kfk7jdhxnzfl8cpaps81k8vap7gm7q9ym3pgslazhg"))))
15087 (build-system python-build-system)
15088 (arguments
15089 (list
15090 #:phases
15091 #~(modify-phases %standard-phases
15092 (replace 'check
15093 (lambda* (#:key tests? #:allow-other-keys)
15094 (if tests?
15095 ;; Run tests against installed package.
15096 (with-directory-excursion "/tmp"
15097 (invoke "nosetests" "-v" "symengine.tests"))
15098 (format #t "test suite not run~%")))))))
15099 (native-inputs
15100 (list cmake python-cython python-nose))
15101 (inputs
15102 (list symengine))
15103 (home-page "https://github.com/symengine/symengine.py")
15104 (synopsis "Python library providing wrappers to SymEngine")
15105 (description
15106 "This library provides a Python wrapper to SymEngine, a fast C++ symbolic
15107manipulation library.")
15108 (license license:expat)))
15109
15110(define-public python-uncertainties
15111 (package
15112 (name "python-uncertainties")
15113 (version "3.1.5")
15114 (source
15115 (origin
15116 (method url-fetch)
15117 (uri (pypi-uri "uncertainties" version))
15118 (sha256
15119 (base32
15120 "00z9xl40czmqk0vmxjvmjvwb41r893l4dad7nj1nh6blw3kw28li"))))
15121 (build-system python-build-system)
15122 ;; While there are test files, there is no "tests" directory, so the tests
15123 ;; fail.
15124 (arguments '(#:tests? #false))
15125 (propagated-inputs
15126 (list python-future))
15127 (native-inputs
15128 (list python-nose python-numpy))
15129 (home-page "https://uncertainties-python-package.readthedocs.io/")
15130 (synopsis "Calculations with uncertainties")
15131 (description
15132 "The uncertainties package transparently handles calculations with
15133numbers with uncertainties. It can also yield the derivatives of any
15134expression.")
15135 (license license:bsd-3)))
15136
15137(define-public python-unicodedata2
15138 (package
15139 (name "python-unicodedata2")
15140 (version "14.0.0")
15141 (source
15142 (origin
15143 (method url-fetch)
15144 (uri (pypi-uri "unicodedata2" version))
15145 (sha256
15146 (base32 "110nnvh02ssp92xbmswy39aa186jrmb7m41x4220wigl8c0dzxs1"))))
15147 (build-system python-build-system)
15148 (home-page "https://github.com/fonttools/unicodedata2")
15149 (synopsis "Python unicodedata backport")
15150 (description "This package corresponds to the latest @code{unicodedata}
15151standard Python module.")
15152 (license license:asl2.0)))
15153
15154(define-public python-asteval
15155 (package
15156 (name "python-asteval")
15157 (version "0.9.23")
15158 (source
15159 (origin
15160 (method url-fetch)
15161 (uri (pypi-uri "asteval" version))
15162 (sha256
15163 (base32
15164 "0f54sd4w1a72ij1bcxs2x7dk9xf8bzclawijf1z18bqx9f96l2gm"))))
15165 (build-system python-build-system)
15166 (native-inputs
15167 (list python-pytest))
15168 (home-page "https://github.com/newville/asteval")
15169 (synopsis "Minimalistic evaluator of Python expressions")
15170 (description
15171 "This package provides a minimalistic evaluator of Python expression
15172using the @code{ast} module")
15173 (license license:expat)))
15174
15175(define-public python-lmfit
15176 (package
15177 (name "python-lmfit")
15178 (version "1.0.2")
15179 (source
15180 (origin
15181 (method url-fetch)
15182 (uri (pypi-uri "lmfit" version))
15183 (sha256
15184 (base32
15185 "0iab33jjb60f8kn0k0cqb0vjp1mdskks2n3kpn97zkw5cvjhq2b7"))))
15186 (build-system python-build-system)
15187 (propagated-inputs
15188 (list python-asteval python-numpy python-scipy python-uncertainties))
15189 (native-inputs
15190 (list python-pytest))
15191 (home-page "https://lmfit.github.io/lmfit-py/")
15192 (synopsis "Least-Squares minimization with bounds and constraints")
15193 (description
15194 "Lmfit provides a high-level interface to non-linear optimization and
15195curve fitting problems for Python. It builds on and extends many of the
15196optimization methods of @code{scipy.optimize}. Initially inspired by (and
15197named for) extending the Levenberg-Marquardt method from
15198@code{scipy.optimize.leastsq}, lmfit now provides a number of useful
15199enhancements to optimization and data fitting problems.")
15200 (license license:bsd-3)))
15201
15202(define-public python-bokeh
15203 (package
15204 (name "python-bokeh")
15205 (version "2.4.3")
15206 (source (origin
15207 (method url-fetch)
15208 (uri (pypi-uri "bokeh" version))
15209 (sha256
15210 (base32
15211 "00sbhya9vfdv3yi07j6mxwx1x1h9497nhd3smdjrcdxgc48q0czg"))))
15212 (build-system python-build-system)
15213 (arguments
15214 `(#:phases
15215 (modify-phases %standard-phases
15216 (replace 'check
15217 (lambda* (#:key tests? #:allow-other-keys)
15218 (when tests?
15219 ;; These require selenium.
15220 (delete-file "tests/unit/bokeh/io/test_export.py")
15221 (delete-file "tests/unit/bokeh/io/test_webdriver.py")
15222 (delete-file "tests/unit/bokeh/embed/test_standalone.py")
15223
15224 ;; Doesn't find ManagedServerLoop fixture
15225 (delete-file "tests/unit/bokeh/test_client_server.py")
15226
15227 ;; This fails because of the Guix wrapper around pytest
15228 (delete-file "tests/unit/bokeh/io/test_util__io.py")
15229
15230 ;; Fixture ipython not found.
15231 (delete-file "tests/unit/bokeh/application/handlers/test_notebook__handlers.py")
15232 (delete-file "tests/unit/bokeh/command/subcommands/test_info.py")
15233
15234 ;; pd fixture not found.
15235 (delete-file "tests/unit/bokeh/models/test_mappers.py")
15236 (delete-file "tests/unit/bokeh/models/util/test_structure.py")
15237 (delete-file "tests/unit/bokeh/plotting/test__plot.py")
15238 (delete-file "tests/unit/bokeh/plotting/test__graph.py")
15239 (delete-file "tests/unit/bokeh/plotting/test_figure.py")
15240 (delete-file "tests/unit/bokeh/core/test_json_encoder.py")
15241 (delete-file "tests/unit/bokeh/core/property/test_bases.py")
15242 (delete-file "tests/unit/bokeh/core/property/test_container.py")
15243 (delete-file "tests/unit/bokeh/core/property/test_dataspec.py")
15244 (delete-file "tests/unit/bokeh/core/property/test_datetime.py")
15245 (delete-file "tests/unit/bokeh/core/property/test_pandas.py")
15246
15247 ;; nx fixture not found.
15248 (delete-file "tests/unit/bokeh/plotting/test_graph.py")
15249 (delete-file "tests/unit/bokeh/models/test_graphs.py")
15250 (delete-file "tests/unit/bokeh/io/test_showing.py")
15251 (delete-file "tests/unit/bokeh/document/test_events__document.py")
15252
15253 ;; These tests need external sample data
15254 (delete-file-recursively "tests/unit/bokeh/sampledata/")
15255
15256 ;; Attempts to install something via npm.
15257 (delete-file "tests/unit/bokeh/test_ext.py")
15258
15259 ;; More failures due to set up problems.
15260 (delete-file "tests/unit/bokeh/server/test_server__server.py")
15261 (delete-file "tests/unit/bokeh/server/test_tornado__server.py")
15262 (delete-file "tests/unit/bokeh/util/test_serialization.py")
15263 (delete-file "tests/unit/bokeh/util/test_hex.py")
15264 (delete-file "tests/unit/bokeh/models/test_sources.py")
15265 (delete-file "tests/unit/bokeh/embed/test_bundle.py")
15266
15267 (invoke "pytest" "-v")))))))
15268 (propagated-inputs
15269 (list node-lts
15270 python-jinja2
15271 python-numpy
15272 python-packaging
15273 python-pillow
15274 python-pyyaml
15275 python-tornado
15276 python-typing-extensions))
15277 (native-inputs
15278 (list python-beautifulsoup4
15279 python-dateutil
15280 python-flaky
15281 python-nbconvert
15282 python-pandas
15283 python-pytest
15284 python-pytz
15285 python-requests))
15286 (home-page "https://github.com/bokeh/bokeh")
15287 (synopsis "Interactive plots and applications in the browser from Python")
15288 (description
15289 "This package provides tools for interactive plots and applications in the
15290browser from Python.")
15291 (license license:bsd-3)))
15292
15293(define-public python-boto
15294 (package
15295 (name "python-boto")
15296 (version "2.49.0")
15297 (source (origin
15298 (method url-fetch)
15299 (uri (pypi-uri "boto" version))
15300 (sha256
15301 (base32
15302 "0njy09c4wjx7ipxhwi6vv404nflyiasl78vwwxxpclnql903n3ga"))))
15303 (build-system python-build-system)
15304 (arguments
15305 ;; XXX: This package is unmaintained and has problems with newer versions
15306 ;; of Python 3 as well as test libraries. 'python-moto' still uses a
15307 ;; subset of this library, so keep it around for now, but disable tests.
15308 '(#:tests? #f))
15309 (propagated-inputs
15310 (list python-paramiko python-requests))
15311 (home-page "https://github.com/boto/boto")
15312 (synopsis "Python interfaces for Amazon Web Services")
15313 (description
15314 "This package provides various facilities for interacting with Amazon
15315Web Services through Python.
15316
15317This software is unmaintained, and new projects should use @code{boto3} instead.")
15318 (license license:expat)))
15319
15320(define-public python-botocore
15321 ;; Note: When updating botocore, also make sure that boto3 and awscli
15322 ;; are compatible.
15323 (package
15324 (name "python-botocore")
15325 (version "1.24.35")
15326 (source
15327 (origin
15328 (method url-fetch)
15329 (uri (pypi-uri "botocore" version))
15330 (sha256
15331 (base32
15332 "0rv8mvhq5s373zdjs2yb45hzvqcqdh2lp2rbb21jjc8ciwnl5d9n"))))
15333 (build-system python-build-system)
15334 (arguments
15335 ;; FIXME: Many tests are failing.
15336 '(#:tests? #f))
15337 (propagated-inputs
15338 (list python-dateutil python-jmespath python-urllib3))
15339 (home-page "https://github.com/boto/botocore")
15340 (synopsis "Low-level interface to AWS")
15341 (description "Botocore is a Python library that provides a low-level
15342interface to the Amazon Web Services (AWS) API.")
15343 (license license:asl2.0)))
15344
15345(define-public python-boto3
15346 (package
15347 (name "python-boto3")
15348 (version "1.21.35")
15349 (home-page "https://github.com/boto/boto3")
15350 (source (origin
15351 (method git-fetch)
15352 (uri (git-reference (url home-page) (commit version)))
15353 (file-name (git-file-name name version))
15354 (sha256
15355 (base32
15356 "1kdyf238rpfldnpzs0rdh3nhjn6hwfym4faskyhzlgzkf1smmbg1"))))
15357 (arguments
15358 `(#:phases
15359 (modify-phases %standard-phases
15360 (add-after 'unpack 'delete-network-tests
15361 ;; Deleting integration tests because they are trying to connect to AWS.
15362 (lambda _
15363 (delete-file-recursively "tests/integration")))
15364 (replace 'check
15365 (lambda* (#:key tests? #:allow-other-keys)
15366 (when tests?
15367 (invoke "pytest" "-v")))))))
15368 (build-system python-build-system)
15369 (native-inputs
15370 (list python-nose python-mock python-pytest))
15371 (propagated-inputs
15372 (list python-botocore python-jmespath python-s3transfer))
15373 (synopsis "AWS SDK for Python")
15374 (description
15375 "Boto3 is a Python library for writing programs that interact with
15376@acronym{AWS,Amazon Web Services}.")
15377 (license license:asl2.0)))
15378
15379(define-public python-pyfiglet
15380 (package
15381 (name "python-pyfiglet")
15382 (version "0.8.post1")
15383 (source
15384 (origin
15385 (method url-fetch)
15386 (uri (pypi-uri "pyfiglet" version))
15387 (sha256
15388 (base32
15389 "0f9n2076ga2ccsg174k2d7n0z4d44ml96yzc72s6g4nhalbk5hn6"))))
15390 (build-system python-build-system)
15391 (home-page "https://github.com/pwaller/pyfiglet")
15392 (synopsis "Draw ASCII art big letters in Python")
15393 (description "This module lets you draw large letter from ordinary characters
15394in pure Python.")
15395 (license license:expat)))
15396
15397(define-public python-xdo
15398 (package
15399 (name "python-xdo")
15400 (version "0.3")
15401 (source (origin
15402 (method url-fetch)
15403 (uri (string-append
15404 "http://http.debian.net/debian/pool/main/p/python-xdo/"
15405 "python-xdo_" version ".orig.tar.gz"))
15406 (sha256
15407 (base32
15408 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
15409 (build-system python-build-system)
15410 (arguments
15411 '(#:phases
15412 (modify-phases %standard-phases
15413 (add-before 'install 'patch-libxdo-path
15414 ;; Hardcode the path of dynamically loaded libxdo library.
15415 (lambda* (#:key inputs #:allow-other-keys)
15416 (let ((libxdo (string-append
15417 (assoc-ref inputs "xdotool")
15418 "/lib/libxdo.so"))
15419 (libc (string-append
15420 (assoc-ref inputs "libc")
15421 "/lib/libc.so.6")))
15422 (substitute* "xdo/_xdo.py"
15423 (("find_library\\(\"xdo\"\\)")
15424 (simple-format #f "\"~a\"" libxdo))
15425 (("ctypes\\.util\\.find_library\\('libc'\\)")
15426 (simple-format #f "\"~a\"" libc)))
15427 #t))))
15428 #:tests? #f)) ; no tests provided
15429 (propagated-inputs
15430 (list python-six))
15431 (inputs
15432 `(("xdotool" ,xdotool)
15433 ("libX11" ,libx11)))
15434 (home-page "https://tracker.debian.org/pkg/python-xdo")
15435 (synopsis "Python library for simulating X11 keyboard/mouse input")
15436 (description "Provides bindings to libxdo for manipulating X11 via simulated
15437input. (Note that this is mostly a legacy library; you may wish to look at
15438python-xdo for newer bindings.)")
15439 (license license:bsd-3)))
15440
15441(define-public python-xdoctest
15442 (package
15443 (name "python-xdoctest")
15444 (version "1.0.0")
15445 (source
15446 (origin
15447 (method url-fetch)
15448 (uri (pypi-uri "xdoctest" version))
15449 (sha256
15450 (base32 "0bgbmb9nqv95f9gfxqifqff1qaz5fnanjqy4hv7ygrjp2kksgfvy"))))
15451 (build-system python-build-system)
15452 (arguments
15453 (list #:phases
15454 #~(modify-phases %standard-phases
15455 (replace 'check
15456 (lambda* (#:key tests? #:allow-other-keys)
15457 (when tests?
15458 ;; A writable HOME is needed by the
15459 ;; 'import_module_from_path' test.
15460 (setenv "HOME" "/tmp")
15461 (invoke "pytest" "-vv")))))))
15462 (propagated-inputs (list python-six))
15463 (native-inputs (list python-pytest which))
15464 (home-page "https://github.com/Erotemic/xdoctest")
15465 (synopsis "Rewrite of the Python builtin doctest module")
15466 (description "This package provides a rewrite of the builtin doctest
15467module which leverages the Python @acronym{AST, Abstract Syntax Tree} instead
15468of @acronym{REGEXPs, regular expressions}.")
15469 (license license:asl2.0)))
15470
15471(define-public python-mako
15472 (package
15473 (name "python-mako")
15474 (version "1.1.3")
15475 (source
15476 (origin
15477 (method url-fetch)
15478 (uri (pypi-uri "Mako" version))
15479 (sha256
15480 (base32
15481 "09ywrmhr6gdyfx6d5727wwjnz73i6rklqcb4c14m7sqc830wi5c1"))))
15482 (build-system python-build-system)
15483 (arguments
15484 `(#:phases (modify-phases %standard-phases
15485 (replace 'check
15486 (lambda* (#:key tests? #:allow-other-keys)
15487 (if tests?
15488 (invoke "nosetests" "-v")
15489 (format #t "test suite not run~%"))
15490 #t)))))
15491 (propagated-inputs
15492 (list python-markupsafe))
15493 (native-inputs
15494 (list python-mock python-nose))
15495 (home-page "https://www.makotemplates.org/")
15496 (synopsis "Templating language for Python")
15497 (description "Mako is a templating language for Python that compiles
15498templates into Python modules.")
15499 (license license:expat)))
15500
15501(define-public python-waitress
15502 (package
15503 (name "python-waitress")
15504 (version "1.1.0")
15505 (source
15506 (origin
15507 (method url-fetch)
15508 (uri (pypi-uri "waitress" version))
15509 (patches (search-patches "python-waitress-fix-tests.patch"))
15510 (sha256
15511 (base32
15512 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
15513 (build-system python-build-system)
15514 (home-page "https://github.com/Pylons/waitress")
15515 (synopsis "Waitress WSGI server")
15516 (description "Waitress is meant to be a production-quality pure-Python WSGI
15517server with very acceptable performance.")
15518 (license license:zpl2.1)))
15519
15520(define-public python-whichcraft
15521 (package
15522 (name "python-whichcraft")
15523 (version "0.6.1")
15524 (source
15525 (origin
15526 (method url-fetch)
15527 (uri (pypi-uri "whichcraft" version))
15528 (sha256
15529 (base32
15530 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
15531 (build-system python-build-system)
15532 (native-inputs
15533 (list python-pytest))
15534 (home-page "https://github.com/pydanny/whichcraft")
15535 (synopsis "Cross-platform cross-python shutil.which functionality")
15536 (description
15537 "This package provides a shim of the shutil.which function that's
15538designed to work across multiple versions of Python.")
15539 (license license:bsd-3)))
15540
15541(define-public python-cookiecutter
15542 (package
15543 (name "python-cookiecutter")
15544 (version "1.7.3")
15545 (source
15546 (origin
15547 (method url-fetch)
15548 (uri (pypi-uri "cookiecutter" version))
15549 (sha256
15550 (base32 "0mx49whhwcxmvcak27zr7p7ndzkn3w7psfd7fzh3n91fi1r4v6kb"))))
15551 (build-system python-build-system)
15552 (native-inputs
15553 (list python-freezegun python-pytest python-pytest-catchlog
15554 python-pytest-cov python-pytest-mock))
15555 (propagated-inputs
15556 (list python-binaryornot
15557 python-click
15558 python-future
15559 python-jinja2
15560 python-jinja2-time
15561 python-poyo
15562 python-requests
15563 python-slugify
15564 python-text-unidecode
15565 python-whichcraft))
15566 (home-page "https://github.com/cookiecutter/cookiecutter")
15567 (synopsis
15568 "Command-line utility that creates projects from project templates")
15569 (description
15570 "This package provides a command-line utility that creates projects from
15571project templates, e.g. creating a Python package project from a Python package
15572project template.")
15573 (license license:bsd-3)))
15574
15575(define-public python-pyquery
15576 (package
15577 (name "python-pyquery")
15578 (version "1.2.17")
15579 (source
15580 (origin
15581 (method url-fetch)
15582 (uri (pypi-uri "pyquery" version))
15583 (sha256
15584 (base32
15585 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
15586 (build-system python-build-system)
15587 (native-inputs
15588 (list python-webob python-webtest))
15589 (propagated-inputs
15590 (list python-lxml python-cssselect))
15591 (home-page "https://github.com/gawel/pyquery")
15592 (synopsis "Make jQuery-like queries on xml documents")
15593 (description "pyquery allows you to make jQuery queries on xml documents.
15594The API is as much as possible the similar to jQuery. pyquery uses lxml for
15595fast xml and html manipulation.")
15596 (license license:bsd-3)))
15597
15598(define-public python-anyjson
15599 (package
15600 (name "python-anyjson")
15601 (version "0.3.3")
15602 (source
15603 (origin
15604 (method url-fetch)
15605 (uri (pypi-uri "anyjson" version))
15606 (sha256
15607 (base32
15608 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
15609 (build-system python-build-system)
15610 (arguments
15611 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
15612 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
15613 ;; whatever) so this transformation needs to be done before the tests
15614 ;; can be run. Maybe we could add a build step to transform beforehand
15615 ;; but it could be annoying/difficult.
15616 ;; We can enable tests for the Python 2 version, though, and do below.
15617 #:tests? #f))
15618 (home-page "https://bitbucket.org/runeh/anyjson/")
15619 (synopsis
15620 "Wraps best available JSON implementation in a common interface")
15621 (description
15622 "Anyjson loads whichever is the fastest JSON module installed
15623and provides a uniform API regardless of which JSON implementation is used.")
15624 (license license:bsd-3)))
15625
15626(define-public python-amqp
15627 (package
15628 (name "python-amqp")
15629 (version "5.1.1")
15630 (source
15631 (origin
15632 (method url-fetch)
15633 (uri (pypi-uri "amqp" version))
15634 (sha256
15635 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
15636 (build-system python-build-system)
15637 (arguments
15638 (list
15639 #:phases
15640 #~(modify-phases %standard-phases
15641 (replace 'check
15642 (lambda* (#:key tests? #:allow-other-keys)
15643 (when tests?
15644 (invoke "pytest" "-vv"
15645 "-c" "/dev/null" ;take control over pytest options
15646 ;; Integration tests require network connectivity.
15647 "--ignore" "t/integration")))))))
15648 (native-inputs (list python-pytest))
15649 (propagated-inputs (list python-vine))
15650 (home-page "https://github.com/celery/py-amqp")
15651 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
15652 (description
15653 "This is a fork of amqplib which was originally written by Barry Pederson.
15654It is maintained by the Celery project, and used by kombu as a pure python
15655alternative when librabbitmq is not available.")
15656 (license license:lgpl2.1+)))
15657
15658(define-public python-beniget
15659 (package
15660 (name "python-beniget")
15661 (version "0.4.1")
15662 (home-page "https://github.com/serge-sans-paille/beniget")
15663 (source
15664 (origin
15665 (method url-fetch)
15666 (uri (pypi-uri "beniget" version))
15667 (sha256
15668 (base32 "035c4f78yllpw2c5p1w92520rilm7nnpsqh7yvi3qmfhi8xlnmbm"))))
15669 (build-system python-build-system)
15670 (propagated-inputs
15671 (list python-gast))
15672 (synopsis "Extract semantic information about static Python code")
15673 (description
15674 "Beniget is a collection of analyzers for Python @acronym{AST,
15675Abstract Syntax Tree}. It is a building block for writing a static analyzer
15676or compiler for Python.")
15677 (license license:bsd-3)))
15678
15679(define-public python-txamqp
15680 (package
15681 (name "python-txamqp")
15682 (version "0.8.2")
15683 (source
15684 (origin
15685 (method url-fetch)
15686 (uri (pypi-uri "txAMQP" version))
15687 (sha256
15688 (base32
15689 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
15690 (build-system python-build-system)
15691 (propagated-inputs
15692 (list python-six python-twisted))
15693 (home-page "https://github.com/txamqp/txamqp")
15694 (synopsis "Communicate with AMQP peers and brokers using Twisted")
15695 (description
15696 "This package provides a Python library for communicating with AMQP peers
15697and brokers using the asynchronous networking framework Twisted. It contains
15698all the necessary code to connect, send and receive messages to/from an
15699AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
15700also includes support for using Thrift RPC over AMQP in Twisted
15701applications.")
15702 (license license:asl2.0)))
15703
15704(define-public python-kombu
15705 (package
15706 (name "python-kombu")
15707 (version "5.2.4")
15708 (source
15709 (origin
15710 (method url-fetch)
15711 (uri (pypi-uri "kombu" version))
15712 (sha256
15713 (base32 "044ng79gj04668kf5fmy7fjkw8302xyapskkn65ym52zfbpf7kip"))))
15714 (build-system python-build-system)
15715 (arguments
15716 (list
15717 #:phases
15718 #~(modify-phases %standard-phases
15719 (replace 'check
15720 (lambda* (#:key tests? #:allow-other-keys)
15721 (when tests?
15722 (invoke "pytest" "-vv"
15723 ;; The transport tests attempt to pass messages to
15724 ;; many different databases.
15725 "--ignore" "t/unit/transport")))))))
15726 (native-inputs
15727 (list python-case python-pyro4 python-pytest-sugar
15728 python-pytest python-pytz))
15729 (propagated-inputs
15730 (list python-amqp python-cached-property python-vine))
15731 (home-page "https://kombu.readthedocs.io")
15732 (synopsis "Message passing library for Python")
15733 (description "The aim of Kombu is to make messaging in Python as easy as
15734possible by providing an idiomatic high-level interface for the AMQ protocol,
15735and also provide proven and tested solutions to common messaging problems.
15736AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
15737message orientation, queuing, routing, reliability and security, for which the
15738RabbitMQ messaging server is the most popular implementation.")
15739 (license license:bsd-3)))
15740
15741(define-public python-billiard
15742 (package
15743 (name "python-billiard")
15744 (version "3.6.4.0")
15745 (source
15746 (origin
15747 (method url-fetch)
15748 (uri (pypi-uri "billiard" version))
15749 (sha256
15750 (base32 "0ismj2p8c66ykpss94rs0bfra5agxxmljz8r3gaq79r8valfb799"))))
15751 (build-system python-build-system)
15752 (arguments
15753 `(#:phases
15754 (modify-phases %standard-phases
15755 (add-after 'unpack 'remove-win-files
15756 (lambda _
15757 (for-each delete-file-recursively
15758 ;; test_multiprocessing seem to be written in Python2.
15759 '("t/integration/tests/test_multiprocessing.py"
15760 "t/unit/test_win32.py"
15761 "billiard/popen_spawn_win32.py"
15762 "billiard/_win.py")))))))
15763 (native-inputs
15764 (list python-case python-psutil python-pytest))
15765 (home-page "https://github.com/celery/billiard")
15766 (synopsis "Python multiprocessing fork with improvements and bugfixes")
15767 (description
15768 "Billiard is a fork of the Python 2.7 multiprocessing package. The
15769multiprocessing package itself is a renamed and updated version of R Oudkerk's
15770pyprocessing package. This standalone variant is intended to be compatible with
15771Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
15772 (license license:bsd-3)))
15773
15774(define-public python-celery
15775 (package
15776 (name "python-celery")
15777 (version "5.2.6")
15778 (source
15779 (origin
15780 (method url-fetch)
15781 (uri (pypi-uri "celery" version))
15782 (sha256
15783 (base32 "109lcqarrbmh95sk1dm4yxayq1h3i27f4w23ndk64mqgyfnqqffi"))))
15784 (build-system python-build-system)
15785 (arguments
15786 '(#:phases
15787 (modify-phases %standard-phases
15788 (add-after 'unpack 'relax-requirements
15789 (lambda _
15790 (substitute* "requirements/default.txt"
15791 (("pytz.*")
15792 "pytz\n"))))
15793 (replace 'check
15794 (lambda* (#:key tests? #:allow-other-keys)
15795 (when tests?
15796 (invoke "python" "-m" "pytest" "t"
15797 "--ignore" "t/integration" ;hangs tests
15798 ;; The MongoDB backend test appears to expect an older
15799 ;; version of MongoDB which provided its own bson
15800 ;; module, fails with " AttributeError: module 'bson'
15801 ;; has no attribute 'encode'".
15802 "--ignore" "t/unit/backends/test_mongodb.py"
15803 ;; AssertionErrors
15804 "-k" "not test_check_privileges_no_fchown ")))))))
15805 (native-inputs
15806 (list python-case
15807 python-dnspython
15808 python-flaky
15809 python-iniconfig
15810 python-moto
15811 python-msgpack
15812 python-pytest
15813 python-pytest-celery
15814 python-pytest-subtests
15815 python-pytest-timeout
15816 python-toml))
15817 (propagated-inputs
15818 (list python-billiard
15819 python-click
15820 python-click-didyoumean
15821 python-click-plugins
15822 python-click-repl
15823 python-kombu
15824 python-pytz
15825 python-vine))
15826 (home-page "https://celeryproject.org")
15827 (synopsis "Distributed Task Queue")
15828 (description "Celery is an asynchronous task queue/job queue based on
15829distributed message passing. It is focused on real-time operation, but
15830supports scheduling as well. The execution units, called tasks, are executed
15831concurrently on a single or more worker servers using multiprocessing,
15832Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
15833synchronously (wait until ready).")
15834 (license license:bsd-3)))
15835
15836(define-public python-translitcodec
15837 (package
15838 (name "python-translitcodec")
15839 (version "0.4.0")
15840 (source
15841 (origin
15842 (method url-fetch)
15843 (uri (pypi-uri "translitcodec" version))
15844 (sha256
15845 (base32
15846 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
15847 (build-system python-build-system)
15848 (arguments
15849 `(#:tests? #f)) ; no tests provided
15850 (home-page
15851 "https://github.com/claudep/translitcodec")
15852 (synopsis
15853 "Unicode to 8-bit charset transliteration codec")
15854 (description
15855 "This package contains codecs for transliterating ISO 10646 texts into
15856best-effort representations using smaller coded character sets (ASCII,
15857ISO 8859, etc.).")
15858 (license license:expat)))
15859
15860(define-public python-anyqt
15861 (package
15862 (name "python-anyqt")
15863 (version "0.0.13")
15864 (source
15865 (origin
15866 (method url-fetch)
15867 (uri (pypi-uri "AnyQt" version))
15868 (sha256
15869 (base32 "0z7myf0mp1qx4gza6ncqyq9whk67vblmh9n3klk19dv4aakjml2f"))))
15870 (build-system python-build-system)
15871 (arguments
15872 `(#:tests? #f ;there are no tests
15873 #:phases
15874 (modify-phases %standard-phases
15875 (add-after 'unpack 'delete-files
15876 ;; Delete files related to other operating systems.
15877 (lambda _
15878 (delete-file "AnyQt/QtMacExtras.py")
15879 (delete-file "AnyQt/QtWinExtras.py"))))))
15880 (home-page "https://github.com/ales-erjavec/anyqt")
15881 (synopsis "PyQt4/PyQt5 compatibility layer")
15882 (description "AnyQt is a PyQt4/PyQt5 compatibility layer.")
15883 (license license:gpl3)))
15884
15885(define-public python-pyqtgraph
15886 (package
15887 (name "python-pyqtgraph")
15888 (version "0.12.1")
15889 (source
15890 (origin
15891 (method url-fetch)
15892 (uri (pypi-uri "pyqtgraph" version))
15893 (sha256
15894 (base32 "0kc7ncv0lr3spni29i9g8nszyr4xinswqi2zzs6v8kqqi593pvyj"))))
15895 (build-system python-build-system)
15896 (arguments
15897 `(#:phases
15898 (modify-phases %standard-phases
15899 (add-before 'check 'set-home-and-qpa
15900 (lambda _
15901 (setenv "HOME" "/tmp")
15902 (setenv "QT_QPA_PLATFORM" "offscreen")
15903 #t))
15904 (replace 'check
15905 (lambda* (#:key inputs outputs #:allow-other-keys)
15906 (add-installed-pythonpath inputs outputs)
15907 (invoke "pytest" "-vv" "-k"
15908 (string-append
15909 ;; These tests try to download online data.
15910 "not test_PolyLineROI"
15911 " and not test_getArrayRegion_axisorder"
15912 " and not test_getArrayRegion"
15913 " and not test_PlotCurveItem"
15914 " and not test_NonUniformImage_colormap"
15915 " and not test_NonUniformImage_lut"
15916 " and not test_ImageItem_axisorder"
15917 " and not test_ImageItem"
15918 ;; The test_reload test fails and suggests adding
15919 ;; "--assert=plain" to the pytest command, but it
15920 ;; doesn't solve the failure.
15921 " and not test_reload")))))))
15922 (native-inputs
15923 (list python-pytest python-pytest-cov python-pytest-xdist))
15924 (inputs
15925 (list qtbase-5))
15926 (propagated-inputs
15927 (list python-h5py python-numpy python-pyopengl python-scipy
15928 python-pyqt-without-qtwebkit))
15929 (home-page "http://www.pyqtgraph.org")
15930 (synopsis "Scientific graphics and GUI library for Python")
15931 (description
15932 "PyQtGraph is a Pure-python graphics library for PyQt5, PyQt6, PySide2
15933and PySide6. It is intended for use in mathematics, scientific or engineering
15934applications.")
15935 (license license:expat)))
15936
15937(define-public python-qasync
15938 (package
15939 (name "python-qasync")
15940 (version "0.22.0")
15941 (source
15942 (origin
15943 ;; There are no tests in the PyPI tarball.
15944 (method git-fetch)
15945 (uri (git-reference
15946 (url "https://github.com/CabbageDevelopment/qasync/")
15947 (commit (string-append "v" version))))
15948 (file-name (git-file-name name version))
15949 (sha256
15950 (base32 "1q9cllrwf94whr0f6mipa0hdq1rcyqvklwx19g35g2dav8f3xkjl"))))
15951 (build-system python-build-system)
15952 (arguments
15953 `(#:test-target "pytest"
15954 #:phases
15955 (modify-phases %standard-phases
15956 (add-before 'check 'set-qpa
15957 (lambda _
15958 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
15959 (native-inputs
15960 (list python-pytest python-pytest-runner))
15961 (propagated-inputs
15962 (list python-pyqt))
15963 (home-page "https://github.com/CabbageDevelopment/qasync")
15964 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
15965 (description
15966 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
15967by providing an implementation of the PEP 3156 event-loop.")
15968 (license license:bsd-2)))
15969
15970(define-public python-editor
15971 (package
15972 (name "python-editor")
15973 (version "1.0.4")
15974 (source
15975 (origin
15976 (method url-fetch)
15977 (uri (pypi-uri "python-editor" version))
15978 (sha256
15979 (base32
15980 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
15981 (build-system python-build-system)
15982 (arguments
15983 '(#:tests? #f)) ;XXX: needs a TTY and an editor
15984 (home-page "https://github.com/fmoo/python-editor")
15985 (synopsis "Programmatically open an editor, capture the result")
15986 (description
15987 "python-editor is a library that provides the editor module for
15988programmatically interfacing with your system's $EDITOR.")
15989 (license license:asl2.0)))
15990
15991(define-public python-multiprocessing-logging
15992 (package
15993 (name "python-multiprocessing-logging")
15994 (version "0.3.1")
15995 (home-page "https://github.com/jruere/multiprocessing-logging")
15996 (source (origin
15997 (method git-fetch)
15998 (uri (git-reference
15999 (url home-page)
16000 (commit (string-append "v" version))))
16001 (file-name (git-file-name name version))
16002 (sha256
16003 (base32
16004 "1625wy3djlr3b2fpd3vi822f8gw6b75mnls5a4318dbi9za5pf0y"))))
16005 (build-system python-build-system)
16006 (synopsis "Manage logs from multiple processes")
16007 (description
16008 "This Python module implements a multiprocessing-aware @code{Handler}
16009that, when set on the root @code{Logger}, will tunnel log records to the
16010main process so that they are handled correctly.")
16011 (license license:lgpl3+)))
16012
16013(define-public python-vobject
16014 (package
16015 (name "python-vobject")
16016 (version "0.9.6.1")
16017 (source (origin
16018 (method url-fetch)
16019 (uri (pypi-uri "vobject" version))
16020 (sha256
16021 (base32
16022 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
16023 (build-system python-build-system)
16024 (arguments
16025 '(;; The test suite relies on some non-portable Windows interfaces.
16026 #:tests? #f))
16027 (propagated-inputs
16028 (list python-dateutil python-pyicu))
16029 (synopsis "Parse and generate vCard and vCalendar files")
16030 (description "Vobject is intended to be a full featured Python package for
16031parsing and generating vCard and vCalendar files. Currently, iCalendar files
16032are supported and well tested. vCard 3.0 files are supported, and all data
16033should be imported, but only a few components are understood in a sophisticated
16034way.")
16035 (home-page "https://eventable.github.io/vobject/")
16036 (license license:asl2.0)))
16037
16038(define-public python-munkres
16039 (package
16040 (name "python-munkres")
16041 (version "1.1.4")
16042 (source (origin
16043 (method url-fetch)
16044 (uri (pypi-uri "munkres" version))
16045 (sha256
16046 (base32
16047 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
16048 (arguments
16049 (list
16050 #:phases
16051 '(modify-phases %standard-phases
16052 (add-after 'unpack 'disable-test
16053 (lambda _
16054 ;; See https://github.com/bmc/munkres/issues/40
16055 (substitute* "test/test_munkres.py"
16056 (("^def test_profit_float" m)
16057 (string-append "\
16058import platform
16059@pytest.mark.skipif(platform.architecture()[0] == \"32bit\",
16060 reason=\"Fails on 32 bit architectures\")
16061" m))))))))
16062 (build-system python-build-system)
16063 (native-inputs (list python-pytest-6))
16064 (home-page "https://software.clapper.org/munkres/")
16065 (synopsis "Implementation of the Munkres algorithm")
16066 (description "The Munkres module provides an implementation of the Munkres
16067algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
16068useful for solving the Assignment Problem.")
16069 (license license:bsd-3)))
16070
16071(define-public python-whoosh
16072 (package
16073 (name "python-whoosh")
16074 (version "2.7.4")
16075 (source
16076 (origin
16077 (method url-fetch)
16078 (uri (pypi-uri "Whoosh" version))
16079 (sha256
16080 (base32
16081 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
16082 (build-system python-build-system)
16083 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
16084 (native-inputs
16085 (list python-pytest))
16086 (home-page "https://bitbucket.org/mchaput/whoosh")
16087 (synopsis "Full text indexing, search, and spell checking library")
16088 (description
16089 "Whoosh is a fast, pure-Python full text indexing, search, and spell
16090checking library.")
16091 (license license:bsd-2)))
16092
16093(define-public python-codespell
16094 (package
16095 (name "python-codespell")
16096 (version "2.1.0")
16097 (source
16098 (origin
16099 (method url-fetch)
16100 (uri (pypi-uri "codespell" version))
16101 (sha256
16102 (base32 "1r9y714cz8m894rxp7pyvicr1lw2iid24vz6fxbl5wzy8ibgxlqr"))))
16103 (build-system python-build-system)
16104 (inputs
16105 (list python-chardet))
16106 (native-inputs
16107 (list python-check-manifest python-flake8 python-pytest
16108 python-pytest-cov python-pytest-dependency))
16109 (arguments
16110 `(#:phases
16111 (modify-phases %standard-phases
16112 (replace 'check
16113 (lambda* (#:key outputs tests? #:allow-other-keys)
16114 (when tests?
16115 ;; Make installed executable available for running the tests.
16116 (setenv "PATH"
16117 (string-append (assoc-ref outputs "out") "/bin"
16118 ":" (getenv "PATH")))
16119 (invoke "pytest" "-vv")))))))
16120 (home-page "https://github.com/codespell-project/codespell/")
16121 (synopsis "Spellchecker for code")
16122 (description "Codespell fixes common misspellings in text files.
16123It's designed primarily for checking misspelled words in source code,
16124but it can be used with other files as well. It does not check for word
16125membership in a complete dictionary, but instead looks for a set of
16126common misspellings. Therefore it should catch errors like \"adn\", but
16127it will not catch \"adnasdfasdf\". This also means it shouldn't
16128generate false-positives when you use a niche term it doesn't know
16129about.")
16130 (license
16131 (list
16132 ; for codespell and codespell_lib
16133 license:gpl2
16134 ; for dictionary*.txt
16135 license:cc-by-sa3.0))))
16136
16137(define-public python-pathlib
16138 (package
16139 (name "python-pathlib")
16140 (version "1.0.1")
16141 (source (origin
16142 (method url-fetch)
16143 (uri (pypi-uri "pathlib" version))
16144 (sha256
16145 (base32
16146 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
16147 (build-system python-build-system)
16148 ;; The tests depend on the internal "test" module, which does not provide
16149 ;; a stable interface.
16150 (arguments `(#:tests? #f))
16151 (home-page "https://pathlib.readthedocs.org/")
16152 (synopsis "Object-oriented file system paths")
16153 (description "Pathlib offers a set of classes to handle file system paths.
16154It offers the following advantages over using string objects:
16155
16156@enumerate
16157@item No more cumbersome use of os and os.path functions. Everything can
16158be done easily through operators, attribute accesses, and method calls.
16159@item Embodies the semantics of different path types. For example,
16160comparing Windows paths ignores casing.
16161@item Well-defined semantics, eliminating any inconsistencies or
16162ambiguities (forward vs. backward slashes, etc.).
16163@end enumerate
16164
16165Note: In Python 3.4, pathlib is now part of the standard library. For other
16166Python versions please consider python-pathlib2 instead, which tracks the
16167standard library module. This module (python-pathlib) isn't maintained
16168anymore.")
16169 (license license:expat)))
16170
16171(define-public python-jellyfish
16172 (package
16173 (name "python-jellyfish")
16174 (version "0.8.8")
16175 (source (origin
16176 (method url-fetch)
16177 (uri (pypi-uri "jellyfish" version))
16178 (sha256
16179 (base32
16180 "0p2s6b30sfffx8sya2i8kz0i0riw9fq1fi0k89s8kdgrmjf0h1h5"))))
16181 (build-system python-build-system)
16182 (arguments
16183 `(#:tests? #f ; XXX: Tests cannot find C coded version.
16184 #:phases
16185 (modify-phases %standard-phases
16186 (replace 'check
16187 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
16188 (when tests?
16189 (add-installed-pythonpath inputs outputs)
16190 (invoke "pytest" "-vv" "jellyfish/test.py")))))))
16191 (native-inputs
16192 (list python-pytest))
16193 (home-page "https://github.com/jamesturk/jellyfish")
16194 (synopsis "Approximate and phonetic matching of strings")
16195 (description "Jellyfish uses a variety of string comparison and phonetic
16196encoding algorithms to do fuzzy string matching.")
16197 (license license:bsd-2)))
16198
16199(define-public python-pdfminer-six
16200 (package
16201 (name "python-pdfminer-six")
16202 (version "20201018")
16203 ;; There are no tests in the PyPI tarball.
16204 (source
16205 (origin
16206 (method git-fetch)
16207 (uri (git-reference
16208 (url "https://github.com/pdfminer/pdfminer.six")
16209 (commit version)))
16210 (file-name (git-file-name name version))
16211 (sha256
16212 (base32 "1a2fxxnnjqbx344znpvx7cnv1881dk6585ibw01inhfq3w6yj2lr"))))
16213 (build-system python-build-system)
16214 (arguments
16215 `(#:phases
16216 (modify-phases %standard-phases
16217 ;; Tests write to the source tree.
16218 (add-after 'unpack 'make-git-checkout-writable
16219 (lambda _
16220 (for-each make-file-writable (find-files "."))
16221 #t))
16222 (replace 'check
16223 (lambda _
16224 (invoke "make" "test"))))))
16225 (propagated-inputs
16226 (list python-chardet python-cryptography python-sortedcontainers))
16227 (native-inputs
16228 (list python-nose python-tox))
16229 (home-page "https://github.com/pdfminer/pdfminer.six")
16230 (synopsis "PDF parser and analyzer")
16231 (description "@code{pdfminer.six} is a community maintained fork of
16232the original PDFMiner. It is a tool for extracting information from PDF
16233documents. It focuses on getting and analyzing text data. Pdfminer.six
16234extracts the text from a page directly from the sourcecode of the PDF. It
16235can also be used to get the exact location, font or color of the text.")
16236 (license license:expat)))
16237
16238(define-public python-rarfile
16239 (package
16240 (name "python-rarfile")
16241 (version "4.0")
16242 (source (origin
16243 (method url-fetch)
16244 (uri (pypi-uri "rarfile" version))
16245 (sha256
16246 (base32
16247 "1882wv9szcm29mnyhjmspyflyr2l7z73srn14w4dlnww49lqfm37"))))
16248 (build-system python-build-system)
16249 (arguments
16250 `(#:tests? #f ;; The bsdtar utility is very limited and most tests fail.
16251 #:phases
16252 (modify-phases %standard-phases
16253 (add-after 'unpack 'patch
16254 (lambda* (#:key inputs #:allow-other-keys)
16255 (substitute* "rarfile.py"
16256 ;; Disable unrar and unar, which are unavailable on Guix.
16257 (("(unrar|unar)=True" all tool) (string-append tool "=False"))
16258 ;; Hardcode path to bsdtar
16259 (("\"bsdtar\"")
16260 (string-append "\"" (assoc-ref inputs "libarchive") "/bin/bsdtar\"")))
16261 #t))
16262 (replace 'check
16263 (lambda* (#:key inputs tests? #:allow-other-keys)
16264 (when tests?
16265 (invoke "pytest" "-vv")))))))
16266 (native-inputs (list python-pytest))
16267 (inputs (list libarchive))
16268 (home-page "https://github.com/markokr/rarfile")
16269 (synopsis "RAR archive reader for Python")
16270 (description "This is Python module for RAR archive reading. The interface
16271is made as zipfile like as possible.")
16272 (license license:isc)))
16273
16274(define-public python-rich
16275 (package
16276 (name "python-rich")
16277 (version "12.4.1")
16278 (source (origin
16279 (method url-fetch)
16280 (uri (pypi-uri "rich" version))
16281 (sha256
16282 (base32
16283 "149vjb4cpf9mz14iig0b6d8065dm8aslp6pc45g9ipmp1wf00ffj"))))
16284 (build-system python-build-system)
16285 (arguments
16286 `(#:phases
16287 (modify-phases %standard-phases
16288 (replace 'check
16289 (lambda* (#:key inputs tests? #:allow-other-keys)
16290 (when tests?
16291 (copy-recursively (string-append
16292 (assoc-ref inputs "tests") "/tests")
16293 "tests")
16294 (invoke "python" "-m" "pytest" "-vv")))))))
16295 (propagated-inputs
16296 (list python-attrs python-colorama python-commonmark python-pygments
16297 python-typing-extensions))
16298 (native-inputs
16299 `(("python-pytest" ,python-pytest)
16300 ("tests"
16301 ;; The release on pypi comes without tests. We can't build from this
16302 ;; checkout, though, because installation requires an invocation of
16303 ;; poetry.
16304 ,(origin
16305 (method git-fetch)
16306 (uri (git-reference
16307 (url "https://github.com/willmcgugan/rich")
16308 (commit (string-append "v" version))))
16309 (file-name (git-file-name name version))
16310 (sha256
16311 (base32
16312 "17c3gljn8zv32xnpsgd3fqgqn4r7cdfqri41hridcpbhssdgkyp9"))))))
16313 (home-page "https://github.com/willmcgugan/rich")
16314 (synopsis "Render rich text and more to the terminal")
16315 (description
16316 "This is a Python package for rendering rich text, tables, progress bars,
16317syntax highlighting, markdown and more to the terminal.")
16318 (license license:expat)))
16319
16320(define-public python-textual
16321 (package
16322 (name "python-textual")
16323 (version "0.1.18")
16324 (source (origin
16325 (method url-fetch)
16326 (uri (pypi-uri "textual" version))
16327 (sha256
16328 (base32
16329 "08yg5a51hz1axfj5hx28hx31gq5apcj6vpkkmawmiplisa73z25j"))))
16330 (build-system python-build-system)
16331 (arguments
16332 (let ((tests
16333 ;; The release on pypi comes without tests. We can't build
16334 ;; from this checkout, though, because installation requires
16335 ;; an invocation of poetry.
16336 (origin
16337 (method git-fetch)
16338 (uri (git-reference
16339 (url "https://github.com/Textualize/textual")
16340 (commit (string-append "v" version))))
16341 (file-name (git-file-name name version))
16342 (sha256
16343 (base32
16344 "0b3ycwqhp21mg9fvmadgxhgbvkwq6fd784l2xcmvy77rravrnnax")))))
16345 (list #:phases
16346 #~(modify-phases %standard-phases
16347 (replace 'check
16348 (lambda* (#:key tests? #:allow-other-keys)
16349 (when tests?
16350 (copy-recursively #$(file-append tests "/tests")
16351 "tests")
16352 (invoke "python" "-m" "pytest" "-vv"))))))))
16353 (propagated-inputs
16354 (list python-rich python-typing-extensions))
16355 (native-inputs
16356 (list python-pytest))
16357 (home-page "https://github.com/Textualize/textual")
16358 (synopsis "Build text user interfaces in Python")
16359 (description "Textual is a @acronym{TUI, Text User Interface} framework
16360for Python inspired by modern web development.")
16361 (license license:expat)))
16362
16363(define-public python-magic
16364 (package
16365 (name "python-magic")
16366 (version "0.4.24")
16367 (home-page "https://github.com/ahupp/python-magic")
16368 (source
16369 (origin
16370 (method git-fetch)
16371 (uri (git-reference (url home-page) (commit version)))
16372 (file-name (git-file-name name version))
16373 (patches (search-patches "python-magic-python-bytecode.patch"))
16374 (sha256
16375 (base32
16376 "17jalhjbfd600lzfz296m0nvgp6c7vx1mgz82jbzn8hgdzknf4w0"))))
16377 (build-system python-build-system)
16378 (arguments
16379 '(#:phases (modify-phases %standard-phases
16380 ;; Replace a specific method call with a hard-coded
16381 ;; path to the necessary libmagic.so file in the
16382 ;; store. If we don't do this, then the method call
16383 ;; will fail to find the libmagic.so file, which in
16384 ;; turn will cause any application using
16385 ;; python-magic to fail.
16386 (add-before 'build 'hard-code-path-to-libmagic
16387 (lambda* (#:key inputs #:allow-other-keys)
16388 (let ((magic (search-input-file inputs "/lib/libmagic.so")))
16389 (substitute* "magic/loader.py"
16390 (("find_library\\('magic'\\)")
16391 (string-append "'" magic "'"))))))
16392 (replace 'check
16393 (lambda* (#:key tests? #:allow-other-keys)
16394 ;; The test suite mandates this variable.
16395 (setenv "LC_ALL" "en_US.UTF-8")
16396 (if tests?
16397 (with-directory-excursion "test"
16398 (invoke "python" "./test.py")
16399 (invoke "python" "./libmagic_test.py"))
16400 (format #t "test suite not run~%")))))))
16401 (native-inputs
16402 (list which))
16403 (inputs
16404 ;; python-magic needs to be able to find libmagic.so.
16405 ;; Use a newer version because 5.39 returns bogus for some archives
16406 ;; (notably Chromium .crx extensions), which breaks e.g. 'diffoscope'.
16407 (list file-next))
16408 (synopsis "File type identification using libmagic")
16409 (description
16410 "This module uses ctypes to access the libmagic file type
16411identification library. It makes use of the local magic database and
16412supports both textual and MIME-type output. Note that this module and
16413the python-file module both provide a \"magic.py\" file; these two
16414modules, which are different and were developed separately, both serve
16415the same purpose: to provide Python bindings for libmagic.")
16416 (license license:expat)))
16417
16418(define-public s3cmd
16419 (package
16420 (name "s3cmd")
16421 (version "2.3.0")
16422 (source
16423 (origin
16424 (method git-fetch)
16425 (uri (git-reference
16426 (url "https://github.com/s3tools/s3cmd")
16427 (commit (string-append "v" version))))
16428 (file-name (git-file-name name version))
16429 (sha256
16430 (base32 "0rdgwwmmp8mdxc84bxq6k9a7v7z2qgc3df47djzs2b84gw81dglx"))))
16431 (build-system python-build-system)
16432 (arguments
16433 (list #:phases
16434 #~(modify-phases %standard-phases
16435 (add-after 'unpack 'hide-wrapping
16436 (lambda _
16437 (substitute* "S3/MultiPart.py"
16438 (("sys\\.argv\\[0\\]") "\"s3cmd\""))
16439 (substitute* "s3cmd"
16440 (("optparser\\.get_prog_name\\(\\)") "\"s3cmd\"")))))))
16441 (inputs
16442 (list python-dateutil
16443 python-magic))
16444 (home-page "https://s3tools.org/s3cmd")
16445 (synopsis "Command line tool for S3-compatible storage services")
16446 (description
16447 "S3cmd is a command line tool for uploading, retrieving and managing data
16448in storage services that are compatible with the Amazon Simple Storage
16449Service (S3) protocol, including S3 itself. It supports rsync-like backup,
16450GnuPG encryption, and more. It also supports management of Amazon's
16451CloudFront content delivery network.")
16452 (license license:gpl2+)))
16453
16454(define-public python-pkgconfig
16455 (package
16456 (name "python-pkgconfig")
16457 (version "1.3.1")
16458 (source
16459 (origin
16460 (method url-fetch)
16461 (uri (pypi-uri "pkgconfig" version))
16462 (sha256
16463 (base32
16464 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
16465 (build-system python-build-system)
16466 (native-inputs
16467 (list python-nose))
16468 (inputs
16469 (list pkg-config))
16470 (arguments
16471 `(#:phases
16472 (modify-phases %standard-phases
16473 (add-before 'build 'patch
16474 ;; Hard-code the path to pkg-config.
16475 (lambda _
16476 (substitute* "pkgconfig/pkgconfig.py"
16477 (("'pkg-config'")
16478 (string-append "'" (which "pkg-config") "'")))))
16479 (replace 'check
16480 (lambda _
16481 (invoke "nosetests" "test.py"))))))
16482 (home-page "https://github.com/matze/pkgconfig")
16483 (synopsis "Python interface for pkg-config")
16484 (description "This module provides a Python interface to pkg-config. It
16485can be used to find all pkg-config packages, check if a package exists,
16486check if a package meets certain version requirements, query CFLAGS and
16487LDFLAGS and parse the output to build extensions with setup.py.")
16488 (license license:expat)))
16489
16490(define-public python-bz2file
16491 (package
16492 (name "python-bz2file")
16493 (version "0.98")
16494 (source
16495 (origin
16496 (method url-fetch)
16497 (uri (pypi-uri "bz2file" version))
16498 (sha256
16499 (base32
16500 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
16501 (build-system python-build-system)
16502 (arguments
16503 `(#:tests? #f)) ; Tests use deprecated python modules.
16504 (home-page "https://github.com/nvawda/bz2file")
16505 (synopsis "Read and write bzip2-compressed files")
16506 (description
16507 "Bz2file is a Python library for reading and writing bzip2-compressed
16508files. It contains a drop-in replacement for the I/O interface in the
16509standard library's @code{bz2} module, including features from the latest
16510development version of CPython that are not available in older releases.")
16511 (license license:asl2.0)))
16512
16513(define-public python-future
16514 (package
16515 (name "python-future")
16516 (version "0.18.2")
16517 (source
16518 (origin
16519 (method url-fetch)
16520 (uri (pypi-uri "future" version))
16521 (sha256
16522 (base32
16523 "0zakvfj87gy6mn1nba06sdha63rn4njm7bhh0wzyrxhcny8avgmi"))))
16524 (build-system python-build-system)
16525 ;; Many tests connect to the network or are otherwise flawed.
16526 ;; https://github.com/PythonCharmers/python-future/issues/210
16527 (arguments
16528 `(#:tests? #f
16529 #:phases
16530 (modify-phases %standard-phases
16531 (replace 'sanity-check
16532 (let ((sanity-check (assoc-ref %standard-phases 'sanity-check)))
16533 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
16534 (let* ((files (find-files (site-packages inputs outputs)
16535 "top_level\\.txt"))
16536 (backups (map (lambda (f) (string-append f ".bak"))
16537 files)))
16538 (for-each copy-file files backups)
16539 (substitute* files
16540 ;; Nobody be usin' winreg on Guix
16541 ;; Also, don't force users to have tkinter when they don't
16542 ;; need it
16543 (("(winreg|tkinter)") ""))
16544 (apply sanity-check args)
16545 (for-each rename-file backups files))))))))
16546 (home-page "https://python-future.org")
16547 (synopsis "Single-source support for Python 3 and 2")
16548 (description
16549 "@code{python-future} is the missing compatibility layer between Python 2 and
16550Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
16551to support both Python 2 and Python 3 with minimal overhead.")
16552 (license license:expat)))
16553
16554(define-public python-cysignals
16555 (package
16556 (name "python-cysignals")
16557 (version "1.9.0")
16558 (source
16559 (origin
16560 (method url-fetch)
16561 (uri (pypi-uri "cysignals" version))
16562 (sha256
16563 (base32
16564 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
16565 (build-system python-build-system)
16566 (native-inputs
16567 (list python-cython python-sphinx))
16568 (inputs
16569 (list pari-gp))
16570 (arguments
16571 `(#:modules ((guix build python-build-system)
16572 ((guix build gnu-build-system) #:prefix gnu:)
16573 (guix build utils))
16574 ;; FIXME: Tests are executed after installation and currently fail
16575 ;; when not installing into standard locations; the author is working
16576 ;; on a fix.
16577 #:tests? #f
16578 #:phases
16579 (modify-phases %standard-phases
16580 (add-before
16581 'build 'configure
16582 (assoc-ref gnu:%standard-phases 'configure)))))
16583 (home-page
16584 "https://github.com/sagemath/cysignals")
16585 (synopsis
16586 "Handling of interrupts and signals for Cython")
16587 (description
16588 "The cysignals package provides mechanisms to handle interrupts (and
16589other signals and errors) in Cython code, using two related approaches,
16590for mixed Cython/Python code or external C libraries and pure Cython code,
16591respectively.")
16592 (license license:lgpl3+)))
16593
16594(define-public python-rope
16595 (package
16596 (name "python-rope")
16597 (version "1.1.1")
16598 (source
16599 (origin
16600 (method url-fetch)
16601 (uri (pypi-uri "rope" version))
16602 (sha256
16603 (base32
16604 "0bkzwkllxxdxd3w70xiy137lqvnlmmaplsc2ya3s23ss4kq8y10k"))))
16605 (build-system python-build-system)
16606 (arguments
16607 (list #:phases
16608 `(modify-phases %standard-phases
16609 (add-after 'unpack 'disable-broken-test
16610 (lambda _
16611 (substitute* "ropetest/contrib/autoimporttest.py"
16612 (("def test_search_module")
16613 "def __notest_search_module")
16614 (("def test_search_submodule")
16615 "def __notest_search_submodule")))))))
16616 (native-inputs
16617 (list python-pytest-timeout
16618 python-pytest))
16619 (home-page "https://github.com/python-rope/rope")
16620 (synopsis "Refactoring library for Python")
16621 (description "Rope is a refactoring library for Python. It facilitates
16622the renaming, moving and extracting of attributes, functions, modules, fields
16623and parameters in Python source code. These refactorings can also be applied
16624to occurrences in strings and comments.")
16625 (license license:lgpl3+)))
16626
16627(define-public python-py3status
16628 (package
16629 (name "python-py3status")
16630 (version "3.21")
16631 (source
16632 (origin
16633 (method url-fetch)
16634 (uri (pypi-uri "py3status" version))
16635 (sha256
16636 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
16637 (build-system python-build-system)
16638 (inputs
16639 (list file))
16640 (arguments
16641 '(#:phases
16642 (modify-phases %standard-phases
16643 ;; 'file' is used for detection of configuration file encoding
16644 ;; let's make link the dependency to particular input
16645 (add-before 'build 'patch-file-path
16646 (lambda* (#:key inputs #:allow-other-keys)
16647 (let ((file-path (assoc-ref inputs "file")))
16648 (substitute* "py3status/parse_config.py"
16649 (("\\[\"file\", \"-b\"")
16650 (string-append "['" file-path "/bin/file', '-b'")))
16651 #t))))
16652 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
16653 (home-page "https://github.com/ultrabug/py3status")
16654 (synopsis "Extensible i3status wrapper written in Python")
16655 (description "py3status is an i3status wrapper which extends i3status
16656functionality in a modular way, allowing you to extend your panel with your
16657own code, responding to click events and updating clock every second.")
16658 (license license:bsd-3)))
16659
16660(define-public python-tblib
16661 (package
16662 (name "python-tblib")
16663 (version "1.6.0")
16664 (source (origin
16665 (method url-fetch)
16666 (uri (pypi-uri "tblib" version))
16667 (sha256
16668 (base32
16669 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
16670 (build-system python-build-system)
16671 (arguments
16672 `(#:phases
16673 (modify-phases %standard-phases
16674 (replace 'check
16675 (lambda _
16676 (invoke "py.test" "-vv" "tests" "README.rst"))))))
16677 (native-inputs
16678 (list python-pytest python-six))
16679 (home-page "https://github.com/ionelmc/python-tblib")
16680 (synopsis "Traceback serialization library")
16681 (description
16682 "Traceback serialization allows you to:
16683
16684@enumerate
16685@item Pickle tracebacks and raise exceptions with pickled tracebacks in
16686different processes. This allows better error handling when running code over
16687multiple processes (imagine multiprocessing, billiard, futures, celery etc).
16688
16689@item Parse traceback strings and raise with the parsed tracebacks.
16690@end enumerate\n")
16691 (license license:bsd-3)))
16692
16693(define-public python-tftpy
16694 (package
16695 (name "python-tftpy")
16696 (version "0.8.2")
16697 (source
16698 (origin
16699 (method git-fetch) ;no tests in PyPI archive
16700 (uri (git-reference
16701 (url "https://github.com/msoulier/tftpy")
16702 (commit version)))
16703 (file-name (git-file-name name version))
16704 (sha256
16705 (base32
16706 "1gl04ps8h8r7av3h0zbm8gwmkqs9rkk5vf7n8mv2bzrkwvy9hacc"))))
16707 (build-system python-build-system)
16708 (arguments
16709 `(#:phases (modify-phases %standard-phases
16710 (replace 'check
16711 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
16712 (when tests?
16713 ;; The default DEBUG logging level is way too verbose.
16714 (substitute* "t/test.py"
16715 (("logging\\.DEBUG")
16716 "logging.INFO"))
16717 (invoke "python" "-m" "unittest" "t/test.py")))))))
16718 (home-page "http://tftpy.sourceforge.net/")
16719 (synopsis "Python trivial file transfer protocol (TFTP) library")
16720 (description "TFTPy is a trivial file transfer protocol (TFTP) Python
16721library. It can be used to act both as a TFTP client or TFTP server.")
16722 (license license:expat)))
16723
16724(define-public python-greenlet
16725 (package
16726 (name "python-greenlet")
16727 (version "1.1.2")
16728 (source (origin
16729 (method url-fetch)
16730 (uri (pypi-uri "greenlet" version))
16731 (sha256
16732 (base32
16733 "0jkln5bf6rq7dbvpv7ypin3pp9jqd2jr91yyxlnfcii3msj5w3z3"))))
16734 (build-system python-build-system)
16735 (home-page "https://greenlet.readthedocs.io/")
16736 (synopsis "Lightweight in-process concurrent programming")
16737 (description
16738 "Greenlet package is a spin-off of Stackless, a version of CPython
16739that supports micro-threads called \"tasklets\". Tasklets run
16740pseudo-concurrently (typically in a single or a few OS-level threads) and
16741are synchronized with data exchanges on \"channels\".")
16742 (license (list license:psfl license:expat))))
16743
16744(define-public python-objgraph
16745 (package
16746 (name "python-objgraph")
16747 (version "3.4.1")
16748 (source
16749 (origin
16750 (method url-fetch)
16751 (uri (pypi-uri "objgraph" version))
16752 (sha256
16753 (base32
16754 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
16755 (build-system python-build-system)
16756 (propagated-inputs
16757 (list python-graphviz))
16758 (native-inputs
16759 (list python-mock graphviz))
16760 (home-page "https://mg.pov.lt/objgraph/")
16761 (synopsis "Draw Python object reference graphs with graphviz")
16762 (description
16763 "This package provides tools to draw Python object reference graphs with
16764graphviz.")
16765 (license license:expat)))
16766
16767(define-public python-gevent
16768 (package
16769 (name "python-gevent")
16770 (version "21.12.0")
16771 (source (origin
16772 (method url-fetch)
16773 (uri (pypi-uri "gevent" version))
16774 (sha256
16775 (base32
16776 "0kh9mmq811mzfgj60n64icybjp4ryjmfmy1vg7x92yrniibn92zl"))
16777 (modules '((guix build utils)))
16778 (snippet
16779 '(begin
16780 ;; unbunding libev and c-ares
16781 (delete-file-recursively "deps")
16782 ;; Remove cythonized files.
16783 (with-directory-excursion "src/gevent"
16784 (for-each delete-file
16785 (append (list "resolver/cares.c"
16786 "queue.c"
16787 "local.c"
16788 "libev/corecext.h"
16789 "libev/corecext.c"
16790 "greenlet.c"
16791 "event.c"
16792 "_waiter.c"
16793 "_tracer.c"
16794 "_semaphore.c"
16795 "_imap.c"
16796 "_ident.c"
16797 "_hub_primitives.c"
16798 "_hub_local.c"
16799 "_greenlet_primitives.c"
16800 "_abstract_linkable.c")
16801 (find-files "." "\\.html$"))))))))
16802 (build-system python-build-system)
16803 (arguments
16804 `(#:modules ((ice-9 ftw)
16805 (ice-9 match)
16806 (srfi srfi-26)
16807 (guix build utils)
16808 (guix build python-build-system))
16809 #:phases (modify-phases %standard-phases
16810 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
16811 (lambda _
16812 (substitute* "src/gevent/subprocess.py"
16813 (("/bin/sh") (which "sh")))
16814 (for-each (lambda (file)
16815 (substitute* file
16816 (("/bin/sh") (which "sh"))
16817 (("/bin/true") (which "true"))))
16818 (find-files "src/greentest" "\\.py$"))))
16819 (add-before 'build 'do-not-use-bundled-sources
16820 (lambda _
16821 (setenv "GEVENTSETUP_EMBED" "0")
16822
16823 ;; Prevent building bundled libev.
16824 (substitute* "setup.py"
16825 (("run_make=_BUILDING")
16826 "run_make=False"))))
16827 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
16828 (lambda* (#:key inputs #:allow-other-keys)
16829 (let ((greenlet (string-append
16830 (assoc-ref inputs "python-greenlet")
16831 "/include")))
16832 (match (scandir greenlet
16833 (lambda (item)
16834 (string-prefix? "python" item)))
16835 ((python)
16836 (setenv "C_INCLUDE_PATH"
16837 (string-append greenlet "/" python ":"
16838 (or (getenv "C_INCLUDE_PATH")
16839 ""))))))))
16840 (add-before 'check 'pretend-to-be-CI
16841 (lambda _
16842 ;; A few tests are skipped due to network constraints or
16843 ;; get longer timeouts when running in a CI environment.
16844 ;; Piggy-back on that, as we need the same adjustments.
16845 (setenv "TRAVIS" "1")
16846 (setenv "APPVEYOR" "1")))
16847 (add-before 'check 'adjust-tests
16848 (lambda _
16849 (let ((disabled-tests
16850 '(;; These tests relies on networking which is
16851 ;; not available in the build container.
16852 "test__getaddrinfo_import.py"
16853 "test__server_pywsgi.py"
16854 ;; XXX: These tests borrow functionality from the
16855 ;; Python builtin 'test' module, but it is not
16856 ;; installed with the Guix Python distribution.
16857 "test_smtpd.py"
16858 "test_wsgiref.py"
16859 "test_urllib2.py"
16860 "test_thread.py"
16861 "test_threading.py"
16862 "test__threading_2.py"
16863 ;; These tests rely on KeyboardInterrupts which do not
16864 ;; work inside the build container for some reason
16865 ;; (lack of controlling terminal?).
16866 "test_subprocess.py"
16867 "test__issues461_471.py"
16868 ;; TODO: Patch out the tests that use getprotobyname, etc
16869 ;; instead of disabling all the tests from these files.
16870 "test__resolver_dnspython.py"
16871 "test__doctests.py"
16872 "test__all__.py"
16873 "test___config.py"
16874 "test__execmodules.py"
16875 ;; This test contains 'test_unlink', which
16876 ;; fails on i686 (see:
16877 ;; https://github.com/gevent/gevent/issues/1558).
16878 "test__core_stat.py")))
16879 (call-with-output-file "skipped_tests.txt"
16880 (lambda (port)
16881 (format port "~a~%"
16882 (string-join disabled-tests "\n")))))))
16883 (replace 'check
16884 (lambda _
16885 ;; Use the build daemons configured number of workers.
16886 (setenv "NWORKERS" (number->string (parallel-job-count)))
16887
16888 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
16889 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
16890 (propagated-inputs
16891 (list python-greenlet python-zope-event python-zope-interface))
16892 (native-inputs
16893 (list python-cython
16894 ;; For tests.
16895 python-dnspython python-psutil python-objgraph))
16896 (inputs
16897 (list c-ares libev))
16898 (home-page "https://www.gevent.org/")
16899 (synopsis "Coroutine-based network library")
16900 (description
16901 "@code{gevent} is a coroutine-based Python networking library that uses
16902@code{greenlet} to provide a high-level synchronous API on top of the
16903@code{libev} event loop.")
16904 (license license:expat)))
16905
16906(define-public python-fastimport
16907 (package
16908 (name "python-fastimport")
16909 (version "0.9.9")
16910 (source
16911 (origin
16912 (method url-fetch)
16913 (uri (pypi-uri "fastimport" version))
16914 (sha256
16915 (base32 "06gk14qgm9dxx3pzjn0ckdbywc8ial2bjfzddqwlr4bn1nnqkbll"))))
16916 (build-system python-build-system)
16917 (home-page "https://github.com/jelmer/python-fastimport")
16918 (synopsis "VCS fastimport parser and generator in Python")
16919 (description "This package provides a parser for and generator of the Git
16920@url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
16921format.")
16922 (license license:gpl2+)))
16923
16924(define-public python-twisted
16925 (package
16926 (name "python-twisted")
16927 (version "19.7.0")
16928 (source (origin
16929 (method url-fetch)
16930 (uri (pypi-uri "Twisted" version ".tar.bz2"))
16931 (sha256
16932 (base32
16933 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
16934 (build-system python-build-system)
16935 (arguments
16936 '(#:tests? #f ; FIXME: some tests fail
16937 #:phases
16938 (modify-phases %standard-phases
16939 ;; Remove scripts, because they depend on [conch]
16940 (add-after 'unpack 'remove-entrypoint
16941 (lambda _
16942 (substitute* "src/twisted/python/_setup.py"
16943 (("\".+ = twisted\\.conch\\.scripts\\..+\",") "")))))))
16944 (propagated-inputs
16945 (list python-zope-interface
16946 python-pyhamcrest
16947 python-incremental
16948 python-hyperlink
16949 python-constantly
16950 python-automat))
16951 (home-page "https://twistedmatrix.com/")
16952 (synopsis "Asynchronous networking framework written in Python")
16953 (description
16954 "Twisted is an extensible framework for Python programming, with special
16955focus on event-based network programming and multiprotocol integration.")
16956 (license license:expat)))
16957
16958(define-public python-pika
16959 (package
16960 (name "python-pika")
16961 (version "1.2.1")
16962 (source
16963 (origin
16964 (method git-fetch)
16965 (uri (git-reference
16966 (url "https://github.com/pika/pika")
16967 (commit version)))
16968 (file-name (git-file-name name version))
16969 (sha256
16970 (base32
16971 "0sqj3bg6jwign8vwvn337fbwy69sm684ns1vh5kbfnskq4him9i2"))))
16972 (build-system python-build-system)
16973 (arguments
16974 '(#:phases (modify-phases %standard-phases
16975 (add-after 'unpack 'disable-live-tests
16976 (lambda _
16977 ;; Disable tests that require RabbitMQ, which is not
16978 ;; yet available in Guix.
16979 (substitute* "nose2.cfg"
16980 (("tests=tests/unit,tests/acceptance")
16981 "start-dir=tests/unit"))
16982 (with-directory-excursion "tests"
16983 (for-each delete-file
16984 '("unit/base_connection_tests.py"
16985 "unit/threaded_test_wrapper_test.py")))))
16986 (replace 'check
16987 (lambda* (#:key tests? #:allow-other-keys)
16988 (when tests?
16989 (setenv "PYTHONPATH" (getcwd))
16990 (invoke "nose2" "-v")))))))
16991 (native-inputs
16992 (list python-mock
16993 python-nose2
16994 ;; These are optional at runtime, and provided here for tests.
16995 python-gevent
16996 python-tornado
16997 python-twisted))
16998 (home-page "https://pika.readthedocs.org")
16999 (synopsis "Pure Python AMQP Client Library")
17000 (description
17001 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
17002Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
17003network support library.")
17004 (license license:bsd-3)))
17005
17006(define-public python-ply
17007 (package
17008 (name "python-ply")
17009 (version "3.11")
17010 (source
17011 (origin
17012 (method url-fetch)
17013 (uri (pypi-uri "ply" version))
17014 (sha256
17015 (base32
17016 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
17017 (build-system python-build-system)
17018 (home-page "http://www.dabeaz.com/ply/")
17019 (synopsis "Python Lex & Yacc")
17020 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
17021It uses LR parsing and does extensive error checking.")
17022 (license license:bsd-3)))
17023
17024(define-public python-tabulate
17025 (package
17026 (name "python-tabulate")
17027 (version "0.8.9")
17028 (source (origin
17029 (method url-fetch)
17030 (uri (pypi-uri "tabulate" version))
17031 (sha256
17032 (base32
17033 "19qkdz8xwk5jxa5xn53mnk76qnh4ysm81vzj664jw1b0azr167gb"))))
17034 (build-system python-build-system)
17035 (arguments
17036 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
17037 ;; and the latest release is not tagged in the upstream repository.
17038 '(#:tests? #f))
17039 (home-page "https://bitbucket.org/astanin/python-tabulate")
17040 (synopsis "Pretty-print tabular data")
17041 (description
17042 "Tabulate is a library and command-line utility to pretty-print tabular
17043data in Python.")
17044 (license license:expat)))
17045
17046(define-public python-kazoo
17047 (package
17048 (name "python-kazoo")
17049 (version "2.8.0")
17050 (source
17051 (origin
17052 (method url-fetch)
17053 (uri (pypi-uri "kazoo" version))
17054 (sha256
17055 (base32
17056 "1zpj5cc8624w6i0pxgcxqkjwbkm4pkrv19d7wh5df3jais32g3jq"))))
17057 (build-system python-build-system)
17058 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
17059 (propagated-inputs
17060 (list python-six))
17061 (home-page "https://kazoo.readthedocs.org")
17062 (synopsis "High-level Zookeeper client library")
17063 (description
17064 "Kazoo is a Python client library for the Apache Zookeeper distributed
17065application service. It is designed to be easy to use and to avoid common
17066programming errors.")
17067 (license license:asl2.0)))
17068
17069(define-public python-pykafka
17070 (package
17071 (name "python-pykafka")
17072 (version "2.4.0")
17073 (source (origin
17074 (method url-fetch)
17075 (uri (pypi-uri "pykafka" version))
17076 (sha256
17077 (base32
17078 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
17079 (build-system python-build-system)
17080 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
17081 (propagated-inputs
17082 (list python-gevent python-kazoo python-tabulate))
17083 (inputs
17084 (list librdkafka))
17085 (home-page "https://pykafka.readthedocs.io/")
17086 (synopsis "Apache Kafka client for Python")
17087 (description
17088 "PyKafka is a client for the Apache Kafka distributed messaging system.
17089It includes Python implementations of Kafka producers and consumers, which
17090are optionally backed by a C extension built on librdkafka.")
17091 (license license:asl2.0)))
17092
17093(define-public python-wcwidth
17094 (package
17095 (name "python-wcwidth")
17096 (version "0.1.8")
17097 (source (origin
17098 (method url-fetch)
17099 (uri (pypi-uri "wcwidth" version))
17100 (sha256
17101 (base32
17102 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
17103 (build-system python-build-system)
17104 (home-page "https://github.com/jquast/wcwidth")
17105 (synopsis "Measure number of terminal column cells of wide-character codes")
17106 (description "Wcwidth measures the number of terminal column cells of
17107wide-character codes. It is useful for those implementing a terminal emulator,
17108or programs that carefully produce output to be interpreted by one. It is a
17109Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
17110specified in POSIX.1-2001 and POSIX.1-2008.")
17111 (license license:expat)))
17112
17113(define-public python-chai
17114 (package
17115 (name "python-chai")
17116 (version "1.1.2")
17117 (source (origin
17118 (method url-fetch)
17119 (uri (pypi-uri "chai" version))
17120 (sha256
17121 (base32
17122 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))
17123 (patches (search-patches "python-chai-drop-python2.patch"))))
17124 (build-system python-build-system)
17125 (home-page "https://github.com/agoragames/chai")
17126 (synopsis "Mocking framework for Python")
17127 (description
17128 "Chai provides an api for mocking, stubbing and spying your python
17129objects, patterned after the Mocha library for Ruby.")
17130 (license license:bsd-3)))
17131
17132(define-public python-inflection
17133 (package
17134 (name "python-inflection")
17135 (version "0.3.1")
17136 (source
17137 (origin (method url-fetch)
17138 (uri (pypi-uri "inflection" version))
17139 (sha256
17140 (base32
17141 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
17142 (build-system python-build-system)
17143 (native-inputs
17144 (list python-pytest))
17145 (home-page "https://github.com/jpvanhal/inflection")
17146 (synopsis "Python string transformation library")
17147 (description
17148 "Inflection is a string transformation library. It singularizes
17149and pluralizes English words, and transforms strings from CamelCase to
17150underscored string.")
17151 (license license:expat)))
17152
17153(define-public python-pylev
17154 (package
17155 (name "python-pylev")
17156 (version "1.3.0")
17157 (source (origin
17158 (method url-fetch)
17159 (uri (pypi-uri "pylev" version))
17160 (sha256
17161 (base32
17162 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
17163 (build-system python-build-system)
17164 (home-page "https://github.com/toastdriven/pylev")
17165 (synopsis "Levenshtein distance implementation in Python")
17166 (description "Pure Python Levenshtein implementation, based off the
17167Wikipedia code samples at
17168@url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
17169 (license license:bsd-3)))
17170
17171(define-public python-cleo
17172 (package
17173 (name "python-cleo")
17174 (version "0.8.1")
17175 (source (origin
17176 (method url-fetch)
17177 (uri (pypi-uri "cleo" version))
17178 (sha256
17179 (base32
17180 "17q6wi3q280kxmxzb2iwnnqih2xbljn18v0bjx2ip18p079j43ix"))))
17181 (build-system python-build-system)
17182 (native-inputs
17183 (list ;; For testing
17184 python-mock python-pytest-mock python-pytest))
17185 (propagated-inputs
17186 (list python-backpack python-clikit python-pastel python-pylev))
17187 (home-page "https://github.com/sdispater/cleo")
17188 (synopsis "Command-line arguments library for Python")
17189 (description
17190 "Cleo allows you to create command-line commands with signature in
17191docstring and colored output.")
17192 (license license:expat)))
17193
17194(define-public python-tomlkit
17195 (package
17196 (name "python-tomlkit")
17197 (version "0.7.0")
17198 (source
17199 (origin
17200 (method url-fetch)
17201 (uri (pypi-uri "tomlkit" version))
17202 (sha256
17203 (base32 "062n694sfv24ylda6nh8228y2q9hrvy554kqx84y7czsjfbg4mxc"))))
17204 (build-system python-build-system)
17205 (native-inputs
17206 (list python-pytest python-pyyaml))
17207 (home-page "https://github.com/sdispater/tomlkit")
17208 (synopsis "Style-preserving TOML library")
17209 (description
17210 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
17211preserves all comments, indentations, whitespace and internal element ordering,
17212and makes them accessible and editable via an intuitive API. It can also
17213create new TOML documents from scratch using the provided helpers. Part of the
17214implementation has been adapted, improved, and fixed from Molten.")
17215 (license license:expat)))
17216
17217(define-public python-shellingham
17218 (package
17219 (name "python-shellingham")
17220 (version "1.4.0")
17221 (source
17222 (origin
17223 (method url-fetch)
17224 (uri (pypi-uri "shellingham" version))
17225 (sha256
17226 (base32 "07hpndvcv9mf9hp54b4apzpwzmzfzl8ryaacsfdq4139im2w4ma8"))))
17227 (build-system python-build-system)
17228 (home-page "https://github.com/sarugaku/shellingham")
17229 (synopsis "Tool to detect surrounding shell")
17230 (description
17231 "Shellingham detects what shell the current Python executable is
17232running in.")
17233 (license license:isc)))
17234
17235(define-public python-memcached
17236 (package
17237 (name "python-memcached")
17238 (version "1.59")
17239 (source
17240 (origin
17241 (method url-fetch)
17242 (uri (pypi-uri "python-memcached" version))
17243 (sha256
17244 (base32
17245 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))
17246 (patches (search-patches "python-memcached-syntax-warnings.patch"))))
17247 (build-system python-build-system)
17248 (propagated-inputs (list python-six))
17249 (home-page
17250 "https://github.com/linsomniac/python-memcached")
17251 (synopsis "Pure python memcached client")
17252 (description
17253 "This software is a pure Python interface to the memcached memory cache
17254daemon. It is the client side software which allows storing values in one or
17255more, possibly remote, memcached servers.")
17256 (license license:psfl)))
17257
17258(define-public python-mergedeep
17259 (package
17260 (name "python-mergedeep")
17261 (version "1.3.4")
17262 (source
17263 (origin
17264 (method git-fetch)
17265 (uri (git-reference
17266 (url "https://github.com/clarketm/mergedeep")
17267 (commit (string-append "v" version))))
17268 (file-name (git-file-name name version))
17269 (sha256
17270 (base32
17271 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
17272 (build-system python-build-system)
17273 (native-inputs (list python-pytest))
17274 (home-page "https://github.com/clarketm/mergedeep")
17275 (synopsis "Deep merge function for Python")
17276 (description "This package provides a deep merge function for Python,
17277useful to combine multiple data objects as one.")
17278 (license license:expat)))
17279
17280(define-public python-clikit
17281 (package
17282 (name "python-clikit")
17283 (version "0.6.2")
17284 (source
17285 (origin
17286 (method url-fetch)
17287 (uri (pypi-uri "clikit" version))
17288 (sha256
17289 (base32
17290 "0ngdkmb73gkp5y00q7r9k1cdlfn0wyzws2wrqlshc4hlkbdyabj4"))))
17291 (build-system python-build-system)
17292 (arguments '(#:tests? #f)) ; no test in the PyPI tarball
17293 (propagated-inputs
17294 (list python-crashtest python-pastel python-pylev))
17295 (home-page "https://github.com/sdispater/clikit")
17296 (synopsis "Group of utilities to build command line interfaces")
17297 (description
17298 "CliKit is a group of utilities to build testable command line
17299interfaces.")
17300 (license license:expat)))
17301
17302(define-public python-msgpack-python
17303 (package
17304 (name "python-msgpack-python")
17305 (version "0.5.6")
17306 (source
17307 (origin
17308 (method url-fetch)
17309 (uri (pypi-uri "msgpack-python" version))
17310 (sha256
17311 (base32
17312 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
17313 (build-system python-build-system)
17314 (home-page "https://msgpack.org/")
17315 (synopsis "Package to deserialize messages in MessagePack binary format")
17316 (description
17317 "MessagePack is an efficient binary serialization format. It lets you
17318exchange data among multiple languages like JSON. But it's faster and
17319smaller. Small integers are encoded into a single byte, and typical short
17320strings require only one extra byte in addition to the strings themselves.")
17321 (license license:asl2.0)))
17322
17323(define-public python-cattrs
17324 (package
17325 (name "python-cattrs")
17326 (version "22.1.0")
17327 (source (origin
17328 (method git-fetch) ;for tests
17329 (uri (git-reference
17330 (url "https://github.com/python-attrs/cattrs")
17331 (commit (string-append "v" version))))
17332 (file-name (git-file-name name version))
17333 (sha256
17334 (base32
17335 "1n0h25gj6zd02kqyl040xpdvg4hpy1j92716sz0rg019xjqqijqb"))))
17336 (build-system pyproject-build-system)
17337 (arguments
17338 (list
17339 #:phases
17340 #~(modify-phases %standard-phases
17341 (add-after 'unpack 'adjust-for-older-attrs
17342 ;; Our older attrs package is using the 'attr' rather than 'attrs'
17343 ;; namespace.
17344 ;; TODO: Remove after python-attrs is updated to >= 21.4.0.
17345 (lambda _
17346 (substitute* (find-files "." "\\.py$")
17347 (("from attrs\\b")
17348 "from attr"))))
17349 (replace 'check
17350 (lambda* (#:key tests? #:allow-other-keys)
17351 (when tests?
17352 ;; Do not use the 'pytest' binary as it hard-codes an older
17353 ;; python-hypothesis version near the beginning of its
17354 ;; GUIX_PYTHONPATH.
17355 (invoke "python" "-m" "pytest" "-vv" "-c" "/dev/null" "tests"
17356 "-n" (number->string (parallel-job-count))
17357 ;; This test requires orjson, which needs the maturin
17358 ;; build system and new Rust dependencies.
17359 "--ignore" "tests/test_preconf.py")))))))
17360 (native-inputs
17361 (list python-hypothesis-next
17362 python-immutables
17363 python-msgpack
17364 python-poetry-core
17365 python-pymongo ;for the bson module
17366 python-pytest
17367 python-pytest-xdist))
17368 (propagated-inputs
17369 (list python-attrs
17370 python-exceptiongroup
17371 python-typing-extensions))
17372 (home-page "https://github.com/python-attrs/cattrs")
17373 (synopsis "Python library for structuring and unstructuring data")
17374 (description "@code{cattrs} is an Python library for structuring and
17375unstructuring data. @code{cattrs} works best with @code{attrs} classes,
17376@code{dataclasses} and the usual Python collections, but other kinds of
17377classes can also be supported by manually registering converters.")
17378 (license license:expat)))
17379
17380(define-public python-cachy
17381 (package
17382 (name "python-cachy")
17383 (version "0.3.0")
17384 (source
17385 (origin
17386 (method url-fetch)
17387 (uri (pypi-uri "cachy" version))
17388 (sha256
17389 (base32
17390 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
17391 (build-system python-build-system)
17392 (arguments
17393 '(#:phases
17394 (modify-phases %standard-phases
17395 (replace 'check
17396 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
17397 "pytest"))))))
17398 (native-inputs
17399 (list memcached python-fakeredis python-flexmock python-pifpaf
17400 python-pytest))
17401 (propagated-inputs
17402 (list python-memcached python-msgpack-python python-redis))
17403 (home-page "https://github.com/sdispater/cachy")
17404 (synopsis "Simple yet effective caching library")
17405 (description
17406 "Cachy provides a simple yet effective caching library. A simple but
17407powerful API: thread-safety; decorator syntax; support for memcached, redis,
17408database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
17409 (license license:expat)))
17410
17411(define-public poetry
17412 (package
17413 (name "poetry")
17414 (version "1.1.12")
17415 (source
17416 (origin
17417 (method url-fetch)
17418 (uri (pypi-uri "poetry" version))
17419 (sha256
17420 (base32
17421 "0rr54mvcfcv9cv6vw2122y28xvd2pwqpv2x8c8j5ayz3gwsy4rjw"))))
17422 (build-system python-build-system)
17423 (arguments
17424 `(#:tests? #f ;PyPI does not have tests
17425 #:phases
17426 (modify-phases %standard-phases
17427 (add-before 'build 'patch-setup-py
17428 (lambda _
17429 (substitute* "setup.py"
17430 ;; Relax some of the requirements.
17431 (("(keyring>=21.2.0),<22.0.0" _ keyring) keyring)
17432 (("(packaging>=20.4),<21.0" _ packaging) packaging)))))))
17433 (propagated-inputs
17434 (list python-cachecontrol
17435 python-cachy
17436 python-cleo
17437 python-crashtest
17438 python-entrypoints
17439 python-html5lib
17440 python-keyring
17441 ; Use of deprecated version of msgpack reported upstream:
17442 ; https://github.com/python-poetry/poetry/issues/3607
17443 python-msgpack-transitional
17444 python-packaging
17445 python-pexpect
17446 python-pip
17447 python-pkginfo
17448 python-poetry-core
17449 python-requests
17450 python-requests-toolbelt
17451 python-shellingham
17452 python-tomlkit
17453 python-virtualenv))
17454 (home-page "https://python-poetry.org")
17455 (synopsis "Python dependency management and packaging made easy")
17456 (description "Poetry is a tool for dependency management and packaging
17457in Python. It allows you to declare the libraries your project depends on and
17458it will manage (install/update) them for you.")
17459 (license license:expat)))
17460
17461(define-public python-lark-parser
17462 (package
17463 (name "python-lark-parser")
17464 (version "0.9.0")
17465 (source (origin
17466 (method url-fetch)
17467 (uri (pypi-uri "lark-parser" version))
17468 (sha256
17469 (base32
17470 "1kd61asrb3h9spgsj4bslfbgp8q4271sw3hblk6f2vbbblv8jxcy"))))
17471 (build-system python-build-system)
17472 (home-page "https://github.com/lark-parser/lark")
17473 (synopsis "Multi-language parser for Python")
17474 (description
17475 "Lark is a parser built with a focus on ergonomics, performance and
17476resilience. Lark can parse all context-free languages. That means it is
17477capable of parsing almost any programming language out there, and to
17478some degree most natural languages too.")
17479 (license license:expat)))
17480
17481(define-public python-libcst
17482 (package
17483 (name "python-libcst")
17484 (version "0.3.8")
17485 (source (origin
17486 (method url-fetch)
17487 (uri (pypi-uri "libcst" version))
17488 (sha256
17489 (base32
17490 "05zsc61gsd2pyb6wiyh58zczndxi6rm4d2jl94rpf5cv1fzw6ks8"))))
17491 (build-system python-build-system)
17492 (arguments
17493 `(#:phases
17494 (modify-phases %standard-phases
17495 (add-after 'unpack 'remove-failing-tests
17496 (lambda _
17497 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/346>.
17498 (delete-file "libcst/tests/test_fuzz.py")
17499 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/347>.
17500 (delete-file "libcst/tests/test_pyre_integration.py")
17501 (delete-file "libcst/codemod/tests/test_codemod_cli.py")
17502 (delete-file "libcst/metadata/tests/test_full_repo_manager.py")
17503 (delete-file "libcst/metadata/tests/test_type_inference_provider.py")))
17504 (add-before 'check 'generate-test-data
17505 (lambda _
17506 (invoke "python" "-m" "libcst.codegen.generate" "visitors")
17507 (invoke "python" "-m" "libcst.codegen.generate" "return_types")))
17508 (replace 'check
17509 (lambda* (#:key tests? #:allow-other-keys)
17510 (when tests?
17511 (invoke "python" "-m" "unittest")))))))
17512 (native-inputs
17513 (list python-black python-isort))
17514 (propagated-inputs
17515 (list python-typing-extensions python-typing-inspect python-pyyaml))
17516 (home-page "https://github.com/Instagram/LibCST")
17517 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
17518 (description
17519 "LibCST parses Python source code as a CST tree that keeps all
17520formatting details (comments, whitespaces, parentheses, etc). It's useful
17521for building automated refactoring (codemod) applications and linters.
17522LibCST creates a compromise between an Abstract Syntax Tree (AST) and
17523a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
17524naming node types and fields, LibCST creates a lossless CST that looks and
17525feels like an AST.")
17526 (license (list license:expat
17527 ;; Some files unde libcst/_parser/ are under Python Software
17528 ;; Foundation license (see LICENSE file for details)
17529 license:psfl
17530 ;; libcst/_add_slots.py
17531 license:asl2.0))))
17532
17533(define-public python-libcst-minimal
17534 (hidden-package
17535 (package
17536 (inherit python-libcst)
17537 (name "python-libcst-minimal")
17538 (arguments '(#:tests? #f))
17539 (native-inputs '()))))
17540
17541(define-public python-typing-inspect
17542 (package
17543 (name "python-typing-inspect")
17544 (version "0.6.0")
17545 (source (origin
17546 (method url-fetch)
17547 (uri (pypi-uri "typing_inspect" version))
17548 (sha256
17549 (base32
17550 "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))
17551 (patches (search-patches "python-typing-inspect-fix.patch"))))
17552 (build-system python-build-system)
17553 (propagated-inputs
17554 (list python-mypy-extensions python-typing-extensions))
17555 (home-page "https://github.com/ilevkivskyi/typing_inspect")
17556 (synopsis "API for inspection of types in the Python @code{typing} module")
17557 (description
17558 "The @code{typing_inspect} module defines experimental API for runtime
17559inspection of types defined in the Python standard typing module.")
17560 (license license:expat)))
17561
17562(define-public python-lazy-object-proxy
17563 (package
17564 (name "python-lazy-object-proxy")
17565 (version "1.5.1")
17566 (source (origin
17567 (method url-fetch)
17568 (uri (pypi-uri "lazy-object-proxy" version))
17569 (sha256
17570 (base32
17571 "0hwh29m9wa582ramj30p4pysckdrmki1z1b8iaaxk6mpfx2kc8wp"))))
17572 (native-inputs
17573 (list python-setuptools-scm))
17574 (build-system python-build-system)
17575 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
17576 (synopsis "Lazy object proxy for python")
17577 (description
17578 "Lazy object proxy is an object that wraps a callable but defers the call
17579until the object is actually required, and caches the result of said call.")
17580 (license license:bsd-2)))
17581
17582(define-public python-dnspython
17583 (package
17584 (name "python-dnspython")
17585 (version "2.1.0")
17586 (source (origin
17587 (method url-fetch)
17588 (uri (pypi-uri "dnspython" version ".zip"))
17589 (sha256
17590 (base32
17591 "1m0xvyby8baaxp6pfm0fgq8d2pq5dd8qm8bzfbrs009jaw5pza74"))))
17592 (build-system python-build-system)
17593 (arguments
17594 `(#:tests? #f ; XXX: requires internet access
17595 #:phases
17596 (modify-phases %standard-phases
17597 (add-after 'unpack 'patch-getprotobyname-calls
17598 ;; These calls are problematic in the build environment as there is
17599 ;; no /etc/protocols. This breaks the sanity-check phase of any
17600 ;; package depnding on this one.
17601 (lambda _
17602 (substitute* "dns/rdtypes/IN/WKS.py"
17603 (("socket.getprotobyname\\('tcp'\\)")
17604 "6")
17605 (("socket.getprotobyname\\('udp'\\)")
17606 "17")))))))
17607 (native-inputs (list unzip))
17608 (home-page "https://www.dnspython.org")
17609 (synopsis "DNS toolkit for Python")
17610 (description
17611 "dnspython is a DNS toolkit for Python. It supports almost all record
17612types. It can be used for queries, zone transfers, and dynamic updates.
17613It supports TSIG authenticated messages and EDNS0.")
17614 (license license:expat)))
17615
17616(define-public python-dnspython-1.16
17617 (package
17618 (inherit python-dnspython)
17619 (version "1.16.0")
17620 (source (origin
17621 (method url-fetch)
17622 (uri (string-append "http://www.dnspython.org/kits/"
17623 version "/dnspython-" version ".tar.gz"))
17624 (sha256
17625 (base32
17626 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
17627 (native-inputs '())))
17628
17629(define-public python-py3dns
17630 (package
17631 (name "python-py3dns")
17632 (version "3.2.1")
17633 (source
17634 (origin
17635 (method url-fetch)
17636 (uri (pypi-uri "py3dns" version))
17637 (sha256
17638 (base32
17639 "1r25f0ys5p37bhld7m7n4gb0lrysaym3w318w2f8bncq7r3d81qz"))))
17640 (build-system python-build-system)
17641 ;; This package wants to read /etc/resolv.conf. We can't patch it without
17642 ;; removing functionality so we copy from Nix and "just don't build it".
17643 (arguments
17644 `(#:phases
17645 (modify-phases %standard-phases
17646 (add-after 'unpack 'patch-source
17647 (lambda _
17648 (substitute* "setup.py"
17649 (("import DNS") "")
17650 (("DNS.__version__") (string-append "\"" ,version "\"")))))
17651 ;; For the same reason, drop the sanity check because the library
17652 ;; fails to load without /etc/resolv.conf.
17653 (delete 'sanity-check))
17654 #:tests? #f)) ; Also skip the tests.
17655 (home-page "https://launchpad.net/py3dns")
17656 (synopsis "Python 3 DNS library")
17657 (description "This Python 3 module provides a DNS API for looking up DNS
17658entries from within Python 3 modules and applications. This module is a
17659simple, lightweight implementation.")
17660 (license license:psfl)))
17661
17662(define-public python-email-validator
17663 (package
17664 (name "python-email-validator")
17665 (version "1.0.2")
17666 (source
17667 (origin (method url-fetch)
17668 (uri (pypi-uri "email_validator" version))
17669 (sha256
17670 (base32
17671 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
17672 (build-system python-build-system)
17673 (arguments
17674 '(#:phases
17675 (modify-phases %standard-phases
17676 (add-before 'build 'use-dnspython
17677 (lambda _
17678 (substitute* "setup.py"
17679 (("dnspython3") "dnspython"))
17680 #t)))))
17681 (propagated-inputs
17682 (list python-dnspython python-idna))
17683 (home-page "https://github.com/JoshData/python-email-validator")
17684 (synopsis "Email address validation library for Python")
17685 (description
17686 "This library validates email address syntax and deliverability.")
17687 (license license:cc0)))
17688
17689(define-public python-ukpostcodeparser
17690 (package
17691 (name "python-ukpostcodeparser")
17692 (version "1.1.2")
17693 (source (origin
17694 (method url-fetch)
17695 (uri (pypi-uri "UkPostcodeParser" version))
17696 (sha256
17697 (base32
17698 "03jkf1ygbwq3akzbcjyjk1akc1hv2sfgx90306pq1nwklbpn80lk"))))
17699 (build-system python-build-system)
17700 (arguments
17701 `(#:phases
17702 (modify-phases %standard-phases
17703 (replace 'check
17704 (lambda* (#:key tests? #:allow-other-keys)
17705 (when tests?
17706 ;; Tests for lowercase postcodes fail.
17707 (invoke "pytest" "-vv" "ukpostcodeparser/test/parser.py" "-k"
17708 (string-append "not test_091 "
17709 "and not test_097 "
17710 "and not test_098 "
17711 "and not test_125 "
17712 "and not test_131"))))))))
17713 (native-inputs
17714 (list python-pytest))
17715 (home-page "https://github.com/hamstah/ukpostcodeparser")
17716 (synopsis "UK Postcode parser for Python")
17717 (description
17718 "This library provides the @code{parse_uk_postcode} function for
17719parsing UK postcodes.")
17720 (license license:expat)))
17721
17722(define-public python-faker
17723 (package
17724 (name "python-faker")
17725 (version "13.3.4")
17726 (source (origin
17727 (method url-fetch)
17728 (uri (pypi-uri "Faker" version))
17729 (sha256
17730 (base32
17731 "04855dqvvi2mr739l5x3qf82rxq0a7spc8gl76k8xixmbw36328q"))))
17732 (build-system python-build-system)
17733 (arguments
17734 '(#:phases
17735 (modify-phases %standard-phases
17736 (replace 'check
17737 (lambda* (#:key tests? #:allow-other-keys)
17738 (when tests?
17739 (invoke "python" "-m" "pytest" "-v")))))))
17740 (native-inputs
17741 (list python-freezegun
17742 python-pytest
17743 python-random2
17744 python-ukpostcodeparser
17745 python-validators))
17746 (propagated-inputs (list python-dateutil))
17747 (home-page "https://github.com/joke2k/faker")
17748 (synopsis "Python package that generates fake data")
17749 (description
17750 "Faker is a Python package that generates fake data such as names,
17751addresses, and phone numbers.")
17752 (license license:expat)))
17753
17754(define-public python-pyaml
17755 (package
17756 (name "python-pyaml")
17757 (version "21.10.1")
17758 (source (origin
17759 (method url-fetch)
17760 (uri (pypi-uri "pyaml" version))
17761 (sha256
17762 (base32
17763 "10w3frzqir5sbpglc9bwb8w414dsivmcvji07yxy61mz2gp9ylf6"))))
17764 (build-system python-build-system)
17765 (native-inputs
17766 (list python-unidecode))
17767 (propagated-inputs
17768 (list python-pyyaml))
17769 (home-page "https://github.com/mk-fg/pretty-yaml")
17770 (synopsis "YAML pretty-print library for Python")
17771 (description
17772 "pyaml is a PyYAML based python module to produce pretty and readable
17773YAML-serialized data.")
17774 (license license:wtfpl2)))
17775
17776(define-public python-pyyaml-env-tag
17777 (package
17778 (name "python-pyyaml-env-tag")
17779 (version "0.1")
17780 (source
17781 (origin
17782 (method url-fetch)
17783 (uri (pypi-uri "pyyaml_env_tag" version))
17784 (sha256
17785 (base32 "1nsva88jsmwn0cb9jnrfiz4dvs9xakkpgfii7g1xwkx1pmsjc2bh"))))
17786 (build-system python-build-system)
17787 (propagated-inputs (list python-pyyaml))
17788 (home-page "https://github.com/waylan/pyyaml-env-tag")
17789 (synopsis "Custom YAML tag for environment variables")
17790 (description "This package provides a custom YAML tag for referencing
17791environment variables in YAML files.")
17792 (license license:expat)))
17793
17794(define-public python-backpack
17795 (package
17796 (name "python-backpack")
17797 (version "0.1")
17798 (source
17799 (origin
17800 (method url-fetch)
17801 (uri (pypi-uri "backpack" version))
17802 (sha256
17803 (base32
17804 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
17805 (build-system python-build-system)
17806 (native-inputs
17807 (list python-pytest python-nose python-toml))
17808 (propagated-inputs
17809 (list python-simplejson))
17810 (home-page "https://github.com/sdispater/backpack")
17811 (synopsis "Utilities for working with Python collections")
17812 (description "Backpack provides some useful utilities for working with
17813collections of data.")
17814 (license license:expat)))
17815
17816(define-public python-prompt-toolkit
17817 (package
17818 (name "python-prompt-toolkit")
17819 (version "3.0.29")
17820 (source
17821 (origin
17822 (method url-fetch)
17823 (uri (pypi-uri "prompt_toolkit" version))
17824 (sha256
17825 (base32 "19vf5cahp3imdpwhgvk55g3dvqmc6ga175r4vkq79kffx1h0yr5x"))))
17826 (build-system python-build-system)
17827 (arguments
17828 `(#:phases
17829 (modify-phases %standard-phases
17830 (replace 'check
17831 (lambda* (#:key tests? #:allow-other-keys)
17832 (when tests?
17833 ;; HOME is needed for the test
17834 ;; "test_pathcompleter_can_expanduser".
17835 (setenv "HOME" "/tmp")
17836 (invoke "pytest" "-vv")))))))
17837 (propagated-inputs
17838 (list python-wcwidth))
17839 (native-inputs
17840 (list python-pytest))
17841 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
17842 (synopsis "Library for building command line interfaces in Python")
17843 (description
17844 "Prompt-Toolkit is a library for building interactive command line
17845interfaces in Python. It's like GNU Readline but it also features syntax
17846highlighting while typing, out-of-the-box multi-line input editing, advanced
17847code completion, incremental search, support for Chinese double-width
17848characters, mouse support, and auto suggestions.")
17849 (license license:bsd-3)))
17850
17851(define-public python-proselint
17852 (package
17853 (name "python-proselint")
17854 (version "0.13.0")
17855 (source
17856 (origin
17857 (method url-fetch)
17858 (uri (pypi-uri "proselint" version))
17859 (sha256
17860 (base32
17861 "0n1ahnq2mkgvh94g05xhc3l1fs3hh0ycskqlqivhhfdaq8ybdlkx"))))
17862 (build-system python-build-system)
17863 (arguments
17864 `(#:tests? #f
17865 #:phases
17866 (modify-phases %standard-phases
17867 (add-after 'unpack 'set-home-directory
17868 (lambda _
17869 (setenv "HOME" "/tmp"))))))
17870 (propagated-inputs
17871 (list python-click python-future python-six))
17872 (home-page "https://github.com/amperser/proselint")
17873 (synopsis "Linter for prose")
17874 (description "@code{python-proselint} is a linter for English prose, that
17875scans through a file and detects issues.")
17876 (license license:bsd-3)))
17877
17878(define-public python-jedi
17879 (package
17880 (name "python-jedi")
17881 (version "0.18.1")
17882 (source
17883 (origin
17884 (method git-fetch)
17885 (uri (git-reference
17886 (url "https://github.com/davidhalter/jedi")
17887 (commit (string-append "v" version))
17888 (recursive? #true)))
17889 (file-name (git-file-name name version))
17890 (sha256
17891 (base32
17892 "07drmi3ai49jw5n23ibkambcgijqcw073ihypjgxfnks5lv4yqy1"))
17893 (modules '((guix build utils)))
17894 (snippet
17895 ;; Adjust comprehension syntax for Python > 3.8.
17896 ;; From <https://github.com/davidhalter/jedi/issues/1824>.
17897 '(substitute* "test/completion/lambdas.py"
17898 (("if lambda: 3")
17899 "if (lambda: 3)")))))
17900 (build-system python-build-system)
17901 (arguments
17902 `(#:phases
17903 (modify-phases %standard-phases
17904 (add-after 'unpack 'fix-completion-test
17905 (lambda _
17906 ;; This resolves a failure in the 'test_completion' test (see:
17907 ;; https://github.com/davidhalter/jedi/issues/1824).
17908 ;; TODO: Remove after a new release is made (currently: 0.18.1).
17909 (substitute* "test/completion/lambdas.py"
17910 (("\\[a for a in \\[1,2\\] if lambda: 3\\]\\[0\\]")
17911 "[a for a in [1,2] if (lambda: 3)][0]"))))
17912 (replace 'check
17913 (lambda* (#:key tests? #:allow-other-keys)
17914 (when tests?
17915 (setenv "HOME" "/tmp")
17916 (invoke "python" "-m" "pytest" "-vv")))))))
17917 (native-inputs
17918 (list python-colorama python-docopt python-pytest))
17919 (propagated-inputs
17920 (list python-parso))
17921 (home-page "https://github.com/davidhalter/jedi")
17922 (synopsis "Autocompletion and static analysis library for Python")
17923 (description
17924 "Jedi is a static analysis tool for Python that can be used in Integrated
17925Development Environments (@dfn{IDE}s) and text editors. It understands Python
17926on a deeper level than many other static analysis frameworks for Python.
17927
17928Jedi understands docstrings and you can use Jedi autocompletion in your REPL
17929as well.")
17930 (license license:expat)))
17931
17932(define-public ptpython
17933 (package
17934 (name "ptpython")
17935 (version "3.0.20")
17936 (source (origin
17937 (method url-fetch)
17938 (uri (pypi-uri "ptpython" version))
17939 (sha256
17940 (base32
17941 "1mjfyr5gwrs1qbizh6nki0nv6hahmg8mhhqxi1qc6pfa4znlrzga"))))
17942 (build-system python-build-system)
17943 (arguments
17944 `(#:tests? #f)) ;there are no tests
17945 (propagated-inputs
17946 (list python-appdirs python-black python-jedi python-prompt-toolkit
17947 python-pygments))
17948 (home-page "https://github.com/jonathanslenders/ptpython")
17949 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
17950 (description
17951 "ptpython is a Python read-eval-print loop with IDE-like features.
17952It supports syntax highlighting, multiline editing, autocompletion, mouse,
17953color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
17954etc.")
17955 (license license:bsd-3)))
17956
17957(define-public python-easyprocess
17958 (package
17959 (name "python-easyprocess")
17960 (version "0.3")
17961 (source
17962 (origin
17963 (method url-fetch)
17964 (uri (pypi-uri "EasyProcess" version))
17965 (sha256
17966 (base32 "115rzzr0hx4af4m6krf7dxn8851n4l8jfxahjzjc2r0zq2m8v57v"))))
17967 (build-system python-build-system)
17968 (arguments
17969 ;; Tests require pyvirtualdisplay, which requires this package.
17970 `(#:tests? #f))
17971 (home-page "https://github.com/ponty/easyprocess")
17972 (synopsis "Python subprocess interface")
17973 (description
17974 "@code{easyprocess} is an easy to use Python subprocess interface.")
17975 (license license:bsd-3)))
17976
17977(define-public python-entrypoint2
17978 (package
17979 (name "python-entrypoint2")
17980 (version "0.2.4")
17981 (source
17982 (origin
17983 (method url-fetch)
17984 (uri (pypi-uri "entrypoint2" version))
17985 (sha256
17986 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
17987 (build-system python-build-system)
17988 (arguments
17989 `(#:test-target "pytest"))
17990 (native-inputs
17991 (list python-easyprocess python-pytest python-pytest-runner))
17992 (home-page "https://github.com/ponty/entrypoint2")
17993 (synopsis "Command-line interface for Python modules")
17994 (description
17995 "@code{entrypoint2} is an easy to use command-line interface for Python
17996 modules based on @code{argparse}. It translates function signature and
17997 documentation to argparse configuration.")
17998 (license license:bsd-3)))
17999
18000(define-public python-pyvirtualdisplay
18001 (package
18002 (name "python-pyvirtualdisplay")
18003 (version "2.1")
18004 (source
18005 (origin
18006 (method url-fetch)
18007 (uri (pypi-uri "PyVirtualDisplay" version))
18008 (sha256
18009 (base32 "1z2fzgiw3xv3m1d9ppn53g07zhnpj05addiz56sm6ircxibnjk4x"))))
18010 (build-system python-build-system)
18011 (arguments
18012 ;; Tests fail with:
18013 ;; FileNotFoundError: [Errno 2] No such file or directory: 'Xvnc'.
18014 `(#:tests? #f))
18015 (native-inputs
18016 (list python-entrypoint2 python-psutil python-pytest
18017 python-pytest-runner))
18018 (propagated-inputs
18019 (list python-easyprocess python-pillow))
18020 (home-page "https://github.com/ponty/pyvirtualdisplay")
18021 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
18022 (description
18023 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
18024 (license license:bsd-3)))
18025
18026(define-public python-stem
18027 (package
18028 (name "python-stem")
18029 (version "1.8.0")
18030 (source
18031 (origin
18032 (method url-fetch)
18033 (uri (pypi-uri "stem" version))
18034 (sha256
18035 (base32
18036 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
18037 (build-system python-build-system)
18038 (arguments
18039 `(#:phases
18040 (modify-phases %standard-phases
18041 (add-after 'unpack 'fix-tests
18042 ;; See https://github.com/torproject/stem/issues/56
18043 (lambda _
18044 (substitute* "run_tests.py"
18045 (("test\\.task\\.MOCK_VERSION,")
18046 ""))))
18047 (replace 'check
18048 (lambda _
18049 (invoke "./run_tests.py" "--unit")
18050 #t)))))
18051 (native-inputs
18052 (list python-mock python-pycodestyle python-pyflakes))
18053 (home-page "https://stem.torproject.org/")
18054 (synopsis
18055 "Python controller library that allows applications to interact with Tor")
18056 (description
18057 "Stem is a Python controller library for Tor. With it you can use Tor's
18058 control protocol to script against the Tor process and read descriptor data
18059 relays publish about themselves.")
18060 (license license:lgpl3)))
18061
18062(define-public python-pyserial
18063 (package
18064 (name "python-pyserial")
18065 (version "3.5")
18066 (source
18067 (origin
18068 (method url-fetch)
18069 (uri (pypi-uri "pyserial" version))
18070 (sha256
18071 (base32
18072 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
18073 (build-system python-build-system)
18074 (arguments
18075 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
18076 ;; #:phases
18077 ;; (modify-phases %standard-phases
18078 ;; (replace 'check
18079 ;; (lambda _
18080 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
18081 (home-page
18082 "https://github.com/pyserial/pyserial")
18083 (synopsis "Python Serial Port Bindings")
18084 (description "@code{pyserial} provide serial port bindings for Python. It
18085 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
18086 and/or Xon/Xoff. The port is accessed in RAW mode.")
18087 (license license:bsd-3)))
18088
18089(define-public python-pyserial-asyncio
18090 (package
18091 (name "python-pyserial-asyncio")
18092 (version "0.5")
18093 (source
18094 (origin
18095 (method url-fetch)
18096 (uri (pypi-uri "pyserial-asyncio" version))
18097 (sha256
18098 (base32 "0cwd2cjz859v6jrm3y6hikfqjyhyfj5vhfjb8vvflvl6791yah8n"))))
18099 (build-system python-build-system)
18100 (propagated-inputs (list python-pyserial))
18101 (home-page "https://github.com/pyserial/pyserial-asyncio")
18102 (synopsis "Pyserial asynchronous I/O extension")
18103 (description "This package extends Pyserial with asynchronous I/O
18104 support.")
18105 (license license:bsd-3)))
18106
18107(define-public python-pymodbus
18108 (package
18109 (name "python-pymodbus")
18110 (version "2.5.3")
18111 (source
18112 (origin
18113 (method git-fetch)
18114 (uri (git-reference
18115 (url "https://github.com/riptideio/pymodbus")
18116 (commit (string-append "v" version))))
18117 (file-name (git-file-name name version))
18118 (sha256
18119 (base32
18120 "0kjjrx7xrlx0pf3y67hhr4xvqrly3xzmvf6ic5as61m6z19m7zd5"))))
18121 (build-system python-build-system)
18122 (arguments
18123 `(#:phases (modify-phases %standard-phases
18124 (add-after 'unpack 'disable-problematic-tests
18125 (lambda _
18126 ;; The following test modules rely on Python's own
18127 ;; 'test' module, which is not distributed in the Python
18128 ;; package of Guix.
18129 (delete-file "test/test_client_async_asyncio.py")
18130 (delete-file "test/test_client_sync_diag.py")
18131 ;; The following test module requires the asynctest
18132 ;; library, abandoned without support for Python 3.9+
18133 ;; (see:
18134 ;; https://github.com/riptideio/pymodbus/issues/681).
18135 (delete-file "test/test_server_asyncio.py")))
18136 (replace 'check
18137 (lambda* (#:key tests? #:allow-other-keys)
18138 (when tests?
18139 (invoke "python" "-m" "pytest")))))))
18140 (native-inputs
18141 (list python-mock
18142 python-pytest
18143 python-redis
18144 python-sqlalchemy
18145 python-tornado
18146 python-twisted))
18147 (propagated-inputs
18148 (list python-pyserial
18149 python-six
18150 ;; For the REPL.
18151 python-aiohttp
18152 python-click
18153 python-prompt-toolkit
18154 python-pygments
18155 python-pyserial-asyncio))
18156 (home-page "https://github.com/riptideio/pymodbus/")
18157 (synopsis "Modbus protocol stack in Python")
18158 (description "Pymodbus is a full Modbus protocol implementation using
18159 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
18160 communications core. It includes the following @emph{client} features:
18161 @itemize
18162 @item full read/write protocol on discrete and register
18163 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
18164 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
18165 @item asynchronous and synchronous versions
18166 @item payload builder/decoder utilities
18167 @item pymodbus read eval print loop (REPL).
18168 @end itemize
18169 It also includes the following @emph{server} features:
18170 @itemize
18171 @item can function as a fully implemented Modbus server
18172 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
18173 @item asynchronous and synchronous versions
18174 @item full server control context (device information, counters, etc)
18175 @item a number of backing contexts (database, redis, sqlite, a slave device).
18176 @end itemize")
18177 (license license:bsd-3)))
18178
18179(define-public python-exodriver
18180 (package
18181 (name "python-exodriver")
18182 (version "2.6.0")
18183 (source (origin
18184 (method git-fetch)
18185 (uri (git-reference
18186 (url "https://github.com/labjack/exodriver")
18187 (commit (string-append "v" version))))
18188 (file-name (git-file-name name version))
18189 (sha256
18190 (base32
18191 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
18192 (outputs (list "out"
18193 "doc")) ;544 KiB of examples
18194 (build-system gnu-build-system)
18195 (arguments
18196 (list
18197 #:tests? #f ;no test suite
18198 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
18199 (string-append "PREFIX=" #$output)
18200 "RUN_LDCONFIG=0"
18201 "LINK_SO=1")
18202 #:phases
18203 #~(modify-phases %standard-phases
18204 (delete 'configure)
18205 (replace 'build
18206 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
18207 (with-directory-excursion "liblabjackusb"
18208 (apply (assoc-ref %standard-phases 'build)
18209 `(,@args #:make-flags ,make-flags)))))
18210 (replace 'install
18211 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
18212 (with-directory-excursion "liblabjackusb"
18213 (apply (assoc-ref %standard-phases 'install)
18214 `(,@args #:make-flags ,make-flags)))
18215 ;; Install udev rules.
18216 (install-file "90-labjack.rules"
18217 (string-append #$output "/lib/udev/rules.d"))
18218 ;; Install examples.
18219 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
18220 (mkdir-p doc)
18221 (copy-recursively "examples"
18222 (string-append doc "/examples"))))))))
18223 (inputs (list libusb))
18224 (home-page "https://github.com/labjack/exodriver")
18225 (synopsis "USB driver for LabJack data acquisition instruments")
18226 (description "This package provides @code{liblabjackusb}, a USB library for low-level
18227communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
18228instruments. A udev rule is also included to allow unprivileged users to
18229communicate with the instruments via USB.")
18230 (license license:expat))) ;see README
18231
18232(define-public python-labjack
18233 (package
18234 (name "python-labjack")
18235 (version "2.0.4")
18236 (source (origin
18237 (method url-fetch)
18238 (uri (pypi-uri "LabJackPython" version))
18239 (sha256
18240 (base32
18241 "013bjqdi05vlbdqprr6kqi8gs4qhqc7rnyp1klw8k6fng77rpdzz"))))
18242 (build-system python-build-system)
18243 (arguments
18244 (list
18245 #:tests? #f ;no test suite
18246 #:phases
18247 #~(modify-phases %standard-phases
18248 (add-after 'unpack 'patch-liblabjackusb.so
18249 (lambda* (#:key inputs #:allow-other-keys)
18250 (substitute* (find-files "." "\\.py$")
18251 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
18252 (format #f "ctypes.CDLL(~s"
18253 (search-input-file inputs
18254 "lib/liblabjackusb.so")))))))))
18255 ;; exodriver is provided as a regular input, as only its shared object is
18256 ;; used, not its Python API.
18257 (inputs (list python-exodriver))
18258 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
18259 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
18260 (description "This Python library allows communicating with the U3, U6,
18261UE9 and U12 LabJack data acquisition (DAQ) modules.")
18262 (license license:expat))) ;see setup.py
18263
18264(define-public python-kivy-garden
18265 (package
18266 (name "python-kivy-garden")
18267 (version "0.1.4")
18268 (source
18269 (origin
18270 (method url-fetch)
18271 (uri (pypi-uri "kivy-garden" version))
18272 (sha256
18273 (base32 "0wkcpr2zc1q5jb0bi7v2dgc0vs5h1y7j42mviyh764j2i0kz8mn2"))))
18274 (build-system python-build-system)
18275 (arguments
18276 '(#:phases (modify-phases %standard-phases
18277 (add-after 'install 'remove-bat-file
18278 (lambda* (#:key outputs #:allow-other-keys)
18279 (let ((out (assoc-ref outputs "out")))
18280 (delete-file
18281 (string-append out "/bin/garden.bat"))))))))
18282 (propagated-inputs
18283 (list python-requests))
18284 (home-page "https://github.com/kivy-garden/garden")
18285 (synopsis "Garden tool for Kivy flowers")
18286 (description
18287 "This package provides the @command{garden} command to install packages
18288for Kivy, the multitouch application platform.")
18289 (license license:expat)))
18290
18291(define-public python-kivy
18292 (package
18293 (name "python-kivy")
18294 (version "2.1.0")
18295 (source
18296 (origin
18297 (method url-fetch)
18298 (uri (pypi-uri "Kivy" version))
18299 (file-name (string-append name "-" version ".tar.gz"))
18300 (sha256
18301 (base32
18302 "1cq4djfn7h8560mvz94dydsldg2jpp5w9rby7nafgmbh7fxg65is"))))
18303 (build-system python-build-system)
18304 (arguments
18305 `(#:tests? #f ; Tests require many optional packages
18306 #:phases
18307 (modify-phases %standard-phases
18308 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
18309 (lambda* (#:key inputs #:allow-other-keys)
18310 (setenv "KIVY_SDL2_PATH"
18311 (search-input-directory inputs "/include/SDL2"))))
18312 (add-before 'build 'set-home
18313 (lambda _
18314 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
18315 (setenv "HOME" (getcwd)))))))
18316 (native-inputs
18317 (list pkg-config python-cython))
18318 (inputs
18319 (list gstreamer
18320 mesa
18321 (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
18322 python-docutils
18323 python-kivy-garden
18324 python-pygments))
18325 (home-page "https://kivy.org")
18326 (synopsis "Multitouch application framework")
18327 (description
18328 "Kivy is a software library for rapid development of hardware-accelerated
18329multitouch applications.")
18330 (license license:expat)))
18331
18332(define-public python-kivymd
18333 (package
18334 (name "python-kivymd")
18335 (version "0.104.2")
18336 (source
18337 (origin
18338 (method url-fetch)
18339 (uri (pypi-uri "kivymd" version))
18340 (sha256
18341 (base32 "04lwy6j0agrdwa4a6dl6qs97nx9ysmscmm8psvdzjpyj8aa1zg4p"))))
18342 (build-system python-build-system)
18343 (arguments
18344 `(#:tests? #f ;tests require network
18345 #:phases
18346 (modify-phases %standard-phases
18347 (add-before 'sanity-check 'set-home
18348 (lambda _
18349 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
18350 (setenv "HOME" (getcwd)))))))
18351 (native-inputs (list python-docutils))
18352 (propagated-inputs
18353 (list python-kivy python-pillow python-pygments python-kivy-garden))
18354 (home-page "https://github.com/kivymd/KivyMD")
18355 (synopsis "Material Design compliant widgets for use with Kivy")
18356 (description
18357 "This package provides Kivy widgets that approximate Google's Material
18358Design spec without sacrificing ease of use or application performance.")
18359 (license license:expat)))
18360
18361(define-public python-asynckivy
18362 (package
18363 (name "python-asynckivy")
18364 (version "0.5.3")
18365 (source
18366 (origin
18367 (method url-fetch)
18368 (uri
18369 (pypi-uri "asynckivy" version))
18370 (sha256
18371 (base32 "0ivjvch8yn3k1ybfp7c1nm8mhc0ymg7d04mq54lly7yjvg0jvcni"))))
18372 (build-system python-build-system)
18373 (arguments
18374 `(#:phases
18375 (modify-phases %standard-phases
18376 (add-before 'check 'set-home
18377 (lambda _
18378 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
18379 (setenv "HOME" (getcwd)))))))
18380 (propagated-inputs (list python-kivy python-asyncgui))
18381 (home-page "https://github.com/gottadiveintopython/asynckivy")
18382 (synopsis "Async library for Kivy")
18383 (description
18384 "This package provides async versions of Kivy functions to avoid the
18385callback-heavy mode of interaction typical in some Kivy applications.")
18386 (license license:expat)))
18387
18388(define-public python-asyncgui
18389 (package
18390 (name "python-asyncgui")
18391 (version "0.5.3")
18392 (source (origin
18393 (method url-fetch)
18394 (uri (pypi-uri "asyncgui" version))
18395 (sha256
18396 (base32
18397 "0614130afg2qc1qq4p82piskvvx6lpjl4nlsakbjzdyd78xywnb7"))))
18398 (build-system python-build-system)
18399 (home-page "https://github.com/gottadiveintopython/asyncgui")
18400 (synopsis "Enables async/await without an event loop")
18401 (description "This package provides support for async/await applications
18402without requiring an event loop, useful for creative responsive GUIs.")
18403 (license license:expat)))
18404
18405(define-public python-binaryornot
18406 (package
18407 (name "python-binaryornot")
18408 (version "0.4.4")
18409 (source (origin
18410 (method url-fetch)
18411 (uri (pypi-uri "binaryornot" version))
18412 (sha256
18413 (base32
18414 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
18415 (build-system python-build-system)
18416 (arguments
18417 `(#:phases
18418 (modify-phases %standard-phases
18419 (add-after 'unpack 'patch-tests
18420 (lambda _
18421 ;; TypeError: binary() got an unexpected keyword argument
18422 ;; 'average_size'.
18423 (substitute* "tests/test_check.py"
18424 (("average_size=512") ""))
18425 #t)))))
18426 (propagated-inputs
18427 (list python-chardet python-hypothesis))
18428 (home-page "https://github.com/audreyr/binaryornot")
18429 (synopsis "Package to check if a file is binary or text")
18430 (description "Ultra-lightweight pure Python package to check if a file is
18431 binary or text.")
18432 (license license:bsd-3)))
18433
18434(define-public binwalk
18435 (package
18436 (name "binwalk")
18437 (version "2.3.3")
18438 (source
18439 (origin
18440 (method git-fetch)
18441 (uri (git-reference
18442 (url "https://github.com/ReFirmLabs/binwalk")
18443 (commit (string-append "v" version))))
18444 (file-name (git-file-name name version))
18445 (sha256
18446 (base32 "0phqyqv34vhh80dgipiggs4n3iq2vfjk9ywx2c5d8g61vzgbd2g8"))
18447 (modules '((guix build utils)))
18448 (snippet
18449 #~(begin
18450 (for-each delete-file
18451 (list "testing/tests/input-vectors/firmware.zip"
18452 "testing/tests/test_firmware_zip.py"))))))
18453 (build-system python-build-system)
18454 (arguments
18455 `(#:phases
18456 (modify-phases %standard-phases
18457 (add-before 'check 'set-home
18458 (lambda _
18459 (setenv "HOME" ""))))))
18460 (native-inputs
18461 (list python-coverage python-nose))
18462 (home-page "https://github.com/ReFirmLabs/binwalk")
18463 (synopsis "Firmware analysis tool")
18464 (description "Binwalk is a tool for analyzing, reverse engineering, and
18465 extracting firmware images")
18466 (license license:expat)))
18467
18468(define-public python-binwalk
18469 (deprecated-package "python-binwalk" binwalk))
18470
18471(define-public python-bson
18472 (package
18473 (name "python-bson")
18474 (version "0.5.10")
18475 (source
18476 (origin
18477 (method git-fetch) ;for tests
18478 (uri (git-reference
18479 (url "https://github.com/py-bson/bson")
18480 (commit version)))
18481 (file-name (git-file-name name version))
18482 (sha256
18483 (base32
18484 "1vpy4rsvm3hhawvbg9rbw4j36ck8qylkhm8cjy0q6imvinkd2als"))))
18485 (build-system python-build-system)
18486 (arguments
18487 '(#:phases
18488 (modify-phases %standard-phases
18489 (replace 'check
18490 (lambda* (#:key tests? #:allow-other-keys)
18491 (when tests?
18492 (invoke "./test.py")))))))
18493 (propagated-inputs (list python-dateutil python-six))
18494 (home-page "https://github.com/py-bson/bson")
18495 (synopsis "BSON (Binary JSON) codec for Python")
18496 (description "@code{bson} is a Python library implementing a BSON (Binary
18497JSON) codec.")
18498 (license license:asl2.0)))
18499
18500(define-public python-nltk
18501 (package
18502 (name "python-nltk")
18503 (version "3.6.2")
18504 (source (origin
18505 (method url-fetch)
18506 (uri (pypi-uri "nltk" version ".zip"))
18507 (sha256
18508 (base32
18509 "1sq32lwgij9h8rsksymnxxr7bqfw3vgx5ijw4azbj6k2xnmmdmap"))))
18510 (build-system python-build-system)
18511 (arguments
18512 '(;; The tests require some extra resources to be downloaded.
18513 ;; TODO Try packaging these resources.
18514 #:tests? #f))
18515 (propagated-inputs
18516 (list python-click python-joblib python-regex python-tqdm))
18517 (native-inputs
18518 (list unzip))
18519 (home-page "http://nltk.org/")
18520 (synopsis "Natural Language Toolkit")
18521 (description "It provides interfaces to over 50 corpora and lexical
18522 resources such as WordNet, along with a suite of text processing libraries
18523 for classification, tokenization, stemming, tagging, parsing, and semantic
18524 reasoning, wrappers for natural language processing libraries.")
18525 (license license:asl2.0)))
18526
18527;; Versions >=3.5 breaks backward-compatibility,
18528;; so we keep version 3.4.x around for a while.
18529(define-public python-nltk-3.4
18530 (package
18531 (inherit python-nltk)
18532 (version "3.4.5")
18533 (source
18534 (origin
18535 (method url-fetch)
18536 (uri (pypi-uri "nltk" version ".zip"))
18537 (sha256
18538 (base32 "153x2clrnigs74jdgnn3qmljdjj4gprmvpdvh49i18ls4m8mbm5y"))))
18539 (propagated-inputs (list python-six))))
18540
18541(define-public python-pymongo
18542 (package
18543 (name "python-pymongo")
18544 (version "4.1.1")
18545 (source (origin
18546 (method url-fetch)
18547 (uri (pypi-uri "pymongo" version))
18548 (sha256
18549 (base32
18550 "1m9hc2a4kgg10xy3g5x00z4a7rrk9s0rbf5qfypwnhq0kdfg5f6p"))))
18551 (build-system python-build-system)
18552 (propagated-inputs
18553 (list python-certifi))
18554 (home-page "https://github.com/mongodb/mongo-python-driver")
18555 (synopsis "Python driver for MongoDB")
18556 (description "Python driver for MongoDB.")
18557 (license license:asl2.0)))
18558
18559(define-public python-consul
18560 (package
18561 (name "python-consul")
18562 (version "0.6.1")
18563 (source
18564 (origin
18565 (method url-fetch)
18566 (uri (pypi-uri "python-consul" version))
18567 (sha256
18568 (base32
18569 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
18570 (build-system python-build-system)
18571 (arguments
18572 '(#:tests? #f)) ; The tests are not distributed
18573 (propagated-inputs
18574 (list python-requests python-six))
18575 (home-page "https://github.com/cablehead/python-consul")
18576 (synopsis "Python client for Consul")
18577 (description
18578 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
18579 discovery, monitoring and configuration.")
18580 (license license:expat)))
18581
18582(define-public python-schematics
18583 (package
18584 (name "python-schematics")
18585 (version "1.1.1")
18586 (source
18587 (origin
18588 (method git-fetch)
18589 (uri (git-reference
18590 (url "https://github.com/schematics/schematics")
18591 (commit (string-append "v" version))))
18592 (file-name (git-file-name name version))
18593 (sha256
18594 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
18595 (build-system python-build-system)
18596 (propagated-inputs
18597 (list python-six))
18598 (arguments
18599 ;; The tests require a bunch of not very nice packages with fixed
18600 ;; version requirements (e.g. python-coveralls).
18601 `(#:tests? #f))
18602 (home-page "https://github.com/schematics/schematics")
18603 (synopsis "Python Data Structures for Humans")
18604 (description "Python Data Structures for Humans.")
18605 (license license:bsd-3)))
18606
18607(define-public python-odfpy
18608 (package
18609 (name "python-odfpy")
18610 (version "1.4.1")
18611 (source (origin
18612 (method url-fetch)
18613 (uri (pypi-uri "odfpy" version))
18614 (sha256
18615 (base32
18616 "1v1qqk9p12qla85yscq2g413l3qasn6yr4ncyc934465b5p6lxnv"))))
18617 (arguments
18618 `(#:phases
18619 (modify-phases %standard-phases
18620 (replace 'check
18621 (lambda _
18622 (invoke "pytest" "-vv"))))))
18623 (build-system python-build-system)
18624 (native-inputs
18625 (list python-pytest))
18626 (propagated-inputs
18627 (list python-defusedxml))
18628 (home-page "https://github.com/eea/odfpy")
18629 (synopsis "Python API and tools to manipulate OpenDocument files")
18630 (description "Collection of libraries and utility programs written in
18631 Python to manipulate OpenDocument 1.2 files.")
18632 (license
18633 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
18634 ;; number of files with other licenses.
18635 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
18636
18637(define-public python-natsort
18638 (package
18639 (name "python-natsort")
18640 (version "7.1.1")
18641 (source (origin
18642 (method url-fetch)
18643 (uri (pypi-uri "natsort" version))
18644 (sha256
18645 (base32
18646 "00y49bfsi7rrsd1s42gc2w95a6arl9ipdsx2493hr0v54fj07ih0"))))
18647 (build-system python-build-system)
18648 (arguments
18649 `(#:phases
18650 (modify-phases %standard-phases
18651 (add-after 'unpack 'remove-test-hypothesis-deadlines
18652 (lambda _
18653 (substitute* "tests/test_utils.py"
18654 (("from hypothesis import given")
18655 "from hypothesis import given, settings")
18656 (("( +)@given" all spaces)
18657 (string-append spaces "@settings(deadline=None)\n" all)))))
18658 (replace 'check
18659 (lambda* (#:key tests? #:allow-other-keys)
18660 (when tests?
18661 (invoke "pytest" "-v")))))))
18662 (native-inputs
18663 (list python-hypothesis python-pytest-cov python-pytest-mock
18664 python-pytest))
18665 (propagated-inputs ; TODO: Add python-fastnumbers.
18666 (list python-pyicu))
18667 (home-page "https://github.com/SethMMorton/natsort")
18668 (synopsis "Natural sorting for python and shell")
18669 (description
18670 "Natsort lets you apply natural sorting on lists instead of
18671lexicographical. If you use the built-in @code{sorted} method in python on a
18672list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
18673it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
18674@code{a9}]}. Natsort provides a function @code{natsorted} that identifies
18675numbers and sorts them separately from strings. It can also sort version
18676numbers, real numbers, mixed types and more, and comes with a shell command
18677@command{natsort} that exposes this functionality in the command line.")
18678 (license license:expat)))
18679
18680(define-public glances
18681 (package
18682 (name "glances")
18683 (version "3.1.7")
18684 (source
18685 (origin
18686 (method url-fetch)
18687 (uri (pypi-uri "Glances" version))
18688 (sha256
18689 (base32 "020vb38qrb0m3sdr7xjr43cmcfxpnyg4hmb97wgxsa9zvwsjwa5x"))
18690 (modules '((guix build utils)))
18691 (snippet
18692 '(begin
18693 ;; Glances phones PyPI for weekly update checks by default.
18694 ;; Disable these. The user can re-enable them if desired.
18695 (substitute* "glances/outdated.py"
18696 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
18697 (string-append indentation
18698 "self.args.disable_check_update = True\n"
18699 line)))
18700 #t))))
18701 (build-system python-build-system)
18702 (propagated-inputs
18703 (list python-future python-psutil))
18704 (home-page "https://github.com/nicolargo/glances")
18705 (synopsis "Cross-platform curses-based monitoring tool")
18706 (description
18707 "Glances is a curses-based monitoring tool for a wide variety of platforms.
18708 Glances uses the PsUtil library to get information from your system. It
18709 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
18710 (license license:lgpl3+)))
18711
18712(define-public python-graphql-core
18713 (package
18714 (name "python-graphql-core")
18715 (version "3.1.2")
18716 (source
18717 (origin
18718 (method url-fetch)
18719 (uri (pypi-uri "graphql-core" version))
18720 (sha256
18721 (base32
18722 "0fjv5w2wvgdr8gb27v241bavliipyir9fdz48rsgc3xapm644mn0"))))
18723 (build-system python-build-system)
18724 (arguments
18725 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
18726 #:phases
18727 (modify-phases %standard-phases
18728 (add-after 'unpack 'patch-hardcoded-version
18729 (lambda _ (substitute*
18730 "setup.py"
18731 (("'gevent==1.1rc1'") "'gevent'"))
18732 #t)))))
18733 (native-inputs
18734 (list python-gevent python-mock python-pytest-mock))
18735 (propagated-inputs
18736 (list python-promise python-six))
18737 (home-page "https://github.com/graphql-python/graphql-core")
18738 (synopsis "GraphQL implementation for Python")
18739 (description
18740 "GraphQL implementation for Python. GraphQL is a data query language and
18741 runtime designed and used to request and deliver data to mobile and web apps.
18742 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
18743 to Python.")
18744 (license license:expat)))
18745
18746(define-public python-graphql-relay
18747 (package
18748 (name "python-graphql-relay")
18749 (version "3.1.0")
18750 (source
18751 (origin
18752 (method url-fetch)
18753 (uri (pypi-uri "graphql-relay" version))
18754 (sha256
18755 (base32
18756 "1d70vwam9gjhx7fqzsa03x7lc6ivcqki5r9pk8m7rslmb7pagmbh"))))
18757 (build-system python-build-system)
18758 (arguments
18759 '(#:phases
18760 (modify-phases %standard-phases
18761 (replace 'check
18762 (lambda* (#:key tests? #:allow-other-keys)
18763 (when tests?
18764 (invoke "pytest" "tests")))))))
18765 (native-inputs
18766 (list
18767 python-pytest
18768 python-pytest-asyncio))
18769 (propagated-inputs
18770 (list python-graphql-core))
18771 (home-page "https://github.com/graphql-python/graphql-relay-py")
18772 (synopsis "Relay implementation for Python")
18773 (description
18774 "This is a library to allow the easy creation of Relay-compliant servers
18775 using the GraphQL Python reference implementation of a GraphQL server. It
18776 should be noted that the code is a exact port of the original
18777 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
18778 from Facebook.")
18779 (license license:expat)))
18780
18781(define-public python-graphene
18782 (package
18783 (name "python-graphene")
18784 (version "3.0")
18785 (source
18786 (origin
18787 (method url-fetch)
18788 (uri (pypi-uri "graphene" version))
18789 (sha256
18790 (base32
18791 "08m1n2ydk48c18cvl8474v3pwwacjl1vgq61m9qs00122mp0cj5g"))))
18792 (build-system python-build-system)
18793 (propagated-inputs
18794 (list python-graphql-core python-graphql-relay python-aniso8601
18795 python-promise python-six))
18796 (arguments
18797 `(#:tests? #f)) ; no tests/ in the PyPI tarball
18798 (home-page "https://graphene-python.org/")
18799 (synopsis "GraphQL Framework for Python")
18800 (description
18801 "Graphene is a Python library for building GraphQL schemas/types.
18802 A GraphQL schema describes your data model, and provides a GraphQL server
18803 with an associated set of resolve methods that know how to fetch data.")
18804 (license license:expat)))
18805
18806(define-public python-random2
18807 (package
18808 (name "python-random2")
18809 (version "1.0.1")
18810 (source (origin
18811 (method url-fetch)
18812 (uri (pypi-uri "random2" version ".zip"))
18813 (sha256
18814 (base32
18815 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))
18816 (patches
18817 (search-patches "python-random2-getrandbits-test.patch"))))
18818 (build-system python-build-system)
18819 (native-inputs (list unzip))
18820 (home-page "http://pypi.python.org/pypi/random2")
18821 (synopsis "Python 3 version of the Python 2 @code{random} module")
18822 (description
18823 "This package provides a Python 3 ported version of Python 2.7’s
18824 @code{random} module. It has also been back-ported to work in Python 2.6.
18825
18826 In Python 3, the implementation of @code{randrange()} was changed, so that
18827 even with the same seed you get different sequences in Python 2 and 3.
18828
18829 This package closes that gap, allowing stable random number generation
18830 between the different Python versions.")
18831 (license license:psfl)))
18832
18833(define-public python-snowballstemmer
18834 (package
18835 (name "python-snowballstemmer")
18836 (version "2.0.0")
18837 (source (origin
18838 (method url-fetch)
18839 (uri (pypi-uri "snowballstemmer" version))
18840 (sha256
18841 (base32
18842 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
18843 (build-system python-build-system)
18844 (arguments
18845 `(;; No tests exist
18846 #:tests? #f))
18847 (home-page "https://github.com/shibukawa/snowball_py")
18848 (synopsis "Snowball stemming library collection for Python")
18849 (description "This package provides 16 word stemmer algorithms generated
18850 from Snowball algorithms. It includes the 15 original ones plus the Poerter
18851 English stemmer.")
18852 (license license:bsd-3)))
18853
18854(define-public python-setproctitle
18855 (package
18856 (name "python-setproctitle")
18857 (version "1.3.2")
18858 (source
18859 (origin
18860 (method url-fetch)
18861 (uri (pypi-uri "setproctitle" version))
18862 (sha256
18863 (base32
18864 "1zbp6kyzfbrmbh9j3idai0mnpa28zn5db3k5l07jc3c3gj89gyxr"))))
18865 (build-system python-build-system)
18866 (arguments
18867 '(#:phases
18868 (modify-phases %standard-phases
18869 (replace 'check
18870 (lambda* (#:key tests? #:allow-other-keys)
18871 (setenv "PYTHON" (or (which "python3") (which "python")))
18872 (setenv "PYCONFIG" (if (which "python3-config")
18873 "python3-config --embed"
18874 "python-config"))
18875 (substitute* "tests/conftest.py"
18876 (("cc") "gcc"))
18877 (when tests?
18878 (invoke "pytest" "tests/")))))))
18879 (native-inputs
18880 (list procps python-pytest)) ; required for tests
18881 (home-page "https://github.com/dvarrazzo/py-setproctitle")
18882 (synopsis
18883 "Setproctitle implementation for Python to customize the process title")
18884 (description "The library allows a process to change its title (as displayed
18885by system tools such as @code{ps} and @code{top}).
18886
18887Changing the title is mostly useful in multi-process systems, for example when a
18888master process is forked: changing the children's title allows identifying the
18889task each process is busy with. The technique is used by PostgreSQL and the
18890OpenSSH Server for example.")
18891 (license license:bsd-3)))
18892
18893(define-public python-validictory
18894 (package
18895 (name "python-validictory")
18896 (version "1.0.1")
18897 (source
18898 (origin
18899 (method url-fetch)
18900 (uri (pypi-uri "validictory" version))
18901 (sha256
18902 (base32
18903 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
18904 (build-system python-build-system)
18905 (arguments
18906 '(#:phases
18907 (modify-phases %standard-phases
18908 (add-after 'unpack 'bootstrap
18909 ;; Move the tests out of the package directory to avoid
18910 ;; packaging them.
18911 (lambda* _
18912 (rename-file "validictory/tests" "tests")
18913 (delete-file "tests/__init__.py")))
18914 (replace 'check
18915 (lambda _
18916 (invoke "py.test" "-vv" ))))))
18917 (native-inputs
18918 (list python-pytest))
18919 (home-page
18920 "https://github.com/jamesturk/validictory")
18921 (synopsis "General purpose Python data validator")
18922 (description "It allows validation of arbitrary Python data structures.
18923
18924 The schema format is based on the JSON Schema
18925 proposal (http://json-schema.org), so combined with json the library is also
18926 useful as a validator for JSON data.")
18927 (license license:expat)))
18928
18929(define-public python-pyelftools
18930 (package
18931 (name "python-pyelftools")
18932 (version "0.28")
18933 (home-page "https://github.com/eliben/pyelftools")
18934 (source
18935 (origin
18936 (method git-fetch)
18937 (uri (git-reference (url home-page)
18938 (commit (string-append "v" version))))
18939 (file-name (git-file-name name version))
18940 (sha256
18941 (base32 "1z4fx39c9rds0bd4d2fjjq7n05b1nfxl36pmy523x8knm38l4gpr"))
18942 (snippet
18943 ;; Delete bundled readelf executable.
18944 '(delete-file "test/external_tools/readelf"))))
18945 (build-system python-build-system)
18946 (arguments
18947 '(#:phases (modify-phases %standard-phases
18948 (replace 'check
18949 (lambda* (#:key tests? #:allow-other-keys)
18950 (when tests?
18951 ;; Taken from tox.ini.
18952 (invoke "python" "test/run_all_unittests.py")
18953 (invoke "python" "test/run_examples_test.py")
18954 (invoke "python" "test/run_readelf_tests.py")))))))
18955 (synopsis
18956 "Analyze binary and library file information")
18957 (description "This Python library provides interfaces for parsing and
18958 analyzing two binary and library file formats ; the Executable and Linking
18959 Format (ELF), and debugging information in the Debugging With Attributed
18960 Record Format (DWARF).")
18961 (license license:public-domain)))
18962
18963(define-public python-pefile
18964 (package
18965 (name "python-pefile")
18966 (version "2022.5.30")
18967 (source (origin
18968 (method git-fetch)
18969 (uri (git-reference
18970 (url "https://github.com/erocarrera/pefile")
18971 (commit (string-append "v" version))))
18972 (file-name (git-file-name name version))
18973 (sha256
18974 (base32
18975 "1qj90a0s2gd5hn2zggypqc1077inid5dcl1fp5973b04kf2b9z8a"))))
18976 (build-system python-build-system)
18977 (propagated-inputs (list python-future))
18978 (home-page "https://github.com/erocarrera/pefile")
18979 (synopsis "Portable Executable (PE) file parser")
18980 (description "This python library provides interfaces for parsing and
18981working with Portable Executable (PE) files. It makes to most information
18982from the header, as well as section details and data available.")
18983 (license license:expat)))
18984
18985(define-public python-pyev
18986 (package
18987 (name "python-pyev")
18988 (version "0.9.0")
18989 (source
18990 (origin
18991 (method url-fetch)
18992 (uri (pypi-uri "pyev" version))
18993 (sha256
18994 (base32
18995 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
18996 (build-system python-build-system)
18997 (arguments
18998 `(#:tests? #f ; no test suite
18999 #:phases
19000 (modify-phases %standard-phases
19001 (add-after 'unpack 'patch
19002 (lambda* (#:key inputs #:allow-other-keys)
19003 (let ((libev (search-input-file inputs "/lib/libev.so.4")))
19004 (substitute* "setup.py"
19005 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
19006 (string-append "libev_dll_name = \"" libev "\"")))))))))
19007 (inputs
19008 (list libev))
19009 (home-page "https://github.com/gabrielfalcao/pyev")
19010 (synopsis "Python libev interface")
19011 (description "Pyev provides a Python interface to libev.")
19012 (license license:gpl3)))
19013
19014(define-public python-imagesize
19015 (package
19016 (name "python-imagesize")
19017 (version "1.2.0")
19018 (source
19019 (origin
19020 (method url-fetch)
19021 (uri (pypi-uri "imagesize" version))
19022 (sha256
19023 (base32
19024 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
19025 (build-system python-build-system)
19026 (home-page "https://github.com/shibukawa/imagesize_py")
19027 (synopsis "Gets image size of files in various formats in Python")
19028 (description
19029 "This package allows determination of image size from
19030 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
19031 (license license:expat)))
19032
19033(define-public python-termstyle
19034 (package
19035 (name "python-termstyle")
19036 (version "0.1.11")
19037 (source
19038 (origin
19039 (method url-fetch)
19040 (uri (pypi-uri "termstyle" version))
19041 (sha256
19042 (base32
19043 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
19044 (build-system python-build-system)
19045 (arguments
19046 '(#:phases
19047 (modify-phases %standard-phases
19048 (replace 'check
19049 (lambda _
19050 (invoke "python" "test3.py"))))))
19051 (home-page "https://github.com/gfxmonk/termstyle")
19052 (synopsis "Console text coloring for Python")
19053 (description "This package provides console text coloring for Python.")
19054 (license license:bsd-3)))
19055
19056(define-public python-argcomplete
19057 (package
19058 (name "python-argcomplete")
19059 (version "1.11.1")
19060 (source
19061 (origin
19062 (method url-fetch)
19063 (uri (pypi-uri "argcomplete" version))
19064 (sha256
19065 (base32
19066 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
19067 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
19068 (build-system python-build-system)
19069 (native-inputs
19070 (list python-coverage
19071 python-flake8
19072 python-pexpect
19073 python-wheel
19074 tcsh
19075 fish
19076 bash)) ;full Bash for 'test_file_completion'
19077 (home-page "https://github.com/kislyuk/argcomplete")
19078 (synopsis "Shell tab completion for Python argparse")
19079 (description "argcomplete provides extensible command line tab completion
19080 of arguments and options for Python scripts using @code{argparse}. It's
19081 particularly useful for programs with many options or sub-parsers that can
19082 dynamically suggest completions ; for example, when browsing resources over the
19083 network.")
19084 (license license:asl2.0)))
19085
19086(define-public python-csscompressor
19087 (package
19088 (name "python-csscompressor")
19089 (version "0.9.5")
19090 (source
19091 (origin
19092 (method url-fetch)
19093 (uri (pypi-uri "csscompressor" version))
19094 (sha256
19095 (base32
19096 "018ssffvlpnc1salmnpyl52c11glzzwj4k9f757hl4pkpjnjp8mg"))))
19097 (build-system python-build-system)
19098 (arguments
19099 '(#:phases
19100 (modify-phases %standard-phases
19101 (replace 'check
19102 (lambda _
19103 (invoke "py.test"))))))
19104 (native-inputs
19105 (list python-pytest))
19106 (home-page "https://github.com/sprymix/csscompressor")
19107 (synopsis "Python port of YUI CSS Compressor")
19108 (description
19109 "This package provides a python port of YUI CSS Compressor.")
19110 (license license:bsd-3)))
19111
19112(define-public python-rcssmin
19113 (package
19114 (name "python-rcssmin")
19115 (version "1.0.6")
19116 (source
19117 (origin
19118 (method url-fetch)
19119 (uri (pypi-uri "rcssmin" version))
19120 (sha256
19121 (base32
19122 "0w42l4dhxghcz7pj3q7hkxp015mvb8z2cq9sfxbl31npsfavd1ya"))))
19123 (build-system python-build-system)
19124 (arguments
19125 '(#:phases
19126 (modify-phases %standard-phases
19127 (replace 'check
19128 (lambda _
19129 (invoke "python" "run_tests.py" "tests"))))))
19130 (home-page "http://opensource.perlig.de/rcssmin/")
19131 (synopsis "CSS Minifier")
19132 (description "The minifier is based on the semantics of the YUI compressor,
19133 which itself is based on the rule list by Isaac Schlueter.")
19134 (license license:asl2.0)))
19135
19136(define-public python-rjsmin
19137 (package
19138 (name "python-rjsmin")
19139 (version "1.1.0")
19140 (source
19141 (origin
19142 (method url-fetch)
19143 (uri (pypi-uri "rjsmin" version))
19144 (sha256
19145 (base32
19146 "0cmc72rlkvzz8fl89bc83czkx0pcvhzj7yn7m29r8pgnf5fcfpdi"))
19147 (modules '((guix build utils)))
19148 (snippet
19149 '(begin
19150 (for-each delete-file (find-files "bench" "\\.js$"))
19151 #t))))
19152 (build-system python-build-system)
19153 (arguments
19154 '(#:tests? #f ; Not all test files included.
19155 #:phases
19156 (modify-phases %standard-phases
19157 (replace 'check
19158 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
19159 (add-installed-pythonpath inputs outputs)
19160 (if tests?
19161 (invoke "py.test" "-vv" "tests")
19162 #t))))))
19163 (native-inputs
19164 (list python-pytest))
19165 (home-page "http://opensource.perlig.de/rjsmin/")
19166 (synopsis "Javascript Minifier")
19167 (description "@code{rJSmin} is a javascript minifier written in Python. The
19168 minifier is based on the semantics of jsmin.c by Douglas Crockford. The module
19169 is a re-implementation aiming for speed, so it can be used at runtime (rather
19170 than during a preprocessing step).")
19171 (license license:asl2.0)))
19172
19173(define-public python-xopen
19174 (package
19175 (name "python-xopen")
19176 (version "0.8.2")
19177 (source
19178 (origin
19179 (method url-fetch)
19180 (uri (pypi-uri "xopen" version))
19181 (sha256
19182 (base32
19183 "1xrlcnd6fri3w97zzzp6vyk4l21yq1lc8r4wksi06hgpkbh4jdq0"))))
19184 (build-system python-build-system)
19185 (propagated-inputs
19186 (list python-setuptools-scm))
19187 (home-page "https://github.com/marcelm/xopen/")
19188 (synopsis "Open compressed files transparently")
19189 (description "This module provides an @code{xopen} function that works like
19190 Python's built-in @code{open} function, but can also deal with compressed files.
19191 Supported compression formats are gzip, bzip2 and, xz, and are automatically
19192 recognized by their file extensions. The focus is on being as efficient as
19193 possible on all supported Python versions.")
19194 (license license:expat)))
19195
19196(define-public python-cheetah
19197 (package
19198 (name "python-cheetah")
19199 (version "3.2.4")
19200 (source
19201 (origin
19202 (method url-fetch)
19203 (uri (pypi-uri "Cheetah3" version))
19204 (sha256
19205 (base32
19206 "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
19207 (build-system python-build-system)
19208 (arguments
19209 `(#:phases (modify-phases %standard-phases
19210 (add-after 'unpack 'use-absolute-python
19211 (lambda _
19212 (substitute* "Cheetah/CheetahWrapper.py"
19213 (("#!/usr/bin/env python")
19214 (string-append "#!" (which "python"))))))
19215 (add-after 'unpack 'fix-tests
19216 (lambda _
19217 (substitute* "Cheetah/Tests/ImportHooks.py"
19218 (("os.path.dirname\\(__file__\\)")
19219 (string-append "'" (getcwd) "/Cheetah/Tests'")))))
19220 (replace 'check
19221 (lambda _
19222 (setenv "TMPDIR" "/tmp")
19223 (substitute* "Cheetah/Tests/Test.py"
19224 (("unittest.TextTestRunner\\(\\)")
19225 "unittest.TextTestRunner(verbosity=2)"))
19226
19227 (invoke "python" "Cheetah/Tests/Test.py"))))))
19228 (propagated-inputs
19229 (list python-markdown)) ;optional
19230 (home-page "https://cheetahtemplate.org/")
19231 (synopsis "Template engine")
19232 (description "Cheetah is a text-based template engine and Python code
19233 generator.
19234
19235 Cheetah can be used as a standalone templating utility or referenced as
19236 a library from other Python applications. It has many potential uses,
19237 but web developers looking for a viable alternative to ASP, JSP, PHP and
19238 PSP are expected to be its principle user group.
19239
19240 Features:
19241 @enumerate
19242 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
19243 text-based format.
19244 @item Cleanly separates content, graphic design, and program code.
19245 @item Blends the power and flexibility of Python with a simple template language
19246 that non-programmers can understand.
19247 @item Gives template writers full access to any Python data structure, module,
19248 function, object, or method in their templates.
19249 @item Makes code reuse easy by providing an object-orientated interface to
19250 templates that is accessible from Python code or other Cheetah templates.
19251 One template can subclass another and selectively reimplement sections of it.
19252 @item Provides a simple, yet powerful, caching mechanism that can dramatically
19253 improve the performance of a dynamic website.
19254 @item Compiles templates into optimized, yet readable, Python code.
19255 @end enumerate")
19256 (license (license:x11-style "file://LICENSE"))))
19257
19258(define-public python-dulwich
19259 (package
19260 (name "python-dulwich")
19261 (version "0.20.30")
19262 (source
19263 (origin
19264 (method url-fetch)
19265 (uri (list (string-append "https://www.dulwich.io/releases/"
19266 "dulwich-" version ".tar.gz")
19267 (pypi-uri "dulwich" version)))
19268 (sha256
19269 (base32
19270 "0hafaff30bmkj30b8pwpwsy3fz5h6c1pn98ihqcvl5zndflr1h22"))))
19271 (build-system python-build-system)
19272 (arguments
19273 '(#:phases
19274 (modify-phases %standard-phases
19275 (add-before 'check 'fix-tests
19276 (lambda* (#:key inputs #:allow-other-keys)
19277 (substitute* '("dulwich/tests/test_repository.py"
19278 "dulwich/tests/test_porcelain.py"
19279 "dulwich/tests/test_hooks.py")
19280 (("/bin/sh") (search-input-file inputs "/bin/sh")))
19281 (setenv "TEST_RUNNER" "unittest")
19282 (setenv "PYTHONHASHSEED" "random"))))))
19283 (propagated-inputs
19284 (list python-fastimport python-urllib3))
19285 (native-inputs
19286 (list python-mock python-geventhttpclient python-gpg
19287 git gnupg))
19288 (home-page "https://www.dulwich.io/")
19289 (synopsis "Git implementation in Python")
19290 (description "Dulwich is an implementation of the Git file formats and
19291 protocols written in pure Python.")
19292 ;; Can be used with either license.
19293 (license (list license:asl2.0 license:gpl2+))))
19294
19295(define-public python-pbkdf2
19296 (package
19297 (name "python-pbkdf2")
19298 (version "1.3")
19299 (source
19300 (origin
19301 (method url-fetch)
19302 (uri (pypi-uri "pbkdf2" version))
19303 (sha256
19304 (base32
19305 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
19306 (build-system python-build-system)
19307 (arguments
19308 '(#:phases
19309 (modify-phases %standard-phases
19310 (replace 'check
19311 (lambda _
19312 (invoke "python" "test/test_pbkdf2.py"))))))
19313 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
19314 (synopsis "Password-based key derivation")
19315 (description "This module implements the password-based key derivation
19316 function, PBKDF2, specified in RSA PKCS#5 v2.0.
19317
19318 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
19319 is part of the RSA Public Key Cryptography Standards series. The provided
19320 implementation takes a password or a passphrase and a salt value (and
19321 optionally a iteration count, a digest module, and a MAC module) and provides
19322 a file-like object from which an arbitrarily-sized key can be read.")
19323 (license license:expat)))
19324
19325(define-public python-qrcode
19326 (package
19327 (name "python-qrcode")
19328 (version "7.3.1")
19329 (source
19330 (origin
19331 (method url-fetch)
19332 (uri (pypi-uri "qrcode" version))
19333 (sha256
19334 (base32 "0y35jlwfvkgn9341lzshyaqgpp61vysjh107vhdd96ya83r6ynip"))))
19335 (build-system python-build-system)
19336 (arguments
19337 ;; FIXME: Tests require packaging 'pymaging'.
19338 '(#:tests? #f))
19339 (propagated-inputs
19340 (list python-lxml ; for SVG output
19341 python-pillow)) ; for PNG output
19342 (home-page "https://github.com/lincolnloop/python-qrcode")
19343 (synopsis "QR Code image generator")
19344 (description "This package provides a pure Python QR Code generator
19345 module. It uses the Python Imaging Library (PIL) to allow for the generation
19346 of QR Codes.
19347
19348 In addition this package provides a command line tool to generate QR codes and
19349 either write these QR codes to a file or do the output as ascii art at the
19350 console.")
19351 (license license:bsd-3)))
19352
19353(define-public python-rst2ansi
19354 (package
19355 (name "python-rst2ansi")
19356 (version "0.1.5")
19357 (source
19358 (origin
19359 (method url-fetch)
19360 (uri (pypi-uri "rst2ansi" version))
19361 (sha256
19362 (base32
19363 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
19364 (build-system python-build-system)
19365 (propagated-inputs
19366 (list python-docutils))
19367 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
19368 (synopsis "Convert RST to ANSI-decorated console output")
19369 (description
19370 "Python module dedicated to rendering RST (reStructuredText) documents
19371 to ansi-escaped strings suitable for display in a terminal.")
19372 (license license:expat)))
19373
19374(define-public python-ansi2html
19375 (package
19376 (name "python-ansi2html")
19377 (version "1.2.0")
19378 (source
19379 (origin
19380 (method url-fetch)
19381 (uri (pypi-uri "ansi2html" version))
19382 (sha256
19383 (base32
19384 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
19385 (build-system python-build-system)
19386 (native-inputs
19387 (list python-mock python-nose))
19388 (propagated-inputs
19389 (list python-six))
19390 (home-page "https://github.com/ralphbean/ansi2html")
19391 (synopsis "Convert ANSI-decorated console output to HTML")
19392 (description
19393 "@command{ansi2html} is a Python library and command line utility for
19394 converting text with ANSI color codes to HTML or LaTeX.")
19395 (license license:gpl3+)))
19396
19397(define-public python-easy-ansi
19398 (package
19399 (name "python-easy-ansi")
19400 (version "0.3")
19401 (source
19402 (origin
19403 (method git-fetch)
19404 (uri (git-reference
19405 (url "https://gitlab.com/joeysbytes/easy-ansi")
19406 (commit (string-append "v" version))))
19407 (file-name (git-file-name name version))
19408 (sha256
19409 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
19410 (build-system python-build-system)
19411 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
19412 (synopsis "Terminal framework API")
19413 (description
19414 "Easy ANSI is a terminal framework API to give you an easy way to use
19415 colors, cursor control movements, and line/box drawing. It is not meant as a
19416 replacement to more full-featured frameworks (such as curses or urwid), but as
19417 a tool to quickly create nice-looking screens in your terminal window. You
19418 can even create animations with the cursor controls.")
19419 (license license:expat)))
19420
19421(define-public python-ddt
19422 (package
19423 (name "python-ddt")
19424 (version "1.4.2")
19425 (source
19426 (origin
19427 (method url-fetch)
19428 (uri (pypi-uri "ddt" version))
19429 (sha256
19430 (base32
19431 "0y2k756qjz1rhpivi60hy29b4bf0bh3wck39i1mn6pkil9k779k4"))))
19432 (build-system python-build-system)
19433 (native-inputs
19434 (list python-pytest))
19435 (propagated-inputs
19436 (list python-pyyaml))
19437 (home-page "https://github.com/datadriventests/ddt")
19438 (synopsis "Data-Driven Tests")
19439 (description
19440 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
19441 running it with different test data, and make it appear as multiple test
19442 cases.")
19443 (license license:expat)))
19444
19445(define-public python-pycountry
19446 (package
19447 (name "python-pycountry")
19448 (version "22.3.5")
19449 (source
19450 (origin
19451 (method url-fetch)
19452 (uri (pypi-uri "pycountry" version))
19453 (sha256
19454 (base32
19455 "0ihnkh86zz01vi46gcwgq6h71jrpj7hq71zi13c98n2qdhj3l5mj"))))
19456 (build-system python-build-system)
19457 (home-page "https://bitbucket.org/flyingcircus/pycountry")
19458 (synopsis "ISO databases for languages, countries, currencies, etc.")
19459 (description
19460 "@code{pycountry} provides the ISO databases for the standards:
19461 @enumerate
19462 @item 639-3 (Languages)
19463 @item 3166 (Countries)
19464 @item 3166-3 (Deleted Countries)
19465 @item 3166-2 (Subdivisions of countries)
19466 @item 4217 (Currencies)
19467 @item 15924 (Scripts)
19468 @end enumerate
19469 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
19470 through a Python API.")
19471 (license license:lgpl2.1+)))
19472
19473(define-public [email protected]
19474 (package
19475 (inherit python-pycountry)
19476 (name "python-pycountry")
19477 (version "20.7.3")
19478 (source
19479 (origin
19480 (method url-fetch)
19481 (uri (pypi-uri "pycountry" version))
19482 (sha256
19483 (base32 "0hnbabsmqimx5hqh0jbd2f64i8fhzhhbrvid57048hs5sd9ll241"))))))
19484
19485(define-public python-pycosat
19486 (package
19487 (name "python-pycosat")
19488 (version "0.6.3")
19489 (source
19490 (origin
19491 (method url-fetch)
19492 (uri (pypi-uri "pycosat" version ".zip"))
19493 (sha256
19494 (base32
19495 "1vg0f2fwcybpdqv92z0hwdl603n2safh3fqvjjxkksd78r4qg6ac"))))
19496 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
19497 (build-system python-build-system)
19498 (native-inputs
19499 (list unzip))
19500 (home-page "https://github.com/ContinuumIO/pycosat")
19501 (synopsis "Bindings to picosat (a SAT solver)")
19502 (description
19503 "This package provides efficient Python bindings to @code{picosat} on
19504 the C level. When importing pycosat, the @code{picosat} solver becomes part
19505 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
19506 Problem} (SAT) solver.")
19507 (license license:expat)))
19508
19509(define-public python-pypeg2
19510 (package
19511 (name "python-pypeg2")
19512 (version "2.15.2")
19513 (source
19514 (origin
19515 (method url-fetch)
19516 (uri (pypi-uri "pyPEG2" version))
19517 (sha256
19518 (base32
19519 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
19520 (build-system python-build-system)
19521 (propagated-inputs (list python-lxml))
19522 (arguments
19523 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
19524 '(#:tests? #f))
19525 (home-page "https://fdik.org/pyPEG/")
19526 (synopsis "Parsing Expression Grammars in Python")
19527 (description "PyPEG is an intrinsic parser interpreter framework for
19528 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
19529 parse many formal languages.")
19530 (license license:gpl2)))
19531
19532(define-public python-incremental
19533 (package
19534 (name "python-incremental")
19535 (version "17.5.0")
19536 (source
19537 (origin
19538 (method url-fetch)
19539 (uri (pypi-uri "incremental" version))
19540 (sha256
19541 (base32
19542 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
19543 (build-system python-build-system)
19544 (home-page "https://github.com/hawkowl/incremental")
19545 (synopsis "Library for versioning Python projects")
19546 (description "Incremental is a small library that versions your Python
19547 projects.")
19548 (license license:expat)))
19549
19550(define-public python-invoke
19551 (package
19552 (name "python-invoke")
19553 (home-page "https://www.pyinvoke.org/")
19554 (version "1.6.0")
19555 (source (origin
19556 (method url-fetch)
19557 (uri (pypi-uri "invoke" version))
19558 (sha256
19559 (base32
19560 "1lsql9daabfr31c7syva5myc5bka45k57ygs9fliv63qrwp1wk9p"))))
19561 (build-system python-build-system)
19562 (arguments
19563 ;; XXX: Requires many dependencies that are not yet in Guix.
19564 `(#:tests? #f
19565 #:phases
19566 (modify-phases %standard-phases
19567 (add-after 'unpack 'delete-python2-code
19568 (lambda _
19569 (delete-file-recursively "invoke/vendor/yaml2")))
19570 (add-after 'unpack 'fix-bash-path
19571 (lambda* (#:key inputs #:allow-other-keys)
19572 (let ((bash (assoc-ref inputs "bash")))
19573 (substitute* "invoke/config.py"
19574 (("shell = \"/bin/bash\"")
19575 (string-append "shell = \"" bash "/bin/bash\"")))))))))
19576 (inputs
19577 `(("bash" ,bash-minimal)))
19578 (synopsis "Pythonic task execution")
19579 (description
19580 "Invoke is a Python task execution tool and library, drawing inspiration
19581 from various sources to arrive at a powerful and clean feature set. It is
19582 evolved from the Fabric project, but focuses on local and abstract concerns
19583 instead of servers and network commands.")
19584 (license license:bsd-3)))
19585
19586(define-public python-automat
19587 (package
19588 (name "python-automat")
19589 (version "20.2.0")
19590 (source (origin
19591 (method url-fetch)
19592 (uri (pypi-uri "Automat" version))
19593 (sha256
19594 (base32
19595 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
19596 (build-system python-build-system)
19597 ;; We disable the tests because they require python-twisted, while
19598 ;; python-twisted depends on python-automat. Twisted is optional, but the
19599 ;; tests fail if it is not available. Also see
19600 ;; <https://github.com/glyph/automat/issues/71>.
19601 (arguments
19602 `(#:tests? #f
19603 #:phases
19604 (modify-phases %standard-phases
19605 ;; Remove script, because it depends on python-twisted.
19606 (add-after 'unpack 'remove-entrypoint
19607 (lambda _
19608 (substitute* "setup.py"
19609 (("\"automat-visualize = automat._visualize:tool\"") "")))))))
19610 (native-inputs
19611 (list python-m2r python-setuptools-scm python-graphviz))
19612 (propagated-inputs
19613 (list python-six python-attrs))
19614 (home-page "https://github.com/glyph/Automat")
19615 (synopsis "Self-service finite-state machines")
19616 (description "Automat is a library for concise, idiomatic Python
19617 expression of finite-state automata (particularly deterministic finite-state
19618 transducers).")
19619 (license license:expat)))
19620
19621(define-public python-m2r
19622 (package
19623 (name "python-m2r")
19624 (version "0.2.1")
19625 (source (origin
19626 (method url-fetch)
19627 (uri (pypi-uri "m2r" version))
19628 (sha256
19629 (base32
19630 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))
19631 (modules '((guix build utils)))
19632 (snippet
19633 ;; Adjust test regex for Python 3.10 compatibility.
19634 ;; Taken from upstream pull request:
19635 ;; https://github.com/miyakogi/m2r/pull/62
19636 '(substitute* "tests/test_cli.py"
19637 (("self.assertIn\\('optional arguments:', message\\)")
19638 "self.assertRegex(message, r'option(s|al arguments):')")))))
19639 (build-system python-build-system)
19640 (propagated-inputs
19641 (list python-docutils python-mistune))
19642 (native-inputs
19643 (list python-pygments python-mock))
19644 (home-page "https://github.com/miyakogi/m2r")
19645 (synopsis "Markdown to reStructuredText converter")
19646 (description "M2R converts a markdown file including reST markups to valid
19647 reST format.")
19648 (license license:expat)))
19649
19650(define-public python-constantly
19651 (package
19652 (name "python-constantly")
19653 (version "15.1.0")
19654 (source (origin
19655 (method url-fetch)
19656 (uri (pypi-uri "constantly" version))
19657 (sha256
19658 (base32
19659 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
19660 (build-system python-build-system)
19661 (home-page "https://github.com/twisted/constantly")
19662 (synopsis "Symbolic constants in Python")
19663 (description "Constantly is a Python library that provides symbolic
19664 constant support. It includes collections and constants with text, numeric,
19665 and bit flag values.")
19666 (license license:expat)))
19667
19668(define-public python-attrdict
19669 (package
19670 (name "python-attrdict")
19671 (version "2.0.1")
19672 (source (origin
19673 (method url-fetch)
19674 (uri (pypi-uri "attrdict" version))
19675 (sha256
19676 (base32
19677 "0w3vsz64j9npxfgh83hghsh161wwkrx1fxqi1533js2wnnc0dj9m"))))
19678 (build-system python-build-system)
19679 ;; The package is no longer maintained and tests need some work.
19680 (arguments '(#:tests? #f))
19681 (propagated-inputs (list python-six))
19682 (home-page "https://github.com/bcj/AttrDict")
19683 (synopsis "Attribute-style access dictionaries")
19684 (description
19685 "This package provides mapping objects whose elements can be accessed
19686both as keys and as attributes.")
19687 (license license:expat)))
19688
19689(define-public python-attrs
19690 (package
19691 (name "python-attrs")
19692 (version "21.2.0")
19693 (source (origin
19694 (method url-fetch)
19695 (uri (pypi-uri "attrs" version))
19696 (sha256
19697 (base32
19698 "1yzmwi5d197p0qhl7rl4xi9q1w8mk9i3zn6hrl22knbcrb1slspg"))))
19699 (build-system python-build-system)
19700 (arguments
19701 `(#:phases (modify-phases %standard-phases
19702 (add-after 'unpack 'remove-test-hypothesis-deadlines
19703 (lambda _
19704 (substitute* "tests/test_make.py"
19705 (("assume, given") "assume, given, settings")
19706 (("( +)@given" all spaces)
19707 (string-append spaces "@settings(deadline=None)\n" all)))))
19708 (replace 'check
19709 (lambda* (#:key tests? #:allow-other-keys)
19710 (when tests?
19711 (invoke "pytest")))))))
19712 (native-inputs
19713 (list python-coverage python-hypothesis python-pympler python-pytest
19714 python-six))
19715 (home-page "https://github.com/python-attrs/attrs/")
19716 (synopsis "Attributes without boilerplate")
19717 (description "@code{attrs} is a Python package with class decorators that
19718 ease the chores of implementing the most common attribute-related object
19719 protocols.")
19720 (license license:expat)))
19721
19722(define-public python-attrs-bootstrap
19723 (package
19724 (inherit python-attrs)
19725 (name "python-attrs-bootstrap")
19726 (native-inputs `())
19727 (arguments `(#:tests? #f))))
19728
19729(define-public python-cliapp
19730 (package
19731 (name "python-cliapp")
19732 (version "1.20180812.1")
19733 (source
19734 (origin
19735 (method url-fetch)
19736 (uri (string-append
19737 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
19738 version ".tar.gz"))
19739 (sha256
19740 (base32
19741 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
19742 (build-system python-build-system)
19743 (arguments
19744 `(;; XXX: The tests only do style and coverage checks, which
19745 ;; fails due to deprecation warnings, etc.
19746 #:tests? #f))
19747 (native-inputs
19748 (list python-coverage-test-runner python-pep8))
19749 (propagated-inputs
19750 (list python-pyaml))
19751 (home-page "https://liw.fi/cliapp/")
19752 (synopsis "Python framework for command line programs")
19753 (description "@code{cliapp} is a Python framework for command line
19754 programs. It contains the typical stuff such programs need to do, such
19755 as parsing the command line for options, and iterating over input files.")
19756 (license license:gpl2+)))
19757
19758(define-public python-ttystatus
19759 (package
19760 (name "python-ttystatus")
19761 (version "0.38")
19762 (source
19763 (origin
19764 (method git-fetch)
19765 (uri (git-reference
19766 (url "http://git.liw.fi/ttystatus")
19767 ;; There are no tags after ttystatus-0.36.
19768 (commit "e9fc573326c5d1348f5fe56263b4f7a8c32f58c9")))
19769 (sha256
19770 (base32 "0v49q839nrwdm19c83wfmj6n2kw80xslwq9k0n5509r2h7wzjiqj"))
19771 (file-name (git-file-name name version))))
19772 (build-system python-build-system)
19773 (native-inputs
19774 (list python-coverage-test-runner python-pep8))
19775 (arguments
19776 `(#:phases
19777 (modify-phases %standard-phases
19778 ;; check phase needs to be run before the build phase. If not,
19779 ;; coverage-test-runner looks for tests for the built source files,
19780 ;; and fails.
19781 (delete 'check)
19782 (add-before 'build 'check
19783 (lambda _ (invoke "make" "check"))))))
19784 (home-page "https://liw.fi/ttystatus/")
19785 (synopsis "Python library for progress reporting and
19786 status updates on terminals")
19787 (description "@code{ttystatus} is a Python library for showing progress
19788 reporting and status updates on terminals, for command line programs.
19789 Output is automatically adapted to the width of the terminal: truncated
19790 if it does not fit, and resized if the terminal size changes.")
19791 (license license:gpl3+)))
19792
19793(define-public python-astroid
19794 (package
19795 (name "python-astroid")
19796 (version "2.9.0")
19797 (source
19798 (origin
19799 (method git-fetch)
19800 (uri (git-reference
19801 (url "https://github.com/PyCQA/astroid")
19802 (commit (string-append "v" version))))
19803 (file-name (git-file-name name version))
19804 (sha256
19805 (base32 "19iiys4233cicpm48fd7lrkm31kk47qiv44wvk952rqbcn4rd2dh"))))
19806 (build-system python-build-system)
19807 (propagated-inputs
19808 (list python-lazy-object-proxy python-typing-extensions python-wrapt))
19809 (native-inputs
19810 (list python-pytest python-pytest-runner))
19811 (home-page "https://github.com/PyCQA/astroid")
19812 (synopsis "Python source code base representation")
19813 (description "@code{python-astroid} provides a common base representation
19814of Python source code for projects such as pychecker, pyreverse, pylint, etc.
19815It provides a compatible representation which comes from the _ast module. It
19816rebuilds the tree generated by the builtin _ast module by recursively walking
19817down the AST and building an extended ast. The new node classes have
19818additional methods and attributes for different usages. They include some
19819support for static inference and local name scopes. Furthermore, astroid
19820builds partial trees by inspecting living objects.")
19821 (license license:lgpl2.1+)))
19822
19823(define-public python-isbnlib
19824 (package
19825 (name "python-isbnlib")
19826 (version "3.10.4")
19827 (source
19828 (origin
19829 (method url-fetch)
19830 (uri (pypi-uri "isbnlib" version))
19831 (sha256
19832 (base32
19833 "0iin0x2xqwyphyyzd0mzrq5v5xm7b6dlbb294k4dywra5qvbrgzm"))))
19834 (build-system python-build-system)
19835 (arguments '(#:tests? #f)) ; No test
19836 (home-page "https://github.com/xlcnd/isbnlib")
19837 (synopsis "Python library to work with ISBN strings")
19838 (description "@code{python-isbnlib} is a (pure) python library that provides
19839 several useful methods and functions to validate, clean, transform, hyphenate and
19840 get metadata for ISBN strings. Its origin was as the core of isbntools. This short
19841 version, is suitable to be include as a dependency in other projects.")
19842 (license license:lgpl3+)))
19843
19844(define-public python-isort
19845 (package
19846 (name "python-isort")
19847 (version "5.10.1")
19848 (source
19849 (origin
19850 (method git-fetch)
19851 (uri (git-reference
19852 ;; Tests pass only from the Github sources
19853 (url "https://github.com/timothycrosley/isort")
19854 (commit version)))
19855 (file-name (git-file-name name version))
19856 (modules '((guix build utils)))
19857 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
19858 (sha256
19859 (base32
19860 "09spgl2k9xrprr5gbpfc91a8p7mx7a0c64ydgc91b3jhrmnd9jg1"))))
19861 (build-system python-build-system)
19862 (arguments
19863 `(#:phases
19864 (modify-phases %standard-phases
19865 (add-after 'unpack 'loosen-requirements
19866 (lambda _
19867 ;; Permit newer versions of black.
19868 (substitute* "example_isort_formatting_plugin/pyproject.toml"
19869 (("\\^20\\.08b1")
19870 ">= 20.08b1"))))
19871 ;; A foretaste of what our future python-build-system will need to
19872 ;; do.
19873 (replace 'build
19874 (lambda _
19875 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
19876 (replace 'install
19877 (lambda* (#:key outputs #:allow-other-keys)
19878 (let ((out (assoc-ref outputs "out"))
19879 (whl (car (find-files "dist" "\\.whl$"))))
19880 (invoke "pip" "--no-cache-dir" "--no-input"
19881 "install" "--no-deps" "--prefix" out whl))))
19882 (add-after 'install 'install-example-plugins
19883 (lambda* (#:key outputs #:allow-other-keys)
19884 (let ((out (assoc-ref outputs "out")))
19885 ;; Patch to use the core poetry API.
19886 (substitute* '("example_isort_formatting_plugin/pyproject.toml"
19887 "example_isort_sorting_plugin/pyproject.toml"
19888 "example_shared_isort_profile/pyproject.toml")
19889 (("poetry>=0.12")
19890 "poetry-core>=1.0.0")
19891 (("poetry.masonry.api")
19892 "poetry.core.masonry.api"))
19893 ;; Build the example plugins.
19894 (for-each (lambda (source-directory)
19895 (invoke "python" "-m" "build" "--wheel"
19896 "--no-isolation" "--outdir=dist"
19897 source-directory))
19898 '("example_isort_formatting_plugin"
19899 "example_isort_sorting_plugin"
19900 "example_shared_isort_profile"))
19901 ;; Install them to temporary storage, for the test.
19902 (setenv "HOME" (getcwd))
19903 (let ((example-whls (find-files "dist" "^example.*\\.whl$")))
19904 (apply invoke "pip" "--no-cache-dir" "--no-input"
19905 "install" "--user" "--no-deps" example-whls)))))
19906 (replace 'check
19907 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
19908 (when tests?
19909 (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
19910 (setenv "PATH" (string-append (getenv "PATH") ":" bin)))
19911 (add-installed-pythonpath inputs outputs)
19912 (invoke "pytest" "-vv" "tests/unit/"
19913 "-k" "not test_gitignore" ;requires git
19914 "--ignore=tests/unit/test_deprecated_finders.py")))))))
19915 (native-inputs
19916 (list python-black
19917 python-colorama
19918 python-hypothesmith
19919 python-libcst-minimal
19920 python-natsort
19921 python-poetry-core
19922 python-pylama
19923 python-pypa-build
19924 python-pytest-mock
19925 python-pytest))
19926 (home-page "https://github.com/PyCQA/isort")
19927 (synopsis "Python utility/library to sort python imports")
19928 (description "@code{python-isort} is a python utility/library to sort
19929 imports alphabetically, and automatically separated into sections. It
19930 provides a command line utility, a python library and plugins for various
19931 editors.")
19932 (license license:expat)))
19933
19934(define-public python-configparser
19935 (package
19936 (name "python-configparser")
19937 (version "4.0.2")
19938 (source
19939 (origin
19940 (method url-fetch)
19941 (uri (pypi-uri "configparser" version))
19942 (sha256
19943 (base32
19944 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
19945 (native-inputs
19946 (list python-setuptools-scm))
19947 (build-system python-build-system)
19948 (home-page "https://github.com/jaraco/configparser/")
19949 (synopsis "Backport of configparser from python 3.5")
19950 (description "@code{python-configparser} is a backport of
19951 @code{configparser} from Python 3.5 so that it can be used directly
19952 in other versions.")
19953 (license license:expat)))
19954
19955(define-public python-iniconfig
19956 (package
19957 (name "python-iniconfig")
19958 (version "1.1.1")
19959 (source
19960 (origin
19961 (method url-fetch)
19962 (uri (pypi-uri "iniconfig" version))
19963 (sha256
19964 (base32
19965 "0ckzngs3scaa1mcfmsi1w40a1l8cxxnncscrxzjjwjyisx8z0fmw"))))
19966 (build-system python-build-system)
19967 (home-page "https://github.com/RonnyPfannschmidt/iniconfig")
19968 (synopsis "Simple INI-file parser")
19969 (description "The @code{iniconfig} package provides a small and simple
19970 INI-file parser module having a unique set of features ; @code{iniconfig}
19971 @itemize
19972 @item maintains the order of sections and entries ;
19973 @item supports multi-line values with or without line-continuations ;
19974 @item supports \"#\" comments everywhere ;
19975 @item raises errors with proper line-numbers ;
19976 @item raises an error when two sections have the same name.
19977 @end itemize")
19978 (license license:expat)))
19979
19980(define-public python-mamba
19981 (package
19982 (name "python-mamba")
19983 (version "0.11.2")
19984 (source (origin
19985 (method url-fetch)
19986 (uri (pypi-uri "mamba" version))
19987 (sha256
19988 (base32
19989 "15m4dpnpv9m60pdaygvwgi43fwqaivs3qxfxhspwrp47sbgwdkvm"))))
19990 (build-system python-build-system)
19991 (arguments `(#:tests? #f)) ; No test
19992 (propagated-inputs
19993 (list python-clint python-coverage))
19994 (home-page "https://nestorsalceda.com/mamba/")
19995 (synopsis "Test runner for Python")
19996 (description
19997 "Mamba is a Behaviour-Driven Development tool for Python developers.
19998 Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
19999 (license license:expat)))
20000
20001(define-public python-mando
20002 (package
20003 (name "python-mando")
20004 (version "0.7.1")
20005 (source (origin
20006 (method url-fetch)
20007 (uri (pypi-uri "mando" version))
20008 (sha256
20009 (base32
20010 "001mikga36i811pbc95rb45m2kzivkx4xb0fn3pzl4xnnjcskfhq"))))
20011 (build-system python-build-system)
20012 (arguments
20013 (list #:phases
20014 #~(modify-phases %standard-phases
20015 (replace 'check
20016 (lambda* (#:key tests? #:allow-other-keys)
20017 (when tests?
20018 (invoke "pytest" "-vv")))))))
20019 (propagated-inputs
20020 (list python-rst2ansi python-six))
20021 (native-inputs
20022 (list python-pytest))
20023 (home-page "https://mando.readthedocs.org/")
20024 (synopsis
20025 "Wrapper around argparse, allowing creation of complete CLI applications")
20026 (description
20027 "This package is a wrapper around argparse, allowing you to write complete CLI
20028 applications in seconds while maintaining all the flexibility.")
20029 (license license:expat)))
20030
20031(define-public python-mwclient
20032 (package
20033 (name "python-mwclient")
20034 (version "0.10.1")
20035 (source
20036 (origin
20037 (method git-fetch)
20038 ;; The PyPI version wouldn't contain tests.
20039 (uri (git-reference
20040 (url "https://github.com/mwclient/mwclient")
20041 (commit (string-append "v" version))))
20042 (file-name (git-file-name name version))
20043 (sha256
20044 (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
20045 (build-system python-build-system)
20046 (propagated-inputs
20047 (list python-requests-oauthlib python-six))
20048 (native-inputs
20049 (list python-mock python-pytest python-pytest-cov
20050 python-pytest-runner python-responses))
20051 (home-page "https://github.com/btongminh/mwclient")
20052 (synopsis "MediaWiki API client")
20053 (description "This package provides a MediaWiki API client.")
20054 (license license:expat)))
20055
20056(define-public python-kneed
20057 (package
20058 (name "python-kneed")
20059 (version "0.7.0")
20060 (source
20061 (origin
20062 (method url-fetch)
20063 (uri (pypi-uri "kneed" version))
20064 (sha256
20065 (base32 "0vkwi0pr7nfkp3c46hnmx0275yx68v96v10rmspv0wis33x6f39l"))))
20066 (build-system python-build-system)
20067 (propagated-inputs
20068 (list python-matplotlib python-numpy python-scipy))
20069 (home-page "https://github.com/arvkevi/kneed")
20070 (synopsis "Knee-point detection in Python")
20071 (description "This package implements the kneedle algorithm. Given a set
20072of x and y values, kneed will return the knee point of the function. The knee
20073point is the point of maximum curvature.")
20074 (license license:bsd-3)))
20075
20076(define-public python-utils
20077 (package
20078 (name "python-utils")
20079 (version "2.4.0")
20080 (source (origin
20081 (method url-fetch)
20082 (uri (pypi-uri "python-utils" version))
20083 (sha256
20084 (base32
20085 "12c0glzkm81ljgf6pwh0d4rmdm1r7vvgg3ifzp8yp9cfyngw07zj"))))
20086 (build-system python-build-system)
20087 (arguments
20088 `(#:phases
20089 (modify-phases %standard-phases
20090 (replace 'check
20091 (lambda* (#:key inputs outputs #:allow-other-keys)
20092 (add-installed-pythonpath inputs outputs)
20093 (delete-file "pytest.ini")
20094 (invoke "pytest" "-vv"))))))
20095 (native-inputs
20096 `(("pytest-runner" ,python-pytest-runner)
20097 ("pytest" ,python-pytest)
20098 ("six" ,python-six)))
20099 (home-page "https://github.com/WoLpH/python-utils")
20100 (synopsis "Convenient utilities not included with the standard Python install")
20101 (description
20102 "Python Utils is a collection of small Python functions and classes which
20103 make common patterns shorter and easier.")
20104 (license license:bsd-2)))
20105
20106(define-public python-diff-match-patch
20107 (package
20108 (name "python-diff-match-patch")
20109 (version "20121119")
20110 (source
20111 (origin
20112 (method url-fetch)
20113 (uri (pypi-uri "diff-match-patch" version))
20114 (sha256
20115 (base32
20116 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
20117 (build-system python-build-system)
20118 (home-page "https://code.google.com/p/google-diff-match-patch")
20119 (synopsis "Synchronize plain text")
20120 (description "Diff Match and Patch libraries offer robust algorithms to
20121 perform the operations required for synchronizing plain text.")
20122 (license license:asl2.0)))
20123
20124(define-public python-icdiff
20125 (package
20126 (name "python-icdiff")
20127 (version "2.0.5")
20128 (source (origin
20129 (method git-fetch)
20130 (uri (git-reference
20131 (url "https://github.com/jeffkaufman/icdiff")
20132 (commit (string-append "release-" version))))
20133 (file-name (git-file-name name version))
20134 (sha256
20135 (base32
20136 "14gr9j2h7sfw47pwfzspm4zinywhqmzm4a0qz5c2k9wbixz120a4"))))
20137 (build-system python-build-system)
20138 (home-page "https://www.jefftk.com/icdiff")
20139 (synopsis "Improved colored diff")
20140 (description "This package provides colored diff functions that highlight
20141parts of the lines that were modified.")
20142 (license license:psfl)))
20143
20144(define-public python-dirsync
20145 (package
20146 (name "python-dirsync")
20147 (version "2.2.5")
20148 (source
20149 (origin
20150 (method url-fetch)
20151 (uri (pypi-uri "dirsync" version))
20152 (sha256
20153 (base32
20154 "1gm82jddm1lkazdi8lfsl1b3vi1z0252ng60mzjym8irnv94qfhy"))))
20155 (build-system python-build-system)
20156 (propagated-inputs
20157 (list python-six))
20158 (home-page "https://github.com/tkhyn/dirsync")
20159 (synopsis "Advanced directory tree synchronisation tool")
20160 (description "Advanced directory tree synchronisation tool.")
20161 (license license:expat)))
20162
20163(define-public python-levenshtein
20164 (package
20165 (name "python-levenshtein")
20166 (version "0.12.2")
20167 (source
20168 (origin
20169 (method url-fetch)
20170 (uri (pypi-uri "python-Levenshtein" version))
20171 (sha256
20172 (base32
20173 "1xj60gymwx1jl2ra9razx2wk8nb9cv1i7l8d14qsp8a8s7xra8yw"))))
20174 (build-system python-build-system)
20175 (home-page "https://github.com/ztane/python-Levenshtein")
20176 (synopsis "Fast computation of Levenshtein distance and string similarity")
20177 (description
20178 "The Levenshtein Python C extension module contains functions for fast computation of
20179 @enumerate
20180 @item Levenshtein (edit) distance, and edit operations
20181 @item string similarity
20182 @item approximate median strings, and generally string averaging
20183 @item string sequence and set similarity
20184 @end enumerate
20185 It supports both normal and Unicode strings.")
20186 (license license:gpl2+)))
20187
20188(define-public python-scandir
20189 (package
20190 (name "python-scandir")
20191 (version "1.10.0")
20192 (source
20193 (origin
20194 (method url-fetch)
20195 (uri (pypi-uri "scandir" version))
20196 (sha256
20197 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
20198 (build-system python-build-system)
20199 (arguments
20200 `(#:phases (modify-phases %standard-phases
20201 (replace 'check
20202 (lambda _
20203 (invoke "python" "test/run_tests.py"))))))
20204 (home-page "https://github.com/benhoyt/scandir")
20205 (synopsis "Directory iteration function")
20206 (description
20207 "Directory iteration function like os.listdir(), except that instead of
20208 returning a list of bare filenames, it yields DirEntry objects that include
20209 file type and stat information along with the name. Using scandir() increases
20210 the speed of os.walk() by 2-20 times (depending on the platform and file
20211 system) by avoiding unnecessary calls to os.stat() in most cases.
20212
20213 This package is part of the Python standard library since version 3.5.")
20214 (license license:bsd-3)))
20215
20216(define-public python-factory-boy
20217 (package
20218 (name "python-factory-boy")
20219 (version "3.2.1")
20220 (source
20221 (origin
20222 (method url-fetch)
20223 (uri (pypi-uri "factory_boy" version))
20224 (sha256
20225 (base32 "0pm5lbvnwm0kg5i6z611rg907yw1gy551f2advmpaz041ixjg3d9"))))
20226 (build-system python-build-system)
20227 (arguments
20228 ;; Tests are not included in the tarball.
20229 `(#:tests? #f))
20230 (propagated-inputs (list python-faker))
20231 (home-page "https://github.com/benhoyt/scandir")
20232 (synopsis "Versatile test fixtures replacement")
20233 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
20234factory_girl. As a fixtures replacement tool, it aims to replace static, hard
20235to maintain fixtures with easy-to-use factories for complex object. Instead
20236of building an exhaustive test setup with every possible combination of corner
20237cases, factory_boy allows you to use objects customized for the current test,
20238while only declaring the test-specific fields.")
20239 (license license:expat)))
20240
20241(define-public python-translate-toolkit
20242 (package
20243 (name "python-translate-toolkit")
20244 (version "3.6.2")
20245 (source
20246 (origin
20247 (method url-fetch)
20248 (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
20249 (sha256
20250 (base32 "0m4cpsp7x7h5m5agg4ybscf7y86wla46q2lvxpi2myplb6qlgcli"))))
20251 (build-system python-build-system)
20252 (native-inputs
20253 (list python-pytest python-sphinx))
20254 (propagated-inputs
20255 (list python-babel
20256 python-beautifulsoup4
20257 python-chardet
20258 python-diff-match-patch
20259 python-levenshtein
20260 python-lxml
20261 python-six
20262 python-vobject
20263 python-pyyaml))
20264 (arguments
20265 ;; TODO: tests are not run, because they end with
20266 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
20267 ;; 'parse_funcs'
20268 ;; during test setup.
20269 (list #:tests? #f
20270 #:phases
20271 #~(modify-phases %standard-phases
20272 ;; translate-toolkit has many optional dependencies (see
20273 ;; optional.txt), which the sanity check does not understand.
20274 (delete 'sanity-check))))
20275 (home-page "https://toolkit.translatehouse.org")
20276 (synopsis "Tools and API for translation and localization engineering")
20277 (description
20278 "Tools and API for translation and localization engineering. It contains
20279 several utilities, as well as an API for building localization tools.")
20280 (license license:gpl2+)))
20281
20282
20283(define-public python-packaging
20284 (package/inherit python-packaging-bootstrap
20285 (name "python-packaging")
20286 (arguments
20287 `(#:phases (modify-phases %standard-phases
20288 (replace 'check
20289 (lambda* (#:key tests? #:allow-other-keys)
20290 (if tests?
20291 (invoke "pytest" "-vv")
20292 (format #t "test suite not run~%")))))))
20293 (native-inputs
20294 `(("python-pretend" ,python-pretend)
20295 ("python-pytest" ,python-pytest)))
20296 (propagated-inputs
20297 `(("python-pyparsing" ,python-pyparsing)
20298 ("python-six" ,python-six)))
20299 (home-page "https://github.com/pypa/packaging")
20300 (synopsis "Core utilities for Python packages")
20301 (description "Packaging is a Python module for dealing with Python packages.
20302 It offers an interface for working with package versions, names, and dependency
20303 information.")
20304 ;; From 'LICENSE': This software is made available under the terms of
20305 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
20306 ;; Contributions to this software is made under the terms of *both* these
20307 ;; licenses.
20308 (license (list license:asl2.0 license:bsd-2))))
20309
20310(define-public python-relatorio
20311 (package
20312 (name "python-relatorio")
20313 (version "0.10.0")
20314 (source
20315 (origin
20316 (method url-fetch)
20317 (uri (pypi-uri "relatorio" version))
20318 (sha256
20319 (base32
20320 "09nhrz80dfm60nssbvjgz4czzy4yzfa8gxczcdlzbgcnnvm914vb"))))
20321 (build-system python-build-system)
20322 (propagated-inputs
20323 (list python-lxml python-genshi))
20324 (native-inputs
20325 (list python-magic))
20326 (home-page "https://relatorio.tryton.org/")
20327 (synopsis "Templating library able to output ODT and PDF files")
20328 (description "Relatorio is a templating library which provides a way to
20329 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
20330 for more filetypes can be easily added by creating plugins for them.")
20331 (license license:gpl3+)))
20332
20333(define-public python-radon
20334 (package
20335 (name "python-radon")
20336 (version "5.1.0")
20337 (source
20338 (origin
20339 (method url-fetch)
20340 (uri (pypi-uri "radon" version))
20341 (sha256
20342 (base32
20343 "1vmf56zsf3paa1jadjcjghiv2kxwiismyayq42ggnqpqwm98f7fb"))))
20344 (build-system python-build-system)
20345 (arguments
20346 `(#:phases (modify-phases %standard-phases
20347 (add-after 'unpack 'relax-requirements
20348 (lambda _
20349 (substitute* "setup.py"
20350 ((".*'future'.*")
20351 "")
20352 (("mando>=0\\.6,<0\\.7")
20353 "mando>=0.6")
20354 (("colorama==0.4.1")
20355 "colorama>=0.4.1"))))
20356 (replace 'check
20357 (lambda _
20358 (invoke "python" "radon/tests/run.py"))))))
20359 (propagated-inputs (list python-colorama python-mando))
20360 (native-inputs (list python-pytest python-pytest-mock))
20361 (home-page "https://radon.readthedocs.org/")
20362 (synopsis "Code Metrics in Python")
20363 (description "Radon is a Python tool which computes various code metrics.
20364 Supported metrics are:
20365 @itemize @bullet
20366 @item raw metrics: SLOC, comment lines, blank lines, &c.
20367 @item Cyclomatic Complexity (i.e., McCabe’s Complexity)
20368 @item Halstead metrics (all of them)
20369 @item the Maintainability Index (a Visual Studio metric)
20370 @end itemize")
20371 (license license:expat)))
20372
20373(define-public python-sure
20374 (package
20375 (name "python-sure")
20376 (version "1.4.11")
20377 (source
20378 (origin
20379 (method url-fetch)
20380 (uri (pypi-uri "sure" version))
20381 (sha256
20382 (base32
20383 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
20384 (build-system python-build-system)
20385 (propagated-inputs
20386 (list python-mock python-six))
20387 (native-inputs
20388 (list python-nose))
20389 (home-page "https://github.com/gabrielfalcao/sure")
20390 (synopsis "Automated testing library in python for python")
20391 (description
20392 "Sure is a python library that leverages a DSL for writing assertions.
20393 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
20394 (license license:gpl3+)))
20395
20396(define-public python-misaka
20397 (package
20398 (name "python-misaka")
20399 (version "2.1.1")
20400 (source
20401 (origin
20402 (method url-fetch)
20403 (uri (pypi-uri "misaka" version))
20404 (sha256
20405 (base32
20406 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
20407 (build-system python-build-system)
20408 (arguments
20409 `(;; Line 37 of setup.py calls self.run_command('develop')
20410 ;; in the 'check' phase. This command seems to be trying
20411 ;; to write to
20412 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
20413 ;; for which it does not have the permission to write.
20414 #:tests? #f))
20415 (propagated-inputs
20416 (list python-cffi))
20417 (home-page "https://github.com/FSX/misaka")
20418 (synopsis "Python binding for Hoedown")
20419 (description
20420 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
20421 library written in C. It features a fast HTML renderer and functionality to make custom
20422 renderers (e.g. man pages or LaTeX).")
20423 (license license:expat)))
20424
20425(define-public python-jsonpointer
20426 (package
20427 (name "python-jsonpointer")
20428 (version "1.10")
20429 (source
20430 (origin
20431 (method url-fetch)
20432 (uri (pypi-uri "jsonpointer" version))
20433 (sha256
20434 (base32
20435 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
20436 (build-system python-build-system)
20437 (home-page "https://github.com/stefankoegl/python-json-pointer")
20438 (synopsis "Identify specific nodes in a JSON document")
20439 (description "@code{jsonpointer} allows you to access specific nodes
20440 by path in a JSON document (see RFC 6901).")
20441 (license license:bsd-3)))
20442
20443(define-public python-jsonpatch
20444 (package
20445 (name "python-jsonpatch")
20446 (version "1.16")
20447 (source
20448 (origin
20449 (method git-fetch)
20450 ;; pypi version lacks tests.js
20451 (uri (git-reference
20452 (url "https://github.com/stefankoegl/python-json-patch")
20453 (commit (string-append "v" version))))
20454 (file-name (git-file-name name version))
20455 (sha256
20456 (base32
20457 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
20458 (build-system python-build-system)
20459 (propagated-inputs
20460 (list python-jsonpointer))
20461 (home-page "https://github.com/stefankoegl/python-json-patch")
20462 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
20463 (description "@code{jsonpatch} is a library and program that allows
20464 applying JSON Patches according to RFC 6902.")
20465 (license license:bsd-3)))
20466
20467(define-public python-jsonpatch-0.4
20468 (package (inherit python-jsonpatch)
20469 (name "python-jsonpatch")
20470 (version "0.4")
20471 (source
20472 (origin
20473 (method git-fetch)
20474 (uri (git-reference
20475 (url "https://github.com/stefankoegl/python-json-patch")
20476 (commit (string-append "v" version))))
20477 (file-name (git-file-name name version))
20478 (sha256
20479 (base32
20480 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
20481
20482(define-public python-rfc3986
20483 (package
20484 (name "python-rfc3986")
20485 (version "1.4.0")
20486 (source (origin
20487 (method url-fetch)
20488 (uri (pypi-uri "rfc3986" version))
20489 (sha256
20490 (base32
20491 "17dvx15m3r49bmif5zlli8kzjd6bys6psixzbp14sd5367d9h8qi"))))
20492 (build-system python-build-system)
20493 (arguments
20494 `(#:phases
20495 (modify-phases %standard-phases
20496 (replace 'check
20497 (lambda _
20498 (invoke "pytest" "-v"))))))
20499 (native-inputs
20500 (list python-pytest))
20501 (home-page "https://rfc3986.readthedocs.io/")
20502 (synopsis "Parse and validate URI references")
20503 (description
20504 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
20505 validation and authority parsing. This module also supports RFC@tie{}6874
20506 which adds support for zone identifiers to IPv6 addresses.")
20507 (license license:asl2.0)))
20508
20509(define-public python-rfc3987
20510 (package
20511 (name "python-rfc3987")
20512 (version "1.3.7")
20513 (source
20514 (origin
20515 (method url-fetch)
20516 (uri (pypi-uri "rfc3987" version))
20517 (sha256
20518 (base32
20519 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
20520 (build-system python-build-system)
20521 (home-page "https://pypi.org/project/rfc3987/")
20522 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
20523 (description "@code{rfc3987} provides routines for parsing and
20524 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
20525 (license license:gpl3+)))
20526
20527;; The latest commit contains fixes for building with both python3 and python2.
20528(define-public python-rfc6555
20529 (let ((commit "1a181b432312731f6742a5eb558dae4761d32361")
20530 (revision "1"))
20531 (package
20532 (name "python-rfc6555")
20533 (version (git-version "0.0.0" revision commit))
20534 (source (origin
20535 (method git-fetch)
20536 (uri (git-reference
20537 (url "https://github.com/sethmlarson/rfc6555")
20538 (commit commit)))
20539 (file-name (git-file-name name version))
20540 (sha256
20541 (base32
20542 "1bxl17j9vs69cshcqnlwamr03hnykxqnwz3mdgi6x3s2k4q18npp"))))
20543 (build-system python-build-system)
20544 (arguments
20545 '(#:phases
20546 (modify-phases %standard-phases
20547 (replace 'check
20548 (lambda* (#:key tests? #:allow-other-keys)
20549 (if tests?
20550 ;; Other tests require network access.
20551 (invoke "pytest" "tests/test_ipv6.py")
20552 #t))))))
20553 (native-inputs
20554 (list python-pytest))
20555 (home-page "https://pypi.org/project/rfc6555/")
20556 (synopsis "Python implementation of RFC 6555")
20557 (description
20558 "Python implementation of the Happy Eyeballs Algorithm described in RFC
20559 6555. Provided with a single file and dead-simple API to allow easy vendoring
20560 and integration into other projects.")
20561 (license license:asl2.0))))
20562
20563(define-public python-bagit
20564 (package
20565 (name "python-bagit")
20566 (version "1.7.0")
20567 (source
20568 (origin
20569 (method url-fetch)
20570 (uri (pypi-uri "bagit" version))
20571 (sha256
20572 (base32
20573 "1m6y04qmig0b5hzb35lnaw3d2yfydb7alyr1579yblvgs3da6j7j"))))
20574 (build-system python-build-system)
20575 (native-inputs
20576 (list python-setuptools-scm python-coverage python-mock))
20577 (home-page "https://libraryofcongress.github.io/bagit-python/")
20578 (synopsis "Create and validate BagIt packages")
20579 (description "Bagit is a Python library and command line utility for working
20580 with BagIt style packages. BagIt is a minimalist packaging format for digital
20581 preservation.")
20582 (license license:cc0)))
20583
20584(define-public python-prov
20585 (package
20586 (name "python-prov")
20587 (version "2.0.0")
20588 (source
20589 (origin
20590 (method url-fetch)
20591 (uri (pypi-uri "prov" version))
20592 (sha256
20593 (base32
20594 "1vi2fj31vygfcqrkimdmk52q2ldw08g9fn4v4zlgdfgcjlhqyhxn"))))
20595 (build-system python-build-system)
20596 (propagated-inputs
20597 (list python-dateutil python-lxml python-networkx python-rdflib-5))
20598 (native-inputs
20599 (list graphviz python-pydot))
20600 (home-page "https://github.com/trungdong/prov")
20601 (synopsis
20602 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
20603 (description
20604 "This package provides a library for W3C Provenance Data Model supporting
20605 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
20606 (license license:expat)))
20607
20608(define-public python-arcp
20609 (package
20610 (name "python-arcp")
20611 (version "0.2.1")
20612 (source
20613 (origin
20614 (method url-fetch)
20615 (uri (pypi-uri "arcp" version))
20616 (sha256
20617 (base32
20618 "1p8mfyjssa6pbn5dp6pyzv9yy6kwm2rz5jn2kjbq5vy9f9wsq5sw"))))
20619 (build-system python-build-system)
20620 (native-inputs
20621 (list python-pytest))
20622 (home-page "http://arcp.readthedocs.io/")
20623 (synopsis
20624 "Archive and Package URI parser and generator")
20625 (description
20626 "@acronym{arcp, Archive and Package} provides functions for creating
20627 @code{arcp_} URIs, which can be used for identifying or parsing hypermedia files
20628 packaged in an archive or package, like a ZIP file. arcp URIs can be used to
20629 consume or reference hypermedia resources bundled inside a file archive or an
20630 application package, as well as to resolve URIs for archive resources within a
20631 programmatic framework. This URI scheme provides mechanisms to generate a
20632 unique base URI to represent the root of the archive, so that relative URI
20633 references in a bundled resource can be resolved within the archive without
20634 having to extract the archive content on the local file system. An arcp URI can
20635 be used for purposes of isolation (e.g. when consuming multiple archives),
20636 security constraints (avoiding \"climb out\" from the archive), or for
20637 externally identiyfing sub-resources referenced by hypermedia formats.")
20638 (license license:asl2.0)))
20639
20640(define-public python-shellescape
20641 (package
20642 (name "python-shellescape")
20643 (version "3.8.1")
20644 (source
20645 (origin
20646 (method git-fetch)
20647 (uri (git-reference
20648 (url "https://github.com/chrissimpkins/shellescape")
20649 (commit (string-append "v" version))))
20650 (file-name (git-file-name name version))
20651 (sha256
20652 (base32
20653 "0wzccxk139qx1lb2g70f5b2yh9zq15nr2mgvqdbfabg5zm0vf1qw"))))
20654 (build-system python-build-system)
20655 (arguments
20656 '(#:phases
20657 (modify-phases %standard-phases
20658 (replace 'check
20659 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
20660 (when tests?
20661 (add-installed-pythonpath inputs outputs)
20662 (invoke "python" "tests/test_shellescape.py"))
20663 #t)))))
20664 (native-inputs
20665 (list python-pytest))
20666 (home-page "https://github.com/chrissimpkins/shellescape")
20667 (synopsis
20668 "Shell escape a string to safely use it as a token in a shell command")
20669 (description
20670 "The shellescape Python module defines the @code{shellescape.quote()}
20671 function that returns a shell-escaped version of a Python string. This is a
20672 backport of the @code{shlex.quote()} function from Python 3.8 that makes it
20673 accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
20674 (license license:expat)))
20675
20676(define-public python-validators
20677 (package
20678 (name "python-validators")
20679 (version "0.18.2")
20680 (source (origin
20681 (method url-fetch)
20682 (uri (pypi-uri "validators" version))
20683 (sha256
20684 (base32
20685 "19lypf7hm7p203ay3v8zmckc5rv6889zkfdm16nki1972f99mk9p"))))
20686 (build-system python-build-system)
20687 (arguments
20688 '(#:phases (modify-phases %standard-phases
20689 (replace 'check
20690 (lambda _
20691 (invoke "pytest" "-vv"))))))
20692 (propagated-inputs
20693 (list python-decorator python-six))
20694 (native-inputs
20695 (list python-flake8 python-isort python-pytest))
20696 (home-page "https://github.com/kvesteri/validators")
20697 (synopsis "Data validation library")
20698 (description
20699 "This package contains validators for different things such as email
20700 addresses, IP addresses, URLs, hashes and more. It has been designed to
20701 be easy to use and not require defining a schema or form just to validate
20702 some input.")
20703 (license license:expat)))
20704
20705(define-public python-validate-email
20706 (package
20707 (name "python-validate-email")
20708 (version "1.3")
20709 (source
20710 (origin
20711 (method url-fetch)
20712 (uri (pypi-uri "validate_email" version))
20713 (sha256
20714 (base32
20715 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
20716 (build-system python-build-system)
20717 (home-page "https://github.com/syrusakbary/validate_email")
20718 (synopsis "Verifies if an email address is valid and really exists")
20719 (description "@code{validate_email} can be used to verify if an email
20720 address is valid and really exists.")
20721 (license license:lgpl3+)))
20722
20723(define-public python-flex
20724 (package
20725 (name "python-flex")
20726 (version "6.10.0")
20727 (source
20728 (origin
20729 (method url-fetch)
20730 (uri (pypi-uri "flex" version))
20731 (sha256
20732 (base32
20733 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
20734 (build-system python-build-system)
20735 (propagated-inputs
20736 (list python-click
20737 python-iso8601
20738 python-jsonpointer
20739 python-pyyaml
20740 python-requests
20741 python-rfc3987
20742 python-six
20743 python-validate-email))
20744 (home-page "https://github.com/pipermerriam/flex")
20745 (synopsis "Validates Swagger schemata")
20746 (description "@code{flex} can be used to validate Swagger schemata.")
20747 (license license:bsd-3)))
20748
20749(define-public python-marshmallow
20750 (package
20751 (name "python-marshmallow")
20752 (version "3.9.1")
20753 (source
20754 (origin
20755 (method url-fetch)
20756 (uri (pypi-uri "marshmallow" version))
20757 (sha256
20758 (base32
20759 "0kizhh3mnhpa08wfnsv1gagy22bpxzxszgbiylkhpz1d8qvwrykk"))))
20760 (build-system python-build-system)
20761 (propagated-inputs
20762 (list python-dateutil python-simplejson))
20763 (native-inputs
20764 (list python-pytest python-pytz))
20765 (home-page "https://github.com/marshmallow-code/marshmallow")
20766 (synopsis "Convert complex datatypes to and from native
20767 Python datatypes")
20768 (description "@code{marshmallow} provides a library for converting
20769 complex datatypes to and from native Python datatypes.")
20770 (license license:expat)))
20771
20772(define-public python-marshmallow-jsonapi
20773 (package
20774 (name "python-marshmallow-jsonapi")
20775 (version "0.24.0")
20776 (source
20777 (origin
20778 (method url-fetch)
20779 (uri (pypi-uri "marshmallow-jsonapi" version))
20780 (sha256
20781 (base32 "1d9pxcgmln4gls99vwj1h24qv0lz7fb2jqmqrsiv1pid1snc125x"))))
20782 (build-system python-build-system)
20783 (propagated-inputs
20784 (list python-marshmallow))
20785 (native-inputs
20786 (list python-faker
20787 python-flake8
20788 python-flake8-bugbear
20789 python-flask
20790 python-mock
20791 python-pre-commit
20792 python-pytest
20793 python-tox))
20794 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
20795 (synopsis "JSON:API 1.0 formatting with Marshmallow")
20796 (description
20797 "The marshmallow-jsonapi package provides a simple way to produce
20798 @uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web framework.
20799 It includes optional utilities to integrate with Flask.")
20800 (license license:expat)))
20801
20802(define-public python-apispec
20803 (package
20804 (name "python-apispec")
20805 (version "4.0.0")
20806 (source
20807 (origin
20808 (method url-fetch)
20809 (uri (pypi-uri "apispec" version))
20810 (sha256
20811 (base32
20812 "12n4w5zkn4drcn8izq68vmixmqvz6abviqkdn4ip0kaax3jjh3in"))))
20813 (build-system python-build-system)
20814 (arguments
20815 '(#:phases (modify-phases %standard-phases
20816 (replace 'check
20817 (lambda _
20818 (invoke "pytest" "-vv"
20819 ;; Disable validation tests since they require
20820 ;; the optional 'prance' library which is not
20821 ;; yet in Guix.
20822 "-k" "not openapi_tools_validate"))))))
20823 (propagated-inputs
20824 (list python-pyyaml))
20825 (native-inputs
20826 (list python-pytest python-marshmallow))
20827 (home-page "https://github.com/marshmallow-code/apispec")
20828 (synopsis "Swagger/OpenAPI specification generator")
20829 (description "@code{python-apispec} is a pluggable API specification
20830 generator. It currently supports the OpenAPI specification, formerly known
20831 as Swagger.")
20832 (license license:expat)))
20833
20834(define-public python-flasgger
20835 (package
20836 (name "python-flasgger")
20837 (version "0.6.3")
20838 (source
20839 (origin
20840 (method git-fetch)
20841 (uri (git-reference
20842 (url "https://github.com/rochacbruno/flasgger")
20843 (commit version)))
20844 (file-name (git-file-name name version))
20845 (sha256
20846 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
20847 (build-system python-build-system)
20848 (arguments
20849 `(#:phases
20850 (modify-phases %standard-phases
20851 (replace 'check
20852 (lambda* (#:key inputs outputs #:allow-other-keys)
20853 (substitute* "Makefile"
20854 (("flake8 flasgger --ignore=F403")
20855 "flake8 flasgger --ignore=E731,F403"))
20856 (invoke "py.test"))))))
20857 (propagated-inputs
20858 (list python-flask python-pyyaml python-jsonschema python-mistune
20859 python-six))
20860 (native-inputs
20861 (list python-decorator
20862 python-flake8
20863 python-flask-restful
20864 python-flex
20865 python-pytest
20866 python-pytest-cov
20867 python-marshmallow
20868 python-apispec))
20869 (home-page "https://github.com/rochacbruno/flasgger/")
20870 (synopsis "Extract Swagger specs from your Flask project")
20871 (description "@code{python-flasgger} allows extracting Swagger specs
20872 from your Flask project. It is a fork of Flask-Swagger.")
20873 (license license:expat)))
20874
20875(define-public python-swagger-spec-validator
20876 (package
20877 (name "python-swagger-spec-validator")
20878 (version "2.4.3")
20879 (source
20880 (origin
20881 (method url-fetch)
20882 (uri (pypi-uri "swagger-spec-validator" version))
20883 (sha256
20884 (base32
20885 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
20886 (build-system python-build-system)
20887 (propagated-inputs
20888 (list python-jsonschema python-pyyaml python-six))
20889 (home-page
20890 "https://github.com/Yelp/swagger_spec_validator")
20891 (synopsis "Validation of Swagger specifications")
20892 (description "@code{swagger_spec_validator} provides a library for
20893 validating Swagger API specifications.")
20894 (license license:asl2.0)))
20895
20896(define-public python-apache-libcloud
20897 (package
20898 (name "python-apache-libcloud")
20899 (version "3.1.0")
20900 (source
20901 (origin
20902 (method url-fetch)
20903 (uri (pypi-uri "apache-libcloud" version))
20904 (sha256
20905 (base32
20906 "1b28j265kvibgxrgxx0gwfm6cmv252c8ph1j2vb0cpms8ph5if5v"))))
20907 (build-system python-build-system)
20908 (arguments
20909 '(#:phases
20910 (modify-phases %standard-phases
20911 (add-after 'unpack 'patch-ssh
20912 (lambda* (#:key inputs #:allow-other-keys)
20913 (substitute* "libcloud/compute/ssh.py"
20914 (("'ssh'")
20915 (string-append "'" (search-input-file inputs "/bin/ssh")
20916 "'")))))
20917 (add-after 'unpack 'patch-tests
20918 (lambda _
20919 (substitute* "libcloud/test/compute/test_ssh_client.py"
20920 (("^class ShellOutSSHClientTests")
20921 "@unittest.skip(\"Guix container doesn't have ssh service\")
20922class ShellOutSSHClientTests"))))
20923 (add-before 'check 'copy-secret
20924 (lambda _
20925 (copy-file "libcloud/test/secrets.py-dist"
20926 "libcloud/test/secrets.py"))))))
20927 (inputs
20928 (list openssh))
20929 (propagated-inputs
20930 (list python-paramiko python-requests))
20931 (native-inputs
20932 (list python-lockfile python-mock python-pytest python-pytest-runner
20933 python-requests-mock))
20934 (home-page "https://libcloud.apache.org/")
20935 (synopsis "Unified Cloud API")
20936 (description "@code{libcloud} is a Python library for interacting with
20937 many of the popular cloud service providers using a unified API.")
20938 (license license:asl2.0)))
20939
20940(define-public python-smmap
20941 (package
20942 (name "python-smmap")
20943 (version "3.0.1")
20944 (source
20945 (origin
20946 (method url-fetch)
20947 (uri (pypi-uri "smmap" version))
20948 (sha256
20949 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
20950 (build-system python-build-system)
20951 (native-inputs
20952 (list python-nosexcover))
20953 (home-page "https://github.com/Byron/smmap")
20954 (synopsis "Python sliding window memory map manager")
20955 (description "@code{smmap} is a pure Python implementation of a sliding
20956 window memory map manager.")
20957 (license license:bsd-3)))
20958
20959(define-public python-regex
20960 (package
20961 (name "python-regex")
20962 (version "2022.1.18")
20963 (source (origin
20964 (method url-fetch)
20965 (uri (pypi-uri "regex" version))
20966 (sha256
20967 (base32
20968 "05ir92d0cmv8wkafn3r05j5q47l6shg7cpdblp2a8m407b02vwwp"))))
20969 (build-system python-build-system)
20970 (arguments
20971 '(#:phases
20972 (modify-phases %standard-phases
20973 (replace 'check
20974 (lambda* (#:key inputs outputs #:allow-other-keys)
20975 (add-installed-pythonpath inputs outputs)
20976 (invoke "python" "-c"
20977 "from regex.test_regex import test_main ; test_main()"))))))
20978 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
20979 (synopsis "Alternative regular expression module")
20980 (description "This regular expression implementation is backwards-
20981compatible with the standard @code{re} module, but offers additional
20982functionality like full case-folding for case-insensitive matches in Unicode.")
20983 (license license:psfl)))
20984
20985(define-public python-pyopengl
20986 (package
20987 (name "python-pyopengl")
20988 (version "3.1.5")
20989 (source
20990 (origin
20991 (method url-fetch)
20992 (uri (pypi-uri "PyOpenGL" version))
20993 (sha256
20994 (base32
20995 "091lp9bpqi8yf1nmyg19xmvw611lrzq2q94cl1k5gnlh0c6vl1s1"))))
20996 (build-system python-build-system)
20997 (inputs
20998 (list mesa freeglut glu))
20999 (arguments
21000 `(#:tests? #f ; Tests fail: AttributeError: 'GLXPlatform' object has no
21001 ;attribute 'OSMesa'
21002 #:phases
21003 (modify-phases %standard-phases
21004 (add-before 'build 'fix-paths
21005 (lambda* (#:key inputs outputs #:allow-other-keys)
21006 (substitute* '("OpenGL/platform/ctypesloader.py")
21007 (("filenames_to_try = \\[\\]") "filenames_to_try = [name]"))
21008 (substitute* '("OpenGL/platform/glx.py" "tests/check_glut_load.py")
21009 (("'GL'")
21010 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGL.so'"))
21011 (("'GLU'")
21012 (string-append "'" (assoc-ref inputs "glu") "/lib/libGLU.so'"))
21013 (("'glut',")
21014 (string-append "'" (assoc-ref inputs "freeglut") "/lib/libglut.so',"))
21015 (("'GLESv1_CM'")
21016 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv1_CM.so'"))
21017 (("'GLESv2'")
21018 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv2.so'")))
21019 ;; Not providing libgle. It seems to be very old.
21020 #t)))))
21021 (home-page "http://pyopengl.sourceforge.net")
21022 (synopsis "Standard OpenGL bindings for Python")
21023 (description
21024 "PyOpenGL is the most common cross platform Python binding to OpenGL and
21025related APIs. The binding is created using the standard @code{ctypes}
21026library.")
21027 (license license:bsd-3)))
21028
21029(define-public python-pyopengl-accelerate
21030 (package
21031 (inherit python-pyopengl)
21032 (name "python-pyopengl-accelerate")
21033 (version "3.1.5")
21034 (source
21035 (origin
21036 (method url-fetch)
21037 (uri (pypi-uri "PyOpenGL-accelerate" version))
21038 (sha256
21039 (base32
21040 "01iggy5jwxv7lxnj51zbmlbhag9wcb7dvrbwgi97i90n0a5m3r8j"))))
21041 (inputs
21042 (list mesa python-numpy)) ; for cython module
21043 ; numpy_formathandler, thus not propagated
21044 (arguments
21045 `(#:tests? #f
21046 #:phases
21047 (modify-phases %standard-phases
21048 (delete 'fix-paths))))
21049 (synopsis "Acceleration code for PyOpenGL")
21050 (description
21051 "This is the Cython-coded accelerator module for PyOpenGL.")))
21052
21053(define-public python-rencode
21054 (package
21055 (name "python-rencode")
21056 (version "1.0.5")
21057 (source
21058 (origin
21059 (method url-fetch)
21060 (uri (pypi-uri "rencode" version))
21061 (sha256
21062 (base32
21063 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
21064 (build-system python-build-system)
21065 (arguments
21066 `(#:phases
21067 (modify-phases %standard-phases
21068 (add-before 'check 'delete-bogus-test
21069 ;; This test requires /home/aresch/Downloads, which is not provided by
21070 ;; the build environment.
21071 (lambda _
21072 (delete-file "rencode/t.py")
21073 #t)))))
21074 (native-inputs (list pkg-config python-cython))
21075 (home-page "https://github.com/aresch/rencode")
21076 (synopsis "Serialization of heterogeneous data structures")
21077 (description
21078 "The @code{rencode} module is a data structure serialization library,
21079similar to @code{bencode} from the BitTorrent project. For complex,
21080heterogeneous data structures with many small elements, r-encoding stake up
21081significantly less space than b-encodings. This version of rencode is a
21082complete rewrite in Cython to attempt to increase the performance over the
21083pure Python module.")
21084 (license license:bsd-3)))
21085
21086(define-public python-pysocks
21087 (package
21088 (name "python-pysocks")
21089 (version "1.7.1")
21090 (source
21091 (origin
21092 (method url-fetch)
21093 (uri (pypi-uri "PySocks" version))
21094 (sha256
21095 (base32
21096 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
21097 (build-system python-build-system)
21098 (arguments `(#:tests? #f))
21099 (home-page "https://github.com/Anorov/PySocks")
21100 (synopsis "SOCKS client module")
21101 (description "@code{pysocks} is an updated and semi-actively maintained
21102version of @code{SocksiPy} with bug fixes and extra features.")
21103 (license license:bsd-3)))
21104
21105(define-public python-pydiff
21106 (package
21107 (name "python-pydiff")
21108 (version "0.2")
21109 (source
21110 (origin
21111 (method url-fetch)
21112 (uri (pypi-uri "pydiff" version))
21113 (sha256
21114 (base32
21115 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
21116 (build-system python-build-system)
21117 (home-page "https://github.com/myint/pydiff")
21118 (synopsis "Library to diff two Python files at the bytecode level")
21119 (description
21120 "@code{pydiff} makes it easy to look for actual code changes while
21121ignoring formatting changes.")
21122 (license license:expat)))
21123
21124(define-public python-pydub
21125 (package
21126 (name "python-pydub")
21127 (version "0.25.1")
21128 (source
21129 (origin
21130 (method url-fetch)
21131 (uri (pypi-uri "pydub" version))
21132 (sha256
21133 (base32
21134 "03ykn2kp6qglsrzqi5h79z5cp3kl9mknasv0d6jv5jj9k77362lq"))))
21135 (build-system python-build-system)
21136 (arguments
21137 `(#:phases
21138 (modify-phases %standard-phases
21139 (add-after 'unpack 'fix-ffmpeg-path
21140 (lambda* (#:key inputs #:allow-other-keys)
21141 (let ((ffmpeg (assoc-ref inputs "ffmpeg")))
21142 (substitute* '("pydub/utils.py")
21143 (("return \"ffmpeg\"")
21144 (string-append "return \"" ffmpeg "/bin/ffmpeg\""))
21145 (("return \"ffplay\"")
21146 (string-append "return \"" ffmpeg "/bin/ffplay\""))
21147 (("return \"ffprobe\"")
21148 (string-append "return \"" ffmpeg "/bin/ffprobe\""))
21149 (("warn\\(\"Couldn't find ff") "# warn\\(\"Couldn't find ff"))
21150 #t))))))
21151 (home-page "https://pydub.com")
21152 (inputs
21153 (list ffmpeg))
21154 (propagated-inputs
21155 (list python-scipy))
21156 (synopsis "Manipulate audio with a high level interface in Python")
21157 (description
21158 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
21159@code{ffmpeg} to open various audio formats.")
21160 (license license:expat))) ; MIT license
21161
21162(define-public python-tqdm
21163 (package
21164 (name "python-tqdm")
21165 (version "4.64.1")
21166 (source
21167 (origin
21168 (method url-fetch)
21169 (uri (pypi-uri "tqdm" version))
21170 (sha256
21171 (base32
21172 "1r7i9kswpnrx4ppfvzz6discb04j1rqkqxdwa2sc2la900m6hksz"))))
21173 (build-system python-build-system)
21174 (arguments
21175 '(#:phases (modify-phases %standard-phases
21176 (replace 'check
21177 (lambda _
21178 (invoke "pytest" "-vv"
21179 "-o" "asyncio_mode=auto"
21180 "-k" "not perf"))))))
21181 (native-inputs
21182 (list python-pytest python-pytest-asyncio python-pytest-timeout
21183 python-setuptools-scm python-toml))
21184 (home-page "https://github.com/tqdm/tqdm")
21185 (synopsis "Fast, extensible progress meter")
21186 (description
21187 "Make loops show a progress bar on the console by just wrapping any
21188iterable with @code{|tqdm(iterable)|}. Offers many options to define
21189design and layout.")
21190 (license (list license:mpl2.0 license:expat))))
21191
21192(define-public python-pkginfo
21193 (package
21194 (name "python-pkginfo")
21195 (version "1.8.3")
21196 (source
21197 (origin
21198 (method url-fetch)
21199 (uri (pypi-uri "pkginfo" version))
21200 (sha256
21201 (base32 "0z46w559hrl79gf7navgzimj21ma821wka27jh58fvyqilqs8kd8"))))
21202 (build-system python-build-system)
21203 (native-inputs
21204 (list python-wheel))
21205 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
21206 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
21207 (description
21208 "API to query the distutils metadata written in @file{PKG-INFO} inside a
21209source distriubtion (an sdist) or a binary distribution (e.g., created by
21210running bdist_egg). It can also query the EGG-INFO directory of an installed
21211distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
21212created by running @code{python setup.py develop}).")
21213 (license license:expat)))
21214
21215(define-public python-twine
21216 (package
21217 (name "python-twine")
21218 (version "1.15.0")
21219 (source
21220 (origin
21221 (method url-fetch)
21222 (uri (pypi-uri "twine" version))
21223 (sha256
21224 (base32 "11rpd653zcgzkq3sgwkzs3mpxl3r5rij59745ni84ikv8smjmlm3"))))
21225 (build-system python-build-system)
21226 (propagated-inputs
21227 (list python-tqdm
21228 python-packaging
21229 python-pkginfo
21230 python-readme-renderer
21231 python-requests
21232 python-requests-toolbelt))
21233 (home-page "https://github.com/pypa/twine")
21234 (synopsis "Collection of utilities for interacting with PyPI")
21235 (description
21236 "@code{twine} currently supports registering projects and uploading
21237distributions. It authenticates the user over HTTPS, allows them to pre-sign
21238their files and supports any packaging format (including wheels).")
21239 (license license:asl2.0)))
21240
21241(define-public python-linecache2
21242 (package
21243 (name "python-linecache2")
21244 (version "1.0.0")
21245 (source
21246 (origin
21247 (method url-fetch)
21248 (uri (pypi-uri "linecache2" version))
21249 (sha256
21250 (base32
21251 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
21252 (build-system python-build-system)
21253 (arguments
21254 `(;; The tests depend on unittest2, and our version is a bit too old.
21255 #:tests? #f))
21256 (native-inputs
21257 `(("python-pbr" ,python-pbr-minimal)))
21258 (home-page
21259 "https://github.com/testing-cabal/linecache2")
21260 (synopsis "Backports of the linecache module")
21261 (description
21262 "The linecache module allows one to get any line from any file, while
21263attempting to optimize internally, using a cache, the common case where many
21264lines are read from a single file.")
21265 (license license:psfl)))
21266
21267(define-public python-traceback2
21268 (package
21269 (name "python-traceback2")
21270 (version "1.4.0")
21271 (source
21272 (origin
21273 (method url-fetch)
21274 (uri (pypi-uri "traceback2" version))
21275 (sha256
21276 (base32
21277 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
21278 (build-system python-build-system)
21279 (arguments
21280 `(;; python-traceback2 and python-unittest2 depend on one another.
21281 #:tests? #f))
21282 (native-inputs
21283 `(("python-pbr" ,python-pbr-minimal)))
21284 (propagated-inputs
21285 (list python-linecache2 python-six))
21286 (home-page
21287 "https://github.com/testing-cabal/traceback2")
21288 (synopsis "Backports of the traceback module")
21289 (description
21290 "This module provides a standard interface to extract, format and print
21291stack traces of Python programs. It exactly mimics the behavior of the Python
21292interpreter when it prints a stack trace.")
21293 (license license:psfl)))
21294
21295(define-public python-ratelimiter
21296 (package
21297 (name "python-ratelimiter")
21298 (version "1.2.0")
21299 (source
21300 (origin
21301 (method url-fetch)
21302 (uri (pypi-uri "ratelimiter" version))
21303 (sha256
21304 (base32
21305 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
21306 (build-system python-build-system)
21307 (arguments
21308 '(#:tests? #f)) ; There are no tests in the pypi archive.
21309 (home-page "https://github.com/RazerM/ratelimiter")
21310 (synopsis "Simple rate limiting object")
21311 (description
21312 "The @code{ratelimiter} module ensures that an operation will not be
21313executed more than a given number of times during a given period.")
21314 (license license:asl2.0)))
21315
21316(define-public python-jsonrpclib-pelix
21317 (package
21318 (name "python-jsonrpclib-pelix")
21319 (version "0.3.2")
21320 (source
21321 (origin
21322 (method url-fetch)
21323 (uri (pypi-uri "jsonrpclib-pelix" version))
21324 (sha256
21325 (base32
21326 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
21327 (build-system python-build-system)
21328 (arguments
21329 `(#:tests? #f)) ; no tests in PyPI tarball
21330 (home-page "https://github.com/tcalmant/jsonrpclib/")
21331 (synopsis "JSON-RPC 2.0 client library for Python")
21332 (description
21333 "This library implements the JSON-RPC v2.0
21334specification (backwards-compatible) as a client library for Python. This
21335version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
21336services.")
21337 (license license:asl2.0)))
21338
21339(define-public python-setuptools-scm-git-archive
21340 (package
21341 (name "python-setuptools-scm-git-archive")
21342 (version "1.0")
21343 (source
21344 (origin
21345 (method url-fetch)
21346 (uri (pypi-uri "setuptools_scm_git_archive" version))
21347 (sha256
21348 (base32
21349 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
21350 (build-system python-build-system)
21351 (arguments
21352 '(#:phases (modify-phases %standard-phases
21353 (add-after 'unpack 'dont-install-defunct-egginfo
21354 (lambda _
21355 ;; When a ".git" directory is missing, the setup.py
21356 ;; script invokes setuptools.setup twice, once with
21357 ;; "0" as the version. Prevent that.
21358 (substitute* "setup.py"
21359 (("if not isdir\\('\\.git'\\):")
21360 "if False:")))))))
21361 (native-inputs
21362 (list python-pytest))
21363 (propagated-inputs
21364 (list python-setuptools-scm))
21365 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
21366 (synopsis "Setuptools_scm plugin for git archives")
21367 (description
21368 "The setuptools_scm_git_archive package is a plugin to
21369setuptools_scm, which supports obtaining versions from git archives that
21370belong to tagged versions.")
21371 (license license:expat)))
21372
21373(define-public python-setuptools-git
21374 (package
21375 (name "python-setuptools-git")
21376 (version "1.2")
21377 (source
21378 (origin
21379 (method url-fetch)
21380 (uri (pypi-uri "setuptools-git" version))
21381 (sha256
21382 (base32
21383 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
21384 (build-system python-build-system)
21385 (arguments
21386 `(#:phases
21387 (modify-phases %standard-phases
21388 ;; This is needed for tests.
21389 (add-after 'unpack 'configure-git
21390 (lambda _
21391 (setenv "HOME" "/tmp")
21392 (invoke "git" "config" "--global" "user.email" "guix")
21393 (invoke "git" "config" "--global" "user.name" "guix")
21394 #t)))))
21395 (native-inputs
21396 `(("git" ,git-minimal)))
21397 (home-page "https://github.com/msabramo/setuptools-git")
21398 (synopsis "Setuptools revision control system plugin for Git")
21399 (description
21400 "This package provides a plugin for Setuptools for revision control with
21401Git.")
21402 (license license:bsd-3)))
21403
21404(define-public python-setuptools-rust
21405 (package
21406 (name "python-setuptools-rust")
21407 (version "1.1.2")
21408 (source
21409 (origin
21410 (method url-fetch)
21411 (uri (pypi-uri "setuptools-rust" version))
21412 (sha256
21413 (base32 "1lb57qx1azklgzmalflq960agvwci4bwddw0zvlc9zy00fsvkbd0"))))
21414 (build-system python-build-system)
21415 (arguments '(#:tests? #f)) ;no tests
21416 (native-inputs
21417 (list python-setuptools-scm))
21418 (propagated-inputs
21419 (list python-semantic-version python-typing-extensions))
21420 (home-page "https://github.com/PyO3/setuptools-rust")
21421 (synopsis "Setuptools plugin for Rust extensions")
21422 (description
21423 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
21424Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
21425 (license license:expat)))
21426
21427(define-public python-pyclipper
21428 (package
21429 (name "python-pyclipper")
21430 (version "1.3.0.post3")
21431 (source
21432 (origin
21433 (method url-fetch)
21434 (uri (pypi-uri "pyclipper" version))
21435 (sha256
21436 (base32 "0vqzbmq2di1jaj6230m5i1ld0mg6wdb1c6r6i5zli54varavr7v3"))
21437 (modules '((guix build utils)))
21438 (snippet
21439 '(begin
21440 ;; This file is generated by Cython.
21441 (delete-file "src/pyclipper/_pyclipper.cpp") #t))))
21442 (build-system python-build-system)
21443 (arguments
21444 `(#:phases
21445 (modify-phases %standard-phases
21446 (add-before 'build 'cythonize-sources
21447 (lambda _
21448 (with-directory-excursion "src/pyclipper"
21449 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
21450 (native-inputs
21451 (list python-cython python-setuptools-scm
21452 python-pytest python-pytest-runner))
21453 (home-page "https://github.com/greginvm/pyclipper")
21454 (synopsis "Wrapper for Angus Johnson's Clipper library")
21455 (description
21456 "Pyclipper is a Cython wrapper for the C++ translation of the
21457Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
21458 (license license:expat)))
21459
21460(define-public python-tempdir
21461 (package
21462 (name "python-tempdir")
21463 (version "0.7.1")
21464 (source
21465 (origin
21466 (method url-fetch)
21467 (uri (pypi-uri "tempdir" version))
21468 (sha256
21469 (base32
21470 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
21471 (build-system python-build-system)
21472 (home-page "https://pypi.org/project/tempdir/")
21473 (arguments
21474 ;; the package has no tests
21475 '(#:tests? #f))
21476 (synopsis "Python library for managing temporary directories")
21477 (description
21478 "This library manages temporary directories that are automatically
21479deleted with all their contents when they are no longer needed. It is
21480particularly convenient for use in tests.")
21481 (license license:expat)))
21482
21483(define-public python-tempora
21484 (package
21485 (name "python-tempora")
21486 (version "5.0.1")
21487 (source
21488 (origin
21489 (method url-fetch)
21490 (uri (pypi-uri "tempora" version))
21491 (sha256
21492 (base32 "09wirlk5vmxlhl9rnxp7g5qz2nsd6b0gnzk5fczbz0s8lsbz386b"))))
21493 (build-system pyproject-build-system)
21494 (arguments
21495 ;; Do not test the myproject.toml build as it tries to pull
21496 ;; dependencies from the Internet.
21497 (list #:test-flags #~'("-k" "not project")))
21498 (native-inputs
21499 (list python-freezegun
21500 python-pytest
21501 python-pytest-black
21502 python-pytest-checkdocs
21503 python-pytest-cov
21504 python-pytest-enabler
21505 python-pytest-flake8
21506 python-pytest-freezegun
21507 python-pytest-mypy
21508 python-setuptools-scm
21509 python-types-freezegun
21510 python-types-pytz))
21511 (propagated-inputs (list python-jaraco-functools python-pytz))
21512 (home-page "https://github.com/jaraco/tempora")
21513 (synopsis "Python date and time objects and routines")
21514 (description "The @code{tempora} Python library contains miscellaneous
21515date and time related utilities and constants, routines for measuring,
21516profiling, and getting datetime-aware @acronym{UTC, Coordinated Universal
21517Time} values as well as an event scheduler.")
21518 (license license:expat)))
21519
21520(define-public python-activepapers
21521 (package
21522 (name "python-activepapers")
21523 (version "0.2.2")
21524 (source
21525 (origin
21526 (method url-fetch)
21527 (uri (pypi-uri "ActivePapers.Py" version))
21528 (sha256
21529 (base32
21530 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
21531 (build-system python-build-system)
21532 (arguments
21533 `(#:modules ((ice-9 ftw)
21534 (srfi srfi-1)
21535 (guix build utils)
21536 (guix build python-build-system))
21537
21538 #:phases
21539 (modify-phases %standard-phases
21540 (add-after 'unpack 'delete-python2-code
21541 (lambda _
21542 (for-each delete-file
21543 '("lib/activepapers/builtins2.py"
21544 "lib/activepapers/standardlib2.py"
21545 "lib/activepapers/utility2.py"))))
21546 (replace 'check
21547 (lambda _
21548 ;; Deactivate the test cases that download files
21549 (setenv "NO_NETWORK_ACCESS" "1")
21550 ;; For some strange reason, some tests fail if nosetests runs all
21551 ;; test modules in a single execution. They pass if each test
21552 ;; module is run individually.
21553 (for-each (lambda (filename)
21554 (invoke "nosetests"
21555 (string-append "tests/" filename)))
21556 (scandir "tests"
21557 (lambda (filename)
21558 (string-suffix? ".py" filename)))))))))
21559 (native-inputs
21560 (list python-tempdir python-nose))
21561 (propagated-inputs
21562 (list python-h5py))
21563 (home-page "https://www.activepapers.org/")
21564 (synopsis "Executable papers for scientific computing")
21565 (description
21566 "ActivePapers is a tool for working with executable papers, which
21567combine data, code, and documentation in single-file packages,
21568suitable for publication as supplementary material or on repositories
21569such as figshare or Zenodo.")
21570 (license license:bsd-3)))
21571
21572(define-public python-semver
21573 (package
21574 (name "python-semver")
21575 (version "2.9.0")
21576 (source
21577 (origin
21578 (method url-fetch)
21579 (uri (pypi-uri "semver" version))
21580 (sha256
21581 (base32
21582 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
21583 (build-system python-build-system)
21584 (arguments
21585 `(#:phases (modify-phases %standard-phases
21586 (replace 'check
21587 (lambda _
21588 (delete-file "setup.cfg")
21589 (invoke "py.test"))))))
21590 (native-inputs
21591 (list python-pytest))
21592 (home-page "https://github.com/k-bx/python-semver")
21593 (synopsis "Python helper for Semantic Versioning")
21594 (description "This package provides a Python library for
21595@url{Semantic Versioning, http://semver.org/}.")
21596 (license license:bsd-3)))
21597
21598(define-public python-pyro4
21599 (package
21600 (name "python-pyro4")
21601 (version "4.77")
21602 (source
21603 (origin
21604 (method url-fetch)
21605 (uri (pypi-uri "Pyro4" version))
21606 (sha256
21607 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
21608 (build-system python-build-system)
21609 (arguments
21610 '(#:tests? #f)) ;FIXME: Some tests require network access.
21611 (native-inputs
21612 (list python-cloudpickle python-dill python-msgpack))
21613 (propagated-inputs
21614 (list python-serpent))
21615 (home-page "https://pyro4.readthedocs.io")
21616 (synopsis "Distributed object middleware for Python")
21617 (description
21618 "Pyro enables you to build applications in which objects can talk to each
21619other over the network. You can just use normal Python method calls to call
21620objects on other machines, also known as remote procedure calls (RPC).")
21621 (license license:expat)))
21622
21623(define-public python-phonenumbers
21624 (package
21625 (name "python-phonenumbers")
21626 (version "8.9.1")
21627 (source
21628 (origin
21629 (method url-fetch)
21630 (uri (pypi-uri "phonenumbers" version))
21631 (sha256
21632 (base32
21633 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
21634 (build-system python-build-system)
21635 (home-page
21636 "https://github.com/daviddrysdale/python-phonenumbers")
21637 (synopsis
21638 "Python library for dealing with international phone numbers")
21639 (description
21640 "This package provides a Python port of Google's libphonenumber library.")
21641 (license license:asl2.0)))
21642
21643(define-public python-heapdict
21644 (package
21645 (name "python-heapdict")
21646 (version "1.0.1")
21647 (source
21648 (origin
21649 (method url-fetch)
21650 (uri (pypi-uri "HeapDict" version))
21651 (sha256
21652 (base32
21653 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
21654 (build-system python-build-system)
21655 (home-page "http://stutzbachenterprises.com/")
21656 (synopsis "Heap with decrease-key and increase-key operations")
21657 (description
21658 "heapdict implements the MutableMapping ABC, meaning it works pretty much
21659like a regular Python @code{dict}. It’s designed to be used as a priority
21660queue.")
21661 (license license:bsd-3)))
21662
21663(define-public python-zict
21664 (package
21665 (name "python-zict")
21666 (version "2.0.0")
21667 (source
21668 (origin
21669 (method url-fetch)
21670 (uri (pypi-uri "zict" version))
21671 (sha256
21672 (base32
21673 "05pd1hyhqvpw87rnbvl3vdyf619snpyccbswaxisdj17frwnjacf"))))
21674 (build-system python-build-system)
21675 (propagated-inputs
21676 (list python-heapdict))
21677 (native-inputs
21678 (list python-pytest))
21679 (home-page "https://zict.readthedocs.io/en/latest/")
21680 (synopsis "Composable mutable mapping tools")
21681 (description "This package provides abstract @code{MutableMapping} classes
21682that consume and build on other @code{MutableMappings}. Several of these can
21683be composed with one another to form intuitive interfaces over complex storage
21684systems policies.")
21685 (license license:bsd-3)))
21686
21687(define-public python-send2trash
21688 (package
21689 (name "python-send2trash")
21690 (version "1.8.0")
21691 (source
21692 (origin (method git-fetch)
21693 ;; Source tarball on PyPI doesn't include tests.
21694 (uri (git-reference
21695 (url "https://github.com/arsenetar/send2trash")
21696 (commit version)))
21697 (file-name (git-file-name name version))
21698 (sha256
21699 (base32
21700 "1k7dfypaaq4f36fbciaasv72j6wgjihw8d88axmz9c329bz8v5qx"))))
21701 (build-system python-build-system)
21702 (arguments
21703 '(#:phases
21704 (modify-phases %standard-phases
21705 (add-before 'check 'pre-check
21706 (lambda _
21707 (setenv "HOME" "/tmp")))
21708 (replace 'check
21709 (lambda* (#:key tests? #:allow-other-keys)
21710 (when tests?
21711 (invoke "pytest" "-vv")))))))
21712 (native-inputs (list python-pytest))
21713 (home-page "https://github.com/arsenetar/send2trash")
21714 (synopsis "Send files to the user's @file{~/Trash} directory")
21715 (description "This package provides a Python library to send files to the
21716user's @file{~/Trash} directory.")
21717 (license license:bsd-3)))
21718
21719(define-public python-pyfavicon
21720 (package
21721 (name "python-pyfavicon")
21722 (version "0.1.1")
21723 (source
21724 (origin
21725 (method url-fetch)
21726 (uri (pypi-uri "pyfavicon" version))
21727 (sha256
21728 (base32 "15wfpa99hvcfsv8j0m8iprmydi2p4qkhm86qfx485244y0ia5mgx"))))
21729 (build-system python-build-system)
21730 (arguments
21731 ;; There are no tests in the PyPI tarball and the tests from the
21732 ;; repository require online data.
21733 '(#:tests? #f))
21734 (propagated-inputs
21735 (list python-aiohttp python-beautifulsoup4 python-pillow))
21736 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
21737 (synopsis "Async favicon fetcher")
21738 (description
21739 "@code{pyfavicon} is an async favicon fetcher.")
21740 (license license:expat)))
21741
21742(define-public python-yamllint
21743 (package
21744 (name "python-yamllint")
21745 (version "1.26.1")
21746 (source
21747 (origin
21748 (method url-fetch)
21749 (uri (pypi-uri "yamllint" version))
21750 (sha256
21751 (base32 "090krlxj7az0d9yl8i20vjrqi66dfxx7y5xakjhxzsfp7qmldnc7"))))
21752 (build-system python-build-system)
21753 (propagated-inputs
21754 (list python-pathspec python-pyyaml python-setuptools))
21755 (home-page "https://github.com/adrienverge/yamllint")
21756 (synopsis "Linter for YAML files")
21757 (description
21758 "Yamllint is a linter for YAML files. yamllint does not only check for
21759syntax validity, but for weirdnesses like key repetition and cosmetic problems
21760such as lines length, trailing spaces, indentation, etc.")
21761 (license license:gpl3+)))
21762
21763(define-public python-yapf
21764 (package
21765 (name "python-yapf")
21766 (version "0.29.0")
21767 (source
21768 (origin
21769 (method url-fetch)
21770 (uri (pypi-uri "yapf" version))
21771 (sha256
21772 (base32
21773 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
21774 (build-system python-build-system)
21775 (home-page "https://github.com/google/yapf")
21776 (synopsis "Formatter for Python code")
21777 (description "YAPF is a formatter for Python code. It's based off of
21778@dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
21779takes the code and reformats it to the best formatting that conforms to the
21780style guide, even if the original code didn't violate the style guide.")
21781 (license license:asl2.0)))
21782
21783(define-public python-yq
21784 (package
21785 (name "python-yq")
21786 (version "3.1.0")
21787 (source
21788 (origin
21789 (method url-fetch)
21790 (uri (pypi-uri "yq" version))
21791 (sha256
21792 (base32
21793 "1wklgs3d9si475nffw9agq5kgk8bdicbsmlj4sx4kiw64ji4ma1h"))))
21794 (build-system python-build-system)
21795 (arguments
21796 '(#:phases
21797 (modify-phases %standard-phases
21798 (add-after 'unpack 'patch
21799 (lambda* (#:key inputs #:allow-other-keys)
21800 (substitute* "yq/__init__.py"
21801 (("Popen\\(\\[\"jq")
21802 (string-append
21803 "Popen([\""
21804 (assoc-ref inputs "jq")
21805 "/bin/jq")))
21806 #t)))))
21807 (inputs
21808 (list python-argcomplete python-pyyaml python-xmltodict python-toml jq))
21809 (native-inputs
21810 (list python-coverage python-flake8 python-setuptools-scm python-wheel))
21811 (home-page "https://github.com/kislyuk/yq")
21812 (synopsis "Command-line YAML/XML processor")
21813 (description
21814 "This package provides @command{yq} and @command{xq} for processing YAML
21815and XML respectively. The processing is done through @command{jq}, @command{jq}
21816filters can be used to process the data as it passes through.")
21817 (license license:asl2.0)))
21818
21819(define-public python-gyp
21820 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
21821 (revision "0"))
21822 (package
21823 (name "python-gyp")
21824 ;; Google does not release versions,
21825 ;; based on second most recent commit date.
21826 (version (git-version "0.0.0" revision commit))
21827 (source
21828 (origin
21829 ;; Google does not release tarballs,
21830 ;; git checkout is needed.
21831 (method git-fetch)
21832 (uri (git-reference
21833 (url "https://chromium.googlesource.com/external/gyp")
21834 (commit commit)))
21835 (file-name (git-file-name name version))
21836 (sha256
21837 (base32
21838 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
21839 (build-system python-build-system)
21840 (home-page "https://gyp.gsrc.io/")
21841 (synopsis "GYP is a Meta-Build system")
21842 (description
21843 "GYP builds build systems for large, cross platform applications.
21844It can be used to generate XCode projects, Visual Studio projects, Ninja build
21845files, and Makefiles.")
21846 (license license:bsd-3))))
21847
21848(define-public python-whatever
21849 (package
21850 (name "python-whatever")
21851 (version "0.6")
21852 (source
21853 (origin
21854 (method git-fetch)
21855 (uri (git-reference
21856 (url "https://github.com/Suor/whatever")
21857 (commit version)))
21858 (file-name (git-file-name name version))
21859 (sha256
21860 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
21861 (build-system python-build-system)
21862 (arguments
21863 `(#:phases
21864 (modify-phases %standard-phases
21865 (replace 'check
21866 (lambda _
21867 (invoke "py.test"))))))
21868 (native-inputs
21869 (list python-pytest))
21870 (home-page "https://github.com/Suor/whatever")
21871 (synopsis "Make anonymous functions by partial application of operators")
21872 (description "@code{whatever} provides an easy way to make anonymous
21873functions by partial application of operators.")
21874 (license license:bsd-3)))
21875
21876(define-public python-funcy
21877 (package
21878 (name "python-funcy")
21879 (version "1.11")
21880 (source
21881 (origin
21882 (method git-fetch)
21883 (uri (git-reference
21884 (url "https://github.com/Suor/funcy")
21885 (commit version)))
21886 (sha256
21887 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
21888 (file-name (git-file-name name version))))
21889 (build-system python-build-system)
21890 (arguments
21891 `(#:phases
21892 (modify-phases %standard-phases
21893 (replace 'check
21894 (lambda _
21895 (invoke "py.test"))))))
21896 (native-inputs
21897 (list python-pytest python-whatever))
21898 (home-page "https://github.com/Suor/funcy")
21899 (synopsis "Functional tools")
21900 (description "@code{funcy} is a library that provides functional tools.
21901Examples are:
21902@enumerate
21903@item merge - Merges collections of the same type
21904@item walk - Type-preserving map
21905@item select - Selects a part of a collection
21906@item take - Takes the first n items of a collection
21907@item first - Takes the first item of a collection
21908@item remove - Predicated-removes items of a collection
21909@item concat - Concatenates two collections
21910@item flatten - Flattens a collection with subcollections
21911@item distinct - Returns only distinct items
21912@item split - Predicated-splits a collection
21913@item split_at - Splits a collection at a given item
21914@item group_by - Groups items by group
21915@item pairwise - Pairs off adjacent items
21916@item partial - Partially-applies a function
21917@item curry - Curries a function
21918@item compose - Composes functions
21919@item complement - Complements a predicate
21920@item all_fn - \"all\" with predicate
21921@end enumerate")
21922 (license license:bsd-3)))
21923
21924(define-public python-isoweek
21925 (package
21926 (name "python-isoweek")
21927 (version "1.3.3")
21928 (source
21929 (origin
21930 (method url-fetch)
21931 (uri (pypi-uri "isoweek" version))
21932 (sha256
21933 (base32
21934 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
21935 (build-system python-build-system)
21936 (home-page "https://github.com/gisle/isoweek")
21937 (synopsis "Objects representing a week")
21938 (description "The @code{isoweek} module provide the class Week that
21939implements the week definition of ISO 8601. This standard also defines
21940a notation for identifying weeks; yyyyWww (where the W is a literal).
21941Week instances stringify to this form.")
21942 (license license:bsd-3)))
21943
21944(define-public python-pyzbar
21945 (package
21946 (name "python-pyzbar")
21947 (version "0.1.8")
21948 (source
21949 (origin
21950 ;; There's no source tarball on PyPI.
21951 (method git-fetch)
21952 (uri (git-reference
21953 (url "https://github.com/NaturalHistoryMuseum/pyzbar")
21954 (commit (string-append "v" version))))
21955 (file-name (git-file-name name version))
21956 (sha256
21957 (base32 "1fqlfg5p2v9lzzzi0si2sz54lblprk6jjjhjw54b64lp58c1yhsl"))))
21958 (build-system python-build-system)
21959 (arguments
21960 `(#:phases
21961 (modify-phases %standard-phases
21962 (add-after 'unpack 'remove-failing-test
21963 (lambda _
21964 ;; This tests if find_library was called once, but we remove
21965 ;; the call in the stage below to make the library find libzbar.
21966 (delete-file "pyzbar/tests/test_zbar_library.py")
21967 #t))
21968 (add-before 'build 'set-library-file-name
21969 (lambda* (#:key inputs #:allow-other-keys)
21970 (let ((libzbar (assoc-ref inputs "zbar")))
21971 (substitute* "pyzbar/zbar_library.py"
21972 (("find_library\\('zbar'\\)")
21973 (string-append "'" libzbar "/lib/libzbar.so.0'")))
21974 #t))))))
21975 (native-inputs
21976 (list pkg-config python-numpy python-pillow))
21977 (inputs
21978 (list zbar))
21979 (home-page "https://github.com/NaturalHistoryMuseum/pyzbar/")
21980 (synopsis "Read one-dimensional barcodes and QR codes")
21981 (description
21982 "Read one-dimensional barcodes and QR codes using the zbar library.
21983
21984Features:
21985
21986@itemize
21987@item Pure python
21988@item Works with PIL / Pillow images, OpenCV / numpy ndarrays, and raw bytes
21989@item Decodes locations of barcodes
21990@item No dependencies, other than the zbar library itself
21991@end itemize")
21992 (license license:expat)))
21993
21994(define-public python-tokenize-rt
21995 (package
21996 (name "python-tokenize-rt")
21997 (version "2.0.1")
21998 (source
21999 (origin
22000 (method url-fetch)
22001 (uri (pypi-uri "tokenize-rt" version))
22002 (sha256
22003 (base32
22004 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
22005 (build-system python-build-system)
22006 (home-page "https://github.com/asottile/tokenize-rt")
22007 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
22008 (description
22009 "This Python library is a wrapper around @code{tokenize} from the Python
22010standard library. It provides two additional tokens @code{ESCAPED_NL} and
22011@code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
22012and @code{tokens_to_src} to roundtrip.")
22013 (license license:expat)))
22014
22015(define-public python-future-fstrings
22016 (package
22017 (name "python-future-fstrings")
22018 (version "0.4.1")
22019 (source
22020 (origin
22021 (method url-fetch)
22022 (uri (pypi-uri "future_fstrings" version))
22023 (sha256
22024 (base32
22025 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
22026 (build-system python-build-system)
22027 (propagated-inputs
22028 (list python-tokenize-rt))
22029 (home-page "https://github.com/asottile/future-fstrings")
22030 (synopsis "Backport of fstrings to Python < 3.6")
22031 (description
22032 "This package provides a UTF-8 compatible encoding
22033@code{future_fstrings}, which performs source manipulation. It decodes the
22034source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
22035@code{f} strings.")
22036 (license license:expat)))
22037
22038(define-public python-typed-ast
22039 (package
22040 (name "python-typed-ast")
22041 (version "1.5.1")
22042 (source
22043 (origin
22044 (method git-fetch)
22045 (uri (git-reference
22046 (url "https://github.com/python/typed_ast")
22047 (commit version)))
22048 (sha256
22049 (base32 "1xfcs5246c8v5600aaa8zs7ii4sxb62q6r3sb2fgazyjx97wrxd9"))
22050 (file-name (git-file-name name version))))
22051 (build-system python-build-system)
22052 (arguments
22053 `(#:phases
22054 (modify-phases %standard-phases
22055 (replace 'check
22056 (lambda _
22057 (invoke "pytest"))))))
22058 (native-inputs (list python-pytest))
22059 (home-page "https://github.com/python/typed_ast")
22060 (synopsis "Fork of Python @code{ast} modules with type comment support")
22061 (description "This package provides a parser similar to the standard
22062@code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
22063include PEP 484 type comments and are independent of the version of Python
22064under which they are run. The @code{typed_ast} parsers produce the standard
22065Python AST (plus type comments), and are both fast and correct, as they are
22066based on the CPython 2.7 and 3.7 parsers.")
22067 ;; See the file "LICENSE" for the details.
22068 (license (list license:psfl
22069 license:asl2.0
22070 license:expat)))) ;ast27/Parser/spark.py
22071
22072(define-public python-typer
22073 (package
22074 (name "python-typer")
22075 (version "0.6.1")
22076 (source
22077 (origin
22078 (method git-fetch)
22079 (uri (git-reference
22080 (url "https://github.com/tiangolo/typer")
22081 (commit version)))
22082 (file-name (git-file-name name version))
22083 (sha256
22084 (base32 "1knv353qhkl2imav3jfp6bgq47m8wkkqhq1dzmqg2sv8rsy7zgl7"))))
22085 (build-system python-build-system)
22086 (arguments
22087 `(#:phases
22088 ,#~(modify-phases %standard-phases
22089 ;; Unfortunately, this doesn't seem to be enough to fix these two
22090 ;; tests, but we'll patch this anyway.
22091 (add-after 'unpack 'patch-shell-reference
22092 (lambda _
22093 (substitute* "tests/test_completion/test_completion.py"
22094 (("\"bash\"") (string-append "\"" (which "bash") "\""))
22095 (("\"/bin/bash\"")
22096 (string-append "\"" (which "bash") "\"")))))
22097 (replace 'build
22098 (lambda _
22099 (invoke "flit" "build")))
22100 (replace 'install
22101 (lambda* (#:key inputs outputs #:allow-other-keys)
22102 (add-installed-pythonpath inputs outputs)
22103 (for-each
22104 (lambda (wheel)
22105 (format #true wheel)
22106 (invoke "python" "-m" "pip" "install"
22107 wheel (string-append "--prefix=" #$output)))
22108 (find-files "dist" "\\.whl$"))))
22109 (replace 'check
22110 (lambda* (#:key tests? #:allow-other-keys)
22111 (when tests?
22112 (setenv "HOME" "/tmp") ; some tests need it
22113
22114 ;; This is for completion tests
22115 (with-output-to-file "/tmp/.bashrc"
22116 (lambda _ (display "# dummy")))
22117
22118 (setenv "GUIX_PYTHONPATH"
22119 (string-append (getcwd) ":"
22120 (getenv "GUIX_PYTHONPATH")))
22121 (let ((disabled-tests (list "test_show_completion"
22122 "test_install_completion")))
22123 (invoke "python" "-m" "pytest" "tests/"
22124 "-k"
22125 (string-append "not "
22126 (string-join disabled-tests
22127 " and not "))))))))))
22128 (propagated-inputs
22129 (list python-click))
22130 (native-inputs
22131 (list python-coverage python-flit python-pytest python-rich
22132 python-shellingham))
22133 (home-page "https://github.com/tiangolo/typer")
22134 (synopsis
22135 "Typer builds CLI based on Python type hints")
22136 (description
22137 "Typer is a library for building CLI applications. It's based on
22138Python 3.6+ type hints.")
22139 ;; MIT license
22140 (license license:expat)))
22141
22142(define-public python-typeguard
22143 (package
22144 (name "python-typeguard")
22145 (version "2.13.3")
22146 (source
22147 (origin
22148 (method url-fetch)
22149 (uri (pypi-uri "typeguard" version))
22150 (sha256
22151 (base32 "1i5qzcyw2715h1g1hvj7fxykck2bkxyshpngjr3nfcx1lf6smv80"))))
22152 (build-system python-build-system)
22153 (arguments
22154 (list
22155 #:phases
22156 #~(modify-phases %standard-phases
22157 (replace 'check
22158 (lambda* (#:key tests? #:allow-other-keys)
22159 (when tests?
22160 (invoke "pytest" "-vv" "-k"
22161 ;; XXX: These fail when installed as a library:
22162 ;; https://github.com/agronholm/typeguard/issues/176
22163 "not usefixtures and not test_cached_module")))))))
22164 (native-inputs
22165 (list python-mypy python-pytest python-typing-extensions))
22166 (home-page "https://github.com/agronholm/typeguard")
22167 (synopsis "Run-time type checker for Python")
22168 (description
22169 "@code{typeguard} provides run-time type checking for functions defined
22170with PEP 484 argument (and return) type annotations.")
22171 (license license:expat)))
22172
22173(define-public python-typing-extensions
22174 (package
22175 (name "python-typing-extensions")
22176 (version "4.0.1")
22177 (source (origin
22178 ;; The test script is missing from the PyPI archive.
22179 (method git-fetch)
22180 (uri (git-reference
22181 (url "https://github.com/python/typing")
22182 (commit version)))
22183 (file-name (git-file-name name version))
22184 (sha256
22185 (base32
22186 "0a35fh5wk9s538x0w3dz95y0avnhd2srzyv9s1a372711n8hdl4p"))))
22187 (build-system python-build-system)
22188 (arguments
22189 (list
22190 #:tests? #f ;requires Python's test module, not available in Guix
22191 #:phases
22192 #~(modify-phases %standard-phases
22193 (add-after 'unpack 'enter-source-directory
22194 (lambda _
22195 (chdir "typing_extensions")))
22196 ;; XXX: PEP 517 manual build copied from python-isort.
22197 (replace 'build
22198 (lambda _
22199 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
22200 (replace 'check
22201 (lambda* (#:key tests? #:allow-other-keys)
22202 (when tests?
22203 (invoke "python" "src/test_typing_extensions.py"))))
22204 (replace 'install
22205 (lambda _
22206 (let ((whl (car (find-files "dist" "\\.whl$"))))
22207 (invoke "pip" "--no-cache-dir" "--no-input"
22208 "install" "--no-deps" "--prefix" #$output whl)))))))
22209 (native-inputs (list python-pypa-build python-flit-core))
22210 (home-page "https://github.com/python/typing/typing_extensions")
22211 (synopsis "Experimental type hints for Python")
22212 (description
22213 "The typing_extensions module contains additional @code{typing} hints not
22214yet present in the of the @code{typing} standard library.
22215Included are implementations of:
22216@enumerate
22217@item ClassVar
22218@item ContextManager
22219@item Counter
22220@item DefaultDict
22221@item Deque
22222@item NewType
22223@item NoReturn
22224@item overload
22225@item Protocol
22226@item runtime
22227@item Text
22228@item Type
22229@item TYPE_CHECKING
22230@item AsyncGenerator
22231@end enumerate\n")
22232 (license license:psfl)))
22233
22234(define-public python-typing-extensions-next
22235 (package
22236 (inherit python-typing-extensions)
22237 (name "python-typing-extensions")
22238 (version "4.2.0")
22239 (source (origin
22240 (method git-fetch)
22241 (uri (git-reference
22242 (url "https://github.com/python/typing")
22243 (commit version)))
22244 (file-name (git-file-name name version))
22245 (sha256
22246 (base32
22247 "1bbry1rg7q5ppkgzdk4nwl7q1w8bbhajm4q68wb9dm6rf7hg1023"))))))
22248
22249(define-public bpython
22250 (package
22251 (name "bpython")
22252 (version "0.23")
22253 (source
22254 (origin
22255 (method url-fetch)
22256 (uri (pypi-uri "bpython" version))
22257 (sha256
22258 (base32 "0ah5giynavyh70yc0jqgmjaajv3xg5j2y7k9i3q8mi47r2mph04z"))))
22259 (build-system python-build-system)
22260 (arguments
22261 `(#:phases
22262 (modify-phases %standard-phases
22263 (add-after 'unpack 'remove-failing-test
22264 (lambda _
22265 ;; Remove failing test. FIXME: make it pass
22266 (delete-file "bpython/test/test_args.py")
22267 #t))
22268 (add-after 'wrap 'add-aliases
22269 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
22270 (lambda* (#:key outputs #:allow-other-keys)
22271 (let ((out (assoc-ref outputs "out")))
22272 (for-each
22273 (lambda (old new)
22274 (symlink old (string-append out "/bin/" new)))
22275 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
22276 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
22277 #t)))))
22278 (propagated-inputs
22279 (list python-pygments
22280 python-requests
22281 python-curtsies
22282 python-greenlet
22283 python-six
22284 python-cwcwidth
22285 python-pyxdg
22286 ;; optional dependencies
22287 python-urwid ; for bpython-urwid only
22288 python-watchdog
22289 python-jedi))
22290 (native-inputs
22291 (list python-sphinx python-mock python-tox python-wheel))
22292 (home-page "https://bpython-interpreter.org/")
22293 (synopsis "Fancy interface to the Python interpreter")
22294 (description "Bpython is a fancy interface to the Python
22295interpreter. bpython's main features are
22296
22297@enumerate
22298@item in-line syntax highlighting,
22299@item readline-like autocomplete with suggestions displayed as you type,
22300@item expected parameter list for any Python function,
22301@item \"rewind\" function to pop the last line of code from memory and
22302 re-evaluate,
22303@item send the code you've entered off to a pastebin,
22304@item save the code you've entered to a file, and
22305@item auto-indentation.
22306@end enumerate")
22307 (license license:expat)))
22308
22309(define-public python-pyinotify
22310 (package
22311 (name "python-pyinotify")
22312 (version "0.9.6")
22313 (source (origin
22314 (method url-fetch)
22315 (uri (pypi-uri "pyinotify" version))
22316 (sha256
22317 (base32
22318 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
22319 (build-system python-build-system)
22320 (arguments `(#:tests? #f)) ;no tests
22321 (home-page "https://github.com/seb-m/pyinotify")
22322 (synopsis "Python library for monitoring inotify events")
22323 (description
22324 "@code{pyinotify} provides a Python interface for monitoring
22325file system events on Linux.")
22326 (license license:expat)))
22327
22328
22329(define-public python-more-itertools
22330 (package
22331 (name "python-more-itertools")
22332 (version "8.2.0")
22333 (source
22334 (origin
22335 (method url-fetch)
22336 (uri (pypi-uri "more-itertools" version))
22337 (sha256
22338 (base32
22339 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
22340 (build-system python-build-system)
22341 (home-page "https://github.com/erikrose/more-itertools")
22342 (synopsis "More routines for operating on iterables, beyond itertools")
22343 (description "Python's built-in @code{itertools} module implements a
22344number of iterator building blocks inspired by constructs from APL, Haskell,
22345and SML. @code{more-itertools} includes additional building blocks for
22346working with iterables.")
22347 (license license:expat)))
22348
22349(define-public python-latexcodec
22350 (package
22351 (name "python-latexcodec")
22352 (version "2.0.1")
22353 (source
22354 (origin
22355 (method url-fetch)
22356 (uri (pypi-uri "latexcodec" version))
22357 (sha256
22358 (base32 "16pynfnn8y8xp55yp06i721fccv5dlx9ba6k5bzcwq9j6wf5b8ia"))))
22359 (build-system python-build-system)
22360 (propagated-inputs
22361 (list python-six))
22362 (home-page "https://readthedocs.org/projects/latexcodec/")
22363 (synopsis "Work with LaTeX code in Python")
22364 (description "Lexer and codec to work with LaTeX code in Python.")
22365 (license license:expat)))
22366
22367(define-public python-pybtex
22368 (package
22369 (name "python-pybtex")
22370 (version "0.24.0")
22371 (source
22372 (origin
22373 (method url-fetch)
22374 (uri (pypi-uri "pybtex" version))
22375 (sha256
22376 (base32 "0ma7sc10hk6caq5zghbk865vrlaynz7x5z630z0facqpnqssx3l1"))))
22377 (build-system python-build-system)
22378 (native-inputs
22379 (list python-pytest))
22380 (propagated-inputs
22381 (list python-latexcodec python-pyyaml python-six))
22382 (arguments
22383 (list
22384 #:phases #~(modify-phases %standard-phases
22385 (replace 'check
22386 (lambda* (#:key tests? #:allow-other-keys)
22387 (when tests?
22388 (invoke "pytest")))))))
22389 (home-page "https://pybtex.org/")
22390 (synopsis "BibTeX-compatible bibliography processor")
22391 (description "Pybtex is a BibTeX-compatible bibliography processor written
22392in Python. You can simply type pybtex instead of bibtex.")
22393 (license license:expat)))
22394
22395(define-public python-onetimepass
22396 (package
22397 (name "python-onetimepass")
22398 (version "1.0.1")
22399 (source
22400 (origin
22401 (method url-fetch)
22402 (uri (pypi-uri "onetimepass" version))
22403 (sha256
22404 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
22405 (build-system python-build-system)
22406 (propagated-inputs (list python-six))
22407 (home-page "https://github.com/tadeck/onetimepass/")
22408 (synopsis "One-time password library")
22409 (description "Python one-time password library for HMAC-based (HOTP) and
22410time-based (TOTP) passwords.")
22411 (license license:expat)))
22412
22413(define-public python-parso
22414 (package
22415 (name "python-parso")
22416 (version "0.8.3")
22417 (source
22418 (origin
22419 (method url-fetch)
22420 (uri (pypi-uri "parso" version))
22421 (sha256
22422 (base32 "185gkxq92kqiw2h5zp1cmyn04055x0lix4hmi5c077xm1clvw1wc"))))
22423 (native-inputs
22424 (list python-pytest))
22425 (build-system python-build-system)
22426 (arguments
22427 `(#:phases
22428 (modify-phases %standard-phases
22429 (replace 'check
22430 (lambda* (#:key tests? #:allow-other-keys)
22431 (when tests?
22432 (invoke "pytest" "-vv")))))))
22433 (home-page "https://github.com/davidhalter/parso")
22434 (synopsis "Python Parser")
22435 (description "Parso is a Python parser that supports error recovery and
22436round-trip parsing for different Python versions (in multiple Python versions).
22437Parso is also able to list multiple syntax errors in your Python file.")
22438 (license license:expat)))
22439
22440(define-public python-async-generator
22441 (package
22442 (name "python-async-generator")
22443 (version "1.10")
22444 (source
22445 (origin
22446 (method url-fetch)
22447 (uri (pypi-uri "async_generator" version))
22448 (sha256
22449 (base32
22450 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
22451 (build-system python-build-system)
22452 (native-inputs
22453 (list python-pytest))
22454 (home-page "https://github.com/python-trio/async_generator")
22455 (synopsis "Async generators and context managers for Python 3.5+")
22456 (description "@code{async_generator} back-ports Python 3.6's native async
22457generators and Python 3.7's context managers into Python 3.5.")
22458 ;; Dual licensed.
22459 (license (list license:expat license:asl2.0))))
22460
22461(define-public python-async-timeout
22462 (package
22463 (name "python-async-timeout")
22464 (version "4.0.2")
22465 (source
22466 (origin
22467 (method url-fetch)
22468 (uri (pypi-uri "async-timeout" version))
22469 (sha256
22470 (base32
22471 "05bbjz16n1a7m1s3lmcwri2x5rc7hnh6f2hdr2lbflnv1mjf2qr1"))))
22472 (build-system python-build-system)
22473 (home-page "https://github.com/aio-libs/async-timeout")
22474 (synopsis "Timeout context manager for asyncio programs")
22475 (description "@code{async-timeout} provides a timeout timeout context
22476manager compatible with @code{asyncio}.")
22477 (license license:asl2.0)))
22478
22479(define-public python-glob2
22480 (package
22481 (name "python-glob2")
22482 (version "0.7")
22483 (source
22484 (origin
22485 (method git-fetch)
22486 (uri (git-reference
22487 (url "https://github.com/miracle2k/python-glob2")
22488 (commit (string-append "v" version))))
22489 (file-name (git-file-name name version))
22490 (sha256
22491 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
22492 (build-system python-build-system)
22493 (home-page "https://github.com/miracle2k/python-glob2/")
22494 (synopsis "Extended Version of the python buildin glob module")
22495 (description "This is an extended version of the Python
22496@url{http://docs.python.org/library/glob.html, built-in glob module} which
22497adds:
22498
22499@itemize
22500@item The ability to capture the text matched by glob patterns, and return
22501those matches alongside the file names.
22502@item A recursive @code{**} globbing syntax, akin for example to the
22503@code{globstar} option of Bash.
22504@item The ability to replace the file system functions used, in order to glob
22505on virtual file systems.
22506@item Compatible with Python 2 and Python 3 (tested with 3.3).
22507@end itemize
22508
22509Glob2 currently based on the glob code from Python 3.3.1.")
22510 (license license:bsd-2)))
22511
22512(define-public python-gipc
22513 (package
22514 (name "python-gipc")
22515 (version "0.6.0")
22516 (source
22517 (origin
22518 (method url-fetch)
22519 (uri (pypi-uri "gipc" version ".zip"))
22520 (sha256
22521 (base32
22522 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
22523 (build-system python-build-system)
22524 (native-inputs
22525 (list unzip))
22526 (propagated-inputs
22527 (list python-gevent))
22528 (home-page "https://gehrcke.de/gipc/")
22529 (synopsis "Child process management in the context of gevent")
22530 (description "Usage of Python's multiprocessing package in a
22531gevent-powered application may raise problems. With @code{gipc},
22532process-based child processes can safely be created anywhere within a
22533gevent-powered application.")
22534 (license license:expat)))
22535
22536(define-public python-beautifultable
22537 (package
22538 (name "python-beautifultable")
22539 (version "1.0.0")
22540 (source
22541 (origin
22542 (method url-fetch)
22543 (uri (pypi-uri "beautifultable" version))
22544 (sha256
22545 (base32
22546 "0wwlbifcbpzy3wfv6yzsxncarsngzizmmxbn6cy5gazlcq7h4k5x"))))
22547 (build-system python-build-system)
22548 (propagated-inputs
22549 (list python-wcwidth))
22550 (arguments
22551 `(#:phases
22552 (modify-phases %standard-phases
22553 (add-after 'unpack 'patch-setup.py
22554 (lambda _
22555 (substitute* "setup.py"
22556 (("setup\\(")
22557 "setup(\n test_suite=\"test\",")))))))
22558 (home-page "https://github.com/pri22296/beautifultable")
22559 (synopsis "Print ASCII tables for terminals")
22560 (description "@code{python-beautifultable} provides a class for easily
22561printing tabular data in a visually appealing ASCII format to a terminal.
22562
22563Features include, but are not limited to:
22564@itemize
22565@item Full customization of the look and feel of the table
22566@item Row and column accessors.
22567@item Full support for colors using ANSI sequences or any library.
22568@item Plenty of predefined styles and option to create custom ones.
22569@item Support for Unicode characters.
22570@item Supports streaming table when data is slow to retrieve.
22571@end itemize")
22572 (license license:expat)))
22573
22574(define-public python-globber
22575 (package
22576 (name "python-globber")
22577 (version "0.2.1")
22578 (source
22579 (origin
22580 (method git-fetch)
22581 (uri (git-reference
22582 (url "https://github.com/asharov/globber")
22583 (commit version)))
22584 (file-name (git-file-name name version))
22585 (sha256
22586 (base32
22587 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
22588 (build-system python-build-system)
22589 (home-page "https://github.com/asharov/globber")
22590 (synopsis "Library for string matching with glob patterns")
22591 (description
22592 "Globber is a Python library for matching file names against glob patterns.
22593In contrast to other glob-matching libraries, it matches arbitrary strings and
22594doesn't require the matched names to be existing files. In addition, it
22595supports the globstar @code{**} operator to match an arbitrary number of
22596path components.")
22597 (license license:asl2.0)))
22598
22599(define-public python-git-hammer
22600 (package
22601 (name "python-git-hammer")
22602 (version "0.3.1")
22603 (source
22604 (origin
22605 (method git-fetch)
22606 (uri (git-reference
22607 (url "https://github.com/asharov/git-hammer")
22608 (commit version)))
22609 (file-name (git-file-name name version))
22610 (sha256
22611 (base32
22612 "0f9xlk86ijzpdj25hr1q4wcy8k72v3w470ngwm9mpdkfj8ng84wr"))))
22613 (build-system python-build-system)
22614 (arguments
22615 `(#:phases
22616 (modify-phases %standard-phases
22617 (add-after 'unpack 'patch-setup.py
22618 (lambda _
22619 (substitute* "setup.py"
22620 (("setup\\(")
22621 "setup(\n test_suite=\"test\",")))))))
22622 (propagated-inputs
22623 (list python-beautifultable
22624 python-dateutil
22625 python-gitpython
22626 python-globber
22627 python-matplotlib
22628 python-sqlalchemy
22629 python-sqlalchemy-utils))
22630 (home-page "https://github.com/asharov/git-hammer")
22631 (synopsis "Provide statistics for git repositories")
22632 (description
22633 "Git Hammer is a statistics tool for projects in git repositories.
22634Its major feature is tracking the number of lines authored by each person for every
22635commit, but it also includes some other useful statistics.")
22636 (license license:asl2.0)))
22637
22638(define-public python-fusepy
22639 (package
22640 (name "python-fusepy")
22641 (version "2.0.4")
22642 (source
22643 (origin
22644 (method url-fetch)
22645 (uri (pypi-uri "fusepy" version))
22646 (sha256
22647 (base32
22648 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
22649 (build-system python-build-system)
22650 (arguments
22651 `(#:phases
22652 (modify-phases %standard-phases
22653 (add-before 'build 'set-library-file-name
22654 (lambda* (#:key inputs #:allow-other-keys)
22655 (let ((fuse (assoc-ref inputs "fuse")))
22656 (substitute* "fuse.py"
22657 (("find_library\\('fuse'\\)")
22658 (string-append "'" fuse "/lib/libfuse.so'")))
22659 #t))))))
22660 (propagated-inputs
22661 (list fuse))
22662 (home-page "https://github.com/fusepy/fusepy")
22663 (synopsis "Simple ctypes bindings for FUSE")
22664 (description "Python module that provides a simple interface to FUSE and
22665MacFUSE. The binding is created using the standard @code{ctypes} library.")
22666 (license license:isc)))
22667
22668(define-public python-fusepyng
22669 (package
22670 (name "python-fusepyng")
22671 (version "1.0.7")
22672 (source
22673 (origin
22674 (method url-fetch)
22675 (uri (pypi-uri "fusepyng" version))
22676 (sha256
22677 (base32
22678 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
22679 (build-system python-build-system)
22680 (arguments
22681 '(#:phases
22682 (modify-phases %standard-phases
22683 (add-after 'unpack 'set-libfuse-path
22684 (lambda* (#:key inputs #:allow-other-keys)
22685 (let ((fuse (assoc-ref inputs "fuse")))
22686 (substitute* "fusepyng.py"
22687 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
22688 (string-append "\"" fuse "/lib/libfuse.so\""))))
22689 #t)))))
22690 (inputs
22691 (list fuse))
22692 (propagated-inputs
22693 (list python-paramiko))
22694 (home-page "https://github.com/rianhunter/fusepyng")
22695 (synopsis "Simple ctypes bindings for FUSE")
22696 (description "@code{fusepyng} is a Python module that provides a simple
22697interface to FUSE on various operating systems. It's just one file and is
22698implemented using @code{ctypes}.")
22699 (license license:isc)))
22700
22701(define-public python-update-checker
22702 (package
22703 (name "python-update-checker")
22704 (version "0.18.0")
22705 (source
22706 (origin
22707 (method url-fetch)
22708 (uri (pypi-uri "update-checker" version))
22709 (sha256
22710 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
22711 (build-system python-build-system)
22712 (propagated-inputs (list python-requests))
22713 (native-inputs (list python-black python-flake8 python-pytest))
22714 (home-page "https://github.com/bboe/update_checker")
22715 (synopsis "Python module that will check for package updates")
22716 (description "This package provides a Python module that will check for
22717package updates.")
22718 (license license:bsd-2)))
22719
22720(define-public python-userspacefs
22721 (package
22722 (name "python-userspacefs")
22723 (version "2.0.5")
22724 (source
22725 (origin
22726 (method url-fetch)
22727 (uri (pypi-uri "userspacefs" version))
22728 (sha256
22729 (base32
22730 "0v0qkdwfc61s2yiq7d7amin93x5biypfmi9pfhf8yj1rdpx5yvsx"))))
22731 (build-system python-build-system)
22732 (propagated-inputs
22733 (list python-fusepyng))
22734 (home-page "https://github.com/rianhunter/userspacefs")
22735 (synopsis "User-space file systems for Python")
22736 (description
22737 "@code{userspacefs} is a library that allows you to easily write
22738user-space file systems in Python.")
22739 (license license:gpl3+)))
22740
22741(define-public python-stone
22742 (package
22743 (name "python-stone")
22744 (version "3.2.1")
22745 (source
22746 (origin
22747 (method url-fetch)
22748 (uri (pypi-uri "stone" version))
22749 (sha256
22750 (base32
22751 "0xby5mpsms7b2rv8j6mvxzmzz5i9ii01brb9ylxz6kiv2i08piwv"))))
22752 (build-system python-build-system)
22753 (arguments
22754 `(#:phases
22755 (modify-phases %standard-phases
22756 (add-after 'unpack 'change-version-requirements
22757 (lambda _
22758 ;; Match the requirement in test/requirements.txt
22759 (substitute* "setup.py"
22760 (("pytest < 5") "pytest < 7"))
22761 ;; We don't care about a coverage report.
22762 (substitute* "test/requirements.txt"
22763 (("coverage.*") "coverage\n"))))
22764 (replace 'check
22765 (lambda* (#:key tests? #:allow-other-keys)
22766 (when tests?
22767 ;; These tests don't import currectly.
22768 (delete-file "test/test_js_client.py")
22769 (delete-file "test/test_tsd_types.py")
22770 (delete-file "test/test_python_gen.py")
22771 (invoke "pytest")))))))
22772 (propagated-inputs
22773 (list python-ply python-six))
22774 (native-inputs
22775 (list python-coverage python-mock python-pytest python-pytest-runner))
22776 (home-page "https://github.com/dropbox/stone")
22777 (synopsis "Official Api Spec Language for Dropbox")
22778 (description
22779 "Stone is an interface description language (IDL) for APIs.")
22780 (license license:expat)))
22781
22782(define-public pybind11
22783 (package
22784 (name "pybind11")
22785 (version "2.8.1")
22786 (source (origin
22787 (method git-fetch)
22788 (uri (git-reference
22789 (url "https://github.com/pybind/pybind11")
22790 (commit (string-append "v" version))))
22791 (sha256
22792 (base32
22793 "10hrkrh78sk7k0ydw1ghmp7gvpwmkby0l2s0kf2iaj9sz0vijkhs"))
22794 (file-name (git-file-name name version))))
22795 (build-system cmake-build-system)
22796 (native-inputs
22797 `(("python" ,python-wrapper)
22798
22799 ;; The following dependencies are used for tests.
22800 ("python-pytest" ,python-pytest)
22801 ("catch" ,catch2-1)
22802 ("eigen" ,eigen)))
22803 (arguments
22804 `(#:configure-flags
22805 (list (string-append "-DCATCH_INCLUDE_DIR="
22806 (assoc-ref %build-inputs "catch")
22807 "/include/catch"))
22808
22809 #:phases (modify-phases %standard-phases
22810 (add-after 'install 'install-python
22811 (lambda* (#:key outputs #:allow-other-keys)
22812 (let ((out (assoc-ref outputs "out")))
22813 (with-directory-excursion "../source"
22814 (setenv "PYBIND11_USE_CMAKE" "yes")
22815 (invoke "python" "setup.py" "install"
22816 "--single-version-externally-managed"
22817 "--root=/"
22818 (string-append "--prefix=" out)))))))
22819
22820 #:test-target "check"))
22821 (home-page "https://github.com/pybind/pybind11/")
22822 (synopsis "Seamless operability between C++11 and Python")
22823 (description
22824 "@code{pybind11} is a lightweight header-only library that exposes C++
22825types in Python and vice versa, mainly to create Python bindings of existing
22826C++ code. Its goals and syntax are similar to the @code{Boost.Python}
22827library: to minimize boilerplate code in traditional extension modules by
22828inferring type information using compile-time introspection.")
22829 (license license:bsd-3)))
22830
22831;; This is needed for python-vaex-core.
22832(define-public pybind11-2.3
22833 (package
22834 (inherit pybind11)
22835 (name "pybind11")
22836 (version "2.3.0")
22837 (source (origin
22838 (method git-fetch)
22839 (uri (git-reference
22840 (url "https://github.com/pybind/pybind11")
22841 (commit (string-append "v" version))))
22842 (sha256
22843 (base32
22844 "11b6dniri8m05spfd2a19irz82shf4sdca73566bniggrf3zclnf"))
22845 (file-name (git-file-name name version))))
22846 (arguments
22847 (substitute-keyword-arguments (package-arguments pybind11)
22848 ((#:tests? tests? #false)
22849 #false)))))
22850
22851(define-public python-pooch
22852 (package
22853 (name "python-pooch")
22854 (version "1.3.0")
22855 (source
22856 (origin
22857 (method url-fetch)
22858 (uri (pypi-uri "pooch" version))
22859 (sha256
22860 (base32 "1618adsg9r8fsv422sv35z1i723q3a1iir5v7dv2sklh4pl4im1h"))))
22861 (build-system python-build-system)
22862 (arguments
22863 `(#:tests? #f)) ;requires online data
22864 (propagated-inputs
22865 (list python-appdirs python-packaging python-requests))
22866 (home-page "https://github.com/fatiando/pooch")
22867 (synopsis "Manage your Python library's sample data files")
22868 (description
22869 "Pooch manages your Python library's sample data files: it automatically
22870downloads and stores them in a local directory, with support for versioning
22871and corruption checks.")
22872 (license license:bsd-3)))
22873
22874(define-public python-fasteners
22875 (package
22876 (name "python-fasteners")
22877 (version "0.15")
22878 (source
22879 (origin
22880 (method url-fetch)
22881 (uri (pypi-uri "fasteners" version))
22882 (sha256
22883 (base32
22884 "1vzmz1xh38b84dv0f4hlp7arwmx8wjlih6lf964bpy8dnyk6s5rs"))))
22885 (build-system python-build-system)
22886 (propagated-inputs
22887 (list python-monotonic python-six))
22888 (native-inputs
22889 (list python-testtools))
22890 (home-page "https://github.com/harlowja/fasteners")
22891 (synopsis "Python package that provides useful locks")
22892 (description
22893 "This package provides a Python program that provides following locks:
22894
22895@itemize
22896@item Locking decorator
22897@item Reader-writer locks
22898@item Inter-process locks
22899@item Generic helpers
22900@end itemize\n")
22901 (license license:asl2.0)))
22902
22903(define-public python-requests-file
22904 (package
22905 (name "python-requests-file")
22906 (version "1.5.1")
22907 (source
22908 (origin
22909 (method url-fetch)
22910 (uri (pypi-uri "requests-file" version))
22911 (sha256
22912 (base32 "13kx4k83i9zcv20h0fnmawwwdzhcmw1z97mqib1h379qsc445mq7"))))
22913 (build-system python-build-system)
22914 (arguments
22915 `(#:phases
22916 (modify-phases %standard-phases
22917 (replace 'check
22918 (lambda* (#:key tests? #:allow-other-keys)
22919 (when tests?
22920 (invoke "python" "tests/test_requests_file.py")))))))
22921 (propagated-inputs
22922 (list python-requests python-six))
22923 (home-page "https://github.com/dashea/requests-file")
22924 (synopsis "File transport adapter for Requests")
22925 (description
22926 "Requests-File is a transport adapter for use with the Requests Python
22927library to allow local file system access via @code{file://} URLs.")
22928 (license license:asl2.0)))
22929
22930(define-public python-identify
22931 (package
22932 (name "python-identify")
22933 (version "1.4.25")
22934 (source
22935 (origin
22936 ;; There are no tests in the PyPI tarball.
22937 (method git-fetch)
22938 (uri (git-reference
22939 (url "https://github.com/chriskuehl/identify")
22940 (commit (string-append "v" version))))
22941 (file-name (git-file-name name version))
22942 (sha256
22943 (base32 "1fqgci6skckcq0x5pnxh6k2qjzn1ndsrgha1j6wwv1ld4g9bd3hz"))))
22944 (build-system python-build-system)
22945 (arguments
22946 `(#:phases
22947 (modify-phases %standard-phases
22948 ;; system-error "utime" "~A" ("No such file or directory")
22949 (delete 'ensure-no-mtimes-pre-1980)
22950 (replace 'check
22951 (lambda* (#:key tests? #:allow-other-keys)
22952 (when tests?
22953 (invoke "pytest" "-vv")))))))
22954 (native-inputs
22955 (list python-coverage python-pytest))
22956 (propagated-inputs
22957 (list python-editdistance))
22958 (home-page "https://github.com/chriskuehl/identify")
22959 (synopsis "File identification library for Python")
22960 (description
22961 "@code{identify} is a file identification library for Python. Given
22962a file (or some information about a file), return a set of standardized tags
22963identifying what the file is.")
22964 (license license:expat)))
22965
22966(define-public python-tldextract
22967 (package
22968 (name "python-tldextract")
22969 (version "3.3.0")
22970 (source
22971 (origin
22972 (method url-fetch)
22973 (uri (pypi-uri "tldextract" version))
22974 (sha256
22975 (base32
22976 "1wac4yvcpgqjvls770mfx165amvy7gr00nnd2w24bqqwyamj9kdd"))))
22977 (build-system python-build-system)
22978 (native-inputs
22979 (list python-pytest python-responses python-setuptools-scm))
22980 (propagated-inputs
22981 (list python-filelock python-idna python-requests python-requests-file))
22982 (home-page
22983 "https://github.com/john-kurkowski/tldextract")
22984 (synopsis
22985 "Separate the TLD from the registered domain and subdomains of a URL")
22986 (description
22987 "TLDExtract accurately separates the TLD from the registered domain and
22988subdomains of a URL, using the Public Suffix List. By default, this includes
22989the public ICANN TLDs and their exceptions. It can optionally support the
22990Public Suffix List's private domains as well.")
22991 (license license:bsd-3)))
22992
22993(define-public python-tldr
22994 (package
22995 (name "python-tldr")
22996 (version "3.1.0")
22997 (source
22998 (origin
22999 ;; There's no test in PyPI.
23000 (method git-fetch)
23001 (uri (git-reference
23002 (url "https://github.com/tldr-pages/tldr-python-client")
23003 (commit version)))
23004 (file-name (git-file-name name version))
23005 (sha256
23006 (base32 "1hxmprqg8c4cvs19n7f80f3y7jj74i8sc2dmq2gdjmsdrb54bbzc"))))
23007 (build-system python-build-system)
23008 (arguments
23009 (list #:phases
23010 #~(modify-phases %standard-phases
23011 (add-after 'build 'build-doc
23012 (lambda _
23013 (invoke "make" "-C" "docs")))
23014 (replace 'check
23015 (lambda* (#:key tests? #:allow-other-keys)
23016 (when tests?
23017 ;; This test fails. It tries to open a network socket.
23018 (invoke "pytest" "-vv" "-k" "not test_error_message")))))))
23019 (native-inputs
23020 (list python-pytest python-pytest-runner python-sphinx-argparse))
23021 (inputs
23022 (list python-argcomplete python-colorama python-termcolor python-shtab))
23023 (home-page "https://github.com/tldr-pages/tldr-python-client")
23024 (synopsis "Python command-line client for tldr pages")
23025 (description "This package provides the @code{tldr} command allowing users
23026to view @code{tldr} pages from a shell. The @code{tldr} pages are a community
23027effort to simplify the man pages with practical examples.")
23028 (license license:expat))) ; MIT license
23029
23030(define-public python-nodeenv
23031 (package
23032 (name "python-nodeenv")
23033 (version "1.4.0")
23034 (source
23035 (origin
23036 ;; There's no tarball in PyPI.
23037 (method git-fetch)
23038 (uri (git-reference
23039 (url "https://github.com/ekalinin/nodeenv")
23040 (commit version)))
23041 (file-name (git-file-name name version))
23042 (sha256
23043 (base32 "0y443icx0w7jlzmxmmcm4q8dqfiwgafbb9cp8jpm68mbqxbz40a7"))))
23044 (build-system python-build-system)
23045 (arguments
23046 `(#:phases
23047 (modify-phases %standard-phases
23048 (replace 'check
23049 (lambda _
23050 ;; This test fails. It tries to open a network socket.
23051 (invoke "pytest" "-vv" "-k" "not test_smoke"))))))
23052 (native-inputs
23053 (list python-coverage python-mock python-pytest))
23054 (home-page "https://ekalinin.github.io/nodeenv/")
23055 (synopsis "Create isolated node.js environments")
23056 (description
23057 "Nodeenv (node.js virtual environment) is a tool to create isolated
23058node.js environments. It creates an environment that has its own installation
23059directories, that doesn't share libraries with other node.js virtual
23060environments.")
23061 (license license:bsd-3)))
23062
23063(define-public python-pynamecheap
23064 (package
23065 (name "python-pynamecheap")
23066 (version "0.0.3")
23067 (source
23068 (origin
23069 (method url-fetch)
23070 (uri (pypi-uri "PyNamecheap" version))
23071 (sha256
23072 (base32
23073 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
23074 (build-system python-build-system)
23075 (propagated-inputs
23076 (list python-requests))
23077 (home-page
23078 "https://github.com/Bemmu/PyNamecheap")
23079 (synopsis
23080 "Namecheap API client in Python")
23081 (description
23082 "PyNamecheap is a Namecheap API client in Python.")
23083 (license license:expat)))
23084
23085(define-public python-dns-lexicon
23086 (package
23087 (name "python-dns-lexicon")
23088 (version "2.4.0")
23089 (source
23090 (origin
23091 (method url-fetch)
23092 (uri (pypi-uri "dns-lexicon" version))
23093 (sha256
23094 (base32
23095 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
23096 (build-system python-build-system)
23097 (arguments
23098 `(#:tests? #f)) ;requires internet access
23099 (propagated-inputs
23100 (list python-future python-pynamecheap python-requests
23101 python-tldextract python-urllib3))
23102 (home-page "https://github.com/AnalogJ/lexicon")
23103 (synopsis
23104 "Manipulate DNS records on various DNS providers")
23105 (description
23106 "Lexicon provides a way to manipulate DNS records on multiple DNS
23107providers in a standardized way. It has a CLI but it can also be used as a
23108Python library. It was designed to be used in automation, specifically with
23109Let's Encrypt.")
23110 (license license:expat)))
23111
23112(define-public python-cfgv
23113 (package
23114 (name "python-cfgv")
23115 (version "3.3.1")
23116 (source
23117 (origin
23118 ;; There are no tests in the PyPI tarball.
23119 (method git-fetch)
23120 (uri (git-reference
23121 (url "https://github.com/asottile/cfgv")
23122 (commit (string-append "v" version))))
23123 (file-name (git-file-name name version))
23124 (sha256
23125 (base32 "1pci97cmn3v45sfch9s3lshidrl0309ls9byidic0l8drkwnkwcj"))))
23126 (build-system python-build-system)
23127 (arguments
23128 `(#:phases
23129 (modify-phases %standard-phases
23130 (replace 'check
23131 (lambda* (#:key tests? #:allow-other-keys)
23132 (when tests?
23133 (invoke "pytest" "-vv")))))))
23134 (native-inputs
23135 (list python-pytest))
23136 (home-page "https://github.com/asottile/cfgv")
23137 (synopsis "Configuration validation library")
23138 (description
23139 "This library helps to validate configuration files and produce human
23140readable error messages.")
23141 (license license:expat)))
23142
23143(define-public python-commandlines
23144 (package
23145 (name "python-commandlines")
23146 (version "0.4.1")
23147 (source
23148 (origin
23149 (method url-fetch)
23150 (uri (pypi-uri "commandlines" version))
23151 (sha256
23152 (base32
23153 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
23154 (build-system python-build-system)
23155 (home-page "https://github.com/chrissimpkins/commandlines")
23156 (synopsis "Command line argument to object parsing library")
23157 (description
23158 "@code{Commandlines} is a Python library for command line application
23159development that supports command line argument parsing, command string
23160validation testing and application logic.")
23161 (license license:expat)))
23162
23163;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
23164;; python-numba. They have a very unflexible relationship.
23165(define-public python-numba
23166 (package
23167 (name "python-numba")
23168 (version "0.55.1")
23169 (source
23170 (origin
23171 (method url-fetch)
23172 (uri (pypi-uri "numba" version))
23173 (sha256
23174 (base32
23175 "18rf8i32m1045zxglvicpgldvzmqdxqvs3dhjd7wilb64sd0ds83"))))
23176 (build-system python-build-system)
23177 (arguments
23178 `(#:phases
23179 (modify-phases %standard-phases
23180 (add-after 'unpack 'disable-proprietary-features
23181 (lambda _
23182 (setenv "NUMBA_DISABLE_HSA" "1")
23183 (setenv "NUMBA_DISABLE_CUDA" "1")))
23184 (add-after 'unpack 'disable-failing-tests
23185 (lambda _
23186 ;; This one test fails because a deprecation warning is printed.
23187 (substitute* "numba/tests/test_import.py"
23188 (("def test_no_accidental_warnings")
23189 "def disabled_test_no_accidental_warnings"))))
23190 (replace 'check
23191 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
23192 (when tests?
23193 (add-installed-pythonpath inputs outputs)
23194 ;; Something is wrong with the PYTHONPATH when running the
23195 ;; tests from the build directory, as it complains about not being
23196 ;; able to import certain modules.
23197 (with-directory-excursion "/tmp"
23198 (setenv "HOME" (getcwd))
23199 (invoke "python3" "-m" "numba.runtests" "-v" "-m"))))))))
23200 (propagated-inputs
23201 (list python-llvmlite python-numpy python-singledispatch))
23202 (native-inputs ;for tests
23203 (list python-jinja2 python-pygments))
23204 (home-page "https://numba.pydata.org")
23205 (synopsis "Compile Python code using LLVM")
23206 (description "Numba gives you the power to speed up your applications with
23207high performance functions written directly in Python. With a few
23208annotations, array-oriented and math-heavy Python code can be just-in-time
23209compiled to native machine instructions, similar in performance to C, C++ and
23210Fortran, without having to switch languages or Python interpreters.
23211
23212Numba works by generating optimized machine code using the LLVM compiler
23213infrastructure at import time, runtime, or statically (using the included pycc
23214tool).")
23215 (license license:bsd-3)))
23216
23217(define-public python-numcodecs
23218 (package
23219 (name "python-numcodecs")
23220 (version "0.6.4")
23221 (source
23222 (origin
23223 (method url-fetch)
23224 (uri (pypi-uri "numcodecs" version))
23225 (sha256
23226 (base32
23227 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))
23228 (modules '((guix build utils)))
23229 (snippet
23230 '(begin
23231 (delete-file-recursively "c-blosc")
23232 (for-each delete-file '("numcodecs/blosc.c"
23233 "numcodecs/compat_ext.c"
23234 "numcodecs/lz4.c"
23235 "numcodecs/vlen.c"
23236 "numcodecs/zstd.c"))))))
23237 (build-system python-build-system)
23238 (arguments
23239 `(#:tests? #false ; TODO: unclear why numcodecs.* are not found
23240 #:phases
23241 (modify-phases %standard-phases
23242 (add-after 'unpack 'disable-avx2
23243 (lambda _
23244 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
23245 (add-after 'unpack 'unbundle
23246 (lambda _
23247 (substitute* "setup.py"
23248 (("sources=sources \\+ blosc_sources,")
23249 "sources=sources,")
23250 (("extra_compile_args=extra_compile_args")
23251 "extra_compile_args=list(base_compile_args)")
23252 (("'numcodecs.zstd',")
23253 "'numcodecs.zstd', libraries=['zstd'], ")
23254 (("'numcodecs.lz4',")
23255 "'numcodecs.lz4', libraries=['lz4'], ")
23256 (("'numcodecs.blosc',")
23257 "'numcodecs.blosc', libraries=['blosc'], "))))
23258 (replace 'check
23259 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
23260 (when tests?
23261 (add-installed-pythonpath inputs outputs)
23262 (invoke "pytest" "-vv")))))))
23263 (inputs
23264 (list c-blosc lz4 zlib
23265 `(,zstd "lib")))
23266 (propagated-inputs
23267 (list python-numpy python-msgpack))
23268 (native-inputs
23269 (list python-cython python-pytest python-setuptools-scm))
23270 (home-page "https://github.com/zarr-developers/numcodecs")
23271 (synopsis "Buffer compression and transformation codecs")
23272 (description
23273 "This Python package provides buffer compression and transformation
23274codecs for use in data storage and communication applications.")
23275 (license license:expat)))
23276
23277(define-public python-asciitree
23278 (package
23279 (name "python-asciitree")
23280 (version "0.3.3")
23281 (source
23282 (origin
23283 (method url-fetch)
23284 (uri (pypi-uri "asciitree" version))
23285 (sha256
23286 (base32
23287 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
23288 (build-system python-build-system)
23289 (home-page "https://github.com/mbr/asciitree")
23290 (synopsis "Draws ASCII trees")
23291 (description "This package draws tree structures using characters.")
23292 (license license:expat)))
23293
23294(define-public python-zarr
23295 (package
23296 (name "python-zarr")
23297 (version "2.4.0")
23298 (source
23299 (origin
23300 (method url-fetch)
23301 (uri (pypi-uri "zarr" version))
23302 (sha256
23303 (base32
23304 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
23305 (build-system python-build-system)
23306 (arguments
23307 `(#:phases
23308 (modify-phases %standard-phases
23309 (add-after 'unpack 'disable-service-tests
23310 (lambda _
23311 (setenv "ZARR_TEST_ABS" "0")
23312 (setenv "ZARR_TEST_MONGO" "0")
23313 (setenv "ZARR_TEST_REDIS" "0")
23314 #t))
23315 (replace 'check
23316 (lambda _
23317 (invoke "pytest" "-vv" "-k" "not lmdb")
23318 #t)))))
23319 (propagated-inputs
23320 (list python-asciitree python-fasteners python-numcodecs
23321 python-numpy))
23322 (native-inputs
23323 (list python-pytest python-setuptools-scm))
23324 (home-page "https://github.com/zarr-developers/zarr-python")
23325 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
23326 (description
23327 "This package provides an implementation of chunked, compressed,
23328N-dimensional arrays for Python.")
23329 (license license:expat)))
23330
23331(define-public python-anndata
23332 (package
23333 (name "python-anndata")
23334 (version "0.8.0")
23335 (source
23336 (origin
23337 ;; The tarball from PyPi doesn't include tests.
23338 (method git-fetch)
23339 (uri (git-reference
23340 (url "https://github.com/theislab/anndata")
23341 (commit version)))
23342 (file-name (git-file-name name version))
23343 (sha256
23344 (base32
23345 "0v7npqrg1rdm8jzw22a45c0mqrmsv05r3k88i3lhzi0pzzxca1i1"))))
23346 (build-system python-build-system)
23347 (arguments
23348 `(#:phases
23349 (modify-phases %standard-phases
23350 (delete 'check)
23351 (replace 'build
23352 (lambda _
23353 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)
23354 (substitute* "anndata/_metadata.py"
23355 (("__version__ =.*")
23356 (string-append "__version__ = \"" ,version "\"\n")))
23357 ;; ZIP does not support timestamps before 1980.
23358 (setenv "SOURCE_DATE_EPOCH" "315532800")
23359 (invoke "flit" "build")))
23360 (replace 'install
23361 (lambda* (#:key inputs outputs #:allow-other-keys)
23362 (add-installed-pythonpath inputs outputs)
23363 (let ((out (assoc-ref outputs "out")))
23364 (for-each (lambda (wheel)
23365 (format #true wheel)
23366 (invoke "python" "-m" "pip" "install"
23367 wheel (string-append "--prefix=" out)))
23368 (find-files "dist" "\\.whl$"))))))))
23369 (propagated-inputs
23370 (list python-h5py
23371 python-importlib-metadata
23372 python-natsort
23373 python-numcodecs
23374 python-packaging
23375 python-pandas
23376 python-scipy
23377 python-zarr))
23378 (native-inputs
23379 (list python-joblib python-pytest python-toml python-flit
23380 python-setuptools-scm))
23381 (home-page "https://github.com/theislab/anndata")
23382 (synopsis "Annotated data for data analysis pipelines")
23383 (description "Anndata is a package for simple (functional) high-level APIs
23384for data analysis pipelines. In this context, it provides an efficient,
23385scalable way of keeping track of data together with learned annotations and
23386reduces the code overhead typically encountered when using a mostly
23387object-oriented library such as @code{scikit-learn}.")
23388 (license license:bsd-3)))
23389
23390(define-public python-dill
23391 (package
23392 (name "python-dill")
23393 (version "0.3.5.1")
23394 (source
23395 (origin
23396 (method url-fetch)
23397 (uri (pypi-uri "dill" version))
23398 (sha256
23399 (base32 "11lc40x37cx2i8qqbc5qklifm65dyjl6prrqsycybvpixzrl2pnp"))))
23400 (build-system python-build-system)
23401 (arguments
23402 `(#:phases
23403 (modify-phases %standard-phases
23404 (replace 'check
23405 (lambda _
23406 (with-directory-excursion "/tmp"
23407 (invoke "nosetests" "-v"))
23408 #t)))))
23409 (native-inputs
23410 (list python-nose))
23411 (home-page "https://pypi.org/project/dill/")
23412 (synopsis "Serialize all of Python")
23413 (description "Dill extends Python's @code{pickle} module for serializing
23414and de-serializing Python objects to the majority of the built-in Python
23415types. Dill provides the user the same interface as the @code{pickle} module,
23416and also includes some additional features. In addition to pickling Python
23417objects, @code{dill} provides the ability to save the state of an interpreter
23418session in a single command. Hence, it would be feasible to save a
23419interpreter session, close the interpreter, ship the pickled file to another
23420computer, open a new interpreter, unpickle the session and thus continue from
23421the saved state of the original interpreter session.")
23422 (license license:bsd-3)))
23423
23424(define-public python-multiprocess
23425 (package
23426 (name "python-multiprocess")
23427 (version "0.70.9")
23428 (source
23429 (origin
23430 (method url-fetch)
23431 (uri (pypi-uri "multiprocess" version))
23432 (sha256
23433 (base32
23434 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
23435 (build-system python-build-system)
23436 (arguments
23437 `(#:phases
23438 (modify-phases %standard-phases
23439 (add-after 'unpack 'disable-broken-tests
23440 (lambda _
23441 ;; This test is broken as there is no keyboard interrupt.
23442 (substitute* "py3.7/multiprocess/tests/__init__.py"
23443 (("^(.*)def test_wait_result"
23444 line indent)
23445 (string-append indent
23446 "@unittest.skip(\"Disabled by Guix\")\n"
23447 line)))
23448 #t))
23449 ;; Tests must be run after installation.
23450 (delete 'check)
23451 (add-after 'install 'check
23452 (lambda* (#:key inputs outputs #:allow-other-keys)
23453 (add-installed-pythonpath inputs outputs)
23454 (invoke "python" "-m" "multiprocess.tests")
23455 #t)))))
23456 (propagated-inputs
23457 (list python-dill))
23458 (home-page "https://pypi.org/project/multiprocess/")
23459 (synopsis "Multiprocessing and multithreading in Python")
23460 (description
23461 "This package is a fork of the multiprocessing Python package, a package
23462which supports the spawning of processes using the API of the standard
23463library's @code{threading} module.")
23464 (license license:bsd-3)))
23465
23466(define-public python-multiprocessing-on-dill
23467 (package
23468 (name "python-multiprocessing-on-dill")
23469 (version "3.5.0a4")
23470 (source (origin
23471 (method url-fetch)
23472 (uri (pypi-uri "multiprocessing_on_dill" version))
23473 (sha256
23474 (base32
23475 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
23476 (build-system python-build-system)
23477 (arguments
23478 (list
23479 #:phases
23480 #~(modify-phases %standard-phases
23481 (replace 'check
23482 (lambda* (#:key tests? #:allow-other-keys)
23483 (when tests?
23484 (invoke "pytest" "-vv")))))))
23485 (propagated-inputs (list python-dill))
23486 (native-inputs (list python-check-manifest python-pytest python-wheel))
23487 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
23488 (synopsis "Multiprocessing using dill instead of pickle")
23489 (description
23490 "This package provides a friendly fork of multiprocessing which uses dill
23491instead of pickle.")
23492 (license license:psfl)))
23493
23494(define-public python-toolrack
23495 (package
23496 (name "python-toolrack")
23497 (version "3.0.1")
23498 (source
23499 (origin
23500 (method git-fetch)
23501 (uri (git-reference
23502 (url "https://github.com/albertodonato/toolrack")
23503 (commit (string-append "v" version))))
23504 (file-name (git-file-name name version))
23505 (sha256
23506 (base32
23507 "0ych11b7nchnkhqgf7dgivbvn2lzafjsi7nhb1an5zjjyns39gpx"))))
23508 (build-system python-build-system)
23509 (arguments
23510 (list
23511 #:phases
23512 #~(modify-phases %standard-phases
23513 (add-after 'unpack 'patch-/bin/sh
23514 (lambda _
23515 (substitute* "toolrack/aio/tests/test_process.py"
23516 (("/bin/sh")
23517 (which "sh")))))
23518 (replace 'check
23519 (lambda* (#:key tests? #:allow-other-keys)
23520 (when tests?
23521 (invoke "pytest" "-vv" "--pyargs" "toolrack"
23522 "-k"
23523 (string-append
23524 ;; These tests fail for unknown reason comparing the
23525 ;; expected output of shell scripts.
23526 "not test_parse_stderr "
23527 "and not test_parse_no_ending_newline "
23528 "and not test_parse_stdout"))))))))
23529 (native-inputs (list python-pytest python-pytest-asyncio
23530 python-pytest-mock))
23531 (home-page "https://github.com/albertodonato/toolrack")
23532 (synopsis "Collection of Python utility functions and classes")
23533 (description "This package provides a collection of miscellaneous utility
23534functions and classes.")
23535 (license license:lgpl3+)))
23536
23537(define-public python-toolz
23538 (package
23539 (name "python-toolz")
23540 (version "0.11.2")
23541 (source
23542 (origin
23543 (method url-fetch)
23544 (uri (pypi-uri "toolz" version))
23545 (sha256
23546 (base32
23547 "0cxwlh8dz8gq0l0bzchjnqqwhdp261nfd958ppqm518k2mg2scbb"))))
23548 (build-system python-build-system)
23549 (arguments
23550 `(#:phases
23551 (modify-phases %standard-phases
23552 (replace 'check
23553 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
23554 (when tests?
23555 (add-installed-pythonpath inputs outputs)
23556 (invoke "python" "-m" "pytest" "--doctest-modules"
23557 "--pyargs" "toolz")))))))
23558 (native-inputs
23559 (list python-pytest))
23560 (home-page "https://github.com/pytoolz/toolz/")
23561 (synopsis "List processing tools and functional utilities")
23562 (description
23563 "This package provides a set of utility functions for iterators,
23564functions, and dictionaries.")
23565 (license license:bsd-3)))
23566
23567(define-public python-cytoolz
23568 (package
23569 (name "python-cytoolz")
23570 (version "0.11.2")
23571 (source
23572 (origin
23573 (method url-fetch)
23574 (uri (pypi-uri "cytoolz" version))
23575 (sha256
23576 (base32
23577 "1d12mgaippxxhn24w2hj0my3aqkx80fks5g4wzfdsvl0acqnc8za"))
23578 (modules '((guix build utils)))
23579 (snippet
23580 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
23581 (build-system python-build-system)
23582 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
23583 ;; 'exceptions'"
23584 (arguments '(#:tests? #f))
23585 (propagated-inputs
23586 (list python-toolz))
23587 (native-inputs
23588 (list python-cython))
23589 (home-page "https://github.com/pytoolz/cytoolz")
23590 (synopsis "High performance functional utilities")
23591 (description
23592 "The cytoolz package implements the same API as provided by toolz. The
23593main differences are that @code{cytoolz} is faster and cytoolz offers a C API
23594that is accessible to other projects developed in Cython.")
23595 (license license:bsd-3)))
23596
23597(define-public python-sortedcollections
23598 (package
23599 (name "python-sortedcollections")
23600 (version "2.1.0")
23601 (source
23602 (origin
23603 (method url-fetch)
23604 (uri (pypi-uri "sortedcollections" version))
23605 (sha256
23606 (base32
23607 "1kfabpnjyjm5ml2zspry9jy3xq49aybchgaa4ahic2jqdjfn1sfq"))))
23608 (build-system python-build-system)
23609 (propagated-inputs
23610 (list python-sortedcontainers))
23611 (arguments '(#:tests? #f)) ; Tests not included in release tarball.
23612 (home-page "http://www.grantjenks.com/docs/sortedcollections/")
23613 (synopsis "Python Sorted Collections")
23614 (description "Sorted Collections is a Python sorted collections library.")
23615 (license license:asl2.0)))
23616
23617(define-public python-sortedcontainers
23618 (package
23619 (name "python-sortedcontainers")
23620 (version "2.1.0")
23621 (source
23622 (origin
23623 (method url-fetch)
23624 (uri (pypi-uri "sortedcontainers" version))
23625 (sha256
23626 (base32
23627 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
23628 (build-system python-build-system)
23629 (arguments
23630 ;; FIXME: Tests require many extra dependencies, and would introduce
23631 ;; a circular dependency on hypothesis, which uses this package.
23632 '(#:tests? #f))
23633 (propagated-inputs
23634 `(("python-appdirs" ,python-appdirs)
23635 ("python-distlib" ,python-distlib)
23636 ("python-filelock" ,python-filelock)
23637 ("python-six" ,python-six-bootstrap)))
23638 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
23639 (synopsis "Sorted List, Sorted Dict, Sorted Set")
23640 (description
23641 "This package provides a sorted collections library, written in
23642pure-Python.")
23643 (license license:asl2.0)))
23644
23645(define python-cloudpickle-testpkg
23646 (package
23647 (name "python-cloudpickle-testpkg")
23648 (version "1.6.0")
23649 (source
23650 (origin
23651 ;; Archive on pypi does not include test infrastructure.
23652 (method git-fetch)
23653 (uri (git-reference
23654 (url "https://github.com/cloudpipe/cloudpickle")
23655 (commit (string-append "v" version))))
23656 (file-name (git-file-name name version))
23657 (sha256
23658 (base32
23659 "1584d21d4rcpryn8yfz0pjnjprk4zm367m0razdcz8cjbsh0dxp6"))))
23660 (build-system python-build-system)
23661 (arguments
23662 '(#:phases
23663 (modify-phases %standard-phases
23664 (add-after 'unpack 'chdir
23665 (lambda _ (chdir "tests/cloudpickle_testpkg"))))))
23666 (home-page "https://github.com/cloudpipe/cloudpickle")
23667 (synopsis "Extended pickling support for Python objects")
23668 (description
23669 "Cloudpickle makes it possible to serialize Python constructs not
23670supported by the default pickle module from the Python standard library. It
23671is especially useful for cluster computing where Python expressions are
23672shipped over the network to execute on remote hosts, possibly close to the
23673data.")
23674 (license license:bsd-3)))
23675
23676(define-public python-cloudpickle
23677 (package
23678 (inherit python-cloudpickle-testpkg)
23679 (name "python-cloudpickle")
23680 (build-system python-build-system)
23681 (arguments
23682 '(#:phases
23683 (modify-phases %standard-phases
23684 (replace 'check
23685 (lambda* (#:key tests? #:allow-other-keys)
23686 (if tests?
23687 (invoke "pytest" "-s" "-vv")
23688 (format #t "test suite not run~%")))))))
23689 (native-inputs
23690 (list ;; For tests.
23691 python-cloudpickle-testpkg python-psutil python-pytest
23692 python-tornado-6))
23693 (home-page "https://github.com/cloudpipe/cloudpickle")
23694 (synopsis "Extended pickling support for Python objects")
23695 (description
23696 "Cloudpickle makes it possible to serialize Python constructs not
23697supported by the default pickle module from the Python standard library. It
23698is especially useful for cluster computing where Python expressions are
23699shipped over the network to execute on remote hosts, possibly close to the
23700data.")
23701 (license license:bsd-3)))
23702
23703(define-public python-locket
23704 (package
23705 (name "python-locket")
23706 (version "1.0.0")
23707 (source
23708 (origin
23709 (method url-fetch)
23710 (uri (pypi-uri "locket" version))
23711 (sha256
23712 (base32
23713 "0cm6290zm3ba62n2x2piy3s8d41hrmffda2nw18ggfwb582lq3aw"))))
23714 (build-system python-build-system)
23715 (home-page "https://github.com/mwilliamson/locket.py")
23716 (synopsis "File-based locks for Python")
23717 (description
23718 "Locket implements a lock that can be used by multiple processes provided
23719they use the same path.")
23720 (license license:bsd-2)))
23721
23722(define-public python-blosc
23723 (package
23724 (name "python-blosc")
23725 (version "1.5.1")
23726 (source
23727 (origin
23728 (method url-fetch)
23729 (uri (pypi-uri "blosc" version))
23730 (sha256
23731 (base32
23732 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
23733 (build-system python-build-system)
23734 ;; FIXME: all tests pass, but then this error is printed:
23735 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
23736 (arguments '(#:tests? #f))
23737 (propagated-inputs
23738 (list python-numpy))
23739 (home-page "https://github.com/blosc/python-blosc")
23740 (synopsis "Python wrapper for the Blosc data compressor library")
23741 (description "Blosc is a high performance compressor optimized for binary
23742data. It has been designed to transmit data to the processor cache faster
23743than the traditional, non-compressed, direct memory fetch approach via a
23744@code{memcpy()} system call.
23745
23746Blosc works well for compressing numerical arrays that contains data with
23747relatively low entropy, like sparse data, time series, grids with
23748regular-spaced values, etc.
23749
23750This Python package wraps the Blosc library.")
23751 (license license:bsd-3)))
23752
23753(define-public python-partd
23754 (package
23755 (name "python-partd")
23756 (version "1.2.0")
23757 (source
23758 (origin
23759 (method url-fetch)
23760 (uri (pypi-uri "partd" version))
23761 (sha256
23762 (base32
23763 "1sy3vdfyyx3bc5590zb7gwpsmimqz8m992x9hsydq8nmhixqjrxa"))))
23764 (build-system python-build-system)
23765 (propagated-inputs
23766 (list python-blosc
23767 python-locket
23768 python-numpy
23769 python-pandas
23770 python-pyzmq
23771 python-toolz))
23772 (home-page "https://github.com/dask/partd/")
23773 (synopsis "Appendable key-value storage")
23774 (description "Partd stores key-value pairs. Values are raw bytes. We
23775append on old values. Partd excels at shuffling operations.")
23776 (license license:bsd-3)))
23777
23778(define-public python-fsspec
23779 (package
23780 (name "python-fsspec")
23781 (version "2022.5.0")
23782 (source
23783 (origin
23784 (method url-fetch)
23785 (uri (pypi-uri "fsspec" version))
23786 (sha256
23787 (base32
23788 "1d43qiz8g395042a52yswz6j7q41gvrv3k53wvxn1rs4bk3mjm3s"))))
23789 (build-system python-build-system)
23790 (arguments '(#:tests? #f)) ; there are none
23791 (home-page "https://github.com/intake/filesystem_spec")
23792 (synopsis "File-system specification")
23793 (description "The purpose of this package is to produce a template or
23794specification for a file-system interface, that specific implementations
23795should follow, so that applications making use of them can rely on a common
23796behavior and not have to worry about the specific internal implementation
23797decisions with any given backend.")
23798 (license license:bsd-3)))
23799
23800;; Note: Remember to update python-distributed when updating dask.
23801(define-public python-dask
23802 (package
23803 (name "python-dask")
23804 (version "2022.05.2")
23805 (source
23806 (origin
23807 (method git-fetch)
23808 (uri (git-reference
23809 (url "https://github.com/dask/dask/")
23810 (commit "8db1597c9745543df3129399bead5fbc95a54571")))
23811 (file-name (git-file-name name version))
23812 (sha256
23813 (base32 "1xfk3wml972z502w5ii5mn03ls3rg5p4hqgl0hkicgpmzlyz9kph"))
23814 (snippet
23815 ;; Delete generated copy of python-versioneer. We recreate it below.
23816 '(delete-file "versioneer.py"))))
23817 (build-system python-build-system)
23818 (arguments
23819 `(#:phases
23820 (modify-phases %standard-phases
23821 (add-after 'unpack 'versioneer
23822 (lambda _
23823 (invoke "versioneer" "install")))
23824 (replace 'check
23825 (lambda* (#:key tests? #:allow-other-keys)
23826 (when tests? (invoke "pytest" "-vv")))))))
23827 (propagated-inputs
23828 (list python-cloudpickle
23829 python-fsspec
23830 python-numpy
23831 python-packaging
23832 python-pandas
23833 python-partd
23834 python-toolz
23835 python-pyyaml))
23836 (native-inputs
23837 (list python-pytest python-pytest-runner python-pytest-rerunfailures
23838 python-versioneer))
23839 (home-page "https://github.com/dask/dask/")
23840 (synopsis "Parallel computing with task scheduling")
23841 (description
23842 "Dask is a flexible parallel computing library for analytics. It
23843consists of two components: dynamic task scheduling optimized for computation,
23844and large data collections like parallel arrays, dataframes, and lists that
23845extend common interfaces like NumPy, Pandas, or Python iterators to
23846larger-than-memory or distributed environments. These parallel collections
23847run on top of the dynamic task schedulers.")
23848 (license license:bsd-3)))
23849
23850(define-public python-ilinkedlist
23851 (package
23852 (name "python-ilinkedlist")
23853 (version "0.4.0")
23854 (source
23855 (origin
23856 (method url-fetch)
23857 (uri (pypi-uri "ilinkedlist" version))
23858 (sha256
23859 (base32
23860 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
23861 (build-system python-build-system)
23862 (native-inputs (list python-pytest))
23863 (inputs (list python))
23864 (home-page "https://github.com/luther9/ilinkedlist-py")
23865 (synopsis "Immutable linked list library")
23866 (description
23867 "This is a implementation of immutable linked lists for Python. It
23868contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
23869Since a linked list is treated as immutable, it is hashable, and its length
23870can be retrieved in constant time. Some of the terminology is inspired by
23871LISP. It is possible to create an improper list by creating a @code{Pair}
23872with a non-list @code{cdr}.")
23873 (license license:gpl3+)))
23874
23875(define-public python-readlike
23876 (package
23877 (name "python-readlike")
23878 (version "0.1.3")
23879 (source
23880 (origin
23881 (method url-fetch)
23882 (uri (pypi-uri "readlike" version))
23883 (sha256
23884 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
23885 (build-system python-build-system)
23886 (home-page "https://github.com/jangler/readlike")
23887 (synopsis "GNU Readline-like line editing module")
23888 (description
23889 "This Python module provides line editing functions similar to the default
23890Emacs-style ones of GNU Readline. Unlike the Python standard library's
23891@code{readline} package, this one allows access to those capabilities in settings
23892outside of a standard command-line interface. It is especially well-suited to
23893interfacing with Urwid, due to a shared syntax for describing key inputs.
23894
23895Currently, all stateless Readline commands are implemented. Yanking and history
23896are not supported.")
23897 (license license:expat)))
23898
23899(define-public python-reparser
23900 (package
23901 (name "python-reparser")
23902 (version "1.4.3")
23903 (source
23904 (origin
23905 (method url-fetch)
23906 (uri (pypi-uri "ReParser" version))
23907 (sha256
23908 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
23909 (build-system python-build-system)
23910 (home-page "https://github.com/xmikos/reparser")
23911 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
23912 (description
23913 "This Python library provides a simple lexer/parser for inline markup based
23914on regular expressions.")
23915 (license license:expat)))
23916
23917(define-public python-retrying
23918 (package
23919 (name "python-retrying")
23920 (version "1.3.3")
23921 (source
23922 (origin
23923 (method git-fetch)
23924 (uri (git-reference
23925 (url "https://github.com/rholder/retrying")
23926 (commit (string-append "v" version))))
23927 (file-name (git-file-name name version))
23928 (sha256
23929 (base32
23930 "1kqipkbdaw5s1xg0gi29awm03vp1x8dz24pjidgxagvkvrjpzhi7"))))
23931 (build-system python-build-system)
23932 (propagated-inputs
23933 (list python-six))
23934 (home-page "https://github.com/rholder/retrying")
23935 (synopsis "Library for adding retry behavior")
23936 (description "Retrying is a general-purpose retrying library to simplify
23937the task of adding retry behavior to just about anything.
23938
23939Features:
23940
23941@itemize
23942@item Generic Decorator API.
23943@item Specify stop condition (i.e. limit by number of attempts).
23944@item Specify wait condition (i.e. exponential backoff sleeping between attempts).
23945@item Customize retrying on Exceptions.
23946@item Customize retrying on expected returned result.
23947@end itemize")
23948 (license license:asl2.0)))
23949
23950(define-public python-pre-commit
23951 (package
23952 (name "python-pre-commit")
23953 (version "2.10.0")
23954 (source
23955 (origin
23956 (method url-fetch)
23957 (uri (pypi-uri "pre_commit" version))
23958 (sha256
23959 (base32 "1ycf6wpxrhxhdzz0vpryhbdxlwik5khgcvp3hxwvfr447a6k84zl"))))
23960 (build-system python-build-system)
23961 (arguments
23962 ;; Tests fail with "AttributeError: module 'pre_commit.resources' has no
23963 ;; attribute 'empty_template_setup'".
23964 `(#:tests? #false))
23965 (propagated-inputs
23966 (list python-cfgv
23967 python-identify
23968 python-importlib-metadata
23969 python-nodeenv
23970 python-pyyaml
23971 python-toml
23972 python-virtualenv))
23973 (home-page "https://github.com/pre-commit/pre-commit")
23974 (synopsis "Framework for managing multi-language pre-commit hooks")
23975 (description
23976 "This package provides a framework for managing and maintaining
23977multi-language pre-commit hooks.")
23978 (license license:expat)))
23979
23980(define-public python-precis-i18n
23981 (package
23982 (name "python-precis-i18n")
23983 (version "1.0.3")
23984 (source
23985 (origin
23986 (method url-fetch)
23987 (uri (pypi-uri "precis_i18n" version))
23988 (sha256
23989 (base32
23990 "1qfb78zpx565vqkg0xhx75pna9sc35m370vpcz82982c8ix3ypyz"))))
23991 (build-system python-build-system)
23992 (home-page "https://github.com/byllyfish/precis_i18n")
23993 (synopsis "Implementation of the PRECIS framework")
23994 (description
23995 "This module implements the PRECIS Framework as described in RFC 8264,
23996RFC 8265 and RFC 8266.")
23997 (license license:expat)))
23998
23999(define-public python-absl-py
24000 (package
24001 (name "python-absl-py")
24002 (version "0.6.1")
24003 (source
24004 (origin
24005 (method url-fetch)
24006 (uri (pypi-uri "absl-py" version))
24007 (sha256
24008 (base32
24009 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
24010 (build-system python-build-system)
24011 (propagated-inputs
24012 (list python-six))
24013 (home-page "https://github.com/abseil/abseil-py")
24014 (synopsis "Abseil Python common libraries")
24015 (description
24016 "This package provides the Abseil Python Common Libraries, a collection
24017of Python libraries for building Python applications.")
24018 (license license:asl2.0)))
24019
24020(define-public python-astor
24021 (package
24022 (name "python-astor")
24023 (version "0.8.1")
24024 (source
24025 (origin
24026 (method url-fetch)
24027 (uri (pypi-uri "astor" version))
24028 (sha256
24029 (base32
24030 "0ppscdzzvxpznclkmhhj53iz314x3pfv4yc7c6gwxqgljgdgyvka"))))
24031 (build-system python-build-system)
24032 ;; FIXME: There are two errors and two test failures.
24033 (arguments `(#:tests? #f))
24034 (home-page "https://github.com/berkerpeksag/astor")
24035 (synopsis "Read and write Python ASTs")
24036 (description "Astor is designed to allow easy manipulation of Python
24037source via the Abstract Syntax Tree.")
24038 (license license:bsd-3)))
24039
24040(define-public python-astunparse
24041 (package
24042 (name "python-astunparse")
24043 (version "1.6.3")
24044 (source
24045 (origin
24046 (method url-fetch)
24047 (uri (pypi-uri "astunparse" version))
24048 (sha256
24049 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
24050 (build-system python-build-system)
24051 (arguments '(#:tests? #f)) ; there are none
24052 (propagated-inputs
24053 (list python-six python-wheel))
24054 (home-page "https://github.com/simonpercivall/astunparse")
24055 (synopsis "AST unparser for Python")
24056 (description "This package provides an AST unparser for Python. It is a
24057factored out version of @code{unparse} found in the Python source
24058distribution.")
24059 (license license:bsd-3)))
24060
24061(define-public python-gast
24062 (package
24063 (name "python-gast")
24064 (version "0.5.3")
24065 (source
24066 (origin
24067 (method url-fetch)
24068 (uri (pypi-uri "gast" version))
24069 (sha256
24070 (base32 "1sidaczriw54pfkj3523y9j9q2harrczc1qqgnfaylz641ca5gng"))))
24071 (build-system python-build-system)
24072 (arguments
24073 '(#:phases (modify-phases %standard-phases
24074 (replace 'check
24075 (lambda* (#:key tests? #:allow-other-keys)
24076 (when tests?
24077 (invoke "pytest" "-vv")))))))
24078 (native-inputs
24079 (list python-pytest))
24080 (propagated-inputs
24081 (list python-astunparse))
24082 (home-page "https://github.com/serge-sans-paille/gast/")
24083 (synopsis "Generic Python AST that abstracts the underlying Python version")
24084 (description
24085 "GAST provides a compatibility layer between the AST of various Python
24086versions, as produced by @code{ast.parse} from the standard @code{ast}
24087module.")
24088 (license license:bsd-3)))
24089
24090(define-public python-wikidata
24091 (package
24092 (name "python-wikidata")
24093 (version "0.6.1")
24094 (source
24095 (origin
24096 (method url-fetch)
24097 (uri (pypi-uri "Wikidata" version))
24098 (sha256
24099 (base32
24100 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
24101 (build-system python-build-system)
24102 (propagated-inputs
24103 (list python-babel))
24104 (home-page "https://github.com/dahlia/wikidata")
24105 (synopsis "Wikidata client library")
24106 (description
24107 "This package provides a Python interface to
24108@url{https://www.wikidata.org/, Wikidata}.")
24109 (properties '((upstream-name . "Wikidata")))
24110 (license license:gpl3+)))
24111
24112(define-public python-doctest-ignore-unicode
24113 (package
24114 (name "python-doctest-ignore-unicode")
24115 (version "0.1.2")
24116 (source
24117 (origin
24118 (method url-fetch)
24119 (uri (pypi-uri "doctest-ignore-unicode" version))
24120 (sha256
24121 (base32
24122 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
24123 (build-system python-build-system)
24124 (native-inputs
24125 (list python-nose))
24126 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
24127 (synopsis "Ignore Unicode literal prefixes in doctests")
24128 (description
24129 "This package adds support for a flag to ignore Unicode literal prefixes
24130in doctests.")
24131 (license license:asl2.0)))
24132
24133(define-public python-attr
24134 (package
24135 (name "python-attr")
24136 (version "0.3.1")
24137 (source
24138 (origin
24139 (method url-fetch)
24140 (uri (pypi-uri "attr" version))
24141 (sha256
24142 (base32
24143 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
24144 (build-system python-build-system)
24145 (home-page "https://github.com/denis-ryzhkov/attr")
24146 (synopsis "Decorator for attributes of target function or class")
24147 (description "Simple decorator to set attributes of target function or
24148class in a @acronym{DRY, Don't Repeat Yourself} way.")
24149 (license license:expat)))
24150
24151(define-public python-construct
24152 (package
24153 (name "python-construct")
24154 (version "2.10.56")
24155 (source
24156 (origin
24157 (method url-fetch)
24158 (uri (pypi-uri "construct" version))
24159 (sha256
24160 (base32
24161 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
24162 (build-system python-build-system)
24163 (arguments
24164 `(#:tests? #f)) ; No tests exist.
24165 (propagated-inputs
24166 (list python-extras python-arrow python-numpy python-ruamel.yaml))
24167 (home-page "https://construct.readthedocs.io")
24168 (synopsis "Declarative and symmetrical parser and builder for binary data")
24169 (description
24170 "This package provides both simple, atomic constructs (such as
24171integers of various sizes), as well as composite ones which allow you
24172form hierarchical and sequential structures of increasing complexity.
24173It features bit and byte granularity, easy debugging and testing, an
24174easy-to-extend subclass system, and lots of primitive constructs to
24175make your work easier.")
24176 (license license:expat)))
24177
24178(define-public python-outcome
24179 (package
24180 (name "python-outcome")
24181 (version "1.0.1")
24182 (source
24183 (origin
24184 (method url-fetch)
24185 (uri (pypi-uri "outcome" version))
24186 (sha256
24187 (base32 "0vxn04vspmlkkyijjkjnsc46f93ki8g62hr7ag10zpd7ic324y7w"))))
24188 (build-system python-build-system)
24189 (arguments
24190 `(#:phases
24191 (modify-phases %standard-phases
24192 (replace 'check
24193 (lambda* (#:key inputs outputs #:allow-other-keys)
24194 (add-installed-pythonpath inputs outputs)
24195 (invoke "pytest" "-vv"))))))
24196 (native-inputs
24197 (list python-pytest python-pytest-cov python-pytest-asyncio))
24198 (propagated-inputs
24199 (list python-async-generator python-attrs))
24200 (home-page "https://github.com/python-trio/outcome")
24201 (synopsis "Capture the outcome of Python function calls")
24202 (description
24203 "Capture the outcome of Python function calls. Extracted from the Trio
24204project.")
24205 ;; Either license applies.
24206 (license (list license:expat license:asl2.0))))
24207
24208(define-public python-trio
24209 (package
24210 (name "python-trio")
24211 (version "0.20.0")
24212 (source
24213 (origin
24214 (method url-fetch)
24215 (uri (pypi-uri "trio" version))
24216 (sha256
24217 (base32 "0w30cwmdwfa8zq2agqv3h62jzwwsk7ms8f683ag8f3jx279m42k7"))))
24218 (build-system python-build-system)
24219 (arguments
24220 `(#:phases
24221 (modify-phases %standard-phases
24222 (add-after 'unpack 'patch-sleep
24223 (lambda _
24224 (substitute* "trio/tests/test_subprocess.py"
24225 (("/bin/sleep")
24226 (which "sleep")))))
24227 (add-before 'check 'change-home
24228 (lambda _
24229 ;; Tests require a writable home.
24230 (setenv "HOME" "/tmp")))
24231 (replace 'check
24232 (lambda* (#:key tests? #:allow-other-keys)
24233 (when tests?
24234 (invoke "pytest" "-vv"
24235 "-n" (number->string (parallel-job-count))
24236 "-k"
24237 (string-append
24238 ;; This test times out.
24239 "not test_ki_protection_works"
24240 ;; Assertion errors.
24241 " and not test_guest_mode_ki"
24242 " and not test_run_in_trio_thread_ki"
24243 " and not test_simple_cancel_scope_usage_doesnt_create_cyclic_garbage"
24244 " and not test_nursery_cancel_doesnt_create_cyclic_garbage"
24245 " and not test_cancel_scope_exit_doesnt_create_cyclic_garbage"
24246 " and not test_locals_destroyed_promptly_on_cancel"
24247 " and not test_ipython_exc_handler"
24248 " and not test_for_leaking_fds"
24249 ;; These try to raise KeyboardInterrupt which does not work
24250 ;; in the build environment.
24251 " and not test_ki_self"
24252 " and not test_ki_wakes_us_up"
24253 ;; Failure in name resolution.
24254 " and not test_getnameinfo"
24255 " and not test_SocketType_resolve"
24256 ;; OSError: protocol not found.
24257 " and not test_getprotobyname"
24258 ;; EOFError: Ran out of input.
24259 " and not test_static_tool_sees_all_symbols"))))))))
24260 (native-inputs
24261 (list python-astor
24262 python-ipython
24263 python-jedi
24264 python-pylint
24265 python-pyopenssl
24266 python-pytest
24267 python-pytest-xdist
24268 python-pytest-cov
24269 python-trustme))
24270 (propagated-inputs
24271 (list python-async-generator
24272 python-attrs
24273 python-idna
24274 python-outcome
24275 python-sniffio
24276 python-sortedcontainers))
24277 (home-page "https://github.com/python-trio/trio")
24278 (synopsis "Friendly Python library for async concurrency and I/O")
24279 (description
24280 "Trio strives to be a production-quality, async/await-native I/O library
24281for Python. Like all async libraries, its main purpose is to help you write
24282programs that do multiple things at the same time with parallelized I/O.")
24283 ;; Either license applies.
24284 (license (list license:expat license:asl2.0))))
24285
24286(define-public python-trio-typing
24287 (package
24288 (name "python-trio-typing")
24289 (version "0.5.0")
24290 (source
24291 (origin
24292 (method url-fetch)
24293 (uri (pypi-uri "trio-typing" version))
24294 (sha256
24295 (base32 "1yvlj4vf3wyvp16dw6vyfm4i2idm8lvdc3fvjhi6mhm62zv7s07j"))))
24296 (build-system python-build-system)
24297 (arguments
24298 `(#:phases
24299 (modify-phases %standard-phases
24300 (replace 'check
24301 (lambda _
24302 (invoke "pytest" "-vv"))))))
24303 (native-inputs
24304 (list python-attrs python-pytest))
24305 (propagated-inputs
24306 (list python-mypy python-mypy-extensions python-trio
24307 python-typing-extensions))
24308 (home-page "https://github.com/python-trio/trio-typing")
24309 (synopsis "Static type checking support for Trio and related projects")
24310 (description
24311 "This package provides:
24312
24313@itemize
24314@item PEP 561 typing stubs packages for the Trio project packages:
24315
24316@itemize
24317@item trio (@code{trio-stubs})
24318@item outcome (@code{outcome-stubs})
24319@item async_generator (@code{async_generator-stubs})
24320@end itemize
24321
24322@item A package @code{trio_typing} containing types that Trio programs often
24323want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
24324a mypy plugin that smooths over some limitations in the basic type hints.
24325@end itemize")
24326 ;; Either license applies.
24327 (license (list license:expat license:asl2.0))))
24328
24329(define-public python-trio-websocket
24330 (package
24331 (name "python-trio-websocket")
24332 (version "0.9.2")
24333 (source
24334 (origin
24335 (method git-fetch) ;no tests in pypi archive
24336 (uri (git-reference
24337 (url "https://github.com/HyperionGray/trio-websocket")
24338 (commit version)))
24339 (file-name (git-file-name name version))
24340 (sha256
24341 (base32 "1yk2ak991kbl30xg8ldpggack1lwkizd7s5cpr28ir34z8iyjnpi"))))
24342 (build-system python-build-system)
24343 (arguments
24344 `(#:phases
24345 (modify-phases %standard-phases
24346 (replace 'check
24347 (lambda* (#:key tests? #:allow-other-keys)
24348 (when tests? (invoke "pytest" "-vv")))))))
24349 (native-inputs (list python-pytest python-pytest-trio python-trustme))
24350 (propagated-inputs (list python-async-generator python-trio python-wsproto))
24351 (home-page "https://github.com/HyperionGray/trio-websocket")
24352 (synopsis "WebSocket library for Trio")
24353 (description "This library implements both server and client aspects of
24354the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
24355striving for safety, correctness, and ergonomics. It is based on the
24356@url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
24357@url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
24358the majority of the WebSocket protocol, including framing, codecs, and events.
24359This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
24360the Trio framework}.")
24361 (license license:expat)))
24362
24363(define-public python-humanize
24364 (package
24365 (name "python-humanize")
24366 (version "0.5.1")
24367 (source
24368 (origin
24369 (method url-fetch)
24370 (uri (pypi-uri "humanize" version))
24371 (sha256
24372 (base32
24373 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
24374 (arguments
24375 '(#:tests? #f)) ; tests not in pypi archive
24376 (build-system python-build-system)
24377 (home-page "https://github.com/jmoiron/humanize")
24378 (synopsis "Print numerical information in a human-readable form")
24379 (description "This package provides a Python module that displays numbers
24380and dates in \"human readable\" forms. For example, it would display
24381\"12345591313\" as \"12.3 billion\".")
24382 (license license:expat)))
24383
24384(define-public python-txaio
24385 (package
24386 (name "python-txaio")
24387 (version "18.8.1")
24388 (source
24389 (origin
24390 (method url-fetch)
24391 (uri (pypi-uri "txaio" version))
24392 (sha256
24393 (base32
24394 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
24395 (build-system python-build-system)
24396 (propagated-inputs
24397 (list python-twisted python-six))
24398 (home-page "https://github.com/crossbario/txaio")
24399 (synopsis "Compatibility layer between Python asyncio and Twisted")
24400 (description "Txaio provides a compatibility layer between the Python
24401@code{asyncio} module and @code{Twisted}.")
24402 (license license:expat)))
24403
24404(define-public python-toolshed
24405 (package
24406 (name "python-toolshed")
24407 (version "0.4.6")
24408 (source
24409 (origin
24410 (method url-fetch)
24411 (uri (pypi-uri "toolshed" version))
24412 (sha256
24413 (base32
24414 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
24415 (build-system python-build-system)
24416 (native-inputs
24417 (list python-nose))
24418 (home-page "https://github.com/brentp/toolshed/")
24419 (synopsis "Collection of modules and functions for working with data")
24420 (description "This is a collection of well-tested, simple modules and
24421functions that aim to reduce boilerplate when working with data.")
24422 (license license:bsd-2)))
24423
24424(define-public python-annoy
24425 (package
24426 (name "python-annoy")
24427 (version "1.15.1")
24428 (source
24429 (origin
24430 (method url-fetch)
24431 (uri (pypi-uri "annoy" version))
24432 (sha256
24433 (base32
24434 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
24435 (build-system python-build-system)
24436 (native-inputs
24437 (list python-nose))
24438 (home-page "https://github.com/spotify/annoy/")
24439 (synopsis "Approximate nearest neighbors library")
24440 (description
24441 "Annoy is a C++ library with Python bindings to search for points in
24442space that are close to a given query point. It also creates large read-only
24443file-based data structures that are @code{mmap}ped into memory so that many
24444processes may share the same data.")
24445 (license license:asl2.0)))
24446
24447(define-public python-croniter
24448 (package
24449 (name "python-croniter")
24450 (version "1.3.4")
24451 (source (origin
24452 (method url-fetch)
24453 (uri (pypi-uri "croniter" version))
24454 (sha256
24455 (base32
24456 "1whbm26m9kpn0klgr9dqiqpp83ki9nhpxifaq9afcjw32rckcs9i"))))
24457 (build-system python-build-system)
24458 (propagated-inputs (list python-dateutil))
24459 (home-page "https://github.com/kiorky/croniter")
24460 (synopsis "Iterate datetime objects with cron-like syntax")
24461 (description
24462 "@code{croniter} provides iteration for datetime object with cron-like
24463format.")
24464 (license license:expat)))
24465
24466(define-public python-crontab
24467 (package
24468 (name "python-crontab")
24469 (version "2.5.1")
24470 (source
24471 (origin
24472 (method url-fetch)
24473 (uri (pypi-uri name version))
24474 (sha256
24475 (base32 "0cccrqc10r8781ba81x8r2frs3pl2m4hkm599k5358ak0xr7xgjb"))))
24476 (build-system python-build-system)
24477 (arguments
24478 ;; Comptability tests fail so they are disabled.
24479 `(#:tests? #f))
24480 (inputs
24481 (list python-dateutil))
24482 (home-page "https://gitlab.com/doctormo/python-crontab/")
24483 (synopsis "Module for reading and writing crontab files")
24484 (description "This Python module can read, write crontab files, and
24485access the system cron automatically and simply using a direct API.")
24486 (license license:lgpl3+)))
24487
24488(define-public python-pylzma
24489 (package
24490 (name "python-pylzma")
24491 (version "0.5.0")
24492 (source
24493 (origin
24494 (method url-fetch)
24495 (uri (pypi-uri "pylzma" version))
24496 (sha256
24497 (base32
24498 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
24499 (build-system python-build-system)
24500 (home-page "https://www.joachim-bauch.de/projects/pylzma/")
24501 (synopsis "Python bindings for the LZMA library by Igor Pavlov")
24502 (description "This package provides Python bindings for the LZMA library
24503by Igor Pavlov.")
24504 (license license:lgpl2.1+)))
24505
24506(define-public python-ifaddr
24507 (package
24508 (name "python-ifaddr")
24509 (version "0.1.7")
24510 (source
24511 (origin
24512 (method url-fetch)
24513 (uri (pypi-uri "ifaddr" version))
24514 (sha256
24515 (base32
24516 "150sxdlicwrphmhnv03ykxplyd2jdrxz0mikgnivavgilrn8m7hz"))))
24517 (build-system python-build-system)
24518 (arguments
24519 `(#:phases
24520 (modify-phases %standard-phases
24521 (replace 'check
24522 (lambda _ (invoke "nosetests"))))))
24523 (native-inputs
24524 (list python-nose))
24525 (home-page "https://github.com/pydron/ifaddr")
24526 (synopsis "Network interface and IP address enumeration library")
24527 (description "This package provides a network interface and IP address
24528enumeration library in Python.")
24529 (license license:expat)))
24530
24531(define-public python-zeroconf
24532 (package
24533 (name "python-zeroconf")
24534 (version "0.38.1")
24535 (source
24536 (origin
24537 (method git-fetch) ; no tests in PyPI release
24538 (uri (git-reference
24539 (url "https://github.com/jstasiak/python-zeroconf")
24540 (commit version)))
24541 (file-name (git-file-name name version))
24542 (sha256
24543 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
24544 (build-system python-build-system)
24545 (arguments
24546 `(#:phases
24547 (modify-phases %standard-phases
24548 (replace 'check
24549 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
24550 (when tests?
24551 (add-installed-pythonpath inputs outputs)
24552 (invoke "python" "-m" "pytest" "-k"
24553 (string-append
24554 ;; Networking isn't available for these tests.
24555 "not test_integration_with_listener_ipv6"
24556 " and not test_launch_and_close_v4_v6"
24557 " and not test_launch_and_close_context_manager"
24558 " and not test_launch_and_close"
24559 " and not test_close_multiple_times"))))))))
24560 (native-inputs
24561 (list python-pytest))
24562 (propagated-inputs
24563 (list python-ifaddr))
24564 (home-page "https://github.com/jstasiak/python-zeroconf")
24565 (synopsis "Pure Python mDNS service discovery")
24566 (description "Pure Python multicast DNS (mDNS) service discovery library
24567(Bonjour/Avahi compatible).")
24568 (license license:lgpl2.1+)))
24569
24570(define-public python-bsddb3
24571 (package
24572 (name "python-bsddb3")
24573 (version "6.2.9")
24574 (source
24575 (origin
24576 (method url-fetch)
24577 (uri (pypi-uri "bsddb3" version))
24578 (sha256
24579 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
24580 (build-system python-build-system)
24581 (inputs
24582 (list bdb))
24583 (arguments
24584 '(#:phases
24585 (modify-phases %standard-phases
24586 (add-after 'unpack 'configure-locations
24587 (lambda* (#:key inputs #:allow-other-keys)
24588 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
24589 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
24590 #t))
24591 (replace 'check
24592 (lambda _
24593 (invoke "python3" "test3.py" "-v"))))))
24594 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
24595 (synopsis "Python bindings for Oracle Berkeley DB")
24596 (description
24597 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
24598C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
24599Transaction objects, and each of these is exposed as a Python type in the
24600bsddb3.db module. The database objects can use various access methods: btree,
24601hash, recno, and queue. Complete support of Berkeley DB distributed
24602transactions. Complete support for Berkeley DB Replication Manager.
24603Complete support for Berkeley DB Base Replication. Support for RPC.")
24604 (license license:bsd-3)))
24605
24606(define-public python-dbfread
24607 (package
24608 (name "python-dbfread")
24609 (version "2.0.7")
24610 (source (origin
24611 (method url-fetch)
24612 (uri (pypi-uri "dbfread" version))
24613 (sha256
24614 (base32
24615 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
24616 (build-system python-build-system)
24617 (native-inputs
24618 (list python-pytest))
24619 (home-page "https://dbfread.readthedocs.io")
24620 (synopsis "Read DBF Files with Python")
24621 (description
24622 "This library reads DBF files and returns the data as native Python data
24623types for further processing. It is primarily intended for batch jobs and
24624one-off scripts.")
24625 (license license:expat)))
24626
24627(define-public python-cached-property
24628 (package
24629 (name "python-cached-property")
24630 (version "1.5.2")
24631 (source
24632 (origin
24633 (method url-fetch)
24634 (uri (pypi-uri "cached-property" version))
24635 (sha256
24636 (base32
24637 "0c51i6yzg6dlq6zhk4c6nv33mg8gv05kkan36k9b5jzf71c7b9cz"))))
24638 (build-system python-build-system)
24639 (arguments
24640 `(#:phases
24641 (modify-phases %standard-phases
24642 ;; https://github.com/pydanny/cached-property/issues/131
24643 ;; recent versions of freezegun break one test
24644 (add-after 'unpack 'disable-broken-test
24645 (lambda _
24646 (substitute* "tests/test_cached_property.py"
24647 (("def test_threads_ttl_expiry\\(self\\)" m)
24648 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
24649 " " m)))
24650 #t)))))
24651 (native-inputs
24652 (list python-freezegun))
24653 (home-page
24654 "https://github.com/pydanny/cached-property")
24655 (synopsis
24656 "Decorator for caching properties in classes")
24657 (description
24658 "This package provides a decorator which makes caching
24659time-or-computationally-expensive properties quick and easy and works in Python
246602 or 3.")
24661 (license license:bsd-3)))
24662
24663(define-public python-folium
24664 (package
24665 (name "python-folium")
24666 (version "0.13.0")
24667 (source
24668 (origin
24669 ;; PyPI has a ".whl" file but not a proper source release.
24670 ;; Thus, fetch code from Git.
24671 (method git-fetch)
24672 (uri (git-reference
24673 (url "https://github.com/python-visualization/folium")
24674 (commit (string-append "v" version))))
24675 (file-name (git-file-name name version))
24676 (sha256
24677 (base32 "00adpdi1890zzzg7ffp04hmx59igdcdpyqa129vnmwqh54b5a006"))))
24678 (build-system python-build-system)
24679 (propagated-inputs
24680 (list python-branca python-jinja2 python-numpy python-requests))
24681 (native-inputs
24682 (list python-pytest))
24683 (home-page "https://github.com/python-visualization/folium")
24684 (synopsis "Make beautiful maps with Leaflet.js & Python")
24685 (description "@code{folium} makes it easy to visualize data that’s been
24686manipulated in Python on an interactive leaflet map. It enables both the
24687binding of data to a map for @code{choropleth} visualizations as well as
24688passing rich vector/raster/HTML visualizations as markers on the map.
24689
24690The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
24691Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
24692supports Image, Video, GeoJSON and TopoJSON overlays.")
24693 (license license:expat)))
24694
24695(define-public python-mercantile
24696 (package
24697 (name "python-mercantile")
24698 (version "1.2.1")
24699 (source
24700 (origin
24701 (method url-fetch)
24702 (uri (pypi-uri "mercantile" version))
24703 (sha256
24704 (base32 "0sxmndhzzrvss5irsgzfrk51k6jihwcb7661992mizdgbnqnsg7s"))))
24705 (build-system python-build-system)
24706 (propagated-inputs (list python-click))
24707 (native-inputs
24708 (list python-check-manifest python-hypothesis python-pytest))
24709 (home-page "https://github.com/mapbox/mercantile")
24710 (synopsis "Web mercator XYZ tile utilities")
24711 (description "The mercantile module provides @code{ul(xtile, ytile, zoom)}
24712and @code{bounds(xtile, ytile, zoom)} functions that respectively return the
24713upper left corner and bounding longitudes and latitudes for XYZ tiles, a
24714@code{xy(lng, lat)} function that returns spherical mercator x and y
24715coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
24716containing a given point, and quadkey conversion functions
24717@code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
24718translating between quadkey and tile coordinates.")
24719 (license license:bsd-3)))
24720
24721(define-public python-xyzservices
24722 (package
24723 (name "python-xyzservices")
24724 (version "2022.4.0")
24725 (source
24726 (origin
24727 (method url-fetch)
24728 (uri (pypi-uri "xyzservices" version))
24729 (sha256
24730 (base32 "1paxv4i0dws85md7csv7pf80jl3xh792mx8rxnsrk61ks3ivbsyg"))))
24731 (build-system python-build-system)
24732 (arguments
24733 '(#:phases
24734 (modify-phases %standard-phases
24735 (replace 'check
24736 (lambda* (#:key tests? #:allow-other-keys)
24737 (when tests?
24738 (invoke "pytest" "-vv")))))))
24739 (native-inputs
24740 (list python-pytest python-mercantile python-requests))
24741 (home-page "https://github.com/geopandas/xyzservices")
24742 (synopsis "Source of XYZ tiles providers")
24743 (description "@code{xyzservices} is a lightweight library providing a
24744repository of available XYZ services offering raster basemap tiles. The
24745repository is provided via Python API and as a compressed JSON file.")
24746 (license license:bsd-3)))
24747
24748(define-public jube
24749 (package
24750 ;; This is a command-line tool, so no "python-" prefix.
24751 (name "jube")
24752 (version "2.2.2")
24753 (source (origin
24754 (method url-fetch)
24755 (uri (string-append
24756 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
24757 version))
24758 (sha256
24759 (base32
24760 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
24761 (file-name (string-append "jube-" version ".tar.gz"))))
24762 (build-system python-build-system)
24763 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
24764 (synopsis "Benchmarking environment")
24765 (description
24766 "JUBE helps perform and analyze benchmarks in a systematic way. For each
24767benchmarked application, benchmark data is stored in a format that allows JUBE
24768to deduct the desired information. This data can be parsed by automatic pre-
24769and post-processing scripts that draw information and store it more densely
24770for manual interpretation.")
24771 (license license:gpl3+)))
24772
24773(define-public python-pyroutelib3
24774 (package
24775 (name "python-pyroutelib3")
24776 (version "1.3.post1")
24777 (source
24778 (origin
24779 (method url-fetch)
24780 (uri (pypi-uri "pyroutelib3" version))
24781 (sha256
24782 (base32
24783 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
24784 (build-system python-build-system)
24785 (propagated-inputs
24786 (list python-dateutil))
24787 (home-page "https://github.com/MKuranowski/pyroutelib3")
24788 (synopsis "Library for simple routing on OSM data")
24789 (description "Library for simple routing on OSM data")
24790 (license license:gpl3+)))
24791
24792(define-public python-bibtexparser
24793 (package
24794 (name "python-bibtexparser")
24795 (version "1.1.0")
24796 (source
24797 (origin
24798 (method url-fetch)
24799 (uri (pypi-uri "bibtexparser" version))
24800 (sha256
24801 (base32
24802 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
24803 (build-system python-build-system)
24804 (propagated-inputs
24805 (list python-pyparsing))
24806 (native-inputs
24807 (list python-future))
24808 (home-page "https://github.com/sciunto-org/python-bibtexparser")
24809 (synopsis "Python library to parse BibTeX files")
24810 (description "BibtexParser is a Python library to parse BibTeX files.")
24811 (license (list license:bsd-3 license:lgpl3))))
24812
24813(define-public python-distro
24814 (package
24815 (name "python-distro")
24816 (version "1.6.0")
24817 (source
24818 (origin
24819 (method url-fetch)
24820 (uri (pypi-uri "distro" version))
24821 (sha256
24822 (base32
24823 "09441261dd3c8b2gv15vhw1cryzg60lmgpkk07v6hpwwkyhfbxc3"))))
24824 (build-system python-build-system)
24825 (native-inputs
24826 (list python-pytest))
24827 (home-page "https://github.com/nir0s/distro")
24828 (synopsis
24829 "OS platform information API")
24830 (description
24831 "@code{distro} provides information about the OS distribution it runs on,
24832such as a reliable machine-readable ID, or version information.
24833
24834It is the recommended replacement for Python's original
24835`platform.linux_distribution` function (which will be removed in Python 3.8).
24836@code{distro} also provides a command-line interface to output the platform
24837information in various formats.")
24838 (license license:asl2.0)))
24839
24840(define-public python-cairosvg
24841 (package
24842 (name "python-cairosvg")
24843 (version "2.5.0")
24844 (source
24845 (origin
24846 (method url-fetch)
24847 (uri (pypi-uri "CairoSVG" version))
24848 (sha256
24849 (base32 "1ylsisha2cc4w0yydxwhy7idkfw1inl9fsipxsrm7vyby080vi9z"))))
24850 (build-system python-build-system)
24851 (arguments
24852 `(#:phases
24853 (modify-phases %standard-phases
24854 (replace 'check
24855 (lambda _ (invoke "pytest"))))))
24856 (propagated-inputs
24857 (list python-cairocffi python-cssselect2 python-defusedxml
24858 python-pillow python-tinycss2))
24859 (native-inputs
24860 (list python-pytest-flake8 python-pytest-isort python-pytest-runner))
24861 (home-page "https://cairosvg.org/")
24862 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
24863 (description "CairoSVG is a SVG converter based on Cairo. It can export
24864SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
24865SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
24866parsed, the result is drawn to a Cairo surface that can be exported to
24867qvarious formats: PDF, PostScript, PNG and even SVG.")
24868 (license license:lgpl3+)))
24869
24870(define-public python-pyphen
24871 (package
24872 (name "python-pyphen")
24873 (version "0.10.0")
24874 (source
24875 (origin
24876 (method url-fetch)
24877 (uri (pypi-uri "Pyphen" version))
24878 (sha256
24879 (base32 "0a1iwrgs4hzwzz60q4i1813kbzimhm0i4q8grh8vqkxhnkgj36vi"))))
24880 (build-system python-build-system)
24881 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
24882 ;; embedded set provided by upstream - like Debian does.
24883 (home-page "https://github.com/Kozea/Pyphen")
24884 (synopsis "Pure Python module to hyphenate text")
24885 (description "Pyphen is a pure Python module to hyphenate text using
24886existing Hunspell hyphenation dictionaries.")
24887 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
24888
24889(define-public python-intelhex
24890 (package
24891 (name "python-intelhex")
24892 (version "2.3.0")
24893 (source
24894 (origin
24895 (method url-fetch)
24896 (uri (pypi-uri "intelhex" version))
24897 (sha256
24898 (base32
24899 "14q04p6qs47ab9w55232ylrdn4wm9rswz36s6x999x0rlxhp6aw9"))))
24900 (build-system python-build-system)
24901 (home-page "https://pypi.org/project/IntelHex/")
24902 (synopsis "Python library for Intel HEX files manipulations")
24903 (description "The Intel HEX file format is widely used in microprocessors
24904and microcontrollers area (embedded systems etc.) as the de facto standard for
24905representation of code to be programmed into microelectronic devices. This
24906package provides an intelhex Python library to read, write, create from
24907scratch and manipulate data from Intel HEX file format. It also includes
24908several convenience Python scripts, including \"classic\" hex2bin and bin2hex
24909converters and more, those based on the library itself.")
24910 (license license:bsd-3)))
24911
24912(define-public python-interlap
24913 (package
24914 (name "python-interlap")
24915 (version "0.2.7")
24916 (source (origin
24917 (method url-fetch)
24918 (uri (pypi-uri "interlap" version))
24919 (sha256
24920 (base32
24921 "1jbfh00bkrf0i5psa6n75rlgmqp5389xixa9j29w8rxhah6g7r1i"))))
24922 (build-system python-build-system)
24923 (home-page "https://brentp.github.io/interlap")
24924 (synopsis "Fast, simple interval overlap testing")
24925 (description "InterLap does fast interval overlap testing with a simple Python data
24926structure.")
24927 (license license:expat)))
24928
24929(define-public python-pykwalify
24930 (package
24931 (name "python-pykwalify")
24932 (version "1.7.0")
24933 (source
24934 (origin
24935 (method url-fetch)
24936 (uri (pypi-uri "pykwalify" version))
24937 (sha256
24938 (base32
24939 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
24940 (build-system python-build-system)
24941 (arguments '(#:tests? #f)) ;missing dependencies
24942 (propagated-inputs
24943 (list python-dateutil python-docopt python-pyyaml))
24944 (home-page "https://github.com/grokzen/pykwalify")
24945 (synopsis
24946 "Python lib/cli for JSON/YAML schema validation")
24947 (description
24948 "This package provides a parser, schema validator, and data binding tool
24949for YAML and JSON.")
24950 (license license:expat)))
24951
24952(define-public python-dbusmock
24953 (package
24954 (name "python-dbusmock")
24955 (version "0.25.0")
24956 (source
24957 (origin
24958 (method url-fetch)
24959 (uri (pypi-uri "python-dbusmock" version))
24960 (sha256
24961 (base32
24962 "1nwl0gzzds2g1w1gfxfzlgrkb5hr1rrdyn619ml25c6b1rjyfk3g"))))
24963 (build-system python-build-system)
24964 (arguments
24965 `(#:imported-modules (,@%python-build-system-modules
24966 (guix build syscalls))
24967 #:modules ((guix build python-build-system)
24968 (guix build syscalls)
24969 (guix build utils)
24970 (ice-9 match))
24971 #:phases
24972 (modify-phases %standard-phases
24973 (add-after 'unpack 'patch-paths
24974 (lambda* (#:key inputs #:allow-other-keys)
24975 (substitute* "tests/test_code.py"
24976 (("/bin/bash") (which "bash")))
24977 (substitute* "dbusmock/testcase.py"
24978 (("'dbus-daemon'")
24979 (string-append "'" (assoc-ref inputs "dbus")
24980 "/bin/dbus-daemon'")))))
24981 (replace 'check
24982 (lambda* (#:key tests? #:allow-other-keys)
24983 (when tests?
24984 (match (primitive-fork)
24985 (0 ;child process
24986 (set-child-subreaper!)
24987 ;; Use tini so that signals are properly handled and
24988 ;; doubly-forked processes get reaped; otherwise,
24989 ;; python-dbusmock would waste time polling for the dbus
24990 ;; processes it spawns to be reaped, in vain.
24991 (execlp "tini" "--" "pytest" "-vv"))
24992 (pid
24993 (match (waitpid pid)
24994 ((_ . status)
24995 (unless (zero? status)
24996 (error "`pytest' exited with status"
24997 status))))))))))))
24998 (native-inputs
24999 (list dbus python-pytest tini which))
25000 (inputs
25001 (list dbus))
25002 (propagated-inputs
25003 (list python-dbus python-pygobject))
25004 (home-page "https://github.com/martinpitt/python-dbusmock")
25005 (synopsis "Python library for mock D-Bus objects")
25006 (description "python-dbusmock allows for the easy creation of mock objects on
25007D-Bus. This is useful for writing tests for software which talks to D-Bus
25008services such as upower, systemd, logind, gnome-session or others, and it is
25009hard (or impossible without root privileges) to set the state of the real
25010services to what you expect in your tests.")
25011 (license license:lgpl3+)))
25012
25013(define-public python-jsonplus
25014 (package
25015 (name "python-jsonplus")
25016 (version "0.8.0")
25017 (home-page "https://github.com/randomir/jsonplus")
25018 (source (origin
25019 (method url-fetch)
25020 (uri (pypi-uri "jsonplus" version))
25021 (sha256
25022 (base32
25023 "05yv3dw813zwas9snz124k2hki49y268b3mx0gj9w7v1nrjmglq1"))))
25024 (build-system python-build-system)
25025 ;; XXX: No tests on PyPI, and the repository has no tags.
25026 (arguments '(#:tests? #f))
25027 (propagated-inputs
25028 (list python-dateutil python-simplejson python-sortedcontainers))
25029 (synopsis "Serialize Python types to/from JSON")
25030 (description
25031 "This package provides functionality to serialize arbitrary data types
25032to and from JSON. Common data types are implemented and it is easy to
25033register custom encoders and decoders.")
25034 (license license:expat)))
25035
25036(define-public python-ujson
25037 (package
25038 (name "python-ujson")
25039 (version "4.0.2")
25040 (source
25041 (origin
25042 (method url-fetch)
25043 (uri (pypi-uri "ujson" version))
25044 (sha256
25045 (base32
25046 "0k9w0kypy7vlskzzp2vsjswaw8lbqdrplzkbflxki9vqwglsj5f6"))
25047 (modules '((guix build utils)))
25048 (snippet
25049 '(begin (delete-file-recursively "deps") #t))))
25050 (build-system python-build-system)
25051 (arguments
25052 `(#:phases
25053 (modify-phases %standard-phases
25054 (add-after 'unpack 'link-to-system-double-conversion
25055 (lambda* (#:key inputs #:allow-other-keys)
25056 (let ((d-c (assoc-ref inputs "double-conversion")))
25057 (substitute* "setup.py"
25058 (("./deps/double-conversion/double-conversion\"")
25059 (string-append d-c "/include/double-conversion\""))
25060 (("-lstdc++" stdc)
25061 (string-append "-L" d-c "/lib\","
25062 " \"-ldouble-conversion\","
25063 " \"" stdc)))
25064 #t)))
25065 (replace 'check
25066 (lambda* (#:key inputs outputs #:allow-other-keys)
25067 (add-installed-pythonpath inputs outputs)
25068 (invoke "pytest"))))))
25069 (native-inputs
25070 (list double-conversion python-setuptools-scm python-pytest))
25071 (home-page "https://github.com/ultrajson/ultrajson")
25072 (synopsis "Ultra fast JSON encoder and decoder for Python")
25073 (description
25074 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
25075bindings for Python 3.")
25076 (license license:bsd-3)))
25077
25078(define-public python-iocapture
25079 ;; The latest release is more than a year older than this commit.
25080 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
25081 (revision "1"))
25082 (package
25083 (name "python-iocapture")
25084 (version "0.1.2")
25085 (source
25086 (origin
25087 (method git-fetch)
25088 (uri (git-reference
25089 (url "https://github.com/oinume/iocapture")
25090 (commit commit)))
25091 (file-name (git-file-name name version))
25092 (sha256
25093 (base32
25094 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
25095 (build-system python-build-system)
25096 (arguments
25097 `(#:phases
25098 (modify-phases %standard-phases
25099 (delete 'check)
25100 (add-after 'install 'check
25101 (lambda* (#:key inputs outputs #:allow-other-keys)
25102 (add-installed-pythonpath inputs outputs)
25103 (invoke "py.test" "-v" "tests")
25104 #t)))))
25105 (propagated-inputs
25106 (list python-flexmock python-pytest python-pytest-cov python-six))
25107 (home-page "https://github.com/oinume/iocapture")
25108 (synopsis "Python capturing tool for stdout and stderr")
25109 (description
25110 "This package helps you to capture the standard out (stdout) and the
25111standard error channel (stderr) in your program.")
25112 (license license:expat))))
25113
25114(define-public python-anyio
25115 (package
25116 (name "python-anyio")
25117 (version "3.5.0")
25118 (source
25119 (origin
25120 (method url-fetch)
25121 (uri (pypi-uri "anyio" version))
25122 (sha256
25123 (base32
25124 "19m58805wir4i2s45dd5ynwlzb7ky1218isbir53gpqzzgigzbm0"))))
25125 (build-system python-build-system)
25126 (arguments
25127 `(#:phases
25128 (modify-phases %standard-phases
25129 (replace 'check
25130 (lambda* (#:key tests? #:allow-other-keys)
25131 (when tests?
25132 (invoke
25133 "pytest" "-vv" "-p" "no:asyncio"
25134 "-m" "not network"
25135 "-k"
25136 (string-append
25137 "not test_is_block_device"
25138
25139 ;; These fail because of network (or specifically IPv6
25140 ;; network) access (see:
25141 ;; https://github.com/agronholm/anyio/issues/417).
25142 " and not test_accept"
25143 " and not test_accept_after_close"
25144 " and not test_close_during_receive"
25145 " and not test_close_from_other_task"
25146 " and not test_concurrent_receive"
25147 " and not test_concurrent_send"
25148 " and not test_connect_tcp_with_tls"
25149 " and not test_connect_tcp_with_tls_cert_check_fail"
25150 " and not test_connection_refused"
25151 " and not test_extra_attributes"
25152 " and not test_getaddrinfo"
25153 " and not test_getnameinfo"
25154 " and not test_happy_eyeballs"
25155 " and not test_iterate"
25156 " and not test_receive_after_close"
25157 " and not test_receive_timeout"
25158 " and not test_reuse_port"
25159 " and not test_run_process"
25160 " and not test_send_after_close"
25161 " and not test_send_after_eof"
25162 " and not test_send_after_peer_closed"
25163 " and not test_send_eof"
25164 " and not test_send_large_buffer"
25165 " and not test_send_receive"
25166 " and not test_socket_options"
25167 " and not test_unretrieved_future_exception_server_crash"))))))))
25168 (propagated-inputs
25169 (list python-contextvars
25170 python-dataclasses
25171 python-idna
25172 python-sniffio
25173 python-typing-extensions))
25174 (native-inputs
25175 (list python-contextlib2
25176 python-coverage
25177 python-hypothesis
25178 python-mock
25179 python-pytest
25180 python-pytest-mock
25181 python-setuptools-scm
25182 python-trio
25183 python-trustme
25184 python-uvloop))
25185 (home-page "https://github.com/agronholm/anyio")
25186 (synopsis "Compatibility layer for multiple asynchronous event loops")
25187 (description
25188 "AnyIO is an asynchronous networking and concurrency library that works
25189on top of either asyncio or trio. It implements trio-like structured
25190concurrency on top of asyncio, and works in harmony with the native SC of trio
25191itself.")
25192 (license license:expat)))
25193
25194(define-public python-argh
25195 ;; There are 21 commits since the latest release containing important
25196 ;; improvements.
25197 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
25198 (revision "1"))
25199 (package
25200 (name "python-argh")
25201 (version (git-version "0.26.2" revision commit))
25202 (source
25203 (origin
25204 (method git-fetch)
25205 (uri (git-reference
25206 (url "https://github.com/neithere/argh")
25207 (commit commit)))
25208 (file-name (git-file-name name version))
25209 (sha256
25210 (base32
25211 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
25212 (build-system python-build-system)
25213 (arguments
25214 '(#:phases
25215 (modify-phases %standard-phases
25216 (add-after 'unpack 'patch-tests
25217 (lambda _
25218 ;; Fix test failures on Python 3.9.9+.
25219 ;; Taken via <https://github.com/neithere/argh/issues/148>.
25220 (substitute* "test/test_integration.py"
25221 (("assert run\\(p, '(bar|orig-name|nest bar)', exit=True\\)\
25222\\.startswith\\('invalid choice'\\)" _ name)
25223 (string-append "assert 'invalid choice' in \
25224run(p, '" name "', exit=True)")))))
25225 (replace 'check
25226 (lambda* (#:key tests? #:allow-other-keys)
25227 (when tests?
25228 (invoke "pytest" "-vv")))))))
25229 (propagated-inputs
25230 (list python-iocapture python-mock python-pytest python-pytest-cov
25231 python-pytest-xdist))
25232 (home-page "https://github.com/neithere/argh/")
25233 (synopsis "Argparse wrapper with natural syntax")
25234 (description
25235 "python-argh is a small library that provides several layers of
25236abstraction on top of @code{python-argparse}. The layers can be mixed. It is
25237always possible to declare a command with the highest possible (and least
25238flexible) layer and then tune the behaviour with any of the lower layers
25239including the native API of @code{python-argparse}.")
25240 (license license:lgpl3+))))
25241
25242(define-public python-ppft
25243 (package
25244 (name "python-ppft")
25245 (version "1.6.6.1")
25246 (source
25247 (origin
25248 (method url-fetch)
25249 (uri (pypi-uri "ppft" version))
25250 (sha256
25251 (base32
25252 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
25253 (build-system python-build-system)
25254 (arguments '(#:tests? #f)) ; there are none
25255 (propagated-inputs
25256 (list python-six))
25257 (home-page "https://pypi.org/project/ppft/")
25258 (synopsis "Fork of Parallel Python")
25259 (description
25260 "This package is a fork of Parallel Python. The Parallel Python
25261module (@code{pp}) provides an easy and efficient way to create
25262parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
25263computers and clusters. It features cross-platform portability and dynamic
25264load balancing.")
25265 (license license:bsd-3)))
25266
25267(define-public python-pox
25268 (package
25269 (name "python-pox")
25270 (version "0.2.7")
25271 (source
25272 (origin
25273 (method url-fetch)
25274 (uri (pypi-uri "pox" version))
25275 (sha256
25276 (base32
25277 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
25278 (build-system python-build-system)
25279 (arguments
25280 `(#:phases
25281 (modify-phases %standard-phases
25282 (replace 'check
25283 (lambda _
25284 (mkdir-p "/tmp/guix")
25285 (setenv "SHELL" "bash")
25286 (setenv "USERNAME" "guix")
25287 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
25288 (invoke "py.test" "-vv")
25289 #t)))))
25290 (native-inputs
25291 (list python-pytest which))
25292 (home-page "https://pypi.org/project/pox/")
25293 (synopsis "Python utilities for file system exploration and automated builds")
25294 (description
25295 "Pox provides a collection of utilities for navigating and manipulating
25296file systems. This module is designed to facilitate some of the low-level
25297operating system interactions that are useful when exploring a file system on a
25298remote host. Pox provides Python equivalents of several shell commands such
25299as @command{which} and @command{find}. These commands allow automated
25300discovery of what has been installed on an operating system, and where the
25301essential tools are located.")
25302 (license license:bsd-3)))
25303
25304(define-public python-pathos
25305 (package
25306 (name "python-pathos")
25307 (version "0.2.5")
25308 (source
25309 (origin
25310 (method url-fetch)
25311 (uri (pypi-uri "pathos" version))
25312 (sha256
25313 (base32
25314 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
25315 (build-system python-build-system)
25316 (arguments
25317 '(#:phases
25318 (modify-phases %standard-phases
25319 (replace 'check
25320 (lambda _
25321 (invoke "python" "./tests/__main__.py"))))))
25322 (propagated-inputs
25323 (list python-dill python-multiprocess python-pox python-ppft))
25324 (native-inputs
25325 (list python-pytest))
25326 (home-page "https://pypi.org/project/pathos/")
25327 (synopsis
25328 "Parallel graph management and execution in heterogeneous computing")
25329 (description
25330 "Python-pathos is a framework for heterogeneous computing. It provides a
25331consistent high-level interface for configuring and launching parallel
25332computations across heterogeneous resources. Python-pathos provides configurable
25333launchers for parallel and distributed computing, where each launcher contains
25334the syntactic logic to configure and launch jobs in an execution environment.")
25335 (license license:bsd-3)))
25336
25337(define-public python-flit
25338 (package
25339 (name "python-flit")
25340 (version "3.5.1")
25341 (source
25342 (origin
25343 (method url-fetch)
25344 (uri (pypi-uri "flit" version))
25345 (sha256
25346 (base32 "04152qj46sqbnlrj7ch9p7svjrrlpzbk0qr39g2yr0s4f5vp6frf"))))
25347 (build-system python-build-system)
25348 (arguments
25349 (list
25350 #:phases
25351 #~(modify-phases %standard-phases
25352 ;; XXX: PEP 517 manual build copied from python-isort.
25353 (replace 'build
25354 (lambda _
25355 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
25356 (replace 'check
25357 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
25358 (when tests?
25359 (setenv "HOME" "/tmp")
25360 (setenv "FLIT_NO_NETWORK" "1"))))
25361 (replace 'install
25362 (lambda _
25363 (let ((whl (car (find-files "dist" "\\.whl$"))))
25364 (invoke "pip" "--no-cache-dir" "--no-input"
25365 "install" "--no-deps" "--prefix" #$output whl)))))))
25366 (propagated-inputs
25367 (list python-pypa-build
25368 python-tomli-w
25369 python-flit-core
25370 python-docutils
25371 python-requests))
25372 (native-inputs
25373 (list python-responses
25374 python-pygments-github-lexers
25375 python-pytest
25376 python-pytest-cov
25377 python-sphinx
25378 python-sphinxcontrib-github-alt
25379 python-testpath))
25380 (home-page "https://flit.readthedocs.io/")
25381 (synopsis "Simple packaging tool for simple packages")
25382 (description "Flit is a simple way to put Python packages and modules on
25383PyPI. Flit packages a single importable module or package at a time, using
25384the import name as the name on PyPI. All subpackages and data files within a
25385package are included automatically.")
25386 (license license:bsd-3)))
25387
25388(define-public python-pathtools
25389 (package
25390 (name "python-pathtools")
25391 (version "0.1.2")
25392 (source
25393 (origin
25394 (method url-fetch)
25395 (uri (pypi-uri "pathtools" version))
25396 (sha256
25397 (base32
25398 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
25399 (build-system python-build-system)
25400 (home-page
25401 "https://github.com/gorakhargosh/pathtools")
25402 (synopsis "Path utilities for Python")
25403 (description "Pattern matching and various utilities for file systems
25404paths.")
25405 (license license:expat)))
25406
25407(define-public python-fastentrypoints
25408 (package
25409 (name "python-fastentrypoints")
25410 (version "0.12")
25411 (source
25412 (origin
25413 (method url-fetch)
25414 (uri (pypi-uri "fastentrypoints" version))
25415 (sha256
25416 (base32
25417 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
25418 (build-system python-build-system)
25419 (home-page
25420 "https://github.com/ninjaaron/fast-entry_points")
25421 (synopsis
25422 "Makes entry_points specified in setup.py load more quickly")
25423 (description
25424 "Using entry_points in your setup.py makes scripts that start really
25425slowly because it imports pkg_resources. This package allows such setup
25426scripts to load entry points more quickly.")
25427 (license license:bsd-3)))
25428
25429(define-public python-funcparserlib
25430 (package
25431 (name "python-funcparserlib")
25432 (version "1.0.0")
25433 (source
25434 (origin
25435 ;; Source tarball on PyPi lacks tests.
25436 (method git-fetch)
25437 (uri (git-reference
25438 (url "https://github.com/vlasovskikh/funcparserlib")
25439 (commit version)))
25440 (file-name (git-file-name name version))
25441 (sha256
25442 (base32 "00pswdys5c4hpqpvfcy5zqv30gyjvjvagi12811jizw57hxrm1cs"))))
25443 (build-system pyproject-build-system)
25444 (arguments
25445 '(#:phases
25446 (modify-phases %standard-phases
25447 (replace 'check
25448 (lambda* (#:key tests? #:allow-other-keys)
25449 (when tests?
25450 (invoke "python" "-m" "unittest" "discover" "-v")))))))
25451 ;; ModuleNotFoundError: No module named 'poetry'
25452 (native-inputs (list python-poetry-core))
25453 (home-page "https://github.com/vlasovskikh/funcparserlib")
25454 (synopsis
25455 "Recursive descent parsing library based on functional combinators")
25456 (description
25457 "This package is a recursive descent parsing library for Python based on
25458functional combinators. Parser combinators are just higher-order functions
25459that take parsers as their arguments and return them as result values.")
25460 (license license:expat)))
25461
25462(define-public python-speg
25463 (package
25464 (name "python-speg")
25465 (version "0.3")
25466 (source
25467 (origin
25468 (method url-fetch)
25469 (uri (pypi-uri "speg" version ".zip"))
25470 (sha256
25471 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
25472 (arguments
25473 `(#:tests? #f)) ;FIXME: tests fail, not sure why
25474 (native-inputs
25475 (list unzip))
25476 (build-system python-build-system)
25477 (home-page "https://github.com/avakar/speg")
25478 (synopsis "PEG-based parser interpreter with memoization")
25479 (description "This package is a PEG-based parser and interpreter with
25480memoization.")
25481 (license license:expat)))
25482
25483(define-public python-cson
25484 (package
25485 (name "python-cson")
25486 (version "0.8")
25487 (source
25488 (origin
25489 (method url-fetch)
25490 (uri (pypi-uri "cson" version))
25491 (sha256
25492 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
25493 (build-system python-build-system)
25494 (propagated-inputs
25495 (list python-speg))
25496 (home-page "https://github.com/avakar/pycson")
25497 (synopsis "Parser for Coffeescript Object Notation (CSON)")
25498 (description "This package is a parser for Coffeescript Object
25499Notation (CSON).")
25500 (license license:expat)))
25501
25502(define-public python-aionotify
25503 (package
25504 (name "python-aionotify")
25505 (version "0.2.0")
25506 (source
25507 (origin
25508 ;; Source tarball on PyPi lacks tests
25509 (method git-fetch)
25510 (uri (git-reference
25511 (url "https://github.com/rbarrois/aionotify")
25512 (commit (string-append "v" version))))
25513 (file-name (git-file-name name version))
25514 (sha256
25515 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))
25516 (patches (search-patches "python-aionotify-0.2.0-py3.8.patch"))))
25517 (build-system python-build-system)
25518 (home-page "https://github.com/rbarrois/aionotify")
25519 (synopsis "Asyncio-powered inotify library")
25520 (description
25521 "@code{aionotify} is a simple, asyncio-based inotify library.")
25522 (license license:bsd-3)))
25523
25524(define-public python-forbiddenfruit
25525 (package
25526 (name "python-forbiddenfruit")
25527 (version "0.1.3")
25528 (source
25529 (origin
25530 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
25531 (method git-fetch)
25532 (uri (git-reference
25533 (url "https://github.com/clarete/forbiddenfruit")
25534 (commit version)))
25535 (file-name (git-file-name name version))
25536 (sha256
25537 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
25538 (build-system python-build-system)
25539 (arguments
25540 '(#:phases
25541 (modify-phases %standard-phases
25542 (replace 'check
25543 (lambda _
25544 (invoke "make" "SKIP_DEPS=1"))))))
25545 (native-inputs
25546 (list python-nose python-coverage))
25547 (home-page "https://github.com/clarete/forbiddenfruit")
25548 (synopsis "Patch python built-in objects")
25549 (description "This project allows Python code to extend built-in types.")
25550 (license (list license:gpl3+ license:expat))))
25551
25552(define-public python-k5test
25553 (package
25554 (name "python-k5test")
25555 (version "0.9.2")
25556 (source
25557 (origin
25558 (method url-fetch)
25559 (uri (pypi-uri "k5test" version))
25560 (sha256
25561 (base32
25562 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
25563 (build-system python-build-system)
25564 (propagated-inputs
25565 (list python-six
25566 ;; `which`, `kadmin.local` binaries called inside library
25567 which mit-krb5))
25568 (native-inputs (list mit-krb5))
25569 (arguments
25570 '(#:phases
25571 (modify-phases %standard-phases
25572 (add-after 'unpack 'apply-upstream-fixes
25573 (lambda* _
25574 (substitute* "k5test/realm.py"
25575 ;; Upstream commit f6b302d94dbdce37a1b81cc3faeeac4dc637b0e9.
25576 (("'kadmin_local'") "'kadmin.local'")
25577 ;; Upstream commit 3aef84515cf3d1a171c66856c898d0a5cbbd03ea.
25578 (("\\.stop_daemon") "._stop_daemon")))))))
25579 (home-page "https://github.com/pythongssapi/k5test")
25580 (synopsis "Library for setting up self-contained Kerberos 5 environments")
25581 (description
25582 "@code{k5test} is a library for setting up self-contained Kerberos 5
25583environments, and running Python unit tests inside those environments. It is
25584based on the file of the same name found alongside the MIT Kerberos 5 unit
25585tests.")
25586 (license license:isc)))
25587
25588(define-public python-gssapi
25589 (package
25590 (name "python-gssapi")
25591 (version "1.6.12")
25592 (source
25593 (origin
25594 (method url-fetch)
25595 (uri (pypi-uri "gssapi" version))
25596 (sha256
25597 (base32
25598 "1j2idrbrbczykzlb56q1bn0ivc9c0rjjljpk4yz86xn3gxfkpv8n"))))
25599 (build-system python-build-system)
25600 (propagated-inputs
25601 (list python-decorator python-six))
25602 (inputs
25603 (list mit-krb5))
25604 ;; for tests
25605 (native-inputs
25606 (list python-parameterized python-k5test python-nose))
25607 (home-page "https://github.com/pythongssapi/python-gssapi")
25608 (synopsis "Python GSSAPI Wrapper")
25609 (description
25610 "Python-GSSAPI provides both low-level and high level wrappers around the
25611GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
25612also be usable with other GSSAPI mechanisms.")
25613 (license license:isc)))
25614
25615(define-public python-check-manifest
25616 (package
25617 (name "python-check-manifest")
25618 (version "0.48")
25619 (source
25620 (origin
25621 (method url-fetch)
25622 (uri (pypi-uri "check-manifest" version))
25623 (sha256
25624 (base32
25625 "0my6ammldi8mddrbq798qxbl90qr8nlk7gzliq3v7gp7mlfmymrv"))))
25626 (build-system pyproject-build-system)
25627 (arguments
25628 '(;; This test requires setting up a venv which does not work
25629 ;; properly in the build environment.
25630 #:test-flags '("-k" "not test_build_sdist_pep517_isolated")
25631 #:phases
25632 (modify-phases %standard-phases
25633 ;; Tests use git submodule commands over the file transport, which
25634 ;; has been disabled in git, see CVE-2022-39253. Enable these
25635 ;; commands to allow checks to succeed.
25636 (add-before 'check 'allow-git-submodule-add
25637 (lambda _
25638 (setenv "HOME" "/tmp")
25639 (invoke "git" "config" "--global"
25640 "protocol.file.allow" "always"))))))
25641 (native-inputs
25642 (list git-minimal/fixed python-pytest))
25643 (propagated-inputs
25644 (list python-pypa-build python-setuptools python-tomli))
25645 (home-page "https://github.com/mgedmin/check-manifest")
25646 (synopsis "Check MANIFEST.in in a Python source package for completeness")
25647 (description "Python package can include a MANIFEST.in file to help with
25648sending package files to the Python Package Index. This package checks that
25649file to ensure it completely and accurately describes your project.")
25650 (license license:expat)))
25651
25652(define-public python-android-stringslib
25653 (package
25654 (name "python-android-stringslib")
25655 (version "0.1.2")
25656 (source
25657 (origin
25658 (method git-fetch)
25659 (uri (git-reference
25660 (url "https://framagit.org/tyreunom/python-android-strings-lib")
25661 (commit (string-append "v" version))))
25662 (file-name (git-file-name name version))
25663 (sha256
25664 (base32
25665 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
25666 (build-system python-build-system)
25667 (arguments
25668 `(#:tests? #f))
25669 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
25670 (synopsis "Android strings.xml support")
25671 (description "Android Strings Lib provides support for android's strings.xml
25672files. These files are used to translate strings in android apps.")
25673 (license license:expat)))
25674
25675(define-public python-watchdog
25676 (package
25677 (name "python-watchdog")
25678 (version "2.1.6")
25679 (source
25680 (origin
25681 (method url-fetch)
25682 (uri (pypi-uri "watchdog" version))
25683 (sha256
25684 (base32 "1rx2nyl0cyj0v4ja795cl3gi26577c5wg48syr3byz3ndkgpavm3"))))
25685 (build-system python-build-system)
25686 (arguments
25687 `(#:phases
25688 (modify-phases %standard-phases
25689 (replace 'check
25690 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
25691 (when tests?
25692 (add-installed-pythonpath inputs outputs)
25693 (invoke "python" "-m" "pytest" "-k"
25694 ;; This test failed.
25695 "not test_kill_auto_restart")))))))
25696 (propagated-inputs
25697 (list python-pathtools python-pyyaml))
25698 (native-inputs
25699 (list python-pytest-cov python-pytest-timeout))
25700 (home-page "https://github.com/gorakhargosh/watchdog")
25701 (synopsis "File system events monitoring")
25702 (description "This package provides a way to monitor file system events
25703such as a file modification and trigger an action. This is similar to inotify,
25704but portable.")
25705 (license license:asl2.0)))
25706
25707(define-public python-watchgod
25708 (package
25709 (name "python-watchgod")
25710 (version "0.7")
25711 (source
25712 (origin
25713 ;; There are no tests in the PyPI tarball.
25714 (method git-fetch)
25715 (uri (git-reference
25716 (url "https://github.com/samuelcolvin/watchgod")
25717 (commit (string-append "v" version))))
25718 (file-name (git-file-name name version))
25719 (sha256
25720 (base32 "1w2xsidwp9n4giqhja0bzw7rwrh01db0kdxf2n54mv3dkx545jpq"))))
25721 (build-system python-build-system)
25722 (arguments
25723 `(#:phases
25724 (modify-phases %standard-phases
25725 (replace 'check
25726 (lambda* (#:key tests? #:allow-other-keys)
25727 (when tests?
25728 (invoke "pytest" "-vv"
25729 "-o" "asyncio_mode=auto")))))))
25730 (native-inputs
25731 (list python-coverage
25732 python-pygments
25733 python-pytest
25734 python-pytest-asyncio
25735 python-pytest-cov
25736 python-pytest-mock
25737 python-pytest-sugar
25738 python-pytest-toolbox))
25739 (home-page "https://github.com/samuelcolvin/watchgod")
25740 (synopsis "Simple, modern file watching and code reload in Python")
25741 (description
25742 "Simple, modern file watching and code reload in Python inspired by
25743@code{watchdog}. Among the differences are a unified approach for each
25744operating systems and an elegant approach to concurrency using threading.")
25745 (license license:expat)))
25746
25747(define-public python-wget
25748 (package
25749 (name "python-wget")
25750 (version "3.2")
25751 (source
25752 (origin
25753 (method url-fetch)
25754 (uri (pypi-uri "wget" version ".zip"))
25755 (sha256
25756 (base32
25757 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
25758 (build-system python-build-system)
25759 (native-inputs (list unzip))
25760 (home-page "https://bitbucket.org/techtonik/python-wget/")
25761 (synopsis "Pure Python download utility")
25762 (description "The python-wget library provides an API to download files
25763with features similar to the @command{wget} utility.")
25764 (license license:unlicense)))
25765
25766(define-public offlate
25767 (package
25768 (name "offlate")
25769 (version "0.6.1")
25770 (source
25771 (origin
25772 (method git-fetch)
25773 (uri (git-reference
25774 (url "https://framagit.org/tyreunom/offlate")
25775 (commit version)))
25776 (file-name (git-file-name name version))
25777 (sha256
25778 (base32
25779 "1sx5cv8pamyw1m089b6x8ykaxdkx26jk9cblhbzlf0m3ckz52jik"))))
25780 (build-system python-build-system)
25781 (arguments
25782 ;; No tests
25783 `(#:tests? #f
25784 #:phases
25785 (modify-phases %standard-phases
25786 (add-before 'build 'generate-fonts
25787 (lambda _
25788 (invoke "make" "fonts")))
25789 (add-before 'build 'generate-translations
25790 (lambda _
25791 (invoke "make" "update-langs"))))))
25792 (propagated-inputs
25793 (list python-android-stringslib
25794 python-dateutil
25795 python-gitlab
25796 python-lxml
25797 python-polib
25798 python-pycountry
25799 python-pyenchant
25800 python-pygit2
25801 python-pygithub
25802 python-pyqt
25803 python-requests
25804 python-ruamel.yaml
25805 python-translate-toolkit
25806 python-translation-finder
25807 python-watchdog))
25808 (native-inputs
25809 (list qttools-5 fontforge))
25810 (home-page "https://framagit.org/tyreunom/offlate")
25811 (synopsis "Offline translation interface for online translation tools")
25812 (description "Offlate offers a unified interface for different translation
25813file formats, as well as many different online translation platforms. You can
25814use it to get work from online platforms, specialized such as the Translation
25815Project, or not such a gitlab instance when your upstream doesn't use any
25816dedicated platform. The tool proposes a unified interface for any format and
25817an upload option to send your work back to the platform.")
25818 (license license:gpl3+)))
25819
25820(define-public python-titlecase
25821 (package
25822 (name "python-titlecase")
25823 (version "0.12.0")
25824 (source
25825 (origin
25826 (method url-fetch)
25827 (uri (pypi-uri "titlecase" version))
25828 (sha256
25829 (base32
25830 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
25831 (build-system python-build-system)
25832 (native-inputs
25833 (list python-nose))
25834 (home-page "https://github.com/ppannuto/python-titlecase")
25835 (synopsis "Capitalize strings similar to book titles")
25836 (description
25837 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
25838It capitalizes (predominantly English) strings in a way that is similar to
25839book titles, using the New York Times Manual of Style to leave certain words
25840lowercase.")
25841 (license license:expat)))
25842
25843(define-public python-pypng
25844 (package
25845 (name "python-pypng")
25846 (version "0.0.20")
25847 (source
25848 (origin
25849 (method url-fetch)
25850 (uri (pypi-uri "pypng" version))
25851 (sha256
25852 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
25853 (build-system python-build-system)
25854 (home-page "https://github.com/drj11/pypng")
25855 (synopsis "Pure Python PNG image encoder/decoder")
25856 (description
25857 "The PyPNG module implements support for PNG images. It reads and writes
25858PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
25859pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
25860LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
25861images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
25862A number of optional chunks can be specified (when writing) and
25863understood (when reading): tRNS, bKGD, gAMA.
25864
25865PyPNG is not a high level toolkit for image processing (like PIL) and does not
25866aim at being a replacement or competitor. Its strength lies in fine-grained
25867extensive support of PNG features. It can also read and write Netpbm PAM
25868files, with a focus on its use as an intermediate format for implementing
25869custom PNG processing.")
25870 (license license:expat)))
25871
25872(define-public python-fuzzywuzzy
25873 (package
25874 (name "python-fuzzywuzzy")
25875 (version "0.18.0")
25876 (source
25877 (origin
25878 (method url-fetch)
25879 (uri (pypi-uri "fuzzywuzzy" version))
25880 (sha256
25881 (base32
25882 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
25883 (build-system python-build-system)
25884 (native-inputs
25885 (list python-hypothesis python-pycodestyle python-pytest))
25886 (propagated-inputs
25887 (list python-levenshtein))
25888 (home-page "https://github.com/seatgeek/fuzzywuzzy")
25889 (synopsis "Fuzzy string matching in Python")
25890 (description "Approximate string matching using
25891@emph{Levenshtein Distance} to calculate the differences between
25892sequences.")
25893 (license license:gpl2)))
25894
25895(define-public python-block-tracing
25896 (package
25897 (name "python-block-tracing")
25898 (version "1.0.1")
25899 (source
25900 (origin
25901 (method url-fetch)
25902 (uri (pypi-uri "block_tracing" version))
25903 (sha256
25904 (base32
25905 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
25906 (build-system python-build-system)
25907 (arguments '(#:tests? #f)) ; no tests
25908 (home-page "https://github.com/rianhunter/block_tracing")
25909 (synopsis "Protect process memory")
25910 (description
25911 "@code{block_tracing} is a tiny Python library that can be used to
25912prevent debuggers and other applications from inspecting the memory within
25913your process.")
25914 (license license:expat)))
25915
25916(define-public python-gcovr
25917 (package
25918 (name "python-gcovr")
25919 (version "4.2")
25920 (source
25921 (origin
25922 (method url-fetch)
25923 (uri (pypi-uri "gcovr" version))
25924 (sha256
25925 (base32
25926 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
25927 (build-system python-build-system)
25928 (propagated-inputs
25929 (list python-lxml python-jinja2))
25930 (home-page "https://gcovr.com/")
25931 (synopsis "Utility for generating code coverage results")
25932 (description
25933 "Gcovr provides a utility for managing the use of the GNU gcov
25934utility and generating summarized code coverage results. It is inspired
25935by the Python coverage.py package, which provides a similar utility for
25936Python.")
25937 (license license:bsd-3)))
25938
25939(define-public python-owslib
25940 (package
25941 (name "python-owslib")
25942 (version "0.19.2")
25943 (source
25944 (origin
25945 (method url-fetch)
25946 (uri (pypi-uri "OWSLib" version))
25947 (sha256
25948 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
25949 (build-system python-build-system)
25950 (arguments
25951 ;; TODO: package dependencies required for tests.
25952 '(#:tests? #f
25953 #:phases (modify-phases %standard-phases
25954 (delete 'sanity-check))))
25955 (synopsis "Interface for Open Geospatial Consortium web service")
25956 (description
25957 "OWSLib is a Python package for client programming with Open Geospatial
25958Consortium (OGC) web service (hence OWS) interface standards, and their related
25959content models.")
25960 (home-page "https://geopython.github.io/OWSLib/")
25961 (license license:bsd-3)))
25962
25963(define-public python-docusign-esign
25964 (package
25965 (name "python-docusign-esign")
25966 (version "3.1.0")
25967 (source (origin
25968 (method url-fetch)
25969 (uri (pypi-uri "docusign_esign" version))
25970 (sha256
25971 (base32
25972 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
25973 (build-system python-build-system)
25974 ;; Testing requires undocumented setup changes, and so testing is disabled here.
25975 (arguments `(#:tests? #f))
25976 (propagated-inputs
25977 (list python-certifi
25978 python-six
25979 python-dateutil
25980 python-urllib3
25981 python-pyjwt
25982 python-cryptography
25983 python-nose))
25984 (synopsis "DocuSign Python Client")
25985 (description "The Official DocuSign Python Client Library used to interact
25986 with the eSign REST API. Send, sign, and approve documents using this client.")
25987 (home-page "https://www.docusign.com/devcenter")
25988 (license license:expat)))
25989
25990(define-public python-xattr
25991 (package
25992 (name "python-xattr")
25993 (version "0.9.9")
25994 (source
25995 (origin
25996 (method url-fetch)
25997 (uri (pypi-uri "xattr" version))
25998 (sha256
25999 (base32
26000 "0ipkfblyvp5hylahjkw9zss1ii9xnwjypr3b3ncv989szcg7xjq9"))))
26001 (build-system python-build-system)
26002 (propagated-inputs
26003 (list python-cffi))
26004 (home-page "https://github.com/xattr/xattr")
26005 (synopsis
26006 "Python wrapper for extended file system attributes")
26007 (description "This package provides a Python wrapper for using extended
26008file system attributes. Extended attributes extend the basic attributes of files
26009and directories in the file system. They are stored as name:data pairs
26010associated with file system objects (files, directories, symlinks, etc).")
26011 (license license:expat)))
26012
26013(define-public python-json-logger
26014 (package
26015 (name "python-json-logger")
26016 (version "0.1.11")
26017 (source
26018 (origin
26019 (method url-fetch)
26020 (uri (pypi-uri "python-json-logger" version))
26021 (sha256
26022 (base32
26023 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
26024 (build-system python-build-system)
26025 (home-page
26026 "https://github.com/madzak/python-json-logger")
26027 (synopsis "JSON log formatter in Python")
26028 (description "This library allows standard Python logging to output log data
26029as JSON objects. With JSON we can make our logs more readable by machines and
26030we can stop writing custom parsers for syslog-type records.")
26031 (license license:bsd-3)))
26032
26033(define-public python-daiquiri
26034 (package
26035 (name "python-daiquiri")
26036 (version "2.1.1")
26037 (source
26038 (origin
26039 (method url-fetch)
26040 (uri (pypi-uri "daiquiri" version))
26041 (sha256
26042 (base32
26043 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
26044 (build-system python-build-system)
26045 (propagated-inputs
26046 (list python-json-logger))
26047 (native-inputs
26048 (list python-mock python-pytest python-setuptools-scm python-six))
26049 (home-page "https://github.com/jd/daiquiri")
26050 (synopsis
26051 "Library to configure Python logging easily")
26052 (description "The daiquiri library provides an easy way to configure
26053logging in Python. It also provides some custom formatters and handlers.")
26054 (license license:asl2.0)))
26055
26056(define-public python-pifpaf
26057 (package
26058 (name "python-pifpaf")
26059 (version "3.1.5")
26060 (source
26061 (origin
26062 (method url-fetch)
26063 (uri (pypi-uri "pifpaf" version))
26064 (sha256
26065 (base32
26066 "19bdmxldc2m570isl7hbqgbb20si4sin7pi5fw8sv9py8dyv2s4n"))))
26067 (build-system python-build-system)
26068 (arguments
26069 '(#:phases
26070 (modify-phases %standard-phases
26071 (replace 'check
26072 (lambda _
26073 (invoke "python" "setup.py" "testr" "--slowest"
26074 "--testr-args=until-failure"))))))
26075 (propagated-inputs
26076 (list python-click
26077 python-daiquiri
26078 python-fixtures
26079 python-jinja2
26080 python-pbr
26081 python-psutil
26082 python-xattr))
26083 (native-inputs
26084 (list python-mock python-os-testr python-requests
26085 python-testrepository python-testtools))
26086 (home-page "https://github.com/jd/pifpaf")
26087 (synopsis "Tools and fixtures to manage daemons for testing in Python")
26088 (description "Pifpaf is a suite of fixtures and a command-line tool that
26089starts and stops daemons for a quick throw-away usage. This is typically
26090useful when needing these daemons to run integration testing. It originally
26091evolved from its precursor @code{overtest}.")
26092 (license license:asl2.0)))
26093
26094(define-public python-pytest-check-links
26095 (package
26096 (name "python-pytest-check-links")
26097 (version "0.3.0")
26098 (source
26099 (origin
26100 (method url-fetch)
26101 ;; URI uses underscores
26102 (uri (pypi-uri "pytest_check_links" version))
26103 (sha256
26104 (base32
26105 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
26106 (build-system python-build-system)
26107 (propagated-inputs
26108 (list python-docutils
26109 python-html5lib
26110 python-nbconvert
26111 python-nbformat
26112 python-pytest
26113 python-six))
26114 (native-inputs
26115 (list python-pbr-minimal))
26116 (home-page "https://github.com/minrk/pytest-check-links")
26117 (synopsis "Check links in files")
26118 (description "This package provides a pytest plugin that checks URLs for
26119HTML-containing files.")
26120 (license license:bsd-3)))
26121
26122(define-public python-json5
26123 (package
26124 (name "python-json5")
26125 (version "0.8.5")
26126 (source
26127 (origin
26128 ;; sample.json5 is missing from PyPi source tarball
26129 (method git-fetch)
26130 (uri (git-reference
26131 (url "https://github.com/dpranke/pyjson5")
26132 (commit (string-append "v" version))))
26133 (file-name (git-file-name name version))
26134 (sha256
26135 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
26136 (build-system python-build-system)
26137 (home-page "https://github.com/dpranke/pyjson5")
26138 (synopsis
26139 "Python implementation of the JSON5 data format")
26140 (description
26141 "JSON5 extends the JSON data interchange format to make it slightly more
26142usable as a configuration language. This Python package implements parsing and
26143dumping of JSON5 data structures.")
26144 (license license:asl2.0)))
26145
26146(define-public python-freetype-py
26147 (package
26148 (name "python-freetype-py")
26149 (version "2.3.0")
26150 (source
26151 (origin
26152 (method url-fetch)
26153 (uri (pypi-uri "freetype-py" version ".zip"))
26154 (sha256
26155 (base32 "1l55wzy21jmdayjna29ahzxrf2fp68580978rs6kap1a4zilrdpr"))))
26156 (build-system python-build-system)
26157 (native-inputs
26158 (list python-setuptools-scm
26159 unzip))
26160 (inputs (list freetype))
26161 (arguments
26162 `(#:phases
26163 ;; Note: the pypi archive does not contain tests, but running the check
26164 ;; phase will at least test whether the module loads correctly.
26165 (modify-phases %standard-phases
26166 (add-before 'build 'embed-library-reference
26167 (lambda* (#:key inputs #:allow-other-keys)
26168 (substitute* "freetype/raw.py"
26169 (("^(filename = ).*" _ >)
26170 (string-append > "\"" (search-input-file inputs "/lib/libfreetype.so")
26171 "\"\n"))))))))
26172 (home-page "https://github.com/rougier/freetype-py")
26173 (synopsis "Freetype python bindings")
26174 (description "Freetype Python provides bindings for the FreeType
26175library. Only the high-level API is bound.")
26176 (license license:bsd-3)))
26177
26178(define-public python-frozendict
26179 (package
26180 (name "python-frozendict")
26181 (version "2.3.4")
26182 (source
26183 (origin
26184 (method url-fetch)
26185 (uri (pypi-uri "frozendict" version))
26186 (sha256
26187 (base32 "0y3zn57i1q5192f7l4w2z2zsy3rrx50g563msaq954r58s1v3d0m"))))
26188 (build-system python-build-system)
26189 (home-page "https://github.com/Marco-Sulla/python-frozendict")
26190 (synopsis "Simple immutable mapping for Python")
26191 (description
26192 "@dfn{frozendict} is an immutable wrapper around dictionaries that
26193implements the complete mapping interface. It can be used as a drop-in
26194replacement for dictionaries where immutability is desired.")
26195 (license license:expat)))
26196
26197(define-public python-unpaddedbase64
26198 (package
26199 (name "python-unpaddedbase64")
26200 (version "2.1.0")
26201 (source
26202 (origin
26203 (method url-fetch)
26204 (uri (pypi-uri "unpaddedbase64" version))
26205 (sha256
26206 (base32 "01ghlmw63fgslwj8j74vkpf1kqvr7a4agm6nyn89vqwx106ccwvj"))))
26207 (build-system python-build-system)
26208 (arguments
26209 `(#:phases
26210 (modify-phases %standard-phases
26211 (replace 'check
26212 (lambda* (#:key inputs tests? #:allow-other-keys)
26213 (when tests?
26214 (copy-recursively (string-append
26215 (assoc-ref inputs "tests") "/tests")
26216 "tests")
26217 (invoke "python" "-m" "pytest" "-vv")))))))
26218 (native-inputs
26219 `(("python-pytest" ,python-pytest)
26220 ("tests"
26221 ;; The release on pypi comes without tests. We can't build from this
26222 ;; checkout, though, because installation requires an invocation of
26223 ;; poetry.
26224 ,(origin
26225 (method git-fetch)
26226 (uri (git-reference
26227 (url "https://github.com/matrix-org/python-unpaddedbase64")
26228 (commit (string-append "v" version))))
26229 (file-name (git-file-name name version))
26230 (sha256
26231 (base32
26232 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))))
26233 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
26234 (synopsis "Encode and decode Base64 without “=” padding")
26235 (description
26236 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
26237using “=” characters. However this conveys no benefit so many protocols
26238choose to use Base64 without the “=” padding.")
26239 (license license:asl2.0)))
26240
26241(define-public python-py-cpuinfo
26242 ;; This is the first commit where riscv64-linux support is available.
26243 ;; We can move back to pypi releases with the next release.
26244 (let ((commit "4d6987e5c30f2ebacb20781892c01329042cce60")
26245 (revision "1"))
26246 (package
26247 (name "python-py-cpuinfo")
26248 (version (git-version "8.0.0" revision commit))
26249 (source
26250 (origin
26251 (method git-fetch)
26252 (uri (git-reference
26253 (url "https://github.com/workhorsy/py-cpuinfo")
26254 (commit commit)))
26255 (file-name (git-file-name name version))
26256 (sha256
26257 (base32
26258 "0h5wi1bfcqqr1x3j1pa7dmkx7siprsyksbsy80fl2sdrrgpji0b0"))))
26259 (build-system python-build-system)
26260 (home-page "https://github.com/workhorsy/py-cpuinfo")
26261 (synopsis "Get CPU info with Python")
26262 (description
26263 "This Python module returns the CPU info by using the best sources of
26264information for your operating system.")
26265 (license license:expat))))
26266
26267(define-public python-canonicaljson
26268 (package
26269 (name "python-canonicaljson")
26270 (version "1.6.3")
26271 (source
26272 (origin
26273 (method url-fetch)
26274 (uri (pypi-uri "canonicaljson" version))
26275 (sha256
26276 (base32 "0j5lq191jkd483q6xzc16c9fahxf15lrv03mvah9ka3lq85pcnfa"))))
26277 (build-system python-build-system)
26278 (arguments
26279 (list
26280 #:phases
26281 #~(modify-phases %standard-phases
26282 (add-after 'unpack 'loosen-requirements
26283 (lambda _
26284 ;; Permit newer versions of setuptools_scm
26285 (substitute* "pyproject.toml"
26286 ((">= 2.0.0, <3") ">= 2.0.0"))))
26287 (replace 'build
26288 (lambda _
26289 ;; ZIP does not support timestamps before 1980.
26290 (setenv "SOURCE_DATE_EPOCH" "315532800")
26291 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
26292 (replace 'check
26293 (lambda* (#:key tests? #:allow-other-keys)
26294 (when tests?
26295 (invoke "pytest"))))
26296 (replace 'install
26297 (lambda _
26298 (let ((whl (car (find-files "dist" "\\.whl$"))))
26299 (invoke "pip" "--no-cache-dir" "--no-input"
26300 "install" "--no-deps" "--prefix" #$output whl)))))))
26301 (native-inputs
26302 (list python-pypa-build python-pytest python-setuptools python-setuptools-scm))
26303 (propagated-inputs
26304 (list python-six python-frozendict python-simplejson))
26305 (home-page "https://github.com/matrix-org/python-canonicaljson")
26306 (synopsis "Canonical JSON")
26307 (description
26308 "Deterministically encode JSON.
26309
26310@itemize
26311@item Encodes objects and arrays as RFC 7159 JSON.
26312@item Sorts object keys so that you get the same result each time.
26313@item Has no insignificant whitespace to make the output as small as possible.
26314@item Escapes only the characters that must be escaped, U+0000 to
26315 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
26316@item Uses the shortest escape sequence for each escaped character.
26317@item Encodes the JSON as UTF-8.
26318@item Can encode frozendict immutable dictionaries.
26319@end itemize")
26320 (license license:asl2.0)))
26321
26322(define-public python-signedjson
26323 (package
26324 (name "python-signedjson")
26325 (version "1.1.1")
26326 (source
26327 (origin
26328 (method url-fetch)
26329 (uri (pypi-uri "signedjson" version))
26330 (sha256
26331 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
26332 (build-system python-build-system)
26333 (propagated-inputs
26334 (list python-canonicaljson python-importlib-metadata python-pynacl
26335 python-typing-extensions python-unpaddedbase64))
26336 (native-inputs
26337 (list python-setuptools-scm))
26338 (home-page "https://github.com/matrix-org/python-signedjson")
26339 (synopsis "Sign JSON objects with ED25519 signatures")
26340 (description
26341 "Sign JSON objects with ED25519 signatures.
26342
26343@itemize
26344@item More than one entity can sign the same object.
26345@item Each entity can sign the object with more than one key making it easier to
26346rotate keys
26347@item ED25519 can be replaced with a different algorithm.
26348@item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
26349key.
26350@end itemize")
26351 (license license:asl2.0)))
26352
26353(define-public python-daemonize
26354 (package
26355 (name "python-daemonize")
26356 (version "2.5.0")
26357 (source
26358 (origin
26359 (method url-fetch)
26360 (uri (pypi-uri "daemonize" version))
26361 (sha256
26362 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
26363 (build-system python-build-system)
26364 (home-page "https://github.com/thesharp/daemonize")
26365 (synopsis "Library for writing system daemons in Python")
26366 (description "Daemonize is a library for writing system daemons in Python.")
26367 (license license:expat)))
26368
26369(define-public python-pymacaroons
26370 (package
26371 (name "python-pymacaroons")
26372 (version "0.13.0")
26373 (source
26374 (origin
26375 (method url-fetch)
26376 (uri (pypi-uri "pymacaroons" version))
26377 (sha256
26378 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
26379 (build-system python-build-system)
26380 (propagated-inputs
26381 (list python-six python-pynacl))
26382 (home-page "https://github.com/ecordell/pymacaroons")
26383 (synopsis "Python Macaroon Library")
26384 (description
26385 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
26386tokens, macaroons embed caveats that define specific authorization
26387requirements for the target service, the service that issued the root macaroon
26388and which is capable of verifying the integrity of macaroons it receives.
26389
26390Macaroons allow for delegation and attenuation of authorization. They are
26391simple and fast to verify, and decouple authorization policy from the
26392enforcement of that policy.")
26393 (license license:expat)))
26394
26395(define-public python-ldap3
26396 (package
26397 (name "python-ldap3")
26398 (version "2.7")
26399 (home-page "https://github.com/cannatag/ldap3")
26400 (source
26401 (origin
26402 (method git-fetch)
26403 (uri (git-reference (url home-page)
26404 (commit (string-append "v" version))))
26405 (file-name (git-file-name name version))
26406 (sha256
26407 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
26408 (build-system python-build-system)
26409 (arguments
26410 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
26411 #:phases (modify-phases %standard-phases
26412 (replace 'check
26413 (lambda* (#:key tests? #:allow-other-keys)
26414 (when tests?
26415 (invoke "nosetests" "-s" "test"))
26416 #t)))))
26417 (native-inputs
26418 (list python-nose))
26419 (propagated-inputs
26420 (list python-gssapi python-pyasn1))
26421 (synopsis "Python LDAP client")
26422 (description
26423 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
26424library.")
26425 (license license:lgpl3+)))
26426
26427(define-public python-boltons
26428 (package
26429 (name "python-boltons")
26430 (version "20.0.0")
26431 (source
26432 (origin
26433 (method url-fetch)
26434 (uri (pypi-uri "boltons" version))
26435 (sha256
26436 (base32
26437 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
26438 (build-system python-build-system)
26439 (home-page "https://github.com/mahmoud/boltons")
26440 (synopsis "Extensions to the Python standard library")
26441 (description
26442 "Boltons is a set of over 230 pure-Python utilities in the same spirit
26443as — and yet conspicuously missing from — the standard library, including:
26444
26445@itemize
26446@item Atomic file saving, bolted on with fileutils
26447@item A highly-optimized OrderedMultiDict, in dictutils
26448@item Two types of PriorityQueue, in queueutils
26449@item Chunked and windowed iteration, in iterutils
26450@item Recursive data structure iteration and merging, with iterutils.remap
26451@item Exponential backoff functionality, including jitter, through
26452iterutils.backoff
26453@item A full-featured TracebackInfo type, for representing stack traces, in
26454tbutils
26455@end itemize")
26456 (license license:bsd-3)))
26457
26458(define-public python-eliot
26459 (package
26460 (name "python-eliot")
26461 (version "1.13.0")
26462 (source
26463 (origin
26464 (method url-fetch)
26465 (uri (pypi-uri "eliot" version))
26466 (sha256
26467 (base32 "1xzzhsjrrw430dc84vamf683bwp9i0nr86xf2iav6yla615ijq2p"))))
26468 (build-system python-build-system)
26469 (arguments
26470 `(#:phases
26471 (modify-phases %standard-phases
26472 (add-after 'unpack 'remove-journald-support
26473 (lambda _
26474 (for-each delete-file
26475 '("eliot/tests/test_journald.py"
26476 "eliot/journald.py"))
26477 #t))
26478 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
26479 ;; remove command-line tool's tests. TODO eliot-prettyprint should
26480 ;; be installed and these tests should pass.
26481 (lambda _
26482 (delete-file "eliot/tests/test_prettyprint.py")
26483 #t))
26484 (add-after 'remove-eliot-prettyprint-tests 'remove-failing-tests
26485 (lambda _
26486 ;; These tests started to fail after updating python-pandas to
26487 ;; 1.3.3 and python-dask to 2021.9.1.
26488 (substitute* "eliot/tests/test_validation.py"
26489 (("test_omitLoggerFromActionType")
26490 "_test_omitLoggerFromActionType")
26491 (("test_logCallsDefaultLoggerWrite")
26492 "_test_logCallsDefaultLoggerWrite"))
26493 #t)))))
26494 (propagated-inputs
26495 (list python-boltons python-pyrsistent python-six
26496 python-zope-interface))
26497 (native-inputs
26498 (list python-black
26499 python-coverage
26500 python-dask
26501 python-flake8
26502 python-hypothesis
26503 python-pytest
26504 python-setuptools
26505 python-sphinx
26506 python-sphinx-rtd-theme
26507 python-testtools
26508 python-twine
26509 python-twisted))
26510 (home-page "https://github.com/itamarst/eliot/")
26511 (synopsis "Eliot: the logging system that tells you why it happened")
26512 (description
26513 "@dfn{eliot} is a Python logging system that outputs causal chains of
26514actions: actions can spawn other actions, and eventually they either succeed
26515or fail. The resulting logs tell you the story of what your software did: what
26516happened, and what caused it.")
26517 (license license:asl2.0)))
26518
26519(define-public python-pem
26520 (package
26521 (name "python-pem")
26522 (version "20.1.0")
26523 (source
26524 (origin
26525 (method url-fetch)
26526 (uri (pypi-uri "pem" version))
26527 (sha256
26528 (base32
26529 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
26530 (build-system python-build-system)
26531 (native-inputs
26532 (list python-certifi
26533 python-coverage
26534 python-pretend
26535 python-pyopenssl
26536 python-pytest
26537 python-sphinx
26538 python-twisted))
26539 (home-page "https://pem.readthedocs.io/")
26540 (synopsis "Easy PEM file parsing in Python")
26541 (description
26542 "This package provides a Python module for parsing and splitting PEM files.")
26543 (license license:expat)))
26544
26545(define-public python-txsni
26546 ;; We need a few commits on top of 0.1.9 for compatibility with newer
26547 ;; Python and OpenSSL.
26548 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
26549 (revision "0"))
26550 (package
26551 (name "python-txsni")
26552 (version (git-version "0.1.9" revision commit))
26553 (home-page "https://github.com/glyph/txsni")
26554 (source
26555 (origin
26556 (method git-fetch)
26557 (uri (git-reference (url home-page) (commit commit)))
26558 (file-name (git-file-name name version))
26559 (sha256
26560 (base32
26561 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
26562 (build-system python-build-system)
26563 (propagated-inputs
26564 (list python-pyopenssl python-service-identity python-twisted))
26565 (synopsis "Run TLS servers with Twisted")
26566 (description
26567 "This package provides an easy-to-use SNI endpoint for use
26568with the Twisted web framework.")
26569 (license license:expat))))
26570
26571(define-public python-txacme
26572 (package
26573 (name "python-txacme")
26574 (version "0.9.2")
26575 (source
26576 (origin
26577 (method url-fetch)
26578 (uri (pypi-uri "txacme" version))
26579 (sha256
26580 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
26581 (build-system python-build-system)
26582 (propagated-inputs
26583 (list python-acme
26584 python-attrs
26585 python-eliot
26586 python-josepy
26587 python-pem
26588 python-treq
26589 python-twisted
26590 python-txsni))
26591 (native-inputs
26592 (list python-fixtures
26593 python-hypothesis
26594 python-mock
26595 python-service-identity
26596 python-testrepository
26597 python-testscenarios
26598 python-testtools))
26599 (home-page "https://github.com/twisted/txacme")
26600 (synopsis "Twisted implexmentation of the ACME protocol")
26601 (description
26602 "ACME is Automatic Certificate Management Environment, a protocol that
26603allows clients and certificate authorities to automate verification and
26604certificate issuance. The ACME protocol is used by the free Let's Encrypt
26605Certificate Authority.
26606
26607txacme is an implementation of the protocol for Twisted, the event-driven
26608networking engine for Python.")
26609 (license license:expat)))
26610
26611(define-public python-pysaml2
26612 (package
26613 (name "python-pysaml2")
26614 (version "6.5.1")
26615 (source
26616 (origin
26617 (method url-fetch)
26618 (uri (pypi-uri "pysaml2" version))
26619 (sha256
26620 (base32
26621 "1xk2x0slz1f8cqv7vn77qx99xfd1mshhswiwrljk9m72w2m9iivd"))))
26622 (build-system python-build-system)
26623 (propagated-inputs
26624 (list python-cryptography
26625 python-dateutil
26626 python-defusedxml
26627 python-importlib-resources
26628 python-pyopenssl
26629 python-pytz
26630 python-requests
26631 python-six
26632 python-xmlschema))
26633 (home-page "https://idpy.org")
26634 (synopsis "Python implementation of SAML Version 2 Standard")
26635 (description
26636 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
26637It contains all necessary pieces for building a SAML2 service provider or
26638an identity provider. The distribution contains examples of both.
26639
26640This package was originally written to work in a WSGI environment, but
26641there are extensions that allow you to use it with other frameworks.")
26642 (license license:asl2.0)))
26643
26644(define-public python-click-plugins
26645 (package
26646 (name "python-click-plugins")
26647 (version "1.1.1")
26648 (source
26649 (origin
26650 (method url-fetch)
26651 (uri (pypi-uri "click-plugins" version))
26652 (sha256
26653 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
26654 (build-system python-build-system)
26655 (native-inputs
26656 (list python-pytest))
26657 (propagated-inputs
26658 (list python-click))
26659 (synopsis "Extension for Click to register external CLI commands")
26660 (description "This package provides n extension module for Click to
26661register external CLI commands via setuptools entry-points.")
26662 (home-page "https://github.com/click-contrib/click-plugins")
26663 (license license:bsd-3)))
26664
26665(define-public python-diceware
26666 (package
26667 (name "python-diceware")
26668 (version "0.9.6")
26669 (source
26670 (origin
26671 (method url-fetch)
26672 (uri (pypi-uri "diceware" version))
26673 (sha256
26674 (base32
26675 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
26676 (build-system python-build-system)
26677 (native-inputs
26678 (list python-coverage python-pytest python-pytest-runner))
26679 (home-page "https://github.com/ulif/diceware/")
26680 (synopsis "Generates memorable passphrases")
26681 (description "This package generates passphrases by concatenating words
26682randomly picked from wordlists. It supports several sources of
26683randomness (including real life dice) and different wordlists (including
26684cryptographically signed ones).")
26685 (license license:gpl3+)))
26686
26687(define-public python-dictdiffer
26688 (package
26689 (name "python-dictdiffer")
26690 (version "0.9.0")
26691 (source (origin
26692 (method url-fetch)
26693 (uri (pypi-uri "dictdiffer" version))
26694 (sha256
26695 (base32
26696 "0y3mk74qm2q9hsm37892i1wzn8bbdrvbs4nmnvqwq4z6pxgwzfhp"))))
26697 (build-system python-build-system)
26698 (arguments
26699 ;; XXX: The PyPI tarball lacks tests and the git repository
26700 ;; fails to determine version.
26701 '(#:tests? #f))
26702 (native-inputs
26703 (list python-pytest-runner python-setuptools-scm))
26704 (home-page "https://github.com/inveniosoftware/dictdiffer")
26705 (synopsis "Diff and patch Python dictionary objects")
26706 (description
26707 "Dictdiffer is a Python module that helps you to diff and patch
26708dictionaries.")
26709 (license license:expat)))
26710
26711(define-public python-dictpath
26712 (package
26713 (name "python-dictpath")
26714 (version "0.1.3")
26715 (source
26716 (origin
26717 (method url-fetch)
26718 (uri (pypi-uri "dictpath" version))
26719 (sha256
26720 (base32 "1n4hq4wbgaw59bbb16nhkgg5wk8sl4iw940vjrgx4xmifqxxw73m"))))
26721 (build-system python-build-system)
26722 (native-inputs (list python-pytest python-pytest-cov python-pytest-flake8))
26723 (home-page "https://github.com/p1c2u/pathable")
26724 (synopsis "Object-oriented path library for Python")
26725 (description "This object-oriented dictionary path Python library enables
26726traversing resources like paths or accessing resources on demand with separate
26727accessor layer.")
26728 (license license:asl2.0)))
26729
26730(define-public pyzo
26731 (package
26732 (name "pyzo")
26733 (version "4.12.3")
26734 (source
26735 (origin
26736 (method git-fetch)
26737 (uri (git-reference
26738 (url "https://github.com/pyzo/pyzo.git")
26739 (commit (string-append "v" version))))
26740 (file-name (git-file-name name version))
26741 (sha256
26742 (base32
26743 "0v6rgp52bf9za2spxx9c1yc6wmskvlsj81iw0gipjy7y8vpypgn2"))))
26744 (build-system python-build-system)
26745 (arguments
26746 `(#:phases
26747 (modify-phases %standard-phases
26748 (add-before 'check 'fix-home-directory
26749 (lambda _
26750 ;; Tests fail with "Permission denied: '/homeless-shelter'".
26751 (setenv "HOME" "/tmp"))))
26752 ;; Tests fail with "Uncaught Python exception: python: undefined
26753 ;; symbol: objc_getClass".
26754 #:tests? #f))
26755 (propagated-inputs
26756 (list python-pyqt))
26757 (home-page "https://pyzo.org")
26758 (synopsis
26759 "Python IDE for scientific computing")
26760 (description
26761 "Pyzo is a Python IDE focused on interactivity and introspection,
26762which makes it very suitable for scientific computing. Its practical
26763design is aimed at simplicity and efficiency.
26764
26765It consists of two main components, the editor and the shell, and uses
26766a set of pluggable tools to help the programmer in various ways. Some
26767example tools are source structure, project manager, interactive help,
26768workspace...")
26769 (license license:bsd-2)))
26770
26771(define-public python-osc
26772 (package
26773 (name "python-osc")
26774 (version "1.7.4")
26775 (source
26776 (origin
26777 (method url-fetch)
26778 (uri (pypi-uri "python-osc" version))
26779 (sha256
26780 (base32
26781 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
26782 (build-system python-build-system)
26783 (home-page "https://github.com/attwad/python-osc")
26784 (synopsis "Open Sound Control server and client implementations")
26785 (description
26786 "@code{python-osc} is a pure Python library with no external
26787dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
26788Open Sound Control 1.0} specification.")
26789 (license license:unlicense)))
26790
26791(define-public python-voluptuous
26792 (package
26793 (name "python-voluptuous")
26794 (version "0.11.7")
26795 (source
26796 (origin
26797 (method url-fetch)
26798 (uri (pypi-uri "voluptuous" version))
26799 (sha256
26800 (base32
26801 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
26802 (build-system python-build-system)
26803 (native-inputs
26804 (list python-nose))
26805 (home-page "https://github.com/alecthomas/voluptuous")
26806 (synopsis "Python data validation library")
26807 (description
26808 "Voluptuous is a Python data validation library. It is primarily
26809intended for validating data coming into Python as JSON, YAML, etc.")
26810 (license license:bsd-3)))
26811
26812(define-public python-cmd2
26813 (package
26814 (name "python-cmd2")
26815 (version "2.3.3")
26816 (source
26817 (origin
26818 (method url-fetch)
26819 (uri (pypi-uri "cmd2" version))
26820 (sha256
26821 (base32
26822 "0h1naik558qh48gx2iyy0a0khvw5fz0in69y84mbrhsm9nq7w3bm"))))
26823 (build-system python-build-system)
26824 (arguments
26825 '(#:phases
26826 (modify-phases %standard-phases
26827 (replace 'check
26828 (lambda* (#:key tests? #:allow-other-keys)
26829 (if tests?
26830 (invoke "pytest" "-vv" "-k"
26831 ;; These tests fail because no EDITOR is in PATH.
26832 "not test_find_editor_not_specified \
26833and not test_transcript")
26834 (format #t "test suite not run~%")))))))
26835 (propagated-inputs
26836 (list python-attrs python-colorama python-pyperclip python-wcwidth))
26837 (native-inputs
26838 (list python-invoke
26839 python-mock
26840 python-pytest
26841 python-pytest-cov
26842 python-pytest-mock
26843 python-setuptools-scm))
26844 (home-page "https://github.com/python-cmd2/cmd2")
26845 (synopsis "Tool for building interactive command line applications")
26846 (description
26847 "Cmd2 is a tool for building interactive command line applications in
26848Python. Its goal is to make it quick and easy for developers to build
26849feature-rich and user-friendly interactive command line applications. It
26850provides a simple API which is an extension of Python's built-in @code{cmd}
26851module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
26852make your life easier and eliminates much of the boilerplate code which would
26853be necessary when using @code{cmd}.")
26854 (license license:expat)))
26855
26856(define-public python-pytidylib
26857 (package
26858 (name "python-pytidylib")
26859 (version "0.3.2")
26860 (source (origin
26861 (method url-fetch)
26862 (uri (pypi-uri "pytidylib" version))
26863 (sha256
26864 (base32
26865 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
26866 (build-system python-build-system)
26867 (arguments
26868 '(#:phases
26869 (modify-phases %standard-phases
26870 (add-before 'build 'qualify-libtidy
26871 (lambda* (#:key inputs #:allow-other-keys)
26872 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
26873 (substitute* "tidylib/tidy.py"
26874 (("ctypes\\.util\\.find_library\\('tidy'\\)")
26875 (format #f "'~a'" libtidy)))
26876 #t))))))
26877 (inputs (list tidy))
26878 (home-page "https://github.com/countergram/pytidylib")
26879 (synopsis "Python wrapper for HTML Tidy library")
26880 (description
26881 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
26882allows you, from Python code, to “fix” invalid (X)HTML markup.")
26883 (license license:expat)))
26884
26885(define-public python-mujson
26886 (package
26887 (name "python-mujson")
26888 (version "1.4")
26889 (source
26890 (origin
26891 (method url-fetch)
26892 (uri (pypi-uri "mujson" version))
26893 (sha256
26894 (base32
26895 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
26896 (build-system python-build-system)
26897 (home-page "https://github.com/mattgiles/mujson")
26898 (synopsis "Use the fastest JSON functions available at import time")
26899 (description "This package selects the fastest JSON functions available
26900at import time.")
26901 (license license:expat)))
26902
26903(define-public python-bashlex
26904 (package
26905 (name "python-bashlex")
26906 (version "0.14")
26907 (source
26908 (origin
26909 (method url-fetch)
26910 (uri (pypi-uri "bashlex" version))
26911 (sha256
26912 (base32
26913 "1z9g96fgsfpdwawp4sb5x6hbdhmda7kgmcrqlf9xx4bs1f8f14js"))))
26914 (build-system python-build-system)
26915 (arguments
26916 `(#:phases
26917 (modify-phases %standard-phases
26918 (add-before 'build 'pregenerate-yacc-tables
26919 (lambda _
26920 ;; parser.py caches tables, which attempts to write to site lib
26921 ;; see https://github.com/idank/bashlex/issues/51
26922 (invoke "python" "-c" "import bashlex"))))))
26923 (home-page
26924 "https://github.com/idank/bashlex")
26925 (synopsis "Python parser for bash")
26926 (description "@code{bashlex} is a Python port of the parser used
26927internally by GNU bash.
26928
26929For the most part it's transliterated from C, the major differences are:
26930
26931@itemize
26932@item it does not execute anything
26933@item it is reentrant
26934@item it generates a complete AST
26935@end itemize
26936")
26937 (license license:gpl3+)))
26938
26939(define-public python-jinxed
26940 (package
26941 (name "python-jinxed")
26942 (version "1.0.0")
26943 (source
26944 (origin
26945 (method url-fetch)
26946 (uri (pypi-uri "jinxed" version))
26947 (sha256
26948 (base32
26949 "1n7vl03rhjd0xhjgbjlh8x9f8yfbhamcwkgvs4jg7g5qj8f0wk89"))))
26950 (build-system python-build-system)
26951 (arguments
26952 '(#:phases
26953 (modify-phases %standard-phases
26954 (add-before 'check 'set-environment-variables
26955 (lambda* (#:key inputs #:allow-other-keys)
26956 (let ((ncurses (assoc-ref inputs "ncurses")))
26957 (setenv "TERM" "LINUX")
26958 (setenv "TERMINFO" (string-append ncurses "/share/terminfo"))
26959 #t))))
26960 #:tests? #f)) ; _curses.error: setupterm: could not find terminal
26961 (native-inputs
26962 (list ncurses))
26963 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
26964 (synopsis "Jinxed Terminal Library")
26965 (description
26966 "Jinxed is an implementation of a subset of the Python curses library.")
26967 (license license:mpl2.0)))
26968
26969(define-public python-svgutils
26970 (package
26971 (name "python-svgutils")
26972 (version "0.3.4")
26973 (source
26974 (origin
26975 (method url-fetch)
26976 (uri (pypi-uri "svgutils" version))
26977 (sha256
26978 (base32
26979 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
26980 (build-system python-build-system)
26981 (propagated-inputs
26982 (list python-lxml))
26983 (home-page "https://svgutils.readthedocs.io")
26984 (synopsis "Python SVG editor")
26985 (description "This is an utility package that helps with editing and
26986concatenating SVG files. It is especially directed at scientists preparing
26987final figures for submission to journals. So far it supports arbitrary
26988placement and scaling of SVG figures and adding markers, such as labels.")
26989 (license license:expat)))
26990
26991(define-public python-blessed
26992 (package
26993 (name "python-blessed")
26994 (version "1.17.8")
26995 (source
26996 (origin
26997 (method url-fetch)
26998 (uri (pypi-uri "blessed" version))
26999 (sha256
27000 (base32
27001 "1wdj342sk22hfrg0n91x2qnqsbzbiyq9y009v3pxnvfzn9bx0wbn"))
27002 (modules '((guix build utils)))
27003 (snippet
27004 '(begin
27005 ;; Don't get hung up on Windows test failures.
27006 (delete-file "blessed/win_terminal.py") #t))))
27007 (build-system python-build-system)
27008 (propagated-inputs
27009 (list python-jinxed python-six python-wcwidth))
27010 (native-inputs
27011 (list python-mock python-pytest))
27012 (home-page "https://github.com/jquast/blessed")
27013 (synopsis "Wrapper around terminal capabilities")
27014 (description
27015 "Blessed is a thin, practical wrapper around terminal styling, screen
27016positioning, and keyboard input.")
27017 (license license:expat)))
27018
27019(define-public python-readme-renderer
27020 (package
27021 (name "python-readme-renderer")
27022 (version "34.0")
27023 (source
27024 (origin
27025 (method url-fetch)
27026 (uri (pypi-uri "readme_renderer" version))
27027 (sha256
27028 (base32
27029 "1c75h9znffc2lh4j56yg23l5ifj5l8fbdq3kfigi8vbh45zx3d6z"))))
27030 (build-system python-build-system)
27031 (arguments
27032 '(#:phases (modify-phases %standard-phases
27033 (add-after 'unpack 'loosen-cmarkgfm-dependency
27034 (lambda _
27035 ;; Permit newer versions of cmarkgfm.
27036 (substitute* "setup.py"
27037 (("cmarkgfm>=0\\.5\\.0,<0\\.7\\.0")
27038 "cmarkgfm>=0.5.0"))))
27039 (replace 'check
27040 (lambda* (#:key tests? #:allow-other-keys)
27041 (when tests?
27042 ;; The GFM tests fail due to slight differences in the
27043 ;; generated vs expected HTML due to using a more
27044 ;; recent bleach version (see:
27045 ;; https://github.com/pypa/readme_renderer/issues/234).
27046 (invoke "pytest" "-vv" "-k" "not GFM")))))))
27047 (propagated-inputs
27048 (list python-bleach python-docutils python-pygments
27049
27050 ;; Optional dependencies.
27051 python-cmarkgfm)) ;required by postorius
27052 (native-inputs
27053 (list python-mock python-pytest))
27054 (home-page "https://github.com/pypa/readme_renderer")
27055 (synopsis "Render README files in Warehouse")
27056 (description
27057 "Readme Renderer is a library that will safely render arbitrary README
27058files into HTML. It is designed to be used in Warehouse to render the
27059@code{long_description} for packages. It can handle Markdown, reStructuredText,
27060and plain text.")
27061 (license license:asl2.0)))
27062
27063(define-public python-lazr-delegates
27064 (package
27065 (name "python-lazr-delegates")
27066 (version "2.0.4")
27067 (source
27068 (origin
27069 (method url-fetch)
27070 (uri (pypi-uri "lazr.delegates" version))
27071 (sha256
27072 (base32
27073 "1rdnl85j9ayp8n85l0ciip621j9dcziz5qnmv2m7krgwgcn31vfx"))))
27074 (build-system python-build-system)
27075 (arguments
27076 '(#:phases
27077 (modify-phases %standard-phases
27078 (replace 'check
27079 (lambda* (#:key tests? #:allow-other-keys)
27080 (when tests? (invoke "nosetests")))))))
27081 (native-inputs
27082 (list python-nose))
27083 (propagated-inputs
27084 (list python-zope-interface))
27085 (home-page "https://launchpad.net/lazr.delegates")
27086 (synopsis "Easily write objects that delegate behavior")
27087 (description
27088 "The @code{lazr.delegates} package makes it easy to write objects that
27089delegate behavior to another object. The new object adds some property or
27090behavior on to the other object, while still providing the underlying interface,
27091and delegating behavior.")
27092 (license license:lgpl3)))
27093
27094(define-public python-lazr-config
27095 (package
27096 (name "python-lazr-config")
27097 (version "2.2.3")
27098 (source
27099 (origin
27100 (method url-fetch)
27101 (uri (pypi-uri "lazr.config" version))
27102 (sha256
27103 (base32
27104 "1qdbrzl61q7cjhbnxvw9y3frcr935y7diwy15xrwcv9ynvw76jmp"))))
27105 (build-system python-build-system)
27106 (arguments
27107 '(#:phases
27108 (modify-phases %standard-phases
27109 (replace 'check
27110 (lambda _
27111 (invoke "python" "-s" "-m" "nose" "-P" "lazr"))))))
27112 (native-inputs
27113 (list python-nose))
27114 (propagated-inputs
27115 (list python-lazr-delegates python-zope-interface))
27116 (home-page "https://launchpad.net/lazr.config")
27117 (synopsis "Create configuration schemas and process and validate configurations")
27118 (description
27119 "The LAZR config system is typically used to manage process configuration.
27120Process configuration is for saying how things change when we run systems on
27121different machines, or under different circumstances. This system uses ini-like
27122file format of section, keys, and values. The config file supports inheritance
27123to minimize duplication of information across files. The format supports schema
27124validation.")
27125 (license license:lgpl3)))
27126
27127(define-public python-flufl-bounce
27128 (package
27129 (name "python-flufl-bounce")
27130 (version "4.0")
27131 (source
27132 (origin
27133 (method url-fetch)
27134 (uri (pypi-uri "flufl.bounce" version))
27135 (sha256
27136 (base32
27137 "0c9qc2l47lyqnpwskp6vvi7m3jqh6hx42v6d35dgxh3fjzmlll15"))))
27138 (build-system python-build-system)
27139 (arguments
27140 (list #:phases
27141 #~(modify-phases %standard-phases
27142 (replace 'check
27143 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
27144 (when tests?
27145 (with-directory-excursion
27146 (string-append (site-packages inputs outputs) "/flufl")
27147 (invoke "python" "-m" "nose2" "-v"))))))))
27148 (propagated-inputs
27149 (list python-atpublic python-zope-interface))
27150 (native-inputs
27151 (list python-flufl-testing python-nose2))
27152 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
27153 (synopsis "Email bounce detectors")
27154 (description "The @code{flufl.bounce} library provides a set of heuristics
27155and an API for detecting the original bouncing email addresses from a bounce
27156message. Many formats found in the wild are supported, as are VERP and
27157RFC 3464.")
27158 (license (list license:asl2.0
27159 license:lgpl3)))) ; only for setup_headers.py
27160
27161(define-public python-flufl-i18n
27162 (package
27163 (name "python-flufl-i18n")
27164 (version "3.0")
27165 (source
27166 (origin
27167 (method url-fetch)
27168 (uri (pypi-uri "flufl.i18n" version))
27169 (sha256
27170 (base32
27171 "1flwpn1xhgc957zj3zxw92dhdjh0lsy0hdvzq32dzqpsajfsvq1r"))))
27172 (build-system python-build-system)
27173 (propagated-inputs
27174 (list python-atpublic))
27175 (home-page "https://flufli18n.readthedocs.io")
27176 (synopsis "API for Python internationalization")
27177 (description
27178 "This package provides a high-level, convenient API for managing
27179internationalization/translation contexts in Python applications. There is a
27180simple API for single-context applications, such as command line scripts which
27181only need to translate into one language during the entire course of their
27182execution. There is a more flexible, but still convenient API for multi-context
27183applications, such as servers, which may need to switch language contexts for
27184different tasks.")
27185 (license license:asl2.0)))
27186
27187(define-public python-flufl-lock
27188 (package
27189 (name "python-flufl-lock")
27190 (version "4.0")
27191 (source
27192 (origin
27193 (method url-fetch)
27194 (uri (pypi-uri "flufl.lock" version))
27195 (sha256
27196 (base32
27197 "055941zyma3wfx25jhm8wcsghpv3jc3iwi1gdrdjhzcnfhn62lxq"))))
27198 (build-system python-build-system)
27199 (propagated-inputs
27200 (list python-atpublic python-psutil))
27201 (home-page "https://flufllock.readthedocs.io")
27202 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
27203 (description
27204 "The @dfn{flufl.lock} package provides NFS-safe file locking with
27205timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
27206@code{open} system call but uses a lockfile. Lock objects support lock-breaking
27207and have a maximum lifetime built-in.")
27208 (license (list license:asl2.0
27209 license:lgpl3)))) ; only for setup_helpers.py
27210
27211(define-public python-flufl-testing
27212 (package
27213 (name "python-flufl-testing")
27214 (version "0.8")
27215 (source
27216 (origin
27217 (method url-fetch)
27218 (uri (pypi-uri "flufl.testing" version))
27219 (sha256
27220 (base32
27221 "1nkm95mhcfhl4x5jgs6y97ikszaxsfh07nyawsih6cxxm6l62641"))))
27222 (build-system python-build-system)
27223 (arguments '(#:tests? #f)) ;no tests
27224 (home-page "https://gitlab.com/warsaw/flufl.testing")
27225 (synopsis "Collection of test tool plugins")
27226 (description
27227 "This package contains a small collection of test tool plugins for
27228@code{nose2} and @code{flake8}.")
27229 (license license:asl2.0)))
27230
27231(define-public python-devtools
27232 (package
27233 (name "python-devtools")
27234 (version "0.6")
27235 (source
27236 (origin
27237 (method git-fetch)
27238 (uri (git-reference
27239 (url "https://github.com/samuelcolvin/python-devtools")
27240 (commit (string-append "v" version))))
27241 (file-name (git-file-name name version))
27242 (sha256
27243 (base32 "15zczdcm90wl54c68f1qjb05nkd5bjsc9xjl3lk4frs7k7wkmrvp"))))
27244 (build-system python-build-system)
27245 (native-inputs
27246 (list python-pytest python-pytest-mock))
27247 (propagated-inputs
27248 (list python-pygments))
27249 (arguments
27250 `(#:phases (modify-phases %standard-phases
27251 (replace 'check
27252 (lambda _
27253 (invoke "pytest")
27254 #t)))))
27255 (home-page "https://github.com/samuelcolvin/python-devtools")
27256 (synopsis "Debug command and development tools")
27257 (description
27258 "This package provides a debug print command and other development tools.
27259It adds a simple and readable way to print stuff during development.")
27260 (license license:expat)))
27261
27262(define-public python-dateparser
27263 (package
27264 (name "python-dateparser")
27265 (version "1.1.3")
27266 (source
27267 (origin
27268 (method url-fetch)
27269 (uri (pypi-uri "dateparser" version))
27270 (sha256
27271 (base32
27272 "19fbgq1zrwx10kljmdbs3p0y2m2xsgww20pqzw4kv6161zipsymf"))))
27273 (build-system pyproject-build-system)
27274 (propagated-inputs
27275 (list python-dateutil python-pytz python-regex python-ruamel.yaml
27276 python-tzlocal))
27277 (native-inputs
27278 (list python-flake8 python-pytest python-parameterized tzdata-for-tests))
27279 (arguments
27280 `(#:phases
27281 (modify-phases %standard-phases
27282 (add-before 'check 'set-check-environment
27283 (lambda* (#:key inputs #:allow-other-keys)
27284 (setenv "TZ" "UTC")
27285 (setenv "TZDIR"
27286 (search-input-directory inputs
27287 "share/zoneinfo"))))
27288 (add-before 'check 'delete-failing-tests
27289 (lambda _
27290 (with-directory-excursion "tests"
27291 (for-each delete-file
27292 '("test_dateparser_data_integrity.py"
27293 "test_hijri.py"
27294 "test_jalali.py"
27295 "test_language_detect.py"))))))))
27296 (home-page "https://github.com/scrapinghub/dateparser")
27297 (synopsis
27298 "Date parsing library designed to parse dates from HTML pages")
27299 (description
27300 "@code{python-dateparser} provides modules to easily parse localized
27301dates in almost any string formats commonly found on web pages.")
27302 (license license:bsd-3)))
27303
27304(define-public python-dparse
27305 (package
27306 (name "python-dparse")
27307 (version "0.5.1")
27308 (source
27309 (origin
27310 (method url-fetch)
27311 (uri (pypi-uri "dparse" version))
27312 (sha256
27313 (base32
27314 "0rzkg3nymsbwdjc0ms2bsajkda02jipwyp3xk97qj71f21lz3dd1"))))
27315 (build-system python-build-system)
27316 (native-inputs
27317 (list python-pytest))
27318 (propagated-inputs
27319 (list python-packaging python-pyyaml python-toml))
27320 (home-page "https://github.com/pyupio/dparse")
27321 (synopsis "Parser for Python dependency files")
27322 (description "This package provides a parser for Python dependency files.")
27323 (license license:expat)))
27324
27325(define-public python-dpath
27326 (package
27327 (name "python-dpath")
27328 (version "2.0.1")
27329 (source
27330 (origin
27331 (method url-fetch)
27332 (uri (pypi-uri "dpath" version))
27333 (sha256
27334 (base32
27335 "1ymi9ssk7i0mx3mviplf4csfvzibdd6wyj4qzj6s487n9xgnp85y"))))
27336 (build-system python-build-system)
27337 (native-inputs
27338 (list python-hypothesis python-mock python-nose))
27339 (arguments
27340 '(#:phases
27341 (modify-phases %standard-phases
27342 (replace 'check
27343 (lambda* (#:key inputs outputs #:allow-other-keys)
27344 (add-installed-pythonpath inputs outputs)
27345 ;; This invokation is taken from tox.ini.
27346 (invoke "nosetests" "-d" "-v" "tests/"))))))
27347 (home-page "https://github.com/akesterson/dpath-python")
27348 (synopsis "File-system-like pathing and searching for dictionaries")
27349 (description
27350 "@code{python-dpath} is a library for accessing and searching
27351dictionaries via /slashed/paths ala xpath.
27352
27353Basically it lets you glob over a dictionary as if it were a file system. It
27354allows you to specify globs (ala the bash eglob syntax, through some advanced
27355fnmatch.fnmatch magic) to access dictionary elements, and provides some
27356facility for filtering those results.")
27357 (license license:expat)))
27358
27359(define-public python-safety
27360 (package
27361 (name "python-safety")
27362 (version "1.9.0")
27363 (source
27364 (origin
27365 (method url-fetch)
27366 (uri (pypi-uri "safety" version))
27367 (sha256
27368 (base32
27369 "1j801xsxfzavjbzhhc934awvnk1b7jc0qsw3jp3ys0241mlj1gr3"))))
27370 (build-system python-build-system)
27371 (arguments
27372 `(#:phases
27373 (modify-phases %standard-phases
27374 (add-after 'unpack 'disable-tests
27375 (lambda _
27376 (substitute* "tests/test_safety.py"
27377 ;; requires network
27378 (("def test_check_live") "def _test_check_live"))
27379 #t)))))
27380 (propagated-inputs
27381 (list python-click python-dparse python-packaging python-requests))
27382 (home-page "https://github.com/pyupio/safety")
27383 (synopsis "Check installed dependencies for known vulnerabilities")
27384 (description "Safety checks installed dependencies for known vulnerabilities.
27385By default it uses the open Python vulnerability database Safety DB.")
27386 (license license:expat)))
27387
27388(define-public python-pypandoc
27389 (package
27390 (name "python-pypandoc")
27391 (version "1.6.4")
27392 (source
27393 (origin
27394 (method url-fetch)
27395 (uri (pypi-uri "pypandoc" version))
27396 (sha256
27397 (base32
27398 "149basv4pvzg9zm74cjz68x8s2n5fykyj7prgysb0qfmja73r83f"))))
27399 (build-system python-build-system)
27400 (inputs
27401 (list pandoc))
27402 (propagated-inputs
27403 `(("wheel" ,python-wheel)))
27404 (native-inputs
27405 `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
27406 texlive-fonts-ec
27407 texlive-generic-iftex
27408 texlive-hyperref
27409 texlive-oberdiek
27410 texlive-lm
27411 texlive-xcolor)))))
27412 (arguments
27413 `(#:phases
27414 (modify-phases %standard-phases
27415 (add-before 'check 'disable-tests
27416 (lambda _
27417 ;; Disable test requiring network access
27418 (substitute* "tests.py"
27419 (("test_basic_conversion_from_http_url")
27420 "skip_test_basic_conversion_from_http_url"))
27421 #t)))))
27422 (home-page "https://github.com/bebraw/pypandoc")
27423 (synopsis "Python wrapper for pandoc")
27424 (description "pypandoc is a thin Python wrapper around pandoc
27425and pandoc-citeproc.")
27426 (license license:expat)))
27427
27428(define-public python-rnc2rng
27429 (package
27430 (name "python-rnc2rng")
27431 (version "2.6.6")
27432 (source
27433 (origin
27434 (method url-fetch)
27435 (uri (pypi-uri "rnc2rng" version))
27436 (sha256
27437 (base32
27438 "1wbqvz2bhq2f5kqi7q2q3m9y5vs9rj970zhnjh502pvvhmbx20as"))))
27439 (build-system python-build-system)
27440 (propagated-inputs
27441 (list python-rply))
27442 (arguments
27443 `(#:phases (modify-phases %standard-phases
27444 (replace 'check
27445 (lambda _
27446 (invoke "python" "test.py"))))))
27447 (home-page "https://github.com/djc/rnc2rng")
27448 (synopsis "Convert RELAX NG Compact to regular syntax")
27449 (description
27450 "This package provides the @command{rnc2rng} command-line tool as well as
27451a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
27452equivalent schemata in the XML-based default RELAX NG syntax.")
27453 (license license:expat)))
27454
27455(define-public python-telethon
27456 (package
27457 (name "python-telethon")
27458 (version "1.17.5")
27459 (source
27460 (origin
27461 (method git-fetch)
27462 (uri (git-reference
27463 (url "https://github.com/LonamiWebs/Telethon")
27464 (commit (string-append "v" version))))
27465 (file-name (git-file-name name version))
27466 (sha256
27467 (base32 "0l9fhdrq576vllgi9aam45xzw5xi6jhgdv5zz8i4ygssdp7cm8jl"))))
27468 (build-system python-build-system)
27469 (arguments
27470 '(#:phases
27471 (modify-phases %standard-phases
27472 (replace 'check
27473 (lambda* (#:key tests? #:allow-other-keys)
27474 (when tests?
27475 (invoke "py.test" "-v"))
27476 #t)))))
27477 (propagated-inputs
27478 (list python-rsa python-pyaes))
27479 (native-inputs
27480 (list python-pytest python-pytest-asyncio python-pytest-trio))
27481 (home-page "https://docs.telethon.dev")
27482 (synopsis "Full-featured Telegram client library for Python 3")
27483 (description "This library is designed to make it easy to write Python
27484programs that can interact with Telegram.")
27485 (license license:expat)))
27486
27487(define-public python-citeproc-py
27488 (package
27489 (name "python-citeproc-py")
27490 (version "0.5.1")
27491 (source
27492 (origin
27493 (method url-fetch)
27494 (uri (pypi-uri "citeproc-py" version))
27495 (sha256
27496 (base32
27497 "00aaff50jy4j0nakdzq9258z1gzrac9baarli2ymgspj88jg5968"))))
27498 (build-system python-build-system)
27499 (propagated-inputs
27500 (list python-lxml python-rnc2rng))
27501 (home-page
27502 "https://github.com/brechtm/citeproc-py")
27503 (synopsis "Citations and bibliography formatter")
27504 (description
27505 "Citeproc-py is a CSL processor for Python. It aims to implement the
27506CSL 1.0.1 specification. citeproc-py can output styled citations and
27507bibliographies in a number of different output formats. Currently supported
27508are plain text, reStructuredText and HTML.")
27509 (license license:bsd-2)))
27510
27511(define-public python-inform
27512 (package
27513 (name "python-inform")
27514 (version "1.23.0")
27515 (source
27516 (origin
27517 (method url-fetch)
27518 (uri (pypi-uri "inform" version))
27519 (sha256
27520 (base32
27521 "0dvc5klbnbryrvspp45nmlg02g40j7xspcz7lqsm0c0dj0z29zdz"))))
27522 (build-system python-build-system)
27523 (arguments
27524 `(#:tests? #f)) ; PyPI tarball lacks tests
27525 (native-inputs
27526 (list python-hypothesis python-pytest-cov python-pytest-runner))
27527 (propagated-inputs
27528 (list python-arrow python-six))
27529 (home-page "https://inform.readthedocs.io")
27530 (synopsis "Print & logging utilities for communicating with user")
27531 (description
27532 "Inform is designed to display messages from programs that are typically run from
27533a console. It provides a collection of ‘print’ functions that allow you to simply and
27534cleanly print different types of messages.")
27535 (license license:gpl3+)))
27536
27537(define-public python-nestedtext
27538 (package
27539 (name "python-nestedtext")
27540 (version "1.0.0")
27541 (source
27542 (origin
27543 (method url-fetch)
27544 (uri (pypi-uri "nestedtext" version))
27545 (sha256
27546 (base32
27547 "0xjx863n7yd1xmkwhy48lhmqrmlzgbx3civhk386hvrzyq4sx148"))))
27548 (build-system python-build-system)
27549 (arguments
27550 `(#:tests? #f)) ; PyPI tarball lacks tests
27551 (propagated-inputs
27552 (list python-inform))
27553 (home-page "https://nestedtext.org")
27554 (synopsis "Human readable and writable data interchange format")
27555 (description
27556 "NestedText is a file format for holding data that is to be entered, edited, or
27557viewed by people. It allows data to be organized into a nested collection of
27558dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
27559without the complexity and risk of YAML and without the syntactic clutter of JSON.
27560NestedText is both simple and natural. Only a small number of concepts and rules must
27561be kept in mind when creating it. It is easily created, modified, or viewed with
27562a text editor and easily understood and used by both programmers and non-programmers.")
27563 (license license:expat))) ; MIT license
27564
27565(define-public python-nest-asyncio
27566 (package
27567 (name "python-nest-asyncio")
27568 (version "1.5.5")
27569 (source
27570 (origin
27571 (method url-fetch)
27572 (uri (pypi-uri "nest_asyncio" version))
27573 (sha256
27574 (base32
27575 "0rbdw7lry66yj13hh4w63yzflnapdal1ffl237k8nsa2v4f2jhp4"))))
27576 (build-system python-build-system)
27577 (home-page "https://github.com/erdewit/nest_asyncio")
27578 (synopsis "Patch asyncio to allow nested event loops")
27579 (description
27580 "By design @code{asyncio} does not allow its event loop to be nested.
27581This presents a practical problem: when in an environment where the event loop
27582is already running it's impossible to run tasks and wait for the result. This
27583module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
27584@code{loop.run_until_complete}.")
27585 (license license:bsd-3)))
27586
27587(define-public python-simpervisor
27588 (package
27589 (name "python-simpervisor")
27590 (version "0.4")
27591 (source
27592 (origin
27593 ;; Tests not included in release.
27594 (method git-fetch)
27595 (uri (git-reference
27596 (url "https://github.com/yuvipanda/simpervisor")
27597 (commit (string-append "v" version))))
27598 (file-name (git-file-name name version))
27599 (sha256
27600 (base32 "1brsisx7saf4ic0dih1n5y7rbdbwn1ywv9pl32bch3061r46prvv"))))
27601 (build-system python-build-system)
27602 (arguments
27603 `(#:tests? #f ; Test suite can't find aiohttp.
27604 #:phases
27605 (modify-phases %standard-phases
27606 (replace 'check
27607 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
27608 (when tests?
27609 (add-installed-pythonpath inputs outputs)
27610 (invoke "pytest" "--maxfail" "3" "--verbose"))
27611 #t)))))
27612 (native-inputs
27613 (list python-aiohttp python-pytest python-pytest-asyncio))
27614 (home-page "https://github.com/yuvipanda/simpervisor")
27615 (synopsis "Simple async process supervisor")
27616 (description
27617 "This package provides a simple async process supervisor in Python.")
27618 (license license:bsd-3)))
27619
27620(define-public python-parallel
27621 (package
27622 (name "python-parallel")
27623 (version "1.6.4.4")
27624 (source
27625 (origin
27626 (method url-fetch)
27627 (uri (string-append
27628 "https://www.parallelpython.com/downloads/pp/pp-"
27629 version ".zip"))
27630 (sha256
27631 (base32
27632 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
27633 (native-inputs
27634 (list unzip))
27635 (propagated-inputs
27636 (list python-six))
27637 (build-system python-build-system)
27638 (arguments '(#:tests? #f)) ; No test suite.
27639 (home-page "https://www.parallelpython.com")
27640 (synopsis "Parallel and distributed programming for Python")
27641 (description "Parallel Python module (PP) provides an easy and efficient
27642way to create parallel-enabled applications for SMP computers and clusters.
27643PP module features cross-platform portability and dynamic load balancing.
27644Thus applications written with PP will parallelize efficiently even on
27645heterogeneous and multi-platform clusters (including clusters running other
27646applications with variable CPU loads).")
27647 (license license:bsd-3)))
27648
27649(define-public python-djvulibre
27650 (package
27651 (name "python-djvulibre")
27652 (version "0.8.6")
27653 (source
27654 (origin
27655 (method url-fetch)
27656 (uri (pypi-uri "python-djvulibre" version))
27657 (sha256
27658 (base32 "089smpq29ll0z37lnq26r2f72d31i33xm9fw9pc6hlcsm6nbjbiv"))))
27659 (build-system python-build-system)
27660 (native-inputs
27661 (list ghostscript pkg-config python-nose))
27662 (inputs
27663 (list djvulibre python-cython))
27664 (arguments
27665 `(#:phases
27666 (modify-phases %standard-phases
27667 (add-after 'unpack 'fix-tests
27668 (lambda _
27669 ;; Unit tests try to load the 'dllpath.py' and fail, because it
27670 ;; doesn't make sense on GNU/Linux.
27671 (delete-file "djvu/dllpath.py")
27672 #t)))))
27673 (synopsis "Python bindings for DjVuLibre")
27674 (description "This is a set of Python bindings for the DjVuLibre library.")
27675 (home-page "https://jwilk.net/software/python-djvulibre")
27676 (license license:gpl2)))
27677
27678(define-public python-version
27679 ;; No version tags available in the git repo; just using bare commit instead.
27680 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
27681 (revision "1"))
27682 (package
27683 (name "python-version")
27684 (version (git-version "0.0.2" revision commit))
27685 (source (origin
27686 (method git-fetch)
27687 (uri (git-reference
27688 (url "https://gitlab.com/halfak/python_version")
27689 (commit commit)))
27690 (file-name (git-file-name name version))
27691 (sha256
27692 (base32
27693 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
27694 (build-system python-build-system)
27695 (home-page "https://gitlab.com/halfak/python_version")
27696 (synopsis "Python version checking utility")
27697 (description
27698 "This package provides a simple utility for checking the python version.")
27699 (license license:expat))))
27700
27701(define-public python-versioneer
27702 (package
27703 (name "python-versioneer")
27704 (version "0.21")
27705 (source
27706 (origin
27707 (method url-fetch)
27708 (uri (pypi-uri "versioneer" version))
27709 (sha256
27710 (base32
27711 "084fglxafbzvf1vbkzfajvs9qwnvjwwn8pxql9nrlpyipv5xpwk4"))
27712 (patches (search-patches "python-versioneer-guix-support.patch"))))
27713 (build-system python-build-system)
27714 (home-page
27715 "https://github.com/python-versioneer/python-versioneer")
27716 (synopsis
27717 "Version-string management for VCS-controlled trees")
27718 (description
27719 "@code{versioneer} is a tool for managing a recorded version number in
27720distutils-based python projects. The goal is to remove the tedious and
27721error-prone \"update the embedded version string\" step from your release
27722process.")
27723 (license license:public-domain)))
27724
27725(define-public python-gamera
27726 (package
27727 (name "python-gamera")
27728 (version "4.0.0")
27729 (source
27730 (origin
27731 (method url-fetch)
27732 (uri (string-append "https://gamera.informatik.hsnr.de/download/"
27733 "gamera-" version ".tar.gz"))
27734 (sha256
27735 (base32 "0fhlwbvpm3k54n4aa1y6qd348jqrb54ak9p0ic16drx7f07dsq05"))
27736 (modules '((guix build utils)))
27737 (snippet
27738 '(begin
27739 ;; Remove bundled libraries.
27740 (for-each delete-file-recursively
27741 '("src/libpng-1.2.5"
27742 "src/libtiff"
27743 "src/zlib-1.2.8"))))))
27744 (build-system python-build-system)
27745 (arguments
27746 `(#:phases
27747 (modify-phases %standard-phases
27748 (add-after 'unpack 'disable-wx-support
27749 (lambda _
27750 (substitute* "setup.py"
27751 (("no_wx = False")
27752 "no_wx = True"))))
27753 (replace 'check
27754 (lambda* (#:key tests? #:allow-other-keys)
27755 (when tests?
27756 ;; Some tests require a writable HOME directory and test
27757 ;; directory.
27758 (setenv "HOME" "/tmp")
27759 (mkdir "tests/tmp") ;the code assumes this directory exists
27760 ;; (for-each make-file-writable (find-files "tests"))
27761 (with-directory-excursion "tests"
27762 (invoke "pytest" "-vv"
27763 ;; This test causes gamera/gendoc.py to be loaded,
27764 ;; which fails due to the missing docutils, pygments
27765 ;; and silvercity (very old, unpackaged) libraries.
27766 "--ignore" "test_plugins.py"
27767 ;; This test triggers a segfault (see:
27768 ;; https://github.com/hsnr-gamera/gamera-4/issues/47).
27769 "--ignore" "test_rle.py"))))))))
27770 (native-inputs (list python-pytest))
27771 (inputs (list libpng libtiff zlib))
27772 (synopsis "Framework for building document analysis applications")
27773 (description
27774 "Gamera is a toolkit for building document image recognition systems.")
27775 (home-page "https://gamera.informatik.hsnr.de/")
27776 (license license:gpl2+)))
27777
27778(define-public python-contextvars
27779 (package
27780 (name "python-contextvars")
27781 (version "2.4")
27782 (source
27783 (origin
27784 (method url-fetch)
27785 (uri (pypi-uri "contextvars" version))
27786 (sha256
27787 (base32
27788 "17n3w8c20kgkgc6khaafdhhlcdj4bzman4paxqsl7harma59137k"))))
27789 (build-system python-build-system)
27790 (propagated-inputs
27791 (list python-immutables))
27792 (home-page
27793 "https://github.com/MagicStack/contextvars")
27794 (synopsis "PEP 567 Backport")
27795 (description "This package implements a backport of Python 3.7
27796@code{contextvars} module (see PEP 567) for Python 3.6.")
27797 (license license:asl2.0)))
27798
27799(define-public python-aiofiles
27800 (package
27801 (name "python-aiofiles")
27802 (version "0.6.0")
27803 (source
27804 (origin
27805 (method url-fetch)
27806 (uri (pypi-uri "aiofiles" version))
27807 (sha256
27808 (base32
27809 "14m01kjxm2j7zyljjj6xlhlgygcsriymbx730gc5jp9xglaina70"))))
27810 (build-system python-build-system)
27811 (home-page "https://github.com/Tinche/aiofiles")
27812 (synopsis "File support for @code{asyncio}")
27813 (description "@code{python-aiofiles} is a library for handling local
27814disk files in asyncio applications.")
27815 (license license:asl2.0)))
27816
27817(define-public python-pyre-extensions
27818 (package
27819 (name "python-pyre-extensions")
27820 (version "0.0.18")
27821 (source
27822 (origin
27823 (method url-fetch)
27824 (uri (pypi-uri "pyre-extensions" version))
27825 (sha256
27826 (base32
27827 "0c5cbbqrfyjwakdh3kbwxis6mbrbwky1z1fqslgszgpcj4g43q30"))))
27828 (build-system python-build-system)
27829 (propagated-inputs
27830 (list python-typing-extensions python-typing-inspect))
27831 (home-page "https://pyre-check.org")
27832 (synopsis
27833 "Type system extensions for use with @code{python-pyre}")
27834 (description
27835 "@code{python-pyre-extensions} defines extensions to the standard
27836@code{typing} module that are supported by the Pyre typechecker.")
27837 (license license:expat)))
27838
27839(define-public python-dataclasses
27840 (package
27841 (name "python-dataclasses")
27842 (version "0.8")
27843 (source
27844 (origin
27845 (method url-fetch)
27846 (uri (pypi-uri "dataclasses" version))
27847 (sha256
27848 (base32
27849 "15sc12nrc7gxwb30vfa6frzdnpmbap9ibi1fr1yrbkra6izhcyc4"))))
27850 (build-system python-build-system)
27851 (home-page
27852 "https://github.com/ericvsmith/dataclasses")
27853 (synopsis
27854 "Backport of the @code{dataclasses} module for Python 3.6")
27855 (description
27856 "This is an implementation of PEP 557, Data Classes. It is a
27857backport of the @code{dataclasses} module for Python 3.6.")
27858 (license license:asl2.0)))
27859
27860(define-public python-pywatchman
27861 (package
27862 (name "python-pywatchman")
27863 (version "1.4.1")
27864 (source
27865 (origin
27866 (method url-fetch)
27867 (uri (pypi-uri "pywatchman" version))
27868 (sha256
27869 (base32
27870 "1yf2gm20wc3djpb5larxii3l55xxby0il2ns3q0v1byyfnr7w16h"))))
27871 (build-system python-build-system)
27872 (arguments
27873 `(#:tests? #f)) ;there are none
27874 (home-page
27875 "https://facebook.github.io/watchman/")
27876 (synopsis "Watchman client for python")
27877 (description "@code{python-pywatchman} is a library to connect and
27878query Watchman to discover file changes.")
27879 (license license:bsd-3)))
27880
27881(define-public python-roundrobin
27882 (package
27883 (name "python-roundrobin")
27884 (version "0.0.2")
27885 (source (origin
27886 (method url-fetch)
27887 (uri (pypi-uri "roundrobin" version))
27888 (sha256
27889 (base32 "1akwhvfyi0120zg2xkhfc6jwfkirz5x90yyvw06bndhaaxwcnc5c"))))
27890 (build-system python-build-system)
27891 (arguments '(#:tests? #f)) ;no tests on PyPI and no tags in repo
27892 (home-page "https://github.com/linnik/roundrobin")
27893 (synopsis "Collection of roundrobin utilities")
27894 (description
27895 "This package provides a collection of utilities for round-robin
27896distribution in Python.")
27897 (license license:expat)))
27898
27899(define-public python-helpdev
27900 (package
27901 (name "python-helpdev")
27902 (version "0.7.1")
27903 (source
27904 (origin
27905 (method url-fetch)
27906 (uri (pypi-uri "helpdev" version))
27907 (sha256
27908 (base32
27909 "0gfvj28i82va7c264jl2p4cdsl3lpf9fpb9cyjnis55crfdafqmv"))))
27910 (build-system python-build-system)
27911 (arguments
27912 `(#:phases
27913 (modify-phases %standard-phases
27914 (replace 'check
27915 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
27916 (when tests?
27917 (add-installed-pythonpath inputs outputs)
27918 (invoke "pytest" "tests"))
27919 #t)))))
27920 (propagated-inputs
27921 (list python-importlib-metadata))
27922 (native-inputs
27923 (list python-pytest))
27924 (home-page "https://gitlab.com/dpizetta/helpdev")
27925 (synopsis
27926 "Extract information about the Python environment easily")
27927 (description
27928 "Helpdev is a library to easily extract information about the Python
27929environment.")
27930 (license license:expat)))
27931
27932(define-public python-logutils
27933 (package
27934 (name "python-logutils")
27935 (version "0.3.5")
27936 (source
27937 (origin
27938 (method url-fetch)
27939 (uri (pypi-uri "logutils" version))
27940 (sha256
27941 (base32
27942 "10lsi5wv5ysnvf9ya4ncbix6mmipnv5067sf2cglc2f2sljql1dw"))))
27943 (build-system python-build-system)
27944 (home-page "https://bitbucket.org/vinay.sajip/logutils/")
27945 (synopsis "Logging utilities")
27946 (description "This package provides a set of handlers for the Python
27947standard library logging package. Some of these handlers are out-of-scope
27948for the standard library, and so they are packaged here. Others are updated
27949versions which have appeared in recent Python releases, but are usable with
27950older versions of Python and so are packaged here.")
27951 (license license:bsd-3)))
27952
27953(define-public python-helper
27954 (package
27955 (name "python-helper")
27956 (version "2.5.0")
27957 (source (origin
27958 (method url-fetch)
27959 (uri (pypi-uri "helper" version))
27960 (sha256
27961 (base32
27962 "1d2j64wgbggzv5rhvil10zndp2w78wa5np5w0psj122ws9qr9wsa"))))
27963 (build-system python-build-system)
27964 (native-inputs
27965 (list python-mock))
27966 (propagated-inputs
27967 (list python-logutils python-pyyaml))
27968 (home-page "https://github.com/gmr/helper")
27969 (synopsis "Library for writing configurable applications and daemons")
27970 (description
27971 "This package provides procedures for quickly writing configurable
27972applications and daemons.")
27973 (license license:bsd-3)))
27974
27975(define-public python-qtsass
27976 (package
27977 (name "python-qtsass")
27978 (version "0.3.0")
27979 (source
27980 (origin
27981 ;; There are no tests in the PyPI tarball.
27982 (method git-fetch)
27983 (uri (git-reference
27984 (url "https://github.com/spyder-ide/qtsass/")
27985 (commit (string-append "v" version))))
27986 (file-name (git-file-name name version))
27987 (sha256
27988 (base32 "09s04aa14d8jqbh71clrb5y7vcmkxlp94mwmvzrkxahry3bk03cb"))))
27989 (build-system python-build-system)
27990 (arguments
27991 `(#:test-target "pytest"
27992 #:phases
27993 (modify-phases %standard-phases
27994 ;; Tests need to read and write files.
27995 (add-before 'check 'make-git-checkout-writable
27996 (lambda _
27997 (for-each make-file-writable (find-files "."))
27998 #t)))))
27999 (native-inputs
28000 (list python-pytest python-pytest-cov python-pytest-runner))
28001 (propagated-inputs
28002 (list python-libsass))
28003 (home-page "https://github.com/spyder-ide/qtsass")
28004 (synopsis "Compile SCSS files to valid Qt stylesheets")
28005 (description
28006 "Besides being used in web development, CSS is also the way to stylize
28007Qt-based desktop applications. However, Qt's CSS has a few variations that
28008prevent the direct use of SASS compiler.
28009
28010The purpose of this tool is to fill the gap between SASS and Qt-CSS by
28011handling those variations.")
28012 (license license:expat)))
28013
28014(define-public python-qdarkstyle
28015 (package
28016 (name "python-qdarkstyle")
28017 (version "2.8.1")
28018 (source
28019 (origin
28020 (method url-fetch)
28021 (uri (pypi-uri "QDarkStyle" version))
28022 (sha256
28023 (base32
28024 "0883vzg35fzpyl1aiijzpfcdfvpq5vi325w0m7xkx7nxplh02fym"))))
28025 (build-system python-build-system)
28026 (arguments
28027 `(;; Fails unable to detect valid Qt bindings even when
28028 ;; added as native-inputs.
28029 #:tests? #f))
28030 (propagated-inputs
28031 (list python-helpdev python-qtpy))
28032 (home-page
28033 "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
28034 (synopsis
28035 "Complete dark stylesheet for Python and Qt applications")
28036 (description "QDarkStyle is the most complete dark stylesheet for Python and
28037Qt applications.")
28038 (license license:expat)))
28039
28040(define-public python-bitstring
28041 (package
28042 (name "python-bitstring")
28043 (version "3.1.7")
28044 (source
28045 (origin
28046 (method url-fetch)
28047 (uri (pypi-uri "bitstring" version))
28048 (sha256
28049 (base32
28050 "0jl6192dwrlm5ybkbh7ywmyaymrc3cmz9y07nm7qdli9n9rfpwzx"))))
28051 (build-system python-build-system)
28052 (arguments
28053 `(#:phases
28054 (modify-phases %standard-phases
28055 (replace 'check
28056 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
28057 (when tests?
28058 (add-installed-pythonpath inputs outputs)
28059 (with-directory-excursion "test"
28060 (invoke "pytest")))
28061 #t)))))
28062 (native-inputs
28063 (list python-pytest))
28064 (home-page "https://github.com/scott-griffiths/bitstring")
28065 (synopsis
28066 "Simple construction, analysis and modification of binary data")
28067 (description
28068 "Bitstring is a library for simple construction, analysis and modification
28069 of binary data.")
28070 (license license:expat)))
28071
28072(define-public python-confuse
28073 (package
28074 (name "python-confuse")
28075 (version "1.5.0")
28076 (source
28077 (origin
28078 (method url-fetch)
28079 (uri (pypi-uri "confuse" version))
28080 (sha256
28081 (base32
28082 "0bh2kyj8wd7h9gg4nsvrbykl5ly0f70f0wi3fbm204b1f0fcmywj"))))
28083 (build-system python-build-system)
28084 (propagated-inputs
28085 (list python-pyyaml))
28086 (home-page "https://github.com/beetbox/confuse")
28087 (synopsis "Painless YAML configuration")
28088 (description "Confuse is a configuration library for Python that uses
28089YAML. It takes care of defaults, overrides, type checking, command-line
28090integration, human-readable errors, and standard OS-specific locations.")
28091 (license license:expat)))
28092
28093(define-public python-reflink
28094 (package
28095 (name "python-reflink")
28096 (version "0.2.1")
28097 (source
28098 (origin
28099 (method url-fetch)
28100 (uri (pypi-uri "reflink" version))
28101 (sha256
28102 (base32
28103 "0fkf3sd958g9hvr3jwlhnhqqzrwxljrc3grsf3yknh94vf13a9f9"))))
28104 (build-system python-build-system)
28105 (arguments
28106 `(#:tests? #false)) ; almost all tests want to run mkfs.btrfs
28107 (propagated-inputs
28108 (list python-cffi))
28109 (native-inputs
28110 (list python-pytest python-pytest-runner))
28111 (home-page "https://gitlab.com/rubdos/pyreflink")
28112 (synopsis "Python wrapper around reflink system call")
28113 (description
28114 "Python reflink wraps around platform specific @code{reflink}
28115implementations.")
28116 (license license:expat)))
28117
28118(define-public python-retry
28119 (package
28120 (name "python-retry")
28121 (version "0.9.2")
28122 (source (origin
28123 (method url-fetch)
28124 (uri (pypi-uri "retry" version))
28125 (sha256
28126 (base32 "197v6qrh6858bhzzrjgk2zdqrybppymb1lsvdxnm1i39kfwsigzq"))))
28127 (build-system python-build-system)
28128 (arguments
28129 (list #:phases
28130 #~(modify-phases %standard-phases
28131 (replace 'check
28132 (lambda* (#:key tests? #:allow-other-keys)
28133 (when tests? (invoke "pytest" "-vv")))))))
28134 (native-inputs (list python-pbr python-pytest))
28135 (propagated-inputs (list python-decorator python-py))
28136 (home-page "https://github.com/invl/retry")
28137 (synopsis "Retry decorator")
28138 (description
28139 "@code{retry} is an easy to use retry decorator for Python. It can be
28140used to retry a function a given number of times.")
28141 (license license:asl2.0)))
28142
28143(define-public python-pivy
28144 (package
28145 (name "python-pivy")
28146 (version "0.6.5")
28147 (source
28148 (origin
28149 (method git-fetch)
28150 (uri (git-reference
28151 (url "https://github.com/coin3d/pivy")
28152 (commit version)))
28153 (file-name (git-file-name name version))
28154 (sha256
28155 (base32 "0vids7sxk8w5vr73xdnf8xdci71a7syl6cd35aiisppbqyyfmykx"))))
28156 (build-system python-build-system)
28157 (arguments
28158 `(;; The test suite fails due to an import cycle between 'pivy' and '_coin'
28159 #:tests? #f
28160 #:phases
28161 (modify-phases %standard-phases
28162 (add-after 'unpack 'patch-cmake-include-dirs
28163 (lambda _
28164 ;; Patch buildsystem to respect Coin3D include directory
28165 (substitute* "CMakeLists.txt"
28166 (("\\$\\{SoQt_INCLUDE_DIRS}")
28167 "${Coin_INCLUDE_DIR};${SoQt_INCLUDE_DIRS}"))
28168 #t)))))
28169 (native-inputs
28170 (list cmake swig))
28171 (inputs
28172 (list python-wrapper
28173 qtbase-5
28174 libxi
28175 libice
28176 soqt
28177 glew
28178 coin3D))
28179 (home-page "https://github.com/coin3d/pivy")
28180 (synopsis "Python bindings to Coin3D")
28181 (description
28182 "Pivy provides python bindings for Coin, a 3D graphics library with an
28183Application Programming Interface based on the Open Inventor 2.1 API.")
28184 (license license:isc)))
28185
28186(define-public python-crayons
28187 (package
28188 (name "python-crayons")
28189 (version "0.4.0")
28190 (source
28191 (origin
28192 (method url-fetch)
28193 (uri (pypi-uri "crayons" version))
28194 (sha256
28195 (base32
28196 "0gw106k4b6y8mw7pp52awxyplj2bwvwk315k4sywzwh0g1abfcxx"))))
28197 (build-system python-build-system)
28198 (propagated-inputs
28199 (list python-colorama))
28200 (home-page "https://github.com/MasterOdin/crayons")
28201 (synopsis "TextUI colors for Python")
28202 (description "This package gives you colored strings for the terminal.
28203Crayons automatically wraps a given string in the foreground color and
28204restores the original state after the string is printed.")
28205 (license license:expat)))
28206
28207(define-public python-sane
28208 (package
28209 (name "python-sane")
28210 (version "2.9.1")
28211 (source
28212 (origin
28213 (method url-fetch)
28214 (uri (pypi-uri name version))
28215 (sha256
28216 (base32
28217 "1pi597z94n2mkd821ln52fq0g727n2jxfskf280ip3kf7jw8w294"))))
28218 (build-system python-build-system)
28219 (native-inputs
28220 (list python-pytest))
28221 (inputs
28222 (list sane-backends))
28223 (home-page "https://github.com/python-pillow/Sane")
28224 (synopsis "Python interface to the SANE scanner")
28225 (description "This package provides Python interface to the SANE scanner
28226and frame grabber interface.")
28227 (license (license:non-copyleft
28228 ;; Yet another variant of the X/MIT license.
28229 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
28230
28231(define-public python-scikit-build
28232 (package
28233 (name "python-scikit-build")
28234 (version "0.14.0")
28235 (source
28236 (origin
28237 (method url-fetch)
28238 (uri (pypi-uri "scikit-build" version))
28239 (sha256
28240 (base32 "1wx1m9vnxnnz59lyaisgyxldp313kciyd4af8lf112vb8vbjy9yk"))))
28241 (build-system pyproject-build-system)
28242 (arguments
28243 (list
28244 #:phases
28245 #~(modify-phases %standard-phases
28246 (add-after 'unpack 'patch-cmake-executable
28247 (lambda* (#:key inputs #:allow-other-keys)
28248 (substitute* "skbuild/constants.py"
28249 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
28250 (format #f "~a ~s~%" head
28251 (search-input-file inputs "bin/cmake"))))))
28252 (replace 'check
28253 (lambda* (#:key tests? #:allow-other-keys)
28254 (when tests?
28255 ;; These tests attempt to pull dependencies from the Internet.
28256 (delete-file "tests/test_distribution.py")
28257 (delete-file "tests/test_pep518.py")
28258 (invoke "pytest" "-vv"
28259 "-n" (number->string (parallel-job-count))
28260 "-k" (string-append
28261 ;; These tests attempt to write to read-only
28262 ;; Python install directory.
28263 "not test_install_command "
28264 "and not test_test_command "
28265 "and not test_hello_develop "
28266 ;; These sdist-related tests fail for unknown
28267 ;; reasons (see:
28268 ;; https://github.com/scikit-build/scikit-build/issues/689).
28269 "and not test_hello_sdist_with_base "
28270 "and not test_manifest_in_sdist "
28271 "and not test_hello_sdist "
28272 "and not test_sdist_with_symlinks "
28273 ;; These are not parallel safe and fail
28274 ;; nondeterministically (see:
28275 ;; https://github.com/scikit-build/scikit-build/issues/711).
28276 "and not test_generator_cleanup "
28277 "and not test_generator_selection "))))))))
28278 (native-inputs
28279 (list cmake-minimal
28280 gfortran
28281 git-minimal
28282 ninja
28283 python-coverage
28284 python-cython
28285 python-mock
28286 python-packaging
28287 python-path
28288 python-pytest
28289 python-pytest-cov
28290 python-pytest-mock
28291 python-pytest-virtualenv
28292 python-pytest-xdist
28293 python-requests
28294 python-setuptools-scm))
28295 (propagated-inputs
28296 (list python-distro python-packaging python-wheel))
28297 (home-page "https://github.com/scikit-build/scikit-build")
28298 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
28299 (description "Scikit-build is an improved build system generator for
28300CPython C/C++/Fortran/Cython extensions. It has support for additional
28301compilers, build systems, cross compilation, and locating dependencies and
28302determining their build requirements. The scikit-build package is
28303fundamentally just glue between the @code{setuptools} Python module and
28304CMake.")
28305 (license license:expat)))
28306
28307(define-public python-screenkey
28308 (package
28309 (name "python-screenkey")
28310 (version "1.4")
28311 (source
28312 (origin
28313 (method git-fetch)
28314 (uri (git-reference
28315 (url "https://gitlab.com/screenkey/screenkey")
28316 (commit (string-append "v" version))))
28317 (file-name (git-file-name name version))
28318 (sha256
28319 (base32
28320 "1rfngmkh01g5192pi04r1fm7vsz6hg9k3qd313sn9rl9xkjgp11l"))))
28321 (build-system python-build-system)
28322 (arguments
28323 `(#:phases
28324 (modify-phases %standard-phases
28325 (add-after 'unpack 'fix-dlopen-paths
28326 (lambda* (#:key inputs outputs #:allow-other-keys)
28327 (let* ((x11 (assoc-ref inputs "libx11"))
28328 (xtst (assoc-ref inputs "libxtst")))
28329 (substitute* "Screenkey/xlib.py"
28330 (("libX11.so.6")
28331 (string-append x11 "/lib/libX11.so.6")))
28332 (substitute* "Screenkey/xlib.py"
28333 (("libXtst.so.6")
28334 (string-append xtst "/lib/libXtst.so.6")))
28335 #t)))
28336 (add-after 'install 'wrap-screenkey
28337 (lambda* (#:key outputs #:allow-other-keys)
28338 (wrap-program
28339 (string-append (assoc-ref outputs "out") "/bin/screenkey")
28340 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
28341 `("GI_TYPELIB_PATH"
28342 ":" prefix (,(getenv "GI_TYPELIB_PATH")))))))))
28343 (inputs
28344 (list python-distutils-extra
28345 python-tokenize-rt
28346 libx11
28347 libxtst
28348 gtk+
28349 python-pygobject
28350 python-pycairo
28351 python-setuptools-git
28352 python-babel))
28353 (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
28354 (synopsis
28355 "Screencast tool to display pressed keys")
28356 (description
28357 "Screenkey is a screencast tool to display your keys inspired by
28358Screenflick.")
28359 (license license:gpl3+)))
28360
28361(define-public python-jinja2-cli
28362 (package
28363 (name "python-jinja2-cli")
28364 (version "0.7.0")
28365 (source
28366 (origin
28367 (method url-fetch)
28368 (uri (pypi-uri "jinja2-cli" version))
28369 (sha256
28370 (base32
28371 "0vikx7v6fbvww6kfrv0k5a24jyv3ak7nindg60906pdd1m9qvkcw"))))
28372 (build-system python-build-system)
28373 (propagated-inputs
28374 (list python-jinja2))
28375 (native-inputs
28376 (list python-flake8 python-jinja2 python-pytest))
28377 (home-page "https://github.com/mattrobenolt/jinja2-cli")
28378 (synopsis "Command-line interface to Jinja2")
28379 (description
28380 "This package provides a command-line interface (CLI) to the Jinja2
28381template engine.")
28382 (license license:bsd-3)))
28383
28384(define-public python-readability
28385 (package
28386 (name "python-readability")
28387 (version "0.3.1")
28388 (source
28389 (origin
28390 (method url-fetch)
28391 (uri (pypi-uri "readability" version))
28392 (sha256
28393 (base32
28394 "1b8gq3g2zwvx0aivvdg56cc0bn7xw6f2v6psmxdx9aiipkw0s0zr"))))
28395 (build-system python-build-system)
28396 (home-page
28397 "https://github.com/andreasvc/readability/")
28398 (synopsis
28399 "Measure the readability of a given text using surface
28400characteristics")
28401 (description
28402 "This package provides a Python library that is an implementation of
28403traditional readability measures based on simple surface
28404characteristics. These measures are basically linear regressions based on the
28405number of words, syllables, and sentences.")
28406 (license license:asl2.0)))
28407
28408(define-public python-readability-lxml
28409 (package
28410 (name "python-readability-lxml")
28411 (version "0.8.1")
28412 (source (origin
28413 (method git-fetch)
28414 (uri (git-reference
28415 (url "https://github.com/buriy/python-readability")
28416 (commit (string-append "v" version))))
28417 (file-name (git-file-name name version))
28418 (sha256
28419 (base32
28420 "13nfy2v0pbbf62jn9qwgi489gg97hbb22q6w3f78mnvjxd2m19rh"))
28421 (snippet
28422 #~(begin (delete-file "readability/compat/two.py")))))
28423 (build-system python-build-system)
28424 (arguments
28425 (list
28426 #:phases
28427 #~(modify-phases %standard-phases
28428 (replace 'check
28429 (lambda* (#:key tests? #:allow-other-keys)
28430 (when tests?
28431 (invoke "python" "-m" "pytest" "-v" "tests/")))))))
28432 (propagated-inputs (list python-chardet python-cssselect python-lxml))
28433 (native-inputs (list python-timeout-decorator python-pytest))
28434 (home-page "http://github.com/buriy/python-readability")
28435 (synopsis "HTML to text parser")
28436 (description
28437 "This package provides classes and function that strip gratuitous markup
28438from web pages to make them easier to read.")
28439 (license license:asl2.0)))
28440
28441(define-public python-listparser
28442 (package
28443 (name "python-listparser")
28444 (version "0.18")
28445 (source
28446 (origin
28447 (method url-fetch)
28448 (uri (pypi-uri "listparser" version))
28449 (sha256
28450 (base32
28451 "0hdqs1mmayw1r8yla43hgb4d9y3zqs5483vgf8j9ygczkd2wrq2b"))))
28452 (build-system python-build-system)
28453 (home-page
28454 "https://github.com/kurtmckee/listparser")
28455 (synopsis
28456 "Parse subscription lists in Python")
28457 (description
28458 "This package provides a Python library that can parse OPML, FOAF, and
28459iGoogle subscription lists.")
28460 (license license:expat)))
28461
28462(define-public python-smartypants
28463 (package
28464 (name "python-smartypants")
28465 (version "2.0.1")
28466 (source
28467 (origin
28468 ;; There's no source tarball for 2.0.1 on PyPI.
28469 (method git-fetch)
28470 (uri (git-reference
28471 (url "https://github.com/leohemsted/smartypants.py")
28472 (commit (string-append "v" version))))
28473 (file-name (git-file-name name version))
28474 (sha256
28475 (base32 "00p1gnb9pzb3svdq3c5b9b332gsp50wrqqa39gj00m133zadanjp"))))
28476 (build-system python-build-system)
28477 (arguments
28478 '(#:phases
28479 (modify-phases %standard-phases
28480 (replace 'check
28481 ;; Its `setup.py test` doesn't report failure with exit status, so
28482 ;; we use `nose` instead.
28483 (lambda _
28484 (invoke "nosetests" "-v" "--exclude=^load_tests$"))))))
28485 (native-inputs
28486 ;; For tests.
28487 (list python-docutils python-nose python-pygments))
28488 (home-page "https://github.com/leohemsted/smartypants.py")
28489 (synopsis "Translate punctuation characters into smart quotes")
28490 (description
28491 "@command{smartpants} can perform the following transformations:
28492@enumerate
28493@item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
28494@item Backticks-style quotes (``like this'') into \"curly\" quote HTML
28495entities
28496@item Dashes (-- and ---) into en- and em-dash entities
28497@item Three consecutive dots (... or . . .) into an ellipsis entity
28498@end enumerate")
28499 (license license:bsd-3)))
28500
28501(define-public python-typogrify
28502 (package
28503 (name "python-typogrify")
28504 (version "2.0.7")
28505 (source (origin
28506 (method url-fetch)
28507 (uri (pypi-uri "typogrify" version))
28508 (sha256
28509 (base32
28510 "0f6b2gnnxjbx1fbmkcscc6qjr4hi78kwm1wx4b766ha3va66dr4b"))))
28511 (build-system python-build-system)
28512 (arguments
28513 '(#:phases
28514 (modify-phases %standard-phases
28515 (replace 'check
28516 (lambda _
28517 (invoke "nosetests" "-v"))))))
28518 (propagated-inputs
28519 (list python-smartypants))
28520 (native-inputs
28521 ;; For tests.
28522 (list python-nose))
28523 (home-page "https://github.com/mintchaos/typogrify")
28524 (synopsis "Filters to transform text into typographically-improved HTML")
28525 (description
28526 "@code{typogrify} provides a set of custom filters that automatically
28527apply various transformations to plain text in order to yield
28528typographically-improved HTML. While often used in conjunction with Jinja and
28529Django template systems, the filters can be used in any environment.")
28530 (license license:bsd-3)))
28531
28532(define-public python-ld
28533 (package
28534 (name "python-ld")
28535 (version "0.5.0")
28536 (source
28537 (origin
28538 (method url-fetch)
28539 (uri (pypi-uri "ld" version))
28540 (sha256
28541 (base32
28542 "1k4ydp5rgkv4985v459kcl06i1igjm1ywvh2vkbi9ck1zyyri1z5"))))
28543 (build-system python-build-system)
28544 (propagated-inputs
28545 (list python-six))
28546 (home-page "https://github.com/nir0s/ld")
28547 (synopsis "OS platform information API")
28548 (description
28549 "The ld package provides information about the GNU/Linux distribution it
28550runs on, such as a reliable machine-readable ID, or version information.")
28551 (license license:asl2.0)))
28552
28553(define-public python-quicktions
28554 (package
28555 (name "python-quicktions")
28556 (version "1.11")
28557 (source
28558 (origin
28559 (method url-fetch)
28560 (uri (pypi-uri "quicktions" version))
28561 (sha256
28562 (base32
28563 "1px21a6x527i1bsr2p6bbf3jziqpvd1vjkvvzh13gsy4iip0yvzn"))
28564 (modules '((guix build utils)))
28565 (snippet
28566 '(begin
28567 ;; This file is generated by Cython.
28568 (delete-file "src/quicktions.c") #t))))
28569 (build-system python-build-system)
28570 (arguments
28571 `(#:phases
28572 (modify-phases %standard-phases
28573 (add-before 'build 'cythonize-sources
28574 (lambda _
28575 (with-directory-excursion "src"
28576 (invoke "cython" "quicktions.pyx"))))
28577 (replace 'check
28578 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
28579 (when tests?
28580 (add-installed-pythonpath inputs outputs)
28581 (invoke "pytest"))
28582 #t)))))
28583 (native-inputs
28584 (list python-cython python-pytest))
28585 (home-page "https://github.com/scoder/quicktions")
28586 (synopsis "Fast fractions data type for rational numbers")
28587 (description
28588 "This package provides fast fractions data type for rational numbers. It
28589is the cythonized version of @code{fractions.Fraction}.")
28590 (license license:psfl)))
28591
28592(define-public python-pathvalidate
28593 (package
28594 (name "python-pathvalidate")
28595 (version "2.4.1")
28596 (source
28597 (origin
28598 (method url-fetch)
28599 (uri (pypi-uri "pathvalidate" version))
28600 (sha256
28601 (base32 "0s14ycjgb44lxr2wg8lrq3b7kybmmrbf7yqz47xrqgn2gr6dk6rw"))))
28602 (build-system python-build-system)
28603 (arguments
28604 '(#:tests? #f))
28605 ;; Tests disabled because of circular dependencies.
28606 ;; pathvalidate tests depend on pytest-md-report, which
28607 ;; depends on pathvalidate.
28608 (native-inputs
28609 (list python-allpairspy python-click python-faker python-pytest))
28610 (home-page "https://github.com/thombashi/pathvalidate")
28611 (synopsis "Sanitize strings representing paths")
28612 (description
28613 "@code{pathvalidate} is a Python library to sanitize/validate strings
28614representing paths or filenames.")
28615 (license license:expat)))
28616
28617(define-public python-escapism
28618 (package
28619 (name "python-escapism")
28620 (version "1.0.1")
28621 (source
28622 (origin
28623 (method url-fetch)
28624 (uri (pypi-uri "escapism" version))
28625 (sha256
28626 (base32
28627 "1v74243wifcwhj5zkdiispxc9kb1xvnfzilg8bq308pjnkgnn9bk"))))
28628 (build-system python-build-system)
28629 (home-page "https://github.com/minrk/escapism")
28630 (synopsis "Simple, generic library for escaping strings")
28631 (description
28632 "This Python library provides a programming interface to, given a set of
28633safe characters and an escape character, escape safe strings and unescape the
28634result.")
28635 (license license:expat)))
28636
28637(define-public python-recommonmark
28638 (package
28639 (name "python-recommonmark")
28640 (version "0.7.1")
28641 (source
28642 (origin
28643 (method url-fetch)
28644 (uri (pypi-uri "recommonmark" version))
28645 (sha256
28646 (base32
28647 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
28648 (build-system python-build-system)
28649 (propagated-inputs
28650 (list python-commonmark python-docutils python-sphinx))
28651 (arguments
28652 '(#:phases (modify-phases %standard-phases
28653 (add-after 'unpack 'delete-test-sphinx
28654 (lambda* (#:key outputs #:allow-other-keys)
28655 (let* ((out (assoc-ref outputs "out")))
28656 (delete-file "tests/test_sphinx.py")))))))
28657 (home-page "https://github.com/readthedocs/recommonmark")
28658 (synopsis "Docutils-compatibility bridge to CommonMark")
28659 (description
28660 "This package provides a docutils-compatibility bridge to CommonMark that
28661lets you write CommonMark inside of Docutils & Sphinx projects.")
28662 (license license:expat)))
28663
28664(define-public python-pyhull
28665 (package
28666 (name "python-pyhull")
28667 (version "2015.2.1")
28668 (source
28669 (origin
28670 (method url-fetch)
28671 (uri (pypi-uri "pyhull" version))
28672 (sha256
28673 (base32
28674 "091sph52c4yk1jlm5w8xidxpzbia9r7s42bnb23q4m4b56ihmzyj"))))
28675 (build-system python-build-system)
28676 (propagated-inputs
28677 (list python-numpy))
28678 (home-page "https://github.com/materialsvirtuallab/pyhull")
28679 (synopsis "Python wrapper to Qhull")
28680 (description
28681 "This package provides a Python wrapper to @uref{http://www.qhull.org/,
28682Qhull} for the computation of the convex hull, Delaunay triangulation, and
28683Voronoi diagram.")
28684 (license license:expat)))
28685
28686(define-public python-opcodes
28687 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
28688 ;; version number, which is what we use here.
28689 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
28690 (package
28691 (name "python-opcodes")
28692 (version "0.3.14") ;from 'opcodes/__init__.py'
28693 (home-page "https://github.com/Maratyszcza/Opcodes")
28694 (source (origin
28695 (method git-fetch)
28696 (uri (git-reference (url home-page) (commit commit)))
28697 (file-name (git-file-name name version))
28698 (sha256
28699 (base32
28700 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
28701 (build-system python-build-system)
28702 (synopsis "Database of processor instructions and opcodes")
28703 (description
28704 "This project documents instruction sets in a format convenient for
28705tools development. An instruction set is represented by three files:
28706
28707@itemize
28708@item an XML file that describes instructions;
28709@item an XSD file that describes the structure of the XML file;
28710@item a Python module that reads the XML file and represents it as a set of
28711Python objects;
28712@end itemize
28713
28714It currently provides descriptions for most user-mode x86, x86_64, and k1om
28715instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
28716and BMI2).")
28717 (license license:bsd-2))))
28718
28719(define-public python-peachpy
28720 ;; There is no tag in this repo.
28721 (let ((commit "913d74c35a6b1d330e90bfc055208ce5b06b35a0")
28722 (version "0.2.0") ;from 'peachpy/__init__.py'
28723 (revision "2"))
28724 (package
28725 (name "python-peachpy")
28726 (version (git-version version revision commit))
28727 (home-page "https://github.com/Maratyszcza/PeachPy")
28728 (source (origin
28729 (method git-fetch)
28730 (uri (git-reference (url home-page) (commit commit)))
28731 (file-name (git-file-name name version))
28732 (sha256
28733 (base32
28734 "1wnqxspxsacw4556q0b9fbw11nhrkgn6gs8g43jdnpa35f3z9kb6"))
28735 (patches (search-patches "python-peachpy-determinism.patch"))))
28736 (build-system python-build-system)
28737 (arguments
28738 '(#:phases (modify-phases %standard-phases
28739 (replace 'check
28740 (lambda* (#:key tests? #:allow-other-keys)
28741 (when tests?
28742 (invoke "nosetests")))))))
28743 (native-inputs
28744 (list python-nose python-rednose python-setuptools))
28745 (propagated-inputs
28746 (list python-six python-opcodes))
28747 (synopsis "Efficient assembly code generation in Python")
28748 (description
28749 "PeachPy is a Python framework for writing high-performance assembly kernels.
28750PeachPy aims to simplify writing optimized assembly kernels while preserving
28751all optimization opportunities of traditional assembly.
28752
28753PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
28754for the Go language tool chain; it adapts to different calling conventions and
28755application binary interfaces (ABIs); it takes care of register allocation; it
28756supports x86_64 instructions up to AVX-512 and SHA.")
28757 (license license:bsd-2))))
28758
28759(define-public python-sgmllib3k
28760 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
28761 (revision "1"))
28762 (package
28763 (name "python-sgmllib3k")
28764 (version
28765 (git-version "1.0.0" revision commit))
28766 (source
28767 (origin
28768 (method git-fetch)
28769 (uri (git-reference
28770 (url "https://github.com/hsoft/sgmllib")
28771 (commit commit)))
28772 (file-name (git-file-name name version))
28773 (sha256
28774 (base32
28775 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))))
28776 (build-system python-build-system)
28777 (home-page "https://github.com/hsoft/sgmllib")
28778 (synopsis "Python 3 port of sgmllib")
28779 (description "This package provides an unmaintained port of sgmllib to
28780Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
28781Generalized Mark-up Language}.")
28782 (license license:bsd-3))))
28783
28784(define-public python-cwcwidth
28785 (package
28786 (name "python-cwcwidth")
28787 (version "0.1.4")
28788 (source
28789 (origin
28790 (method url-fetch)
28791 (uri (pypi-uri "cwcwidth" version))
28792 (sha256
28793 (base32
28794 "1azrphpkcyggg38xvkfb9dpc4xmmm90p02kf8dkqd4d6j5w96aj8"))))
28795 (build-system python-build-system)
28796 (native-inputs
28797 (list python-cython python-pytest python-setuptools-scm python-toml
28798 python-wheel))
28799 (home-page
28800 "https://github.com/sebastinas/cwcwidth")
28801 (synopsis "Python bindings for wc(s)width")
28802 (description "This package provides bindings for wcwidth and wcswidth
28803functions defined in POSIX.1-2001 and POSIX.1-2008.")
28804 (license license:expat)))
28805
28806(define-public python-pyan3
28807 (package
28808 (name "python-pyan3")
28809 (version "1.2.0")
28810 (source
28811 (origin
28812 ;; Source tarball on PyPI lacks tests.
28813 (method git-fetch)
28814 (uri (git-reference
28815 (url "https://github.com/Technologicat/pyan")
28816 (commit (string-append "v" version))))
28817 (file-name (git-file-name name version))
28818 (sha256
28819 (base32
28820 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
28821 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
28822 "python-pyan3-fix-absolute-path-bug.patch"))))
28823 (build-system python-build-system)
28824 (arguments
28825 `(#:phases
28826 (modify-phases %standard-phases
28827 (replace 'check
28828 (lambda* (#:key tests? #:allow-other-keys)
28829 (when tests?
28830 ;; Extend PYTHONPATH so the built package will be found.
28831 (setenv "GUIX_PYTHONPATH"
28832 (string-append (getcwd) ":" (getenv "GUIX_PYTHONPATH")))
28833 (invoke "pytest")))))))
28834 (native-inputs
28835 (list python-pytest python-pytest-cov python-wheel))
28836 (propagated-inputs
28837 (list python-jinja2))
28838 (home-page "https://github.com/Technologicat/pyan")
28839 (synopsis "Offline call graph generator for Python 3")
28840 (description "Pyan takes one or more Python source files, performs
28841a (rather superficial) static analysis, and constructs a directed graph of the
28842objects in the combined source, and how they define or use each other. The
28843graph can be output for rendering by GraphViz or yEd.")
28844 (license license:gpl2)))
28845
28846(define-public python-multipledispatch
28847 (package
28848 (name "python-multipledispatch")
28849 (version "0.6.0")
28850 (source
28851 (origin
28852 (method url-fetch)
28853 (uri (pypi-uri "multipledispatch" version))
28854 (sha256
28855 (base32
28856 "1slblghfjg9fdi9zpd7gmrkvfbv20nrdgnrymcnbky8bzm8i9ax7"))))
28857 (build-system python-build-system)
28858 (propagated-inputs (list python-six))
28859 (home-page "https://github.com/mrocklin/multipledispatch/")
28860 (synopsis "Multiple dispatch for Python based on pattern matching")
28861 (description "This library provides an efficient mechanism for overloading
28862function implementations based on the types of the arguments.")
28863 (license license:bsd-3)))
28864
28865(define-public python-logical-unification
28866 (package
28867 (name "python-logical-unification")
28868 (version "0.4.3")
28869 (source
28870 (origin
28871 (method url-fetch)
28872 (uri (pypi-uri "logical-unification" version))
28873 (sha256
28874 (base32
28875 "0j57953hi7kg2rl0163vzjzsvzdyjimnklhx6idf5vaqqf1d3p1j"))))
28876 (build-system python-build-system)
28877 (propagated-inputs
28878 (list python-multipledispatch python-toolz))
28879 (home-page "https://github.com/pythological/unification/")
28880 (synopsis "Logical unification in Python for solving symbolic expressions")
28881 (description "This library provides algorithms and data types for solving
28882symbolic expressions in pure Python using the technique of logical unification.")
28883 (license license:bsd-3)))
28884
28885(define-public python-cons
28886 (package
28887 (name "python-cons")
28888 (version "0.4.2")
28889 (source
28890 (origin
28891 (method url-fetch)
28892 (uri (pypi-uri "cons" version))
28893 (sha256
28894 (base32
28895 "0w9giq196wps7mbm47c4shdzs5yvwvqajqzkim2p92i51sm5qgvm"))))
28896 (build-system python-build-system)
28897 (native-inputs
28898 (list python-pytest-6 python-toml))
28899 (propagated-inputs
28900 (list python-logical-unification))
28901 (home-page "https://github.com/pythological/python-cons")
28902 (synopsis "Cons cell data structures and related algorithms for Python")
28903 (description
28904 "This library implements algorithms and data structures for Lisp-style
28905cons cells in Python.")
28906 (license license:lgpl3+)))
28907
28908(define-public python-etuples
28909 (package
28910 (name "python-etuples")
28911 (version "0.3.3")
28912 (source
28913 (origin
28914 (method url-fetch)
28915 (uri (pypi-uri "etuples" version))
28916 (sha256
28917 (base32
28918 "0jhfyp177v37rl0i7wqfx7q6s5qkz027hl283d1x8d0vm3w0zqc8"))))
28919 (build-system python-build-system)
28920 (propagated-inputs
28921 (list python-cons python-multipledispatch))
28922 (home-page "https://github.com/pythological/etuples")
28923 (synopsis "S-expressions in Python")
28924 (description
28925 "This library implements eval'able S-expression in Python using tuple-like objects.")
28926 (license license:asl2.0)))
28927
28928(define-public python-minikanren
28929 (package
28930 (name "python-minikanren")
28931 (version "1.0.1")
28932 (source
28933 (origin
28934 (method git-fetch)
28935 (uri (git-reference
28936 (url "https://github.com/pythological/kanren")
28937 (commit (string-append "v" version))))
28938 (file-name (git-file-name name version))
28939 (sha256
28940 (base32 "0g7wfj5hxalwz7k1301nsjqhjpzsif1bj6wjm2x2kavlm2ypv9jc"))))
28941 (build-system python-build-system)
28942 (arguments
28943 '(#:phases (modify-phases %standard-phases
28944 (replace 'check
28945 (lambda* (#:key tests? #:allow-other-keys)
28946 (when tests?
28947 (invoke "python" "-m" "pytest" "-v" "tests/" "kanren/"))
28948 #t)))))
28949 (native-inputs
28950 (list python-coveralls
28951 python-pydocstyle
28952 python-pytest
28953 python-pytest-cov
28954 python-pylint
28955 python-black
28956 python-sympy
28957 python-versioneer
28958 python-coverage
28959 python-pre-commit))
28960 (propagated-inputs
28961 (list python-toolz python-cons python-multipledispatch
28962 python-etuples python-logical-unification))
28963 (home-page "https://github.com/pythological/kanren")
28964 (synopsis "Relational logic programming in pure Python")
28965 (description
28966 "The minikanren library provides an algorithmic core for computer algebra
28967systems in Python.")
28968 (license license:bsd-3)))
28969
28970(define-public python-dotenv
28971 (package
28972 (name "python-dotenv")
28973 (version "0.20.0")
28974 (source
28975 (origin
28976 (method url-fetch)
28977 (uri (pypi-uri "python-dotenv" version))
28978 (sha256
28979 (base32 "13s9imfd0k4d7b1qy5wfqzw5vyj6rhmcrccsdz1l4g39b55b1qxp"))))
28980 (build-system python-build-system)
28981 (arguments
28982 `(#:phases
28983 (modify-phases %standard-phases
28984 (replace 'check
28985 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
28986 (when tests?
28987 (add-installed-pythonpath inputs outputs)
28988 (setenv "PATH" (string-append (getenv "PATH") ":"
28989 (assoc-ref outputs "out") "/bin"))
28990 ;; Skip the ipython tests.
28991 (delete-file "tests/test_ipython.py")
28992 (invoke "python" "-m" "pytest")))))))
28993 (propagated-inputs
28994 (list python-click))
28995 (native-inputs
28996 (list python-mock python-pytest python-sh))
28997 (home-page "https://saurabh-kumar.com/python-dotenv/")
28998 (synopsis "Setup environment variables according to .env files")
28999 (description
29000 "This package provides the @code{python-dotenv} Python module to read
29001key-value pairs from a @code{.env} file and set them as environment variables.")
29002 (license license:bsd-3)))
29003
29004(define-public python-dotenv-0.13.0
29005 (package (inherit python-dotenv)
29006 (name "python-dotenv")
29007 (version "0.13.0")
29008 (source
29009 (origin
29010 (method url-fetch)
29011 (uri (pypi-uri "python-dotenv" version))
29012 (sha256
29013 (base32
29014 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))))
29015
29016(define-public date2name
29017 (let ((commit "6c8f37277e8ec82aa50f90b8921422be30c4e798")
29018 (revision "1"))
29019 (package
29020 (name "date2name")
29021 (version (git-version "0.0" revision commit))
29022 (source
29023 (origin
29024 (method git-fetch)
29025 (uri (git-reference
29026 (url "https://github.com/novoid/date2name")
29027 (commit commit)))
29028 (file-name (git-file-name name version))
29029 (sha256
29030 (base32
29031 "1vq96b7n16d932nyfhnzwdwxff0zrqanidmwr4cxj2p67ad9y3w7"))))
29032 (build-system python-build-system)
29033 (arguments
29034 `(#:tests? #f ; no tests
29035 #:phases
29036 (modify-phases %standard-phases
29037 (delete 'build)
29038 (replace 'install
29039 (lambda* (#:key outputs #:allow-other-keys)
29040 (let* ((bindir (string-append (assoc-ref outputs "out") "/bin"))
29041 (binary (string-append bindir "/date2name")))
29042 (mkdir-p bindir)
29043 (copy-file "date2name/__init__.py" binary)
29044 (chmod binary #o555)))))))
29045 (synopsis "Handling time-stamps and date-stamps in file names")
29046 (description "By default, date2name gets the modification time of matching
29047files and directories and adds a datestamp in standard ISO 8601+ format
29048YYYY-MM-DD at the beginning of the file or directory name.")
29049 (home-page "https://github.com/novoid/date2name")
29050 (license license:gpl3+))))
29051
29052(define-public python-braintree
29053 (package
29054 (name "python-braintree")
29055 (version "4.12.0")
29056 (source
29057 (origin
29058 (method url-fetch)
29059 (uri (pypi-uri "braintree" version))
29060 (sha256
29061 (base32 "19kli85q18p80nsn8fm4ql6axpr7bllfqg5chv2ywhr8zr8bssll"))))
29062 (build-system python-build-system)
29063 (propagated-inputs
29064 (list python-requests))
29065 (home-page
29066 "https://developers.braintreepayments.com/python/sdk/server/overview")
29067 (synopsis "Braintree Python Library")
29068 (description "The Braintree Python SDK provides integration access to the
29069Braintree Gateway. Braintree is a US-based payments service provider.")
29070 (license license:expat)))
29071
29072(define-public python-markuppy
29073 (package
29074 (name "python-markuppy")
29075 (version "1.14")
29076 (source
29077 (origin
29078 (method url-fetch)
29079 (uri (pypi-uri "MarkupPy" version))
29080 (sha256
29081 (base32 "0pqdmpxbr8iq22b4css2gz5z6s01ddpzyj25x27kgbs2lp0f5phs"))))
29082 (build-system python-build-system)
29083 (home-page "https://github.com/tylerbakke/MarkupPy")
29084 (synopsis "Pythonic HTML/XML generator")
29085 (description "This Python module attempts to make it easier to generate
29086HTML/XML from a Python program in an intuitive, lightweight, customizable and
29087pythonic way.")
29088 (license license:expat)))
29089
29090(define-public python-tablib
29091 (package
29092 (name "python-tablib")
29093 (version "3.0.0")
29094 (source
29095 (origin
29096 (method url-fetch)
29097 (uri (pypi-uri "tablib" version))
29098 (sha256
29099 (base32 "03f1z6jq6rf67gwhbm9ma4rydm8h447a5nh5lcs5l8jg8l4aqg7q"))))
29100 (build-system python-build-system)
29101 (arguments
29102 '(#:phases
29103 (modify-phases %standard-phases
29104 (replace 'check
29105 (lambda* (#:key tests? #:allow-other-keys)
29106 (when tests?
29107 (setenv "GUIX_PYTHONPATH"
29108 (string-append (getcwd) "/build/lib:"
29109 (getenv "GUIX_PYTHONPATH")))
29110 (invoke "pytest")))))))
29111 (native-inputs
29112 (list python-pandas ;; required for test-suite
29113 python-pytest python-pytest-cov python-setuptools-scm))
29114 (propagated-inputs
29115 (list python-markuppy
29116 python-odfpy
29117 python-openpyxl
29118 python-pyyaml
29119 python-tabulate
29120 python-xlrd
29121 python-xlwt))
29122 (home-page "https://tablib.readthedocs.io")
29123 (synopsis "Format agnostic tabular data library")
29124 (description "@code{tablib} is a format-agnostic tabular dataset library,
29125written in Python. Supported output formats are Excel (Sets + Books),
29126JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
29127TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
29128
29129@code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
29130quite huge, this Guix package doesn't depend on pandas. In case, just also
29131install @code{python-pandas}.")
29132 (license license:expat)))
29133
29134(define-public python-csb43
29135 (package
29136 (name "python-csb43")
29137 (version "0.9.1")
29138 (source
29139 (origin
29140 (method url-fetch)
29141 (uri (pypi-uri "csb43" version))
29142 (sha256
29143 (base32 "0r0csl9npncnkfafg3rg6xr38d1qr0sxvq7wn7mg9bq41hvvh1si"))))
29144 (build-system python-build-system)
29145 (native-inputs
29146 (list python-lxml))
29147 (propagated-inputs
29148 (list python-pycountry python-pyyaml python-tablib))
29149 (home-page "https://bitbucket.org/wmj/csb43")
29150 (synopsis "Tools for converting from the Spanish banks' format CSB norm
2915143 (CSB43)")
29152 (description "This package provides tools to convert files in the format
29153used by multiple Spanish banks (standard 43 of the Spanish Banking Council
29154[CSB43] / Spanish Banking Association [AEB43]) to other formats.
29155
29156Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
29157spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
29158 (license license:lgpl3)))
29159
29160(define-public python-febelfin-coda
29161 (package
29162 (name "python-febelfin-coda")
29163 (version "0.2.0")
29164 (source
29165 (origin
29166 (method url-fetch)
29167 (uri (pypi-uri "febelfin-coda" version))
29168 (sha256
29169 (base32 "1isnf87gxlvfbmackv7b2c978vmnj7ij0v4svhyjl8pbb9hwjsvm"))))
29170 (build-system python-build-system)
29171 (home-page "https://coda.b2ck.com/")
29172 (synopsis "Module to parse Belgian CODA files")
29173 (description "This package provides a module to parse Coded statement of
29174account (CODA) files as defined be the Belgian Febelfin bank standard.")
29175 (license license:bsd-3)))
29176
29177(define-public python-ofxparse
29178 (package
29179 (name "python-ofxparse")
29180 (version "0.21")
29181 (source
29182 (origin
29183 (method url-fetch)
29184 (uri (pypi-uri "ofxparse" version))
29185 (sha256
29186 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
29187 (build-system python-build-system)
29188 (arguments
29189 '(#:phases
29190 (modify-phases %standard-phases
29191 (replace 'check
29192 (lambda* (#:key tests? #:allow-other-keys)
29193 (when tests?
29194 (invoke "nosetests" "-v")))))))
29195 (native-inputs
29196 (list python-nose))
29197 (propagated-inputs
29198 (list python-beautifulsoup4 python-lxml python-six))
29199 (home-page "http://sites.google.com/site/ofxparse")
29200 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
29201format")
29202 (description "@code{ofxparse} is a parser for Open Financial
29203Exchange (.ofx) format files. OFX files are available from almost any online
29204banking site, so they work well if you want to pull together your finances
29205from multiple sources. Online trading accounts also often provide account
29206statements in OFX files.")
29207 (license license:expat)))
29208
29209(define-public python-rfc3339-validator
29210 (package
29211 (name "python-rfc3339-validator")
29212 (version "0.1.4")
29213 (source
29214 (origin
29215 (method url-fetch)
29216 (uri (pypi-uri "rfc3339_validator" version))
29217 (sha256
29218 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
29219 (build-system python-build-system)
29220 (native-inputs (list python-hypothesis
29221 python-pytest
29222 python-pytest-runner
29223 python-strict-rfc3339))
29224 (propagated-inputs (list python-six))
29225 (home-page "https://github.com/naimetti/rfc3339-validator")
29226 (synopsis "Python RFC3339 validator")
29227 (description "This package provides a pure Python RFC3339 validator.")
29228 (license license:expat)))
29229
29230(define-public python-strict-rfc3339
29231 (package
29232 (name "python-strict-rfc3339")
29233 (version "0.7")
29234 (source
29235 (origin
29236 (method git-fetch) ;no tests in pypi release
29237 (uri (git-reference
29238 (url "https://github.com/danielrichman/strict-rfc3339")
29239 (commit (string-append "version-" version))))
29240 (file-name (git-file-name name version))
29241 (sha256
29242 (base32
29243 "0b12bh9v9gwkm89kxbidxw2z81lg8fx1v5fzgs313v1wgx6qb09p"))))
29244 (build-system python-build-system)
29245 (arguments
29246 (list
29247 #:phases
29248 #~(modify-phases %standard-phases
29249 (replace 'check
29250 (lambda* (#:key tests? #:allow-other-keys)
29251 (when tests?
29252 (invoke "pytest" "-vv"
29253 ;; The timestamp to local offset tests fail due to
29254 ;; missing timezone data (see:
29255 ;; https://github.com/danielrichman/strict-rfc3339/issues/9).
29256 "-k" "not LocalOffset")))))))
29257 (native-inputs (list python-pytest))
29258 (home-page "https://github.com/danielrichman/strict-rfc3339")
29259 (synopsis "RFC3339 procedures library")
29260 (description "The @code{strict_rfc3339} Python module provides strict,
29261simple, lightweight RFC3339 procedures. It enables or aims to:
29262@itemize
29263@item Convert UNIX timestamps to and from RFC3339.
29264@item Produce RFC3339 strings with a UTC offset (Z) or with the offset that
29265the C time module reports is the local timezone offset.
29266@item Be simple with minimal dependencies/libraries.
29267@item Avoid timezones as much as possible.
29268@item Be very strict and follow RFC3339.
29269@end itemize")
29270 (license license:gpl3+)))
29271
29272(define-public python-stripe
29273 (package
29274 (name "python-stripe")
29275 (version "2.60.0")
29276 (source
29277 (origin
29278 (method url-fetch)
29279 (uri (pypi-uri "stripe" version))
29280 (sha256
29281 (base32 "0258lzh4qikhinfggnlfh5aklcvg7lrvl8giqrh0yf0l61wvfrl9"))))
29282 (build-system python-build-system)
29283 (arguments
29284 '(#:tests? #f)) ;; tests require network
29285 (propagated-inputs
29286 (list python-requests))
29287 (home-page "https://github.com/stripe/stripe-python")
29288 (synopsis "Python bindings for the Stripe financial services' API")
29289 (description "This package provides access to the Stripe financial
29290services' API. It includes a pre-defined set of classes for API resources
29291that initialize themselves dynamically from API responses which makes it
29292compatible with a wide range of versions of the Stripe API.")
29293 (license license:expat)))
29294
29295(define-public python-platformdirs
29296 (package
29297 (name "python-platformdirs")
29298 (version "2.4.1")
29299 (source
29300 (origin
29301 (method url-fetch)
29302 (uri (pypi-uri "platformdirs" version))
29303 (sha256
29304 (base32 "1njz0h4iky8iglrb85cd07hpa3lp1a2dfr934dj65hxwzvfk61j4"))))
29305 (build-system python-build-system)
29306 (arguments
29307 '(#:phases (modify-phases %standard-phases
29308 (replace 'check
29309 (lambda* (#:key tests? #:allow-other-keys)
29310 (when tests?
29311 (invoke "pytest" "-vv")))))))
29312 (native-inputs
29313 (list python-appdirs python-pytest python-pytest-mock
29314 python-setuptools-scm))
29315 (home-page "https://github.com/platformdirs/platformdirs")
29316 (synopsis "Determine the appropriate platform-specific directories")
29317 (description "When writing applications, finding the right location to
29318store user data and configuration varies per platform. Even for
29319single-platform apps, there may by plenty of nuances in figuring out the right
29320location. This small Python module determines the appropriate
29321platform-specific directories, e.g. the ``user data dir''.")
29322 (license license:expat)))
29323
29324(define-public python-json2html
29325 (package
29326 (name "python-json2html")
29327 (version "1.3.0")
29328 (source
29329 ;; There are no tests in the PyPI tarball.
29330 (origin
29331 (method git-fetch)
29332 (uri (git-reference
29333 (url "https://github.com/softvar/json2html")
29334 (commit (string-append "v" version))))
29335 (file-name (git-file-name name version))
29336 (sha256
29337 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
29338 (build-system python-build-system)
29339 (arguments
29340 '(#:phases
29341 (modify-phases %standard-phases
29342 (replace 'check
29343 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29344 (when tests?
29345 (add-installed-pythonpath inputs outputs)
29346 (invoke "python" "test/run_tests.py")))))))
29347 (home-page "https://github.com/softvar/json2html")
29348 (synopsis "Convert JSON to HTML table")
29349 (description "@code{python-json2html} is a python module to convert JSON
29350into a human readable HTML table representation.")
29351 (license license:expat)))
29352
29353(define-public python-face
29354 (package
29355 (name "python-face")
29356 (version "20.1.1")
29357 (source
29358 (origin
29359 (method url-fetch)
29360 (uri (pypi-uri "face" version))
29361 (sha256
29362 (base32 "0gpd9f0rmbv3rd2szi2na37l29fabkwazikjrxc6wca1lddwlnbx"))))
29363 (build-system python-build-system)
29364 (arguments
29365 '(#:phases
29366 (modify-phases %standard-phases
29367 (replace 'check
29368 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29369 (when tests?
29370 ;; Make installed package available for running the tests.
29371 (add-installed-pythonpath inputs outputs)
29372 (invoke "pytest" "-v")))))))
29373 (native-inputs
29374 (list python-pytest))
29375 (propagated-inputs
29376 (list python-boltons))
29377 (home-page "https://github.com/mahmoud/face")
29378 (synopsis "CLI parsing and dispatching microframework")
29379 (description "@code{python-face} is a Pythonic microframework for building
29380command-line applications.
29381
29382@itemize
29383@item First-class subcommand support
29384@item Powerful middleware architecture
29385@item Separate parser layer
29386@item Built-in flagfile support
29387@item Handy testing utilities
29388@item Themeable help display
29389@end itemize")
29390 (license license:bsd-3)))
29391
29392(define-public python-glom
29393 (package
29394 (name "python-glom")
29395 (version "20.11.0")
29396 (source
29397 (origin
29398 (method url-fetch)
29399 (uri (pypi-uri "glom" version))
29400 (sha256
29401 (base32 "04pba09vdr3qjvqvy14g60fscdsi35chbbyqpczdp76cpir101al"))))
29402 (build-system python-build-system)
29403 (arguments
29404 '(#:phases
29405 (modify-phases %standard-phases
29406 (replace 'check
29407 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29408 (when tests?
29409 ;; Make installed executable available for running the tests.
29410 (setenv "PATH"
29411 (string-append (assoc-ref outputs "out") "/bin"
29412 ":" (getenv "PATH")))
29413 (invoke "pytest" "-v")))))))
29414 (native-inputs
29415 (list python-pytest python-pyyaml))
29416 (propagated-inputs
29417 (list python-attrs python-boltons python-face))
29418 (home-page "https://github.com/mahmoud/glom")
29419 (synopsis "Declaratively restructure data")
29420 (description "Real applications have real data, and real data
29421nests---objects inside of objects inside of lists of objects. glom is a new
29422and powerful way to handle real-world data, featuring:
29423
29424@itemize
29425@item Path-based access to nested data structures
29426@item Readable, meaningful error messages
29427@item Declarative data transformation, using lightweight, Pythonic specifications
29428@item Built-in data exploration and debugging features
29429@end itemize")
29430 (license license:bsd-3)))
29431
29432(define-public python-box
29433 (package
29434 (name "python-box")
29435 (version "5.3.0")
29436 (source
29437 (origin
29438 (method url-fetch)
29439 (uri (pypi-uri "python-box" version))
29440 (sha256
29441 (base32
29442 "0jhrdif57khx2hsw1q6a9x42knwcvq8ijgqyq1jmll6y6ifyzm2f"))))
29443 (build-system python-build-system)
29444 (propagated-inputs
29445 (list python-msgpack python-ruamel.yaml python-toml))
29446 (home-page "https://github.com/cdgriffith/Box")
29447 (synopsis "Advanced Python dictionaries with dot notation access")
29448 (description
29449 "This package provides the @code{python-box} Python module.
29450It implements advanced Python dictionaries with dot notation access.")
29451 (license license:expat)))
29452
29453(define-public python-fields
29454 (package
29455 (name "python-fields")
29456 (version "5.0.0")
29457 (source
29458 (origin
29459 (method url-fetch)
29460 (uri (pypi-uri "fields" version))
29461 (sha256
29462 (base32 "09sppvhhkhkv9zc9g994m53z15v92csxwcf42ggkaknlv01smm1i"))))
29463 (build-system python-build-system)
29464 (home-page "https://python-fields.readthedocs.io/")
29465 (synopsis "Python container class boilerplate killer")
29466 (description "Avoid repetetive boilerplate code in Python classes.")
29467 (license license:bsd-3)))
29468
29469(define-public python-aspectlib
29470 (package
29471 (name "python-aspectlib")
29472 (version "1.5.2")
29473 (source
29474 (origin
29475 (method url-fetch)
29476 (uri (pypi-uri "aspectlib" version))
29477 (sha256
29478 (base32 "1am4ycf292zbmgz791z393v63w7qrynf8q5p9db2wwf2qj1fqxfj"))))
29479 (build-system python-build-system)
29480 (propagated-inputs (list python-fields))
29481 (home-page "https://github.com/ionelmc/python-aspectlib")
29482 (synopsis
29483 "Python monkey-patching and decorators")
29484 (description
29485 "This package provides an aspect-oriented programming, monkey-patch
29486and decorators library. It is useful when changing behavior in existing
29487code is desired. It includes tools for debugging and testing:
29488simple mock/record and a complete capture/replay framework.")
29489 (license license:bsd-2)))
29490
29491(define-public python-ijson
29492 (package
29493 (name "python-ijson")
29494 (version "3.1.4")
29495 (source
29496 (origin
29497 (method url-fetch)
29498 (uri (pypi-uri "ijson" version))
29499 (sha256
29500 (base32 "1sp463ywj4jv5cp6hsv2qwiima30d09xsabxb2dyq5b17jp0640x"))))
29501 (arguments
29502 `(#:phases
29503 (modify-phases %standard-phases
29504 ;; the tests run by the default setup.py require yajl 1.x,
29505 ;; but we have 2.x. yajl 1.x support is going to be removed
29506 ;; anyway, so use pytest to avoid running the yajl1-related
29507 ;; tests. See: https://github.com/ICRAR/ijson/issues/55
29508 (replace 'check
29509 (lambda* (#:key tests? #:allow-other-keys)
29510 (when tests?
29511 (invoke "pytest" "-vv")))))))
29512 (inputs
29513 ;; libyajl is optional, but compiling with it makes faster
29514 ;; backends available to ijson:
29515 (list libyajl))
29516 (native-inputs
29517 (list python-pytest))
29518 (build-system python-build-system)
29519 (home-page "https://github.com/ICRAR/ijson")
29520 (synopsis "Iterative JSON parser with Python iterator interfaces")
29521 (description
29522 "Ijson is an iterative JSON parser with standard Python iterator
29523interfaces.")
29524 (license license:bsd-3)))
29525
29526(define-public python-ordered-set
29527 (package
29528 (name "python-ordered-set")
29529 (version "4.1.0")
29530 (source
29531 (origin
29532 (method url-fetch)
29533 (uri (pypi-uri "ordered-set" version))
29534 (sha256
29535 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
29536 (build-system python-build-system)
29537 (arguments
29538 (list #:phases
29539 #~(modify-phases %standard-phases
29540 (replace 'check
29541 (lambda* (#:key tests? #:allow-other-keys)
29542 (when tests?
29543 (invoke "pytest" "-vv")))))))
29544 (native-inputs (list python-cython python-pytest))
29545 (home-page "https://github.com/simonpercivall/orderedset")
29546 (synopsis "Ordered Set implementation in Cython")
29547 (description "This library provides an @code{OrderedSet} data type that
29548works like a regular set, but remembers insertion order. It supports the full
29549Python @code{set} interface.")
29550 (license license:asl2.0)))
29551
29552(define-public python-orgparse
29553 (package
29554 (name "python-orgparse")
29555 (version "0.3.0")
29556 (source
29557 (origin
29558 (method url-fetch)
29559 (uri (pypi-uri "orgparse" version))
29560 (sha256
29561 (base32 "14iv4pg3rma9560plg0w943x04mr2cmrssda43y2d1x9acrd2n71"))))
29562 (build-system python-build-system)
29563 (arguments
29564 `(#:phases
29565 (modify-phases %standard-phases
29566 (replace 'check
29567 (lambda* (#:key tests? #:allow-other-keys)
29568 (when tests?
29569 (invoke "pytest" "-vv" "orgparse/tests")))))))
29570 (native-inputs
29571 (list python-pytest python-setuptools-scm))
29572 (home-page "https://github.com/karlicoss/orgparse")
29573 (synopsis "Emacs Org mode parser in Python")
29574 (description
29575 "This package is a Python module for reading Emacs Org mode files.")
29576 (license license:bsd-3)))
29577
29578(define-public dynaconf
29579 (package
29580 (name "dynaconf")
29581 (version "3.1.7")
29582 (source
29583 (origin
29584 (method git-fetch)
29585 (uri
29586 (git-reference
29587 (url "https://github.com/rochacbruno/dynaconf")
29588 (commit version)))
29589 (file-name (git-file-name name version))
29590 (sha256
29591 (base32
29592 "0pjyjsdzairpn5vq8nzddhxwxmr18grn272nj31wcy2ipwdl3c3h"))
29593 (patches (search-patches "dynaconf-unvendor-deps.patch"))
29594 (modules '((guix build utils)))
29595 (snippet '(begin
29596 ;; Remove vendored dependencies
29597 (let ((unvendor '("click" "dotenv" "ruamel" "toml")))
29598 (with-directory-excursion "dynaconf/vendor"
29599 (for-each delete-file-recursively unvendor))
29600 (with-directory-excursion "dynaconf/vendor_src"
29601 (for-each delete-file-recursively unvendor)))))))
29602 (build-system python-build-system)
29603 (arguments
29604 `(#:phases
29605 (modify-phases %standard-phases
29606 (add-after 'unpack 'patch-for-click-8
29607 (lambda _
29608 (substitute* "dynaconf/cli.py"
29609 (("click.get_os_args\\()") ;deprecated from Click 8.1+
29610 "sys.argv[1:]"))))
29611 (replace 'check
29612 (lambda* (#:key tests? outputs #:allow-other-keys)
29613 (when tests?
29614 ;; These tests depend on hvac and a live Vault process.
29615 (delete-file "tests/test_vault.py")
29616 (invoke "make" "test_only")))))))
29617 (propagated-inputs
29618 (list python-click python-configobj python-dotenv-0.13.0
29619 python-ruamel.yaml python-toml))
29620 (native-inputs
29621 (list python-django python-flask python-pytest python-pytest-cov
29622 python-pytest-mock))
29623 (home-page "https://www.dynaconf.com/")
29624 (synopsis "The dynamic configurator for your Python project")
29625 (description
29626 "This package provides @code{dynaconf} the dynamic configurator manager for
29627your Python project. It provides features such as:
29628
29629@itemize
29630@item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
29631@item Settings management (default values, validation, parsing, templating);
29632@item Protection of sensitive information (passwords/tokens);
29633@item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
29634loaders;
29635@item Full support for environment variables to override existing settings
29636(dotenv support included);
29637@item Optional layered system for multiple environments @code{[default,
29638development, testing, production]};
29639@item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
29640@item Built-in extensions for Django and Flask web frameworks;
29641@item CLI for common operations such as @code{init, list, write, validate, export}.
29642@end itemize")
29643 (license license:expat)))
29644
29645(define-public python-pudb
29646 (package
29647 (name "python-pudb")
29648 (version "2022.1.3")
29649 (source (origin
29650 (method url-fetch)
29651 (uri (pypi-uri "pudb" version))
29652 (sha256
29653 (base32
29654 "0jk61qgacvwy6zkz1f55jawax4ggb1aawy6w3wnfkzqrkvd3ms2q"))))
29655 (build-system python-build-system)
29656 (arguments
29657 `(#:phases (modify-phases %standard-phases
29658 (add-before 'check 'fix-read-only-home
29659 (lambda _
29660 (setenv "HOME" "/tmp")))
29661 (replace 'check
29662 (lambda* (#:key tests? #:allow-other-keys)
29663 (when tests?
29664 (invoke "pytest" "-vv")))))))
29665 (native-inputs (list python-pytest python-pytest-mock python-numpy))
29666 (propagated-inputs (list python-jedi python-pygments python-urwid
29667 python-urwid-readline))
29668 (home-page "https://documen.tician.de/pudb/")
29669 (synopsis "Console-based Python debugger")
29670 (description
29671 "@command{pudb} is a full-screen, console-based Python debugger providing
29672all the niceties of modern GUI-based debuggers in a more lightweight and
29673keyboard-friendly package.")
29674 (license license:expat)))
29675
29676(define-public pudb
29677 (deprecated-package "pudb" python-pudb))
29678
29679(define-public python-iwlib
29680 (package
29681 (name "python-iwlib")
29682 (version "1.7.0")
29683 (source
29684 (origin
29685 (method url-fetch)
29686 (uri (pypi-uri "iwlib" version))
29687 (sha256
29688 (base32 "18bd35wn7zclalpqbry42pf7bjrdggxkkw58mc0k1vkhg9czc1d8"))))
29689 (build-system python-build-system)
29690 (inputs
29691 (list wireless-tools))
29692 (propagated-inputs (list python-cffi))
29693 (home-page "https://github.com/nhoad/python-iwlib")
29694 (synopsis "Python module to interface with iwlib")
29695 (description
29696 "This package provides a Python interface to iw wireless tools.")
29697 (license license:gpl2)))
29698
29699(define-public python-pdoc3
29700 (package
29701 (name "python-pdoc3")
29702 (version "0.10.0")
29703 (source
29704 (origin
29705 (method url-fetch)
29706 (uri (pypi-uri "pdoc3" version))
29707 (sha256
29708 (base32 "1dz4hw10ngidzg9cjvflc8nlrwrjbb3ijhmaw4w6f039p6yff8jz"))
29709 (patches
29710 (search-patches "python-pdoc3-tests.patch"))))
29711 (build-system python-build-system)
29712 (native-inputs
29713 (list python-setuptools-git python-setuptools-scm))
29714 (propagated-inputs (list python-mako python-markdown))
29715 (home-page "https://pdoc3.github.io/pdoc/")
29716 (synopsis "Auto-generate API documentation for Python projects")
29717 (description
29718 "This package auto-generates API documentation from Python projects
29719already existing modules and objects docstrings.")
29720 (license license:agpl3+)))
29721
29722(define-public python-piexif
29723 (package
29724 (name "python-piexif")
29725 (version "1.1.3")
29726 (source
29727 (origin
29728 (method url-fetch)
29729 (uri (pypi-uri "piexif" version ".zip"))
29730 (sha256
29731 (base32 "06sz58q4mrw472p8fbnq7wsj8zpi5js5r8phm2hiwfmz0v33bjw3"))
29732 (patches
29733 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
29734 (build-system python-build-system)
29735 (native-inputs
29736 (list unzip python-pillow))
29737 (home-page "https://github.com/hMatoba/Piexif")
29738 (synopsis "Simplify exif manipulations with Python")
29739 (description "Piexif simplifies interacting with EXIF data in
29740Python. It includes the tools necessary for extracting, creating,
29741manipulating, converting and writing EXIF data to JPEG, WebP and TIFF files.")
29742 (license license:expat)))
29743
29744(define-public python-pyrss2gen
29745 (package
29746 (name "python-pyrss2gen")
29747 (version "1.1")
29748 (source
29749 (origin
29750 (method url-fetch)
29751 (uri (pypi-uri "PyRSS2Gen" version))
29752 (sha256
29753 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
29754 (build-system python-build-system)
29755 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
29756 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
29757 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
29758PyRSS2Gen builds the feed up by using a XML generator.")
29759 (license license:bsd-3)))
29760
29761(define-public python-yapsy
29762 (package
29763 (name "python-yapsy")
29764 (version "1.12.2")
29765 (source
29766 (origin
29767 (method url-fetch)
29768 (uri (pypi-uri "Yapsy" version))
29769 (sha256
29770 (base32 "12rznbnswfw0w7qfbvmmffr9r317gl1rqg36nijwzsklkjgks4fq"))))
29771 (build-system python-build-system)
29772 (home-page "http://yapsy.sourceforge.net")
29773 (synopsis "Simple plugin system for Python applications")
29774 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
29775implementing the core mechanisms needed to build a plugin system into a wider
29776application.
29777
29778The main purpose is to depend only on Python's standard libraries and to
29779implement only the basic functionalities needed to detect, load and keep track
29780of several plugins.")
29781 (license license:bsd-3)))
29782
29783(define-public python-doit
29784 (package
29785 (name "python-doit")
29786 (version "0.34.0")
29787 (source
29788 (origin
29789 (method url-fetch)
29790 (uri (pypi-uri "doit" version))
29791 (sha256
29792 (base32 "0bf0m9n0hyjvjpv051zd26725j8jr23gyvc37v3kkadwbh8dxwcf"))))
29793 (build-system python-build-system)
29794 (propagated-inputs
29795 (list python-cloudpickle python-pyinotify))
29796 (native-inputs
29797 (list python-pytest))
29798 (home-page "https://pydoit.org")
29799 (synopsis "Automation tool to execute any kind of task in a build-tools
29800fashion")
29801 (description "doit is an automation tool that brings the power of
29802build-tools to execute any kind of task.
29803
29804A task describes some computation to be done (actions), and contains some
29805extra meta-data. The actions can be external programs or Python functions. A
29806single task may define more than one action.doit uses the task’s meta-data
29807to:
29808
29809@itemize
29810@item cache task results
29811@item correct execution order
29812@item parallel execution
29813@item powerful dependency system
29814@end itemize")
29815 (license license:expat)))
29816
29817(define-public python-phpserialize
29818 (package
29819 (name "python-phpserialize")
29820 (version "1.3")
29821 (source
29822 (origin
29823 (method url-fetch)
29824 (uri (pypi-uri "phpserialize" version))
29825 (sha256
29826 (base32 "19qgkb9z4zjbjxlpwh2w6pxkz2j3iymnydi69jl0jg905lqjsrxz"))))
29827 (build-system python-build-system)
29828 (arguments
29829 (list
29830 ;; tests missing in pypi archive, anhow they are quite simple and not worth any hassle
29831 #:tests? #f))
29832 (home-page "http://github.com/mitsuhiko/phpserialize")
29833 (synopsis "Python port of the serialize and unserialize functions of PHP")
29834 (description
29835 "This package provides a port of the serialize and unserialize functions of PHP for Python")
29836 (license license:bsd-3)))
29837
29838(define-public nikola
29839 (package
29840 (name "nikola")
29841 (version "8.2.2")
29842 (source
29843 (origin
29844 (method url-fetch)
29845 (uri (pypi-uri "Nikola" version))
29846 (sha256
29847 (base32 "1h96y4sfypp2fbqxa8xrqch5f7r3srm2ly222k9w2n143h2spx4m"))))
29848 (build-system python-build-system)
29849 (propagated-inputs
29850 (list python-babel
29851 python-blinker
29852 python-dateutil
29853 python-docutils
29854 python-doit
29855 python-jinja2 ;; for themes
29856 python-lxml
29857 python-mako
29858 python-markdown
29859 python-natsort
29860 python-notebook ;; for ipynb
29861 python-phpserialize ;; for wordpress import
29862 python-piexif
29863 python-pillow
29864 python-pygments
29865 python-pyrss2gen
29866 python-requests
29867 python-ruamel.yaml ;; for YAML metadata
29868 python-unidecode
29869 python-yapsy))
29870 (native-inputs
29871 (list python-coverage
29872 python-flake8
29873 python-freezegun
29874 python-pytest
29875 python-pytest-cov))
29876 (arguments
29877 (list
29878 #:phases
29879 #~(modify-phases %standard-phases
29880 (replace 'check
29881 (lambda* (#:key tests? #:allow-other-keys)
29882 (when tests?
29883 (invoke "pytest" "tests" "--no-cov"
29884 "-k" "not test_compiling_markdown[hilite]")))))))
29885 (home-page "https://getnikola.com/")
29886 (synopsis "Modular, fast and simple static website and blog generator")
29887 (description "Nikola generates static websites and blogs. Out of the box,
29888it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
29889and has plugins for many other formats.")
29890 (license license:expat)))
29891
29892(define-public nbss-upload
29893 (package
29894 (name "nbss-upload")
29895 (version "0.1")
29896 (source
29897 (origin
29898 (method url-fetch)
29899 (uri (pypi-uri "nbss-upload" version))
29900 (sha256
29901 (base32 "0jhyfm7w2ssknmh9789fmpnf79xr7sxbdcjwak6hfha6qparvk38"))))
29902 (build-system python-build-system)
29903 (propagated-inputs
29904 (list python-requests))
29905 (arguments
29906 `(#:tests? #f)) ;no tests
29907 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
29908 (synopsis "Upload notebooks to a notebooksharing.space instance")
29909 (description
29910"Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
29911notebooksharing.space instance.")
29912 (license license:bsd-3)))
29913
29914(define-public python-reedsolo
29915 (package
29916 (name "python-reedsolo")
29917 (version "1.5.4")
29918 (source
29919 (origin
29920 (method url-fetch)
29921 (uri (pypi-uri "reedsolo" version))
29922 (sha256
29923 (base32 "09q15ji9iac3nmmxrcdvz8ynldvvqanqy3hs6q3cp327hgf5rcmq"))))
29924 (build-system python-build-system)
29925 (home-page "https://github.com/tomerfiliba/reedsolomon")
29926 (synopsis "Pure-Python Reed Solomon encoder/decoder")
29927 (description "A pure-python universal errors-and-erasures Reed-Solomon
29928Codec, based on the tutorial at Wikiversity. This is a burst-type
29929implementation, so that it supports any Galois field higher than 2^3,
29930but not binary streams.")
29931 (license license:public-domain)))
29932
29933(define-public python-esprima
29934 (package
29935 (name "python-esprima")
29936 (version "4.0.1")
29937 (source
29938 (origin
29939 (method url-fetch)
29940 (uri (pypi-uri "esprima" version))
29941 (sha256
29942 (base32 "1vi32g991lxcxzmncfiszh8m9bwkh4887szskkdi0a9wdn3imnq8"))))
29943 (build-system python-build-system)
29944 (home-page "https://github.com/Kronuz/esprima-python")
29945 (synopsis
29946 "ECMAScript parsing infrastructure for analysis in Python")
29947 (description
29948 "This package provides ECMAScript parsing infrastructure for
29949multipurpose analysis in Python.")
29950 (license license:bsd-3)))
29951
29952(define-public python-types-dataclasses
29953 (package
29954 (name "python-types-dataclasses")
29955 (version "0.6.1")
29956 (source (origin
29957 (method url-fetch)
29958 (uri (pypi-uri "types-dataclasses" version))
29959 (sha256
29960 (base32
29961 "1mq6qd365m8ml889zl5dxj9kncjv71iq1d1fvgj59y0ixlpm6s35"))))
29962 (build-system python-build-system)
29963 (home-page "https://github.com/python/typeshed")
29964 (synopsis "Typing stubs for dataclasses")
29965 (description
29966 "This package provides a collection of library stubs for Python, with
29967static types.")
29968 (license license:asl2.0)))
29969
29970(define-public python-types-docutils
29971 (package
29972 (name "python-types-docutils")
29973 (version "0.18.2")
29974 (source
29975 (origin
29976 (method url-fetch)
29977 (uri (pypi-uri "types-docutils" version))
29978 (sha256
29979 (base32 "14ypv0x6fk1pjw0bvvr1lkb2g6dvq2pwvbd5b5pzjl6182fhmaim"))))
29980 (build-system python-build-system)
29981 (home-page "https://github.com/python/typeshed")
29982 (synopsis "Typing stubs for docutils")
29983 (description "This package provides a collection of library stubs for
29984Python, with static types.")
29985 (license license:asl2.0)))
29986
29987(define-public python-psycopg2-binary
29988 (package
29989 (name "python-psycopg2-binary")
29990 (version "2.9.3")
29991 (source (origin
29992 (method url-fetch)
29993 (uri (pypi-uri "psycopg2-binary" version))
29994 (sha256
29995 (base32
29996 "0kpaxg3lg5wg5ww5kxmzi2z2d7arsx13ci915d8a2pf17lqza7bn"))))
29997 (build-system python-build-system)
29998 (inputs (list postgresql))
29999 (arguments
30000 ;; Tests are disable because they need a live instance of PostgreSQL.
30001 '(#:tests? #f))
30002 (home-page "https://psycopg.org/")
30003 (synopsis "PostgreSQL database adapter for Python")
30004 (description
30005 "Psycopg is a PostgreSQL database adapter for the Python programming
30006language. Its main features are the complete implementation of the Python DB
30007API 2.0 specification and the thread safety (several threads can share the
30008same connection). It was designed for heavily multi-threaded applications
30009that create and destroy lots of cursors and make a large number of concurrent
30010@code{INSERT}s or @code{UPDATE}s.
30011
30012Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
30013being both efficient and secure. It features client-side and
30014server-side cursors, asynchronous communication and notifications,
30015@code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
30016out-of-the-box and adapted to matching PostgreSQL data types;
30017adaptation can be extended and customized thanks to a flexible objects
30018adaptation system.
30019
30020Psycopg 2 is both Unicode and Python 3 friendly.")
30021 (license license:lgpl3+)))
30022
30023(define-public python-pyfuse3
30024 (package
30025 (name "python-pyfuse3")
30026 (version "3.2.1")
30027 (source
30028 (origin
30029 (method url-fetch)
30030 (uri (pypi-uri "pyfuse3" version))
30031 (sha256
30032 (base32 "0cvybynv9igssfa4l13q09gb6m7afmwk34wsbq8jk14sqpd4dl92"))))
30033 (build-system python-build-system)
30034 (native-inputs (list pkg-config))
30035 (inputs (list fuse-3))
30036 (propagated-inputs (list python-pytest-trio))
30037 (home-page "https://github.com/libfuse/pyfuse3")
30038 (synopsis "Python bindings FUSE 3")
30039 (description "This package provides Python 3 bindings for libfuse 3 with
30040async I/O support.")
30041 (license license:gpl2+)))
30042
30043(define-public python-ansicolors
30044 (package
30045 (name "python-ansicolors")
30046 (version "1.1.8")
30047 (source
30048 (origin
30049 (method url-fetch)
30050 (uri (pypi-uri "ansicolors" version ".zip"))
30051 (sha256
30052 (base32 "1q3jqglkq4z0f6nkkn8bswcwqg012i2grrc27kabr8286dg4zycr"))))
30053 (build-system python-build-system)
30054 (native-inputs
30055 (list python-tox
30056 python-pytest-cov
30057 unzip))
30058 (home-page "https://github.com/jonathaneunice/colors/")
30059 (synopsis "ANSI colors for Python")
30060 (description
30061 "This package adds ANSI colors and decorations to your strings.")
30062 (license license:isc)))
30063
30064(define-public python-types-freezegun
30065 (package
30066 (name "python-types-freezegun")
30067 (version "1.1.8")
30068 (source
30069 (origin
30070 (method url-fetch)
30071 (uri (pypi-uri "types-freezegun" version))
30072 (sha256
30073 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
30074 (build-system python-build-system)
30075 (home-page "https://github.com/python/typeshed")
30076 (synopsis "Typing stubs for @code{freezegun}")
30077 (description "This package contains typing stubs for for @code{freezegun}, a
30078very small subset the Python stubs contained in the complete @code{typeshed}
30079collection.")
30080 (license license:asl2.0)))
30081
30082(define-public python-types-protobuf
30083 (package
30084 (name "python-types-protobuf")
30085 (version "3.20.1")
30086 (source (origin
30087 (method url-fetch)
30088 (uri (pypi-uri "types-protobuf" version))
30089 (sha256
30090 (base32
30091 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
30092 (build-system python-build-system)
30093 (home-page "https://github.com/python/typeshed")
30094 (synopsis "Typing stubs for @code{protobuf}")
30095 (description "This package contains typing stubs for @code{protobuf}, a
30096very small subset the Python stubs contained in the complete @code{typeshed}
30097collection.")
30098 (license license:asl2.0)))
30099
30100(define-public python-types-pytz
30101 (package
30102 (name "python-types-pytz")
30103 (version "2021.3.6")
30104 (source
30105 (origin
30106 (method url-fetch)
30107 (uri (pypi-uri "types-pytz" version))
30108 (sha256
30109 (base32 "14yr5hg2ww8s4a0mz2bkd549fv8qgm538fnzxvqv92ld1pcpym3l"))))
30110 (build-system python-build-system)
30111 (home-page "https://github.com/python/typeshed")
30112 (synopsis "Typing stubs for pytz")
30113 (description "This package contains typing stubs for @code{pytz}, a very
30114small subset the Python stubs contained in the complete @code{typeshed}
30115collection.")
30116 (license license:asl2.0)))
30117
30118(define-public python-types-toml
30119 (package
30120 (name "python-types-toml")
30121 (version "0.10.5")
30122 (source
30123 (origin
30124 (method url-fetch)
30125 (uri (pypi-uri "types-toml" version))
30126 (sha256
30127 (base32 "10400bd3yv6rjfnq8galskkbpqz1sfx9sfgr5qwvw04270x4cjgr"))))
30128 (build-system python-build-system)
30129 (home-page "https://github.com/python/typeshed")
30130 (synopsis "Typing stubs for TOML")
30131 (description "This package contains typing stubs for TOML, a very small
30132subset the Python stubs contained in the complete @code{typeshed}
30133collection.")
30134 (license license:asl2.0)))
30135
30136(define-public python-types-ujson
30137 (package
30138 (name "python-types-ujson")
30139 (version "4.2.1")
30140 (source (origin
30141 (method url-fetch)
30142 (uri (pypi-uri "types-ujson" version))
30143 (sha256
30144 (base32
30145 "0k9n9hsq4k2zaakdwbkcsvi7m8d3mv2y9yl6f171y58ld4qpcxcy"))))
30146 (build-system python-build-system)
30147 (home-page "https://github.com/python/typeshed")
30148 (synopsis "Typing stubs for ujson")
30149 (description
30150 "This is a PEP 561 type stub package for the ujson package. It can be
30151used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
30152uses ujson.")
30153 (license license:asl2.0)))
30154
30155(define-public python-stltools
30156 (package
30157 (name "python-stltools")
30158 (version "2022.01.20")
30159 (source (origin
30160 (method git-fetch)
30161 (uri (git-reference
30162 (url "https://github.com/rsmith-nl/stltools")
30163 (commit version)))
30164 (file-name (git-file-name name version))
30165 (sha256
30166 (base32
30167 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
30168 (build-system python-build-system)
30169 (arguments
30170 `(#:use-setuptools? #f
30171 #:phases
30172 (modify-phases %standard-phases
30173 (delete 'build)
30174 (replace 'install
30175 (lambda* (#:key inputs outputs #:allow-other-keys)
30176 (let ((moddir (string-append (site-packages inputs outputs) "/stltools"))
30177 (bindir (string-append (assoc-ref outputs "out") "/bin")))
30178 (copy-recursively "stltools" moddir)
30179 (mkdir-p bindir)
30180 (for-each
30181 (lambda (script)
30182 (let ((source (string-append script ".py"))
30183 (target (string-append bindir "/" script)))
30184 (copy-file source target)
30185 (chmod target #o555)))
30186 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo")))))
30187 (replace 'check
30188 (lambda* (#:key tests? #:allow-other-keys)
30189 (when tests?
30190 (invoke "py.test" "-v")))))))
30191 (propagated-inputs (list python-pycairo))
30192 (native-inputs (list python-pytest))
30193 (home-page "https://github.com/rsmith-nl/stltools")
30194 (synopsis "Python modules and scripts for handling STL files")
30195 (description "This package consists of Python modules and scripts for
30196manipulating stereolithography (STL) files. It can convert STL files into
30197POV-ray meshes, PDF and PostScript. The Python modules allow for reading and
30198writing STL files. It supports both the text and binary forms of STL.")
30199 (license license:expat)))
30200
30201(define-public python-multipart
30202 (package
30203 (name "python-multipart")
30204 (version "0.0.5")
30205 (source (origin
30206 (method url-fetch)
30207 (uri (pypi-uri "python-multipart" version))
30208 (sha256
30209 (base32
30210 "0hzshd665rl1bkwvaj9va4j3gs8nmb478fbvligx20663xhmzfzp"))))
30211 (build-system python-build-system)
30212 (propagated-inputs (list python-six))
30213 (native-inputs (list python-pyyaml python-mock python-pytest-cov))
30214 (arguments
30215 `(#:phases (modify-phases %standard-phases
30216 ;; There is a bug in the test_suit specification.
30217 (add-after 'unpack 'patch-test-suite
30218 (lambda _
30219 ;; Make compatible with PyYAML 6.
30220 (substitute* "multipart/tests/test_multipart.py"
30221 (("yaml.load")
30222 "yaml.safe_load"))
30223 (substitute* "setup.py"
30224 (("test_suite = 'multipart.tests.suite'")
30225 "test_suite = 'multipart.tests.test_multipart.suite'"))
30226 ;; Needed by PyYAML 6.0.
30227 (substitute* "multipart/tests/test_multipart.py"
30228 (("yaml_data = yaml.load\\(f\\)")
30229 "yaml_data = yaml.load(f, Loader=yaml.SafeLoader)")))))))
30230 (home-page "https://github.com/andrew-d/python-multipart")
30231 (synopsis "Streaming multipart parser for Python")
30232 (description
30233 "This package provides a streaming multipart parser for Python.")
30234 (license license:asl2.0)))
30235
30236(define-public python-aiopg
30237 (package
30238 (name "python-aiopg")
30239 (version "1.3.3")
30240 (source (origin
30241 (method url-fetch)
30242 (uri (pypi-uri "aiopg" version))
30243 (sha256
30244 (base32
30245 "1mwmypsfzh8adjbyvf7kqv9h3k1kf5ykhi1g3ahw4wqdxaj6nz2l"))))
30246 (build-system python-build-system)
30247 (native-inputs (list python-sqlalchemy))
30248 (propagated-inputs (list python-async-timeout python-psycopg2-binary))
30249 (home-page "https://aiopg.readthedocs.io")
30250 (synopsis "Postgres integration with asyncio")
30251 (description
30252 "aiopg is a library for accessing a PostgreSQL
30253database from the asyncio (PEP-3156/tulip) framework. It wraps
30254asynchronous features of the Psycopg database driver.")
30255 (license license:bsd-3)))
30256
30257(define-public python-verspec
30258 (package
30259 (name "python-verspec")
30260 (version "0.1.0")
30261 (source (origin
30262 (method url-fetch)
30263 (uri (pypi-uri "verspec" version))
30264 (sha256
30265 (base32
30266 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
30267 (build-system python-build-system)
30268 (native-inputs (list python-coverage python-flake8 python-mypy
30269 python-pretend python-pytest))
30270 (arguments
30271 `(#:phases (modify-phases %standard-phases
30272 (replace 'check
30273 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30274 (when tests?
30275 (add-installed-pythonpath inputs outputs)
30276 (invoke "touch" "test/__init__.py")
30277 (invoke "pytest")))))))
30278 (home-page "https://github.com/jimporter/verspec")
30279 (synopsis "Flexible version handling for Python")
30280 (description
30281 "This Python library handles software versions and specifiers. It is
30282adapted from the @code{packaging} package.")
30283 (license (list license:bsd-2 license:asl2.0))))
30284
30285(define-public python-shtab
30286 (package
30287 (name "python-shtab")
30288 (version "1.5.3")
30289 (source
30290 (origin
30291 (method url-fetch)
30292 (uri (pypi-uri "shtab" version))
30293 (sha256
30294 (base32 "127mymfm7r0hddk2vknqq34fj6dirj6ip990i3g4isx0lsd7pnsc"))))
30295 (build-system python-build-system)
30296 (native-inputs
30297 (list bash
30298 python-pytest
30299 python-pytest-cov
30300 python-pytest-timeout
30301 python-setuptools-scm
30302 python-wheel))
30303 (arguments
30304 `(#:phases
30305 (modify-phases %standard-phases
30306 (replace
30307 'check
30308 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30309 (when tests?
30310 (add-installed-pythonpath inputs outputs)
30311 (invoke "pytest")))))))
30312 (home-page "https://github.com/iterative/shtab")
30313 (synopsis "Automagic shell tab completion for Python CLI applications")
30314 (description
30315 "This package automatically generates shell tab completion scripts for
30316Python CLI apps.")
30317 (license license:asl2.0)))
30318
30319(define-public python-style
30320 (package
30321 (name "python-style")
30322 (version "1.1.6")
30323 (source
30324 (origin
30325 (method url-fetch)
30326 (uri (pypi-uri "style" version))
30327 (sha256
30328 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
30329 (build-system python-build-system)
30330 (home-page "https://github.com/lmittmann/style")
30331 (synopsis "Terminal string styling")
30332 (description
30333"@code{python-style} is a simple terminal string styling package. Its API is
30334a port of the chalk package for javascript.")
30335 (license license:expat)))
30336
30337(define-public python-sre-yield
30338 (package
30339 (name "python-sre-yield")
30340 (version "1.2")
30341 (source
30342 (origin
30343 (method url-fetch)
30344 (uri (pypi-uri "sre_yield" version))
30345 (sha256
30346 (base32
30347 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
30348 (build-system python-build-system)
30349 (native-inputs (list python-nose))
30350 (home-page "https://github.com/google/sre_yield")
30351 (synopsis "Expands a regular expression to its possible matches")
30352 (description
30353 "The goal of sre_yield is to efficiently generate all values that can
30354match a given regular expression, or count possible matches efficiently. It
30355uses the parsed regular expression, so you get a much more accurate result
30356than trying to just split strings.")
30357 (license license:asl2.0)))
30358
30359(define-public python-pyperf
30360 (package
30361 (name "python-pyperf")
30362 (version "2.3.1")
30363 (source
30364 (origin
30365 (method url-fetch)
30366 (uri (pypi-uri "pyperf" version))
30367 (sha256
30368 (base32 "189qf9wdbig0fk4n3bavx8acgdbay5lllfvw48jvbfaafb7y5hja"))))
30369 (build-system python-build-system)
30370 (arguments
30371 '(#:phases
30372 (modify-phases %standard-phases
30373 (add-after 'unpack 'fix-tests
30374 (lambda _
30375 ;; Some of these tests fail with:
30376 ;;
30377 ;; ModuleNotFoundError: No module named 'pyperf'
30378 ;;
30379 ;; even when calling ‘add-installed-pythonpath’ in the ‘check’
30380 ;; phase.
30381 (delete-file "pyperf/tests/test_examples.py")))
30382 (replace 'check
30383 (lambda* (#:key tests? #:allow-other-keys)
30384 (when tests?
30385 ;; From tox.ini's ‘testenv.commands’.
30386 (invoke "python" "-bb" "-Wd"
30387 "-m" "unittest" "discover"
30388 "-s" "pyperf/tests/" "-v")))))))
30389 (native-inputs
30390 (list python-psutil))
30391 (home-page "https://github.com/psf/pyperf")
30392 (synopsis "Toolkit for running Python benchmarks")
30393 (description "The Python @code{pyperf} module is a toolkit for writing,
30394running and analyzing benchmarks. It features a simple API that can:
30395
30396@itemize
30397@item automatically calibrate a benchmark for a time budget;
30398@item spawn multiple worker processes;
30399@item compute the mean and standard deviation;
30400@item detect if a benchmark result seems unstable;
30401@item store benchmark results in JSON format;
30402@item support multiple units: seconds, bytes and integer.
30403@end itemize")
30404 (license license:expat)))
30405
30406(define-public python-pydispatcher
30407 (package
30408 (name "python-pydispatcher")
30409 (version "2.0.5")
30410 (source
30411 (origin
30412 (method url-fetch)
30413 (uri (pypi-uri "PyDispatcher" version))
30414 (sha256
30415 (base32 "1bswbmhlbqdxlgbxlb6xrlm4k253sg8nvpl1whgsys8p3fg0cw2m"))))
30416 (build-system python-build-system)
30417 (arguments
30418 `(#:phases
30419 (modify-phases %standard-phases
30420 (replace 'check
30421 (lambda* (#:key tests? #:allow-other-keys)
30422 (when tests?
30423 (invoke "pytest")))))))
30424 (native-inputs (list python-pytest))
30425 (home-page "http://pydispatcher.sourceforge.net")
30426 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
30427 (description "PyDispatcher is an enhanced version of Patrick K. O’Brien’s
30428original @code{dispatcher.py} module. It provides the Python programmer with
30429a robust mechanism for event routing within various application contexts.
30430
30431Included in the package are the robustapply and saferef modules, which
30432provide the ability to selectively apply arguments to callable objects
30433and to reference instance methods using weak-references.")
30434 (license license:bsd-3)))
30435
30436(define-public python-queuelib
30437 (package
30438 (name "python-queuelib")
30439 (version "1.6.2")
30440 (source
30441 (origin
30442 (method url-fetch)
30443 (uri (pypi-uri "queuelib" version))
30444 (sha256
30445 (base32 "1lpwq8wx3025i14y5h0hbald2ypbarf081pql6cqcak4y9kp482b"))))
30446 (build-system python-build-system)
30447 (native-inputs (list python-pytest))
30448 (home-page "https://github.com/scrapy/queuelib")
30449 (synopsis
30450 "Collection of persistent (disk-based) and non-persistent (memory-based) queues")
30451 (description "Queuelib is a Python library that implements object
30452collections which are stored in memory or persisted to disk, provide a
30453simple API, and run fast.
30454
30455Queuelib provides collections for queues (FIFO), stacks (LIFO), queues
30456sorted by priority and queues that are emptied in a round-robin
30457fashion.")
30458 (license license:bsd-3)))
30459
30460(define-public python-posix-ipc
30461 (package
30462 (name "python-posix-ipc")
30463 (version "1.0.5")
30464 (source
30465 (origin
30466 ;; The source distributed on PyPI is prebuild.
30467 (method git-fetch)
30468 (uri (git-reference
30469 (url "https://github.com/osvenskan/posix_ipc")
30470 (commit (string-append "rel" version))))
30471 (file-name (git-file-name name version))
30472 (sha256
30473 (base32 "17y4d0pmvp199c5hbs602ailhlh9f9zv89kmpbd8jhyl6rgaxsvs"))))
30474 (build-system python-build-system)
30475 (arguments
30476 (list #:phases
30477 #~(modify-phases %standard-phases
30478 (add-after 'unpack 'patch-cc-path
30479 (lambda _
30480 (substitute* "prober.py"
30481 (("cmd = .cc")
30482 (string-append "cmd = \"" #$(cc-for-target)))))))))
30483 (home-page "http://semanchuk.com/philip/posix_ipc/")
30484 (synopsis "POSIX IPC primitives for Python")
30485 (description
30486 "This package provides POSIX IPC primitives - semaphores, shared memory and
30487message queues for Python.")
30488 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
30489
30490(define-public python-itemadapter
30491 (package
30492 (name "python-itemadapter")
30493 (version "0.5.0")
30494 (source
30495 (origin
30496 (method url-fetch)
30497 (uri (pypi-uri "itemadapter" version))
30498 (sha256
30499 (base32 "083wp3h2brh8x19jbdr8rz3biqwp3jlqd0rfzcyrjyhssffsgdh5"))))
30500 (build-system python-build-system)
30501 (home-page "https://github.com/scrapy/itemadapter")
30502 (synopsis "Common interface for data container classes")
30503 (description "The ItemAdapter class is a wrapper for data container
30504objects, providing a common interface to handle objects of different
30505types in an uniform manner, regardless of their underlying implementation.
30506
30507Currently supported types are:
30508@itemize
30509@item scrapy.item.Item
30510@item dict
30511@item dataclass-based classes
30512@item attrs-based classes
30513@item pydantic-based classes
30514@end itemize
30515
30516Additionally, interaction with arbitrary types is supported by
30517implementing a pre-defined interface.")
30518 (license license:bsd-3)))
30519
30520(define-public python-itemloaders
30521 (package
30522 (name "python-itemloaders")
30523 (version "1.0.4")
30524 (source
30525 (origin
30526 (method url-fetch)
30527 (uri (pypi-uri "itemloaders" version))
30528 (sha256
30529 (base32 "15hc78h90qhwass1bga1c3xar2dd6j8sxg61zg6jvh74lf6csxqj"))))
30530 (build-system python-build-system)
30531 (propagated-inputs
30532 (list python-itemadapter python-jmespath python-parsel python-w3lib))
30533 (home-page "https://github.com/scrapy/itemloaders")
30534 (synopsis "Base library for scrapy's ItemLoader")
30535 (description "Itemloaders is a library that helps you collect data
30536from HTML and XML sources. It comes in handy to extract data from web
30537pages, as it supports data extraction using CSS and XPath Selectors.
30538
30539It’s specially useful when you need to standardize the data from many
30540sources. For example, it allows you to have all your casting and
30541parsing rules in a single place.")
30542 (license license:bsd-3)))
30543
30544(define-public python-hypy-utils
30545 (package
30546 (name "python-hypy-utils")
30547 (version "1.0.6")
30548 (source (origin
30549 (method url-fetch)
30550 (uri (pypi-uri "hypy_utils" version))
30551 (sha256
30552 (base32
30553 "05csk0x8ivavq88x457cq5hwjcdirfbkzj7bbg5qgnpnf2dxxhiw"))))
30554 (build-system python-build-system)
30555 (home-page "https://github.com/hykilpikonna/HyPyUtils")
30556 (synopsis "Python utility functions for HyDEV")
30557 (description "This module provides Python utility functions for modifying
30558and setting the color of terminal output, via HyDEV.")
30559 (license license:expat)))
30560
30561(define-public python-mike
30562 (package
30563 (name "python-mike")
30564 (version "1.1.2")
30565 (source (origin
30566 (method url-fetch)
30567 (uri (pypi-uri "mike" version))
30568 (sha256
30569 (base32
30570 "0yxp816x7s948xsd0fifvq9shg01xdxlifd9rzf5y2rd9iwz3hsn"))))
30571 (build-system python-build-system)
30572 (native-inputs
30573 (list python-coverage python-flake8 python-shtab))
30574 (propagated-inputs
30575 (list python-jinja2 python-mkdocs python-pyyaml python-verspec))
30576 (home-page "https://github.com/jimporter/mike")
30577 (synopsis "Manage multiple versions of MkDocs-powered documentation")
30578 (description
30579 "This package provides a Python utility to easily deploy multiple
30580versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
30581to Github via gh-pages.")
30582 (license license:bsd-3)))
30583
30584(define-public python-arpeggio
30585 (package
30586 (name "python-arpeggio")
30587 (version "2.0.0")
30588 (source (origin
30589 (method url-fetch)
30590 (uri (pypi-uri "Arpeggio" version))
30591 (sha256
30592 (base32
30593 "0ggdsck1wpladd5bh9drhkmm86bblgk2wagrhn3sdf4v04wkic6n"))))
30594 (build-system python-build-system)
30595 (native-inputs (list python-coverage
30596 python-coveralls
30597 python-flake8
30598 python-mike
30599 python-mkdocs
30600 python-pytest
30601 python-pytest-runner
30602 python-twine
30603 python-wheel))
30604 (home-page "https://github.com/textX/Arpeggio")
30605 (synopsis "Packrat parser interpreter for Python")
30606 (description
30607 "This Python library provides a recursive descent parser with backtracking
30608and memoization (a.k.a. packrat parser). Arpeggio grammars are based on PEG
30609formalism. Arpeggio's main use is a foundation for a toolchain for DSL
30610development but it can be used for all sorts of general purpose parsing.")
30611 (license license:expat)))
30612
30613(define-public python-flatten-json
30614 (package
30615 (name "python-flatten-json")
30616 (version "0.1.13")
30617 (source
30618 (origin
30619 (method url-fetch)
30620 (uri (pypi-uri "flatten_json" version))
30621 (sha256
30622 (base32 "007m28gfs7pmz2rqqjxpial6skzw26hrfi8vrdy9agi9x0rj6dgf"))))
30623 (build-system python-build-system)
30624 (propagated-inputs (list python-six))
30625 (home-page "https://github.com/amirziai/flatten")
30626 (synopsis "Flatten JSON objects")
30627 (description
30628 "The @code{flatten_json} Python library flattens the hierarchy in your
30629object, which can be useful if you want to force your objects into a table.")
30630 (license license:expat)))
30631
30632(define-public python-deepmerge
30633 (package
30634 (name "python-deepmerge")
30635 (version "1.0.1")
30636 (source
30637 (origin
30638 (method url-fetch)
30639 (uri (pypi-uri "deepmerge" version))
30640 (sha256
30641 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
30642 (build-system pyproject-build-system)
30643 (arguments
30644 (list
30645 #:phases
30646 #~(modify-phases %standard-phases
30647 (add-before 'build 'set-version
30648 (lambda _
30649 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
30650 (native-inputs
30651 (list python-setuptools-scm
30652 python-pytest))
30653 (home-page "https://deepmerge.readthedocs.io/en/latest/")
30654 (synopsis "Merge nested data structures")
30655 (description
30656 "The @code{deep-merge} Python library provides a toolset to deeply merge
30657nested data structures in Python like lists and dictionaries.")
30658 (license license:expat)))
30659
30660(define-public python-murmurhash3
30661 (package
30662 (name "python-murmurhash3")
30663 (version "2.3.5")
30664 (source (origin
30665 (method url-fetch)
30666 (uri (pypi-uri "murmurhash3" version))
30667 (sha256
30668 (base32
30669 "1gdzys1212dx70byz07ipknbw1awbqskh6aznlkm85js8b8qfczm"))))
30670 (build-system python-build-system)
30671 (native-inputs (list python-cython python-pytest))
30672 (inputs (list python))
30673 (arguments
30674 (list #:modules
30675 '((ice-9 ftw) (ice-9 match)
30676 (guix build utils)
30677 (guix build python-build-system))
30678 #:phases
30679 #~(modify-phases %standard-phases
30680 (add-after 'unpack 'set-source-file-times-to-1980
30681 (lambda _
30682 (let ((circa-1980 (* 10 366 24 60 60)))
30683 (ftw "."
30684 (lambda (file stat flag)
30685 (utime file circa-1980 circa-1980) #t))))))))
30686 (home-page "https://github.com/veegee/mmh3")
30687 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
30688 (description
30689 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
30690of fast and robust hash functions. This library is a Python extension module
30691written in C.")
30692 (license license:public-domain)))
30693
30694(define-public python-murmurhash
30695 (package
30696 (name "python-murmurhash")
30697 (version "1.0.7")
30698 (source (origin
30699 (method url-fetch)
30700 (uri (pypi-uri "murmurhash" version))
30701 (sha256
30702 (base32
30703 "0vwkn98c703nvsigl2nz99rax2pafkx3djjfkgc49jiipmp3j2k3"))))
30704 (build-system python-build-system)
30705 (native-inputs (list python-cython python-pytest))
30706 (inputs (list python python-murmurhash3))
30707 (arguments
30708 (list #:modules
30709 '((ice-9 ftw) (ice-9 match)
30710 (guix build utils)
30711 (guix build python-build-system))
30712 #:phases
30713 #~(modify-phases %standard-phases
30714 (add-after 'unpack 'set-source-file-times-to-1980
30715 (lambda _
30716 (let ((circa-1980 (* 10 366 24 60 60)))
30717 (ftw "."
30718 (lambda (file stat flag)
30719 (utime file circa-1980 circa-1980) #t))))))))
30720 (home-page "https://github.com/explosion/murmurhash")
30721 (synopsis "Cython bindings for MurmurHash2")
30722 (description "This package provides Cython bindings for MurmurHash2.")
30723 (license license:expat)))
30724
30725;; Scooby requires for its test suite a ‘pyvips’ package that is missing its
30726;; VIPS dependency.
30727(define python-pyvips-for-python-scooby
30728 (package
30729 (inherit python-pyvips)
30730 (name "python-pyvips-for-python-scooby")
30731 (arguments
30732 (substitute-keyword-arguments (package-arguments python-pyvips)
30733 ((#:phases phases)
30734 #~(modify-phases #$phases
30735 (delete 'fix-paths)
30736 ;; The checks won't succeed without VIPS.
30737 (delete 'check)
30738 (delete 'sanity-check)))))
30739 (inputs
30740 (modify-inputs (package-inputs python-pyvips)
30741 (delete "vips")))
30742 (synopsis "pyvips for Scooby's test suite")))
30743
30744(define-public python-scooby
30745 (package
30746 (name "python-scooby")
30747 (version "0.5.12")
30748 (source
30749 ;; The PyPI tarball does not contain the tests.
30750 (origin
30751 (method git-fetch)
30752 (uri (git-reference
30753 (url "https://github.com/banesullivan/scooby")
30754 (commit (string-append "v" version))))
30755 (file-name (git-file-name name version))
30756 (sha256
30757 (base32 "1gkpmz8wl3jg8ylf1na35308sznw2g9wx33zqlyq5i2gpy2ml9mw"))))
30758 (build-system python-build-system)
30759 (native-inputs
30760 (list python-beautifulsoup4
30761 python-numpy
30762 python-pytest
30763 python-pytest-cov
30764 python-pyvips-for-python-scooby
30765 python-scipy))
30766 (propagated-inputs
30767 (list python-psutil))
30768 (arguments
30769 '(#:phases
30770 (modify-phases %standard-phases
30771 (add-after 'unpack 'fix-tests
30772 (lambda _
30773 (substitute* "tests/test_scooby.py"
30774 ;; The test suite uses the no-version PyPI package
30775 ;; (https://pypi.org/project/no-version/),
30776 ;; but it doesn't seem worth packaging in Guix just for this.
30777 (("scooby\\.report\\.VERSION_NOT_FOUND")
30778 "scooby.report.MODULE_NOT_FOUND")
30779 (("^ +import no_version # noqa.*") ""))))
30780 (replace 'check
30781 (lambda* (#:key tests? #:allow-other-keys)
30782 (when tests?
30783 (invoke "pytest")))))))
30784 (home-page "https://github.com/banesullivan/scooby")
30785 (synopsis "Report hardware information and Python package versions")
30786 (description
30787 "The Scooby package reports the following information about the currently
30788running system:
30789
30790@itemize
30791@item operating system name;
30792@item hardware information including machine type (e.g., @samp{i386},
30793@samp{x86_64}, etc.), CPU count and total RAM;
30794@item Python environment (e.g., Python, IPython, etc.);
30795@item file system name;
30796@item Python version;
30797@item versions of specified Python packages.
30798@end itemize
30799
30800It can generate reports as HTML tables or plain text lists.
30801
30802Scooby has no required dependencies, and only few optional dependencies.")
30803 (license license:expat)))
30804
30805(define-public python-cymem
30806 (package
30807 (name "python-cymem")
30808 (version "2.0.6")
30809 (source (origin
30810 (method url-fetch)
30811 (uri (pypi-uri "cymem" version))
30812 (sha256
30813 (base32
30814 "0pkyy60zk9654sj991w111p1l0m8wvz36nslw96x6nb9h6sjb5qn"))))
30815 (build-system python-build-system)
30816 (native-inputs
30817 (list python-cython
30818 python-pytest))
30819 (inputs
30820 (list python))
30821 (arguments
30822 (list
30823 #:modules '((ice-9 ftw)
30824 (ice-9 match)
30825 (guix build utils)
30826 (guix build python-build-system))
30827 #:phases
30828 #~(modify-phases %standard-phases
30829 (add-after 'unpack 'set-source-file-times-to-1980
30830 ;; XXX One of the tests uses a ZIP library to pack up some of the
30831 ;; source tree, and fails with "ZIP does not support timestamps
30832 ;; before 1980". Work around this by setting the file times in the
30833 ;; source tree to sometime in early 1980.
30834 (lambda _
30835 (let ((circa-1980 (* 10 366 24 60 60)))
30836 (ftw "." (lambda (file stat flag)
30837 (utime file circa-1980 circa-1980)
30838 #t))))))))
30839 (home-page "https://github.com/explosion/cymem")
30840 (synopsis "Cython memory pool for RAII-style memory management")
30841 (description
30842 "Cymem provides two small memory-management helpers for Cython. They make it
30843easy to tie memory to a Python object's life-cycle, so that the memory is freed
30844when the object is garbage collected.")
30845 (license license:expat)))
30846
30847(define-public python-preshed
30848 (package
30849 (name "python-preshed")
30850 (version "3.0.6")
30851 (source (origin
30852 (method url-fetch)
30853 (uri (pypi-uri "preshed" version))
30854 (sha256
30855 (base32
30856 "0akpydd23xqxx9d04drsnw9140rb3cv07r1zpzqz5wm0lf47afzv"))))
30857 (build-system python-build-system)
30858 (native-inputs (list python-cython python-cymem python-pytest))
30859 (inputs (list python python-cymem python-murmurhash))
30860 (arguments
30861 (list #:modules
30862 '((ice-9 ftw) (ice-9 match)
30863 (guix build utils)
30864 (guix build python-build-system))
30865 #:phases
30866 #~(modify-phases %standard-phases
30867 (add-after 'unpack 'set-source-file-times-to-1980
30868 (lambda _
30869 (let ((circa-1980 (* 10 366 24 60 60)))
30870 (ftw "."
30871 (lambda (file stat flag)
30872 (utime file circa-1980 circa-1980) #t))))))))
30873 (home-page "https://github.com/explosion/preshed")
30874 (synopsis "Cython hash tables that assume keys are pre-hashed")
30875 (description
30876 "Simple but high performance Cython hash table mapping pre-randomized keys
30877to void* values.")
30878 (license license:expat)))
30879
30880(define-public python-catalogue
30881 (package
30882 (name "python-catalogue")
30883 (version "2.0.7")
30884 (source (origin
30885 (method url-fetch)
30886 (uri (pypi-uri "catalogue" version))
30887 (sha256
30888 (base32
30889 "0srdxiil2xys8q1gpc1nvzhvis3a33d8a7amk2i1rlpbg6p36pak"))))
30890 (build-system python-build-system)
30891 (native-inputs (list python-pytest))
30892 (inputs (list python python-zipp python-typing-extensions python-mypy))
30893 (home-page "https://github.com/explosion/catalogue")
30894 (synopsis "Lightweight function registries for your library")
30895 (description
30896 "\"catalogue\" is a tiny, zero-dependencies library that
30897makes it easy to add function (or object) registries to your code. Function
30898registries are helpful when you have objects that need to be both easily
30899serializable and fully customizable. Instead of passing a function into your
30900object, you pass in an identifier name, which the object can use to lookup the
30901function from the registry. This makes the object easy to serialize, because the
30902name is a simple string. If you instead saved the function, you'd have to use
30903Pickle for serialization, which has many drawbacks.")
30904 (license license:expat)))
30905
30906(define-public python-wasabi
30907 (package
30908 (name "python-wasabi")
30909 (version "0.9.1")
30910 (source (origin
30911 (method url-fetch)
30912 (uri (pypi-uri "wasabi" version))
30913 (sha256
30914 (base32
30915 "1kwqfalq7qxs9f7xb2m055g01qpbznyzxl7sjnzjdvvhkczg39md"))))
30916 (build-system python-build-system)
30917 (native-inputs (list python-pytest))
30918 (home-page "https://github.com/ines/wasabi")
30919 (synopsis "Console printing and formatting toolkit")
30920 (description
30921 "This package provides a lightweight console printing and formatting
30922toolkit for Python.")
30923 (license license:expat)))
30924
30925(define-public python-srt
30926 (package
30927 (name "python-srt")
30928 (version "3.5.2")
30929 (source (origin
30930 (method url-fetch)
30931 (uri (pypi-uri "srt" version))
30932 (sha256
30933 (base32
30934 "0l24710spxarijmv3h7iicvx0lv6m3d4xg77nd9kyv8jwifav93s"))))
30935 (build-system python-build-system)
30936 (home-page "https://github.com/cdown/srt")
30937 (synopsis "SRT parsing library")
30938 (description
30939 "This package provides a Python library for parsing, modifying, and
30940composing subtitles in the SRT file format.")
30941 (license license:expat)))
30942
30943(define-public python-gatt
30944 (package
30945 (name "python-gatt")
30946 (version "0.2.7")
30947 (source (origin
30948 (method url-fetch)
30949 (uri (pypi-uri "gatt" version))
30950 (sha256
30951 (base32
30952 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
30953 (propagated-inputs (list python-dbus python-pygobject))
30954 (build-system python-build-system)
30955 (home-page "https://github.com/getsenic/gatt-python")
30956 (synopsis "Bluetooth GATT SDK for Python")
30957 (description "The Bluetooth @acronym{GATT, Generic ATTribute Profile}
30958@acronym{SDK, Software Development Kit} for Python helps you implement and
30959communicate with any Bluetooth Low Energy device that has a GATT
30960profile. It supports:
30961
30962@itemize @bullet
30963@item Discovering nearby Bluetooth Low Energy devices
30964@item Connecting and disconnecting devices
30965@item Implementing your custom GATT profile
30966@item Accessing all GATT services
30967@item Accessing all GATT characteristics
30968@item Reading characteristic values
30969@item Writing characteristic values
30970@item Subscribing for characteristic value change notifications
30971@end itemize
30972
30973Currently, Linux is the only platform supported by this library.")
30974 (license license:expat)))
30975
30976(define-public python-clrprint
30977 (package
30978 (name "python-clrprint")
30979 (version "2.0.1")
30980 (source (origin
30981 (method url-fetch)
30982 (uri (pypi-uri "clrprint" version))
30983 (sha256
30984 (base32
30985 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
30986 (build-system python-build-system)
30987 (arguments '(#:tests? #f)) ;there are no tests
30988 (propagated-inputs (list python-colorama python-termcolor))
30989 (home-page "https://github.com/AbhijithAJ/clrprint")
30990 (synopsis "Print colorful output in the terminal")
30991 (description "@code{clrprint} is developed to print colorful output in the
30992terminal. It has red, blue, green, yellow, purple and black/white (default)
30993colors.")
30994 (license license:expat)))
30995
30996(define-public python-musical-scales
30997 (package
30998 (name "python-musical-scales")
30999 (version "1.0.1")
31000 (source (origin
31001 (method url-fetch)
31002 (uri (pypi-uri "musical-scales" version))
31003 (sha256
31004 (base32
31005 "1ckn8n37i7b65h0i385ycn0w8sg9na0iabz0kmhxxc1wj0hddkw9"))))
31006 (build-system python-build-system)
31007 (native-inputs (list python-wheel))
31008 (home-page "https://github.com/hmillerbakewell/musical-scale")
31009 (synopsis "Retrieve a scale based on a given mode and starting note")
31010 (description
31011 "Retrieve a scale based on a given mode and starting note.
31012Information about these scales can be
31013@url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
31014Wikipedia}.")
31015 (license license:expat)))
31016
31017(define-public python-langcodes
31018 (package
31019 (name "python-langcodes")
31020 (version "3.3.0")
31021 (source (origin
31022 (method url-fetch)
31023 (uri (pypi-uri "langcodes" version))
31024 (sha256
31025 (base32
31026 "1xkyh3qdcigb18qiimbwl2669y22hhdmd89mqcd270c7lbahfkbr"))))
31027 (build-system python-build-system)
31028 (native-inputs (list python-pytest))
31029 (home-page "https://github.com/rspeer/langcodes")
31030 (synopsis "Python library for working with language codes")
31031 (description
31032 "This package provides a Python library for working with and comparing
31033language codes.
31034
31035@code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
3103647}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
3103747 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
31038with it, and it also implements recommendations from the
31039@url{http://cldr.unicode.org/, Unicode CLDR}.
31040
31041@code{python-langcodes} can also refer to a database of language properties
31042and names, built from Unicode CLDR and the IANA subtag registry, if you
31043install @code{python-language-data}.")
31044 (license license:expat)))
31045
31046(define-public python-geomet
31047 (package
31048 (name "python-geomet")
31049 (version "0.3.0")
31050 (source (origin
31051 (method url-fetch)
31052 (uri (pypi-uri "geomet" version))
31053 (sha256
31054 (base32
31055 "06rfvadx5dr5xrgsc5bsmqil9c9kff6i13xl988gy0gfg0cl2lnb"))))
31056 (build-system python-build-system)
31057 (propagated-inputs (list python-click python-six))
31058 (home-page "https://github.com/geomet/geomet")
31059 (synopsis "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or
31060GeoPackage Binary")
31061 (description "This package provides utilities and functions for converting
31062GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
31063versa. Extended WKB/WKT are also supported.")
31064 (license license:asl2.0)))
31065
31066(define-public python-bsdiff4
31067 (package
31068 (name "python-bsdiff4")
31069 (version "1.2.2")
31070 (home-page "https://github.com/ilanschnell/bsdiff4")
31071 (source (origin
31072 (method git-fetch)
31073 (uri (git-reference
31074 (url home-page)
31075 (commit version)))
31076 (file-name (git-file-name name version))
31077 (sha256
31078 (base32
31079 "1fa0vkmbr0a9xifq7i5gfcf7ifn739i1fdij8awynm299fsqvvhx"))))
31080 (build-system python-build-system)
31081 (synopsis "Binary diff and patch using the BSDIFF4 format")
31082 (description "This package provides a Python library for the @code{bsdiff}
31083binary diff utility. It also provides two command-line tools, @code{bsdiff4}
31084and @code{bspatch4}.")
31085 (license license:bsd-2)))
31086
31087(define-public python-mpv
31088 (package
31089 (name "python-mpv")
31090 (version "1.0.1")
31091 (source
31092 (origin
31093 ;; python-mpv from pypi does not include the tests directory.
31094 (method git-fetch)
31095 (uri (git-reference
31096 (url "https://github.com/jaseg/python-mpv")
31097 (commit (string-append "v" version))))
31098 (file-name (git-file-name name version))
31099 (sha256
31100 (base32
31101 "10w6j3n62ap45sf6q487kz8z6g58sha37i14fa2hhng794z7a8jh"))
31102 (modules '((guix build utils)))
31103 (snippet
31104 #~(begin
31105 ;; One of the tests never completes, so neutering it using
31106 ;; early return allows other test to run without issue.
31107 (substitute* "tests/test_mpv.py"
31108 ;; Note the typo in "prooperty" - this was fixed later in
31109 ;; upstream but has no effect on whether the tests hangs or not.
31110 (("test_wait_for_prooperty_event_overflow.*" line)
31111 ;; The long whitespace between \n and return is to match the
31112 ;; identation level, which is significant in python.
31113 (string-append line "\n return\n")))))))
31114 (build-system python-build-system)
31115 (arguments
31116 (list #:phases
31117 #~(modify-phases %standard-phases
31118 (add-before 'build 'patch-reference-to-mpv
31119 (lambda* (#:key inputs #:allow-other-keys)
31120 ;; Without an absolute path it is not able find and
31121 ;; load the libmpv library.
31122 (substitute* "mpv.py"
31123 (("sofile = .*")
31124 (string-append "sofile = \""
31125 (search-input-file inputs "/lib/libmpv.so")
31126 "\"\n")))))
31127 (add-before 'check 'prepare-for-tests
31128 (lambda _
31129 ;; Fontconfig throws errors when it has no cache dir to use.
31130 (setenv "XDG_CACHE_HOME" (getcwd))
31131 ;; Some tests fail without a writable and readable HOME.
31132 (setenv "HOME" (getcwd)))))))
31133 (native-inputs
31134 (list python-xvfbwrapper)) ; needed for tests only
31135 (inputs (list mpv))
31136 (propagated-inputs (list python-pillow)) ; for raw screenshots
31137 (home-page "https://github.com/jaseg/python-mpv")
31138 (synopsis "Python interface to the mpv media player")
31139 (description
31140 "python-mpv is a ctypes-based python interface to the mpv media player.
31141It gives you more or less full control of all features of the player, just
31142as the lua interface does.")
31143 ;; From the project's README:
31144 ;; python-mpv inherits the underlying libmpv's license, which can be either
31145 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
31146 ;; copyright page.
31147 (license license:gpl2+)))
31148
31149(define-public python-biblib
31150 (let ((upstream-version "0.1.0")
31151 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
31152 (revision "1"))
31153 (package
31154 (name "python-biblib")
31155 (version (git-version upstream-version revision commit))
31156 (source
31157 (origin
31158 (method git-fetch)
31159 (uri (git-reference
31160 (url "https://github.com/aclements/biblib")
31161 (commit commit)))
31162 (sha256
31163 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
31164 (file-name (git-file-name name version))))
31165 (build-system python-build-system)
31166 (home-page "https://github.com/aclements/biblib")
31167 (synopsis "BibTeX parsing and transformation library")
31168 (description
31169 "Biblib provides a simple, standalone Python 3 package for parsing
31170BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
31171entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
31172source code for BibTeX and hence (barring bugs in translation) should be fully
31173compatible with BibTeX's own parser.")
31174 ;; N.B. It seems the parser was translated from WEB by hand: this
31175 ;; package does not contain any generated files.
31176 (license license:expat))))
31177
31178(define-public python-i3ipc
31179 (package
31180 (name "python-i3ipc")
31181 (version "2.2.1")
31182 (source (origin
31183 (method git-fetch)
31184 (uri (git-reference
31185 (url "https://github.com/altdesktop/i3ipc-python")
31186 (commit (string-append "v" version))))
31187 (file-name (git-file-name name version))
31188 (sha256
31189 (base32
31190 "13bzs9dcv27czpnnbgz7a037lm8h991c8gk0qzzk5mq5yak24715"))))
31191 (build-system python-build-system)
31192 (arguments (list #:tests? #f)) ;FIXME: some tests are unable to run
31193 (propagated-inputs (list python-xlib))
31194 (home-page "https://github.com/altdesktop/i3ipc-python")
31195 (synopsis "Python library for controlling i3 and Sway")
31196 (description
31197 "This package provides a Python library for controlling the i3 and Sway
31198window managers.")
31199 (license license:bsd-3)))
31200
31201(define-public i3-autotiling
31202 (package
31203 (name "i3-autotiling")
31204 (version "1.8")
31205 (source (origin
31206 (method git-fetch)
31207 (uri (git-reference
31208 (url "https://github.com/nwg-piotr/autotiling")
31209 (commit (string-append "v" version))))
31210 (file-name (git-file-name name version))
31211 (sha256
31212 (base32
31213 "1nsm0gd45ys4ghlzrvjrf0lvcyhvpx58lz8gg325a762wn5a4a72"))))
31214 (build-system python-build-system)
31215 (arguments (list #:tests? #f)) ;no tests
31216 (native-inputs (list python-wheel))
31217 (propagated-inputs (list python-i3ipc))
31218 (home-page "https://github.com/nwg-piotr/autotiling")
31219 (synopsis "Automatically tile windows in i3 and Sway")
31220 (description
31221 "Script for Sway and i3 to automatically switch the horizontal/vertical
31222 window split orientation.")
31223 (license license:gpl3)))
31224
31225(define-public python-cyclic
31226 (package
31227 (name "python-cyclic")
31228 (version "1.0.0")
31229 (source (origin
31230 ;; Use git, as there are some test files missing from the PyPI
31231 ;; release, see https://github.com/neurobin/cyclic/issues/1
31232 (method git-fetch)
31233 (uri (git-reference
31234 (url "https://github.com/neurobin/cyclic")
31235 ;; Release is not tagged on github, see
31236 ;; https://github.com/neurobin/cyclic/issues/2
31237 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
31238 (file-name (git-file-name name version))
31239 (sha256
31240 (base32
31241 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
31242 (build-system python-build-system)
31243 (home-page "https://github.com/neurobin/cyclic")
31244 (synopsis "Handle cyclic relations")
31245 (description "This package handles cyclic relations compared by value.")
31246 (license license:bsd-3)))
31247
31248(define-public python-rcslice
31249 (package
31250 (name "python-rcslice")
31251 (version "1.1.0")
31252 (source (origin
31253 ;; Use git, as there are some test files missing from the PyPI
31254 ;; release, see https://github.com/neurobin/rcslice/issues/1
31255 (method git-fetch)
31256 (uri (git-reference
31257 (url "https://github.com/neurobin/rcslice")
31258 ;; Releases are not tagged on github, see
31259 ;; https://github.com/neurobin/rcslice/issues/2
31260 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
31261 (file-name (git-file-name name version))
31262 (sha256
31263 (base32
31264 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
31265 (build-system python-build-system)
31266 (home-page "https://github.com/neurobin/rcslice")
31267 (synopsis "Slice a list of sliceables")
31268 (description "This package provides Python module to slice a list of
31269sliceables (1 indexed, both start and end index are inclusive). Helps to
31270slice file content line by line or column by column or a combination of
31271both.")
31272 (license license:bsd-3)))
31273
31274(define-public python-types-orjson
31275 (package
31276 (name "python-types-orjson")
31277 (version "3.6.2")
31278 (source (origin
31279 (method url-fetch)
31280 (uri (pypi-uri "types-orjson" version))
31281 (sha256
31282 (base32
31283 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
31284 (build-system python-build-system)
31285 (home-page "https://github.com/python/typeshed")
31286 (synopsis "Typing stubs for orjson")
31287 (description "This is a PEP 561 type stub package for the @code{orjson}
31288package. It can be used by type-checking tools like mypy, PyCharm, pytype
31289etc. to check code that uses @code{orjson}.")
31290 (license license:asl2.0)))
31291
31292(define-public python-nanoid
31293 ;; There are no tests on PyPi.
31294 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
31295 (revision "0"))
31296 (package
31297 (name "python-nanoid")
31298 (version "2.0.0")
31299 (source
31300 (origin
31301 (method git-fetch)
31302 (uri
31303 (git-reference
31304 (url "https://github.com/puyuan/py-nanoid")
31305 (commit commit)))
31306 (file-name (git-file-name name commit))
31307 (sha256
31308 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
31309 (build-system python-build-system)
31310 (native-inputs (list python-pytest))
31311 (arguments
31312 '(#:phases
31313 (modify-phases %standard-phases
31314 (replace 'check
31315 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
31316 (when tests?
31317 (invoke "pytest")))))))
31318 (home-page "https://github.com/puyuan/py-nanoid")
31319 (synopsis "Unique string ID generator")
31320 (description
31321 "This package provides a tiny, secure, URL-friendly, unique string ID
31322generator for Python.")
31323 (license license:expat))))
31324
31325(define-public python-misskey
31326 (package
31327 (name "python-misskey")
31328 (version "4.1.0")
31329 (source (origin
31330 (method git-fetch)
31331 (uri (git-reference
31332 (url "https://github.com/YuzuRyo61/Misskey.py")
31333 (commit (string-append "v" version))))
31334 (file-name (git-file-name name version))
31335 (sha256
31336 (base32
31337 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
31338 (build-system python-build-system)
31339 (arguments (list #:tests? #f)) ;needs network
31340 (propagated-inputs (list python-requests))
31341 (home-page "https://misskeypy.readthedocs.io")
31342 (synopsis "Python bindings for Misskey's API")
31343 (description
31344 "This package provides access to Misskey's API. Misskey is a SNS
31345platform using the ActivityPub protocol.")
31346 (license license:expat)))
31347
31348(define-public python-lief
31349 (package
31350 (name "python-lief")
31351 (version "0.12.3")
31352 (source (origin
31353 (method git-fetch)
31354 (uri (git-reference
31355 (url "https://github.com/lief-project/LIEF")
31356 (commit version)))
31357 (file-name (git-file-name name version))
31358 (sha256
31359 (base32
31360 "11i6hqmcjh56y554kqhl61698n9v66j2qk1c1g63mv2w07h2z661"))))
31361 (build-system python-build-system)
31362 (native-inputs (list cmake))
31363 (arguments
31364 (list
31365 #:tests? #f ;needs network
31366 #:phases #~(modify-phases %standard-phases
31367 (replace 'build
31368 (lambda _
31369 (invoke
31370 "python" "setup.py" "--sdk" "build"
31371 (string-append
31372 "-j" (number->string (parallel-job-count)))))))))
31373 (home-page "https://github.com/lief-project/LIEF")
31374 (synopsis "Library to instrument executable formats")
31375 (description
31376 "@code{python-lief} is a cross platform library which can parse, modify
31377and abstract ELF, PE and MachO formats.")
31378 (license license:asl2.0)))
31379
31380(define-public python-eris
31381 (package
31382 (name "python-eris")
31383 (version "0.0.2")
31384 (source (origin
31385 (method url-fetch)
31386 (uri (pypi-uri "eris" version))
31387 (sha256
31388 (base32
31389 "16wbmahmfzdzrsjbn8jzi79vhghrzvvlcgnym20q0v3p3i4x47pq"))))
31390 (build-system python-build-system)
31391 (propagated-inputs (list python-pycryptodome))
31392 (home-page "https://codeberg.org/eris/python-eris")
31393 (synopsis "Python implementation of ERIS")
31394 (description
31395"Python implementation of the @acronym{ERIS, Encoding for Robust Immutable
31396Storage}.")
31397 (license license:lgpl3+)))
31398
31399(define-public shrinkwrap
31400 (package
31401 (name "shrinkwrap")
31402 (version "0.1.0")
31403 (source (origin
31404 (method git-fetch)
31405 (uri (git-reference
31406 (url "https://github.com/fzakaria/shrinkwrap")
31407 (commit (string-append "v" version))))
31408 (file-name (git-file-name name version))
31409 (modules '((guix build utils)))
31410 (snippet '(substitute* "pyproject.toml"
31411 (("lief = \"0\\.12\\.0\"") "lief = \"*\"")))
31412 (sha256
31413 (base32
31414 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
31415 (build-system python-build-system)
31416 (arguments
31417 (list
31418 #:phases
31419 #~(modify-phases %standard-phases
31420 (replace 'check
31421 (lambda* (#:key tests? #:allow-other-keys)
31422 (when tests?
31423 (invoke "pytest" "-v" "tests"))))
31424 ;; XXX: PEP 517 manual build copied from python-isort.
31425 (replace 'build
31426 (lambda _
31427 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
31428 (replace 'install
31429 (lambda _
31430 (let ((whl (car (find-files "dist" "\\.whl$"))))
31431 (invoke "pip" "--no-cache-dir" "--no-input"
31432 "install" "--no-deps" "--prefix" #$output whl)))))))
31433 (native-inputs
31434 (list python-click
31435 python-poetry-core
31436 python-pypa-build
31437 python-pytest))
31438 (inputs (list python-lief python-sh))
31439 (home-page "https://github.com/fzakaria/shrinkwrap")
31440 (synopsis "Emboss needed dependencies on the top level executable")
31441 (description
31442 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
31443shared objects, and lift them up to the executable referenced by absolute
31444path.")
31445 (license license:expat)))
31446
31447(define-public python-pymonad
31448 (package
31449 (name "python-pymonad")
31450 (version "2.4.0")
31451 ;; The tests are incomplete in the PyPI archive.
31452 (source (origin
31453 (method git-fetch)
31454 (uri (git-reference
31455 (url "https://github.com/jasondelaat/pymonad")
31456 (commit (string-append "v" version))))
31457 (file-name (git-file-name name version))
31458 (sha256
31459 (base32
31460 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
31461 (build-system python-build-system)
31462 (arguments
31463 `(#:phases
31464 (modify-phases %standard-phases
31465 (replace 'check
31466 (lambda* (#:key tests? #:allow-other-keys)
31467 (when tests?
31468 (invoke "./run_tests.sh")))))))
31469 (home-page "https://github.com/jasondelaat/pymonad")
31470 (synopsis "Monadic style functional programming for Python")
31471 (description "@code{python-pymonad} implements data structures typically
31472available in purely functional or functional first programming languages such
31473as Haskell and F#. Included are
31474
31475@itemize
31476@item Monad and Monoid data types with several common monads such as Maybe and
31477State
31478@item Useful tools such as the @code{@@curry} decorator for defining curried
31479functions
31480@item Type annotations to help ensure correct usage
31481@end itemize")
31482 (license license:bsd-3)))
31483
31484;;;
31485;;; Avoid adding new packages to the end of this file. To reduce the chances
31486;;; of a merge conflict, place them above by existing packages with similar
31487;;; functionality or similar names.
31488;;;