1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
3 ;;; Copyright © 2013-2022 Ludovic Courtès <ludo@gnu.org>
4 ;;; Copyright © 2013, 2014, 2015, 2016, 2019 Andreas Enge <andreas@enge.fr>
5 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
6 ;;; Copyright © 2014, 2017, 2021, 2022 Eric Bavier <bavier@posteo.net>
7 ;;; Copyright © 2014, 2015 Federico Beffa <beffa@fbengineering.ch>
8 ;;; Copyright © 2015 Omar Radwan <toxemicsquire4@gmail.com>
9 ;;; Copyright © 2015 Pierre-Antoine Rault <par@rigelk.eu>
10 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
11 ;;; Copyright © 2015, 2016, 2020 Christine Lemmer-Webber <cwebber@dustycloud.org>
12 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
13 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
14 ;;; Copyright © 2015, 2016, 2017, 2019, 2022 Leo Famulari <leo@famulari.name>
15 ;;; Copyright © 2015, 2017 Ben Woodcroft <donttrustben@gmail.com>
16 ;;; Copyright © 2015, 2016 Erik Edrosa <erik.edrosa@gmail.com>
17 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner <efraim@flashner.co.il>
18 ;;; Copyright © 2015, 2017, 2020 Kyle Meyer <kyle@kyleam.com>
19 ;;; Copyright © 2015, 2016 Chris Marusich <cmmarusich@gmail.com>
20 ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
21 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
22 ;;; Copyright © 2016, 2018, 2019, 2021 Hartmut Goebel <h.goebel@crazy-compilers.com>
23 ;;; Copyright © 2016 Daniel Pimentel <d4n1@d4n1.org>
24 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
25 ;;; Copyright © 2016, 2017 Troy Sankey <sankeytms@gmail.com>
26 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
27 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
28 ;;; Copyright © 2016 David Craven <david@craven.ch>
29 ;;; Copyright © 2016-2022 Marius Bakke <marius@gnu.org>
30 ;;; Copyright © 2016, 2017, 2021, 2022 Stefan Reichör <stefan@xsteve.at>
31 ;;; Copyright © 2016, 2017, 2019 Alex Vong <alexvong1995@gmail.com>
32 ;;; Copyright © 2016, 2017, 2018, 2021, 2022 Arun Isaac <arunisaac@systemreboot.net>
33 ;;; Copyright © 2016, 2017, 2018, 2020, 2021 Julien Lepiller <julien@lepiller.eu>
34 ;;; Copyright © 2016–2022 Tobias Geerinckx-Rice <me@tobias.gr>
35 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
36 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
37 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
38 ;;; Copyright © 2017, 2018 Adriano Peluso <catonano@gmail.com>
39 ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
40 ;;; Copyright © 2017, 2018, 2019, 2021, 2022 Mathieu Othacehe <m.othacehe@gmail.com>
41 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
42 ;;; Copyright © 2017, 2020, 2021 Roel Janssen <roel@gnu.org>
43 ;;; Copyright © 2017, 2018, 2019 Kei Kebreau <kkebreau@posteo.net>
44 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
45 ;;; Copyright © 2017, 2019, 2021 Brendan Tildesley <mail@brendan.scot>
46 ;;; Copyright © 2018 Ethan R. Jones <ethanrjones97@gmail.com
47 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
48 ;;; Copyright © 2018 Vijayalakshmi Vedantham <vijimay12@gmail.com>
49 ;;; Copyright © 2018 Mathieu Lirzin <mthl@gnu.org>
50 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
51 ;;; Copyright © 2016, 2018 Tomáš Čech <sleep_walker@gnu.org>
52 ;;; Copyright © 2018-2022 Nicolas Goaziou <mail@nicolasgoaziou.fr>
53 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
54 ;;; Copyright © 2018, 2019, 2021 Clément Lassieur <clement@lassieur.org>
55 ;;; Copyright © 2018, 2019, 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
56 ;;; Copyright © 2018 Luther Thompson <lutheroto@gmail.com>
57 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
58 ;;; Copyright © 2015, 2018 Pjotr Prins <pjotr.guix@thebird.nl>
59 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
60 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
61 ;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
62 ;;; Copyright © 2019, 2020, 2021, 2022 Guillaume Le Vaillant <glv@posteo.net>
63 ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
64 ;;; Copyright © 2019, 2020, 2021, 2022 Pierre Langlois <pierre.langlois@gmx.com>
65 ;;; Copyright © 2019 Jacob MacDonald <jaccarmac@gmail.com>
66 ;;; Copyright © 2019, 2020, 2021 Giacomo Leidi <goodoldpaul@autistici.org>
67 ;;; Copyright © 2019 Wiktor Żelazny <wzelazny@vurv.cz>
68 ;;; Copyright © 2019, 2020, 2021, 2022 Tanguy Le Carrour <tanguy@bioneland.org>
69 ;;; Copyright © 2019, 2021 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
70 ;;; Copyright © 2020 Riku Viitanen <riku.viitanen@protonmail.com>
71 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
72 ;;; Copyright © 2020 sirgazil <sirgazil@zoho.com>
73 ;;; Copyright © 2020 Sebastian Schott <sschott@mailbox.org>
74 ;;; Copyright © 2020, 2021 Alexandros Theodotou <alex@zrythm.org>
75 ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com>
76 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
77 ;;; Copyright © 2020 Alex ter Weele <alex.ter.weele@gmail.com>
78 ;;; Copyright © 2020 Matthew James Kraai <kraai@ftbfs.org>
79 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
80 ;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw>
81 ;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
82 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
83 ;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
84 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
85 ;;; Copyright © 2020 Hendursaga <hendursaga@yahoo.com>
86 ;;; Copyright © 2020 Malte Frank Gerdes <malte.f.gerdes@gmail.com>
87 ;;; Copyright © 2020 Joseph LaFreniere <joseph@lafreniere.xyz>
88 ;;; Copyright © 2020 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
89 ;;; Copyright © 2020, 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
90 ;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
91 ;;; Copyright © 2020 Diego N. Barbato <dnbarbato@posteo.de>
92 ;;; Copyright © 2020 Liliana Marie Prikler <liliana.prikler@gmail.com>
93 ;;; Copyright © 2019 Kristian Trandem <kristian@devup.no>
94 ;;; Copyright © 2020, 2021 Zheng Junjie <873216071@qq.com>
95 ;;; Copyright © 2020 EuAndreh <eu@euandre.org>
96 ;;; Copyright © 2021, 2022 Morgan Smith <Morgan.J.Smith@outlook.com>
97 ;;; Copyright © 2021, 2022 Sharlatan Hellseher <sharlatanus@gmail.com>
98 ;;; Copyright © 2021 Ellis Kenyő <me@elken.dev>
99 ;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
100 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
101 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
102 ;;; Copyright © 2021 jgart <jgart@dismail.de>
103 ;;; Copyright © 2021 Danial Behzadi <dani.behzi@ubuntu.com>
104 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
105 ;;; Copyright © 2021 Hugo Lecomte <hugo.lecomte@inria.fr>
106 ;;; Copyright © 2021 Franck Pérignon <franck.perignon@univ-grenoble-alpes.fr>
107 ;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
108 ;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
109 ;;; Copyright © 2021 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
110 ;;; Copyright © 2021, 2022 Pradana Aumars <paumars@courrier.dev>
111 ;;; Copyright © 2021, 2022 Felix Gruber <felgru@posteo.net>
112 ;;; Copyright © 2021 Sébastien Lerique <sl@eauchat.org>
113 ;;; Copyright © 2021 Raphaël Mélotte <raphael.melotte@mind.be>
114 ;;; Copyright © 2021 ZmnSCPxj <ZmnSCPxj@protonmail.com>
115 ;;; Copyright © 2021 Filip Lajszczak <filip@lajszczak.dev>
116 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
117 ;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
118 ;;; Copyright © 2022 Aleksandr Vityazev <avityazev@posteo.org>
119 ;;; Copyright © 2022 Evgeny Pisemsky <evgeny@pisemsky.com>
120 ;;; Copyright © 2022 drozdov <drozdov@portalenergy.tech>
121 ;;; Copyright © 2022 Peter Polidoro <peter@polidoro.io>
122 ;;; Copyright © 2022 Wamm K. D. <jaft.r@outlook.com>
123 ;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
124 ;;; Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
125 ;;; Copyright © 2022 Paul A. Patience <paul@apatience.com>
126 ;;; Copyright © 2022 Jean-Pierre De Jesus DIAZ <me@jeandudey.tech>
127 ;;; Copyright © 2022 Philip McGrath <philip@philipmcgrath.com>
128 ;;; Copyright © 2022 Marek Felšöci <marek@felsoci.sk>
129 ;;; Copyright © 2022 Hilton Chain <hako@ultrarare.space>
130 ;;; Copyright © 2022 Tomasz Jeneralczyk <tj@schwi.pl>
132 ;;; This file is part of GNU Guix.
134 ;;; GNU Guix is free software; you can redistribute it and/or modify it
135 ;;; under the terms of the GNU General Public License as published by
136 ;;; the Free Software Foundation; either version 3 of the License, or (at
137 ;;; your option) any later version.
139 ;;; GNU Guix is distributed in the hope that it will be useful, but
140 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
141 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
142 ;;; GNU General Public License for more details.
144 ;;; You should have received a copy of the GNU General Public License
145 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
147 (define-module (gnu packages python-xyz)
148 #:use-module ((guix licenses) #:prefix license:)
149 #:use-module (gnu packages)
150 #:use-module (gnu packages algebra)
151 #:use-module (gnu packages adns)
152 #:use-module (gnu packages aidc)
153 #:use-module (gnu packages attr)
154 #:use-module (gnu packages backup)
155 #:use-module (gnu packages bash)
156 #:use-module (gnu packages check)
157 #:use-module (gnu packages cmake)
158 #:use-module (gnu packages compression)
159 #:use-module (gnu packages crypto)
160 #:use-module (gnu packages databases)
161 #:use-module (gnu packages dbm)
162 #:use-module (gnu packages django)
163 #:use-module (gnu packages djvu)
164 #:use-module (gnu packages docker)
165 #:use-module (gnu packages documentation)
166 #:use-module (gnu packages enchant)
167 #:use-module (gnu packages file)
168 #:use-module (gnu packages fontutils)
169 #:use-module (gnu packages fonts)
170 #:use-module (gnu packages freedesktop)
171 #:use-module (gnu packages gdb)
172 #:use-module (gnu packages gcc)
173 #:use-module (gnu packages geo)
174 #:use-module (gnu packages ghostscript)
175 #:use-module (gnu packages gl)
176 #:use-module (gnu packages glib)
177 #:use-module (gnu packages gnome)
178 #:use-module (gnu packages gnupg)
179 #:use-module (gnu packages graphviz)
180 #:use-module (gnu packages graphics)
181 #:use-module (gnu packages gsasl)
182 #:use-module (gnu packages gstreamer)
183 #:use-module (gnu packages gtk)
184 #:use-module (gnu packages haskell-xyz)
185 #:use-module (gnu packages icu4c)
186 #:use-module (gnu packages inkscape)
187 #:use-module (gnu packages image)
188 #:use-module (gnu packages image-processing)
189 #:use-module (gnu packages imagemagick)
190 #:use-module (gnu packages jupyter)
191 #:use-module (gnu packages kerberos)
192 #:use-module (gnu packages libevent)
193 #:use-module (gnu packages libffi)
194 #:use-module (gnu packages libidn)
195 #:use-module (gnu packages libusb)
196 #:use-module (gnu packages linux)
197 #:use-module (gnu packages llvm)
198 #:use-module (gnu packages man)
199 #:use-module (gnu packages markup)
200 #:use-module (gnu packages maths)
201 #:use-module (gnu packages monitoring)
202 #:use-module (gnu packages multiprecision)
203 #:use-module (gnu packages networking)
204 #:use-module (gnu packages ncurses)
205 #:use-module (gnu packages node)
206 #:use-module (gnu packages ninja)
207 #:use-module (gnu packages openstack)
208 #:use-module (gnu packages pcre)
209 #:use-module (gnu packages pdf)
210 #:use-module (gnu packages perl)
211 #:use-module (gnu packages photo)
212 #:use-module (gnu packages pkg-config)
213 #:use-module (gnu packages protobuf)
214 #:use-module (gnu packages python)
215 #:use-module (gnu packages python-build)
216 #:use-module (gnu packages python-check)
217 #:use-module (gnu packages python-compression)
218 #:use-module (gnu packages python-crypto)
219 #:use-module (gnu packages python-science)
220 #:use-module (gnu packages python-web)
221 #:use-module (gnu packages qt)
222 #:use-module (gnu packages rdf)
223 #:use-module (gnu packages readline)
224 #:use-module (gnu packages regex)
225 #:use-module (gnu packages sdl)
226 #:use-module (gnu packages scanner)
227 #:use-module (gnu packages search)
228 #:use-module (gnu packages serialization)
229 #:use-module (gnu packages shells)
230 #:use-module (gnu packages sphinx)
231 #:use-module (gnu packages ssh)
232 #:use-module (gnu packages swig)
233 #:use-module (gnu packages terminals)
234 #:use-module (gnu packages tex)
235 #:use-module (gnu packages texinfo)
236 #:use-module (gnu packages textutils)
237 #:use-module (gnu packages time)
238 #:use-module (gnu packages tls)
239 #:use-module (gnu packages version-control)
240 #:use-module (gnu packages video)
241 #:use-module (gnu packages web)
242 #:use-module (gnu packages wxwidgets)
243 #:use-module (gnu packages base)
244 #:use-module (gnu packages xml)
245 #:use-module (gnu packages xorg)
246 #:use-module (gnu packages xdisorg)
247 #:use-module (gnu packages tcl)
248 #:use-module (gnu packages bdw-gc)
249 #:use-module (gnu packages serialization)
250 #:use-module (guix packages)
251 #:use-module (guix download)
252 #:use-module (guix gexp)
253 #:use-module (guix git-download)
254 #:use-module (guix hg-download)
255 #:use-module (guix gexp)
256 #:use-module (guix utils)
257 #:use-module (guix build-system gnu)
258 #:use-module (guix build-system cmake)
259 #:use-module (guix build-system python)
260 #:use-module (guix build-system trivial)
261 #:use-module (srfi srfi-1)
262 #:use-module (srfi srfi-26))
264 (define-public python-xmldiff
266 (name "python-xmldiff")
271 (uri (pypi-uri "xmldiff" version))
273 (base32 "0qygxi3z1jwb0471k7bh5gcqf7wqm4xhrkmwhf36gjgjw46a5gh5"))))
274 (build-system python-build-system)
275 (propagated-inputs (list python-lxml python-six))
276 (home-page "https://github.com/Shoobx/xmldiff")
277 (synopsis "Creates diffs of XML files")
278 (description "This Python tool figures out the differences between two
279 similar XML files, in the same way the @command{diff} utility does it.")
280 (license license:expat)))
282 (define-public python-janus
284 (name "python-janus")
289 (uri (pypi-uri "janus" version))
291 (base32 "030xvl2vghi5ispfalhvch1rl6i2jsy5bf1dgjafa7vifppy04j7"))))
292 (build-system python-build-system)
295 (modify-phases %standard-phases
297 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
299 (add-installed-pythonpath inputs outputs)
300 (invoke "pytest" "--cov=janus" "--cov=tests")))))))
302 (list python-pytest python-pytest-cov python-pytest-asyncio))
303 (home-page "https://github.com/aio-libs/janus/")
305 "Sync-async queue to interoperate between asyncio tasks and classic threads")
307 "Mixed sync-async queue, supposed to be used for communicating between
308 classic synchronous (threaded) code and asynchronous (in terms of
309 @url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
310 @url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
311 library has two faces: synchronous and asynchronous interface. Synchronous is
312 fully compatible with
313 @url{https://docs.python.org/3/library/queue.html,standard queue},
314 asynchronous one follows
315 @url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
317 (license license:asl2.0)))
319 (define-public python-logzero
321 (name "python-logzero")
326 (uri (pypi-uri "logzero" version))
328 (base32 "10nh186vk6hpnpfycym44gja4fja0jyzw7q8dwimfd1rmv9xswvz"))))
329 (build-system python-build-system)
331 (list python-pytest python-pytest-runner))
334 (modify-phases %standard-phases
336 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
338 (add-installed-pythonpath inputs outputs)
339 (invoke "pytest")))))))
340 (home-page "https://github.com/metachris/logzero")
341 (synopsis "Robust and effective logging for Python")
343 "@code{logzero} provides a fully configured Python logger object for
344 easy logging and rotating to a console or a file.")
345 (license license:expat)))
347 (define-public python-logbook
349 (name "python-logbook")
354 (uri (pypi-uri "Logbook" version))
356 (base32 "1s1gyfw621vid7qqvhddq6c3z2895ci4lq3g0r1swvpml2nm9x36"))))
357 (build-system python-build-system)
360 (modify-phases %standard-phases
361 (add-before 'build 'cythonize-sources
363 (with-directory-excursion "logbook"
364 (invoke "cython" "_speedups.pyx"))))
366 (lambda* (#:key tests? #:allow-other-keys)
368 ;; Check cython build also
369 (setenv "CYBUILD" "True")
370 (invoke "pytest" "--cov=logbook" "-r" "s" "tests")))))))
372 (list python-cython python-mock python-pytest python-pytest-cov
373 python-google-brotli))
374 (home-page "https://github.com/getlogbook/logbook")
375 (synopsis "Logbook is a logging replacement for Python")
377 "Logbook is a logging system for Python that replaces the standard
378 library’s logging module. It was designed with both complex and simple
379 applications in mind and the idea to make logging fun.")
380 (license license:bsd-3)))
382 (define-public python-ubelt
384 (name "python-ubelt")
390 (url "https://github.com/Erotemic/ubelt")
391 (commit (string-append "v" version))))
392 (file-name (git-file-name name version))
395 "0hac9nqqvqfbca2s4g0mp1fnj0ah60bg9fb8234ibna3jww8qs33"))))
396 (build-system python-build-system)
399 #~(modify-phases %standard-phases
401 (lambda* (#:key tests? #:allow-other-keys)
403 (setenv "HOME" "/tmp") ;else the test suite hangs
404 (invoke "pytest" "-vv" "-k"
406 ;; The builder user home doesn't match HOME,
407 ;; which causes this test to fail.
409 ;; This one pointlessly tries
410 ;; locating various binaries on
412 "and not find_exe"))))))))
413 (propagated-inputs (list python-ordered-set))
418 (home-page "https://github.com/Erotemic/ubelt")
419 (synopsis "Python library for hashing, caching, timing and more")
420 (description "Ubelt is a small library of simple functions that extend the
421 Python standard library. It includes an @acronym{API, Application Programming
422 Interface} to simplify common problems such as caching, timing, computing
423 progress, among other things.")
424 (license license:asl2.0)))
426 (define-public python-ueberzug
428 (name "python-ueberzug")
433 (uri (pypi-uri "ueberzug" version))
436 "1hxd45dnwa9yv908acarr98n2drmar66wzq9z2qd3irj24srzr3w"))))
437 (build-system python-build-system)
439 (list libx11 libxext))
441 (list python-attrs python-docopt python-pillow python-xlib))
442 (home-page "https://github.com/seebye/ueberzug")
443 (synopsis "Command line util to display images in combination with X11")
444 (description "Überzug is a command line util which draws images on
445 terminals by using child windows. The advantages of using Überzug are:
447 @item No race conditions as a new window is created to display images.
448 @item Expose events will be processed, so images will be redrawn on switch
450 @item Tmux support (excluding multi pane windows).
451 @item Terminals without the WINDOWID environment variable are supported.
452 @item Chars are used as position - and size unit.
453 @item No memory leak (/ unlimited cache).
455 (license license:gpl3+)))
457 (define-public python-fire
464 (uri (pypi-uri "fire" version))
467 "0qka44n88y3qcj7xz0k0f3qb4phcg4z0wvd4jcii9lcr6rvbiqn5"))))
468 (build-system python-build-system)
470 (list python-pytest))
473 (modify-phases %standard-phases
475 (lambda* (#:key tests? #:allow-other-keys)
477 (invoke "pytest")))))))
479 (list python-six python-termcolor))
480 (synopsis "Library for automatically generating command line interfaces")
482 "Fire is a library for automatically generating command line interfaces
483 from absolutely any Python object. The following are the advantages:
485 @item A simple way to create a CLI in Python.
486 @item A helpful tool for developing and debugging Python code.
487 @item Helps with exploring existing code or turning other people's code into a
488 command line interface.
489 @item Makes transitioning between Bash and Python easier.
490 @item Makes using a Python REPL easier by setting up the REPL with the modules
491 and variables you'll need already imported and created.
493 (home-page "https://github.com/google/python-fire")
494 (license license:asl2.0)))
496 (define-public python-twodict
498 (name "python-twodict")
503 (uri (pypi-uri "twodict" version))
505 (base32 "0ifv7dv18jn2lg0a3l6zdlvmmlda2ivixfjbsda58a2ay6kxznr0"))))
506 (build-system python-build-system)
507 (home-page "https://github.com/MrS0m30n3/twodict")
508 (synopsis "Two way ordered dictionary for Python")
509 (description "TwoDict is a custom dictionary in which you can get the
510 key:value relationship but you can also get the value:key relationship. It also
511 remembers the order in which the items were inserted and supports almost all the
512 features of the Python's built-in dict.")
513 (license license:unlicense)))
515 (define-public python-argopt
517 (name "python-argopt")
521 (uri (pypi-uri "argopt" version))
524 "0ybs7kkp0cpl8zn1lvf7481xhssg1bbhh5la2cjzdm5yibashyxa"))))
525 (build-system python-build-system)
527 (list python-coverage python-nose python-setuptools ; Won't build without this.
528 python-setuptools-scm))
530 (list python-toml python-flake8))
531 (home-page "https://github.com/casperdcl/argopt")
532 (synopsis "Generate a command-line interface from a docstring")
533 (description "This package provides tools to define a command line interface
534 from a docstring rather than the other way around.")
535 (license license:mpl2.0)))
537 (define-public python-cachetools
539 (name "python-cachetools")
543 (uri (pypi-uri "cachetools" version))
546 "1zqc098gk6y614lxwqd9z2gm8lldgvrpid133pnlm4m048gfvdb1"))))
547 (build-system python-build-system)
548 (home-page "https://github.com/tkem/cachetools/")
549 (synopsis "Extensible memoizing collections and decorators")
550 (description "This module provides various memoizing collections and
551 decorators, including variants of the Python standard library's
552 @code{lru_cache} function decorator.")
553 (license license:expat)))
555 (define-public python-colorful
557 (name "python-colorful")
563 (pypi-uri "colorful" version))
565 (base32 "1sh7g2cn1fyz2hzmzs933razdxi2bna9i1lxa790r9pdwba8m146"))))
566 (build-system python-build-system)
567 ;; FIXME: tests cannot be computed:
568 ;; "Can't perform this operation for unregistered loader type"
572 (list python-coverage python-flake8 python-pytest))
574 (list python-colorama))
575 (home-page "http://github.com/timofurrer/colorful")
576 (synopsis "Terminal string styling")
577 (description "Colorful provides an array of text styles, that can be used
578 as functions or string constants to form colored terminal output.")
579 (license license:expat)))
581 (define-public python-yaspin
583 (name "python-yaspin")
589 (pypi-uri "yaspin" version))
591 (base32 "1iirah0kydrdp505qnjj6gi54avcr7z0hbkfx9vmh8myr30rpz6q"))))
592 (build-system python-build-system)
594 (list python-pytest))
595 (home-page "https://github.com/pavdmyt/yaspin")
596 (synopsis "Yet Another Terminal Spinner")
597 (description "Yaspin provides a terminal spinner to indicate the progress
598 during long operations.")
599 (license license:expat)))
601 (define-public python-lunr
609 (pypi-uri "lunr" version))
611 (base32 "106akalywfmnypzkdrhgz4n4740a8xayspybsw59kq06vz8i2qrc"))))
612 (build-system python-build-system)
614 (list python-mock python-pytest))
616 (list python-nltk-3.4))
618 "https://github.com/yeraydiazdiaz/lunr.py")
619 (synopsis "Full-text search library")
620 (description "This package provides python library for full-text search.
621 It indexes documents and provides a search interface for retrieving documents
622 that best match text queries.")
623 (license license:expat)))
625 (define-public python-mrkd
632 (uri (pypi-uri "mrkd" version))
634 (base32 "1bvaqbna1ihb4y2mv9pmvqcq3r9j6lwbbii99dani8lxx4dqqvs5"))))
635 (build-system python-build-system)
637 (list python-jinja2 python-mistune python-pygments))
638 (home-page "https://pypi.org/project/mrkd/")
639 (synopsis "Python Markdown implementation")
641 "@code{mrkd} writes man pages using Markdown, and convert them to Roff or
643 (license license:bsd-3)))
645 (define-public python-mkdocs
647 (name "python-mkdocs")
651 ;; The tests suite appears to be incomplete in the PyPI archive.
654 (url "https://github.com/mkdocs/mkdocs")
656 (file-name (git-file-name name version))
659 "1n5rdllrxvhnxmdrddf55p3s86dakx0rq2gg6bj6pr6jg2pn932b"))))
660 (build-system python-build-system)
663 (modify-phases %standard-phases
664 ;; Requirements refer to a specific version of dependencies,
665 ;; which are too old. So we patch to refer to any later version.
666 (add-after 'unpack 'patch-requirements
668 (substitute* "setup.py"
671 (lambda* (#:key tests? #:allow-other-keys)
673 (invoke "python" "-m" "unittest"
674 "discover" "-p" "*tests.py" "mkdocs"
675 "--top-level-directory" ".")))))))
680 python-importlib-metadata
688 python-pyyaml-env-tag
690 (home-page "https://www.mkdocs.org")
691 (synopsis "Project documentation with Markdown")
692 (description "MkDocs is a static site generator geared towards building
693 project documentation. Documentation source files are written in Markdown, and
694 configured with a single YAML configuration file.")
695 (license license:bsd-3)))
697 (define-public python-mkdocs-markdownextradata-plugin
699 (name "python-mkdocs-markdownextradata-plugin")
702 ;; Use git, as there are some test files missing from the PyPI release,
703 ;; see https://github.com/rosscdh/mkdocs-markdownextradata-plugin/issues/41.
706 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
708 (file-name (git-file-name name version))
711 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
712 (build-system python-build-system)
713 (native-inputs (list python-pytest))
714 (propagated-inputs (list python-mkdocs python-pyyaml))
715 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
716 (synopsis "Inject mkdocs.yml extra variables into the MkDocs markdown
719 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
720 variables into the markdown template")
721 (license license:expat)))
723 (define-public python-pymdown-extensions
725 (name "python-pymdown-extensions")
731 (pypi-uri "pymdown-extensions" version))
733 (base32 "0d8pdndrl1kj105lq7r6kw2dnhcvll6h2qs07w71mcpi7gx728v3"))))
734 (build-system python-build-system)
735 ;; FIXME: "AssertionError: False is not true"
739 (list python-markdown))
740 (home-page "https://github.com/facelessuser/pymdown-extensions")
741 (synopsis "Extension pack for Python Markdown")
742 (description "PyMdown Extensions is a collection of extensions for Python
743 Markdown. All extensions are found under the module namespace of pymdownx.")
744 (license license:expat)))
746 (define-public python-plotille
748 (name "python-plotille")
752 (uri (pypi-uri "plotille" version))
755 "0fvsk6glxfphhqy405h05rj3v95jd1byl5hv2fyd5l31wln23shj"))))
756 (build-system python-build-system)
757 (native-inputs (list python-six))
758 (home-page "https://github.com/tammoippen/plotille")
759 (synopsis "Plot in the terminal using braille dots")
761 "Plotille provides a figure class and graphing functions to create plots,
762 scatter plots, histograms and heatmaps in the terminal using braille dots.")
763 (license license:expat)))
765 (define-public python-mdx-gh-links
767 (name "python-mdx-gh-links")
772 (uri (pypi-uri "mdx_gh_links" version))
774 (base32 "167k1jbp3jifxbnlpi6wy0z1skam7gqv2sixb5bhggb2vypqvysr"))))
775 (build-system python-build-system)
776 (arguments (list #:tests? #f)) ;tests connect github
777 (propagated-inputs (list python-markdown))
778 (home-page "https://github.com/Python-Markdown/github-links/")
779 (synopsis "Python-Markdown extension adding support for shorthand links")
780 (description "This package is an extension to Python-Markdown which adds
781 support for shorthand links to GitHub users, repositories, issues and
783 (license license:bsd-3)))
785 (define-public python-mkdocs-material
787 (name "python-mkdocs-material")
793 (pypi-uri "mkdocs-material" version))
795 (base32 "0ci9xiasq9nfn09v11m7p49vzazdbgslw7rpzjd6y3hsmn9vljz3"))))
796 (build-system python-build-system)
799 (modify-phases %standard-phases
800 ;; Requirement mkdocs-material-extensions
801 ;; in-turn requires mkdocs-material. This causes
802 ;; circular dependency, so we remove this requirement.
803 (add-after 'unpack 'patch-requirements
805 (substitute* "requirements.txt"
806 (("mkdocs-material-extensions.*$") "")))))))
808 (list python-markdown python-mkdocs python-pygments
809 python-pymdown-extensions))
810 (home-page "https://squidfunk.github.io/mkdocs-material/")
811 (synopsis "Material Design theme for MkDocs")
812 (description "This package provides a theme plugin for the static site
814 (license license:expat)))
816 (define-public python-slixmpp
818 (name "python-slixmpp")
825 (url "https://lab.louiz.org/poezio/slixmpp.git")
827 (string-append "slix-" version))))
829 (git-file-name name version))
831 (base32 "15mqxcws14bjvh5jcfwl86zsvrymkdw3ya07vb44md7vfnsnclwx"))))
832 (build-system python-build-system)
835 (modify-phases %standard-phases
836 (add-after 'unpack 'patch
838 (substitute* "setup.py"
843 `(("cython" ,python-cython)
845 ("pkg-config" ,pkg-config)))
847 (list python-aiodns python-aiohttp python-pyasn1
848 python-pyasn1-modules))
850 (list libidn python)) ; We are building a Python extension.
851 (synopsis "XMPP library without threads")
852 (description "Slixmpp is a XMPP library for Python 3.7+. It is a fork of
853 SleekXMPP. Its goal is to only rewrite the core of the library (the low level
854 socket handling, the timers, the events dispatching) in order to remove all
856 (home-page "https://lab.louiz.org/poezio/slixmpp")
857 (license license:expat)))
859 (define-public python-tenacity
861 (name "python-tenacity")
865 (uri (pypi-uri "tenacity" version))
868 "0bwkvjpjfyi9dgszzad9aww2vc00w3bczjnbifi92cp7wch2l923"))))
869 (build-system python-build-system)
871 (list python-setuptools-scm python-tornado python-typeguard
875 #~(modify-phases %standard-phases
877 (lambda _ (invoke "pytest" "-vv"))))))
878 (home-page "https://github.com/jd/tenacity")
879 (synopsis "Retrying library for python")
880 (description "Tenacity is a general-purpose python library to simplify the
881 task of adding retry behavior to just about anything.")
882 (license license:asl2.0)))
884 (define-public python-pytelegrambotapi
886 (name "python-pytelegrambotapi")
892 (url "https://github.com/eternnoir/pyTelegramBotAPI")
894 (file-name (git-file-name name version))
896 (base32 "0r7g5zs0fk3g2dxvbpl0pi730x7r2kalrhn30fs0pvc15a59fmxz"))))
897 (build-system python-build-system)
900 (modify-phases %standard-phases
902 (lambda* (#:key tests? #:allow-other-keys)
904 (with-directory-excursion "tests"
908 (list python-requests))
910 (list python-pytest))
911 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
912 (synopsis "Python Telegram bot api")
913 (description "This package provides a simple, but extensible Python
914 implementation for the Telegram Bot API.")
915 (license license:gpl2)))
917 (define-public python-colorlog
919 (name "python-colorlog")
924 (uri (pypi-uri "colorlog" version))
926 (base32 "1s7x0v872h8aks8xp01wmv6hzisxqjrh1svbbcycir0980h76krl"))))
927 (build-system python-build-system)
930 (modify-phases %standard-phases
932 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
934 (add-installed-pythonpath inputs outputs)
935 (invoke "python" "-m" "pytest")))))))
937 (list python-pytest))
938 (home-page "https://github.com/borntyping/python-colorlog")
939 (synopsis "Log formatting with colors for python")
940 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
941 with Python's logging module that outputs records using terminal colors.")
942 (license license:expat)))
944 (define-public python-pyprind
946 (name "python-pyprind")
950 (uri (pypi-uri "PyPrind" version))
953 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
954 (build-system python-build-system)
956 (list python-psutil))
957 (home-page "https://github.com/rasbt/pyprind")
958 (synopsis "Python Progress Bar and Percent Indicator Utility")
959 (description "The PyPrind (Python Progress Indicator) module provides a
960 progress bar and a percentage indicator object that let you track the progress
961 of a loop structure or other iterative computation.")
962 (license license:bsd-3)))
964 (define-public python-glymur
966 (name "python-glymur")
970 (method git-fetch) ; no tests data in PyPi package
972 (url "https://github.com/quintusdias/glymur")
973 (commit (string-append "v" version))))
974 (file-name (git-file-name name version))
976 (base32 "1cq9r8vzwvds1kasy5gc2rxw034jh9l43rraps1n739072pfz6qg"))))
977 (build-system python-build-system)
981 #~(modify-phases %standard-phases
982 (add-after 'unpack 'patch-library-locations
983 (lambda* (#:key inputs #:allow-other-keys)
984 ;; XXX: It's a workaround for Python inability to find the
985 ;; .so libraries with ctypes.util.find_library()
986 (substitute* '("glymur/config.py")
987 (("path = find_library\\(libname\\)")
989 "if libname == \"openjp2\":\n"
991 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
992 " elif libname == \"tiff\":\n"
994 (search-input-file inputs "/lib/libtiff.so") "\"\n"
995 " elif libname == \"c\":\n"
997 (search-input-file inputs "/lib/libc.so.6") "\"\n")))))
998 ;; TODO: implement as a feature of python-build-system (PEP-621,
1002 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
1003 ;; ZIP does not support timestamps before 1980.
1004 (setenv "SOURCE_DATE_EPOCH" "315532800")
1005 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
1007 (lambda* (#:key outputs #:allow-other-keys)
1008 (let ((whl (car (find-files "dist" "\\.whl$"))))
1009 (invoke "pip" "--no-cache-dir" "--no-input"
1010 "install" "--no-deps" "--prefix" #$output whl))))
1012 (lambda* (#:key tests? #:allow-other-keys)
1014 ;; Failing test due to inability of
1015 ;; ctypes.util.find_library() to determine library path,
1016 ;; which is patched above.
1017 (delete-file "tests/test_config.py")
1018 (invoke "python" "-m" "pytest" "-vv" "tests")))))))
1020 (list python-pypa-build python-pytest))
1022 (list openjpeg ; glymur/lib/openjp2.py
1023 libtiff)) ; glymur/lib/tiff.py
1028 (home-page "https://github.com/quintusdias/glymur")
1029 (synopsis "Python interface to OpenJPEG and LibTIFF")
1031 "This package provides Python interface to the OpenJPEG library which
1032 allows one to read and write JPEG 2000 files")
1033 (license license:expat)))
1035 (define-public python-gphoto2
1037 (name "python-gphoto2")
1041 (uri (pypi-uri "gphoto2" version))
1044 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
1045 (build-system python-build-system)
1050 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
1051 (synopsis "Python interface to libgphoto2")
1052 (description "@code{python-gphoto2} is a comprehensive Python interface
1053 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
1054 automatically generate the interface code.")
1055 (license license:gpl3+)))
1057 (define-public python-colour
1059 (name "python-colour")
1063 (uri (pypi-uri "colour" version))
1066 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
1067 (build-system python-build-system)
1069 (list python-d2to1))
1070 (home-page "https://github.com/vaab/colour")
1071 (synopsis "Convert and manipulate various color representations")
1072 (description "Pythonic way to manipulate color representations (HSL, RVB,
1074 (license license:expat)))
1076 (define-public python-d2to1
1078 (name "python-d2to1")
1079 (version "0.2.12.post1")
1082 (uri (pypi-uri "d2to1" version))
1085 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
1086 (build-system python-build-system)
1089 (home-page "https://github.com/embray/d2to1")
1090 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
1092 (description "The python package d2to1 (the d is for distutils) allows
1093 using distutils2-like setup.cfg files for a package's metadata with a
1094 distribute/setuptools setup.py script.")
1095 (license license:bsd-2)))
1097 (define-public python-rawkit
1099 (name "python-rawkit")
1103 (uri (pypi-uri "rawkit" version))
1106 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
1107 (build-system python-build-system)
1109 (list python-pytest python-mock))
1112 (home-page "https://rawkit.readthedocs.io")
1113 (synopsis "Ctypes-based LibRaw binding for Python")
1114 (description "The rawkit package provides two modules: rawkit and libraw.
1115 The rawkit module provides a high-level Pythonic interface for developing raw
1116 photos, while the libraw module provides a CTypes based interface for
1117 interacting with the low-level LibRaw C APIs.")
1118 (license license:expat)))
1120 (define-public python-easygui
1122 (name "python-easygui")
1126 (uri (pypi-uri "easygui" version))
1129 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
1130 (build-system python-build-system)
1132 (list `(,python "tk")))
1133 (home-page "https://github.com/robertlugg/easygui")
1134 (synopsis "GUI programming module for Python")
1135 (description "EasyGUI is a module for very simple, very easy GUI
1136 programming in Python. EasyGUI is different from other GUI generators in that
1137 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
1138 simple function calls.")
1139 (license license:bsd-3)))
1141 (define-public python-pymd4c
1143 (name "python-pymd4c")
1144 (version "0.4.6.0b1")
1148 (uri (pypi-uri "pymd4c" version))
1150 (base32 "07s3arn85ri92im6x3ipljdmrxmpik7irs06i6lm17j1x6j9841d"))))
1151 (build-system python-build-system)
1155 (list python-flake8 python-pkgconfig pkg-config))
1156 (home-page "https://github.com/dominickpastore/pymd4c")
1157 (synopsis "Python bindings for MD4C")
1159 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
1161 (license license:expat)))
1163 (define-public python-pymediainfo
1165 (name "python-pymediainfo")
1170 (uri (pypi-uri "pymediainfo" version))
1173 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
1174 (build-system python-build-system)
1176 (list python-setuptools-scm python-pytest))
1178 (list libmediainfo))
1181 (modify-phases %standard-phases
1182 (add-after 'unpack 'patch-libmediainfo
1184 (substitute* "pymediainfo/__init__.py"
1185 (("libmediainfo.so.0")
1186 (search-input-file %build-inputs
1187 "/lib/libmediainfo.so.0")))))
1189 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
1191 (add-installed-pythonpath inputs outputs)
1192 ;; Skip the only failing test "test_parse_url" because it tries
1193 ;; to access the internet.
1194 (invoke "pytest" "-vv" "-k" "not test_parse_url")))))))
1196 "https://github.com/sbraz/pymediainfo")
1198 "Python wrapper for the mediainfo library")
1200 "This package provides a Python wrapper for the mediainfo library to
1201 access the technical and tag data for video and audio files.")
1202 (license license:expat)))
1204 (define-public python-psutil
1206 (name "python-psutil")
1211 (uri (pypi-uri "psutil" version))
1213 (base32 "09fa4vfhansixvxd3lv664xcrbnfdyfn53hm2wr0rf3bsvdl5646"))))
1214 (build-system python-build-system)
1216 ;; FIXME: some tests do not return and time out. Some tests fail because
1217 ;; some processes survive kill().
1219 (home-page "https://github.com/giampaolo/psutil")
1220 (synopsis "Library for retrieving information on running processes")
1222 "@code{psutil} (Python system and process utilities) is a library for
1223 retrieving information on running processes and system utilization (CPU,
1224 memory, disks, network) in Python. It is useful mainly for system monitoring,
1225 profiling and limiting process resources and management of running processes.
1226 It implements many functionalities offered by command line tools such as: ps,
1227 top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
1228 iotop, uptime, pidof, tty, taskset, pmap.")
1229 (license license:bsd-3)))
1231 (define-public python-shapely
1233 (name "python-shapely")
1238 (uri (pypi-uri "Shapely" version))
1240 (base32 "130rqd0czi128wm5pdn47v4m6czxd7pkzanbya8q48gsm8ffb5d1"))))
1241 (build-system python-build-system)
1243 (list python-cython python-matplotlib python-pytest
1248 (list python-numpy))
1251 (modify-phases %standard-phases
1252 (add-after 'unpack 'patch-geos-path
1253 (lambda* (#:key inputs #:allow-other-keys)
1254 (let ((geos (assoc-ref inputs "geos"))
1255 (glibc (assoc-ref inputs ,(if (%current-target-system)
1256 "cross-libc" "libc"))))
1257 (substitute* '("shapely/geos.py" "shapely/_buildcfg.py")
1258 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
1259 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
1260 geos "/lib/libgeos_c.so'])"))
1261 (("free = load_dll\\('c'\\)\\.free")
1262 (string-append "free = load_dll('c', fallbacks=['"
1263 glibc "/lib/libc.so.6']).free"))
1264 (("free = load_dll\\('c', fallbacks=.*\\)\\.free")
1265 (string-append "free = load_dll('c', fallbacks=['"
1266 glibc "/lib/libc.so.6']).free"))))
1268 (home-page "https://github.com/Toblerity/Shapely")
1269 (synopsis "Library for the manipulation and analysis of geometric objects")
1270 (description "Shapely is a Python package for manipulation and analysis of
1271 planar geometric objects. It is based on the @code{GEOS} library.")
1272 (license license:bsd-3)))
1274 (define-public python-shortuuid
1276 (name "python-shortuuid")
1281 (uri (pypi-uri "shortuuid" version))
1284 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
1285 (build-system python-build-system)
1288 (home-page "https://github.com/skorokithakis/shortuuid")
1289 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
1291 "@code{shortuuid} is a Python library for generating concise, unambiguous
1292 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
1293 module and then similar looking characters are removed.")
1294 (license license:bsd-3)))
1296 (define-public python-logwrap
1298 (name "python-logwrap")
1299 (version "8.2.0.post0")
1303 (uri (pypi-uri "logwrap" version))
1306 "1dv7gny3rfci5cal2ipr6d0pcz3yhka7af96dfsd3ir1mxy8p1j9"))))
1307 (build-system python-build-system)
1309 `(#:tests? #f ; Tests not included in pypi release.
1311 (modify-phases %standard-phases
1313 (lambda* (#:key tests? #:allow-other-keys)
1318 (list python-cython python-pytest python-setuptools-scm python-toml
1320 (home-page "https://github.com/python-useful-helpers/logwrap")
1321 (synopsis "Decorator for logging function arguments")
1322 (description "This package provides a decorator to log function arguments
1323 and function call return values in a human-readable way.")
1324 (license license:asl2.0)))
1326 (define-public python-clyent
1328 (name "python-clyent")
1333 (uri (pypi-uri "clyent" version))
1336 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
1337 (build-system python-build-system)
1340 (home-page "https://github.com/Anaconda-Platform/clyent")
1341 (synopsis "Command line client library")
1342 (description "Clyent is a Python command line utility library. It is used
1343 by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
1344 (license license:bsd-3)))
1346 (define-public python-babel
1348 (name "python-babel")
1353 (uri (pypi-uri "Babel" version))
1356 "018yg7g2pa6vjixx1nx41cfispgfi0azzp0a1chlycbj8jsil0ys"))))
1357 (build-system python-build-system)
1359 (list python-freezegun python-pytest tzdata-for-tests))
1363 `(#:phases (modify-phases %standard-phases
1366 (invoke "pytest" "-vv"))))))
1367 (home-page "https://babel.pocoo.org/")
1369 "Tools for internationalizing Python applications")
1371 "Babel is composed of two major parts:
1372 - tools to build and work with gettext message catalogs
1373 - a Python interface to the CLDR (Common Locale Data Repository), providing
1374 access to various locale display names, localized number and date formatting,
1376 (license license:bsd-3)))
1378 (define-public python-bidict
1380 (name "python-bidict")
1385 (uri (pypi-uri "bidict" version))
1388 "02dy0b1k7qlhn7ajyzkrvxhyhjj0hzcq6ws3zjml9hkdz5znz92g"))))
1389 (build-system python-build-system)
1391 (list python-coverage
1396 python-pytest-benchmark
1398 python-setuptools-scm
1399 python-sortedcollections
1400 python-sortedcontainers
1402 python-sphinx-autodoc-typehints
1405 `(#:phases (modify-phases %standard-phases
1406 (add-after 'unpack 'relax-reqs
1408 (substitute* "setup.py"
1409 (("sortedcollections < 2") "sortedcollections"))
1412 (lambda _ (invoke "./run_tests.py"))))))
1413 (home-page "https://bidict.readthedocs.io")
1414 (synopsis "Bidirectional mapping library")
1415 (description "The @code{bidict} library provides several data structures
1416 for working with bidirectional mappings in Python.")
1417 (license license:mpl2.0)))
1419 (define-public python-bip39
1421 (name "python-bip39")
1426 (uri (pypi-uri "bip39" version))
1428 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
1429 (build-system python-build-system)
1430 (native-inputs (list python-pytest))
1431 (home-page "https://github.com/de-centralized-systems/python-bip39/")
1432 (synopsis "Self-contained and simple BIP39 implementation in Python")
1434 "This package provides a self-contained and simple BIP39
1435 implementation written in Python. It includes a @code{bip39.py} executable.
1437 BIP39 is a standardized mapping between binary data (the @emph{entropy}),
1438 and a list of words that are easier to remember for humans (the
1440 (license license:expat)))
1442 (define-public python-bitarray
1444 (name "python-bitarray")
1448 (uri (pypi-uri "bitarray" version))
1451 "177fj6wbw5jln54wpp6plcqy2329wjkwqwvgz7022rrg3xfrq49g"))))
1452 (build-system python-build-system)
1453 (home-page "https://github.com/ilanschnell/bitarray")
1454 (synopsis "Efficient arrays of booleans")
1455 (description "This package provides an object type which efficiently
1456 represents an array of booleans. Bitarrays are sequence types and behave very
1457 much like usual lists. Eight bits are represented by one byte in a contiguous
1458 block of memory. The user can select between two representations:
1459 little-endian and big-endian. All of the functionality is implemented in C.
1460 Methods for accessing the machine representation are provided. This can be
1461 useful when bit level access to binary files is required, such as portable
1462 bitmap image files. Also, when dealing with compressed data which uses
1463 variable bit length encoding, you may find this module useful.")
1464 (license license:psfl)))
1466 (define-public python-boolean.py
1468 (name "python-boolean.py")
1472 ;; There's no source tarball on PyPI.
1475 (url "https://github.com/bastikr/boolean.py")
1476 (commit (string-append "v" version))))
1477 (file-name (git-file-name name version))
1479 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
1480 (build-system python-build-system)
1481 (home-page "https://github.com/bastikr/boolean.py")
1482 (synopsis "Boolean algebra in one Python module")
1484 "This is a small Python library that implements boolean algebra.
1485 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
1486 @code{Symbol} class that can take on one of these two values. Calculations
1487 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
1488 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
1489 Expressions are constructed from parsed strings or directly in Python.")
1490 (license license:bsd-2)))
1492 (define-public python-hdf4
1494 (name "python-hdf4")
1499 (uri (pypi-uri name version))
1502 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
1503 (build-system python-build-system)
1504 (native-inputs `(("nose" ,python-nose)))
1505 (propagated-inputs `(("numpy" ,python-numpy)))
1508 ("libjpeg" ,libjpeg-turbo)
1512 (modify-phases %standard-phases
1515 (invoke "./runexamples.sh")
1516 (invoke "nosetests" "-v"))))))
1517 (home-page "https://github.com/fhs/python-hdf4")
1518 (synopsis "Python interface to the NCSA HDF4 library")
1520 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
1521 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
1522 NetCDF files can also be read and modified. Python-HDF4 is a fork of
1523 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
1524 (license license:expat)))
1526 (define-public python-h5netcdf
1528 (name "python-h5netcdf")
1533 (uri (pypi-uri "h5netcdf" version))
1535 (base32 "1b2dcgf5rwy7pb7hr4prkc5vgcw9qc2was20dmnj90lbrpx08rvp"))))
1536 (build-system python-build-system)
1539 #~(modify-phases %standard-phases
1541 (lambda* (#:key tests? #:allow-other-keys)
1543 (invoke "pytest" "-vv" "h5netcdf/tests")))))))
1545 (list python-netcdf4
1547 python-setuptools-scm))
1549 (list python-h5py python-packaging))
1550 (home-page "https://h5netcdf.org")
1551 (synopsis "Python interface for the netCDF4 file-format based on h5py")
1552 (description "This package provides Python interface for the netCDF4
1553 file-format that reads and writes local or remote HDF5 files directly via h5py
1554 or h5pyd, without relying on the Unidata netCDF library")
1555 (license license:bsd-3)))
1557 (define-public python-h5py
1559 (name "python-h5py")
1564 (uri (pypi-uri "h5py" version))
1567 "0afv805vqrm5071g7alwv41920nhh8kjv4m5nbia9awj9a0x4ll7"))))
1568 (build-system python-build-system)
1570 `(#:tests? #f ; no test target
1572 (modify-phases %standard-phases
1573 (add-after 'unpack 'fix-hdf5-paths
1574 (lambda* (#:key inputs #:allow-other-keys)
1575 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5")))))))
1577 (list python-six python-numpy))
1581 (list python-cython python-pkgconfig pkg-config))
1582 (home-page "https://www.h5py.org/")
1583 (synopsis "Read and write HDF5 files from Python")
1585 "The h5py package provides both a high- and low-level interface to the
1586 HDF5 library from Python. The low-level interface is intended to be a
1587 complete wrapping of the HDF5 API, while the high-level component supports
1588 access to HDF5 files, datasets and groups using established Python and NumPy
1590 (license license:bsd-3)))
1592 (define-public python-hnswlib
1594 (name "python-hnswlib")
1599 (uri (pypi-uri "hnswlib" version))
1601 (base32 "0wf1cwmxmdzfqmfhrkqdxb5spf21ylgl2bidswhzjrqhwf35c9qf"))))
1602 (build-system python-build-system)
1605 (modify-phases %standard-phases
1606 (add-after 'unpack 'disable-native-optimization
1608 (substitute* "setup.py"
1609 ((", '-march=native'") "")))))))
1611 (list python-numpy))
1614 (home-page "https://github.com/nmslib/hnswlib")
1615 (synopsis "Fast approximate nearest neighbor search")
1616 (description "Hnswlib is a header-only C++ implementation of fast
1617 approximate nearest neighbor search with Python bindings.")
1618 (license license:asl2.0)))
1620 (define-public python-pyls-black
1622 (name "python-pyls-black")
1626 ;; There are no tests in the PyPI tarball.
1629 (url "https://github.com/rupert/pyls-black/")
1630 (commit (string-append "v" version))))
1631 (file-name (git-file-name name version))
1633 (base32 "0bkhfnlik89j3yamr20br4wm8975f20v33wabi2nyxvj10whr5dj"))
1634 ;; Patch to work with python-lsp-server. Taken from
1635 ;; <https://github.com/rupert/pyls-black/pull/37>.
1636 (modules '((guix build utils)))
1639 (substitute* "setup.cfg"
1640 (("python-language-server")
1641 "python-lsp-server"))
1642 (substitute* '("pyls_black/plugin.py" "tests/test_plugin.py")
1643 (("pyls_format_document")
1644 "pylsp_format_document")
1645 (("pyls_format_range")
1646 "pylsp_format_range")
1647 (("from pyls([ \\.])" _ char)
1648 (string-append "from pylsp" char)))))))
1649 (build-system python-build-system)
1651 `(#:test-target "pytest"))
1653 (list python-black python-lsp-server python-tomli))
1655 (list python-flake8 python-isort python-mypy python-pytest
1656 python-pytest-runner))
1657 (home-page "https://github.com/rupert/pyls-black")
1658 (synopsis "Black plugin for the Python Language Server")
1659 (description "Black plugin for the Python Language Server.")
1660 (license license:expat)))
1662 (define-public python-sh
1669 (uri (pypi-uri "sh" version))
1672 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
1673 (build-system python-build-system)
1676 (modify-phases %standard-phases
1679 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
1680 (setenv "HOME" "/tmp")
1681 (invoke "python" "sh.py" "test"))))))
1683 (list python-coverage))
1684 (home-page "https://github.com/amoffat/sh")
1685 (synopsis "Python subprocess replacement")
1686 (description "This package provides a replacement for Python's
1687 @code{subprocess} feature.")
1688 (license license:expat)))
1690 (define-public python-cftime
1692 (name "python-cftime")
1697 (uri (pypi-uri "cftime" version))
1699 (base32 "0l1a22zlhdpgaisibvvm7dhij4vzfm661rnv00y2snpyqxpdgi3d"))))
1700 (build-system python-build-system)
1702 (list python-numpy))
1704 (list python-check-manifest
1712 (home-page "https://unidata.github.io/cftime/")
1713 (synopsis "Library for time handling")
1715 "This package provides time-handling functionality that used to be part
1716 of the netcdf4 package before.")
1717 (license license:expat)))
1719 (define-public python-netcdf4
1721 (name "python-netcdf4")
1726 (uri (pypi-uri "netCDF4" version))
1729 "0qxs8r1qmsmg760wm5q0wqlcm7hdd3k7cghryw6wvqd3v5rs7vwm"))))
1730 (build-system python-build-system)
1733 (modify-phases %standard-phases
1734 (add-after 'unpack 'configure-locations
1735 (lambda* (#:key inputs #:allow-other-keys)
1736 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
1739 (list python-cython))
1741 (list python-numpy python-cftime))
1743 (list netcdf hdf4 hdf5))
1744 (home-page "https://github.com/Unidata/netcdf4-python")
1745 (synopsis "Python/numpy interface to the netCDF library")
1746 (description "Netcdf4-python is a Python interface to the netCDF C
1747 library. netCDF version 4 has many features not found in earlier
1748 versions of the library and is implemented on top of HDF5. This module
1749 can read and write files in both the new netCDF 4 and the old netCDF 3
1750 format, and can create files that are readable by HDF5 clients. The
1751 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
1752 to users of that module.")
1753 ;; The software is mainly ISC, but includes some files covered
1754 ;; by the Expat license.
1755 (license (list license:isc license:expat))))
1757 (define-public python-ncclient
1759 (name "python-ncclient")
1763 (method git-fetch) ;no tests in PyPI release
1765 (url "https://github.com/ncclient/ncclient")
1766 (commit (string-append "v" version))))
1767 (file-name (git-file-name name version))
1770 "0cb568z5syg6hh0dv813bw7s1mjy7ga5xzxbm9naf4zz2qfdg4js"))))
1771 (build-system python-build-system)
1773 `(#:phases (modify-phases %standard-phases
1775 (lambda* (#:key tests? #:allow-other-keys)
1777 (invoke "pytest")))))))
1779 (list python-pytest))
1781 (list python-lxml python-paramiko))
1782 (home-page "https://github.com/ncclient/ncclient")
1783 (synopsis "Python library for NETCONF clients")
1784 (description "@code{ncclient} is a Python library that facilitates
1785 client-side scripting and application development around the NETCONF
1787 (license license:asl2.0)))
1789 (define-public python-ncls
1791 (name "python-ncls")
1795 (uri (pypi-uri "ncls" version))
1798 "1wx06xqknd2r98w8z93f47g5dpxzn92kamhj8vkq0nj569hf7cg1"))))
1799 (build-system python-build-system)
1800 (propagated-inputs (list python-numpy))
1801 (home-page "https://github.com/endrebak/ncls")
1802 (synopsis "Nested containment list data structure")
1804 "This package provides a wrapper for the nested containment list data
1805 structure. It is a static interval-tree that is fast for both construction
1807 (license license:bsd-3)))
1809 (define-public python-license-expression
1811 (name "python-license-expression")
1816 (uri (pypi-uri "license-expression" version))
1818 (base32 "1g0sgphss8hbi1rpl4avy1nmbixmy9v194xdbvkjgl90vzgy2q3r"))))
1819 (build-system python-build-system)
1821 (list python-boolean.py))
1822 (home-page "https://github.com/nexB/license-expression")
1823 (synopsis "Apply boolean logic to license expressions")
1825 "This Python module defines a tiny language to evaluate and compare
1826 license expressions using boolean logic. Logical combinations of licenses can
1827 be tested for equality, containment, and equivalence. They can be normalised
1828 and simplified. It supports SPDX license expressions as well as other naming
1829 conventions and aliases in the same expression.")
1830 (license license:gpl2+)))
1832 (define-public python-wand
1834 (name "python-wand")
1839 (uri (pypi-uri "Wand" version))
1841 (base32 "0mywzs235skwq670c80achrd34kangwy24793k1nij3651zllgrp"))))
1842 (build-system python-build-system)
1845 (modify-phases %standard-phases
1846 (add-after 'unpack 'find-magickwand
1847 (lambda* (#:key inputs #:allow-other-keys)
1848 (setenv "MAGICK_HOME" (assoc-ref inputs "imagemagick"))
1849 (setenv "WAND_MAGICK_LIBRARY_SUFFIX" ".Q16"))))))
1851 (list python-pytest))
1854 (home-page "https://docs.wand-py.org/")
1855 (synopsis "MagickWand API binding for Python")
1857 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
1858 (license license:expat)))
1860 (define-public python-lockfile
1862 (name "python-lockfile")
1867 (uri (pypi-uri "lockfile" version))
1870 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
1871 (build-system python-build-system)
1872 (arguments '(#:test-target "check"))
1875 (home-page "https://launchpad.net/pylockfile")
1876 (synopsis "Platform-independent file locking module")
1878 "The lockfile package exports a LockFile class which provides a simple
1879 API for locking files.")
1880 (license license:expat)))
1882 (define-public python-fb-re2
1884 (name "python-fb-re2")
1890 (url "https://github.com/facebook/pyre2")
1891 (commit (string-append "v" version))))
1892 (file-name (git-file-name name version))
1895 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
1896 (build-system python-build-system)
1899 (home-page "https://github.com/facebook/pyre2")
1900 (synopsis "Python wrapper for RE2")
1901 (description "This package provides a Python extension that wraps Google's
1902 RE2 regular expression library. It implements many of the features of
1903 Python's built-in @code{re} module with compatible interfaces.")
1904 (license license:bsd-3)))
1906 (define-public python-filelock
1908 (name "python-filelock")
1913 (uri (pypi-uri "filelock" version))
1916 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
1917 (build-system python-build-system)
1919 "https://github.com/benediktschmitt/py-filelock")
1920 (synopsis "Platform independent file lock")
1921 (description "@code{filelock} contains a single module implementing
1922 a platform independent file lock in Python, which provides a simple way of
1923 inter-process communication.")
1924 (license license:unlicense)))
1926 (define-public python-semantic-version
1928 (name "python-semantic-version")
1933 (uri (pypi-uri "semantic_version" version))
1936 "0m4avx8zdkzc7qglv5zlr54g8yna5vl098drg5396ql7aph2vjyj"))))
1937 (build-system python-build-system)
1938 (home-page "https://github.com/rbarrois/python-semanticversion")
1939 (synopsis "Semantic versioning module for Python")
1941 "The @code{semantic_version} class is a small library for handling
1942 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
1944 It can compare versions, generate a new version that represents a bump in one of
1945 the version levels, and check whether any given string is a proper semantic
1946 version identifier.")
1947 (license license:bsd-3)))
1949 (define-public python-serpent
1951 (name "python-serpent")
1956 (uri (pypi-uri "serpent" version))
1958 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
1959 (build-system python-build-system)
1961 (list python-attrs python-pytz))
1962 (home-page "https://github.com/irmen/Serpent")
1963 (synopsis "Serializer for literal Python expressions")
1965 "Serpent provides @code{ast.literal_eval()}-compatible object tree
1966 serialization. It serializes an object tree into bytes (an utf-8 encoded
1967 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
1968 to rebuild the original object tree.
1970 Because only safe literals are encoded, it is safe to send serpent data to
1971 other machines, such as over the network.")
1972 (license license:expat)))
1974 (define-public python-setuptools
1976 (name "python-setuptools")
1981 (uri (pypi-uri "setuptools" version))
1984 "1sllqf0bhsl2yilf1w0xnlz0r4yaksmwaj0ap91zdc6kgbigdjiv"))
1985 (modules '((guix build utils)))
1987 ;; Remove included binaries which are used to build self-extracting
1988 ;; installers for Windows.
1989 ;; TODO: Find some way to build them ourself so we can include them.
1990 '(for-each delete-file (find-files "setuptools"
1991 "^(cli|gui).*\\.exe$")))))
1992 (build-system python-build-system)
1993 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1994 ;; One could bootstrap with an internal untested setuptools.
1995 (arguments (list #:tests? #f))
1996 (home-page "https://pypi.org/project/setuptools/")
1997 (synopsis "Library designed to facilitate packaging Python projects")
1998 (description "Setuptools is a fully-featured, stable library designed to
1999 facilitate packaging Python projects, where packaging includes:
2001 @item Python package and module definitions
2002 @item distribution package metadata
2004 @item project installation
2005 @item platform-specific details.
2007 ;; TODO: setuptools now bundles the following libraries:
2008 ;; packaging, pyparsing, six and appdirs. How to unbundle?
2009 (license (list license:psfl ;setuptools itself
2010 license:expat ;six, appdirs, pyparsing
2011 license:asl2.0 ;packaging is dual ASL2/BSD-2
2014 (define-public python-setuptools-declarative-requirements
2016 (name "python-setuptools-declarative-requirements")
2022 "setuptools-declarative-requirements"
2026 "1l8zmcnp9h8sp8hsw7b81djaa1a9yig0y7i4phh5pihqz1gdn7yi"))))
2027 (build-system python-build-system)
2029 (list python-pytest python-setuptools-scm))
2031 (list python-toml python-wheel))
2033 "https://github.com/s0undt3ch/setuptools-declarative-requirements")
2034 (synopsis "File support for setuptools declarative setup.cfg")
2036 "This package provides file support for setuptools declarative
2038 (license license:asl2.0)))
2040 ;; The setuptools provided by Python 3.9 is too new for Tensorflow.
2041 (define-public python-setuptools-for-tensorflow
2044 (inherit python-setuptools)
2047 (inherit (package-source python-setuptools))
2048 (uri (pypi-uri "setuptools" version ".zip"))
2051 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65"))))
2053 `(#:tests? #f ; tests require vendored resources
2055 (modify-phases %standard-phases
2056 (add-after 'unpack 'compatibility-fixes
2058 ;; Python 3.9 no longer has HTMLParser
2059 (substitute* "setuptools/py33compat.py"
2060 (("html_parser.HTMLParser\\(\\).unescape")
2062 ;; This needs distutils.msvc9compiler
2063 (delete-file "setuptools/tests/test_msvc.py"))))))
2065 (list python-pytest python-mock python-six)))))
2067 (define-public python-uniseg
2069 (name "python-uniseg")
2074 (uri (pypi-uri "uniseg" version ".zip"))
2077 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
2078 (build-system python-build-system)
2080 '(#:tests? #f)) ; The test suite requires network access.
2084 "https://bitbucket.org/emptypage/uniseg-python")
2086 "Python library to determine Unicode text segmentations")
2088 "Uniseg is a Python package used to determine Unicode text segmentations.
2089 Supported segmentations include:
2091 @item @dfn{Code point} (any value in the Unicode codespace)
2092 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
2093 multiple Unicode code points, e.g. \"G\" + acute-accent)
2095 @item Sentence break
2098 (license license:expat)))
2100 (define-public python-humanfriendly
2102 (name "python-humanfriendly")
2107 (uri (pypi-uri "humanfriendly" version))
2110 "04ixg8b7p6xc8x8lffhi7wfl77xhszakhd0s6j0cf6a84j8yqlmz"))))
2111 (build-system python-build-system)
2113 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
2115 (home-page "https://humanfriendly.readthedocs.io")
2116 (synopsis "Human-friendly input and output in Python")
2118 "The functions and classes in @code{humanfriendly} can be used to make
2119 text interfaces more user-friendly. It includes tools to parse and format
2120 numbers, file sizes, and timespans, timers for long-running operations, menus
2121 to allow the user to choose from a list of options, and terminal interaction
2123 (license license:expat)))
2125 (define-public python-textparser
2127 (name "python-textparser")
2132 (uri (pypi-uri "textparser" version))
2135 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
2136 (build-system python-build-system)
2137 (home-page "https://github.com/eerimoq/textparser")
2138 (synopsis "Fast text parser for Python")
2139 (description "This library provides a text parser written in the Python
2140 language. It aims to be fast.")
2141 (license license:expat)))
2143 (define-public python-aenum
2145 (name "python-aenum")
2150 (uri (pypi-uri "aenum" version))
2152 (base32 "0r1812bjm72x73pl7y4yhffr4zbdjgxa08avsy4b3di0pqgqv0l1"))))
2153 (build-system python-build-system)
2155 `(#:phases (modify-phases %standard-phases
2158 ;; We must run the test suite module directly, as it
2159 ;; fails to define the 'tempdir' variable in scope for
2160 ;; the tests otherwise
2161 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
2162 ;; issues/32/running-tests-with-python-setuppy-test).
2163 (invoke "python3" "aenum/test.py")
2164 ;; This one fails with "NameError: name
2165 ;; 'test_pickle_dump_load' is not defined" (see:
2166 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
2167 ;; /error-running-the-test_v3py-test-suite).
2168 ;; (invoke "python3" "aenum/test_v3.py")
2170 (home-page "https://bitbucket.org/stoneleaf/aenum")
2171 (synopsis "Advanced enumerations, namedtuples and constants for Python")
2172 (description "The aenum library includes an @code{Enum} base class, a
2173 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
2175 (license license:bsd-3)))
2177 (define-public python-can
2184 (uri (pypi-uri "python-can" version))
2187 "0pcbdgdw94lc2sxd56w6wdsshrs9dd5d3wp0x4sfd0drzx32inar"))))
2188 (build-system python-build-system)
2190 `(#:phases (modify-phases %standard-phases
2191 (add-after 'unpack 'relax-version-requirements
2193 (substitute* "setup.py"
2194 (("mock~=2\\.0") "mock")
2195 (("coverage<5") "coverage")
2196 (("pytest~=4\\.6") "pytest")
2197 (("pytest-timeout~=1\\.3") "pytest-timeout")
2198 (("pytest-cov.*") "pytest-cov\n")
2199 (("hypothesis~=4\\.56") "hypothesis"))))
2200 (add-after 'unpack 'fix-broken-tests
2201 ;; The tests try to run two scripts it expects should be
2202 ;; in PATH, but they aren't at this time (see:
2203 ;; https://github.com/hardbyte/python-can/issues/805).
2205 (substitute* "test/test_scripts.py"
2206 (("\"can_logger\\.py --help\"") "")
2207 (("\"can_player\\.py --help\"") ""))))
2209 (lambda* (#:key tests? #:allow-other-keys)
2211 (invoke "pytest" "-vv" "test"
2212 ;; Disable tests which require specific CAN
2213 ;; drivers we have no package for in Guix.
2214 "--ignore" "test/test_interface_canalystii.py"
2215 ;; These tests fail with "OSError: [Errno 19]
2217 "-k" "not BasicTestUdpMulticastBusIPv")))))))
2219 (list python-msgpack python-typing-extensions python-wrapt))
2221 (list python-codecov
2226 python-parameterized
2230 python-pytest-runner
2231 python-pytest-timeout))
2232 (home-page "https://github.com/hardbyte/python-can")
2233 (synopsis "Controller Area Network (CAN) interface module for Python")
2234 (description "This package defines the @code{can} module, which provides
2235 controller area network (CAN) support for Python developers; providing common
2236 abstractions to different hardware devices, and a suite of utilities for
2237 sending and receiving messages on a CAN bus.")
2238 (license license:lgpl3+)))
2240 (define-public python-canopen
2242 (name "python-canopen")
2247 (uri (pypi-uri "canopen" version))
2249 (base32 "1nb543wb37kj95v6bhh272lm5gkpi41q3pnsl1fxlyizm2gamj5w"))))
2250 (build-system python-build-system)
2251 (native-inputs (list python-packaging))
2252 (propagated-inputs (list python-can))
2253 (home-page "https://github.com/christiansandberg/canopen")
2254 (synopsis "CANopen stack implementation")
2256 "This package provides a Python implementation of the
2257 @uref{https://www.can-cia.org/canopen/,CANopen standard} for
2258 @acronym{CANs, controller-area networks}. The aim of the project is to
2259 support the most common parts of the CiA 301 standard in a simple
2260 Pythonic interface. It is mainly targeted for testing and automation
2261 tasks rather than a standard compliant master implementation.")
2262 (license license:expat)))
2264 (define-public python-caniusepython3
2266 (name "python-caniusepython3")
2271 (uri (pypi-uri "caniusepython3" version))
2274 "0a755444ln38j8d7xb3yw0wzpd0mjrzfn6zqvsh06nw1vdaq4l28"))))
2275 (build-system python-build-system)
2277 `(#:phases (modify-phases %standard-phases
2278 (add-after 'unpack 'relax-requirements
2280 (substitute* "setup.py"
2281 ;; These are for compatibility with Python 2.
2282 ((".*'argparse', 'backports.functools_lru_cache',.*")
2284 (substitute* "dev_requirements.txt"
2285 ((".*pylint.*") "")) ;not actually required
2289 (invoke "py.test" "-k" "not NetworkTests"))))))
2291 (list python-distlib python-packaging python-requests))
2293 (list python-mock python-pytest))
2294 (home-page "https://github.com/brettcannon/caniusepython3")
2295 (synopsis "Check for Python 3-incompatible Python libraries")
2296 (description "The @command{caniusepython3} command scans your project and
2297 reports the Python 3-incompatible libraries it found. It can also be used as
2299 (license license:asl2.0)))
2301 (define-public python-diskcache
2303 (name "python-diskcache")
2308 (uri (pypi-uri "diskcache" version))
2311 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
2312 (build-system python-build-system)
2314 `(#:tests? #f)) ;test suite not included in the release
2315 (home-page "http://www.grantjenks.com/docs/diskcache/")
2316 (synopsis "Disk and file backed cache library")
2317 (description "DiskCache is a disk and file backed persistent cache.")
2318 (license license:asl2.0)))
2320 (define-public python-argparse-addons
2322 (name "python-argparse-addons")
2327 (uri (pypi-uri "argparse_addons" version))
2329 (base32 "1yx54dmnr3xggjcjk6bbdafvzp6cynrakl56wyz3jglmfvk0znpm"))))
2330 (build-system python-build-system)
2331 (home-page "https://github.com/eerimoq/argparse_addons")
2332 (synopsis "Extensions for Python's @code{argparse} library")
2333 (description "This Python library provides additional types and actions
2334 for the standard @code{argparse} library.")
2335 (license license:expat)))
2337 (define-public python-bitstruct
2339 (name "python-bitstruct")
2344 (uri (pypi-uri "bitstruct" version))
2347 "149c73yrqbph71bbyf925r2mbh2jdymqxc6d49lnylpiflf1j313"))))
2348 (build-system python-build-system)
2349 (home-page "https://github.com/eerimoq/bitstruct")
2350 (synopsis "Python values to and C bit field structs converter")
2351 (description "This module performs conversions between Python values and C
2352 bit field structs represented as Python byte strings. It is intended to have
2353 a similar interface as the @code{struct} module from Python, but working on
2354 bits instead of primitive data types like @code{char}, @code{int}, etc.")
2355 (license license:expat)))
2357 (define-public python-cantools
2359 (name "python-cantools")
2363 ;; We take the sources from the Git repository as the documentation is
2364 ;; not included with the PyPI archive.
2367 (url "https://github.com/eerimoq/cantools")
2369 (file-name (git-file-name name version))
2372 "1qcf1fcwif7w70qmhxw2b8kqh420igbinq60p1chzf98xcb0ansx"))))
2373 (build-system python-build-system)
2377 #~(modify-phases %standard-phases
2378 (add-after 'build 'build-doc
2380 ;; See: https://github.com/eerimoq/cantools/issues/190.
2381 (substitute* "README.rst"
2382 (("https://github.com/eerimoq/cantools/raw/master\
2385 (invoke "make" "-C" "docs" "man" "info")))
2386 (add-after 'install 'install-doc
2387 (lambda* (#:key outputs #:allow-other-keys)
2388 (let* ((info (string-append #$output "/share/info"))
2389 (man1 (string-append #$output "/share/man/man1")))
2390 (install-file "docs/_build/texinfo/cantools.info" info)
2391 (install-file "docs/_build/man/cantools.1" man1)))))))
2392 (native-inputs (list python-sphinx texinfo))
2394 (list python-argparse-addons
2400 python-parameterized
2402 (home-page "https://github.com/eerimoq/cantools")
2403 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
2404 (description "This package includes Controller Area Network (CAN) related
2405 tools that can be used to:
2407 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
2408 @item encode and decode CAN messages
2409 @item multiplex simple and extended signals
2410 @item diagnose DID encoding and decoding
2411 @item dump the CAN decoder output
2412 @item test CAN nodes
2413 @item generate C source code
2414 @item monitor the CAN bus
2416 (license license:expat)))
2418 (define-public python-capturer
2420 (name "python-capturer")
2425 (uri (pypi-uri "capturer" version))
2428 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
2429 (build-system python-build-system)
2433 (list python-humanfriendly))
2434 (home-page "https://capturer.readthedocs.io")
2435 (synopsis "Capture stdout and stderr streams of the current process")
2437 "The capturer package makes it easy to capture the stdout and stderr
2438 streams of the current process and subprocesses. Output can be relayed
2439 to the terminal in real time but is also available to the Python program
2440 for additional processing.")
2441 (license license:expat)))
2443 (define-public python-case
2445 (name "python-case")
2450 (uri (pypi-uri "case" version))
2453 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
2454 (build-system python-build-system)
2456 (list python-mock python-nose python-six))
2458 (list python-coverage))
2459 (home-page "https://github.com/celery/case")
2460 (synopsis "Unittest utilities and convenience methods")
2462 "The @code{case} package provides utilities on top of unittest, including
2463 some helpful Python 2 compatibility convenience methods.")
2464 (license license:bsd-3)))
2466 (define-public python-verboselogs
2468 (name "python-verboselogs")
2473 (uri (pypi-uri "verboselogs" version))
2476 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
2477 (build-system python-build-system)
2480 (modify-phases %standard-phases
2483 ;; Do not run pylint plugin test, as astroid is an old
2484 ;; unsupported version.
2485 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
2486 "verboselogs/tests.py"))))))
2488 (list python-mock python-pytest))
2489 (home-page "https://verboselogs.readthedocs.io")
2490 (synopsis "Verbose logging level for Python's logging module")
2492 "The @code{verboselogs} package extends Python's @code{logging} module to
2493 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
2494 (license license:expat)))
2496 (define-public python-coloredlogs
2498 (name "python-coloredlogs")
2503 (uri (pypi-uri "coloredlogs" version))
2506 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
2507 (build-system python-build-system)
2509 `(;Tests require some updated modules
2512 (list python-capturer))
2513 (home-page "https://coloredlogs.readthedocs.io")
2514 (synopsis "Colored stream handler for Python's logging module")
2516 "The @code{coloredlogs} package enables colored terminal output for
2517 Python's logging module. The @code{ColoredFormatter} class inherits from
2518 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
2519 messages in color.")
2520 (license license:expat)))
2522 (define-public python-editorconfig
2524 (name "python-editorconfig")
2529 (uri (pypi-uri "EditorConfig" version))
2532 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
2533 (build-system python-build-system)
2534 (home-page "https://editorconfig.org/")
2535 (synopsis "EditorConfig bindings for python")
2536 (description "The EditorConfig project consists of a file format for
2537 defining coding styles and a collection of text editor plugins that enable
2538 editors to read the file format and adhere to defined styles. EditorConfig
2539 files are easily readable and they work nicely with version control systems.")
2540 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
2541 (license (list license:bsd-2 license:psfl))))
2543 (define-public dosage
2550 (uri (pypi-uri "dosage" version))
2553 "0vmxgn9wd3j80hp4gr5iq06jrl4gryz5zgfdd2ah30d12sfcfig0"))))
2554 (build-system python-build-system)
2556 (list python-cached-property
2559 python-importlib-metadata
2564 (list python-pytest-cov python-pytest-xdist python-responses
2565 python-setuptools-scm))
2566 (home-page "https://github.com/webcomics/dosage")
2567 (synopsis "Comic strip downloader and archiver")
2568 (description "Dosage is designed to keep a local copy of specific webcomics and other
2569 picture-based content such as Picture of the Day sites. With the @command{dosage}
2570 command-line script you can get the latest strip of a webcomic, catch-up to the last strip
2571 downloaded, or download a strip for a particular date or index, if possible.")
2572 (license license:expat)))
2574 (define-public python-et-xmlfile
2576 (name "python-et-xmlfile")
2580 ;; Use a checkout because the PyPI archive does not contain tests.
2583 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
2584 (changeset version)))
2585 (file-name (string-append name "-" version "-checkout"))
2587 (base32 "09r8rjc5bhkqrm5c4n9jrlvad8vrvbyswl9g0wrc1qc7nzh9mpw7"))))
2588 (build-system python-build-system)
2591 #~(modify-phases %standard-phases
2593 (lambda* (#:key tests? #:allow-other-keys)
2595 (invoke "pytest" "-vv")))))))
2597 (list python-pytest python-lxml)) ;used for the tests
2598 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
2599 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
2600 (description "This Python library is based upon the @code{xmlfile} module
2601 from @code{lxml}. It aims to provide a low memory, compatible implementation
2602 of @code{xmlfile}.")
2603 (license license:expat)))
2605 (define-public python-openpyxl
2607 (name "python-openpyxl")
2611 ;; We use the upstream repository, as the tests are not included in the
2615 (url "https://foss.heptapod.net/openpyxl/openpyxl")
2616 (changeset version)))
2617 (file-name (string-append name "-" version "-checkout"))
2619 (base32 "1p8xvc2gjw6zyzbd7qdvc3x178sm00ymrbyh9539l4fpzgxh0j9c"))))
2620 (build-system python-build-system)
2622 `(#:phases (modify-phases %standard-phases
2625 (invoke "pytest"))))))
2626 (native-inputs (list python-lxml python-pillow python-pytest))
2627 (propagated-inputs (list python-et-xmlfile python-jdcal))
2628 (home-page "https://openpyxl.readthedocs.io")
2629 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
2631 "This Python library allows reading and writing to the Excel XLSX, XLSM,
2632 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
2634 (license license:expat)))
2636 (define-public python-eventlet
2638 (name "python-eventlet")
2643 (uri (pypi-uri "eventlet" version))
2646 "07qlyhcm0f28sxdizawvdf3d50m3hnbzz5kg3fjp7chvki44y540"))))
2647 (build-system python-build-system)
2649 (list python-dnspython python-greenlet python-monotonic python-six))
2654 (modify-phases %standard-phases
2655 (add-after 'unpack 'avoid-OSError
2657 ;; If eventlet tries to load greendns, an OSError is thrown when
2658 ;; getprotobyname is called. Thankfully there is an environment
2659 ;; variable to disable the greendns import, so use it:
2660 (setenv "EVENTLET_NO_GREENDNS" "yes")))
2661 (add-after 'unpack 'delete-broken-tests
2663 (delete-file "tests/greendns_test.py")
2664 (delete-file "tests/socket_test.py")))
2665 ;; See https://github.com/eventlet/eventlet/issues/562#issuecomment-714183009
2667 (lambda* (#:key tests? #:allow-other-keys)
2669 (invoke "nosetests" "-v" "tests/")))))))
2670 (home-page "https://eventlet.net")
2671 (synopsis "Concurrent networking library for Python")
2673 "Eventlet is a concurrent networking library for Python that
2674 allows you to change how you run your code, not how you write it.
2675 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
2676 Coroutines ensure that the developer uses a blocking style of programming
2677 that is similar to threading, but provide the benefits of non-blocking I/O.
2678 The event dispatch is implicit, which means you can easily use @code{Eventlet}
2679 from the Python interpreter, or as a small part of a larger application.")
2680 (license license:expat)))
2682 (define-public python-sinfo
2684 (name "python-sinfo")
2688 (uri (pypi-uri "sinfo" version))
2691 "0kdsp883mx0lfyykv0p12bvs203kdm3skb8bw5wf2pc7kb393sl1"))))
2692 (build-system python-build-system)
2694 (list python-stdlib-list))
2695 (home-page "https://gitlab.com/joelostblom/session_info")
2696 (synopsis "Output module version information loaded in a Python session")
2697 (description "This package outputs version information for modules loaded
2698 in the current session, Python, and the OS.")
2699 (license license:bsd-3)))
2701 (define-public python-six
2702 (package/inherit python-six-bootstrap
2706 (modify-phases %standard-phases
2709 (invoke "pytest" "-v"))))))
2711 `(("python-pytest" ,python-pytest-bootstrap)))))
2713 (define-public python2-six
2714 (let ((base (package-with-python2 python-six)))
2717 ;; Reduce Python 2 closure by disabling tests and removing the native
2719 (arguments (substitute-keyword-arguments (package-arguments base)
2721 `(modify-phases ,phases
2723 (native-inputs '()))))
2725 (define-public python-schedule
2727 (name "python-schedule")
2732 (uri (pypi-uri "schedule" version))
2735 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
2736 (build-system python-build-system)
2738 (list python-pytest python-mock))
2739 (home-page "https://github.com/dbader/schedule")
2740 (synopsis "Schedule periodic function calls in Python")
2742 "Schedule is an in-process scheduler for periodic jobs that uses the
2743 builder pattern for configuration. Schedule lets you run Python functions (or
2744 any other callable) periodically at pre-determined intervals using a simple,
2745 human-friendly syntax.")
2746 (license license:expat)))
2748 (define-public python-scour
2750 (name "python-scour")
2757 (url "https://github.com/scour-project/scour")
2759 (string-append "v" version))))
2760 (file-name (git-file-name name version))
2762 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
2765 (build-system python-build-system)
2766 (home-page "https://github.com/scour-project/scour")
2767 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
2768 (description "The goal of Scour is to output a file that renders
2769 identically at a fraction of the size by removing a lot of redundant
2770 information created by most SVG editors. Optimization options are typically
2771 lossless but can be tweaked for more aggressive cleaning.")
2772 (license license:asl2.0)))
2774 (define-public python-mechanize
2776 (name "python-mechanize")
2781 (uri (pypi-uri "mechanize" version))
2784 "1z9kqcwb8gfq2l6i42z624kxpd8692a0c8gw2x5bbm7n848w2mb3"))))
2785 (build-system python-build-system)
2787 (list python-html5lib))
2788 (home-page "https://github.com/python-mechanize/mechanize")
2790 "Stateful programmatic web browsing in Python")
2792 "Mechanize implements stateful programmatic web browsing in Python,
2793 after Andy Lester’s Perl module WWW::Mechanize.")
2794 (license license:bsd-3)))
2796 (define-public python-simpleaudio
2798 (name "python-simpleaudio")
2803 (uri (pypi-uri "simpleaudio" version))
2806 "07glihg0fpca0gvbbvqs9q815w8xhflzdvg72yvlsm23j9j8h739"))))
2807 (build-system python-build-system)
2813 "https://github.com/hamiltron/py-simple-audio")
2814 (synopsis "Simple, asynchronous audio playback for Python 3")
2816 "The @code{simplaudio} package provides cross-platform, dependency-free
2817 audio playback capability for Python 3 on OSX, Windows, and Linux.")
2818 (license license:expat))) ; MIT license
2820 (define-public python-simplejson
2822 (name "python-simplejson")
2827 (uri (pypi-uri "simplejson" version))
2830 "19pqqn01y6qmhhv8q6dh4p1acav49kl923kklnns2qxz5a6h766g"))))
2831 (build-system python-build-system)
2834 (home-page "https://simplejson.readthedocs.io/en/latest")
2836 "Json library for Python")
2838 "JSON (JavaScript Object Notation) is a subset of JavaScript
2839 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
2842 Simplejson exposes an API familiar to users of the standard library marshal
2843 and pickle modules. It is the externally maintained version of the json
2844 library contained in Python 2.6, but maintains compatibility with Python 2.5
2845 and (currently) has significant performance advantages, even without using
2846 the optional C extension for speedups. Simplejson is also supported on
2848 (license license:x11)))
2851 (define-public python-pyicu
2853 (name "python-pyicu")
2858 (uri (pypi-uri "PyICU" version))
2861 "0y2qhh443vydi3y7kmhyb6kz3z6d7qq7ld0sg88mfqalcp7dca9w"))))
2862 (build-system python-build-system)
2866 (list python-pytest python-six))
2867 (home-page "https://gitlab.pyicu.org/main/pyicu")
2868 (synopsis "Python extension wrapping the ICU C++ API")
2870 "PyICU is a python extension wrapping the ICU C++ API.")
2871 (license license:x11)))
2873 (define-public python-dogtail
2875 (name "python-dogtail")
2881 "https://gitlab.com/dogtail/dogtail/-/raw/released/"
2882 "dogtail-" version ".tar.gz"))
2885 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
2886 (build-system python-build-system)
2888 `(#:tests? #f ; TODO Launching dbus for the tests
2891 (modify-phases %standard-phases
2893 (lambda* (#:key tests? #:allow-other-keys)
2895 (system "Xvfb :1 &")
2896 (setenv "DISPLAY" ":1")
2897 (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
2900 (list python-pygobject python-pycairo python-pyatspi))
2902 `(("python-nose" ,python-nose)
2904 ("xvfb" ,xorg-server)
2906 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
2907 ("gobject-introspection" ,gobject-introspection)))
2908 (home-page "https://gitlab.com/dogtail/dogtail/")
2909 (synopsis "GUI test tool and automation framework written in Python")
2911 "Dogtail is a GUI test tool and automation framework written in Python.
2912 It uses Accessibility (a11y) technologies to communicate with desktop
2913 applications. dogtail scripts are written in Python and executed like any
2914 other Python program.")
2915 (license license:gpl2+)))
2917 (define-public python-empy
2919 (name "python-empy")
2923 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
2927 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
2928 (build-system python-build-system)
2930 `(#:tests? #f)) ; python2 only
2931 (home-page "http://www.alcyone.com/software/empy/")
2932 (synopsis "Templating system for Python")
2934 "EmPy is a system for embedding Python expressions and statements in
2935 template text; it takes an EmPy source file, processes it, and produces
2936 output. This is accomplished via expansions, which are special signals to the
2937 EmPy system and are set off by a special prefix (by default the at sign, @@).
2938 EmPy can expand arbitrary Python expressions and statements in this way, as
2939 well as a variety of special forms. Textual data not explicitly delimited in
2940 this way is sent unaffected to the output, allowing Python to be used in
2941 effect as a markup language. Also supported are callbacks via hooks,
2942 recording and playback via diversions, and dynamic, chainable filters. The
2943 system is highly configurable via command line options and embedded
2945 (license license:lgpl2.1+)))
2947 (define-public python-enum34
2949 (name "python-enum34")
2954 (uri (pypi-uri "enum34" version))
2957 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
2958 (build-system python-build-system)
2959 (home-page "https://pypi.org/project/enum34/")
2960 (synopsis "Backported Python 3.4 Enum")
2962 "Enum34 is the new Python stdlib enum module available in Python 3.4
2963 backported for previous versions of Python from 2.4 to 3.3.")
2964 (license license:bsd-3)))
2966 (define-public python-parse-type
2968 (name "python-parse-type")
2973 (uri (pypi-uri "parse_type" version))
2976 "07smqnzc9km7sbvxfyx4gdm9njrx58x8grdw6gs4gva81rk3rd10"))))
2977 (build-system python-build-system)
2980 (modify-phases %standard-phases
2982 (lambda* (#:key tests? #:allow-other-keys)
2984 (invoke "pytest" "-vv" "-c" "/dev/null")))))))
2985 (propagated-inputs (list python-six python-parse))
2986 (native-inputs (list python-pytest))
2987 (home-page "https://github.com/jenisys/parse_type")
2988 (synopsis "Extended parse module")
2989 (description "Parse_type extends the python parse module.")
2990 (license license:bsd-3)))
2992 (define-public python-parse
2994 (name "python-parse")
2999 (uri (pypi-uri "parse" version))
3002 "19063x4xdjpaf7rfxai6jpgm2k4yvkq7wha8aa8cagbjsqr60rli"))))
3003 (build-system python-build-system)
3006 (modify-phases %standard-phases
3008 (lambda _ (invoke "python" "test_parse.py"))))))
3009 (home-page "https://github.com/r1chardj0n3s/parse")
3010 (synopsis "Parse strings")
3012 "Parse strings using a specification based on the Python @code{format()}
3014 (license license:x11)))
3016 (define-public python-polib
3018 (name "python-polib")
3022 (uri (pypi-uri "polib" version))
3025 "0aikb8gcarhifn3sadrbbs5czagih9hjv250gsrgy9v1d49pvn7s"))))
3026 (build-system python-build-system)
3027 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
3028 (synopsis "Manipulate, create and modify gettext files")
3029 (description "Polib can manipulate any gettext format (po, pot and mo)
3030 files. It can be used to create po files from scratch or to modify
3032 (license license:expat)))
3034 (define-public python-polling2
3036 (name "python-polling2")
3041 (uri (pypi-uri "polling2" version))
3043 (base32 "0hp3238fv6k1qk43gv4jwnv1mwlkmx33akbj560b9nvsry1dmdwh"))))
3044 (build-system python-build-system)
3045 (arguments '(#:tests? #false)) ; no tests included
3047 (list python-mock python-pytest python-pytest-runner))
3048 (home-page "https://github.com/ddmee/polling2")
3049 (synopsis "Polling utility with many configurable options")
3050 (description "Polling2 is a utility used to wait for a function to return
3051 a certain expected condition.")
3052 (license license:expat)))
3054 (define-public python-poyo
3056 (name "python-poyo")
3061 (uri (pypi-uri "poyo" version))
3064 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
3065 (build-system python-build-system)
3066 (home-page "https://github.com/hackebrot/poyo")
3067 (synopsis "Lightweight YAML Parser for Python")
3069 "This package provides a lightweight YAML Parser for Python. It supports
3070 only a chosen subset of the YAML format that is required to parse cookiecutter
3071 user configuration files. It does not have support for serializing into YAML
3072 and is not compatible with JSON.")
3073 (license license:expat)))
3075 (define-public python-exceptiongroup
3077 (name "python-exceptiongroup")
3078 (version "1.0.0rc8")
3082 (url "https://github.com/agronholm/exceptiongroup")
3084 (file-name (git-file-name name version))
3087 "0xsbpv22n51p6yvyvz231mf8zhbi1i88b4zmacaxxx31zrq5ifv4"))))
3088 (build-system python-build-system)
3092 #~(modify-phases %standard-phases
3093 ;; XXX: PEP 517 manual build/install procedures copied from
3097 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
3098 ;; ZIP does not support timestamps before 1980.
3099 (setenv "SOURCE_DATE_EPOCH" "315532800")
3100 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
3102 (lambda* (#:key outputs #:allow-other-keys)
3103 (let ((whl (car (find-files "dist" "\\.whl$"))))
3104 (invoke "pip" "--no-cache-dir" "--no-input"
3105 "install" "--no-deps" "--prefix" #$output whl))))
3107 (lambda* (#:key tests? #:allow-other-keys)
3109 (invoke "pytest" "-vv" "tests")))))))
3110 (native-inputs (list python-flit-scm python-pypa-build python-pytest))
3111 (home-page "https://github.com/agronholm/exceptiongroup")
3112 (synopsis "PEP 654 backport from Python 3.11")
3113 (description "This is a backport of the @code{BaseExceptionGroup} and
3114 @code{ExceptionGroup} classes from Python 3.11.")
3115 (license license:expat)))
3117 (define-public python-extension-helpers
3119 (name "python-extension-helpers")
3124 (uri (pypi-uri "extension-helpers" version))
3126 (base32 "10iqjzmya2h4sk765dlm1pbqypwlqyh8rw59a5m9i63d3klnz2mc"))))
3127 (build-system python-build-system)
3129 (list python-coverage python-pytest-astropy python-pytest-cov
3130 python-setuptools-scm))
3131 (home-page "https://github.com/astropy/astropy-helpers")
3133 "Utilities for building and installing packages in the Astropy ecosystem")
3135 "The extension-helpers package includes many build, installation, and
3136 documentation-related tools used by the Astropy project.")
3137 (license license:bsd-3)))
3139 (define-public python-extras
3141 (name "python-extras")
3146 (uri (pypi-uri "extras" version))
3149 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
3150 (build-system python-build-system)
3152 ;; FIXME: Circular dependency on testtools.
3154 (home-page "https://github.com/testing-cabal/extras")
3155 (synopsis "Useful extensions to the Python standard library")
3157 "Extras is a set of extensions to the Python standard library.")
3158 (license license:expat)))
3160 (define-public python-mimeparse
3162 (name "python-mimeparse")
3167 (uri (pypi-uri "python-mimeparse" version))
3170 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
3171 (build-system python-build-system)
3174 (modify-phases %standard-phases
3177 (invoke "./mimeparse_test.py"))))))
3179 "https://github.com/dbtsai/python-mimeparse")
3180 (synopsis "Python library for parsing MIME types")
3182 "Mimeparse provides basic functions for parsing MIME type names and
3183 matching them against a list of media-ranges.")
3184 (license license:expat)))
3186 (define-public python-miniboa
3188 (name "python-miniboa")
3193 (uri (pypi-uri "miniboa" version))
3196 "002c1aki9hsrwj5plrwdrf3sk8rn95fqylqyjx2arrjfpsih4dgs"))))
3197 (build-system python-build-system)
3198 (home-page "https://github.com/shmup/miniboa")
3199 (synopsis "Simple, single-threaded Telnet server")
3201 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
3203 (license license:asl2.0)))
3205 (define-public python-pafy
3207 (name "python-pafy")
3212 (uri (pypi-uri "pafy" version))
3215 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
3216 (build-system python-build-system)
3218 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
3220 ;; Youtube-dl is a python package which is imported in the file
3221 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
3223 (home-page "https://np1.github.io/pafy/")
3224 (synopsis "Retrieve YouTube content and metadata")
3226 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
3227 (license license:lgpl3+)))
3229 (define-public python-miniupnpc
3231 (name "python-miniupnpc")
3238 (url "https://github.com/miniupnp/miniupnp")
3241 "miniupnpc_" (string-replace-substring version "." "_")))))
3243 (git-file-name name version))
3245 (base32 "03q1rlzvfzm15g1bfw2zqzavlsyaypnaf2k3cz6ha7k5rirkdy0l"))))
3246 (build-system python-build-system)
3250 #~(modify-phases %standard-phases
3251 (add-after 'unpack 'subdir
3252 (lambda* (#:key inputs #:allow-other-keys)
3254 (setenv "CC" #$(cc-for-target))
3255 (substitute* "Makefile"
3256 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
3257 (add-before 'subdir 'remove-kernel-version
3258 ;; Avoid embedding the running kernel version for reproducible builds
3261 "miniupnpc/updateminiupnpcstrings.sh"
3262 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix")))))))
3263 (inputs (list python)) ;we are building a Python extension
3264 (synopsis "UPnP client for Python")
3265 (description "Miniupnpc is a client library for Python programs to set up
3266 port forwards using @acronym{UPnP, Universal Plug and Play}.")
3267 (home-page "http://miniupnp.free.fr")
3268 (license license:bsd-3)))
3270 (define-public python-py
3277 (uri (pypi-uri "py" version))
3280 "1lqvkqk3b440g9z82gqbzlzas84wrm6ir8kplzhzavmn2pd1pf11"))))
3281 (build-system python-build-system)
3283 ;; FIXME: "ImportError: 'test' module incorrectly imported from
3284 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
3285 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
3286 ;; Is this module globally installed?"
3289 (list python-setuptools-scm))
3290 (home-page "https://github.com/pytest-dev/py")
3291 (synopsis "Python library for parsing, I/O, instrospection, and logging")
3293 "Py is a Python library for file name parsing, .ini file parsing, I/O,
3294 code introspection, and logging.")
3295 (license license:expat)))
3297 ;; Recent versions of python-fixtures and python-testrepository need
3298 ;; python-pbr for packaging, which itself needs these two packages for
3300 ;; To fix this circular dependency, we use a build of python-pbr, based on the
3301 ;; same source, just without any test dependencies and with tests disabled.
3302 ;; python-pbr-minmal is then used to package python-fixtures and
3303 ;; python-testrepository.
3304 ;; Strictly speaking we currently could remove the test-requirements from the
3305 ;; normal python-pbr package (and save this package) since test are disabled
3306 ;; there anyway. But this may change in future.
3307 (define-public python-pbr-minimal
3309 (name "python-pbr-minimal")
3314 (uri (pypi-uri "pbr" version))
3317 "1j8k5d4rdhy5bw5ai1vkjzln2albah94in3vvyvxa0n42fv81baz"))))
3318 (build-system python-build-system)
3321 (home-page "https://docs.openstack.org/pbr/latest/")
3322 (synopsis "Minimal build of python-pbr used for bootstrapping")
3324 "Used only for bootstrapping python2-pbr, you should not need this.")
3325 (license license:asl2.0)))
3327 (define-public python-pbr
3329 (inherit python-pbr-minimal)
3332 `(#:tests? #f)) ;; Most tests seem to use the Internet.
3334 (list git)) ;; pbr actually uses the "git" binary.
3336 `(("python-fixtures" ,python-fixtures-bootstrap)
3337 ;; discover, coverage, hacking, subunit
3338 ("python-mock" ,python-mock)
3339 ("python-six" ,python-six)
3340 ("python-sphinx" ,python-sphinx)
3341 ("python-testrepository" ,python-testrepository-bootstrap)
3342 ("python-testresources" ,python-testresources-bootstrap)
3343 ("python-testscenarios" ,python-testscenarios-bootstrap)
3344 ("python-testtools" ,python-testtools-bootstrap)
3345 ("python-virtualenv" ,python-virtualenv)))
3346 (synopsis "Enhance the default behavior of Python’s setuptools")
3348 "Python Build Reasonableness (PBR) is a library that injects some useful
3349 and sensible default behaviors into your setuptools run. It will set
3350 versions, process requirements files and generate AUTHORS and ChangeLog file
3351 from git information.
3354 (define-public python-pyrsistent
3356 (name "python-pyrsistent")
3358 (home-page "https://github.com/tobgu/pyrsistent")
3361 (uri (pypi-uri "pyrsistent" version))
3364 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
3365 (build-system python-build-system)
3367 '(#:phases (modify-phases %standard-phases
3368 ;; The package works fine with newer Pytest and Hypothesis, but
3369 ;; has pinned older versions to stay compatible with Python 2.
3370 (add-before 'check 'loosen-pytest-requirement
3372 (substitute* "setup.py"
3373 (("pytest<5") "pytest")
3374 (("hypothesis<5") "hypothesis"))
3377 (list python-hypothesis python-pytest python-pytest-runner))
3380 (synopsis "Persistent data structures for Python")
3382 "Pyrsistent is a number of persistent collections (by some referred to as
3383 functional data structures). Persistent in the sense that they are immutable.
3385 All methods on a data structure that would normally mutate it instead return a
3386 new copy of the structure containing the requested updates. The original
3387 structure is left untouched.")
3388 (license license:expat)))
3390 (define-public python-exif-read
3392 (name "python-exif-read")
3396 (uri (pypi-uri "ExifRead" version))
3399 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
3400 (build-system python-build-system)
3401 (arguments `(#:tests? #f)) ; no tests
3402 (home-page "https://github.com/ianare/exif-py")
3403 (synopsis "Python library to extract EXIF data from image files")
3405 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
3407 (license license:bsd-3)))
3409 (define-public python-pyld
3411 (name "python-pyld")
3415 (uri (pypi-uri "PyLD" version))
3418 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
3419 (build-system python-build-system)
3420 (home-page "https://github.com/digitalbazaar/pyld")
3421 (synopsis "Python implementation of the JSON-LD specification")
3423 "PyLD is an implementation of the JSON-LD specification.")
3424 (license license:bsd-3)))
3426 (define-public python-cli-helpers
3428 (name "python-cli-helpers")
3432 ;; There's no source tarball on PyPI.
3435 (url "https://github.com/dbcli/cli_helpers")
3436 (commit (string-append "v" version))))
3437 (file-name (git-file-name name version))
3439 (base32 "1hzavh9v9lkd1dn9f0nvg80f7v4banxvcrj10zy72przqz51k1sb"))))
3440 (build-system python-build-system)
3442 (list python-pytest))
3444 (list python-wcwidth python-configobj python-tabulate))
3445 (home-page "https://github.com/dbcli/cli_helpers")
3446 (synopsis "Helpers for building command-line apps")
3448 "CLI Helpers is a Python package that makes it easy to perform common
3449 tasks when building command-line apps. It's a helper library for command-line
3451 (license license:bsd-3)))
3453 (define-public python-click
3455 (name "python-click")
3460 (uri (pypi-uri "click" version))
3463 "0whs38a2i0561kwbgigs6vic9r0a1887m2v1aw3rmv6r2kz0g5s7"))))
3464 (build-system python-build-system)
3467 (modify-phases %standard-phases
3469 (lambda* (#:key tests? #:allow-other-keys)
3471 (invoke "pytest" "-vv")))))))
3472 (native-inputs (list python-pytest))
3473 (home-page "https://palletsprojects.com/p/click/")
3474 (synopsis "Command line library for Python")
3476 "Click is a Python package for creating command line interfaces in a
3477 composable way with as little code as necessary. Its name stands for
3478 \"Command Line Interface Creation Kit\". It's highly configurable but comes
3479 with sensible defaults out of the box.")
3480 (license license:bsd-3)))
3482 (define-public python-click-7
3483 (package (inherit python-click)
3484 (name "python-click")
3489 (uri (pypi-uri "click" version))
3491 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
3494 (define-public python-click-5
3495 (package (inherit python-click)
3496 (name "python-click")
3501 (uri (pypi-uri "click" version))
3503 (base32 "0njsm0wn31l21bi118g5825ma5sa3rwn7v2x4wjd7yiiahkri337"))))
3506 (define-public python-cligj
3508 (name "python-cligj")
3513 (uri (pypi-uri "cligj" version))
3516 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
3517 (build-system python-build-system)
3519 (list python-click))
3521 (list python-pytest-cov))
3522 (home-page "https://github.com/mapbox/cligj")
3523 (synopsis "Click params for command line interfaces to GeoJSON")
3525 "cligj is for Python developers who create command line interfaces
3526 for geospatial data. cligj allows you to quickly build consistent,
3527 well-tested and interoperable CLIs for handling GeoJSON.")
3528 (license license:bsd-3)))
3530 (define-public python-vcversioner
3532 (name "python-vcversioner")
3533 (version "2.16.0.0")
3537 (uri (pypi-uri "vcversioner" version))
3540 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
3541 (build-system python-build-system)
3542 (synopsis "Python library for version number discovery")
3543 (description "Vcversioner is a Python library that inspects tagging
3544 information in a variety of version control systems in order to discover
3546 (home-page "https://github.com/habnabit/vcversioner")
3547 (license license:isc)))
3549 (define-public python-jdcal
3551 (name "python-jdcal")
3556 (uri (pypi-uri "jdcal" version))
3559 "1j6g19jf21qprjsr8h0r7nsbss366gy8j9izq8cz53gbjvh74a27"))))
3560 (build-system python-build-system)
3563 #~(modify-phases %standard-phases
3565 (lambda* (#:key tests? #:allow-other-keys)
3567 (invoke "pytest" "-vv")))))))
3569 (list python-pytest))
3570 (home-page "https://github.com/phn/jdcal")
3571 (synopsis "Functions to convert between Julian dates Gregorian dates")
3572 (description "This Python library provides functions for converting
3573 between Julian dates and Gregorian dates.")
3574 (license license:bsd-2)))
3576 (define-public python-jsondiff
3578 (name "python-jsondiff")
3583 (uri (pypi-uri "jsondiff" version))
3586 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
3587 (build-system python-build-system)
3589 (list python-nose python-nose-random))
3591 "https://github.com/fzumstein/jsondiff")
3592 (synopsis "Compare JSON and JSON-like structures in Python")
3593 (description "@code{jsondiff} is a Python library which lets you
3594 compare, diff, and patch JSON and JSON-like structures in Python.")
3595 (license license:expat)))
3597 (define-public python-jsonschema
3599 (name "python-jsonschema")
3603 (uri (pypi-uri "jsonschema" version))
3606 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
3607 (build-system python-build-system)
3610 (modify-phases %standard-phases
3612 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3614 (setenv "JSON_SCHEMA_TEST_SUITE" "json")
3615 (invoke "trial" "jsonschema")))))))
3617 `(("python-setuptools_scm" ,python-setuptools-scm)
3618 ("python-twisted" ,python-twisted)))
3620 (list python-attrs python-pyrsistent python-six))
3621 (home-page "https://github.com/Julian/jsonschema")
3622 (synopsis "Implementation of JSON Schema for Python")
3624 "Jsonschema is an implementation of JSON Schema for Python.")
3625 (license license:expat)))
3627 ;;; TODO: Make the default python-jsonschema on core-updates
3628 (define-public python-jsonschema-next
3630 (inherit python-jsonschema)
3635 (uri (pypi-uri "jsonschema" version))
3637 (base32 "1z0x22691jva7lwfcfh377jdmlz68zhiawxzl53k631l34k8hvbw"))))
3639 (substitute-keyword-arguments (package-arguments python-jsonschema)
3641 #~(modify-phases #$phases
3642 ;; XXX: PEP 517 manual build/install procedures copied from
3646 ;; ZIP does not support timestamps before 1980.
3647 (setenv "SOURCE_DATE_EPOCH" "315532800")
3648 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
3650 (lambda* (#:key outputs #:allow-other-keys)
3651 (let ((whl (car (find-files "dist" "\\.whl$"))))
3652 (invoke "pip" "--no-cache-dir" "--no-input"
3653 "install" "--no-deps" "--prefix" #$output whl))))))))
3654 (native-inputs (list python-pypa-build
3655 python-setuptools-scm
3659 python-importlib-metadata
3661 python-typing-extensions))))
3663 (define-public python-schema
3665 (name "python-schema")
3670 (uri (pypi-uri "schema" version))
3673 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
3674 (build-system python-build-system)
3676 (list python-pytest))
3677 (home-page "https://github.com/keleshev/schema")
3678 (synopsis "Simple data validation library")
3680 "@code{python-schema} is a library for validating Python data
3681 structures, such as those obtained from config-files, forms, external
3682 services or command-line parsing, converted from JSON/YAML (or
3683 something else) to Python data-types.")
3684 (license license:psfl)))
3686 (define-public python-schema-0.5
3687 (package (inherit python-schema)
3692 (uri (pypi-uri "schema" version))
3695 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
3697 (define-public python-kitchen
3699 (name "python-kitchen")
3704 (uri (pypi-uri "kitchen" version))
3707 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
3708 (build-system python-build-system)
3710 (list python-chardet))
3711 (home-page "https://github.com/fedora-infra/kitchen")
3712 (synopsis "Python API for snippets")
3713 (description "@code{kitchen} module provides a python API for all sorts of
3714 little useful snippets of code that everybody ends up writing for their projects
3715 but never seem big enough to build an independent release. Use kitchen and stop
3716 cutting and pasting that code over and over.")
3717 (license (list license:lgpl2.1+
3718 ;; subprocess.py, test_subprocess.py,
3719 ;; kitchen/pycompat25/defaultdict.py:
3722 (define-public python-roman
3724 (name "python-roman")
3729 (uri (pypi-uri "roman" version))
3732 "0gyp2bmw47jgpm8j64gydzqq838bgxz5gh6cm57lxlr7p26sqiic"))))
3733 (build-system python-build-system)
3734 (home-page "https://github.com/zopefoundation/roman")
3735 (synopsis "Integer to Roman numerals converter")
3737 "This package provides a small helper library to convert Arabic Numbers
3738 to Roman Numerals.")
3739 (license license:psfl)))
3741 (define-public python-unidecode
3743 (name "python-unidecode")
3747 (uri (pypi-uri "Unidecode" version))
3750 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
3751 (build-system python-build-system)
3752 (home-page "https://pypi.org/project/Unidecode/")
3753 (synopsis "ASCII transliterations of Unicode text")
3755 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
3756 useful when integrating with legacy code that doesn't support Unicode, or for
3757 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
3758 machine identifiers from human-readable Unicode strings that should still be
3759 somewhat intelligible.")
3760 (license license:gpl2+)))
3762 (define-public python-text-unidecode
3764 (name "python-text-unidecode")
3768 (uri (pypi-uri "text-unidecode" version))
3771 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
3772 (build-system python-build-system)
3774 '(#:phases (modify-phases %standard-phases
3777 (invoke "pytest" "-vv"))))))
3779 (list python-pytest))
3780 (home-page "https://github.com/kmike/text-unidecode/")
3781 (synopsis "Decode Unicode data")
3783 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
3784 Perl library. It can create ASCII representations of Unicode data. In general
3785 users should prefer the @code{python-unidecode} package which offers better
3786 memory usage and transliteration quality.")
3787 ;; The user can choose either license.
3788 (license (list license:clarified-artistic license:gpl2+))))
3790 (define-public python-pyjwt
3792 (name "python-pyjwt")
3797 (uri (pypi-uri "PyJWT" version))
3800 "1fmbcwfw1463wjzwbcgg3s16rad6kfb1mc5y7jbkp6v9ihh0hafl"))))
3801 (build-system python-build-system)
3803 '(#:phases (modify-phases %standard-phases
3805 (lambda* (#:key tests? #:allow-other-keys)
3807 (invoke "pytest" "-vv")))))))
3809 (list python-cryptography python-pytest))
3810 (home-page "https://github.com/progrium/pyjwt")
3811 (synopsis "JSON Web Token implementation in Python")
3813 "PyJWT is a JSON Web Token implementation written in Python.")
3814 (license license:expat)))
3816 (define-public python-pymsgbox
3818 (name "python-pymsgbox")
3824 ;; LICENSE.txt is not present on pypi
3825 (url "https://github.com/asweigart/PyMsgBox")
3826 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
3827 (file-name (git-file-name name version))
3830 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
3832 ;; Circular dependency to run tests:
3833 ;; Tests need pyautogui, which depends on pymsgbox.
3835 (build-system python-build-system)
3836 (home-page "https://github.com/asweigart/PyMsgBox")
3837 (synopsis "Python module for JavaScript-like message boxes")
3839 "PyMsgBox is a simple, cross-platform, pure Python module for
3840 JavaScript-like message boxes. Types of dialog boxes include:
3848 (license license:bsd-3)))
3850 (define-public python-pympler
3852 (name "python-pympler")
3853 (home-page "https://pythonhosted.org/Pympler/")
3857 (uri (pypi-uri "Pympler" version))
3860 "0ivfw2k86nbw9ck9swidl4422w7bhjldxwj90a4sy5r1cbgygjzj"))))
3861 (build-system python-build-system)
3863 `(#:phases (modify-phases %standard-phases
3865 (add-after 'install 'check
3866 (lambda* (#:key inputs outputs #:allow-other-keys)
3867 (add-installed-pythonpath inputs outputs)
3868 (invoke "python" "setup.py" "test"))))))
3869 (synopsis "Measure, monitor and analyze memory behavior")
3871 "Pympler is a development tool to measure, monitor and analyze
3872 the memory behavior of Python objects in a running Python application.
3874 By pympling a Python application, detailed insight in the size and the
3875 lifetime of Python objects can be obtained. Undesirable or unexpected
3876 runtime behavior like memory bloat and other @samp{pymples} can easily
3879 A web profiling frontend exposes process statistics, garbage
3880 visualisation and class tracker statistics.")
3881 (license license:asl2.0)))
3883 (define-public python-itsdangerous
3885 (name "python-itsdangerous")
3890 (uri (pypi-uri "itsdangerous" version))
3893 "1w6gfb2zhbcmrfj6digwzw1z68w6zg1q87rm6la2m412zil4swly"))))
3894 (build-system python-build-system)
3895 (home-page "https://palletsprojects.com/p/itsdangerous/")
3896 (synopsis "Python library for passing data to/from untrusted environments")
3898 "Itsdangerous provides various helpers to pass trusted data to untrusted
3899 environments and back.")
3900 (license license:bsd-3)))
3902 (define-public python-pyyaml
3904 (name "python-pyyaml")
3909 (uri (pypi-uri "PyYAML" version))
3912 "18imkjacvpxfgg1lbpraqywx3j7hr5dv99d242byqvrh2jf53yv8"))))
3913 (build-system python-build-system)
3915 (list libyaml python-cython))
3916 (home-page "https://pyyaml.org")
3917 (synopsis "YAML parser and emitter for Python")
3919 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
3920 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
3921 API, and sensible error messages. PyYAML supports standard YAML tags and
3922 provides Python-specific tags that represent an arbitrary Python object.")
3923 (license license:expat)))
3925 (define-public python-pyyaml-5
3927 (inherit python-pyyaml)
3932 (uri (pypi-uri "PyYAML" version))
3935 "0pm440pmpvgv5rbbnm8hk4qga5a292kvlm1bh3x2nwr8pb5p8xv0"))))))
3937 (define-public python-vine
3939 (name "python-vine")
3944 (uri (pypi-uri "vine" version))
3946 (base32 "0zk3pm0g7s4qfn0gk28lfmsyplvisaxi6826cgpq5njkm4j1cfvx"))))
3947 (build-system python-build-system)
3949 (list python-pytest python-case))
3950 (home-page "https://github.com/celery/vine")
3951 (synopsis "Promises for Python")
3953 "@code{vine} provides a special implementation of promises in that it can
3954 be used both for \"promise of a value\" and lazy evaluation. The biggest
3955 upside for this is that everything in a promise can also be a promise,
3956 e.g. filters, callbacks and errbacks can all be promises.")
3957 (license license:bsd-3)))
3959 (define-public python-virtualenv
3961 (name "python-virtualenv")
3966 (uri (pypi-uri "virtualenv" version))
3969 "1nbhnpzswcf3lmzn5xabmfdd7ki8r2w2i37y6wml54di6qi1l48c"))))
3970 (build-system python-build-system)
3972 (list python-mock python-pytest python-setuptools-scm))
3974 (list python-appdirs python-distlib python-filelock python-six))
3975 (home-page "https://virtualenv.pypa.io/")
3976 (synopsis "Virtual Python environment builder")
3978 "Virtualenv is a tool to create isolated Python environments.")
3979 (license license:expat)))
3981 (define-public python-markupsafe
3983 (name "python-markupsafe")
3988 (uri (pypi-uri "MarkupSafe" version))
3991 "02k2ynmqvvd0z0gakkf8s4idyb606r7zgga41jrkhqmigy06fk2r"))))
3992 (build-system python-build-system)
3994 `(#:phases (modify-phases %standard-phases
3996 (lambda* (#:key tests? #:allow-other-keys)
3998 (invoke "pytest" "-vv")))))))
4000 (list python-pytest))
4001 (home-page "https://github.com/mitsuhiko/markupsafe")
4002 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
4004 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
4006 (license license:bsd-3)))
4009 (define-public python-jinja2
4011 (name "python-jinja2")
4016 (uri (pypi-uri "Jinja2" version))
4019 "1saawzys14l1p4kafs7hkihmnvqjq8fwxjmkjiqx3jq1nm5ys2v4"))))
4020 (build-system python-build-system)
4022 '(#:phases (modify-phases %standard-phases
4024 (lambda* (#:key tests? #:allow-other-keys)
4026 (invoke "pytest" "-vv")
4027 (format #t "test suite not run~%")))))))
4028 (native-inputs (list python-pytest))
4029 (propagated-inputs (list python-markupsafe))
4030 (home-page "https://jinja.palletsprojects.com/")
4031 (synopsis "Python template engine")
4033 "Jinja2 is a small but fast and easy to use stand-alone template engine
4034 written in pure Python.")
4035 (license license:bsd-3)))
4038 (define-public python-jinja2-time
4040 (name "python-jinja2-time")
4045 (uri (pypi-uri "jinja2-time" version))
4048 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
4049 (build-system python-build-system)
4051 (list python-arrow python-jinja2))
4053 "https://github.com/hackebrot/jinja2-time")
4054 (synopsis "Jinja2 Extension for Dates and Times")
4056 "This package provides an extension for the template engine Jinja2. It
4057 adds a 'now' tag providing a convenient access to the arrow.now() API from
4058 templates. A format string can be provided to control the output.")
4059 (license license:expat)))
4061 (define-public python-pysdl2
4063 (name "python-pysdl2")
4067 (uri (pypi-uri "PySDL2" version))
4070 "19id1qswgcj4v4j5kn49shq1xxx3slhjpm0102w87mczsdbi1rck"))))
4071 (build-system python-build-system)
4073 (list #:tests? #f ;; Requires /dev/dri, OpenGL module, etc.
4075 #~(modify-phases %standard-phases
4076 (add-after 'unpack 'patch-paths
4077 (lambda* (#:key inputs #:allow-other-keys)
4078 (substitute* "sdl2/dll.py"
4079 ;; Disable pysdl2-dll. It can't be packaged on GNU Guix
4080 ;; as it duplicates an existing package (sdl2).
4081 (("prepath = os\\.getenv\\('PYSDL2_DLL_PATH'\\)")
4082 "prepath = \"system\"")
4083 (("^import sdl2dll$") "")
4084 (("postpath = os\\.getenv\\('PYSDL2_DLL_PATH'\\)")
4085 "postpath = \"system\"")
4086 (("DLL\\(.*, os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)\\)")
4088 "DLL(\"SDL2\", [\"SDL2\", \"SDL2-2.0\", \"SDL2-2.0.0\"], \""
4089 (dirname (search-input-file inputs "/lib/libSDL2.so"))
4091 (substitute* "sdl2/sdlimage.py"
4092 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4095 (dirname (search-input-file inputs "/lib/libSDL2_image.so"))
4097 (substitute* "sdl2/sdlgfx.py"
4098 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4101 (dirname (search-input-file inputs "/lib/libSDL2_gfx.so"))
4103 (substitute* "sdl2/sdlmixer.py"
4104 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4107 (dirname (search-input-file inputs "/lib/libSDL2_mixer.so"))
4109 (substitute* "sdl2/sdlttf.py"
4110 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4113 (dirname (search-input-file inputs "/lib/libSDL2_ttf.so"))
4116 (list sdl2 sdl2-image sdl2-gfx sdl2-mixer sdl2-ttf))
4117 (home-page "https://github.com/py-sdl/py-sdl2")
4118 (synopsis "Python bindings around the SDL2 game development library")
4119 (description "PySDL2 is a pure Python wrapper around the @code{SDL2},
4120 @code{SDL2_mixer}, @code{SDL2_image}, @code{SDL2_ttf}, and @code{SDL2_gfx}
4121 libraries. Instead of relying on C code, it uses the built-in ctypes module
4122 to interface with SDL2, and provides simple Python classes and wrappers for
4123 common SDL2 functionality.")
4124 (license license:cc0)))
4126 (define-public python-pystache
4128 (name "python-pystache")
4132 (uri (pypi-uri "pystache" version))
4135 "03a73ppf5vxnsk6az5ackvc0hp6xqv2f4hi1s5c4nk4s2jr95gwk"))))
4136 (build-system python-build-system)
4138 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
4139 (home-page "http://defunkt.io/pystache/")
4140 (synopsis "Python logic-less template engine")
4142 "Pystache is a Python implementation of the framework agnostic,
4143 logic-free templating system Mustache.")
4144 (license license:expat)))
4146 (define-public python-pystitcher
4148 (name "python-pystitcher")
4155 (url "https://github.com/captn3m0/pystitcher")
4157 (string-append "v" version))))
4159 (git-file-name name version))
4161 (base32 "03yrzqhcsjdj5zprrk3bh5bbyqfy3vfhxra9974vmkir3m121394"))))
4162 (build-system python-build-system)
4164 (list python-html5lib python-importlib-metadata python-markdown
4165 python-pypdf3 python-validators))
4166 (home-page "https://github.com/captn3m0/pystitcher")
4167 (synopsis "Declaratively stitch together a PDF file from multiple sources")
4169 "This package stitches your PDF files together, generating customizable
4170 bookmarks using a declarative input in the form of a markdown file.")
4171 (license license:expat)))
4173 (define-public python-joblib
4175 (name "python-joblib")
4179 (uri (pypi-uri "joblib" version))
4182 "0d8ypyhsw1bjr96zan9ms8wbvnzbjqxniq4vcszghcrps7ngqn21"))))
4183 (build-system python-build-system)
4186 (modify-phases %standard-phases
4188 (lambda* (#:key tests? #:allow-other-keys)
4190 (setenv "JOBLIB_MULTIPROCESSING" "0")
4191 (invoke "pytest" "-v" "joblib"
4192 ;; We disable this test to avoid having to depend on ipython/jupyter
4193 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))))))
4195 (list python-pytest))
4196 (home-page "https://joblib.readthedocs.io/")
4197 (synopsis "Using Python functions as pipeline jobs")
4199 "Joblib is a set of tools to provide lightweight pipelining in Python.
4200 In particular, joblib offers: transparent disk-caching of the output values
4201 and lazy re-evaluation (memoize pattern), easy simple parallel computing
4202 logging and tracing of the execution.")
4203 (license license:bsd-3)))
4206 (define-public python-daemon
4208 (name "python-daemon")
4213 (uri (pypi-uri "python-daemon" version))
4216 "1bxfn2bq56sd4w0nm9mqy8y0905m7fc8vmhnjxlrf49vcbqr7adx"))))
4217 (build-system python-build-system)
4220 (modify-phases %standard-phases
4221 (add-before 'check 'adjust-tests
4223 ;; Drop use of testtools.helpers.safe_hasattr which has
4224 ;; been removed in favor of hasattr.
4225 (substitute* "test/test_metadata.py"
4226 (("testtools\\.helpers\\.safe_hasattr")
4228 ;; FIXME: Determine why test fails
4229 (substitute* "test/test_daemon.py"
4230 (("test_detaches_process_context")
4231 "skip_test_detaches_process_context")))))))
4233 (list python-lockfile))
4235 (list python-coverage
4237 python-testscenarios
4241 (home-page "https://pagure.io/python-daemon/")
4242 (synopsis "Python library for making a Unix daemon process")
4243 (description "Python-daemon is a library that assists a Python program to
4244 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
4246 This library provides a @code{DaemonContext} class that manages the following
4247 important tasks for becoming a daemon process:
4249 @item Detach the process into its own process group.
4250 @item Set process environment appropriate for running inside a chroot.
4251 @item Renounce suid and sgid privileges.
4252 @item Close all open file descriptors.
4253 @item Change the working directory, uid, gid, and umask.
4254 @item Set appropriate signal handlers.
4255 @item Open new file descriptors for stdin, stdout, and stderr.
4256 @item Manage a specified PID lock file.
4257 @item Register cleanup functions for at-exit processing.
4259 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
4260 (license (list license:asl2.0 license:gpl3+))))
4262 (define-public python-anytree
4264 (name "python-anytree")
4268 (uri (pypi-uri "anytree" version))
4271 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
4272 (build-system python-build-system)
4279 (home-page "https://github.com/c0fec0de/anytree")
4280 (synopsis "Lightweight tree data library")
4282 "@code{anytree} is a simple, lightweight, and extensible tree data
4283 structure for Python.")
4284 (license license:asl2.0)))
4286 (define-public autokey
4293 (url "https://github.com/autokey/autokey")
4294 (commit (string-append "v" version))))
4295 (file-name (git-file-name name version))
4298 "0f0cqfnb49wwdy7zl2f2ypcnd5pc8r8n7z7ssxkq20d4xfxlgamr"))))
4299 (build-system python-build-system)
4302 ;; Tests are deprecated and broken until next version, see
4303 ;; https://github.com/autokey/autokey/issues/327
4306 #~(modify-phases %standard-phases
4307 (add-after 'unpack 'fix-paths
4308 (lambda* (#:key inputs #:allow-other-keys)
4309 (substitute* "lib/autokey/scripting.py"
4311 (string-append "\"" (search-input-file inputs "bin/wmctrl") "\""))
4313 (string-append "\"" (search-input-file inputs "bin/zenity") "\"")))
4314 (substitute* "autokey-shell"
4316 (string-append "'" (search-input-file inputs "bin/ipython3") "'"))
4318 (string-append "'" (search-input-file inputs "bin/python3") "'")))))
4319 ;; Use 'prefix' instead of '=' to allow the user to use additional
4320 ;; GI paths from their autokey scripts. GUIX_PYTHONPATH is already
4321 ;; wrapped with prefix in python-build-system's wrap.
4322 (add-before 'wrap 'wrap-autokey-gi
4324 (let ((gi-typelib-path (getenv "GI_TYPELIB_PATH")))
4327 (wrap-program program
4328 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
4330 (string-append #$output "/bin/" name))
4332 "autokey-shell")))))))))
4334 (list bash-minimal ; for wrap-program
4342 python-pyqt+qscintilla
4346 (home-page "https://github.com/autokey/autokey")
4348 "Keyboard and GUI automation utility")
4350 "AutoKey is a desktop automation utility for X11. It allows the automation of
4351 virtually any task by responding to typed abbreviations and hotkeys. It
4352 offers a full-featured GUI (GTK and QT versions) that makes it highly
4353 accessible for novices, as well as a scripting interface offering the full
4354 flexibility and power of the Python language.")
4355 (license license:gpl3+)))
4357 (define-public python-docutils
4359 (name "python-docutils")
4364 (uri (pypi-uri "docutils" version))
4367 "09gii36lp1bs26cpxqyfd20xahnpbrbjzcnba2xq08y3wk97frb8"))))
4368 (build-system python-build-system)
4370 '(#:phases (modify-phases %standard-phases
4372 (lambda* (#:key tests? #:allow-other-keys)
4374 (invoke "python" "test/alltests.py")
4375 (format #t "test suite not run~%"))
4377 (home-page "http://docutils.sourceforge.net/")
4378 (synopsis "Python Documentation Utilities")
4380 "Docutils is a modular system for processing documentation into useful
4381 formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
4382 easy to use markup language, for input.
4384 This package provides tools for converting @file{.rst} files to other formats
4385 via commands such as @command{rst2man}, as well as supporting Python code.")
4386 ;; Most of the source code is public domain, but some source files are
4387 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
4388 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
4390 ;; awscli refuses to be built with docutils < 0.16.
4391 (define-public python-docutils-0.15
4393 (inherit python-docutils)
4397 (uri (pypi-uri "docutils" version))
4400 "0ja8q6mdj6xv62jjw3phv8j5nfqi5x8hnfy4pqfcjcgz4b34k8sl"))))
4401 ;; tests contain Python 2 syntax.
4402 (arguments '(#:tests? #false))))
4404 (define-public python-restructuredtext-lint
4406 (name "python-restructuredtext-lint")
4411 (uri (pypi-uri "restructuredtext-lint" version))
4414 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
4415 (build-system python-build-system)
4418 (modify-phases %standard-phases
4420 (add-after 'install 'check
4421 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4423 (add-installed-pythonpath inputs outputs)
4424 (invoke "nosetests" "-v"))
4427 (list python-docutils))
4430 (home-page "https://github.com/twolfson/restructuredtext-lint")
4431 (synopsis "reStructuredText linter")
4432 (description "This package provides a linter for the reStructuredText
4434 (license license:unlicense)))
4436 (define-public python-click-repl
4438 (name "python-click-repl")
4442 (method git-fetch) ; no tests in PyPI release
4444 (url "https://github.com/click-contrib/click-repl")
4446 (file-name (git-file-name name version))
4448 (base32 "16ybsnwlj2jlqcfxflky8jz7i3nhrd3f6mvkpgs95618l8lx994i"))))
4449 (build-system python-build-system)
4452 (modify-phases %standard-phases
4454 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4456 (add-installed-pythonpath inputs outputs)
4457 (invoke "python" "-m" "pytest")))))))
4459 (list python-pytest))
4461 (list python-click python-prompt-toolkit python-six))
4462 (home-page "https://github.com/untitaker/click-repl")
4463 (synopsis "REPL plugin for Click")
4464 (description "This package provides a REPL plugin for Click.")
4465 (license license:expat)))
4467 (define-public python-doc8
4469 (name "python-doc8")
4474 (uri (pypi-uri "doc8" version))
4477 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
4478 (build-system python-build-system)
4481 (modify-phases %standard-phases
4483 (add-after 'install 'check
4484 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4486 (add-installed-pythonpath inputs outputs)
4487 (invoke "pytest" "-v"))
4490 (list python-chardet python-docutils python-restructuredtext-lint
4491 python-six python-stevedore))
4493 (list python-testtools python-pytest))
4494 (home-page "https://launchpad.net/doc8")
4496 "Style checker for Sphinx (or other) RST documentation")
4498 "Doc8 is an opinionated style checker for reStructured Text and plain
4499 text styles of documentation.")
4500 (license license:asl2.0)))
4502 (define-public python-pygments
4504 (name "python-pygments")
4509 (uri (pypi-uri "Pygments" version))
4512 "1sr6iqh21xi6p8aba4wa9pqfhjbbpcvn9jcsx0ggy4lniw8idcay"))))
4513 (build-system python-build-system)
4515 ;; FIXME: Tests require sphinx, which depends on this.
4517 (home-page "https://pygments.org/")
4518 (synopsis "Syntax highlighting")
4520 "Pygments is a syntax highlighting package written in Python.")
4521 (license license:bsd-2)))
4523 (define-public python-pygments-github-lexers
4525 (name "python-pygments-github-lexers")
4530 (uri (pypi-uri "pygments-github-lexers" version))
4533 "0cz14clcc9z4pn79ll8hp3xzgsrfjscak5zfsvlgrz6ngkkmgjma"))))
4534 (build-system python-build-system)
4536 (list python-pygments))
4537 (home-page "https://github.com/liluo/pygments-github-lexers")
4538 (synopsis "Pygments Github custom lexers")
4539 (description "This package installs Github custom lexers to Pygments.")
4540 (license license:bsd-3)))
4542 (define-public python-bump2version
4544 (name "python-bump2version")
4549 (uri (pypi-uri "bump2version" version))
4551 (base32 "1rinm4gv1fyh7xjv3v6r1p3zh5kl4ry2qifz5f7frx31mnzv4b3n"))))
4552 (build-system python-build-system)
4554 ;; XXX: Tests fail with "bumpversion: error: the following arguments are
4555 ;; required: --new-version".
4557 (home-page "https://github.com/c4urself/bump2version")
4558 (synopsis "Version-bump your software with a single command!")
4560 "This package provides a small command line tool to simplify releasing
4561 software by updating all version strings in your source code by the correct
4562 increment. It also creates commits and tags.")
4563 (license license:expat)))
4565 (define-public python-bumpversion
4567 (name "python-bumpversion")
4572 (uri (pypi-uri "bumpversion" version))
4575 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
4576 (build-system python-build-system)
4577 (home-page "https://github.com/peritus/bumpversion")
4578 (synopsis "Tool to bump software version")
4579 (description "This tool provides a command-line interface (CLI) to bump a
4580 software version simply.")
4581 (license license:expat)))
4583 (define-public python-deprecated
4585 (name "python-deprecated")
4591 (url "https://github.com/tantale/deprecated")
4592 (commit (string-append "v" version))))
4593 (file-name (git-file-name name version))
4596 "0v4ys9xr8lski2r98da99spsj6hjlnnqgnhhmyhrm66myiix885c"))))
4597 (build-system python-build-system)
4599 `(#:phases (modify-phases %standard-phases
4601 (lambda* (#:key tests? #:allow-other-keys)
4603 (invoke "pytest")))))))
4605 (list python-wrapt))
4607 (list python-bumpversion python-pytest python-pytest-cov
4608 python-sphinx python-tox))
4609 (home-page "https://github.com/tantale/deprecated")
4610 (synopsis "Python decorator to deprecate classes, functions or methods")
4611 (description "The @code{deprecated} decorator provides a convenient way to deprecate
4612 to deprecate classes, functions or methods.")
4613 (license license:expat)))
4615 (define-public python-pygithub
4617 (name "python-pygithub")
4620 ;; We fetch from the Git repo because there are no tests in the PyPI
4625 (url "https://github.com/PyGithub/PyGithub")
4626 (commit (string-append "v" version))))
4627 (file-name (git-file-name name version))
4629 (base32 "082bxffpy4h97dsay3l75cpgfjj10kywkvicnm6xscwvah285q9y"))))
4630 (build-system python-build-system)
4633 (modify-phases %standard-phases
4635 (lambda* (#:key tests? #:allow-other-keys)
4640 (list python-cryptography python-deprecated python-pyjwt
4641 python-pynacl python-requests))
4643 (list python-httpretty python-pytest))
4644 (home-page "https://pygithub.readthedocs.io/en/latest/")
4645 (synopsis "Python library for the GitHub API")
4646 (description "This library allows managing GitHub resources such as
4647 repositories, user profiles, and organizations in your Python applications,
4648 using version 3 of the GitHub application programming interface (API).")
4649 (license license:lgpl3+)))
4651 (define-public python-rellu
4653 (name "python-rellu")
4658 (uri (pypi-uri "rellu" version))
4661 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
4662 (build-system python-build-system)
4664 (list python-invoke python-pygithub))
4665 (home-page "https://github.com/robotframework/rellu")
4666 (synopsis "Utilities to create PyPI releases")
4667 (description "This collection of utilities contains tooling and templates
4668 to assist in creating releases on GitHub and publishing them on PyPI. It is
4669 designed to be used by Robot Framework and tools and libraries in its
4670 ecosystem, but can naturally be used also by other projects.")
4671 (license license:asl2.0)))
4673 (define-public python-robotframework
4675 (name "python-robotframework")
4677 ;; There are no tests in the PyPI archive.
4682 (url "https://github.com/robotframework/robotframework")
4683 (commit (string-append "v" version))))
4684 (file-name (git-file-name name version))
4686 (base32 "0qcm36c8hachbv3bc05ky7cf63i3sj0y8dw3bwjvcln28i543f81"))
4687 (patches (search-patches
4688 "python-robotframework-atest.patch"
4689 "python-robotframework-source-date-epoch.patch"))))
4690 (build-system python-build-system)
4693 #:modules '((guix build python-build-system)
4699 #~(modify-phases %standard-phases
4700 (add-after 'unpack 'delete-problematic-tests
4702 ;; Tests such as 'Tilde and username in path' rely on HOME and
4703 ;; USER being set, on top of the user's /etc/passwd home
4704 ;; directory not being '/', as is the case in the Guix build
4706 (delete-file "atest/robot/standard_libraries/\
4707 operating_system/path_expansion.robot")
4708 ;; FIXME: The test 'Process.Sending Signal.By default signal
4709 ;; is not sent to process running in shell' fails for unknown
4711 ;; https://github.com/robotframework/robotframework/issues/4292).
4712 (delete-file "atest/robot/standard_libraries/\
4713 process/sending_signal.robot")))
4714 (add-before 'build 'build-and-install-doc
4715 (lambda* (#:key outputs #:allow-other-keys)
4716 (let ((doc (string-append (assoc-ref outputs "doc")
4717 "/share/doc/robotframework")))
4718 (invoke "invoke" "library-docs" "all")
4719 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
4721 (with-directory-excursion "dist"
4722 (define user-guide-dir
4723 (match (scandir "." (cut string-prefix?
4724 "robotframework-userguide-" <>))
4726 (_ (error "could not find the user guide directory"))))
4727 (copy-recursively user-guide-dir doc)))))
4729 (lambda* (#:key native-inputs inputs tests?
4732 ;; Some tests require timezone data. Otherwise, they
4733 ;; look up /etc/localtime, which doesn't exist, and
4736 ;; OverflowError: mktime argument out of range
4738 (search-input-directory
4739 (or native-inputs inputs) "share/zoneinfo"))
4740 (setenv "TZ" "Europe/Paris")
4742 (format #t "Running unit tests...~%")
4743 (invoke "utest/run.py")
4745 (format #t "Running acceptance tests...~%")
4746 (invoke "xvfb-run" "atest/run.py")))))))
4748 (list python-docutils
4755 `(,python "tk") ;used when building the HTML doc
4757 scrot ;for taking screenshots
4760 (outputs '("out" "doc"))
4761 (home-page "https://robotframework.org")
4762 (synopsis "Generic automation framework")
4763 (description "Robot Framework is a generic automation framework for
4764 acceptance testing, acceptance test driven development (ATDD), and robotic
4765 process automation (RPA).")
4766 (license license:asl2.0)))
4768 (define-public python-robotframework-datadriver
4770 (name "python-robotframework-datadriver")
4775 (uri (pypi-uri "robotframework-datadriver" version))
4777 (base32 "0qa2vry8jr49k5rbrvmkgggzsmis1wv06dp5dvwmp7afm7vjc51k"))))
4778 (build-system python-build-system)
4781 (modify-phases %standard-phases
4782 (add-before 'check 'skip-problematic-tests
4784 ;; The test file 'tab-csv-file-name.tsv' contains special
4785 ;; characters for which there is no locale in the build
4786 ;; environment, causing one test to fail.
4787 (delete-file-recursively "atest/TestCases/csv_reader_config")))
4789 (lambda* (#:key tests? #:allow-other-keys)
4791 (with-directory-excursion "atest"
4792 (invoke "sh" "run_atest.sh"))))))))
4793 (native-inputs (list python-docutils
4794 python-robotframework-stacktrace))
4795 (propagated-inputs (list python-openpyxl
4798 python-robotframework))
4799 (home-page "https://github.com/Snooz82/robotframework-datadriver")
4800 (synopsis "Data-driven test extension for Robot Framework")
4801 (description "DataDriver is a data-driven extension for Robot Framework.
4802 DataDriver uses the Listener Interface of Robot Framework to create new test
4803 cases based on a data file that contains the test data. DataDriver supports
4804 data files in the CSV, XLS or XLSX formats.")
4805 (license license:asl2.0)))
4807 (define-public python-robotframework-lint
4808 ;; There is no properly tagged release; the commit below seems to correspond
4809 ;; to the 0.9 stable release available from PyPI. The tests are not
4810 ;; included in the PyPI archive, so we fetch the sources from the upstream
4812 (let ((commit "b0619ac58a8b1be125f9c98856a664594614570f")
4815 (name "python-robotframework-lint")
4816 (version (git-version "1.1" ;version taken from 'rflint/version.py'
4822 (url "https://github.com/boakley/robotframework-lint")
4824 (file-name (git-file-name name version))
4827 "180npmvzqync25b2scs878gv8q4y17dsinxyjcc10bw22msfap6b"))))
4828 (build-system python-build-system)
4831 (modify-phases %standard-phases
4834 (invoke "python" "-m" "robot" "-A"
4835 "tests/conf/default.args" "tests"))))))
4837 (list python-robotframework))
4838 (home-page "https://github.com/boakley/robotframework-lint/")
4839 (synopsis "Static analysis tool (linter) for Robot Framework")
4840 (description "This package provides the @code{rflint} command-line
4841 utility, a static analysis tool (linter) for Robot Framework source files.")
4842 (license license:asl2.0))))
4844 (define-public python-robotframework-pabot
4846 (name "python-robotframework-pabot")
4850 ;; There are no tests in the PyPI archive.
4853 (url "https://github.com/mkorpela/pabot")
4855 (file-name (git-file-name name version))
4858 "14a8isq1f4lgfwjb84hhzg6jm7ns18dxa9bg6dy8k2ml8zl0qknk"))))
4859 (build-system python-build-system)
4862 #:phases #~(modify-phases %standard-phases
4864 (lambda* (#:key tests? #:allow-other-keys)
4866 (invoke "pytest" "-vv" "tests")))))))
4868 (list python-robotframework python-robotframework-stacktrace))
4870 (list python-pytest))
4871 (home-page "https://pabot.org")
4872 (synopsis "Parallel test runner for Robot Framework")
4873 (description "Pabot is a parallel executor for Robot Framework tests.")
4874 (license license:asl2.0)))
4876 (define-public python-sshtunnel
4878 (name "python-sshtunnel")
4882 (uri (pypi-uri "sshtunnel" version))
4885 "1z7rdgpp9m36ysh9pfzrn3vyiaj05bkjvcjdhj8vz0fvfjkhxjz7"))))
4886 (build-system python-build-system)
4889 (modify-phases %standard-phases
4891 (lambda* (#:key tests? #:allow-other-keys)
4892 (when tests? (invoke "pytest" "-vv" "tests")))))))
4893 (propagated-inputs (list python-paramiko))
4894 (native-inputs (list openssh python-pytest))
4895 (home-page "https://github.com/pahaz/sshtunnel")
4896 (synopsis "Python SSH tunnels library")
4897 (description "@code{sshtunnel} is a Python module for easily creating SSH
4898 tunnels in the background, using Python.")
4899 (license license:expat)))
4901 (define-public python-robotframework-sshtunnellibrary
4903 (name "python-robotframework-sshtunnellibrary")
4908 (url "https://github.com/C-Squad/robotframework-sshtunnellibrary")
4909 (commit (string-append "v" version))))
4910 (file-name (git-file-name name version))
4913 "1vkkmkb8iql13xpbyj4hvnnmfgzqlr8rffgryp2082cadb3w7xrd"))))
4914 (build-system python-build-system)
4916 (list #:phases #~(modify-phases %standard-phases
4918 (lambda* (#:key tests? #:allow-other-keys)
4920 (invoke "python" "-m" "unittest"
4921 "discover" "-s" "test")))))))
4922 (propagated-inputs (list python-robotframework python-sshtunnel))
4923 (home-page "https://github.com/C-Squad/robotframework-sshtunnellibrary")
4924 (synopsis "Alternative RobotFramework library for SSH tunnels")
4925 (description "SSHTunnelLibrary is an alternative RobotFramework
4926 library (to the more official one that comes from the
4927 @code{robotframework-sshlibrary} package) to support SSH tunnels.")
4928 (license license:asl2.0)))
4930 (define-public python-robotframework-stacktrace
4932 (name "python-robotframework-stacktrace")
4937 (uri (pypi-uri "robotframework-stacktrace" version))
4939 (base32 "19gnwr7da1zz9clhwsmvqfjf02d195i61lzpq4253dcsgrpb6v79"))))
4940 (build-system python-build-system)
4942 ;; The test suite fails (see:
4943 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
4946 (modify-phases %standard-phases
4948 (lambda* (#:key tests? #:allow-other-keys)
4950 (with-directory-excursion "tests"
4951 (invoke "python" "-m" "robot" "."))))))))
4952 (propagated-inputs (list python-robotframework))
4953 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
4954 (synopsis "Robot Framework listener to print a stack trace on error")
4955 (description "StackTrace is a Robot Framework listener that prints a stack
4956 trace directly to the terminal to ease debugging.")
4957 (license license:asl2.0)))
4959 (define-public python-robotframework-sshlibrary
4961 (name "python-robotframework-sshlibrary")
4963 ;; There are no tests in the PyPI archive.
4968 (url "https://github.com/robotframework/SSHLibrary")
4969 (commit (string-append "v" version))))
4970 (file-name (git-file-name name version))
4973 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
4974 (patches (search-patches
4975 "python-robotframework-sshlibrary-rf5-compat.patch"))))
4976 (build-system python-build-system)
4979 (modify-phases %standard-phases
4980 (add-before 'build 'build-and-install-doc
4981 (lambda* (#:key outputs #:allow-other-keys)
4982 (let ((doc (string-append
4983 (assoc-ref outputs "doc")
4984 "/share/doc/robotframework-sshlibrary")))
4985 (invoke "chmod" "-R" "+w" "docs")
4986 (invoke "invoke" "kw-docs" "project-docs")
4988 (for-each delete-file (find-files "docs" "\\.rst"))
4989 (copy-recursively "docs" doc))))
4991 (lambda* (#:key tests? #:allow-other-keys)
4993 ;; Some tests require an SSH server; we remove them.
4994 (delete-file "utest/test_client_api.py")
4995 (delete-file "utest/test_scp.py")
4996 (invoke "python" "utest/run.py")))))))
4998 (list python-robotframework python-paramiko python-scp))
5002 ;; To generate the documentation
5007 (outputs '("out" "doc"))
5008 (home-page "https://github.com/robotframework/SSHLibrary")
5009 (synopsis "Robot Framework library for SSH and SFTP")
5010 (description "SSHLibrary is a Robot Framework library providing support
5011 for SSH and SFTP. It has the following main usages:
5013 @item Executing commands on the remote machine, either blocking or non-blocking.
5014 @item Writing and reading in an interactive shell.
5015 @item Transferring files and directories over SFTP.
5016 @item Ensuring that files and directories exist on the remote machine.
5018 (license license:asl2.0)))
5020 (define-public python-robotframework-pythonlibcore
5022 (name "python-robotframework-pythonlibcore")
5026 (method git-fetch) ;no tests in pypi archive
5028 (url "https://github.com/robotframework/PythonLibCore")
5029 (commit (string-append "v" version))))
5030 (file-name (git-file-name name version))
5033 "0v89v8va65l6inh0fb34qgxawx6p29pnrmw4n5941yzdi3804rc4"))))
5034 (build-system python-build-system)
5036 `(#:phases (modify-phases %standard-phases
5038 (lambda* (#:key tests? #:allow-other-keys)
5040 (invoke "utest/run.py")))))))
5042 (list python-pytest python-pytest-cov python-pytest-mockito
5043 python-robotframework))
5044 (home-page "https://github.com/robotframework/PythonLibCore")
5045 (synopsis "Robot Framework Python library tools")
5046 (description "PythonLibCore provides tools for creating larger test
5047 libraries for Robot Framework using Python. The Robot Framework hybrid and
5048 dynamic library APIs give more flexibility for library than the static library
5049 API, but they also set requirements for libraries which need to be implemented
5050 in the library side. PythonLibCore eases the problem by providing a simpler
5051 interface and by handling all the requirements towards the Robot Framework
5053 (license license:asl2.0)))
5055 (define-public python-robotframework-seleniumlibrary
5057 (name "python-robotframework-seleniumlibrary")
5062 (uri (pypi-uri "robotframework-seleniumlibrary" version))
5064 (base32 "1dihrbcid9i7daw2qy6h3xsvwaxzmyip820jw5z11n60qrl006pm"))))
5065 (build-system python-build-system)
5066 ;; XXX: Tests require ungoogled-chromium, but the chromium module would
5067 ;; introduce a cycle if imported here.
5069 (list python-robotframework python-robotframework-pythonlibcore
5071 (home-page "https://github.com/robotframework/SeleniumLibrary")
5072 (synopsis "Web testing library for Robot Framework")
5073 (description "SeleniumLibrary is a web testing library for Robot Framework
5074 that utilizes the Selenium tool internally.")
5075 (license license:asl2.0)))
5077 (define-public python-robotframework-seleniumscreenshots
5079 (name "python-robotframework-seleniumscreenshots")
5084 (uri (pypi-uri "robotframework-seleniumscreenshots" version))
5086 (base32 "05qv323hvjmy62h33ryrjaa9k1hyvp8hq5qnj8j1x3ap2ci3q3s0"))))
5087 (build-system python-build-system)
5089 ;; XXX: The tests require a relatively complicated setup configured in
5090 ;; their CI with Nix (!).
5093 (list python-robotframework python-robotframework-seleniumlibrary))
5094 (home-page "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
5095 (synopsis "Robot Framework library for annotating and cropping screenshots")
5096 (description "The SeleniumScreenshots library for Robot Framework provides
5097 keywords for annotating and cropping screenshots taken with SeleniumLibrary.
5098 It is useful for scripting automatically updated screenshots for documentation
5099 or for visual regression testing purposes.")
5100 (license license:bsd-3)))
5102 (define-public python-rstr
5104 (name "python-rstr")
5109 (uri (pypi-uri "rstr" version))
5112 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
5113 (build-system python-build-system)
5114 (home-page "https://github.com/leapfrogonline/rstr")
5115 (synopsis "Generate random strings in Python")
5116 (description "This package provides a python module for generating
5117 random strings of various types. It could be useful for fuzz testing,
5118 generating dummy data, or other applications. It has no dependencies
5119 outside the standard library.")
5120 (license license:bsd-3)))
5122 (define-public python-scp
5129 (uri (pypi-uri "scp" version))
5131 (base32 "1m2v09m407p097cy3xy5rxicqfzrqjwf8v5rd4qhfqkk7lllimwb"))))
5132 (build-system python-build-system)
5134 '(#:tests? #f)) ;tests require an SSH server
5136 (list python-paramiko))
5137 (home-page "https://github.com/jbardin/scp.py")
5138 (synopsis "SCP protocol module for Python and Paramiko")
5139 (description "The scp module extends the Paramiko library to send and
5140 receive files via the SCP1 protocol, as implemented by the OpenSSH
5141 @command{scp} program.")
5142 (license license:gpl2+)))
5144 (define-public python-rst.linker
5146 (name "python-rst.linker")
5151 (uri (pypi-uri "rst.linker" version))
5153 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
5154 (build-system python-build-system)
5156 (list python-dateutil python-six))
5158 (list python-setuptools-scm))
5159 ;; Test would require path.py, which would introduce a cyclic dependence.
5160 (arguments `(#:tests? #f))
5161 ;; Note: As of version 1.7 the documentation is not worth building.
5162 (home-page "https://github.com/jaraco/rst.linker")
5163 (synopsis "Sphinx plugin to add links and timestamps")
5164 (description "rst.linker automatically replaces text by a
5165 reStructuredText external reference or timestamps. It's primary purpose is to
5166 augment the changelog, but it can be used for other documents, too.")
5167 (license license:expat)))
5169 (define-public python-sshpubkeys
5171 (name "python-sshpubkeys")
5173 (home-page "https://github.com/ojarva/python-sshpubkeys")
5178 (commit (string-append "v" version))))
5179 (file-name (git-file-name name version))
5182 "1h4gwmcfn84kkqh83km1vfz8sc5kr2g4gzgzmr8gz704jmqiv7nq"))))
5183 (build-system python-build-system)
5185 (list python-cryptography python-ecdsa))
5186 (synopsis "OpenSSH public key parser")
5188 "This package provides a library for parsing and validating OpenSSH
5190 (license license:bsd-3)))
5192 (define-public python-feedgenerator
5194 (name "python-feedgenerator")
5199 (uri (pypi-uri "feedgenerator" version))
5202 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
5203 (modules '((guix build utils)))
5206 ;; Remove pre-compiled .pyc files from source.
5207 (for-each delete-file-recursively
5208 (find-files "." "__pycache__" #:directories? #t))
5209 (for-each delete-file (find-files "." "\\.pyc$"))
5211 (build-system python-build-system)
5213 (list python-pytz python-six))
5214 (home-page "https://github.com/getpelican/feedgenerator")
5216 "Standalone version of Django's Atom/RSS feed generator")
5218 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
5219 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
5220 (license license:bsd-3)))
5222 (define-public python-lsp-jsonrpc
5224 (name "python-lsp-jsonrpc")
5229 (uri (pypi-uri "python-lsp-jsonrpc" version))
5232 "1gb0fsamxndhplx25v8m0b3k7aknzy454fpa0qsqsqnv6c3igv3v"))))
5233 (build-system python-build-system)
5235 (list python-mock python-pytest))
5237 (list python-ujson))
5238 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
5239 (synopsis "JSON RPC 2.0 server library")
5241 "This package provides a JSON RPC 2.0 server library for Python.")
5242 (license license:expat)))
5244 (define-public python-jsonrpc-server
5245 (deprecated-package "python-jsonrpc-server" python-lsp-jsonrpc))
5247 (define-public python-pydantic
5249 (name "python-pydantic")
5255 (url "https://github.com/samuelcolvin/pydantic")
5256 (commit (string-append "v" version))))
5257 (file-name (git-file-name name version))
5259 (base32 "1406kgppqa7524mxllsipj7gb8fn7pwf51l11lqik59xjhsfv94f"))))
5260 (build-system python-build-system)
5263 (modify-phases %standard-phases
5265 (lambda _ (invoke "pytest" "-vv"))))))
5267 (list python-pytest python-pytest-mock))
5269 (list python-typing-extensions))
5270 (home-page "https://github.com/samuelcolvin/pydantic")
5271 (synopsis "Python data validation and settings management")
5273 "Pydantic enforces type hints at runtime, and provides user friendly
5274 errors when data is invalid.")
5275 (license license:expat)))
5277 (define-public python-pydantic-cli
5279 (name "python-pydantic-cli")
5283 (method git-fetch) ;for tests
5285 (url "https://github.com/mpkocher/pydantic-cli")
5286 (commit (string-append "v" version))))
5287 (file-name (git-file-name name version))
5290 "1v4dx6n60rbsan5zpw2rgdih7lb3h0xclagn1p6zfwl0r9l9cvym"))))
5291 (build-system python-build-system)
5293 (list python-pydantic))
5298 (home-page "https://github.com/mpkocher/pydantic-cli")
5299 (synopsis "Turn Pydantic defined data models into CLI tools")
5301 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
5302 Interfaces} via data models provided in the JSON format.")
5303 (license license:expat)))
5305 (define-public python-pydocstyle
5307 (name "python-pydocstyle")
5312 (uri (pypi-uri "pydocstyle" version))
5315 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
5316 (build-system python-build-system)
5318 (list python-six python-snowballstemmer))
5320 "https://github.com/PyCQA/pydocstyle/")
5321 (synopsis "Python docstring style checker")
5323 "This package provides a style checker for the Python Language
5325 (license license:expat)))
5327 (define-public python-lsp-server
5329 (name "python-lsp-server")
5334 (uri (pypi-uri "python-lsp-server" version))
5337 "0h6wxzmm6qjfwkkn3mnzn1fpmcp23fpbk74bi8p540q1nzccqj0v"))))
5338 (build-system python-build-system)
5341 (modify-phases %standard-phases
5342 (add-before 'check 'set-HOME
5343 (lambda _ (setenv "HOME" "/tmp")))
5346 ;; Disable failing test.
5347 (invoke "python" "-m" "pytest" "-k"
5348 "not test_pyqt_completion"))))))
5350 (list python-autopep8
5363 (list python-coverage
5373 (home-page "https://github.com/python-lsp/python-lsp-server")
5374 (synopsis "Python implementation of the Language Server Protocol")
5376 "The Python Language Server @command{pylsp} is an implementation of the
5377 Python 3 language specification for the Language Server Protocol (LSP).
5378 This tool is used in text editing environments to provide a complete
5379 and integrated feature-set for programming Python effectively.")
5380 (license license:expat)))
5382 (define-public python-language-server
5383 (deprecated-package "python-language-server" python-lsp-server))
5385 (define-public python-pathspec
5387 (name "python-pathspec")
5392 (uri (pypi-uri "pathspec" version))
5395 "1cdbdb3s6ldnjpwbi0bgl0xlmw4mbfxk08bbdxc3srx26na4jr75"))))
5396 (build-system python-build-system)
5397 (home-page "https://github.com/cpburnz/python-path-specification")
5398 (synopsis "Utility library for gitignore style pattern matching of file paths")
5400 "This package provides a utility library for gitignore style pattern
5401 matching of file paths.")
5402 (license license:mpl2.0)))
5404 (define-public python-black
5406 (name "python-black")
5411 (uri (pypi-uri "black" version))
5414 "0yfahlqc7dsdp1js0cbv706apldnfnlbal9b53cww8n0hs40n0im"))))
5415 (build-system python-build-system)
5418 (modify-phases %standard-phases
5419 (add-after 'patch-source-shebangs 'use-absolute-file-names
5420 (lambda* (#:key native-inputs inputs #:allow-other-keys)
5421 (let* ((inpts (or native-inputs inputs))
5422 (python3 (search-input-file inpts "/bin/python3")))
5423 (substitute* (find-files "tests" "\\.py$")
5424 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
5425 (string-append "#!" python3 (if (string? minor-version)
5429 (lambda* (#:key tests? #:allow-other-keys)
5430 (when tests? (invoke "pytest" "-vv")))))))
5436 python-mypy-extensions
5441 python-typing-extensions))
5443 (list python-pytest python-pytest-aiohttp python-setuptools-scm))
5444 (home-page "https://github.com/psf/black")
5445 (synopsis "The uncompromising code formatter")
5446 (description "Black is the uncompromising Python code formatter.")
5447 (license license:expat)))
5449 (define-public python-black-macchiato
5451 (name "python-black-macchiato")
5456 (uri (pypi-uri "black-macchiato" version))
5459 "1drp5p697ni1xn5y2lbjpalgpkzy2i4cyxjj5pk4dxr0vk97dd7i"))))
5460 (build-system python-build-system)
5462 (list python-black))
5463 (home-page "https://github.com/wbolster/black-macchiato")
5464 (synopsis "Partial @code{python-black} formatting")
5466 "This package is built on top the @{python-black} code formatter to
5467 enable formatting of partial files.")
5468 (license license:bsd-3)))
5470 (define-public python-blinker
5472 (name "python-blinker")
5477 (uri (pypi-uri "blinker" version))
5480 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
5481 (build-system python-build-system)
5482 (home-page "https://pythonhosted.org/blinker/")
5483 (synopsis "Fast, simple object-to-object and broadcast signaling")
5485 "Blinker provides a fast dispatching system that allows any number of
5486 interested parties to subscribe to events, or \"signals\".")
5487 (license license:expat)))
5489 (define-public pelican
5496 (uri (pypi-uri "pelican" version))
5498 (base32 "0m1kndc98hhnlq0yl05f4lzccw555pkxnrajj6lks18yh491kw8w"))))
5499 (build-system python-build-system)
5501 (list python-blinker
5503 ;; Ignoring `guix lint` warning as python-docutils is used to support
5504 ;; reStructuredText processing at runtime.
5506 python-feedgenerator
5513 (home-page "https://blog.getpelican.com/")
5515 `(;; XXX Requires a lot more packages to do unit tests :P
5517 (synopsis "Python-based static site publishing system")
5519 "Pelican is a tool to generate a static blog from reStructuredText,
5520 Markdown input files, and more. Pelican uses Jinja2 for templating
5521 and is very extensible.")
5522 (license license:agpl3+)))
5524 (define-public mallard-ducktype
5526 (name "mallard-ducktype")
5531 ;; git-reference because tests are not included in pypi source tarball
5532 ;; https://issues.guix.gnu.org/issue/36755#2
5534 (url "https://github.com/projectmallard/mallard-ducktype")
5536 (file-name (git-file-name name version))
5539 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
5540 (build-system python-build-system)
5543 (modify-phases %standard-phases
5546 (with-directory-excursion "tests"
5547 (invoke "sh" "runtests")))))))
5548 (home-page "http://projectmallard.org")
5549 (synopsis "Convert Ducktype to Mallard documentation markup")
5551 "Ducktype is a lightweight syntax that can represent all the semantics
5552 of the Mallard XML documentation system. Ducktype files can be converted to
5553 Mallard using the @command{ducktype} tool. The yelp-tools package
5554 provides additional functionality on the produced Mallard documents.")
5555 (license license:expat)))
5557 (define-public python-cython
5559 (name "python-cython")
5564 (uri (pypi-uri "Cython" version))
5566 (base32 "0hw4gs18rh4slij1fg252argxhraypld9apbqbl60230qc3lvw6d"))))
5567 (build-system python-build-system)
5568 ;; we need the full python package and not just the python-wrapper
5569 ;; because we need libpython3.3m.so
5574 (modify-phases %standard-phases
5575 (add-before 'check 'set-HOME
5576 ;; some tests require access to "$HOME/.cython"
5577 (lambda _ (setenv "HOME" "/tmp")))
5579 (lambda* (#:key tests? #:allow-other-keys)
5580 ;; Disable compiler optimizations to greatly reduce the running
5581 ;; time of the test suite.
5582 (setenv "CFLAGS" "-O0")
5585 (invoke "python" "runtests.py" "-vv"
5586 "-j" (number->string (parallel-job-count))
5587 ;; XXX: On 32-bit architectures, running the parallel tests
5588 ;; fails on many-core systems, see
5589 ;; <https://github.com/cython/cython/issues/2807>.
5590 ,@(if (not (target-64bit?))
5591 '("-x" "run.parallel")
5593 ;; This test fails when running on 24 cores.
5594 "-x" "cpp_stl_conversion")))))))
5595 (home-page "https://cython.org/")
5596 (synopsis "C extensions for Python")
5597 (description "Cython is an optimising static compiler for both the Python
5598 programming language and the extended Cython programming language. It makes
5599 writing C extensions for Python as easy as Python itself.")
5600 (license license:asl2.0)))
5602 (define-public python-cython-3
5604 (inherit python-cython)
5605 ;; Cython 3 is not officially released yet, so distinguish the name
5607 (name "python-cython-next")
5608 (version "3.0.0a10")
5611 (uri (pypi-uri "Cython" version))
5614 "17fqacrpis05w1rpi7d7sbimrk20xf8h6d3vrz5nf6ix3899abil"))))
5617 ;; NOTE: when upgrading numpy please make sure that python-numba,
5618 ;; python-pandas and python-scipy still build, as these three packages are
5619 ;; often used together.
5620 (define-public python-numpy
5622 (name "python-numpy")
5628 "https://github.com/numpy/numpy/releases/download/v"
5629 version "/numpy-" version ".tar.gz"))
5632 "0b0c5y35rd3mvwfk5is1d5ppfw9nl4d2rgx9xkwh1p0w394wdvyl"))))
5633 (build-system python-build-system)
5636 #:modules '((guix build utils)
5637 (guix build python-build-system)
5640 #~(modify-phases %standard-phases
5641 (add-before 'build 'parallelize-build
5643 (setenv "NPY_NUM_BUILD_JOBS"
5644 (number->string (parallel-job-count)))))
5645 (add-before 'build 'configure-blas
5646 (lambda* (#:key inputs #:allow-other-keys)
5647 (call-with-output-file "site.cfg"
5652 libraries = openblas
5653 library_dirs = ~a/lib
5654 include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
5655 (add-before 'build 'fix-executable-paths
5656 (lambda* (#:key inputs #:allow-other-keys)
5657 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
5658 ;; instead of /bin/sh.
5659 (substitute* "numpy/distutils/exec_command.py"
5661 (format #f "~s" (search-input-file inputs "bin/bash"))))
5662 ;; Don't try to call '/bin/true' specifically.
5663 (substitute* "numpy/core/tests/test_cpu_features.py"
5664 (("/bin/true") (search-input-file inputs "bin/true")))))
5666 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
5668 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
5669 "-j" (number->string (parallel-job-count))
5670 ;; Contrary to scipy, the runtests.py script of numpy
5671 ;; does *not* automatically provide -n when -j is used
5672 ;; (see: https://github.com/numpy/numpy/issues/21359).
5673 "--" "-n" (number->string (parallel-job-count))
5675 ;; These tests may fail on 32-bit systems (see:
5676 ;; https://github.com/numpy/numpy/issues/18387).
5677 "not test_float_remainder_overflow "
5678 "and not test_pareto"
5679 ;; These tests seem to fail on machines without
5680 ;; an FPU is still under investigation upstream.
5681 ;; https://github.com/numpy/numpy/issues/20635
5682 #$@(if (target-riscv64?)
5683 `(" and not test_float"
5684 " and not test_fpclass")
5688 python-hypothesis-next
5692 (inputs (list bash openblas))
5693 (home-page "https://numpy.org")
5694 (synopsis "Fundamental package for scientific computing with Python")
5695 (description "NumPy is the fundamental package for scientific computing
5696 with Python. It contains among other things: a powerful N-dimensional array
5697 object, sophisticated (broadcasting) functions, tools for integrating C/C++
5698 and Fortran code, useful linear algebra, Fourier transform, and random number
5701 '((upstream-name . "numpy")))
5702 (license license:bsd-3)))
5704 (define-public python-numpy-next
5706 (inherit python-numpy)
5707 (name "python-numpy-next")
5711 (inherit (package-source python-numpy))
5714 "https://github.com/numpy/numpy/releases/download/v"
5715 version "/numpy-" version ".tar.gz"))
5718 "19dw91pqbqcniw2z57kiyqs1qp56g7kqy1bdyv664g8s62sc01m9"))))))
5720 (define-public python-numpy-documentation
5722 (inherit python-numpy)
5723 (name "python-numpy-documentation")
5726 #:tests? #f ;we're only generating the documentation
5728 #~(modify-phases %standard-phases
5729 (add-before 'build 'add-gnu-freefont-to-texmf
5731 ;; XXX: The Sphinx-generated tex output specifies the GNU
5732 ;; FreeFont font to be searched via its extension, which uses
5733 ;; kpathsea instead of fontconfig and fail (see:
5734 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
5735 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
5737 (mkdir-p "texmf-dist/fonts/opentype/public")
5738 (symlink (string-append
5739 #$(this-package-native-input "font-gnu-freefont")
5740 "/share/fonts/opentype")
5743 "texmf-dist/fonts/opentype/public/gnu-freefont"))
5744 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
5745 (getcwd) "/texmf-dist"))))
5749 (let* ((data (string-append #$output "/share"))
5750 (doc (string-append data "/doc/numpy"))
5751 (html (string-append doc "/html"))
5752 (info (string-append data "/info"))
5753 (sphinxopts (string-append
5755 (number->string (parallel-job-count)))))
5756 (with-directory-excursion "doc"
5757 ;; Do not treat warnings as errors.
5758 (substitute* "Makefile"
5760 (setenv "HOME" "/tmp")
5761 ;; Build the PDF documentation.
5762 (invoke "make" "latex-build" sphinxopts)
5763 (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
5764 ;; Build the HTML documentation
5765 (invoke "make" "html" sphinxopts)
5766 ;; Build the Info documentation. The issues worked around
5767 ;; below can be tracked at
5768 ;; https://github.com/numpy/numpy/issues/12278.
5769 (substitute* "source/conf.py"
5770 ;; The root document should be "index", not "contents".
5771 (("\"contents\"") "'index'")
5772 ;; Disable Sphinx extensions that produce broken Texinfo.
5773 ((".*'numpydoc'.*") "")
5774 ((".*'sphinx.ext.autosummary'.*") ""))
5775 (invoke "make" "info" sphinxopts)
5776 ;; Install the HTML documentation.
5778 (copy-recursively "build/html" html)
5779 ;; Install the PDF reference and user manuals.
5780 (install-file "build/latex/numpy-ref.pdf" doc)
5781 (install-file "build/latex/numpy-user.pdf" doc)
5782 ;; Install the info manual.
5783 (install-file "build/texinfo/numpy.info" info)
5784 (symlink (string-append html "/_images")
5785 (string-append info "/numpy-figures")))))))))
5787 (list font-gnu-freefont
5795 python-pydata-sphinx-theme
5796 python-scipy ;used by matplotlib
5798 python-sphinx-panels
5803 texlive-greek-fontenc
5804 texlive-latex-expdlist
5808 (propagated-inputs '())
5809 (synopsis "Documentation for the @code{python-numpy} package")
5810 (description "This package provides the complete NumPy documentation in
5811 the Texinfo, HTML, and PDF formats.")))
5813 (define-public python-munch
5815 (name "python-munch")
5820 (uri (pypi-uri "munch" version))
5823 "1lnvlic9g68hcmgdnv5bzp0nx2bf1kjclj54gx0s7nyl4ipmywrd"))))
5824 (build-system python-build-system)
5825 (native-inputs (list python-pbr python-pytest))
5826 (propagated-inputs (list python-six))
5827 (home-page "https://github.com/Infinidat/munch")
5828 (synopsis "Dot-accessible dictionary")
5829 (description "Munch is a dot-accessible dictionary similar to JavaScript
5831 (license license:expat)))
5833 (define-public python-colormath
5835 (name "python-colormath")
5840 (uri (pypi-uri "colormath" version))
5843 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
5844 (build-system python-build-system)
5846 (list python-networkx python-numpy))
5847 (home-page "https://github.com/gtaylor/python-colormath")
5848 (synopsis "Color math and conversion library")
5850 "This is a Python library for color math and conversions.")
5851 (license license:bsd-3)))
5853 (define-public python-sparse
5855 (name "python-sparse")
5860 (uri (pypi-uri "sparse" version))
5863 "05ar1lhq1yy4nb78s7vpb1wz4ac4kj0r4lrd7yrf23kpmaacjpb8"))))
5864 (build-system python-build-system)
5867 (modify-phases %standard-phases
5869 (lambda* (#:key tests? #:allow-other-keys)
5871 (invoke "python" "-m" "pytest" "-v")))))))
5873 (list python-numba python-numpy python-scipy))
5875 (list python-dask python-pytest python-pytest-black
5877 (home-page "https://github.com/pydata/sparse/")
5878 (synopsis "Library for multi-dimensional sparse arrays")
5880 "This package implements sparse arrays of arbitrary dimension on top of
5881 @code{numpy} and @code{scipy.sparse}. Sparse array is a matrix in which most
5882 of the elements are zero. @code{python-sparse} generalizes the
5883 @code{scipy.sparse.coo_matrix} and @code{scipy.sparse.dok_matrix} layouts, but
5884 extends beyond just rows and columns to an arbitrary number of dimensions.
5885 Additionally, this project maintains compatibility with the
5886 @code{numpy.ndarray} interface rather than the @code{numpy.matrix} interface
5887 used in @code{scipy.sparse}. These differences make this project useful in
5888 certain situations where @code{scipy.sparse} matrices are not well suited, but
5889 it should not be considered a full replacement. It lacks layouts that are not
5890 easily generalized like @dfn{compressed sparse row/column}(CSR/CSC) and
5891 depends on @code{scipy.sparse} for some computations.")
5892 (license license:bsd-3)))
5894 (define-public python-spectra
5896 (name "python-spectra")
5901 (uri (pypi-uri "spectra" version))
5904 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
5905 (build-system python-build-system)
5908 (modify-phases %standard-phases
5910 (lambda _ (invoke "nosetests" "-v"))))))
5912 (list python-colormath))
5915 (home-page "https://github.com/jsvine/spectra")
5916 (synopsis "Color scales and color conversion")
5918 "This package provides a Python library intended to make color math,
5919 color scales, and color space conversion easy. It has support for:
5924 @item Color blending
5925 @item Brightening/darkening colors
5926 @item Saturating/desaturating colors
5927 @item Conversion to/from multiple color spaces.
5929 (license license:expat)))
5931 (define-public python-pyspnego
5933 (name "python-pyspnego")
5937 (method git-fetch) ;no tests in PyPI release
5939 (url "https://github.com/jborean93/pyspnego")
5940 (commit (string-append "v" version))))
5941 (file-name (git-file-name name version))
5944 "0pfh2x0539f0k2qi2pbjm64b2fqp64c63xxpinvg1yfaw915kgpb"))))
5945 (build-system python-build-system)
5947 `(#:phases (modify-phases %standard-phases
5949 (lambda* (#:key tests? #:allow-other-keys)
5951 (invoke "pytest")))))))
5953 (list python-pytest python-pytest-mock))
5955 (list python-cryptography python-gssapi python-ruamel.yaml))
5956 (home-page "https://github.com/jborean93/pyspnego")
5957 (synopsis "Python SPNEGO library")
5958 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
5959 Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
5960 parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
5962 (license license:expat)))
5964 (define-public python-pygit2
5966 (name "python-pygit2")
5971 (uri (pypi-uri "pygit2" version))
5973 (base32 "068bwhirigbh2435abyv4shdxgxvyfqf4dxfmhd4hihivwrl9290"))))
5974 (build-system python-build-system)
5976 `(#:phases (modify-phases %standard-phases
5978 (lambda* (#:key tests? #:allow-other-keys)
5980 (invoke "pytest" "-v")))))))
5982 (list python-cached-property python-cffi libgit2))
5984 (list python-pytest))
5985 (home-page "https://github.com/libgit2/pygit2")
5986 (synopsis "Python bindings for libgit2")
5987 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
5988 ;; GPL2.0 only, with linking exception.
5989 (license license:gpl2)))
5991 (define-public python-patiencediff
5993 (name "python-patiencediff")
5998 (uri (pypi-uri "patiencediff" version))
6001 "0yjk50lsd4gnllxls925xbcdxwvmda37w2a1shk0p1nvl3fcha6q"))))
6002 (build-system python-build-system)
6003 (home-page "https://www.breezy-vcs.org/")
6004 (synopsis "Python implementation of the patiencediff algorithm")
6006 "This package contains a Python implementation of the @code{patiencediff}
6007 algorithm. Patiencediff provides a good balance of performance, nice output for
6008 humans, and implementation simplicity.")
6009 (license license:gpl2)))
6011 (define-public python-wmctrl
6013 (name "python-wmctrl")
6018 (uri (pypi-uri "wmctrl" version))
6021 "1q0l1sqnj5wma87k3dsgmsyph464syjc6fl8qcpa41nan1rgzjv6"))))
6022 (build-system python-build-system)
6024 `(#:phases (modify-phases %standard-phases
6025 (add-after 'unpack 'patch-paths
6026 (lambda* (#:key inputs #:allow-other-keys)
6027 (let ((wmctrl (assoc-ref inputs "wmctrl")))
6028 (substitute* "wmctrl.py"
6030 (string-append "'" wmctrl "/bin/wmctrl")))))))))
6031 (inputs (list wmctrl))
6032 (propagated-inputs (list python-attrs))
6033 (home-page "https://github.com/antocuni/wmctrl")
6034 (synopsis "Tool to programmatically control Xorg windows")
6035 (description "This package provides a library for programmatically
6036 controlling Xorg windows using Python. The library relies on the
6037 @command{wmctrl} to do so.")
6038 (license license:expat)))
6040 (define-public python-fancycompleter
6042 (name "python-fancycompleter")
6047 (uri (pypi-uri "fancycompleter" version))
6049 (base32 "0wkj4h01pxa8prv59zl09a0i3w26k835bfpjgvyvsai4mswgxq09"))))
6050 (build-system python-build-system)
6052 `(#:phases (modify-phases %standard-phases
6053 (add-after 'unpack 'fix-setup.py
6055 (substitute* "setup.py"
6059 (string-append "version='" ,version "',"))
6060 ((".*pyrepl.*") ;broken on Python 3
6062 (home-page "https://github.com/pdbpp/fancycompleter")
6063 (synopsis "TAB completion library for Python")
6064 (description "@code{fancycompleter} is a module that adds TAB completion
6065 to the interactive prompt. It is an extension of the @code{rlcompleter}
6066 module from the standard Python library.")
6067 (license license:bsd-3)))
6069 (define-public python-ipdb
6071 (name "python-ipdb")
6076 (uri (pypi-uri "ipdb" version))
6078 (base32 "1ibql99agjf2gj7y0svzd5m0h81hailf4p3sj3yl9i1i8ykdj6wm"))))
6079 (build-system python-build-system)
6081 (list #:phases #~(modify-phases %standard-phases
6083 (lambda* (#:key tests? #:allow-other-keys)
6085 (invoke "python" "-m" "unittest" "discover")))))))
6086 (propagated-inputs (list python-ipython python-toml python-decorator))
6087 (home-page "https://github.com/gotcha/ipdb")
6088 (synopsis "IPython-enhanced Python debugger (pdb)")
6089 (description "@code{ipdb} exports functions to access the IPython
6090 debugger, which features tab completion, syntax highlighting, better
6091 tracebacks and better introspection than Python's standard @command{pdb}
6092 debugger, with which it shares the same interface.")
6093 (license license:bsd-3)))
6095 (define-public python-pdbpp
6097 (name "python-pdbpp")
6102 (uri (pypi-uri "pdbpp" version))
6105 "1xb9yvi30rb1cdpvfdk2kg79vh3anvkz91r8bwvfp3iqv97kzr6r"))))
6106 (build-system python-build-system)
6109 (modify-phases %standard-phases
6111 (lambda* (#:key tests? #:allow-other-keys)
6116 ;; These tests seem to require a real TTY.
6117 "not interaction_restores_previous_sigint_handler "
6118 "and not python_m_pdb_uses_pdbpp"))))))))
6120 (list python-fancycompleter python-pygments python-wmctrl))
6122 (list python-pytest python-setuptools-scm))
6123 (home-page "https://github.com/pdbpp/pdbpp")
6124 (synopsis "Drop-in replacement for pdb")
6125 (description "Pdb++ is a drop-in replacement for @code{pdb}. It
6126 includes the following improvements compared to @code{pdb}:
6128 @item auto-completion
6129 @item syntax highlighting of code listings
6131 @item new commands to be used from the interactive (Pdb++) prompt
6132 @item smart command parsing
6133 @item additional convenience functions in the @code{pdb} module.
6135 (license license:bsd-3)))
6137 (define-public python-pdftotext
6139 (name "python-pdftotext")
6144 (uri (pypi-uri "pdftotext" version))
6146 (base32 "1555wbgr5spj8xflrs4mwsrdmba2f9s72nk50xzqk9ghxaxdvy6a"))))
6147 (build-system python-build-system)
6150 (home-page "https://github.com/jalan/pdftotext")
6151 (synopsis "Simple PDF text extraction")
6152 (description "Pdftotext is a Python library of PDF text extraction.")
6153 (license license:expat)))
6155 (define-public python-pluginbase
6157 (name "python-pluginbase")
6162 (uri (pypi-uri "pluginbase" version))
6165 "11z2vvbp13828y0x3w39f29p9r9xcix7h7c4fff2w8yfiylk6v7z"))))
6166 (build-system python-build-system)
6168 `(#:phases (modify-phases %standard-phases
6170 (lambda* (#:key tests? #:allow-other-keys)
6172 (invoke "make" "test")))))))
6173 (native-inputs (list python-pytest))
6174 (home-page "https://github.com/mitsuhiko/pluginbase")
6175 (synopsis "Simple but flexible plugin system for Python")
6176 (description "PluginBase is a library useful in the development of
6177 flexible plugin systems in Python.")
6178 (license license:bsd-3)))
6180 (define-public python-node-semver
6182 (name "python-node-semver")
6187 (uri (pypi-uri "node-semver" version))
6190 "000ypfns5x72b41w5f9pk6k3jnr35scliqfbvmilyvv0178005i8"))))
6191 (build-system python-build-system)
6193 (list python-pytest))
6194 (home-page "https://github.com/podhmo/python-node-semver")
6195 (synopsis "Python port of node-semver")
6196 (description "This module provides a Python version of node-semver, a
6197 semantic version parser for Node.js.")
6198 (license license:expat)))
6200 (define-public python-patch-ng
6202 (name "python-patch-ng")
6206 (method git-fetch) ;no tests in PyPI archive
6208 (url "https://github.com/conan-io/python-patch-ng")
6210 (file-name (git-file-name name version))
6213 "0qxn4ss2s54qy87xrpcybz26kp2fwlaq41x4k9jcmp6d7p0w569m"))))
6214 (build-system python-build-system)
6216 `(#:phases (modify-phases %standard-phases
6218 (lambda* (#:key tests? #:allow-other-keys)
6220 (invoke "tests/run_tests.py" "-v")))))))
6221 (home-page "https://github.com/conan-io/python-patch-ng")
6222 (synopsis "Python library to parse and apply unified diffs")
6223 (description "Patch NG (New Generation) is a command and Python library to
6224 parse and apply unified diffs. It has features such as:
6226 @item automatic correction of common patch formatting corruption
6227 @item patch format detection (SVN, Hg, Git)
6228 @item nice diffstat histogram.
6230 (license license:expat)))
6232 (define-public python-numpydoc
6234 (name "python-numpydoc")
6239 (uri (pypi-uri "numpydoc" version))
6242 "1xjsli2fqks4iv3524v1d329siad7bbsi4kr174zvhsl1pnjds3w"))))
6243 (build-system python-build-system)
6246 (modify-phases %standard-phases
6247 (add-after 'unpack 'relax-requirements
6249 (substitute* "setup.py"
6250 (("'Jinja2>=2.10,<3.1'")
6251 "'Jinja2>=2.10'"))))
6253 (lambda* (#:key tests? #:allow-other-keys)
6255 (invoke "pytest" "-v" "numpydoc/tests"
6256 ;; TODO: unclear why these fail.
6257 "-k" "not test_MyClass and not test_my_function")))))))
6258 (propagated-inputs (list python-jinja2 python-sphinx))
6259 (native-inputs (list python-matplotlib python-pytest python-pytest-cov))
6260 (home-page "https://pypi.org/project/numpydoc/")
6261 (synopsis "Numpy's Sphinx extensions")
6262 (description "Sphinx extension to support docstrings in Numpy format.")
6263 (license license:bsd-2)))
6265 (define-public python-numexpr
6267 (name "python-numexpr")
6272 (uri (pypi-uri "numexpr" version))
6275 "09d8yfsx33ddwfkpn8805w2mxnn4cvf47yc66g4azldpz4lnaqa3"))))
6276 (build-system python-build-system)
6277 (arguments `(#:tests? #f)) ; no tests included
6279 (list python-numpy))
6280 (home-page "https://github.com/pydata/numexpr")
6281 (synopsis "Fast numerical expression evaluator for NumPy")
6283 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
6284 expressions that operate on arrays are accelerated and use less memory than
6285 doing the same calculation in Python. In addition, its multi-threaded
6286 capabilities can make use of all your cores, which may accelerate
6287 computations, most specially if they are not memory-bounded (e.g. those using
6288 transcendental functions).")
6289 (license license:expat)))
6291 (define-public python-cycler
6293 (name "python-cycler")
6297 (uri (pypi-uri "cycler" version))
6300 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
6301 (build-system python-build-system)
6303 ;; XXX: The current version requires 'coveralls' which we don't have.
6304 ;; Enable this for the next release which uses 'python-pytest'.
6308 (home-page "https://matplotlib.org/cycler/")
6309 (synopsis "Composable keyword argument iterator")
6311 "When using @code{matplotlib} and plotting more than one line, it is
6312 common to want to be able to want to be able to cycle over one or more artist
6313 styles; but the plotting logic can quickly become involved.
6314 To address this and enable easy cycling over arbitrary @code{kwargs}, the
6315 @code{Cycler} class was developed.")
6316 (license license:bsd-3)))
6318 (define-public python-colorspacious
6320 (name "python-colorspacious")
6326 (url "https://github.com/njsmith/colorspacious")
6327 (commit (string-append "v" version))))
6328 (file-name (git-file-name name version))
6330 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
6331 (build-system python-build-system)
6333 (list python-numpy))
6338 (modify-phases %standard-phases
6341 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
6342 (home-page "https://github.com/njsmith/colorspacious")
6343 (synopsis "Python library for colorspace conversions")
6344 (description "@code{colorspacious} is a Python library that lets you
6345 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
6346 (license license:expat)))
6348 (define-public python-proto-matcher
6350 (name "python-proto-matcher")
6355 (uri (pypi-uri "proto_matcher" version))
6357 (base32 "1644x0hrl398ji3281n44ymfgc3cspzfagjckhqjn4nja5nlikxg"))))
6358 (build-system python-build-system)
6360 `(#:tests? #f)) ;no test suite
6362 (list python-protobuf python-pyhamcrest))
6363 (home-page "https://github.com/dayfine/proto-matcher")
6364 (synopsis "PyHamcrest test matchers for protocol buffers")
6365 (description "This package provides the following PyHamcrest test
6366 matchers, that enable matching a protocol buffer message:
6369 Test the argument equals the given protobuf message.
6371 Test the argument equals the given protobuf message, while comparing any float
6372 field using approximation.
6373 @item ignoring_field_paths
6374 Test the argument equals the given protobuf message, while ignoring those
6375 fields specified in the field paths.
6376 @item ignoring_repeated_field_ordering
6377 Test the argument equals the given protobuf message, ignoring the ordering of
6380 Test the argument partially equals the given protobuf message, i.e. if a field
6381 is in the argument but not in the expected message, it's ignored in the
6384 (license license:asl2.0)))
6386 (define-public python-matplotlib
6388 (name "python-matplotlib")
6393 (uri (pypi-uri "matplotlib" version))
6395 (base32 "18h78s5ld1i6mz00w258hy29909nfr3ddq6ry9kq18agw468bks8"))))
6396 (build-system python-build-system)
6400 #~(modify-phases %standard-phases
6401 (add-before 'build 'pretend-version
6402 ;; The version string is usually derived via setuptools-scm, but
6403 ;; without the git metadata available, the version string is set to
6406 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
6407 (add-after 'unpack 'fix-and-disable-failing-tests
6408 ;; XXX: Disable all image comparison tests because we're using a
6409 ;; newer version of FreeType than matplotlib expects. This leads
6410 ;; to minor differences throughout the tests.
6412 (substitute* (append (find-files "lib/matplotlib/tests/"
6414 (find-files "lib/mpl_toolkits/tests"
6416 (("^from matplotlib" match)
6417 (string-append "import pytest\n" match))
6418 (("( *)@([^_]+_)*(image_comparison|check_figures_equal)" match
6420 (string-append indent "@pytest.mark.skip(\
6421 reason=\"unknown minor image differences\")\n" match)))
6422 (substitute* "lib/matplotlib/tests/test_animation.py"
6423 (("/bin/sh") (which "sh")))
6424 (for-each delete-file
6425 ;; test_normal_axes, test_get_tightbbox_polar
6426 '("lib/matplotlib/tests/test_axes.py"
6427 "lib/matplotlib/tests/test_polar.py"
6428 ;; We don't use the webagg backend and this test
6430 "lib/matplotlib/tests/test_backend_webagg.py"
6431 ;; test_outward_ticks
6432 "lib/matplotlib/tests/test_tightlayout.py"
6433 ;; test_hidden_axes fails with minor extent
6434 ;; differences, possibly due to the use of a
6435 ;; different version of FreeType.
6436 "lib/matplotlib/tests/test_constrainedlayout.py"
6437 ;; Fontconfig returns no fonts.
6438 "lib/matplotlib/tests/test_font_manager.py"
6439 ;; The images comparison test fails
6440 ;; non-deterministically when run in parallel (see:
6441 ;; https://github.com/matplotlib/matplotlib/issues/22992).
6442 "lib/matplotlib/tests/test_compare_images.py"))))
6443 (add-before 'build 'configure-environment
6444 (lambda* (#:key inputs #:allow-other-keys)
6445 ;; Fix rounding errors when using the x87 FPU.
6446 (when (string-prefix? "i686" #$(%current-system))
6447 (setenv "CFLAGS" "-ffloat-store"))
6448 (call-with-output-file "mplsetup.cfg"
6452 system_freetype = true
6462 tests = True~%" (assoc-ref inputs "tcl") (assoc-ref inputs "tk"))))))
6464 (lambda* (#:key tests? #:allow-other-keys)
6466 ;; Step out of the source directory to avoid interference.
6467 (with-directory-excursion "/tmp"
6468 ;; Run the installed tests, which is what we want since not
6469 ;; everything gets built in the source directory.
6471 "-n" (number->string (parallel-job-count))
6472 "-m" "not network" "--pyargs" "matplotlib"
6473 ;; The 'test_lazy_auto_backend_selection' fails
6474 ;; because it would require an X server; skip it.
6475 "-k" "not test_lazy_auto_backend_selection"))))))))
6477 (list gobject-introspection
6487 ;; ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
6488 ;; ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
6489 ;; ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
6490 ;; ;; object. For this reason we need to import both libraries.
6509 python-pytest-timeout
6511 python-setuptools-scm
6512 python-setuptools-scm-git-archive))
6513 (home-page "https://matplotlib.org/")
6514 (synopsis "2D plotting library for Python")
6516 "Matplotlib is a Python 2D plotting library which produces publication
6517 quality figures in a variety of hardcopy formats and interactive environments
6518 across platforms. Matplotlib can be used in Python scripts, the python and
6519 ipython shell, web application servers, and six graphical user interface
6521 (license license:psfl)))
6523 (define-public python-matplotlib-documentation
6525 (inherit python-matplotlib)
6526 (name "python-matplotlib-documentation")
6529 #:tests? #f ;we're only generating documentation
6531 #~(modify-phases %standard-phases
6534 (setenv "HOME" "/tmp")
6536 (substitute* "conf.py"
6537 ;; The sphinx_panels extension causes a "TypeError: first
6538 ;; argument must be callable" to be raised when generating the
6539 ;; info target; remove it (see:
6540 ;; https://github.com/executablebooks/sphinx-panels/issues/74).
6541 ((".*'sphinx_panels',.*") ""))
6542 (invoke "make" "html" "info"
6543 ;; Don't abort on warnings; build in parallel.
6544 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
6547 (let* ((data (string-append #$output "/share"))
6548 (doc (string-append data "/doc/matplotlib"))
6549 (info (string-append data "/info"))
6550 (html (string-append doc "/html")))
6552 (copy-recursively "build/html" html)
6553 (install-file "build/texinfo/matplotlib.info" info)
6554 ;; The "matplotlib-figures" directory contains are a subset of
6555 ;; the images produced for the html target; simply create a
6556 ;; symlink to it, saving about 11 MiB.
6557 (symlink (string-append html "/_images")
6558 (string-append info "/matplotlib-figures"))))))))
6562 python-colorspacious
6563 python-mpl-sphinx-theme
6566 python-sphinx-copybutton
6567 python-sphinx-gallery
6568 python-sphinxcontrib-svg2pdfconverter
6576 texlive-unicode-math
6578 texlive-latex-expdlist
6580 texlive-latex-type1cm
6583 (synopsis "Documentation for the @code{python-matplotlib} package")))
6585 (define-public python-matplotlib-inline
6587 (name "python-matplotlib-inline")
6592 (uri (pypi-uri "matplotlib-inline" version))
6594 (base32 "1vilzwj3xp00mxprmmn1hlafm3p23vn56s46kx3ra4qd5signjx0"))))
6595 (build-system python-build-system)
6597 (list python-matplotlib python-traitlets))
6599 ;; Tests disabled because of a circular dependency with ipython.
6601 (home-page "https://github.com/ipython/matplotlib-inline")
6602 (synopsis "Inline Matplotlib backend for Jupyter")
6604 "This package provides a Matplotlib inline back-end for IPython and
6606 (license license:bsd-3)))
6608 (define-public python-matplotlib-venn
6610 (name "python-matplotlib-venn")
6615 (uri (pypi-uri "matplotlib-venn" version ".zip"))
6618 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
6619 (build-system python-build-system)
6620 (arguments '(#:tests? #f)) ; tests are not included
6622 (list python-matplotlib python-numpy python-scipy))
6625 (home-page "https://github.com/konstantint/matplotlib-venn")
6626 (synopsis "Plot area-proportional Venn diagrams")
6628 "This package provides tools for plotting area-proportional two- and
6629 three-way Venn diagrams in @code{matplotlib}.")
6630 (license license:expat)))
6632 (define-public python-pysnptools
6634 (name "python-pysnptools")
6639 (uri (pypi-uri "pysnptools" version))
6642 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
6643 (build-system python-build-system)
6645 `(#:tests? #f ; no test data are included
6647 (modify-phases %standard-phases
6649 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6652 (add-installed-pythonpath inputs outputs)
6653 (invoke "python3" "pysnptools/test.py"))
6663 (list python-cython))
6664 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
6665 (synopsis "Library for reading and manipulating genetic data")
6667 "PySnpTools is a library for reading and manipulating genetic data. It
6668 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
6669 those files. It can also efficiently manipulate ranges of integers using set
6670 operators such as union, intersection, and difference.")
6671 (license license:asl2.0)))
6673 (define-public python-pykdtree
6675 (name "python-pykdtree")
6680 (uri (pypi-uri "pykdtree" version))
6682 (base32 "0p8n2ljdacfixkiw092974dmhy4s1c0h032ii1z9kwi9h5h5rgmy"))))
6683 (build-system python-build-system)
6687 (list python-numpy))
6688 (home-page "https://github.com/storpipfugl/pykdtree")
6689 (synopsis "Fast kd-tree implementation with OpenMP-enabled queries")
6691 "@code{pykdtree} is a kd-tree implementation for fast nearest neighbour
6693 (license license:lgpl3+)))
6695 (define-public python-wurlitzer
6697 (name "python-wurlitzer")
6702 (uri (pypi-uri "wurlitzer" version))
6704 (base32 "0hvmbc41kdwrjns8z1s4a59a4azdvzb8q3vs7nn1li4qm4l0g3yh"))))
6705 (build-system python-build-system)
6708 (modify-phases %standard-phases
6711 (invoke "pytest" "-vv" "test.py"))))))
6713 (list python-mock python-pytest))
6714 (home-page "https://github.com/minrk/wurlitzer")
6715 (synopsis "Capture C-level output in context managers")
6717 "This library helps to redirect @code{sys.stdout} to a stream or a file
6718 while executing some piece of code, including C code running within a Python
6720 (license license:expat)))
6722 (define-public python-socksipy-branch
6724 (name "python-socksipy-branch")
6729 (uri (pypi-uri "SocksiPy-branch" version))
6732 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
6733 (build-system python-build-system)
6735 `(#:tests? #f)) ; There are no tests
6736 (home-page "https://code.google.com/archive/p/socksipy-branch/")
6737 (synopsis "Python SOCKS module")
6739 "SocksiPy - A Python SOCKS client module. It provides a
6740 socket-like interface that supports connections to any TCP
6741 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
6742 The original version was developed by Dan Haim, this is a
6743 branch created by Mario Vilas to address some open issues,
6744 as the original project seems to have been abandoned circa 2007.")
6745 (license license:bsd-3)))
6747 (define-public python-socksipychain
6749 (name "python-socksipychain")
6755 (url "https://github.com/pagekite/PySocksipyChain")
6756 (commit (string-append "v" version))))
6757 (file-name (git-file-name name version))
6760 "02pp994qmiivkdx4y6az5q80l6rzy8g6d2ipvp7kns7lsxvmc2y7"))))
6761 (build-system python-build-system)
6763 `(#:tests? #f)) ; Tests try to access the network.
6764 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
6765 (synopsis "Python SOCKS module with chained proxies support")
6767 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
6768 adds support for arbitrary chaining of proxy servers and various modes of
6769 TLS/SSL encryption. It was developed for use in PageKite, and also includes
6770 a simple netcat replacement with chaining support.")
6771 (license license:bsd-3)))
6773 (define-public python-pycodestyle
6775 (name "python-pycodestyle")
6780 (uri (pypi-uri "pycodestyle" version))
6783 "0zxyrg8029lzjhima6l5nk6y0z6lm5wfp9qchz3s33j3xx3mipgd"))))
6784 (build-system python-build-system)
6787 (modify-phases %standard-phases
6789 (lambda* (#:key tests? #:allow-other-keys)
6791 (invoke "pytest" "-vv")))))))
6793 (list python-pytest))
6794 (home-page "https://pycodestyle.readthedocs.io/")
6795 (synopsis "Python style guide checker")
6796 (description "@code{pycodestyle} (formerly pep8) is a tool to check
6797 Python code against some of the style conventions in
6798 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
6799 (license license:expat)))
6801 (define-public python-pycodestyle-2.6
6803 (inherit python-pycodestyle)
6807 (uri (pypi-uri "pycodestyle" version))
6810 "0bhr6ia0hmgx3nhgibc9pmkzhlh1zcqk707i5fbxgs702ll7v2n5"))))))
6812 (define-public python-multidict
6814 (name "python-multidict")
6819 (uri (pypi-uri "multidict" version))
6822 "1kjrxav572j45xvr1iy60zb2g8zqvrinzdkl4ax36js4vczckl8d"))))
6823 (build-system python-build-system)
6825 '(#:phases (modify-phases %standard-phases
6827 (lambda* (#:key tests? #:allow-other-keys)
6829 (invoke "pytest" "-vv")
6830 (format #t "test suite not run~%")))))))
6832 (list python-pytest python-pytest-cov))
6833 (home-page "https://github.com/aio-libs/multidict/")
6834 (synopsis "Multidict implementation")
6835 (description "Multidict is dict-like collection of key-value pairs
6836 where key might be occurred more than once in the container.")
6837 (license license:asl2.0)))
6839 (define-public python-orderedmultidict
6841 (name "python-orderedmultidict")
6846 (uri (pypi-uri "orderedmultidict" version))
6849 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
6850 (build-system python-build-system)
6854 (list python-flake8 python-pycodestyle))
6855 (home-page "https://github.com/gruns/orderedmultidict")
6856 (synopsis "Python Ordered Multivalue Dictionary - omdict")
6857 (description "This package contains a library for ordered multivalue
6858 dictionaries. A multivalue dictionary is a dictionary that can store
6859 multiple values for the same key. An ordered multivalue dictionary is a
6860 multivalue dictionary that retains the order of insertions and deletions.")
6861 (license license:unlicense)))
6863 (define-public python-autocommand
6865 (name "python-autocommand")
6870 (uri (pypi-uri "autocommand" version))
6872 (base32 "03qp9xx4dq81ljhf56r21gp5j0lpqs1vaw99g0d84i97s3lj1m7y"))))
6873 (build-system python-build-system)
6877 #~(modify-phases %standard-phases
6879 (lambda* (#:key tests? #:allow-other-keys)
6881 ;; This test fails with an invalid syntax error on 'task1 =
6882 ;; asyncio.async(coro_1())' (see:
6883 ;; https://github.com/Lucretiel/autocommand/issues/20).
6884 (delete-file "test/test_autoasync.py")
6885 (invoke "pytest" "-vv")))))))
6886 (native-inputs (list python-pytest python-pytest-asyncio))
6887 (home-page "https://github.com/Lucretiel/autocommand")
6888 (synopsis "Python library to build a command-line from a function")
6889 (description "@code{autocommand} is library to automatically generate and
6890 run simple @code{argparse} parsers from function signatures.")
6891 (license license:lgpl3+)))
6893 (define-public python-autopage
6895 (name "python-autopage")
6899 (uri (pypi-uri "autopage" version))
6902 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
6903 (build-system python-build-system)
6907 #~(modify-phases %standard-phases
6908 ;; Do a manual PEP 517 style build/install procedure until the
6909 ;; python-build-system overhaul is merged.
6912 ;; ZIP does not support timestamps before 1980.
6913 (let ((circa-1980 (* 10 366 24 60 60)))
6914 (setenv "SOURCE_DATE_EPOCH" (number->string circa-1980))
6915 (invoke "python" "-m" "build" "--wheel" "--no-isolation" "."))))
6916 (add-before 'check 'disable-e2e-tests
6918 ;; These tests rely on KeyboardInterrupts which do not
6919 ;; work in the build container.
6920 (delete-file "autopage/tests/test_end_to_end.py")))
6922 (lambda* (#:key tests? #:allow-other-keys)
6924 (invoke "pytest" "-vv"))))
6927 (let ((whl (car (find-files "dist" "\\.whl$"))))
6928 (invoke "pip" "--no-cache-dir" "--no-input"
6929 "install" "--no-deps" "--prefix" #$output whl)))))))
6931 (list python-pypa-build
6938 (home-page "https://github.com/zaneb/autopage")
6939 (synopsis "Automatic paging for console output")
6941 "Autopage is a Python library to automatically display terminal output
6942 from a program in a @dfn{pager} such as @command{less}.")
6943 (license license:asl2.0)))
6945 (define-public python-autopep8
6947 (name "python-autopep8")
6952 (uri (pypi-uri "autopep8" version))
6955 "1w6vh627vrmgfbvrdcxrc3k4gxcldrb2lpgxv9irkdds851qrzb0"))))
6956 (build-system python-build-system)
6958 (list python-pycodestyle python-toml))
6959 (home-page "https://github.com/hhatto/autopep8")
6960 (synopsis "Format Python code according to the PEP 8 style guide")
6962 "@code{autopep8} automatically formats Python code to conform to
6963 the PEP 8 style guide. It uses the pycodestyle utility to determine
6964 what parts of the code needs to be formatted. @code{autopep8} is
6965 capable of fixing most of the formatting issues that can be reported
6967 (license (license:non-copyleft
6968 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
6970 (define-public python-distlib
6972 (name "python-distlib")
6977 (uri (pypi-uri "distlib" version ".zip"))
6980 "1wdzv7fsjhrkhh1wfkarlhcwa8m00mgcpdsvknmf2qy8f9l13xpd"))))
6981 (build-system python-build-system)
6984 (modify-phases %standard-phases
6985 (add-before 'build 'no-/bin/sh
6987 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
6988 (("/bin/sh") (which "sh")))
6990 (add-before 'check 'prepare-test-env
6992 (setenv "HOME" "/tmp")
6993 ;; NOTE: Any value works, the variable just has to be present.
6994 (setenv "SKIP_ONLINE" "1")
6996 (native-inputs (list unzip))
6997 (home-page "https://bitbucket.org/pypa/distlib")
6998 (synopsis "Distribution utilities")
6999 (description "Distlib is a library which implements low-level functions that
7000 relate to packaging and distribution of Python software. It is intended to be
7001 used as the basis for third-party packaging tools.")
7002 (license license:psfl)))
7004 (define-public python-distutils-extra
7006 (name "python-distutils-extra")
7011 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
7012 version "/+download/python-distutils-extra-"
7016 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
7017 (build-system python-build-system)
7018 (home-page "https://launchpad.net/python-distutils-extra/")
7019 (synopsis "Enhancements to Python's distutils")
7021 "The python-distutils-extra module enables you to easily integrate
7022 gettext support, themed icons, and scrollkeeper-based documentation into
7023 Python's distutils.")
7024 (license license:gpl2)))
7026 (define-public python-olefile
7028 (name "python-olefile")
7033 (uri (string-append "https://github.com/decalage2/olefile/releases/"
7034 "download/v" version "/olefile-" version ".tar.gz"))
7035 (file-name (string-append name "-" version ".tar.gz"))
7038 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
7039 (build-system python-build-system)
7040 (home-page "https://www.decalage.info/python/olefileio")
7041 (synopsis "Read and write Microsoft OLE2 files")
7043 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
7044 Storage or Compound Document, Microsoft Office). It is an improved version of
7045 the OleFileIO module from PIL, the Python Image Library.")
7046 (license license:bsd-3)))
7048 (define-public python-pypdf3
7050 (name "python-pypdf3")
7055 (uri (pypi-uri "PyPDF3" version))
7057 (base32 "018hlq9q2qa96vw4j7ppq352znykldwy98h2w9qcpkvpi93sjqhc"))))
7058 (build-system python-build-system)
7061 (home-page "https://github.com/sfneal/PyPDF3")
7062 (synopsis "Utility to read and write PDFs with Python")
7063 (description "PyPDF3 is a pure-python PDF library capable of splitting,
7064 merging together, cropping, and transforming the pages of PDF files. It can
7065 also add custom data, viewing options, and passwords to PDF files. It can
7066 retrieve text and metadata from PDFs as well as merge entire files together.")
7067 (license license:bsd-3)))
7069 (define-public python-pikepdf
7071 (name "python-pikepdf")
7076 (uri (pypi-uri "pikepdf" version))
7078 (base32 "1phdpi9cm2pbvgcxqvwr8ck327sxhdw4dnxmzhrbf7hzydmgykg2"))))
7079 (build-system python-build-system)
7081 `(#:tests? #false)) ;require python-xmp-toolkit
7085 python-setuptools-scm
7086 python-setuptools-scm-git-archive
7092 (list python-lxml python-pillow))
7093 (home-page "https://github.com/pikepdf/pikepdf")
7094 (synopsis "Read and write PDFs with Python")
7096 "pikepdf is a Python library for reading and writing PDF files.")
7097 (license license:mpl2.0)))
7099 (define-public python-pillow
7101 (name "python-pillow")
7105 (uri (pypi-uri "Pillow" version))
7108 "0gjry0yqryd2678sm47jhdnbghzxn5wk8pgyaqwr4qi7x5ijjvpf"))
7109 (modules '((guix build utils)))
7111 (delete-file-recursively "src/thirdparty")))))
7112 (build-system python-build-system)
7113 (native-inputs (list python-pytest))
7114 (inputs (list freetype
7121 (propagated-inputs (list python-olefile))
7123 `(#:phases (modify-phases %standard-phases
7124 (add-after 'unpack 'patch-ldconfig
7126 (substitute* "setup.py"
7127 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
7129 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
7133 (add-installed-pythonpath inputs outputs)
7134 (invoke "python" "selftest.py" "--installed")
7135 (invoke "python" "-m" "pytest" "-vv")))))))
7136 (home-page "https://python-pillow.org")
7137 (synopsis "Fork of the Python Imaging Library")
7139 "The Python Imaging Library adds image processing capabilities to your
7140 Python interpreter. This library provides extensive file format support, an
7141 efficient internal representation, and fairly powerful image processing
7142 capabilities. The core image library is designed for fast access to data
7143 stored in a few basic pixel formats. It should provide a solid foundation for
7144 a general image processing tool.")
7145 (properties `((cpe-name . "pillow")))
7146 (license (license:x11-style
7147 "http://www.pythonware.com/products/pil/license.htm"
7148 "The PIL Software License"))))
7150 (define-public python-pillow-2.9
7152 (inherit python-pillow)
7157 (uri (pypi-uri "Pillow" version))
7160 "0ada7lf3lmbdsqm3b7ja920p1pllyfhmqndr85ikpj77fmz9s5qg"))))
7162 (substitute-keyword-arguments (package-arguments python-pillow)
7163 ((#:tests? _ #f) #f)))
7164 (properties '((hidden? #t)))))
7166 (define-public python-pillow-simd
7168 (inherit python-pillow)
7169 (name "python-pillow-simd")
7170 (version "9.0.0.post1")
7171 ;; The PyPI tarball does not include test files.
7176 (url "https://github.com/uploadcare/pillow-simd")
7177 (commit (string-append "v" version))))
7178 (file-name (git-file-name name version))
7180 (base32 "1dnvsln451aw3qy2cxg2ndd5mcanf5nrhxw9l7mcam730635hdm9"))))
7182 (modify-inputs (package-inputs python-pillow)
7183 (prepend libraqm libimagequant)))
7184 (home-page "https://github.com/uploadcare/pillow-simd")
7185 (synopsis "Fork of the Python Imaging Library (Pillow)")
7186 (description "This package is a fork of Pillow which adds support for SIMD
7189 (define-public python-imagecodecs
7191 (name "python-imagecodecs")
7192 (version "2021.3.31")
7196 (uri (pypi-uri "imagecodecs" version))
7199 "0q7pslb6wd56vbcq2mdxwsiha32mxjr7mgqqfbq5w42q601p9pi0"))
7200 (modules '((guix build utils)))
7203 ;; Unbundle 3rd party modules.
7204 (delete-file-recursively "3rdparty")
7205 ;; Delete pre-generated Cython files.
7206 (for-each delete-file (find-files "imagecodecs" "_.*\\.c$"))
7208 (build-system python-build-system)
7210 `(#:tests? #f ; Tests are disabled, because dependencies are missing.
7212 (modify-phases %standard-phases
7213 (add-after 'unpack 'create-configuration
7214 (lambda* (#:key inputs #:allow-other-keys)
7215 ;; By default everything is enabled. We can selectively disable
7216 ;; extensions (and thus dependencies) by deleting them from the
7217 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
7218 (call-with-output-file "imagecodecs_distributor_setup.py"
7221 def customize_build(EXTENSIONS, OPTIONS):
7222 del EXTENSIONS['aec']
7223 del EXTENSIONS['avif']
7224 del EXTENSIONS['bitshuffle']
7225 del EXTENSIONS['deflate']
7226 del EXTENSIONS['jpeg2k']
7227 del EXTENSIONS['jpeg12']
7228 del EXTENSIONS['jpegls']
7229 del EXTENSIONS['jpegxl']
7230 del EXTENSIONS['jpegxr']
7231 del EXTENSIONS['lerc']
7232 del EXTENSIONS['ljpeg']
7233 del EXTENSIONS['lzf']
7234 del EXTENSIONS['zfp']
7235 del EXTENSIONS['zopfli']
7236 OPTIONS['cythonize']
7238 ;; XXX: The installed scripts import packages that depend on
7239 ;; this package; disable import check to avoid the cycle.
7240 (delete 'sanity-check))))
7255 ;; For the Python library.
7256 (list python-numpy))
7260 ;; For testing. Incomplete.
7261 ;("python-numcodecs" ,python-numcodecs)
7262 ;("python-zarr" ,python-zarr)
7263 ;("python-pytest" ,python-pytest)
7265 (home-page "https://www.lfd.uci.edu/~gohlke/")
7267 "Image transformation, compression, and decompression codecs")
7269 "Imagecodecs is a Python library that provides block-oriented, in-memory
7270 buffer transformation, compression, and decompression functions for use in the
7271 tifffile, czifile, and other scientific image input/output modules.")
7272 (license license:bsd-3)))
7274 (define-public python-executing
7276 (name "python-executing")
7281 (uri (pypi-uri "executing" version))
7283 (base32 "08q0xh9fd8k41sqpp23q6fb9bf7yj4y2q6sv30pj36vvk8pg8fy2"))))
7284 (build-system python-build-system)
7286 `(#:tests? #f)) ; TODO: tests require python-asttokens
7288 (list python-setuptools-scm python-toml))
7289 (home-page "https://github.com/alexmojaki/executing")
7290 (synopsis "Get information about what a Python frame is currently doing")
7291 (description "This package lets you get information about what a frame is
7292 currently doing, particularly the AST node being executed.")
7293 (license license:expat)))
7295 (define-public python-roifile
7297 (name "python-roifile")
7298 (version "2020.11.28")
7302 (uri (pypi-uri "roifile" version))
7305 "04argnc7qccybkrj9ww18bf81ghsghhh93hnqy3p111rcdlyn66p"))))
7306 (build-system python-build-system)
7307 (arguments `(#:tests? #f)) ; there are none
7309 (list python-numpy))
7310 (home-page "https://www.lfd.uci.edu/~gohlke/")
7311 (synopsis "Read and write ImageJ ROI format")
7312 (description "Roifile is a Python library to read, write, create, and plot
7313 ImageJ ROIs, an undocumented and ImageJ application specific format to store
7314 regions of interest, geometric shapes, paths, text, etc for image overlays.")
7315 (license license:bsd-3)))
7317 (define-public python-tifffile
7319 (name "python-tifffile")
7320 (version "2021.4.8")
7324 (uri (pypi-uri "tifffile" version))
7327 "16r0hw7shka1bqf28bv198lj2jhf2r9gy3s5zv4nf5cfsfm8pajm"))))
7328 (build-system python-build-system)
7329 ;; Tests require lfdfiles, which depends on tifffile
7330 (arguments `(#:tests? #f))
7332 (list python-numpy python-imagecodecs))
7333 (home-page "https://www.lfd.uci.edu/~gohlke/")
7334 (synopsis "Read and write TIFF(r) files")
7335 (description "This package lets you read image and metadata from many
7336 bio-scientific formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,
7337 NIH, ImageJ, MicroManager, MD GEL, and FluoView files. It also lets you write
7338 numpy arrays to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
7339 (license license:bsd-3)))
7341 (define-public python-lfdfiles
7343 (name "python-lfdfiles")
7344 (version "2021.2.22")
7348 (uri (pypi-uri "lfdfiles" version))
7351 "12fxm4v805dgjrih7x6jnl1wd7y7jw1rkhjs3d4am8s6qk1cbar2"))
7352 (modules '((guix build utils)))
7355 ;; Delete pre-generated Cython files.
7356 (for-each delete-file (find-files "lfdfiles" "_.*\\.c$"))
7358 (build-system python-build-system)
7360 `(#:tests? #f)) ; No tests exist, despite a test dependency on pytest.
7362 (list python-click python-numpy python-tifffile))
7363 (native-inputs (list python-cython))
7364 (home-page "https://www.lfd.uci.edu/~gohlke/")
7365 (synopsis "Work with LFD data files")
7367 "Lfdfiles is a Python library and console script for reading, writing,
7368 converting, and viewing many of the proprietary file formats used to store
7369 experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
7370 (license license:bsd-3)))
7372 (define-public python-imageio
7374 (name "python-imageio")
7379 (uri (pypi-uri "imageio" version))
7382 "1ksjl523fm0fikrd85llxfba35rc1qsgwadgr6mbn9kis79xcpzv"))))
7383 (build-system python-build-system)
7385 `(#:tests? #f ; many tests require online data
7387 (modify-phases %standard-phases
7389 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
7392 ;; Make installed package available for running the tests.
7393 (add-installed-pythonpath inputs outputs)
7394 (invoke "pytest" "-vv"))
7397 (list python-numpy python-pillow python-psutil))
7399 (list python-pytest))
7400 (home-page "https://imageio.github.io/")
7401 (synopsis "Library for reading and writing a wide range of image data")
7403 "Imageio is a Python library that provides an easy interface to read and
7404 write a wide range of image data, including animated images, video, volumetric
7405 data, and scientific formats.")
7406 (license license:bsd-2)))
7408 (define-public python-pyvips
7410 (name "python-pyvips")
7415 (uri (pypi-uri "pyvips" version))
7417 (base32 "0lq71iiic4pc8qhxr60gi141w25pjnn4vsh05d5l0fjkgjsv137b"))))
7418 (build-system python-build-system)
7421 #~(modify-phases %standard-phases
7422 ;; Maybe switch to API mode (i.e., build the C extension)?
7423 ;; It is advertised as faster to start up and run.
7424 ;; However, even with ‘pkg-config’ and ‘python-pkgconfig’ in
7425 ;; ‘native-inputs’, the API mode build fails with:
7427 ;; Falling back to ABI mode. Details: unable to find pkg-config package "vips"
7429 ;; The build doesn't actually fail without the below
7430 ;; substitution, it's just slower because ‘setup.py’ tries
7431 ;; (unsuccessfully) to download the Python ‘pkgconfig’ module.
7432 (add-after 'unpack 'fix-build
7434 (substitute* "setup.py"
7435 (("^( +setup_)API\\(\\)\n" _ prefix)
7436 (string-append prefix "ABI()\n")))))
7437 (add-after 'unpack 'fix-paths
7439 (substitute* "pyvips/__init__.py"
7440 (("^( +_vips_libname) = '(libvips.so.42)'"
7442 (format #f "~a = '~a/lib/~a'"
7443 var #$(this-package-input "vips") libname))
7444 (("^( +_gobject_libname) = '(libgobject-2.0.so.0)'"
7446 (format #f "~a = '~a/lib/~a'"
7447 var #$(this-package-input "glib") libname)))))
7449 (lambda* (#:key tests? #:allow-other-keys)
7451 (invoke "python" "setup.py" "test")))))))
7455 python-pytest-flake8
7456 python-pytest-runner))
7461 (home-page "https://github.com/libvips/pyvips")
7462 (synopsis "Python bindings for VIPS")
7463 (description "The @code{pyvips} package provides Python bindings for VIPS,
7464 a multithreaded image-processing system with low memory needs.")
7465 (license license:expat)))
7467 (define-public python-pycparser
7469 (name "python-pycparser")
7474 (uri (pypi-uri "pycparser" version))
7477 "01kjlyn5w2nn2saj8w1rhq7v26328pd91xwgqn32z1zp2bngsi76"))))
7478 (outputs '("out" "doc"))
7479 (build-system python-build-system)
7482 (modify-phases %standard-phases
7485 (invoke "python" "-m" "unittest" "discover")))
7486 (add-after 'install 'install-doc
7487 (lambda* (#:key outputs #:allow-other-keys)
7488 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
7489 (doc (string-append data "/doc/" ,name "-" ,version))
7490 (examples (string-append doc "/examples")))
7492 (for-each (lambda (file)
7493 (copy-file (string-append "." file)
7494 (string-append doc file)))
7495 '("/README.rst" "/CHANGES" "/LICENSE"))
7496 (copy-recursively "examples" examples)))))))
7497 (home-page "https://github.com/eliben/pycparser")
7498 (synopsis "C parser in Python")
7500 "Pycparser is a complete parser of the C language, written in pure Python
7501 using the PLY parsing library. It parses C code into an AST and can serve as
7502 a front-end for C compilers or analysis tools.")
7503 (license license:bsd-3)))
7505 (define-public python2-pycparser
7506 (package-with-python2 python-pycparser))
7508 (define-public python-xlsxwriter
7510 (name "python-xlsxwriter")
7514 ;; There are no tests in the PyPI tarball.
7517 (url "https://github.com/jmcnamara/XlsxWriter")
7518 (commit (string-append "RELEASE_" version))))
7519 (file-name (git-file-name name version))
7521 (base32 "1lr7mmik6r4zns069i4zfx1cnwhz6snmlh2zsiry0cwx8cv33wpm"))))
7522 (build-system python-build-system)
7523 (home-page "https://github.com/jmcnamara/XlsxWriter")
7524 (synopsis "Python module for creating Excel XLSX files")
7526 "XlsxWriter is a Python module that can be used to write text, numbers,
7527 formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
7528 (license license:bsd-2)))
7530 (define-public python-pywavelets
7532 (name "python-pywavelets")
7534 (home-page "https://github.com/PyWavelets/pywt")
7537 (uri (pypi-uri "PyWavelets" version))
7540 "13csbr6ls9q9ww53z2xwwsj0hpsz88rj2iwp623h0kmv8yq6kgbc"))
7543 (use-modules ((guix build utils)))
7544 (for-each delete-file
7546 "pywt/_extensions/_cwt.c"
7547 "pywt/_extensions/_dwt.c"
7548 "pywt/_extensions/_pywt.c"
7549 "pywt/_extensions/_pywt.h"
7550 "pywt/_extensions/_swt.c"))))))
7551 (build-system python-build-system)
7553 '(#:modules ((ice-9 ftw)
7557 (guix build python-build-system))
7559 (modify-phases %standard-phases
7562 (let ((cwd (getcwd))
7563 (libdir (find (cut string-prefix? "lib." <>)
7564 (scandir "build"))))
7565 (with-directory-excursion (string-append cwd "/build/" libdir)
7566 (invoke "pytest" "-vv"))))))))
7569 python-matplotlib ;for tests
7572 (list python-numpy))
7573 (synopsis "Wavelet transforms in Python")
7575 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
7576 mathematical basis functions that are localized in both time and frequency.
7577 Wavelet transforms are time-frequency transforms employing wavelets. They are
7578 similar to Fourier transforms, the difference being that Fourier transforms are
7579 localized only in frequency instead of in time and frequency.")
7580 (license license:expat)))
7582 (define-public python-pywal
7584 (name "python-pywal")
7590 (url "https://github.com/dylanaraps/pywal")
7592 (file-name (git-file-name name version))
7594 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
7595 (build-system python-build-system)
7598 (modify-phases %standard-phases
7599 (add-before 'check 'fix-home-directory
7601 ;; Tests fail with "Permission denied: '/homeless-shelter'".
7602 (setenv "HOME" "/tmp")
7606 (home-page "https://github.com/dylanaraps/pywal")
7607 (synopsis "Color palette generator and applicator")
7609 "Pywal is a tool that generates a color palette from the dominant colors
7610 in an image. It then applies the colors system-wide and on-the-fly in all of
7611 your favourite programs.")
7612 (license license:expat)))
7614 (define-public python-click-didyoumean
7616 (name "python-click-didyoumean")
7621 (uri (pypi-uri "click-didyoumean" version))
7623 (base32 "0dc0xrmqbw0idpx843ahzzvivmvx3fcfsm3k54lnssyra7cg117i"))))
7624 (build-system python-build-system)
7626 `(#:tests? #f)) ; no tests in PyPI and no setup.py in github
7628 (list python-click))
7629 (home-page "https://github.com/timofurrer/click-didyoumean")
7630 (synopsis "Git-like did-you-mean feature in Click")
7632 "This plugin enables git-like did-you-mean feature in Click.")
7633 (license license:expat)))
7635 (define-public python-pywinrm
7637 (name "python-pywinrm")
7642 (uri (pypi-uri "pywinrm" version))
7645 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
7646 (build-system python-build-system)
7648 (list python-six python-requests_ntlm python-xmltodict
7651 (list python-mock python-pytest))
7652 (home-page "https://github.com/diyan/pywinrm/")
7654 "Python library for Windows Remote Management (WinRM)")
7656 "pywinrm is a Python client for the Windows Remote Management (WinRM)
7657 service. It allows you to invoke commands on target Windows machines from
7658 any machine that can run Python.")
7659 (license license:expat)))
7661 (define-public python-xcffib
7663 (name "python-xcffib")
7668 (uri (pypi-uri "xcffib" version))
7671 "0nkglsm9nbhv238iagmmsjcz6lf1yfdvp5kmspphdj385vz9r50j"))))
7672 (build-system python-build-system)
7676 (list python-cffi ; used at run time
7679 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
7682 (modify-phases %standard-phases
7683 (add-after 'unpack 'fix-libxcb-path
7684 (lambda* (#:key inputs #:allow-other-keys)
7685 (let ((libxcb (assoc-ref inputs "libxcb")))
7686 (substitute* '("xcffib/__init__.py")
7687 (("soname = ctypes.util.find_library.*xcb.*")
7688 (string-append "soname = \"" libxcb "/lib/libxcb.so\"\n")))
7690 (add-after 'install 'install-doc
7691 (lambda* (#:key outputs #:allow-other-keys)
7692 (let ((doc (string-append (assoc-ref outputs "out") "/share"
7693 "/doc/" ,name "-" ,version)))
7695 (copy-file "README.md"
7696 (string-append doc "/README.md"))
7698 (home-page "https://github.com/tych0/xcffib")
7699 (synopsis "XCB Python bindings")
7701 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
7702 support for Python 3 and PyPy. It is based on cffi.")
7703 (license license:expat)))
7705 (define-public python-cairocffi
7707 (name "python-cairocffi")
7711 ;; The PyPI archive does not include the documentation, so use Git.
7714 (url "https://github.com/Kozea/cairocffi")
7715 (commit (string-append "v" version))))
7716 (file-name (git-file-name name version))
7719 "0lylyxyyd8csjhn5kxwzrcr6ick6pvvm1wclpmb5ni28jznxn7lb"))))
7720 (build-system python-build-system)
7721 (outputs '("out" "doc"))
7723 (list glib gtk+ gdk-pixbuf cairo))
7728 python-pytest-runner
7730 python-sphinx-rtd-theme))
7732 (list python-xcffib)) ; used at run time
7735 (modify-phases %standard-phases
7736 (add-after 'unpack 'patch-paths
7737 (lambda* (#:key inputs #:allow-other-keys)
7738 (substitute* "cairocffi/__init__.py"
7739 ;; Hack the dynamic library loading mechanism.
7740 (("find_library\\(library_name\\)")
7742 (("filenames = \\(library_filename,\\) \\+ filenames")
7745 (search-input-file inputs "/lib/libcairo.so.2")))
7746 (substitute* "cairocffi/pixbuf.py"
7747 (("libgdk_pixbuf-2.0.so.0")
7748 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
7749 (("libgobject-2.0.so.0")
7750 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
7751 (("libglib-2.0.so.0")
7752 (search-input-file inputs "/lib/libglib-2.0.so.0"))
7754 (search-input-file inputs "/lib/libgdk-3.so.0")))))
7755 (add-after 'unpack 'disable-linters
7756 ;; Their check fails; none of our business.
7758 (substitute* "setup.cfg"
7759 ((".*pytest-flake8.*") "")
7760 ((".*pytest-isort.*") "")
7764 (add-after 'install 'install-doc
7765 (lambda* (#:key inputs outputs #:allow-other-keys)
7766 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
7767 (doc (string-append data "/doc/" ,name "-" ,version))
7768 (html (string-append doc "/html")))
7769 (setenv "LD_LIBRARY_PATH"
7770 (string-append (assoc-ref inputs "cairo") "/lib" ":"
7771 (assoc-ref inputs "gdk-pixbuf") "/lib"))
7772 (setenv "LANG" "en_US.UTF-8")
7774 (for-each (lambda (file)
7775 (copy-file (string-append "." file)
7776 (string-append doc file)))
7777 '("/README.rst" "/NEWS.rst"))
7778 (system* "python" "setup.py" "build_sphinx")
7779 (copy-recursively "docs/_build/html" html)
7781 (home-page "https://github.com/Kozea/cairocffi")
7782 (synopsis "Python bindings and object-oriented API for Cairo")
7784 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
7785 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
7786 graphics library with support for multiple backends including image buffers,
7787 PNG, PostScript, PDF, and SVG file output.")
7788 (license license:bsd-3)))
7790 (define-public python-decorator
7792 (name "python-decorator")
7797 (uri (pypi-uri "decorator" version))
7799 (base32 "1mcy64hllgm938v8k1x2a4g0q9swsnrfnsvhz59kr28a6ajgpv3j"))))
7800 (build-system python-build-system)
7801 (home-page "https://pypi.org/project/decorator/")
7802 (synopsis "Python module to simplify usage of decorators")
7804 "The aim of the decorator module is to simplify the usage of decorators
7805 for the average programmer, and to popularize decorators usage giving examples
7806 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
7807 etc. The core of this module is a decorator factory.")
7808 (license license:expat)))
7811 (define-public python-drmaa
7813 (name "python-drmaa")
7818 (uri (pypi-uri "drmaa" version))
7820 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
7821 (build-system python-build-system)
7822 ;; The test suite requires libdrmaa which is provided by the cluster
7823 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
7824 ;; should be set to the path of the libdrmaa library.
7827 #:phases (modify-phases %standard-phases
7828 ;; Loading the library fails because DRMAA_LIBRARY_PATH
7829 ;; is not configured.
7830 (delete 'sanity-check))))
7831 (home-page "https://pypi.org/project/drmaa/")
7832 (synopsis "Python bindings for the DRMAA library")
7834 "A Python package for Distributed Resource Management (DRM) job
7835 submission and control. This package is an implementation of the DRMAA 1.0
7836 Python language binding specification.")
7837 (license license:bsd-3)))
7839 (define-public python-grako
7841 (name "python-grako")
7847 (pypi-uri "grako" version ".zip"))
7850 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
7851 (build-system python-build-system)
7852 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
7854 (list unzip python-pytest python-pytest-runner))
7855 (home-page "https://bitbucket.org/neogeny/grako")
7856 (synopsis "EBNF parser generator")
7858 "Grako takes a grammar in a variation of EBNF as input, and outputs a
7859 memoizing PEG/Packrat parser in Python.")
7860 (license license:bsd-3)))
7862 (define-public python-grandalf
7864 (name "python-grandalf")
7868 ;; There's no source tarball on PyPI.
7871 (url "https://github.com/bdcht/grandalf")
7872 (commit (string-append "v" version))))
7873 (file-name (git-file-name name version))
7876 "03p8w8ljpb87qbyldm3s6b7qi30hfcn43h33iwlgqcf31fjsyr4g"))))
7877 (build-system python-build-system)
7880 (modify-phases %standard-phases
7883 (invoke "python" "setup.py" "pytest"))))))
7885 (list python-pytest python-pytest-runner))
7887 (list python-numpy python-ply))
7888 (home-page "https://github.com/bdcht/grandalf")
7889 (synopsis "Graph and drawing algorithms framework")
7891 "Grandalf is a Python package made for experimentations with graphs
7892 drawing algorithms. It is written in pure Python, and currently implements
7893 two layouts: the Sugiyama hierarchical layout and the force-driven or energy
7894 minimization approach. While not as fast or featured as graphviz or other
7895 libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
7896 than thousands of nodes, while keeping the source code simple enough to tweak
7897 and hack any part of it for experimental purpose. With a total of about 1500
7898 lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
7899 in less than 600 lines. The energy minimization approach is comprised of only
7902 Grandalf does only 2 not-so-simple things:
7904 @item computing the nodes (x,y) coordinates (based on provided nodes
7905 dimensions, and a chosen layout)
7906 @item routing the edges with lines or nurbs
7909 It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
7910 will help you find where to draw things like nodes and edges, but it’s up to
7911 you to actually draw things with your favorite toolkit.")
7912 ;; The user can choose either license.
7913 (license (list license:gpl2 license:epl1.0))))
7915 (define-public python-gridmap
7917 (name "python-gridmap")
7923 (url "https://github.com/pygridtools/gridmap")
7924 (commit (string-append "v" version))))
7925 (file-name (git-file-name name version))
7927 (base32 "0v0sgpg6pz8h61f9aqjf5xk0ipr512bbz8dxzjjylksj135qr19l"))))
7928 (build-system python-build-system)
7930 '(#:tests? #f ;FIXME: Requires python-cherrypy.
7931 #:phases (modify-phases %standard-phases
7932 ;; Importing the web server module requires cherrypy, too.
7933 (delete 'sanity-check))))
7935 (list python-psutil python-drmaa python-pyzmq))
7936 (home-page "https://github.com/pygridtools/gridmap")
7937 (synopsis "Create jobs on a cluster directly from Python")
7939 "Gridmap is a Python package to allow you to easily create jobs on the
7940 cluster directly from Python. You can directly map Python functions onto the
7941 cluster without needing to write any wrapper code yourself.")
7942 (license license:gpl3+)))
7944 (define-public python-honcho
7946 (name "python-honcho")
7952 (url "https://github.com/nickstenning/honcho")
7953 (commit (string-append "v" version))))
7954 (file-name (git-file-name name version))
7956 (base32 "1y0r8dw4pqcq7r4n58ixjdg1iy60lp0gxsd7d2jmhals16ij71rj"))))
7957 (build-system python-build-system)
7959 (list python-pytest python-mock python-tox which)) ;for tests
7961 (list python-jinja2))
7964 (modify-phases %standard-phases
7966 (add-after 'install 'check
7967 (lambda* (#:key outputs inputs #:allow-other-keys)
7968 ;; fix honcho path in testsuite
7969 (substitute* "tests/conftest.py"
7970 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
7971 "/bin/honcho" "'")))
7972 ;; It's easier to run tests after install.
7973 ;; Make installed package available for running the tests
7974 (add-installed-pythonpath inputs outputs)
7975 ;; Skip failing test_export
7976 (invoke "py.test" "-v" "-k" "not test_export"))))))
7977 (home-page "https://github.com/nickstenning/honcho")
7978 (synopsis "Manage Procfile-based applications")
7980 "A Procfile is a file which describes how to run an application
7981 consisting of several processes. honcho starts all listed processes.
7982 The output of all running processes is collected by honcho and
7984 (license license:expat)))
7986 (define-public python-pebble
7988 (name "python-pebble")
7993 (uri (pypi-uri "Pebble" version))
7995 (base32 "16siqc3brbk7dp4d9sg48bjl6a8wyy24aib3il1hf4y2624draxh"))))
7996 (build-system python-build-system)
7998 (list python-pytest))
8001 (modify-phases %standard-phases
8003 (lambda _ (invoke "python" "-m" "pytest" "-sv"))))))
8004 (home-page "https://github.com/noxdafox/pebble")
8005 (synopsis "Threading and multiprocessing for Python")
8007 "Pebble aims to help manage threads and processes in an easier way. It
8008 wraps Python's standard library threading and multiprocessing objects.")
8009 (license license:lgpl3+)))
8011 (define-public python-pexpect
8013 (name "python-pexpect")
8018 (uri (pypi-uri "pexpect" version))
8020 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
8021 (build-system python-build-system)
8024 (modify-phases %standard-phases
8025 (add-before 'check 'prepare-tests
8027 (substitute* (find-files "tests")
8028 (("/bin/ls") (which "ls"))
8029 (("/bin/echo") (which "echo"))
8030 (("/bin/which") (which "which"))
8031 ;; Many tests try to use the /bin directory which
8032 ;; is not present in the build environment.
8033 ;; Use one that's non-empty and unlikely to change.
8035 ;; Disable failing test. See upstream bug report
8036 ;; https://github.com/pexpect/pexpect/issues/568
8037 (("def test_bash") "def _test_bash"))
8038 ;; XXX: Socket connection test gets "Connection reset by peer".
8039 ;; Why does it not work? Delete for now.
8040 (delete-file "tests/test_socket.py")
8042 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
8044 `(("python-nose" ,python-nose)
8045 ("python-pytest" ,python-pytest)
8048 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
8050 (list python-ptyprocess))
8051 (home-page "http://pexpect.readthedocs.org/")
8052 (synopsis "Controlling interactive console applications")
8054 "Pexpect is a pure Python module for spawning child applications;
8055 controlling them; and responding to expected patterns in their output.
8056 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
8057 child application and control it as if a human were typing commands.")
8058 (license license:isc)))
8060 (define-public python-sexpdata
8062 (name "python-sexpdata")
8067 (uri (pypi-uri "sexpdata" version))
8070 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
8071 (build-system python-build-system)
8072 (home-page "https://github.com/jd-boyd/sexpdata")
8073 (synopsis "S-expression parser for Python")
8075 "Sexpdata is an S-expression parser/serializer. It has load and dump
8076 functions like pickle, json or PyYAML module.")
8077 (license license:bsd-3)))
8079 (define-public python-pathlib2
8081 (name "python-pathlib2")
8086 (uri (pypi-uri "pathlib2" version))
8089 "0psyg60vk8wca473djrh0v9gb853z8wcawi8im5dyg00amawp2vx"))))
8090 (build-system python-build-system)
8092 (list python-scandir python-six))
8093 (home-page "https://pypi.org/project/pathlib2/")
8094 (synopsis "Object-oriented file system paths")
8095 (description "The goal of pathlib2 is to provide a backport of the
8096 standard @code{pathlib} module which tracks the standard library module, so
8097 all the newest features of the standard @code{pathlib} can be used also on
8098 older Python versions.")
8099 (license license:expat)))
8101 (define-public python-importlib-resources
8103 (name "python-importlib-resources")
8107 (uri (pypi-uri "importlib_resources" version))
8110 "1hq626mx5jl9zfl0wdrjkxsnh8qd98fqv322n68b9251xjk4bxqr"))))
8111 (build-system python-build-system)
8112 (native-inputs (list python-setuptools-scm python-toml))
8113 (home-page "http://importlib-resources.readthedocs.io/")
8114 (synopsis "Read resources from Python packages")
8116 "@code{importlib_resources} is a backport of Python 3's standard library
8117 @code{importlib.resources} module for Python 2.7, and Python 3.")
8118 (license license:asl2.0)))
8120 (define-public python-importlib-metadata
8122 (name "python-importlib-metadata")
8127 (uri (pypi-uri "importlib_metadata" version))
8130 "0f951zynlh39yicqnhrs3p1qa5p3g6ajjfcggf12y51ppxz5jk7a"))))
8131 (build-system python-build-system)
8135 #~(modify-phases %standard-phases
8136 ;; XXX: PEP 517 manual build/install procedures copied from
8140 ;; ZIP does not support timestamps before 1980.
8141 (setenv "SOURCE_DATE_EPOCH" "315532800")
8142 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
8144 (lambda* (#:key outputs #:allow-other-keys)
8145 (let ((whl (car (find-files "dist" "\\.whl$"))))
8146 (invoke "pip" "--no-cache-dir" "--no-input"
8147 "install" "--no-deps" "--prefix" #$output whl))))
8149 (lambda* (#:key tests? #:allow-other-keys)
8151 (invoke "pytest" "-vv" "tests")))))))
8152 (propagated-inputs (list python-zipp))
8154 (list python-pypa-build
8157 python-setuptools-scm))
8158 (home-page "https://importlib-metadata.readthedocs.io/")
8159 (synopsis "Read metadata from Python packages")
8161 "@code{importlib_metadata} is a library which provides an API for
8162 accessing an installed Python package's metadata, such as its entry points or
8163 its top-level name. This functionality intends to replace most uses of
8164 @code{pkg_resources} entry point API and metadata API. Along with
8165 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
8166 need to use the older and less efficient @code{pkg_resources} package.")
8167 (license license:asl2.0)))
8169 (define-public python-importmagic
8171 (name "python-importmagic")
8176 (uri (pypi-uri "importmagic" version))
8179 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
8180 (build-system python-build-system)
8183 #~(modify-phases %standard-phases
8185 (lambda* (#:key tests? #:allow-other-keys)
8187 (invoke "pytest" "-v")))))))
8189 (list python-pytest))
8190 (home-page "https://github.com/alecthomas/importmagic")
8191 (synopsis "Library for adding, removing and managing Python imports")
8193 "Importmagic is a Python library for automatically managing imports by
8194 finding unresolved symbols in Python code and their corresponding imports.")
8195 (license license:bsd-3)))
8197 (define-public python-inotify-simple
8199 (name "python-inotify-simple")
8205 (url "https://github.com/chrisjbillington/inotify_simple")
8207 (file-name (git-file-name name version))
8209 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
8210 (build-system python-build-system)
8212 "https://github.com/chrisjbillington/inotify_simple")
8213 (synopsis "Simple wrapper around inotify library")
8215 "@code{inotify-simple} is a simple wrapper around inotify library.")
8216 (license license:bsd-3)))
8218 (define-public python-jaraco-classes
8220 (name "python-jaraco-classes")
8225 (uri (pypi-uri "jaraco.classes" version))
8227 (base32 "0d6g7qvfv1jlzbzh6asprqdblqd59grvlvr3nwbdqdqrmwlbfm7d"))))
8228 (build-system python-build-system)
8232 #~(modify-phases %standard-phases
8234 (lambda* (#:key tests? #:allow-other-keys)
8236 ;; Do not test the myproject.toml build as it tries to pull
8237 ;; dependencies from the Internet.
8238 (invoke "pytest" "-vv" "-k" "not project")))))))
8242 python-pytest-checkdocs
8244 python-pytest-enabler-bootstrap ;OK since not propagated
8245 python-pytest-flake8
8247 python-setuptools-scm
8249 (propagated-inputs (list python-more-itertools))
8250 (home-page "https://github.com/jaraco/jaraco.classes")
8251 (synopsis "Utility functions for Python class constructs")
8252 (description "This Python library contains utility functions for Python
8254 (license license:expat)))
8256 ;;; Variant used to break a cycle with python-pytest-enabler.
8257 (define-public python-jaraco-context-bootstrap
8260 (name "python-jaraco-context-bootstrap")
8265 (uri (pypi-uri "jaraco.context" version))
8267 (base32 "0hbjm1rpxf4pzmbdp9rh3ali4zqnlcr8m97bhh1nizxvzcpxim7h"))))
8268 (build-system python-build-system)
8269 (arguments (list #:tests? #f))
8270 (native-inputs (list python-setuptools-scm))
8271 (home-page "https://github.com/jaraco/jaraco.context")
8272 (synopsis "Context managers Python library")
8273 (description "This Python library provides context managers-related
8275 (license license:expat))))
8277 (define-public python-jaraco-context
8278 (package/inherit python-jaraco-context-bootstrap
8279 (name "python-jaraco-context")
8281 (substitute-keyword-arguments
8282 (package-arguments python-jaraco-context-bootstrap)
8284 (not (%current-target-system)))
8285 ((#:phases phases #~%standard-phases)
8286 #~(modify-phases #$phases
8288 (lambda* (#:key tests? #:allow-other-keys)
8290 ;; Do not test the myproject.toml build as it tries to pull
8291 ;; dependencies from the Internet.
8292 (invoke "pytest" "-vv" "-k" "not project"))))))))
8295 (package-native-inputs python-jaraco-context-bootstrap)
8296 (append python-pytest
8298 python-pytest-checkdocs
8300 python-pytest-enabler-bootstrap ;OK since not propagated
8301 python-pytest-flake8
8302 python-pytest-mypy)))
8303 (properties (alist-delete 'hidden? (package-properties
8304 python-jaraco-context-bootstrap)))))
8306 ;;; Variant used to break a cycle with python-pytest-enabler.
8307 (define-public python-jaraco-functools-bootstrap
8310 (name "python-jaraco-functools-bootstrap")
8315 (uri (pypi-uri "jaraco.functools" version))
8317 (base32 "186xqzs3bqhjwajnprxy3sc3h0w5vdld8spc1dxjnn9720yykq1i"))))
8318 (build-system python-build-system)
8319 (arguments (list #:tests? #f))
8320 (native-inputs (list python-setuptools-scm))
8321 (propagated-inputs (list python-more-itertools))
8322 (home-page "https://github.com/jaraco/jaraco.functools")
8323 (synopsis "Python library extending Python's @code{functools}")
8324 (description "This library extends the standard @code{functools} Python
8325 module with a few extra procedures.")
8326 (license license:expat))))
8328 (define-public python-jaraco-functools
8329 (package/inherit python-jaraco-functools-bootstrap
8330 (name "python-jaraco-functools")
8332 (substitute-keyword-arguments
8333 (package-arguments python-jaraco-functools-bootstrap)
8335 (not (%current-target-system)))
8336 ((#:phases phases #~%standard-phases)
8337 #~(modify-phases #$phases
8339 (lambda* (#:key tests? #:allow-other-keys)
8341 ;; Do not test the myproject.toml build as it tries to pull
8342 ;; dependencies from the Internet. Do not run a test that
8343 ;; tries to emulate a broken proprietary CI set-up, fails
8344 ;; to do so correctly, and then throws an error about it.
8345 (invoke "pytest" "-vv" "-k"
8346 "not project and not test_function_throttled"))))))))
8349 (package-native-inputs python-jaraco-functools-bootstrap)
8350 (append python-jaraco-classes
8353 python-pytest-checkdocs
8355 python-pytest-enabler-bootstrap ;OK since not propagated
8356 python-pytest-flake8
8357 python-pytest-mypy)))
8358 (properties (alist-delete 'hidden? (package-properties
8359 python-jaraco-functools-bootstrap)))))
8361 (define-public python-jaraco-packaging
8363 (name "python-jaraco-packaging")
8368 (uri (pypi-uri "jaraco.packaging" version))
8371 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
8372 (build-system python-build-system)
8375 python-pytest-checkdocs
8376 python-pytest-flake8
8379 python-setuptools-scm
8382 (home-page "https://github.com/jaraco/jaraco.packaging")
8383 (synopsis "Tools to supplement packaging Python releases")
8385 "This package provides various tools to supplement packaging Python
8387 (license license:expat)))
8389 (define-public python-simplegeneric
8391 (name "python-simplegeneric")
8396 (uri (pypi-uri "simplegeneric" version ".zip"))
8398 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
8399 (build-system python-build-system)
8402 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
8403 (synopsis "Python module for simple generic functions")
8405 "The simplegeneric module lets you define simple single-dispatch generic
8406 functions, akin to Python’s built-in generic functions like @code{len()},
8407 @code{iter()} and so on. However, instead of using specially-named methods,
8408 these generic functions use simple lookup tables, akin to those used by
8409 e.g. @code{pickle.dump()} and other generic functions found in the Python
8411 (license license:zpl2.1)))
8413 (define-public python-ipython-genutils
8414 ;; TODO: This package is retired, check if can be removed, see description.
8416 (name "python-ipython-genutils")
8421 (uri (pypi-uri "ipython_genutils" version))
8423 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
8424 (build-system python-build-system)
8425 (arguments `(#:tests? #f)) ; no tests
8426 (home-page "https://ipython.org")
8427 (synopsis "Vestigial utilities from IPython")
8429 "This package provides retired utilities from IPython. No packages
8430 outside IPython/Jupyter should depend on it.
8432 This package shouldn't exist. It contains some common utilities shared by
8433 Jupyter and IPython projects during The Big Split. As soon as possible, those
8434 packages will remove their dependency on this, and this package will go
8436 (license license:bsd-3)))
8438 ;;; Variant used to break a cycle with python-ipykernel.
8439 (define-public python-ipyparallel-bootstrap
8442 (name "python-ipyparallel-bootstrap")
8447 (uri (pypi-uri "ipyparallel" version))
8450 "0wiwfd7870zbmczzn96jqxxjf2zcbcaxnsl1ddn8hspwa8y4frzj"))))
8451 (build-system python-build-system)
8455 #:phases #~(modify-phases %standard-phases
8456 ;; The python-ipykernel is normally propagated but is
8457 ;; removed from this package to break the cycle.
8458 (delete 'sanity-check))))
8460 (list python-dateutil
8464 ;; python-ipykernel is omitted here to break a cycle.
8465 python-jupyter-client-bootstrap
8471 (home-page "https://ipython.org/")
8472 (synopsis "Interactive Parallel Computing with IPython")
8474 "@code{ipyparallel} is a Python package and collection of CLI scripts for
8475 controlling clusters for Jupyter. @code{ipyparallel} contains the following
8478 @item ipcluster - start/stop a cluster
8479 @item ipcontroller - start a scheduler
8480 @item ipengine - start an engine
8482 (license license:bsd-3))))
8484 (define-public python-ipyparallel
8486 (inherit python-ipyparallel-bootstrap)
8487 (name "python-ipyparallel")
8491 #~(modify-phases %standard-phases
8494 (invoke "pytest" "-vv"))))))
8496 (list python-ipython
8498 python-pytest-asyncio
8500 python-pytest-tornado
8503 (modify-inputs (package-propagated-inputs python-ipyparallel-bootstrap)
8504 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
8505 (append python-ipykernel)))
8506 (properties (alist-delete 'hidden? (package-properties
8507 python-ipyparallel-bootstrap)))))
8509 (define-public python-ipython-cluster-helper
8511 (name "python-ipython-cluster-helper")
8516 (uri (pypi-uri "ipython-cluster-helper" version))
8519 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
8520 (modules '((guix build utils)))
8522 '(begin (substitute* "requirements.txt"
8523 (("ipython.*") "ipython\n"))
8525 (build-system python-build-system)
8527 `(#:tests? #f ; Test suite can't find IPython.
8529 (modify-phases %standard-phases
8531 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
8534 (setenv "HOME" (getcwd))
8535 (add-installed-pythonpath inputs outputs)
8536 (invoke "python" "example/example.py" "--local"))
8539 (list python-ipyparallel
8545 (home-page "https://github.com/roryk/ipython-cluster-helper")
8547 "Simplify IPython cluster start up and use for multiple schedulers")
8549 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
8550 profile, launches a cluster and returns a view. On program exit it shuts the
8551 cluster down and deletes the throwaway profile.")
8552 (license license:expat)))
8554 (define-public python-ipython-sql
8556 (name "python-ipython-sql")
8561 (uri (pypi-uri "ipython-sql" version))
8563 (base32 "1r6rz8jgrqzhkf2flwjw75d96g8l7kykmx5wli3q1988w96391ip"))))
8564 (build-system python-build-system)
8566 (list #:tests? #f ;must run under IPython
8568 #~(modify-phases %standard-phases
8569 (add-after 'unpack 'permit-newer-prettytable
8570 ;; See https://github.com/catherinedevlin/ipython-sql/issues/202
8572 (substitute* "setup.py"
8574 "prettytable")))))))
8576 (list python-ipython
8577 python-ipython-genutils
8582 (home-page "https://github.com/catherinedevlin/ipython-sql")
8583 (synopsis "RDBMS access via IPython")
8584 (description "This library connects to a database, using SQLAlchemy URL
8585 connect strings, then issue SQL commands within IPython or IPython Notebook.")
8586 (license license:expat)))
8588 (define-public python-traitlets
8590 (name "python-traitlets")
8595 (uri (pypi-uri "traitlets" version))
8598 "1ivhxglsrnhqw4g98ihddn7i5f6976gpk31fijwq473wb9n4b7q5"))))
8599 (build-system python-build-system)
8602 (modify-phases %standard-phases
8603 (replace 'check (lambda* (#:key tests? #:allow-other-keys)
8605 (invoke "pytest" "-vv" "traitlets")))))))
8607 (list python-pytest))
8608 (home-page "https://ipython.org")
8609 (synopsis "Configuration system for Python applications")
8611 "Traitlets is a framework that lets Python classes have attributes with
8612 type checking, dynamically calculated default values, and ‘on change’
8613 callbacks. The package also includes a mechanism to use traitlets for
8614 configuration, loading values from files or from command line arguments. This
8615 is a distinct layer on top of traitlets, so you can use traitlets in your code
8616 without using the configuration machinery.")
8617 (license license:bsd-3)))
8619 (define-public python-jupyter-core
8621 (name "python-jupyter-core")
8626 (uri (string-append (pypi-uri "jupyter_core" version)))
8629 "1v0s31rmwppdmww135hif03hy164j9kimirh24kxfcbvdfql9pm6"))))
8630 (build-system python-build-system)
8633 (modify-phases %standard-phases
8635 (lambda* (#:key tests? #:allow-other-keys)
8637 ;; Some tests write to $HOME.
8638 (setenv "HOME" "/tmp")
8639 (invoke "pytest" "-vv"
8642 ;; XXX: These tests fail with "ModuleNotFoundError: No
8643 ;; module named 'jupyter_core'".
8644 "not test_argv0 and not test_path_priority "
8645 "and not test_not_on_path")))))
8646 (add-after 'unpack 'patch-testsuite
8648 ;; test_not_on_path() and test_path_priority() try to run a test
8649 ;; that loads jupyter_core, so we need GUIX_PYTHONPATH
8650 (substitute* "jupyter_core/tests/test_command.py"
8651 (("env = \\{'PATH': ''\\}")
8652 "env = {'PATH': '', 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}")
8653 (("env = \\{'PATH': str\\(b\\)\\}")
8654 "env = {'PATH': str(b), 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}"))))
8655 ;; Migration is running whenever etc/jupyter exists, but the
8656 ;; Guix-managed directory will never contain any migratable IPython
8657 ;; config files and cannot be written to anyway, so just pretend we
8658 ;; already did that.
8659 (add-after 'install 'disable-migration
8660 (lambda* (#:key outputs #:allow-other-keys)
8661 (mkdir-p (string-append (assoc-ref outputs "out") "/etc/jupyter"))
8664 (assoc-ref outputs "out")
8665 "/etc/jupyter/migrated")))))))
8666 (propagated-inputs (list python-traitlets))
8667 (native-inputs (list python-pytest))
8668 ;; This package provides the `jupyter` binary and thus also exports the
8670 (native-search-paths
8671 (list (search-path-specification
8672 (variable "JUPYTER_CONFIG_PATH")
8673 (files '("etc/jupyter")))
8674 (search-path-specification
8675 (variable "JUPYTER_PATH")
8676 (files '("share/jupyter")))))
8677 (home-page "https://jupyter.org/")
8678 (synopsis "Jupyter base package")
8680 "Jupyter core is the base package on which Jupyter projects rely.")
8681 (license license:bsd-3)))
8683 ;; Bootstrap variant of jupyter-client, which breaks the loop between ipykernel
8684 ;; and jupyter-client by removing the former from its native-inputs and
8686 (define-public python-jupyter-client-bootstrap
8689 (name "python-jupyter-client-bootstrap")
8694 (uri (pypi-uri "jupyter_client" version))
8697 "12pbp177bfb3710y1a5598mwn8ffhyzmpll67m0nmalb98savnwg"))))
8698 (build-system python-build-system)
8703 #~(modify-phases %standard-phases
8704 (add-after 'unpack 'set-tool-file-names
8705 (lambda* (#:key inputs #:allow-other-keys)
8706 (substitute* "jupyter_client/localinterfaces.py"
8708 (format #f "'~a'" (search-input-file inputs "sbin/ip")))))))))
8709 (inputs (list iproute))
8711 (list python-dateutil
8718 (home-page "https://jupyter.org/")
8719 (synopsis "Jupyter protocol implementation and client libraries")
8721 "The @code{jupyter_client} package contains the reference implementation
8722 of the Jupyter protocol. It also provides client and kernel management APIs
8723 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
8724 installing @code{kernelspec}s for use with Jupyter frontends.")
8725 (license license:bsd-3))))
8727 (define-public python-jupyter-client
8728 (let ((base python-jupyter-client-bootstrap))
8731 (name "python-jupyter-client")
8733 (substitute-keyword-arguments (package-arguments base)
8735 (not (%current-target-system)))
8736 ((#:phases phases #~%standard-phases)
8737 #~(modify-phases #$phases
8739 (lambda* (#:key tests? #:allow-other-keys)
8741 ;; Some tests try to write to $HOME.
8742 (setenv "HOME" "/tmp")
8743 (invoke "pytest" "-vv"))))))))
8746 python-pytest-asyncio
8747 python-pytest-timeout
8748 python-async-generator
8750 python-ipykernel-bootstrap))
8751 (properties (alist-delete 'hidden? (package-properties base))))))
8753 (define-public python-ipykernel
8755 (name "python-ipykernel")
8760 (uri (pypi-uri "ipykernel" version))
8762 (base32 "0q5yni8h08nadsn53f957p0pjsjhwl2b2lp1hqz3jn0854z2fa0f"))))
8763 (build-system python-build-system)
8766 #:imported-modules `(,@%python-build-system-modules
8767 (guix build syscalls))
8768 #:modules '((guix build python-build-system)
8769 (guix build syscalls)
8773 #~(modify-phases %standard-phases
8775 (lambda* (#:key tests? #:allow-other-keys)
8777 (match (primitive-fork)
8779 (set-child-subreaper!)
8780 ;; XXX: Tini provides proper PID1-like signal handling that
8781 ;; reaps zombie processes, necessary for the
8782 ;; 'test_shutdown_subprocesses' test to pass.
8784 ;; TODO: Complete https://issues.guix.gnu.org/30948.
8785 (setenv "HOME" "/tmp")
8786 (execlp "tini" "--" "pytest" "-vv"))
8788 (match (waitpid pid)
8790 (unless (zero? status)
8791 (error "`pytest' exited with status"
8793 (add-after 'install 'set-python-file-name
8794 (lambda* (#:key inputs #:allow-other-keys)
8795 ;; Record the absolute file name of the 'python' executable in
8797 (substitute* (string-append #$output "/share/jupyter"
8798 "/kernels/python3/kernel.json")
8800 (format #f "~s" (search-input-file inputs
8801 "/bin/python3")))))))))
8803 (list python-debugpy
8805 python-jupyter-client ;imported at runtime during connect
8806 python-matplotlib-inline
8807 ;;python-nest-asyncio
8812 (inputs (list python)) ;for cross compilation
8815 python-ipyparallel-bootstrap
8816 ;; XXX: Our Pytest package captures its native inputs in its
8817 ;; wrapper script (such as python-nose), which is used in the code
8818 ;; and causes deprecation warnings. Using the bootstrap variant
8820 python-pytest-bootstrap
8821 python-pytest-timeout
8823 (home-page "https://ipython.org")
8824 (synopsis "IPython Kernel for Jupyter")
8825 (description "This package provides the IPython kernel for Jupyter.")
8826 (license license:bsd-3)))
8828 ;; Bootstrap variant of ipykernel, which uses the bootstrap jupyter-client to
8829 ;; break the cycle between ipykernel and jupyter-client.
8830 (define-public python-ipykernel-bootstrap
8831 (let ((parent python-ipykernel))
8835 (name "python-ipykernel-bootstrap")
8836 (arguments (list #:tests? #f
8837 ;; The package should normally propagate ipykernel,
8838 ;; left out here to break the cycle.
8839 #:phases #~(modify-phases %standard-phases
8840 (delete 'sanity-check))))
8843 (modify-inputs (package-propagated-inputs parent)
8844 (replace "python-jupyter-client" python-jupyter-client-bootstrap)
8845 (append python-ipyparallel-bootstrap)))))))
8847 (define-public python-pari-jupyter
8849 (name "python-pari-jupyter")
8854 (uri (pypi-uri "pari-jupyter" version))
8857 "1ikqvv335qfrhmlji0iclci6pnm2c3fvnxf031jr1d68j79g6ypd"))))
8858 (build-system python-build-system)
8859 (arguments '(#:tests? #f)) ;no test suite
8861 (list pari-gp readline python-ipykernel))
8862 (home-page "https://github.com/sagemath/pari-jupyter")
8863 (synopsis "Jupyter kernel for PARI/GP")
8864 (description "The package provides a PARI/GP kernel for Jupyter.")
8865 (license license:gpl3+)))
8867 (define-public python-backcall
8869 (name "python-backcall")
8874 (uri (pypi-uri "backcall" version))
8877 "07jy4562lvnhkk6kfr3cphmizy88anlhmbwb8kdzlz2ypqkvzgaw"))))
8878 (build-system python-build-system)
8879 (home-page "https://github.com/takluyver/backcall/")
8880 (synopsis "Specifications for callback functions passed in to an API")
8882 "If your code lets other people supply callback functions, it's important
8883 to specify the function signature you expect, and check that functions support
8884 that. Adding extra parameters later would break other peoples code unless
8885 you're careful. The @code{backcall} package provides a way of specifying the
8886 callback signature using a prototype function.")
8887 (license license:bsd-3)))
8889 (define-public python-pure-eval
8891 (name "python-pure-eval")
8896 (uri (pypi-uri "pure_eval" version))
8898 (base32 "1hwsm85cwqwh6d6x4vzcimla2865s6v19ms3ym81ganzyq534i9b"))))
8899 (build-system python-build-system)
8900 (native-inputs (list python-pytest python-setuptools-scm))
8901 (home-page "https://github.com/alexmojaki/pure_eval")
8902 (synopsis "Python library to evaluate abstract syntax tree nodes")
8903 (description "The @code{pure_eval} Python library can safely evaluate
8904 abstract syntax tree (AST) nodes without side effects.")
8905 (license license:expat)))
8907 (define-public python-asttokens
8909 (name "python-asttokens")
8914 (uri (pypi-uri "asttokens" version))
8916 (base32 "1mglbkikxvnhrk3inbx0v1qzxwd38qjr6l35sn098yicy0ac2m4s"))))
8917 (build-system python-build-system)
8918 (propagated-inputs (list python-six))
8919 (native-inputs (list python-astroid python-pytest python-setuptools-scm))
8920 (home-page "https://github.com/gristlabs/asttokens")
8921 (synopsis "Python library to annotate abstract syntax trees")
8922 (description "The @code{asttokens} module annotates Python abstract syntax
8923 trees (ASTs) with the positions of tokens and text in the source code that
8924 generated them. It makes it possible for tools that work with logical AST
8925 nodes to find the particular text that resulted in those nodes, for example
8926 for automated refactoring or highlighting.")
8927 (license license:asl2.0)))
8929 (define-public python-littleutils
8931 (name "python-littleutils")
8936 (uri (pypi-uri "littleutils" version))
8938 (base32 "0vwijrylppmk0nbddqvn527r9cg3zw8d6zk6r58hslry42jf7jp6"))))
8939 (build-system python-build-system)
8940 (home-page "https://github.com/alexmojaki/littleutils")
8941 (synopsis "Python utility function collection")
8942 (description "@code{littleutils} is a small collection of Python utility
8943 functions, useful in the context of writing unit tests among other uses.")
8944 (license license:expat)))
8946 (define-public python-stack-data
8948 (name "python-stack-data")
8953 (uri (pypi-uri "stack_data" version))
8955 (base32 "04lfcj5qrn4qikjw89qbdzqwm0xm4bgm4m8rll1rafk3pm0jssa5"))))
8956 (build-system python-build-system)
8957 (propagated-inputs (list python-asttokens python-executing python-pure-eval))
8963 python-setuptools-scm
8965 (home-page "https://github.com/alexmojaki/stack_data")
8966 (synopsis "Python stack frame and traceback manipulation library")
8967 (description "The @code{stack_data} Python library extracts data from
8968 stack frames and tracebacks. Is can be used to display more useful tracebacks
8970 (license license:expat)))
8972 (define-public python-ipython
8974 (name "python-ipython")
8979 (uri (pypi-uri "ipython" version ".tar.gz"))
8981 (base32 "1hcxa713wh3axa57412iy02rj0494ljvv6gpnls4lndc5h9yprbh"))))
8982 (build-system python-build-system)
8985 (modify-phases %standard-phases
8986 (add-after 'unpack 'make-docs-reproducible
8988 (substitute* "IPython/sphinxext/ipython_directive.py"
8989 ((".*import datetime") "")
8990 ((".*datetime.datetime.now\\(\\)") "")
8991 (("%timeit") "# %timeit"))))
8993 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
8995 (setenv "HOME" "/tmp/") ;required by some tests
8996 (invoke "python" "-m" "pytest" "-vv")))))))
8997 (inputs (list readline which))
8999 (list python-backcall
9005 python-matplotlib-inline
9012 python-prompt-toolkit
9015 python-simplegeneric
9026 (home-page "https://ipython.org")
9027 (synopsis "IPython is a tool for interactive computing in Python")
9029 "IPython provides a rich architecture for interactive computing with:
9030 Powerful interactive shells, a browser-based notebook, support for interactive
9031 data visualization, embeddable interpreters and tools for parallel
9033 (properties '((cpe-name . "ipython")))
9034 (license license:bsd-3)))
9036 (define-public python-ipython-documentation
9038 (inherit python-ipython)
9039 (name "python-ipython-documentation")
9040 (version (package-version python-ipython))
9043 (inherit (package-source python-ipython))
9044 (patches (append (search-patches
9045 "python-ipython-documentation-chars.patch"
9046 "python-ipython-documentation-repro.patch")
9047 (origin-patches (package-source python-ipython))))))
9051 #~(modify-phases %standard-phases
9052 (add-after 'unpack 'set-pythonpath
9054 ;; Ensure this fixed (via the
9055 ;; "python-ipython-documentation-chars.patch" patch) copy of
9056 ;; IPython gets used.
9057 (setenv "PYTHONPATH" (string-append (getcwd)))))
9058 (add-before 'build 'configure-sphinx-for-xelatex
9060 ;; Use XeLaTeX instead of PDFLaTeX, as it can
9061 ;; cope with the Unicode characters present in the
9062 ;; contributors page, for example.
9063 (substitute* "docs/source/conf.py"
9064 (("project = 'IPython'.*" all)
9065 (string-append all "latex_engine = 'xelatex'\n")))
9066 ;; XXX: The Sphinx-generated ipython.tex specifies the GNU
9067 ;; FreeFont font to be searched via its extension, which uses
9068 ;; kpathsea instead of fontconfig and fail (see:
9069 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
9070 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
9072 (mkdir-p "texmf-dist/fonts/opentype/public")
9073 (symlink (string-append
9074 #$(this-package-native-input "font-gnu-freefont")
9075 "/share/fonts/opentype")
9078 "texmf-dist/fonts/opentype/public/gnu-freefont"))
9079 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
9080 (getcwd) "/texmf-dist"))))
9084 (lambda* (#:key outputs #:allow-other-keys)
9085 (let* ((data (string-append #$output "/share"))
9086 (doc (string-append data "/doc/" #$name "-" #$version))
9087 (html (string-append doc "/html"))
9088 (info (string-append data "/info")))
9089 (invoke "make" "-C" "docs" "info" "html" "pdf"
9090 (string-append "SPHINXOPTS=-j"
9091 (number->string (parallel-job-count))))
9092 (install-file "COPYING.rst" doc)
9093 (copy-recursively "examples" (string-append doc "/examples"))
9094 ;; Install HTML documentation.
9095 (copy-recursively "docs/build/html" html)
9096 ;; Likewise for the PDF.
9097 (install-file "docs/build/latex/ipython.pdf" doc)
9098 ;; Likewise for the info manual.
9099 (install-file "docs/build/texinfo/ipython.info" info)
9100 (symlink (string-append html "/_images")
9101 (string-append info "/ipython-figures"))))))))
9103 (list fontconfig ;for XDG_DATA_DIRS to locate fonts
9108 python-sphinx-rtd-theme
9114 (define-public python-urwid
9116 (name "python-urwid")
9121 (uri (pypi-uri "urwid" version))
9124 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
9125 (build-system python-build-system)
9129 #~(modify-phases %standard-phases
9130 (add-after 'unpack 'remove-vterm-tests
9131 ;; According to Debian these tests are cursed.
9132 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
9134 (delete-file "urwid/tests/test_vterm.py"))))))
9135 (home-page "http://urwid.org")
9136 (synopsis "Console user interface library for Python")
9138 "Urwid is a curses-based UI/widget library for Python. It includes many
9139 features useful for text console applications.")
9140 (license license:lgpl2.1+)))
9142 (define-public python-urwid-readline
9144 (name "python-urwid-readline")
9150 (url "https://github.com/rr-/urwid_readline")
9152 (file-name (git-file-name name version))
9155 "0y9k86p31mlr9rwnrbljvfgl183r5j60yaj0r3scljn1m0mlg8qg"))))
9156 (build-system python-build-system)
9159 (modify-phases %standard-phases
9161 (lambda* (#:key tests? #:allow-other-keys)
9163 (invoke "pytest" "-vv")))))))
9164 (propagated-inputs (list python-urwid))
9165 (native-inputs (list python-pytest))
9166 (home-page "https://github.com/rr-/urwid_readline")
9167 (synopsis "Text input widget for urwid that supports readline shortcuts")
9169 "This package provides a textbox edit widget for @code{python-urwid} that
9170 supports @code{readline} shortcuts.")
9171 (license license:expat)))
9173 (define-public python-textdistance
9175 (name "python-textdistance")
9179 ;; There are no tests in the PyPI tarball.
9182 (url "https://github.com/life4/textdistance")
9183 (commit (string-append "v." version))))
9184 (file-name (git-file-name name version))
9186 (base32 "1g17i356fnny4k6hjr2ayy9k77jbvd6zzmngws2kbrnvhss1wgwf"))))
9187 (build-system python-build-system)
9189 `(#:test-target "pytest"
9191 (modify-phases %standard-phases
9192 (add-after 'unpack 'delete-external-test
9194 ;; All tests in this file require external libraries.
9195 (delete-file "tests/test_external.py")
9198 (list python-hypothesis
9202 python-pytest-runner
9204 (home-page "https://github.com/life4/textdistance")
9205 (synopsis "Compute distance between the two texts")
9206 (description "@code{textdistance} is a pure Python library for comparing
9207 distance between two or more sequences by many algorithms.")
9208 (license license:expat)))
9210 (define-public python-urwidtrees
9212 (name "python-urwidtrees")
9217 ;; package author intends on distributing via github rather than pypi:
9218 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
9220 (url "https://github.com/pazz/urwidtrees")
9222 (file-name (git-file-name name version))
9225 "1y1vysx7jg0vbrarlsykhf7nmr8fc6k1fva1q3i98xq2m30s6r68"))))
9226 (build-system python-build-system)
9228 '(#:tests? #f)) ; no tests
9229 (propagated-inputs (list python-urwid))
9230 (native-inputs (list python-mock))
9231 (home-page "https://github.com/pazz/urwidtrees")
9232 (synopsis "Tree widgets for urwid")
9233 (description "Urwidtrees is a Widget Container API for the @code{urwid}
9234 toolkit. Use it to build trees of widgets.")
9235 (license license:gpl3+)))
9237 (define-public python-ua-parser
9239 (name "python-ua-parser")
9244 (uri (pypi-uri "ua-parser" version))
9247 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
9248 (build-system python-build-system)
9250 `(#:tests? #f)) ;no test suite in release
9252 (list python-pyyaml))
9253 (home-page "https://github.com/ua-parser/uap-python")
9254 (synopsis "User agent parser")
9256 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
9257 (license license:asl2.0)))
9259 (define-public python-user-agents
9261 (name "python-user-agents")
9266 (uri (pypi-uri "user-agents" version))
9269 "09mddriffm9rkwr30081fy9n3cn976ms8pwc8p8hhlxnilbjavfk"))))
9270 (build-system python-build-system)
9272 `(#:tests? #f)) ;missing devices.json test file in release
9274 (list python-ua-parser))
9275 (home-page "https://github.com/selwin/python-user-agents")
9276 (synopsis "User Agent strings parsing library")
9278 "A library to identify devices (phones, tablets) and their capabilities by
9279 parsing (browser/HTTP) user agent strings.")
9280 (license license:expat)))
9282 (define-public python-pydbus
9284 (name "python-pydbus")
9289 (uri (pypi-uri "pydbus" version))
9291 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
9292 (build-system python-build-system)
9293 (propagated-inputs (list python-pygobject))
9294 (home-page "https://github.com/LEW21/pydbus")
9295 (synopsis "Pythonic D-Bus library")
9296 (description "Pydbus provides a pythonic interface to the D-Bus
9297 message bus system. Pydbus can be used to access remote objects and
9298 also for object publication. It is based on PyGI, the Python GObject
9299 Introspection bindings, which is the recommended way to use GLib from Python.")
9300 (license license:lgpl2.1+)))
9302 (define-public python-dbus
9304 (name "python-dbus")
9309 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
9310 "dbus-python-" version ".tar.gz"))
9312 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
9313 (build-system gnu-build-system)
9317 `(("python" ,python-wrapper)
9318 ("dbus-glib" ,dbus-glib)))
9319 (synopsis "Python bindings for D-bus")
9320 (description "python-dbus provides bindings for libdbus, the reference
9321 implementation of D-Bus.")
9322 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
9323 (properties `((python2-variant . ,(delay python2-dbus))))
9324 (license license:expat)))
9326 (define-public python2-dbus
9327 (package/inherit python-dbus
9328 (name "python2-dbus")
9329 (inputs `(("python" ,python-2)
9330 ,@(alist-delete "python"
9331 (package-inputs python-dbus))))
9333 `(#:configure-flags '("PYTHON_VERSION=2")))))
9335 (define-public python-dbus-next
9337 (name "python-dbus-next")
9343 (url "https://github.com/altdesktop/python-dbus-next")
9344 (commit (string-append "v" version))))
9345 (file-name (git-file-name name version))
9348 "1ahaz52kny1p9xxv6phvk4iq56rg8li390wywlxf2yslaij1188h"))))
9349 (build-system python-build-system)
9351 (list python-pytest))
9352 (home-page "https://github.com/altdesktop/python-dbus-next")
9353 (synopsis "Zero-dependency DBus library for Python with asyncio support")
9355 "This DBus library for Python aims to be a fully-featured high-level
9356 library primarily geared towards integration of applications into desktop and
9357 mobile environments.")
9358 (license license:expat)))
9360 (define-public python-notify2
9362 (name "python-notify2")
9367 (uri (pypi-uri "notify2" version))
9370 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
9371 (build-system python-build-system)
9372 (arguments `(#:tests? #f)) ; tests depend on system state
9375 (home-page "https://bitbucket.org/takluyver/pynotify2")
9376 (synopsis "Python interface to D-Bus notifications")
9378 "Pynotify2 provides a Python interface for sending D-Bus notifications.
9379 It is a reimplementation of pynotify in pure Python, and an alternative to
9380 the GObject Introspection bindings to libnotify for non-GTK applications.")
9381 (license (list license:bsd-2
9382 license:lgpl2.1+))))
9384 ;; beautifulsoup4 has a totally different namespace than 3.x,
9385 ;; and pypi seems to put it under its own name, so I guess we should too
9386 (define-public python-beautifulsoup4
9388 (name "python-beautifulsoup4")
9393 (uri (pypi-uri "beautifulsoup4" version))
9396 "14v68cpfzckfz63n9hnbsm271jvzvxscyijz83mhha7gcmdsb6md"))))
9397 (build-system python-build-system)
9399 '(#:phases (modify-phases %standard-phases
9401 (lambda* (#:key tests? #:allow-other-keys)
9403 (invoke "pytest" "-vv")))))))
9405 (list python-pytest))
9407 (list python-soupsieve python-html5lib python-lxml))
9409 "https://www.crummy.com/software/BeautifulSoup/bs4/")
9411 "Python screen-scraping library")
9413 "Beautiful Soup is a Python library designed for rapidly setting up
9414 screen-scraping projects. It offers Pythonic idioms for navigating,
9415 searching, and modifying a parse tree, providing a toolkit for
9416 dissecting a document and extracting what you need. It automatically
9417 converts incoming documents to Unicode and outgoing documents to UTF-8.")
9418 (license license:expat)))
9420 (define-public python-soupsieve
9422 (name "python-soupsieve")
9427 (uri (pypi-uri "soupsieve" version))
9430 "1k70gpn2d3vgdyxbdy536dgm4kchcraxz6lmgsfg3324iy2789q5"))))
9431 (build-system python-build-system)
9433 ;;XXX: 2 tests fail currently despite claming they were to be
9434 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
9435 ;;don't want to create a circular dependency.
9438 #~(modify-phases %standard-phases
9439 ;; Circular dependency with python-beautifulsoup4.
9440 (delete 'sanity-check))))
9441 (home-page "https://github.com/facelessuser/soupsieve")
9442 (synopsis "CSS selector library")
9444 "Soup Sieve is a CSS selector library designed to be used with Beautiful
9445 Soup 4. It aims to provide selecting, matching, and filtering using modern
9446 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
9447 specifications up through the latest CSS level 4 drafts and beyond (though
9448 some are not yet implemented).")
9449 (license license:expat)))
9452 (define-public python-netifaces
9454 (name "python-netifaces")
9459 (uri (pypi-uri "netifaces" version))
9462 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
9463 (build-system python-build-system)
9464 (home-page "https://github.com/al45tair/netifaces")
9466 "Python module for portable network interface information")
9468 "Netifaces is a Python module providing information on network
9469 interfaces in an easy and portable manner.")
9470 (license license:expat)))
9472 (define-public python-networkx
9474 (name "python-networkx")
9479 (uri (pypi-uri "networkx" version))
9481 (base32 "1fqrq7gc0nn4rd4zqibw96cap75vb5nlixapkajwawp71jaz21i3"))))
9482 (build-system python-build-system)
9484 '(#:phases (modify-phases %standard-phases
9486 (lambda* (#:key tests? #:allow-other-keys)
9488 (invoke "pytest" "-vv" "--pyargs" "networkx")
9489 (format #t "test suite not run~%")) #t)))))
9490 (propagated-inputs (list python-decorator))
9491 (native-inputs (list python-pytest))
9492 (home-page "https://networkx.github.io/")
9494 "Python module for creating and manipulating graphs and networks")
9496 "NetworkX is a Python package for the creation, manipulation, and study
9497 of the structure, dynamics, and functions of complex networks.")
9498 (license license:bsd-3)))
9501 (define-public python-datrie
9503 (name "python-datrie")
9508 (uri (pypi-uri "datrie" version))
9511 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
9512 (build-system python-build-system)
9514 (list python-cython python-hypothesis python-pytest
9515 python-pytest-runner))
9516 (home-page "https://github.com/kmike/datrie")
9517 (synopsis "Fast, efficiently stored trie for Python")
9519 "This package provides a fast, efficiently stored trie implementation for
9521 (license license:lgpl2.1+)))
9523 (define-public python-amply
9525 (name "python-amply")
9530 (uri (pypi-uri "amply" version))
9533 "0f1db9zp0rsfzxvaz55xwh8h5rfdgr9a2a715g06ic8nknsdq4nb"))))
9534 (build-system python-build-system)
9536 (list python-docutils python-pyparsing))
9538 (list python-setuptools-scm))
9539 (home-page "https://github.com/willu47/amply")
9540 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
9542 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
9544 (license license:epl1.0)))
9546 (define-public python-pulp
9548 (name "python-pulp")
9553 (uri (pypi-uri "PuLP" version))
9556 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
9557 (build-system python-build-system)
9559 (list python-amply))
9560 (home-page "https://github.com/coin-or/pulp")
9561 (synopsis "Linear Programming modeler")
9563 "PuLP is a Linear Programming modeler written in Python. PuLP can
9564 generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
9565 solve linear problems.")
9566 (license license:expat)))
9568 (define-public python-py-tes
9570 (name "python-py-tes")
9575 (uri (pypi-uri "py-tes" version))
9577 (base32 "0b272y392v0mnq0f3sm5kgcx8fn4qwfbym89hhvqxz3xkganr4pn"))))
9578 (build-system python-build-system)
9580 (list python-attrs python-dateutil python-future python-requests))
9581 (home-page "https://github.com/ohsu-comp-bio/py-tes")
9582 (synopsis "Library for communicating with the GA4GH Task Execution API")
9583 (description "This package provides a library for communicating with the
9584 GA4GH Task Execution API.")
9585 (license license:expat)))
9587 (define-public python-toposort
9589 (name "python-toposort")
9594 (uri (pypi-uri "toposort" version))
9597 "1b2hppzjg3p006qya3yfdnp76dwq8frl97lypdam0kw4xxb8yhm7"))))
9598 (build-system python-build-system)
9599 (home-page "https://gitlab.com/ericvsmith/toposort")
9600 (synopsis "Topological sort algorithm")
9602 "This package provides an implementation of a topological sort
9604 (license license:asl2.0)))
9606 (define-public python-three-merge
9608 (name "python-three-merge")
9612 ;; There are no tests in the PyPI tarball.
9615 (url "https://github.com/spyder-ide/three-merge")
9616 (commit (string-append "v" version))))
9617 (file-name (git-file-name name version))
9619 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
9620 (build-system python-build-system)
9622 `(#:test-target "pytest"))
9624 (list python-diff-match-patch))
9626 (list python-flaky python-pytest python-pytest-cov
9627 python-pytest-runner python-pytest-timeout))
9628 (home-page "https://github.com/spyder-ide/three-merge")
9629 (synopsis "Library for merging two strings with respect to a base one")
9631 "This package provides a Python library to perform a 3-way merge between
9632 strings, based on @code{diff-match-patch}. This library performs merges at a
9633 character level, as opposed to most VCS systems, which opt for a line-based
9635 (license license:expat)))
9637 (define-public snakemake
9644 (uri (pypi-uri "snakemake" version))
9646 (base32 "13013gdavwvyj1qr9xfi9fpwhb3km8c3z53bja5b7ic3sb2z6dgz"))))
9647 (build-system python-build-system)
9649 ;; TODO: Package missing test dependencies.
9652 (modify-phases %standard-phases
9653 ;; For cluster execution Snakemake will call Python. Since there is
9654 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
9655 ;; this by calling the snakemake wrapper instead.
9656 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
9657 (lambda* (#:key outputs #:allow-other-keys)
9658 (substitute* "snakemake/executors/__init__.py"
9659 (("\\{sys.executable\\} -m snakemake")
9660 (string-append (assoc-ref outputs "out")
9664 (list python-appdirs
9665 python-configargparse
9680 (home-page "https://snakemake.readthedocs.io")
9681 (synopsis "Python-based execution environment for make-like workflows")
9683 "Snakemake aims to reduce the complexity of creating workflows by
9684 providing a clean and modern domain specific specification language (DSL) in
9685 Python style, together with a fast and comfortable execution environment.")
9686 (license license:expat)))
9688 (define-public snakemake-6
9697 (url "https://github.com/snakemake/snakemake")
9698 (commit (string-append "v" version))))
9699 (file-name (git-file-name name version))
9701 (base32 "09yrpi9f86r9yvcm2dfjs5zy87c4j31bxama77kfd6y8yfrrjlai"))))
9702 (build-system python-build-system)
9705 (modify-phases %standard-phases
9706 ;; For cluster execution Snakemake will call Python. Since there is
9707 ;; no suitable GUIX_PYTHONPATH set, cluster execution will fail. We
9708 ;; fix this by calling the snakemake wrapper instead.
9710 ;; XXX: There is another instance of sys.executable on line 692, but
9711 ;; it is not clear how to patch it.
9712 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
9713 (lambda* (#:key outputs #:allow-other-keys)
9714 (substitute* "snakemake/executors/__init__.py"
9715 (("\\{sys.executable\\} -m snakemake")
9716 (string-append (assoc-ref outputs "out")
9717 "/bin/snakemake")))))
9719 (lambda* (#:key tests? #:allow-other-keys)
9721 (setenv "HOME" "/tmp")
9722 ;; This test attempts to change S3 buckets on AWS and fails
9723 ;; because there are no AWS credentials.
9724 (delete-file "tests/test_tibanna.py")
9725 (invoke "pytest")))))))
9727 (list python-appdirs
9728 python-configargparse
9729 python-connection-pool
9754 python-requests-mock))))
9756 (define-public snakemake-7
9758 (inherit snakemake-6)
9765 (url "https://github.com/snakemake/snakemake")
9766 (commit (string-append "v" version))))
9767 (file-name (git-file-name name version))
9769 (base32 "1qrqbmx4cbis0wxr6dl2rdjv9v627sbirsz6v5c31vlbqwkvs04q"))))
9770 (build-system python-build-system)
9773 (modify-phases %standard-phases
9774 ;; For cluster execution Snakemake will call Python. Since there is
9775 ;; no suitable GUIX_PYTHONPATH set, cluster execution will fail. We
9776 ;; fix this by calling the snakemake wrapper instead.
9777 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
9778 (lambda* (#:key outputs #:allow-other-keys)
9779 (substitute* "snakemake/executors/__init__.py"
9780 (("self\\.get_python_executable\\(\\),")
9782 (("\"-m snakemake\"")
9783 (string-append "\"" (assoc-ref outputs "out")
9784 "/bin/snakemake" "\"")))))
9786 (lambda* (#:key tests? #:allow-other-keys)
9788 (setenv "HOME" "/tmp")
9789 ;; This test attempts to change S3 buckets on AWS and fails
9790 ;; because there are no AWS credentials.
9791 (delete-file "tests/test_tibanna.py")
9792 ;; It's a similar story with this test, which requires access
9793 ;; to the Google Storage service.
9794 (delete-file "tests/test_google_lifesciences.py")
9795 (invoke "pytest")))))))
9797 (list python-appdirs
9798 python-configargparse
9799 python-connection-pool
9826 python-requests-mock))))
9828 (define-public python-pyqrcode
9830 (name "python-pyqrcode")
9835 (uri (pypi-uri "PyQRCode" version))
9838 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
9839 (build-system python-build-system)
9841 "https://github.com/mnooner256/pyqrcode")
9842 (synopsis "QR code generator")
9844 "Pyqrcode is a QR code generator written purely in Python with
9845 SVG, EPS, PNG and terminal output.")
9846 (license license:bsd-3)))
9848 (define-public python-seaborn
9850 (name "python-seaborn")
9854 (uri (pypi-uri "seaborn" version))
9857 "1xpl3zb945sihsiwm9q1yyx84sakk1phcg0fprj6i0j0dllfjifg"))
9858 (patches (search-patches "python-seaborn-kde-test.patch"
9859 "python-seaborn-2690.patch"))))
9860 (build-system python-build-system)
9862 `(#:phases (modify-phases %standard-phases
9863 (add-after 'unpack 'patch-more-tests
9865 (substitute* "seaborn/tests/test_distributions.py"
9866 (("get_contour_color\\(ax\\.collections\\[0\\]\\)")
9867 "get_contour_color(ax.collections[0])")
9868 (("c\\.get_color\\(\\)") "get_contour_color(c)")
9869 (("def test_hue_ignores_cmap")
9870 "def skip_test_hue_ignores_cmap")
9871 (("def test_fill_artists")
9872 "def skip_test_fill_artists")
9873 (("def test_with_rug") "def skip_test_with_rug"))))
9874 (add-before 'check 'start-xserver
9876 (system "Xvfb :1 &")
9877 (setenv "DISPLAY" ":1")))
9879 (lambda* (#:key tests? #:allow-other-keys)
9881 (invoke "pytest" "seaborn")))))))
9882 (propagated-inputs (list python-pandas python-matplotlib python-numpy
9884 (native-inputs (list python-pytest xorg-server-for-tests))
9885 (home-page "https://seaborn.pydata.org/")
9886 (synopsis "Statistical data visualization")
9888 "Seaborn is a library for making attractive and informative statistical
9889 graphics in Python. It is built on top of matplotlib and tightly integrated
9890 with the PyData stack, including support for numpy and pandas data structures
9891 and statistical routines from scipy and statsmodels.")
9892 (license license:bsd-3)))
9895 (define-public python-session-info
9897 (name "python-session-info")
9901 (uri (pypi-uri "session_info" version))
9904 "1dxnrgaxd2nb44n423mnrx119hmnh2yxdnzaw8mg60x7rh1mxniw"))))
9905 (build-system python-build-system)
9906 (propagated-inputs (list python-stdlib-list))
9907 (home-page "https://gitlab.com/joelostblom/session_info")
9908 (synopsis "Output version information for modules currently loaded")
9910 "This package outputs version information for modules loaded in the current
9911 session, Python, and the OS.")
9912 (license license:bsd-3)))
9914 (define-public python-mpmath
9916 (name "python-mpmath")
9921 (url "https://github.com/fredrik-johansson/mpmath")
9922 (commit "c6a35f9ee7c294bcf4e0517bc76b268843db9499")))
9923 (file-name (git-file-name name version))
9926 "0ifw59fjjls3mas104rh0frilvab2fhk1dkjraxlqni5n9l676im"))))
9927 (build-system python-build-system)
9930 (modify-phases %standard-phases
9931 (add-before 'build 'set-version
9933 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)
9934 ;; ZIP does not support timestamps before 1980.
9935 (setenv "SOURCE_DATE_EPOCH" "315532800")))
9937 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
9939 (add-installed-pythonpath inputs outputs)
9940 (invoke "pytest" "-vv")))))))
9942 (list python-pytest python-setuptools-scm))
9943 (home-page "https://mpmath.org")
9944 (synopsis "Arbitrary-precision floating-point arithmetic in python")
9946 "@code{mpmath} can be used as an arbitrary-precision substitute for
9947 Python's float/complex types and math/cmath modules, but also does much
9948 more advanced mathematics.")
9949 (license license:bsd-3)))
9951 (define-public python-bigfloat
9953 (name "python-bigfloat")
9958 (uri (pypi-uri "bigfloat" version))
9960 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
9961 (build-system python-build-system)
9964 (home-page "https://github.com/mdickinson/bigfloat")
9965 (synopsis "Arbitrary precision floating-point arithmetic for Python")
9967 "This package provides a Python interface to the MPFR library for
9968 multiprecision arithmetic.")
9969 (license license:lgpl3+)))
9971 (define-public python-plac
9973 (name "python-plac")
9978 (uri (pypi-uri "plac" version))
9980 (base32 "1410h6jw1ksi24kb55xzkwqzba2qqjwiga1s354bf3s5s1jdig9q"))))
9981 (build-system python-build-system)
9984 (modify-phases %standard-phases
9985 (add-after 'unpack 'fix-tkinter
9987 (substitute* "plac_tk.py"
9988 (("from Tkinter import Tk")
9989 "from tkinter import Tk")
9990 (("from ScrolledText import ScrolledText")
9991 "from tkinter.scrolledtext import ScrolledText")))))))
9993 `(("python-tkinter" ,python "tk")))
9994 (home-page "https://github.com/ialbert/plac")
9995 (synopsis "Command line arguments parser")
9996 (description "This package can generate command line parameters from
9997 function signatures.")
9998 (license license:bsd-3)))
10000 (define-public python-yte
10002 (name "python-yte")
10007 (uri (pypi-uri "yte" version))
10009 (base32 "07hm1warpqi4ifqgkaz5sg887x4a44yhxafmpf835ywnpchg4s03"))))
10010 (build-system python-build-system)
10013 (modify-phases %standard-phases
10014 (add-after 'unpack 'set-HOME
10015 (lambda _ (setenv "HOME" "/tmp"))))))
10016 (propagated-inputs (list python-plac python-pyyaml))
10017 (home-page "https://github.com/koesterlab/yte")
10018 (synopsis "YAML template engine with Python expressions")
10020 "This package provides a YAML template engine with Python expressions.")
10021 (license license:expat)))
10023 (define-public python-sympy
10025 (name "python-sympy")
10030 (uri (pypi-uri "sympy" version))
10032 (base32 "0n46x1rfy8c2a9za3yp2va5icigxj805f9fmiq8c1drwwvf808z3"))))
10033 (build-system python-build-system)
10036 (modify-phases %standard-phases
10038 (lambda* (#:key outputs #:allow-other-keys)
10040 (or (which "python3") (which "python"))
10041 "-c" "import sympy; sympy.test(\"/core\")"))))))
10043 (list python-mpmath))
10044 (home-page "https://www.sympy.org/")
10045 (synopsis "Python library for symbolic mathematics")
10047 "SymPy is a Python library for symbolic mathematics. It aims to become a
10048 full-featured computer algebra system (CAS) while keeping the code as simple
10049 as possible in order to be comprehensible and easily extensible.")
10050 (license license:bsd-3)))
10052 (define-public python-q
10059 (uri (pypi-uri "q" version))
10062 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
10063 (build-system python-build-system)
10064 (home-page "https://github.com/zestyping/q")
10065 (synopsis "Quick-and-dirty debugging output for tired programmers")
10067 "q is a Python module for \"print\" style of debugging Python code. It
10068 provides convenient short API for print out of values, tracebacks, and
10069 falling into the Python interpreter.")
10070 (license license:asl2.0)))
10072 (define-public python-xlib
10074 (name "python-xlib")
10079 (uri (git-reference
10080 (url "https://github.com/python-xlib/python-xlib")
10082 (file-name (git-file-name name version))
10084 (base32 "17cwd2knqm2vwrii3kqii9abwsnydhpg4byqx1vy7rjs6i1vbqfc"))))
10085 (build-system python-build-system)
10088 (modify-phases %standard-phases
10089 (add-before 'check 'start-xserver
10090 (lambda* (#:key inputs #:allow-other-keys)
10091 (let ((xorg-server (assoc-ref inputs "xorg-server")))
10092 ;; There must be a running X server and make check doesn't
10093 ;; start one. Therefore we must do it.
10094 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
10095 (setenv "DISPLAY" ":1")
10098 (list python-mock python-setuptools-scm xorg-server))
10101 (home-page "https://github.com/python-xlib/python-xlib")
10102 (synopsis "Python X11 client library")
10104 "The Python X Library is intended to be a fully functional
10105 X client library for Python programs. It is useful to implement
10106 low-level X clients. It is written entirely in Python.")
10107 (license license:gpl2+)))
10109 (define-public python-singledispatch
10111 (name "python-singledispatch")
10112 (version "3.4.0.3")
10116 (uri (pypi-uri "singledispatch" version))
10119 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
10120 (build-system python-build-system)
10122 (list python-six)) ; required for conversion, not at run-time
10124 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
10125 (synopsis "Backport of singledispatch feature from Python 3.4")
10127 "This library brings functools.singledispatch from Python 3.4 to Python
10129 (license license:expat)))
10131 ;; the python- version can be removed with python-3.5
10132 (define-public python-backports-abc
10134 (name "python-backports-abc")
10139 (uri (pypi-uri "backports_abc" version))
10142 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
10143 (build-system python-build-system)
10144 (home-page "https://github.com/cython/backports_abc")
10145 (synopsis "Backport of additions to the 'collections.abc' module")
10147 "Python-backports-abc provides a backport of additions to the
10148 @code{collections.abc} module in Python-3.5.")
10149 (license license:psfl)))
10151 (define-public python-backports-csv
10153 (name "python-backports-csv")
10158 (uri (pypi-uri "backports.csv" version))
10160 (base32 "0vdx5jlhs91iizc8j8l8811nqprwvdx39pgkdc82w2qkfgzxyxqj"))))
10161 (build-system python-build-system)
10162 (home-page "https://github.com/ryanhiebert/backports.csv")
10163 (synopsis "Backport of Python 3's csv module for Python 2")
10165 "Provides a backport of Python 3's @code{csv} module for parsing
10166 comma separated values. The API of the @code{csv} module in Python 2
10167 is drastically different from the @code{csv} module in Python 3.
10168 This is due, for the most part, to the difference between str in
10169 Python 2 and Python 3.")
10170 (license license:psfl)))
10172 (define-public python-waf
10174 (name "python-waf")
10178 (uri (string-append "https://waf.io/"
10179 "waf-" version ".tar.bz2"))
10182 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
10183 (build-system python-build-system)
10186 (modify-phases %standard-phases
10189 ;; XXX: Find a way to add all extra tools.
10190 (let ((tools '("gccdeps"
10191 "clang_compilation_database")))
10192 (invoke "python" "waf-light" "configure" "build"
10193 (string-append "--tools="
10194 (string-join tools ","))))))
10197 (invoke "python" "waf" "--version")))
10199 (lambda* (#:key outputs #:allow-other-keys)
10200 (let ((out (assoc-ref outputs "out")))
10201 (install-file "waf" (string-append out "/bin")))
10203 ;; waf breaks when it is wrapped.
10205 (home-page "https://waf.io/")
10206 (synopsis "Python-based build system")
10208 "Waf is a Python-based framework for configuring, compiling and installing
10210 (license license:bsd-3)))
10212 (define-public python-pyzmq
10214 (name "python-pyzmq")
10219 (uri (pypi-uri "pyzmq" version))
10221 (base32 "0737kizh53n4rjq1xbm6nhr0bq65xflg04i1d8fcky0nwwrw1pcf"))
10224 (use-modules (guix build utils))
10225 ;; The bundled zeromq source code.
10226 (delete-file-recursively "bundled")
10227 ;; Delete cythonized files.
10228 (for-each delete-file
10229 (list "zmq/backend/cython/constants.c"
10230 "zmq/backend/cython/context.c"
10231 "zmq/backend/cython/_device.c"
10232 "zmq/backend/cython/error.c"
10233 "zmq/backend/cython/message.c"
10234 "zmq/backend/cython/_poll.c"
10235 "zmq/backend/cython/_proxy_steerable.c"
10236 "zmq/backend/cython/socket.c"
10237 "zmq/backend/cython/utils.c"
10238 "zmq/backend/cython/_version.c"
10239 "zmq/devices/monitoredqueue.c"))))))
10240 (build-system python-build-system)
10242 `(#:configure-flags
10243 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
10245 (modify-phases %standard-phases
10246 (add-before 'check 'build-extensions
10248 ;; Cython extensions have to be built before running the tests.
10249 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
10253 (list pkg-config python-cython python-pytest))
10254 (home-page "https://github.com/zeromq/pyzmq")
10255 (synopsis "Python bindings for 0MQ")
10257 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
10258 (license license:bsd-4)))
10260 (define-public python-immutabledict
10262 (name "python-immutabledict")
10267 (uri (pypi-uri "immutabledict" version))
10269 (base32 "0fpc4gbk7inpfbgdypsg6c18bmdjw8gwx47bjw0hvixn3gghxnqx"))))
10270 (build-system python-build-system)
10272 `(#:tests? #f)) ; no tests in PyPI release and no setup.py in GitHub
10274 (list python-pytest))
10275 (home-page "https://github.com/corenting/immutabledict")
10276 (synopsis "Immutable wrapper around dictionaries")
10278 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
10279 It implements the complete mapping interface and can be used as a drop-in
10280 replacement for dictionaries where immutability is desired.")
10281 (license license:expat)))
10283 (define-public python-emoji
10285 (name "python-emoji")
10290 (uri (pypi-uri "emoji" version))
10292 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))
10293 (build-system python-build-system)
10296 (modify-phases %standard-phases
10298 (lambda* (#:key tests? #:allow-other-keys)
10300 (invoke "python" "-m" "pytest")))))))
10302 (list python-pytest))
10303 (home-page "https://github.com/carpedm20/emoji/")
10304 (synopsis "Emoji terminal output for Python")
10305 (description "This package provides Emoji terminal output for Python. The
10306 entire set of Emoji codes as defined by the Unicode Consortium is supported in
10307 addition to a bunch of aliases.")
10308 (license license:bsd-3)))
10310 (define-public python-sarge
10312 (name "python-sarge")
10313 (version "0.1.7.post1") ; post release only to correct errors in metadata
10317 (uri (pypi-uri "sarge" version))
10319 (base32 "0g9a53mfnp96877n1yq2jdk1mcv3xm0d93iisvgcn2prdsp45zv4"))))
10320 (build-system python-build-system)
10321 (home-page "https://docs.red-dove.com/sarge/")
10322 (synopsis "Subprocess wrapper with command pipeline functionality")
10323 (description "@code{sarge} is a wrapper for subprocess which provides
10324 command pipeline functionality.")
10325 (license license:bsd-3)))
10327 (define-public python-zipstream-new
10329 (name "python-zipstream-new")
10333 (method git-fetch) ; no tests in PyPI release
10334 (uri (git-reference
10335 (url "https://github.com/arjan-s/python-zipstream")
10336 (commit (string-append "v" version))))
10337 (file-name (git-file-name name version))
10339 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
10340 (build-system python-build-system)
10342 (list python-nose))
10343 (home-page "https://github.com/arjan-s/python-zipstream")
10344 (synopsis "Zipfile generator that takes input files as well as streams")
10345 (description "@code{zipstream.py} is a zip archive generator based on
10346 @code{zipfile.py}. It was created to generate a zip file generator for
10347 streaming. This is beneficial for when you want to provide a downloadable
10348 archive of a large collection of regular files, which would be infeasible
10349 to generate the archive prior to downloading or of a very large file that
10350 you do not want to store entirely on disk or on memory.")
10351 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
10352 (license license:gpl3)))
10354 (define-public python-sentry-sdk
10356 (name "python-sentry-sdk")
10360 (method git-fetch) ; no tests in PyPI release
10361 (uri (git-reference
10362 (url "https://github.com/getsentry/sentry-python")
10364 (file-name (git-file-name name version))
10366 (base32 "128bm136l5zprr3sqqb8j3d6k5i1fhz853mzvh3w8g0w1dw763mx"))))
10367 (build-system python-build-system)
10370 (modify-phases %standard-phases
10372 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
10374 (add-installed-pythonpath inputs outputs)
10375 (invoke "python" "-m" "pytest" "-k"
10377 ;; This test requires extra dependencies.
10378 "not test_auto_enabling_integrations"
10379 "_catches_import_error"
10380 ;; Tests below run pip command.
10381 " and not test_unhandled_exception"
10382 " and not test_timeout_error"
10383 " and not test_performance_no_error"
10384 " and not test_performance_error"
10385 " and not test_traces_sampler_gets_correct"
10386 "_values_in_sampling_context"
10387 " and not test_handled_exception"
10388 ;; Tests below require network.
10389 " and not test_crumb_capture"
10390 " and not test_crumb_capture"
10391 " and not test_crumb_capture_hint"
10392 " and not test_httplib_misuse"
10393 ;; Fails with IndexError.
10394 " and not test_session_mode_defaults_to"
10395 "_request_mode_in_wsgi_handler"))))))))
10397 (list python-django
10405 python-pytest-django
10406 python-pytest-forked
10407 python-pytest-localserver
10410 (list python-certifi python-urllib3))
10411 (home-page "https://github.com/getsentry/sentry-python")
10412 (synopsis "Python SDK for Sentry")
10413 (description "This package provides a Python SDK for the Sentry
10414 application monitoring and error tracking software.")
10415 (license license:bsd-2)))
10417 (define-public python-pep8
10418 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
10419 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
10420 ;; some dependents' test suites, and nothing more.
10422 (name "python-pep8")
10427 (uri (pypi-uri "pep8" version))
10430 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
10431 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
10432 (build-system python-build-system)
10433 (home-page "https://pep8.readthedocs.org/")
10434 (synopsis "Python style guide checker")
10436 "This tools checks Python code against some of the style conventions in
10438 (license license:expat)))
10440 (define-public python-pep8-naming
10442 (name "python-pep8-naming")
10447 (uri (pypi-uri "pep8-naming" version))
10450 "1dc0b6xw1cxp01v9zsv4ryk49rfs1lngfpvzsixgp8b7z3ffcf4z"))))
10451 (build-system python-build-system)
10452 (propagated-inputs (list python-flake8))
10453 (home-page "https://github.com/PyCQA/pep8-naming")
10454 (synopsis "Check PEP-8 naming conventions")
10456 "This package provides the @code{pep8-naming} Python module, a
10457 plugin for flake8 to check PEP-8 naming conventions.")
10458 (license license:expat)))
10460 (define-public python-pep517
10462 (inherit python-pep517-bootstrap)
10463 (name "python-pep517")
10465 '(#:phases (modify-phases %standard-phases
10467 (lambda* (#:key tests? #:allow-other-keys)
10468 (delete-file "pytest.ini")
10469 (delete-file "tests/test_meta.py")
10471 (invoke "pytest") #t))))))
10472 (native-inputs (list python-mock python-pytest python-testpath))))
10475 (define-public python-pep621
10477 (name "python-pep621")
10482 (uri (git-reference
10483 (url "https://github.com/FFY00/python-pep621")
10485 (file-name (git-file-name name version))
10488 "0nzig7bmzf0xx5svxlf065mrzihr0ci4p1yaxka9flqjba98flpr"))))
10489 (build-system python-build-system)
10493 #~(modify-phases %standard-phases
10494 ;; XXX: PEP 517 manual build/install procedures copied from
10498 ;; ZIP does not support timestamps before 1980.
10499 (setenv "SOURCE_DATE_EPOCH" "315532800")
10500 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
10502 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
10504 (invoke "pytest" "-vv"
10505 ;; Two parameterized test_load tests are currently
10507 ;; https://github.com/FFY00/python-pep621/issues/14).
10508 "-k" "not test_load"))))
10510 (lambda* (#:key outputs #:allow-other-keys)
10511 (let ((whl (car (find-files "dist" "\\.whl$"))))
10512 (invoke "pip" "--no-cache-dir" "--no-input"
10513 "install" "--no-deps" "--prefix" #$output whl)))))))
10514 (propagated-inputs (list python-packaging))
10515 (native-inputs (list python-pypa-build python-pytest python-tomli))
10516 (home-page "https://github.com/FFY00/python-pep621")
10517 (synopsis "Dataclass for PEP 621 metadata")
10518 (description "This project does not implement the parsing of
10519 @file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
10520 data structure representing PEP 621 metadata (already parsed), it will
10521 validate this input and generate a PEP 643-compliant metadata
10522 file (e.g. @file{PKG-INFO}).")
10523 (license license:expat)))
10525 (define-public python-pyflakes
10527 (name "python-pyflakes")
10532 (uri (pypi-uri "pyflakes" version))
10535 "0k5jn8jpxni264wxf6cc3xcd1qckc0pww30bsd77mwzdf8l5ra05"))))
10536 (build-system python-build-system)
10537 (home-page "https://github.com/PyCQA/pyflakes")
10538 (synopsis "Passive checker of Python programs")
10540 "Pyflakes statically checks Python source code for common errors.")
10541 (license license:expat)))
10543 (define-public python-pyflakes-2.2
10545 (inherit python-pyflakes)
10549 (uri (pypi-uri "pyflakes" version))
10552 "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))
10554 (search-patches "python-pyflakes-test-location.patch"))))))
10556 (define-public python-mccabe
10558 (name "python-mccabe")
10563 (uri (pypi-uri "mccabe" version))
10566 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
10567 (build-system python-build-system)
10569 (list python-toml python-pytest-bootstrap python-pytest-runner))
10570 (home-page "https://github.com/PyCQA/mccabe")
10571 (synopsis "McCabe checker, plugin for flake8")
10572 (description "This package provides a Flake8 plug-in to compute the McCabe
10573 cyclomatic complexity of Python source code.")
10574 (license license:expat)))
10576 (define-public python-flake8
10578 (name "python-flake8")
10582 (uri (pypi-uri "flake8" version))
10585 "03c7mnk34wfz7a0m5zq0273y94awz69fy5iww8alh4a4v96h6vl0"))))
10586 (build-system python-build-system)
10588 `(#:phases (modify-phases %standard-phases
10590 (lambda* (#:key tests? #:allow-other-keys)
10592 (invoke "pytest" "-v")))))))
10594 (list python-entrypoints
10598 (native-inputs (list python-pytest))
10599 (home-page "https://gitlab.com/pycqa/flake8")
10600 (synopsis "The modular source code checker: pep8, pyflakes and co")
10602 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
10603 (license license:expat)))
10605 (define-public python-flake8-3.8
10607 (inherit python-flake8)
10611 (uri (pypi-uri "flake8" version))
10614 "0fvcrsbyzjpcli8ldbpsdbpmf238nkvwc1dy4hy82lf63rvfinma"))))
10616 (list python-pycodestyle-2.6 python-entrypoints python-pyflakes-2.2
10619 (define-public python-flake8-blind-except
10621 (name "python-flake8-blind-except")
10626 (uri (pypi-uri "flake8-blind-except" version))
10628 (base32 "05nxsxfzfhwsm8gys90228imm2qbnqnw5y8bfqyfngnbkmd5fnpj"))))
10629 (build-system python-build-system)
10631 `(#:tests? #f)) ; no tests
10632 (native-inputs (list python-pycodestyle))
10633 (home-page "https://github.com/elijahandrews/flake8-blind-except")
10634 (synopsis "Check for blind @code{except:} statements")
10635 (description "This package provides a flake8 extension that checks for
10636 blind @code{except:} statements.")
10637 (license license:expat)))
10639 (define-public python-flake8-bugbear
10641 (name "python-flake8-bugbear")
10646 (uri (pypi-uri "flake8-bugbear" version))
10649 "0qiihb242fygzyrfynq913ak7cdmx8mcac9c0zk3y5gv16qf80mx"))))
10650 (build-system python-build-system)
10653 (modify-phases %standard-phases
10654 (add-before 'check 'disable-test
10656 ;; This test fails on slow computers.
10657 (substitute* "tests/test_bugbear.py"
10658 (("def test_does_not_crash_on_any_valid_code")
10659 "def _test_does_not_crash_on_any_valid_code")))))))
10661 (list python-hypothesis python-hypothesmith))
10663 (list python-attrs python-flake8))
10664 (home-page "https://github.com/PyCQA/flake8-bugbear")
10666 "Flake8 plugin for finding likely bugs and design problems in your program")
10668 "This package contains a plugin for Flake8 finding likely bugs and
10669 design problems in your program. It contains warnings that don't belong
10670 in pyflakes and pycodestyle.")
10671 (license license:expat)))
10673 (define-public python-flake8-continuation
10675 (name "python-flake8-continuation")
10680 (uri (pypi-uri "flake8-continuation" version))
10683 "0dzaw8jr7yhlabxhrblnrizxx17xa9ngjnbr1kidg5lapq6b9q1y"))))
10684 (build-system python-build-system)
10686 (list python-flake8 python-pycodestyle python-six))
10687 (home-page "https://github.com/planetlabs/flake8-continuation")
10688 (synopsis "Flake8 Line Continuation Plugin")
10689 (description "A Flake8 plugin that checks for the line continuation
10690 style to be in the preferred method according to PEP-8, specifically:
10692 The preferred way of wrapping long lines is by using Python's implied
10693 line continuation inside parentheses, brackets and braces. Long lines
10694 can be broken over multiple lines by wrapping expressions in parentheses.
10695 These should be used in preference to using a backslash for line continuation.
10697 (license license:asl2.0)))
10699 (define-public python-flake8-debugger
10701 (name "python-flake8-debugger")
10706 (uri (pypi-uri "flake8-debugger" version))
10708 (base32 "0h1qlzbxxhjsw6kg3mcml9h8byy77m9a5z06z2dnvqs115b05c2j"))))
10709 (build-system python-build-system)
10711 `(#:tests? #f)) ; no tests in PyPI and no setup.py in GitHub
10713 (list python-flake8 python-pycodestyle))
10714 (home-page "https://github.com/jbkahn/flake8-debugger")
10715 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
10716 (description "This package provides a Flake8 plugin that checks for
10717 @code{ipdb} and @code{pdb} imports and set traces, as well as
10718 @code{from IPython.terminal.embed}, @code{import InteractiveShellEmbed}
10719 and @code{InteractiveShellEmbed()()}.")
10720 (license license:expat)))
10722 (define-public python-flake8-implicit-str-concat
10724 (name "python-flake8-implicit-str-concat")
10729 (uri (pypi-uri "flake8_implicit_str_concat" version))
10731 (base32 "1v0y29xlmbr2q12a4nnpm1dm9aw1mjiys1x8jif4z8c90d63cqm6"))))
10732 (build-system python-build-system)
10734 '(#:tests? #f ;no tests
10735 #:phases (modify-phases %standard-phases
10736 (add-after 'unpack 'loosen-requirements
10738 ;; Permit newer versions of attrs. Remove for >0.2.
10739 (substitute* "setup.py"
10740 ((", <21") "")))))))
10742 (list python-attrs python-more-itertools))
10743 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
10744 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
10746 "This is a plugin for the Python code checking tool Flake8 to encourage
10747 correct string literal concatenation.
10749 It looks for style problems like implicitly concatenated string literals on
10750 the same line (which can be introduced by the code formatting tool Black), or
10751 unnecessary plus operators for explicit string literal concatenation.")
10752 (license license:expat)))
10754 (define-public python-flake8-print
10756 (name "python-flake8-print")
10761 (uri (pypi-uri "flake8-print" version))
10763 (base32 "05k5kkvyk6fdmvnacxfzypk74vbl3pmva13dqg1aljfwnxsc7yjs"))))
10764 (build-system python-build-system)
10766 (list python-flake8 python-pycodestyle python-six))
10767 (home-page "https://github.com/jbkahn/flake8-print")
10768 (synopsis "Print statement checker plugin for Flake8")
10770 "This plugin for Flake8 checks for @code{print} statements in Python
10772 (license license:expat)))
10774 (define-public python-flake8-pyi
10776 (name "python-flake8-pyi")
10777 (version "20.10.0")
10781 (uri (pypi-uri "flake8-pyi" version))
10784 "0b27n2pmrxcc7nva4wp2i7mrag0fnq0firvhg1ljq593a45b5qyf"))))
10785 (build-system python-build-system)
10787 (list python-attrs python-flake8 python-pyflakes))
10788 (home-page "https://github.com/ambv/flake8-pyi")
10790 "Flake8 plugin that provides specializations for type hinting stub files")
10792 "This package contains a plugin that provides specializations for
10793 type hinting stub files, especially interesting for linting typeshed. It
10794 adds the @file{.pyi} extension to the default value of the @code{--filename}
10795 command-line argument to Flake8. This means stubs are linted by default with
10796 this plugin enabled, without needing to explicitly list every file. It
10797 modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
10798 expressions after the entire file has been read. This enables support for
10799 first-class forward references that stub files use.")
10800 (license license:expat)))
10802 (define-public python-flake8-pie
10804 (name "python-flake8-pie")
10809 (uri (pypi-uri "flake8-pie" version))
10811 (base32 "0kgipl5gljlp7aa7ykx15pswpzkd0d0qiznihb2z0d9a73181dyd"))))
10812 (build-system python-build-system)
10813 (home-page "https://github.com/sbdchd/flake8-pie")
10814 (synopsis "Flake8 extension that implements lints")
10816 "This package provides a flake8 extension that implements miscellaneous
10818 (license license:bsd-2)))
10820 (define-public python-flake8-quotes
10822 (name "python-flake8-quotes")
10827 (uri (pypi-uri "flake8-quotes" version))
10830 "0ph5s6lxgpzz4an0ax6s5xjqypqmngwr5b1i0h9pqhzghplic49z"))))
10831 (build-system python-build-system)
10833 (list python-flake8))
10834 (home-page "https://github.com/zheller/flake8-quotes/")
10835 (synopsis "Flake8 lint for quotes")
10836 (description "This package provides a Flake8 lint for quotes.")
10837 (license license:expat)))
10839 (define-public python-flake8-todo
10841 (name "python-flake8-todo")
10846 (uri (pypi-uri "flake8-todo" version))
10849 "05arm0sch3r8248035kilmf01z0mxsahw6vpbbz0d343zy8m8k3f"))))
10850 (build-system python-build-system)
10852 (list python-pycodestyle))
10853 (home-page "https://github.com/schlamar/flake8-todo")
10854 (synopsis "TODO notes checker, plugin for flake8")
10856 "This package provides the @code{flake8-todo} Python module, a
10857 TODO notes checker plugin for flake8.")
10858 (license license:expat)))
10860 (define-public python-flake8-isort
10862 (name "python-flake8-isort")
10867 (uri (pypi-uri "flake8-isort" version))
10869 (base32 "05r7z0j9rqgy0a9261bhisairrz6w8hy5hy5kf2mhvhfnx53056q"))))
10870 (build-system python-build-system)
10874 #~(modify-phases %standard-phases
10876 (lambda* (#:key tests? #:allow-other-keys)
10878 (invoke "pytest" "-vv")))))))
10879 (propagated-inputs (list python-flake8 python-isort python-testfixtures))
10880 (native-inputs (list python-pytest))
10881 (home-page "https://github.com/gforcada/flake8-isort")
10882 (synopsis "Flake8 plugin integrating isort")
10883 (description "This package provides a flake8 plugin that integrates isort,
10884 extending flake8 so that it can warn about badly sorted Python import
10886 (license license:gpl2+)))
10888 (define-public python-autoflake
10890 (name "python-autoflake")
10895 (uri (pypi-uri "autoflake" version))
10897 (base32 "0nzr057dbmgprp4a52ymafdkdd5zp2wcqf42913xc7hhvvdbj338"))))
10898 (build-system python-build-system)
10900 (list python-pyflakes))
10901 (home-page "https://github.com/myint/autoflake")
10902 (synopsis "Removes unused imports and unused variables")
10904 "@code{autoflake} removes unused imports and unused variables from Python
10905 code as reported by @code{pyflakes}.
10907 By default, it only removes unused imports for modules that are part of the
10908 standard library. Removal of unused variables is also disabled by default.
10909 It also removes useless @code{pass} statements.")
10910 (license license:expat)))
10912 (define-public python-mistune
10914 (name "python-mistune")
10919 (uri (pypi-uri "mistune" version))
10922 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
10923 (build-system python-build-system)
10925 (list python-nose python-cython))
10926 (home-page "https://github.com/lepture/mistune")
10927 (synopsis "Markdown parser in pure Python")
10928 (description "This package provides a fast markdown parser in pure
10930 (license license:bsd-3)))
10932 ;; 2.0 is not released yet, but some packages have started using it.
10933 (define-public python-mistune-next
10935 (inherit python-mistune)
10936 (name "python-mistune-next")
10937 (version "2.0.0rc1")
10940 (uri (pypi-uri "mistune" version))
10943 "1nd7iav1ixh9hlj4hxn6lmpava88d86ys8rqm30wgvr7gjlxnas5"))))
10944 (native-inputs (list python-nose))))
10946 (define-public python-markdown
10948 (name "python-markdown")
10953 (uri (pypi-uri "Markdown" version))
10956 "0jbs73nincha8fkfxx267sfxac6pl0ckszjbqbb8gk4dhs8v9d9i"))))
10957 (build-system python-build-system)
10959 (list python-nose python-pyyaml))
10960 (home-page "https://python-markdown.github.io/")
10961 (synopsis "Python implementation of Markdown")
10963 "This package provides a Python implementation of John Gruber's
10964 Markdown. The library features international input, various Markdown
10965 extensions, and several HTML output formats. A command line wrapper
10966 markdown_py is also provided to convert Markdown files to HTML.")
10967 (license license:bsd-3)))
10969 (define-public python-mdx-include
10971 (name "python-mdx-include")
10974 ;; Use git, as there are some test files missing from the PyPI
10975 ;; release, see https://github.com/neurobin/mdx_include/issues/9
10977 (uri (git-reference
10978 (url "https://github.com/neurobin/mdx_include")
10979 ;; Releases are not tagged on github, see
10980 ;; https://github.com/neurobin/mdx_include/issues/10
10981 (commit "683e6be7a00a1ef4d673ad0294458fa61bc97286")))
10982 (file-name (git-file-name name version))
10985 "0qpzgln4ybd7pl0m9s19dv60aq9cvwrk7x3yz96kjhcywaa5w386"))))
10986 (build-system python-build-system)
10989 (modify-phases %standard-phases
10990 (add-before 'check 'disable-test-requiring-network
10992 (substitute* "mdx_include/test/test.py"
10993 (("(\\s+def )test_(cache|config|default)\\(" _ pre post)
10994 (string-append pre "__off__test_" post "("))))))))
10995 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
10996 (home-page "https://github.com/neurobin/mdx_include")
10997 (synopsis "Python Markdown extension to include local or remote files")
10998 (description "Include extension for Python Markdown. It lets you include
10999 local or remote (downloadable) files into your markdown at arbitrary
11002 This project is motivated by markdown-include and provides the same
11003 functionalities with some extras.")
11004 (license license:bsd-3)))
11006 (define-public python-ptyprocess
11008 (name "python-ptyprocess")
11013 (uri (pypi-uri "ptyprocess" version))
11016 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
11017 (build-system python-build-system)
11019 (list python-nose))
11022 (modify-phases %standard-phases
11024 (lambda _ (invoke "nosetests"))))))
11025 (home-page "https://github.com/pexpect/ptyprocess")
11026 (synopsis "Run a subprocess in a pseudo terminal")
11028 "This package provides a Python library used to launch a subprocess in a
11029 pseudo terminal (pty), and interact with both the process and its pty.")
11030 (license license:isc)))
11032 (define-public python-cram
11034 (name "python-cram")
11036 (home-page "https://bitheap.org/cram/")
11039 (uri (list (string-append home-page "cram-"
11041 (pypi-uri "cram" version)))
11044 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
11047 (modify-phases %standard-phases
11048 (add-after 'unpack 'patch-source
11050 (substitute* (find-files "cram" ".*\\.py$")
11051 ;; Replace default shell path.
11052 (("/bin/sh") (which "sh")))
11053 (substitute* (find-files "tests" ".*\\.t$")
11055 (("/bin/bash") (which "bash"))
11056 (("/bin/sh") (which "sh")))
11057 (substitute* "cram/_test.py"
11058 ;; This hack works around a bug triggered by substituting
11059 ;; the /bin/sh paths. "tests/usage.t" compares the output of
11060 ;; "cram -h", which breaks the output at 80 characters. This
11061 ;; causes the line showing the default shell to break into two
11062 ;; lines, but the test expects a single line...
11063 (("env\\['COLUMNS'\\] = '80'")
11064 "env['COLUMNS'] = '160'"))
11066 (substitute* "Makefile"
11067 ;; Recent versions of python-coverage have caused the test
11068 ;; coverage to decrease (as of version 0.7). Allow that.
11069 (("--fail-under=100")
11070 "--fail-under=90"))
11074 ;; The test phase uses the built library and executable.
11075 (lambda* (#:key inputs outputs #:allow-other-keys)
11076 (add-installed-pythonpath inputs outputs)
11077 (setenv "PATH" (string-append (getenv "PATH") ":"
11078 (assoc-ref outputs "out") "/bin"))
11079 (invoke "make" "test"))))))
11080 (build-system python-build-system)
11082 (list python-coverage which))
11083 (synopsis "Simple testing framework for command line applications")
11085 "Cram is a functional testing framework for command line applications.
11086 Cram tests look like snippets of interactive shell sessions. Cram runs each
11087 command and compares the command output in the test with the command’s actual
11089 (license license:gpl2+)))
11091 (define-public python-crccheck
11093 (name "python-crccheck")
11098 (uri (pypi-uri "crccheck" version))
11100 (base32 "15psg7wjfbpmmry54ffwg6pg63mnv7mkwmb0a7884axnr8qj55j5"))))
11101 (build-system python-build-system)
11105 #~(modify-phases %standard-phases
11107 (lambda* (#:key tests? #:allow-other-keys)
11109 (invoke "pytest" "-vv")))))))
11110 (native-inputs (list python-pytest))
11111 (home-page "https://sourceforge.net/projects/crccheck/")
11112 (synopsis "Calculation library for CRCs and checksums")
11113 (description "@code{crccheck} is a calculation library for CRCs and
11114 checksums. It implement more than a hundred checksum routines.")
11115 (license license:gpl3+)))
11117 (define-public python-crashtest
11119 (name "python-crashtest")
11124 (uri (pypi-uri "crashtest" version))
11126 (base32 "1p9p7mn8x2j9psc4jxab98897v4i9s4fliyfw8rp8v4bx1n7pjj2"))))
11127 (build-system python-build-system)
11128 (home-page "https://github.com/sdispater/crashtest")
11129 (synopsis "Manage Python errors with ease")
11131 "Python library that makes exceptions handling and inspection easier.")
11132 (license license:expat)))
11134 (define-public python-stdlib-list
11136 (name "python-stdlib-list")
11140 (uri (pypi-uri "stdlib-list" version))
11143 "17vdn4q0sdlndc2fr9svapxx6366hnrhkn0fswp1xmr0jxqh7rd1"))))
11144 (build-system python-build-system)
11146 `(#:tests? #f)) ; Tests require more dependencies.
11148 (list python-sphinx))
11149 (home-page "https://github.com/jackmaney/python-stdlib-list")
11150 (synopsis "Python Standard Libraries")
11151 (description "This package contains a list of Python Standard Libraries.")
11152 (license license:expat)))
11154 (define-public python-stopit
11156 (name "python-stopit")
11161 (uri (pypi-uri "stopit" version))
11163 (base32 "0vcrcvky249q4rbgmwf18mwmnypfk8jpn4h6knyjf86r7xc9rwzp"))))
11164 (build-system python-build-system)
11165 (arguments '(#:tests? #f)) ;there are none
11166 (home-page "https://pypi.python.org/pypi/stopit")
11167 (synopsis "Timeout control decorator and context managers")
11169 "Raise asynchronous exceptions in other threads, control the timeout of
11170 blocks or callables with two context managers and two decorators.")
11171 (license license:expat)))
11173 (define-public python-straight-plugin
11175 (name "python-straight-plugin")
11180 (uri (pypi-uri "straight.plugin" version))
11183 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
11184 (build-system python-build-system)
11185 (home-page "https://github.com/ironfroggy/straight.plugin")
11186 (synopsis "Simple namespaced plugin facility")
11187 (description "Straight Plugin provides a type of plugin you can create from
11188 almost any existing Python modules, and an easy way for outside developers to
11189 add functionality and customization to your projects with their own plugins.")
11190 (license license:expat)))
11192 (define-public python-pysendfile
11194 (name "python-pysendfile")
11199 (uri (pypi-uri "pysendfile" version))
11201 (base32 "05qf0m32isflln1zjgxlpw0wf469lj86vdwwqyizp1h94x5l22ji"))))
11202 (build-system python-build-system)
11205 #:phases #~(modify-phases %standard-phases
11207 (lambda* (#:key tests? #:allow-other-keys)
11209 (setenv "HOME" "/tmp")
11210 (invoke "make" "test")))))))
11211 (home-page "https://github.com/giampaolo/pysendfile")
11212 (synopsis "Python interface to sendfile(2)")
11213 (description "The @{pysendfile} Python library provides an interface to
11214 the @code{sendfile(2)} system call.")
11215 (license license:expat)))
11217 (define-public python-pyftpdlib
11219 (name "python-pyftpdlib")
11224 (uri (pypi-uri "pyftpdlib" version))
11226 (base32 "0pnv2byzmzg84q5nmmhn1xafvfil85qa5y52bj455br93zc5b9px"))))
11227 (build-system python-build-system)
11231 #~(modify-phases %standard-phases
11233 (lambda* (#:key tests? #:allow-other-keys)
11237 ;; Deselect failing tests.
11238 "-k" (string-append
11239 ;; Using Pytest instead of the Makefile causes the
11240 ;; command line tests to fail on unknown Pytest
11242 "not TestCommandLineParser "
11243 ;; https://github.com/giampaolo/pyftpdlib/issues/478
11244 "and not test_use_gmt_times "
11245 ;; https://github.com/giampaolo/pyftpdlib/issues/550
11246 "and not test_masquerade_address "
11247 ;; https://github.com/giampaolo/pyftpdlib/issues/500
11248 "and not test_rest_on_stor "
11249 "and not test_stor_ascii"))))))))
11250 (native-inputs (list python-psutil python-pytest))
11251 (propagated-inputs (list python-pyopenssl python-pysendfile))
11252 (home-page "https://github.com/giampaolo/pyftpdlib/")
11253 (synopsis "Asynchronous and scalable Python FTP server library")
11254 (description "The Python FTP server library provides a high-level
11255 interface to write efficient, scalable and asynchronous FTP servers with
11256 Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
11257 RFC-959} FTP server implementation available for Python, and has the following
11261 It is lightweight, fast and scalable.
11263 It uses the @code{sendfile(2)} system call for uploads.
11265 It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
11268 It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
11269 IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
11270 RFC-2640}) and MLSD/MLST commands (RFC-3659).
11272 It has a flexible system of @samp{authorizers} able to manage both
11273 @samp{virtual} and @samp{real} users.
11275 (license license:expat)))
11277 (define-public python-fs
11284 (uri (pypi-uri "fs" version))
11286 (base32 "04ykd7q49qgv13hl2n71lzihs2c9099r50lmd85vgx0k2bawg5xf"))))
11287 (build-system python-build-system)
11290 #:phases #~(modify-phases %standard-phases
11292 (lambda* (#:key tests? #:allow-other-keys)
11294 (setenv "HOME" "/tmp")
11295 (invoke "pytest" "-m" "not slow")))))))
11297 (list python-appdirs python-pytz python-six))
11299 (list python-mock python-parameterized python-pyftpdlib python-pytest))
11300 (home-page "https://github.com/PyFilesystem/pyfilesystem2/")
11301 (synopsis "File system abstraction layer for Python")
11302 (description "PyFilesystem's @code{FS} object is a file system abstraction
11303 sharing similarities with Python's own @code{file} object for single files.
11304 It allows opening all the files under a given directory recursively, as a
11305 single @code{FS} object. This enables, for example, counting the combined
11306 number of lines in the contained files easily.")
11307 (license license:expat)))
11309 ;;; Tests are left out in the main package to avoid cycles.
11310 (define-public python-fonttools
11313 (name "python-fonttools")
11317 (uri (pypi-uri "fonttools" version ".zip"))
11320 "1jhl5n3rfqq7fznvsh6r80n7ylap1a7ppq1040y8cflhyz80ap2l"))))
11321 (build-system python-build-system)
11324 (arguments '(#:tests? #f))
11325 (home-page "https://github.com/fonttools/fonttools")
11326 (synopsis "Tools to manipulate font files")
11328 "FontTools/TTX is a library to manipulate font files from Python. It
11329 supports reading and writing of TrueType/OpenType fonts, reading and writing
11330 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
11331 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
11332 from an XML-based format.")
11333 (license license:expat))))
11335 ;;; Rename 'python-fonttools' in next cycle, renaming the current
11336 ;;; 'python-fonttools' to 'python-fonttools-minimal'.
11337 (define-public python-fonttools-full
11338 (package/inherit python-fonttools
11340 (substitute-keyword-arguments (package-arguments python-fonttools)
11342 (not (%current-target-system)))
11343 ((#:phases phases '%standard-phases)
11344 `(modify-phases ,phases
11346 (lambda* (#:key tests? #:allow-other-keys)
11348 (invoke "pytest" "-vv"
11350 ;; XXX: These tests need .trm files that are
11351 ;; not shipped with the PyPI release.
11352 (format #f "not ~a"
11354 '("test_read_fontdimens_mathsy"
11355 "test_read_fontdimens_mathex"
11356 "test_read_fontdimens_vanilla"
11357 "test_read_boundary_char"
11358 "fontTools.tfmLib")
11359 " and not "))))))))))
11361 (modify-inputs (package-native-inputs python-fonttools)
11362 (append python-pytest)))
11364 (list python-brotli
11369 python-unicodedata2
11371 (properties (alist-delete 'hidden? (package-properties python-fonttools)))))
11373 (define-public python-fonttools-next
11375 (inherit python-fonttools-full)
11378 (inherit (package-source python-fonttools-full))
11380 (uri (pypi-uri "fonttools" version ".zip"))
11383 "14nk43z0dmznypm3zp4sdc04x1y608jawlnmwdkk32a947khvaar"))))))
11385 (define-public python-ly
11392 (uri (pypi-uri name version))
11395 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
11396 (build-system python-build-system)
11398 ;; FIXME: Some tests need network access.
11400 (synopsis "Tool and library for manipulating LilyPond files")
11401 (description "This package provides a Python library to parse, manipulate
11402 or create documents in LilyPond format. A command line program ly is also
11403 provided that can be used to do various manipulations with LilyPond files.")
11404 (home-page "https://pypi.org/project/python-ly/")
11405 (license license:gpl2+)))
11407 (define-public python-appdirs
11409 (name "python-appdirs")
11414 (uri (pypi-uri "appdirs" version))
11417 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
11418 (build-system python-build-system)
11419 (home-page "https://github.com/ActiveState/appdirs")
11421 "Determine platform-specific dirs, e.g. a \"user data dir\"")
11423 "This module provides a portable way of finding out where user data
11424 should be stored on various operating systems.")
11425 (license license:expat)))
11427 (define-public python-gorilla
11429 (name "python-gorilla")
11433 (uri (pypi-uri "gorilla" version))
11436 "0b40blcp6fih4nvqbilra4qw1dfccv1ahjmr41ac4d9rjadqkcpy"))))
11437 (build-system python-build-system)
11438 (home-page "https://github.com/christophercrouzet/gorilla")
11439 (synopsis "Convenient monkey patching with Python")
11441 "Gorilla is a Python library that provides a convenient approach to
11442 monkey patching. Monkey patching is the process of modifying module and
11443 class attributes at runtime with the purpose of replacing or extending
11444 third-party code.")
11445 (license license:expat)))
11447 (define-public python-llfuse
11449 (name "python-llfuse")
11453 (uri (pypi-uri "llfuse" version))
11456 "1jaf790rsxvz3hs9fbr3hrnmg0xzl6a2bqfa10bbbsjsdbcpk762"))))
11457 (build-system python-build-system)
11461 (list pkg-config python-pytest))
11462 (synopsis "Python bindings for FUSE")
11464 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
11465 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
11466 (license license:lgpl2.0+)))
11468 (define-public python-msgpack
11470 (name "python-msgpack")
11474 (uri (pypi-uri "msgpack" version))
11477 "0pqzy1zclyhd42gfibhkcqymbspy5a6v421g87mh40h3iz0nkn7m"))))
11478 (build-system python-build-system)
11480 `(#:modules ((guix build utils)
11481 (guix build python-build-system)
11486 (modify-phases %standard-phases
11489 (invoke "pytest" "-v" "test"))))))
11491 (list python-pytest))
11492 (synopsis "MessagePack (de)serializer")
11493 (description "MessagePack is a fast, compact binary serialization format,
11494 suitable for similar data to JSON. This package provides CPython bindings for
11495 reading and writing MessagePack data.")
11496 (home-page "https://pypi.org/project/msgpack/")
11497 (license license:asl2.0)))
11499 (define-public python-msgpack-1.0.2
11501 (inherit python-msgpack)
11505 (uri (pypi-uri "msgpack" version))
11508 "1109s2yynrahwi64ikax68hx0mbclz8p35afmpphw5dwynb49q7s"))))))
11510 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
11511 ;; release 0.5. Some packages like borg still call it by the old name for now.
11512 ;; <https://bugs.gnu.org/30662>
11513 (define-public python-msgpack-transitional
11515 (inherit python-msgpack)
11516 (name "python-msgpack-transitional")
11520 (uri (pypi-uri "msgpack" version))
11523 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
11525 (substitute-keyword-arguments (package-arguments python-msgpack)
11527 `(modify-phases ,phases
11528 (add-after 'unpack 'configure-transitional
11530 ;; Keep using the old name.
11531 (substitute* "setup.py"
11532 (("TRANSITIONAL = False")
11533 "TRANSITIONAL = 1"))
11534 ;; This old version is not compatible with Python 3.9
11535 (substitute* '("test/test_buffer.py" "test/test_extension.py")
11536 ((".tostring\\(") ".tobytes("))
11537 (substitute* '("test/test_buffer.py" "test/test_extension.py")
11538 ((".fromstring\\(") ".frombytes("))
11541 (define-public python-netaddr
11543 (name "python-netaddr")
11548 (uri (pypi-uri "netaddr" version))
11551 "0hx2npi0wnhwlcybilgwlddw6qffx1mb7a3sj4p9s7bvl33mgk6n"))))
11552 (build-system python-build-system)
11553 (arguments `(#:tests? #f)) ;; No tests.
11554 (home-page "https://github.com/drkjam/netaddr/")
11555 (synopsis "Pythonic manipulation of network addresses")
11557 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
11558 and MAC network addresses.")
11559 (license license:bsd-3)))
11561 (define-public python-wrapt
11563 (name "python-wrapt")
11568 (uri (pypi-uri "wrapt" version))
11571 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
11572 (build-system python-build-system)
11574 ;; Tests are not included in the tarball, they are only available in the
11577 (home-page "https://github.com/GrahamDumpleton/wrapt")
11578 (synopsis "Module for decorators, wrappers and monkey patching")
11580 "The aim of the wrapt module is to provide a transparent object proxy for
11581 Python, which can be used as the basis for the construction of function
11582 wrappers and decorator functions.")
11583 (license license:bsd-2)))
11585 (define-public python-commentjson
11587 (name "python-commentjson")
11590 ;; The PyPI release is missing some test files.
11592 (uri (git-reference
11593 (url "https://github.com/vaidik/commentjson")
11594 (commit (string-append "v" version))))
11595 (file-name (git-file-name name version))
11598 "01iscgrc6bkyrxbzmf46csbf9c0n7g6dygdmxs3fq8fkzrrciybl"))))
11599 (build-system python-build-system)
11601 `(#:modules ((guix build python-build-system)
11604 (ice-9 textual-ports))
11606 (modify-phases %standard-phases
11607 (add-after 'unpack 'relax-requirements
11609 (substitute* "setup.py"
11610 (("lark-parser>=0.7.1,<0.8.0")
11611 "lark-parser>=0.7.1"))))
11612 (add-after 'unpack 'delete-unspported-tests
11613 ;; Some tests rely on the 'test' module of Python itself,
11614 ;; which is not available with the Python package in Guix;
11617 ;; XXX: Copied from (guix build dub-build-system).
11618 (define (grep string file-name)
11619 (string-contains (call-with-input-file file-name get-string-all)
11622 (with-directory-excursion "commentjson/tests/test_json"
11623 (let* ((dot? (lambda (x) (member x '("." ".."))))
11624 (test-files (scandir "." (negate dot?))))
11625 (for-each delete-file
11626 (filter (lambda (f) (grep "from test." f))
11627 test-files)))))))))
11629 (list python-lark-parser))
11632 (home-page "https://github.com/vaidik/commentjson")
11633 (synopsis "Python library for adding comments to JSON files")
11634 (description "Comment JSON is a Python package that helps you create JSON
11635 files with Python and JavaScript style inline comments. Its API is very
11636 similar to the Python standard library's @code{json} module.")
11637 (license license:expat)))
11639 (define-public python-resolvelib
11641 (name "python-resolvelib")
11645 ;; Tests are missing from the PyPI release.
11647 (uri (git-reference
11648 (url "https://github.com/sarugaku/resolvelib")
11650 (file-name (git-file-name name version))
11653 "1fqz75riagizihvf4j7wc3zjw6kmg1dd8sf49aszyml105kb33n8"))))
11654 (build-system python-build-system)
11657 (modify-phases %standard-phases
11659 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
11661 (add-installed-pythonpath inputs outputs)
11662 (invoke "pytest")))))))
11664 (list python-commentjson python-packaging python-pytest))
11665 (home-page "https://github.com/sarugaku/resolvelib")
11666 (synopsis "Abstract dependencies resolver")
11667 (description "The ResolveLib library provides a @code{Resolver} class that
11668 includes dependency resolution logic.")
11669 (license license:isc)))
11671 ;;; This older version is required by ansible-core.
11672 (define-public python-resolvelib-0.5
11673 (package/inherit python-resolvelib
11674 (name "python-resolvelib")
11679 (uri (git-reference
11680 (url "https://github.com/sarugaku/resolvelib")
11682 (file-name (git-file-name name version))
11685 "0697y330sqhiclk25v151qxg7aixzpj434lbg5qib0qlna5zg9la"))))))
11687 (define-public python-commonmark
11689 (name "python-commonmark")
11694 (uri (pypi-uri "commonmark" version))
11696 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
11697 (build-system python-build-system)
11700 (modify-phases %standard-phases
11702 (lambda* (#:key inputs outputs #:allow-other-keys)
11703 (add-installed-pythonpath inputs outputs)
11704 (invoke "python" "setup.py" "test"))))))
11705 (home-page "https://github.com/readthedocs/commonmark.py")
11706 (synopsis "Python parser for the CommonMark Markdown spec")
11708 "This module is a pure Python port of jgm's @code{commonmark.js}, a
11709 Markdown parser and renderer for the CommonMark specification, using only
11711 (license license:bsd-3)))
11713 (define-public python-xlrd
11715 (name "python-xlrd")
11718 ;; The tests are not included in the PyPI archive.
11720 (uri (git-reference
11721 (url "https://github.com/python-excel/xlrd")
11723 (file-name (git-file-name name version))
11726 "170asszffvf6rh5w169ic4h5kxgjkmdl3060vw737d4g1qfifvzz"))))
11727 (build-system python-build-system)
11729 (list python-pytest))
11730 (home-page "http://www.python-excel.org/")
11731 (synopsis "Library for extracting data from Excel files")
11732 (description "This package provides a library to extract data from
11733 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
11734 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
11735 Unicode-aware. It is not intended as an end-user tool.")
11736 (license license:bsd-3)))
11738 ;;; Note: this package is unmaintained since 2018 (archived on GitHub).
11739 (define-public python-xlwt
11741 (name "python-xlwt")
11746 (uri (pypi-uri "xlwt" version))
11748 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
11749 (build-system python-build-system)
11752 (modify-phases %standard-phases
11754 (lambda* (#:key tests? #:allow-other-keys)
11756 (setenv "GUIX_PYTHONPATH"
11757 (string-append (getcwd) "/build/lib:"
11758 (getenv "GUIX_PYTHONPATH")))
11759 (invoke "nosetests" "-v")))))))
11761 `(("nose" ,python-nose)))
11762 (home-page "http://www.python-excel.org/")
11763 (synopsis "Library for creating spreadsheet Excel files")
11764 (description "@code{xlwt} is a library for writing data and formatting
11765 information to older Excel files (i.e. .xls). The package itself is pure
11766 Python with no dependencies on modules or packages outside the standard Python
11767 distribution. It is not intended as an end-user tool.")
11768 (license license:bsd-3)))
11770 (define-public python-immutables
11772 (name "python-immutables")
11777 (uri (pypi-uri "immutables" version))
11779 (base32 "1x4cinh0xbl6p6p2yfm2s07mxxy3lf0zzai9gqpydk4482bwfdjk"))))
11780 (build-system python-build-system)
11781 (native-inputs (list python-mypy python-pytest))
11782 (home-page "https://github.com/MagicStack/immutables")
11783 (synopsis "High-performance immutable mapping type for Python")
11785 "An immutable mapping type for Python. The underlying datastructure is a
11786 Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
11787 functional languages.")
11788 (license license:asl2.0)))
11790 (define-public python-prettytable
11792 (name "python-prettytable")
11797 (uri (pypi-uri "prettytable" version))
11800 "1c599w31i2ndzbkn85xwsgv9sd2j16r56dl922w4jh3rs97vb3hi"))))
11801 (build-system python-build-system)
11804 #~(modify-phases %standard-phases
11806 (lambda* (#:key tests? #:allow-other-keys)
11808 (invoke "pytest" "-vv")))))))
11810 (list python-pytest
11811 python-pytest-lazy-fixture
11812 python-setuptools-scm))
11813 (propagated-inputs (list python-wcwidth))
11814 (home-page "https://github.com/jazzband/prettytable")
11815 (synopsis "Display tabular data in an ASCII table format")
11817 "A library designed to represent tabular data in visually appealing ASCII
11818 tables. PrettyTable allows for selection of which columns are to be printed,
11819 independent alignment of columns (left or right justified or centred) and
11820 printing of sub-tables by specifying a row range.")
11821 (license license:bsd-3)))
11823 (define-public python-curio
11825 (name "python-curio")
11830 (uri (pypi-uri "curio" version))
11832 (base32 "045wwg16qadsalhicbv21p14sj8i4w0l57639j7dmdqbb4p2225g"))))
11833 (build-system python-build-system)
11836 (modify-phases %standard-phases
11838 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
11840 (add-installed-pythonpath inputs outputs)
11841 (invoke "pytest" "-vv" "-k"
11843 ;; Tries to open an outgoing connection.
11844 "not test_ssl_outgoing "
11845 ;; This test fails since Python 3.9.9 (see:
11846 ;; https://github.com/dabeaz/curio/issues/347).
11847 "and not test_timeout"))))))))
11849 (list python-pytest))
11850 (home-page "https://github.com/dabeaz/curio")
11851 (synopsis "Coroutine-based library for concurrent Python")
11853 "Curio is a coroutine-based library for concurrent Python systems
11854 programming. It provides standard programming abstractions such as as
11855 tasks, sockets, files, locks, and queues.")
11856 (license license:bsd-3)))
11858 (define-public python-tables
11860 (name "python-tables")
11865 (uri (pypi-uri "tables" version))
11868 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
11869 (modules '((guix build utils)))
11872 ;; Remove pre-compiled .pyc files from source.
11873 (for-each delete-file-recursively
11874 (find-files "." "__pycache__" #:directories? #t))
11875 (for-each delete-file (find-files "." "\\.pyc$"))
11877 (build-system python-build-system)
11879 `(;; FIXME: python-build-system does not pass configure-flags to "build"
11880 ;; or "check", so we must override the build and check phases.
11882 (modify-phases %standard-phases
11883 (add-after 'unpack 'use-gcc
11885 (substitute* "setup.py"
11886 (("^( +)compiler = new_compiler\\(\\)" line indent)
11887 (string-append line
11890 "compiler.set_executables(compiler='gcc',"
11891 "compiler_so='gcc',"
11892 "linker_exe='gcc',"
11893 "linker_so='gcc -shared')")))
11895 (add-after 'unpack 'disable-tuning
11897 (substitute* "setup.py"
11898 (("cpu_flags = .*")
11899 "cpu_flags = ['sse2']\n"))
11902 (lambda* (#:key inputs #:allow-other-keys)
11903 (invoke "python" "setup.py" "build"
11904 (string-append "--hdf5="
11905 (assoc-ref inputs "hdf5")))))
11907 (lambda* (#:key inputs #:allow-other-keys)
11908 (invoke "python" "setup.py" "check"
11909 (string-append "--hdf5="
11910 (assoc-ref inputs "hdf5"))))))))
11912 (list python-numexpr python-numpy))
11914 (list python-cython pkg-config))
11916 (list hdf5-1.10 bzip2 zlib))
11917 (home-page "https://www.pytables.org/")
11918 (synopsis "Hierarchical datasets for Python")
11919 (description "PyTables is a package for managing hierarchical datasets and
11920 designed to efficiently cope with extremely large amounts of data.")
11921 (license license:bsd-3)))
11923 (define-public python-sniffio
11925 (name "python-sniffio")
11930 (uri (pypi-uri "sniffio" version))
11932 (base32 "1pnkvi6wvn4qd37y69n1ls6n8l63gfmn3pvb1jb50gqxxkn6wrn4"))))
11933 (build-system python-build-system)
11936 (modify-phases %standard-phases
11939 (invoke "pytest" "-vv"))))))
11941 (list python-curio python-pytest python-pytest-cov))
11942 (home-page "https://github.com/python-trio/sniffio")
11943 (synopsis "Detect which async library a program is running under")
11944 (description "This package detects which async library a program is
11945 running under. It supports multiple async I/O packages, like Trio, and
11947 ;; Either license applies.
11948 (license (list license:expat license:asl2.0))))
11950 (define-public python-pytest-black
11952 (name "python-pytest-black")
11957 (uri (pypi-uri "pytest-black" version))
11960 "19bmbcnaq02md8nnj6pywri3vps8sxnhysbfy386qkbn9w09ncqx"))))
11961 (build-system python-build-system)
11963 (list python-pytest python-black python-toml))
11965 (list python-setuptools-scm))
11966 (home-page "https://github.com/shopkeep/pytest-black")
11967 (synopsis "Pytest plugin to enable format checking with black")
11969 "This package provides a pytest plugin to enable format checking with the
11970 Python code formatter \"black\".")
11971 (license license:expat)))
11973 (define-public python-geojson
11975 (name "python-geojson")
11980 (uri (pypi-uri "geojson" version))
11982 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
11983 (build-system python-build-system)
11985 ;; https://github.com/jazzband/geojson/issues/175
11987 (home-page "https://github.com/jazzband/geojson")
11988 (synopsis "Python bindings and utilities for GeoJSON")
11990 "This package provides Python bindings and utilities for
11991 @uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
11993 (license license:bsd-3)))
11995 (define-public wfetch
11996 (let ((commit "e1cfa37814aebc9eb56ce994ebe877b6a6f9a715")
12000 (version (git-version "0.1-pre" revision commit))
12001 (home-page "https://github.com/Gcat101/Wfetch")
12005 (uri (git-reference (url home-page)
12007 (file-name (git-file-name name version))
12009 (base32 "1dmr85plx8zr6s14ym3r32g6crwxghkval5a24ah90ijx4dbn5q5"))))
12010 (build-system python-build-system)
12012 `(#:use-setuptools? #f ; no setup.py
12013 #:tests? #f ; no test suite
12015 (modify-phases %standard-phases
12018 (lambda* (#:key outputs #:allow-other-keys)
12019 (let* ((out (assoc-ref outputs "out"))
12020 (bin (string-append out "/bin"))
12021 (share (string-append out "/share")))
12023 (substitute* "wfetch/wfetch.py"
12024 (("os.sep, 'opt', 'wfetch'") (string-append "'" share "'")))
12025 (install-file "wfetch/wfetch.py" bin)
12026 (copy-recursively "wfetch/icons" share)))))))
12027 (inputs (list python-pyowm python-fire python-termcolor python-requests))
12028 (synopsis "Command-line tool to display weather info")
12030 "This package provides a tool similar to Neofetch/pfetch, but for
12031 weather: it can display the weather condition, temperature, humidity, etc.
12033 To use it, you must first run:
12036 export WEATHER_CLI_API=@var{your OpenWeatherMap API key}
12038 (license license:gpl3+))))
12040 (define-public python-get-version
12042 (name "python-get-version")
12047 (uri (pypi-uri "get_version" version))
12050 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
12051 (build-system python-build-system)
12053 (list python-pygments
12055 python-pytest-black
12059 (home-page "https://github.com/flying-sheep/get_version")
12060 (synopsis "Version helper in the spirit of versioneer")
12062 "This package provides a version helper that lets you automatically use
12063 the latest @code{vX.X.X} Git tag as the version in your Python package. It
12064 also supports getting the version from Python source distributions or, once
12065 your package is installed, via @code{pkg_resources} (part of
12066 @code{setuptools}).")
12067 (license license:gpl3+)))
12069 (define-public python-filetype
12071 (name "python-filetype")
12076 (uri (pypi-uri "filetype" version))
12078 (base32 "05mkinkcn36v1cnb5hzay3zxmv7jmmflckxxp08rgzbkkf3i9pvp"))))
12079 (build-system python-build-system)
12082 (modify-phases %standard-phases
12084 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
12086 (add-installed-pythonpath inputs outputs)
12087 (invoke "python" "-m" "pytest" "-k"
12089 ;; Both tests fail with FileNotFoundError.
12090 "not test_infer_zip_from_disk"
12091 " and not test_infer_tar_from_disk"))))))))
12093 (list python-pytest python-pytest-benchmark))
12094 (home-page "https://github.com/h2non/filetype.py")
12095 (synopsis "Infer file type and MIME type of any file/buffer")
12096 (description "@code{filetype} is a small and dependency free Python
12097 package to infer file type and MIME type checking the magic numbers
12098 signature of a file or buffer.")
12099 (license license:expat)))
12101 (define-public python-cachelib
12103 (name "python-cachelib")
12108 (uri (pypi-uri "cachelib" version))
12110 (base32 "0p4chkvbvffcllsny5rpzmsq2vyr24ql3kzif4ha0fxp3fp7vqk8"))))
12111 (build-system python-build-system)
12114 (modify-phases %standard-phases
12116 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
12118 (add-installed-pythonpath inputs outputs)
12119 (invoke "pytest")))))))
12121 (list python-pytest python-pytest-xprocess))
12122 (home-page "https://github.com/pallets/cachelib")
12123 (synopsis "Collection of cache libraries")
12124 (description "Cachelib is a library extracted from @code{werkzeug} which
12125 provides a collection of cache libraries in the same API interface.")
12126 (license license:bsd-3)))
12128 (define-public python-pylru
12130 (name "python-pylru")
12135 (uri (pypi-uri "pylru" version))
12137 (base32 "15yj46307sw703vjfkgnr04dqvaicmfcj0hc6yrciildp55r6bs9"))))
12138 (build-system python-build-system)
12141 (modify-phases %standard-phases
12143 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
12145 (add-installed-pythonpath inputs outputs)
12146 (invoke "python" "test.py")))))))
12147 (home-page "https://github.com/jlhutch/pylru")
12148 (synopsis "Least recently used (LRU) cache implementation")
12150 "Pylru implements a true LRU cache along with several support classes.
12151 Pylru provides a cache class with a simple dict interface. It also provides
12152 classes to wrap any object that has a dict interface with a cache. Both
12153 write-through and write-back semantics are supported. Pylru also provides
12154 classes to wrap functions in a similar way, including a function decorator.")
12155 (license license:gpl2+)))
12157 (define-public python-legacy-api-wrap
12159 (name "python-legacy-api-wrap")
12164 (uri (pypi-uri "legacy-api-wrap" version))
12167 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
12168 (build-system python-build-system)
12170 (list python-get-version python-pytest python-pytest-black
12171 python-pytest-cov python-setuptools))
12172 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
12173 (synopsis "Legacy API wrapper")
12174 (description "This module defines a decorator to wrap legacy APIs. The
12175 primary use case is APIs defined before keyword-only parameters existed.")
12176 (license license:gpl3+)))
12178 (define-public python-langdetect
12180 (name "python-langdetect")
12185 (uri (pypi-uri "langdetect" version))
12187 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
12188 (build-system python-build-system)
12191 (home-page "https://github.com/Mimino666/langdetect")
12192 (synopsis "Language detection library")
12194 "This library is a port of Nakatani Shuyo's language-detection library
12195 (version from 03/03/2014) to Python.")
12196 (license license:expat)))
12198 (define-public python-pyasn1
12200 (name "python-pyasn1")
12205 (uri (pypi-uri "pyasn1" version))
12208 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
12209 (build-system python-build-system)
12210 (home-page "http://pyasn1.sourceforge.net/")
12211 (synopsis "ASN.1 types and codecs")
12213 "This is an implementation of ASN.1 types and codecs in Python. It is
12214 suitable for a wide range of protocols based on the ASN.1 specification.")
12215 (license license:bsd-2)))
12217 (define-public python-pyasn1-modules
12219 (name "python-pyasn1-modules")
12224 (uri (pypi-uri "pyasn1-modules" version))
12227 "0pp6dcagd8c2c9qx3lahc1rdwlnmm0y0siqr5icjq2r32b3q8pwh"))))
12228 (build-system python-build-system)
12230 (list python-pyasn1))
12231 (home-page "https://sourceforge.net/projects/pyasn1/")
12232 (synopsis "ASN.1 codec implementations")
12234 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
12235 implementations of ASN.1-based codecs and protocols.")
12236 (license license:bsd-3)))
12238 (define-public python-ipaddress
12240 (name "python-ipaddress")
12244 (uri (pypi-uri "ipaddress" version))
12247 "1qp743h30s04m3cg3yk3fycad930jv17q7dsslj4mfw0jlvf1y5p"))))
12248 (build-system python-build-system)
12249 (home-page "https://github.com/phihag/ipaddress")
12250 (synopsis "IP address manipulation library")
12252 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
12253 in Python. This library is used to create, poke at, and manipulate IPv4 and
12254 IPv6 addresses and networks.")
12255 (license license:psfl)))
12257 (define-public python-asn1tools
12259 (name "python-asn1tools")
12260 (version "0.158.0")
12264 (uri (pypi-uri "asn1tools" version))
12266 (base32 "1k88a1azmyvp2ab6qcf2i40dig5abhyn7cmlyhmwwh8kr3syvma0"))))
12267 (build-system python-build-system)
12269 (list python-bitstruct python-diskcache python-prompt-toolkit
12271 (home-page "https://github.com/eerimoq/asn1tools")
12272 (synopsis "ASN.1 parsing, encoding and decoding")
12273 (description "This package provides ASN.1 parsing, encoding and decoding
12274 for Python, including constraints checking. It supports several
12275 codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
12276 for OER and UPER.")
12277 (license license:expat)))
12279 (define-public python-idna
12281 (name "python-idna")
12286 (uri (pypi-uri "idna" version))
12289 "0v8f6qjfi5i7qc5icsbv2pi24qy6k6m8wjqjvdf2sxjvlpq3yr4x"))))
12290 (build-system python-build-system)
12291 (home-page "https://github.com/kjd/idna")
12292 (synopsis "Internationalized domain names in applications")
12294 "This is a library to support the Internationalised Domain Names in
12295 Applications (IDNA) protocol as specified in RFC 5891. This version of the
12296 protocol is often referred to as “IDNA2008” and can produce different results
12297 from the earlier standard from 2003. The library is also intended to act as a
12298 suitable drop-in replacement for the “encodings.idna” module that comes with
12299 the Python standard library but currently only supports the older 2003
12301 (license license:bsd-4)))
12303 (define-public python-libsass
12305 (name "python-libsass")
12309 ;; PyPI tarball is missing some test files.
12311 (uri (git-reference
12312 (url "https://github.com/sass/libsass-python")
12314 (file-name (git-file-name name version))
12316 (base32 "1r0kgl7i6nnhgjl44sjw57k08gh2qr7l8slqih550dyxbf1akbxh"))))
12317 (build-system python-build-system)
12320 (modify-phases %standard-phases
12321 ;; Use Guix package of libsass instead of compiling from a checkout.
12322 (add-before 'build 'set-libsass
12323 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
12325 (lambda* (#:key tests? #:allow-other-keys)
12327 (invoke "pytest" "sasstests.py"))))
12328 (add-after 'install 'delete-test
12329 (lambda* (#:key inputs outputs #:allow-other-keys)
12330 ;; Delete sasstests.py because it attempts to open a file
12331 ;; that is not installed when loaded, which breaks the sanity
12333 (delete-file (string-append
12334 (assoc-ref outputs "out")
12338 (search-input-file inputs "bin/python"))))
12339 "/site-packages/sasstests.py")))))))
12341 (list python-pytest python-werkzeug))
12346 (home-page "https://sass.github.io/libsass-python/")
12347 (synopsis "Straightforward binding of libsass for Python")
12349 "This package provides a simple Python extension module @code{sass} which
12350 is binding LibSass.")
12351 (license license:expat)))
12353 (define-public python-idna-ssl
12355 (name "python-idna-ssl")
12360 (uri (pypi-uri "idna-ssl" version))
12363 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
12364 (build-system python-build-system)
12366 `(#:tests? #f)) ;circular dependency with python-aiohttp
12367 (propagated-inputs (list python-idna))
12368 (home-page "https://github.com/aio-libs/idna-ssl")
12369 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
12370 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
12372 (license license:expat)))
12374 ;;; Variant used to break a cycle with python-pip-run-bootstrap.
12375 (define-public python-path-bootstrap
12378 (name "python-path-bootstrap")
12383 (uri (pypi-uri "path" version))
12385 (base32 "0lig13gxnfv98v790db1smvsbd3mnj7y8rwyiwhfi6xiqibygwms"))))
12386 (build-system python-build-system)
12391 #~(modify-phases %standard-phases
12392 ;; XXX: PEP 517 manual build/install procedures copied from
12396 ;; ZIP does not support timestamps before 1980.
12397 (setenv "SOURCE_DATE_EPOCH" "315532800")
12398 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
12400 (lambda* (#:key outputs #:allow-other-keys)
12401 (let ((whl (car (find-files "dist" "\\.whl$"))))
12402 (invoke "pip" "--no-cache-dir" "--no-input"
12403 "install" "--no-deps" "--prefix" #$output whl)))))))
12404 (native-inputs (list python-pypa-build python-setuptools-scm))
12405 (home-page "https://github.com/jaraco/path")
12406 (synopsis "Object-oriented file system path manipulation library")
12407 (description "@code{path} (formerly @code{path.py}) implements path
12408 objects as first-class entities, allowing common operations on files to be
12409 invoked on those path objects directly.")
12410 (license license:expat))))
12412 (define-public python-path
12413 (package/inherit python-path-bootstrap
12414 (name "python-path")
12416 (substitute-keyword-arguments
12417 (package-arguments python-path-bootstrap)
12419 (not (%current-target-system)))
12420 ((#:phases phases #~%standard-phases)
12421 #~(modify-phases #$phases
12423 (lambda* (#:key tests? #:allow-other-keys)
12425 ;; Do not test the myproject.toml build as it tries to pull
12426 ;; dependencies from the Internet.
12427 (invoke "pytest" "-vv" "-k"
12430 ;; This tests assumes a root user exists.
12431 "and not test_get_owner")))))))))
12433 (modify-inputs (package-native-inputs python-path-bootstrap)
12434 (append python-appdirs
12438 python-pytest-black
12439 python-pytest-checkdocs
12441 python-pytest-enabler
12442 python-pytest-flake8
12443 python-pytest-mypy)))
12444 (properties (alist-delete 'hidden?
12445 (package-properties
12446 python-path-bootstrap)))))
12448 (define-public python-pathpy
12449 (deprecated-package "python-pathpy" python-path))
12451 (define-public python-pretend
12453 (name "python-pretend")
12458 (uri (pypi-uri "pretend" version))
12461 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
12462 (build-system python-build-system)
12463 (home-page "https://github.com/alex/pretend")
12464 (synopsis "Library for stubbing in Python")
12466 "Pretend is a library to make stubbing with Python easier. Stubbing is a
12467 technique for writing tests. You may hear the term mixed up with mocks,
12468 fakes, or doubles. Basically, a stub is an object that returns pre-canned
12469 responses, rather than doing any computation.")
12470 (license license:bsd-3)))
12472 (define-public python-pip
12474 (name "python-pip")
12479 (uri (pypi-uri "pip" version))
12482 "18b4qcijwivvkj1g0hs4w8zjbks0bjzdjcrqybnhmyx0gs2rmjc5"))))
12483 (build-system python-build-system)
12485 '(#:tests? #f)) ; there are no tests in the pypi archive.
12486 (home-page "https://pip.pypa.io/")
12487 (synopsis "Package manager for Python software")
12489 "Pip is a package manager for Python software, that finds packages on the
12490 Python Package Index (PyPI).")
12491 (license license:expat)))
12493 ;;; Variant used to break a dependency cycle with
12494 ;;; python-pytest-perf-bootstrap.
12495 (define-public python-pip-run-bootstrap
12498 (name "python-pip-run-bootstrap")
12502 (uri (git-reference
12503 (url "https://github.com/jaraco/pip-run")
12504 (commit (string-append "v" version))))
12505 (file-name (git-file-name name version))
12508 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
12509 (build-system python-build-system)
12514 #~(modify-phases %standard-phases
12515 (add-before 'build 'pretend-version
12516 ;; The version string is usually derived via setuptools-scm, but
12517 ;; without the git metadata available this fails.
12519 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
12520 (native-inputs (list python-setuptools-scm))
12521 (propagated-inputs (list python-autocommand python-path-bootstrap
12523 (home-page "https://github.com/jaraco/pip-run")
12524 (synopsis "Dynamic dependency loader for Python")
12525 (description "The @command{pip-run} command provides on-demand temporary
12526 package installation for a single interpreter run. It replaces this series of
12529 $ virtualenv --python pythonX.X --system-site-packages /tmp/env
12530 $ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
12531 $ /tmp/env/bin/python ...
12534 (license license:expat))))
12536 (define-public python-pip-run
12537 (package/inherit python-pip-run-bootstrap
12538 (name "python-pip-run")
12540 (substitute-keyword-arguments (package-arguments python-pip-run-bootstrap)
12542 (not (%current-target-system)))
12543 ((#:phases phases #~%standard-phases)
12544 #~(modify-phases #$phases
12546 (lambda* (#:key tests? #:allow-other-keys)
12548 (invoke "pytest" "-k"
12550 ;; Do not test the myproject.toml build as it tries
12551 ;; to pull dependencies from the internet.
12553 ;; These tests attempt to install dependencies from
12554 ;; the network and fail.
12555 "and not test_pkg_imported "
12556 "and not test_pkg_loaded_from_alternate_index ")))))))))
12558 (modify-inputs (package-propagated-inputs python-pip-run-bootstrap)
12559 (replace "python-path-bootstrap" python-path)))
12561 (modify-inputs (package-native-inputs python-pip-run-bootstrap)
12562 (append python-nbformat
12565 python-pytest-black
12566 python-pytest-checkdocs
12568 python-pytest-enabler
12569 python-pytest-flake8
12570 python-pytest-mypy)))
12571 (properties (alist-delete 'hidden? (package-properties
12572 python-pip-run-bootstrap)))))
12574 (define-public python-tlsh
12576 (name "python-tlsh")
12578 (home-page "https://github.com/trendmicro/tlsh")
12582 (uri (git-reference (url home-page) (commit version)))
12583 (file-name (git-file-name name version))
12585 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
12586 (build-system cmake-build-system)
12588 (list #:out-of-source? #f
12590 #~(modify-phases %standard-phases
12593 ;; Build and install the Python bindings. The underlying
12594 ;; C++ library is apparently not meant to be installed.
12595 (with-directory-excursion "py_ext"
12596 (and (system* "python" "setup.py" "build")
12597 (system* "python" "setup.py" "install"
12598 (string-append "--prefix=" #$output))))))
12599 ;; Delay tests until the phase above has run.
12601 (add-after 'install 'check
12602 (lambda* (#:key tests? #:allow-other-keys)
12603 (substitute* "Testing/python_test.sh"
12604 ;; The script sets up a working PYTHONPATH, but does not
12605 ;; export it for all subsequent test commands. Fix that.
12606 (("^PYTHONPATH=\".*" all)
12607 (string-append all "\nexport PYTHONPATH\n")))
12609 (with-directory-excursion "Testing"
12610 (invoke "./python_test.sh"))))))))
12611 (inputs (list python-wrapper)) ;for the bindings
12612 (synopsis "Fuzzy matching library for Python")
12614 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
12615 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
12616 value which can be used for similarity comparisons. Similar objects have
12617 similar hash values, which allows for the detection of similar objects by
12618 comparing their hash values. The byte stream should have a sufficient amount
12619 of complexity; for example, a byte stream of identical bytes will not generate
12621 (license license:asl2.0)))
12623 (define-public python-termcolor
12625 (name "python-termcolor")
12630 (uri (pypi-uri "termcolor" version))
12633 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
12634 (build-system python-build-system)
12636 ;; There are no tests.
12638 (home-page "https://pypi.org/project/termcolor/")
12639 (synopsis "ANSII Color formatting for terminal output")
12641 "This package provides ANSII Color formatting for output in terminals.")
12642 (license license:expat)))
12644 (define-public python-terminaltables
12646 (name "python-terminaltables")
12651 (uri (pypi-uri "terminaltables" version))
12654 "109vhldk6nv1z3hzp4dyqf6rjvlhl0y2k5k7qcm9fcrq5swhxszk"))))
12655 (build-system python-build-system)
12656 (home-page "https://github.com/Robpol86/terminaltables")
12658 "Generate simple tables in terminals from a nested list of strings")
12660 "This package makes it easy to draw tables in terminal/console
12661 applications from a list of lists of strings. It supports multi-line rows.")
12662 (license license:expat)))
12664 (define-public python-libarchive-c
12666 (name "python-libarchive-c")
12670 (uri (pypi-uri "libarchive-c" version))
12673 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
12674 (build-system python-build-system)
12676 '(#:phases (modify-phases %standard-phases
12678 'build 'reference-libarchive
12679 (lambda* (#:key inputs #:allow-other-keys)
12680 ;; Retain the absolute file name of libarchive.so.
12681 (let ((libarchive (assoc-ref inputs "libarchive")))
12682 (substitute* "libarchive/ffi.py"
12683 (("find_library\\('archive'\\)")
12684 (string-append "'" libarchive
12685 "/lib/libarchive.so'"))))))
12687 (lambda _ (invoke "pytest" "-vv"))))))
12689 (list python-mock python-pytest))
12692 (home-page "https://github.com/Changaco/python-libarchive-c")
12693 (synopsis "Python interface to libarchive")
12695 "This package provides Python bindings to libarchive, a C library to
12696 access possibly compressed archives in many different formats. It uses
12697 Python's @code{ctypes} foreign function interface (FFI).")
12698 (license license:lgpl2.0+)))
12700 (define-public python-file
12701 (package/inherit file
12702 (name "python-file")
12703 (build-system python-build-system)
12705 '(#:tests? #f ;no tests
12706 #:configure-flags '("--single-version-externally-managed" "--root=/")
12707 #:phases (modify-phases %standard-phases
12708 (add-before 'build 'change-directory
12712 (add-before 'build 'set-library-file-name
12713 (lambda* (#:key inputs #:allow-other-keys)
12714 (let ((file (assoc-ref inputs "file")))
12715 (substitute* "magic.py"
12716 (("find_library\\('magic'\\)")
12717 (string-append "'" file "/lib/libmagic.so'")))
12719 (inputs `(("file" ,file)))
12720 (native-inputs (if (%current-target-system)
12721 `(("self" ,this-package))
12723 (synopsis "Python bindings to the libmagic file type guesser")
12724 (description "This package provides Python bindings to the libmagic file
12727 Note that this module and the @code{python-magic} module both provide a
12728 @file{magic.py} file; these two modules, which are different and were
12729 developed separately, both serve the same purpose: provide Python bindings for
12732 (define-public python-pydevd
12733 ;; Use the latest commit, which includes cleanups that removes Python 2
12734 ;; syntax that would fail to build.
12735 (let ((revision "0")
12736 (commit "47e298499ef19563bb2ef5941a57046a35ae6868"))
12738 (name "python-pydevd")
12739 (version (git-version "2.8.0" revision commit))
12743 (uri (git-reference
12744 (url "https://github.com/fabioz/PyDev.Debugger")
12746 (modules '((guix build utils)))
12748 ;; Delete pre-built binaries.
12749 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
12750 ;; This source is generated via Cython.
12751 (delete-file "_pydevd_bundle/pydevd_cython.c")))
12752 (file-name (git-file-name name version))
12755 "1yd017dh6xgxrqcyf8kk8jrr0a3zw895yfjih0z5jghyf0rck38q"))))
12756 (build-system python-build-system)
12760 #~(modify-phases %standard-phases
12761 (add-after 'unpack 'fix-tests
12763 (substitute* "tests_python/test_convert_utilities.py"
12764 ;; Add missing trailing '/'.
12765 (("'\\\\\\\\usr\\\\\\\\bin\\\\\\\\') == '/usr/bin" all)
12766 (string-append all "/")))))
12767 (add-after 'unpack 'patch-command-paths
12768 (lambda* (#:key inputs #:allow-other-keys)
12769 (substitute* "_pydevd_bundle/pydevd_api.py"
12771 (format #f "~s" (search-input-file inputs "bin/kill")))
12773 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
12774 (add-after 'unpack 'generate-sources
12776 (setenv "PYTHONPATH" (getcwd))
12777 (invoke "python" "build_tools/build.py")))
12778 (add-after 'unpack 'adjust-attach-binary-name
12781 '("pydevd_tracing.py"
12782 "pydevd_attach_to_process/add_code_to_python_process.py")
12783 (("def get_(target|python_helper_lib)_filename.*" all)
12784 (format #f "~a return ~s~%" all
12785 (string-append #$output "/lib/attach.so"))))))
12786 (add-after 'unpack 'patch-gdb
12787 (lambda* (#:key inputs #:allow-other-keys)
12789 "pydevd_attach_to_process/add_code_to_python_process.py"
12791 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
12792 (add-after 'build 'build-attach-linux-binary
12794 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
12795 "-fPIC" "-nostartfiles"
12796 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
12798 (lambda* (#:key tests? #:allow-other-keys)
12800 (setenv "PYDEVD_USE_CYTHON" "YES")
12801 (invoke "pytest" "-vv"
12802 "-n" (number->string (parallel-job-count))
12805 ;; the GUI event loop requires an X server.
12806 "not test_gui_event_loop_custom "
12807 ;; This test validates that 'pydevd' is not in the
12808 ;; exception message, but it is due to being part
12809 ;; of the build file name present in the message.
12810 "and not test_evaluate_exception_trace "
12811 ;; These fail on systems with YAMA LSM’s ptrace
12812 ;; scope > 0. Upstream issue:
12813 ;; https://github.com/fabioz/PyDev.Debugger/issues/218
12814 "and not test_attach_to_pid")))))
12815 (add-after 'install 'install-attach-binary
12817 (install-file "attach.so"
12818 (string-append #$output "/lib"))))
12819 ;; Some modules aren't designed to be loadable by themselves, such
12820 ;; as 'pydev_app_engine_debug_startup' and fail.
12821 (delete 'sanity-check))))
12823 (list python-cython
12827 python-pytest-xdist
12830 (inputs (list coreutils gdb procps))
12831 (home-page "https://github.com/fabioz/PyDev.Debugger/")
12832 (synopsis "Python debugger")
12833 (description "PyDev.Debugger is a capable Python debugger used in PyDev
12834 and other @acronym{IDEs, Integrated Development Environments}.")
12835 (license license:epl1.0))))
12837 (define-public python-debugpy
12839 (name "python-debugpy")
12844 (uri (git-reference ;no tests in PyPI archive
12845 (url "https://github.com/microsoft/debugpy")
12846 (commit (string-append "v" version))))
12847 (file-name (git-file-name name version))
12848 (modules '((guix build utils)))
12849 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
12851 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
12852 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
12855 "1dpfzs3p51648i7f3fz8dw5d0vrj39iwn1jhn0226idc02ybyqih"))))
12856 (build-system python-build-system)
12859 #:tests? #f ; Fail on systems with YAMA LSM’s ptrace scope > 0.
12861 #~(modify-phases %standard-phases
12862 (add-after 'unpack 'patch-sh-in-tests
12864 (substitute* "tests/debugpy/test_run.py"
12866 (string-append "#!" (which "sh"))))))
12867 (add-after 'unpack 'fix-version
12868 ;; Versioneer is useless when there is no git metadata.
12870 (substitute* "setup.py"
12871 (("version=versioneer.get_version\\(),")
12872 (format #f "version=~s," #$version)))))
12873 (add-before 'build 'configure
12875 ;; This adjusts the behavior of debugpy to load pydevd from
12876 ;; Python site packages.
12877 (setenv "DEBUGPY_BUNDLING_DISABLED" "1")))
12879 (lambda* (#:key tests? #:allow-other-keys)
12881 (invoke "pytest" "-vv"
12882 "-n" (number->string (parallel-job-count))
12885 ;; These tests cannot be run in parallel because their
12886 ;; test data would not be copied by xdist and lead to
12887 ;; import errors. (see:
12888 ;; https://github.com/microsoft/debugpy/issues/342 and
12889 ;; https://github.com/microsoft/debugpy/issues/880).
12890 "not test_custom_python_args "
12891 "and not test_autokill "))))))))
12893 ;; See: https://raw.githubusercontent.com/microsoft/debugpy/
12894 ;; main/tests/requirements.txt.
12895 (list python-django
12901 python-pytest-timeout
12902 python-pytest-xdist
12904 (propagated-inputs (list python-pydevd))
12905 (home-page "https://aka.ms/debugpy")
12906 (synopsis "Debug Adapter Protocol Python implementation")
12907 (description "An implementation of the Debug Adapter Protocol for
12909 (license license:expat)))
12911 (define-public python-debian
12913 (name "python-debian")
12914 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
12918 ;; Use git-fetch, as pypi doesn't include test suite.
12920 (uri (git-reference
12923 (file-name (git-file-name name version))
12926 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
12927 (build-system python-build-system)
12929 `(#:phases (modify-phases %standard-phases
12930 (add-after 'unpack 'set-version
12931 ;; for reproducible builds, otherwise python-debian
12932 ;; generates a _version.py including the date
12934 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
12935 (substitute* "lib/debian/_version.py"
12936 (("__CHANGELOG_VERSION__") ,version))))
12937 (add-after 'unpack 'remove-debian-specific-tests
12938 ;; python-apt, apt and dpkg are not yet available in guix,
12939 ;; and these tests heavily depend on them.
12941 (delete-file "lib/debian/tests/test_deb822.py")
12942 (delete-file "lib/debian/tests/test_debfile.py")
12945 (list python-six python-chardet))
12946 (synopsis "Debian package related modules")
12948 ;; XXX: Use @enumerate instead of @itemize to work around
12949 ;; <http://bugs.gnu.org/21772>.
12950 "This package provides Python modules that abstract many formats of
12951 Debian-related files, such as:
12954 @item Debtags information;
12955 @item @file{debian/changelog} files;
12956 @item packages files, pdiffs;
12957 @item control files of single or multiple RFC822-style paragraphs---e.g.
12958 @file{debian/control}, @file{.changes}, @file{.dsc};
12959 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
12960 contained files and meta-information.
12963 ;; Modules are either GPLv2+ or GPLv3+.
12964 (license license:gpl3+)))
12966 (define-public python-json-spec
12968 (name "python-json-spec")
12973 (uri (pypi-uri "json-spec" version))
12976 "06dpbsq61ja9r89wpa2pzdii47qh3xri9ajdrgn1awfl102znchb"))))
12977 (build-system python-build-system)
12979 (list python-pathlib python-six))
12981 (list python-pytest))
12982 (home-page "http://py.errorist.io/json-spec")
12984 "JSON Schema, JSON Pointer and JSON Reference for Python")
12986 "This Python library implements several JSON specs, like JSON Schema,
12987 JSON Reference and JSON Pointer.")
12988 (license license:bsd-3)))
12990 (define-public python-fastbencode
12992 (name "python-fastbencode")
12997 (uri (pypi-uri "fastbencode" version))
12998 (modules '((guix build utils)))
12999 ;; Delete pre-generated Cython C files.
13000 (snippet '(for-each delete-file (find-files "." "\\.c$")))
13002 (base32 "1r66w3vpmvfmssshjpgqaj2m14c8p94nymr96mwn61idajz9mg5n"))))
13003 (build-system python-build-system)
13004 (native-inputs (list python-cython))
13005 (home-page "https://github.com/breezy-team/fastbencode")
13006 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
13008 "The fastbencode Python package implements the bencode serialization
13009 format for storing and transmitting loosely structured data, originally used
13012 The format can encode four different types of values: byte strings, integers,
13013 lists, and dictionaries (associative arrays). It's simple and unaffected by
13016 This package includes both a pure-Python version and an optional C extension
13017 based on Cython. Both provide the same functionality, but the C version has
13018 significantly better performance.")
13019 (license (list license:expat ; _bencode_py.py
13020 license:gpl2+)))) ; __init__.py
13022 (define-public python-fastjsonschema
13024 (name "python-fastjsonschema")
13029 (uri (pypi-uri "fastjsonschema" version))
13031 (base32 "1ln2j60jzyn6p8i8ljygfgrji58hc23452g7nllkcjdk4p93c7v7"))))
13032 (build-system python-build-system)
13034 `(#:tests? #f ; Fail with a strange backtrace ending in importlib.
13036 (modify-phases %standard-phases
13038 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
13040 (invoke "pytest" "-vv" "-m" "not benchmark")))))))
13042 (list python-colorama
13047 python-pytest-benchmark
13048 python-pytest-cache
13049 python-validictory))
13051 "https://github.com/horejsek/python-fastjsonschema")
13053 "Fast Python implementation of JSON schema")
13055 "This library implements validation of JSON documents by JSON schema for
13056 drafts 04, 06 and 07.")
13057 (license license:bsd-3)))
13059 (define-public python-nbformat
13061 (name "python-nbformat")
13063 ;; The PyPi release tarball lacks some test cases and test data.
13066 (uri (git-reference
13067 (url "https://github.com/jupyter/nbformat")
13071 "114c5c6cvpxhxj8zrw74351gcfzyzjh1jq3py4xf8wk9rahfay9z"))
13072 (file-name (git-file-name name version))))
13073 (build-system python-build-system)
13076 (modify-phases %standard-phases
13078 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
13080 (invoke "pytest" "-vv")))))))
13082 (list python-fastjsonschema python-jsonschema python-jupyter-core
13085 (list python-pytest
13087 (home-page "https://jupyter.org")
13088 (synopsis "Jupyter Notebook format")
13089 (description "This package provides the reference implementation of the
13090 Jupyter Notebook format and Python APIs for working with notebooks.")
13091 (license license:bsd-3)))
13093 (define-public python-nb-clean
13095 (name "python-nb-clean")
13100 (uri (pypi-uri "nb-clean" version))
13102 (base32 "01qvk9n7rx15dhc23m8bj9bw5wdyxh6y18c5fm8hllmrd3ndsx14"))))
13103 (build-system python-build-system)
13104 (propagated-inputs (list python-nbformat))
13105 (home-page "https://github.com/srstevenson/nb-clean")
13106 (synopsis "Clean Jupyter notebooks for versioning")
13107 (description "This package cleans Jupyter notebooks of cell execution
13108 counts, metadata, outputs, and empty cells, preparing them for committing to
13109 version control. It provides a Git filter to automatically clean notebooks
13110 before they're staged, and can also be used with other version control
13111 systems, as a command line tool, and as a Python library.")
13112 (license license:isc)))
13114 (define-public python-bleach
13116 (name "python-bleach")
13121 (uri (pypi-uri "bleach" version))
13123 (base32 "0rc5avysbsl3w3i2qvb6522263zhwlvf50w0ifs8776w9c2wrmn6"))))
13124 (build-system python-build-system)
13126 '(#:phases (modify-phases %standard-phases
13128 (lambda* (#:key tests? #:allow-other-keys)
13129 (when tests? (invoke "pytest" "-vv")))))))
13130 (propagated-inputs (list python-tinycss2 python-webencodings))
13131 (native-inputs (list python-pytest))
13132 (home-page "https://github.com/mozilla/bleach")
13133 (synopsis "Whitelist-based HTML-sanitizing tool")
13134 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
13135 (license license:asl2.0)))
13137 (define-public python-entrypoints
13139 (name "python-entrypoints")
13144 (uri (pypi-uri "entrypoints" version))
13147 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
13148 (build-system python-build-system)
13149 ;; The package does not come with a setup.py file, so we have to generate
13154 (modify-phases %standard-phases
13155 (add-after 'unpack 'create-setup.py
13157 (call-with-output-file "setup.py"
13160 from setuptools import setup
13161 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
13163 (home-page "https://github.com/takluyver/entrypoints")
13164 (synopsis "Discover and load entry points from installed Python packages")
13165 (description "Entry points are a way for Python packages to advertise
13166 objects with some common interface. The most common examples are
13167 @code{console_scripts} entry points, which define shell commands by
13168 identifying a Python function to run. The @code{entrypoints} module contains
13169 functions to find and load entry points.")
13170 (license license:expat)))
13172 (define-public python-epc
13174 (name "python-epc")
13179 (uri (pypi-uri "epc" version))
13182 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
13183 (build-system python-build-system)
13185 (list python-sexpdata))
13187 (list python-nose))
13188 (home-page "https://github.com/tkf/python-epc")
13189 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
13191 "Python-EPC can call elisp functions from Python and Python functions
13193 (license license:gpl3)))
13195 (define-public python-forex-python
13197 (name "python-forex-python")
13202 (uri (pypi-uri "forex-python" version))
13204 (base32 "1ma8cl1i2dh8aa99pifnlilyy4d1gd1s07fj0yd17wcbpsh532cj"))))
13205 (build-system python-build-system)
13207 ;; Tests are not included in the PyPI tarball. Also, the tests in the
13208 ;; repository require online data.
13211 (list python-requests python-simplejson))
13212 (home-page "https://github.com/MicroPyramid/forex-python")
13213 (synopsis "Foreign exchange rates and currency conversion")
13215 "@code{python-forex-python} can be used to manipulate foreign
13216 exchange rates and to operate currency conversions.
13220 @item List all currency rates.
13221 @item BitCoin price for all currencies.
13222 @item Converting amount to BitCoins.
13223 @item Get historical rates for any day since 1999.
13224 @item Conversion rate for one currency(ex; USD to INR).
13225 @item Convert amount from one currency to other.('USD 10$' to INR).
13226 @item Currency symbols.
13227 @item Currency names.
13229 (license license:expat)))
13231 (define-public python-simpleeval
13233 (name "python-simpleeval")
13238 (uri (pypi-uri "simpleeval" version))
13240 (base32 "0diysdzvx865yy2rjfah75ha2qfxaxz7r108kp7j2kkd903ya2ry"))))
13241 (build-system python-build-system)
13242 (home-page "https://github.com/danthedeckie/simpleeval")
13243 (synopsis "Simple, safe single expression evaluator library")
13245 "This package provides a quick single file library for easily adding
13246 evaluatable expressions into python projects. Say you want to allow a user
13247 to set an alarm volume, which could depend on the time of day, alarm level,
13248 how many previous alarms had gone off, and if there is music playing at the
13250 (license license:expat)))
13252 (define-public python-nbconvert
13254 (name "python-nbconvert")
13259 (uri (pypi-uri "nbconvert" version))
13262 "17g9xq4za7vvzml6l6d8zrzknhxsvgx02hymmsw9d1dygbi4cgi2"))))
13263 (build-system python-build-system)
13267 #~(modify-phases %standard-phases
13268 (add-after 'unpack 'fix-paths
13269 (lambda* (#:key inputs #:allow-other-keys)
13270 ;; Use pandoc binary from input.
13271 (substitute* "nbconvert/utils/pandoc.py"
13273 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
13275 (substitute* "nbconvert/exporters/pdf.py"
13277 (format #f "~s" (search-input-file inputs "bin/xelatex")))
13279 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
13280 ;; Likewise for Inkscape.
13281 (substitute* "nbconvert/preprocessors/svg2pdf.py"
13282 (("inkscape_path = which\\(\"inkscape\")")
13283 (format #f "inkscape_path = ~s"
13284 (search-input-file inputs "bin/inkscape"))))))
13286 (lambda* (#:key tests? #:allow-other-keys)
13288 ;; Tests depend on templates installed to output.
13289 (setenv "JUPYTER_PATH"
13290 (string-append #$output "/share/jupyter:"
13291 (getenv "JUPYTER_PATH")))
13292 ;; Step outside of the source directory to avoid having both
13293 ;; the installed package *and* the package from the source on
13295 (with-directory-excursion "/tmp"
13296 (invoke "pytest" "--pyargs" "nbconvert"
13297 "-vv" "-n" (number->string (parallel-job-count))
13300 ;; These tests require pyppeteer, not yet
13301 ;; available in Guix.
13302 "not test_webpdf_with_chromium "
13303 "and not test_webpdf.py "
13304 ;; These tests require ipywidgets, which would
13305 ;; introduce a dependency cycle.
13306 "and not test_execute_widgets_from_nbconvert "
13307 "and not test_execute_multiple_notebooks ")))))))))
13309 (list inkscape/stable pandoc))
13311 (list python-ipykernel
13312 ;; Adding ipywidgets would create a cycle.
13313 ;;python-ipywidgets
13314 ;;python-pyppeteer ;TODO: package me
13316 python-pytest-xdist))
13318 (list python-beautifulsoup4
13323 python-jupyter-core
13327 python-pandocfilters
13329 python-jupyterlab-pygments
13332 ;; Required, even if [serve] is not used.
13334 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
13340 texlive-generic-iftex
13343 texlive-latex-fancyvrb
13344 texlive-latex-float
13345 texlive-latex-geometry
13346 texlive-latex-jknapltx
13348 texlive-latex-parskip
13349 texlive-latex-trimspaces
13350 texlive-latex-upquote
13356 texlive-unicode-math
13358 (texlive-updmap.cfg (list texlive-amsfonts
13368 texlive-zapfding))))
13369 (home-page "https://jupyter.org")
13370 (synopsis "Converting Jupyter Notebooks")
13371 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
13372 notebooks to various other formats via Jinja templates. It allows you to
13373 convert an @code{.ipynb} notebook file into various static formats including:
13380 @item Markdown (md)
13381 @item ReStructured Text (rst)
13382 @item executable script
13384 (license license:bsd-3)))
13386 (define-public python-notebook
13388 (name "python-notebook")
13392 (uri (pypi-uri "notebook" version))
13395 "03p976xq1l9xf4djwk0snmywd0zck3i6gjngxsl874i8qrmsf214"))))
13396 (build-system python-build-system)
13399 (modify-phases %standard-phases
13400 (add-after 'unpack 'use-our-home-for-tests
13402 ;; The 'get_patch_env' function in this file reads:
13403 ;; 'HOME': cls.home_dir
13404 ;; but for some reason, that definition of HOME is not what the
13405 ;; GLib/GIO trash mechanism honors, which would cause test
13406 ;; failures. Instead, set 'HOME' here to an existing directory
13407 ;; and let the tests honor it.
13408 (substitute* "notebook/tests/launchnotebook.py"
13409 (("'HOME': .*," all)
13410 (string-append "# " all "\n")))
13411 (setenv "HOME" (getcwd))))
13413 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
13414 ;; These tests require a browser.
13415 (delete-file-recursively "notebook/tests/selenium")
13417 ;; Interferes with test expectations.
13418 (unsetenv "JUPYTER_CONFIG_PATH")
13419 ;; Some tests do not expect all files to be installed in the
13420 ;; same directory, but JUPYTER_PATH contains multiple entries.
13421 (unsetenv "JUPYTER_PATH")
13422 (invoke "pytest" "-vv"
13423 ;; TODO: This tests fails because nbconvert does not
13424 ;; list "python" as a format.
13425 "-k" "not test_list_formats")))))))
13427 (list python-argon2-cffi
13429 python-ipython-genutils
13431 python-jupyter-client
13432 python-jupyter-core
13433 python-nest-asyncio
13436 python-prometheus-client
13443 (list python-coverage
13448 python-requests-unixsocket))
13449 (home-page "https://jupyter.org/")
13450 (synopsis "Web-based notebook environment for interactive computing")
13452 "The Jupyter HTML notebook is a web-based notebook environment for
13453 interactive computing.")
13454 (license license:bsd-3)))
13456 (define-public python-widgetsnbextension
13458 (name "python-widgetsnbextension")
13463 (uri (pypi-uri "widgetsnbextension" version))
13466 "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
13467 (build-system python-build-system)
13469 (list python-notebook))
13470 (home-page "https://ipython.org")
13471 (synopsis "IPython HTML widgets for Jupyter")
13472 (description "This package provides interactive HTML widgets for Jupyter
13474 (license license:bsd-3)))
13476 (define-public python-ipywidgets
13478 (name "python-ipywidgets")
13483 (uri (pypi-uri "ipywidgets" version))
13486 "1w217j8i53x14l7b05fk300k222zs9vkcjaa1rbrw3sk43k466lz"))))
13487 (build-system python-build-system)
13489 (list python-ipykernel
13491 python-jupyterlab-widgets
13494 python-widgetsnbextension))
13496 (list python-mock python-pytest python-pytest-cov))
13497 (home-page "https://ipython.org")
13498 (synopsis "IPython HTML widgets for Jupyter")
13499 (description "Ipywidgets are interactive HTML widgets for Jupyter
13500 notebooks and the IPython kernel. Notebooks come alive when interactive
13501 widgets are used. Users gain control of their data and can visualize changes
13503 (license license:bsd-3)))
13505 (define-public python-jupyter-console
13507 (name "python-jupyter-console")
13512 (uri (pypi-uri "jupyter_console" version))
13515 "1iqrxhd8hvlyf8cqbc731ssnwm61wrycnbiczy5wsfahd3hlh8i4"))))
13516 (build-system python-build-system)
13518 (list python-ipykernel python-jupyter-client python-prompt-toolkit
13521 (list python-nose python-pytest))
13522 (home-page "https://jupyter.org")
13523 (synopsis "Jupyter terminal console")
13524 (description "This package provides a terminal-based console frontend for
13525 Jupyter kernels. It also allows for console-based interaction with non-Python
13526 Jupyter kernels such as IJulia and IRKernel.")
13527 (license license:bsd-3)))
13529 ;; The python-ipython and python-jupyter-console require each other. To get
13530 ;; the functionality in both packages working, strip down the
13531 ;; python-jupyter-console package when using it as an input to python-ipython.
13532 (define python-jupyter-console-minimal
13533 (package/inherit python-jupyter-console
13534 (name "python-jupyter-console-minimal")
13536 (substitute-keyword-arguments
13537 (package-arguments python-jupyter-console)
13539 `(modify-phases ,phases
13540 (add-after 'install 'delete-bin
13541 (lambda* (#:key outputs #:allow-other-keys)
13542 ;; Delete the bin files, to avoid conflicts in profiles
13543 ;; where python-ipython and python-jupyter-console are
13545 (delete-file-recursively
13547 (assoc-ref outputs "out") "/bin"))))))))
13548 ;; Remove the python-ipython propagated input, to avoid the cycle
13550 (modify-inputs (package-propagated-inputs python-jupyter-console)
13551 (delete "python-ipython")))))
13553 (define-public python-qtconsole
13555 (name "python-qtconsole")
13560 (uri (pypi-uri "qtconsole" version))
13562 (base32 "09anp8g7vqi8z8wyi2lv21a2frd2dyhyrzvcrk2anijyqzyj0dcf"))))
13563 (build-system python-build-system)
13566 (modify-phases %standard-phases
13567 (add-before 'check 'pre-check
13569 (setenv "QT_QPA_PLATFORM" "offscreen")
13570 (setenv "HOME" "/tmp")
13571 ;; FIXME: skip a failing test.
13572 (substitute* "qtconsole/tests/test_jupyter_widget.py"
13573 (("def test_other_output") "def _test_other_output")))))))
13575 (list python-ipykernel python-ipython-genutils python-jupyter-client
13576 python-jupyter-core python-pygments python-pyqt python-pyzmq
13577 python-qtpy python-traitlets))
13579 (list python-flaky python-pytest python-pytest-qt))
13580 (home-page "https://jupyter.org")
13581 (synopsis "Jupyter Qt console")
13582 (description "This package provides a Qt-based console for Jupyter with
13583 support for rich media output.")
13584 (license license:bsd-3)))
13586 (define-public python-jsbeautifier
13588 (name "python-jsbeautifier")
13590 (home-page "https://github.com/beautify-web/js-beautify")
13593 (uri (git-reference
13595 (commit (string-append "v" version))))
13596 (file-name (git-file-name name version))
13599 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
13600 (build-system python-build-system)
13602 `(#:phases (modify-phases %standard-phases
13603 (add-after 'unpack 'chdir
13605 ;; The upstream Git repository contains all the code,
13606 ;; but this package only builds the python code.
13609 (add-after 'unpack 'patch-python-six-requirements
13611 (substitute* "python/setup.py"
13616 (list python-editorconfig python-six))
13618 (list python-pytest))
13619 (synopsis "JavaScript unobfuscator and beautifier")
13620 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
13621 popular online obfuscators.")
13622 (license license:expat)))
13624 (define-public jupyter
13631 (uri (pypi-uri "jupyter" version))
13634 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
13635 (build-system python-build-system)
13636 (arguments '(#:tests? #f)) ; there are none.
13638 (list python-ipykernel
13640 python-jupyter-console
13644 (home-page "https://jupyter.org")
13645 (synopsis "Web application for interactive documents")
13647 "The Jupyter Notebook is a web application that allows you to create and
13648 share documents that contain live code, equations, visualizations and
13649 explanatory text. Uses include: data cleaning and transformation, numerical
13650 simulation, statistical modeling, machine learning and much more.")
13651 (license license:bsd-3)))
13653 (define-public python-chardet
13655 (name "python-chardet")
13660 (uri (pypi-uri "chardet" version))
13663 "1ykr04qyhgpc0h5b7dhqw4g92b1xv7ki2ky910mhy4mlbnhm6vqd"))))
13665 (list python-pytest))
13666 (build-system python-build-system)
13669 #~(modify-phases %standard-phases
13672 (invoke "pytest" "-vv")))
13673 ;; This package provides a 'chardetect' executable that only
13674 ;; depends on Python, so customize the wrap phase to avoid
13675 ;; adding pytest and friends in order to save size.
13676 ;; (See also <https://bugs.gnu.org/25235>.)
13678 (lambda* (#:key inputs outputs #:allow-other-keys)
13679 (let* ((sitedir (site-packages inputs outputs))
13680 (python (dirname (dirname
13682 inputs "bin/python"))))
13684 (string-append python "/lib/python"
13685 (python-version python)
13686 "/site-packages")))
13687 (wrap-program (string-append #$output "/bin/chardetect")
13688 `("GUIX_PYTHONPATH" ":" suffix
13689 ,(list sitedir python-sitedir)))))))))
13690 (home-page "https://github.com/chardet/chardet")
13691 (synopsis "Universal encoding detector for Python 2 and 3")
13693 "This package provides @code{chardet}, a Python module that can
13694 automatically detect a wide range of file encodings.")
13695 (license license:lgpl2.1+)))
13697 (define-public python-charset-normalizer
13699 (name "python-charset-normalizer")
13704 (uri (pypi-uri "charset-normalizer" version))
13706 (base32 "071pi2kd222rjjrjdllffqv3iz4bfaj93a9bfs65907fd6fqlfcq"))))
13707 (build-system python-build-system)
13710 #~(modify-phases %standard-phases
13711 ;; This package provides a 'normalizer' executable that only
13712 ;; depends on Python, so customize the wrap phase to avoid
13713 ;; adding pytest and friends in order to save size.
13714 ;; (See also <https://bugs.gnu.org/25235>.)
13716 (lambda* (#:key inputs outputs #:allow-other-keys)
13717 (let* ((sitedir (site-packages inputs outputs))
13718 (python (dirname (dirname
13720 inputs "bin/python"))))
13722 (string-append python "/lib/python"
13723 (python-version python)
13724 "/site-packages")))
13725 (wrap-program (string-append #$output "/bin/normalizer")
13726 `("GUIX_PYTHONPATH" ":" suffix
13727 ,(list sitedir python-sitedir)))))))))
13729 (list python-pytest))
13730 (home-page "https://github.com/ousret/charset_normalizer")
13731 (synopsis "Universal Charset Detector, alternative to Chardet")
13732 (description "This library helps you read text from an unknown charset
13733 encoding. Motivated by @code{chardet}, it tries to resolve the issue by
13734 taking a new approach. All IANA character set names for which the Python core
13735 library provides codecs are supported.")
13736 (license license:expat)))
13738 (define-public python-docopt
13740 (name "python-docopt")
13745 ;; The release on PyPI does not include tests.
13746 (uri (git-reference
13747 (url "https://github.com/docopt/docopt")
13749 (file-name (git-file-name name version))
13752 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
13753 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
13754 (build-system python-build-system)
13756 (list python-pytest))
13759 (modify-phases %standard-phases
13761 (lambda* (#:key tests? #:allow-other-keys)
13763 (invoke "py.test")))))))
13764 (home-page "http://docopt.org")
13765 (synopsis "Command-line interface description language for Python")
13766 (description "This library allows the user to define a command-line
13767 interface from a program's help message rather than specifying it
13768 programmatically with command-line parsers like @code{getopt} and
13770 (license license:expat)))
13772 (define-public python-pythonanywhere
13774 (name "python-pythonanywhere")
13779 (uri (git-reference
13780 (url "https://github.com/pythonanywhere/helper_scripts")
13781 (commit (string-append "v" version))))
13782 (file-name (git-file-name name version))
13785 "0vzzc1g8pl7cb9yvm3n1j5zlzxf0jd423rzspc2kvpb8yhvydklx"))))
13786 (build-system python-build-system)
13789 (modify-phases %standard-phases
13790 (add-before 'check 'change-home
13792 (setenv "HOME" "/tmp")))
13794 (lambda* (#:key tests? #:allow-other-keys)
13796 ;; Exclude tests marked as slowtest that assume running
13797 ;; inside Git repository on system with virtualenvwrapper
13799 (invoke "pytest" "-m" "not slowtest")))))))
13801 (list python-pytest
13804 python-pytest-mock))
13806 (list python-dateutil
13813 (home-page "https://github.com/pythonanywhere/helper_scripts/")
13814 (synopsis "PythonAnywhere helper tools for users")
13815 (description "PythonAnywhere provides a command-line interface and an
13816 application programming interface that allows managing Web apps and scheduled
13817 tasks. It includes single-command deployment for the Django Girls tutorial.")
13818 (license license:expat)))
13820 (define-public python-pythondialog
13822 (name "python-pythondialog")
13826 (uri (pypi-uri "pythondialog" version))
13829 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
13830 (build-system python-build-system)
13832 `(#:phases (modify-phases %standard-phases
13833 (add-after 'unpack 'patch-path
13834 (lambda* (#:key inputs #:allow-other-keys)
13835 (let* ((dialog (assoc-ref inputs "dialog")))
13836 (substitute* "dialog.py"
13837 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)") (string-append
13838 "os.getenv(\"PATH\") + \":"
13843 (propagated-inputs (list dialog))
13844 (home-page "http://pythondialog.sourceforge.net/")
13845 (synopsis "Python interface to the UNIX dialog utility")
13847 "A Python wrapper for the dialog utility. Its purpose is to
13848 provide an easy to use, pythonic and comprehensive Python interface to dialog.
13849 This allows one to make simple text-mode user interfaces on Unix-like systems")
13850 (license license:lgpl2.1)))
13852 (define-public python-configobj
13854 (name "python-configobj")
13858 (uri (pypi-uri "configobj" version))
13861 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
13862 ;; Patch setup.py so it looks for python-setuptools, which is
13863 ;; required to parse the keyword 'install_requires' in setup.py.
13864 (patches (search-patches "python-configobj-setuptools.patch"))))
13865 (build-system python-build-system)
13868 (synopsis "Config file reading, writing and validation")
13869 (description "ConfigObj is a simple but powerful config file reader and
13870 writer: an ini file round tripper. Its main feature is that it is very easy to
13871 use, with a straightforward programmer’s interface and a simple syntax for
13873 (home-page "https://github.com/DiffSK/configobj")
13874 (license license:bsd-3)))
13876 (define-public python-configargparse
13878 (name "python-configargparse")
13882 (uri (pypi-uri "ConfigArgParse" version))
13885 "1p1pzpf5qpf80bfxsx1mbw9blyhhypjvhl3i60pbmhfmhvlpplgd"))))
13886 (build-system python-build-system)
13888 (list python-pyyaml))
13891 (modify-phases %standard-phases
13894 ;; Bypass setuptools-shim because one test relies on "setup.py"
13895 ;; being the first argument passed to the python call.
13897 ;; NOTE: Many tests do not run because they rely on Python's
13898 ;; built-in test.test_argparse, but we remove the unit tests from
13899 ;; our Python installation.
13900 (invoke "python" "setup.py" "test"))))))
13901 (synopsis "Replacement for argparse")
13902 (description "A drop-in replacement for argparse that allows options to also
13903 be set via config files and/or environment variables.")
13904 (home-page "https://github.com/bw2/ConfigArgParse")
13905 (license license:expat)))
13907 (define-public python-connection-pool
13909 (name "python-connection-pool")
13914 (uri (pypi-uri "connection_pool" version))
13916 (base32 "1p6hfkcl4n3hhhcgjbaxn21i7b1yipag6j7dnilir4k5xxx9whmz"))))
13917 (build-system python-build-system)
13918 (home-page "https://github.com/zhouyl/ConnectionPool")
13919 (synopsis "Thread-safe connection pool")
13920 (description "This package provides a library implementing a thread-safe
13922 (license license:expat)))
13924 (define-public python-argparse-manpage
13926 (name "python-argparse-manpage")
13931 (uri (pypi-uri "argparse-manpage" version))
13934 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
13935 (build-system python-build-system)
13936 (home-page "https://github.com/praiskup/argparse-manpage")
13937 (synopsis "Build manual page from Python's ArgumentParser object")
13939 "This package provides tools to build manual pages from Python's
13940 @code{ArgumentParser} object.")
13941 (license license:asl2.0)))
13943 (define-public python-contextlib2
13945 (name "python-contextlib2")
13946 (version "0.6.0.post1")
13950 (uri (pypi-uri "contextlib2" version))
13953 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
13954 (build-system python-build-system)
13955 (home-page "https://contextlib2.readthedocs.org/")
13956 (synopsis "Tools for decorators and context managers")
13957 (description "This module is primarily a backport of the Python
13958 3.2 contextlib to earlier Python versions. Like contextlib, it
13959 provides utilities for common tasks involving decorators and context
13960 managers. It also contains additional features that are not part of
13961 the standard library.")
13962 (license license:psfl)))
13964 (define-public python-texttable
13966 (name "python-texttable")
13971 (uri (pypi-uri "texttable" version))
13974 "1sbn821394rix6xgj3zqk743pj6nqm1qz81zgis2bcpp2ng7pvj2"))))
13975 (build-system python-build-system)
13978 (modify-phases %standard-phases
13980 (lambda* (#:key tests? #:allow-other-keys)
13981 (when tests? (invoke "pytest" "-vv" "tests.py")))))))
13983 (list python-pytest))
13984 (home-page "https://github.com/foutaise/texttable/")
13985 (synopsis "Python module for creating simple ASCII tables")
13986 (description "Texttable is a Python module for creating simple ASCII
13988 (license license:expat)))
13990 (define-public python-atomicwrites
13992 (name "python-atomicwrites")
13996 (uri (pypi-uri "atomicwrites" version))
13999 "0yla2svfhfqrcj8qbyqzx7wi4jy0dwcxvlkg0k3zjd54s5m3jw5f"))))
14000 (build-system python-build-system)
14001 (arguments `(#:tests? #f)) ;avoid circular dependency with pytest
14002 (synopsis "Atomic file writes in Python")
14003 (description "Library for atomic file writes using platform dependent tools
14004 for atomic file system operations.")
14005 (home-page "https://github.com/untitaker/python-atomicwrites")
14006 (license license:expat)))
14008 (define-public python-qstylizer
14010 (name "python-qstylizer")
14015 (uri (git-reference
14016 (url "https://github.com/blambright/qstylizer")
14018 (file-name (git-file-name name version))
14020 (base32 "0zvkn6g1dn51kkw33v8qrlnwlmf5h6sw1ay3bh14ifjr8b9xsjjz"))))
14021 (build-system python-build-system)
14023 `(#:test-target "pytest"
14025 (modify-phases %standard-phases
14026 (add-before 'build 'set-pbr-version
14028 (setenv "PBR_VERSION" "3.0.1"))))))
14032 python-pytest-catchlog
14035 python-pytest-runner
14036 python-pytest-xdist))
14038 (list python-inflection python-tinycss))
14039 (home-page "https://github.com/blambright/qstylizer")
14040 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
14041 (description "@code{qstylizer} is a Python package designed to help with
14042 the construction of PyQt/PySide stylesheets.")
14043 (license license:expat)))
14045 (define-public python-click-threading
14047 (name "python-click-threading")
14051 (uri (pypi-uri "click-threading" version))
14054 "0f9lmxwcq0y9lb8w0whbni7gwy12gbv74h1igh85qn9aq0iydkxd"))))
14055 (build-system python-build-system)
14057 (list python-click))
14058 (synopsis "Utilities for multithreading in Click")
14059 (description "This package provides utilities for multithreading in Click
14061 (home-page "https://github.com/click-contrib/click-threading")
14062 (license license:expat)))
14064 (define-public python-click-log
14066 (name "python-click-log")
14070 (uri (pypi-uri "click-log" version))
14073 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
14074 (build-system python-build-system)
14076 (list python-click))
14077 (synopsis "Logging for click applications")
14078 (description "This package provides a Python library for logging Click
14080 (home-page "https://github.com/click-contrib/click-log")
14081 (license license:expat)))
14083 (define-public python-click-default-group
14085 (name "python-click-default-group")
14089 (uri (pypi-uri "click-default-group" version))
14092 "015r78jk8gznfw0dphpwaqcx5mhg5822b55w5xbb6i7sin70wmnr"))))
14093 (build-system python-build-system)
14095 `(#:tests? #f)) ; no target
14097 (list python-click))
14098 (synopsis "Extends click.Group")
14099 (description "This package extends click.Group to invoke a command without
14100 explicit subcommand name.")
14101 (home-page "https://github.com/click-contrib/click-default-group")
14102 (license license:bsd-3)))
14104 (define-public python-structlog
14106 (name "python-structlog")
14111 (uri (pypi-uri "structlog" version))
14114 "0x1i21vn3xjfa3j9ijbblia5z0jlzc9aqvpqc26sy16i8yjxyydg"))))
14115 (build-system python-build-system)
14118 (modify-phases %standard-phases
14120 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
14122 (add-installed-pythonpath inputs outputs)
14126 (list python-coverage
14130 python-pytest-asyncio
14133 (home-page "https://www.structlog.org/")
14134 (synopsis "Structured Logging for Python")
14135 (description "@code{structlog} changes logging in Python by adding structure
14136 to your log entries.")
14137 (license (list license:asl2.0 license:expat))))
14139 (define-public python-apipkg
14141 (name "python-apipkg")
14145 (uri (pypi-uri "apipkg" version))
14148 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
14149 (build-system python-build-system)
14151 (list python-pytest python-setuptools-scm))
14152 (synopsis "Namespace control and lazy-import mechanism")
14153 (description "With apipkg you can control the exported namespace of a Python
14154 package and greatly reduce the number of imports for your users. It is a small
14155 pure Python module that works on virtually all Python versions.")
14156 (home-page "https://github.com/pytest-dev/apipkg")
14157 (license license:expat)))
14159 (define-public python-execnet
14161 (name "python-execnet")
14165 (uri (pypi-uri "execnet" version))
14168 "1ia7dvrh0gvzzpi758mx55f9flr16bzdqlmi12swm4ncm4xlyscg"))
14169 (patches (search-patches "python-execnet-read-only-fix.patch"))))
14170 (build-system python-build-system)
14173 (modify-phases %standard-phases
14175 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
14177 ;; Unset PYTHONDONTWRITEBYTECODE to match the
14178 ;; expectations of a test in
14179 ;; 'testing/test_gateway.py'.
14180 (unsetenv "PYTHONDONTWRITEBYTECODE")
14182 (add-installed-pythonpath inputs outputs)
14183 (invoke "pytest" "-vv")))))))
14185 (list python-pytest python-setuptools-scm))
14186 (synopsis "Rapid multi-Python deployment")
14187 (description "Execnet provides a share-nothing model with
14188 channel-send/receive communication for distributing execution across many
14189 Python interpreters across version, platform and network barriers. It has a
14190 minimal and fast API targeting the following uses:
14192 @item distribute tasks to (many) local or remote CPUs
14193 @item write and deploy hybrid multi-process applications
14194 @item write scripts to administer multiple environments
14196 (home-page "https://codespeak.net/execnet/")
14197 (license license:expat)))
14199 (define-public python-icalendar
14201 (name "python-icalendar")
14205 (uri (pypi-uri "icalendar" version))
14208 "15dkq42rkqjdi17rpvmd1plnbwn4daby0nk1s1c3xi7w5v0bfj4p"))))
14209 (build-system python-build-system)
14211 (list python-dateutil python-pytz))
14212 (synopsis "Python library for parsing iCalendar files")
14213 (description "The icalendar package is a parser/generator of iCalendar
14214 files for use with Python.")
14215 (home-page "https://github.com/collective/icalendar")
14216 (license license:bsd-2)))
14218 (define-public python-args
14219 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65") (revision "0"))
14221 (name "python-args")
14222 (version (git-version "0.1.0" revision commit))
14223 (home-page "https://github.com/kennethreitz-archive/args")
14226 (uri (git-reference
14229 (file-name (git-file-name name version))
14232 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
14233 (build-system python-build-system)
14235 `(#:phases (modify-phases %standard-phases
14236 (add-after 'unpack 'patch-args.py
14238 (substitute* "args.py"
14239 (("basestring") "str"))))
14241 (lambda* (#:key tests? #:allow-other-keys)
14243 (invoke "nosetests" "-v")))))))
14244 (native-inputs (list python-nose))
14245 (synopsis "Command-line argument parser")
14247 "This library provides a Python module to parse command-line arguments.")
14248 (license license:bsd-3))))
14250 (define-public python-clint
14252 (name "python-clint")
14256 (uri (pypi-uri "clint" version))
14259 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
14260 (build-system python-build-system)
14263 (modify-phases %standard-phases
14265 (lambda _ (invoke "py.test" "-v"))))))
14267 (list python-pytest))
14269 (list python-args))
14270 (home-page "https://github.com/kennethreitz/clint")
14271 (synopsis "Command-line interface tools")
14273 "Clint is a Python module filled with a set of tools for developing
14274 command-line applications, including tools for colored and indented
14275 output, progress bar display, and pipes.")
14276 (license license:isc)))
14278 (define-public python-rply
14280 (name "python-rply")
14284 (uri (pypi-uri "rply" version))
14287 "1j81nddvnb145x4p81bnfpyai6g26i2dc1633ycsk025bb18m01a"))))
14288 (build-system python-build-system)
14290 (list python-appdirs))
14291 (home-page "https://github.com/alex/rply")
14292 (synopsis "Parser generator for Python")
14294 "This package provides a pure Python based parser generator, that also
14295 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
14296 with a new public API, and RPython support.")
14297 (license license:bsd-3)))
14299 (define-public python-hy
14305 (method git-fetch) ; no tests in PyPI release
14306 (uri (git-reference
14307 (url "https://github.com/hylang/hy")
14309 (file-name (git-file-name name version))
14311 (base32 "1g7djra9z7b0wyqyfrk2n4z3zamp2xkahv00jwdv35xmwwn09hq4"))))
14312 (build-system python-build-system)
14315 (modify-phases %standard-phases
14317 (lambda* (#:key tests? #:allow-other-keys)
14319 (invoke "python" "-m" "pytest" "-k"
14320 (string-append ; skip some failed tests
14321 "not test_bin_hy_sys_executable"
14322 " and not test_bin_hy_circular_macro_require"
14323 " and not test_macro_from_module"))))))))
14325 (list python-pytest))
14327 (list python-astor python-colorama python-funcparserlib python-rply))
14328 (home-page "https://docs.hylang.org/en/stable/")
14329 (synopsis "Lisp frontend to Python")
14331 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
14332 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
14333 Python at your fingertips, in Lisp form.")
14334 (license license:expat)))
14336 (define-public python-hissp
14338 (name "python-hissp")
14343 (uri (pypi-uri "hissp" version))
14346 "0yns7f0q699zn2ziagyas2nkndl7mp1hhssv9x9mpl7jxj2p5myw"))))
14347 (build-system python-build-system)
14348 (home-page "https://github.com/gilch/hissp")
14349 (synopsis "It's Python with a Lissp")
14350 (description "Hissp is a modular Lisp implementation that compiles to a
14351 functional subset of Python—Syntactic macro metaprogramming with full access
14352 to the Python ecosystem.")
14353 (license license:asl2.0)))
14355 (define-public python-promise
14357 (name "python-promise")
14362 (uri (pypi-uri "promise" version))
14365 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
14366 (build-system python-build-system)
14367 ;; Tests wants python-futures, which is a python2 only program, and
14368 ;; can't be found by python-promise at test time.
14369 (arguments `(#:tests? #f))
14370 (home-page "https://github.com/syrusakbary/promise")
14371 (synopsis "Promises/A+ implementation for Python")
14373 "Promises/A+ implementation for Python")
14374 (license license:expat)))
14376 (define-public python-progress
14378 (name "python-progress")
14383 (uri (pypi-uri "progress" version))
14385 (base32 "1k9lpb7lqr6mywpnqcz71y6qny54xlgprdp327za2gy0nnc6xj69"))))
14386 (build-system python-build-system)
14387 (home-page "http://github.com/verigak/progress/")
14388 (synopsis "Progress reporting bars for Python")
14389 (description "This Python package provides progress reporting for visual
14390 of progress of long running operations. There are multiple choices of
14391 progress bars and spinners, with customizable options, such as width, fill
14392 character, and suffix.")
14393 (license license:isc)))
14395 (define-public python-progressbar2
14397 (name "python-progressbar2")
14402 (uri (pypi-uri "progressbar2" version))
14405 "0b2v3mim90rmfvixkaniz2qrs650sk230rzgd5zhcjfldmlqgxpc"))))
14406 (build-system python-build-system)
14408 (list python-six python-utils))
14410 (list python-flake8
14414 python-pytest-cache
14416 python-pytest-flakes
14419 (home-page "https://github.com/WoLpH/python-progressbar")
14420 (synopsis "Text progress bar library for Python")
14422 "This package provides a Python progressbar library to provide
14423 visual (yet text based) progress to long running operations.")
14424 (license license:bsd-3)))
14426 (define-public python-progressbar33
14428 (name "python-progressbar33")
14433 (uri (pypi-uri "progressbar33" version))
14436 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
14437 (build-system python-build-system)
14438 (home-page "https://github.com/germangh/python-progressbar")
14439 (synopsis "Text progress bar library for Python")
14441 "This package provides a text progress bar library for Python. This
14442 version only differs from the original @code{progressbar} package in that it
14443 uses relative package imports instead of absolute imports, which is necessary
14444 for the module to work under Python 3.3.")
14445 ;; Either or both of these licenses may be selected.
14446 (license (list license:lgpl2.1+ license:bsd-3))))
14448 (define-public python-colorama
14450 (name "python-colorama")
14455 (uri (pypi-uri "colorama" version))
14457 (base32 "16w62sm95hmh55rqxn4zwdz0bkh3fqm1qnz9cwi3s510iasb4har"))))
14458 (build-system python-build-system)
14459 (synopsis "Colored terminal text rendering for Python")
14460 (description "Colorama is a Python library for rendering colored terminal
14462 (home-page "https://pypi.org/project/colorama/")
14463 (license license:bsd-3)))
14465 ;; awscli and botocore do not accept version 0.4.4
14466 (define-public python-colorama-for-awscli
14468 (inherit python-colorama)
14473 (uri (pypi-uri "colorama" version))
14475 (base32 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))))
14477 (define-public python-moto
14479 (name "python-moto")
14483 (uri (pypi-uri "moto" version))
14485 (base32 "0dfnad1f9d5ybabs69dzc7x357z1r4jbhrhgw57gyic1qnmcw864"))))
14486 (build-system python-build-system)
14489 (modify-phases %standard-phases
14490 (add-after 'unpack 'patch-hardcoded-executable-names
14491 (lambda* (#:key inputs #:allow-other-keys)
14492 (let ((bash-exec (search-input-file inputs "/bin/sh")))
14493 (substitute* "moto/batch/models.py"
14494 (("/bin/sh") bash-exec))
14495 (substitute* (find-files "tests" "\\.py$")
14496 (("#!/bin/bash") (string-append "#!" bash-exec))))))
14498 (lambda* (#:key tests? #:allow-other-keys)
14500 (invoke "pytest" "-vv" "-m" "not network" "-k"
14502 ;; XXX: This test is timing sensitive and may
14503 ;; fail non-deterministically.
14504 "not test_cancel_pending_job"
14505 ;; These tests require Docker.
14506 " and not test_terminate_job"
14507 " and not test_invoke_function_from_sqs_exception"
14508 " and not test_create_custom_lambda_resource__verify_cfnresponse_failed"
14509 " and not test_lambda_function"
14511 ;; These tests also require the network.
14512 " and not test_put_record_batch_http_destination"
14513 " and not test_put_record_http_destination"
14514 " and not test_dependencies"
14515 " and not test_cancel_running_job"
14516 " and not test_container_overrides"))))))))
14521 python-graphql-core
14525 (list bash-minimal))
14527 (list python-aws-xray-sdk
14531 python-cryptography
14534 python-importlib-metadata
14546 (home-page "https://github.com/spulec/moto")
14547 (synopsis "Mock out the boto library")
14549 "@code{moto} is a library designed to easily mock out the
14550 @code{boto} library.")
14551 (license license:asl2.0)))
14553 (define-public python-rsa
14555 (name "python-rsa")
14560 (uri (pypi-uri "rsa" version))
14563 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
14564 (build-system python-build-system)
14566 (list python-pyasn1))
14567 (synopsis "Pure-Python RSA implementation")
14568 (description "Python-RSA is a pure-Python RSA implementation. It supports
14569 encryption and decryption, signing and verifying signatures, and key
14570 generation according to PKCS#1 version 1.5. It can be used as a Python
14571 library as well as on the command line.")
14572 (home-page "https://stuvel.eu/rsa")
14573 (license license:asl2.0)))
14575 (define-public python-pluggy
14577 (name "python-pluggy")
14582 (uri (pypi-uri "pluggy" version))
14585 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
14586 (build-system python-build-system)
14588 (list python-setuptools-scm))
14589 (synopsis "Plugin and hook calling mechanism for Python")
14590 (description "Pluggy is an extraction of the plugin manager as used by
14591 Pytest but stripped of Pytest specific details.")
14592 (home-page "https://pypi.org/project/pluggy/")
14593 (license license:expat)))
14595 (define-public python-plumbum
14597 (name "python-plumbum")
14602 (uri (pypi-uri "plumbum" version))
14604 (base32 "1kidj821k79dw064rlxh84xamb9h79ychg3pgj81jlvm5hs48xri"))))
14605 (build-system python-build-system)
14607 `(#:tests? #f)) ;no tests
14609 ;; XXX: Not actually used since there are no tests but required for
14611 (list python-pytest))
14612 (home-page "https://plumbum.readthedocs.io")
14613 (synopsis "Python shell combinators library")
14615 "Plumbum is a library of tools for replacing shell scripts with Python
14617 (license license:expat)))
14619 (define-public python-deprecation
14621 (name "python-deprecation")
14626 (uri (pypi-uri "deprecation" version))
14629 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
14630 (build-system python-build-system)
14632 (list python-packaging))
14634 (list python-unittest2))
14635 (home-page "https://deprecation.readthedocs.io/")
14636 (synopsis "Python library to handle automated deprecations")
14638 "This is a library that enables automated deprecations. It offers the
14639 @code{deprecated()} decorator to wrap functions, providing proper warnings
14640 both in documentation and via Python’s warnings system, as well as the
14641 @code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
14642 that deprecated code is eventually removed.")
14643 (license license:asl2.0)))
14645 (define-public python-jmespath
14647 (name "python-jmespath")
14652 (uri (pypi-uri "jmespath" version))
14655 "0pmzfi230zfgiq2rz896kbb9f7mp0lnrjdl6x1npvxfixn0f5454"))))
14656 (build-system python-build-system)
14658 (list python-nose))
14659 (synopsis "JSON Matching Expressions")
14660 (description "JMESPath (pronounced “james path”) is a Python library that
14661 allows one to declaratively specify how to extract elements from a JSON
14663 (home-page "https://github.com/jmespath/jmespath.py")
14664 (license license:expat)))
14666 (define-public python-symengine
14668 (name "python-symengine")
14673 (uri (pypi-uri "symengine" version))
14675 (base32 "0qjgdbnb10kfk7jdhxnzfl8cpaps81k8vap7gm7q9ym3pgslazhg"))))
14676 (build-system python-build-system)
14680 #~(modify-phases %standard-phases
14682 (lambda* (#:key tests? #:allow-other-keys)
14684 ;; Run tests against installed package.
14685 (with-directory-excursion "/tmp"
14686 (invoke "nosetests" "-v" "symengine.tests"))
14687 (format #t "test suite not run~%")))))))
14689 (list cmake python-cython python-nose))
14692 (home-page "https://github.com/symengine/symengine.py")
14693 (synopsis "Python library providing wrappers to SymEngine")
14695 "This library provides a Python wrapper to SymEngine, a fast C++ symbolic
14696 manipulation library.")
14697 (license license:expat)))
14699 (define-public python-uncertainties
14701 (name "python-uncertainties")
14706 (uri (pypi-uri "uncertainties" version))
14709 "00z9xl40czmqk0vmxjvmjvwb41r893l4dad7nj1nh6blw3kw28li"))))
14710 (build-system python-build-system)
14711 ;; While there are test files, there is no "tests" directory, so the tests
14713 (arguments '(#:tests? #false))
14715 (list python-future))
14717 (list python-nose python-numpy))
14718 (home-page "https://uncertainties-python-package.readthedocs.io/")
14719 (synopsis "Calculations with uncertainties")
14721 "The uncertainties package transparently handles calculations with
14722 numbers with uncertainties. It can also yield the derivatives of any
14724 (license license:bsd-3)))
14726 (define-public python-unicodedata2
14728 (name "python-unicodedata2")
14733 (uri (pypi-uri "unicodedata2" version))
14735 (base32 "110nnvh02ssp92xbmswy39aa186jrmb7m41x4220wigl8c0dzxs1"))))
14736 (build-system python-build-system)
14737 (home-page "https://github.com/fonttools/unicodedata2")
14738 (synopsis "Python unicodedata backport")
14739 (description "This package corresponds to the latest @code{unicodedata}
14740 standard Python module.")
14741 (license license:asl2.0)))
14743 (define-public python-asteval
14745 (name "python-asteval")
14750 (uri (pypi-uri "asteval" version))
14753 "0f54sd4w1a72ij1bcxs2x7dk9xf8bzclawijf1z18bqx9f96l2gm"))))
14754 (build-system python-build-system)
14756 (list python-pytest))
14757 (home-page "https://github.com/newville/asteval")
14758 (synopsis "Minimalistic evaluator of Python expressions")
14760 "This package provides a minimalistic evaluator of Python expression
14761 using the @code{ast} module")
14762 (license license:expat)))
14764 (define-public python-lmfit
14766 (name "python-lmfit")
14771 (uri (pypi-uri "lmfit" version))
14774 "0iab33jjb60f8kn0k0cqb0vjp1mdskks2n3kpn97zkw5cvjhq2b7"))))
14775 (build-system python-build-system)
14777 (list python-asteval python-numpy python-scipy python-uncertainties))
14779 (list python-pytest))
14780 (home-page "https://lmfit.github.io/lmfit-py/")
14781 (synopsis "Least-Squares minimization with bounds and constraints")
14783 "Lmfit provides a high-level interface to non-linear optimization and
14784 curve fitting problems for Python. It builds on and extends many of the
14785 optimization methods of @code{scipy.optimize}. Initially inspired by (and
14786 named for) extending the Levenberg-Marquardt method from
14787 @code{scipy.optimize.leastsq}, lmfit now provides a number of useful
14788 enhancements to optimization and data fitting problems.")
14789 (license license:bsd-3)))
14791 (define-public python-bokeh
14793 (name "python-bokeh")
14797 (uri (pypi-uri "bokeh" version))
14800 "00sbhya9vfdv3yi07j6mxwx1x1h9497nhd3smdjrcdxgc48q0czg"))))
14801 (build-system python-build-system)
14804 (modify-phases %standard-phases
14806 (lambda* (#:key tests? #:allow-other-keys)
14808 ;; These require selenium.
14809 (delete-file "tests/unit/bokeh/io/test_export.py")
14810 (delete-file "tests/unit/bokeh/io/test_webdriver.py")
14811 (delete-file "tests/unit/bokeh/embed/test_standalone.py")
14813 ;; Doesn't find ManagedServerLoop fixture
14814 (delete-file "tests/unit/bokeh/test_client_server.py")
14816 ;; This fails because of the Guix wrapper around pytest
14817 (delete-file "tests/unit/bokeh/io/test_util__io.py")
14819 ;; Fixture ipython not found.
14820 (delete-file "tests/unit/bokeh/application/handlers/test_notebook__handlers.py")
14821 (delete-file "tests/unit/bokeh/command/subcommands/test_info.py")
14823 ;; pd fixture not found.
14824 (delete-file "tests/unit/bokeh/models/test_mappers.py")
14825 (delete-file "tests/unit/bokeh/models/util/test_structure.py")
14826 (delete-file "tests/unit/bokeh/plotting/test__plot.py")
14827 (delete-file "tests/unit/bokeh/plotting/test__graph.py")
14828 (delete-file "tests/unit/bokeh/plotting/test_figure.py")
14829 (delete-file "tests/unit/bokeh/core/test_json_encoder.py")
14830 (delete-file "tests/unit/bokeh/core/property/test_bases.py")
14831 (delete-file "tests/unit/bokeh/core/property/test_container.py")
14832 (delete-file "tests/unit/bokeh/core/property/test_dataspec.py")
14833 (delete-file "tests/unit/bokeh/core/property/test_datetime.py")
14834 (delete-file "tests/unit/bokeh/core/property/test_pandas.py")
14836 ;; nx fixture not found.
14837 (delete-file "tests/unit/bokeh/plotting/test_graph.py")
14838 (delete-file "tests/unit/bokeh/models/test_graphs.py")
14839 (delete-file "tests/unit/bokeh/io/test_showing.py")
14840 (delete-file "tests/unit/bokeh/document/test_events__document.py")
14842 ;; These tests need external sample data
14843 (delete-file-recursively "tests/unit/bokeh/sampledata/")
14845 ;; Attempts to install something via npm.
14846 (delete-file "tests/unit/bokeh/test_ext.py")
14848 ;; More failures due to set up problems.
14849 (delete-file "tests/unit/bokeh/server/test_server__server.py")
14850 (delete-file "tests/unit/bokeh/server/test_tornado__server.py")
14851 (delete-file "tests/unit/bokeh/util/test_serialization.py")
14852 (delete-file "tests/unit/bokeh/util/test_hex.py")
14853 (delete-file "tests/unit/bokeh/models/test_sources.py")
14854 (delete-file "tests/unit/bokeh/embed/test_bundle.py")
14856 (invoke "pytest" "-v")))))))
14865 python-typing-extensions))
14867 (list python-beautifulsoup4
14875 (home-page "https://github.com/bokeh/bokeh")
14876 (synopsis "Interactive plots and applications in the browser from Python")
14878 "This package provides tools for interactive plots and applications in the
14879 browser from Python.")
14880 (license license:bsd-3)))
14882 (define-public python-boto
14884 (name "python-boto")
14888 (uri (pypi-uri "boto" version))
14891 "0njy09c4wjx7ipxhwi6vv404nflyiasl78vwwxxpclnql903n3ga"))))
14892 (build-system python-build-system)
14894 ;; XXX: This package is unmaintained and has problems with newer versions
14895 ;; of Python 3 as well as test libraries. 'python-moto' still uses a
14896 ;; subset of this library, so keep it around for now, but disable tests.
14899 (list python-paramiko python-requests))
14900 (home-page "https://github.com/boto/boto")
14901 (synopsis "Python interfaces for Amazon Web Services")
14903 "This package provides various facilities for interacting with Amazon
14904 Web Services through Python.
14906 This software is unmaintained, and new projects should use @code{boto3} instead.")
14907 (license license:expat)))
14909 (define-public python-botocore
14910 ;; Note: When updating botocore, also make sure that boto3 and awscli
14913 (name "python-botocore")
14914 (version "1.24.35")
14918 (uri (pypi-uri "botocore" version))
14921 "0rv8mvhq5s373zdjs2yb45hzvqcqdh2lp2rbb21jjc8ciwnl5d9n"))))
14922 (build-system python-build-system)
14924 ;; FIXME: Many tests are failing.
14927 (list python-dateutil python-jmespath python-urllib3))
14928 (home-page "https://github.com/boto/botocore")
14929 (synopsis "Low-level interface to AWS")
14930 (description "Botocore is a Python library that provides a low-level
14931 interface to the Amazon Web Services (AWS) API.")
14932 (license license:asl2.0)))
14934 (define-public python-boto3
14936 (name "python-boto3")
14937 (version "1.21.35")
14938 (home-page "https://github.com/boto/boto3")
14941 (uri (git-reference (url home-page) (commit version)))
14942 (file-name (git-file-name name version))
14945 "1kdyf238rpfldnpzs0rdh3nhjn6hwfym4faskyhzlgzkf1smmbg1"))))
14948 (modify-phases %standard-phases
14949 (add-after 'unpack 'delete-network-tests
14950 ;; Deleting integration tests because they are trying to connect to AWS.
14952 (delete-file-recursively "tests/integration")))
14954 (lambda* (#:key tests? #:allow-other-keys)
14956 (invoke "pytest" "-v")))))))
14957 (build-system python-build-system)
14959 (list python-nose python-mock python-pytest))
14961 (list python-botocore python-jmespath python-s3transfer))
14962 (synopsis "AWS SDK for Python")
14964 "Boto3 is a Python library for writing programs that interact with
14965 @acronym{AWS,Amazon Web Services}.")
14966 (license license:asl2.0)))
14968 (define-public python-pyfiglet
14970 (name "python-pyfiglet")
14971 (version "0.8.post1")
14975 (uri (pypi-uri "pyfiglet" version))
14978 "0f9n2076ga2ccsg174k2d7n0z4d44ml96yzc72s6g4nhalbk5hn6"))))
14979 (build-system python-build-system)
14980 (home-page "https://github.com/pwaller/pyfiglet")
14981 (synopsis "Draw ASCII art big letters in Python")
14982 (description "This module lets you draw large letter from ordinary characters
14984 (license license:expat)))
14986 (define-public python-xdo
14988 (name "python-xdo")
14992 (uri (string-append
14993 "http://http.debian.net/debian/pool/main/p/python-xdo/"
14994 "python-xdo_" version ".orig.tar.gz"))
14997 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
14998 (build-system python-build-system)
15001 (modify-phases %standard-phases
15002 (add-before 'install 'patch-libxdo-path
15003 ;; Hardcode the path of dynamically loaded libxdo library.
15004 (lambda* (#:key inputs #:allow-other-keys)
15005 (let ((libxdo (string-append
15006 (assoc-ref inputs "xdotool")
15008 (libc (string-append
15009 (assoc-ref inputs "libc")
15010 "/lib/libc.so.6")))
15011 (substitute* "xdo/_xdo.py"
15012 (("find_library\\(\"xdo\"\\)")
15013 (simple-format #f "\"~a\"" libxdo))
15014 (("ctypes\\.util\\.find_library\\('libc'\\)")
15015 (simple-format #f "\"~a\"" libc)))
15017 #:tests? #f)) ; no tests provided
15021 `(("xdotool" ,xdotool)
15022 ("libX11" ,libx11)))
15023 (home-page "https://tracker.debian.org/pkg/python-xdo")
15024 (synopsis "Python library for simulating X11 keyboard/mouse input")
15025 (description "Provides bindings to libxdo for manipulating X11 via simulated
15026 input. (Note that this is mostly a legacy library; you may wish to look at
15027 python-xdo for newer bindings.)")
15028 (license license:bsd-3)))
15030 (define-public python-xdoctest
15032 (name "python-xdoctest")
15037 (uri (pypi-uri "xdoctest" version))
15039 (base32 "0bgbmb9nqv95f9gfxqifqff1qaz5fnanjqy4hv7ygrjp2kksgfvy"))))
15040 (build-system python-build-system)
15043 #~(modify-phases %standard-phases
15045 (lambda* (#:key tests? #:allow-other-keys)
15047 ;; A writable HOME is needed by the
15048 ;; 'import_module_from_path' test.
15049 (setenv "HOME" "/tmp")
15050 (invoke "pytest" "-vv")))))))
15051 (propagated-inputs (list python-six))
15052 (native-inputs (list python-pytest which))
15053 (home-page "https://github.com/Erotemic/xdoctest")
15054 (synopsis "Rewrite of the Python builtin doctest module")
15055 (description "This package provides a rewrite of the builtin doctest
15056 module which leverages the Python @acronym{AST, Abstract Syntax Tree} instead
15057 of @acronym{REGEXPs, regular expressions}.")
15058 (license license:asl2.0)))
15060 (define-public python-mako
15062 (name "python-mako")
15067 (uri (pypi-uri "Mako" version))
15070 "09ywrmhr6gdyfx6d5727wwjnz73i6rklqcb4c14m7sqc830wi5c1"))))
15071 (build-system python-build-system)
15073 `(#:phases (modify-phases %standard-phases
15075 (lambda* (#:key tests? #:allow-other-keys)
15077 (invoke "nosetests" "-v")
15078 (format #t "test suite not run~%"))
15081 (list python-markupsafe))
15083 (list python-mock python-nose))
15084 (home-page "https://www.makotemplates.org/")
15085 (synopsis "Templating language for Python")
15086 (description "Mako is a templating language for Python that compiles
15087 templates into Python modules.")
15088 (license license:expat)))
15090 (define-public python-waitress
15092 (name "python-waitress")
15097 (uri (pypi-uri "waitress" version))
15098 (patches (search-patches "python-waitress-fix-tests.patch"))
15101 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
15102 (build-system python-build-system)
15103 (home-page "https://github.com/Pylons/waitress")
15104 (synopsis "Waitress WSGI server")
15105 (description "Waitress is meant to be a production-quality pure-Python WSGI
15106 server with very acceptable performance.")
15107 (license license:zpl2.1)))
15109 (define-public python-whichcraft
15111 (name "python-whichcraft")
15116 (uri (pypi-uri "whichcraft" version))
15119 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
15120 (build-system python-build-system)
15122 (list python-pytest))
15123 (home-page "https://github.com/pydanny/whichcraft")
15124 (synopsis "Cross-platform cross-python shutil.which functionality")
15126 "This package provides a shim of the shutil.which function that's
15127 designed to work across multiple versions of Python.")
15128 (license license:bsd-3)))
15130 (define-public python-cookiecutter
15132 (name "python-cookiecutter")
15137 (uri (pypi-uri "cookiecutter" version))
15139 (base32 "0mx49whhwcxmvcak27zr7p7ndzkn3w7psfd7fzh3n91fi1r4v6kb"))))
15140 (build-system python-build-system)
15142 (list python-freezegun python-pytest python-pytest-catchlog
15143 python-pytest-cov python-pytest-mock))
15145 (list python-binaryornot
15153 python-text-unidecode
15154 python-whichcraft))
15155 (home-page "https://github.com/cookiecutter/cookiecutter")
15157 "Command-line utility that creates projects from project templates")
15159 "This package provides a command-line utility that creates projects from
15160 project templates, e.g. creating a Python package project from a Python package
15161 project template.")
15162 (license license:bsd-3)))
15164 (define-public python-pyquery
15166 (name "python-pyquery")
15171 (uri (pypi-uri "pyquery" version))
15174 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
15175 (build-system python-build-system)
15177 (list python-webob python-webtest))
15179 (list python-lxml python-cssselect))
15180 (home-page "https://github.com/gawel/pyquery")
15181 (synopsis "Make jQuery-like queries on xml documents")
15182 (description "pyquery allows you to make jQuery queries on xml documents.
15183 The API is as much as possible the similar to jQuery. pyquery uses lxml for
15184 fast xml and html manipulation.")
15185 (license license:bsd-3)))
15187 (define-public python-anyjson
15189 (name "python-anyjson")
15194 (uri (pypi-uri "anyjson" version))
15197 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
15198 (build-system python-build-system)
15200 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
15201 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
15202 ;; whatever) so this transformation needs to be done before the tests
15203 ;; can be run. Maybe we could add a build step to transform beforehand
15204 ;; but it could be annoying/difficult.
15205 ;; We can enable tests for the Python 2 version, though, and do below.
15207 (home-page "https://bitbucket.org/runeh/anyjson/")
15209 "Wraps best available JSON implementation in a common interface")
15211 "Anyjson loads whichever is the fastest JSON module installed
15212 and provides a uniform API regardless of which JSON implementation is used.")
15213 (license license:bsd-3)))
15215 (define-public python-amqp
15217 (name "python-amqp")
15222 (uri (pypi-uri "amqp" version))
15224 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
15225 (build-system python-build-system)
15229 #~(modify-phases %standard-phases
15231 (lambda* (#:key tests? #:allow-other-keys)
15233 (invoke "pytest" "-vv"
15234 "-c" "/dev/null" ;take control over pytest options
15235 ;; Integration tests require network connectivity.
15236 "--ignore" "t/integration")))))))
15237 (native-inputs (list python-pytest))
15238 (propagated-inputs (list python-vine))
15239 (home-page "https://github.com/celery/py-amqp")
15240 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
15242 "This is a fork of amqplib which was originally written by Barry Pederson.
15243 It is maintained by the Celery project, and used by kombu as a pure python
15244 alternative when librabbitmq is not available.")
15245 (license license:lgpl2.1+)))
15247 (define-public python-beniget
15249 (name "python-beniget")
15251 (home-page "https://github.com/serge-sans-paille/beniget")
15255 (uri (pypi-uri "beniget" version))
15257 (base32 "035c4f78yllpw2c5p1w92520rilm7nnpsqh7yvi3qmfhi8xlnmbm"))))
15258 (build-system python-build-system)
15260 (list python-gast))
15261 (synopsis "Extract semantic information about static Python code")
15263 "Beniget is a collection of analyzers for Python @acronym{AST,
15264 Abstract Syntax Tree}. It is a building block for writing a static analyzer
15265 or compiler for Python.")
15266 (license license:bsd-3)))
15268 (define-public python-txamqp
15270 (name "python-txamqp")
15275 (uri (pypi-uri "txAMQP" version))
15278 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
15279 (build-system python-build-system)
15281 (list python-six python-twisted))
15282 (home-page "https://github.com/txamqp/txamqp")
15283 (synopsis "Communicate with AMQP peers and brokers using Twisted")
15285 "This package provides a Python library for communicating with AMQP peers
15286 and brokers using the asynchronous networking framework Twisted. It contains
15287 all the necessary code to connect, send and receive messages to/from an
15288 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
15289 also includes support for using Thrift RPC over AMQP in Twisted
15291 (license license:asl2.0)))
15293 (define-public python-kombu
15295 (name "python-kombu")
15300 (uri (pypi-uri "kombu" version))
15302 (base32 "044ng79gj04668kf5fmy7fjkw8302xyapskkn65ym52zfbpf7kip"))))
15303 (build-system python-build-system)
15307 #~(modify-phases %standard-phases
15309 (lambda* (#:key tests? #:allow-other-keys)
15311 (invoke "pytest" "-vv"
15312 ;; The transport tests attempt to pass messages to
15313 ;; many different databases.
15314 "--ignore" "t/unit/transport")))))))
15316 (list python-case python-pyro4 python-pytest-sugar
15317 python-pytest python-pytz))
15319 (list python-amqp python-cached-property python-vine))
15320 (home-page "https://kombu.readthedocs.io")
15321 (synopsis "Message passing library for Python")
15322 (description "The aim of Kombu is to make messaging in Python as easy as
15323 possible by providing an idiomatic high-level interface for the AMQ protocol,
15324 and also provide proven and tested solutions to common messaging problems.
15325 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
15326 message orientation, queuing, routing, reliability and security, for which the
15327 RabbitMQ messaging server is the most popular implementation.")
15328 (license license:bsd-3)))
15330 (define-public python-billiard
15332 (name "python-billiard")
15333 (version "3.6.4.0")
15337 (uri (pypi-uri "billiard" version))
15339 (base32 "0ismj2p8c66ykpss94rs0bfra5agxxmljz8r3gaq79r8valfb799"))))
15340 (build-system python-build-system)
15343 (modify-phases %standard-phases
15344 (add-after 'unpack 'remove-win-files
15346 (for-each delete-file-recursively
15347 ;; test_multiprocessing seem to be written in Python2.
15348 '("t/integration/tests/test_multiprocessing.py"
15349 "t/unit/test_win32.py"
15350 "billiard/popen_spawn_win32.py"
15351 "billiard/_win.py")))))))
15353 (list python-case python-psutil python-pytest))
15354 (home-page "https://github.com/celery/billiard")
15355 (synopsis "Python multiprocessing fork with improvements and bugfixes")
15357 "Billiard is a fork of the Python 2.7 multiprocessing package. The
15358 multiprocessing package itself is a renamed and updated version of R Oudkerk's
15359 pyprocessing package. This standalone variant is intended to be compatible with
15360 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
15361 (license license:bsd-3)))
15363 (define-public python-celery
15365 (name "python-celery")
15370 (uri (pypi-uri "celery" version))
15372 (base32 "109lcqarrbmh95sk1dm4yxayq1h3i27f4w23ndk64mqgyfnqqffi"))))
15373 (build-system python-build-system)
15376 (modify-phases %standard-phases
15377 (add-after 'unpack 'relax-requirements
15379 (substitute* "requirements/default.txt"
15383 (lambda* (#:key tests? #:allow-other-keys)
15385 (invoke "python" "-m" "pytest" "t"
15386 "--ignore" "t/integration" ;hangs tests
15387 ;; The MongoDB backend test appears to expect an older
15388 ;; version of MongoDB which provided its own bson
15389 ;; module, fails with " AttributeError: module 'bson'
15390 ;; has no attribute 'encode'".
15391 "--ignore" "t/unit/backends/test_mongodb.py"
15393 "-k" "not test_check_privileges_no_fchown ")))))))
15402 python-pytest-celery
15403 python-pytest-subtests
15404 python-pytest-timeout
15407 (list python-billiard
15409 python-click-didyoumean
15410 python-click-plugins
15415 (home-page "https://celeryproject.org")
15416 (synopsis "Distributed Task Queue")
15417 (description "Celery is an asynchronous task queue/job queue based on
15418 distributed message passing. It is focused on real-time operation, but
15419 supports scheduling as well. The execution units, called tasks, are executed
15420 concurrently on a single or more worker servers using multiprocessing,
15421 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
15422 synchronously (wait until ready).")
15423 (license license:bsd-3)))
15425 (define-public python-translitcodec
15427 (name "python-translitcodec")
15432 (uri (pypi-uri "translitcodec" version))
15435 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
15436 (build-system python-build-system)
15438 `(#:tests? #f)) ; no tests provided
15440 "https://github.com/claudep/translitcodec")
15442 "Unicode to 8-bit charset transliteration codec")
15444 "This package contains codecs for transliterating ISO 10646 texts into
15445 best-effort representations using smaller coded character sets (ASCII,
15447 (license license:expat)))
15449 (define-public python-anyqt
15451 (name "python-anyqt")
15456 (uri (pypi-uri "AnyQt" version))
15458 (base32 "0z7myf0mp1qx4gza6ncqyq9whk67vblmh9n3klk19dv4aakjml2f"))))
15459 (build-system python-build-system)
15461 `(#:tests? #f ;there are no tests
15463 (modify-phases %standard-phases
15464 (add-after 'unpack 'delete-files
15465 ;; Delete files related to other operating systems.
15467 (delete-file "AnyQt/QtMacExtras.py")
15468 (delete-file "AnyQt/QtWinExtras.py"))))))
15469 (home-page "https://github.com/ales-erjavec/anyqt")
15470 (synopsis "PyQt4/PyQt5 compatibility layer")
15471 (description "AnyQt is a PyQt4/PyQt5 compatibility layer.")
15472 (license license:gpl3)))
15474 (define-public python-pyqtgraph
15476 (name "python-pyqtgraph")
15481 (uri (pypi-uri "pyqtgraph" version))
15483 (base32 "0kc7ncv0lr3spni29i9g8nszyr4xinswqi2zzs6v8kqqi593pvyj"))))
15484 (build-system python-build-system)
15487 (modify-phases %standard-phases
15488 (add-before 'check 'set-home-and-qpa
15490 (setenv "HOME" "/tmp")
15491 (setenv "QT_QPA_PLATFORM" "offscreen")
15494 (lambda* (#:key inputs outputs #:allow-other-keys)
15495 (add-installed-pythonpath inputs outputs)
15496 (invoke "pytest" "-vv" "-k"
15498 ;; These tests try to download online data.
15499 "not test_PolyLineROI"
15500 " and not test_getArrayRegion_axisorder"
15501 " and not test_getArrayRegion"
15502 " and not test_PlotCurveItem"
15503 " and not test_NonUniformImage_colormap"
15504 " and not test_NonUniformImage_lut"
15505 " and not test_ImageItem_axisorder"
15506 " and not test_ImageItem"
15507 ;; The test_reload test fails and suggests adding
15508 ;; "--assert=plain" to the pytest command, but it
15509 ;; doesn't solve the failure.
15510 " and not test_reload")))))))
15512 (list python-pytest python-pytest-cov python-pytest-xdist))
15516 (list python-h5py python-numpy python-pyopengl python-scipy
15517 python-pyqt-without-qtwebkit))
15518 (home-page "http://www.pyqtgraph.org")
15519 (synopsis "Scientific graphics and GUI library for Python")
15521 "PyQtGraph is a Pure-python graphics library for PyQt5, PyQt6, PySide2
15522 and PySide6. It is intended for use in mathematics, scientific or engineering
15524 (license license:expat)))
15526 (define-public python-qasync
15528 (name "python-qasync")
15532 ;; There are no tests in the PyPI tarball.
15534 (uri (git-reference
15535 (url "https://github.com/CabbageDevelopment/qasync/")
15536 (commit (string-append "v" version))))
15537 (file-name (git-file-name name version))
15539 (base32 "1q9cllrwf94whr0f6mipa0hdq1rcyqvklwx19g35g2dav8f3xkjl"))))
15540 (build-system python-build-system)
15542 `(#:test-target "pytest"
15544 (modify-phases %standard-phases
15545 (add-before 'check 'set-qpa
15547 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
15549 (list python-pytest python-pytest-runner))
15551 (list python-pyqt))
15552 (home-page "https://github.com/CabbageDevelopment/qasync")
15553 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
15555 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
15556 by providing an implementation of the PEP 3156 event-loop.")
15557 (license license:bsd-2)))
15559 (define-public python-editor
15561 (name "python-editor")
15566 (uri (pypi-uri "python-editor" version))
15569 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
15570 (build-system python-build-system)
15572 '(#:tests? #f)) ;XXX: needs a TTY and an editor
15573 (home-page "https://github.com/fmoo/python-editor")
15574 (synopsis "Programmatically open an editor, capture the result")
15576 "python-editor is a library that provides the editor module for
15577 programmatically interfacing with your system's $EDITOR.")
15578 (license license:asl2.0)))
15580 (define-public python-multiprocessing-logging
15582 (name "python-multiprocessing-logging")
15584 (home-page "https://github.com/jruere/multiprocessing-logging")
15587 (uri (git-reference
15589 (commit (string-append "v" version))))
15590 (file-name (git-file-name name version))
15593 "1625wy3djlr3b2fpd3vi822f8gw6b75mnls5a4318dbi9za5pf0y"))))
15594 (build-system python-build-system)
15595 (synopsis "Manage logs from multiple processes")
15597 "This Python module implements a multiprocessing-aware @code{Handler}
15598 that, when set on the root @code{Logger}, will tunnel log records to the
15599 main process so that they are handled correctly.")
15600 (license license:lgpl3+)))
15602 (define-public python-vobject
15604 (name "python-vobject")
15605 (version "0.9.6.1")
15608 (uri (pypi-uri "vobject" version))
15611 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
15612 (build-system python-build-system)
15614 '(;; The test suite relies on some non-portable Windows interfaces.
15617 (list python-dateutil python-pyicu))
15618 (synopsis "Parse and generate vCard and vCalendar files")
15619 (description "Vobject is intended to be a full featured Python package for
15620 parsing and generating vCard and vCalendar files. Currently, iCalendar files
15621 are supported and well tested. vCard 3.0 files are supported, and all data
15622 should be imported, but only a few components are understood in a sophisticated
15624 (home-page "https://eventable.github.io/vobject/")
15625 (license license:asl2.0)))
15627 (define-public python-munkres
15629 (name "python-munkres")
15633 (uri (pypi-uri "munkres" version))
15636 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
15637 (build-system python-build-system)
15638 (native-inputs (list python-pytest-6))
15639 (home-page "https://software.clapper.org/munkres/")
15640 (synopsis "Implementation of the Munkres algorithm")
15641 (description "The Munkres module provides an implementation of the Munkres
15642 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
15643 useful for solving the Assignment Problem.")
15644 (license license:bsd-3)))
15646 (define-public python-whoosh
15648 (name "python-whoosh")
15653 (uri (pypi-uri "Whoosh" version))
15656 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
15657 (build-system python-build-system)
15658 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
15660 (list python-pytest))
15661 (home-page "https://bitbucket.org/mchaput/whoosh")
15662 (synopsis "Full text indexing, search, and spell checking library")
15664 "Whoosh is a fast, pure-Python full text indexing, search, and spell
15665 checking library.")
15666 (license license:bsd-2)))
15668 (define-public python-codespell
15670 (name "python-codespell")
15675 (uri (pypi-uri "codespell" version))
15677 (base32 "1r9y714cz8m894rxp7pyvicr1lw2iid24vz6fxbl5wzy8ibgxlqr"))))
15678 (build-system python-build-system)
15680 (list python-chardet))
15682 (list python-check-manifest python-flake8 python-pytest
15683 python-pytest-cov python-pytest-dependency))
15686 (modify-phases %standard-phases
15688 (lambda* (#:key outputs tests? #:allow-other-keys)
15690 ;; Make installed executable available for running the tests.
15692 (string-append (assoc-ref outputs "out") "/bin"
15693 ":" (getenv "PATH")))
15694 (invoke "pytest" "-vv")))))))
15695 (home-page "https://github.com/codespell-project/codespell/")
15696 (synopsis "Spellchecker for code")
15697 (description "Codespell fixes common misspellings in text files.
15698 It's designed primarily for checking misspelled words in source code,
15699 but it can be used with other files as well. It does not check for word
15700 membership in a complete dictionary, but instead looks for a set of
15701 common misspellings. Therefore it should catch errors like \"adn\", but
15702 it will not catch \"adnasdfasdf\". This also means it shouldn't
15703 generate false-positives when you use a niche term it doesn't know
15707 ; for codespell and codespell_lib
15709 ; for dictionary*.txt
15710 license:cc-by-sa3.0))))
15712 (define-public python-pathlib
15714 (name "python-pathlib")
15718 (uri (pypi-uri "pathlib" version))
15721 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
15722 (build-system python-build-system)
15723 ;; The tests depend on the internal "test" module, which does not provide
15724 ;; a stable interface.
15725 (arguments `(#:tests? #f))
15726 (home-page "https://pathlib.readthedocs.org/")
15727 (synopsis "Object-oriented file system paths")
15728 (description "Pathlib offers a set of classes to handle file system paths.
15729 It offers the following advantages over using string objects:
15732 @item No more cumbersome use of os and os.path functions. Everything can
15733 be done easily through operators, attribute accesses, and method calls.
15734 @item Embodies the semantics of different path types. For example,
15735 comparing Windows paths ignores casing.
15736 @item Well-defined semantics, eliminating any inconsistencies or
15737 ambiguities (forward vs. backward slashes, etc.).
15740 Note: In Python 3.4, pathlib is now part of the standard library. For other
15741 Python versions please consider python-pathlib2 instead, which tracks the
15742 standard library module. This module (python-pathlib) isn't maintained
15744 (license license:expat)))
15746 (define-public python-jellyfish
15748 (name "python-jellyfish")
15752 (uri (pypi-uri "jellyfish" version))
15755 "0p2s6b30sfffx8sya2i8kz0i0riw9fq1fi0k89s8kdgrmjf0h1h5"))))
15756 (build-system python-build-system)
15758 `(#:tests? #f ; XXX: Tests cannot find C coded version.
15760 (modify-phases %standard-phases
15762 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
15764 (add-installed-pythonpath inputs outputs)
15765 (invoke "pytest" "-vv" "jellyfish/test.py")))))))
15767 (list python-pytest))
15768 (home-page "https://github.com/jamesturk/jellyfish")
15769 (synopsis "Approximate and phonetic matching of strings")
15770 (description "Jellyfish uses a variety of string comparison and phonetic
15771 encoding algorithms to do fuzzy string matching.")
15772 (license license:bsd-2)))
15774 (define-public python-pdfminer-six
15776 (name "python-pdfminer-six")
15777 (version "20201018")
15778 ;; There are no tests in the PyPI tarball.
15782 (uri (git-reference
15783 (url "https://github.com/pdfminer/pdfminer.six")
15785 (file-name (git-file-name name version))
15787 (base32 "1a2fxxnnjqbx344znpvx7cnv1881dk6585ibw01inhfq3w6yj2lr"))))
15788 (build-system python-build-system)
15791 (modify-phases %standard-phases
15792 ;; Tests write to the source tree.
15793 (add-after 'unpack 'make-git-checkout-writable
15795 (for-each make-file-writable (find-files "."))
15799 (invoke "make" "test"))))))
15801 (list python-chardet python-cryptography python-sortedcontainers))
15803 (list python-nose python-tox))
15804 (home-page "https://github.com/pdfminer/pdfminer.six")
15805 (synopsis "PDF parser and analyzer")
15806 (description "@code{pdfminer.six} is a community maintained fork of
15807 the original PDFMiner. It is a tool for extracting information from PDF
15808 documents. It focuses on getting and analyzing text data. Pdfminer.six
15809 extracts the text from a page directly from the sourcecode of the PDF. It
15810 can also be used to get the exact location, font or color of the text.")
15811 (license license:expat)))
15813 (define-public python-rarfile
15815 (name "python-rarfile")
15819 (uri (pypi-uri "rarfile" version))
15822 "1882wv9szcm29mnyhjmspyflyr2l7z73srn14w4dlnww49lqfm37"))))
15823 (build-system python-build-system)
15825 `(#:tests? #f ;; The bsdtar utility is very limited and most tests fail.
15827 (modify-phases %standard-phases
15828 (add-after 'unpack 'patch
15829 (lambda* (#:key inputs #:allow-other-keys)
15830 (substitute* "rarfile.py"
15831 ;; Disable unrar and unar, which are unavailable on Guix.
15832 (("(unrar|unar)=True" all tool) (string-append tool "=False"))
15833 ;; Hardcode path to bsdtar
15835 (string-append "\"" (assoc-ref inputs "libarchive") "/bin/bsdtar\"")))
15838 (lambda* (#:key inputs tests? #:allow-other-keys)
15840 (invoke "pytest" "-vv")))))))
15841 (native-inputs (list python-pytest))
15842 (inputs (list libarchive))
15843 (home-page "https://github.com/markokr/rarfile")
15844 (synopsis "RAR archive reader for Python")
15845 (description "This is Python module for RAR archive reading. The interface
15846 is made as zipfile like as possible.")
15847 (license license:isc)))
15849 (define-public python-rich
15851 (name "python-rich")
15855 (uri (pypi-uri "rich" version))
15858 "149vjb4cpf9mz14iig0b6d8065dm8aslp6pc45g9ipmp1wf00ffj"))))
15859 (build-system python-build-system)
15862 (modify-phases %standard-phases
15864 (lambda* (#:key inputs tests? #:allow-other-keys)
15866 (copy-recursively (string-append
15867 (assoc-ref inputs "tests") "/tests")
15869 (invoke "python" "-m" "pytest" "-vv")))))))
15871 (list python-attrs python-colorama python-commonmark python-pygments
15872 python-typing-extensions))
15874 `(("python-pytest" ,python-pytest)
15876 ;; The release on pypi comes without tests. We can't build from this
15877 ;; checkout, though, because installation requires an invocation of
15881 (uri (git-reference
15882 (url "https://github.com/willmcgugan/rich")
15883 (commit (string-append "v" version))))
15884 (file-name (git-file-name name version))
15887 "17c3gljn8zv32xnpsgd3fqgqn4r7cdfqri41hridcpbhssdgkyp9"))))))
15888 (home-page "https://github.com/willmcgugan/rich")
15889 (synopsis "Render rich text and more to the terminal")
15891 "This is a Python package for rendering rich text, tables, progress bars,
15892 syntax highlighting, markdown and more to the terminal.")
15893 (license license:expat)))
15895 (define-public python-magic
15897 (name "python-magic")
15899 (home-page "https://github.com/ahupp/python-magic")
15903 (uri (git-reference (url home-page) (commit version)))
15904 (file-name (git-file-name name version))
15905 (patches (search-patches "python-magic-python-bytecode.patch"))
15908 "17jalhjbfd600lzfz296m0nvgp6c7vx1mgz82jbzn8hgdzknf4w0"))))
15909 (build-system python-build-system)
15911 '(#:phases (modify-phases %standard-phases
15912 ;; Replace a specific method call with a hard-coded
15913 ;; path to the necessary libmagic.so file in the
15914 ;; store. If we don't do this, then the method call
15915 ;; will fail to find the libmagic.so file, which in
15916 ;; turn will cause any application using
15917 ;; python-magic to fail.
15918 (add-before 'build 'hard-code-path-to-libmagic
15919 (lambda* (#:key inputs #:allow-other-keys)
15920 (let ((magic (search-input-file inputs "/lib/libmagic.so")))
15921 (substitute* "magic/loader.py"
15922 (("find_library\\('magic'\\)")
15923 (string-append "'" magic "'"))))))
15925 (lambda* (#:key tests? #:allow-other-keys)
15926 ;; The test suite mandates this variable.
15927 (setenv "LC_ALL" "en_US.UTF-8")
15929 (with-directory-excursion "test"
15930 (invoke "python" "./test.py")
15931 (invoke "python" "./libmagic_test.py"))
15932 (format #t "test suite not run~%")))))))
15936 ;; python-magic needs to be able to find libmagic.so.
15937 ;; Use a newer version because 5.39 returns bogus for some archives
15938 ;; (notably Chromium .crx extensions), which breaks e.g. 'diffoscope'.
15940 (synopsis "File type identification using libmagic")
15942 "This module uses ctypes to access the libmagic file type
15943 identification library. It makes use of the local magic database and
15944 supports both textual and MIME-type output. Note that this module and
15945 the python-file module both provide a \"magic.py\" file; these two
15946 modules, which are different and were developed separately, both serve
15947 the same purpose: to provide Python bindings for libmagic.")
15948 (license license:expat)))
15950 (define-public python-pkgconfig
15952 (name "python-pkgconfig")
15957 (uri (pypi-uri "pkgconfig" version))
15960 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
15961 (build-system python-build-system)
15963 (list python-nose))
15968 (modify-phases %standard-phases
15969 (add-before 'build 'patch
15970 ;; Hard-code the path to pkg-config.
15972 (substitute* "pkgconfig/pkgconfig.py"
15974 (string-append "'" (which "pkg-config") "'")))))
15977 (invoke "nosetests" "test.py"))))))
15978 (home-page "https://github.com/matze/pkgconfig")
15979 (synopsis "Python interface for pkg-config")
15980 (description "This module provides a Python interface to pkg-config. It
15981 can be used to find all pkg-config packages, check if a package exists,
15982 check if a package meets certain version requirements, query CFLAGS and
15983 LDFLAGS and parse the output to build extensions with setup.py.")
15984 (license license:expat)))
15986 (define-public python-bz2file
15988 (name "python-bz2file")
15993 (uri (pypi-uri "bz2file" version))
15996 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
15997 (build-system python-build-system)
15999 `(#:tests? #f)) ; Tests use deprecated python modules.
16000 (home-page "https://github.com/nvawda/bz2file")
16001 (synopsis "Read and write bzip2-compressed files")
16003 "Bz2file is a Python library for reading and writing bzip2-compressed
16004 files. It contains a drop-in replacement for the I/O interface in the
16005 standard library's @code{bz2} module, including features from the latest
16006 development version of CPython that are not available in older releases.")
16007 (license license:asl2.0)))
16009 (define-public python-future
16011 (name "python-future")
16016 (uri (pypi-uri "future" version))
16019 "0zakvfj87gy6mn1nba06sdha63rn4njm7bhh0wzyrxhcny8avgmi"))))
16020 (build-system python-build-system)
16021 ;; Many tests connect to the network or are otherwise flawed.
16022 ;; https://github.com/PythonCharmers/python-future/issues/210
16026 (modify-phases %standard-phases
16027 (replace 'sanity-check
16028 (let ((sanity-check (assoc-ref %standard-phases 'sanity-check)))
16029 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
16030 (let* ((files (find-files (site-packages inputs outputs)
16031 "top_level\\.txt"))
16032 (backups (map (lambda (f) (string-append f ".bak"))
16034 (for-each copy-file files backups)
16036 ;; Nobody be usin' winreg on Guix
16037 ;; Also, don't force users to have tkinter when they don't
16039 (("(winreg|tkinter)") ""))
16040 (apply sanity-check args)
16041 (for-each rename-file backups files))))))))
16042 (home-page "https://python-future.org")
16043 (synopsis "Single-source support for Python 3 and 2")
16045 "@code{python-future} is the missing compatibility layer between Python 2 and
16046 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
16047 to support both Python 2 and Python 3 with minimal overhead.")
16048 (license license:expat)))
16050 (define-public python-cysignals
16052 (name "python-cysignals")
16057 (uri (pypi-uri "cysignals" version))
16060 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
16061 (build-system python-build-system)
16063 (list python-cython python-sphinx))
16067 `(#:modules ((guix build python-build-system)
16068 ((guix build gnu-build-system) #:prefix gnu:)
16069 (guix build utils))
16070 ;; FIXME: Tests are executed after installation and currently fail
16071 ;; when not installing into standard locations; the author is working
16075 (modify-phases %standard-phases
16078 (assoc-ref gnu:%standard-phases 'configure)))))
16080 "https://github.com/sagemath/cysignals")
16082 "Handling of interrupts and signals for Cython")
16084 "The cysignals package provides mechanisms to handle interrupts (and
16085 other signals and errors) in Cython code, using two related approaches,
16086 for mixed Cython/Python code or external C libraries and pure Cython code,
16088 (license license:lgpl3+)))
16090 (define-public python-rope
16092 (name "python-rope")
16097 (uri (pypi-uri "rope" version))
16100 "0bkzwkllxxdxd3w70xiy137lqvnlmmaplsc2ya3s23ss4kq8y10k"))))
16101 (build-system python-build-system)
16104 `(modify-phases %standard-phases
16105 (add-after 'unpack 'disable-broken-test
16107 (substitute* "ropetest/contrib/autoimporttest.py"
16108 (("def test_search_module")
16109 "def __notest_search_module")
16110 (("def test_search_submodule")
16111 "def __notest_search_submodule")))))))
16113 (list python-pytest-timeout
16115 (home-page "https://github.com/python-rope/rope")
16116 (synopsis "Refactoring library for Python")
16117 (description "Rope is a refactoring library for Python. It facilitates
16118 the renaming, moving and extracting of attributes, functions, modules, fields
16119 and parameters in Python source code. These refactorings can also be applied
16120 to occurrences in strings and comments.")
16121 (license license:lgpl3+)))
16123 (define-public python-py3status
16125 (name "python-py3status")
16130 (uri (pypi-uri "py3status" version))
16132 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
16133 (build-system python-build-system)
16138 (modify-phases %standard-phases
16139 ;; 'file' is used for detection of configuration file encoding
16140 ;; let's make link the dependency to particular input
16141 (add-before 'build 'patch-file-path
16142 (lambda* (#:key inputs #:allow-other-keys)
16143 (let ((file-path (assoc-ref inputs "file")))
16144 (substitute* "py3status/parse_config.py"
16145 (("\\[\"file\", \"-b\"")
16146 (string-append "['" file-path "/bin/file', '-b'")))
16148 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
16149 (home-page "https://github.com/ultrabug/py3status")
16150 (synopsis "Extensible i3status wrapper written in Python")
16151 (description "py3status is an i3status wrapper which extends i3status
16152 functionality in a modular way, allowing you to extend your panel with your
16153 own code, responding to click events and updating clock every second.")
16154 (license license:bsd-3)))
16156 (define-public python-tblib
16158 (name "python-tblib")
16162 (uri (pypi-uri "tblib" version))
16165 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
16166 (build-system python-build-system)
16169 (modify-phases %standard-phases
16172 (invoke "py.test" "-vv" "tests" "README.rst"))))))
16174 (list python-pytest python-six))
16175 (home-page "https://github.com/ionelmc/python-tblib")
16176 (synopsis "Traceback serialization library")
16178 "Traceback serialization allows you to:
16181 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
16182 different processes. This allows better error handling when running code over
16183 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
16185 @item Parse traceback strings and raise with the parsed tracebacks.
16187 (license license:bsd-3)))
16189 (define-public python-tftpy
16191 (name "python-tftpy")
16195 (method git-fetch) ;no tests in PyPI archive
16196 (uri (git-reference
16197 (url "https://github.com/msoulier/tftpy")
16199 (file-name (git-file-name name version))
16202 "1gl04ps8h8r7av3h0zbm8gwmkqs9rkk5vf7n8mv2bzrkwvy9hacc"))))
16203 (build-system python-build-system)
16205 `(#:phases (modify-phases %standard-phases
16207 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
16209 ;; The default DEBUG logging level is way too verbose.
16210 (substitute* "t/test.py"
16211 (("logging\\.DEBUG")
16213 (invoke "python" "-m" "unittest" "t/test.py")))))))
16214 (home-page "http://tftpy.sourceforge.net/")
16215 (synopsis "Python trivial file transfer protocol (TFTP) library")
16216 (description "TFTPy is a trivial file transfer protocol (TFTP) Python
16217 library. It can be used to act both as a TFTP client or TFTP server.")
16218 (license license:expat)))
16220 (define-public python-greenlet
16222 (name "python-greenlet")
16226 (uri (pypi-uri "greenlet" version))
16229 "0jkln5bf6rq7dbvpv7ypin3pp9jqd2jr91yyxlnfcii3msj5w3z3"))))
16230 (build-system python-build-system)
16231 (home-page "https://greenlet.readthedocs.io/")
16232 (synopsis "Lightweight in-process concurrent programming")
16234 "Greenlet package is a spin-off of Stackless, a version of CPython
16235 that supports micro-threads called \"tasklets\". Tasklets run
16236 pseudo-concurrently (typically in a single or a few OS-level threads) and
16237 are synchronized with data exchanges on \"channels\".")
16238 (license (list license:psfl license:expat))))
16240 (define-public python-objgraph
16242 (name "python-objgraph")
16247 (uri (pypi-uri "objgraph" version))
16250 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
16251 (build-system python-build-system)
16253 (list python-graphviz))
16255 (list python-mock graphviz))
16256 (home-page "https://mg.pov.lt/objgraph/")
16257 (synopsis "Draw Python object reference graphs with graphviz")
16259 "This package provides tools to draw Python object reference graphs with
16261 (license license:expat)))
16263 (define-public python-gevent
16265 (name "python-gevent")
16266 (version "21.12.0")
16269 (uri (pypi-uri "gevent" version))
16272 "0kh9mmq811mzfgj60n64icybjp4ryjmfmy1vg7x92yrniibn92zl"))
16273 (modules '((guix build utils)))
16276 ;; unbunding libev and c-ares
16277 (delete-file-recursively "deps")
16278 ;; Remove cythonized files.
16279 (with-directory-excursion "src/gevent"
16280 (for-each delete-file
16281 (append (list "resolver/cares.c"
16293 "_hub_primitives.c"
16295 "_greenlet_primitives.c"
16296 "_abstract_linkable.c")
16297 (find-files "." "\\.html$"))))))))
16298 (build-system python-build-system)
16300 `(#:modules ((ice-9 ftw)
16304 (guix build python-build-system))
16305 #:phases (modify-phases %standard-phases
16306 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
16308 (substitute* "src/gevent/subprocess.py"
16309 (("/bin/sh") (which "sh")))
16310 (for-each (lambda (file)
16312 (("/bin/sh") (which "sh"))
16313 (("/bin/true") (which "true"))))
16314 (find-files "src/greentest" "\\.py$"))))
16315 (add-before 'build 'do-not-use-bundled-sources
16317 (setenv "GEVENTSETUP_EMBED" "0")
16319 ;; Prevent building bundled libev.
16320 (substitute* "setup.py"
16321 (("run_make=_BUILDING")
16322 "run_make=False"))))
16323 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
16324 (lambda* (#:key inputs #:allow-other-keys)
16325 (let ((greenlet (string-append
16326 (assoc-ref inputs "python-greenlet")
16328 (match (scandir greenlet
16330 (string-prefix? "python" item)))
16332 (setenv "C_INCLUDE_PATH"
16333 (string-append greenlet "/" python ":"
16334 (or (getenv "C_INCLUDE_PATH")
16336 (add-before 'check 'pretend-to-be-CI
16338 ;; A few tests are skipped due to network constraints or
16339 ;; get longer timeouts when running in a CI environment.
16340 ;; Piggy-back on that, as we need the same adjustments.
16341 (setenv "TRAVIS" "1")
16342 (setenv "APPVEYOR" "1")))
16343 (add-before 'check 'adjust-tests
16345 (let ((disabled-tests
16346 '(;; These tests relies on networking which is
16347 ;; not available in the build container.
16348 "test__getaddrinfo_import.py"
16349 "test__server_pywsgi.py"
16350 ;; XXX: These tests borrow functionality from the
16351 ;; Python builtin 'test' module, but it is not
16352 ;; installed with the Guix Python distribution.
16357 "test_threading.py"
16358 "test__threading_2.py"
16359 ;; These tests rely on KeyboardInterrupts which do not
16360 ;; work inside the build container for some reason
16361 ;; (lack of controlling terminal?).
16362 "test_subprocess.py"
16363 "test__issues461_471.py"
16364 ;; TODO: Patch out the tests that use getprotobyname, etc
16365 ;; instead of disabling all the tests from these files.
16366 "test__resolver_dnspython.py"
16367 "test__doctests.py"
16370 "test__execmodules.py"
16371 ;; This test contains 'test_unlink', which
16372 ;; fails on i686 (see:
16373 ;; https://github.com/gevent/gevent/issues/1558).
16374 "test__core_stat.py")))
16375 (call-with-output-file "skipped_tests.txt"
16377 (format port "~a~%"
16378 (string-join disabled-tests "\n")))))))
16381 ;; Use the build daemons configured number of workers.
16382 (setenv "NWORKERS" (number->string (parallel-job-count)))
16384 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
16385 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
16387 (list python-greenlet python-zope-event python-zope-interface))
16389 (list python-cython
16391 python-dnspython python-psutil python-objgraph))
16393 (list c-ares libev))
16394 (home-page "https://www.gevent.org/")
16395 (synopsis "Coroutine-based network library")
16397 "@code{gevent} is a coroutine-based Python networking library that uses
16398 @code{greenlet} to provide a high-level synchronous API on top of the
16399 @code{libev} event loop.")
16400 (license license:expat)))
16402 (define-public python-fastimport
16404 (name "python-fastimport")
16409 (uri (pypi-uri "fastimport" version))
16411 (base32 "06gk14qgm9dxx3pzjn0ckdbywc8ial2bjfzddqwlr4bn1nnqkbll"))))
16412 (build-system python-build-system)
16413 (home-page "https://github.com/jelmer/python-fastimport")
16414 (synopsis "VCS fastimport parser and generator in Python")
16415 (description "This package provides a parser for and generator of the Git
16416 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
16418 (license license:gpl2+)))
16420 (define-public python-twisted
16422 (name "python-twisted")
16426 (uri (pypi-uri "Twisted" version ".tar.bz2"))
16429 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
16430 (build-system python-build-system)
16432 '(#:tests? #f ; FIXME: some tests fail
16434 (modify-phases %standard-phases
16435 ;; Remove scripts, because they depend on [conch]
16436 (add-after 'unpack 'remove-entrypoint
16438 (substitute* "src/twisted/python/_setup.py"
16439 (("\".+ = twisted\\.conch\\.scripts\\..+\",") "")))))))
16441 (list python-zope-interface
16447 (home-page "https://twistedmatrix.com/")
16448 (synopsis "Asynchronous networking framework written in Python")
16450 "Twisted is an extensible framework for Python programming, with special
16451 focus on event-based network programming and multiprotocol integration.")
16452 (license license:expat)))
16454 (define-public python-pika
16456 (name "python-pika")
16461 (uri (git-reference
16462 (url "https://github.com/pika/pika")
16464 (file-name (git-file-name name version))
16467 "0sqj3bg6jwign8vwvn337fbwy69sm684ns1vh5kbfnskq4him9i2"))))
16468 (build-system python-build-system)
16470 '(#:phases (modify-phases %standard-phases
16471 (add-after 'unpack 'disable-live-tests
16473 ;; Disable tests that require RabbitMQ, which is not
16474 ;; yet available in Guix.
16475 (substitute* "nose2.cfg"
16476 (("tests=tests/unit,tests/acceptance")
16477 "start-dir=tests/unit"))
16478 (with-directory-excursion "tests"
16479 (for-each delete-file
16480 '("unit/base_connection_tests.py"
16481 "unit/threaded_test_wrapper_test.py")))))
16483 (lambda* (#:key tests? #:allow-other-keys)
16485 (setenv "PYTHONPATH" (getcwd))
16486 (invoke "nose2" "-v")))))))
16490 ;; These are optional at runtime, and provided here for tests.
16494 (home-page "https://pika.readthedocs.org")
16495 (synopsis "Pure Python AMQP Client Library")
16497 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
16498 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
16499 network support library.")
16500 (license license:bsd-3)))
16502 (define-public python-ply
16504 (name "python-ply")
16509 (uri (pypi-uri "ply" version))
16512 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
16513 (build-system python-build-system)
16514 (home-page "http://www.dabeaz.com/ply/")
16515 (synopsis "Python Lex & Yacc")
16516 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
16517 It uses LR parsing and does extensive error checking.")
16518 (license license:bsd-3)))
16520 (define-public python-tabulate
16522 (name "python-tabulate")
16526 (uri (pypi-uri "tabulate" version))
16529 "19qkdz8xwk5jxa5xn53mnk76qnh4ysm81vzj664jw1b0azr167gb"))))
16530 (build-system python-build-system)
16532 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
16533 ;; and the latest release is not tagged in the upstream repository.
16535 (home-page "https://bitbucket.org/astanin/python-tabulate")
16536 (synopsis "Pretty-print tabular data")
16538 "Tabulate is a library and command-line utility to pretty-print tabular
16540 (license license:expat)))
16542 (define-public python-kazoo
16544 (name "python-kazoo")
16549 (uri (pypi-uri "kazoo" version))
16552 "1zpj5cc8624w6i0pxgcxqkjwbkm4pkrv19d7wh5df3jais32g3jq"))))
16553 (build-system python-build-system)
16554 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
16557 (home-page "https://kazoo.readthedocs.org")
16558 (synopsis "High-level Zookeeper client library")
16560 "Kazoo is a Python client library for the Apache Zookeeper distributed
16561 application service. It is designed to be easy to use and to avoid common
16562 programming errors.")
16563 (license license:asl2.0)))
16565 (define-public python-pykafka
16567 (name "python-pykafka")
16571 (uri (pypi-uri "pykafka" version))
16574 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
16575 (build-system python-build-system)
16576 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
16578 (list python-gevent python-kazoo python-tabulate))
16581 (home-page "https://pykafka.readthedocs.io/")
16582 (synopsis "Apache Kafka client for Python")
16584 "PyKafka is a client for the Apache Kafka distributed messaging system.
16585 It includes Python implementations of Kafka producers and consumers, which
16586 are optionally backed by a C extension built on librdkafka.")
16587 (license license:asl2.0)))
16589 (define-public python-wcwidth
16591 (name "python-wcwidth")
16595 (uri (pypi-uri "wcwidth" version))
16598 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
16599 (build-system python-build-system)
16600 (home-page "https://github.com/jquast/wcwidth")
16601 (synopsis "Measure number of terminal column cells of wide-character codes")
16602 (description "Wcwidth measures the number of terminal column cells of
16603 wide-character codes. It is useful for those implementing a terminal emulator,
16604 or programs that carefully produce output to be interpreted by one. It is a
16605 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
16606 specified in POSIX.1-2001 and POSIX.1-2008.")
16607 (license license:expat)))
16609 (define-public python-chai
16611 (name "python-chai")
16615 (uri (pypi-uri "chai" version))
16618 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))
16619 (patches (search-patches "python-chai-drop-python2.patch"))))
16620 (build-system python-build-system)
16621 (home-page "https://github.com/agoragames/chai")
16622 (synopsis "Mocking framework for Python")
16624 "Chai provides an api for mocking, stubbing and spying your python
16625 objects, patterned after the Mocha library for Ruby.")
16626 (license license:bsd-3)))
16628 (define-public python-inflection
16630 (name "python-inflection")
16633 (origin (method url-fetch)
16634 (uri (pypi-uri "inflection" version))
16637 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
16638 (build-system python-build-system)
16640 (list python-pytest))
16641 (home-page "https://github.com/jpvanhal/inflection")
16642 (synopsis "Python string transformation library")
16644 "Inflection is a string transformation library. It singularizes
16645 and pluralizes English words, and transforms strings from CamelCase to
16646 underscored string.")
16647 (license license:expat)))
16649 (define-public python-pylev
16651 (name "python-pylev")
16655 (uri (pypi-uri "pylev" version))
16658 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
16659 (build-system python-build-system)
16660 (home-page "https://github.com/toastdriven/pylev")
16661 (synopsis "Levenshtein distance implementation in Python")
16662 (description "Pure Python Levenshtein implementation, based off the
16663 Wikipedia code samples at
16664 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
16665 (license license:bsd-3)))
16667 (define-public python-cleo
16669 (name "python-cleo")
16673 (uri (pypi-uri "cleo" version))
16676 "17q6wi3q280kxmxzb2iwnnqih2xbljn18v0bjx2ip18p079j43ix"))))
16677 (build-system python-build-system)
16679 (list ;; For testing
16680 python-mock python-pytest-mock python-pytest))
16682 (list python-backpack python-clikit python-pastel python-pylev))
16683 (home-page "https://github.com/sdispater/cleo")
16684 (synopsis "Command-line arguments library for Python")
16686 "Cleo allows you to create command-line commands with signature in
16687 docstring and colored output.")
16688 (license license:expat)))
16690 (define-public python-tomlkit
16692 (name "python-tomlkit")
16697 (uri (pypi-uri "tomlkit" version))
16699 (base32 "062n694sfv24ylda6nh8228y2q9hrvy554kqx84y7czsjfbg4mxc"))))
16700 (build-system python-build-system)
16702 (list python-pytest python-pyyaml))
16703 (home-page "https://github.com/sdispater/tomlkit")
16704 (synopsis "Style-preserving TOML library")
16706 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
16707 preserves all comments, indentations, whitespace and internal element ordering,
16708 and makes them accessible and editable via an intuitive API. It can also
16709 create new TOML documents from scratch using the provided helpers. Part of the
16710 implementation has been adapted, improved, and fixed from Molten.")
16711 (license license:expat)))
16713 (define-public python-shellingham
16715 (name "python-shellingham")
16720 (uri (pypi-uri "shellingham" version))
16722 (base32 "07hpndvcv9mf9hp54b4apzpwzmzfzl8ryaacsfdq4139im2w4ma8"))))
16723 (build-system python-build-system)
16724 (home-page "https://github.com/sarugaku/shellingham")
16725 (synopsis "Tool to detect surrounding shell")
16727 "Shellingham detects what shell the current Python executable is
16729 (license license:isc)))
16731 (define-public python-memcached
16733 (name "python-memcached")
16738 (uri (pypi-uri "python-memcached" version))
16741 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))
16742 (patches (search-patches "python-memcached-syntax-warnings.patch"))))
16743 (build-system python-build-system)
16744 (propagated-inputs (list python-six))
16746 "https://github.com/linsomniac/python-memcached")
16747 (synopsis "Pure python memcached client")
16749 "This software is a pure Python interface to the memcached memory cache
16750 daemon. It is the client side software which allows storing values in one or
16751 more, possibly remote, memcached servers.")
16752 (license license:psfl)))
16754 (define-public python-mergedeep
16756 (name "python-mergedeep")
16761 (uri (git-reference
16762 (url "https://github.com/clarketm/mergedeep")
16763 (commit (string-append "v" version))))
16764 (file-name (git-file-name name version))
16767 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
16768 (build-system python-build-system)
16769 (native-inputs (list python-pytest))
16770 (home-page "https://github.com/clarketm/mergedeep")
16771 (synopsis "Deep merge function for Python")
16772 (description "This package provides a deep merge function for Python,
16773 useful to combine multiple data objects as one.")
16774 (license license:expat)))
16776 (define-public python-clikit
16778 (name "python-clikit")
16783 (uri (pypi-uri "clikit" version))
16786 "0ngdkmb73gkp5y00q7r9k1cdlfn0wyzws2wrqlshc4hlkbdyabj4"))))
16787 (build-system python-build-system)
16788 (arguments '(#:tests? #f)) ; no test in the PyPI tarball
16790 (list python-crashtest python-pastel python-pylev))
16791 (home-page "https://github.com/sdispater/clikit")
16792 (synopsis "Group of utilities to build command line interfaces")
16794 "CliKit is a group of utilities to build testable command line
16796 (license license:expat)))
16798 (define-public python-msgpack-python
16800 (name "python-msgpack-python")
16805 (uri (pypi-uri "msgpack-python" version))
16808 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
16809 (build-system python-build-system)
16810 (home-page "https://msgpack.org/")
16811 (synopsis "Package to deserialize messages in MessagePack binary format")
16813 "MessagePack is an efficient binary serialization format. It lets you
16814 exchange data among multiple languages like JSON. But it's faster and
16815 smaller. Small integers are encoded into a single byte, and typical short
16816 strings require only one extra byte in addition to the strings themselves.")
16817 (license license:asl2.0)))
16819 (define-public python-cattrs
16821 (name "python-cattrs")
16824 (method git-fetch) ;for tests
16825 (uri (git-reference
16826 (url "https://github.com/python-attrs/cattrs")
16827 (commit (string-append "v" version))))
16828 (file-name (git-file-name name version))
16831 "1n0h25gj6zd02kqyl040xpdvg4hpy1j92716sz0rg019xjqqijqb"))))
16832 (build-system python-build-system)
16836 #~(modify-phases %standard-phases
16837 ;; XXX: PEP 517 manual build copied from python-isort.
16838 (add-after 'unpack 'adjust-for-older-attrs
16839 ;; Our older attrs package is using the 'attr' rather than 'attrs'
16841 ;; TODO: Remove after python-attrs is updated to >= 21.4.0.
16843 (substitute* (find-files "." "\\.py$")
16848 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
16851 (let ((whl (car (find-files "dist" "\\.whl$"))))
16852 (invoke "pip" "--no-cache-dir" "--no-input"
16853 "install" "--no-deps" "--prefix" #$output whl))))
16855 (lambda* (#:key tests? #:allow-other-keys)
16857 ;; Do not use the 'pytest' binary as it hard-codes an older
16858 ;; python-hypothesis version near the beginning of its
16859 ;; GUIX_PYTHONPATH.
16860 (invoke "python" "-m" "pytest" "-vv" "-c" "/dev/null" "tests"
16861 "-n" (number->string (parallel-job-count))
16862 ;; This test requires orjson, which needs the maturin
16863 ;; build system and new Rust dependencies.
16864 "--ignore" "tests/test_preconf.py")))))))
16866 (list python-hypothesis-next
16870 python-pymongo ;for the bson module
16873 python-pytest-xdist))
16876 python-exceptiongroup
16877 python-typing-extensions))
16878 (home-page "https://github.com/python-attrs/cattrs")
16879 (synopsis "Python library for structuring and unstructuring data")
16880 (description "@code{cattrs} is an Python library for structuring and
16881 unstructuring data. @code{cattrs} works best with @code{attrs} classes,
16882 @code{dataclasses} and the usual Python collections, but other kinds of
16883 classes can also be supported by manually registering converters.")
16884 (license license:expat)))
16886 (define-public python-cachy
16888 (name "python-cachy")
16893 (uri (pypi-uri "cachy" version))
16896 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
16897 (build-system python-build-system)
16900 (modify-phases %standard-phases
16902 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
16905 (list memcached python-fakeredis python-flexmock python-pifpaf
16908 (list python-memcached python-msgpack-python python-redis))
16909 (home-page "https://github.com/sdispater/cachy")
16910 (synopsis "Simple yet effective caching library")
16912 "Cachy provides a simple yet effective caching library. A simple but
16913 powerful API: thread-safety; decorator syntax; support for memcached, redis,
16914 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
16915 (license license:expat)))
16917 (define-public poetry
16924 (uri (pypi-uri "poetry" version))
16927 "0rr54mvcfcv9cv6vw2122y28xvd2pwqpv2x8c8j5ayz3gwsy4rjw"))))
16928 (build-system python-build-system)
16930 `(#:tests? #f ;PyPI does not have tests
16932 (modify-phases %standard-phases
16933 (add-before 'build 'patch-setup-py
16935 (substitute* "setup.py"
16936 ;; Relax some of the requirements.
16937 (("(keyring>=21.2.0),<22.0.0" _ keyring) keyring)
16938 (("(packaging>=20.4),<21.0" _ packaging) packaging)))))))
16940 (list python-cachecontrol
16947 ; Use of deprecated version of msgpack reported upstream:
16948 ; https://github.com/python-poetry/poetry/issues/3607
16949 python-msgpack-transitional
16956 python-requests-toolbelt
16959 python-virtualenv))
16960 (home-page "https://python-poetry.org")
16961 (synopsis "Python dependency management and packaging made easy")
16962 (description "Poetry is a tool for dependency management and packaging
16963 in Python. It allows you to declare the libraries your project depends on and
16964 it will manage (install/update) them for you.")
16965 (license license:expat)))
16967 (define-public python-lark-parser
16969 (name "python-lark-parser")
16973 (uri (pypi-uri "lark-parser" version))
16976 "1kd61asrb3h9spgsj4bslfbgp8q4271sw3hblk6f2vbbblv8jxcy"))))
16977 (build-system python-build-system)
16978 (home-page "https://github.com/lark-parser/lark")
16979 (synopsis "Multi-language parser for Python")
16981 "Lark is a parser built with a focus on ergonomics, performance and
16982 resilience. Lark can parse all context-free languages. That means it is
16983 capable of parsing almost any programming language out there, and to
16984 some degree most natural languages too.")
16985 (license license:expat)))
16987 (define-public python-libcst
16989 (name "python-libcst")
16993 (uri (pypi-uri "libcst" version))
16996 "05zsc61gsd2pyb6wiyh58zczndxi6rm4d2jl94rpf5cv1fzw6ks8"))))
16997 (build-system python-build-system)
17000 (modify-phases %standard-phases
17001 (add-after 'unpack 'remove-failing-tests
17003 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/346>.
17004 (delete-file "libcst/tests/test_fuzz.py")
17005 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/347>.
17006 (delete-file "libcst/tests/test_pyre_integration.py")
17007 (delete-file "libcst/codemod/tests/test_codemod_cli.py")
17008 (delete-file "libcst/metadata/tests/test_full_repo_manager.py")
17009 (delete-file "libcst/metadata/tests/test_type_inference_provider.py")))
17010 (add-before 'check 'generate-test-data
17012 (invoke "python" "-m" "libcst.codegen.generate" "visitors")
17013 (invoke "python" "-m" "libcst.codegen.generate" "return_types")))
17015 (lambda* (#:key tests? #:allow-other-keys)
17017 (invoke "python" "-m" "unittest")))))))
17019 (list python-black python-isort))
17021 (list python-typing-extensions python-typing-inspect python-pyyaml))
17022 (home-page "https://github.com/Instagram/LibCST")
17023 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
17025 "LibCST parses Python source code as a CST tree that keeps all
17026 formatting details (comments, whitespaces, parentheses, etc). It's useful
17027 for building automated refactoring (codemod) applications and linters.
17028 LibCST creates a compromise between an Abstract Syntax Tree (AST) and
17029 a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
17030 naming node types and fields, LibCST creates a lossless CST that looks and
17031 feels like an AST.")
17032 (license (list license:expat
17033 ;; Some files unde libcst/_parser/ are under Python Software
17034 ;; Foundation license (see LICENSE file for details)
17036 ;; libcst/_add_slots.py
17039 (define-public python-libcst-minimal
17042 (inherit python-libcst)
17043 (name "python-libcst-minimal")
17044 (arguments '(#:tests? #f))
17045 (native-inputs '()))))
17047 (define-public python-typing-inspect
17049 (name "python-typing-inspect")
17053 (uri (pypi-uri "typing_inspect" version))
17056 "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))
17057 (patches (search-patches "python-typing-inspect-fix.patch"))))
17058 (build-system python-build-system)
17060 (list python-mypy-extensions python-typing-extensions))
17061 (home-page "https://github.com/ilevkivskyi/typing_inspect")
17062 (synopsis "API for inspection of types in the Python @code{typing} module")
17064 "The @code{typing_inspect} module defines experimental API for runtime
17065 inspection of types defined in the Python standard typing module.")
17066 (license license:expat)))
17068 (define-public python-lazy-object-proxy
17070 (name "python-lazy-object-proxy")
17074 (uri (pypi-uri "lazy-object-proxy" version))
17077 "0hwh29m9wa582ramj30p4pysckdrmki1z1b8iaaxk6mpfx2kc8wp"))))
17079 (list python-setuptools-scm))
17080 (build-system python-build-system)
17081 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
17082 (synopsis "Lazy object proxy for python")
17084 "Lazy object proxy is an object that wraps a callable but defers the call
17085 until the object is actually required, and caches the result of said call.")
17086 (license license:bsd-2)))
17088 (define-public python-dnspython
17090 (name "python-dnspython")
17094 (uri (pypi-uri "dnspython" version ".zip"))
17097 "1m0xvyby8baaxp6pfm0fgq8d2pq5dd8qm8bzfbrs009jaw5pza74"))))
17098 (build-system python-build-system)
17100 `(#:tests? #f ; XXX: requires internet access
17102 (modify-phases %standard-phases
17103 (add-after 'unpack 'patch-getprotobyname-calls
17104 ;; These calls are problematic in the build environment as there is
17105 ;; no /etc/protocols. This breaks the sanity-check phase of any
17106 ;; package depnding on this one.
17108 (substitute* "dns/rdtypes/IN/WKS.py"
17109 (("socket.getprotobyname\\('tcp'\\)")
17111 (("socket.getprotobyname\\('udp'\\)")
17113 (native-inputs (list unzip))
17114 (home-page "https://www.dnspython.org")
17115 (synopsis "DNS toolkit for Python")
17117 "dnspython is a DNS toolkit for Python. It supports almost all record
17118 types. It can be used for queries, zone transfers, and dynamic updates.
17119 It supports TSIG authenticated messages and EDNS0.")
17120 (license license:expat)))
17122 (define-public python-dnspython-1.16
17124 (inherit python-dnspython)
17128 (uri (string-append "http://www.dnspython.org/kits/"
17129 version "/dnspython-" version ".tar.gz"))
17132 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
17133 (native-inputs '())))
17135 (define-public python-py3dns
17137 (name "python-py3dns")
17142 (uri (pypi-uri "py3dns" version))
17145 "1r25f0ys5p37bhld7m7n4gb0lrysaym3w318w2f8bncq7r3d81qz"))))
17146 (build-system python-build-system)
17147 ;; This package wants to read /etc/resolv.conf. We can't patch it without
17148 ;; removing functionality so we copy from Nix and "just don't build it".
17151 (modify-phases %standard-phases
17152 (add-after 'unpack 'patch-source
17154 (substitute* "setup.py"
17155 (("import DNS") "")
17156 (("DNS.__version__") (string-append "\"" ,version "\"")))
17158 #:tests? #f)) ; Also skip the tests.
17159 (home-page "https://launchpad.net/py3dns")
17160 (synopsis "Python 3 DNS library")
17161 (description "This Python 3 module provides a DNS API for looking up DNS
17162 entries from within Python 3 modules and applications. This module is a
17163 simple, lightweight implementation.")
17164 (license license:psfl)))
17166 (define-public python-email-validator
17168 (name "python-email-validator")
17171 (origin (method url-fetch)
17172 (uri (pypi-uri "email_validator" version))
17175 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
17176 (build-system python-build-system)
17179 (modify-phases %standard-phases
17180 (add-before 'build 'use-dnspython
17182 (substitute* "setup.py"
17183 (("dnspython3") "dnspython"))
17186 (list python-dnspython python-idna))
17187 (home-page "https://github.com/JoshData/python-email-validator")
17188 (synopsis "Email address validation library for Python")
17190 "This library validates email address syntax and deliverability.")
17191 (license license:cc0)))
17193 (define-public python-ukpostcodeparser
17195 (name "python-ukpostcodeparser")
17199 (uri (pypi-uri "UkPostcodeParser" version))
17202 "03jkf1ygbwq3akzbcjyjk1akc1hv2sfgx90306pq1nwklbpn80lk"))))
17203 (build-system python-build-system)
17206 (modify-phases %standard-phases
17208 (lambda* (#:key tests? #:allow-other-keys)
17210 ;; Tests for lowercase postcodes fail.
17211 (invoke "pytest" "-vv" "ukpostcodeparser/test/parser.py" "-k"
17212 (string-append "not test_091 "
17213 "and not test_097 "
17214 "and not test_098 "
17215 "and not test_125 "
17216 "and not test_131"))))))))
17218 (list python-pytest))
17219 (home-page "https://github.com/hamstah/ukpostcodeparser")
17220 (synopsis "UK Postcode parser for Python")
17222 "This library provides the @code{parse_uk_postcode} function for
17223 parsing UK postcodes.")
17224 (license license:expat)))
17226 (define-public python-faker
17228 (name "python-faker")
17232 (uri (pypi-uri "Faker" version))
17235 "04855dqvvi2mr739l5x3qf82rxq0a7spc8gl76k8xixmbw36328q"))))
17236 (build-system python-build-system)
17239 (modify-phases %standard-phases
17241 (lambda* (#:key tests? #:allow-other-keys)
17243 (invoke "python" "-m" "pytest" "-v")))))))
17245 (list python-freezegun
17248 python-ukpostcodeparser
17249 python-validators))
17250 (propagated-inputs (list python-dateutil))
17251 (home-page "https://github.com/joke2k/faker")
17252 (synopsis "Python package that generates fake data")
17254 "Faker is a Python package that generates fake data such as names,
17255 addresses, and phone numbers.")
17256 (license license:expat)))
17258 (define-public python-pyaml
17260 (name "python-pyaml")
17261 (version "21.10.1")
17264 (uri (pypi-uri "pyaml" version))
17267 "10w3frzqir5sbpglc9bwb8w414dsivmcvji07yxy61mz2gp9ylf6"))))
17268 (build-system python-build-system)
17270 (list python-unidecode))
17272 (list python-pyyaml))
17273 (home-page "https://github.com/mk-fg/pretty-yaml")
17274 (synopsis "YAML pretty-print library for Python")
17276 "pyaml is a PyYAML based python module to produce pretty and readable
17277 YAML-serialized data.")
17278 (license license:wtfpl2)))
17280 (define-public python-pyyaml-env-tag
17282 (name "python-pyyaml-env-tag")
17287 (uri (pypi-uri "pyyaml_env_tag" version))
17289 (base32 "1nsva88jsmwn0cb9jnrfiz4dvs9xakkpgfii7g1xwkx1pmsjc2bh"))))
17290 (build-system python-build-system)
17291 (propagated-inputs (list python-pyyaml))
17292 (home-page "https://github.com/waylan/pyyaml-env-tag")
17293 (synopsis "Custom YAML tag for environment variables")
17294 (description "This package provides a custom YAML tag for referencing
17295 environment variables in YAML files.")
17296 (license license:expat)))
17298 (define-public python-backpack
17300 (name "python-backpack")
17305 (uri (pypi-uri "backpack" version))
17308 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
17309 (build-system python-build-system)
17311 (list python-pytest python-nose python-toml))
17313 (list python-simplejson))
17314 (home-page "https://github.com/sdispater/backpack")
17315 (synopsis "Utilities for working with Python collections")
17316 (description "Backpack provides some useful utilities for working with
17317 collections of data.")
17318 (license license:expat)))
17320 (define-public python-prompt-toolkit
17322 (name "python-prompt-toolkit")
17327 (uri (pypi-uri "prompt_toolkit" version))
17329 (base32 "19vf5cahp3imdpwhgvk55g3dvqmc6ga175r4vkq79kffx1h0yr5x"))))
17330 (build-system python-build-system)
17333 (modify-phases %standard-phases
17335 (lambda* (#:key tests? #:allow-other-keys)
17337 ;; HOME is needed for the test
17338 ;; "test_pathcompleter_can_expanduser".
17339 (setenv "HOME" "/tmp")
17340 (invoke "pytest" "-vv")))))))
17342 (list python-wcwidth))
17344 (list python-pytest))
17345 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
17346 (synopsis "Library for building command line interfaces in Python")
17348 "Prompt-Toolkit is a library for building interactive command line
17349 interfaces in Python. It's like GNU Readline but it also features syntax
17350 highlighting while typing, out-of-the-box multi-line input editing, advanced
17351 code completion, incremental search, support for Chinese double-width
17352 characters, mouse support, and auto suggestions.")
17353 (license license:bsd-3)))
17355 (define-public python-proselint
17357 (name "python-proselint")
17362 (uri (pypi-uri "proselint" version))
17365 "0n1ahnq2mkgvh94g05xhc3l1fs3hh0ycskqlqivhhfdaq8ybdlkx"))))
17366 (build-system python-build-system)
17370 (modify-phases %standard-phases
17371 (add-after 'unpack 'set-home-directory
17373 (setenv "HOME" "/tmp"))))))
17375 (list python-click python-future python-six))
17376 (home-page "https://github.com/amperser/proselint")
17377 (synopsis "Linter for prose")
17378 (description "@code{python-proselint} is a linter for English prose, that
17379 scans through a file and detects issues.")
17380 (license license:bsd-3)))
17382 (define-public python-jedi
17384 (name "python-jedi")
17389 (uri (git-reference
17390 (url "https://github.com/davidhalter/jedi")
17391 (commit (string-append "v" version))
17392 (recursive? #true)))
17393 (file-name (git-file-name name version))
17396 "07drmi3ai49jw5n23ibkambcgijqcw073ihypjgxfnks5lv4yqy1"))
17397 (modules '((guix build utils)))
17399 ;; Adjust comprehension syntax for Python > 3.8.
17400 ;; From <https://github.com/davidhalter/jedi/issues/1824>.
17401 '(substitute* "test/completion/lambdas.py"
17403 "if (lambda: 3)")))))
17404 (build-system python-build-system)
17407 (modify-phases %standard-phases
17408 (add-after 'unpack 'fix-completion-test
17410 ;; This resolves a failure in the 'test_completion' test (see:
17411 ;; https://github.com/davidhalter/jedi/issues/1824).
17412 ;; TODO: Remove after a new release is made (currently: 0.18.1).
17413 (substitute* "test/completion/lambdas.py"
17414 (("\\[a for a in \\[1,2\\] if lambda: 3\\]\\[0\\]")
17415 "[a for a in [1,2] if (lambda: 3)][0]"))))
17417 (lambda* (#:key tests? #:allow-other-keys)
17419 (setenv "HOME" "/tmp")
17420 (invoke "python" "-m" "pytest" "-vv")))))))
17422 (list python-colorama python-docopt python-pytest))
17424 (list python-parso))
17425 (home-page "https://github.com/davidhalter/jedi")
17426 (synopsis "Autocompletion and static analysis library for Python")
17428 "Jedi is a static analysis tool for Python that can be used in Integrated
17429 Development Environments (@dfn{IDE}s) and text editors. It understands Python
17430 on a deeper level than many other static analysis frameworks for Python.
17432 Jedi understands docstrings and you can use Jedi autocompletion in your REPL
17434 (license license:expat)))
17436 (define-public ptpython
17442 (uri (pypi-uri "ptpython" version))
17445 "1phk1grcvn456igjg8gwjjg8bf4kszddq5nd5sdlz3hslg62a7ci"))))
17446 (build-system python-build-system)
17448 `(#:tests? #f)) ;there are no tests
17450 (list python-appdirs python-black python-jedi python-prompt-toolkit
17452 (home-page "https://github.com/jonathanslenders/ptpython")
17453 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
17455 "ptpython is a Python read-eval-print loop with IDE-like features.
17456 It supports syntax highlighting, multiline editing, autocompletion, mouse,
17457 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
17459 (license license:bsd-3)))
17461 (define-public python-easyprocess
17463 (name "python-easyprocess")
17468 (uri (pypi-uri "EasyProcess" version))
17470 (base32 "115rzzr0hx4af4m6krf7dxn8851n4l8jfxahjzjc2r0zq2m8v57v"))))
17471 (build-system python-build-system)
17473 ;; Tests require pyvirtualdisplay, which requires this package.
17475 (home-page "https://github.com/ponty/easyprocess")
17476 (synopsis "Python subprocess interface")
17478 "@code{easyprocess} is an easy to use Python subprocess interface.")
17479 (license license:bsd-3)))
17481 (define-public python-entrypoint2
17483 (name "python-entrypoint2")
17488 (uri (pypi-uri "entrypoint2" version))
17490 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
17491 (build-system python-build-system)
17493 `(#:test-target "pytest"))
17495 (list python-easyprocess python-pytest python-pytest-runner))
17496 (home-page "https://github.com/ponty/entrypoint2")
17497 (synopsis "Command-line interface for Python modules")
17499 "@code{entrypoint2} is an easy to use command-line interface for Python
17500 modules based on @code{argparse}. It translates function signature and
17501 documentation to argparse configuration.")
17502 (license license:bsd-3)))
17504 (define-public python-pyvirtualdisplay
17506 (name "python-pyvirtualdisplay")
17511 (uri (pypi-uri "PyVirtualDisplay" version))
17513 (base32 "1z2fzgiw3xv3m1d9ppn53g07zhnpj05addiz56sm6ircxibnjk4x"))))
17514 (build-system python-build-system)
17516 ;; Tests fail with:
17517 ;; FileNotFoundError: [Errno 2] No such file or directory: 'Xvnc'.
17520 (list python-entrypoint2 python-psutil python-pytest
17521 python-pytest-runner))
17523 (list python-easyprocess python-pillow))
17524 (home-page "https://github.com/ponty/pyvirtualdisplay")
17525 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
17527 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
17528 (license license:bsd-3)))
17530 (define-public python-stem
17532 (name "python-stem")
17537 (uri (pypi-uri "stem" version))
17540 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
17541 (build-system python-build-system)
17544 (modify-phases %standard-phases
17545 (add-after 'unpack 'fix-tests
17546 ;; See https://github.com/torproject/stem/issues/56
17548 (substitute* "run_tests.py"
17549 (("test\\.task\\.MOCK_VERSION,")
17553 (invoke "./run_tests.py" "--unit")
17556 (list python-mock python-pycodestyle python-pyflakes))
17557 (home-page "https://stem.torproject.org/")
17559 "Python controller library that allows applications to interact with Tor")
17561 "Stem is a Python controller library for Tor. With it you can use Tor's
17562 control protocol to script against the Tor process and read descriptor data
17563 relays publish about themselves.")
17564 (license license:lgpl3)))
17566 (define-public python-pyserial
17568 (name "python-pyserial")
17573 (uri (pypi-uri "pyserial" version))
17576 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
17577 (build-system python-build-system)
17579 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
17581 ;; (modify-phases %standard-phases
17584 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
17586 "https://github.com/pyserial/pyserial")
17587 (synopsis "Python Serial Port Bindings")
17588 (description "@code{pyserial} provide serial port bindings for Python. It
17589 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
17590 and/or Xon/Xoff. The port is accessed in RAW mode.")
17591 (license license:bsd-3)))
17593 (define-public python-pyserial-asyncio
17595 (name "python-pyserial-asyncio")
17600 (uri (pypi-uri "pyserial-asyncio" version))
17602 (base32 "0cwd2cjz859v6jrm3y6hikfqjyhyfj5vhfjb8vvflvl6791yah8n"))))
17603 (build-system python-build-system)
17604 (propagated-inputs (list python-pyserial))
17605 (home-page "https://github.com/pyserial/pyserial-asyncio")
17606 (synopsis "Pyserial asynchronous I/O extension")
17607 (description "This package extends Pyserial with asynchronous I/O
17609 (license license:bsd-3)))
17611 (define-public python-pymodbus
17613 (name "python-pymodbus")
17618 (uri (git-reference
17619 (url "https://github.com/riptideio/pymodbus")
17620 (commit (string-append "v" version))))
17621 (file-name (git-file-name name version))
17624 "0kjjrx7xrlx0pf3y67hhr4xvqrly3xzmvf6ic5as61m6z19m7zd5"))))
17625 (build-system python-build-system)
17627 `(#:phases (modify-phases %standard-phases
17628 (add-after 'unpack 'disable-problematic-tests
17630 ;; The following test modules rely on Python's own
17631 ;; 'test' module, which is not distributed in the Python
17632 ;; package of Guix.
17633 (delete-file "test/test_client_async_asyncio.py")
17634 (delete-file "test/test_client_sync_diag.py")
17635 ;; The following test module requires the asynctest
17636 ;; library, abandoned without support for Python 3.9+
17638 ;; https://github.com/riptideio/pymodbus/issues/681).
17639 (delete-file "test/test_server_asyncio.py")))
17641 (lambda* (#:key tests? #:allow-other-keys)
17643 (invoke "python" "-m" "pytest")))))))
17652 (list python-pyserial
17657 python-prompt-toolkit
17659 python-pyserial-asyncio))
17660 (home-page "https://github.com/riptideio/pymodbus/")
17661 (synopsis "Modbus protocol stack in Python")
17662 (description "Pymodbus is a full Modbus protocol implementation using
17663 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
17664 communications core. It includes the following @emph{client} features:
17666 @item full read/write protocol on discrete and register
17667 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
17668 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
17669 @item asynchronous and synchronous versions
17670 @item payload builder/decoder utilities
17671 @item pymodbus read eval print loop (REPL).
17673 It also includes the following @emph{server} features:
17675 @item can function as a fully implemented Modbus server
17676 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
17677 @item asynchronous and synchronous versions
17678 @item full server control context (device information, counters, etc)
17679 @item a number of backing contexts (database, redis, sqlite, a slave device).
17681 (license license:bsd-3)))
17683 (define-public python-exodriver
17685 (name "python-exodriver")
17689 (uri (git-reference
17690 (url "https://github.com/labjack/exodriver")
17691 (commit (string-append "v" version))))
17692 (file-name (git-file-name name version))
17695 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
17696 (outputs (list "out"
17697 "doc")) ;544 KiB of examples
17698 (build-system gnu-build-system)
17701 #:tests? #f ;no test suite
17702 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
17703 (string-append "PREFIX=" #$output)
17707 #~(modify-phases %standard-phases
17708 (delete 'configure)
17710 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
17711 (with-directory-excursion "liblabjackusb"
17712 (apply (assoc-ref %standard-phases 'build)
17713 `(,@args #:make-flags ,make-flags)))))
17715 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
17716 (with-directory-excursion "liblabjackusb"
17717 (apply (assoc-ref %standard-phases 'install)
17718 `(,@args #:make-flags ,make-flags)))
17719 ;; Install udev rules.
17720 (install-file "90-labjack.rules"
17721 (string-append #$output "/lib/udev/rules.d"))
17722 ;; Install examples.
17723 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
17725 (copy-recursively "examples"
17726 (string-append doc "/examples"))))))))
17727 (inputs (list libusb))
17728 (home-page "https://github.com/labjack/exodriver")
17729 (synopsis "USB driver for LabJack data acquisition instruments")
17730 (description "This package provides @code{liblabjackusb}, a USB library for low-level
17731 communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
17732 instruments. A udev rule is also included to allow unprivileged users to
17733 communicate with the instruments via USB.")
17734 (license license:expat))) ;see README
17736 (define-public python-labjack
17738 (name "python-labjack")
17742 (uri (pypi-uri "LabJackPython" version))
17745 "013bjqdi05vlbdqprr6kqi8gs4qhqc7rnyp1klw8k6fng77rpdzz"))))
17746 (build-system python-build-system)
17749 #:tests? #f ;no test suite
17751 #~(modify-phases %standard-phases
17752 (add-after 'unpack 'patch-liblabjackusb.so
17753 (lambda* (#:key inputs #:allow-other-keys)
17754 (substitute* (find-files "." "\\.py$")
17755 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
17756 (format #f "ctypes.CDLL(~s"
17757 (search-input-file inputs
17758 "lib/liblabjackusb.so")))))))))
17759 ;; exodriver is provided as a regular input, as only its shared object is
17760 ;; used, not its Python API.
17761 (inputs (list python-exodriver))
17762 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
17763 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
17764 (description "This Python library allows communicating with the U3, U6,
17765 UE9 and U12 LabJack data acquisition (DAQ) modules.")
17766 (license license:expat))) ;see setup.py
17768 (define-public python-kivy-garden
17770 (name "python-kivy-garden")
17775 (uri (pypi-uri "kivy-garden" version))
17777 (base32 "0wkcpr2zc1q5jb0bi7v2dgc0vs5h1y7j42mviyh764j2i0kz8mn2"))))
17778 (build-system python-build-system)
17780 '(#:phases (modify-phases %standard-phases
17781 (add-after 'install 'remove-bat-file
17782 (lambda* (#:key outputs #:allow-other-keys)
17783 (let ((out (assoc-ref outputs "out")))
17785 (string-append out "/bin/garden.bat"))))))))
17787 (list python-requests))
17788 (home-page "https://github.com/kivy-garden/garden")
17789 (synopsis "Garden tool for Kivy flowers")
17791 "This package provides the @command{garden} command to install packages
17792 for Kivy, the multitouch application platform.")
17793 (license license:expat)))
17795 (define-public python-kivy
17797 (name "python-kivy")
17802 (uri (pypi-uri "Kivy" version))
17803 (file-name (string-append name "-" version ".tar.gz"))
17806 "1cq4djfn7h8560mvz94dydsldg2jpp5w9rby7nafgmbh7fxg65is"))))
17807 (build-system python-build-system)
17809 `(#:tests? #f ; Tests require many optional packages
17811 (modify-phases %standard-phases
17812 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
17813 (lambda* (#:key inputs #:allow-other-keys)
17814 (setenv "KIVY_SDL2_PATH"
17815 (search-input-directory inputs "/include/SDL2"))))
17816 (add-before 'build 'set-home
17818 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
17819 (setenv "HOME" (getcwd)))))))
17821 (list pkg-config python-cython))
17825 (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
17829 (home-page "https://kivy.org")
17830 (synopsis "Multitouch application framework")
17832 "Kivy is a software library for rapid development of hardware-accelerated
17833 multitouch applications.")
17834 (license license:expat)))
17836 (define-public python-kivymd
17838 (name "python-kivymd")
17839 (version "0.104.2")
17843 (uri (pypi-uri "kivymd" version))
17845 (base32 "04lwy6j0agrdwa4a6dl6qs97nx9ysmscmm8psvdzjpyj8aa1zg4p"))))
17846 (build-system python-build-system)
17848 `(#:tests? #f ;tests require network
17850 (modify-phases %standard-phases
17851 (add-before 'sanity-check 'set-home
17853 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
17854 (setenv "HOME" (getcwd)))))))
17855 (native-inputs (list python-docutils))
17857 (list python-kivy python-pillow python-pygments python-kivy-garden))
17858 (home-page "https://github.com/kivymd/KivyMD")
17859 (synopsis "Material Design compliant widgets for use with Kivy")
17861 "This package provides Kivy widgets that approximate Google's Material
17862 Design spec without sacrificing ease of use or application performance.")
17863 (license license:expat)))
17865 (define-public python-asynckivy
17867 (name "python-asynckivy")
17873 (pypi-uri "asynckivy" version))
17875 (base32 "0ivjvch8yn3k1ybfp7c1nm8mhc0ymg7d04mq54lly7yjvg0jvcni"))))
17876 (build-system python-build-system)
17879 (modify-phases %standard-phases
17880 (add-before 'check 'set-home
17882 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
17883 (setenv "HOME" (getcwd)))))))
17884 (propagated-inputs (list python-kivy python-asyncgui))
17885 (home-page "https://github.com/gottadiveintopython/asynckivy")
17886 (synopsis "Async library for Kivy")
17888 "This package provides async versions of Kivy functions to avoid the
17889 callback-heavy mode of interaction typical in some Kivy applications.")
17890 (license license:expat)))
17892 (define-public python-asyncgui
17894 (name "python-asyncgui")
17898 (uri (pypi-uri "asyncgui" version))
17901 "0614130afg2qc1qq4p82piskvvx6lpjl4nlsakbjzdyd78xywnb7"))))
17902 (build-system python-build-system)
17903 (home-page "https://github.com/gottadiveintopython/asyncgui")
17904 (synopsis "Enables async/await without an event loop")
17905 (description "This package provides support for async/await applications
17906 without requiring an event loop, useful for creative responsive GUIs.")
17907 (license license:expat)))
17909 (define-public python-binaryornot
17911 (name "python-binaryornot")
17915 (uri (pypi-uri "binaryornot" version))
17918 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
17919 (build-system python-build-system)
17922 (modify-phases %standard-phases
17923 (add-after 'unpack 'patch-tests
17925 ;; TypeError: binary() got an unexpected keyword argument
17927 (substitute* "tests/test_check.py"
17928 (("average_size=512") ""))
17931 (list python-chardet python-hypothesis))
17932 (home-page "https://github.com/audreyr/binaryornot")
17933 (synopsis "Package to check if a file is binary or text")
17934 (description "Ultra-lightweight pure Python package to check if a file is
17936 (license license:bsd-3)))
17938 (define-public binwalk
17945 (uri (git-reference
17946 (url "https://github.com/ReFirmLabs/binwalk")
17947 (commit (string-append "v" version))))
17948 (file-name (git-file-name name version))
17950 (base32 "01dalxw07c42ka4fqpixcacvy42h04ya909lzpmsblr9s2xdgwcm"))))
17951 (build-system python-build-system)
17954 (modify-phases %standard-phases
17955 (add-before 'check 'set-home
17957 (setenv "HOME" ""))))))
17959 (list python-coverage python-nose))
17960 (home-page "https://github.com/ReFirmLabs/binwalk")
17961 (synopsis "Firmware analysis tool")
17962 (description "Binwalk is a tool for analyzing, reverse engineering, and
17963 extracting firmware images")
17964 (license license:expat)))
17966 (define-public python-binwalk
17967 (deprecated-package "python-binwalk" binwalk))
17969 (define-public python-bson
17971 (name "python-bson")
17975 (method git-fetch) ;for tests
17976 (uri (git-reference
17977 (url "https://github.com/py-bson/bson")
17979 (file-name (git-file-name name version))
17982 "1vpy4rsvm3hhawvbg9rbw4j36ck8qylkhm8cjy0q6imvinkd2als"))))
17983 (build-system python-build-system)
17986 (modify-phases %standard-phases
17988 (lambda* (#:key tests? #:allow-other-keys)
17990 (invoke "./test.py")))))))
17991 (propagated-inputs (list python-dateutil python-six))
17992 (home-page "https://github.com/py-bson/bson")
17993 (synopsis "BSON (Binary JSON) codec for Python")
17994 (description "@code{bson} is a Python library implementing a BSON (Binary
17996 (license license:asl2.0)))
17998 (define-public python-nltk
18000 (name "python-nltk")
18004 (uri (pypi-uri "nltk" version ".zip"))
18007 "1sq32lwgij9h8rsksymnxxr7bqfw3vgx5ijw4azbj6k2xnmmdmap"))))
18008 (build-system python-build-system)
18010 '(;; The tests require some extra resources to be downloaded.
18011 ;; TODO Try packaging these resources.
18014 (list python-click python-joblib python-regex python-tqdm))
18017 (home-page "http://nltk.org/")
18018 (synopsis "Natural Language Toolkit")
18019 (description "It provides interfaces to over 50 corpora and lexical
18020 resources such as WordNet, along with a suite of text processing libraries
18021 for classification, tokenization, stemming, tagging, parsing, and semantic
18022 reasoning, wrappers for natural language processing libraries.")
18023 (license license:asl2.0)))
18025 ;; Versions >=3.5 breaks backward-compatibility,
18026 ;; so we keep version 3.4.x around for a while.
18027 (define-public python-nltk-3.4
18029 (inherit python-nltk)
18034 (uri (pypi-uri "nltk" version ".zip"))
18036 (base32 "153x2clrnigs74jdgnn3qmljdjj4gprmvpdvh49i18ls4m8mbm5y"))))
18037 (propagated-inputs (list python-six))))
18039 (define-public python-pymongo
18041 (name "python-pymongo")
18045 (uri (pypi-uri "pymongo" version))
18048 "1m9hc2a4kgg10xy3g5x00z4a7rrk9s0rbf5qfypwnhq0kdfg5f6p"))))
18049 (build-system python-build-system)
18051 (list python-certifi))
18052 (home-page "https://github.com/mongodb/mongo-python-driver")
18053 (synopsis "Python driver for MongoDB")
18054 (description "Python driver for MongoDB.")
18055 (license license:asl2.0)))
18057 (define-public python-consul
18059 (name "python-consul")
18064 (uri (pypi-uri "python-consul" version))
18067 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
18068 (build-system python-build-system)
18070 '(#:tests? #f)) ; The tests are not distributed
18072 (list python-requests python-six))
18073 (home-page "https://github.com/cablehead/python-consul")
18074 (synopsis "Python client for Consul")
18076 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
18077 discovery, monitoring and configuration.")
18078 (license license:expat)))
18080 (define-public python-schematics
18082 (name "python-schematics")
18087 (uri (git-reference
18088 (url "https://github.com/schematics/schematics")
18089 (commit (string-append "v" version))))
18090 (file-name (git-file-name name version))
18092 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
18093 (build-system python-build-system)
18097 ;; The tests require a bunch of not very nice packages with fixed
18098 ;; version requirements (e.g. python-coveralls).
18100 (home-page "https://github.com/schematics/schematics")
18101 (synopsis "Python Data Structures for Humans")
18102 (description "Python Data Structures for Humans.")
18103 (license license:bsd-3)))
18105 (define-public python-odfpy
18107 (name "python-odfpy")
18111 (uri (pypi-uri "odfpy" version))
18114 "1v1qqk9p12qla85yscq2g413l3qasn6yr4ncyc934465b5p6lxnv"))))
18117 (modify-phases %standard-phases
18120 (invoke "pytest" "-vv"))))))
18121 (build-system python-build-system)
18123 (list python-pytest))
18125 (list python-defusedxml))
18126 (home-page "https://github.com/eea/odfpy")
18127 (synopsis "Python API and tools to manipulate OpenDocument files")
18128 (description "Collection of libraries and utility programs written in
18129 Python to manipulate OpenDocument 1.2 files.")
18131 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
18132 ;; number of files with other licenses.
18133 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
18135 (define-public python-natsort
18137 (name "python-natsort")
18141 (uri (pypi-uri "natsort" version))
18144 "00y49bfsi7rrsd1s42gc2w95a6arl9ipdsx2493hr0v54fj07ih0"))))
18145 (build-system python-build-system)
18148 (modify-phases %standard-phases
18149 (add-after 'unpack 'remove-test-hypothesis-deadlines
18151 (substitute* "tests/test_utils.py"
18152 (("from hypothesis import given")
18153 "from hypothesis import given, settings")
18154 (("( +)@given" all spaces)
18155 (string-append spaces "@settings(deadline=None)\n" all)))))
18157 (lambda* (#:key tests? #:allow-other-keys)
18159 (invoke "pytest" "-v")))))))
18161 (list python-hypothesis python-pytest-cov python-pytest-mock
18163 (propagated-inputs ; TODO: Add python-fastnumbers.
18164 (list python-pyicu))
18165 (home-page "https://github.com/SethMMorton/natsort")
18166 (synopsis "Natural sorting for python and shell")
18168 "Natsort lets you apply natural sorting on lists instead of
18169 lexicographical. If you use the built-in @code{sorted} method in python on a
18170 list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
18171 it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
18172 @code{a9}]}. Natsort provides a function @code{natsorted} that identifies
18173 numbers and sorts them separately from strings. It can also sort version
18174 numbers, real numbers, mixed types and more, and comes with a shell command
18175 @command{natsort} that exposes this functionality in the command line.")
18176 (license license:expat)))
18178 (define-public glances
18185 (uri (pypi-uri "Glances" version))
18187 (base32 "020vb38qrb0m3sdr7xjr43cmcfxpnyg4hmb97wgxsa9zvwsjwa5x"))
18188 (modules '((guix build utils)))
18191 ;; Glances phones PyPI for weekly update checks by default.
18192 ;; Disable these. The user can re-enable them if desired.
18193 (substitute* "glances/outdated.py"
18194 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
18195 (string-append indentation
18196 "self.args.disable_check_update = True\n"
18199 (build-system python-build-system)
18201 (list python-future python-psutil))
18202 (home-page "https://github.com/nicolargo/glances")
18203 (synopsis "Cross-platform curses-based monitoring tool")
18205 "Glances is a curses-based monitoring tool for a wide variety of platforms.
18206 Glances uses the PsUtil library to get information from your system. It
18207 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
18208 (license license:lgpl3+)))
18210 (define-public python-graphql-core
18212 (name "python-graphql-core")
18217 (uri (pypi-uri "graphql-core" version))
18220 "0fjv5w2wvgdr8gb27v241bavliipyir9fdz48rsgc3xapm644mn0"))))
18221 (build-system python-build-system)
18223 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
18225 (modify-phases %standard-phases
18226 (add-after 'unpack 'patch-hardcoded-version
18227 (lambda _ (substitute*
18229 (("'gevent==1.1rc1'") "'gevent'"))
18232 (list python-gevent python-mock python-pytest-mock))
18234 (list python-promise python-six))
18235 (home-page "https://github.com/graphql-python/graphql-core")
18236 (synopsis "GraphQL implementation for Python")
18238 "GraphQL implementation for Python. GraphQL is a data query language and
18239 runtime designed and used to request and deliver data to mobile and web apps.
18240 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
18242 (license license:expat)))
18244 (define-public python-graphql-relay
18246 (name "python-graphql-relay")
18251 (uri (pypi-uri "graphql-relay" version))
18254 "1d70vwam9gjhx7fqzsa03x7lc6ivcqki5r9pk8m7rslmb7pagmbh"))))
18255 (build-system python-build-system)
18258 (modify-phases %standard-phases
18260 (lambda* (#:key tests? #:allow-other-keys)
18262 (invoke "pytest" "tests")))))))
18266 python-pytest-asyncio))
18268 (list python-graphql-core))
18269 (home-page "https://github.com/graphql-python/graphql-relay-py")
18270 (synopsis "Relay implementation for Python")
18272 "This is a library to allow the easy creation of Relay-compliant servers
18273 using the GraphQL Python reference implementation of a GraphQL server. It
18274 should be noted that the code is a exact port of the original
18275 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
18277 (license license:expat)))
18279 (define-public python-graphene
18281 (name "python-graphene")
18286 (uri (pypi-uri "graphene" version))
18289 "08m1n2ydk48c18cvl8474v3pwwacjl1vgq61m9qs00122mp0cj5g"))))
18290 (build-system python-build-system)
18292 (list python-graphql-core python-graphql-relay python-aniso8601
18293 python-promise python-six))
18295 `(#:tests? #f)) ; no tests/ in the PyPI tarball
18296 (home-page "https://graphene-python.org/")
18297 (synopsis "GraphQL Framework for Python")
18299 "Graphene is a Python library for building GraphQL schemas/types.
18300 A GraphQL schema describes your data model, and provides a GraphQL server
18301 with an associated set of resolve methods that know how to fetch data.")
18302 (license license:expat)))
18304 (define-public python-random2
18306 (name "python-random2")
18310 (uri (pypi-uri "random2" version ".zip"))
18313 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))
18315 (search-patches "python-random2-getrandbits-test.patch"))))
18316 (build-system python-build-system)
18317 (native-inputs (list unzip))
18318 (home-page "http://pypi.python.org/pypi/random2")
18319 (synopsis "Python 3 version of the Python 2 @code{random} module")
18321 "This package provides a Python 3 ported version of Python 2.7’s
18322 @code{random} module. It has also been back-ported to work in Python 2.6.
18324 In Python 3, the implementation of @code{randrange()} was changed, so that
18325 even with the same seed you get different sequences in Python 2 and 3.
18327 This package closes that gap, allowing stable random number generation
18328 between the different Python versions.")
18329 (license license:psfl)))
18331 (define-public python-snowballstemmer
18333 (name "python-snowballstemmer")
18337 (uri (pypi-uri "snowballstemmer" version))
18340 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
18341 (build-system python-build-system)
18343 `(;; No tests exist
18345 (home-page "https://github.com/shibukawa/snowball_py")
18346 (synopsis "Snowball stemming library collection for Python")
18347 (description "This package provides 16 word stemmer algorithms generated
18348 from Snowball algorithms. It includes the 15 original ones plus the Poerter
18350 (license license:bsd-3)))
18352 (define-public python-setproctitle
18354 (name "python-setproctitle")
18359 (uri (pypi-uri "setproctitle" version))
18362 "1zbp6kyzfbrmbh9j3idai0mnpa28zn5db3k5l07jc3c3gj89gyxr"))))
18363 (build-system python-build-system)
18366 (modify-phases %standard-phases
18368 (lambda* (#:key tests? #:allow-other-keys)
18369 (setenv "PYTHON" (or (which "python3") (which "python")))
18370 (setenv "PYCONFIG" (if (which "python3-config")
18371 "python3-config --embed"
18373 (substitute* "tests/conftest.py"
18376 (invoke "pytest" "tests/")))))))
18378 (list procps python-pytest)) ; required for tests
18379 (home-page "https://github.com/dvarrazzo/py-setproctitle")
18381 "Setproctitle implementation for Python to customize the process title")
18382 (description "The library allows a process to change its title (as displayed
18383 by system tools such as @code{ps} and @code{top}).
18385 Changing the title is mostly useful in multi-process systems, for example when a
18386 master process is forked: changing the children's title allows identifying the
18387 task each process is busy with. The technique is used by PostgreSQL and the
18388 OpenSSH Server for example.")
18389 (license license:bsd-3)))
18391 (define-public python-validictory
18393 (name "python-validictory")
18398 (uri (pypi-uri "validictory" version))
18401 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
18402 (build-system python-build-system)
18405 (modify-phases %standard-phases
18406 (add-after 'unpack 'bootstrap
18407 ;; Move the tests out of the package directory to avoid
18410 (rename-file "validictory/tests" "tests")
18411 (delete-file "tests/__init__.py")))
18414 (invoke "py.test" "-vv" ))))))
18416 (list python-pytest))
18418 "https://github.com/jamesturk/validictory")
18419 (synopsis "General purpose Python data validator")
18420 (description "It allows validation of arbitrary Python data structures.
18422 The schema format is based on the JSON Schema
18423 proposal (http://json-schema.org), so combined with json the library is also
18424 useful as a validator for JSON data.")
18425 (license license:expat)))
18427 (define-public python-pyelftools
18429 (name "python-pyelftools")
18431 (home-page "https://github.com/eliben/pyelftools")
18435 (uri (git-reference (url home-page)
18436 (commit (string-append "v" version))))
18437 (file-name (git-file-name name version))
18439 (base32 "1z4fx39c9rds0bd4d2fjjq7n05b1nfxl36pmy523x8knm38l4gpr"))
18441 ;; Delete bundled readelf executable.
18442 '(delete-file "test/external_tools/readelf"))))
18443 (build-system python-build-system)
18445 '(#:phases (modify-phases %standard-phases
18447 (lambda* (#:key tests? #:allow-other-keys)
18449 ;; Taken from tox.ini.
18450 (invoke "python" "test/run_all_unittests.py")
18451 (invoke "python" "test/run_examples_test.py")
18452 (invoke "python" "test/run_readelf_tests.py")))))))
18454 "Analyze binary and library file information")
18455 (description "This Python library provides interfaces for parsing and
18456 analyzing two binary and library file formats ; the Executable and Linking
18457 Format (ELF), and debugging information in the Debugging With Attributed
18458 Record Format (DWARF).")
18459 (license license:public-domain)))
18461 (define-public python-pefile
18463 (name "python-pefile")
18464 (version "2022.5.30")
18467 (uri (git-reference
18468 (url "https://github.com/erocarrera/pefile")
18469 (commit (string-append "v" version))))
18470 (file-name (git-file-name name version))
18473 "1qj90a0s2gd5hn2zggypqc1077inid5dcl1fp5973b04kf2b9z8a"))))
18474 (build-system python-build-system)
18475 (propagated-inputs (list python-future))
18476 (home-page "https://github.com/erocarrera/pefile")
18477 (synopsis "Portable Executable (PE) file parser")
18478 (description "This python library provides interfaces for parsing and
18479 working with Portable Executable (PE) files. It makes to most information
18480 from the header, as well as section details and data available.")
18481 (license license:expat)))
18483 (define-public python-pyev
18485 (name "python-pyev")
18490 (uri (pypi-uri "pyev" version))
18493 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
18494 (build-system python-build-system)
18496 `(#:tests? #f ; no test suite
18498 (modify-phases %standard-phases
18499 (add-after 'unpack 'patch
18500 (lambda* (#:key inputs #:allow-other-keys)
18501 (let ((libev (search-input-file inputs "/lib/libev.so.4")))
18502 (substitute* "setup.py"
18503 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
18504 (string-append "libev_dll_name = \"" libev "\"")))))))))
18507 (home-page "https://github.com/gabrielfalcao/pyev")
18508 (synopsis "Python libev interface")
18509 (description "Pyev provides a Python interface to libev.")
18510 (license license:gpl3)))
18512 (define-public python-imagesize
18514 (name "python-imagesize")
18519 (uri (pypi-uri "imagesize" version))
18522 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
18523 (build-system python-build-system)
18524 (home-page "https://github.com/shibukawa/imagesize_py")
18525 (synopsis "Gets image size of files in various formats in Python")
18527 "This package allows determination of image size from
18528 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
18529 (license license:expat)))
18531 (define-public python-termstyle
18533 (name "python-termstyle")
18538 (uri (pypi-uri "termstyle" version))
18541 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
18542 (build-system python-build-system)
18545 (modify-phases %standard-phases
18548 (invoke "python" "test3.py"))))))
18549 (home-page "https://github.com/gfxmonk/termstyle")
18550 (synopsis "Console text coloring for Python")
18551 (description "This package provides console text coloring for Python.")
18552 (license license:bsd-3)))
18554 (define-public python-argcomplete
18556 (name "python-argcomplete")
18561 (uri (pypi-uri "argcomplete" version))
18564 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
18565 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
18566 (build-system python-build-system)
18568 (list python-coverage
18574 bash)) ;full Bash for 'test_file_completion'
18575 (home-page "https://github.com/kislyuk/argcomplete")
18576 (synopsis "Shell tab completion for Python argparse")
18577 (description "argcomplete provides extensible command line tab completion
18578 of arguments and options for Python scripts using @code{argparse}. It's
18579 particularly useful for programs with many options or sub-parsers that can
18580 dynamically suggest completions ; for example, when browsing resources over the
18582 (license license:asl2.0)))
18584 (define-public python-csscompressor
18586 (name "python-csscompressor")
18591 (uri (pypi-uri "csscompressor" version))
18594 "018ssffvlpnc1salmnpyl52c11glzzwj4k9f757hl4pkpjnjp8mg"))))
18595 (build-system python-build-system)
18598 (modify-phases %standard-phases
18601 (invoke "py.test"))))))
18603 (list python-pytest))
18604 (home-page "https://github.com/sprymix/csscompressor")
18605 (synopsis "Python port of YUI CSS Compressor")
18607 "This package provides a python port of YUI CSS Compressor.")
18608 (license license:bsd-3)))
18610 (define-public python-rcssmin
18612 (name "python-rcssmin")
18617 (uri (pypi-uri "rcssmin" version))
18620 "0w42l4dhxghcz7pj3q7hkxp015mvb8z2cq9sfxbl31npsfavd1ya"))))
18621 (build-system python-build-system)
18624 (modify-phases %standard-phases
18627 (invoke "python" "run_tests.py" "tests"))))))
18628 (home-page "http://opensource.perlig.de/rcssmin/")
18629 (synopsis "CSS Minifier")
18630 (description "The minifier is based on the semantics of the YUI compressor,
18631 which itself is based on the rule list by Isaac Schlueter.")
18632 (license license:asl2.0)))
18634 (define-public python-rjsmin
18636 (name "python-rjsmin")
18641 (uri (pypi-uri "rjsmin" version))
18644 "0cmc72rlkvzz8fl89bc83czkx0pcvhzj7yn7m29r8pgnf5fcfpdi"))
18645 (modules '((guix build utils)))
18648 (for-each delete-file (find-files "bench" "\\.js$"))
18650 (build-system python-build-system)
18652 '(#:tests? #f ; Not all test files included.
18654 (modify-phases %standard-phases
18656 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
18657 (add-installed-pythonpath inputs outputs)
18659 (invoke "py.test" "-vv" "tests")
18662 (list python-pytest))
18663 (home-page "http://opensource.perlig.de/rjsmin/")
18664 (synopsis "Javascript Minifier")
18665 (description "@code{rJSmin} is a javascript minifier written in Python. The
18666 minifier is based on the semantics of jsmin.c by Douglas Crockford. The module
18667 is a re-implementation aiming for speed, so it can be used at runtime (rather
18668 than during a preprocessing step).")
18669 (license license:asl2.0)))
18671 (define-public python-xopen
18673 (name "python-xopen")
18678 (uri (pypi-uri "xopen" version))
18681 "1xrlcnd6fri3w97zzzp6vyk4l21yq1lc8r4wksi06hgpkbh4jdq0"))))
18682 (build-system python-build-system)
18684 (list python-setuptools-scm))
18685 (home-page "https://github.com/marcelm/xopen/")
18686 (synopsis "Open compressed files transparently")
18687 (description "This module provides an @code{xopen} function that works like
18688 Python's built-in @code{open} function, but can also deal with compressed files.
18689 Supported compression formats are gzip, bzip2 and, xz, and are automatically
18690 recognized by their file extensions. The focus is on being as efficient as
18691 possible on all supported Python versions.")
18692 (license license:expat)))
18694 (define-public python-cheetah
18696 (name "python-cheetah")
18701 (uri (pypi-uri "Cheetah3" version))
18704 "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
18705 (build-system python-build-system)
18707 `(#:phases (modify-phases %standard-phases
18708 (add-after 'unpack 'use-absolute-python
18710 (substitute* "Cheetah/CheetahWrapper.py"
18711 (("#!/usr/bin/env python")
18712 (string-append "#!" (which "python"))))))
18713 (add-after 'unpack 'fix-tests
18715 (substitute* "Cheetah/Tests/ImportHooks.py"
18716 (("os.path.dirname\\(__file__\\)")
18717 (string-append "'" (getcwd) "/Cheetah/Tests'")))))
18720 (setenv "TMPDIR" "/tmp")
18721 (substitute* "Cheetah/Tests/Test.py"
18722 (("unittest.TextTestRunner\\(\\)")
18723 "unittest.TextTestRunner(verbosity=2)"))
18725 (invoke "python" "Cheetah/Tests/Test.py"))))))
18727 (list python-markdown)) ;optional
18728 (home-page "https://cheetahtemplate.org/")
18729 (synopsis "Template engine")
18730 (description "Cheetah is a text-based template engine and Python code
18733 Cheetah can be used as a standalone templating utility or referenced as
18734 a library from other Python applications. It has many potential uses,
18735 but web developers looking for a viable alternative to ASP, JSP, PHP and
18736 PSP are expected to be its principle user group.
18740 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
18742 @item Cleanly separates content, graphic design, and program code.
18743 @item Blends the power and flexibility of Python with a simple template language
18744 that non-programmers can understand.
18745 @item Gives template writers full access to any Python data structure, module,
18746 function, object, or method in their templates.
18747 @item Makes code reuse easy by providing an object-orientated interface to
18748 templates that is accessible from Python code or other Cheetah templates.
18749 One template can subclass another and selectively reimplement sections of it.
18750 @item Provides a simple, yet powerful, caching mechanism that can dramatically
18751 improve the performance of a dynamic website.
18752 @item Compiles templates into optimized, yet readable, Python code.
18754 (license (license:x11-style "file://LICENSE"))))
18756 (define-public python-dulwich
18758 (name "python-dulwich")
18759 (version "0.20.30")
18763 (uri (list (string-append "https://www.dulwich.io/releases/"
18764 "dulwich-" version ".tar.gz")
18765 (pypi-uri "dulwich" version)))
18768 "0hafaff30bmkj30b8pwpwsy3fz5h6c1pn98ihqcvl5zndflr1h22"))))
18769 (build-system python-build-system)
18772 (modify-phases %standard-phases
18773 (add-before 'check 'fix-tests
18774 (lambda* (#:key inputs #:allow-other-keys)
18775 (substitute* '("dulwich/tests/test_repository.py"
18776 "dulwich/tests/test_porcelain.py"
18777 "dulwich/tests/test_hooks.py")
18778 (("/bin/sh") (search-input-file inputs "/bin/sh")))
18779 (setenv "TEST_RUNNER" "unittest")
18780 (setenv "PYTHONHASHSEED" "random"))))))
18782 (list python-fastimport python-urllib3))
18784 (list python-mock python-geventhttpclient python-gpg
18786 (home-page "https://www.dulwich.io/")
18787 (synopsis "Git implementation in Python")
18788 (description "Dulwich is an implementation of the Git file formats and
18789 protocols written in pure Python.")
18790 ;; Can be used with either license.
18791 (license (list license:asl2.0 license:gpl2+))))
18793 (define-public python-pbkdf2
18795 (name "python-pbkdf2")
18800 (uri (pypi-uri "pbkdf2" version))
18803 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
18804 (build-system python-build-system)
18807 (modify-phases %standard-phases
18810 (invoke "python" "test/test_pbkdf2.py"))))))
18812 (list python-pycrypto)) ; optional
18813 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
18814 (synopsis "Password-based key derivation")
18815 (description "This module implements the password-based key derivation
18816 function, PBKDF2, specified in RSA PKCS#5 v2.0.
18818 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
18819 is part of the RSA Public Key Cryptography Standards series. The provided
18820 implementation takes a password or a passphrase and a salt value (and
18821 optionally a iteration count, a digest module, and a MAC module) and provides
18822 a file-like object from which an arbitrarily-sized key can be read.")
18823 (license license:expat)))
18825 (define-public python-qrcode
18827 (name "python-qrcode")
18832 (uri (pypi-uri "qrcode" version))
18834 (base32 "0sa3n298b9jpz6zn0birnjii3mg9sihjq28n9nzjlzv09y2m6ljh"))))
18835 (build-system python-build-system)
18837 ;; FIXME: Tests require packaging 'pymaging'.
18840 (list python-lxml ; for SVG output
18841 python-pillow ; for PNG output
18843 (home-page "https://github.com/lincolnloop/python-qrcode")
18844 (synopsis "QR Code image generator")
18845 (description "This package provides a pure Python QR Code generator
18846 module. It uses the Python Imaging Library (PIL) to allow for the generation
18849 In addition this package provides a command line tool to generate QR codes and
18850 either write these QR codes to a file or do the output as ascii art at the
18852 (license license:bsd-3)))
18854 (define-public python-rst2ansi
18856 (name "python-rst2ansi")
18861 (uri (pypi-uri "rst2ansi" version))
18864 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
18865 (build-system python-build-system)
18867 (list python-docutils))
18868 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
18869 (synopsis "Convert RST to ANSI-decorated console output")
18871 "Python module dedicated to rendering RST (reStructuredText) documents
18872 to ansi-escaped strings suitable for display in a terminal.")
18873 (license license:expat)))
18875 (define-public python-ansi2html
18877 (name "python-ansi2html")
18882 (uri (pypi-uri "ansi2html" version))
18885 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
18886 (build-system python-build-system)
18888 (list python-mock python-nose))
18891 (home-page "https://github.com/ralphbean/ansi2html")
18892 (synopsis "Convert ANSI-decorated console output to HTML")
18894 "@command{ansi2html} is a Python library and command line utility for
18895 converting text with ANSI color codes to HTML or LaTeX.")
18896 (license license:gpl3+)))
18898 (define-public python-easy-ansi
18900 (name "python-easy-ansi")
18905 (uri (git-reference
18906 (url "https://gitlab.com/joeysbytes/easy-ansi")
18907 (commit (string-append "v" version))))
18908 (file-name (git-file-name name version))
18910 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
18911 (build-system python-build-system)
18912 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
18913 (synopsis "Terminal framework API")
18915 "Easy ANSI is a terminal framework API to give you an easy way to use
18916 colors, cursor control movements, and line/box drawing. It is not meant as a
18917 replacement to more full-featured frameworks (such as curses or urwid), but as
18918 a tool to quickly create nice-looking screens in your terminal window. You
18919 can even create animations with the cursor controls.")
18920 (license license:expat)))
18922 (define-public python-ddt
18924 (name "python-ddt")
18929 (uri (pypi-uri "ddt" version))
18932 "0y2k756qjz1rhpivi60hy29b4bf0bh3wck39i1mn6pkil9k779k4"))))
18933 (build-system python-build-system)
18935 (list python-pytest))
18937 (list python-pyyaml))
18938 (home-page "https://github.com/datadriventests/ddt")
18939 (synopsis "Data-Driven Tests")
18941 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
18942 running it with different test data, and make it appear as multiple test
18944 (license license:expat)))
18946 (define-public python-pycountry
18948 (name "python-pycountry")
18953 (uri (pypi-uri "pycountry" version))
18956 "0ihnkh86zz01vi46gcwgq6h71jrpj7hq71zi13c98n2qdhj3l5mj"))))
18957 (build-system python-build-system)
18958 (home-page "https://bitbucket.org/flyingcircus/pycountry")
18959 (synopsis "ISO databases for languages, countries, currencies, etc.")
18961 "@code{pycountry} provides the ISO databases for the standards:
18963 @item 639-3 (Languages)
18964 @item 3166 (Countries)
18965 @item 3166-3 (Deleted Countries)
18966 @item 3166-2 (Subdivisions of countries)
18967 @item 4217 (Currencies)
18968 @item 15924 (Scripts)
18970 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
18971 through a Python API.")
18972 (license license:lgpl2.1+)))
18974 (define-public python-pycountry@20.7.3
18976 (inherit python-pycountry)
18977 (name "python-pycountry")
18982 (uri (pypi-uri "pycountry" version))
18984 (base32 "0hnbabsmqimx5hqh0jbd2f64i8fhzhhbrvid57048hs5sd9ll241"))))))
18986 (define-public python-pycosat
18988 (name "python-pycosat")
18993 (uri (pypi-uri "pycosat" version ".zip"))
18996 "1vg0f2fwcybpdqv92z0hwdl603n2safh3fqvjjxkksd78r4qg6ac"))))
18997 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
18998 (build-system python-build-system)
19001 (home-page "https://github.com/ContinuumIO/pycosat")
19002 (synopsis "Bindings to picosat (a SAT solver)")
19004 "This package provides efficient Python bindings to @code{picosat} on
19005 the C level. When importing pycosat, the @code{picosat} solver becomes part
19006 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
19007 Problem} (SAT) solver.")
19008 (license license:expat)))
19010 (define-public python-pypeg2
19012 (name "python-pypeg2")
19017 (uri (pypi-uri "pyPEG2" version))
19020 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
19021 (build-system python-build-system)
19022 (propagated-inputs (list python-lxml))
19024 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
19026 (home-page "https://fdik.org/pyPEG/")
19027 (synopsis "Parsing Expression Grammars in Python")
19028 (description "PyPEG is an intrinsic parser interpreter framework for
19029 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
19030 parse many formal languages.")
19031 (license license:gpl2)))
19033 (define-public python-incremental
19035 (name "python-incremental")
19040 (uri (pypi-uri "incremental" version))
19043 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
19044 (build-system python-build-system)
19045 (home-page "https://github.com/hawkowl/incremental")
19046 (synopsis "Library for versioning Python projects")
19047 (description "Incremental is a small library that versions your Python
19049 (license license:expat)))
19051 (define-public python-invoke
19053 (name "python-invoke")
19054 (home-page "https://www.pyinvoke.org/")
19058 (uri (pypi-uri "invoke" version))
19061 "1lsql9daabfr31c7syva5myc5bka45k57ygs9fliv63qrwp1wk9p"))))
19062 (build-system python-build-system)
19064 ;; XXX: Requires many dependencies that are not yet in Guix.
19067 (modify-phases %standard-phases
19068 (add-after 'unpack 'delete-python2-code
19070 (delete-file-recursively "invoke/vendor/yaml2")))
19071 (add-after 'unpack 'fix-bash-path
19072 (lambda* (#:key inputs #:allow-other-keys)
19073 (let ((bash (assoc-ref inputs "bash")))
19074 (substitute* "invoke/config.py"
19075 (("shell = \"/bin/bash\"")
19076 (string-append "shell = \"" bash "/bin/bash\"")))))))))
19078 `(("bash" ,bash-minimal)))
19079 (synopsis "Pythonic task execution")
19081 "Invoke is a Python task execution tool and library, drawing inspiration
19082 from various sources to arrive at a powerful and clean feature set. It is
19083 evolved from the Fabric project, but focuses on local and abstract concerns
19084 instead of servers and network commands.")
19085 (license license:bsd-3)))
19087 (define-public python-automat
19089 (name "python-automat")
19093 (uri (pypi-uri "Automat" version))
19096 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
19097 (build-system python-build-system)
19098 ;; We disable the tests because they require python-twisted, while
19099 ;; python-twisted depends on python-automat. Twisted is optional, but the
19100 ;; tests fail if it is not available. Also see
19101 ;; <https://github.com/glyph/automat/issues/71>.
19105 (modify-phases %standard-phases
19106 ;; Remove script, because it depends on python-twisted.
19107 (add-after 'unpack 'remove-entrypoint
19109 (substitute* "setup.py"
19110 (("\"automat-visualize = automat._visualize:tool\"") "")))))))
19112 (list python-m2r python-setuptools-scm python-graphviz))
19114 (list python-six python-attrs))
19115 (home-page "https://github.com/glyph/Automat")
19116 (synopsis "Self-service finite-state machines")
19117 (description "Automat is a library for concise, idiomatic Python
19118 expression of finite-state automata (particularly deterministic finite-state
19120 (license license:expat)))
19122 (define-public python-m2r
19124 (name "python-m2r")
19128 (uri (pypi-uri "m2r" version))
19131 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))
19132 (modules '((guix build utils)))
19134 ;; Adjust test regex for Python 3.10 compatibility.
19135 ;; Taken from upstream pull request:
19136 ;; https://github.com/miyakogi/m2r/pull/62
19137 '(substitute* "tests/test_cli.py"
19138 (("self.assertIn\\('optional arguments:', message\\)")
19139 "self.assertRegex(message, r'option(s|al arguments):')")))))
19140 (build-system python-build-system)
19142 (list python-docutils python-mistune))
19144 (list python-pygments python-mock))
19145 (home-page "https://github.com/miyakogi/m2r")
19146 (synopsis "Markdown to reStructuredText converter")
19147 (description "M2R converts a markdown file including reST markups to valid
19149 (license license:expat)))
19151 (define-public python-constantly
19153 (name "python-constantly")
19157 (uri (pypi-uri "constantly" version))
19160 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
19161 (build-system python-build-system)
19162 (home-page "https://github.com/twisted/constantly")
19163 (synopsis "Symbolic constants in Python")
19164 (description "Constantly is a Python library that provides symbolic
19165 constant support. It includes collections and constants with text, numeric,
19166 and bit flag values.")
19167 (license license:expat)))
19169 (define-public python-attrs
19171 (name "python-attrs")
19175 (uri (pypi-uri "attrs" version))
19178 "1yzmwi5d197p0qhl7rl4xi9q1w8mk9i3zn6hrl22knbcrb1slspg"))))
19179 (build-system python-build-system)
19181 `(#:phases (modify-phases %standard-phases
19182 ,@(if (target-riscv64?)
19183 ;; TODO: Remove the conditional on staging.
19184 `((add-after 'unpack 'remove-test-hypothesis-deadlines
19186 (substitute* "tests/test_make.py"
19187 (("assume, given") "assume, given, settings")
19188 (("( +)@given" all spaces)
19189 (string-append spaces "@settings(deadline=None)\n" all))))))
19192 (lambda* (#:key tests? #:allow-other-keys)
19194 (invoke "pytest")))))))
19196 (list python-coverage python-hypothesis python-pympler python-pytest
19198 (home-page "https://github.com/python-attrs/attrs/")
19199 (synopsis "Attributes without boilerplate")
19200 (description "@code{attrs} is a Python package with class decorators that
19201 ease the chores of implementing the most common attribute-related object
19203 (license license:expat)))
19205 (define-public python-attrs-bootstrap
19207 (inherit python-attrs)
19208 (name "python-attrs-bootstrap")
19209 (native-inputs `())
19210 (arguments `(#:tests? #f))))
19212 (define-public python-cliapp
19214 (name "python-cliapp")
19215 (version "1.20180812.1")
19219 (uri (string-append
19220 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
19221 version ".tar.gz"))
19224 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
19225 (build-system python-build-system)
19227 `(;; XXX: The tests only do style and coverage checks, which
19228 ;; fails due to deprecation warnings, etc.
19231 (list python-coverage-test-runner python-pep8))
19233 (list python-pyaml))
19234 (home-page "https://liw.fi/cliapp/")
19235 (synopsis "Python framework for command line programs")
19236 (description "@code{cliapp} is a Python framework for command line
19237 programs. It contains the typical stuff such programs need to do, such
19238 as parsing the command line for options, and iterating over input files.")
19239 (license license:gpl2+)))
19241 (define-public python-ttystatus
19243 (name "python-ttystatus")
19248 (uri (git-reference
19249 (url "http://git.liw.fi/ttystatus")
19250 ;; There are no tags after ttystatus-0.36.
19251 (commit "e9fc573326c5d1348f5fe56263b4f7a8c32f58c9")))
19253 (base32 "0v49q839nrwdm19c83wfmj6n2kw80xslwq9k0n5509r2h7wzjiqj"))
19254 (file-name (git-file-name name version))))
19255 (build-system python-build-system)
19257 (list python-coverage-test-runner python-pep8))
19260 (modify-phases %standard-phases
19261 ;; check phase needs to be run before the build phase. If not,
19262 ;; coverage-test-runner looks for tests for the built source files,
19265 (add-before 'build 'check
19266 (lambda _ (invoke "make" "check"))))))
19267 (home-page "https://liw.fi/ttystatus/")
19268 (synopsis "Python library for showing progress reporting and
19269 status updates on terminals")
19270 (description "@code{ttystatus} is a Python library for showing progress
19271 reporting and status updates on terminals, for command line programs.
19272 Output is automatically adapted to the width of the terminal: truncated
19273 if it does not fit, and resized if the terminal size changes.")
19274 (license license:gpl3+)))
19276 (define-public python-astroid
19278 (name "python-astroid")
19283 (uri (git-reference
19284 (url "https://github.com/PyCQA/astroid")
19285 (commit (string-append "v" version))))
19286 (file-name (git-file-name name version))
19288 (base32 "19iiys4233cicpm48fd7lrkm31kk47qiv44wvk952rqbcn4rd2dh"))))
19289 (build-system python-build-system)
19291 (list python-lazy-object-proxy python-typing-extensions python-wrapt))
19293 (list python-pytest python-pytest-runner))
19294 (home-page "https://github.com/PyCQA/astroid")
19295 (synopsis "Python source code base representation")
19296 (description "@code{python-astroid} provides a common base representation
19297 of Python source code for projects such as pychecker, pyreverse, pylint, etc.
19298 It provides a compatible representation which comes from the _ast module. It
19299 rebuilds the tree generated by the builtin _ast module by recursively walking
19300 down the AST and building an extended ast. The new node classes have
19301 additional methods and attributes for different usages. They include some
19302 support for static inference and local name scopes. Furthermore, astroid
19303 builds partial trees by inspecting living objects.")
19304 (license license:lgpl2.1+)))
19306 (define-public python-isbnlib
19308 (name "python-isbnlib")
19313 (uri (pypi-uri "isbnlib" version))
19316 "0iin0x2xqwyphyyzd0mzrq5v5xm7b6dlbb294k4dywra5qvbrgzm"))))
19317 (build-system python-build-system)
19318 (arguments '(#:tests? #f)) ; No test
19319 (home-page "https://github.com/xlcnd/isbnlib")
19320 (synopsis "Python library to work with ISBN strings")
19321 (description "@code{python-isbnlib} is a (pure) python library that provides
19322 several useful methods and functions to validate, clean, transform, hyphenate and
19323 get metadata for ISBN strings. Its origin was as the core of isbntools. This short
19324 version, is suitable to be include as a dependency in other projects.")
19325 (license license:lgpl3+)))
19327 (define-public python-isort
19329 (name "python-isort")
19334 (uri (git-reference
19335 ;; Tests pass only from the Github sources
19336 (url "https://github.com/timothycrosley/isort")
19338 (file-name (git-file-name name version))
19339 (modules '((guix build utils)))
19340 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
19343 "09spgl2k9xrprr5gbpfc91a8p7mx7a0c64ydgc91b3jhrmnd9jg1"))))
19344 (build-system python-build-system)
19347 (modify-phases %standard-phases
19348 (add-after 'unpack 'loosen-requirements
19350 ;; Permit newer versions of black.
19351 (substitute* "example_isort_formatting_plugin/pyproject.toml"
19354 ;; A foretaste of what our future python-build-system will need to
19358 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
19360 (lambda* (#:key outputs #:allow-other-keys)
19361 (let ((out (assoc-ref outputs "out"))
19362 (whl (car (find-files "dist" "\\.whl$"))))
19363 (invoke "pip" "--no-cache-dir" "--no-input"
19364 "install" "--no-deps" "--prefix" out whl))))
19365 (add-after 'install 'install-example-plugins
19366 (lambda* (#:key outputs #:allow-other-keys)
19367 (let ((out (assoc-ref outputs "out")))
19368 ;; Patch to use the core poetry API.
19369 (substitute* '("example_isort_formatting_plugin/pyproject.toml"
19370 "example_isort_sorting_plugin/pyproject.toml"
19371 "example_shared_isort_profile/pyproject.toml")
19373 "poetry-core>=1.0.0")
19374 (("poetry.masonry.api")
19375 "poetry.core.masonry.api"))
19376 ;; Build the example plugins.
19377 (for-each (lambda (source-directory)
19378 (invoke "python" "-m" "build" "--wheel"
19379 "--no-isolation" "--outdir=dist"
19381 '("example_isort_formatting_plugin"
19382 "example_isort_sorting_plugin"
19383 "example_shared_isort_profile"))
19384 ;; Install them to temporary storage, for the test.
19385 (setenv "HOME" (getcwd))
19386 (let ((example-whls (find-files "dist" "^example.*\\.whl$")))
19387 (apply invoke "pip" "--no-cache-dir" "--no-input"
19388 "install" "--user" "--no-deps" example-whls)))))
19390 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
19392 (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
19393 (setenv "PATH" (string-append (getenv "PATH") ":" bin)))
19394 (add-installed-pythonpath inputs outputs)
19395 (invoke "pytest" "-vv" "tests/unit/"
19396 "-k" "not test_gitignore" ;requires git
19397 "--ignore=tests/unit/test_deprecated_finders.py")))))))
19401 python-hypothesmith
19402 python-libcst-minimal
19409 (home-page "https://github.com/PyCQA/isort")
19410 (synopsis "Python utility/library to sort python imports")
19411 (description "@code{python-isort} is a python utility/library to sort
19412 imports alphabetically, and automatically separated into sections. It
19413 provides a command line utility, a python library and plugins for various
19415 (license license:expat)))
19417 (define-public python-configparser
19419 (name "python-configparser")
19424 (uri (pypi-uri "configparser" version))
19427 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
19429 (list python-setuptools-scm))
19430 (build-system python-build-system)
19431 (home-page "https://github.com/jaraco/configparser/")
19432 (synopsis "Backport of configparser from python 3.5")
19433 (description "@code{python-configparser} is a backport of
19434 @code{configparser} from Python 3.5 so that it can be used directly
19435 in other versions.")
19436 (license license:expat)))
19438 (define-public python-iniconfig
19440 (name "python-iniconfig")
19445 (uri (pypi-uri "iniconfig" version))
19448 "0ckzngs3scaa1mcfmsi1w40a1l8cxxnncscrxzjjwjyisx8z0fmw"))))
19449 (build-system python-build-system)
19450 (home-page "https://github.com/RonnyPfannschmidt/iniconfig")
19451 (synopsis "Simple INI-file parser")
19452 (description "The @code{iniconfig} package provides a small and simple
19453 INI-file parser module having a unique set of features ; @code{iniconfig}
19455 @item maintains the order of sections and entries ;
19456 @item supports multi-line values with or without line-continuations ;
19457 @item supports \"#\" comments everywhere ;
19458 @item raises errors with proper line-numbers ;
19459 @item raises an error when two sections have the same name.
19461 (license license:expat)))
19463 (define-public python-mamba
19465 (name "python-mamba")
19469 (uri (pypi-uri "mamba" version))
19472 "15m4dpnpv9m60pdaygvwgi43fwqaivs3qxfxhspwrp47sbgwdkvm"))))
19473 (build-system python-build-system)
19474 (arguments `(#:tests? #f)) ; No test
19476 (list python-clint python-coverage))
19477 (home-page "https://nestorsalceda.com/mamba/")
19478 (synopsis "Test runner for Python")
19480 "Mamba is a Behaviour-Driven Development tool for Python developers.
19481 Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
19482 (license license:expat)))
19484 (define-public python-mando
19486 (name "python-mando")
19490 (uri (pypi-uri "mando" version))
19493 "001mikga36i811pbc95rb45m2kzivkx4xb0fn3pzl4xnnjcskfhq"))))
19494 (build-system python-build-system)
19497 #~(modify-phases %standard-phases
19499 (lambda* (#:key tests? #:allow-other-keys)
19501 (invoke "pytest" "-vv")))))))
19503 (list python-rst2ansi python-six))
19505 (list python-pytest))
19506 (home-page "https://mando.readthedocs.org/")
19508 "Wrapper around argparse, allowing creation of complete CLI applications")
19510 "This package is a wrapper around argparse, allowing you to write complete CLI
19511 applications in seconds while maintaining all the flexibility.")
19512 (license license:expat)))
19514 (define-public python-mwclient
19516 (name "python-mwclient")
19521 ;; The PyPI version wouldn't contain tests.
19522 (uri (git-reference
19523 (url "https://github.com/mwclient/mwclient")
19524 (commit (string-append "v" version))))
19525 (file-name (git-file-name name version))
19527 (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
19528 (build-system python-build-system)
19530 (list python-requests-oauthlib python-six))
19532 (list python-mock python-pytest python-pytest-cov
19533 python-pytest-runner python-responses))
19534 (home-page "https://github.com/btongminh/mwclient")
19535 (synopsis "MediaWiki API client")
19536 (description "This package provides a MediaWiki API client.")
19537 (license license:expat)))
19539 (define-public python-kneed
19541 (name "python-kneed")
19546 (uri (pypi-uri "kneed" version))
19548 (base32 "0vkwi0pr7nfkp3c46hnmx0275yx68v96v10rmspv0wis33x6f39l"))))
19549 (build-system python-build-system)
19551 (list python-matplotlib python-numpy python-scipy))
19552 (home-page "https://github.com/arvkevi/kneed")
19553 (synopsis "Knee-point detection in Python")
19554 (description "This package implements the kneedle algorithm. Given a set
19555 of x and y values, kneed will return the knee point of the function. The knee
19556 point is the point of maximum curvature.")
19557 (license license:bsd-3)))
19559 (define-public python-utils
19561 (name "python-utils")
19565 (uri (pypi-uri "python-utils" version))
19568 "12c0glzkm81ljgf6pwh0d4rmdm1r7vvgg3ifzp8yp9cfyngw07zj"))))
19569 (build-system python-build-system)
19572 (modify-phases %standard-phases
19574 (lambda* (#:key inputs outputs #:allow-other-keys)
19575 (add-installed-pythonpath inputs outputs)
19576 (delete-file "pytest.ini")
19577 (invoke "pytest" "-vv"))))))
19579 `(("pytest-runner" ,python-pytest-runner)
19580 ("pytest" ,python-pytest)
19581 ("six" ,python-six)))
19582 (home-page "https://github.com/WoLpH/python-utils")
19583 (synopsis "Convenient utilities not included with the standard Python install")
19585 "Python Utils is a collection of small Python functions and classes which
19586 make common patterns shorter and easier.")
19587 (license license:bsd-2)))
19589 (define-public python-diff-match-patch
19591 (name "python-diff-match-patch")
19592 (version "20121119")
19596 (uri (pypi-uri "diff-match-patch" version))
19599 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
19600 (build-system python-build-system)
19601 (home-page "https://code.google.com/p/google-diff-match-patch")
19602 (synopsis "Synchronize plain text")
19603 (description "Diff Match and Patch libraries offer robust algorithms to
19604 perform the operations required for synchronizing plain text.")
19605 (license license:asl2.0)))
19607 (define-public python-dirsync
19609 (name "python-dirsync")
19614 (uri (pypi-uri "dirsync" version))
19617 "1gm82jddm1lkazdi8lfsl1b3vi1z0252ng60mzjym8irnv94qfhy"))))
19618 (build-system python-build-system)
19621 (home-page "https://github.com/tkhyn/dirsync")
19622 (synopsis "Advanced directory tree synchronisation tool")
19623 (description "Advanced directory tree synchronisation tool.")
19624 (license license:expat)))
19626 (define-public python-levenshtein
19628 (name "python-levenshtein")
19633 (uri (pypi-uri "python-Levenshtein" version))
19636 "1xj60gymwx1jl2ra9razx2wk8nb9cv1i7l8d14qsp8a8s7xra8yw"))))
19637 (build-system python-build-system)
19638 (home-page "https://github.com/ztane/python-Levenshtein")
19639 (synopsis "Fast computation of Levenshtein distance and string similarity")
19641 "The Levenshtein Python C extension module contains functions for fast computation of
19643 @item Levenshtein (edit) distance, and edit operations
19644 @item string similarity
19645 @item approximate median strings, and generally string averaging
19646 @item string sequence and set similarity
19648 It supports both normal and Unicode strings.")
19649 (license license:gpl2+)))
19651 (define-public python-scandir
19653 (name "python-scandir")
19658 (uri (pypi-uri "scandir" version))
19660 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
19661 (build-system python-build-system)
19663 `(#:phases (modify-phases %standard-phases
19666 (invoke "python" "test/run_tests.py"))))))
19667 (home-page "https://github.com/benhoyt/scandir")
19668 (synopsis "Directory iteration function")
19670 "Directory iteration function like os.listdir(), except that instead of
19671 returning a list of bare filenames, it yields DirEntry objects that include
19672 file type and stat information along with the name. Using scandir() increases
19673 the speed of os.walk() by 2-20 times (depending on the platform and file
19674 system) by avoiding unnecessary calls to os.stat() in most cases.
19676 This package is part of the Python standard library since version 3.5.")
19677 (license license:bsd-3)))
19679 (define-public python-factory-boy
19681 (name "python-factory-boy")
19686 (uri (pypi-uri "factory_boy" version))
19688 (base32 "0pm5lbvnwm0kg5i6z611rg907yw1gy551f2advmpaz041ixjg3d9"))))
19689 (build-system python-build-system)
19691 ;; Tests are not included in the tarball.
19693 (propagated-inputs (list python-faker))
19694 (home-page "https://github.com/benhoyt/scandir")
19695 (synopsis "Versatile test fixtures replacement")
19696 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
19697 factory_girl. As a fixtures replacement tool, it aims to replace static, hard
19698 to maintain fixtures with easy-to-use factories for complex object. Instead
19699 of building an exhaustive test setup with every possible combination of corner
19700 cases, factory_boy allows you to use objects customized for the current test,
19701 while only declaring the test-specific fields.")
19702 (license license:expat)))
19704 (define-public python-translate-toolkit
19706 (name "python-translate-toolkit")
19711 (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
19713 (base32 "0m4cpsp7x7h5m5agg4ybscf7y86wla46q2lvxpi2myplb6qlgcli"))))
19714 (build-system python-build-system)
19716 (list python-pytest python-sphinx))
19719 python-beautifulsoup4
19721 python-diff-match-patch
19728 ;; TODO: tests are not run, because they end with
19729 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
19731 ;; during test setup.
19734 #~(modify-phases %standard-phases
19735 ;; translate-toolkit has many optional dependencies (see
19736 ;; optional.txt), which the sanity check does not understand.
19737 (delete 'sanity-check))))
19738 (home-page "https://toolkit.translatehouse.org")
19739 (synopsis "Tools and API for translation and localization engineering")
19741 "Tools and API for translation and localization engineering. It contains
19742 several utilities, as well as an API for building localization tools.")
19743 (license license:gpl2+)))
19746 (define-public python-packaging
19747 (package/inherit python-packaging-bootstrap
19748 (name "python-packaging")
19750 `(#:phases (modify-phases %standard-phases
19752 (lambda* (#:key tests? #:allow-other-keys)
19754 (invoke "pytest" "-vv")
19755 (format #t "test suite not run~%")))))))
19757 `(("python-pretend" ,python-pretend)
19758 ("python-pytest" ,python-pytest)))
19760 `(("python-pyparsing" ,python-pyparsing)
19761 ("python-six" ,python-six)))
19762 (home-page "https://github.com/pypa/packaging")
19763 (synopsis "Core utilities for Python packages")
19764 (description "Packaging is a Python module for dealing with Python packages.
19765 It offers an interface for working with package versions, names, and dependency
19767 ;; From 'LICENSE': This software is made available under the terms of
19768 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
19769 ;; Contributions to this software is made under the terms of *both* these
19771 (license (list license:asl2.0 license:bsd-2))))
19773 ;; TODO(staging): merge with python-packaging-bootstrap.
19774 (define-public python-packaging-next
19776 (inherit python-packaging)
19781 (uri (pypi-uri "packaging" version))
19784 "1sygirdrqgv4f1ckh9nhpcw1yfidrh3qjl86wq8vk6nq4wlw8iyx"))))))
19786 (define-public python-relatorio
19788 (name "python-relatorio")
19793 (uri (pypi-uri "relatorio" version))
19796 "09nhrz80dfm60nssbvjgz4czzy4yzfa8gxczcdlzbgcnnvm914vb"))))
19797 (build-system python-build-system)
19799 (list python-lxml python-genshi))
19801 (list python-magic))
19802 (home-page "https://relatorio.tryton.org/")
19803 (synopsis "Templating library able to output ODT and PDF files")
19804 (description "Relatorio is a templating library which provides a way to
19805 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
19806 for more filetypes can be easily added by creating plugins for them.")
19807 (license license:gpl3+)))
19809 (define-public python-radon
19811 (name "python-radon")
19816 (uri (pypi-uri "radon" version))
19819 "1vmf56zsf3paa1jadjcjghiv2kxwiismyayq42ggnqpqwm98f7fb"))))
19820 (build-system python-build-system)
19822 `(#:phases (modify-phases %standard-phases
19823 (add-after 'unpack 'relax-requirements
19825 (substitute* "setup.py"
19828 (("mando>=0\\.6,<0\\.7")
19830 (("colorama==0.4.1")
19831 "colorama>=0.4.1"))))
19834 (invoke "python" "radon/tests/run.py"))))))
19835 (propagated-inputs (list python-colorama python-mando))
19836 (native-inputs (list python-pytest python-pytest-mock))
19837 (home-page "https://radon.readthedocs.org/")
19838 (synopsis "Code Metrics in Python")
19839 (description "Radon is a Python tool which computes various code metrics.
19840 Supported metrics are:
19842 @item raw metrics: SLOC, comment lines, blank lines, &c.
19843 @item Cyclomatic Complexity (i.e., McCabe’s Complexity)
19844 @item Halstead metrics (all of them)
19845 @item the Maintainability Index (a Visual Studio metric)
19847 (license license:expat)))
19849 (define-public python-sure
19851 (name "python-sure")
19856 (uri (pypi-uri "sure" version))
19859 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
19860 (build-system python-build-system)
19862 (list python-mock python-six))
19864 (list python-nose))
19865 (home-page "https://github.com/gabrielfalcao/sure")
19866 (synopsis "Automated testing library in python for python")
19868 "Sure is a python library that leverages a DSL for writing assertions.
19869 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
19870 (license license:gpl3+)))
19872 (define-public python-misaka
19874 (name "python-misaka")
19879 (uri (pypi-uri "misaka" version))
19882 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
19883 (build-system python-build-system)
19885 `(;; Line 37 of setup.py calls self.run_command('develop')
19886 ;; in the 'check' phase. This command seems to be trying
19888 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
19889 ;; for which it does not have the permission to write.
19892 (list python-cffi))
19893 (home-page "https://github.com/FSX/misaka")
19894 (synopsis "Python binding for Hoedown")
19896 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
19897 library written in C. It features a fast HTML renderer and functionality to make custom
19898 renderers (e.g. man pages or LaTeX).")
19899 (license license:expat)))
19901 (define-public python-jsonpointer
19903 (name "python-jsonpointer")
19908 (uri (pypi-uri "jsonpointer" version))
19911 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
19912 (build-system python-build-system)
19913 (home-page "https://github.com/stefankoegl/python-json-pointer")
19914 (synopsis "Identify specific nodes in a JSON document")
19915 (description "@code{jsonpointer} allows you to access specific nodes
19916 by path in a JSON document (see RFC 6901).")
19917 (license license:bsd-3)))
19919 (define-public python-jsonpatch
19921 (name "python-jsonpatch")
19926 ;; pypi version lacks tests.js
19927 (uri (git-reference
19928 (url "https://github.com/stefankoegl/python-json-patch")
19929 (commit (string-append "v" version))))
19930 (file-name (git-file-name name version))
19933 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
19934 (build-system python-build-system)
19936 (list python-jsonpointer))
19937 (home-page "https://github.com/stefankoegl/python-json-patch")
19938 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
19939 (description "@code{jsonpatch} is a library and program that allows
19940 applying JSON Patches according to RFC 6902.")
19941 (license license:bsd-3)))
19943 (define-public python-jsonpatch-0.4
19944 (package (inherit python-jsonpatch)
19945 (name "python-jsonpatch")
19950 (uri (git-reference
19951 (url "https://github.com/stefankoegl/python-json-patch")
19952 (commit (string-append "v" version))))
19953 (file-name (git-file-name name version))
19956 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
19958 (define-public python-rfc3986
19960 (name "python-rfc3986")
19964 (uri (pypi-uri "rfc3986" version))
19967 "17dvx15m3r49bmif5zlli8kzjd6bys6psixzbp14sd5367d9h8qi"))))
19968 (build-system python-build-system)
19971 (modify-phases %standard-phases
19974 (invoke "pytest" "-v"))))))
19976 (list python-pytest))
19977 (home-page "https://rfc3986.readthedocs.io/")
19978 (synopsis "Parse and validate URI references")
19980 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
19981 validation and authority parsing. This module also supports RFC@tie{}6874
19982 which adds support for zone identifiers to IPv6 addresses.")
19983 (license license:asl2.0)))
19985 (define-public python-rfc3987
19987 (name "python-rfc3987")
19992 (uri (pypi-uri "rfc3987" version))
19995 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
19996 (build-system python-build-system)
19997 (home-page "https://pypi.org/project/rfc3987/")
19998 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
19999 (description "@code{rfc3987} provides routines for parsing and
20000 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
20001 (license license:gpl3+)))
20003 ;; The latest commit contains fixes for building with both python3 and python2.
20004 (define-public python-rfc6555
20005 (let ((commit "1a181b432312731f6742a5eb558dae4761d32361")
20008 (name "python-rfc6555")
20009 (version (git-version "0.0.0" revision commit))
20012 (uri (git-reference
20013 (url "https://github.com/sethmlarson/rfc6555")
20015 (file-name (git-file-name name version))
20018 "1bxl17j9vs69cshcqnlwamr03hnykxqnwz3mdgi6x3s2k4q18npp"))))
20019 (build-system python-build-system)
20022 (modify-phases %standard-phases
20024 (lambda* (#:key tests? #:allow-other-keys)
20026 ;; Other tests require network access.
20027 (invoke "pytest" "tests/test_ipv6.py")
20030 (list python-pytest))
20031 (home-page "https://pypi.org/project/rfc6555/")
20032 (synopsis "Python implementation of RFC 6555")
20034 "Python implementation of the Happy Eyeballs Algorithm described in RFC
20035 6555. Provided with a single file and dead-simple API to allow easy vendoring
20036 and integration into other projects.")
20037 (license license:asl2.0))))
20039 (define-public python-bagit
20041 (name "python-bagit")
20046 (uri (pypi-uri "bagit" version))
20049 "1m6y04qmig0b5hzb35lnaw3d2yfydb7alyr1579yblvgs3da6j7j"))))
20050 (build-system python-build-system)
20052 (list python-setuptools-scm python-coverage python-mock))
20053 (home-page "https://libraryofcongress.github.io/bagit-python/")
20054 (synopsis "Create and validate BagIt packages")
20055 (description "Bagit is a Python library and command line utility for working
20056 with BagIt style packages. BagIt is a minimalist packaging format for digital
20058 (license license:cc0)))
20060 (define-public python-prov
20062 (name "python-prov")
20067 (uri (pypi-uri "prov" version))
20070 "1vi2fj31vygfcqrkimdmk52q2ldw08g9fn4v4zlgdfgcjlhqyhxn"))))
20071 (build-system python-build-system)
20073 (list python-dateutil python-lxml python-networkx python-rdflib-5))
20075 (list graphviz python-pydot))
20076 (home-page "https://github.com/trungdong/prov")
20078 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
20080 "This package provides a library for W3C Provenance Data Model supporting
20081 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
20082 (license license:expat)))
20084 (define-public python-arcp
20086 (name "python-arcp")
20091 (uri (pypi-uri "arcp" version))
20094 "1p8mfyjssa6pbn5dp6pyzv9yy6kwm2rz5jn2kjbq5vy9f9wsq5sw"))))
20095 (build-system python-build-system)
20097 (list python-pytest))
20098 (home-page "http://arcp.readthedocs.io/")
20100 "Archive and Package URI parser and generator")
20102 "@acronym{arcp, Archive and Package} provides functions for creating
20103 @code{arcp_} URIs, which can be used for identifying or parsing hypermedia files
20104 packaged in an archive or package, like a ZIP file. arcp URIs can be used to
20105 consume or reference hypermedia resources bundled inside a file archive or an
20106 application package, as well as to resolve URIs for archive resources within a
20107 programmatic framework. This URI scheme provides mechanisms to generate a
20108 unique base URI to represent the root of the archive, so that relative URI
20109 references in a bundled resource can be resolved within the archive without
20110 having to extract the archive content on the local file system. An arcp URI can
20111 be used for purposes of isolation (e.g. when consuming multiple archives),
20112 security constraints (avoiding \"climb out\" from the archive), or for
20113 externally identiyfing sub-resources referenced by hypermedia formats.")
20114 (license license:asl2.0)))
20116 (define-public python-shellescape
20118 (name "python-shellescape")
20123 (uri (git-reference
20124 (url "https://github.com/chrissimpkins/shellescape")
20125 (commit (string-append "v" version))))
20126 (file-name (git-file-name name version))
20129 "0wzccxk139qx1lb2g70f5b2yh9zq15nr2mgvqdbfabg5zm0vf1qw"))))
20130 (build-system python-build-system)
20133 (modify-phases %standard-phases
20135 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
20137 (add-installed-pythonpath inputs outputs)
20138 (invoke "python" "tests/test_shellescape.py"))
20141 (list python-pytest))
20142 (home-page "https://github.com/chrissimpkins/shellescape")
20144 "Shell escape a string to safely use it as a token in a shell command")
20146 "The shellescape Python module defines the @code{shellescape.quote()}
20147 function that returns a shell-escaped version of a Python string. This is a
20148 backport of the @code{shlex.quote()} function from Python 3.8 that makes it
20149 accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
20150 (license license:expat)))
20152 (define-public python-validators
20154 (name "python-validators")
20158 (uri (pypi-uri "validators" version))
20161 "19lypf7hm7p203ay3v8zmckc5rv6889zkfdm16nki1972f99mk9p"))))
20162 (build-system python-build-system)
20164 '(#:phases (modify-phases %standard-phases
20167 (invoke "pytest" "-vv"))))))
20169 (list python-decorator python-six))
20171 (list python-flake8 python-isort python-pytest))
20172 (home-page "https://github.com/kvesteri/validators")
20173 (synopsis "Data validation library")
20175 "This package contains validators for different things such as email
20176 addresses, IP addresses, URLs, hashes and more. It has been designed to
20177 be easy to use and not require defining a schema or form just to validate
20179 (license license:expat)))
20181 (define-public python-validate-email
20183 (name "python-validate-email")
20188 (uri (pypi-uri "validate_email" version))
20191 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
20192 (build-system python-build-system)
20193 (home-page "https://github.com/syrusakbary/validate_email")
20194 (synopsis "Verifies if an email address is valid and really exists")
20195 (description "@code{validate_email} can be used to verify if an email
20196 address is valid and really exists.")
20197 (license license:lgpl3+)))
20199 (define-public python-flex
20201 (name "python-flex")
20206 (uri (pypi-uri "flex" version))
20209 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
20210 (build-system python-build-system)
20219 python-validate-email))
20220 (home-page "https://github.com/pipermerriam/flex")
20221 (synopsis "Validates Swagger schemata")
20222 (description "@code{flex} can be used to validate Swagger schemata.")
20223 (license license:bsd-3)))
20225 (define-public python-marshmallow
20227 (name "python-marshmallow")
20232 (uri (pypi-uri "marshmallow" version))
20235 "0kizhh3mnhpa08wfnsv1gagy22bpxzxszgbiylkhpz1d8qvwrykk"))))
20236 (build-system python-build-system)
20238 (list python-dateutil python-simplejson))
20240 (list python-pytest python-pytz))
20241 (home-page "https://github.com/marshmallow-code/marshmallow")
20242 (synopsis "Convert complex datatypes to and from native
20244 (description "@code{marshmallow} provides a library for converting
20245 complex datatypes to and from native Python datatypes.")
20246 (license license:expat)))
20248 (define-public python-marshmallow-jsonapi
20250 (name "python-marshmallow-jsonapi")
20255 (uri (pypi-uri "marshmallow-jsonapi" version))
20257 (base32 "1d9pxcgmln4gls99vwj1h24qv0lz7fb2jqmqrsiv1pid1snc125x"))))
20258 (build-system python-build-system)
20260 (list python-marshmallow))
20264 python-flake8-bugbear
20270 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
20271 (synopsis "JSON:API 1.0 formatting with Marshmallow")
20273 "The marshmallow-jsonapi package provides a simple way to produce
20274 @uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web framework.
20275 It includes optional utilities to integrate with Flask.")
20276 (license license:expat)))
20278 (define-public python-apispec
20280 (name "python-apispec")
20285 (uri (pypi-uri "apispec" version))
20288 "12n4w5zkn4drcn8izq68vmixmqvz6abviqkdn4ip0kaax3jjh3in"))))
20289 (build-system python-build-system)
20291 '(#:phases (modify-phases %standard-phases
20294 (invoke "pytest" "-vv"
20295 ;; Disable validation tests since they require
20296 ;; the optional 'prance' library which is not
20298 "-k" "not openapi_tools_validate"))))))
20300 (list python-pyyaml))
20302 (list python-pytest python-marshmallow))
20303 (home-page "https://github.com/marshmallow-code/apispec")
20304 (synopsis "Swagger/OpenAPI specification generator")
20305 (description "@code{python-apispec} is a pluggable API specification
20306 generator. It currently supports the OpenAPI specification, formerly known
20308 (license license:expat)))
20310 (define-public python-flasgger
20312 (name "python-flasgger")
20317 (uri (git-reference
20318 (url "https://github.com/rochacbruno/flasgger")
20320 (file-name (git-file-name name version))
20322 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
20323 (build-system python-build-system)
20326 (modify-phases %standard-phases
20328 (lambda* (#:key inputs outputs #:allow-other-keys)
20329 (substitute* "Makefile"
20330 (("flake8 flasgger --ignore=F403")
20331 "flake8 flasgger --ignore=E731,F403"))
20332 (invoke "py.test"))))))
20334 (list python-flask python-pyyaml python-jsonschema python-mistune
20337 (list python-decorator
20339 python-flask-restful
20345 (home-page "https://github.com/rochacbruno/flasgger/")
20346 (synopsis "Extract Swagger specs from your Flask project")
20347 (description "@code{python-flasgger} allows extracting Swagger specs
20348 from your Flask project. It is a fork of Flask-Swagger.")
20349 (license license:expat)))
20351 (define-public python-swagger-spec-validator
20353 (name "python-swagger-spec-validator")
20358 (uri (pypi-uri "swagger-spec-validator" version))
20361 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
20362 (build-system python-build-system)
20364 (list python-jsonschema python-pyyaml python-six))
20366 "https://github.com/Yelp/swagger_spec_validator")
20367 (synopsis "Validation of Swagger specifications")
20368 (description "@code{swagger_spec_validator} provides a library for
20369 validating Swagger API specifications.")
20370 (license license:asl2.0)))
20372 (define-public python-apache-libcloud
20374 (name "python-apache-libcloud")
20379 (uri (pypi-uri "apache-libcloud" version))
20382 "1b28j265kvibgxrgxx0gwfm6cmv252c8ph1j2vb0cpms8ph5if5v"))))
20383 (build-system python-build-system)
20386 (modify-phases %standard-phases
20387 (add-after 'unpack 'patch-ssh
20388 (lambda* (#:key inputs #:allow-other-keys)
20389 (substitute* "libcloud/compute/ssh.py"
20391 (string-append "'" (search-input-file inputs "/bin/ssh")
20393 (add-after 'unpack 'patch-tests
20395 (substitute* "libcloud/test/compute/test_ssh_client.py"
20396 (("^class ShellOutSSHClientTests")
20397 "@unittest.skip(\"Guix container doesn't have ssh service\")
20398 class ShellOutSSHClientTests"))))
20399 (add-before 'check 'copy-secret
20401 (copy-file "libcloud/test/secrets.py-dist"
20402 "libcloud/test/secrets.py"))))))
20406 (list python-paramiko python-requests))
20408 (list python-lockfile python-mock python-pytest python-pytest-runner
20409 python-requests-mock))
20410 (home-page "https://libcloud.apache.org/")
20411 (synopsis "Unified Cloud API")
20412 (description "@code{libcloud} is a Python library for interacting with
20413 many of the popular cloud service providers using a unified API.")
20414 (license license:asl2.0)))
20416 (define-public python-smmap
20418 (name "python-smmap")
20423 (uri (pypi-uri "smmap" version))
20425 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
20426 (build-system python-build-system)
20428 (list python-nosexcover))
20429 (home-page "https://github.com/Byron/smmap")
20430 (synopsis "Python sliding window memory map manager")
20431 (description "@code{smmap} is a pure Python implementation of a sliding
20432 window memory map manager.")
20433 (license license:bsd-3)))
20435 (define-public python-regex
20437 (name "python-regex")
20438 (version "2022.1.18")
20441 (uri (pypi-uri "regex" version))
20444 "05ir92d0cmv8wkafn3r05j5q47l6shg7cpdblp2a8m407b02vwwp"))))
20445 (build-system python-build-system)
20448 (modify-phases %standard-phases
20450 (lambda* (#:key inputs outputs #:allow-other-keys)
20451 (add-installed-pythonpath inputs outputs)
20452 (invoke "python" "-c"
20453 "from regex.test_regex import test_main ; test_main()"))))))
20454 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
20455 (synopsis "Alternative regular expression module")
20456 (description "This regular expression implementation is backwards-
20457 compatible with the standard @code{re} module, but offers additional
20458 functionality like full case-folding for case-insensitive matches in Unicode.")
20459 (license license:psfl)))
20461 (define-public python-pyopengl
20463 (name "python-pyopengl")
20468 (uri (pypi-uri "PyOpenGL" version))
20471 "091lp9bpqi8yf1nmyg19xmvw611lrzq2q94cl1k5gnlh0c6vl1s1"))))
20472 (build-system python-build-system)
20474 (list mesa freeglut glu))
20476 `(#:tests? #f ; Tests fail: AttributeError: 'GLXPlatform' object has no
20477 ;attribute 'OSMesa'
20479 (modify-phases %standard-phases
20480 (add-before 'build 'fix-paths
20481 (lambda* (#:key inputs outputs #:allow-other-keys)
20482 (substitute* '("OpenGL/platform/ctypesloader.py")
20483 (("filenames_to_try = \\[\\]") "filenames_to_try = [name]"))
20484 (substitute* '("OpenGL/platform/glx.py" "tests/check_glut_load.py")
20486 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGL.so'"))
20488 (string-append "'" (assoc-ref inputs "glu") "/lib/libGLU.so'"))
20490 (string-append "'" (assoc-ref inputs "freeglut") "/lib/libglut.so',"))
20492 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv1_CM.so'"))
20494 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv2.so'")))
20495 ;; Not providing libgle. It seems to be very old.
20497 (home-page "http://pyopengl.sourceforge.net")
20498 (synopsis "Standard OpenGL bindings for Python")
20500 "PyOpenGL is the most common cross platform Python binding to OpenGL and
20501 related APIs. The binding is created using the standard @code{ctypes}
20503 (license license:bsd-3)))
20505 (define-public python-pyopengl-accelerate
20507 (inherit python-pyopengl)
20508 (name "python-pyopengl-accelerate")
20513 (uri (pypi-uri "PyOpenGL-accelerate" version))
20516 "01iggy5jwxv7lxnj51zbmlbhag9wcb7dvrbwgi97i90n0a5m3r8j"))))
20518 (list mesa python-numpy)) ; for cython module
20519 ; numpy_formathandler, thus not propagated
20523 (modify-phases %standard-phases
20524 (delete 'fix-paths))))
20525 (synopsis "Acceleration code for PyOpenGL")
20527 "This is the Cython-coded accelerator module for PyOpenGL.")))
20529 (define-public python-rencode
20531 (name "python-rencode")
20536 (uri (pypi-uri "rencode" version))
20539 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
20540 (build-system python-build-system)
20543 (modify-phases %standard-phases
20544 (add-before 'check 'delete-bogus-test
20545 ;; This test requires /home/aresch/Downloads, which is not provided by
20546 ;; the build environment.
20548 (delete-file "rencode/t.py")
20550 (native-inputs (list pkg-config python-cython))
20551 (home-page "https://github.com/aresch/rencode")
20552 (synopsis "Serialization of heterogeneous data structures")
20554 "The @code{rencode} module is a data structure serialization library,
20555 similar to @code{bencode} from the BitTorrent project. For complex,
20556 heterogeneous data structures with many small elements, r-encoding stake up
20557 significantly less space than b-encodings. This version of rencode is a
20558 complete rewrite in Cython to attempt to increase the performance over the
20559 pure Python module.")
20560 (license license:bsd-3)))
20562 (define-public python-pysocks
20564 (name "python-pysocks")
20569 (uri (pypi-uri "PySocks" version))
20572 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
20573 (build-system python-build-system)
20574 (arguments `(#:tests? #f))
20575 (home-page "https://github.com/Anorov/PySocks")
20576 (synopsis "SOCKS client module")
20577 (description "@code{pysocks} is an updated and semi-actively maintained
20578 version of @code{SocksiPy} with bug fixes and extra features.")
20579 (license license:bsd-3)))
20581 (define-public python-pydiff
20583 (name "python-pydiff")
20588 (uri (pypi-uri "pydiff" version))
20591 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
20592 (build-system python-build-system)
20593 (home-page "https://github.com/myint/pydiff")
20594 (synopsis "Library to diff two Python files at the bytecode level")
20596 "@code{pydiff} makes it easy to look for actual code changes while
20597 ignoring formatting changes.")
20598 (license license:expat)))
20600 (define-public python-pydub
20602 (name "python-pydub")
20607 (uri (pypi-uri "pydub" version))
20610 "03ykn2kp6qglsrzqi5h79z5cp3kl9mknasv0d6jv5jj9k77362lq"))))
20611 (build-system python-build-system)
20614 (modify-phases %standard-phases
20615 (add-after 'unpack 'fix-ffmpeg-path
20616 (lambda* (#:key inputs #:allow-other-keys)
20617 (let ((ffmpeg (assoc-ref inputs "ffmpeg")))
20618 (substitute* '("pydub/utils.py")
20619 (("return \"ffmpeg\"")
20620 (string-append "return \"" ffmpeg "/bin/ffmpeg\""))
20621 (("return \"ffplay\"")
20622 (string-append "return \"" ffmpeg "/bin/ffplay\""))
20623 (("return \"ffprobe\"")
20624 (string-append "return \"" ffmpeg "/bin/ffprobe\""))
20625 (("warn\\(\"Couldn't find ff") "# warn\\(\"Couldn't find ff"))
20627 (home-page "https://pydub.com")
20631 (list python-scipy))
20632 (synopsis "Manipulate audio with a high level interface in Python")
20634 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
20635 @code{ffmpeg} to open various audio formats.")
20636 (license license:expat))) ; MIT license
20638 (define-public python-tqdm
20640 (name "python-tqdm")
20645 (uri (pypi-uri "tqdm" version))
20648 "03cjj8jl8iybvfjbpvdql5qfslzfv043g7w6nx8rhv2h2xrdwnfk"))))
20649 (build-system python-build-system)
20651 '(#:phases (modify-phases %standard-phases
20654 (invoke "pytest" "-vv"
20655 "-o" "asyncio_mode=auto"
20656 "-k" "not perf"))))))
20658 (list python-pytest python-pytest-asyncio python-pytest-timeout
20659 python-setuptools-scm python-toml))
20660 (home-page "https://github.com/tqdm/tqdm")
20661 (synopsis "Fast, extensible progress meter")
20663 "Make loops show a progress bar on the console by just wrapping any
20664 iterable with @code{|tqdm(iterable)|}. Offers many options to define
20665 design and layout.")
20666 (license (list license:mpl2.0 license:expat))))
20668 (define-public python-pkginfo
20670 (name "python-pkginfo")
20675 (uri (pypi-uri "pkginfo" version))
20677 (base32 "0z46w559hrl79gf7navgzimj21ma821wka27jh58fvyqilqs8kd8"))))
20678 (build-system python-build-system)
20680 (list python-wheel))
20681 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
20682 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
20684 "API to query the distutils metadata written in @file{PKG-INFO} inside a
20685 source distriubtion (an sdist) or a binary distribution (e.g., created by
20686 running bdist_egg). It can also query the EGG-INFO directory of an installed
20687 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
20688 created by running @code{python setup.py develop}).")
20689 (license license:expat)))
20691 (define-public python-twine
20693 (name "python-twine")
20698 (uri (pypi-uri "twine" version))
20700 (base32 "11rpd653zcgzkq3sgwkzs3mpxl3r5rij59745ni84ikv8smjmlm3"))))
20701 (build-system python-build-system)
20706 python-readme-renderer
20708 python-requests-toolbelt))
20709 (home-page "https://github.com/pypa/twine")
20710 (synopsis "Collection of utilities for interacting with PyPI")
20712 "@code{twine} currently supports registering projects and uploading
20713 distributions. It authenticates the user over HTTPS, allows them to pre-sign
20714 their files and supports any packaging format (including wheels).")
20715 (license license:asl2.0)))
20717 (define-public python-linecache2
20719 (name "python-linecache2")
20724 (uri (pypi-uri "linecache2" version))
20727 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
20728 (build-system python-build-system)
20730 `(;; The tests depend on unittest2, and our version is a bit too old.
20733 `(("python-pbr" ,python-pbr-minimal)))
20735 "https://github.com/testing-cabal/linecache2")
20736 (synopsis "Backports of the linecache module")
20738 "The linecache module allows one to get any line from any file, while
20739 attempting to optimize internally, using a cache, the common case where many
20740 lines are read from a single file.")
20741 (license license:psfl)))
20743 (define-public python-traceback2
20745 (name "python-traceback2")
20750 (uri (pypi-uri "traceback2" version))
20753 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
20754 (build-system python-build-system)
20756 `(;; python-traceback2 and python-unittest2 depend on one another.
20759 `(("python-pbr" ,python-pbr-minimal)))
20761 (list python-linecache2 python-six))
20763 "https://github.com/testing-cabal/traceback2")
20764 (synopsis "Backports of the traceback module")
20766 "This module provides a standard interface to extract, format and print
20767 stack traces of Python programs. It exactly mimics the behavior of the Python
20768 interpreter when it prints a stack trace.")
20769 (license license:psfl)))
20771 (define-public python-ratelimiter
20773 (name "python-ratelimiter")
20778 (uri (pypi-uri "ratelimiter" version))
20781 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
20782 (build-system python-build-system)
20784 '(#:tests? #f)) ; There are no tests in the pypi archive.
20785 (home-page "https://github.com/RazerM/ratelimiter")
20786 (synopsis "Simple rate limiting object")
20788 "The @code{ratelimiter} module ensures that an operation will not be
20789 executed more than a given number of times during a given period.")
20790 (license license:asl2.0)))
20792 (define-public python-jsonrpclib-pelix
20794 (name "python-jsonrpclib-pelix")
20799 (uri (pypi-uri "jsonrpclib-pelix" version))
20802 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
20803 (build-system python-build-system)
20805 `(#:tests? #f)) ; no tests in PyPI tarball
20806 (home-page "https://github.com/tcalmant/jsonrpclib/")
20807 (synopsis "JSON-RPC 2.0 client library for Python")
20809 "This library implements the JSON-RPC v2.0
20810 specification (backwards-compatible) as a client library for Python. This
20811 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
20813 (license license:asl2.0)))
20815 (define-public python-setuptools-scm-git-archive
20817 (name "python-setuptools-scm-git-archive")
20822 (uri (pypi-uri "setuptools_scm_git_archive" version))
20825 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
20826 (build-system python-build-system)
20828 '(#:phases (modify-phases %standard-phases
20829 (add-after 'unpack 'dont-install-defunct-egginfo
20831 ;; When a ".git" directory is missing, the setup.py
20832 ;; script invokes setuptools.setup twice, once with
20833 ;; "0" as the version. Prevent that.
20834 (substitute* "setup.py"
20835 (("if not isdir\\('\\.git'\\):")
20838 (list python-pytest))
20840 (list python-setuptools-scm))
20841 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
20842 (synopsis "Setuptools_scm plugin for git archives")
20844 "The setuptools_scm_git_archive package is a plugin to
20845 setuptools_scm, which supports obtaining versions from git archives that
20846 belong to tagged versions.")
20847 (license license:expat)))
20849 (define-public python-setuptools-git
20851 (name "python-setuptools-git")
20856 (uri (pypi-uri "setuptools-git" version))
20859 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
20860 (build-system python-build-system)
20863 (modify-phases %standard-phases
20864 ;; This is needed for tests.
20865 (add-after 'unpack 'configure-git
20867 (setenv "HOME" "/tmp")
20868 (invoke "git" "config" "--global" "user.email" "guix")
20869 (invoke "git" "config" "--global" "user.name" "guix")
20872 `(("git" ,git-minimal)))
20873 (home-page "https://github.com/msabramo/setuptools-git")
20874 (synopsis "Setuptools revision control system plugin for Git")
20876 "This package provides a plugin for Setuptools for revision control with
20878 (license license:bsd-3)))
20880 (define-public python-setuptools-rust
20882 (name "python-setuptools-rust")
20887 (uri (pypi-uri "setuptools-rust" version))
20889 (base32 "1lb57qx1azklgzmalflq960agvwci4bwddw0zvlc9zy00fsvkbd0"))))
20890 (build-system python-build-system)
20891 (arguments '(#:tests? #f)) ;no tests
20893 (list python-setuptools-scm))
20895 (list python-semantic-version python-typing-extensions))
20896 (home-page "https://github.com/PyO3/setuptools-rust")
20897 (synopsis "Setuptools plugin for Rust extensions")
20899 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
20900 Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
20901 (license license:expat)))
20903 (define-public python-pyclipper
20905 (name "python-pyclipper")
20906 (version "1.3.0.post3")
20910 (uri (pypi-uri "pyclipper" version))
20912 (base32 "0vqzbmq2di1jaj6230m5i1ld0mg6wdb1c6r6i5zli54varavr7v3"))
20913 (modules '((guix build utils)))
20916 ;; This file is generated by Cython.
20917 (delete-file "src/pyclipper/_pyclipper.cpp") #t))))
20918 (build-system python-build-system)
20921 (modify-phases %standard-phases
20922 (add-before 'build 'cythonize-sources
20924 (with-directory-excursion "src/pyclipper"
20925 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
20927 (list python-cython python-setuptools-scm
20928 python-pytest python-pytest-runner))
20929 (home-page "https://github.com/greginvm/pyclipper")
20930 (synopsis "Wrapper for Angus Johnson's Clipper library")
20932 "Pyclipper is a Cython wrapper for the C++ translation of the
20933 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
20934 (license license:expat)))
20936 (define-public python-tempdir
20938 (name "python-tempdir")
20943 (uri (pypi-uri "tempdir" version))
20946 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
20947 (build-system python-build-system)
20948 (home-page "https://pypi.org/project/tempdir/")
20950 ;; the package has no tests
20952 (synopsis "Python library for managing temporary directories")
20954 "This library manages temporary directories that are automatically
20955 deleted with all their contents when they are no longer needed. It is
20956 particularly convenient for use in tests.")
20957 (license license:expat)))
20959 (define-public python-tempora
20961 (name "python-tempora")
20966 (uri (pypi-uri "tempora" version))
20968 (base32 "09wirlk5vmxlhl9rnxp7g5qz2nsd6b0gnzk5fczbz0s8lsbz386b"))))
20969 (build-system python-build-system)
20973 #~(modify-phases %standard-phases
20974 ;; XXX: PEP 517 manual build copied from python-isort.
20977 (setenv "SOURCE_DATE_EPOCH" "315532800")
20978 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
20981 (let ((whl (car (find-files "dist" "\\.whl$"))))
20982 (invoke "pip" "--no-cache-dir" "--no-input"
20983 "install" "--no-deps" "--prefix" #$output whl))))
20985 (lambda* (#:key tests? #:allow-other-keys)
20987 ;; Do not test the myproject.toml build as it tries to pull
20988 ;; dependencies from the Internet.
20989 (invoke "pytest" "-k" "not project")))))))
20991 (list python-pypa-build
20994 python-pytest-black
20995 python-pytest-checkdocs
20997 python-pytest-enabler
20998 python-pytest-flake8
20999 python-pytest-freezegun
21001 python-setuptools-scm
21002 python-types-freezegun
21003 python-types-pytz))
21004 (propagated-inputs (list python-jaraco-functools python-pytz))
21005 (home-page "https://github.com/jaraco/tempora")
21006 (synopsis "Python date and time objects and routines")
21007 (description "The @code{tempora} Python library contains miscellaneous
21008 date and time related utilities and constants, routines for measuring,
21009 profiling, and getting datetime-aware @acronym{UTC, Coordinated Universal
21010 Time} values as well as an event scheduler.")
21011 (license license:expat)))
21013 (define-public python-activepapers
21015 (name "python-activepapers")
21020 (uri (pypi-uri "ActivePapers.Py" version))
21023 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
21024 (build-system python-build-system)
21026 `(#:modules ((ice-9 ftw)
21029 (guix build python-build-system))
21032 (modify-phases %standard-phases
21033 (add-after 'unpack 'delete-python2-code
21035 (for-each delete-file
21036 '("lib/activepapers/builtins2.py"
21037 "lib/activepapers/standardlib2.py"
21038 "lib/activepapers/utility2.py"))))
21041 ;; Deactivate the test cases that download files
21042 (setenv "NO_NETWORK_ACCESS" "1")
21043 ;; For some strange reason, some tests fail if nosetests runs all
21044 ;; test modules in a single execution. They pass if each test
21045 ;; module is run individually.
21046 (for-each (lambda (filename)
21047 (invoke "nosetests"
21048 (string-append "tests/" filename)))
21051 (string-suffix? ".py" filename)))))))))
21053 (list python-tempdir python-nose))
21055 (list python-h5py))
21056 (home-page "https://www.activepapers.org/")
21057 (synopsis "Executable papers for scientific computing")
21059 "ActivePapers is a tool for working with executable papers, which
21060 combine data, code, and documentation in single-file packages,
21061 suitable for publication as supplementary material or on repositories
21062 such as figshare or Zenodo.")
21063 (license license:bsd-3)))
21065 (define-public python-semver
21067 (name "python-semver")
21072 (uri (pypi-uri "semver" version))
21075 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
21076 (build-system python-build-system)
21078 `(#:phases (modify-phases %standard-phases
21081 (delete-file "setup.cfg")
21082 (invoke "py.test"))))))
21084 (list python-pytest))
21085 (home-page "https://github.com/k-bx/python-semver")
21086 (synopsis "Python helper for Semantic Versioning")
21087 (description "This package provides a Python library for
21088 @url{Semantic Versioning, http://semver.org/}.")
21089 (license license:bsd-3)))
21091 (define-public python-pyro4
21093 (name "python-pyro4")
21098 (uri (pypi-uri "Pyro4" version))
21100 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
21101 (build-system python-build-system)
21103 '(#:tests? #f)) ;FIXME: Some tests require network access.
21105 (list python-cloudpickle python-dill python-msgpack))
21107 (list python-serpent))
21108 (home-page "https://pyro4.readthedocs.io")
21109 (synopsis "Distributed object middleware for Python")
21111 "Pyro enables you to build applications in which objects can talk to each
21112 other over the network. You can just use normal Python method calls to call
21113 objects on other machines, also known as remote procedure calls (RPC).")
21114 (license license:expat)))
21116 (define-public python-phonenumbers
21118 (name "python-phonenumbers")
21123 (uri (pypi-uri "phonenumbers" version))
21126 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
21127 (build-system python-build-system)
21129 "https://github.com/daviddrysdale/python-phonenumbers")
21131 "Python library for dealing with international phone numbers")
21133 "This package provides a Python port of Google's libphonenumber library.")
21134 (license license:asl2.0)))
21136 (define-public python-heapdict
21138 (name "python-heapdict")
21143 (uri (pypi-uri "HeapDict" version))
21146 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
21147 (build-system python-build-system)
21148 (home-page "http://stutzbachenterprises.com/")
21149 (synopsis "Heap with decrease-key and increase-key operations")
21151 "heapdict implements the MutableMapping ABC, meaning it works pretty much
21152 like a regular Python @code{dict}. It’s designed to be used as a priority
21154 (license license:bsd-3)))
21156 (define-public python-zict
21158 (name "python-zict")
21163 (uri (pypi-uri "zict" version))
21166 "05pd1hyhqvpw87rnbvl3vdyf619snpyccbswaxisdj17frwnjacf"))))
21167 (build-system python-build-system)
21169 (list python-heapdict))
21171 (list python-pytest))
21172 (home-page "https://zict.readthedocs.io/en/latest/")
21173 (synopsis "Composable mutable mapping tools")
21174 (description "This package provides abstract @code{MutableMapping} classes
21175 that consume and build on other @code{MutableMappings}. Several of these can
21176 be composed with one another to form intuitive interfaces over complex storage
21177 systems policies.")
21178 (license license:bsd-3)))
21180 (define-public python-send2trash
21182 (name "python-send2trash")
21185 (origin (method git-fetch)
21186 ;; Source tarball on PyPI doesn't include tests.
21187 (uri (git-reference
21188 (url "https://github.com/arsenetar/send2trash")
21190 (file-name (git-file-name name version))
21193 "1k7dfypaaq4f36fbciaasv72j6wgjihw8d88axmz9c329bz8v5qx"))))
21194 (build-system python-build-system)
21197 (modify-phases %standard-phases
21198 (add-before 'check 'pre-check
21200 (setenv "HOME" "/tmp")))
21202 (lambda* (#:key tests? #:allow-other-keys)
21204 (invoke "pytest" "-vv")))))))
21205 (native-inputs (list python-pytest))
21206 (home-page "https://github.com/arsenetar/send2trash")
21207 (synopsis "Send files to the user's @file{~/Trash} directory")
21208 (description "This package provides a Python library to send files to the
21209 user's @file{~/Trash} directory.")
21210 (license license:bsd-3)))
21212 (define-public python-pyfavicon
21214 (name "python-pyfavicon")
21219 (uri (pypi-uri "pyfavicon" version))
21221 (base32 "15wfpa99hvcfsv8j0m8iprmydi2p4qkhm86qfx485244y0ia5mgx"))))
21222 (build-system python-build-system)
21224 ;; There are no tests in the PyPI tarball and the tests from the
21225 ;; repository require online data.
21228 (list python-aiohttp python-beautifulsoup4 python-pillow))
21229 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
21230 (synopsis "Async favicon fetcher")
21232 "@code{pyfavicon} is an async favicon fetcher.")
21233 (license license:expat)))
21235 (define-public python-yamllint
21237 (name "python-yamllint")
21242 (uri (pypi-uri "yamllint" version))
21244 (base32 "090krlxj7az0d9yl8i20vjrqi66dfxx7y5xakjhxzsfp7qmldnc7"))))
21245 (build-system python-build-system)
21247 (list python-pathspec python-pyyaml python-setuptools))
21248 (home-page "https://github.com/adrienverge/yamllint")
21249 (synopsis "Linter for YAML files")
21251 "Yamllint is a linter for YAML files. yamllint does not only check for
21252 syntax validity, but for weirdnesses like key repetition and cosmetic problems
21253 such as lines length, trailing spaces, indentation, etc.")
21254 (license license:gpl3+)))
21256 (define-public python-yapf
21258 (name "python-yapf")
21263 (uri (pypi-uri "yapf" version))
21266 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
21267 (build-system python-build-system)
21268 (home-page "https://github.com/google/yapf")
21269 (synopsis "Formatter for Python code")
21270 (description "YAPF is a formatter for Python code. It's based off of
21271 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
21272 takes the code and reformats it to the best formatting that conforms to the
21273 style guide, even if the original code didn't violate the style guide.")
21274 (license license:asl2.0)))
21276 (define-public python-yq
21283 (uri (pypi-uri "yq" version))
21286 "1q4rky0a6n4izmq7slb91a54g8swry1xrbfqxwc8lkd3hhvlxxkl"))))
21287 (build-system python-build-system)
21290 (modify-phases %standard-phases
21291 (add-after 'unpack 'patch
21292 (lambda* (#:key inputs #:allow-other-keys)
21293 (substitute* "yq/__init__.py"
21294 (("Popen\\(\\[\"jq")
21297 (assoc-ref inputs "jq")
21301 (list python-argcomplete python-pyyaml python-xmltodict jq))
21303 (list python-coverage python-flake8 python-wheel))
21304 (home-page "https://github.com/kislyuk/yq")
21305 (synopsis "Command-line YAML/XML processor")
21307 "This package provides @command{yq} and @command{xq} for processing YAML
21308 and XML respectively. The processing is done through @command{jq}, @command{jq}
21309 filters can be used to process the data as it passes through.")
21310 (license license:asl2.0)))
21312 (define-public python-gyp
21313 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
21316 (name "python-gyp")
21317 ;; Google does not release versions,
21318 ;; based on second most recent commit date.
21319 (version (git-version "0.0.0" revision commit))
21322 ;; Google does not release tarballs,
21323 ;; git checkout is needed.
21325 (uri (git-reference
21326 (url "https://chromium.googlesource.com/external/gyp")
21328 (file-name (git-file-name name version))
21331 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
21332 (build-system python-build-system)
21333 (home-page "https://gyp.gsrc.io/")
21334 (synopsis "GYP is a Meta-Build system")
21336 "GYP builds build systems for large, cross platform applications.
21337 It can be used to generate XCode projects, Visual Studio projects, Ninja build
21338 files, and Makefiles.")
21339 (license license:bsd-3))))
21341 (define-public python-whatever
21343 (name "python-whatever")
21348 (uri (git-reference
21349 (url "https://github.com/Suor/whatever")
21351 (file-name (git-file-name name version))
21353 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
21354 (build-system python-build-system)
21357 (modify-phases %standard-phases
21360 (invoke "py.test"))))))
21362 (list python-pytest))
21363 (home-page "https://github.com/Suor/whatever")
21364 (synopsis "Make anonymous functions by partial application of operators")
21365 (description "@code{whatever} provides an easy way to make anonymous
21366 functions by partial application of operators.")
21367 (license license:bsd-3)))
21369 (define-public python-funcy
21371 (name "python-funcy")
21376 (uri (git-reference
21377 (url "https://github.com/Suor/funcy")
21380 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
21381 (file-name (git-file-name name version))))
21382 (build-system python-build-system)
21385 (modify-phases %standard-phases
21388 (invoke "py.test"))))))
21390 (list python-pytest python-whatever))
21391 (home-page "https://github.com/Suor/funcy")
21392 (synopsis "Functional tools")
21393 (description "@code{funcy} is a library that provides functional tools.
21396 @item merge - Merges collections of the same type
21397 @item walk - Type-preserving map
21398 @item select - Selects a part of a collection
21399 @item take - Takes the first n items of a collection
21400 @item first - Takes the first item of a collection
21401 @item remove - Predicated-removes items of a collection
21402 @item concat - Concatenates two collections
21403 @item flatten - Flattens a collection with subcollections
21404 @item distinct - Returns only distinct items
21405 @item split - Predicated-splits a collection
21406 @item split_at - Splits a collection at a given item
21407 @item group_by - Groups items by group
21408 @item pairwise - Pairs off adjacent items
21409 @item partial - Partially-applies a function
21410 @item curry - Curries a function
21411 @item compose - Composes functions
21412 @item complement - Complements a predicate
21413 @item all_fn - \"all\" with predicate
21415 (license license:bsd-3)))
21417 (define-public python-isoweek
21419 (name "python-isoweek")
21424 (uri (pypi-uri "isoweek" version))
21427 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
21428 (build-system python-build-system)
21429 (home-page "https://github.com/gisle/isoweek")
21430 (synopsis "Objects representing a week")
21431 (description "The @code{isoweek} module provide the class Week that
21432 implements the week definition of ISO 8601. This standard also defines
21433 a notation for identifying weeks; yyyyWww (where the W is a literal).
21434 Week instances stringify to this form.")
21435 (license license:bsd-3)))
21437 (define-public python-pyzbar
21439 (name "python-pyzbar")
21443 ;; There's no source tarball on PyPI.
21445 (uri (git-reference
21446 (url "https://github.com/NaturalHistoryMuseum/pyzbar")
21447 (commit (string-append "v" version))))
21448 (file-name (git-file-name name version))
21450 (base32 "1fqlfg5p2v9lzzzi0si2sz54lblprk6jjjhjw54b64lp58c1yhsl"))))
21451 (build-system python-build-system)
21454 (modify-phases %standard-phases
21455 (add-after 'unpack 'remove-failing-test
21457 ;; This tests if find_library was called once, but we remove
21458 ;; the call in the stage below to make the library find libzbar.
21459 (delete-file "pyzbar/tests/test_zbar_library.py")
21461 (add-before 'build 'set-library-file-name
21462 (lambda* (#:key inputs #:allow-other-keys)
21463 (let ((libzbar (assoc-ref inputs "zbar")))
21464 (substitute* "pyzbar/zbar_library.py"
21465 (("find_library\\('zbar'\\)")
21466 (string-append "'" libzbar "/lib/libzbar.so.0'")))
21469 (list pkg-config python-numpy python-pillow))
21472 (home-page "https://github.com/NaturalHistoryMuseum/pyzbar/")
21473 (synopsis "Read one-dimensional barcodes and QR codes")
21475 "Read one-dimensional barcodes and QR codes using the zbar library.
21481 @item Works with PIL / Pillow images, OpenCV / numpy ndarrays, and raw bytes
21482 @item Decodes locations of barcodes
21483 @item No dependencies, other than the zbar library itself
21485 (license license:expat)))
21487 (define-public python-tokenize-rt
21489 (name "python-tokenize-rt")
21494 (uri (pypi-uri "tokenize-rt" version))
21497 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
21498 (build-system python-build-system)
21499 (home-page "https://github.com/asottile/tokenize-rt")
21500 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
21502 "This Python library is a wrapper around @code{tokenize} from the Python
21503 standard library. It provides two additional tokens @code{ESCAPED_NL} and
21504 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
21505 and @code{tokens_to_src} to roundtrip.")
21506 (license license:expat)))
21508 (define-public python-future-fstrings
21510 (name "python-future-fstrings")
21515 (uri (pypi-uri "future_fstrings" version))
21518 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
21519 (build-system python-build-system)
21521 (list python-tokenize-rt))
21522 (home-page "https://github.com/asottile/future-fstrings")
21523 (synopsis "Backport of fstrings to Python < 3.6")
21525 "This package provides a UTF-8 compatible encoding
21526 @code{future_fstrings}, which performs source manipulation. It decodes the
21527 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
21528 @code{f} strings.")
21529 (license license:expat)))
21531 (define-public python-typed-ast
21533 (name "python-typed-ast")
21538 (uri (git-reference
21539 (url "https://github.com/python/typed_ast")
21542 (base32 "1xfcs5246c8v5600aaa8zs7ii4sxb62q6r3sb2fgazyjx97wrxd9"))
21543 (file-name (git-file-name name version))))
21544 (build-system python-build-system)
21547 (modify-phases %standard-phases
21550 (invoke "pytest"))))))
21551 (native-inputs (list python-pytest))
21552 (home-page "https://github.com/python/typed_ast")
21553 (synopsis "Fork of Python @code{ast} modules with type comment support")
21554 (description "This package provides a parser similar to the standard
21555 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
21556 include PEP 484 type comments and are independent of the version of Python
21557 under which they are run. The @code{typed_ast} parsers produce the standard
21558 Python AST (plus type comments), and are both fast and correct, as they are
21559 based on the CPython 2.7 and 3.7 parsers.")
21560 ;; See the file "LICENSE" for the details.
21561 (license (list license:psfl
21563 license:expat)))) ;ast27/Parser/spark.py
21565 (define-public python-typer
21567 (name "python-typer")
21572 (uri (git-reference
21573 (url "https://github.com/tiangolo/typer")
21575 (file-name (git-file-name name version))
21577 (base32 "1knv353qhkl2imav3jfp6bgq47m8wkkqhq1dzmqg2sv8rsy7zgl7"))))
21578 (build-system python-build-system)
21581 ,#~(modify-phases %standard-phases
21582 ;; Unfortunately, this doesn't seem to be enough to fix these two
21583 ;; tests, but we'll patch this anyway.
21584 (add-after 'unpack 'patch-shell-reference
21586 (substitute* "tests/test_completion/test_completion.py"
21587 (("\"bash\"") (string-append "\"" (which "bash") "\""))
21589 (string-append "\"" (which "bash") "\"")))))
21592 (invoke "flit" "build")))
21594 (lambda* (#:key inputs outputs #:allow-other-keys)
21595 (add-installed-pythonpath inputs outputs)
21598 (format #true wheel)
21599 (invoke "python" "-m" "pip" "install"
21600 wheel (string-append "--prefix=" #$output)))
21601 (find-files "dist" "\\.whl$"))))
21603 (lambda* (#:key tests? #:allow-other-keys)
21605 (setenv "HOME" "/tmp") ; some tests need it
21607 ;; This is for completion tests
21608 (with-output-to-file "/tmp/.bashrc"
21609 (lambda _ (display "# dummy")))
21611 (setenv "GUIX_PYTHONPATH"
21612 (string-append (getcwd) ":"
21613 (getenv "GUIX_PYTHONPATH")))
21614 (let ((disabled-tests (list "test_show_completion"
21615 "test_install_completion")))
21616 (invoke "python" "-m" "pytest" "tests/"
21618 (string-append "not "
21619 (string-join disabled-tests
21620 " and not "))))))))))
21622 (list python-click))
21624 (list python-coverage python-flit python-pytest python-rich
21625 python-shellingham))
21626 (home-page "https://github.com/tiangolo/typer")
21628 "Typer builds CLI based on Python type hints")
21630 "Typer is a library for building CLI applications. It's based on
21631 Python 3.6+ type hints.")
21633 (license license:expat)))
21635 (define-public python-typeguard
21637 (name "python-typeguard")
21642 (uri (pypi-uri "typeguard" version))
21644 (base32 "1i5qzcyw2715h1g1hvj7fxykck2bkxyshpngjr3nfcx1lf6smv80"))))
21645 (build-system python-build-system)
21649 #~(modify-phases %standard-phases
21651 (lambda* (#:key tests? #:allow-other-keys)
21653 (invoke "pytest" "-vv" "-k"
21654 ;; XXX: These fail when installed as a library:
21655 ;; https://github.com/agronholm/typeguard/issues/176
21656 "not usefixtures and not test_cached_module")))))))
21658 (list python-mypy python-pytest python-typing-extensions))
21659 (home-page "https://github.com/agronholm/typeguard")
21660 (synopsis "Run-time type checker for Python")
21662 "@code{typeguard} provides run-time type checking for functions defined
21663 with PEP 484 argument (and return) type annotations.")
21664 (license license:expat)))
21666 (define-public python-typing-extensions
21668 (name "python-typing-extensions")
21671 ;; The test script is missing from the PyPI archive.
21673 (uri (git-reference
21674 (url "https://github.com/python/typing")
21676 (file-name (git-file-name name version))
21679 "0a35fh5wk9s538x0w3dz95y0avnhd2srzyv9s1a372711n8hdl4p"))))
21680 (build-system python-build-system)
21683 #:tests? #f ;requires Python's test module, not available in Guix
21685 #~(modify-phases %standard-phases
21686 (add-after 'unpack 'enter-source-directory
21688 (chdir "typing_extensions")))
21689 ;; XXX: PEP 517 manual build copied from python-isort.
21692 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
21694 (lambda* (#:key tests? #:allow-other-keys)
21696 (invoke "python" "src/test_typing_extensions.py"))))
21699 (let ((whl (car (find-files "dist" "\\.whl$"))))
21700 (invoke "pip" "--no-cache-dir" "--no-input"
21701 "install" "--no-deps" "--prefix" #$output whl)))))))
21702 (native-inputs (list python-pypa-build python-flit-core))
21703 (home-page "https://github.com/python/typing/typing_extensions")
21704 (synopsis "Experimental type hints for Python")
21706 "The typing_extensions module contains additional @code{typing} hints not
21707 yet present in the of the @code{typing} standard library.
21708 Included are implementations of:
21711 @item ContextManager
21722 @item TYPE_CHECKING
21723 @item AsyncGenerator
21725 (license license:psfl)))
21727 (define-public python-typing-extensions-next
21729 (inherit python-typing-extensions)
21730 (name "python-typing-extensions")
21734 (uri (git-reference
21735 (url "https://github.com/python/typing")
21737 (file-name (git-file-name name version))
21740 "1bbry1rg7q5ppkgzdk4nwl7q1w8bbhajm4q68wb9dm6rf7hg1023"))))))
21742 (define-public bpython
21749 (uri (pypi-uri "bpython" version))
21751 (base32 "11wlf12nm6ggn9512y4yqs26s8gdgpx0h9ls94k7fsjgjy4rpal8"))))
21752 (build-system python-build-system)
21755 (modify-phases %standard-phases
21756 (add-after 'unpack 'remove-failing-test
21758 ;; Remove failing test. FIXME: make it pass
21759 (delete-file "bpython/test/test_args.py")
21761 (add-after 'wrap 'add-aliases
21762 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
21763 (lambda* (#:key outputs #:allow-other-keys)
21764 (let ((out (assoc-ref outputs "out")))
21767 (symlink old (string-append out "/bin/" new)))
21768 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
21769 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
21772 (list python-pygments
21779 ;; optional dependencies
21780 python-urwid ; for bpython-urwid only
21784 (list python-sphinx python-mock python-tox python-wheel))
21785 (home-page "https://bpython-interpreter.org/")
21786 (synopsis "Fancy interface to the Python interpreter")
21787 (description "Bpython is a fancy interface to the Python
21788 interpreter. bpython's main features are
21791 @item in-line syntax highlighting,
21792 @item readline-like autocomplete with suggestions displayed as you type,
21793 @item expected parameter list for any Python function,
21794 @item \"rewind\" function to pop the last line of code from memory and
21796 @item send the code you've entered off to a pastebin,
21797 @item save the code you've entered to a file, and
21798 @item auto-indentation.
21800 (license license:expat)))
21802 (define-public python-pyinotify
21804 (name "python-pyinotify")
21808 (uri (pypi-uri "pyinotify" version))
21811 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
21812 (build-system python-build-system)
21813 (arguments `(#:tests? #f)) ;no tests
21814 (home-page "https://github.com/seb-m/pyinotify")
21815 (synopsis "Python library for monitoring inotify events")
21817 "@code{pyinotify} provides a Python interface for monitoring
21818 file system events on Linux.")
21819 (license license:expat)))
21822 (define-public python-more-itertools
21824 (name "python-more-itertools")
21829 (uri (pypi-uri "more-itertools" version))
21832 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
21833 (build-system python-build-system)
21834 (home-page "https://github.com/erikrose/more-itertools")
21835 (synopsis "More routines for operating on iterables, beyond itertools")
21836 (description "Python's built-in @code{itertools} module implements a
21837 number of iterator building blocks inspired by constructs from APL, Haskell,
21838 and SML. @code{more-itertools} includes additional building blocks for
21839 working with iterables.")
21840 (license license:expat)))
21842 (define-public python-latexcodec
21844 (name "python-latexcodec")
21849 (uri (pypi-uri "latexcodec" version))
21851 (base32 "16pynfnn8y8xp55yp06i721fccv5dlx9ba6k5bzcwq9j6wf5b8ia"))))
21852 (build-system python-build-system)
21855 (home-page "https://readthedocs.org/projects/latexcodec/")
21856 (synopsis "Work with LaTeX code in Python")
21857 (description "Lexer and codec to work with LaTeX code in Python.")
21858 (license license:expat)))
21860 (define-public python-pybtex
21862 (name "python-pybtex")
21867 (uri (pypi-uri "pybtex" version))
21869 (base32 "0ma7sc10hk6caq5zghbk865vrlaynz7x5z630z0facqpnqssx3l1"))))
21870 (build-system python-build-system)
21872 (list python-pytest))
21874 (list python-latexcodec python-pyyaml python-six))
21877 #:phases #~(modify-phases %standard-phases
21879 (lambda* (#:key tests? #:allow-other-keys)
21881 (invoke "pytest")))))))
21882 (home-page "https://pybtex.org/")
21883 (synopsis "BibTeX-compatible bibliography processor")
21884 (description "Pybtex is a BibTeX-compatible bibliography processor written
21885 in Python. You can simply type pybtex instead of bibtex.")
21886 (license license:expat)))
21888 (define-public python-onetimepass
21890 (name "python-onetimepass")
21895 (uri (pypi-uri "onetimepass" version))
21897 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
21898 (build-system python-build-system)
21899 (propagated-inputs (list python-six))
21900 (home-page "https://github.com/tadeck/onetimepass/")
21901 (synopsis "One-time password library")
21902 (description "Python one-time password library for HMAC-based (HOTP) and
21903 time-based (TOTP) passwords.")
21904 (license license:expat)))
21906 (define-public python-parso
21908 (name "python-parso")
21913 (uri (pypi-uri "parso" version))
21915 (base32 "185gkxq92kqiw2h5zp1cmyn04055x0lix4hmi5c077xm1clvw1wc"))))
21917 (list python-pytest))
21918 (build-system python-build-system)
21921 (modify-phases %standard-phases
21923 (lambda* (#:key tests? #:allow-other-keys)
21925 (invoke "pytest" "-vv")))))))
21926 (home-page "https://github.com/davidhalter/parso")
21927 (synopsis "Python Parser")
21928 (description "Parso is a Python parser that supports error recovery and
21929 round-trip parsing for different Python versions (in multiple Python versions).
21930 Parso is also able to list multiple syntax errors in your Python file.")
21931 (license license:expat)))
21933 (define-public python-async-generator
21935 (name "python-async-generator")
21940 (uri (pypi-uri "async_generator" version))
21943 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
21944 (build-system python-build-system)
21946 (list python-pytest))
21947 (home-page "https://github.com/python-trio/async_generator")
21948 (synopsis "Async generators and context managers for Python 3.5+")
21949 (description "@code{async_generator} back-ports Python 3.6's native async
21950 generators and Python 3.7's context managers into Python 3.5.")
21952 (license (list license:expat license:asl2.0))))
21954 (define-public python-async-timeout
21956 (name "python-async-timeout")
21961 (uri (pypi-uri "async-timeout" version))
21964 "05bbjz16n1a7m1s3lmcwri2x5rc7hnh6f2hdr2lbflnv1mjf2qr1"))))
21965 (build-system python-build-system)
21966 (home-page "https://github.com/aio-libs/async-timeout")
21967 (synopsis "Timeout context manager for asyncio programs")
21968 (description "@code{async-timeout} provides a timeout timeout context
21969 manager compatible with @code{asyncio}.")
21970 (license license:asl2.0)))
21972 (define-public python-glob2
21974 (name "python-glob2")
21979 (uri (git-reference
21980 (url "https://github.com/miracle2k/python-glob2")
21981 (commit (string-append "v" version))))
21982 (file-name (git-file-name name version))
21984 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
21985 (build-system python-build-system)
21986 (home-page "https://github.com/miracle2k/python-glob2/")
21987 (synopsis "Extended Version of the python buildin glob module")
21988 (description "This is an extended version of the Python
21989 @url{http://docs.python.org/library/glob.html, built-in glob module} which
21993 @item The ability to capture the text matched by glob patterns, and return
21994 those matches alongside the file names.
21995 @item A recursive @code{**} globbing syntax, akin for example to the
21996 @code{globstar} option of Bash.
21997 @item The ability to replace the file system functions used, in order to glob
21998 on virtual file systems.
21999 @item Compatible with Python 2 and Python 3 (tested with 3.3).
22002 Glob2 currently based on the glob code from Python 3.3.1.")
22003 (license license:bsd-2)))
22005 (define-public python-gipc
22007 (name "python-gipc")
22012 (uri (pypi-uri "gipc" version ".zip"))
22015 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
22016 (build-system python-build-system)
22020 (list python-gevent))
22021 (home-page "https://gehrcke.de/gipc/")
22022 (synopsis "Child process management in the context of gevent")
22023 (description "Usage of Python's multiprocessing package in a
22024 gevent-powered application may raise problems. With @code{gipc},
22025 process-based child processes can safely be created anywhere within a
22026 gevent-powered application.")
22027 (license license:expat)))
22029 (define-public python-beautifultable
22031 (name "python-beautifultable")
22036 (uri (pypi-uri "beautifultable" version))
22039 "0wwlbifcbpzy3wfv6yzsxncarsngzizmmxbn6cy5gazlcq7h4k5x"))))
22040 (build-system python-build-system)
22042 (list python-wcwidth))
22045 (modify-phases %standard-phases
22046 (add-after 'unpack 'patch-setup.py
22048 (substitute* "setup.py"
22050 "setup(\n test_suite=\"test\",")))))))
22051 (home-page "https://github.com/pri22296/beautifultable")
22052 (synopsis "Print ASCII tables for terminals")
22053 (description "@code{python-beautifultable} provides a class for easily
22054 printing tabular data in a visually appealing ASCII format to a terminal.
22056 Features include, but are not limited to:
22058 @item Full customization of the look and feel of the table
22059 @item Row and column accessors.
22060 @item Full support for colors using ANSI sequences or any library.
22061 @item Plenty of predefined styles and option to create custom ones.
22062 @item Support for Unicode characters.
22063 @item Supports streaming table when data is slow to retrieve.
22065 (license license:expat)))
22067 (define-public python-globber
22069 (name "python-globber")
22074 (uri (git-reference
22075 (url "https://github.com/asharov/globber")
22077 (file-name (git-file-name name version))
22080 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
22081 (build-system python-build-system)
22082 (home-page "https://github.com/asharov/globber")
22083 (synopsis "Library for string matching with glob patterns")
22085 "Globber is a Python library for matching file names against glob patterns.
22086 In contrast to other glob-matching libraries, it matches arbitrary strings and
22087 doesn't require the matched names to be existing files. In addition, it
22088 supports the globstar @code{**} operator to match an arbitrary number of
22090 (license license:asl2.0)))
22092 (define-public python-git-hammer
22094 (name "python-git-hammer")
22099 (uri (git-reference
22100 (url "https://github.com/asharov/git-hammer")
22102 (file-name (git-file-name name version))
22105 "0f9xlk86ijzpdj25hr1q4wcy8k72v3w470ngwm9mpdkfj8ng84wr"))))
22106 (build-system python-build-system)
22109 (modify-phases %standard-phases
22110 (add-after 'unpack 'patch-setup.py
22112 (substitute* "setup.py"
22114 "setup(\n test_suite=\"test\",")))))))
22116 (list python-beautifultable
22122 python-sqlalchemy-utils))
22123 (home-page "https://github.com/asharov/git-hammer")
22124 (synopsis "Provide statistics for git repositories")
22126 "Git Hammer is a statistics tool for projects in git repositories.
22127 Its major feature is tracking the number of lines authored by each person for every
22128 commit, but it also includes some other useful statistics.")
22129 (license license:asl2.0)))
22131 (define-public python-fusepy
22133 (name "python-fusepy")
22138 (uri (pypi-uri "fusepy" version))
22141 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
22142 (build-system python-build-system)
22145 (modify-phases %standard-phases
22146 (add-before 'build 'set-library-file-name
22147 (lambda* (#:key inputs #:allow-other-keys)
22148 (let ((fuse (assoc-ref inputs "fuse")))
22149 (substitute* "fuse.py"
22150 (("find_library\\('fuse'\\)")
22151 (string-append "'" fuse "/lib/libfuse.so'")))
22155 (home-page "https://github.com/fusepy/fusepy")
22156 (synopsis "Simple ctypes bindings for FUSE")
22157 (description "Python module that provides a simple interface to FUSE and
22158 MacFUSE. The binding is created using the standard @code{ctypes} library.")
22159 (license license:isc)))
22161 (define-public python-fusepyng
22163 (name "python-fusepyng")
22168 (uri (pypi-uri "fusepyng" version))
22171 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
22172 (build-system python-build-system)
22175 (modify-phases %standard-phases
22176 (add-after 'unpack 'set-libfuse-path
22177 (lambda* (#:key inputs #:allow-other-keys)
22178 (let ((fuse (assoc-ref inputs "fuse")))
22179 (substitute* "fusepyng.py"
22180 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
22181 (string-append "\"" fuse "/lib/libfuse.so\""))))
22186 (list python-paramiko))
22187 (home-page "https://github.com/rianhunter/fusepyng")
22188 (synopsis "Simple ctypes bindings for FUSE")
22189 (description "@code{fusepyng} is a Python module that provides a simple
22190 interface to FUSE on various operating systems. It's just one file and is
22191 implemented using @code{ctypes}.")
22192 (license license:isc)))
22194 (define-public python-update-checker
22196 (name "python-update-checker")
22201 (uri (pypi-uri "update-checker" version))
22203 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
22204 (build-system python-build-system)
22205 (propagated-inputs (list python-requests))
22206 (native-inputs (list python-black python-flake8 python-pytest))
22207 (home-page "https://github.com/bboe/update_checker")
22208 (synopsis "Python module that will check for package updates")
22209 (description "This package provides a Python module that will check for
22211 (license license:bsd-2)))
22213 (define-public python-userspacefs
22215 (name "python-userspacefs")
22220 (uri (pypi-uri "userspacefs" version))
22223 "0v0qkdwfc61s2yiq7d7amin93x5biypfmi9pfhf8yj1rdpx5yvsx"))))
22224 (build-system python-build-system)
22226 (list python-fusepyng))
22227 (home-page "https://github.com/rianhunter/userspacefs")
22228 (synopsis "User-space file systems for Python")
22230 "@code{userspacefs} is a library that allows you to easily write
22231 user-space file systems in Python.")
22232 (license license:gpl3+)))
22234 (define-public python-stone
22236 (name "python-stone")
22241 (uri (pypi-uri "stone" version))
22244 "0xby5mpsms7b2rv8j6mvxzmzz5i9ii01brb9ylxz6kiv2i08piwv"))))
22245 (build-system python-build-system)
22248 (modify-phases %standard-phases
22249 (add-after 'unpack 'change-version-requirements
22251 ;; Match the requirement in test/requirements.txt
22252 (substitute* "setup.py"
22253 (("pytest < 5") "pytest < 7"))
22254 ;; We don't care about a coverage report.
22255 (substitute* "test/requirements.txt"
22256 (("coverage.*") "coverage\n"))))
22258 (lambda* (#:key tests? #:allow-other-keys)
22260 ;; These tests don't import currectly.
22261 (delete-file "test/test_js_client.py")
22262 (delete-file "test/test_tsd_types.py")
22263 (delete-file "test/test_python_gen.py")
22264 (invoke "pytest")))))))
22266 (list python-ply python-six))
22268 (list python-coverage python-mock python-pytest python-pytest-runner))
22269 (home-page "https://github.com/dropbox/stone")
22270 (synopsis "Official Api Spec Language for Dropbox")
22272 "Stone is an interface description language (IDL) for APIs.")
22273 (license license:expat)))
22275 (define-public pybind11
22281 (uri (git-reference
22282 (url "https://github.com/pybind/pybind11")
22283 (commit (string-append "v" version))))
22286 "10hrkrh78sk7k0ydw1ghmp7gvpwmkby0l2s0kf2iaj9sz0vijkhs"))
22287 (file-name (git-file-name name version))))
22288 (build-system cmake-build-system)
22290 `(("python" ,python-wrapper)
22292 ;; The following dependencies are used for tests.
22293 ("python-pytest" ,python-pytest)
22294 ("catch" ,catch-framework2-1)
22297 `(#:configure-flags
22298 (list (string-append "-DCATCH_INCLUDE_DIR="
22299 (assoc-ref %build-inputs "catch")
22302 #:phases (modify-phases %standard-phases
22303 (add-after 'install 'install-python
22304 (lambda* (#:key outputs #:allow-other-keys)
22305 (let ((out (assoc-ref outputs "out")))
22306 (with-directory-excursion "../source"
22307 (setenv "PYBIND11_USE_CMAKE" "yes")
22308 (invoke "python" "setup.py" "install"
22309 "--single-version-externally-managed"
22311 (string-append "--prefix=" out)))))))
22313 #:test-target "check"))
22314 (home-page "https://github.com/pybind/pybind11/")
22315 (synopsis "Seamless operability between C++11 and Python")
22317 "@code{pybind11} is a lightweight header-only library that exposes C++
22318 types in Python and vice versa, mainly to create Python bindings of existing
22319 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
22320 library: to minimize boilerplate code in traditional extension modules by
22321 inferring type information using compile-time introspection.")
22322 (license license:bsd-3)))
22324 (define-public python-pooch
22326 (name "python-pooch")
22331 (uri (pypi-uri "pooch" version))
22333 (base32 "1618adsg9r8fsv422sv35z1i723q3a1iir5v7dv2sklh4pl4im1h"))))
22334 (build-system python-build-system)
22336 `(#:tests? #f)) ;requires online data
22338 (list python-appdirs python-packaging python-requests))
22339 (home-page "https://github.com/fatiando/pooch")
22340 (synopsis "Manage your Python library's sample data files")
22342 "Pooch manages your Python library's sample data files: it automatically
22343 downloads and stores them in a local directory, with support for versioning
22344 and corruption checks.")
22345 (license license:bsd-3)))
22347 (define-public python-fasteners
22349 (name "python-fasteners")
22354 (uri (pypi-uri "fasteners" version))
22357 "1vzmz1xh38b84dv0f4hlp7arwmx8wjlih6lf964bpy8dnyk6s5rs"))))
22358 (build-system python-build-system)
22360 (list python-monotonic python-six))
22362 (list python-testtools))
22363 (home-page "https://github.com/harlowja/fasteners")
22364 (synopsis "Python package that provides useful locks")
22366 "This package provides a Python program that provides following locks:
22369 @item Locking decorator
22370 @item Reader-writer locks
22371 @item Inter-process locks
22372 @item Generic helpers
22374 (license license:asl2.0)))
22376 (define-public python-requests-file
22378 (name "python-requests-file")
22383 (uri (pypi-uri "requests-file" version))
22385 (base32 "13kx4k83i9zcv20h0fnmawwwdzhcmw1z97mqib1h379qsc445mq7"))))
22386 (build-system python-build-system)
22389 (modify-phases %standard-phases
22391 (lambda* (#:key tests? #:allow-other-keys)
22393 (invoke "python" "tests/test_requests_file.py")))))))
22395 (list python-requests python-six))
22396 (home-page "https://github.com/dashea/requests-file")
22397 (synopsis "File transport adapter for Requests")
22399 "Requests-File is a transport adapter for use with the Requests Python
22400 library to allow local file system access via @code{file://} URLs.")
22401 (license license:asl2.0)))
22403 (define-public python-identify
22405 (name "python-identify")
22409 ;; There are no tests in the PyPI tarball.
22411 (uri (git-reference
22412 (url "https://github.com/chriskuehl/identify")
22413 (commit (string-append "v" version))))
22414 (file-name (git-file-name name version))
22416 (base32 "1fqgci6skckcq0x5pnxh6k2qjzn1ndsrgha1j6wwv1ld4g9bd3hz"))))
22417 (build-system python-build-system)
22420 (modify-phases %standard-phases
22421 ;; system-error "utime" "~A" ("No such file or directory")
22422 (delete 'ensure-no-mtimes-pre-1980)
22424 (lambda* (#:key tests? #:allow-other-keys)
22426 (invoke "pytest" "-vv")))))))
22428 (list python-coverage python-pytest))
22430 (list python-editdistance))
22431 (home-page "https://github.com/chriskuehl/identify")
22432 (synopsis "File identification library for Python")
22434 "@code{identify} is a file identification library for Python. Given
22435 a file (or some information about a file), return a set of standardized tags
22436 identifying what the file is.")
22437 (license license:expat)))
22439 (define-public python-tldextract
22441 (name "python-tldextract")
22446 (uri (pypi-uri "tldextract" version))
22449 "1wac4yvcpgqjvls770mfx165amvy7gr00nnd2w24bqqwyamj9kdd"))))
22450 (build-system python-build-system)
22452 (list python-pytest python-responses python-setuptools-scm))
22454 (list python-filelock python-idna python-requests python-requests-file))
22456 "https://github.com/john-kurkowski/tldextract")
22458 "Separate the TLD from the registered domain and subdomains of a URL")
22460 "TLDExtract accurately separates the TLD from the registered domain and
22461 subdomains of a URL, using the Public Suffix List. By default, this includes
22462 the public ICANN TLDs and their exceptions. It can optionally support the
22463 Public Suffix List's private domains as well.")
22464 (license license:bsd-3)))
22466 (define-public python-tldr
22468 (name "python-tldr")
22472 ;; There's no test in PyPI.
22474 (uri (git-reference
22475 (url "https://github.com/tldr-pages/tldr-python-client")
22477 (file-name (git-file-name name version))
22479 (base32 "1hxmprqg8c4cvs19n7f80f3y7jj74i8sc2dmq2gdjmsdrb54bbzc"))))
22480 (build-system python-build-system)
22483 #~(modify-phases %standard-phases
22484 (add-after 'build 'build-doc
22486 (invoke "make" "-C" "docs")))
22488 (lambda* (#:key tests? #:allow-other-keys)
22490 ;; This test fails. It tries to open a network socket.
22491 (invoke "pytest" "-vv" "-k" "not test_error_message")))))))
22493 (list python-pytest python-pytest-runner python-sphinx-argparse))
22495 (list python-argcomplete python-colorama python-termcolor python-shtab))
22496 (home-page "https://github.com/tldr-pages/tldr-python-client")
22497 (synopsis "Python command-line client for tldr pages")
22498 (description "This package provides the @code{tldr} command allowing users
22499 to view @code{tldr} pages from a shell. The @code{tldr} pages are a community
22500 effort to simplify the man pages with practical examples.")
22501 (license license:expat))) ; MIT license
22503 (define-public python-nodeenv
22505 (name "python-nodeenv")
22509 ;; There's no tarball in PyPI.
22511 (uri (git-reference
22512 (url "https://github.com/ekalinin/nodeenv")
22514 (file-name (git-file-name name version))
22516 (base32 "0y443icx0w7jlzmxmmcm4q8dqfiwgafbb9cp8jpm68mbqxbz40a7"))))
22517 (build-system python-build-system)
22520 (modify-phases %standard-phases
22523 ;; This test fails. It tries to open a network socket.
22524 (invoke "pytest" "-vv" "-k" "not test_smoke"))))))
22526 (list python-coverage python-mock python-pytest))
22527 (home-page "https://ekalinin.github.io/nodeenv/")
22528 (synopsis "Create isolated node.js environments")
22530 "Nodeenv (node.js virtual environment) is a tool to create isolated
22531 node.js environments. It creates an environment that has its own installation
22532 directories, that doesn't share libraries with other node.js virtual
22534 (license license:bsd-3)))
22536 (define-public python-pynamecheap
22538 (name "python-pynamecheap")
22543 (uri (pypi-uri "PyNamecheap" version))
22546 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
22547 (build-system python-build-system)
22549 (list python-requests))
22551 "https://github.com/Bemmu/PyNamecheap")
22553 "Namecheap API client in Python")
22555 "PyNamecheap is a Namecheap API client in Python.")
22556 (license license:expat)))
22558 (define-public python-dns-lexicon
22560 (name "python-dns-lexicon")
22565 (uri (pypi-uri "dns-lexicon" version))
22568 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
22569 (build-system python-build-system)
22571 `(#:tests? #f)) ;requires internet access
22573 (list python-future python-pynamecheap python-requests
22574 python-tldextract python-urllib3))
22575 (home-page "https://github.com/AnalogJ/lexicon")
22577 "Manipulate DNS records on various DNS providers")
22579 "Lexicon provides a way to manipulate DNS records on multiple DNS
22580 providers in a standardized way. It has a CLI but it can also be used as a
22581 Python library. It was designed to be used in automation, specifically with
22583 (license license:expat)))
22585 (define-public python-cfgv
22587 (name "python-cfgv")
22591 ;; There are no tests in the PyPI tarball.
22593 (uri (git-reference
22594 (url "https://github.com/asottile/cfgv")
22595 (commit (string-append "v" version))))
22596 (file-name (git-file-name name version))
22598 (base32 "1pci97cmn3v45sfch9s3lshidrl0309ls9byidic0l8drkwnkwcj"))))
22599 (build-system python-build-system)
22602 (modify-phases %standard-phases
22604 (lambda* (#:key tests? #:allow-other-keys)
22606 (invoke "pytest" "-vv")))))))
22608 (list python-pytest))
22609 (home-page "https://github.com/asottile/cfgv")
22610 (synopsis "Configuration validation library")
22612 "This library helps to validate configuration files and produce human
22613 readable error messages.")
22614 (license license:expat)))
22616 (define-public python-commandlines
22618 (name "python-commandlines")
22623 (uri (pypi-uri "commandlines" version))
22626 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
22627 (build-system python-build-system)
22628 (home-page "https://github.com/chrissimpkins/commandlines")
22629 (synopsis "Command line argument to object parsing library")
22631 "@code{Commandlines} is a Python library for command line application
22632 development that supports command line argument parsing, command string
22633 validation testing and application logic.")
22634 (license license:expat)))
22636 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
22637 ;; python-numba. They have a very unflexible relationship.
22638 (define-public python-numba
22640 (name "python-numba")
22645 (uri (pypi-uri "numba" version))
22648 "18rf8i32m1045zxglvicpgldvzmqdxqvs3dhjd7wilb64sd0ds83"))))
22649 (build-system python-build-system)
22652 (modify-phases %standard-phases
22653 (add-after 'unpack 'disable-proprietary-features
22655 (setenv "NUMBA_DISABLE_HSA" "1")
22656 (setenv "NUMBA_DISABLE_CUDA" "1")))
22657 (add-after 'unpack 'disable-failing-tests
22659 ;; This one test fails because a deprecation warning is printed.
22660 (substitute* "numba/tests/test_import.py"
22661 (("def test_no_accidental_warnings")
22662 "def disabled_test_no_accidental_warnings"))))
22664 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
22666 (add-installed-pythonpath inputs outputs)
22667 ;; Something is wrong with the PYTHONPATH when running the
22668 ;; tests from the build directory, as it complains about not being
22669 ;; able to import certain modules.
22670 (with-directory-excursion "/tmp"
22671 (setenv "HOME" (getcwd))
22672 (invoke "python3" "-m" "numba.runtests" "-v" "-m"))))))))
22674 (list python-llvmlite python-numpy python-singledispatch))
22675 (native-inputs ;for tests
22676 (list python-jinja2 python-pygments))
22677 (home-page "https://numba.pydata.org")
22678 (synopsis "Compile Python code using LLVM")
22679 (description "Numba gives you the power to speed up your applications with
22680 high performance functions written directly in Python. With a few
22681 annotations, array-oriented and math-heavy Python code can be just-in-time
22682 compiled to native machine instructions, similar in performance to C, C++ and
22683 Fortran, without having to switch languages or Python interpreters.
22685 Numba works by generating optimized machine code using the LLVM compiler
22686 infrastructure at import time, runtime, or statically (using the included pycc
22688 (license license:bsd-3)))
22690 (define-public python-numcodecs
22692 (name "python-numcodecs")
22697 (uri (pypi-uri "numcodecs" version))
22700 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))
22701 (modules '((guix build utils)))
22704 (delete-file-recursively "c-blosc")
22705 (for-each delete-file '("numcodecs/blosc.c"
22706 "numcodecs/compat_ext.c"
22709 "numcodecs/zstd.c"))))))
22710 (build-system python-build-system)
22712 `(#:tests? #false ; TODO: unclear why numcodecs.* are not found
22714 (modify-phases %standard-phases
22715 (add-after 'unpack 'disable-avx2
22717 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
22718 (add-after 'unpack 'unbundle
22720 (substitute* "setup.py"
22721 (("sources=sources \\+ blosc_sources,")
22722 "sources=sources,")
22723 (("extra_compile_args=extra_compile_args")
22724 "extra_compile_args=list(base_compile_args)")
22725 (("'numcodecs.zstd',")
22726 "'numcodecs.zstd', libraries=['zstd'], ")
22727 (("'numcodecs.lz4',")
22728 "'numcodecs.lz4', libraries=['lz4'], ")
22729 (("'numcodecs.blosc',")
22730 "'numcodecs.blosc', libraries=['blosc'], "))))
22732 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
22734 (add-installed-pythonpath inputs outputs)
22735 (invoke "pytest" "-vv")))))))
22737 (list c-blosc lz4 zlib
22740 (list python-numpy python-msgpack))
22742 (list python-cython python-pytest python-setuptools-scm))
22743 (home-page "https://github.com/zarr-developers/numcodecs")
22744 (synopsis "Buffer compression and transformation codecs")
22746 "This Python package provides buffer compression and transformation
22747 codecs for use in data storage and communication applications.")
22748 (license license:expat)))
22750 (define-public python-asciitree
22752 (name "python-asciitree")
22757 (uri (pypi-uri "asciitree" version))
22760 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
22761 (build-system python-build-system)
22762 (home-page "https://github.com/mbr/asciitree")
22763 (synopsis "Draws ASCII trees")
22764 (description "This package draws tree structures using characters.")
22765 (license license:expat)))
22767 (define-public python-zarr
22769 (name "python-zarr")
22774 (uri (pypi-uri "zarr" version))
22777 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
22778 (build-system python-build-system)
22781 (modify-phases %standard-phases
22782 (add-after 'unpack 'disable-service-tests
22784 (setenv "ZARR_TEST_ABS" "0")
22785 (setenv "ZARR_TEST_MONGO" "0")
22786 (setenv "ZARR_TEST_REDIS" "0")
22790 (invoke "pytest" "-vv" "-k" "not lmdb")
22793 (list python-asciitree python-fasteners python-numcodecs
22796 (list python-pytest python-setuptools-scm))
22797 (home-page "https://github.com/zarr-developers/zarr-python")
22798 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
22800 "This package provides an implementation of chunked, compressed,
22801 N-dimensional arrays for Python.")
22802 (license license:expat)))
22804 (define-public python-anndata
22806 (name "python-anndata")
22810 ;; The tarball from PyPi doesn't include tests.
22812 (uri (git-reference
22813 (url "https://github.com/theislab/anndata")
22815 (file-name (git-file-name name version))
22818 "0v7npqrg1rdm8jzw22a45c0mqrmsv05r3k88i3lhzi0pzzxca1i1"))))
22819 (build-system python-build-system)
22822 (modify-phases %standard-phases
22826 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)
22827 (substitute* "anndata/_metadata.py"
22828 (("__version__ =.*")
22829 (string-append "__version__ = \"" ,version "\"\n")))
22830 ;; ZIP does not support timestamps before 1980.
22831 (setenv "SOURCE_DATE_EPOCH" "315532800")
22832 (invoke "flit" "build")))
22834 (lambda* (#:key inputs outputs #:allow-other-keys)
22835 (add-installed-pythonpath inputs outputs)
22836 (let ((out (assoc-ref outputs "out")))
22837 (for-each (lambda (wheel)
22838 (format #true wheel)
22839 (invoke "python" "-m" "pip" "install"
22840 wheel (string-append "--prefix=" out)))
22841 (find-files "dist" "\\.whl$"))))))))
22844 python-importlib-metadata
22852 (list python-joblib python-pytest python-toml python-flit
22853 python-setuptools-scm))
22854 (home-page "https://github.com/theislab/anndata")
22855 (synopsis "Annotated data for data analysis pipelines")
22856 (description "Anndata is a package for simple (functional) high-level APIs
22857 for data analysis pipelines. In this context, it provides an efficient,
22858 scalable way of keeping track of data together with learned annotations and
22859 reduces the code overhead typically encountered when using a mostly
22860 object-oriented library such as @code{scikit-learn}.")
22861 (license license:bsd-3)))
22863 (define-public python-dill
22865 (name "python-dill")
22866 (version "0.3.5.1")
22870 (uri (pypi-uri "dill" version))
22872 (base32 "11lc40x37cx2i8qqbc5qklifm65dyjl6prrqsycybvpixzrl2pnp"))))
22873 (build-system python-build-system)
22876 (modify-phases %standard-phases
22879 (with-directory-excursion "/tmp"
22880 (invoke "nosetests" "-v"))
22883 (list python-nose))
22884 (home-page "https://pypi.org/project/dill/")
22885 (synopsis "Serialize all of Python")
22886 (description "Dill extends Python's @code{pickle} module for serializing
22887 and de-serializing Python objects to the majority of the built-in Python
22888 types. Dill provides the user the same interface as the @code{pickle} module,
22889 and also includes some additional features. In addition to pickling Python
22890 objects, @code{dill} provides the ability to save the state of an interpreter
22891 session in a single command. Hence, it would be feasible to save a
22892 interpreter session, close the interpreter, ship the pickled file to another
22893 computer, open a new interpreter, unpickle the session and thus continue from
22894 the saved state of the original interpreter session.")
22895 (license license:bsd-3)))
22897 (define-public python-multiprocess
22899 (name "python-multiprocess")
22904 (uri (pypi-uri "multiprocess" version))
22907 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
22908 (build-system python-build-system)
22911 (modify-phases %standard-phases
22912 (add-after 'unpack 'disable-broken-tests
22914 ;; This test is broken as there is no keyboard interrupt.
22915 (substitute* "py3.7/multiprocess/tests/__init__.py"
22916 (("^(.*)def test_wait_result"
22918 (string-append indent
22919 "@unittest.skip(\"Disabled by Guix\")\n"
22922 ;; Tests must be run after installation.
22924 (add-after 'install 'check
22925 (lambda* (#:key inputs outputs #:allow-other-keys)
22926 (add-installed-pythonpath inputs outputs)
22927 (invoke "python" "-m" "multiprocess.tests")
22930 (list python-dill))
22931 (home-page "https://pypi.org/project/multiprocess/")
22932 (synopsis "Multiprocessing and multithreading in Python")
22934 "This package is a fork of the multiprocessing Python package, a package
22935 which supports the spawning of processes using the API of the standard
22936 library's @code{threading} module.")
22937 (license license:bsd-3)))
22939 (define-public python-multiprocessing-on-dill
22941 (name "python-multiprocessing-on-dill")
22942 (version "3.5.0a4")
22945 (uri (pypi-uri "multiprocessing_on_dill" version))
22948 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
22949 (build-system python-build-system)
22953 #~(modify-phases %standard-phases
22955 (lambda* (#:key tests? #:allow-other-keys)
22957 (invoke "pytest" "-vv")))))))
22958 (propagated-inputs (list python-dill))
22959 (native-inputs (list python-check-manifest python-pytest python-wheel))
22960 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
22961 (synopsis "Multiprocessing using dill instead of pickle")
22963 "This package provides a friendly fork of multiprocessing which uses dill
22964 instead of pickle.")
22965 (license license:psfl)))
22967 (define-public python-toolrack
22969 (name "python-toolrack")
22974 (uri (git-reference
22975 (url "https://github.com/albertodonato/toolrack")
22976 (commit (string-append "v" version))))
22977 (file-name (git-file-name name version))
22980 "0ych11b7nchnkhqgf7dgivbvn2lzafjsi7nhb1an5zjjyns39gpx"))))
22981 (build-system python-build-system)
22985 #~(modify-phases %standard-phases
22986 (add-after 'unpack 'patch-/bin/sh
22988 (substitute* "toolrack/aio/tests/test_process.py"
22992 (lambda* (#:key tests? #:allow-other-keys)
22994 (invoke "pytest" "-vv" "--pyargs" "toolrack"
22997 ;; These tests fail for unknown reason comparing the
22998 ;; expected output of shell scripts.
22999 "not test_parse_stderr "
23000 "and not test_parse_no_ending_newline "
23001 "and not test_parse_stdout"))))))))
23002 (native-inputs (list python-pytest python-pytest-asyncio
23003 python-pytest-mock))
23004 (home-page "https://github.com/albertodonato/toolrack")
23005 (synopsis "Collection of Python utility functions and classes")
23006 (description "This package provides a collection of miscellaneous utility
23007 functions and classes.")
23008 (license license:lgpl3+)))
23010 (define-public python-toolz
23012 (name "python-toolz")
23017 (uri (pypi-uri "toolz" version))
23020 "0cxwlh8dz8gq0l0bzchjnqqwhdp261nfd958ppqm518k2mg2scbb"))))
23021 (build-system python-build-system)
23024 (modify-phases %standard-phases
23026 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
23028 (add-installed-pythonpath inputs outputs)
23029 (invoke "python" "-m" "pytest" "--doctest-modules"
23030 "--pyargs" "toolz")))))))
23032 (list python-pytest))
23033 (home-page "https://github.com/pytoolz/toolz/")
23034 (synopsis "List processing tools and functional utilities")
23036 "This package provides a set of utility functions for iterators,
23037 functions, and dictionaries.")
23038 (license license:bsd-3)))
23040 (define-public python-cytoolz
23042 (name "python-cytoolz")
23047 (uri (pypi-uri "cytoolz" version))
23050 "1d12mgaippxxhn24w2hj0my3aqkx80fks5g4wzfdsvl0acqnc8za"))
23051 (modules '((guix build utils)))
23053 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
23054 (build-system python-build-system)
23055 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
23057 (arguments '(#:tests? #f))
23059 (list python-toolz))
23061 (list python-cython))
23062 (home-page "https://github.com/pytoolz/cytoolz")
23063 (synopsis "High performance functional utilities")
23065 "The cytoolz package implements the same API as provided by toolz. The
23066 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
23067 that is accessible to other projects developed in Cython.")
23068 (license license:bsd-3)))
23070 (define-public python-sortedcollections
23072 (name "python-sortedcollections")
23077 (uri (pypi-uri "sortedcollections" version))
23080 "1kfabpnjyjm5ml2zspry9jy3xq49aybchgaa4ahic2jqdjfn1sfq"))))
23081 (build-system python-build-system)
23083 (list python-sortedcontainers))
23084 (arguments '(#:tests? #f)) ; Tests not included in release tarball.
23085 (home-page "http://www.grantjenks.com/docs/sortedcollections/")
23086 (synopsis "Python Sorted Collections")
23087 (description "Sorted Collections is a Python sorted collections library.")
23088 (license license:asl2.0)))
23090 (define-public python-sortedcontainers
23092 (name "python-sortedcontainers")
23097 (uri (pypi-uri "sortedcontainers" version))
23100 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
23101 (build-system python-build-system)
23103 ;; FIXME: Tests require many extra dependencies, and would introduce
23104 ;; a circular dependency on hypothesis, which uses this package.
23107 `(("python-appdirs" ,python-appdirs)
23108 ("python-distlib" ,python-distlib)
23109 ("python-filelock" ,python-filelock)
23110 ("python-six" ,python-six-bootstrap)))
23111 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
23112 (synopsis "Sorted List, Sorted Dict, Sorted Set")
23114 "This package provides a sorted collections library, written in
23116 (license license:asl2.0)))
23118 (define python-cloudpickle-testpkg
23120 (name "python-cloudpickle-testpkg")
23124 ;; Archive on pypi does not include test infrastructure.
23126 (uri (git-reference
23127 (url "https://github.com/cloudpipe/cloudpickle")
23128 (commit (string-append "v" version))))
23129 (file-name (git-file-name name version))
23132 "1584d21d4rcpryn8yfz0pjnjprk4zm367m0razdcz8cjbsh0dxp6"))))
23133 (build-system python-build-system)
23136 (modify-phases %standard-phases
23137 (add-after 'unpack 'chdir
23138 (lambda _ (chdir "tests/cloudpickle_testpkg"))))))
23139 (home-page "https://github.com/cloudpipe/cloudpickle")
23140 (synopsis "Extended pickling support for Python objects")
23142 "Cloudpickle makes it possible to serialize Python constructs not
23143 supported by the default pickle module from the Python standard library. It
23144 is especially useful for cluster computing where Python expressions are
23145 shipped over the network to execute on remote hosts, possibly close to the
23147 (license license:bsd-3)))
23149 (define-public python-cloudpickle
23151 (inherit python-cloudpickle-testpkg)
23152 (name "python-cloudpickle")
23153 (build-system python-build-system)
23156 (modify-phases %standard-phases
23158 (lambda* (#:key tests? #:allow-other-keys)
23160 (invoke "pytest" "-s" "-vv")
23161 (format #t "test suite not run~%")))))))
23163 (list ;; For tests.
23164 python-cloudpickle-testpkg python-psutil python-pytest
23166 (home-page "https://github.com/cloudpipe/cloudpickle")
23167 (synopsis "Extended pickling support for Python objects")
23169 "Cloudpickle makes it possible to serialize Python constructs not
23170 supported by the default pickle module from the Python standard library. It
23171 is especially useful for cluster computing where Python expressions are
23172 shipped over the network to execute on remote hosts, possibly close to the
23174 (license license:bsd-3)))
23176 (define-public python-locket
23178 (name "python-locket")
23183 (uri (pypi-uri "locket" version))
23186 "0cm6290zm3ba62n2x2piy3s8d41hrmffda2nw18ggfwb582lq3aw"))))
23187 (build-system python-build-system)
23188 (home-page "https://github.com/mwilliamson/locket.py")
23189 (synopsis "File-based locks for Python")
23191 "Locket implements a lock that can be used by multiple processes provided
23192 they use the same path.")
23193 (license license:bsd-2)))
23195 (define-public python-blosc
23197 (name "python-blosc")
23202 (uri (pypi-uri "blosc" version))
23205 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
23206 (build-system python-build-system)
23207 ;; FIXME: all tests pass, but then this error is printed:
23208 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
23209 (arguments '(#:tests? #f))
23211 (list python-numpy))
23212 (home-page "https://github.com/blosc/python-blosc")
23213 (synopsis "Python wrapper for the Blosc data compressor library")
23214 (description "Blosc is a high performance compressor optimized for binary
23215 data. It has been designed to transmit data to the processor cache faster
23216 than the traditional, non-compressed, direct memory fetch approach via a
23217 @code{memcpy()} system call.
23219 Blosc works well for compressing numerical arrays that contains data with
23220 relatively low entropy, like sparse data, time series, grids with
23221 regular-spaced values, etc.
23223 This Python package wraps the Blosc library.")
23224 (license license:bsd-3)))
23226 (define-public python-partd
23228 (name "python-partd")
23233 (uri (pypi-uri "partd" version))
23236 "1sy3vdfyyx3bc5590zb7gwpsmimqz8m992x9hsydq8nmhixqjrxa"))))
23237 (build-system python-build-system)
23245 (home-page "https://github.com/dask/partd/")
23246 (synopsis "Appendable key-value storage")
23247 (description "Partd stores key-value pairs. Values are raw bytes. We
23248 append on old values. Partd excels at shuffling operations.")
23249 (license license:bsd-3)))
23251 (define-public python-fsspec
23253 (name "python-fsspec")
23254 (version "2022.5.0")
23258 (uri (pypi-uri "fsspec" version))
23261 "1d43qiz8g395042a52yswz6j7q41gvrv3k53wvxn1rs4bk3mjm3s"))))
23262 (build-system python-build-system)
23263 (arguments '(#:tests? #f)) ; there are none
23264 (home-page "https://github.com/intake/filesystem_spec")
23265 (synopsis "File-system specification")
23266 (description "The purpose of this package is to produce a template or
23267 specification for a file-system interface, that specific implementations
23268 should follow, so that applications making use of them can rely on a common
23269 behavior and not have to worry about the specific internal implementation
23270 decisions with any given backend.")
23271 (license license:bsd-3)))
23273 ;; Note: Remember to update python-distributed when updating dask.
23274 (define-public python-dask
23276 (name "python-dask")
23277 (version "2022.05.2")
23281 (uri (git-reference
23282 (url "https://github.com/dask/dask/")
23283 (commit "8db1597c9745543df3129399bead5fbc95a54571")))
23284 (file-name (git-file-name name version))
23286 (base32 "1xfk3wml972z502w5ii5mn03ls3rg5p4hqgl0hkicgpmzlyz9kph"))
23288 ;; Delete generated copy of python-versioneer. We recreate it below.
23289 '(delete-file "versioneer.py"))))
23290 (build-system python-build-system)
23293 (modify-phases %standard-phases
23294 (add-after 'unpack 'versioneer
23296 (invoke "versioneer" "install")))
23298 (lambda* (#:key tests? #:allow-other-keys)
23299 (when tests? (invoke "pytest" "-vv")))))))
23301 (list python-cloudpickle
23310 (list python-pytest python-pytest-runner python-pytest-rerunfailures
23311 python-versioneer))
23312 (home-page "https://github.com/dask/dask/")
23313 (synopsis "Parallel computing with task scheduling")
23315 "Dask is a flexible parallel computing library for analytics. It
23316 consists of two components: dynamic task scheduling optimized for computation,
23317 and large data collections like parallel arrays, dataframes, and lists that
23318 extend common interfaces like NumPy, Pandas, or Python iterators to
23319 larger-than-memory or distributed environments. These parallel collections
23320 run on top of the dynamic task schedulers.")
23321 (license license:bsd-3)))
23323 (define-public python-ilinkedlist
23325 (name "python-ilinkedlist")
23330 (uri (pypi-uri "ilinkedlist" version))
23333 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
23334 (build-system python-build-system)
23335 (native-inputs (list python-pytest))
23336 (inputs (list python))
23337 (home-page "https://github.com/luther9/ilinkedlist-py")
23338 (synopsis "Immutable linked list library")
23340 "This is a implementation of immutable linked lists for Python. It
23341 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
23342 Since a linked list is treated as immutable, it is hashable, and its length
23343 can be retrieved in constant time. Some of the terminology is inspired by
23344 LISP. It is possible to create an improper list by creating a @code{Pair}
23345 with a non-list @code{cdr}.")
23346 (license license:gpl3+)))
23348 (define-public python-readlike
23350 (name "python-readlike")
23355 (uri (pypi-uri "readlike" version))
23357 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
23358 (build-system python-build-system)
23359 (home-page "https://github.com/jangler/readlike")
23360 (synopsis "GNU Readline-like line editing module")
23362 "This Python module provides line editing functions similar to the default
23363 Emacs-style ones of GNU Readline. Unlike the Python standard library's
23364 @code{readline} package, this one allows access to those capabilities in settings
23365 outside of a standard command-line interface. It is especially well-suited to
23366 interfacing with Urwid, due to a shared syntax for describing key inputs.
23368 Currently, all stateless Readline commands are implemented. Yanking and history
23369 are not supported.")
23370 (license license:expat)))
23372 (define-public python-reparser
23374 (name "python-reparser")
23379 (uri (pypi-uri "ReParser" version))
23381 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
23382 (build-system python-build-system)
23383 (home-page "https://github.com/xmikos/reparser")
23384 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
23386 "This Python library provides a simple lexer/parser for inline markup based
23387 on regular expressions.")
23388 (license license:expat)))
23390 (define-public python-retrying
23392 (name "python-retrying")
23397 (uri (git-reference
23398 (url "https://github.com/rholder/retrying")
23399 (commit (string-append "v" version))))
23400 (file-name (git-file-name name version))
23403 "1kqipkbdaw5s1xg0gi29awm03vp1x8dz24pjidgxagvkvrjpzhi7"))))
23404 (build-system python-build-system)
23407 (home-page "https://github.com/rholder/retrying")
23408 (synopsis "Library for adding retry behavior")
23409 (description "Retrying is a general-purpose retrying library to simplify
23410 the task of adding retry behavior to just about anything.
23415 @item Generic Decorator API.
23416 @item Specify stop condition (i.e. limit by number of attempts).
23417 @item Specify wait condition (i.e. exponential backoff sleeping between attempts).
23418 @item Customize retrying on Exceptions.
23419 @item Customize retrying on expected returned result.
23421 (license license:asl2.0)))
23423 (define-public python-pre-commit
23425 (name "python-pre-commit")
23430 (uri (pypi-uri "pre_commit" version))
23432 (base32 "1ycf6wpxrhxhdzz0vpryhbdxlwik5khgcvp3hxwvfr447a6k84zl"))))
23433 (build-system python-build-system)
23435 ;; Tests fail with "AttributeError: module 'pre_commit.resources' has no
23436 ;; attribute 'empty_template_setup'".
23437 `(#:tests? #false))
23441 python-importlib-metadata
23445 python-virtualenv))
23446 (home-page "https://github.com/pre-commit/pre-commit")
23447 (synopsis "Framework for managing multi-language pre-commit hooks")
23449 "This package provides a framework for managing and maintaining
23450 multi-language pre-commit hooks.")
23451 (license license:expat)))
23453 (define-public python-precis-i18n
23455 (name "python-precis-i18n")
23460 (uri (pypi-uri "precis_i18n" version))
23463 "1qfb78zpx565vqkg0xhx75pna9sc35m370vpcz82982c8ix3ypyz"))))
23464 (build-system python-build-system)
23465 (home-page "https://github.com/byllyfish/precis_i18n")
23466 (synopsis "Implementation of the PRECIS framework")
23468 "This module implements the PRECIS Framework as described in RFC 8264,
23469 RFC 8265 and RFC 8266.")
23470 (license license:expat)))
23472 (define-public python-absl-py
23474 (name "python-absl-py")
23479 (uri (pypi-uri "absl-py" version))
23482 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
23483 (build-system python-build-system)
23486 (home-page "https://github.com/abseil/abseil-py")
23487 (synopsis "Abseil Python common libraries")
23489 "This package provides the Abseil Python Common Libraries, a collection
23490 of Python libraries for building Python applications.")
23491 (license license:asl2.0)))
23493 (define-public python-astor
23495 (name "python-astor")
23500 (uri (pypi-uri "astor" version))
23503 "0ppscdzzvxpznclkmhhj53iz314x3pfv4yc7c6gwxqgljgdgyvka"))))
23504 (build-system python-build-system)
23505 ;; FIXME: There are two errors and two test failures.
23506 (arguments `(#:tests? #f))
23507 (home-page "https://github.com/berkerpeksag/astor")
23508 (synopsis "Read and write Python ASTs")
23509 (description "Astor is designed to allow easy manipulation of Python
23510 source via the Abstract Syntax Tree.")
23511 (license license:bsd-3)))
23513 (define-public python-astunparse
23515 (name "python-astunparse")
23520 (uri (pypi-uri "astunparse" version))
23522 (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
23523 (build-system python-build-system)
23524 (arguments '(#:tests? #f)) ; there are none
23526 (list python-six python-wheel))
23527 (home-page "https://github.com/simonpercivall/astunparse")
23528 (synopsis "AST unparser for Python")
23529 (description "This package provides an AST unparser for Python. It is a
23530 factored out version of @code{unparse} found in the Python source
23532 (license license:bsd-3)))
23534 (define-public python-gast
23536 (name "python-gast")
23541 (uri (pypi-uri "gast" version))
23543 (base32 "1xv77kzghiqfm4fnvlv0p878ma152dvcfkly3jij89lqigxcw7zq"))))
23544 (build-system python-build-system)
23546 (list python-astunparse))
23547 (home-page "https://pypi.org/project/gast/")
23548 (synopsis "Generic Python AST that abstracts the underlying Python version")
23550 "GAST provides a compatibility layer between the AST of various Python
23551 versions, as produced by @code{ast.parse} from the standard @code{ast}
23553 (license license:bsd-3)))
23555 (define-public python-wikidata
23557 (name "python-wikidata")
23562 (uri (pypi-uri "Wikidata" version))
23565 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
23566 (build-system python-build-system)
23568 (list python-babel))
23569 (home-page "https://github.com/dahlia/wikidata")
23570 (synopsis "Wikidata client library")
23572 "This package provides a Python interface to
23573 @url{https://www.wikidata.org/, Wikidata}.")
23574 (properties '((upstream-name . "Wikidata")))
23575 (license license:gpl3+)))
23577 (define-public python-doctest-ignore-unicode
23579 (name "python-doctest-ignore-unicode")
23584 (uri (pypi-uri "doctest-ignore-unicode" version))
23587 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
23588 (build-system python-build-system)
23590 (list python-nose))
23591 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
23592 (synopsis "Ignore Unicode literal prefixes in doctests")
23594 "This package adds support for a flag to ignore Unicode literal prefixes
23596 (license license:asl2.0)))
23598 (define-public python-attr
23600 (name "python-attr")
23605 (uri (pypi-uri "attr" version))
23608 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
23609 (build-system python-build-system)
23610 (home-page "https://github.com/denis-ryzhkov/attr")
23611 (synopsis "Decorator for attributes of target function or class")
23612 (description "Simple decorator to set attributes of target function or
23613 class in a @acronym{DRY, Don't Repeat Yourself} way.")
23614 (license license:expat)))
23616 (define-public python-construct
23618 (name "python-construct")
23619 (version "2.10.56")
23623 (uri (pypi-uri "construct" version))
23626 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
23627 (build-system python-build-system)
23629 `(#:tests? #f)) ; No tests exist.
23631 (list python-extras python-arrow python-numpy python-ruamel.yaml))
23632 (home-page "https://construct.readthedocs.io")
23633 (synopsis "Declarative and symmetrical parser and builder for binary data")
23635 "This package provides both simple, atomic constructs (such as
23636 integers of various sizes), as well as composite ones which allow you
23637 form hierarchical and sequential structures of increasing complexity.
23638 It features bit and byte granularity, easy debugging and testing, an
23639 easy-to-extend subclass system, and lots of primitive constructs to
23640 make your work easier.")
23641 (license license:expat)))
23643 (define-public python-outcome
23645 (name "python-outcome")
23650 (uri (pypi-uri "outcome" version))
23652 (base32 "0vxn04vspmlkkyijjkjnsc46f93ki8g62hr7ag10zpd7ic324y7w"))))
23653 (build-system python-build-system)
23656 (modify-phases %standard-phases
23658 (lambda* (#:key inputs outputs #:allow-other-keys)
23659 (add-installed-pythonpath inputs outputs)
23660 (invoke "pytest" "-vv"))))))
23662 (list python-pytest python-pytest-cov python-pytest-asyncio))
23664 (list python-async-generator python-attrs))
23665 (home-page "https://github.com/python-trio/outcome")
23666 (synopsis "Capture the outcome of Python function calls")
23668 "Capture the outcome of Python function calls. Extracted from the Trio
23670 ;; Either license applies.
23671 (license (list license:expat license:asl2.0))))
23673 (define-public python-trio
23675 (name "python-trio")
23680 (uri (pypi-uri "trio" version))
23682 (base32 "0w30cwmdwfa8zq2agqv3h62jzwwsk7ms8f683ag8f3jx279m42k7"))))
23683 (build-system python-build-system)
23686 (modify-phases %standard-phases
23687 (add-after 'unpack 'patch-sleep
23689 (substitute* "trio/tests/test_subprocess.py"
23691 (which "sleep")))))
23692 (add-before 'check 'change-home
23694 ;; Tests require a writable home.
23695 (setenv "HOME" "/tmp")))
23697 (lambda* (#:key tests? #:allow-other-keys)
23699 (invoke "pytest" "-vv"
23700 "-n" (number->string (parallel-job-count))
23703 ;; This test times out.
23704 "not test_ki_protection_works"
23705 ;; Assertion errors.
23706 " and not test_guest_mode_ki"
23707 " and not test_run_in_trio_thread_ki"
23708 " and not test_simple_cancel_scope_usage_doesnt_create_cyclic_garbage"
23709 " and not test_nursery_cancel_doesnt_create_cyclic_garbage"
23710 " and not test_cancel_scope_exit_doesnt_create_cyclic_garbage"
23711 " and not test_locals_destroyed_promptly_on_cancel"
23712 " and not test_ipython_exc_handler"
23713 " and not test_for_leaking_fds"
23714 ;; These try to raise KeyboardInterrupt which does not work
23715 ;; in the build environment.
23716 " and not test_ki_self"
23717 " and not test_ki_wakes_us_up"
23718 ;; Failure in name resolution.
23719 " and not test_getnameinfo"
23720 " and not test_SocketType_resolve"
23721 ;; OSError: protocol not found.
23722 " and not test_getprotobyname"
23723 ;; EOFError: Ran out of input.
23724 " and not test_static_tool_sees_all_symbols"))))))))
23732 python-pytest-xdist
23736 (list python-async-generator
23741 python-sortedcontainers))
23742 (home-page "https://github.com/python-trio/trio")
23743 (synopsis "Friendly Python library for async concurrency and I/O")
23745 "Trio strives to be a production-quality, async/await-native I/O library
23746 for Python. Like all async libraries, its main purpose is to help you write
23747 programs that do multiple things at the same time with parallelized I/O.")
23748 ;; Either license applies.
23749 (license (list license:expat license:asl2.0))))
23751 (define-public python-trio-typing
23753 (name "python-trio-typing")
23758 (uri (pypi-uri "trio-typing" version))
23760 (base32 "1yvlj4vf3wyvp16dw6vyfm4i2idm8lvdc3fvjhi6mhm62zv7s07j"))))
23761 (build-system python-build-system)
23764 (modify-phases %standard-phases
23767 (invoke "pytest" "-vv"))))))
23769 (list python-attrs python-pytest))
23771 (list python-mypy python-mypy-extensions python-trio
23772 python-typing-extensions))
23773 (home-page "https://github.com/python-trio/trio-typing")
23774 (synopsis "Static type checking support for Trio and related projects")
23776 "This package provides:
23779 @item PEP 561 typing stubs packages for the Trio project packages:
23782 @item trio (@code{trio-stubs})
23783 @item outcome (@code{outcome-stubs})
23784 @item async_generator (@code{async_generator-stubs})
23787 @item A package @code{trio_typing} containing types that Trio programs often
23788 want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
23789 a mypy plugin that smooths over some limitations in the basic type hints.
23791 ;; Either license applies.
23792 (license (list license:expat license:asl2.0))))
23794 (define-public python-trio-websocket
23796 (name "python-trio-websocket")
23800 (method git-fetch) ;no tests in pypi archive
23801 (uri (git-reference
23802 (url "https://github.com/HyperionGray/trio-websocket")
23804 (file-name (git-file-name name version))
23806 (base32 "1yk2ak991kbl30xg8ldpggack1lwkizd7s5cpr28ir34z8iyjnpi"))))
23807 (build-system python-build-system)
23810 (modify-phases %standard-phases
23812 (lambda* (#:key tests? #:allow-other-keys)
23813 (when tests? (invoke "pytest" "-vv")))))))
23814 (native-inputs (list python-pytest python-pytest-trio python-trustme))
23815 (propagated-inputs (list python-async-generator python-trio python-wsproto))
23816 (home-page "https://github.com/HyperionGray/trio-websocket")
23817 (synopsis "WebSocket library for Trio")
23818 (description "This library implements both server and client aspects of
23819 the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
23820 striving for safety, correctness, and ergonomics. It is based on the
23821 @url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
23822 @url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
23823 the majority of the WebSocket protocol, including framing, codecs, and events.
23824 This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
23825 the Trio framework}.")
23826 (license license:expat)))
23828 (define-public python-humanize
23830 (name "python-humanize")
23835 (uri (pypi-uri "humanize" version))
23838 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
23840 '(#:tests? #f)) ; tests not in pypi archive
23841 (build-system python-build-system)
23842 (home-page "https://github.com/jmoiron/humanize")
23843 (synopsis "Print numerical information in a human-readable form")
23844 (description "This package provides a Python module that displays numbers
23845 and dates in \"human readable\" forms. For example, it would display
23846 \"12345591313\" as \"12.3 billion\".")
23847 (license license:expat)))
23849 (define-public python-txaio
23851 (name "python-txaio")
23856 (uri (pypi-uri "txaio" version))
23859 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
23860 (build-system python-build-system)
23862 (list python-twisted python-six))
23863 (home-page "https://github.com/crossbario/txaio")
23864 (synopsis "Compatibility layer between Python asyncio and Twisted")
23865 (description "Txaio provides a compatibility layer between the Python
23866 @code{asyncio} module and @code{Twisted}.")
23867 (license license:expat)))
23869 (define-public python-toolshed
23871 (name "python-toolshed")
23876 (uri (pypi-uri "toolshed" version))
23879 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
23880 (build-system python-build-system)
23882 (list python-nose))
23883 (home-page "https://github.com/brentp/toolshed/")
23884 (synopsis "Collection of modules and functions for working with data")
23885 (description "This is a collection of well-tested, simple modules and
23886 functions that aim to reduce boilerplate when working with data.")
23887 (license license:bsd-2)))
23889 (define-public python-annoy
23891 (name "python-annoy")
23896 (uri (pypi-uri "annoy" version))
23899 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
23900 (build-system python-build-system)
23902 (list python-nose))
23903 (home-page "https://github.com/spotify/annoy/")
23904 (synopsis "Approximate nearest neighbors library")
23906 "Annoy is a C++ library with Python bindings to search for points in
23907 space that are close to a given query point. It also creates large read-only
23908 file-based data structures that are @code{mmap}ped into memory so that many
23909 processes may share the same data.")
23910 (license license:asl2.0)))
23912 (define-public python-croniter
23914 (name "python-croniter")
23918 (uri (pypi-uri "croniter" version))
23921 "1whbm26m9kpn0klgr9dqiqpp83ki9nhpxifaq9afcjw32rckcs9i"))))
23922 (build-system python-build-system)
23923 (propagated-inputs (list python-dateutil))
23924 (home-page "https://github.com/kiorky/croniter")
23925 (synopsis "Iterate datetime objects with cron-like syntax")
23927 "@code{croniter} provides iteration for datetime object with cron-like
23929 (license license:expat)))
23931 (define-public python-crontab
23933 (name "python-crontab")
23938 (uri (pypi-uri name version))
23940 (base32 "0cccrqc10r8781ba81x8r2frs3pl2m4hkm599k5358ak0xr7xgjb"))))
23941 (build-system python-build-system)
23943 ;; Comptability tests fail so they are disabled.
23946 (list python-dateutil))
23947 (home-page "https://gitlab.com/doctormo/python-crontab/")
23948 (synopsis "Module for reading and writing crontab files")
23949 (description "This Python module can read, write crontab files, and
23950 access the system cron automatically and simply using a direct API.")
23951 (license license:lgpl3+)))
23953 (define-public python-pylzma
23955 (name "python-pylzma")
23960 (uri (pypi-uri "pylzma" version))
23963 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
23964 (build-system python-build-system)
23965 (home-page "https://www.joachim-bauch.de/projects/pylzma/")
23966 (synopsis "Python bindings for the LZMA library by Igor Pavlov")
23967 (description "This package provides Python bindings for the LZMA library
23969 (license license:lgpl2.1+)))
23971 (define-public python-ifaddr
23973 (name "python-ifaddr")
23978 (uri (pypi-uri "ifaddr" version))
23981 "150sxdlicwrphmhnv03ykxplyd2jdrxz0mikgnivavgilrn8m7hz"))))
23982 (build-system python-build-system)
23985 (modify-phases %standard-phases
23987 (lambda _ (invoke "nosetests"))))))
23989 (list python-nose))
23990 (home-page "https://github.com/pydron/ifaddr")
23991 (synopsis "Network interface and IP address enumeration library")
23992 (description "This package provides a network interface and IP address
23993 enumeration library in Python.")
23994 (license license:expat)))
23996 (define-public python-zeroconf
23998 (name "python-zeroconf")
24002 (method git-fetch) ; no tests in PyPI release
24003 (uri (git-reference
24004 (url "https://github.com/jstasiak/python-zeroconf")
24006 (file-name (git-file-name name version))
24008 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
24009 (build-system python-build-system)
24012 (modify-phases %standard-phases
24014 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
24016 (add-installed-pythonpath inputs outputs)
24017 (invoke "python" "-m" "pytest" "-k"
24019 ;; Networking isn't available for these tests.
24020 "not test_integration_with_listener_ipv6"
24021 " and not test_launch_and_close_v4_v6"
24022 " and not test_launch_and_close_context_manager"
24023 " and not test_launch_and_close"
24024 " and not test_close_multiple_times"))))))))
24026 (list python-pytest))
24028 (list python-ifaddr))
24029 (home-page "https://github.com/jstasiak/python-zeroconf")
24030 (synopsis "Pure Python mDNS service discovery")
24031 (description "Pure Python multicast DNS (mDNS) service discovery library
24032 (Bonjour/Avahi compatible).")
24033 (license license:lgpl2.1+)))
24035 (define-public python-bsddb3
24037 (name "python-bsddb3")
24042 (uri (pypi-uri "bsddb3" version))
24044 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
24045 (build-system python-build-system)
24050 (modify-phases %standard-phases
24051 (add-after 'unpack 'configure-locations
24052 (lambda* (#:key inputs #:allow-other-keys)
24053 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
24054 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
24058 (invoke "python3" "test3.py" "-v"))))))
24059 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
24060 (synopsis "Python bindings for Oracle Berkeley DB")
24062 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
24063 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
24064 Transaction objects, and each of these is exposed as a Python type in the
24065 bsddb3.db module. The database objects can use various access methods: btree,
24066 hash, recno, and queue. Complete support of Berkeley DB distributed
24067 transactions. Complete support for Berkeley DB Replication Manager.
24068 Complete support for Berkeley DB Base Replication. Support for RPC.")
24069 (license license:bsd-3)))
24071 (define-public python-dbfread
24073 (name "python-dbfread")
24077 (uri (pypi-uri "dbfread" version))
24080 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
24081 (build-system python-build-system)
24083 (list python-pytest))
24084 (home-page "https://dbfread.readthedocs.io")
24085 (synopsis "Read DBF Files with Python")
24087 "This library reads DBF files and returns the data as native Python data
24088 types for further processing. It is primarily intended for batch jobs and
24090 (license license:expat)))
24092 (define-public python-cached-property
24094 (name "python-cached-property")
24099 (uri (pypi-uri "cached-property" version))
24102 "0c51i6yzg6dlq6zhk4c6nv33mg8gv05kkan36k9b5jzf71c7b9cz"))))
24103 (build-system python-build-system)
24106 (modify-phases %standard-phases
24107 ;; https://github.com/pydanny/cached-property/issues/131
24108 ;; recent versions of freezegun break one test
24109 (add-after 'unpack 'disable-broken-test
24111 (substitute* "tests/test_cached_property.py"
24112 (("def test_threads_ttl_expiry\\(self\\)" m)
24113 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
24117 (list python-freezegun))
24119 "https://github.com/pydanny/cached-property")
24121 "Decorator for caching properties in classes")
24123 "This package provides a decorator which makes caching
24124 time-or-computationally-expensive properties quick and easy and works in Python
24126 (license license:bsd-3)))
24128 (define-public python-folium
24130 (name "python-folium")
24134 ;; PyPI has a ".whl" file but not a proper source release.
24135 ;; Thus, fetch code from Git.
24137 (uri (git-reference
24138 (url "https://github.com/python-visualization/folium")
24139 (commit (string-append "v" version))))
24140 (file-name (git-file-name name version))
24142 (base32 "1q05pzca3wfwgnbg03l3bagnhh348yx68w4aa91rg3g8zlviwjz1"))))
24143 (build-system python-build-system)
24145 (list python-branca python-jinja2 python-numpy python-requests))
24147 (list python-pytest))
24148 (home-page "https://github.com/python-visualization/folium")
24149 (synopsis "Make beautiful maps with Leaflet.js & Python")
24150 (description "@code{folium} makes it easy to visualize data that’s been
24151 manipulated in Python on an interactive leaflet map. It enables both the
24152 binding of data to a map for @code{choropleth} visualizations as well as
24153 passing rich vector/raster/HTML visualizations as markers on the map.
24155 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
24156 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
24157 supports Image, Video, GeoJSON and TopoJSON overlays.")
24158 (license license:expat)))
24160 (define-public python-mercantile
24162 (name "python-mercantile")
24167 (uri (pypi-uri "mercantile" version))
24169 (base32 "0sxmndhzzrvss5irsgzfrk51k6jihwcb7661992mizdgbnqnsg7s"))))
24170 (build-system python-build-system)
24171 (propagated-inputs (list python-click))
24173 (list python-check-manifest python-hypothesis python-pytest))
24174 (home-page "https://github.com/mapbox/mercantile")
24175 (synopsis "Web mercator XYZ tile utilities")
24176 (description "The mercantile module provides @code{ul(xtile, ytile, zoom)}
24177 and @code{bounds(xtile, ytile, zoom)} functions that respectively return the
24178 upper left corner and bounding longitudes and latitudes for XYZ tiles, a
24179 @code{xy(lng, lat)} function that returns spherical mercator x and y
24180 coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
24181 containing a given point, and quadkey conversion functions
24182 @code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
24183 translating between quadkey and tile coordinates.")
24184 (license license:bsd-3)))
24186 (define-public python-xyzservices
24188 (name "python-xyzservices")
24189 (version "2022.4.0")
24193 (uri (pypi-uri "xyzservices" version))
24195 (base32 "1paxv4i0dws85md7csv7pf80jl3xh792mx8rxnsrk61ks3ivbsyg"))))
24196 (build-system python-build-system)
24199 (modify-phases %standard-phases
24201 (lambda* (#:key tests? #:allow-other-keys)
24203 (invoke "pytest" "-vv")))))))
24205 (list python-pytest python-mercantile python-requests))
24206 (home-page "https://github.com/geopandas/xyzservices")
24207 (synopsis "Source of XYZ tiles providers")
24208 (description "@code{xyzservices} is a lightweight library providing a
24209 repository of available XYZ services offering raster basemap tiles. The
24210 repository is provided via Python API and as a compressed JSON file.")
24211 (license license:bsd-3)))
24213 (define-public jube
24215 ;; This is a command-line tool, so no "python-" prefix.
24220 (uri (string-append
24221 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
24225 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
24226 (file-name (string-append "jube-" version ".tar.gz"))))
24227 (build-system python-build-system)
24228 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
24229 (synopsis "Benchmarking environment")
24231 "JUBE helps perform and analyze benchmarks in a systematic way. For each
24232 benchmarked application, benchmark data is stored in a format that allows JUBE
24233 to deduct the desired information. This data can be parsed by automatic pre-
24234 and post-processing scripts that draw information and store it more densely
24235 for manual interpretation.")
24236 (license license:gpl3+)))
24238 (define-public python-pyroutelib3
24240 (name "python-pyroutelib3")
24241 (version "1.3.post1")
24245 (uri (pypi-uri "pyroutelib3" version))
24248 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
24249 (build-system python-build-system)
24251 (list python-dateutil))
24252 (home-page "https://github.com/MKuranowski/pyroutelib3")
24253 (synopsis "Library for simple routing on OSM data")
24254 (description "Library for simple routing on OSM data")
24255 (license license:gpl3+)))
24257 (define-public python-bibtexparser
24259 (name "python-bibtexparser")
24264 (uri (pypi-uri "bibtexparser" version))
24267 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
24268 (build-system python-build-system)
24270 (list python-pyparsing))
24272 (list python-future))
24273 (home-page "https://github.com/sciunto-org/python-bibtexparser")
24274 (synopsis "Python library to parse BibTeX files")
24275 (description "BibtexParser is a Python library to parse BibTeX files.")
24276 (license (list license:bsd-3 license:lgpl3))))
24278 (define-public python-distro
24280 (name "python-distro")
24285 (uri (pypi-uri "distro" version))
24288 "09441261dd3c8b2gv15vhw1cryzg60lmgpkk07v6hpwwkyhfbxc3"))))
24289 (build-system python-build-system)
24291 (list python-pytest))
24292 (home-page "https://github.com/nir0s/distro")
24294 "OS platform information API")
24296 "@code{distro} provides information about the OS distribution it runs on,
24297 such as a reliable machine-readable ID, or version information.
24299 It is the recommended replacement for Python's original
24300 `platform.linux_distribution` function (which will be removed in Python 3.8).
24301 @code{distro} also provides a command-line interface to output the platform
24302 information in various formats.")
24303 (license license:asl2.0)))
24305 (define-public python-cairosvg
24307 (name "python-cairosvg")
24312 (uri (pypi-uri "CairoSVG" version))
24314 (base32 "1ylsisha2cc4w0yydxwhy7idkfw1inl9fsipxsrm7vyby080vi9z"))))
24315 (build-system python-build-system)
24318 (modify-phases %standard-phases
24320 (lambda _ (invoke "pytest"))))))
24322 (list python-cairocffi python-cssselect2 python-defusedxml
24323 python-pillow python-tinycss2))
24325 (list python-pytest-flake8 python-pytest-isort python-pytest-runner))
24326 (home-page "https://cairosvg.org/")
24327 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
24328 (description "CairoSVG is a SVG converter based on Cairo. It can export
24329 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
24330 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
24331 parsed, the result is drawn to a Cairo surface that can be exported to
24332 qvarious formats: PDF, PostScript, PNG and even SVG.")
24333 (license license:lgpl3+)))
24335 (define-public python-pyphen
24337 (name "python-pyphen")
24342 (uri (pypi-uri "Pyphen" version))
24344 (base32 "0a1iwrgs4hzwzz60q4i1813kbzimhm0i4q8grh8vqkxhnkgj36vi"))))
24345 (build-system python-build-system)
24346 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
24347 ;; embedded set provided by upstream - like Debian does.
24348 (home-page "https://github.com/Kozea/Pyphen")
24349 (synopsis "Pure Python module to hyphenate text")
24350 (description "Pyphen is a pure Python module to hyphenate text using
24351 existing Hunspell hyphenation dictionaries.")
24352 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
24354 (define-public python-intelhex
24356 (name "python-intelhex")
24361 (uri (pypi-uri "intelhex" version))
24364 "14q04p6qs47ab9w55232ylrdn4wm9rswz36s6x999x0rlxhp6aw9"))))
24365 (build-system python-build-system)
24366 (home-page "https://pypi.org/project/IntelHex/")
24367 (synopsis "Python library for Intel HEX files manipulations")
24368 (description "The Intel HEX file format is widely used in microprocessors
24369 and microcontrollers area (embedded systems etc.) as the de facto standard for
24370 representation of code to be programmed into microelectronic devices. This
24371 package provides an intelhex Python library to read, write, create from
24372 scratch and manipulate data from Intel HEX file format. It also includes
24373 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
24374 converters and more, those based on the library itself.")
24375 (license license:bsd-3)))
24377 (define-public python-interlap
24379 (name "python-interlap")
24383 (uri (pypi-uri "interlap" version))
24386 "1jbfh00bkrf0i5psa6n75rlgmqp5389xixa9j29w8rxhah6g7r1i"))))
24387 (build-system python-build-system)
24388 (home-page "https://brentp.github.io/interlap")
24389 (synopsis "Fast, simple interval overlap testing")
24390 (description "InterLap does fast interval overlap testing with a simple Python data
24392 (license license:expat)))
24394 (define-public python-pykwalify
24396 (name "python-pykwalify")
24401 (uri (pypi-uri "pykwalify" version))
24404 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
24405 (build-system python-build-system)
24406 (arguments '(#:tests? #f)) ;missing dependencies
24408 (list python-dateutil python-docopt python-pyyaml))
24409 (home-page "https://github.com/grokzen/pykwalify")
24411 "Python lib/cli for JSON/YAML schema validation")
24413 "This package provides a parser, schema validator, and data binding tool
24414 for YAML and JSON.")
24415 (license license:expat)))
24417 (define-public python-dbusmock
24419 (name "python-dbusmock")
24424 (uri (pypi-uri "python-dbusmock" version))
24427 "1nwl0gzzds2g1w1gfxfzlgrkb5hr1rrdyn619ml25c6b1rjyfk3g"))))
24428 (build-system python-build-system)
24430 `(#:imported-modules (,@%python-build-system-modules
24431 (guix build syscalls))
24432 #:modules ((guix build python-build-system)
24433 (guix build syscalls)
24437 (modify-phases %standard-phases
24438 (add-after 'unpack 'patch-paths
24439 (lambda* (#:key inputs #:allow-other-keys)
24440 (substitute* "tests/test_code.py"
24441 (("/bin/bash") (which "bash")))
24442 (substitute* "dbusmock/testcase.py"
24444 (string-append "'" (assoc-ref inputs "dbus")
24445 "/bin/dbus-daemon'")))))
24447 (lambda* (#:key tests? #:allow-other-keys)
24449 (match (primitive-fork)
24451 (set-child-subreaper!)
24452 ;; Use tini so that signals are properly handled and
24453 ;; doubly-forked processes get reaped; otherwise,
24454 ;; python-dbusmock would waste time polling for the dbus
24455 ;; processes it spawns to be reaped, in vain.
24456 (execlp "tini" "--" "pytest" "-vv"))
24458 (match (waitpid pid)
24460 (unless (zero? status)
24461 (error "`pytest' exited with status"
24464 (list dbus python-pytest tini which))
24468 (list python-dbus python-pygobject))
24469 (home-page "https://github.com/martinpitt/python-dbusmock")
24470 (synopsis "Python library for mock D-Bus objects")
24471 (description "python-dbusmock allows for the easy creation of mock objects on
24472 D-Bus. This is useful for writing tests for software which talks to D-Bus
24473 services such as upower, systemd, logind, gnome-session or others, and it is
24474 hard (or impossible without root privileges) to set the state of the real
24475 services to what you expect in your tests.")
24476 (license license:lgpl3+)))
24478 (define-public python-jsonplus
24480 (name "python-jsonplus")
24482 (home-page "https://github.com/randomir/jsonplus")
24485 (uri (pypi-uri "jsonplus" version))
24488 "05yv3dw813zwas9snz124k2hki49y268b3mx0gj9w7v1nrjmglq1"))))
24489 (build-system python-build-system)
24490 ;; XXX: No tests on PyPI, and the repository has no tags.
24491 (arguments '(#:tests? #f))
24493 (list python-dateutil python-simplejson python-sortedcontainers))
24494 (synopsis "Serialize Python types to/from JSON")
24496 "This package provides functionality to serialize arbitrary data types
24497 to and from JSON. Common data types are implemented and it is easy to
24498 register custom encoders and decoders.")
24499 (license license:expat)))
24501 (define-public python-ujson
24503 (name "python-ujson")
24508 (uri (pypi-uri "ujson" version))
24511 "0k9w0kypy7vlskzzp2vsjswaw8lbqdrplzkbflxki9vqwglsj5f6"))
24512 (modules '((guix build utils)))
24514 '(begin (delete-file-recursively "deps") #t))))
24515 (build-system python-build-system)
24518 (modify-phases %standard-phases
24519 (add-after 'unpack 'link-to-system-double-conversion
24520 (lambda* (#:key inputs #:allow-other-keys)
24521 (let ((d-c (assoc-ref inputs "double-conversion")))
24522 (substitute* "setup.py"
24523 (("./deps/double-conversion/double-conversion\"")
24524 (string-append d-c "/include/double-conversion\""))
24526 (string-append "-L" d-c "/lib\","
24527 " \"-ldouble-conversion\","
24531 (lambda* (#:key inputs outputs #:allow-other-keys)
24532 (add-installed-pythonpath inputs outputs)
24533 (invoke "pytest"))))))
24535 (list double-conversion python-setuptools-scm python-pytest))
24536 (home-page "https://github.com/ultrajson/ultrajson")
24537 (synopsis "Ultra fast JSON encoder and decoder for Python")
24539 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
24540 bindings for Python 3.")
24541 (license license:bsd-3)))
24543 (define-public python-iocapture
24544 ;; The latest release is more than a year older than this commit.
24545 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
24548 (name "python-iocapture")
24553 (uri (git-reference
24554 (url "https://github.com/oinume/iocapture")
24556 (file-name (git-file-name name version))
24559 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
24560 (build-system python-build-system)
24563 (modify-phases %standard-phases
24565 (add-after 'install 'check
24566 (lambda* (#:key inputs outputs #:allow-other-keys)
24567 (add-installed-pythonpath inputs outputs)
24568 (invoke "py.test" "-v" "tests")
24571 (list python-flexmock python-pytest python-pytest-cov python-six))
24572 (home-page "https://github.com/oinume/iocapture")
24573 (synopsis "Python capturing tool for stdout and stderr")
24575 "This package helps you to capture the standard out (stdout) and the
24576 standard error channel (stderr) in your program.")
24577 (license license:expat))))
24579 (define-public python-anyio
24581 (name "python-anyio")
24586 (uri (pypi-uri "anyio" version))
24589 "19m58805wir4i2s45dd5ynwlzb7ky1218isbir53gpqzzgigzbm0"))))
24590 (build-system python-build-system)
24593 (modify-phases %standard-phases
24595 (lambda* (#:key tests? #:allow-other-keys)
24598 "pytest" "-vv" "-p" "no:asyncio"
24602 "not test_is_block_device"
24604 ;; These fail because of network (or specifically IPv6
24605 ;; network) access (see:
24606 ;; https://github.com/agronholm/anyio/issues/417).
24607 " and not test_accept"
24608 " and not test_accept_after_close"
24609 " and not test_close_during_receive"
24610 " and not test_close_from_other_task"
24611 " and not test_concurrent_receive"
24612 " and not test_concurrent_send"
24613 " and not test_connect_tcp_with_tls"
24614 " and not test_connect_tcp_with_tls_cert_check_fail"
24615 " and not test_connection_refused"
24616 " and not test_extra_attributes"
24617 " and not test_getaddrinfo"
24618 " and not test_getnameinfo"
24619 " and not test_happy_eyeballs"
24620 " and not test_iterate"
24621 " and not test_receive_after_close"
24622 " and not test_receive_timeout"
24623 " and not test_reuse_port"
24624 " and not test_run_process"
24625 " and not test_send_after_close"
24626 " and not test_send_after_eof"
24627 " and not test_send_after_peer_closed"
24628 " and not test_send_eof"
24629 " and not test_send_large_buffer"
24630 " and not test_send_receive"
24631 " and not test_socket_options"
24632 " and not test_unretrieved_future_exception_server_crash"))))))))
24634 (list python-contextvars
24638 python-typing-extensions))
24640 (list python-contextlib2
24646 python-setuptools-scm
24650 (home-page "https://github.com/agronholm/anyio")
24651 (synopsis "Compatibility layer for multiple asynchronous event loops")
24653 "AnyIO is an asynchronous networking and concurrency library that works
24654 on top of either asyncio or trio. It implements trio-like structured
24655 concurrency on top of asyncio, and works in harmony with the native SC of trio
24657 (license license:expat)))
24659 (define-public python-argh
24660 ;; There are 21 commits since the latest release containing important
24662 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
24665 (name "python-argh")
24666 (version (git-version "0.26.2" revision commit))
24670 (uri (git-reference
24671 (url "https://github.com/neithere/argh")
24673 (file-name (git-file-name name version))
24676 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
24677 (build-system python-build-system)
24680 (modify-phases %standard-phases
24681 (add-after 'unpack 'patch-tests
24683 ;; Fix test failures on Python 3.9.9+.
24684 ;; Taken via <https://github.com/neithere/argh/issues/148>.
24685 (substitute* "test/test_integration.py"
24686 (("assert run\\(p, '(bar|orig-name|nest bar)', exit=True\\)\
24687 \\.startswith\\('invalid choice'\\)" _ name)
24688 (string-append "assert 'invalid choice' in \
24689 run(p, '" name "', exit=True)")))))
24691 (lambda* (#:key tests? #:allow-other-keys)
24693 (invoke "pytest" "-vv")))))))
24695 (list python-iocapture python-mock python-pytest python-pytest-cov
24696 python-pytest-xdist))
24697 (home-page "https://github.com/neithere/argh/")
24698 (synopsis "Argparse wrapper with natural syntax")
24700 "python-argh is a small library that provides several layers of
24701 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
24702 always possible to declare a command with the highest possible (and least
24703 flexible) layer and then tune the behaviour with any of the lower layers
24704 including the native API of @code{python-argparse}.")
24705 (license license:lgpl3+))))
24707 (define-public python-ppft
24709 (name "python-ppft")
24710 (version "1.6.6.1")
24714 (uri (pypi-uri "ppft" version))
24717 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
24718 (build-system python-build-system)
24719 (arguments '(#:tests? #f)) ; there are none
24722 (home-page "https://pypi.org/project/ppft/")
24723 (synopsis "Fork of Parallel Python")
24725 "This package is a fork of Parallel Python. The Parallel Python
24726 module (@code{pp}) provides an easy and efficient way to create
24727 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
24728 computers and clusters. It features cross-platform portability and dynamic
24730 (license license:bsd-3)))
24732 (define-public python-pox
24734 (name "python-pox")
24739 (uri (pypi-uri "pox" version))
24742 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
24743 (build-system python-build-system)
24746 (modify-phases %standard-phases
24749 (mkdir-p "/tmp/guix")
24750 (setenv "SHELL" "bash")
24751 (setenv "USERNAME" "guix")
24752 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
24753 (invoke "py.test" "-vv")
24756 (list python-pytest which))
24757 (home-page "https://pypi.org/project/pox/")
24758 (synopsis "Python utilities for file system exploration and automated builds")
24760 "Pox provides a collection of utilities for navigating and manipulating
24761 file systems. This module is designed to facilitate some of the low-level
24762 operating system interactions that are useful when exploring a file system on a
24763 remote host. Pox provides Python equivalents of several shell commands such
24764 as @command{which} and @command{find}. These commands allow automated
24765 discovery of what has been installed on an operating system, and where the
24766 essential tools are located.")
24767 (license license:bsd-3)))
24769 (define-public python-pathos
24771 (name "python-pathos")
24776 (uri (pypi-uri "pathos" version))
24779 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
24780 (build-system python-build-system)
24783 (modify-phases %standard-phases
24786 (invoke "python" "./tests/__main__.py"))))))
24788 (list python-dill python-multiprocess python-pox python-ppft))
24790 (list python-pytest))
24791 (home-page "https://pypi.org/project/pathos/")
24793 "Parallel graph management and execution in heterogeneous computing")
24795 "Python-pathos is a framework for heterogeneous computing. It provides a
24796 consistent high-level interface for configuring and launching parallel
24797 computations across heterogeneous resources. Python-pathos provides configurable
24798 launchers for parallel and distributed computing, where each launcher contains
24799 the syntactic logic to configure and launch jobs in an execution environment.")
24800 (license license:bsd-3)))
24802 (define-public python-flit
24804 (name "python-flit")
24809 (uri (pypi-uri "flit" version))
24811 (base32 "04152qj46sqbnlrj7ch9p7svjrrlpzbk0qr39g2yr0s4f5vp6frf"))))
24812 (build-system python-build-system)
24816 #~(modify-phases %standard-phases
24817 ;; XXX: PEP 517 manual build copied from python-isort.
24820 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
24822 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
24824 (setenv "HOME" "/tmp")
24825 (setenv "FLIT_NO_NETWORK" "1"))))
24828 (let ((whl (car (find-files "dist" "\\.whl$"))))
24829 (invoke "pip" "--no-cache-dir" "--no-input"
24830 "install" "--no-deps" "--prefix" #$output whl)))))))
24832 (list python-pypa-build
24838 (list python-responses
24839 python-pygments-github-lexers
24843 python-sphinxcontrib-github-alt
24845 (home-page "https://flit.readthedocs.io/")
24846 (synopsis "Simple packaging tool for simple packages")
24847 (description "Flit is a simple way to put Python packages and modules on
24848 PyPI. Flit packages a single importable module or package at a time, using
24849 the import name as the name on PyPI. All subpackages and data files within a
24850 package are included automatically.")
24851 (license license:bsd-3)))
24853 (define-public python-pathtools
24855 (name "python-pathtools")
24860 (uri (pypi-uri "pathtools" version))
24863 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
24864 (build-system python-build-system)
24866 "https://github.com/gorakhargosh/pathtools")
24867 (synopsis "Path utilities for Python")
24868 (description "Pattern matching and various utilities for file systems
24870 (license license:expat)))
24872 (define-public python-fastentrypoints
24874 (name "python-fastentrypoints")
24879 (uri (pypi-uri "fastentrypoints" version))
24882 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
24883 (build-system python-build-system)
24885 "https://github.com/ninjaaron/fast-entry_points")
24887 "Makes entry_points specified in setup.py load more quickly")
24889 "Using entry_points in your setup.py makes scripts that start really
24890 slowly because it imports pkg_resources. This package allows such setup
24891 scripts to load entry points more quickly.")
24892 (license license:bsd-3)))
24894 (define-public python-funcparserlib
24896 (name "python-funcparserlib")
24901 (uri (pypi-uri "funcparserlib" version))
24903 (base32 "0swbqf53x7lfnczvi566s1g3nkf5mfrxz7sbpyymricz57a3vlvx"))))
24904 (build-system python-build-system)
24906 `(#:tests? #f)) ; no tests in PyPI and no setup.py in GitHub
24907 (home-page "https://github.com/vlasovskikh/funcparserlib")
24909 "Recursive descent parsing library based on functional combinators")
24911 "This package is a recursive descent parsing library for Python based on
24912 functional combinators. Parser combinators are just higher-order functions
24913 that take parsers as their arguments and return them as result values.")
24914 (license license:expat)))
24916 (define-public python-speg
24918 (name "python-speg")
24923 (uri (pypi-uri "speg" version ".zip"))
24925 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
24927 `(#:tests? #f)) ;FIXME: tests fail, not sure why
24930 (build-system python-build-system)
24931 (home-page "https://github.com/avakar/speg")
24932 (synopsis "PEG-based parser interpreter with memoization")
24933 (description "This package is a PEG-based parser and interpreter with
24935 (license license:expat)))
24937 (define-public python-cson
24939 (name "python-cson")
24944 (uri (pypi-uri "cson" version))
24946 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
24947 (build-system python-build-system)
24949 (list python-speg))
24950 (home-page "https://github.com/avakar/pycson")
24951 (synopsis "Parser for Coffeescript Object Notation (CSON)")
24952 (description "This package is a parser for Coffeescript Object
24954 (license license:expat)))
24956 (define-public python-aionotify
24958 (name "python-aionotify")
24962 ;; Source tarball on PyPi lacks tests
24964 (uri (git-reference
24965 (url "https://github.com/rbarrois/aionotify")
24966 (commit (string-append "v" version))))
24967 (file-name (git-file-name name version))
24969 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))
24970 (patches (search-patches "python-aionotify-0.2.0-py3.8.patch"))))
24971 (build-system python-build-system)
24972 (home-page "https://github.com/rbarrois/aionotify")
24973 (synopsis "Asyncio-powered inotify library")
24975 "@code{aionotify} is a simple, asyncio-based inotify library.")
24976 (license license:bsd-3)))
24978 (define-public python-forbiddenfruit
24980 (name "python-forbiddenfruit")
24984 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
24986 (uri (git-reference
24987 (url "https://github.com/clarete/forbiddenfruit")
24989 (file-name (git-file-name name version))
24991 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
24992 (build-system python-build-system)
24995 (modify-phases %standard-phases
24998 (invoke "make" "SKIP_DEPS=1"))))))
25000 (list python-nose python-coverage))
25001 (home-page "https://github.com/clarete/forbiddenfruit")
25002 (synopsis "Patch python built-in objects")
25003 (description "This project allows Python code to extend built-in types.")
25004 (license (list license:gpl3+ license:expat))))
25006 (define-public python-k5test
25008 (name "python-k5test")
25013 (uri (pypi-uri "k5test" version))
25016 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
25017 (build-system python-build-system)
25020 ;; `which`, `kadmin.local` binaries called inside library
25022 (native-inputs (list mit-krb5))
25025 (modify-phases %standard-phases
25026 (add-after 'unpack 'apply-upstream-fixes
25028 (substitute* "k5test/realm.py"
25029 ;; Upstream commit f6b302d94dbdce37a1b81cc3faeeac4dc637b0e9.
25030 (("'kadmin_local'") "'kadmin.local'")
25031 ;; Upstream commit 3aef84515cf3d1a171c66856c898d0a5cbbd03ea.
25032 (("\\.stop_daemon") "._stop_daemon")))))))
25033 (home-page "https://github.com/pythongssapi/k5test")
25034 (synopsis "Library for setting up self-contained Kerberos 5 environments")
25036 "@code{k5test} is a library for setting up self-contained Kerberos 5
25037 environments, and running Python unit tests inside those environments. It is
25038 based on the file of the same name found alongside the MIT Kerberos 5 unit
25040 (license license:isc)))
25042 (define-public python-gssapi
25044 (name "python-gssapi")
25049 (uri (pypi-uri "gssapi" version))
25052 "1j2idrbrbczykzlb56q1bn0ivc9c0rjjljpk4yz86xn3gxfkpv8n"))))
25053 (build-system python-build-system)
25055 (list python-decorator python-six))
25060 (list python-parameterized python-k5test python-nose))
25061 (home-page "https://github.com/pythongssapi/python-gssapi")
25062 (synopsis "Python GSSAPI Wrapper")
25064 "Python-GSSAPI provides both low-level and high level wrappers around the
25065 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
25066 also be usable with other GSSAPI mechanisms.")
25067 (license license:isc)))
25069 (define-public python-check-manifest
25071 (name "python-check-manifest")
25076 (uri (pypi-uri "check-manifest" version))
25079 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
25080 (build-system python-build-system)
25082 (list python-mock git))
25083 (home-page "https://github.com/mgedmin/check-manifest")
25084 (synopsis "Check MANIFEST.in in a Python source package for completeness")
25085 (description "Python package can include a MANIFEST.in file to help with
25086 sending package files to the Python Package Index. This package checks that
25087 file to ensure it completely and accurately describes your project.")
25088 (license license:expat)))
25090 (define-public python-android-stringslib
25092 (name "python-android-stringslib")
25097 (uri (git-reference
25098 (url "https://framagit.org/tyreunom/python-android-strings-lib")
25099 (commit (string-append "v" version))))
25100 (file-name (git-file-name name version))
25103 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
25104 (build-system python-build-system)
25107 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
25108 (synopsis "Android strings.xml support")
25109 (description "Android Strings Lib provides support for android's strings.xml
25110 files. These files are used to translate strings in android apps.")
25111 (license license:expat)))
25113 (define-public python-watchdog
25115 (name "python-watchdog")
25120 (uri (pypi-uri "watchdog" version))
25122 (base32 "1rx2nyl0cyj0v4ja795cl3gi26577c5wg48syr3byz3ndkgpavm3"))))
25123 (build-system python-build-system)
25126 (modify-phases %standard-phases
25128 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
25130 (add-installed-pythonpath inputs outputs)
25131 (invoke "python" "-m" "pytest" "-k"
25132 ;; This test failed.
25133 "not test_kill_auto_restart")))))))
25135 (list python-pathtools python-pyyaml))
25137 (list python-pytest-cov python-pytest-timeout))
25138 (home-page "https://github.com/gorakhargosh/watchdog")
25139 (synopsis "File system events monitoring")
25140 (description "This package provides a way to monitor file system events
25141 such as a file modification and trigger an action. This is similar to inotify,
25143 (license license:asl2.0)))
25145 (define-public python-watchgod
25147 (name "python-watchgod")
25151 ;; There are no tests in the PyPI tarball.
25153 (uri (git-reference
25154 (url "https://github.com/samuelcolvin/watchgod")
25155 (commit (string-append "v" version))))
25156 (file-name (git-file-name name version))
25158 (base32 "1w2xsidwp9n4giqhja0bzw7rwrh01db0kdxf2n54mv3dkx545jpq"))))
25159 (build-system python-build-system)
25162 (modify-phases %standard-phases
25164 (lambda* (#:key tests? #:allow-other-keys)
25166 (invoke "pytest" "-vv"
25167 "-o" "asyncio_mode=auto")))))))
25169 (list python-coverage
25172 python-pytest-asyncio
25175 python-pytest-sugar
25176 python-pytest-toolbox))
25177 (home-page "https://github.com/samuelcolvin/watchgod")
25178 (synopsis "Simple, modern file watching and code reload in Python")
25180 "Simple, modern file watching and code reload in Python inspired by
25181 @code{watchdog}. Among the differences are a unified approach for each
25182 operating systems and an elegant approach to concurrency using threading.")
25183 (license license:expat)))
25185 (define-public python-wget
25187 (name "python-wget")
25192 (uri (pypi-uri "wget" version ".zip"))
25195 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
25196 (build-system python-build-system)
25197 (native-inputs (list unzip))
25198 (home-page "https://bitbucket.org/techtonik/python-wget/")
25199 (synopsis "Pure Python download utility")
25200 (description "The python-wget library provides an API to download files
25201 with features similar to the @command{wget} utility.")
25202 (license license:unlicense)))
25204 (define-public offlate
25211 (uri (git-reference
25212 (url "https://framagit.org/tyreunom/offlate")
25214 (file-name (git-file-name name version))
25217 "1sx5cv8pamyw1m089b6x8ykaxdkx26jk9cblhbzlf0m3ckz52jik"))))
25218 (build-system python-build-system)
25223 (modify-phases %standard-phases
25224 (add-before 'build 'generate-fonts
25226 (invoke "make" "fonts")))
25227 (add-before 'build 'generate-translations
25229 (invoke "make" "update-langs"))))))
25231 (list python-android-stringslib
25243 python-translate-toolkit
25244 python-translation-finder
25247 (list qttools-5 fontforge))
25248 (home-page "https://framagit.org/tyreunom/offlate")
25249 (synopsis "Offline translation interface for online translation tools")
25250 (description "Offlate offers a unified interface for different translation
25251 file formats, as well as many different online translation platforms. You can
25252 use it to get work from online platforms, specialized such as the Translation
25253 Project, or not such a gitlab instance when your upstream doesn't use any
25254 dedicated platform. The tool proposes a unified interface for any format and
25255 an upload option to send your work back to the platform.")
25256 (license license:gpl3+)))
25258 (define-public python-titlecase
25260 (name "python-titlecase")
25265 (uri (pypi-uri "titlecase" version))
25268 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
25269 (build-system python-build-system)
25271 (list python-nose))
25272 (home-page "https://github.com/ppannuto/python-titlecase")
25273 (synopsis "Capitalize strings similar to book titles")
25275 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
25276 It capitalizes (predominantly English) strings in a way that is similar to
25277 book titles, using the New York Times Manual of Style to leave certain words
25279 (license license:expat)))
25281 (define-public python-pypng
25283 (name "python-pypng")
25288 (uri (pypi-uri "pypng" version))
25290 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
25291 (build-system python-build-system)
25292 (home-page "https://github.com/drj11/pypng")
25293 (synopsis "Pure Python PNG image encoder/decoder")
25295 "The PyPNG module implements support for PNG images. It reads and writes
25296 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
25297 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
25298 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
25299 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
25300 A number of optional chunks can be specified (when writing) and
25301 understood (when reading): tRNS, bKGD, gAMA.
25303 PyPNG is not a high level toolkit for image processing (like PIL) and does not
25304 aim at being a replacement or competitor. Its strength lies in fine-grained
25305 extensive support of PNG features. It can also read and write Netpbm PAM
25306 files, with a focus on its use as an intermediate format for implementing
25307 custom PNG processing.")
25308 (license license:expat)))
25310 (define-public python-fuzzywuzzy
25312 (name "python-fuzzywuzzy")
25317 (uri (pypi-uri "fuzzywuzzy" version))
25320 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
25321 (build-system python-build-system)
25323 (list python-hypothesis python-pycodestyle python-pytest))
25325 (list python-levenshtein))
25326 (home-page "https://github.com/seatgeek/fuzzywuzzy")
25327 (synopsis "Fuzzy string matching in Python")
25328 (description "Approximate string matching using
25329 @emph{Levenshtein Distance} to calculate the differences between
25331 (license license:gpl2)))
25333 (define-public python-block-tracing
25335 (name "python-block-tracing")
25340 (uri (pypi-uri "block_tracing" version))
25343 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
25344 (build-system python-build-system)
25345 (arguments '(#:tests? #f)) ; no tests
25346 (home-page "https://github.com/rianhunter/block_tracing")
25347 (synopsis "Protect process memory")
25349 "@code{block_tracing} is a tiny Python library that can be used to
25350 prevent debuggers and other applications from inspecting the memory within
25352 (license license:expat)))
25354 (define-public python-gcovr
25356 (name "python-gcovr")
25361 (uri (pypi-uri "gcovr" version))
25364 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
25365 (build-system python-build-system)
25367 (list python-lxml python-jinja2))
25368 (home-page "https://gcovr.com/")
25369 (synopsis "Utility for generating code coverage results")
25371 "Gcovr provides a utility for managing the use of the GNU gcov
25372 utility and generating summarized code coverage results. It is inspired
25373 by the Python coverage.py package, which provides a similar utility for
25375 (license license:bsd-3)))
25377 (define-public python-owslib
25379 (name "python-owslib")
25384 (uri (pypi-uri "OWSLib" version))
25386 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
25387 (build-system python-build-system)
25389 ;; TODO: package dependencies required for tests.
25391 #:phases (modify-phases %standard-phases
25392 (delete 'sanity-check))))
25393 (synopsis "Interface for Open Geospatial Consortium web service")
25395 "OWSLib is a Python package for client programming with Open Geospatial
25396 Consortium (OGC) web service (hence OWS) interface standards, and their related
25398 (home-page "https://geopython.github.io/OWSLib/")
25399 (license license:bsd-3)))
25401 (define-public python-docusign-esign
25403 (name "python-docusign-esign")
25407 (uri (pypi-uri "docusign_esign" version))
25410 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
25411 (build-system python-build-system)
25412 ;; Testing requires undocumented setup changes, and so testing is disabled here.
25413 (arguments `(#:tests? #f))
25415 (list python-certifi
25420 python-cryptography
25422 (synopsis "DocuSign Python Client")
25423 (description "The Official DocuSign Python Client Library used to interact
25424 with the eSign REST API. Send, sign, and approve documents using this client.")
25425 (home-page "https://www.docusign.com/devcenter")
25426 (license license:expat)))
25428 (define-public python-xattr
25430 (name "python-xattr")
25435 (uri (pypi-uri "xattr" version))
25438 "0ipkfblyvp5hylahjkw9zss1ii9xnwjypr3b3ncv989szcg7xjq9"))))
25439 (build-system python-build-system)
25441 (list python-cffi))
25442 (home-page "https://github.com/xattr/xattr")
25444 "Python wrapper for extended file system attributes")
25445 (description "This package provides a Python wrapper for using extended
25446 file system attributes. Extended attributes extend the basic attributes of files
25447 and directories in the file system. They are stored as name:data pairs
25448 associated with file system objects (files, directories, symlinks, etc).")
25449 (license license:expat)))
25451 (define-public python-json-logger
25453 (name "python-json-logger")
25458 (uri (pypi-uri "python-json-logger" version))
25461 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
25462 (build-system python-build-system)
25464 "https://github.com/madzak/python-json-logger")
25465 (synopsis "JSON log formatter in Python")
25466 (description "This library allows standard Python logging to output log data
25467 as JSON objects. With JSON we can make our logs more readable by machines and
25468 we can stop writing custom parsers for syslog-type records.")
25469 (license license:bsd-3)))
25471 (define-public python-daiquiri
25473 (name "python-daiquiri")
25478 (uri (pypi-uri "daiquiri" version))
25481 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
25482 (build-system python-build-system)
25484 (list python-json-logger))
25486 (list python-mock python-pytest python-setuptools-scm python-six))
25487 (home-page "https://github.com/jd/daiquiri")
25489 "Library to configure Python logging easily")
25490 (description "The daiquiri library provides an easy way to configure
25491 logging in Python. It also provides some custom formatters and handlers.")
25492 (license license:asl2.0)))
25494 (define-public python-pifpaf
25496 (name "python-pifpaf")
25501 (uri (pypi-uri "pifpaf" version))
25504 "19bdmxldc2m570isl7hbqgbb20si4sin7pi5fw8sv9py8dyv2s4n"))))
25505 (build-system python-build-system)
25508 (modify-phases %standard-phases
25511 (invoke "python" "setup.py" "testr" "--slowest"
25512 "--testr-args=until-failure"))))))
25522 (list python-mock python-os-testr python-requests
25523 python-testrepository python-testtools))
25524 (home-page "https://github.com/jd/pifpaf")
25525 (synopsis "Tools and fixtures to manage daemons for testing in Python")
25526 (description "Pifpaf is a suite of fixtures and a command-line tool that
25527 starts and stops daemons for a quick throw-away usage. This is typically
25528 useful when needing these daemons to run integration testing. It originally
25529 evolved from its precursor @code{overtest}.")
25530 (license license:asl2.0)))
25532 (define-public python-pytest-check-links
25534 (name "python-pytest-check-links")
25539 ;; URI uses underscores
25540 (uri (pypi-uri "pytest_check_links" version))
25543 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
25544 (build-system python-build-system)
25546 (list python-docutils
25553 (list python-pbr-minimal))
25554 (home-page "https://github.com/minrk/pytest-check-links")
25555 (synopsis "Check links in files")
25556 (description "This package provides a pytest plugin that checks URLs for
25557 HTML-containing files.")
25558 (license license:bsd-3)))
25560 (define-public python-json5
25562 (name "python-json5")
25566 ;; sample.json5 is missing from PyPi source tarball
25568 (uri (git-reference
25569 (url "https://github.com/dpranke/pyjson5")
25570 (commit (string-append "v" version))))
25571 (file-name (git-file-name name version))
25573 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
25574 (build-system python-build-system)
25575 (home-page "https://github.com/dpranke/pyjson5")
25577 "Python implementation of the JSON5 data format")
25579 "JSON5 extends the JSON data interchange format to make it slightly more
25580 usable as a configuration language. This Python package implements parsing and
25581 dumping of JSON5 data structures.")
25582 (license license:asl2.0)))
25584 (define-public python-freetype-py
25586 (name "python-freetype-py")
25591 (uri (pypi-uri "freetype-py" version ".zip"))
25593 (base32 "1l55wzy21jmdayjna29ahzxrf2fp68580978rs6kap1a4zilrdpr"))))
25594 (build-system python-build-system)
25596 (list python-setuptools-scm
25598 (inputs (list freetype))
25601 ;; Note: the pypi archive does not contain tests, but running the check
25602 ;; phase will at least test whether the module loads correctly.
25603 (modify-phases %standard-phases
25604 (add-before 'build 'embed-library-reference
25605 (lambda* (#:key inputs #:allow-other-keys)
25606 (substitute* "freetype/raw.py"
25607 (("^(filename = ).*" _ >)
25608 (string-append > "\"" (search-input-file inputs "/lib/libfreetype.so")
25610 (home-page "https://github.com/rougier/freetype-py")
25611 (synopsis "Freetype python bindings")
25612 (description "Freetype Python provides bindings for the FreeType
25613 library. Only the high-level API is bound.")
25614 (license license:bsd-3)))
25616 (define-public python-frozendict
25618 (name "python-frozendict")
25623 (uri (pypi-uri "frozendict" version))
25625 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
25626 (build-system python-build-system)
25627 (home-page "https://github.com/slezica/python-frozendict")
25628 (synopsis "Simple immutable mapping for Python")
25630 "@dfn{frozendict} is an immutable wrapper around dictionaries that
25631 implements the complete mapping interface. It can be used as a drop-in
25632 replacement for dictionaries where immutability is desired.")
25633 (license license:expat)))
25635 (define-public python-unpaddedbase64
25637 (name "python-unpaddedbase64")
25642 (uri (pypi-uri "unpaddedbase64" version))
25644 (base32 "01ghlmw63fgslwj8j74vkpf1kqvr7a4agm6nyn89vqwx106ccwvj"))))
25645 (build-system python-build-system)
25648 (modify-phases %standard-phases
25650 (lambda* (#:key inputs tests? #:allow-other-keys)
25652 (copy-recursively (string-append
25653 (assoc-ref inputs "tests") "/tests")
25655 (invoke "python" "-m" "pytest" "-vv")))))))
25657 `(("python-pytest" ,python-pytest)
25659 ;; The release on pypi comes without tests. We can't build from this
25660 ;; checkout, though, because installation requires an invocation of
25664 (uri (git-reference
25665 (url "https://github.com/matrix-org/python-unpaddedbase64")
25666 (commit (string-append "v" version))))
25667 (file-name (git-file-name name version))
25670 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))))
25671 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
25672 (synopsis "Encode and decode Base64 without “=” padding")
25674 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
25675 using “=” characters. However this conveys no benefit so many protocols
25676 choose to use Base64 without the “=” padding.")
25677 (license license:asl2.0)))
25679 (define-public python-py-cpuinfo
25680 ;; This is the first commit where riscv64-linux support is available.
25681 ;; We can move back to pypi releases with the next release.
25682 (let ((commit "4d6987e5c30f2ebacb20781892c01329042cce60")
25685 (name "python-py-cpuinfo")
25686 (version (git-version "8.0.0" revision commit))
25690 (uri (git-reference
25691 (url "https://github.com/workhorsy/py-cpuinfo")
25693 (file-name (git-file-name name version))
25696 "0h5wi1bfcqqr1x3j1pa7dmkx7siprsyksbsy80fl2sdrrgpji0b0"))))
25697 (build-system python-build-system)
25698 (home-page "https://github.com/workhorsy/py-cpuinfo")
25699 (synopsis "Get CPU info with Python")
25701 "This Python module returns the CPU info by using the best sources of
25702 information for your operating system.")
25703 (license license:expat))))
25705 (define-public python-canonicaljson
25707 (name "python-canonicaljson")
25712 (uri (pypi-uri "canonicaljson" version))
25714 (base32 "0c86g0vvzdcg3nrcsqnbzlfhpprc2i894p8i14hska56yl27d6w9"))))
25715 (build-system python-build-system)
25717 (list python-six python-frozendict python-simplejson))
25718 (home-page "https://github.com/matrix-org/python-canonicaljson")
25719 (synopsis "Canonical JSON")
25721 "Deterministically encode JSON.
25724 @item Encodes objects and arrays as RFC 7159 JSON.
25725 @item Sorts object keys so that you get the same result each time.
25726 @item Has no insignificant whitespace to make the output as small as possible.
25727 @item Escapes only the characters that must be escaped, U+0000 to
25728 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
25729 @item Uses the shortest escape sequence for each escaped character.
25730 @item Encodes the JSON as UTF-8.
25731 @item Can encode frozendict immutable dictionaries.
25733 (license license:asl2.0)))
25735 (define-public python-signedjson
25737 (name "python-signedjson")
25742 (uri (pypi-uri "signedjson" version))
25744 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
25745 (build-system python-build-system)
25747 (list python-canonicaljson python-importlib-metadata python-pynacl
25748 python-typing-extensions python-unpaddedbase64))
25750 (list python-setuptools-scm))
25751 (home-page "https://github.com/matrix-org/python-signedjson")
25752 (synopsis "Sign JSON objects with ED25519 signatures")
25754 "Sign JSON objects with ED25519 signatures.
25757 @item More than one entity can sign the same object.
25758 @item Each entity can sign the object with more than one key making it easier to
25760 @item ED25519 can be replaced with a different algorithm.
25761 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
25764 (license license:asl2.0)))
25766 (define-public python-daemonize
25768 (name "python-daemonize")
25773 (uri (pypi-uri "daemonize" version))
25775 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
25776 (build-system python-build-system)
25777 (home-page "https://github.com/thesharp/daemonize")
25778 (synopsis "Library for writing system daemons in Python")
25779 (description "Daemonize is a library for writing system daemons in Python.")
25780 (license license:expat)))
25782 (define-public python-pymacaroons
25784 (name "python-pymacaroons")
25789 (uri (pypi-uri "pymacaroons" version))
25791 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
25792 (build-system python-build-system)
25794 (list python-six python-pynacl))
25795 (home-page "https://github.com/ecordell/pymacaroons")
25796 (synopsis "Python Macaroon Library")
25798 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
25799 tokens, macaroons embed caveats that define specific authorization
25800 requirements for the target service, the service that issued the root macaroon
25801 and which is capable of verifying the integrity of macaroons it receives.
25803 Macaroons allow for delegation and attenuation of authorization. They are
25804 simple and fast to verify, and decouple authorization policy from the
25805 enforcement of that policy.")
25806 (license license:expat)))
25808 (define-public python-ldap3
25810 (name "python-ldap3")
25812 (home-page "https://github.com/cannatag/ldap3")
25816 (uri (git-reference (url home-page)
25817 (commit (string-append "v" version))))
25818 (file-name (git-file-name name version))
25820 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
25821 (build-system python-build-system)
25823 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
25824 #:phases (modify-phases %standard-phases
25826 (lambda* (#:key tests? #:allow-other-keys)
25828 (invoke "nosetests" "-s" "test"))
25831 (list python-nose))
25833 (list python-gssapi python-pyasn1))
25834 (synopsis "Python LDAP client")
25836 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
25838 (license license:lgpl3+)))
25840 (define-public python-boltons
25842 (name "python-boltons")
25847 (uri (pypi-uri "boltons" version))
25850 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
25851 (build-system python-build-system)
25852 (home-page "https://github.com/mahmoud/boltons")
25853 (synopsis "Extensions to the Python standard library")
25855 "Boltons is a set of over 230 pure-Python utilities in the same spirit
25856 as — and yet conspicuously missing from — the standard library, including:
25859 @item Atomic file saving, bolted on with fileutils
25860 @item A highly-optimized OrderedMultiDict, in dictutils
25861 @item Two types of PriorityQueue, in queueutils
25862 @item Chunked and windowed iteration, in iterutils
25863 @item Recursive data structure iteration and merging, with iterutils.remap
25864 @item Exponential backoff functionality, including jitter, through
25866 @item A full-featured TracebackInfo type, for representing stack traces, in
25869 (license license:bsd-3)))
25871 (define-public python-eliot
25873 (name "python-eliot")
25878 (uri (pypi-uri "eliot" version))
25880 (base32 "1xzzhsjrrw430dc84vamf683bwp9i0nr86xf2iav6yla615ijq2p"))))
25881 (build-system python-build-system)
25884 (modify-phases %standard-phases
25885 (add-after 'unpack 'remove-journald-support
25887 (for-each delete-file
25888 '("eliot/tests/test_journald.py"
25889 "eliot/journald.py"))
25891 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
25892 ;; remove command-line tool's tests. TODO eliot-prettyprint should
25893 ;; be installed and these tests should pass.
25895 (delete-file "eliot/tests/test_prettyprint.py")
25897 (add-after 'remove-eliot-prettyprint-tests 'remove-failing-tests
25899 ;; These tests started to fail after updating python-pandas to
25900 ;; 1.3.3 and python-dask to 2021.9.1.
25901 (substitute* "eliot/tests/test_validation.py"
25902 (("test_omitLoggerFromActionType")
25903 "_test_omitLoggerFromActionType")
25904 (("test_logCallsDefaultLoggerWrite")
25905 "_test_logCallsDefaultLoggerWrite"))
25908 (list python-boltons python-pyrsistent python-six
25909 python-zope-interface))
25919 python-sphinx-rtd-theme
25923 (home-page "https://github.com/itamarst/eliot/")
25924 (synopsis "Eliot: the logging system that tells you why it happened")
25926 "@dfn{eliot} is a Python logging system that outputs causal chains of
25927 actions: actions can spawn other actions, and eventually they either succeed
25928 or fail. The resulting logs tell you the story of what your software did: what
25929 happened, and what caused it.")
25930 (license license:asl2.0)))
25932 (define-public python-pem
25934 (name "python-pem")
25939 (uri (pypi-uri "pem" version))
25942 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
25943 (build-system python-build-system)
25945 (list python-certifi
25952 (home-page "https://pem.readthedocs.io/")
25953 (synopsis "Easy PEM file parsing in Python")
25955 "This package provides a Python module for parsing and splitting PEM files.")
25956 (license license:expat)))
25958 (define-public python-txsni
25959 ;; We need a few commits on top of 0.1.9 for compatibility with newer
25960 ;; Python and OpenSSL.
25961 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
25964 (name "python-txsni")
25965 (version (git-version "0.1.9" revision commit))
25966 (home-page "https://github.com/glyph/txsni")
25970 (uri (git-reference (url home-page) (commit commit)))
25971 (file-name (git-file-name name version))
25974 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
25975 (build-system python-build-system)
25977 (list python-pyopenssl python-service-identity python-twisted))
25978 (synopsis "Run TLS servers with Twisted")
25980 "This package provides an easy-to-use SNI endpoint for use
25981 with the Twisted web framework.")
25982 (license license:expat))))
25984 (define-public python-txacme
25986 (name "python-txacme")
25991 (uri (pypi-uri "txacme" version))
25993 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
25994 (build-system python-build-system)
26005 (list python-fixtures
26008 python-service-identity
26009 python-testrepository
26010 python-testscenarios
26012 (home-page "https://github.com/twisted/txacme")
26013 (synopsis "Twisted implexmentation of the ACME protocol")
26015 "ACME is Automatic Certificate Management Environment, a protocol that
26016 allows clients and certificate authorities to automate verification and
26017 certificate issuance. The ACME protocol is used by the free Let's Encrypt
26018 Certificate Authority.
26020 txacme is an implementation of the protocol for Twisted, the event-driven
26021 networking engine for Python.")
26022 (license license:expat)))
26024 (define-public python-pysaml2
26026 (name "python-pysaml2")
26031 (uri (pypi-uri "pysaml2" version))
26034 "1xk2x0slz1f8cqv7vn77qx99xfd1mshhswiwrljk9m72w2m9iivd"))))
26035 (build-system python-build-system)
26037 (list python-cryptography
26040 python-importlib-resources
26046 (home-page "https://idpy.org")
26047 (synopsis "Python implementation of SAML Version 2 Standard")
26049 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
26050 It contains all necessary pieces for building a SAML2 service provider or
26051 an identity provider. The distribution contains examples of both.
26053 This package was originally written to work in a WSGI environment, but
26054 there are extensions that allow you to use it with other frameworks.")
26055 (license license:asl2.0)))
26057 (define-public python-click-plugins
26059 (name "python-click-plugins")
26064 (uri (pypi-uri "click-plugins" version))
26066 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
26067 (build-system python-build-system)
26069 (list python-pytest))
26071 (list python-click))
26072 (synopsis "Extension for Click to register external CLI commands")
26073 (description "This package provides n extension module for Click to
26074 register external CLI commands via setuptools entry-points.")
26075 (home-page "https://github.com/click-contrib/click-plugins")
26076 (license license:bsd-3)))
26078 (define-public python-diceware
26080 (name "python-diceware")
26085 (uri (pypi-uri "diceware" version))
26088 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
26089 (build-system python-build-system)
26091 (list python-coverage python-pytest python-pytest-runner))
26092 (home-page "https://github.com/ulif/diceware/")
26093 (synopsis "Generates memorable passphrases")
26094 (description "This package generates passphrases by concatenating words
26095 randomly picked from wordlists. It supports several sources of
26096 randomness (including real life dice) and different wordlists (including
26097 cryptographically signed ones).")
26098 (license license:gpl3+)))
26100 (define-public python-dictdiffer
26102 (name "python-dictdiffer")
26106 (uri (pypi-uri "dictdiffer" version))
26109 "0y3mk74qm2q9hsm37892i1wzn8bbdrvbs4nmnvqwq4z6pxgwzfhp"))))
26110 (build-system python-build-system)
26112 ;; XXX: The PyPI tarball lacks tests and the git repository
26113 ;; fails to determine version.
26116 (list python-pytest-runner python-setuptools-scm))
26117 (home-page "https://github.com/inveniosoftware/dictdiffer")
26118 (synopsis "Diff and patch Python dictionary objects")
26120 "Dictdiffer is a Python module that helps you to diff and patch
26122 (license license:expat)))
26124 (define-public python-dictpath
26126 (name "python-dictpath")
26131 (uri (pypi-uri "dictpath" version))
26133 (base32 "1n4hq4wbgaw59bbb16nhkgg5wk8sl4iw940vjrgx4xmifqxxw73m"))))
26134 (build-system python-build-system)
26135 (native-inputs (list python-pytest python-pytest-cov python-pytest-flake8))
26136 (home-page "https://github.com/p1c2u/pathable")
26137 (synopsis "Object-oriented path library for Python")
26138 (description "This object-oriented dictionary path Python library enables
26139 traversing resources like paths or accessing resources on demand with separate
26141 (license license:asl2.0)))
26143 (define-public pyzo
26150 (uri (git-reference
26151 (url "https://github.com/pyzo/pyzo.git")
26152 (commit (string-append "v" version))))
26153 (file-name (git-file-name name version))
26156 "0v6rgp52bf9za2spxx9c1yc6wmskvlsj81iw0gipjy7y8vpypgn2"))))
26157 (build-system python-build-system)
26160 (modify-phases %standard-phases
26161 (add-before 'check 'fix-home-directory
26163 ;; Tests fail with "Permission denied: '/homeless-shelter'".
26164 (setenv "HOME" "/tmp"))))
26165 ;; Tests fail with "Uncaught Python exception: python: undefined
26166 ;; symbol: objc_getClass".
26169 (list python-pyqt))
26170 (home-page "https://pyzo.org")
26172 "Python IDE for scientific computing")
26174 "Pyzo is a Python IDE focused on interactivity and introspection,
26175 which makes it very suitable for scientific computing. Its practical
26176 design is aimed at simplicity and efficiency.
26178 It consists of two main components, the editor and the shell, and uses
26179 a set of pluggable tools to help the programmer in various ways. Some
26180 example tools are source structure, project manager, interactive help,
26182 (license license:bsd-2)))
26184 (define-public python-osc
26186 (name "python-osc")
26191 (uri (pypi-uri "python-osc" version))
26194 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
26195 (build-system python-build-system)
26196 (home-page "https://github.com/attwad/python-osc")
26197 (synopsis "Open Sound Control server and client implementations")
26199 "@code{python-osc} is a pure Python library with no external
26200 dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
26201 Open Sound Control 1.0} specification.")
26202 (license license:unlicense)))
26204 (define-public python-voluptuous
26206 (name "python-voluptuous")
26211 (uri (pypi-uri "voluptuous" version))
26214 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
26215 (build-system python-build-system)
26217 (list python-nose))
26218 (home-page "https://github.com/alecthomas/voluptuous")
26219 (synopsis "Python data validation library")
26221 "Voluptuous is a Python data validation library. It is primarily
26222 intended for validating data coming into Python as JSON, YAML, etc.")
26223 (license license:bsd-3)))
26225 (define-public python-cmd2
26227 (name "python-cmd2")
26232 (uri (pypi-uri "cmd2" version))
26235 "0h1naik558qh48gx2iyy0a0khvw5fz0in69y84mbrhsm9nq7w3bm"))))
26236 (build-system python-build-system)
26239 (modify-phases %standard-phases
26241 (lambda* (#:key tests? #:allow-other-keys)
26243 (invoke "pytest" "-vv" "-k"
26244 ;; These tests fail because no EDITOR is in PATH.
26245 "not test_find_editor_not_specified \
26246 and not test_transcript")
26247 (format #t "test suite not run~%")))))))
26249 (list python-attrs python-colorama python-pyperclip python-wcwidth))
26251 (list python-invoke
26256 python-setuptools-scm))
26257 (home-page "https://github.com/python-cmd2/cmd2")
26258 (synopsis "Tool for building interactive command line applications")
26260 "Cmd2 is a tool for building interactive command line applications in
26261 Python. Its goal is to make it quick and easy for developers to build
26262 feature-rich and user-friendly interactive command line applications. It
26263 provides a simple API which is an extension of Python's built-in @code{cmd}
26264 module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
26265 make your life easier and eliminates much of the boilerplate code which would
26266 be necessary when using @code{cmd}.")
26267 (license license:expat)))
26269 (define-public python-pytidylib
26271 (name "python-pytidylib")
26275 (uri (pypi-uri "pytidylib" version))
26278 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
26279 (build-system python-build-system)
26282 (modify-phases %standard-phases
26283 (add-before 'build 'qualify-libtidy
26284 (lambda* (#:key inputs #:allow-other-keys)
26285 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
26286 (substitute* "tidylib/tidy.py"
26287 (("ctypes\\.util\\.find_library\\('tidy'\\)")
26288 (format #f "'~a'" libtidy)))
26290 (inputs (list tidy))
26291 (home-page "https://github.com/countergram/pytidylib")
26292 (synopsis "Python wrapper for HTML Tidy library")
26294 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
26295 allows you, from Python code, to “fix” invalid (X)HTML markup.")
26296 (license license:expat)))
26298 (define-public python-mujson
26300 (name "python-mujson")
26305 (uri (pypi-uri "mujson" version))
26308 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
26309 (build-system python-build-system)
26310 (home-page "https://github.com/mattgiles/mujson")
26311 (synopsis "Use the fastest JSON functions available at import time")
26312 (description "This package selects the fastest JSON functions available
26314 (license license:expat)))
26316 (define-public python-bashlex
26318 (name "python-bashlex")
26323 (uri (pypi-uri "bashlex" version))
26326 "1z9g96fgsfpdwawp4sb5x6hbdhmda7kgmcrqlf9xx4bs1f8f14js"))))
26327 (build-system python-build-system)
26330 (modify-phases %standard-phases
26331 (add-before 'build 'pregenerate-yacc-tables
26333 ;; parser.py caches tables, which attempts to write to site lib
26334 ;; see https://github.com/idank/bashlex/issues/51
26335 (invoke "python" "-c" "import bashlex"))))))
26337 "https://github.com/idank/bashlex")
26338 (synopsis "Python parser for bash")
26339 (description "@code{bashlex} is a Python port of the parser used
26340 internally by GNU bash.
26342 For the most part it's transliterated from C, the major differences are:
26345 @item it does not execute anything
26346 @item it is reentrant
26347 @item it generates a complete AST
26350 (license license:gpl3+)))
26352 (define-public python-jinxed
26354 (name "python-jinxed")
26359 (uri (pypi-uri "jinxed" version))
26362 "1n7vl03rhjd0xhjgbjlh8x9f8yfbhamcwkgvs4jg7g5qj8f0wk89"))))
26363 (build-system python-build-system)
26366 (modify-phases %standard-phases
26367 (add-before 'check 'set-environment-variables
26368 (lambda* (#:key inputs #:allow-other-keys)
26369 (let ((ncurses (assoc-ref inputs "ncurses")))
26370 (setenv "TERM" "LINUX")
26371 (setenv "TERMINFO" (string-append ncurses "/share/terminfo"))
26373 #:tests? #f)) ; _curses.error: setupterm: could not find terminal
26376 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
26377 (synopsis "Jinxed Terminal Library")
26379 "Jinxed is an implementation of a subset of the Python curses library.")
26380 (license license:mpl2.0)))
26382 (define-public python-svgutils
26384 (name "python-svgutils")
26389 (uri (pypi-uri "svgutils" version))
26392 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
26393 (build-system python-build-system)
26395 (list python-lxml))
26396 (home-page "https://svgutils.readthedocs.io")
26397 (synopsis "Python SVG editor")
26398 (description "This is an utility package that helps with editing and
26399 concatenating SVG files. It is especially directed at scientists preparing
26400 final figures for submission to journals. So far it supports arbitrary
26401 placement and scaling of SVG figures and adding markers, such as labels.")
26402 (license license:expat)))
26404 (define-public python-blessed
26406 (name "python-blessed")
26411 (uri (pypi-uri "blessed" version))
26414 "1wdj342sk22hfrg0n91x2qnqsbzbiyq9y009v3pxnvfzn9bx0wbn"))
26415 (modules '((guix build utils)))
26418 ;; Don't get hung up on Windows test failures.
26419 (delete-file "blessed/win_terminal.py") #t))))
26420 (build-system python-build-system)
26422 (list python-jinxed python-six python-wcwidth))
26424 (list python-mock python-pytest))
26425 (home-page "https://github.com/jquast/blessed")
26426 (synopsis "Wrapper around terminal capabilities")
26428 "Blessed is a thin, practical wrapper around terminal styling, screen
26429 positioning, and keyboard input.")
26430 (license license:expat)))
26432 (define-public python-readme-renderer
26434 (name "python-readme-renderer")
26439 (uri (pypi-uri "readme_renderer" version))
26442 "1c75h9znffc2lh4j56yg23l5ifj5l8fbdq3kfigi8vbh45zx3d6z"))))
26443 (build-system python-build-system)
26445 '(#:phases (modify-phases %standard-phases
26446 (add-after 'unpack 'loosen-cmarkgfm-dependency
26448 ;; Permit newer versions of cmarkgfm.
26449 (substitute* "setup.py"
26450 (("cmarkgfm>=0\\.5\\.0,<0\\.7\\.0")
26451 "cmarkgfm>=0.5.0"))))
26453 (lambda* (#:key tests? #:allow-other-keys)
26455 ;; The GFM tests fail due to slight differences in the
26456 ;; generated vs expected HTML due to using a more
26457 ;; recent bleach version (see:
26458 ;; https://github.com/pypa/readme_renderer/issues/234).
26459 (invoke "pytest" "-vv" "-k" "not GFM")))))))
26461 (list python-bleach python-docutils python-pygments
26463 ;; Optional dependencies.
26464 python-cmarkgfm)) ;required by postorius
26466 (list python-mock python-pytest))
26467 (home-page "https://github.com/pypa/readme_renderer")
26468 (synopsis "Render README files in Warehouse")
26470 "Readme Renderer is a library that will safely render arbitrary README
26471 files into HTML. It is designed to be used in Warehouse to render the
26472 @code{long_description} for packages. It can handle Markdown, reStructuredText,
26474 (license license:asl2.0)))
26476 (define-public python-lazr-delegates
26478 (name "python-lazr-delegates")
26483 (uri (pypi-uri "lazr.delegates" version))
26486 "1rdnl85j9ayp8n85l0ciip621j9dcziz5qnmv2m7krgwgcn31vfx"))))
26487 (build-system python-build-system)
26490 (modify-phases %standard-phases
26492 (lambda* (#:key tests? #:allow-other-keys)
26493 (when tests? (invoke "nosetests")))))))
26495 (list python-nose))
26497 (list python-zope-interface))
26498 (home-page "https://launchpad.net/lazr.delegates")
26499 (synopsis "Easily write objects that delegate behavior")
26501 "The @code{lazr.delegates} package makes it easy to write objects that
26502 delegate behavior to another object. The new object adds some property or
26503 behavior on to the other object, while still providing the underlying interface,
26504 and delegating behavior.")
26505 (license license:lgpl3)))
26507 (define-public python-lazr-config
26509 (name "python-lazr-config")
26514 (uri (pypi-uri "lazr.config" version))
26517 "1qdbrzl61q7cjhbnxvw9y3frcr935y7diwy15xrwcv9ynvw76jmp"))))
26518 (build-system python-build-system)
26521 (modify-phases %standard-phases
26524 (invoke "python" "-s" "-m" "nose" "-P" "lazr"))))))
26526 (list python-nose))
26528 (list python-lazr-delegates python-zope-interface))
26529 (home-page "https://launchpad.net/lazr.config")
26530 (synopsis "Create configuration schemas and process and validate configurations")
26532 "The LAZR config system is typically used to manage process configuration.
26533 Process configuration is for saying how things change when we run systems on
26534 different machines, or under different circumstances. This system uses ini-like
26535 file format of section, keys, and values. The config file supports inheritance
26536 to minimize duplication of information across files. The format supports schema
26538 (license license:lgpl3)))
26540 (define-public python-flufl-bounce
26542 (name "python-flufl-bounce")
26547 (uri (pypi-uri "flufl.bounce" version))
26550 "0c9qc2l47lyqnpwskp6vvi7m3jqh6hx42v6d35dgxh3fjzmlll15"))))
26551 (build-system python-build-system)
26554 #~(modify-phases %standard-phases
26556 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
26558 (with-directory-excursion
26559 (string-append (site-packages inputs outputs) "/flufl")
26560 (invoke "python" "-m" "nose2" "-v"))))))))
26562 (list python-atpublic python-zope-interface))
26564 (list python-flufl-testing python-nose2))
26565 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
26566 (synopsis "Email bounce detectors")
26567 (description "The @code{flufl.bounce} library provides a set of heuristics
26568 and an API for detecting the original bouncing email addresses from a bounce
26569 message. Many formats found in the wild are supported, as are VERP and
26571 (license (list license:asl2.0
26572 license:lgpl3)))) ; only for setup_headers.py
26574 (define-public python-flufl-i18n
26576 (name "python-flufl-i18n")
26581 (uri (pypi-uri "flufl.i18n" version))
26584 "1flwpn1xhgc957zj3zxw92dhdjh0lsy0hdvzq32dzqpsajfsvq1r"))))
26585 (build-system python-build-system)
26587 (list python-atpublic))
26588 (home-page "https://flufli18n.readthedocs.io")
26589 (synopsis "API for Python internationalization")
26591 "This package provides a high-level, convenient API for managing
26592 internationalization/translation contexts in Python applications. There is a
26593 simple API for single-context applications, such as command line scripts which
26594 only need to translate into one language during the entire course of their
26595 execution. There is a more flexible, but still convenient API for multi-context
26596 applications, such as servers, which may need to switch language contexts for
26598 (license license:asl2.0)))
26600 (define-public python-flufl-lock
26602 (name "python-flufl-lock")
26607 (uri (pypi-uri "flufl.lock" version))
26610 "055941zyma3wfx25jhm8wcsghpv3jc3iwi1gdrdjhzcnfhn62lxq"))))
26611 (build-system python-build-system)
26613 (list python-atpublic python-psutil))
26614 (home-page "https://flufllock.readthedocs.io")
26615 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
26617 "The @dfn{flufl.lock} package provides NFS-safe file locking with
26618 timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
26619 @code{open} system call but uses a lockfile. Lock objects support lock-breaking
26620 and have a maximum lifetime built-in.")
26621 (license (list license:asl2.0
26622 license:lgpl3)))) ; only for setup_helpers.py
26624 (define-public python-flufl-testing
26626 (name "python-flufl-testing")
26631 (uri (pypi-uri "flufl.testing" version))
26634 "1nkm95mhcfhl4x5jgs6y97ikszaxsfh07nyawsih6cxxm6l62641"))))
26635 (build-system python-build-system)
26636 (arguments '(#:tests? #f)) ;no tests
26637 (home-page "https://gitlab.com/warsaw/flufl.testing")
26638 (synopsis "Collection of test tool plugins")
26640 "This package contains a small collection of test tool plugins for
26641 @code{nose2} and @code{flake8}.")
26642 (license license:asl2.0)))
26644 (define-public python-devtools
26646 (name "python-devtools")
26651 (uri (git-reference
26652 (url "https://github.com/samuelcolvin/python-devtools")
26653 (commit (string-append "v" version))))
26654 (file-name (git-file-name name version))
26656 (base32 "15zczdcm90wl54c68f1qjb05nkd5bjsc9xjl3lk4frs7k7wkmrvp"))))
26657 (build-system python-build-system)
26659 (list python-pytest python-pytest-mock))
26661 (list python-pygments))
26663 `(#:phases (modify-phases %standard-phases
26668 (home-page "https://github.com/samuelcolvin/python-devtools")
26669 (synopsis "Debug command and development tools")
26671 "This package provides a debug print command and other development tools.
26672 It adds a simple and readable way to print stuff during development.")
26673 (license license:expat)))
26675 (define-public python-dateparser
26677 (name "python-dateparser")
26682 (uri (pypi-uri "dateparser" version))
26685 "1ypbyqxlk7n6zibk90js3ybz37xmin3kk0i35g8c51bwqpcfyxg8"))))
26686 (build-system python-build-system)
26688 (list python-dateutil python-pytz python-regex python-ruamel.yaml
26691 (list python-mock python-parameterized tzdata-for-tests))
26693 `(;; TODO: Of 23320 tests, 6 fail and 53 error.
26696 (modify-phases %standard-phases
26697 (add-before 'check 'set-check-environment
26698 (lambda* (#:key inputs #:allow-other-keys)
26699 (setenv "TZ" "UTC")
26701 (search-input-directory inputs
26702 "share/zoneinfo")))))))
26703 (home-page "https://github.com/scrapinghub/dateparser")
26705 "Date parsing library designed to parse dates from HTML pages")
26707 "@code{python-dateparser} provides modules to easily parse localized
26708 dates in almost any string formats commonly found on web pages.")
26709 (license license:bsd-3)))
26711 (define-public python-dparse
26713 (name "python-dparse")
26718 (uri (pypi-uri "dparse" version))
26721 "0rzkg3nymsbwdjc0ms2bsajkda02jipwyp3xk97qj71f21lz3dd1"))))
26722 (build-system python-build-system)
26724 (list python-pytest))
26726 (list python-packaging python-pyyaml python-toml))
26727 (home-page "https://github.com/pyupio/dparse")
26728 (synopsis "Parser for Python dependency files")
26729 (description "This package provides a parser for Python dependency files.")
26730 (license license:expat)))
26732 (define-public python-dpath
26734 (name "python-dpath")
26739 (uri (pypi-uri "dpath" version))
26742 "1ymi9ssk7i0mx3mviplf4csfvzibdd6wyj4qzj6s487n9xgnp85y"))))
26743 (build-system python-build-system)
26745 (list python-hypothesis python-mock python-nose))
26748 (modify-phases %standard-phases
26750 (lambda* (#:key inputs outputs #:allow-other-keys)
26751 (add-installed-pythonpath inputs outputs)
26752 ;; This invokation is taken from tox.ini.
26753 (invoke "nosetests" "-d" "-v" "tests/"))))))
26754 (home-page "https://github.com/akesterson/dpath-python")
26755 (synopsis "File-system-like pathing and searching for dictionaries")
26757 "@code{python-dpath} is a library for accessing and searching
26758 dictionaries via /slashed/paths ala xpath.
26760 Basically it lets you glob over a dictionary as if it were a file system. It
26761 allows you to specify globs (ala the bash eglob syntax, through some advanced
26762 fnmatch.fnmatch magic) to access dictionary elements, and provides some
26763 facility for filtering those results.")
26764 (license license:expat)))
26766 (define-public python-safety
26768 (name "python-safety")
26773 (uri (pypi-uri "safety" version))
26776 "1j801xsxfzavjbzhhc934awvnk1b7jc0qsw3jp3ys0241mlj1gr3"))))
26777 (build-system python-build-system)
26780 (modify-phases %standard-phases
26781 (add-after 'unpack 'disable-tests
26783 (substitute* "tests/test_safety.py"
26784 ;; requires network
26785 (("def test_check_live") "def _test_check_live"))
26788 (list python-click python-dparse python-packaging python-requests))
26789 (home-page "https://github.com/pyupio/safety")
26790 (synopsis "Check installed dependencies for known vulnerabilities")
26791 (description "Safety checks installed dependencies for known vulnerabilities.
26792 By default it uses the open Python vulnerability database Safety DB.")
26793 (license license:expat)))
26795 (define-public python-pypandoc
26797 (name "python-pypandoc")
26802 (uri (pypi-uri "pypandoc" version))
26805 "149basv4pvzg9zm74cjz68x8s2n5fykyj7prgysb0qfmja73r83f"))))
26806 (build-system python-build-system)
26810 `(("wheel" ,python-wheel)))
26812 `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
26814 texlive-generic-iftex
26818 texlive-xcolor)))))
26821 (modify-phases %standard-phases
26822 (add-before 'check 'disable-tests
26824 ;; Disable test requiring network access
26825 (substitute* "tests.py"
26826 (("test_basic_conversion_from_http_url")
26827 "skip_test_basic_conversion_from_http_url"))
26829 (home-page "https://github.com/bebraw/pypandoc")
26830 (synopsis "Python wrapper for pandoc")
26831 (description "pypandoc is a thin Python wrapper around pandoc
26832 and pandoc-citeproc.")
26833 (license license:expat)))
26835 (define-public python-rnc2rng
26837 (name "python-rnc2rng")
26842 (uri (pypi-uri "rnc2rng" version))
26845 "1kmp3iwxxyzjsd47j2sprd47ihhkwhb3yydih3af5bbfq0ibh1w8"))))
26846 (build-system python-build-system)
26848 (list python-rply))
26850 `(#:phases (modify-phases %standard-phases
26853 (invoke "python" "test.py"))))))
26854 (home-page "https://github.com/djc/rnc2rng")
26855 (synopsis "Convert RELAX NG Compact to regular syntax")
26857 "This package provides the @command{rnc2rng} command-line tool as well as
26858 a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
26859 equivalent schemata in the XML-based default RELAX NG syntax.")
26860 (license license:expat)))
26862 (define-public python-telethon
26864 (name "python-telethon")
26869 (uri (git-reference
26870 (url "https://github.com/LonamiWebs/Telethon")
26871 (commit (string-append "v" version))))
26872 (file-name (git-file-name name version))
26874 (base32 "0l9fhdrq576vllgi9aam45xzw5xi6jhgdv5zz8i4ygssdp7cm8jl"))))
26875 (build-system python-build-system)
26878 (modify-phases %standard-phases
26880 (lambda* (#:key tests? #:allow-other-keys)
26882 (invoke "py.test" "-v"))
26885 (list python-rsa python-pyaes))
26887 (list python-pytest python-pytest-asyncio python-pytest-trio))
26888 (home-page "https://docs.telethon.dev")
26889 (synopsis "Full-featured Telegram client library for Python 3")
26890 (description "This library is designed to make it easy to write Python
26891 programs that can interact with Telegram.")
26892 (license license:expat)))
26894 (define-public python-citeproc-py
26896 (name "python-citeproc-py")
26901 (uri (pypi-uri "citeproc-py" version))
26904 "00aaff50jy4j0nakdzq9258z1gzrac9baarli2ymgspj88jg5968"))))
26905 (build-system python-build-system)
26907 (list python-lxml python-rnc2rng))
26909 "https://github.com/brechtm/citeproc-py")
26910 (synopsis "Citations and bibliography formatter")
26912 "Citeproc-py is a CSL processor for Python. It aims to implement the
26913 CSL 1.0.1 specification. citeproc-py can output styled citations and
26914 bibliographies in a number of different output formats. Currently supported
26915 are plain text, reStructuredText and HTML.")
26916 (license license:bsd-2)))
26918 (define-public python-inform
26920 (name "python-inform")
26925 (uri (pypi-uri "inform" version))
26928 "0dvc5klbnbryrvspp45nmlg02g40j7xspcz7lqsm0c0dj0z29zdz"))))
26929 (build-system python-build-system)
26931 `(#:tests? #f)) ; PyPI tarball lacks tests
26933 (list python-hypothesis python-pytest-cov python-pytest-runner))
26935 (list python-arrow python-six))
26936 (home-page "https://inform.readthedocs.io")
26937 (synopsis "Print & logging utilities for communicating with user")
26939 "Inform is designed to display messages from programs that are typically run from
26940 a console. It provides a collection of ‘print’ functions that allow you to simply and
26941 cleanly print different types of messages.")
26942 (license license:gpl3+)))
26944 (define-public python-nestedtext
26946 (name "python-nestedtext")
26951 (uri (pypi-uri "nestedtext" version))
26954 "0xjx863n7yd1xmkwhy48lhmqrmlzgbx3civhk386hvrzyq4sx148"))))
26955 (build-system python-build-system)
26957 `(#:tests? #f)) ; PyPI tarball lacks tests
26959 (list python-inform))
26960 (home-page "https://nestedtext.org")
26961 (synopsis "Human readable and writable data interchange format")
26963 "NestedText is a file format for holding data that is to be entered, edited, or
26964 viewed by people. It allows data to be organized into a nested collection of
26965 dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
26966 without the complexity and risk of YAML and without the syntactic clutter of JSON.
26967 NestedText is both simple and natural. Only a small number of concepts and rules must
26968 be kept in mind when creating it. It is easily created, modified, or viewed with
26969 a text editor and easily understood and used by both programmers and non-programmers.")
26970 (license license:expat))) ; MIT license
26972 (define-public python-nest-asyncio
26974 (name "python-nest-asyncio")
26979 (uri (pypi-uri "nest_asyncio" version))
26982 "0rbdw7lry66yj13hh4w63yzflnapdal1ffl237k8nsa2v4f2jhp4"))))
26983 (build-system python-build-system)
26984 (home-page "https://github.com/erdewit/nest_asyncio")
26985 (synopsis "Patch asyncio to allow nested event loops")
26987 "By design @code{asyncio} does not allow its event loop to be nested.
26988 This presents a practical problem: when in an environment where the event loop
26989 is already running it's impossible to run tasks and wait for the result. This
26990 module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
26991 @code{loop.run_until_complete}.")
26992 (license license:bsd-3)))
26994 (define-public python-simpervisor
26996 (name "python-simpervisor")
27000 ;; Tests not included in release.
27002 (uri (git-reference
27003 (url "https://github.com/yuvipanda/simpervisor")
27004 (commit (string-append "v" version))))
27005 (file-name (git-file-name name version))
27007 (base32 "1brsisx7saf4ic0dih1n5y7rbdbwn1ywv9pl32bch3061r46prvv"))))
27008 (build-system python-build-system)
27010 `(#:tests? #f ; Test suite can't find aiohttp.
27012 (modify-phases %standard-phases
27014 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
27016 (add-installed-pythonpath inputs outputs)
27017 (invoke "pytest" "--maxfail" "3" "--verbose"))
27020 (list python-aiohttp python-pytest python-pytest-asyncio))
27021 (home-page "https://github.com/yuvipanda/simpervisor")
27022 (synopsis "Simple async process supervisor")
27024 "This package provides a simple async process supervisor in Python.")
27025 (license license:bsd-3)))
27027 (define-public python-parallel
27029 (name "python-parallel")
27030 (version "1.6.4.4")
27034 (uri (string-append
27035 "https://www.parallelpython.com/downloads/pp/pp-"
27039 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
27042 (build-system python-build-system)
27043 (arguments '(#:tests? #f)) ; No test suite.
27044 (home-page "https://www.parallelpython.com")
27045 (synopsis "Parallel and distributed programming for Python")
27046 (description "Parallel Python module (PP) provides an easy and efficient
27047 way to create parallel-enabled applications for SMP computers and clusters.
27048 PP module features cross-platform portability and dynamic load balancing.
27049 Thus applications written with PP will parallelize efficiently even on
27050 heterogeneous and multi-platform clusters (including clusters running other
27051 applications with variable CPU loads).")
27052 (license license:bsd-3)))
27054 (define-public python-djvulibre
27056 (name "python-djvulibre")
27061 (uri (pypi-uri "python-djvulibre" version))
27063 (base32 "089smpq29ll0z37lnq26r2f72d31i33xm9fw9pc6hlcsm6nbjbiv"))))
27064 (build-system python-build-system)
27066 (list ghostscript pkg-config python-nose))
27068 (list djvulibre python-cython))
27071 (modify-phases %standard-phases
27072 (add-after 'unpack 'fix-tests
27074 ;; Unit tests try to load the 'dllpath.py' and fail, because it
27075 ;; doesn't make sense on GNU/Linux.
27076 (delete-file "djvu/dllpath.py")
27078 (synopsis "Python bindings for DjVuLibre")
27079 (description "This is a set of Python bindings for the DjVuLibre library.")
27080 (home-page "https://jwilk.net/software/python-djvulibre")
27081 (license license:gpl2)))
27083 (define-public python-versioneer
27085 (name "python-versioneer")
27090 (uri (pypi-uri "versioneer" version))
27093 "084fglxafbzvf1vbkzfajvs9qwnvjwwn8pxql9nrlpyipv5xpwk4"))
27094 (patches (search-patches "python-versioneer-guix-support.patch"))))
27095 (build-system python-build-system)
27097 "https://github.com/python-versioneer/python-versioneer")
27099 "Version-string management for VCS-controlled trees")
27101 "@code{versioneer} is a tool for managing a recorded version number in
27102 distutils-based python projects. The goal is to remove the tedious and
27103 error-prone \"update the embedded version string\" step from your release
27105 (license license:public-domain)))
27107 (define-public python-gamera
27109 (name "python-gamera")
27114 (uri (string-append "https://gamera.informatik.hsnr.de/download/"
27115 "gamera-" version ".tar.gz"))
27117 (base32 "0fhlwbvpm3k54n4aa1y6qd348jqrb54ak9p0ic16drx7f07dsq05"))
27118 (modules '((guix build utils)))
27121 ;; Remove bundled libraries.
27122 (for-each delete-file-recursively
27123 '("src/libpng-1.2.5"
27125 "src/zlib-1.2.8"))))))
27126 (build-system python-build-system)
27129 (modify-phases %standard-phases
27130 (add-after 'unpack 'disable-wx-support
27132 (substitute* "setup.py"
27136 (lambda* (#:key tests? #:allow-other-keys)
27138 ;; Some tests require a writable HOME directory and test
27140 (setenv "HOME" "/tmp")
27141 (mkdir "tests/tmp") ;the code assumes this directory exists
27142 ;; (for-each make-file-writable (find-files "tests"))
27143 (with-directory-excursion "tests"
27144 (invoke "pytest" "-vv"
27145 ;; This test causes gamera/gendoc.py to be loaded,
27146 ;; which fails due to the missing docutils, pygments
27147 ;; and silvercity (very old, unpackaged) libraries.
27148 "--ignore" "test_plugins.py"
27149 ;; This test triggers a segfault (see:
27150 ;; https://github.com/hsnr-gamera/gamera-4/issues/47).
27151 "--ignore" "test_rle.py"))))))))
27152 (native-inputs (list python-pytest))
27153 (inputs (list libpng libtiff zlib))
27154 (synopsis "Framework for building document analysis applications")
27156 "Gamera is a toolkit for building document image recognition systems.")
27157 (home-page "https://gamera.informatik.hsnr.de/")
27158 (license license:gpl2+)))
27160 (define-public python-contextvars
27162 (name "python-contextvars")
27167 (uri (pypi-uri "contextvars" version))
27170 "17n3w8c20kgkgc6khaafdhhlcdj4bzman4paxqsl7harma59137k"))))
27171 (build-system python-build-system)
27173 (list python-immutables))
27175 "https://github.com/MagicStack/contextvars")
27176 (synopsis "PEP 567 Backport")
27177 (description "This package implements a backport of Python 3.7
27178 @code{contextvars} module (see PEP 567) for Python 3.6.")
27179 (license license:asl2.0)))
27181 (define-public python-aiofiles
27183 (name "python-aiofiles")
27188 (uri (pypi-uri "aiofiles" version))
27191 "14m01kjxm2j7zyljjj6xlhlgygcsriymbx730gc5jp9xglaina70"))))
27192 (build-system python-build-system)
27193 (home-page "https://github.com/Tinche/aiofiles")
27194 (synopsis "File support for @code{asyncio}")
27195 (description "@code{python-aiofiles} is a library for handling local
27196 disk files in asyncio applications.")
27197 (license license:asl2.0)))
27199 (define-public python-pyre-extensions
27201 (name "python-pyre-extensions")
27206 (uri (pypi-uri "pyre-extensions" version))
27209 "0c5cbbqrfyjwakdh3kbwxis6mbrbwky1z1fqslgszgpcj4g43q30"))))
27210 (build-system python-build-system)
27212 (list python-typing-extensions python-typing-inspect))
27213 (home-page "https://pyre-check.org")
27215 "Type system extensions for use with @code{python-pyre}")
27217 "@code{python-pyre-extensions} defines extensions to the standard
27218 @code{typing} module that are supported by the Pyre typechecker.")
27219 (license license:expat)))
27221 (define-public python-dataclasses
27223 (name "python-dataclasses")
27228 (uri (pypi-uri "dataclasses" version))
27231 "15sc12nrc7gxwb30vfa6frzdnpmbap9ibi1fr1yrbkra6izhcyc4"))))
27232 (build-system python-build-system)
27234 "https://github.com/ericvsmith/dataclasses")
27236 "Backport of the @code{dataclasses} module for Python 3.6")
27238 "This is an implementation of PEP 557, Data Classes. It is a
27239 backport of the @code{dataclasses} module for Python 3.6.")
27240 (license license:asl2.0)))
27242 (define-public python-pywatchman
27244 (name "python-pywatchman")
27249 (uri (pypi-uri "pywatchman" version))
27252 "1yf2gm20wc3djpb5larxii3l55xxby0il2ns3q0v1byyfnr7w16h"))))
27253 (build-system python-build-system)
27255 `(#:tests? #f)) ;there are none
27257 "https://facebook.github.io/watchman/")
27258 (synopsis "Watchman client for python")
27259 (description "@code{python-pywatchman} is a library to connect and
27260 query Watchman to discover file changes.")
27261 (license license:bsd-3)))
27263 (define-public python-roundrobin
27265 (name "python-roundrobin")
27269 (uri (pypi-uri "roundrobin" version))
27271 (base32 "1akwhvfyi0120zg2xkhfc6jwfkirz5x90yyvw06bndhaaxwcnc5c"))))
27272 (build-system python-build-system)
27273 (arguments '(#:tests? #f)) ;no tests on PyPI and no tags in repo
27274 (home-page "https://github.com/linnik/roundrobin")
27275 (synopsis "Collection of roundrobin utilities")
27277 "This package provides a collection of utilities for round-robin
27278 distribution in Python.")
27279 (license license:expat)))
27281 (define-public python-helpdev
27283 (name "python-helpdev")
27288 (uri (pypi-uri "helpdev" version))
27291 "0gfvj28i82va7c264jl2p4cdsl3lpf9fpb9cyjnis55crfdafqmv"))))
27292 (build-system python-build-system)
27295 (modify-phases %standard-phases
27297 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
27299 (add-installed-pythonpath inputs outputs)
27300 (invoke "pytest" "tests"))
27303 (list python-importlib-metadata))
27305 (list python-pytest))
27306 (home-page "https://gitlab.com/dpizetta/helpdev")
27308 "Extract information about the Python environment easily")
27310 "Helpdev is a library to easily extract information about the Python
27312 (license license:expat)))
27314 (define-public python-logutils
27316 (name "python-logutils")
27321 (uri (pypi-uri "logutils" version))
27324 "10lsi5wv5ysnvf9ya4ncbix6mmipnv5067sf2cglc2f2sljql1dw"))))
27325 (build-system python-build-system)
27326 (home-page "https://bitbucket.org/vinay.sajip/logutils/")
27327 (synopsis "Logging utilities")
27328 (description "This package provides a set of handlers for the Python
27329 standard library logging package. Some of these handlers are out-of-scope
27330 for the standard library, and so they are packaged here. Others are updated
27331 versions which have appeared in recent Python releases, but are usable with
27332 older versions of Python and so are packaged here.")
27333 (license license:bsd-3)))
27335 (define-public python-helper
27337 (name "python-helper")
27341 (uri (pypi-uri "helper" version))
27344 "1d2j64wgbggzv5rhvil10zndp2w78wa5np5w0psj122ws9qr9wsa"))))
27345 (build-system python-build-system)
27347 (list python-mock))
27349 (list python-logutils python-pyyaml))
27350 (home-page "https://github.com/gmr/helper")
27351 (synopsis "Library for writing configurable applications and daemons")
27353 "This package provides procedures for quickly writing configurable
27354 applications and daemons.")
27355 (license license:bsd-3)))
27357 (define-public python-qtsass
27359 (name "python-qtsass")
27363 ;; There are no tests in the PyPI tarball.
27365 (uri (git-reference
27366 (url "https://github.com/spyder-ide/qtsass/")
27367 (commit (string-append "v" version))))
27368 (file-name (git-file-name name version))
27370 (base32 "09s04aa14d8jqbh71clrb5y7vcmkxlp94mwmvzrkxahry3bk03cb"))))
27371 (build-system python-build-system)
27373 `(#:test-target "pytest"
27375 (modify-phases %standard-phases
27376 ;; Tests need to read and write files.
27377 (add-before 'check 'make-git-checkout-writable
27379 (for-each make-file-writable (find-files "."))
27382 (list python-pytest python-pytest-cov python-pytest-runner))
27384 (list python-libsass))
27385 (home-page "https://github.com/spyder-ide/qtsass")
27386 (synopsis "Compile SCSS files to valid Qt stylesheets")
27388 "Besides being used in web development, CSS is also the way to stylize
27389 Qt-based desktop applications. However, Qt's CSS has a few variations that
27390 prevent the direct use of SASS compiler.
27392 The purpose of this tool is to fill the gap between SASS and Qt-CSS by
27393 handling those variations.")
27394 (license license:expat)))
27396 (define-public python-qdarkstyle
27398 (name "python-qdarkstyle")
27403 (uri (pypi-uri "QDarkStyle" version))
27406 "0883vzg35fzpyl1aiijzpfcdfvpq5vi325w0m7xkx7nxplh02fym"))))
27407 (build-system python-build-system)
27409 `(;; Fails unable to detect valid Qt bindings even when
27410 ;; added as native-inputs.
27413 (list python-helpdev python-qtpy))
27415 "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
27417 "Complete dark stylesheet for Python and Qt applications")
27418 (description "QDarkStyle is the most complete dark stylesheet for Python and
27420 (license license:expat)))
27422 (define-public python-bitstring
27424 (name "python-bitstring")
27429 (uri (pypi-uri "bitstring" version))
27432 "0jl6192dwrlm5ybkbh7ywmyaymrc3cmz9y07nm7qdli9n9rfpwzx"))))
27433 (build-system python-build-system)
27436 (modify-phases %standard-phases
27438 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
27440 (add-installed-pythonpath inputs outputs)
27441 (with-directory-excursion "test"
27442 (invoke "pytest")))
27445 (list python-pytest))
27446 (home-page "https://github.com/scott-griffiths/bitstring")
27448 "Simple construction, analysis and modification of binary data")
27450 "Bitstring is a library for simple construction, analysis and modification
27452 (license license:expat)))
27454 (define-public python-confuse
27456 (name "python-confuse")
27461 (uri (pypi-uri "confuse" version))
27464 "0bh2kyj8wd7h9gg4nsvrbykl5ly0f70f0wi3fbm204b1f0fcmywj"))))
27465 (build-system python-build-system)
27467 (list python-pyyaml))
27468 (home-page "https://github.com/beetbox/confuse")
27469 (synopsis "Painless YAML configuration")
27470 (description "Confuse is a configuration library for Python that uses
27471 YAML. It takes care of defaults, overrides, type checking, command-line
27472 integration, human-readable errors, and standard OS-specific locations.")
27473 (license license:expat)))
27475 (define-public python-reflink
27477 (name "python-reflink")
27482 (uri (pypi-uri "reflink" version))
27485 "0fkf3sd958g9hvr3jwlhnhqqzrwxljrc3grsf3yknh94vf13a9f9"))))
27486 (build-system python-build-system)
27488 `(#:tests? #false)) ; almost all tests want to run mkfs.btrfs
27490 (list python-cffi))
27492 (list python-pytest python-pytest-runner))
27493 (home-page "https://gitlab.com/rubdos/pyreflink")
27494 (synopsis "Python wrapper around reflink system call")
27496 "Python reflink wraps around platform specific @code{reflink}
27498 (license license:expat)))
27500 (define-public python-retry
27502 (name "python-retry")
27506 (uri (pypi-uri "retry" version))
27508 (base32 "197v6qrh6858bhzzrjgk2zdqrybppymb1lsvdxnm1i39kfwsigzq"))))
27509 (build-system python-build-system)
27512 #~(modify-phases %standard-phases
27514 (lambda* (#:key tests? #:allow-other-keys)
27515 (when tests? (invoke "pytest" "-vv")))))))
27516 (native-inputs (list python-pbr python-pytest))
27517 (propagated-inputs (list python-decorator python-py))
27518 (home-page "https://github.com/invl/retry")
27519 (synopsis "Retry decorator")
27521 "@code{retry} is an easy to use retry decorator for Python. It can be
27522 used to retry a function a given number of times.")
27523 (license license:asl2.0)))
27525 (define-public python-pivy
27527 (name "python-pivy")
27532 (uri (git-reference
27533 (url "https://github.com/coin3d/pivy")
27535 (file-name (git-file-name name version))
27537 (base32 "0vids7sxk8w5vr73xdnf8xdci71a7syl6cd35aiisppbqyyfmykx"))))
27538 (build-system python-build-system)
27540 `(;; The test suite fails due to an import cycle between 'pivy' and '_coin'
27543 (modify-phases %standard-phases
27544 (add-after 'unpack 'patch-cmake-include-dirs
27546 ;; Patch buildsystem to respect Coin3D include directory
27547 (substitute* "CMakeLists.txt"
27548 (("\\$\\{SoQt_INCLUDE_DIRS}")
27549 "${Coin_INCLUDE_DIR};${SoQt_INCLUDE_DIRS}"))
27554 (list python-wrapper
27561 (home-page "https://github.com/coin3d/pivy")
27562 (synopsis "Python bindings to Coin3D")
27564 "Pivy provides python bindings for Coin, a 3D graphics library with an
27565 Application Programming Interface based on the Open Inventor 2.1 API.")
27566 (license license:isc)))
27568 (define-public python-crayons
27570 (name "python-crayons")
27575 (uri (pypi-uri "crayons" version))
27578 "0gw106k4b6y8mw7pp52awxyplj2bwvwk315k4sywzwh0g1abfcxx"))))
27579 (build-system python-build-system)
27581 (list python-colorama))
27582 (home-page "https://github.com/MasterOdin/crayons")
27583 (synopsis "TextUI colors for Python")
27584 (description "This package gives you colored strings for the terminal.
27585 Crayons automatically wraps a given string in the foreground color and
27586 restores the original state after the string is printed.")
27587 (license license:expat)))
27589 (define-public python-sane
27591 (name "python-sane")
27596 (uri (pypi-uri name version))
27599 "1pi597z94n2mkd821ln52fq0g727n2jxfskf280ip3kf7jw8w294"))))
27600 (build-system python-build-system)
27602 (list python-pytest))
27604 (list sane-backends))
27605 (home-page "https://github.com/python-pillow/Sane")
27606 (synopsis "Python interface to the SANE scanner")
27607 (description "This package provides Python interface to the SANE scanner
27608 and frame grabber interface.")
27609 (license (license:non-copyleft
27610 ;; Yet another variant of the X/MIT license.
27611 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
27613 (define-public python-scikit-build
27615 (name "python-scikit-build")
27620 (uri (pypi-uri "scikit-build" version))
27622 (base32 "1wx1m9vnxnnz59lyaisgyxldp313kciyd4af8lf112vb8vbjy9yk"))))
27623 (build-system python-build-system)
27627 #~(modify-phases %standard-phases
27628 (add-after 'unpack 'patch-cmake-executable
27629 (lambda* (#:key inputs #:allow-other-keys)
27630 (substitute* "skbuild/constants.py"
27631 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
27632 (format #f "~a ~s~%" head
27633 (search-input-file inputs "bin/cmake"))))))
27634 ;; XXX: PEP 517 manual build copied from python-isort.
27637 (setenv "SOURCE_DATE_EPOCH" "315532800")
27638 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
27640 (lambda* (#:key tests? #:allow-other-keys)
27642 ;; These tests attempt to pull dependencies from the Internet.
27643 (delete-file "tests/test_distribution.py")
27644 (delete-file "tests/test_pep518.py")
27645 (invoke "pytest" "-vv"
27646 "-n" (number->string (parallel-job-count))
27647 "-k" (string-append
27648 ;; These tests attempt to write to read-only
27649 ;; Python install directory.
27650 "not test_install_command "
27651 "and not test_test_command "
27652 "and not test_hello_develop "
27653 ;; These sdist-related tests fail for unknown
27655 ;; https://github.com/scikit-build/scikit-build/issues/689).
27656 "and not test_hello_sdist_with_base "
27657 "and not test_manifest_in_sdist "
27658 "and not test_hello_sdist "
27659 "and not test_sdist_with_symlinks "
27660 ;; These are not parallel safe and fail
27661 ;; nondeterministically (see:
27662 ;; https://github.com/scikit-build/scikit-build/issues/711).
27663 "and not test_generator_cleanup "
27664 "and not test_generator_selection ")))))
27667 (let ((whl (car (find-files "dist" "\\.whl$"))))
27668 (invoke "pip" "--no-cache-dir" "--no-input"
27669 "install" "--no-deps" "--prefix" #$output whl)))))))
27671 (list cmake-minimal
27684 python-pytest-virtualenv
27685 python-pytest-xdist
27687 python-setuptools-scm
27690 (list python-distro python-packaging python-wheel))
27691 (home-page "https://github.com/scikit-build/scikit-build")
27692 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
27693 (description "Scikit-build is an improved build system generator for
27694 CPython C/C++/Fortran/Cython extensions. It has support for additional
27695 compilers, build systems, cross compilation, and locating dependencies and
27696 determining their build requirements. The scikit-build package is
27697 fundamentally just glue between the @code{setuptools} Python module and
27699 (license license:expat)))
27701 (define-public python-screenkey
27703 (name "python-screenkey")
27708 (uri (git-reference
27709 (url "https://gitlab.com/screenkey/screenkey")
27710 (commit (string-append "v" version))))
27711 (file-name (git-file-name name version))
27714 "1rfngmkh01g5192pi04r1fm7vsz6hg9k3qd313sn9rl9xkjgp11l"))))
27715 (build-system python-build-system)
27718 (modify-phases %standard-phases
27719 (add-after 'unpack 'fix-dlopen-paths
27720 (lambda* (#:key inputs outputs #:allow-other-keys)
27721 (let* ((x11 (assoc-ref inputs "libx11"))
27722 (xtst (assoc-ref inputs "libxtst")))
27723 (substitute* "Screenkey/xlib.py"
27725 (string-append x11 "/lib/libX11.so.6")))
27726 (substitute* "Screenkey/xlib.py"
27728 (string-append xtst "/lib/libXtst.so.6")))
27730 (add-after 'install 'wrap-screenkey
27731 (lambda* (#:key outputs #:allow-other-keys)
27733 (string-append (assoc-ref outputs "out") "/bin/screenkey")
27734 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
27735 `("GI_TYPELIB_PATH"
27736 ":" prefix (,(getenv "GI_TYPELIB_PATH")))))))))
27738 (list python-distutils-extra
27745 python-setuptools-git
27747 (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
27749 "Screencast tool to display pressed keys")
27751 "Screenkey is a screencast tool to display your keys inspired by
27753 (license license:gpl3+)))
27755 (define-public python-jinja2-cli
27757 (name "python-jinja2-cli")
27762 (uri (pypi-uri "jinja2-cli" version))
27765 "0vikx7v6fbvww6kfrv0k5a24jyv3ak7nindg60906pdd1m9qvkcw"))))
27766 (build-system python-build-system)
27768 (list python-jinja2))
27770 (list python-flake8 python-jinja2 python-pytest))
27771 (home-page "https://github.com/mattrobenolt/jinja2-cli")
27772 (synopsis "Command-line interface to Jinja2")
27774 "This package provides a command-line interface (CLI) to the Jinja2
27776 (license license:bsd-3)))
27778 (define-public python-readability
27780 (name "python-readability")
27785 (uri (pypi-uri "readability" version))
27788 "1b8gq3g2zwvx0aivvdg56cc0bn7xw6f2v6psmxdx9aiipkw0s0zr"))))
27789 (build-system python-build-system)
27791 "https://github.com/andreasvc/readability/")
27793 "Measure the readability of a given text using surface
27796 "This package provides a Python library that is an implementation of
27797 traditional readability measures based on simple surface
27798 characteristics. These measures are basically linear regressions based on the
27799 number of words, syllables, and sentences.")
27800 (license license:asl2.0)))
27802 (define-public python-listparser
27804 (name "python-listparser")
27809 (uri (pypi-uri "listparser" version))
27812 "0hdqs1mmayw1r8yla43hgb4d9y3zqs5483vgf8j9ygczkd2wrq2b"))))
27813 (build-system python-build-system)
27815 "https://github.com/kurtmckee/listparser")
27817 "Parse subscription lists in Python")
27819 "This package provides a Python library that can parse OPML, FOAF, and
27820 iGoogle subscription lists.")
27821 (license license:expat)))
27823 (define-public python-smartypants
27825 (name "python-smartypants")
27829 ;; There's no source tarball for 2.0.1 on PyPI.
27831 (uri (git-reference
27832 (url "https://github.com/leohemsted/smartypants.py")
27833 (commit (string-append "v" version))))
27834 (file-name (git-file-name name version))
27836 (base32 "00p1gnb9pzb3svdq3c5b9b332gsp50wrqqa39gj00m133zadanjp"))))
27837 (build-system python-build-system)
27840 (modify-phases %standard-phases
27842 ;; Its `setup.py test` doesn't report failure with exit status, so
27843 ;; we use `nose` instead.
27845 (invoke "nosetests" "-v" "--exclude=^load_tests$"))))))
27848 (list python-docutils python-nose python-pygments))
27849 (home-page "https://github.com/leohemsted/smartypants.py")
27850 (synopsis "Translate punctuation characters into smart quotes")
27852 "@command{smartpants} can perform the following transformations:
27854 @item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
27855 @item Backticks-style quotes (``like this'') into \"curly\" quote HTML
27857 @item Dashes (-- and ---) into en- and em-dash entities
27858 @item Three consecutive dots (... or . . .) into an ellipsis entity
27860 (license license:bsd-3)))
27862 (define-public python-typogrify
27864 (name "python-typogrify")
27868 (uri (pypi-uri "typogrify" version))
27871 "0f6b2gnnxjbx1fbmkcscc6qjr4hi78kwm1wx4b766ha3va66dr4b"))))
27872 (build-system python-build-system)
27875 (modify-phases %standard-phases
27878 (invoke "nosetests" "-v"))))))
27880 (list python-smartypants))
27883 (list python-nose))
27884 (home-page "https://github.com/mintchaos/typogrify")
27885 (synopsis "Filters to transform text into typographically-improved HTML")
27887 "@code{typogrify} provides a set of custom filters that automatically
27888 apply various transformations to plain text in order to yield
27889 typographically-improved HTML. While often used in conjunction with Jinja and
27890 Django template systems, the filters can be used in any environment.")
27891 (license license:bsd-3)))
27893 (define-public python-ld
27900 (uri (pypi-uri "ld" version))
27903 "1k4ydp5rgkv4985v459kcl06i1igjm1ywvh2vkbi9ck1zyyri1z5"))))
27904 (build-system python-build-system)
27907 (home-page "https://github.com/nir0s/ld")
27908 (synopsis "OS platform information API")
27910 "The ld package provides information about the GNU/Linux distribution it
27911 runs on, such as a reliable machine-readable ID, or version information.")
27912 (license license:asl2.0)))
27914 (define-public python-quicktions
27916 (name "python-quicktions")
27921 (uri (pypi-uri "quicktions" version))
27924 "1px21a6x527i1bsr2p6bbf3jziqpvd1vjkvvzh13gsy4iip0yvzn"))
27925 (modules '((guix build utils)))
27928 ;; This file is generated by Cython.
27929 (delete-file "src/quicktions.c") #t))))
27930 (build-system python-build-system)
27933 (modify-phases %standard-phases
27934 (add-before 'build 'cythonize-sources
27936 (with-directory-excursion "src"
27937 (invoke "cython" "quicktions.pyx"))))
27939 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
27941 (add-installed-pythonpath inputs outputs)
27945 (list python-cython python-pytest))
27946 (home-page "https://github.com/scoder/quicktions")
27947 (synopsis "Fast fractions data type for rational numbers")
27949 "This package provides fast fractions data type for rational numbers. It
27950 is the cythonized version of @code{fractions.Fraction}.")
27951 (license license:psfl)))
27953 (define-public python-pathvalidate
27955 (name "python-pathvalidate")
27960 (uri (pypi-uri "pathvalidate" version))
27962 (base32 "0s14ycjgb44lxr2wg8lrq3b7kybmmrbf7yqz47xrqgn2gr6dk6rw"))))
27963 (build-system python-build-system)
27966 ;; Tests disabled because of circular dependencies.
27967 ;; pathvalidate tests depend on pytest-md-report, which
27968 ;; depends on pathvalidate.
27970 (list python-allpairspy python-click python-faker python-pytest))
27971 (home-page "https://github.com/thombashi/pathvalidate")
27972 (synopsis "Sanitize strings representing paths")
27974 "@code{pathvalidate} is a Python library to sanitize/validate strings
27975 representing paths or filenames.")
27976 (license license:expat)))
27978 (define-public python-escapism
27980 (name "python-escapism")
27985 (uri (pypi-uri "escapism" version))
27988 "1v74243wifcwhj5zkdiispxc9kb1xvnfzilg8bq308pjnkgnn9bk"))))
27989 (build-system python-build-system)
27990 (home-page "https://github.com/minrk/escapism")
27991 (synopsis "Simple, generic library for escaping strings")
27993 "This Python library provides a programming interface to, given a set of
27994 safe characters and an escape character, escape safe strings and unescape the
27996 (license license:expat)))
27998 (define-public python-recommonmark
28000 (name "python-recommonmark")
28005 (uri (pypi-uri "recommonmark" version))
28008 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
28009 (build-system python-build-system)
28011 (list python-commonmark python-docutils python-sphinx))
28013 '(#:phases (modify-phases %standard-phases
28014 (add-after 'unpack 'delete-test-sphinx
28015 (lambda* (#:key outputs #:allow-other-keys)
28016 (let* ((out (assoc-ref outputs "out")))
28017 (delete-file "tests/test_sphinx.py")))))))
28018 (home-page "https://github.com/readthedocs/recommonmark")
28019 (synopsis "Docutils-compatibility bridge to CommonMark")
28021 "This package provides a docutils-compatibility bridge to CommonMark that
28022 lets you write CommonMark inside of Docutils & Sphinx projects.")
28023 (license license:expat)))
28025 (define-public python-pyhull
28027 (name "python-pyhull")
28028 (version "2015.2.1")
28032 (uri (pypi-uri "pyhull" version))
28035 "091sph52c4yk1jlm5w8xidxpzbia9r7s42bnb23q4m4b56ihmzyj"))))
28036 (build-system python-build-system)
28038 (list python-numpy))
28039 (home-page "https://github.com/materialsvirtuallab/pyhull")
28040 (synopsis "Python wrapper to Qhull")
28042 "This package provides a Python wrapper to @uref{http://www.qhull.org/,
28043 Qhull} for the computation of the convex hull, Delaunay triangulation, and
28045 (license license:expat)))
28047 (define-public python-opcodes
28048 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
28049 ;; version number, which is what we use here.
28050 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
28052 (name "python-opcodes")
28053 (version "0.3.14") ;from 'opcodes/__init__.py'
28054 (home-page "https://github.com/Maratyszcza/Opcodes")
28057 (uri (git-reference (url home-page) (commit commit)))
28058 (file-name (git-file-name name version))
28061 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
28062 (build-system python-build-system)
28063 (synopsis "Database of processor instructions and opcodes")
28065 "This project documents instruction sets in a format convenient for
28066 tools development. An instruction set is represented by three files:
28069 @item an XML file that describes instructions;
28070 @item an XSD file that describes the structure of the XML file;
28071 @item a Python module that reads the XML file and represents it as a set of
28075 It currently provides descriptions for most user-mode x86, x86_64, and k1om
28076 instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
28078 (license license:bsd-2))))
28080 (define-public python-peachpy
28081 ;; There is no tag in this repo.
28082 (let ((commit "913d74c35a6b1d330e90bfc055208ce5b06b35a0")
28083 (version "0.2.0") ;from 'peachpy/__init__.py'
28086 (name "python-peachpy")
28087 (version (git-version version revision commit))
28088 (home-page "https://github.com/Maratyszcza/PeachPy")
28091 (uri (git-reference (url home-page) (commit commit)))
28092 (file-name (git-file-name name version))
28095 "1wnqxspxsacw4556q0b9fbw11nhrkgn6gs8g43jdnpa35f3z9kb6"))
28096 (patches (search-patches "python-peachpy-determinism.patch"))))
28097 (build-system python-build-system)
28099 '(#:phases (modify-phases %standard-phases
28101 (lambda* (#:key tests? #:allow-other-keys)
28103 (invoke "nosetests")))))))
28105 (list python-nose python-rednose python-setuptools))
28107 (list python-six python-opcodes))
28108 (synopsis "Efficient assembly code generation in Python")
28110 "PeachPy is a Python framework for writing high-performance assembly kernels.
28111 PeachPy aims to simplify writing optimized assembly kernels while preserving
28112 all optimization opportunities of traditional assembly.
28114 PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
28115 for the Go language tool chain; it adapts to different calling conventions and
28116 application binary interfaces (ABIs); it takes care of register allocation; it
28117 supports x86_64 instructions up to AVX-512 and SHA.")
28118 (license license:bsd-2))))
28120 (define-public python-sgmllib3k
28121 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
28124 (name "python-sgmllib3k")
28126 (git-version "1.0.0" revision commit))
28130 (uri (git-reference
28131 (url "https://github.com/hsoft/sgmllib")
28133 (file-name (git-file-name name version))
28136 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))))
28137 (build-system python-build-system)
28138 (home-page "https://github.com/hsoft/sgmllib")
28139 (synopsis "Python 3 port of sgmllib")
28140 (description "This package provides an unmaintained port of sgmllib to
28141 Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
28142 Generalized Mark-up Language}.")
28143 (license license:bsd-3))))
28145 (define-public python-cwcwidth
28147 (name "python-cwcwidth")
28152 (uri (pypi-uri "cwcwidth" version))
28155 "1azrphpkcyggg38xvkfb9dpc4xmmm90p02kf8dkqd4d6j5w96aj8"))))
28156 (build-system python-build-system)
28158 (list python-cython python-pytest python-setuptools-scm python-toml
28161 "https://github.com/sebastinas/cwcwidth")
28162 (synopsis "Python bindings for wc(s)width")
28163 (description "This package provides bindings for wcwidth and wcswidth
28164 functions defined in POSIX.1-2001 and POSIX.1-2008.")
28165 (license license:expat)))
28167 (define-public python-pyan3
28169 (name "python-pyan3")
28173 ;; Source tarball on PyPI lacks tests.
28175 (uri (git-reference
28176 (url "https://github.com/Technologicat/pyan")
28177 (commit (string-append "v" version))))
28178 (file-name (git-file-name name version))
28181 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
28182 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
28183 "python-pyan3-fix-absolute-path-bug.patch"))))
28184 (build-system python-build-system)
28187 (modify-phases %standard-phases
28189 (lambda* (#:key tests? #:allow-other-keys)
28191 ;; Extend PYTHONPATH so the built package will be found.
28192 (setenv "GUIX_PYTHONPATH"
28193 (string-append (getcwd) ":" (getenv "GUIX_PYTHONPATH")))
28194 (invoke "pytest")))))))
28196 (list python-pytest python-pytest-cov python-wheel))
28198 (list python-jinja2))
28199 (home-page "https://github.com/Technologicat/pyan")
28200 (synopsis "Offline call graph generator for Python 3")
28201 (description "Pyan takes one or more Python source files, performs
28202 a (rather superficial) static analysis, and constructs a directed graph of the
28203 objects in the combined source, and how they define or use each other. The
28204 graph can be output for rendering by GraphViz or yEd.")
28205 (license license:gpl2)))
28207 (define-public python-multipledispatch
28209 (name "python-multipledispatch")
28214 (uri (pypi-uri "multipledispatch" version))
28217 "1slblghfjg9fdi9zpd7gmrkvfbv20nrdgnrymcnbky8bzm8i9ax7"))))
28218 (build-system python-build-system)
28219 (propagated-inputs (list python-six))
28220 (home-page "https://github.com/mrocklin/multipledispatch/")
28221 (synopsis "Multiple dispatch for Python based on pattern matching")
28222 (description "This library provides an efficient mechanism for overloading
28223 function implementations based on the types of the arguments.")
28224 (license license:bsd-3)))
28226 (define-public python-logical-unification
28228 (name "python-logical-unification")
28233 (uri (pypi-uri "logical-unification" version))
28236 "0j57953hi7kg2rl0163vzjzsvzdyjimnklhx6idf5vaqqf1d3p1j"))))
28237 (build-system python-build-system)
28239 (list python-multipledispatch python-toolz))
28240 (home-page "https://github.com/pythological/unification/")
28241 (synopsis "Logical unification in Python for solving symbolic expressions")
28242 (description "This library provides algorithms and data types for solving
28243 symbolic expressions in pure Python using the technique of logical unification.")
28244 (license license:bsd-3)))
28246 (define-public python-cons
28248 (name "python-cons")
28253 (uri (pypi-uri "cons" version))
28256 "0w9giq196wps7mbm47c4shdzs5yvwvqajqzkim2p92i51sm5qgvm"))))
28257 (build-system python-build-system)
28259 (list python-pytest-6 python-toml))
28261 (list python-logical-unification))
28262 (home-page "https://github.com/pythological/python-cons")
28263 (synopsis "Cons cell data structures and related algorithms for Python")
28265 "This library implements algorithms and data structures for Lisp-style
28266 cons cells in Python.")
28267 (license license:lgpl3+)))
28269 (define-public python-etuples
28271 (name "python-etuples")
28276 (uri (pypi-uri "etuples" version))
28279 "0jhfyp177v37rl0i7wqfx7q6s5qkz027hl283d1x8d0vm3w0zqc8"))))
28280 (build-system python-build-system)
28282 (list python-cons python-multipledispatch))
28283 (home-page "https://github.com/pythological/etuples")
28284 (synopsis "S-expressions in Python")
28286 "This library implements eval'able S-expression in Python using tuple-like objects.")
28287 (license license:asl2.0)))
28289 (define-public python-minikanren
28291 (name "python-minikanren")
28296 (uri (git-reference
28297 (url "https://github.com/pythological/kanren")
28298 (commit (string-append "v" version))))
28299 (file-name (git-file-name name version))
28301 (base32 "0g7wfj5hxalwz7k1301nsjqhjpzsif1bj6wjm2x2kavlm2ypv9jc"))))
28302 (build-system python-build-system)
28304 '(#:phases (modify-phases %standard-phases
28306 (lambda* (#:key tests? #:allow-other-keys)
28308 (invoke "python" "-m" "pytest" "-v" "tests/" "kanren/"))
28311 (list python-coveralls
28320 python-pre-commit))
28322 (list python-toolz python-cons python-multipledispatch
28323 python-etuples python-logical-unification))
28324 (home-page "https://github.com/pythological/kanren")
28325 (synopsis "Relational logic programming in pure Python")
28327 "The minikanren library provides an algorithmic core for computer algebra
28328 systems in Python.")
28329 (license license:bsd-3)))
28331 (define-public python-dotenv
28333 (name "python-dotenv")
28338 (uri (pypi-uri "python-dotenv" version))
28340 (base32 "13s9imfd0k4d7b1qy5wfqzw5vyj6rhmcrccsdz1l4g39b55b1qxp"))))
28341 (build-system python-build-system)
28344 (modify-phases %standard-phases
28346 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
28348 (add-installed-pythonpath inputs outputs)
28349 (setenv "PATH" (string-append (getenv "PATH") ":"
28350 (assoc-ref outputs "out") "/bin"))
28351 ;; Skip the ipython tests.
28352 (delete-file "tests/test_ipython.py")
28353 (invoke "python" "-m" "pytest")))))))
28355 (list python-click))
28357 (list python-mock python-pytest python-sh))
28358 (home-page "https://saurabh-kumar.com/python-dotenv/")
28359 (synopsis "Setup environment variables according to .env files")
28361 "This package provides the @code{python-dotenv} Python module to read
28362 key-value pairs from a @code{.env} file and set them as environment variables.")
28363 (license license:bsd-3)))
28365 (define-public python-dotenv-0.13.0
28366 (package (inherit python-dotenv)
28367 (name "python-dotenv")
28372 (uri (pypi-uri "python-dotenv" version))
28375 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))))
28377 (define-public date2name
28378 (let ((commit "6c8f37277e8ec82aa50f90b8921422be30c4e798")
28382 (version (git-version "0.0" revision commit))
28386 (uri (git-reference
28387 (url "https://github.com/novoid/date2name")
28389 (file-name (git-file-name name version))
28392 "1vq96b7n16d932nyfhnzwdwxff0zrqanidmwr4cxj2p67ad9y3w7"))))
28393 (build-system python-build-system)
28395 `(#:tests? #f ; no tests
28397 (modify-phases %standard-phases
28400 (lambda* (#:key outputs #:allow-other-keys)
28401 (let* ((bindir (string-append (assoc-ref outputs "out") "/bin"))
28402 (binary (string-append bindir "/date2name")))
28404 (copy-file "date2name/__init__.py" binary)
28405 (chmod binary #o555)))))))
28406 (synopsis "Handling time-stamps and date-stamps in file names")
28407 (description "By default, date2name gets the modification time of matching
28408 files and directories and adds a datestamp in standard ISO 8601+ format
28409 YYYY-MM-DD at the beginning of the file or directory name.")
28410 (home-page "https://github.com/novoid/date2name")
28411 (license license:gpl3+))))
28413 (define-public python-braintree
28415 (name "python-braintree")
28420 (uri (pypi-uri "braintree" version))
28422 (base32 "19kli85q18p80nsn8fm4ql6axpr7bllfqg5chv2ywhr8zr8bssll"))))
28423 (build-system python-build-system)
28425 (list python-requests))
28427 "https://developers.braintreepayments.com/python/sdk/server/overview")
28428 (synopsis "Braintree Python Library")
28429 (description "The Braintree Python SDK provides integration access to the
28430 Braintree Gateway. Braintree is a US-based payments service provider.")
28431 (license license:expat)))
28433 (define-public python-markuppy
28435 (name "python-markuppy")
28440 (uri (pypi-uri "MarkupPy" version))
28442 (base32 "0pqdmpxbr8iq22b4css2gz5z6s01ddpzyj25x27kgbs2lp0f5phs"))))
28443 (build-system python-build-system)
28444 (home-page "https://github.com/tylerbakke/MarkupPy")
28445 (synopsis "Pythonic HTML/XML generator")
28446 (description "This Python module attempts to make it easier to generate
28447 HTML/XML from a Python program in an intuitive, lightweight, customizable and
28449 (license license:expat)))
28451 (define-public python-tablib
28453 (name "python-tablib")
28458 (uri (pypi-uri "tablib" version))
28460 (base32 "03f1z6jq6rf67gwhbm9ma4rydm8h447a5nh5lcs5l8jg8l4aqg7q"))))
28461 (build-system python-build-system)
28464 (modify-phases %standard-phases
28466 (lambda* (#:key tests? #:allow-other-keys)
28468 (setenv "GUIX_PYTHONPATH"
28469 (string-append (getcwd) "/build/lib:"
28470 (getenv "GUIX_PYTHONPATH")))
28471 (invoke "pytest")))))))
28473 (list python-pandas ;; required for test-suite
28474 python-pytest python-pytest-cov python-setuptools-scm))
28476 (list python-markuppy
28483 (home-page "https://tablib.readthedocs.io")
28484 (synopsis "Format agnostic tabular data library")
28485 (description "@code{tablib} is a format-agnostic tabular dataset library,
28486 written in Python. Supported output formats are Excel (Sets + Books),
28487 JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
28488 TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
28490 @code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
28491 quite huge, this Guix package doesn't depend on pandas. In case, just also
28492 install @code{python-pandas}.")
28493 (license license:expat)))
28495 (define-public python-csb43
28497 (name "python-csb43")
28502 (uri (pypi-uri "csb43" version))
28504 (base32 "0r0csl9npncnkfafg3rg6xr38d1qr0sxvq7wn7mg9bq41hvvh1si"))))
28505 (build-system python-build-system)
28507 (list python-lxml))
28509 (list python-pycountry python-pyyaml python-tablib))
28510 (home-page "https://bitbucket.org/wmj/csb43")
28511 (synopsis "Tools for converting from the Spanish banks' format CSB norm
28513 (description "This package provides tools to convert files in the format
28514 used by multiple Spanish banks (standard 43 of the Spanish Banking Council
28515 [CSB43] / Spanish Banking Association [AEB43]) to other formats.
28517 Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
28518 spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
28519 (license license:lgpl3)))
28521 (define-public python-febelfin-coda
28523 (name "python-febelfin-coda")
28528 (uri (pypi-uri "febelfin-coda" version))
28530 (base32 "1isnf87gxlvfbmackv7b2c978vmnj7ij0v4svhyjl8pbb9hwjsvm"))))
28531 (build-system python-build-system)
28532 (home-page "https://coda.b2ck.com/")
28533 (synopsis "Module to parse Belgian CODA files")
28534 (description "This package provides a module to parse Coded statement of
28535 account (CODA) files as defined be the Belgian Febelfin bank standard.")
28536 (license license:bsd-3)))
28538 (define-public python-ofxparse
28540 (name "python-ofxparse")
28545 (uri (pypi-uri "ofxparse" version))
28547 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
28548 (build-system python-build-system)
28551 (modify-phases %standard-phases
28553 (lambda* (#:key tests? #:allow-other-keys)
28555 (invoke "nosetests" "-v")))))))
28557 (list python-nose))
28559 (list python-beautifulsoup4 python-lxml python-six))
28560 (home-page "http://sites.google.com/site/ofxparse")
28561 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
28563 (description "@code{ofxparse} is a parser for Open Financial
28564 Exchange (.ofx) format files. OFX files are available from almost any online
28565 banking site, so they work well if you want to pull together your finances
28566 from multiple sources. Online trading accounts also often provide account
28567 statements in OFX files.")
28568 (license license:expat)))
28570 (define-public python-rfc3339-validator
28572 (name "python-rfc3339-validator")
28577 (uri (pypi-uri "rfc3339_validator" version))
28579 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
28580 (build-system python-build-system)
28581 (native-inputs (list python-hypothesis
28583 python-pytest-runner
28584 python-strict-rfc3339))
28585 (propagated-inputs (list python-six))
28586 (home-page "https://github.com/naimetti/rfc3339-validator")
28587 (synopsis "Python RFC3339 validator")
28588 (description "This package provides a pure Python RFC3339 validator.")
28589 (license license:expat)))
28591 (define-public python-strict-rfc3339
28593 (name "python-strict-rfc3339")
28597 (method git-fetch) ;no tests in pypi release
28598 (uri (git-reference
28599 (url "https://github.com/danielrichman/strict-rfc3339")
28600 (commit (string-append "version-" version))))
28601 (file-name (git-file-name name version))
28604 "0b12bh9v9gwkm89kxbidxw2z81lg8fx1v5fzgs313v1wgx6qb09p"))))
28605 (build-system python-build-system)
28609 #~(modify-phases %standard-phases
28611 (lambda* (#:key tests? #:allow-other-keys)
28613 (invoke "pytest" "-vv"
28614 ;; The timestamp to local offset tests fail due to
28615 ;; missing timezone data (see:
28616 ;; https://github.com/danielrichman/strict-rfc3339/issues/9).
28617 "-k" "not LocalOffset")))))))
28618 (native-inputs (list python-pytest))
28619 (home-page "https://github.com/danielrichman/strict-rfc3339")
28620 (synopsis "RFC3339 procedures library")
28621 (description "The @code{strict_rfc3339} Python module provides strict,
28622 simple, lightweight RFC3339 procedures. It enables or aims to:
28624 @item Convert UNIX timestamps to and from RFC3339.
28625 @item Produce RFC3339 strings with a UTC offset (Z) or with the offset that
28626 the C time module reports is the local timezone offset.
28627 @item Be simple with minimal dependencies/libraries.
28628 @item Avoid timezones as much as possible.
28629 @item Be very strict and follow RFC3339.
28631 (license license:gpl3+)))
28633 (define-public python-stripe
28635 (name "python-stripe")
28640 (uri (pypi-uri "stripe" version))
28642 (base32 "0258lzh4qikhinfggnlfh5aklcvg7lrvl8giqrh0yf0l61wvfrl9"))))
28643 (build-system python-build-system)
28645 '(#:tests? #f)) ;; tests require network
28647 (list python-requests))
28648 (home-page "https://github.com/stripe/stripe-python")
28649 (synopsis "Python bindings for the Stripe financial services' API")
28650 (description "This package provides access to the Stripe financial
28651 services' API. It includes a pre-defined set of classes for API resources
28652 that initialize themselves dynamically from API responses which makes it
28653 compatible with a wide range of versions of the Stripe API.")
28654 (license license:expat)))
28656 (define-public python-platformdirs
28658 (name "python-platformdirs")
28663 (uri (pypi-uri "platformdirs" version))
28665 (base32 "1njz0h4iky8iglrb85cd07hpa3lp1a2dfr934dj65hxwzvfk61j4"))))
28666 (build-system python-build-system)
28668 '(#:phases (modify-phases %standard-phases
28670 (lambda* (#:key tests? #:allow-other-keys)
28672 (invoke "pytest" "-vv")))))))
28674 (list python-appdirs python-pytest python-pytest-mock
28675 python-setuptools-scm))
28676 (home-page "https://github.com/platformdirs/platformdirs")
28677 (synopsis "Determine the appropriate platform-specific directories")
28678 (description "When writing applications, finding the right location to
28679 store user data and configuration varies per platform. Even for
28680 single-platform apps, there may by plenty of nuances in figuring out the right
28681 location. This small Python module determines the appropriate
28682 platform-specific directories, e.g. the ``user data dir''.")
28683 (license license:expat)))
28685 (define-public python-json2html
28687 (name "python-json2html")
28690 ;; There are no tests in the PyPI tarball.
28693 (uri (git-reference
28694 (url "https://github.com/softvar/json2html")
28695 (commit (string-append "v" version))))
28696 (file-name (git-file-name name version))
28698 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
28699 (build-system python-build-system)
28702 (modify-phases %standard-phases
28704 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
28706 (add-installed-pythonpath inputs outputs)
28707 (invoke "python" "test/run_tests.py")))))))
28708 (home-page "https://github.com/softvar/json2html")
28709 (synopsis "Convert JSON to HTML table")
28710 (description "@code{python-json2html} is a python module to convert JSON
28711 into a human readable HTML table representation.")
28712 (license license:expat)))
28714 (define-public python-face
28716 (name "python-face")
28721 (uri (pypi-uri "face" version))
28723 (base32 "0gpd9f0rmbv3rd2szi2na37l29fabkwazikjrxc6wca1lddwlnbx"))))
28724 (build-system python-build-system)
28727 (modify-phases %standard-phases
28729 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
28731 ;; Make installed package available for running the tests.
28732 (add-installed-pythonpath inputs outputs)
28733 (invoke "pytest" "-v")))))))
28735 (list python-pytest))
28737 (list python-boltons))
28738 (home-page "https://github.com/mahmoud/face")
28739 (synopsis "CLI parsing and dispatching microframework")
28740 (description "@code{python-face} is a Pythonic microframework for building
28741 command-line applications.
28744 @item First-class subcommand support
28745 @item Powerful middleware architecture
28746 @item Separate parser layer
28747 @item Built-in flagfile support
28748 @item Handy testing utilities
28749 @item Themeable help display
28751 (license license:bsd-3)))
28753 (define-public python-glom
28755 (name "python-glom")
28756 (version "20.11.0")
28760 (uri (pypi-uri "glom" version))
28762 (base32 "04pba09vdr3qjvqvy14g60fscdsi35chbbyqpczdp76cpir101al"))))
28763 (build-system python-build-system)
28766 (modify-phases %standard-phases
28768 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
28770 ;; Make installed executable available for running the tests.
28772 (string-append (assoc-ref outputs "out") "/bin"
28773 ":" (getenv "PATH")))
28774 (invoke "pytest" "-v")))))))
28776 (list python-pytest python-pyyaml))
28778 (list python-attrs python-boltons python-face))
28779 (home-page "https://github.com/mahmoud/glom")
28780 (synopsis "Declaratively restructure data")
28781 (description "Real applications have real data, and real data
28782 nests---objects inside of objects inside of lists of objects. glom is a new
28783 and powerful way to handle real-world data, featuring:
28786 @item Path-based access to nested data structures
28787 @item Readable, meaningful error messages
28788 @item Declarative data transformation, using lightweight, Pythonic specifications
28789 @item Built-in data exploration and debugging features
28791 (license license:bsd-3)))
28793 (define-public python-box
28795 (name "python-box")
28800 (uri (pypi-uri "python-box" version))
28803 "0jhrdif57khx2hsw1q6a9x42knwcvq8ijgqyq1jmll6y6ifyzm2f"))))
28804 (build-system python-build-system)
28806 (list python-msgpack python-ruamel.yaml python-toml))
28807 (home-page "https://github.com/cdgriffith/Box")
28808 (synopsis "Advanced Python dictionaries with dot notation access")
28810 "This package provides the @code{python-box} Python module.
28811 It implements advanced Python dictionaries with dot notation access.")
28812 (license license:expat)))
28814 (define-public python-fields
28816 (name "python-fields")
28821 (uri (pypi-uri "fields" version))
28823 (base32 "09sppvhhkhkv9zc9g994m53z15v92csxwcf42ggkaknlv01smm1i"))))
28824 (build-system python-build-system)
28825 (home-page "https://python-fields.readthedocs.io/")
28826 (synopsis "Python container class boilerplate killer")
28827 (description "Avoid repetetive boilerplate code in Python classes.")
28828 (license license:bsd-3)))
28830 (define-public python-aspectlib
28832 (name "python-aspectlib")
28837 (uri (pypi-uri "aspectlib" version))
28839 (base32 "1am4ycf292zbmgz791z393v63w7qrynf8q5p9db2wwf2qj1fqxfj"))))
28840 (build-system python-build-system)
28841 (propagated-inputs (list python-fields))
28842 (home-page "https://github.com/ionelmc/python-aspectlib")
28844 "Python monkey-patching and decorators")
28846 "This package provides an aspect-oriented programming, monkey-patch
28847 and decorators library. It is useful when changing behavior in existing
28848 code is desired. It includes tools for debugging and testing:
28849 simple mock/record and a complete capture/replay framework.")
28850 (license license:bsd-2)))
28852 (define-public python-ijson
28854 (name "python-ijson")
28859 (uri (pypi-uri "ijson" version))
28861 (base32 "1sp463ywj4jv5cp6hsv2qwiima30d09xsabxb2dyq5b17jp0640x"))))
28864 (modify-phases %standard-phases
28865 ;; the tests run by the default setup.py require yajl 1.x,
28866 ;; but we have 2.x. yajl 1.x support is going to be removed
28867 ;; anyway, so use pytest to avoid running the yajl1-related
28868 ;; tests. See: https://github.com/ICRAR/ijson/issues/55
28870 (lambda* (#:key tests? #:allow-other-keys)
28872 (invoke "pytest" "-vv")))))))
28874 ;; libyajl is optional, but compiling with it makes faster
28875 ;; backends available to ijson:
28878 (list python-pytest))
28879 (build-system python-build-system)
28880 (home-page "https://github.com/ICRAR/ijson")
28881 (synopsis "Iterative JSON parser with Python iterator interfaces")
28883 "Ijson is an iterative JSON parser with standard Python iterator
28885 (license license:bsd-3)))
28887 (define-public python-ordered-set
28889 (name "python-ordered-set")
28894 (uri (pypi-uri "ordered-set" version))
28896 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
28897 (build-system python-build-system)
28900 #~(modify-phases %standard-phases
28902 (lambda* (#:key tests? #:allow-other-keys)
28904 (invoke "pytest" "-vv")))))))
28905 (native-inputs (list python-cython python-pytest))
28906 (home-page "https://github.com/simonpercivall/orderedset")
28907 (synopsis "Ordered Set implementation in Cython")
28908 (description "This library provides an @code{OrderedSet} data type that
28909 works like a regular set, but remembers insertion order. It supports the full
28910 Python @code{set} interface.")
28911 (license license:asl2.0)))
28913 (define-public python-orgparse
28915 (name "python-orgparse")
28920 (uri (pypi-uri "orgparse" version))
28922 (base32 "14iv4pg3rma9560plg0w943x04mr2cmrssda43y2d1x9acrd2n71"))))
28923 (build-system python-build-system)
28926 (modify-phases %standard-phases
28928 (lambda* (#:key tests? #:allow-other-keys)
28930 (invoke "pytest" "-vv" "orgparse/tests")))))))
28932 (list python-pytest python-setuptools-scm))
28933 (home-page "https://github.com/karlicoss/orgparse")
28934 (synopsis "Emacs Org mode parser in Python")
28936 "This package is a Python module for reading Emacs Org mode files.")
28937 (license license:bsd-3)))
28939 (define-public dynaconf
28948 (url "https://github.com/rochacbruno/dynaconf")
28950 (file-name (git-file-name name version))
28953 "0pjyjsdzairpn5vq8nzddhxwxmr18grn272nj31wcy2ipwdl3c3h"))
28954 (patches (search-patches "dynaconf-unvendor-deps.patch"))
28955 (modules '((guix build utils)))
28957 ;; Remove vendored dependencies
28958 (let ((unvendor '("click" "dotenv" "ruamel" "toml")))
28959 (with-directory-excursion "dynaconf/vendor"
28960 (for-each delete-file-recursively unvendor))
28961 (with-directory-excursion "dynaconf/vendor_src"
28962 (for-each delete-file-recursively unvendor)))))))
28963 (build-system python-build-system)
28966 (modify-phases %standard-phases
28967 (add-after 'unpack 'patch-for-click-8
28969 (substitute* "dynaconf/cli.py"
28970 (("click.get_os_args\\()") ;deprecated from Click 8.1+
28973 (lambda* (#:key tests? outputs #:allow-other-keys)
28975 ;; These tests depend on hvac and a live Vault process.
28976 (delete-file "tests/test_vault.py")
28977 (invoke "make" "test_only")))))))
28979 (list python-click python-configobj python-dotenv-0.13.0
28980 python-ruamel.yaml python-toml))
28982 (list python-django python-flask python-pytest python-pytest-cov
28983 python-pytest-mock))
28984 (home-page "https://www.dynaconf.com/")
28985 (synopsis "The dynamic configurator for your Python project")
28987 "This package provides @code{dynaconf} the dynamic configurator manager for
28988 your Python project. It provides features such as:
28991 @item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
28992 @item Settings management (default values, validation, parsing, templating);
28993 @item Protection of sensitive information (passwords/tokens);
28994 @item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
28996 @item Full support for environment variables to override existing settings
28997 (dotenv support included);
28998 @item Optional layered system for multiple environments @code{[default,
28999 development, testing, production]};
29000 @item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
29001 @item Built-in extensions for Django and Flask web frameworks;
29002 @item CLI for common operations such as @code{init, list, write, validate, export}.
29004 (license license:expat)))
29006 (define-public python-pudb
29008 (name "python-pudb")
29009 (version "2022.1.2")
29012 (uri (pypi-uri "pudb" version))
29015 "03a7zalgdxfd2z2k6050ng087gwqgqis544n2083gdfxbf0ap0vb"))))
29016 (build-system python-build-system)
29018 `(#:phases (modify-phases %standard-phases
29019 (add-before 'check 'fix-read-only-home
29021 (setenv "HOME" "/tmp")))
29023 (lambda* (#:key tests? #:allow-other-keys)
29025 (invoke "pytest" "-vv")))))))
29026 (native-inputs (list python-pytest python-pytest-mock))
29027 (propagated-inputs (list python-jedi python-pygments python-urwid
29028 python-urwid-readline))
29029 (home-page "https://documen.tician.de/pudb/")
29030 (synopsis "Console-based Python debugger")
29032 "@command{pudb} is a full-screen, console-based Python debugger providing
29033 all the niceties of modern GUI-based debuggers in a more lightweight and
29034 keyboard-friendly package.")
29035 (license license:expat)))
29037 (define-public pudb
29038 (deprecated-package "pudb" python-pudb))
29040 (define-public python-iwlib
29042 (name "python-iwlib")
29047 (uri (pypi-uri "iwlib" version))
29049 (base32 "18bd35wn7zclalpqbry42pf7bjrdggxkkw58mc0k1vkhg9czc1d8"))))
29050 (build-system python-build-system)
29052 (list wireless-tools))
29053 (propagated-inputs (list python-cffi))
29054 (home-page "https://github.com/nhoad/python-iwlib")
29055 (synopsis "Python module to interface with iwlib")
29057 "This package provides a Python interface to iw wireless tools.")
29058 (license license:gpl2)))
29060 (define-public python-pdoc3
29062 (name "python-pdoc3")
29067 (uri (pypi-uri "pdoc3" version))
29069 (base32 "1dz4hw10ngidzg9cjvflc8nlrwrjbb3ijhmaw4w6f039p6yff8jz"))
29071 (search-patches "python-pdoc3-tests.patch"))))
29072 (build-system python-build-system)
29074 (list python-setuptools-git python-setuptools-scm))
29075 (propagated-inputs (list python-mako python-markdown))
29076 (home-page "https://pdoc3.github.io/pdoc/")
29077 (synopsis "Auto-generate API documentation for Python projects")
29079 "This package auto-generates API documentation from Python projects
29080 already existing modules and objects docstrings.")
29081 (license license:agpl3+)))
29083 (define-public python-piexif
29085 (name "python-piexif")
29090 (uri (pypi-uri "piexif" version ".zip"))
29092 (base32 "06sz58q4mrw472p8fbnq7wsj8zpi5js5r8phm2hiwfmz0v33bjw3"))
29094 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
29095 (build-system python-build-system)
29097 (list unzip python-pillow))
29098 (home-page "https://github.com/hMatoba/Piexif")
29099 (synopsis "Simplify exif manipulations with Python")
29100 (description "Piexif simplifies interacting with EXIF data in
29101 Python. It includes the tools necessary for extracting, creating,
29102 manipulating, converting and writing EXIF data to JPEG, WebP and TIFF files.")
29103 (license license:expat)))
29105 (define-public python-pyrss2gen
29107 (name "python-pyrss2gen")
29112 (uri (pypi-uri "PyRSS2Gen" version))
29114 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
29115 (build-system python-build-system)
29116 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
29117 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
29118 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
29119 PyRSS2Gen builds the feed up by using a XML generator.")
29120 (license license:bsd-3)))
29122 (define-public python-yapsy
29124 (name "python-yapsy")
29129 (uri (pypi-uri "Yapsy" version))
29131 (base32 "12rznbnswfw0w7qfbvmmffr9r317gl1rqg36nijwzsklkjgks4fq"))))
29132 (build-system python-build-system)
29133 (home-page "http://yapsy.sourceforge.net")
29134 (synopsis "Simple plugin system for Python applications")
29135 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
29136 implementing the core mechanisms needed to build a plugin system into a wider
29139 The main purpose is to depend only on Python's standard libraries and to
29140 implement only the basic functionalities needed to detect, load and keep track
29141 of several plugins.")
29142 (license license:bsd-3)))
29144 (define-public python-doit
29146 (name "python-doit")
29151 (uri (pypi-uri "doit" version))
29153 (base32 "0bf0m9n0hyjvjpv051zd26725j8jr23gyvc37v3kkadwbh8dxwcf"))))
29154 (build-system python-build-system)
29156 (list python-cloudpickle python-pyinotify))
29158 (list python-pytest))
29159 (home-page "https://pydoit.org")
29160 (synopsis "Automation tool to execute any kind of task in a build-tools
29162 (description "doit is an automation tool that brings the power of
29163 build-tools to execute any kind of task.
29165 A task describes some computation to be done (actions), and contains some
29166 extra meta-data. The actions can be external programs or Python functions. A
29167 single task may define more than one action.doit uses the task’s meta-data
29171 @item cache task results
29172 @item correct execution order
29173 @item parallel execution
29174 @item powerful dependency system
29176 (license license:expat)))
29178 (define-public python-phpserialize
29180 (name "python-phpserialize")
29185 (uri (pypi-uri "phpserialize" version))
29187 (base32 "19qgkb9z4zjbjxlpwh2w6pxkz2j3iymnydi69jl0jg905lqjsrxz"))))
29188 (build-system python-build-system)
29191 ;; tests missing in pypi archive, anhow they are quite simple and not worth any hassle
29193 (home-page "http://github.com/mitsuhiko/phpserialize")
29194 (synopsis "Python port of the serialize and unserialize functions of PHP")
29196 "This package provides a port of the serialize and unserialize functions of PHP for Python")
29197 (license license:bsd-3)))
29199 (define-public nikola
29206 (uri (pypi-uri "Nikola" version))
29208 (base32 "1h96y4sfypp2fbqxa8xrqch5f7r3srm2ly222k9w2n143h2spx4m"))))
29209 (build-system python-build-system)
29216 python-jinja2 ;; for themes
29221 python-notebook ;; for ipynb
29222 python-phpserialize ;; for wordpress import
29228 python-ruamel.yaml ;; for YAML metadata
29232 (list python-coverage
29236 python-pytest-cov))
29240 #~(modify-phases %standard-phases
29242 (lambda* (#:key tests? #:allow-other-keys)
29244 (invoke "pytest" "tests" "--no-cov"
29245 "-k" "not test_compiling_markdown[hilite]")))))))
29246 (home-page "https://getnikola.com/")
29247 (synopsis "Modular, fast and simple static website and blog generator")
29248 (description "Nikola generates static websites and blogs. Out of the box,
29249 it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
29250 and has plugins for many other formats.")
29251 (license license:expat)))
29253 (define-public nbss-upload
29255 (name "nbss-upload")
29260 (uri (pypi-uri "nbss-upload" version))
29262 (base32 "0jhyfm7w2ssknmh9789fmpnf79xr7sxbdcjwak6hfha6qparvk38"))))
29263 (build-system python-build-system)
29265 (list python-requests))
29267 `(#:tests? #f)) ;no tests
29268 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
29269 (synopsis "Upload notebooks to a notebooksharing.space instance")
29271 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
29272 notebooksharing.space instance.")
29273 (license license:bsd-3)))
29275 (define-public python-reedsolo
29277 (name "python-reedsolo")
29282 (uri (pypi-uri "reedsolo" version))
29284 (base32 "09q15ji9iac3nmmxrcdvz8ynldvvqanqy3hs6q3cp327hgf5rcmq"))))
29285 (build-system python-build-system)
29286 (home-page "https://github.com/tomerfiliba/reedsolomon")
29287 (synopsis "Pure-Python Reed Solomon encoder/decoder")
29288 (description "A pure-python universal errors-and-erasures Reed-Solomon
29289 Codec, based on the tutorial at Wikiversity. This is a burst-type
29290 implementation, so that it supports any Galois field higher than 2^3,
29291 but not binary streams.")
29292 (license license:public-domain)))
29294 (define-public python-esprima
29296 (name "python-esprima")
29301 (uri (pypi-uri "esprima" version))
29303 (base32 "1vi32g991lxcxzmncfiszh8m9bwkh4887szskkdi0a9wdn3imnq8"))))
29304 (build-system python-build-system)
29305 (home-page "https://github.com/Kronuz/esprima-python")
29307 "ECMAScript parsing infrastructure for analysis in Python")
29309 "This package provides ECMAScript parsing infrastructure for
29310 multipurpose analysis in Python.")
29311 (license license:bsd-3)))
29313 (define-public python-types-dataclasses
29315 (name "python-types-dataclasses")
29319 (uri (pypi-uri "types-dataclasses" version))
29322 "1mq6qd365m8ml889zl5dxj9kncjv71iq1d1fvgj59y0ixlpm6s35"))))
29323 (build-system python-build-system)
29324 (home-page "https://github.com/python/typeshed")
29325 (synopsis "Typing stubs for dataclasses")
29327 "This package provides a collection of library stubs for Python, with
29329 (license license:asl2.0)))
29331 (define-public python-types-docutils
29333 (name "python-types-docutils")
29338 (uri (pypi-uri "types-docutils" version))
29340 (base32 "14ypv0x6fk1pjw0bvvr1lkb2g6dvq2pwvbd5b5pzjl6182fhmaim"))))
29341 (build-system python-build-system)
29342 (home-page "https://github.com/python/typeshed")
29343 (synopsis "Typing stubs for docutils")
29344 (description "This package provides a collection of library stubs for
29345 Python, with static types.")
29346 (license license:asl2.0)))
29348 (define-public python-psycopg2-binary
29350 (name "python-psycopg2-binary")
29354 (uri (pypi-uri "psycopg2-binary" version))
29357 "0kpaxg3lg5wg5ww5kxmzi2z2d7arsx13ci915d8a2pf17lqza7bn"))))
29358 (build-system python-build-system)
29359 (inputs (list postgresql))
29361 ;; Tests are disable because they need a live instance of PostgreSQL.
29363 (home-page "https://psycopg.org/")
29364 (synopsis "PostgreSQL database adapter for Python")
29366 "Psycopg is a PostgreSQL database adapter for the Python programming
29367 language. Its main features are the complete implementation of the Python DB
29368 API 2.0 specification and the thread safety (several threads can share the
29369 same connection). It was designed for heavily multi-threaded applications
29370 that create and destroy lots of cursors and make a large number of concurrent
29371 @code{INSERT}s or @code{UPDATE}s.
29373 Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
29374 being both efficient and secure. It features client-side and
29375 server-side cursors, asynchronous communication and notifications,
29376 @code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
29377 out-of-the-box and adapted to matching PostgreSQL data types;
29378 adaptation can be extended and customized thanks to a flexible objects
29381 Psycopg 2 is both Unicode and Python 3 friendly.")
29382 (license license:lgpl3+)))
29384 (define-public python-pyfuse3
29386 (name "python-pyfuse3")
29391 (uri (pypi-uri "pyfuse3" version))
29393 (base32 "0cvybynv9igssfa4l13q09gb6m7afmwk34wsbq8jk14sqpd4dl92"))))
29394 (build-system python-build-system)
29395 (native-inputs (list pkg-config))
29396 (inputs (list fuse-3))
29397 (propagated-inputs (list python-pytest-trio))
29398 (home-page "https://github.com/libfuse/pyfuse3")
29399 (synopsis "Python bindings FUSE 3")
29400 (description "This package provides Python 3 bindings for libfuse 3 with
29401 async I/O support.")
29402 (license license:gpl2+)))
29404 (define-public python-ansicolors
29406 (name "python-ansicolors")
29411 (uri (pypi-uri "ansicolors" version ".zip"))
29413 (base32 "1q3jqglkq4z0f6nkkn8bswcwqg012i2grrc27kabr8286dg4zycr"))))
29414 (build-system python-build-system)
29419 (home-page "https://github.com/jonathaneunice/colors/")
29420 (synopsis "ANSI colors for Python")
29422 "This package adds ANSI colors and decorations to your strings.")
29423 (license license:isc)))
29425 (define-public python-types-freezegun
29427 (name "python-types-freezegun")
29432 (uri (pypi-uri "types-freezegun" version))
29434 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
29435 (build-system python-build-system)
29436 (home-page "https://github.com/python/typeshed")
29437 (synopsis "Typing stubs for @code{freezegun}")
29438 (description "This package contains typing stubs for for @code{freezegun}, a
29439 very small subset the Python stubs contained in the complete @code{typeshed}
29441 (license license:asl2.0)))
29443 (define-public python-types-protobuf
29445 (name "python-types-protobuf")
29449 (uri (pypi-uri "types-protobuf" version))
29452 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
29453 (build-system python-build-system)
29454 (home-page "https://github.com/python/typeshed")
29455 (synopsis "Typing stubs for @code{protobuf}")
29456 (description "This package contains typing stubs for @code{protobuf}, a
29457 very small subset the Python stubs contained in the complete @code{typeshed}
29459 (license license:asl2.0)))
29461 (define-public python-types-pytz
29463 (name "python-types-pytz")
29464 (version "2021.3.6")
29468 (uri (pypi-uri "types-pytz" version))
29470 (base32 "14yr5hg2ww8s4a0mz2bkd549fv8qgm538fnzxvqv92ld1pcpym3l"))))
29471 (build-system python-build-system)
29472 (home-page "https://github.com/python/typeshed")
29473 (synopsis "Typing stubs for pytz")
29474 (description "This package contains typing stubs for @code{pytz}, a very
29475 small subset the Python stubs contained in the complete @code{typeshed}
29477 (license license:asl2.0)))
29479 (define-public python-types-toml
29481 (name "python-types-toml")
29486 (uri (pypi-uri "types-toml" version))
29488 (base32 "10400bd3yv6rjfnq8galskkbpqz1sfx9sfgr5qwvw04270x4cjgr"))))
29489 (build-system python-build-system)
29490 (home-page "https://github.com/python/typeshed")
29491 (synopsis "Typing stubs for TOML")
29492 (description "This package contains typing stubs for TOML, a very small
29493 subset the Python stubs contained in the complete @code{typeshed}
29495 (license license:asl2.0)))
29497 (define-public python-types-ujson
29499 (name "python-types-ujson")
29503 (uri (pypi-uri "types-ujson" version))
29506 "0k9n9hsq4k2zaakdwbkcsvi7m8d3mv2y9yl6f171y58ld4qpcxcy"))))
29507 (build-system python-build-system)
29508 (home-page "https://github.com/python/typeshed")
29509 (synopsis "Typing stubs for ujson")
29511 "This is a PEP 561 type stub package for the ujson package. It can be
29512 used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
29514 (license license:asl2.0)))
29516 (define-public python-stltools
29518 (name "python-stltools")
29519 (version "2022.01.20")
29522 (uri (git-reference
29523 (url "https://github.com/rsmith-nl/stltools")
29525 (file-name (git-file-name name version))
29528 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
29529 (build-system python-build-system)
29531 `(#:use-setuptools? #f
29533 (modify-phases %standard-phases
29536 (lambda* (#:key inputs outputs #:allow-other-keys)
29537 (let ((moddir (string-append (site-packages inputs outputs) "/stltools"))
29538 (bindir (string-append (assoc-ref outputs "out") "/bin")))
29539 (copy-recursively "stltools" moddir)
29543 (let ((source (string-append script ".py"))
29544 (target (string-append bindir "/" script)))
29545 (copy-file source target)
29546 (chmod target #o555)))
29547 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo")))))
29549 (lambda* (#:key tests? #:allow-other-keys)
29551 (invoke "py.test" "-v")))))))
29552 (propagated-inputs (list python-pycairo))
29553 (native-inputs (list python-pytest))
29554 (home-page "https://github.com/rsmith-nl/stltools")
29555 (synopsis "Python modules and scripts for handling STL files")
29556 (description "This package consists of Python modules and scripts for
29557 manipulating stereolithography (STL) files. It can convert STL files into
29558 POV-ray meshes, PDF and PostScript. The Python modules allow for reading and
29559 writing STL files. It supports both the text and binary forms of STL.")
29560 (license license:expat)))
29562 (define-public python-multipart
29564 (name "python-multipart")
29568 (uri (pypi-uri "python-multipart" version))
29571 "0hzshd665rl1bkwvaj9va4j3gs8nmb478fbvligx20663xhmzfzp"))))
29572 (build-system python-build-system)
29573 (propagated-inputs (list python-six))
29574 (native-inputs (list python-pyyaml python-mock python-pytest-cov))
29576 `(#:phases (modify-phases %standard-phases
29577 ;; There is a bug in the test_suit specification.
29578 (add-after 'unpack 'patch-test-suite
29580 ;; Make compatible with PyYAML 6.
29581 (substitute* "multipart/tests/test_multipart.py"
29584 (substitute* "setup.py"
29585 (("test_suite = 'multipart.tests.suite'")
29586 "test_suite = 'multipart.tests.test_multipart.suite'"))
29587 ;; Needed by PyYAML 6.0.
29588 (substitute* "multipart/tests/test_multipart.py"
29589 (("yaml_data = yaml.load\\(f\\)")
29590 "yaml_data = yaml.load(f, Loader=yaml.SafeLoader)")))))))
29591 (home-page "https://github.com/andrew-d/python-multipart")
29592 (synopsis "Streaming multipart parser for Python")
29594 "This package provides a streaming multipart parser for Python.")
29595 (license license:asl2.0)))
29597 (define-public python-aiopg
29599 (name "python-aiopg")
29603 (uri (pypi-uri "aiopg" version))
29606 "1mwmypsfzh8adjbyvf7kqv9h3k1kf5ykhi1g3ahw4wqdxaj6nz2l"))))
29607 (build-system python-build-system)
29608 (native-inputs (list python-sqlalchemy))
29609 (propagated-inputs (list python-async-timeout python-psycopg2-binary))
29610 (home-page "https://aiopg.readthedocs.io")
29611 (synopsis "Postgres integration with asyncio")
29613 "aiopg is a library for accessing a PostgreSQL
29614 database from the asyncio (PEP-3156/tulip) framework. It wraps
29615 asynchronous features of the Psycopg database driver.")
29616 (license license:bsd-3)))
29618 (define-public python-verspec
29620 (name "python-verspec")
29624 (uri (pypi-uri "verspec" version))
29627 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
29628 (build-system python-build-system)
29629 (native-inputs (list python-coverage python-flake8 python-mypy
29630 python-pretend python-pytest))
29632 `(#:phases (modify-phases %standard-phases
29634 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29636 (add-installed-pythonpath inputs outputs)
29637 (invoke "touch" "test/__init__.py")
29638 (invoke "pytest")))))))
29639 (home-page "https://github.com/jimporter/verspec")
29640 (synopsis "Flexible version handling for Python")
29642 "This Python library handles software versions and specifiers. It is
29643 adapted from the @code{packaging} package.")
29644 (license (list license:bsd-2 license:asl2.0))))
29646 (define-public python-shtab
29648 (name "python-shtab")
29653 (uri (pypi-uri "shtab" version))
29655 (base32 "127mymfm7r0hddk2vknqq34fj6dirj6ip990i3g4isx0lsd7pnsc"))))
29656 (build-system python-build-system)
29661 python-pytest-timeout
29662 python-setuptools-scm
29666 (modify-phases %standard-phases
29669 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29671 (add-installed-pythonpath inputs outputs)
29672 (invoke "pytest")))))))
29673 (home-page "https://github.com/iterative/shtab")
29674 (synopsis "Automagic shell tab completion for Python CLI applications")
29676 "This package automatically generates shell tab completion scripts for
29678 (license license:asl2.0)))
29680 (define-public python-style
29682 (name "python-style")
29687 (uri (pypi-uri "style" version))
29689 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
29690 (build-system python-build-system)
29691 (home-page "https://github.com/lmittmann/style")
29692 (synopsis "Terminal string styling")
29694 "@code{python-style} is a simple terminal string styling package. Its API is
29695 a port of the chalk package for javascript.")
29696 (license license:expat)))
29698 (define-public python-sre-yield
29700 (name "python-sre-yield")
29705 (uri (pypi-uri "sre_yield" version))
29708 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
29709 (build-system python-build-system)
29710 (native-inputs (list python-nose))
29711 (home-page "https://github.com/google/sre_yield")
29712 (synopsis "Expands a regular expression to its possible matches")
29714 "The goal of sre_yield is to efficiently generate all values that can
29715 match a given regular expression, or count possible matches efficiently. It
29716 uses the parsed regular expression, so you get a much more accurate result
29717 than trying to just split strings.")
29718 (license license:asl2.0)))
29720 (define-public python-pyperf
29722 (name "python-pyperf")
29727 (uri (pypi-uri "pyperf" version))
29729 (base32 "189qf9wdbig0fk4n3bavx8acgdbay5lllfvw48jvbfaafb7y5hja"))))
29730 (build-system python-build-system)
29733 (modify-phases %standard-phases
29734 (add-after 'unpack 'fix-tests
29736 ;; Some of these tests fail with:
29738 ;; ModuleNotFoundError: No module named 'pyperf'
29740 ;; even when calling ‘add-installed-pythonpath’ in the ‘check’
29742 (delete-file "pyperf/tests/test_examples.py")))
29744 (lambda* (#:key tests? #:allow-other-keys)
29746 ;; From tox.ini's ‘testenv.commands’.
29747 (invoke "python" "-bb" "-Wd"
29748 "-m" "unittest" "discover"
29749 "-s" "pyperf/tests/" "-v")))))))
29751 (list python-psutil))
29752 (home-page "https://github.com/psf/pyperf")
29753 (synopsis "Toolkit for running Python benchmarks")
29754 (description "The Python @code{pyperf} module is a toolkit for writing,
29755 running and analyzing benchmarks. It features a simple API that can:
29758 @item automatically calibrate a benchmark for a time budget;
29759 @item spawn multiple worker processes;
29760 @item compute the mean and standard deviation;
29761 @item detect if a benchmark result seems unstable;
29762 @item store benchmark results in JSON format;
29763 @item support multiple units: seconds, bytes and integer.
29765 (license license:expat)))
29767 (define-public python-pydispatcher
29769 (name "python-pydispatcher")
29774 (uri (pypi-uri "PyDispatcher" version))
29776 (base32 "1bswbmhlbqdxlgbxlb6xrlm4k253sg8nvpl1whgsys8p3fg0cw2m"))))
29777 (build-system python-build-system)
29780 (modify-phases %standard-phases
29782 (lambda* (#:key tests? #:allow-other-keys)
29784 (invoke "pytest")))))))
29785 (native-inputs (list python-pytest))
29786 (home-page "http://pydispatcher.sourceforge.net")
29787 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
29788 (description "PyDispatcher is an enhanced version of Patrick K. O’Brien’s
29789 original @code{dispatcher.py} module. It provides the Python programmer with
29790 a robust mechanism for event routing within various application contexts.
29792 Included in the package are the robustapply and saferef modules, which
29793 provide the ability to selectively apply arguments to callable objects
29794 and to reference instance methods using weak-references.")
29795 (license license:bsd-3)))
29797 (define-public python-queuelib
29799 (name "python-queuelib")
29804 (uri (pypi-uri "queuelib" version))
29806 (base32 "1lpwq8wx3025i14y5h0hbald2ypbarf081pql6cqcak4y9kp482b"))))
29807 (build-system python-build-system)
29808 (native-inputs (list python-pytest))
29809 (home-page "https://github.com/scrapy/queuelib")
29811 "Collection of persistent (disk-based) and non-persistent (memory-based) queues")
29812 (description "Queuelib is a Python library that implements object
29813 collections which are stored in memory or persisted to disk, provide a
29814 simple API, and run fast.
29816 Queuelib provides collections for queues (FIFO), stacks (LIFO), queues
29817 sorted by priority and queues that are emptied in a round-robin
29819 (license license:bsd-3)))
29821 (define-public python-posix-ipc
29823 (name "python-posix-ipc")
29827 ;; The source distributed on PyPI is prebuild.
29829 (uri (git-reference
29830 (url "https://github.com/osvenskan/posix_ipc")
29831 (commit (string-append "rel" version))))
29832 (file-name (git-file-name name version))
29834 (base32 "17y4d0pmvp199c5hbs602ailhlh9f9zv89kmpbd8jhyl6rgaxsvs"))))
29835 (build-system python-build-system)
29838 #~(modify-phases %standard-phases
29839 (add-after 'unpack 'patch-cc-path
29841 (substitute* "prober.py"
29843 (string-append "cmd = \"" #$(cc-for-target)))))))))
29844 (home-page "http://semanchuk.com/philip/posix_ipc/")
29845 (synopsis "POSIX IPC primitives for Python")
29847 "This package provides POSIX IPC primitives - semaphores, shared memory and
29848 message queues for Python.")
29849 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
29851 (define-public python-itemadapter
29853 (name "python-itemadapter")
29858 (uri (pypi-uri "itemadapter" version))
29860 (base32 "083wp3h2brh8x19jbdr8rz3biqwp3jlqd0rfzcyrjyhssffsgdh5"))))
29861 (build-system python-build-system)
29862 (home-page "https://github.com/scrapy/itemadapter")
29863 (synopsis "Common interface for data container classes")
29864 (description "The ItemAdapter class is a wrapper for data container
29865 objects, providing a common interface to handle objects of different
29866 types in an uniform manner, regardless of their underlying implementation.
29868 Currently supported types are:
29870 @item scrapy.item.Item
29872 @item dataclass-based classes
29873 @item attrs-based classes
29874 @item pydantic-based classes
29877 Additionally, interaction with arbitrary types is supported by
29878 implementing a pre-defined interface.")
29879 (license license:bsd-3)))
29881 (define-public python-itemloaders
29883 (name "python-itemloaders")
29888 (uri (pypi-uri "itemloaders" version))
29890 (base32 "15hc78h90qhwass1bga1c3xar2dd6j8sxg61zg6jvh74lf6csxqj"))))
29891 (build-system python-build-system)
29893 (list python-itemadapter python-jmespath python-parsel python-w3lib))
29894 (home-page "https://github.com/scrapy/itemloaders")
29895 (synopsis "Base library for scrapy's ItemLoader")
29896 (description "Itemloaders is a library that helps you collect data
29897 from HTML and XML sources. It comes in handy to extract data from web
29898 pages, as it supports data extraction using CSS and XPath Selectors.
29900 It’s specially useful when you need to standardize the data from many
29901 sources. For example, it allows you to have all your casting and
29902 parsing rules in a single place.")
29903 (license license:bsd-3)))
29905 (define-public python-hypy-utils
29907 (name "python-hypy-utils")
29911 (uri (pypi-uri "hypy_utils" version))
29914 "05csk0x8ivavq88x457cq5hwjcdirfbkzj7bbg5qgnpnf2dxxhiw"))))
29915 (build-system python-build-system)
29916 (home-page "https://github.com/hykilpikonna/HyPyUtils")
29917 (synopsis "Python utility functions for HyDEV")
29918 (description "This module provides Python utility functions for modifying
29919 and setting the color of terminal output, via HyDEV.")
29920 (license license:expat)))
29922 (define-public python-mike
29924 (name "python-mike")
29928 (uri (pypi-uri "mike" version))
29931 "0yxp816x7s948xsd0fifvq9shg01xdxlifd9rzf5y2rd9iwz3hsn"))))
29932 (build-system python-build-system)
29934 (list python-coverage python-flake8 python-shtab))
29936 (list python-jinja2 python-mkdocs python-pyyaml python-verspec))
29937 (home-page "https://github.com/jimporter/mike")
29938 (synopsis "Manage multiple versions of MkDocs-powered documentation")
29940 "This package provides a Python utility to easily deploy multiple
29941 versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
29942 to Github via gh-pages.")
29943 (license license:bsd-3)))
29945 (define-public python-arpeggio
29947 (name "python-arpeggio")
29951 (uri (pypi-uri "Arpeggio" version))
29954 "0ggdsck1wpladd5bh9drhkmm86bblgk2wagrhn3sdf4v04wkic6n"))))
29955 (build-system python-build-system)
29956 (native-inputs (list python-coverage
29962 python-pytest-runner
29965 (home-page "https://github.com/textX/Arpeggio")
29966 (synopsis "Packrat parser interpreter for Python")
29968 "This Python library provides a recursive descent parser with backtracking
29969 and memoization (a.k.a. packrat parser). Arpeggio grammars are based on PEG
29970 formalism. Arpeggio's main use is a foundation for a toolchain for DSL
29971 development but it can be used for all sorts of general purpose parsing.")
29972 (license license:expat)))
29974 (define-public python-flatten-json
29976 (name "python-flatten-json")
29981 (uri (pypi-uri "flatten_json" version))
29983 (base32 "007m28gfs7pmz2rqqjxpial6skzw26hrfi8vrdy9agi9x0rj6dgf"))))
29984 (build-system python-build-system)
29985 (propagated-inputs (list python-six))
29986 (home-page "https://github.com/amirziai/flatten")
29987 (synopsis "Flatten JSON objects")
29989 "The @code{flatten_json} Python library flattens the hierarchy in your
29990 object, which can be useful if you want to force your objects into a table.")
29991 (license license:expat)))
29993 (define-public python-deepmerge
29995 (name "python-deepmerge")
30000 (uri (pypi-uri "deepmerge" version))
30002 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
30003 (build-system python-build-system)
30007 #~(modify-phases %standard-phases
30008 (add-before 'build 'set-version
30010 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
30011 ;; ZIP does not support timestamps before 1980.
30012 (setenv "SOURCE_DATE_EPOCH" "315532800")))
30015 (invoke "python" "-m" "build" "--wheel"
30016 "--no-isolation" ".")))
30018 (lambda* (#:key tests? #:allow-other-keys)
30020 (invoke "pytest"))))
30023 (let ((whl (car (find-files "dist" "\\.whl$"))))
30024 (invoke "pip" "--no-cache-dir" "--no-input"
30025 "install" "--no-deps" "--prefix" #$output whl)))))))
30027 (list python-pypa-build
30028 python-setuptools-scm
30031 (home-page "https://deepmerge.readthedocs.io/en/latest/")
30032 (synopsis "Merge nested data structures")
30034 "The @code{deep-merge} Python library provides a toolset to deeply merge
30035 nested data structures in Python like lists and dictionaries.")
30036 (license license:expat)))
30038 (define-public python-murmurhash3
30040 (name "python-murmurhash3")
30044 (uri (pypi-uri "murmurhash3" version))
30047 "1gdzys1212dx70byz07ipknbw1awbqskh6aznlkm85js8b8qfczm"))))
30048 (build-system python-build-system)
30049 (native-inputs (list python-cython python-pytest))
30050 (inputs (list python))
30053 '((ice-9 ftw) (ice-9 match)
30055 (guix build python-build-system))
30057 #~(modify-phases %standard-phases
30058 (add-after 'unpack 'set-source-file-times-to-1980
30060 (let ((circa-1980 (* 10 366 24 60 60)))
30062 (lambda (file stat flag)
30063 (utime file circa-1980 circa-1980) #t))))))))
30064 (home-page "https://github.com/veegee/mmh3")
30065 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
30067 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
30068 of fast and robust hash functions. This library is a Python extension module
30070 (license license:public-domain)))
30072 (define-public python-murmurhash
30074 (name "python-murmurhash")
30078 (uri (pypi-uri "murmurhash" version))
30081 "0vwkn98c703nvsigl2nz99rax2pafkx3djjfkgc49jiipmp3j2k3"))))
30082 (build-system python-build-system)
30083 (native-inputs (list python-cython python-pytest))
30084 (inputs (list python python-murmurhash3))
30087 '((ice-9 ftw) (ice-9 match)
30089 (guix build python-build-system))
30091 #~(modify-phases %standard-phases
30092 (add-after 'unpack 'set-source-file-times-to-1980
30094 (let ((circa-1980 (* 10 366 24 60 60)))
30096 (lambda (file stat flag)
30097 (utime file circa-1980 circa-1980) #t))))))))
30098 (home-page "https://github.com/explosion/murmurhash")
30099 (synopsis "Cython bindings for MurmurHash2")
30100 (description "This package provides Cython bindings for MurmurHash2.")
30101 (license license:expat)))
30103 ;; Scooby requires for its test suite a ‘pyvips’ package that is missing its
30104 ;; VIPS dependency.
30105 (define python-pyvips-for-python-scooby
30107 (inherit python-pyvips)
30108 (name "python-pyvips-for-python-scooby")
30110 (substitute-keyword-arguments (package-arguments python-pyvips)
30112 #~(modify-phases #$phases
30113 (delete 'fix-paths)
30114 ;; The checks won't succeed without VIPS.
30116 (delete 'sanity-check)))))
30118 (modify-inputs (package-inputs python-pyvips)
30120 (synopsis "pyvips for Scooby's test suite")))
30122 (define-public python-scooby
30124 (name "python-scooby")
30127 ;; The PyPI tarball does not contain the tests.
30130 (uri (git-reference
30131 (url "https://github.com/banesullivan/scooby")
30132 (commit (string-append "v" version))))
30133 (file-name (git-file-name name version))
30135 (base32 "1gkpmz8wl3jg8ylf1na35308sznw2g9wx33zqlyq5i2gpy2ml9mw"))))
30136 (build-system python-build-system)
30138 (list python-beautifulsoup4
30142 python-pyvips-for-python-scooby
30145 (list python-psutil))
30148 (modify-phases %standard-phases
30149 (add-after 'unpack 'fix-tests
30151 (substitute* "tests/test_scooby.py"
30152 ;; The test suite uses the no-version PyPI package
30153 ;; (https://pypi.org/project/no-version/),
30154 ;; but it doesn't seem worth packaging in Guix just for this.
30155 (("scooby\\.report\\.VERSION_NOT_FOUND")
30156 "scooby.report.MODULE_NOT_FOUND")
30157 (("^ +import no_version # noqa.*") ""))))
30159 (lambda* (#:key tests? #:allow-other-keys)
30161 (invoke "pytest")))))))
30162 (home-page "https://github.com/banesullivan/scooby")
30163 (synopsis "Report hardware information and Python package versions")
30165 "The Scooby package reports the following information about the currently
30169 @item operating system name;
30170 @item hardware information including machine type (e.g., @samp{i386},
30171 @samp{x86_64}, etc.), CPU count and total RAM;
30172 @item Python environment (e.g., Python, IPython, etc.);
30173 @item file system name;
30174 @item Python version;
30175 @item versions of specified Python packages.
30178 It can generate reports as HTML tables or plain text lists.
30180 Scooby has no required dependencies, and only few optional dependencies.")
30181 (license license:expat)))
30183 (define-public python-cymem
30185 (name "python-cymem")
30189 (uri (pypi-uri "cymem" version))
30192 "0pkyy60zk9654sj991w111p1l0m8wvz36nslw96x6nb9h6sjb5qn"))))
30193 (build-system python-build-system)
30195 (list python-cython
30201 #:modules '((ice-9 ftw)
30204 (guix build python-build-system))
30206 #~(modify-phases %standard-phases
30207 (add-after 'unpack 'set-source-file-times-to-1980
30208 ;; XXX One of the tests uses a ZIP library to pack up some of the
30209 ;; source tree, and fails with "ZIP does not support timestamps
30210 ;; before 1980". Work around this by setting the file times in the
30211 ;; source tree to sometime in early 1980.
30213 (let ((circa-1980 (* 10 366 24 60 60)))
30214 (ftw "." (lambda (file stat flag)
30215 (utime file circa-1980 circa-1980)
30217 (home-page "https://github.com/explosion/cymem")
30218 (synopsis "Cython memory pool for RAII-style memory management")
30220 "Cymem provides two small memory-management helpers for Cython. They make it
30221 easy to tie memory to a Python object's life-cycle, so that the memory is freed
30222 when the object is garbage collected.")
30223 (license license:expat)))
30225 (define-public python-preshed
30227 (name "python-preshed")
30231 (uri (pypi-uri "preshed" version))
30234 "0akpydd23xqxx9d04drsnw9140rb3cv07r1zpzqz5wm0lf47afzv"))))
30235 (build-system python-build-system)
30236 (native-inputs (list python-cython python-cymem python-pytest))
30237 (inputs (list python python-cymem python-murmurhash))
30240 '((ice-9 ftw) (ice-9 match)
30242 (guix build python-build-system))
30244 #~(modify-phases %standard-phases
30245 (add-after 'unpack 'set-source-file-times-to-1980
30247 (let ((circa-1980 (* 10 366 24 60 60)))
30249 (lambda (file stat flag)
30250 (utime file circa-1980 circa-1980) #t))))))))
30251 (home-page "https://github.com/explosion/preshed")
30252 (synopsis "Cython hash tables that assume keys are pre-hashed")
30254 "Simple but high performance Cython hash table mapping pre-randomized keys
30256 (license license:expat)))
30258 (define-public python-catalogue
30260 (name "python-catalogue")
30264 (uri (pypi-uri "catalogue" version))
30267 "0srdxiil2xys8q1gpc1nvzhvis3a33d8a7amk2i1rlpbg6p36pak"))))
30268 (build-system python-build-system)
30269 (native-inputs (list python-pytest))
30270 (inputs (list python python-zipp python-typing-extensions python-mypy))
30271 (home-page "https://github.com/explosion/catalogue")
30272 (synopsis "Lightweight function registries for your library")
30274 "\"catalogue\" is a tiny, zero-dependencies library that
30275 makes it easy to add function (or object) registries to your code. Function
30276 registries are helpful when you have objects that need to be both easily
30277 serializable and fully customizable. Instead of passing a function into your
30278 object, you pass in an identifier name, which the object can use to lookup the
30279 function from the registry. This makes the object easy to serialize, because the
30280 name is a simple string. If you instead saved the function, you'd have to use
30281 Pickle for serialization, which has many drawbacks.")
30282 (license license:expat)))
30284 (define-public python-wasabi
30286 (name "python-wasabi")
30290 (uri (pypi-uri "wasabi" version))
30293 "1kwqfalq7qxs9f7xb2m055g01qpbznyzxl7sjnzjdvvhkczg39md"))))
30294 (build-system python-build-system)
30295 (native-inputs (list python-pytest))
30296 (home-page "https://github.com/ines/wasabi")
30297 (synopsis "Console printing and formatting toolkit")
30299 "This package provides a lightweight console printing and formatting
30300 toolkit for Python.")
30301 (license license:expat)))
30303 (define-public python-srt
30305 (name "python-srt")
30309 (uri (pypi-uri "srt" version))
30312 "0l24710spxarijmv3h7iicvx0lv6m3d4xg77nd9kyv8jwifav93s"))))
30313 (build-system python-build-system)
30314 (home-page "https://github.com/cdown/srt")
30315 (synopsis "SRT parsing library")
30317 "This package provides a Python library for parsing, modifying, and
30318 composing subtitles in the SRT file format.")
30319 (license license:expat)))
30321 (define-public python-gatt
30323 (name "python-gatt")
30327 (uri (pypi-uri "gatt" version))
30330 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
30331 (propagated-inputs (list python-dbus python-pygobject))
30332 (build-system python-build-system)
30333 (home-page "https://github.com/getsenic/gatt-python")
30334 (synopsis "Bluetooth GATT SDK for Python")
30335 (description "The Bluetooth @acronym{GATT, Generic ATTribute Profile}
30336 @acronym{SDK, Software Development Kit} for Python helps you implement and
30337 communicate with any Bluetooth Low Energy device that has a GATT
30338 profile. It supports:
30341 @item Discovering nearby Bluetooth Low Energy devices
30342 @item Connecting and disconnecting devices
30343 @item Implementing your custom GATT profile
30344 @item Accessing all GATT services
30345 @item Accessing all GATT characteristics
30346 @item Reading characteristic values
30347 @item Writing characteristic values
30348 @item Subscribing for characteristic value change notifications
30351 Currently, Linux is the only platform supported by this library.")
30352 (license license:expat)))
30354 (define-public python-clrprint
30356 (name "python-clrprint")
30360 (uri (pypi-uri "clrprint" version))
30363 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
30364 (build-system python-build-system)
30365 (arguments '(#:tests? #f)) ;there are no tests
30366 (propagated-inputs (list python-colorama python-termcolor))
30367 (home-page "https://github.com/AbhijithAJ/clrprint")
30368 (synopsis "Print colorful output in the terminal")
30369 (description "@code{clrprint} is developed to print colorful output in the
30370 terminal. It has red, blue, green, yellow, purple and black/white (default)
30372 (license license:expat)))
30374 (define-public python-musical-scales
30376 (name "python-musical-scales")
30380 (uri (pypi-uri "musical-scales" version))
30383 "1ckn8n37i7b65h0i385ycn0w8sg9na0iabz0kmhxxc1wj0hddkw9"))))
30384 (build-system python-build-system)
30385 (native-inputs (list python-wheel))
30386 (home-page "https://github.com/hmillerbakewell/musical-scale")
30387 (synopsis "Retrieve a scale based on a given mode and starting note")
30389 "Retrieve a scale based on a given mode and starting note.
30390 Information about these scales can be
30391 @url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
30393 (license license:expat)))
30395 (define-public python-langcodes
30397 (name "python-langcodes")
30401 (uri (pypi-uri "langcodes" version))
30404 "1xkyh3qdcigb18qiimbwl2669y22hhdmd89mqcd270c7lbahfkbr"))))
30405 (build-system python-build-system)
30406 (native-inputs (list python-pytest))
30407 (home-page "https://github.com/rspeer/langcodes")
30408 (synopsis "Python library for working with language codes")
30410 "This package provides a Python library for working with and comparing
30413 @code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
30414 47}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
30415 47 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
30416 with it, and it also implements recommendations from the
30417 @url{http://cldr.unicode.org/, Unicode CLDR}.
30419 @code{python-langcodes} can also refer to a database of language properties
30420 and names, built from Unicode CLDR and the IANA subtag registry, if you
30421 install @code{python-language-data}.")
30422 (license license:expat)))
30424 (define-public python-geomet
30426 (name "python-geomet")
30430 (uri (pypi-uri "geomet" version))
30433 "06rfvadx5dr5xrgsc5bsmqil9c9kff6i13xl988gy0gfg0cl2lnb"))))
30434 (build-system python-build-system)
30435 (propagated-inputs (list python-click python-six))
30436 (home-page "https://github.com/geomet/geomet")
30437 (synopsis "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or
30438 GeoPackage Binary")
30439 (description "This package provides utilities and functions for converting
30440 GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
30441 versa. Extended WKB/WKT are also supported.")
30442 (license license:asl2.0)))
30444 (define-public python-bsdiff4
30446 (name "python-bsdiff4")
30448 (home-page "https://github.com/ilanschnell/bsdiff4")
30451 (uri (git-reference
30454 (file-name (git-file-name name version))
30457 "1fa0vkmbr0a9xifq7i5gfcf7ifn739i1fdij8awynm299fsqvvhx"))))
30458 (build-system python-build-system)
30459 (synopsis "Binary diff and patch using the BSDIFF4 format")
30460 (description "This package provides a Python library for the @code{bsdiff}
30461 binary diff utility. It also provides two command-line tools, @code{bsdiff4}
30462 and @code{bspatch4}.")
30463 (license license:bsd-2)))
30465 (define-public python-mpv
30467 (name "python-mpv")
30471 ;; python-mpv from pypi does not include the tests directory.
30473 (uri (git-reference
30474 (url "https://github.com/jaseg/python-mpv")
30475 (commit (string-append "v" version))))
30476 (file-name (git-file-name name version))
30479 "10w6j3n62ap45sf6q487kz8z6g58sha37i14fa2hhng794z7a8jh"))
30480 (modules '((guix build utils)))
30483 ;; One of the tests never completes, so neutering it using
30484 ;; early return allows other test to run without issue.
30485 (substitute* "tests/test_mpv.py"
30486 ;; Note the typo in "prooperty" - this was fixed later in
30487 ;; upstream but has no effect on whether the tests hangs or not.
30488 (("test_wait_for_prooperty_event_overflow.*" line)
30489 ;; The long whitespace between \n and return is to match the
30490 ;; identation level, which is significant in python.
30491 (string-append line "\n return\n")))))))
30492 (build-system python-build-system)
30495 #~(modify-phases %standard-phases
30496 (add-before 'build 'patch-reference-to-mpv
30497 (lambda* (#:key inputs #:allow-other-keys)
30498 ;; Without an absolute path it is not able find and
30499 ;; load the libmpv library.
30500 (substitute* "mpv.py"
30502 (string-append "sofile = \""
30503 (search-input-file inputs "/lib/libmpv.so")
30505 (add-before 'check 'prepare-for-tests
30507 ;; Fontconfig throws errors when it has no cache dir to use.
30508 (setenv "XDG_CACHE_HOME" (getcwd))
30509 ;; Some tests fail without a writable and readable HOME.
30510 (setenv "HOME" (getcwd)))))))
30512 (list python-xvfbwrapper)) ; needed for tests only
30513 (inputs (list mpv))
30514 (propagated-inputs (list python-pillow)) ; for raw screenshots
30515 (home-page "https://github.com/jaseg/python-mpv")
30516 (synopsis "Python interface to the mpv media player")
30518 "python-mpv is a ctypes-based python interface to the mpv media player.
30519 It gives you more or less full control of all features of the player, just
30520 as the lua interface does.")
30521 ;; From the project's README:
30522 ;; python-mpv inherits the underlying libmpv's license, which can be either
30523 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
30525 (license license:gpl2+)))
30527 (define-public python-biblib
30528 (let ((upstream-version "0.1.0")
30529 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
30532 (name "python-biblib")
30533 (version (git-version upstream-version revision commit))
30537 (uri (git-reference
30538 (url "https://github.com/aclements/biblib")
30541 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
30542 (file-name (git-file-name name version))))
30543 (build-system python-build-system)
30544 (home-page "https://github.com/aclements/biblib")
30545 (synopsis "BibTeX parsing and transformation library")
30547 "Biblib provides a simple, standalone Python 3 package for parsing
30548 BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
30549 entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
30550 source code for BibTeX and hence (barring bugs in translation) should be fully
30551 compatible with BibTeX's own parser.")
30552 ;; N.B. It seems the parser was translated from WEB by hand: this
30553 ;; package does not contain any generated files.
30554 (license license:expat))))
30556 (define-public python-i3ipc
30558 (name "python-i3ipc")
30562 (uri (git-reference
30563 (url "https://github.com/altdesktop/i3ipc-python")
30564 (commit (string-append "v" version))))
30565 (file-name (git-file-name name version))
30568 "13bzs9dcv27czpnnbgz7a037lm8h991c8gk0qzzk5mq5yak24715"))))
30569 (build-system python-build-system)
30570 (arguments (list #:tests? #f)) ;FIXME: some tests are unable to run
30571 (propagated-inputs (list python-xlib))
30572 (home-page "https://github.com/altdesktop/i3ipc-python")
30573 (synopsis "Python library for controlling i3 and Sway")
30575 "This package provides a Python library for controlling the i3 and Sway
30577 (license license:bsd-3)))
30579 (define-public i3-autotiling
30581 (name "i3-autotiling")
30585 (uri (git-reference
30586 (url "https://github.com/nwg-piotr/autotiling")
30587 (commit (string-append "v" version))))
30588 (file-name (git-file-name name version))
30591 "1m8k3g83n2n1xws89dh20f3sy6753wvip9dzf6bssv2cz9ll7406"))))
30592 (build-system python-build-system)
30593 (arguments (list #:tests? #f)) ;no tests
30594 (native-inputs (list python-wheel))
30595 (propagated-inputs (list python-i3ipc))
30596 (home-page "https://github.com/nwg-piotr/autotiling")
30597 (synopsis "Automatically tile windows in i3 and Sway")
30599 "Script for Sway and i3 to automatically switch the horizontal/vertical
30600 window split orientation.")
30601 (license license:gpl3)))
30603 (define-public python-cyclic
30605 (name "python-cyclic")
30608 ;; Use git, as there are some test files missing from the PyPI
30609 ;; release, see https://github.com/neurobin/cyclic/issues/1
30611 (uri (git-reference
30612 (url "https://github.com/neurobin/cyclic")
30613 ;; Release is not tagged on github, see
30614 ;; https://github.com/neurobin/cyclic/issues/2
30615 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
30616 (file-name (git-file-name name version))
30619 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
30620 (build-system python-build-system)
30621 (home-page "https://github.com/neurobin/cyclic")
30622 (synopsis "Handle cyclic relations")
30623 (description "This package handles cyclic relations compared by value.")
30624 (license license:bsd-3)))
30626 (define-public python-rcslice
30628 (name "python-rcslice")
30631 ;; Use git, as there are some test files missing from the PyPI
30632 ;; release, see https://github.com/neurobin/rcslice/issues/1
30634 (uri (git-reference
30635 (url "https://github.com/neurobin/rcslice")
30636 ;; Releases are not tagged on github, see
30637 ;; https://github.com/neurobin/rcslice/issues/2
30638 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
30639 (file-name (git-file-name name version))
30642 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
30643 (build-system python-build-system)
30644 (home-page "https://github.com/neurobin/rcslice")
30645 (synopsis "Slice a list of sliceables")
30646 (description "This package provides Python module to slice a list of
30647 sliceables (1 indexed, both start and end index are inclusive). Helps to
30648 slice file content line by line or column by column or a combination of
30650 (license license:bsd-3)))
30652 (define-public python-types-orjson
30654 (name "python-types-orjson")
30658 (uri (pypi-uri "types-orjson" version))
30661 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
30662 (build-system python-build-system)
30663 (home-page "https://github.com/python/typeshed")
30664 (synopsis "Typing stubs for orjson")
30665 (description "This is a PEP 561 type stub package for the @code{orjson}
30666 package. It can be used by type-checking tools like mypy, PyCharm, pytype
30667 etc. to check code that uses @code{orjson}.")
30668 (license license:asl2.0)))
30670 (define-public python-nanoid
30671 ;; There are no tests on PyPi.
30672 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
30675 (name "python-nanoid")
30682 (url "https://github.com/puyuan/py-nanoid")
30684 (file-name (git-file-name name commit))
30686 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
30687 (build-system python-build-system)
30688 (native-inputs (list python-pytest))
30691 (modify-phases %standard-phases
30693 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30695 (invoke "pytest")))))))
30696 (home-page "https://github.com/puyuan/py-nanoid")
30697 (synopsis "Unique string ID generator")
30699 "This package provides a tiny, secure, URL-friendly, unique string ID
30700 generator for Python.")
30701 (license license:expat))))
30703 (define-public python-misskey
30705 (name "python-misskey")
30709 (uri (git-reference
30710 (url "https://github.com/YuzuRyo61/Misskey.py")
30711 (commit (string-append "v" version))))
30712 (file-name (git-file-name name version))
30715 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
30716 (build-system python-build-system)
30717 (arguments (list #:tests? #f)) ;needs network
30718 (propagated-inputs (list python-requests))
30719 (home-page "https://misskeypy.readthedocs.io")
30720 (synopsis "Python bindings for Misskey's API")
30722 "This package provides access to Misskey's API. Misskey is a SNS
30723 platform using the ActivityPub protocol.")
30724 (license license:expat)))
30726 (define-public python-lief
30728 (name "python-lief")
30732 (uri (git-reference
30733 (url "https://github.com/lief-project/LIEF")
30735 (file-name (git-file-name name version))
30738 "1xzbh3bxy4rw1yamnx68da1v5s56ay4g081cyamv67256g0qy2i1"))))
30739 (build-system python-build-system)
30740 (native-inputs (list cmake))
30743 #:tests? #f ;needs network
30744 #:phases #~(modify-phases %standard-phases
30748 "python" "setup.py" "--sdk" "build"
30750 "-j" (number->string (parallel-job-count)))))))))
30751 (home-page "https://github.com/lief-project/LIEF")
30752 (synopsis "Library to instrument executable formats")
30754 "@code{python-lief} is a cross platform library which can parse, modify
30755 and abstract ELF, PE and MachO formats.")
30756 (license license:asl2.0)))
30758 (define-public python-pymonad
30760 (name "python-pymonad")
30762 ;; The tests are incomplete in the PyPI archive.
30765 (uri (git-reference
30766 (url "https://github.com/jasondelaat/pymonad")
30767 (commit (string-append "v" version))))
30768 (file-name (git-file-name name version))
30771 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
30772 (build-system python-build-system)
30775 (modify-phases %standard-phases
30777 (lambda* (#:key tests? #:allow-other-keys)
30779 (invoke "./run_tests.sh")))))))
30780 (home-page "https://github.com/jasondelaat/pymonad")
30781 (synopsis "Monadic style functional programming for Python")
30782 (description "@code{python-pymonad} implements data structures typically
30783 available in purely functional or functional first programming languages such
30784 as Haskell and F#. Included are
30787 @item Monad and Monoid data types with several common monads such as Maybe and
30789 @item Useful tools such as the @code{@@curry} decorator for defining curried
30791 @item Type annotations to help ensure correct usage
30793 (license license:bsd-3)))