gnu: python-deepmerge: Use pyproject-build-system.
[jackhill/guix/guix.git] / gnu / packages / python-xyz.scm
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, 2022 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, 2022 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>
131 ;;; Copyright © 2022 Mathieu Laparie <mlaparie@disr.it>
132 ;;; Copyright © 2022 Garek Dyszel <garekdyszel@disroot.org>
133 ;;; Copyright © 2022 Baptiste Strazzulla <bstrazzull@hotmail.fr>
134 ;;;
135 ;;; This file is part of GNU Guix.
136 ;;;
137 ;;; GNU Guix is free software; you can redistribute it and/or modify it
138 ;;; under the terms of the GNU General Public License as published by
139 ;;; the Free Software Foundation; either version 3 of the License, or (at
140 ;;; your option) any later version.
141 ;;;
142 ;;; GNU Guix is distributed in the hope that it will be useful, but
143 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
144 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
145 ;;; GNU General Public License for more details.
146 ;;;
147 ;;; You should have received a copy of the GNU General Public License
148 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
149
150 (define-module (gnu packages python-xyz)
151 #:use-module ((guix licenses) #:prefix license:)
152 #:use-module (gnu packages)
153 #:use-module (gnu packages algebra)
154 #:use-module (gnu packages adns)
155 #:use-module (gnu packages aidc)
156 #:use-module (gnu packages attr)
157 #:use-module (gnu packages backup)
158 #:use-module (gnu packages bash)
159 #:use-module (gnu packages check)
160 #:use-module (gnu packages cmake)
161 #:use-module (gnu packages compression)
162 #:use-module (gnu packages crypto)
163 #:use-module (gnu packages databases)
164 #:use-module (gnu packages dbm)
165 #:use-module (gnu packages django)
166 #:use-module (gnu packages djvu)
167 #:use-module (gnu packages docker)
168 #:use-module (gnu packages documentation)
169 #:use-module (gnu packages enchant)
170 #:use-module (gnu packages file)
171 #:use-module (gnu packages fontutils)
172 #:use-module (gnu packages fonts)
173 #:use-module (gnu packages freedesktop)
174 #:use-module (gnu packages gdb)
175 #:use-module (gnu packages gcc)
176 #:use-module (gnu packages geo)
177 #:use-module (gnu packages ghostscript)
178 #:use-module (gnu packages gl)
179 #:use-module (gnu packages glib)
180 #:use-module (gnu packages gnome)
181 #:use-module (gnu packages gnupg)
182 #:use-module (gnu packages graphviz)
183 #:use-module (gnu packages graphics)
184 #:use-module (gnu packages gsasl)
185 #:use-module (gnu packages gstreamer)
186 #:use-module (gnu packages gtk)
187 #:use-module (gnu packages haskell-xyz)
188 #:use-module (gnu packages icu4c)
189 #:use-module (gnu packages inkscape)
190 #:use-module (gnu packages image)
191 #:use-module (gnu packages image-processing)
192 #:use-module (gnu packages imagemagick)
193 #:use-module (gnu packages jupyter)
194 #:use-module (gnu packages kerberos)
195 #:use-module (gnu packages libevent)
196 #:use-module (gnu packages libffi)
197 #:use-module (gnu packages libidn)
198 #:use-module (gnu packages libusb)
199 #:use-module (gnu packages linux)
200 #:use-module (gnu packages llvm)
201 #:use-module (gnu packages man)
202 #:use-module (gnu packages markup)
203 #:use-module (gnu packages maths)
204 #:use-module (gnu packages monitoring)
205 #:use-module (gnu packages multiprecision)
206 #:use-module (gnu packages networking)
207 #:use-module (gnu packages ncurses)
208 #:use-module (gnu packages node)
209 #:use-module (gnu packages ninja)
210 #:use-module (gnu packages openstack)
211 #:use-module (gnu packages pcre)
212 #:use-module (gnu packages pdf)
213 #:use-module (gnu packages perl)
214 #:use-module (gnu packages photo)
215 #:use-module (gnu packages pkg-config)
216 #:use-module (gnu packages protobuf)
217 #:use-module (gnu packages python)
218 #:use-module (gnu packages python-build)
219 #:use-module (gnu packages python-check)
220 #:use-module (gnu packages python-compression)
221 #:use-module (gnu packages python-crypto)
222 #:use-module (gnu packages python-science)
223 #:use-module (gnu packages python-web)
224 #:use-module (gnu packages qt)
225 #:use-module (gnu packages rdf)
226 #:use-module (gnu packages readline)
227 #:use-module (gnu packages regex)
228 #:use-module (gnu packages sdl)
229 #:use-module (gnu packages scanner)
230 #:use-module (gnu packages search)
231 #:use-module (gnu packages serialization)
232 #:use-module (gnu packages shells)
233 #:use-module (gnu packages sphinx)
234 #:use-module (gnu packages ssh)
235 #:use-module (gnu packages swig)
236 #:use-module (gnu packages terminals)
237 #:use-module (gnu packages tex)
238 #:use-module (gnu packages texinfo)
239 #:use-module (gnu packages textutils)
240 #:use-module (gnu packages time)
241 #:use-module (gnu packages tls)
242 #:use-module (gnu packages version-control)
243 #:use-module (gnu packages video)
244 #:use-module (gnu packages web)
245 #:use-module (gnu packages wxwidgets)
246 #:use-module (gnu packages base)
247 #:use-module (gnu packages xml)
248 #:use-module (gnu packages xorg)
249 #:use-module (gnu packages xdisorg)
250 #:use-module (gnu packages tcl)
251 #:use-module (gnu packages bdw-gc)
252 #:use-module (gnu packages serialization)
253 #:use-module (guix packages)
254 #:use-module (guix download)
255 #:use-module (guix gexp)
256 #:use-module (guix git-download)
257 #:use-module (guix hg-download)
258 #:use-module (guix gexp)
259 #:use-module (guix utils)
260 #:use-module (guix build-system gnu)
261 #:use-module (guix build-system cmake)
262 #:use-module (guix build-system pyproject)
263 #:use-module (guix build-system python)
264 #:use-module (guix build-system trivial)
265 #:use-module (srfi srfi-1)
266 #:use-module (srfi srfi-26))
267
268 (define-public python-xmldiff
269 (package
270 (name "python-xmldiff")
271 (version "2.4")
272 (source
273 (origin
274 (method url-fetch)
275 (uri (pypi-uri "xmldiff" version))
276 (sha256
277 (base32 "0qygxi3z1jwb0471k7bh5gcqf7wqm4xhrkmwhf36gjgjw46a5gh5"))))
278 (build-system python-build-system)
279 (propagated-inputs (list python-lxml python-six))
280 (home-page "https://github.com/Shoobx/xmldiff")
281 (synopsis "Creates diffs of XML files")
282 (description "This Python tool figures out the differences between two
283 similar XML files, in the same way the @command{diff} utility does it.")
284 (license license:expat)))
285
286 (define-public python-janus
287 (package
288 (name "python-janus")
289 (version "0.6.1")
290 (source
291 (origin
292 (method url-fetch)
293 (uri (pypi-uri "janus" version))
294 (sha256
295 (base32 "030xvl2vghi5ispfalhvch1rl6i2jsy5bf1dgjafa7vifppy04j7"))))
296 (build-system python-build-system)
297 (arguments
298 `(#:phases
299 (modify-phases %standard-phases
300 (replace 'check
301 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
302 (when tests?
303 (add-installed-pythonpath inputs outputs)
304 (invoke "pytest" "--cov=janus" "--cov=tests")))))))
305 (native-inputs
306 (list python-pytest python-pytest-cov python-pytest-asyncio))
307 (home-page "https://github.com/aio-libs/janus/")
308 (synopsis
309 "Sync-async queue to interoperate between asyncio tasks and classic threads")
310 (description
311 "Mixed sync-async queue, supposed to be used for communicating between
312 classic synchronous (threaded) code and asynchronous (in terms of
313 @url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
314 @url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
315 library has two faces: synchronous and asynchronous interface. Synchronous is
316 fully compatible with
317 @url{https://docs.python.org/3/library/queue.html,standard queue},
318 asynchronous one follows
319 @url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
320 design}.")
321 (license license:asl2.0)))
322
323 (define-public python-jupytext
324 (package
325 (name "python-jupytext")
326 (version "1.14.1")
327 (source
328 (origin
329 (method git-fetch)
330 (uri (git-reference
331 (url "https://github.com/mwouts/jupytext")
332 (commit (string-append "v" version))))
333 (file-name (git-file-name name version))
334 (sha256
335 (base32 "0gqpvphrp2ja9ggadx0rrk0sqbpz6kqqg62qqmw4k17469lphc8c"))))
336 (build-system python-build-system)
337 (arguments
338 (list
339 #:phases
340 #~(modify-phases %standard-phases
341 (replace 'check
342 (lambda* (#:key tests? #:allow-other-keys)
343 ;; some tests fail when HOME=/homeless-shelter.
344 (setenv "HOME" "/tmp")
345 ;; OSError: [Errno 18] Invalid cross-device link
346 (setenv "TMPDIR" "/tmp")
347 (when tests?
348 (let ((disabled-tests
349 (list "test_create_header_with_set_formats"
350 "test_pre_commit_hook"
351 "test_sync_with_pre_commit_hook")))
352 (invoke "pytest" "-vv" "-k"
353 (string-append "not "
354 (string-join disabled-tests
355 " and not "))))))))))
356 (native-inputs
357 (list git-minimal
358 python-autopep8
359 python-black
360 python-flake8
361 python-gitpython
362 python-isort
363 python-ipython-genutils
364 python-jupyter-server
365 python-pre-commit
366 python-pytest
367 python-pyaml))
368 (propagated-inputs
369 (list python-markdown-it-py
370 python-mdit-py-plugins
371 python-nbformat))
372 (home-page "https://github.com/mwouts/jupytext")
373 (synopsis
374 "Jupyter notebooks as Markdown documents, Julia, Python or R scripts")
375 (description
376 "Jupytext is a plugin for Jupyter that can save Jupyter notebooks as
377 either Markdown files or scripts in many languages. Common use cases for
378 Jupytext are:
379
380 @itemize
381 @item version control on Jupyter Notebooks
382 @item editing, merging or refactoring notebooks in your favorite text editor
383 @item applying Q&A checks on notebooks.
384 @end itemize
385 ")
386 (license license:expat)))
387
388 (define-public python-logzero
389 (package
390 (name "python-logzero")
391 (version "1.7.0")
392 (source
393 (origin
394 (method url-fetch)
395 (uri (pypi-uri "logzero" version))
396 (sha256
397 (base32 "10nh186vk6hpnpfycym44gja4fja0jyzw7q8dwimfd1rmv9xswvz"))))
398 (build-system python-build-system)
399 (native-inputs
400 (list python-pytest python-pytest-runner))
401 (arguments
402 `(#:phases
403 (modify-phases %standard-phases
404 (replace 'check
405 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
406 (when tests?
407 (add-installed-pythonpath inputs outputs)
408 (invoke "pytest")))))))
409 (home-page "https://github.com/metachris/logzero")
410 (synopsis "Robust and effective logging for Python")
411 (description
412 "@code{logzero} provides a fully configured Python logger object for
413 easy logging and rotating to a console or a file.")
414 (license license:expat)))
415
416 (define-public python-logbook
417 (package
418 (name "python-logbook")
419 (version "1.5.3")
420 (source
421 (origin
422 (method url-fetch)
423 (uri (pypi-uri "Logbook" version))
424 (sha256
425 (base32 "1s1gyfw621vid7qqvhddq6c3z2895ci4lq3g0r1swvpml2nm9x36"))))
426 (build-system python-build-system)
427 (arguments
428 `(#:phases
429 (modify-phases %standard-phases
430 (add-before 'build 'cythonize-sources
431 (lambda _
432 (with-directory-excursion "logbook"
433 (invoke "cython" "_speedups.pyx"))))
434 (replace 'check
435 (lambda* (#:key tests? #:allow-other-keys)
436 (when tests?
437 ;; Check cython build also
438 (setenv "CYBUILD" "True")
439 (invoke "pytest" "--cov=logbook" "-r" "s" "tests")))))))
440 (native-inputs
441 (list python-cython python-mock python-pytest python-pytest-cov
442 python-google-brotli))
443 (home-page "https://github.com/getlogbook/logbook")
444 (synopsis "Logbook is a logging replacement for Python")
445 (description
446 "Logbook is a logging system for Python that replaces the standard
447 library’s logging module. It was designed with both complex and simple
448 applications in mind and the idea to make logging fun.")
449 (license license:bsd-3)))
450
451 (define-public python-ubelt
452 (package
453 (name "python-ubelt")
454 (version "1.0.1")
455 (source
456 (origin
457 (method git-fetch)
458 (uri (git-reference
459 (url "https://github.com/Erotemic/ubelt")
460 (commit (string-append "v" version))))
461 (file-name (git-file-name name version))
462 (sha256
463 (base32
464 "0hac9nqqvqfbca2s4g0mp1fnj0ah60bg9fb8234ibna3jww8qs33"))))
465 (build-system python-build-system)
466 (arguments
467 (list #:phases
468 #~(modify-phases %standard-phases
469 (replace 'check
470 (lambda* (#:key tests? #:allow-other-keys)
471 (when tests?
472 (setenv "HOME" "/tmp") ;else the test suite hangs
473 (invoke "pytest" "-vv" "-k"
474 (string-append
475 ;; The builder user home doesn't match HOME,
476 ;; which causes this test to fail.
477 "not userhome "
478 ;; This one pointlessly tries
479 ;; locating various binaries on
480 ;; the path.
481 "and not find_exe"))))))))
482 (propagated-inputs (list python-ordered-set))
483 (native-inputs
484 (list python-pytest
485 python-requests
486 python-xdoctest))
487 (home-page "https://github.com/Erotemic/ubelt")
488 (synopsis "Python library for hashing, caching, timing and more")
489 (description "Ubelt is a small library of simple functions that extend the
490 Python standard library. It includes an @acronym{API, Application Programming
491 Interface} to simplify common problems such as caching, timing, computing
492 progress, among other things.")
493 (license license:asl2.0)))
494
495 (define-public python-ueberzug
496 (package
497 (name "python-ueberzug")
498 (version "18.1.9")
499 (source
500 (origin
501 (method url-fetch)
502 (uri (pypi-uri "ueberzug" version))
503 (sha256
504 (base32
505 "1hxd45dnwa9yv908acarr98n2drmar66wzq9z2qd3irj24srzr3w"))))
506 (build-system python-build-system)
507 (inputs
508 (list libx11 libxext))
509 (propagated-inputs
510 (list python-attrs python-docopt python-pillow python-xlib))
511 (home-page "https://github.com/seebye/ueberzug")
512 (synopsis "Command line util to display images in combination with X11")
513 (description "Überzug is a command line util which draws images on
514 terminals by using child windows. The advantages of using Überzug are:
515 @itemize
516 @item No race conditions as a new window is created to display images.
517 @item Expose events will be processed, so images will be redrawn on switch
518 workspaces.
519 @item Tmux support (excluding multi pane windows).
520 @item Terminals without the WINDOWID environment variable are supported.
521 @item Chars are used as position - and size unit.
522 @item No memory leak (/ unlimited cache).
523 @end itemize")
524 (license license:gpl3+)))
525
526 (define-public python-fire
527 (package
528 (name "python-fire")
529 (version "0.4.0")
530 (source
531 (origin
532 (method url-fetch)
533 (uri (pypi-uri "fire" version))
534 (sha256
535 (base32
536 "0qka44n88y3qcj7xz0k0f3qb4phcg4z0wvd4jcii9lcr6rvbiqn5"))))
537 (build-system python-build-system)
538 (native-inputs
539 (list python-pytest))
540 (arguments
541 '(#:phases
542 (modify-phases %standard-phases
543 (replace 'check
544 (lambda* (#:key tests? #:allow-other-keys)
545 (when tests?
546 (invoke "pytest")))))))
547 (inputs
548 (list python-six python-termcolor))
549 (synopsis "Library for automatically generating command line interfaces")
550 (description
551 "Fire is a library for automatically generating command line interfaces
552 from absolutely any Python object. The following are the advantages:
553 @itemize
554 @item A simple way to create a CLI in Python.
555 @item A helpful tool for developing and debugging Python code.
556 @item Helps with exploring existing code or turning other people's code into a
557 command line interface.
558 @item Makes transitioning between Bash and Python easier.
559 @item Makes using a Python REPL easier by setting up the REPL with the modules
560 and variables you'll need already imported and created.
561 @end itemize")
562 (home-page "https://github.com/google/python-fire")
563 (license license:asl2.0)))
564
565 (define-public python-dotmap
566 (package
567 (name "python-dotmap")
568 (version "1.3.30")
569 (source (origin
570 (method url-fetch)
571 (uri (pypi-uri "dotmap" version))
572 (sha256
573 (base32
574 "0s5kb2v7jd0narz6m6jcicak3h5pw290wz21cdsv8pq77y9sf8aq"))))
575 (build-system python-build-system)
576 (home-page "https://github.com/drgrib/dotmap")
577 (synopsis "Ordered, dynamically-expandable dot-access dictionary")
578 (description
579 "DotMap is a dot-access dictionary subclass that has dynamic
580 hierarchy creation, can be initialized with keys, can be initialized from a
581 dictionary, can be convert to a dictionary, and is ordered by insertion.")
582 (license license:expat)))
583
584 (define-public python-twodict
585 (package
586 (name "python-twodict")
587 (version "1.2")
588 (source
589 (origin
590 (method url-fetch)
591 (uri (pypi-uri "twodict" version))
592 (sha256
593 (base32 "0ifv7dv18jn2lg0a3l6zdlvmmlda2ivixfjbsda58a2ay6kxznr0"))))
594 (build-system python-build-system)
595 (home-page "https://github.com/MrS0m30n3/twodict")
596 (synopsis "Two way ordered dictionary for Python")
597 (description "TwoDict is a custom dictionary in which you can get the
598 key:value relationship but you can also get the value:key relationship. It also
599 remembers the order in which the items were inserted and supports almost all the
600 features of the Python's built-in dict.")
601 (license license:unlicense)))
602
603 (define-public python-argopt
604 (package
605 (name "python-argopt")
606 (version "0.7.0")
607 (source (origin
608 (method url-fetch)
609 (uri (pypi-uri "argopt" version))
610 (sha256
611 (base32
612 "0ybs7kkp0cpl8zn1lvf7481xhssg1bbhh5la2cjzdm5yibashyxa"))))
613 (build-system python-build-system)
614 (native-inputs
615 (list python-coverage python-nose python-setuptools ; Won't build without this.
616 python-setuptools-scm))
617 (propagated-inputs
618 (list python-toml python-flake8))
619 (home-page "https://github.com/casperdcl/argopt")
620 (synopsis "Generate a command-line interface from a docstring")
621 (description "This package provides tools to define a command line interface
622 from a docstring rather than the other way around.")
623 (license license:mpl2.0)))
624
625 (define-public python-cachetools
626 (package
627 (name "python-cachetools")
628 (version "4.2.2")
629 (source (origin
630 (method url-fetch)
631 (uri (pypi-uri "cachetools" version))
632 (sha256
633 (base32
634 "1zqc098gk6y614lxwqd9z2gm8lldgvrpid133pnlm4m048gfvdb1"))))
635 (build-system python-build-system)
636 (home-page "https://github.com/tkem/cachetools/")
637 (synopsis "Extensible memoizing collections and decorators")
638 (description "This module provides various memoizing collections and
639 decorators, including variants of the Python standard library's
640 @code{lru_cache} function decorator.")
641 (license license:expat)))
642
643 (define-public python-cobib
644 (package
645 (name "python-cobib")
646 (version "3.5.2")
647 (source (origin
648 (method url-fetch)
649 (uri (pypi-uri "cobib" version))
650 (file-name (string-append name "-" version ".tar.gz"))
651 (sha256
652 (base32
653 "16nbrbvascbf6cb7yvn9q793dy8zx703pqrmk3mswib9a19mnx3n"))))
654 (build-system python-build-system)
655 (propagated-inputs
656 (list python-beautifulsoup4
657 python-bibtexparser
658 python-pylatexenc
659 python-requests
660 python-requests-oauthlib
661 python-ruamel.yaml))
662 (native-inputs
663 (list python-future
664 python-pyte
665 python-pytest))
666 (home-page "https://gitlab.com/mrossinek/cobib")
667 (synopsis "Terminal-based bibliography management tool")
668 (description
669 "@command{cobib} is a command-line based bibliography management tool.
670 It uses a plain-text database, a location-independent library, and features
671 git integration, command-line support, and a curses-based TUI.")
672 (license license:expat)))
673
674 (define-public python-colorful
675 (package
676 (name "python-colorful")
677 (version "0.5.4")
678 (source
679 (origin
680 (method url-fetch)
681 (uri
682 (pypi-uri "colorful" version))
683 (sha256
684 (base32 "1sh7g2cn1fyz2hzmzs933razdxi2bna9i1lxa790r9pdwba8m146"))))
685 (build-system python-build-system)
686 ;; FIXME: tests cannot be computed:
687 ;; "Can't perform this operation for unregistered loader type"
688 (arguments
689 `(#:tests? #f))
690 (native-inputs
691 (list python-coverage python-flake8 python-pytest))
692 (propagated-inputs
693 (list python-colorama))
694 (home-page "http://github.com/timofurrer/colorful")
695 (synopsis "Terminal string styling")
696 (description "Colorful provides an array of text styles, that can be used
697 as functions or string constants to form colored terminal output.")
698 (license license:expat)))
699
700 (define-public python-yaspin
701 (package
702 (name "python-yaspin")
703 (version "1.5.0")
704 (source
705 (origin
706 (method url-fetch)
707 (uri
708 (pypi-uri "yaspin" version))
709 (sha256
710 (base32 "1iirah0kydrdp505qnjj6gi54avcr7z0hbkfx9vmh8myr30rpz6q"))))
711 (build-system python-build-system)
712 (native-inputs
713 (list python-pytest))
714 (home-page "https://github.com/pavdmyt/yaspin")
715 (synopsis "Yet Another Terminal Spinner")
716 (description "Yaspin provides a terminal spinner to indicate the progress
717 during long operations.")
718 (license license:expat)))
719
720 (define-public python-lunr
721 (package
722 (name "python-lunr")
723 (version "0.6.0")
724 (source
725 (origin
726 (method url-fetch)
727 (uri
728 (pypi-uri "lunr" version))
729 (sha256
730 (base32 "106akalywfmnypzkdrhgz4n4740a8xayspybsw59kq06vz8i2qrc"))))
731 (build-system python-build-system)
732 (native-inputs
733 (list python-mock python-pytest))
734 (propagated-inputs
735 (list python-nltk-3.4))
736 (home-page
737 "https://github.com/yeraydiazdiaz/lunr.py")
738 (synopsis "Full-text search library")
739 (description "This package provides python library for full-text search.
740 It indexes documents and provides a search interface for retrieving documents
741 that best match text queries.")
742 (license license:expat)))
743
744 (define-public python-mdit-py-plugins
745 (package
746 (name "python-mdit-py-plugins")
747 (version "0.3.0")
748 (source
749 (origin
750 (method url-fetch)
751 (uri (pypi-uri "mdit-py-plugins" version))
752 (sha256
753 (base32
754 "0l4pwsn2q30j160zjg79qa8v2brc4zl295rgrkpbfspcxr8lzhpc"))))
755 (build-system python-build-system)
756 (propagated-inputs (list python-markdown-it-py))
757 (native-inputs
758 (list python-coverage
759 python-pytest
760 python-pytest-cov
761 python-pytest-regressions))
762 (home-page "https://github.com/executablebooks/mdit-py-plugins")
763 (synopsis "Collection of plugins for markdown-it-py")
764 (description
765 "This package contains a collection of plugins for @code{markdown-it-py}
766 like:
767
768 @enumerate
769 @item amsmath,
770 @item attrs,
771 @item container,
772 @item definition list,
773 @item dollarmath,
774 @item field list,
775 @item footnote,
776 @item textmath, and
777 @item wordcount.
778 @end enumerate
779 ")
780 (license license:expat)))
781
782 (define-public python-mdurl
783 (package
784 (name "python-mdurl")
785 (version "0.1.2")
786 (source (origin
787 (method url-fetch)
788 (uri (pypi-uri "mdurl" version))
789 (sha256
790 (base32
791 "1fn1hy35h9grggwqax90zcb52inlfxrxsm27vlqqz8zfyllkshdv"))))
792 (build-system python-build-system)
793 (arguments
794 (list
795 #:tests? #f ;pypi source does not contain tests
796 #:phases
797 #~(modify-phases %standard-phases
798 (replace 'build
799 (lambda _ (invoke "flit" "build")))
800 (replace 'install
801 (lambda _
802 (for-each
803 (lambda (wheel)
804 (invoke "python" "-m" "pip" "install"
805 wheel (string-append "--prefix=" #$output)))
806 (find-files "dist" "\\.whl$")))))))
807 (native-inputs (list python-flit))
808 (home-page "https://github.com/executablebooks/mdurl")
809 (synopsis "Markdown URL utilities")
810 (description
811 "This package implements a Python port of the JavaScript @code{mdurl}.")
812 (license license:expat)))
813
814 (define-public python-mrkd
815 (package
816 (name "python-mrkd")
817 (version "0.2.0")
818 (source
819 (origin
820 (method url-fetch)
821 (uri (pypi-uri "mrkd" version))
822 (sha256
823 (base32 "1bvaqbna1ihb4y2mv9pmvqcq3r9j6lwbbii99dani8lxx4dqqvs5"))))
824 (build-system python-build-system)
825 (propagated-inputs
826 (list python-jinja2 python-mistune python-pygments))
827 (home-page "https://pypi.org/project/mrkd/")
828 (synopsis "Python Markdown implementation")
829 (description
830 "@code{mrkd} writes man pages using Markdown, and convert them to Roff or
831 HTML")
832 (license license:bsd-3)))
833
834 (define-public python-mkdocs
835 (package
836 (name "python-mkdocs")
837 (version "1.3.0")
838 (source
839 (origin
840 ;; The tests suite appears to be incomplete in the PyPI archive.
841 (method git-fetch)
842 (uri (git-reference
843 (url "https://github.com/mkdocs/mkdocs")
844 (commit version)))
845 (file-name (git-file-name name version))
846 (sha256
847 (base32
848 "1n5rdllrxvhnxmdrddf55p3s86dakx0rq2gg6bj6pr6jg2pn932b"))))
849 (build-system python-build-system)
850 (arguments
851 `(#:phases
852 (modify-phases %standard-phases
853 ;; Requirements refer to a specific version of dependencies,
854 ;; which are too old. So we patch to refer to any later version.
855 (add-after 'unpack 'patch-requirements
856 (lambda _
857 (substitute* "setup.py"
858 (("==") ">="))))
859 (replace 'check
860 (lambda* (#:key tests? #:allow-other-keys)
861 (when tests?
862 (invoke "python" "-m" "unittest"
863 "discover" "-p" "*tests.py" "mkdocs"
864 "--top-level-directory" ".")))))))
865 (propagated-inputs
866 (list python-babel
867 python-click
868 python-ghp-import
869 python-importlib-metadata
870 python-jinja2
871 python-markdown
872 python-markupsafe
873 python-mdx-gh-links
874 python-mergedeep
875 python-packaging
876 python-pyyaml
877 python-pyyaml-env-tag
878 python-watchdog))
879 (home-page "https://www.mkdocs.org")
880 (synopsis "Project documentation with Markdown")
881 (description "MkDocs is a static site generator geared towards building
882 project documentation. Documentation source files are written in Markdown, and
883 configured with a single YAML configuration file.")
884 (license license:bsd-3)))
885
886 (define-public python-mkdocs-markdownextradata-plugin
887 (package
888 (name "python-mkdocs-markdownextradata-plugin")
889 (version "0.2.5")
890 (source (origin
891 ;; Use git, as there are some test files missing from the PyPI release,
892 ;; see https://github.com/rosscdh/mkdocs-markdownextradata-plugin/issues/41.
893 (method git-fetch)
894 (uri (git-reference
895 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
896 (commit version)))
897 (file-name (git-file-name name version))
898 (sha256
899 (base32
900 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
901 (build-system python-build-system)
902 (native-inputs (list python-pytest))
903 (propagated-inputs (list python-mkdocs python-pyyaml))
904 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
905 (synopsis "Inject mkdocs.yml extra variables into the MkDocs markdown
906 template")
907 (description
908 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
909 variables into the markdown template")
910 (license license:expat)))
911
912 (define-public python-pymdown-extensions
913 (package
914 (name "python-pymdown-extensions")
915 (version "8.1.1")
916 (source
917 (origin
918 (method url-fetch)
919 (uri
920 (pypi-uri "pymdown-extensions" version))
921 (sha256
922 (base32 "0d8pdndrl1kj105lq7r6kw2dnhcvll6h2qs07w71mcpi7gx728v3"))))
923 (build-system python-build-system)
924 ;; FIXME: "AssertionError: False is not true"
925 (arguments
926 `(#:tests? #f))
927 (propagated-inputs
928 (list python-markdown))
929 (home-page "https://github.com/facelessuser/pymdown-extensions")
930 (synopsis "Extension pack for Python Markdown")
931 (description "PyMdown Extensions is a collection of extensions for Python
932 Markdown. All extensions are found under the module namespace of pymdownx.")
933 (license license:expat)))
934
935 (define-public python-plotille
936 (package
937 (name "python-plotille")
938 (version "4.0.2")
939 (source (origin
940 (method url-fetch)
941 (uri (pypi-uri "plotille" version))
942 (sha256
943 (base32
944 "0fvsk6glxfphhqy405h05rj3v95jd1byl5hv2fyd5l31wln23shj"))))
945 (build-system python-build-system)
946 (native-inputs (list python-six))
947 (home-page "https://github.com/tammoippen/plotille")
948 (synopsis "Plot in the terminal using braille dots")
949 (description
950 "Plotille provides a figure class and graphing functions to create plots,
951 scatter plots, histograms and heatmaps in the terminal using braille dots.")
952 (license license:expat)))
953
954 (define-public python-mdx-gh-links
955 (package
956 (name "python-mdx-gh-links")
957 (version "0.2")
958 (source
959 (origin
960 (method url-fetch)
961 (uri (pypi-uri "mdx_gh_links" version))
962 (sha256
963 (base32 "167k1jbp3jifxbnlpi6wy0z1skam7gqv2sixb5bhggb2vypqvysr"))))
964 (build-system python-build-system)
965 (arguments (list #:tests? #f)) ;tests connect github
966 (propagated-inputs (list python-markdown))
967 (home-page "https://github.com/Python-Markdown/github-links/")
968 (synopsis "Python-Markdown extension adding support for shorthand links")
969 (description "This package is an extension to Python-Markdown which adds
970 support for shorthand links to GitHub users, repositories, issues and
971 commits.")
972 (license license:bsd-3)))
973
974 (define-public python-mkdocs-material
975 (package
976 (name "python-mkdocs-material")
977 (version "7.1.3")
978 (source
979 (origin
980 (method url-fetch)
981 (uri
982 (pypi-uri "mkdocs-material" version))
983 (sha256
984 (base32 "0ci9xiasq9nfn09v11m7p49vzazdbgslw7rpzjd6y3hsmn9vljz3"))))
985 (build-system python-build-system)
986 (arguments
987 `(#:phases
988 (modify-phases %standard-phases
989 ;; Requirement mkdocs-material-extensions
990 ;; in-turn requires mkdocs-material. This causes
991 ;; circular dependency, so we remove this requirement.
992 (add-after 'unpack 'patch-requirements
993 (lambda _
994 (substitute* "requirements.txt"
995 (("mkdocs-material-extensions.*$") "")))))))
996 (propagated-inputs
997 (list python-markdown python-mkdocs python-pygments
998 python-pymdown-extensions))
999 (home-page "https://squidfunk.github.io/mkdocs-material/")
1000 (synopsis "Material Design theme for MkDocs")
1001 (description "This package provides a theme plugin for the static site
1002 generator MkDocs.")
1003 (license license:expat)))
1004
1005 (define-public python-slixmpp
1006 (package
1007 (name "python-slixmpp")
1008 (version "1.5.2")
1009 (source
1010 (origin
1011 (method git-fetch)
1012 (uri
1013 (git-reference
1014 (url "https://lab.louiz.org/poezio/slixmpp.git")
1015 (commit
1016 (string-append "slix-" version))))
1017 (file-name
1018 (git-file-name name version))
1019 (sha256
1020 (base32 "15mqxcws14bjvh5jcfwl86zsvrymkdw3ya07vb44md7vfnsnclwx"))))
1021 (build-system python-build-system)
1022 (arguments
1023 `(#:phases
1024 (modify-phases %standard-phases
1025 (add-after 'unpack 'patch
1026 (lambda _
1027 (substitute* "setup.py"
1028 (("'CC', 'cc'")
1029 "'CC', 'gcc'"))
1030 #t)))))
1031 (native-inputs
1032 `(("cython" ,python-cython)
1033 ("gnupg" ,gnupg)
1034 ("pkg-config" ,pkg-config)))
1035 (propagated-inputs
1036 (list python-aiodns python-aiohttp python-pyasn1
1037 python-pyasn1-modules))
1038 (inputs
1039 (list libidn python)) ; We are building a Python extension.
1040 (synopsis "XMPP library without threads")
1041 (description "Slixmpp is a XMPP library for Python 3.7+. It is a fork of
1042 SleekXMPP. Its goal is to only rewrite the core of the library (the low level
1043 socket handling, the timers, the events dispatching) in order to remove all
1044 threads.")
1045 (home-page "https://lab.louiz.org/poezio/slixmpp")
1046 (license license:expat)))
1047
1048 (define-public python-tenacity
1049 (package
1050 (name "python-tenacity")
1051 (version "8.0.1")
1052 (source (origin
1053 (method url-fetch)
1054 (uri (pypi-uri "tenacity" version))
1055 (sha256
1056 (base32
1057 "0bwkvjpjfyi9dgszzad9aww2vc00w3bczjnbifi92cp7wch2l923"))))
1058 (build-system python-build-system)
1059 (native-inputs
1060 (list python-setuptools-scm python-tornado python-typeguard
1061 python-pytest))
1062 (arguments
1063 (list #:phases
1064 #~(modify-phases %standard-phases
1065 (replace 'check
1066 (lambda _ (invoke "pytest" "-vv"))))))
1067 (home-page "https://github.com/jd/tenacity")
1068 (synopsis "Retrying library for python")
1069 (description "Tenacity is a general-purpose python library to simplify the
1070 task of adding retry behavior to just about anything.")
1071 (license license:asl2.0)))
1072
1073 (define-public python-pytelegrambotapi
1074 (package
1075 (name "python-pytelegrambotapi")
1076 (version "3.7.4")
1077 (source
1078 (origin
1079 (method git-fetch)
1080 (uri (git-reference
1081 (url "https://github.com/eternnoir/pyTelegramBotAPI")
1082 (commit version)))
1083 (file-name (git-file-name name version))
1084 (sha256
1085 (base32 "0r7g5zs0fk3g2dxvbpl0pi730x7r2kalrhn30fs0pvc15a59fmxz"))))
1086 (build-system python-build-system)
1087 (arguments
1088 `(#:phases
1089 (modify-phases %standard-phases
1090 (replace 'check
1091 (lambda* (#:key tests? #:allow-other-keys)
1092 (when tests?
1093 (with-directory-excursion "tests"
1094 (invoke "py.test")))
1095 #t)))))
1096 (propagated-inputs
1097 (list python-requests))
1098 (native-inputs
1099 (list python-pytest))
1100 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
1101 (synopsis "Python Telegram bot api")
1102 (description "This package provides a simple, but extensible Python
1103 implementation for the Telegram Bot API.")
1104 (license license:gpl2)))
1105
1106 (define-public python-colorlog
1107 (package
1108 (name "python-colorlog")
1109 (version "6.6.0")
1110 (source
1111 (origin
1112 (method url-fetch)
1113 (uri (pypi-uri "colorlog" version))
1114 (sha256
1115 (base32 "1s7x0v872h8aks8xp01wmv6hzisxqjrh1svbbcycir0980h76krl"))))
1116 (build-system python-build-system)
1117 (arguments
1118 `(#:phases
1119 (modify-phases %standard-phases
1120 (replace 'check
1121 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
1122 (when tests?
1123 (add-installed-pythonpath inputs outputs)
1124 (invoke "python" "-m" "pytest")))))))
1125 (native-inputs
1126 (list python-pytest))
1127 (home-page "https://github.com/borntyping/python-colorlog")
1128 (synopsis "Log formatting with colors for python")
1129 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
1130 with Python's logging module that outputs records using terminal colors.")
1131 (license license:expat)))
1132
1133 (define-public python-pyprind
1134 (package
1135 (name "python-pyprind")
1136 (version "2.11.3")
1137 (source (origin
1138 (method url-fetch)
1139 (uri (pypi-uri "PyPrind" version))
1140 (sha256
1141 (base32
1142 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
1143 (build-system python-build-system)
1144 (propagated-inputs
1145 (list python-psutil))
1146 (home-page "https://github.com/rasbt/pyprind")
1147 (synopsis "Python Progress Bar and Percent Indicator Utility")
1148 (description "The PyPrind (Python Progress Indicator) module provides a
1149 progress bar and a percentage indicator object that let you track the progress
1150 of a loop structure or other iterative computation.")
1151 (license license:bsd-3)))
1152
1153 (define-public python-glymur
1154 (package
1155 (name "python-glymur")
1156 (version "0.10.1")
1157 (source
1158 (origin
1159 (method git-fetch) ; no tests data in PyPi package
1160 (uri (git-reference
1161 (url "https://github.com/quintusdias/glymur")
1162 (commit (string-append "v" version))))
1163 (file-name (git-file-name name version))
1164 (sha256
1165 (base32 "1cq9r8vzwvds1kasy5gc2rxw034jh9l43rraps1n739072pfz6qg"))))
1166 (build-system python-build-system)
1167 (arguments
1168 (list
1169 #:phases
1170 #~(modify-phases %standard-phases
1171 (add-after 'unpack 'patch-library-locations
1172 (lambda* (#:key inputs #:allow-other-keys)
1173 ;; XXX: It's a workaround for Python inability to find the
1174 ;; .so libraries with ctypes.util.find_library()
1175 (substitute* '("glymur/config.py")
1176 (("path = find_library\\(libname\\)")
1177 (string-append
1178 "if libname == \"openjp2\":\n"
1179 " path = \""
1180 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
1181 " elif libname == \"tiff\":\n"
1182 " path = \""
1183 (search-input-file inputs "/lib/libtiff.so") "\"\n"
1184 " elif libname == \"c\":\n"
1185 " path = \""
1186 (search-input-file inputs "/lib/libc.so.6") "\"\n")))))
1187 ;; TODO: implement as a feature of python-build-system (PEP-621,
1188 ;; PEP-631, PEP-660)
1189 (replace 'build
1190 (lambda _
1191 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
1192 ;; ZIP does not support timestamps before 1980.
1193 (setenv "SOURCE_DATE_EPOCH" "315532800")
1194 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
1195 (replace 'install
1196 (lambda* (#:key outputs #:allow-other-keys)
1197 (let ((whl (car (find-files "dist" "\\.whl$"))))
1198 (invoke "pip" "--no-cache-dir" "--no-input"
1199 "install" "--no-deps" "--prefix" #$output whl))))
1200 (replace 'check
1201 (lambda* (#:key tests? #:allow-other-keys)
1202 (when tests?
1203 ;; Failing test due to inability of
1204 ;; ctypes.util.find_library() to determine library path,
1205 ;; which is patched above.
1206 (delete-file "tests/test_config.py")
1207 (invoke "python" "-m" "pytest" "-vv" "tests")))))))
1208 (native-inputs
1209 (list python-pypa-build python-pytest))
1210 (inputs
1211 (list openjpeg ; glymur/lib/openjp2.py
1212 libtiff)) ; glymur/lib/tiff.py
1213 (propagated-inputs
1214 (list python-lxml
1215 python-numpy
1216 python-packaging))
1217 (home-page "https://github.com/quintusdias/glymur")
1218 (synopsis "Python interface to OpenJPEG and LibTIFF")
1219 (description
1220 "This package provides Python interface to the OpenJPEG library which
1221 allows one to read and write JPEG 2000 files")
1222 (license license:expat)))
1223
1224 (define-public python-gphoto2
1225 (package
1226 (name "python-gphoto2")
1227 (version "2.2.1")
1228 (source (origin
1229 (method url-fetch)
1230 (uri (pypi-uri "gphoto2" version))
1231 (sha256
1232 (base32
1233 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
1234 (build-system python-build-system)
1235 (native-inputs
1236 (list pkg-config))
1237 (inputs
1238 (list libgphoto2))
1239 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
1240 (synopsis "Python interface to libgphoto2")
1241 (description "@code{python-gphoto2} is a comprehensive Python interface
1242 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
1243 automatically generate the interface code.")
1244 (license license:gpl3+)))
1245
1246 (define-public python-colour
1247 (package
1248 (name "python-colour")
1249 (version "0.1.5")
1250 (source (origin
1251 (method url-fetch)
1252 (uri (pypi-uri "colour" version))
1253 (sha256
1254 (base32
1255 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
1256 (build-system python-build-system)
1257 (native-inputs
1258 (list python-d2to1))
1259 (home-page "https://github.com/vaab/colour")
1260 (synopsis "Convert and manipulate various color representations")
1261 (description "Pythonic way to manipulate color representations (HSL, RVB,
1262 web, X11, ...).")
1263 (license license:expat)))
1264
1265 (define-public python-d2to1
1266 (package
1267 (name "python-d2to1")
1268 (version "0.2.12.post1")
1269 (source (origin
1270 (method url-fetch)
1271 (uri (pypi-uri "d2to1" version))
1272 (sha256
1273 (base32
1274 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
1275 (build-system python-build-system)
1276 (native-inputs
1277 (list python-nose))
1278 (home-page "https://github.com/embray/d2to1")
1279 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
1280 in python")
1281 (description "The python package d2to1 (the d is for distutils) allows
1282 using distutils2-like setup.cfg files for a package's metadata with a
1283 distribute/setuptools setup.py script.")
1284 (license license:bsd-2)))
1285
1286 (define-public python-rawkit
1287 (package
1288 (name "python-rawkit")
1289 (version "0.6.0")
1290 (source (origin
1291 (method url-fetch)
1292 (uri (pypi-uri "rawkit" version))
1293 (sha256
1294 (base32
1295 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
1296 (build-system python-build-system)
1297 (native-inputs
1298 (list python-pytest python-mock))
1299 (inputs
1300 (list libraw))
1301 (home-page "https://rawkit.readthedocs.io")
1302 (synopsis "Ctypes-based LibRaw binding for Python")
1303 (description "The rawkit package provides two modules: rawkit and libraw.
1304 The rawkit module provides a high-level Pythonic interface for developing raw
1305 photos, while the libraw module provides a CTypes based interface for
1306 interacting with the low-level LibRaw C APIs.")
1307 (license license:expat)))
1308
1309 (define-public python-easygui
1310 (package
1311 (name "python-easygui")
1312 (version "0.98.1")
1313 (source (origin
1314 (method url-fetch)
1315 (uri (pypi-uri "easygui" version))
1316 (sha256
1317 (base32
1318 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
1319 (build-system python-build-system)
1320 (propagated-inputs
1321 (list `(,python "tk")))
1322 (home-page "https://github.com/robertlugg/easygui")
1323 (synopsis "GUI programming module for Python")
1324 (description "EasyGUI is a module for very simple, very easy GUI
1325 programming in Python. EasyGUI is different from other GUI generators in that
1326 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
1327 simple function calls.")
1328 (license license:bsd-3)))
1329
1330 (define-public python-pymd4c
1331 (package
1332 (name "python-pymd4c")
1333 (version "0.4.6.0b1")
1334 (source
1335 (origin
1336 (method url-fetch)
1337 (uri (pypi-uri "pymd4c" version))
1338 (sha256
1339 (base32 "07s3arn85ri92im6x3ipljdmrxmpik7irs06i6lm17j1x6j9841d"))))
1340 (build-system python-build-system)
1341 (inputs
1342 (list md4c))
1343 (native-inputs
1344 (list python-flake8 python-pkgconfig pkg-config))
1345 (home-page "https://github.com/dominickpastore/pymd4c")
1346 (synopsis "Python bindings for MD4C")
1347 (description
1348 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
1349 to CommonMark.")
1350 (license license:expat)))
1351
1352 (define-public python-pymediainfo
1353 (package
1354 (name "python-pymediainfo")
1355 (version "4.1")
1356 (source
1357 (origin
1358 (method url-fetch)
1359 (uri (pypi-uri "pymediainfo" version))
1360 (sha256
1361 (base32
1362 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
1363 (build-system python-build-system)
1364 (native-inputs
1365 (list python-setuptools-scm python-pytest))
1366 (inputs
1367 (list libmediainfo))
1368 (arguments
1369 `(#:phases
1370 (modify-phases %standard-phases
1371 (add-after 'unpack 'patch-libmediainfo
1372 (lambda _
1373 (substitute* "pymediainfo/__init__.py"
1374 (("libmediainfo.so.0")
1375 (search-input-file %build-inputs
1376 "/lib/libmediainfo.so.0")))))
1377 (replace 'check
1378 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
1379 (when tests?
1380 (add-installed-pythonpath inputs outputs)
1381 ;; Skip the only failing test "test_parse_url" because it tries
1382 ;; to access the internet.
1383 (invoke "pytest" "-vv" "-k" "not test_parse_url")))))))
1384 (home-page
1385 "https://github.com/sbraz/pymediainfo")
1386 (synopsis
1387 "Python wrapper for the mediainfo library")
1388 (description
1389 "This package provides a Python wrapper for the mediainfo library to
1390 access the technical and tag data for video and audio files.")
1391 (license license:expat)))
1392
1393 (define-public python-psutil
1394 (package
1395 (name "python-psutil")
1396 (version "5.9.2")
1397 (source
1398 (origin
1399 (method url-fetch)
1400 (uri (pypi-uri "psutil" version))
1401 (sha256
1402 (base32 "0p1bf6ndcssqh0ic828ggwhzhm67mzj3ffq6043v0fvc1fhn3f7y"))))
1403 (build-system python-build-system)
1404 (arguments
1405 ;; FIXME: some tests do not return and time out. Some tests fail because
1406 ;; some processes survive kill().
1407 '(#:tests? #f))
1408 (home-page "https://github.com/giampaolo/psutil")
1409 (synopsis "Library for retrieving information on running processes")
1410 (description
1411 "@code{psutil} (Python system and process utilities) is a library for
1412 retrieving information on running processes and system utilization (CPU,
1413 memory, disks, network) in Python. It is useful mainly for system monitoring,
1414 profiling and limiting process resources and management of running processes.
1415 It implements many functionalities offered by command line tools such as: ps,
1416 top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
1417 iotop, uptime, pidof, tty, taskset, pmap.")
1418 (license license:bsd-3)))
1419
1420 (define-public python-shapely
1421 (package
1422 (name "python-shapely")
1423 (version "1.8.4")
1424 (source
1425 (origin
1426 (method url-fetch)
1427 (uri (pypi-uri "Shapely" version))
1428 (sha256
1429 (base32 "130rqd0czi128wm5pdn47v4m6czxd7pkzanbya8q48gsm8ffb5d1"))))
1430 (build-system python-build-system)
1431 (native-inputs
1432 (list python-cython python-matplotlib python-pytest
1433 python-pytest-cov))
1434 (inputs
1435 (list geos))
1436 (propagated-inputs
1437 (list python-numpy))
1438 (arguments
1439 `(#:phases
1440 (modify-phases %standard-phases
1441 (add-after 'unpack 'patch-geos-path
1442 (lambda* (#:key inputs #:allow-other-keys)
1443 (let ((geos (assoc-ref inputs "geos"))
1444 (glibc (assoc-ref inputs ,(if (%current-target-system)
1445 "cross-libc" "libc"))))
1446 (substitute* '("shapely/geos.py" "shapely/_buildcfg.py")
1447 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
1448 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
1449 geos "/lib/libgeos_c.so'])"))
1450 (("free = load_dll\\('c'\\)\\.free")
1451 (string-append "free = load_dll('c', fallbacks=['"
1452 glibc "/lib/libc.so.6']).free"))
1453 (("free = load_dll\\('c', fallbacks=.*\\)\\.free")
1454 (string-append "free = load_dll('c', fallbacks=['"
1455 glibc "/lib/libc.so.6']).free"))))
1456 #t)))))
1457 (home-page "https://github.com/Toblerity/Shapely")
1458 (synopsis "Library for the manipulation and analysis of geometric objects")
1459 (description "Shapely is a Python package for manipulation and analysis of
1460 planar geometric objects. It is based on the @code{GEOS} library.")
1461 (license license:bsd-3)))
1462
1463 (define-public python-shortuuid
1464 (package
1465 (name "python-shortuuid")
1466 (version "0.5.0")
1467 (source
1468 (origin
1469 (method url-fetch)
1470 (uri (pypi-uri "shortuuid" version))
1471 (sha256
1472 (base32
1473 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
1474 (build-system python-build-system)
1475 (native-inputs
1476 (list python-pep8))
1477 (home-page "https://github.com/skorokithakis/shortuuid")
1478 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
1479 (description
1480 "@code{shortuuid} is a Python library for generating concise, unambiguous
1481 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
1482 module and then similar looking characters are removed.")
1483 (license license:bsd-3)))
1484
1485 (define-public python-logwrap
1486 (package
1487 (name "python-logwrap")
1488 (version "8.2.0.post0")
1489 (source
1490 (origin
1491 (method url-fetch)
1492 (uri (pypi-uri "logwrap" version))
1493 (sha256
1494 (base32
1495 "1dv7gny3rfci5cal2ipr6d0pcz3yhka7af96dfsd3ir1mxy8p1j9"))))
1496 (build-system python-build-system)
1497 (arguments
1498 `(#:tests? #f ; Tests not included in pypi release.
1499 #:phases
1500 (modify-phases %standard-phases
1501 (replace 'check
1502 (lambda* (#:key tests? #:allow-other-keys)
1503 (when tests?
1504 (invoke "pytest"))
1505 #t)))))
1506 (native-inputs
1507 (list python-cython python-pytest python-setuptools-scm python-toml
1508 python-wheel))
1509 (home-page "https://github.com/python-useful-helpers/logwrap")
1510 (synopsis "Decorator for logging function arguments")
1511 (description "This package provides a decorator to log function arguments
1512 and function call return values in a human-readable way.")
1513 (license license:asl2.0)))
1514
1515 (define-public python-clyent
1516 (package
1517 (name "python-clyent")
1518 (version "1.2.1")
1519 (source
1520 (origin
1521 (method url-fetch)
1522 (uri (pypi-uri "clyent" version))
1523 (sha256
1524 (base32
1525 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
1526 (build-system python-build-system)
1527 (native-inputs
1528 (list python-mock))
1529 (home-page "https://github.com/Anaconda-Platform/clyent")
1530 (synopsis "Command line client library")
1531 (description "Clyent is a Python command line utility library. It is used
1532 by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
1533 (license license:bsd-3)))
1534
1535 (define-public python-babel
1536 (package
1537 (name "python-babel")
1538 (version "2.10.3")
1539 (source
1540 (origin
1541 (method url-fetch)
1542 (uri (pypi-uri "Babel" version))
1543 (sha256
1544 (base32
1545 "0l9cvfmsz0hlvcinxaf6xf2f02ldgw3xq9i1fc7lk5zf24vma53n"))))
1546 (build-system python-build-system)
1547 (native-inputs
1548 (list python-freezegun python-pytest tzdata-for-tests))
1549 (propagated-inputs
1550 (list python-pytz))
1551 (arguments
1552 `(#:phases (modify-phases %standard-phases
1553 (replace 'check
1554 (lambda _
1555 (invoke "pytest" "-vv"))))))
1556 (home-page "https://babel.pocoo.org/")
1557 (synopsis
1558 "Tools for internationalizing Python applications")
1559 (description
1560 "Babel is composed of two major parts:
1561 - tools to build and work with gettext message catalogs
1562 - a Python interface to the CLDR (Common Locale Data Repository), providing
1563 access to various locale display names, localized number and date formatting,
1564 etc.")
1565 (license license:bsd-3)))
1566
1567 (define-public python-bidict
1568 (package
1569 (name "python-bidict")
1570 (version "0.21.2")
1571 (source
1572 (origin
1573 (method url-fetch)
1574 (uri (pypi-uri "bidict" version))
1575 (sha256
1576 (base32
1577 "02dy0b1k7qlhn7ajyzkrvxhyhjj0hzcq6ws3zjml9hkdz5znz92g"))))
1578 (build-system python-build-system)
1579 (native-inputs
1580 (list python-coverage
1581 python-hypothesis
1582 python-pre-commit
1583 python-py
1584 python-pytest
1585 python-pytest-benchmark
1586 python-pytest-cov
1587 python-setuptools-scm
1588 python-sortedcollections
1589 python-sortedcontainers
1590 python-sphinx
1591 python-sphinx-autodoc-typehints
1592 python-tox))
1593 (arguments
1594 `(#:phases (modify-phases %standard-phases
1595 (add-after 'unpack 'relax-reqs
1596 (lambda _
1597 (substitute* "setup.py"
1598 (("sortedcollections < 2") "sortedcollections"))
1599 #t))
1600 (replace 'check
1601 (lambda _ (invoke "./run_tests.py"))))))
1602 (home-page "https://bidict.readthedocs.io")
1603 (synopsis "Bidirectional mapping library")
1604 (description "The @code{bidict} library provides several data structures
1605 for working with bidirectional mappings in Python.")
1606 (license license:mpl2.0)))
1607
1608 (define-public python-bip39
1609 (package
1610 (name "python-bip39")
1611 (version "0.0.2")
1612 (source
1613 (origin
1614 (method url-fetch)
1615 (uri (pypi-uri "bip39" version))
1616 (sha256
1617 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
1618 (build-system python-build-system)
1619 (native-inputs (list python-pytest))
1620 (home-page "https://github.com/de-centralized-systems/python-bip39/")
1621 (synopsis "Self-contained and simple BIP39 implementation in Python")
1622 (description
1623 "This package provides a self-contained and simple BIP39
1624 implementation written in Python. It includes a @code{bip39.py} executable.
1625
1626 BIP39 is a standardized mapping between binary data (the @emph{entropy}),
1627 and a list of words that are easier to remember for humans (the
1628 @emph{mnemonic}).")
1629 (license license:expat)))
1630
1631 (define-public python-bitarray
1632 (package
1633 (name "python-bitarray")
1634 (version "1.4.0")
1635 (source (origin
1636 (method url-fetch)
1637 (uri (pypi-uri "bitarray" version))
1638 (sha256
1639 (base32
1640 "177fj6wbw5jln54wpp6plcqy2329wjkwqwvgz7022rrg3xfrq49g"))))
1641 (build-system python-build-system)
1642 (home-page "https://github.com/ilanschnell/bitarray")
1643 (synopsis "Efficient arrays of booleans")
1644 (description "This package provides an object type which efficiently
1645 represents an array of booleans. Bitarrays are sequence types and behave very
1646 much like usual lists. Eight bits are represented by one byte in a contiguous
1647 block of memory. The user can select between two representations:
1648 little-endian and big-endian. All of the functionality is implemented in C.
1649 Methods for accessing the machine representation are provided. This can be
1650 useful when bit level access to binary files is required, such as portable
1651 bitmap image files. Also, when dealing with compressed data which uses
1652 variable bit length encoding, you may find this module useful.")
1653 (license license:psfl)))
1654
1655 (define-public python-boolean.py
1656 (package
1657 (name "python-boolean.py")
1658 (version "3.6")
1659 (source
1660 (origin
1661 ;; There's no source tarball on PyPI.
1662 (method git-fetch)
1663 (uri (git-reference
1664 (url "https://github.com/bastikr/boolean.py")
1665 (commit (string-append "v" version))))
1666 (file-name (git-file-name name version))
1667 (sha256
1668 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
1669 (build-system python-build-system)
1670 (home-page "https://github.com/bastikr/boolean.py")
1671 (synopsis "Boolean algebra in one Python module")
1672 (description
1673 "This is a small Python library that implements boolean algebra.
1674 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
1675 @code{Symbol} class that can take on one of these two values. Calculations
1676 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
1677 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
1678 Expressions are constructed from parsed strings or directly in Python.")
1679 (license license:bsd-2)))
1680
1681 (define-public python-hdf4
1682 (package
1683 (name "python-hdf4")
1684 (version "0.9")
1685 (source
1686 (origin
1687 (method url-fetch)
1688 (uri (pypi-uri name version))
1689 (sha256
1690 (base32
1691 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
1692 (build-system python-build-system)
1693 (native-inputs `(("nose" ,python-nose)))
1694 (propagated-inputs `(("numpy" ,python-numpy)))
1695 (inputs
1696 `(("hdf4" ,hdf4)
1697 ("libjpeg" ,libjpeg-turbo)
1698 ("zlib" ,zlib)))
1699 (arguments
1700 `(#:phases
1701 (modify-phases %standard-phases
1702 (replace 'check
1703 (lambda _
1704 (invoke "./runexamples.sh")
1705 (invoke "nosetests" "-v"))))))
1706 (home-page "https://github.com/fhs/python-hdf4")
1707 (synopsis "Python interface to the NCSA HDF4 library")
1708 (description
1709 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
1710 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
1711 NetCDF files can also be read and modified. Python-HDF4 is a fork of
1712 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
1713 (license license:expat)))
1714
1715 (define-public python-h5netcdf
1716 (package
1717 (name "python-h5netcdf")
1718 (version "1.0.1")
1719 (source
1720 (origin
1721 (method url-fetch)
1722 (uri (pypi-uri "h5netcdf" version))
1723 (sha256
1724 (base32 "1b2dcgf5rwy7pb7hr4prkc5vgcw9qc2was20dmnj90lbrpx08rvp"))))
1725 (build-system python-build-system)
1726 (arguments
1727 (list #:phases
1728 #~(modify-phases %standard-phases
1729 (replace 'check
1730 (lambda* (#:key tests? #:allow-other-keys)
1731 (when tests?
1732 (invoke "pytest" "-vv" "h5netcdf/tests")))))))
1733 (native-inputs
1734 (list python-netcdf4
1735 python-pytest
1736 python-setuptools-scm))
1737 (propagated-inputs
1738 (list python-h5py python-packaging))
1739 (home-page "https://h5netcdf.org")
1740 (synopsis "Python interface for the netCDF4 file-format based on h5py")
1741 (description "This package provides Python interface for the netCDF4
1742 file-format that reads and writes local or remote HDF5 files directly via h5py
1743 or h5pyd, without relying on the Unidata netCDF library")
1744 (license license:bsd-3)))
1745
1746 (define-public python-h5py
1747 (package
1748 (name "python-h5py")
1749 (version "3.6.0")
1750 (source
1751 (origin
1752 (method url-fetch)
1753 (uri (pypi-uri "h5py" version))
1754 (sha256
1755 (base32
1756 "0afv805vqrm5071g7alwv41920nhh8kjv4m5nbia9awj9a0x4ll7"))))
1757 (build-system python-build-system)
1758 (arguments
1759 `(#:tests? #f ; no test target
1760 #:phases
1761 (modify-phases %standard-phases
1762 (add-after 'unpack 'fix-hdf5-paths
1763 (lambda* (#:key inputs #:allow-other-keys)
1764 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5")))))))
1765 (propagated-inputs
1766 (list python-six python-numpy))
1767 (inputs
1768 (list hdf5-1.10))
1769 (native-inputs
1770 (list python-cython python-pkgconfig pkg-config))
1771 (home-page "https://www.h5py.org/")
1772 (synopsis "Read and write HDF5 files from Python")
1773 (description
1774 "The h5py package provides both a high- and low-level interface to the
1775 HDF5 library from Python. The low-level interface is intended to be a
1776 complete wrapping of the HDF5 API, while the high-level component supports
1777 access to HDF5 files, datasets and groups using established Python and NumPy
1778 concepts.")
1779 (license license:bsd-3)))
1780
1781 (define-public python-hnswlib
1782 (package
1783 (name "python-hnswlib")
1784 (version "0.5.2")
1785 (source
1786 (origin
1787 (method url-fetch)
1788 (uri (pypi-uri "hnswlib" version))
1789 (sha256
1790 (base32 "0wf1cwmxmdzfqmfhrkqdxb5spf21ylgl2bidswhzjrqhwf35c9qf"))))
1791 (build-system python-build-system)
1792 (arguments
1793 `(#:phases
1794 (modify-phases %standard-phases
1795 (add-after 'unpack 'disable-native-optimization
1796 (lambda _
1797 (substitute* "setup.py"
1798 ((", '-march=native'") "")))))))
1799 (propagated-inputs
1800 (list python-numpy))
1801 (native-inputs
1802 (list pybind11))
1803 (home-page "https://github.com/nmslib/hnswlib")
1804 (synopsis "Fast approximate nearest neighbor search")
1805 (description "Hnswlib is a header-only C++ implementation of fast
1806 approximate nearest neighbor search with Python bindings.")
1807 (license license:asl2.0)))
1808
1809 (define-public python-pylatexenc
1810 (package
1811 (name "python-pylatexenc")
1812 (version "2.10")
1813 (source (origin
1814 (method url-fetch)
1815 (uri (pypi-uri "pylatexenc" version))
1816 (file-name (string-append name "-" version ".tar.gz"))
1817 (sha256
1818 (base32
1819 "1ls09z47b5md71gkxcj7fd87ynpvv2walgp2w6z31p26xf2gvn1x"))))
1820 (build-system python-build-system)
1821 (home-page "https://github.com/phfaist/pylatexenc")
1822 (synopsis "LaTeX parser for Unicode/LaTeX conversion")
1823 (description
1824 "@code{python-pylatexenc} is a LaTeX parser providing LaTeX-to-Unicode and
1825 Unicode-to-LaTeX conversion.")
1826 (license license:expat)))
1827
1828 (define-public python-pyls-black
1829 (package
1830 (name "python-pyls-black")
1831 (version "0.4.7")
1832 (source
1833 (origin
1834 ;; There are no tests in the PyPI tarball.
1835 (method git-fetch)
1836 (uri (git-reference
1837 (url "https://github.com/rupert/pyls-black/")
1838 (commit (string-append "v" version))))
1839 (file-name (git-file-name name version))
1840 (sha256
1841 (base32 "0bkhfnlik89j3yamr20br4wm8975f20v33wabi2nyxvj10whr5dj"))
1842 ;; Patch to work with python-lsp-server. Taken from
1843 ;; <https://github.com/rupert/pyls-black/pull/37>.
1844 (modules '((guix build utils)))
1845 (snippet
1846 '(begin
1847 (substitute* "setup.cfg"
1848 (("python-language-server")
1849 "python-lsp-server"))
1850 (substitute* '("pyls_black/plugin.py" "tests/test_plugin.py")
1851 (("pyls_format_document")
1852 "pylsp_format_document")
1853 (("pyls_format_range")
1854 "pylsp_format_range")
1855 (("from pyls([ \\.])" _ char)
1856 (string-append "from pylsp" char)))))))
1857 (build-system python-build-system)
1858 (arguments
1859 `(#:test-target "pytest"))
1860 (propagated-inputs
1861 (list python-black python-lsp-server python-tomli))
1862 (native-inputs
1863 (list python-flake8 python-isort python-mypy python-pytest
1864 python-pytest-runner))
1865 (home-page "https://github.com/rupert/pyls-black")
1866 (synopsis "Black plugin for the Python Language Server")
1867 (description "Black plugin for the Python Language Server.")
1868 (license license:expat)))
1869
1870 (define-public python-sh
1871 (package
1872 (name "python-sh")
1873 (version "1.14.2")
1874 (source
1875 (origin
1876 (method url-fetch)
1877 (uri (pypi-uri "sh" version))
1878 (sha256
1879 (base32
1880 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
1881 (build-system python-build-system)
1882 (arguments
1883 '(#:phases
1884 (modify-phases %standard-phases
1885 (replace 'check
1886 (lambda _
1887 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
1888 (setenv "HOME" "/tmp")
1889 (invoke "python" "sh.py" "test"))))))
1890 (native-inputs
1891 (list python-coverage))
1892 (home-page "https://github.com/amoffat/sh")
1893 (synopsis "Python subprocess replacement")
1894 (description "This package provides a replacement for Python's
1895 @code{subprocess} feature.")
1896 (license license:expat)))
1897
1898 (define-public python-cftime
1899 (package
1900 (name "python-cftime")
1901 (version "1.5.1.1")
1902 (source
1903 (origin
1904 (method url-fetch)
1905 (uri (pypi-uri "cftime" version))
1906 (sha256
1907 (base32 "0l1a22zlhdpgaisibvvm7dhij4vzfm661rnv00y2snpyqxpdgi3d"))))
1908 (build-system python-build-system)
1909 (propagated-inputs
1910 (list python-numpy))
1911 (native-inputs
1912 (list python-check-manifest
1913 python-coverage
1914 python-coveralls
1915 python-cython
1916 python-pytest-cov
1917 python-sphinx
1918 python-twine
1919 python-wheel))
1920 (home-page "https://unidata.github.io/cftime/")
1921 (synopsis "Library for time handling")
1922 (description
1923 "This package provides time-handling functionality that used to be part
1924 of the netcdf4 package before.")
1925 (license license:expat)))
1926
1927 (define-public python-netcdf4
1928 (package
1929 (name "python-netcdf4")
1930 (version "1.6.0")
1931 (source
1932 (origin
1933 (method url-fetch)
1934 (uri (pypi-uri "netCDF4" version))
1935 (sha256
1936 (base32
1937 "0qxs8r1qmsmg760wm5q0wqlcm7hdd3k7cghryw6wvqd3v5rs7vwm"))))
1938 (build-system python-build-system)
1939 (arguments
1940 '(#:phases
1941 (modify-phases %standard-phases
1942 (add-after 'unpack 'configure-locations
1943 (lambda* (#:key inputs #:allow-other-keys)
1944 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
1945 #t)))))
1946 (native-inputs
1947 (list python-cython))
1948 (propagated-inputs
1949 (list python-numpy python-cftime))
1950 (inputs
1951 (list netcdf hdf4 hdf5))
1952 (home-page "https://github.com/Unidata/netcdf4-python")
1953 (synopsis "Python/numpy interface to the netCDF library")
1954 (description "Netcdf4-python is a Python interface to the netCDF C
1955 library. netCDF version 4 has many features not found in earlier
1956 versions of the library and is implemented on top of HDF5. This module
1957 can read and write files in both the new netCDF 4 and the old netCDF 3
1958 format, and can create files that are readable by HDF5 clients. The
1959 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
1960 to users of that module.")
1961 ;; The software is mainly ISC, but includes some files covered
1962 ;; by the Expat license.
1963 (license (list license:isc license:expat))))
1964
1965 (define-public python-ncclient
1966 (package
1967 (name "python-ncclient")
1968 (version "0.6.12")
1969 (source
1970 (origin
1971 (method git-fetch) ;no tests in PyPI release
1972 (uri (git-reference
1973 (url "https://github.com/ncclient/ncclient")
1974 (commit (string-append "v" version))))
1975 (file-name (git-file-name name version))
1976 (sha256
1977 (base32
1978 "0cb568z5syg6hh0dv813bw7s1mjy7ga5xzxbm9naf4zz2qfdg4js"))))
1979 (build-system python-build-system)
1980 (arguments
1981 `(#:phases (modify-phases %standard-phases
1982 (replace 'check
1983 (lambda* (#:key tests? #:allow-other-keys)
1984 (when tests?
1985 (invoke "pytest")))))))
1986 (native-inputs
1987 (list python-pytest))
1988 (propagated-inputs
1989 (list python-lxml python-paramiko))
1990 (home-page "https://github.com/ncclient/ncclient")
1991 (synopsis "Python library for NETCONF clients")
1992 (description "@code{ncclient} is a Python library that facilitates
1993 client-side scripting and application development around the NETCONF
1994 protocol.")
1995 (license license:asl2.0)))
1996
1997 (define-public python-ncls
1998 (package
1999 (name "python-ncls")
2000 (version "0.0.65")
2001 (source (origin
2002 (method url-fetch)
2003 (uri (pypi-uri "ncls" version))
2004 (sha256
2005 (base32
2006 "1wx06xqknd2r98w8z93f47g5dpxzn92kamhj8vkq0nj569hf7cg1"))))
2007 (build-system python-build-system)
2008 (propagated-inputs (list python-numpy))
2009 (home-page "https://github.com/endrebak/ncls")
2010 (synopsis "Nested containment list data structure")
2011 (description
2012 "This package provides a wrapper for the nested containment list data
2013 structure. It is a static interval-tree that is fast for both construction
2014 and lookups.")
2015 (license license:bsd-3)))
2016
2017 (define-public python-license-expression
2018 (package
2019 (name "python-license-expression")
2020 (version "1.2")
2021 (source
2022 (origin
2023 (method url-fetch)
2024 (uri (pypi-uri "license-expression" version))
2025 (sha256
2026 (base32 "1g0sgphss8hbi1rpl4avy1nmbixmy9v194xdbvkjgl90vzgy2q3r"))))
2027 (build-system python-build-system)
2028 (propagated-inputs
2029 (list python-boolean.py))
2030 (home-page "https://github.com/nexB/license-expression")
2031 (synopsis "Apply boolean logic to license expressions")
2032 (description
2033 "This Python module defines a tiny language to evaluate and compare
2034 license expressions using boolean logic. Logical combinations of licenses can
2035 be tested for equality, containment, and equivalence. They can be normalised
2036 and simplified. It supports SPDX license expressions as well as other naming
2037 conventions and aliases in the same expression.")
2038 (license license:gpl2+)))
2039
2040 (define-public python-wand
2041 (package
2042 (name "python-wand")
2043 (version "0.6.10")
2044 (source
2045 (origin
2046 (method url-fetch)
2047 (uri (pypi-uri "Wand" version))
2048 (sha256
2049 (base32 "0mywzs235skwq670c80achrd34kangwy24793k1nij3651zllgrp"))))
2050 (build-system python-build-system)
2051 (arguments
2052 `(#:phases
2053 (modify-phases %standard-phases
2054 (add-after 'unpack 'find-magickwand
2055 (lambda* (#:key inputs #:allow-other-keys)
2056 (setenv "MAGICK_HOME" (assoc-ref inputs "imagemagick"))
2057 (setenv "WAND_MAGICK_LIBRARY_SUFFIX" ".Q16"))))))
2058 (native-inputs
2059 (list python-pytest))
2060 (inputs
2061 (list imagemagick))
2062 (home-page "https://docs.wand-py.org/")
2063 (synopsis "MagickWand API binding for Python")
2064 (description
2065 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
2066 (license license:expat)))
2067
2068 (define-public python-lockfile
2069 (package
2070 (name "python-lockfile")
2071 (version "0.12.2")
2072 (source
2073 (origin
2074 (method url-fetch)
2075 (uri (pypi-uri "lockfile" version))
2076 (sha256
2077 (base32
2078 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
2079 (build-system python-build-system)
2080 (arguments '(#:test-target "check"))
2081 (native-inputs
2082 (list python-pbr))
2083 (home-page "https://launchpad.net/pylockfile")
2084 (synopsis "Platform-independent file locking module")
2085 (description
2086 "The lockfile package exports a LockFile class which provides a simple
2087 API for locking files.")
2088 (license license:expat)))
2089
2090 (define-public python-fb-re2
2091 (package
2092 (name "python-fb-re2")
2093 (version "1.0.7")
2094 (source
2095 (origin
2096 (method git-fetch)
2097 (uri (git-reference
2098 (url "https://github.com/facebook/pyre2")
2099 (commit (string-append "v" version))))
2100 (file-name (git-file-name name version))
2101 (sha256
2102 (base32
2103 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
2104 (build-system python-build-system)
2105 (inputs
2106 (list re2))
2107 (home-page "https://github.com/facebook/pyre2")
2108 (synopsis "Python wrapper for RE2")
2109 (description "This package provides a Python extension that wraps Google's
2110 RE2 regular expression library. It implements many of the features of
2111 Python's built-in @code{re} module with compatible interfaces.")
2112 (license license:bsd-3)))
2113
2114 (define-public python-filelock
2115 (package
2116 (name "python-filelock")
2117 (version "3.0.12")
2118 (source
2119 (origin
2120 (method url-fetch)
2121 (uri (pypi-uri "filelock" version))
2122 (sha256
2123 (base32
2124 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
2125 (build-system python-build-system)
2126 (home-page
2127 "https://github.com/benediktschmitt/py-filelock")
2128 (synopsis "Platform independent file lock")
2129 (description "@code{filelock} contains a single module implementing
2130 a platform independent file lock in Python, which provides a simple way of
2131 inter-process communication.")
2132 (license license:unlicense)))
2133
2134 (define-public python-semantic-version
2135 (package
2136 (name "python-semantic-version")
2137 (version "2.8.5")
2138 (source
2139 (origin
2140 (method url-fetch)
2141 (uri (pypi-uri "semantic_version" version))
2142 (sha256
2143 (base32
2144 "0m4avx8zdkzc7qglv5zlr54g8yna5vl098drg5396ql7aph2vjyj"))))
2145 (build-system python-build-system)
2146 (home-page "https://github.com/rbarrois/python-semanticversion")
2147 (synopsis "Semantic versioning module for Python")
2148 (description
2149 "The @code{semantic_version} class is a small library for handling
2150 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
2151
2152 It can compare versions, generate a new version that represents a bump in one of
2153 the version levels, and check whether any given string is a proper semantic
2154 version identifier.")
2155 (license license:bsd-3)))
2156
2157 (define-public python-serpent
2158 (package
2159 (name "python-serpent")
2160 (version "1.28")
2161 (source
2162 (origin
2163 (method url-fetch)
2164 (uri (pypi-uri "serpent" version))
2165 (sha256
2166 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
2167 (build-system python-build-system)
2168 (native-inputs
2169 (list python-attrs python-pytz))
2170 (home-page "https://github.com/irmen/Serpent")
2171 (synopsis "Serializer for literal Python expressions")
2172 (description
2173 "Serpent provides @code{ast.literal_eval()}-compatible object tree
2174 serialization. It serializes an object tree into bytes (an utf-8 encoded
2175 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
2176 to rebuild the original object tree.
2177
2178 Because only safe literals are encoded, it is safe to send serpent data to
2179 other machines, such as over the network.")
2180 (license license:expat)))
2181
2182 (define-public python-setuptools-declarative-requirements
2183 (package
2184 (name "python-setuptools-declarative-requirements")
2185 (version "1.2.0")
2186 (source
2187 (origin
2188 (method url-fetch)
2189 (uri (pypi-uri
2190 "setuptools-declarative-requirements"
2191 version))
2192 (sha256
2193 (base32
2194 "1l8zmcnp9h8sp8hsw7b81djaa1a9yig0y7i4phh5pihqz1gdn7yi"))))
2195 (build-system python-build-system)
2196 (native-inputs
2197 (list python-pytest python-setuptools-scm))
2198 (propagated-inputs
2199 (list python-toml python-wheel))
2200 (home-page
2201 "https://github.com/s0undt3ch/setuptools-declarative-requirements")
2202 (synopsis "File support for setuptools declarative setup.cfg")
2203 (description
2204 "This package provides file support for setuptools declarative
2205 @code{setup.cfg}.")
2206 (license license:asl2.0)))
2207
2208 ;; The setuptools provided by Python 3.9 is too new for Tensorflow.
2209 (define-public python-setuptools-for-tensorflow
2210 (hidden-package
2211 (package
2212 (inherit python-setuptools)
2213 (version "39.1.0")
2214 (source (origin
2215 (inherit (package-source python-setuptools))
2216 (uri (pypi-uri "setuptools" version ".zip"))
2217 (sha256
2218 (base32
2219 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65"))))
2220 (arguments
2221 `(#:tests? #f ; tests require vendored resources
2222 #:phases
2223 (modify-phases %standard-phases
2224 (add-after 'unpack 'compatibility-fixes
2225 (lambda _
2226 ;; Python 3.9 no longer has HTMLParser
2227 (substitute* "setuptools/py33compat.py"
2228 (("html_parser.HTMLParser\\(\\).unescape")
2229 "html.unescape"))
2230 ;; This needs distutils.msvc9compiler
2231 (delete-file "setuptools/tests/test_msvc.py"))))))
2232 (native-inputs
2233 (list python-pytest python-mock python-six)))))
2234
2235 (define-public python-uniseg
2236 (package
2237 (name "python-uniseg")
2238 (version "0.7.1")
2239 (source
2240 (origin
2241 (method url-fetch)
2242 (uri (pypi-uri "uniseg" version ".zip"))
2243 (sha256
2244 (base32
2245 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
2246 (build-system python-build-system)
2247 (arguments
2248 '(#:tests? #f)) ; The test suite requires network access.
2249 (native-inputs
2250 (list unzip))
2251 (home-page
2252 "https://bitbucket.org/emptypage/uniseg-python")
2253 (synopsis
2254 "Python library to determine Unicode text segmentations")
2255 (description
2256 "Uniseg is a Python package used to determine Unicode text segmentations.
2257 Supported segmentations include:
2258 @enumerate
2259 @item @dfn{Code point} (any value in the Unicode codespace)
2260 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
2261 multiple Unicode code points, e.g. \"G\" + acute-accent)
2262 @item Word break
2263 @item Sentence break
2264 @item Line break
2265 @end enumerate")
2266 (license license:expat)))
2267
2268 (define-public python-humanfriendly
2269 (package
2270 (name "python-humanfriendly")
2271 (version "8.2")
2272 (source
2273 (origin
2274 (method url-fetch)
2275 (uri (pypi-uri "humanfriendly" version))
2276 (sha256
2277 (base32
2278 "04ixg8b7p6xc8x8lffhi7wfl77xhszakhd0s6j0cf6a84j8yqlmz"))))
2279 (build-system python-build-system)
2280 (arguments
2281 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
2282 #:tests? #f))
2283 (home-page "https://humanfriendly.readthedocs.io")
2284 (synopsis "Human-friendly input and output in Python")
2285 (description
2286 "The functions and classes in @code{humanfriendly} can be used to make
2287 text interfaces more user-friendly. It includes tools to parse and format
2288 numbers, file sizes, and timespans, timers for long-running operations, menus
2289 to allow the user to choose from a list of options, and terminal interaction
2290 helpers.")
2291 (license license:expat)))
2292
2293 (define-public python-textparser
2294 (package
2295 (name "python-textparser")
2296 (version "0.23.0")
2297 (source
2298 (origin
2299 (method url-fetch)
2300 (uri (pypi-uri "textparser" version))
2301 (sha256
2302 (base32
2303 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
2304 (build-system python-build-system)
2305 (home-page "https://github.com/eerimoq/textparser")
2306 (synopsis "Fast text parser for Python")
2307 (description "This library provides a text parser written in the Python
2308 language. It aims to be fast.")
2309 (license license:expat)))
2310
2311 (define-public python-aenum
2312 (package
2313 (name "python-aenum")
2314 (version "2.2.4")
2315 (source
2316 (origin
2317 (method url-fetch)
2318 (uri (pypi-uri "aenum" version))
2319 (sha256
2320 (base32 "0r1812bjm72x73pl7y4yhffr4zbdjgxa08avsy4b3di0pqgqv0l1"))))
2321 (build-system python-build-system)
2322 (arguments
2323 `(#:phases (modify-phases %standard-phases
2324 (replace 'check
2325 (lambda _
2326 ;; We must run the test suite module directly, as it
2327 ;; fails to define the 'tempdir' variable in scope for
2328 ;; the tests otherwise
2329 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
2330 ;; issues/32/running-tests-with-python-setuppy-test).
2331 (invoke "python3" "aenum/test.py")
2332 ;; This one fails with "NameError: name
2333 ;; 'test_pickle_dump_load' is not defined" (see:
2334 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
2335 ;; /error-running-the-test_v3py-test-suite).
2336 ;; (invoke "python3" "aenum/test_v3.py")
2337 #t)))))
2338 (home-page "https://bitbucket.org/stoneleaf/aenum")
2339 (synopsis "Advanced enumerations, namedtuples and constants for Python")
2340 (description "The aenum library includes an @code{Enum} base class, a
2341 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
2342 class.")
2343 (license license:bsd-3)))
2344
2345 (define-public python-can
2346 (package
2347 (name "python-can")
2348 (version "4.0.0")
2349 (source
2350 (origin
2351 (method url-fetch)
2352 (uri (pypi-uri "python-can" version))
2353 (sha256
2354 (base32
2355 "0pcbdgdw94lc2sxd56w6wdsshrs9dd5d3wp0x4sfd0drzx32inar"))))
2356 (build-system python-build-system)
2357 (arguments
2358 `(#:phases (modify-phases %standard-phases
2359 (add-after 'unpack 'relax-version-requirements
2360 (lambda _
2361 (substitute* "setup.py"
2362 (("mock~=2\\.0") "mock")
2363 (("coverage<5") "coverage")
2364 (("pytest~=4\\.6") "pytest")
2365 (("pytest-timeout~=1\\.3") "pytest-timeout")
2366 (("pytest-cov.*") "pytest-cov\n")
2367 (("hypothesis~=4\\.56") "hypothesis"))))
2368 (add-after 'unpack 'fix-broken-tests
2369 ;; The tests try to run two scripts it expects should be
2370 ;; in PATH, but they aren't at this time (see:
2371 ;; https://github.com/hardbyte/python-can/issues/805).
2372 (lambda _
2373 (substitute* "test/test_scripts.py"
2374 (("\"can_logger\\.py --help\"") "")
2375 (("\"can_player\\.py --help\"") ""))))
2376 (replace 'check
2377 (lambda* (#:key tests? #:allow-other-keys)
2378 (when tests?
2379 (invoke "pytest" "-vv" "test"
2380 ;; Disable tests which require specific CAN
2381 ;; drivers we have no package for in Guix.
2382 "--ignore" "test/test_interface_canalystii.py"
2383 ;; These tests fail with "OSError: [Errno 19]
2384 ;; No such device".
2385 "-k" "not BasicTestUdpMulticastBusIPv")))))))
2386 (propagated-inputs
2387 (list python-msgpack python-typing-extensions python-wrapt))
2388 (native-inputs
2389 (list python-codecov
2390 python-coverage
2391 python-future
2392 python-hypothesis
2393 python-mock
2394 python-parameterized
2395 python-pyserial
2396 python-pytest
2397 python-pytest-cov
2398 python-pytest-runner
2399 python-pytest-timeout))
2400 (home-page "https://github.com/hardbyte/python-can")
2401 (synopsis "Controller Area Network (CAN) interface module for Python")
2402 (description "This package defines the @code{can} module, which provides
2403 controller area network (CAN) support for Python developers; providing common
2404 abstractions to different hardware devices, and a suite of utilities for
2405 sending and receiving messages on a CAN bus.")
2406 (license license:lgpl3+)))
2407
2408 (define-public python-canopen
2409 (package
2410 (name "python-canopen")
2411 (version "2.0.0")
2412 (source
2413 (origin
2414 (method url-fetch)
2415 (uri (pypi-uri "canopen" version))
2416 (sha256
2417 (base32 "1nb543wb37kj95v6bhh272lm5gkpi41q3pnsl1fxlyizm2gamj5w"))))
2418 (build-system python-build-system)
2419 (native-inputs (list python-packaging))
2420 (propagated-inputs (list python-can))
2421 (home-page "https://github.com/christiansandberg/canopen")
2422 (synopsis "CANopen stack implementation")
2423 (description
2424 "This package provides a Python implementation of the
2425 @uref{https://www.can-cia.org/canopen/,CANopen standard} for
2426 @acronym{CANs, controller-area networks}. The aim of the project is to
2427 support the most common parts of the CiA 301 standard in a simple
2428 Pythonic interface. It is mainly targeted for testing and automation
2429 tasks rather than a standard compliant master implementation.")
2430 (license license:expat)))
2431
2432 (define-public python-caniusepython3
2433 (package
2434 (name "python-caniusepython3")
2435 (version "7.2.0")
2436 (source
2437 (origin
2438 (method url-fetch)
2439 (uri (pypi-uri "caniusepython3" version))
2440 (sha256
2441 (base32
2442 "0a755444ln38j8d7xb3yw0wzpd0mjrzfn6zqvsh06nw1vdaq4l28"))))
2443 (build-system python-build-system)
2444 (arguments
2445 `(#:phases (modify-phases %standard-phases
2446 (add-after 'unpack 'relax-requirements
2447 (lambda _
2448 (substitute* "setup.py"
2449 ;; These are for compatibility with Python 2.
2450 ((".*'argparse', 'backports.functools_lru_cache',.*")
2451 ""))
2452 (substitute* "dev_requirements.txt"
2453 ((".*pylint.*") "")) ;not actually required
2454 #t))
2455 (replace 'check
2456 (lambda _
2457 (invoke "py.test" "-k" "not NetworkTests"))))))
2458 (propagated-inputs
2459 (list python-distlib python-packaging python-requests))
2460 (native-inputs
2461 (list python-mock python-pytest))
2462 (home-page "https://github.com/brettcannon/caniusepython3")
2463 (synopsis "Check for Python 3-incompatible Python libraries")
2464 (description "The @command{caniusepython3} command scans your project and
2465 reports the Python 3-incompatible libraries it found. It can also be used as
2466 a library.")
2467 (license license:asl2.0)))
2468
2469 (define-public python-diskcache
2470 (package
2471 (name "python-diskcache")
2472 (version "4.1.0")
2473 (source
2474 (origin
2475 (method url-fetch)
2476 (uri (pypi-uri "diskcache" version))
2477 (sha256
2478 (base32
2479 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
2480 (build-system python-build-system)
2481 (arguments
2482 `(#:tests? #f)) ;test suite not included in the release
2483 (home-page "http://www.grantjenks.com/docs/diskcache/")
2484 (synopsis "Disk and file backed cache library")
2485 (description "DiskCache is a disk and file backed persistent cache.")
2486 (license license:asl2.0)))
2487
2488 (define-public python-argparse-addons
2489 (package
2490 (name "python-argparse-addons")
2491 (version "0.7.0")
2492 (source
2493 (origin
2494 (method url-fetch)
2495 (uri (pypi-uri "argparse_addons" version))
2496 (sha256
2497 (base32 "1yx54dmnr3xggjcjk6bbdafvzp6cynrakl56wyz3jglmfvk0znpm"))))
2498 (build-system python-build-system)
2499 (home-page "https://github.com/eerimoq/argparse_addons")
2500 (synopsis "Extensions for Python's @code{argparse} library")
2501 (description "This Python library provides additional types and actions
2502 for the standard @code{argparse} library.")
2503 (license license:expat)))
2504
2505 (define-public python-bitstruct
2506 (package
2507 (name "python-bitstruct")
2508 (version "8.14.0")
2509 (source
2510 (origin
2511 (method url-fetch)
2512 (uri (pypi-uri "bitstruct" version))
2513 (sha256
2514 (base32
2515 "149c73yrqbph71bbyf925r2mbh2jdymqxc6d49lnylpiflf1j313"))))
2516 (build-system python-build-system)
2517 (home-page "https://github.com/eerimoq/bitstruct")
2518 (synopsis "Python values to and C bit field structs converter")
2519 (description "This module performs conversions between Python values and C
2520 bit field structs represented as Python byte strings. It is intended to have
2521 a similar interface as the @code{struct} module from Python, but working on
2522 bits instead of primitive data types like @code{char}, @code{int}, etc.")
2523 (license license:expat)))
2524
2525 (define-public python-cantools
2526 (package
2527 (name "python-cantools")
2528 (version "37.0.7")
2529 (source
2530 (origin
2531 ;; We take the sources from the Git repository as the documentation is
2532 ;; not included with the PyPI archive.
2533 (method git-fetch)
2534 (uri (git-reference
2535 (url "https://github.com/eerimoq/cantools")
2536 (commit version)))
2537 (file-name (git-file-name name version))
2538 (sha256
2539 (base32
2540 "1qcf1fcwif7w70qmhxw2b8kqh420igbinq60p1chzf98xcb0ansx"))))
2541 (build-system python-build-system)
2542 (arguments
2543 (list
2544 #:phases
2545 #~(modify-phases %standard-phases
2546 (add-after 'build 'build-doc
2547 (lambda _
2548 ;; See: https://github.com/eerimoq/cantools/issues/190.
2549 (substitute* "README.rst"
2550 (("https://github.com/eerimoq/cantools/raw/master\
2551 /docs/monitor.png")
2552 "monitor.png"))
2553 (invoke "make" "-C" "docs" "man" "info")))
2554 (add-after 'install 'install-doc
2555 (lambda* (#:key outputs #:allow-other-keys)
2556 (let* ((info (string-append #$output "/share/info"))
2557 (man1 (string-append #$output "/share/man/man1")))
2558 (install-file "docs/_build/texinfo/cantools.info" info)
2559 (install-file "docs/_build/man/cantools.1" man1)))))))
2560 (native-inputs (list python-sphinx texinfo))
2561 (propagated-inputs
2562 (list python-argparse-addons
2563 python-bitstruct
2564 python-can
2565 python-crccheck
2566 python-diskcache
2567 python-matplotlib
2568 python-parameterized
2569 python-textparser))
2570 (home-page "https://github.com/eerimoq/cantools")
2571 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
2572 (description "This package includes Controller Area Network (CAN) related
2573 tools that can be used to:
2574 @itemize
2575 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
2576 @item encode and decode CAN messages
2577 @item multiplex simple and extended signals
2578 @item diagnose DID encoding and decoding
2579 @item dump the CAN decoder output
2580 @item test CAN nodes
2581 @item generate C source code
2582 @item monitor the CAN bus
2583 @end itemize")
2584 (license license:expat)))
2585
2586 (define-public python-capturer
2587 (package
2588 (name "python-capturer")
2589 (version "2.4")
2590 (source
2591 (origin
2592 (method url-fetch)
2593 (uri (pypi-uri "capturer" version))
2594 (sha256
2595 (base32
2596 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
2597 (build-system python-build-system)
2598 (arguments
2599 `(#:tests? #f))
2600 (propagated-inputs
2601 (list python-humanfriendly))
2602 (home-page "https://capturer.readthedocs.io")
2603 (synopsis "Capture stdout and stderr streams of the current process")
2604 (description
2605 "The capturer package makes it easy to capture the stdout and stderr
2606 streams of the current process and subprocesses. Output can be relayed
2607 to the terminal in real time but is also available to the Python program
2608 for additional processing.")
2609 (license license:expat)))
2610
2611 (define-public python-case
2612 (package
2613 (name "python-case")
2614 (version "1.5.3")
2615 (source
2616 (origin
2617 (method url-fetch)
2618 (uri (pypi-uri "case" version))
2619 (sha256
2620 (base32
2621 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
2622 (build-system python-build-system)
2623 (propagated-inputs
2624 (list python-mock python-nose python-six))
2625 (native-inputs
2626 (list python-coverage))
2627 (home-page "https://github.com/celery/case")
2628 (synopsis "Unittest utilities and convenience methods")
2629 (description
2630 "The @code{case} package provides utilities on top of unittest, including
2631 some helpful Python 2 compatibility convenience methods.")
2632 (license license:bsd-3)))
2633
2634 (define-public python-verboselogs
2635 (package
2636 (name "python-verboselogs")
2637 (version "1.7")
2638 (source
2639 (origin
2640 (method url-fetch)
2641 (uri (pypi-uri "verboselogs" version))
2642 (sha256
2643 (base32
2644 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
2645 (build-system python-build-system)
2646 (arguments
2647 `(#:phases
2648 (modify-phases %standard-phases
2649 (replace 'check
2650 (lambda _
2651 ;; Do not run pylint plugin test, as astroid is an old
2652 ;; unsupported version.
2653 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
2654 "verboselogs/tests.py"))))))
2655 (native-inputs
2656 (list python-mock python-pytest))
2657 (home-page "https://verboselogs.readthedocs.io")
2658 (synopsis "Verbose logging level for Python's logging module")
2659 (description
2660 "The @code{verboselogs} package extends Python's @code{logging} module to
2661 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
2662 (license license:expat)))
2663
2664 (define-public python-coloredlogs
2665 (package
2666 (name "python-coloredlogs")
2667 (version "10.0")
2668 (source
2669 (origin
2670 (method url-fetch)
2671 (uri (pypi-uri "coloredlogs" version))
2672 (sha256
2673 (base32
2674 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
2675 (build-system python-build-system)
2676 (arguments
2677 `(;Tests require some updated modules
2678 #:tests? #f))
2679 (propagated-inputs
2680 (list python-capturer))
2681 (home-page "https://coloredlogs.readthedocs.io")
2682 (synopsis "Colored stream handler for Python's logging module")
2683 (description
2684 "The @code{coloredlogs} package enables colored terminal output for
2685 Python's logging module. The @code{ColoredFormatter} class inherits from
2686 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
2687 messages in color.")
2688 (license license:expat)))
2689
2690 (define-public python-editorconfig
2691 (package
2692 (name "python-editorconfig")
2693 (version "0.12.2")
2694 (source
2695 (origin
2696 (method url-fetch)
2697 (uri (pypi-uri "EditorConfig" version))
2698 (sha256
2699 (base32
2700 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
2701 (build-system python-build-system)
2702 (home-page "https://editorconfig.org/")
2703 (synopsis "EditorConfig bindings for python")
2704 (description "The EditorConfig project consists of a file format for
2705 defining coding styles and a collection of text editor plugins that enable
2706 editors to read the file format and adhere to defined styles. EditorConfig
2707 files are easily readable and they work nicely with version control systems.")
2708 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
2709 (license (list license:bsd-2 license:psfl))))
2710
2711 (define-public dosage
2712 (package
2713 (name "dosage")
2714 (version "2.17")
2715 (source
2716 (origin
2717 (method url-fetch)
2718 (uri (pypi-uri "dosage" version))
2719 (sha256
2720 (base32
2721 "0vmxgn9wd3j80hp4gr5iq06jrl4gryz5zgfdd2ah30d12sfcfig0"))))
2722 (build-system python-build-system)
2723 (propagated-inputs
2724 (list python-cached-property
2725 python-colorama
2726 python-imagesize
2727 python-importlib-metadata
2728 python-lxml
2729 python-requests
2730 python-six))
2731 (native-inputs
2732 (list python-pytest-cov python-pytest-xdist python-responses
2733 python-setuptools-scm))
2734 (home-page "https://github.com/webcomics/dosage")
2735 (synopsis "Comic strip downloader and archiver")
2736 (description "Dosage is designed to keep a local copy of specific webcomics and other
2737 picture-based content such as Picture of the Day sites. With the @command{dosage}
2738 command-line script you can get the latest strip of a webcomic, catch-up to the last strip
2739 downloaded, or download a strip for a particular date or index, if possible.")
2740 (license license:expat)))
2741
2742 (define-public python-et-xmlfile
2743 (package
2744 (name "python-et-xmlfile")
2745 (version "1.1")
2746 (source
2747 (origin
2748 ;; Use a checkout because the PyPI archive does not contain tests.
2749 (method hg-fetch)
2750 (uri (hg-reference
2751 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
2752 (changeset version)))
2753 (file-name (string-append name "-" version "-checkout"))
2754 (sha256
2755 (base32 "09r8rjc5bhkqrm5c4n9jrlvad8vrvbyswl9g0wrc1qc7nzh9mpw7"))))
2756 (build-system python-build-system)
2757 (arguments
2758 (list #:phases
2759 #~(modify-phases %standard-phases
2760 (replace 'check
2761 (lambda* (#:key tests? #:allow-other-keys)
2762 (when tests?
2763 (invoke "pytest" "-vv")))))))
2764 (native-inputs
2765 (list python-pytest python-lxml)) ;used for the tests
2766 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
2767 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
2768 (description "This Python library is based upon the @code{xmlfile} module
2769 from @code{lxml}. It aims to provide a low memory, compatible implementation
2770 of @code{xmlfile}.")
2771 (license license:expat)))
2772
2773 (define-public python-openpyxl
2774 (package
2775 (name "python-openpyxl")
2776 (version "3.0.9")
2777 (source
2778 (origin
2779 ;; We use the upstream repository, as the tests are not included in the
2780 ;; PyPI releases.
2781 (method hg-fetch)
2782 (uri (hg-reference
2783 (url "https://foss.heptapod.net/openpyxl/openpyxl")
2784 (changeset version)))
2785 (file-name (string-append name "-" version "-checkout"))
2786 (sha256
2787 (base32 "1p8xvc2gjw6zyzbd7qdvc3x178sm00ymrbyh9539l4fpzgxh0j9c"))))
2788 (build-system python-build-system)
2789 (arguments
2790 `(#:phases (modify-phases %standard-phases
2791 (replace 'check
2792 (lambda _
2793 (invoke "pytest"))))))
2794 (native-inputs (list python-lxml python-pillow python-pytest))
2795 (propagated-inputs (list python-et-xmlfile python-jdcal))
2796 (home-page "https://openpyxl.readthedocs.io")
2797 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
2798 (description
2799 "This Python library allows reading and writing to the Excel XLSX, XLSM,
2800 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
2801 standard.")
2802 (license license:expat)))
2803
2804 (define-public python-eventlet
2805 (package
2806 (name "python-eventlet")
2807 (version "0.33.0")
2808 (source
2809 (origin
2810 (method url-fetch)
2811 (uri (pypi-uri "eventlet" version))
2812 (sha256
2813 (base32
2814 "07qlyhcm0f28sxdizawvdf3d50m3hnbzz5kg3fjp7chvki44y540"))))
2815 (build-system python-build-system)
2816 (propagated-inputs
2817 (list python-dnspython python-greenlet python-monotonic python-six))
2818 (native-inputs
2819 (list python-nose))
2820 (arguments
2821 '(#:phases
2822 (modify-phases %standard-phases
2823 (add-after 'unpack 'avoid-OSError
2824 (lambda _
2825 ;; If eventlet tries to load greendns, an OSError is thrown when
2826 ;; getprotobyname is called. Thankfully there is an environment
2827 ;; variable to disable the greendns import, so use it:
2828 (setenv "EVENTLET_NO_GREENDNS" "yes")))
2829 (add-after 'unpack 'delete-broken-tests
2830 (lambda _
2831 (delete-file "tests/greendns_test.py")
2832 (delete-file "tests/socket_test.py")))
2833 ;; See https://github.com/eventlet/eventlet/issues/562#issuecomment-714183009
2834 (replace 'check
2835 (lambda* (#:key tests? #:allow-other-keys)
2836 (when tests?
2837 (invoke "nosetests" "-v" "tests/")))))))
2838 (home-page "https://eventlet.net")
2839 (synopsis "Concurrent networking library for Python")
2840 (description
2841 "Eventlet is a concurrent networking library for Python that
2842 allows you to change how you run your code, not how you write it.
2843 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
2844 Coroutines ensure that the developer uses a blocking style of programming
2845 that is similar to threading, but provide the benefits of non-blocking I/O.
2846 The event dispatch is implicit, which means you can easily use @code{Eventlet}
2847 from the Python interpreter, or as a small part of a larger application.")
2848 (license license:expat)))
2849
2850 (define-public python-sinfo
2851 (package
2852 (name "python-sinfo")
2853 (version "0.3.4")
2854 (source (origin
2855 (method url-fetch)
2856 (uri (pypi-uri "sinfo" version))
2857 (sha256
2858 (base32
2859 "0kdsp883mx0lfyykv0p12bvs203kdm3skb8bw5wf2pc7kb393sl1"))))
2860 (build-system python-build-system)
2861 (propagated-inputs
2862 (list python-stdlib-list))
2863 (home-page "https://gitlab.com/joelostblom/session_info")
2864 (synopsis "Output module version information loaded in a Python session")
2865 (description "This package outputs version information for modules loaded
2866 in the current session, Python, and the OS.")
2867 (license license:bsd-3)))
2868
2869 (define-public python-six
2870 (package/inherit python-six-bootstrap
2871 (name "python-six")
2872 (arguments
2873 `(#:phases
2874 (modify-phases %standard-phases
2875 (replace 'check
2876 (lambda _
2877 (invoke "pytest" "-v"))))))
2878 (native-inputs
2879 `(("python-pytest" ,python-pytest-bootstrap)))))
2880
2881 (define-public python2-six
2882 (let ((base (package-with-python2 python-six)))
2883 (package
2884 (inherit base)
2885 ;; Reduce Python 2 closure by disabling tests and removing the native
2886 ;; inputs.
2887 (arguments (substitute-keyword-arguments (package-arguments base)
2888 ((#:phases phases)
2889 `(modify-phases ,phases
2890 (delete 'check)))))
2891 (native-inputs '()))))
2892
2893 (define-public python-schedule
2894 (package
2895 (name "python-schedule")
2896 (version "0.4.3")
2897 (source
2898 (origin
2899 (method url-fetch)
2900 (uri (pypi-uri "schedule" version))
2901 (sha256
2902 (base32
2903 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
2904 (build-system python-build-system)
2905 (native-inputs
2906 (list python-pytest python-mock))
2907 (home-page "https://github.com/dbader/schedule")
2908 (synopsis "Schedule periodic function calls in Python")
2909 (description
2910 "Schedule is an in-process scheduler for periodic jobs that uses the
2911 builder pattern for configuration. Schedule lets you run Python functions (or
2912 any other callable) periodically at pre-determined intervals using a simple,
2913 human-friendly syntax.")
2914 (license license:expat)))
2915
2916 (define-public python-scour
2917 (package
2918 (name "python-scour")
2919 (version "0.38.2")
2920 (source
2921 (origin
2922 (method git-fetch)
2923 (uri
2924 (git-reference
2925 (url "https://github.com/scour-project/scour")
2926 (commit
2927 (string-append "v" version))))
2928 (file-name (git-file-name name version))
2929 (sha256
2930 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
2931 (propagated-inputs
2932 (list python-six))
2933 (build-system python-build-system)
2934 (home-page "https://github.com/scour-project/scour")
2935 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
2936 (description "The goal of Scour is to output a file that renders
2937 identically at a fraction of the size by removing a lot of redundant
2938 information created by most SVG editors. Optimization options are typically
2939 lossless but can be tweaked for more aggressive cleaning.")
2940 (license license:asl2.0)))
2941
2942 (define-public python-mechanize
2943 (package
2944 (name "python-mechanize")
2945 (version "0.4.5")
2946 (source
2947 (origin
2948 (method url-fetch)
2949 (uri (pypi-uri "mechanize" version))
2950 (sha256
2951 (base32
2952 "1z9kqcwb8gfq2l6i42z624kxpd8692a0c8gw2x5bbm7n848w2mb3"))))
2953 (build-system python-build-system)
2954 (propagated-inputs
2955 (list python-html5lib))
2956 (home-page "https://github.com/python-mechanize/mechanize")
2957 (synopsis
2958 "Stateful programmatic web browsing in Python")
2959 (description
2960 "Mechanize implements stateful programmatic web browsing in Python,
2961 after Andy Lester’s Perl module WWW::Mechanize.")
2962 (license license:bsd-3)))
2963
2964 (define-public python-simpleaudio
2965 (package
2966 (name "python-simpleaudio")
2967 (version "1.0.4")
2968 (source
2969 (origin
2970 (method url-fetch)
2971 (uri (pypi-uri "simpleaudio" version))
2972 (sha256
2973 (base32
2974 "07glihg0fpca0gvbbvqs9q815w8xhflzdvg72yvlsm23j9j8h739"))))
2975 (build-system python-build-system)
2976 (arguments
2977 `(#:tests? #f))
2978 (inputs
2979 (list alsa-lib))
2980 (home-page
2981 "https://github.com/hamiltron/py-simple-audio")
2982 (synopsis "Simple, asynchronous audio playback for Python 3")
2983 (description
2984 "The @code{simplaudio} package provides cross-platform, dependency-free
2985 audio playback capability for Python 3 on OSX, Windows, and Linux.")
2986 (license license:expat))) ; MIT license
2987
2988 (define-public python-simplejson
2989 (package
2990 (name "python-simplejson")
2991 (version "3.17.6")
2992 (source
2993 (origin
2994 (method url-fetch)
2995 (uri (pypi-uri "simplejson" version))
2996 (sha256
2997 (base32
2998 "19pqqn01y6qmhhv8q6dh4p1acav49kl923kklnns2qxz5a6h766g"))))
2999 (build-system python-build-system)
3000 (native-inputs
3001 (list python-toml))
3002 (home-page "https://simplejson.readthedocs.io/en/latest")
3003 (synopsis
3004 "Json library for Python")
3005 (description
3006 "JSON (JavaScript Object Notation) is a subset of JavaScript
3007 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
3008 format.
3009
3010 Simplejson exposes an API familiar to users of the standard library marshal
3011 and pickle modules. It is the externally maintained version of the json
3012 library contained in Python 2.6, but maintains compatibility with Python 2.5
3013 and (currently) has significant performance advantages, even without using
3014 the optional C extension for speedups. Simplejson is also supported on
3015 Python 3.3+.")
3016 (license license:x11)))
3017
3018
3019 (define-public python-pyicu
3020 (package
3021 (name "python-pyicu")
3022 (version "2.9")
3023 (source
3024 (origin
3025 (method url-fetch)
3026 (uri (pypi-uri "PyICU" version))
3027 (sha256
3028 (base32
3029 "0y2qhh443vydi3y7kmhyb6kz3z6d7qq7ld0sg88mfqalcp7dca9w"))))
3030 (build-system python-build-system)
3031 (inputs
3032 (list icu4c))
3033 (native-inputs
3034 (list python-pytest python-six))
3035 (home-page "https://gitlab.pyicu.org/main/pyicu")
3036 (synopsis "Python extension wrapping the ICU C++ API")
3037 (description
3038 "PyICU is a python extension wrapping the ICU C++ API.")
3039 (license license:x11)))
3040
3041 (define-public python-dogtail
3042 (package
3043 (name "python-dogtail")
3044 (version "0.9.11")
3045 (source (origin
3046 (method url-fetch)
3047 (uri
3048 (string-append
3049 "https://gitlab.com/dogtail/dogtail/-/raw/released/"
3050 "dogtail-" version ".tar.gz"))
3051 (sha256
3052 (base32
3053 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
3054 (build-system python-build-system)
3055 (arguments
3056 `(#:tests? #f ; TODO Launching dbus for the tests
3057 ; fails
3058 #:phases
3059 (modify-phases %standard-phases
3060 (replace 'check
3061 (lambda* (#:key tests? #:allow-other-keys)
3062 (when tests?
3063 (system "Xvfb :1 &")
3064 (setenv "DISPLAY" ":1")
3065 (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
3066 #t)))))
3067 (propagated-inputs
3068 (list python-pygobject python-pycairo python-pyatspi))
3069 (native-inputs
3070 `(("python-nose" ,python-nose)
3071 ("gtk+" ,gtk+)
3072 ("xvfb" ,xorg-server)
3073 ("dbus" ,dbus)
3074 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
3075 ("gobject-introspection" ,gobject-introspection)))
3076 (home-page "https://gitlab.com/dogtail/dogtail/")
3077 (synopsis "GUI test tool and automation framework written in Python")
3078 (description
3079 "Dogtail is a GUI test tool and automation framework written in Python.
3080 It uses Accessibility (a11y) technologies to communicate with desktop
3081 applications. dogtail scripts are written in Python and executed like any
3082 other Python program.")
3083 (license license:gpl2+)))
3084
3085 (define-public python-empy
3086 (package
3087 (name "python-empy")
3088 (version "3.3.3")
3089 (source (origin
3090 (method url-fetch)
3091 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
3092 version ".tar.gz"))
3093 (sha256
3094 (base32
3095 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
3096 (build-system python-build-system)
3097 (arguments
3098 `(#:tests? #f)) ; python2 only
3099 (home-page "http://www.alcyone.com/software/empy/")
3100 (synopsis "Templating system for Python")
3101 (description
3102 "EmPy is a system for embedding Python expressions and statements in
3103 template text; it takes an EmPy source file, processes it, and produces
3104 output. This is accomplished via expansions, which are special signals to the
3105 EmPy system and are set off by a special prefix (by default the at sign, @@).
3106 EmPy can expand arbitrary Python expressions and statements in this way, as
3107 well as a variety of special forms. Textual data not explicitly delimited in
3108 this way is sent unaffected to the output, allowing Python to be used in
3109 effect as a markup language. Also supported are callbacks via hooks,
3110 recording and playback via diversions, and dynamic, chainable filters. The
3111 system is highly configurable via command line options and embedded
3112 commands.")
3113 (license license:lgpl2.1+)))
3114
3115 (define-public python-enum34
3116 (package
3117 (name "python-enum34")
3118 (version "1.1.6")
3119 (source
3120 (origin
3121 (method url-fetch)
3122 (uri (pypi-uri "enum34" version))
3123 (sha256
3124 (base32
3125 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
3126 (build-system python-build-system)
3127 (home-page "https://pypi.org/project/enum34/")
3128 (synopsis "Backported Python 3.4 Enum")
3129 (description
3130 "Enum34 is the new Python stdlib enum module available in Python 3.4
3131 backported for previous versions of Python from 2.4 to 3.3.")
3132 (license license:bsd-3)))
3133
3134 (define-public python-parse-type
3135 (package
3136 (name "python-parse-type")
3137 (version "0.6.0")
3138 (source
3139 (origin
3140 (method url-fetch)
3141 (uri (pypi-uri "parse_type" version))
3142 (sha256
3143 (base32
3144 "07smqnzc9km7sbvxfyx4gdm9njrx58x8grdw6gs4gva81rk3rd10"))))
3145 (build-system python-build-system)
3146 (arguments
3147 '(#:phases
3148 (modify-phases %standard-phases
3149 (replace 'check
3150 (lambda* (#:key tests? #:allow-other-keys)
3151 (when tests?
3152 (invoke "pytest" "-vv" "-c" "/dev/null")))))))
3153 (propagated-inputs (list python-six python-parse))
3154 (native-inputs (list python-pytest))
3155 (home-page "https://github.com/jenisys/parse_type")
3156 (synopsis "Extended parse module")
3157 (description "Parse_type extends the python parse module.")
3158 (license license:bsd-3)))
3159
3160 (define-public python-parse
3161 (package
3162 (name "python-parse")
3163 (version "1.18.0")
3164 (source
3165 (origin
3166 (method url-fetch)
3167 (uri (pypi-uri "parse" version))
3168 (sha256
3169 (base32
3170 "19063x4xdjpaf7rfxai6jpgm2k4yvkq7wha8aa8cagbjsqr60rli"))))
3171 (build-system python-build-system)
3172 (arguments
3173 `(#:phases
3174 (modify-phases %standard-phases
3175 (replace 'check
3176 (lambda _ (invoke "python" "test_parse.py"))))))
3177 (home-page "https://github.com/r1chardj0n3s/parse")
3178 (synopsis "Parse strings")
3179 (description
3180 "Parse strings using a specification based on the Python @code{format()}
3181 syntax.")
3182 (license license:x11)))
3183
3184 (define-public python-polib
3185 (package
3186 (name "python-polib")
3187 (version "1.1.0")
3188 (source (origin
3189 (method url-fetch)
3190 (uri (pypi-uri "polib" version))
3191 (sha256
3192 (base32
3193 "0aikb8gcarhifn3sadrbbs5czagih9hjv250gsrgy9v1d49pvn7s"))))
3194 (build-system python-build-system)
3195 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
3196 (synopsis "Manipulate, create and modify gettext files")
3197 (description "Polib can manipulate any gettext format (po, pot and mo)
3198 files. It can be used to create po files from scratch or to modify
3199 existing ones.")
3200 (license license:expat)))
3201
3202 (define-public python-polling2
3203 (package
3204 (name "python-polling2")
3205 (version "0.5.0")
3206 (source
3207 (origin
3208 (method url-fetch)
3209 (uri (pypi-uri "polling2" version))
3210 (sha256
3211 (base32 "0hp3238fv6k1qk43gv4jwnv1mwlkmx33akbj560b9nvsry1dmdwh"))))
3212 (build-system python-build-system)
3213 (arguments '(#:tests? #false)) ; no tests included
3214 (native-inputs
3215 (list python-mock python-pytest python-pytest-runner))
3216 (home-page "https://github.com/ddmee/polling2")
3217 (synopsis "Polling utility with many configurable options")
3218 (description "Polling2 is a utility used to wait for a function to return
3219 a certain expected condition.")
3220 (license license:expat)))
3221
3222 (define-public python-poyo
3223 (package
3224 (name "python-poyo")
3225 (version "0.5.0")
3226 (source
3227 (origin
3228 (method url-fetch)
3229 (uri (pypi-uri "poyo" version))
3230 (sha256
3231 (base32
3232 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
3233 (build-system python-build-system)
3234 (home-page "https://github.com/hackebrot/poyo")
3235 (synopsis "Lightweight YAML Parser for Python")
3236 (description
3237 "This package provides a lightweight YAML Parser for Python. It supports
3238 only a chosen subset of the YAML format that is required to parse cookiecutter
3239 user configuration files. It does not have support for serializing into YAML
3240 and is not compatible with JSON.")
3241 (license license:expat)))
3242
3243 (define-public python-exceptiongroup
3244 (package
3245 (name "python-exceptiongroup")
3246 (version "1.0.0rc8")
3247 (source (origin
3248 (method git-fetch)
3249 (uri (git-reference
3250 (url "https://github.com/agronholm/exceptiongroup")
3251 (commit version)))
3252 (file-name (git-file-name name version))
3253 (sha256
3254 (base32
3255 "0xsbpv22n51p6yvyvz231mf8zhbi1i88b4zmacaxxx31zrq5ifv4"))))
3256 (build-system python-build-system)
3257 (arguments
3258 (list
3259 #:phases
3260 #~(modify-phases %standard-phases
3261 ;; XXX: PEP 517 manual build/install procedures copied from
3262 ;; python-isort.
3263 (replace 'build
3264 (lambda _
3265 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
3266 ;; ZIP does not support timestamps before 1980.
3267 (setenv "SOURCE_DATE_EPOCH" "315532800")
3268 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
3269 (replace 'install
3270 (lambda* (#:key outputs #:allow-other-keys)
3271 (let ((whl (car (find-files "dist" "\\.whl$"))))
3272 (invoke "pip" "--no-cache-dir" "--no-input"
3273 "install" "--no-deps" "--prefix" #$output whl))))
3274 (replace 'check
3275 (lambda* (#:key tests? #:allow-other-keys)
3276 (when tests?
3277 (invoke "pytest" "-vv" "tests")))))))
3278 (native-inputs (list python-flit-scm python-pypa-build python-pytest))
3279 (home-page "https://github.com/agronholm/exceptiongroup")
3280 (synopsis "PEP 654 backport from Python 3.11")
3281 (description "This is a backport of the @code{BaseExceptionGroup} and
3282 @code{ExceptionGroup} classes from Python 3.11.")
3283 (license license:expat)))
3284
3285 (define-public python-extension-helpers
3286 (package
3287 (name "python-extension-helpers")
3288 (version "0.1")
3289 (source
3290 (origin
3291 (method url-fetch)
3292 (uri (pypi-uri "extension-helpers" version))
3293 (sha256
3294 (base32 "10iqjzmya2h4sk765dlm1pbqypwlqyh8rw59a5m9i63d3klnz2mc"))))
3295 (build-system python-build-system)
3296 (native-inputs
3297 (list python-coverage python-pytest-astropy python-pytest-cov
3298 python-setuptools-scm))
3299 (home-page "https://github.com/astropy/astropy-helpers")
3300 (synopsis
3301 "Utilities for building and installing packages in the Astropy ecosystem")
3302 (description
3303 "The extension-helpers package includes many build, installation, and
3304 documentation-related tools used by the Astropy project.")
3305 (license license:bsd-3)))
3306
3307 (define-public python-extras
3308 (package
3309 (name "python-extras")
3310 (version "1.0.0")
3311 (source
3312 (origin
3313 (method url-fetch)
3314 (uri (pypi-uri "extras" version))
3315 (sha256
3316 (base32
3317 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
3318 (build-system python-build-system)
3319 (arguments
3320 ;; FIXME: Circular dependency on testtools.
3321 '(#:tests? #f))
3322 (home-page "https://github.com/testing-cabal/extras")
3323 (synopsis "Useful extensions to the Python standard library")
3324 (description
3325 "Extras is a set of extensions to the Python standard library.")
3326 (license license:expat)))
3327
3328 (define-public python-mimeparse
3329 (package
3330 (name "python-mimeparse")
3331 (version "1.6.0")
3332 (source
3333 (origin
3334 (method url-fetch)
3335 (uri (pypi-uri "python-mimeparse" version))
3336 (sha256
3337 (base32
3338 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
3339 (build-system python-build-system)
3340 (arguments
3341 '(#:phases
3342 (modify-phases %standard-phases
3343 (replace 'check
3344 (lambda _
3345 (invoke "./mimeparse_test.py"))))))
3346 (home-page
3347 "https://github.com/dbtsai/python-mimeparse")
3348 (synopsis "Python library for parsing MIME types")
3349 (description
3350 "Mimeparse provides basic functions for parsing MIME type names and
3351 matching them against a list of media-ranges.")
3352 (license license:expat)))
3353
3354 (define-public python-miniboa
3355 (package
3356 (name "python-miniboa")
3357 (version "1.0.8")
3358 (source
3359 (origin
3360 (method url-fetch)
3361 (uri (pypi-uri "miniboa" version))
3362 (sha256
3363 (base32
3364 "002c1aki9hsrwj5plrwdrf3sk8rn95fqylqyjx2arrjfpsih4dgs"))))
3365 (build-system python-build-system)
3366 (home-page "https://github.com/shmup/miniboa")
3367 (synopsis "Simple, single-threaded Telnet server")
3368 (description
3369 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
3370 server.")
3371 (license license:asl2.0)))
3372
3373 (define-public python-pafy
3374 (package
3375 (name "python-pafy")
3376 (version "0.5.3.1")
3377 (source
3378 (origin
3379 (method url-fetch)
3380 (uri (pypi-uri "pafy" version))
3381 (sha256
3382 (base32
3383 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
3384 (build-system python-build-system)
3385 (arguments
3386 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
3387 (propagated-inputs
3388 ;; Youtube-dl is a python package which is imported in the file
3389 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
3390 (list youtube-dl))
3391 (home-page "https://np1.github.io/pafy/")
3392 (synopsis "Retrieve YouTube content and metadata")
3393 (description
3394 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
3395 (license license:lgpl3+)))
3396
3397 (define-public python-miniupnpc
3398 (package
3399 (name "python-miniupnpc")
3400 (version "2.2.3")
3401 (source
3402 (origin
3403 (method git-fetch)
3404 (uri
3405 (git-reference
3406 (url "https://github.com/miniupnp/miniupnp")
3407 (commit
3408 (string-append
3409 "miniupnpc_" (string-replace-substring version "." "_")))))
3410 (file-name
3411 (git-file-name name version))
3412 (sha256
3413 (base32 "03q1rlzvfzm15g1bfw2zqzavlsyaypnaf2k3cz6ha7k5rirkdy0l"))))
3414 (build-system python-build-system)
3415 (arguments
3416 (list
3417 #:phases
3418 #~(modify-phases %standard-phases
3419 (add-after 'unpack 'subdir
3420 (lambda* (#:key inputs #:allow-other-keys)
3421 (chdir "miniupnpc")
3422 (setenv "CC" #$(cc-for-target))
3423 (substitute* "Makefile"
3424 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
3425 (add-before 'subdir 'remove-kernel-version
3426 ;; Avoid embedding the running kernel version for reproducible builds
3427 (lambda _
3428 (substitute*
3429 "miniupnpc/updateminiupnpcstrings.sh"
3430 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix")))))))
3431 (inputs (list python)) ;we are building a Python extension
3432 (synopsis "UPnP client for Python")
3433 (description "Miniupnpc is a client library for Python programs to set up
3434 port forwards using @acronym{UPnP, Universal Plug and Play}.")
3435 (home-page "http://miniupnp.free.fr")
3436 (license license:bsd-3)))
3437
3438 (define-public python-py
3439 (package
3440 (name "python-py")
3441 (version "1.10.0")
3442 (source
3443 (origin
3444 (method url-fetch)
3445 (uri (pypi-uri "py" version))
3446 (sha256
3447 (base32
3448 "1lqvkqk3b440g9z82gqbzlzas84wrm6ir8kplzhzavmn2pd1pf11"))))
3449 (build-system python-build-system)
3450 (arguments
3451 ;; FIXME: "ImportError: 'test' module incorrectly imported from
3452 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
3453 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
3454 ;; Is this module globally installed?"
3455 '(#:tests? #f))
3456 (native-inputs
3457 (list python-setuptools-scm))
3458 (home-page "https://github.com/pytest-dev/py")
3459 (synopsis "Python library for parsing, I/O, instrospection, and logging")
3460 (description
3461 "Py is a Python library for file name parsing, .ini file parsing, I/O,
3462 code introspection, and logging.")
3463 (license license:expat)))
3464
3465 ;; Recent versions of python-fixtures and python-testrepository need
3466 ;; python-pbr for packaging, which itself needs these two packages for
3467 ;; testing.
3468 ;; To fix this circular dependency, we use a build of python-pbr, based on the
3469 ;; same source, just without any test dependencies and with tests disabled.
3470 ;; python-pbr-minmal is then used to package python-fixtures and
3471 ;; python-testrepository.
3472 ;; Strictly speaking we currently could remove the test-requirements from the
3473 ;; normal python-pbr package (and save this package) since test are disabled
3474 ;; there anyway. But this may change in future.
3475 (define-public python-pbr-minimal
3476 (package
3477 (name "python-pbr-minimal")
3478 (version "5.5.1")
3479 (source
3480 (origin
3481 (method url-fetch)
3482 (uri (pypi-uri "pbr" version))
3483 (sha256
3484 (base32
3485 "1j8k5d4rdhy5bw5ai1vkjzln2albah94in3vvyvxa0n42fv81baz"))))
3486 (build-system python-build-system)
3487 (arguments
3488 `(#:tests? #f))
3489 (home-page "https://docs.openstack.org/pbr/latest/")
3490 (synopsis "Minimal build of python-pbr used for bootstrapping")
3491 (description
3492 "Used only for bootstrapping python2-pbr, you should not need this.")
3493 (license license:asl2.0)))
3494
3495 (define-public python-pbr
3496 (package
3497 (inherit python-pbr-minimal)
3498 (name "python-pbr")
3499 (arguments
3500 `(#:tests? #f)) ;; Most tests seem to use the Internet.
3501 (propagated-inputs
3502 (list git)) ;; pbr actually uses the "git" binary.
3503 (native-inputs
3504 `(("python-fixtures" ,python-fixtures-bootstrap)
3505 ;; discover, coverage, hacking, subunit
3506 ("python-mock" ,python-mock)
3507 ("python-six" ,python-six)
3508 ("python-sphinx" ,python-sphinx)
3509 ("python-testrepository" ,python-testrepository-bootstrap)
3510 ("python-testresources" ,python-testresources-bootstrap)
3511 ("python-testscenarios" ,python-testscenarios-bootstrap)
3512 ("python-testtools" ,python-testtools-bootstrap)
3513 ("python-virtualenv" ,python-virtualenv)))
3514 (synopsis "Enhance the default behavior of Python’s setuptools")
3515 (description
3516 "Python Build Reasonableness (PBR) is a library that injects some useful
3517 and sensible default behaviors into your setuptools run. It will set
3518 versions, process requirements files and generate AUTHORS and ChangeLog file
3519 from git information.
3520 ")))
3521
3522 (define-public python-pyrsistent
3523 (package
3524 (name "python-pyrsistent")
3525 (version "0.16.0")
3526 (home-page "https://github.com/tobgu/pyrsistent")
3527 (source (origin
3528 (method url-fetch)
3529 (uri (pypi-uri "pyrsistent" version))
3530 (sha256
3531 (base32
3532 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
3533 (build-system python-build-system)
3534 (arguments
3535 '(#:phases (modify-phases %standard-phases
3536 ;; The package works fine with newer Pytest and Hypothesis, but
3537 ;; has pinned older versions to stay compatible with Python 2.
3538 (add-before 'check 'loosen-pytest-requirement
3539 (lambda _
3540 (substitute* "setup.py"
3541 (("pytest<5") "pytest")
3542 (("hypothesis<5") "hypothesis"))
3543 #t)))))
3544 (native-inputs
3545 (list python-hypothesis python-pytest python-pytest-runner))
3546 (propagated-inputs
3547 (list python-six))
3548 (synopsis "Persistent data structures for Python")
3549 (description
3550 "Pyrsistent is a number of persistent collections (by some referred to as
3551 functional data structures). Persistent in the sense that they are immutable.
3552
3553 All methods on a data structure that would normally mutate it instead return a
3554 new copy of the structure containing the requested updates. The original
3555 structure is left untouched.")
3556 (license license:expat)))
3557
3558 (define-public python-exif-read
3559 (package
3560 (name "python-exif-read")
3561 (version "2.1.2")
3562 (source (origin
3563 (method url-fetch)
3564 (uri (pypi-uri "ExifRead" version))
3565 (sha256
3566 (base32
3567 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
3568 (build-system python-build-system)
3569 (arguments `(#:tests? #f)) ; no tests
3570 (home-page "https://github.com/ianare/exif-py")
3571 (synopsis "Python library to extract EXIF data from image files")
3572 (description
3573 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
3574 files.")
3575 (license license:bsd-3)))
3576
3577 (define-public python-pyld
3578 (package
3579 (name "python-pyld")
3580 (version "1.0.5")
3581 (source (origin
3582 (method url-fetch)
3583 (uri (pypi-uri "PyLD" version))
3584 (sha256
3585 (base32
3586 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
3587 (build-system python-build-system)
3588 (home-page "https://github.com/digitalbazaar/pyld")
3589 (synopsis "Python implementation of the JSON-LD specification")
3590 (description
3591 "PyLD is an implementation of the JSON-LD specification.")
3592 (license license:bsd-3)))
3593
3594 (define-public python-cli-helpers
3595 (package
3596 (name "python-cli-helpers")
3597 (version "2.2.1")
3598 (source
3599 (origin
3600 ;; There's no source tarball on PyPI.
3601 (method git-fetch)
3602 (uri (git-reference
3603 (url "https://github.com/dbcli/cli_helpers")
3604 (commit (string-append "v" version))))
3605 (file-name (git-file-name name version))
3606 (sha256
3607 (base32 "1hzavh9v9lkd1dn9f0nvg80f7v4banxvcrj10zy72przqz51k1sb"))))
3608 (build-system python-build-system)
3609 (native-inputs
3610 (list python-pytest))
3611 (propagated-inputs
3612 (list python-wcwidth python-configobj python-tabulate))
3613 (home-page "https://github.com/dbcli/cli_helpers")
3614 (synopsis "Helpers for building command-line apps")
3615 (description
3616 "CLI Helpers is a Python package that makes it easy to perform common
3617 tasks when building command-line apps. It's a helper library for command-line
3618 interfaces.")
3619 (license license:bsd-3)))
3620
3621 (define-public python-click
3622 (package
3623 (name "python-click")
3624 (version "8.1.3")
3625 (source
3626 (origin
3627 (method url-fetch)
3628 (uri (pypi-uri "click" version))
3629 (sha256
3630 (base32
3631 "13kvp8visj5xh9d43brnda6q0kc1s40flxa5cw0p0a9hzf5dr0kn"))))
3632 (build-system python-build-system)
3633 (arguments
3634 `(#:phases
3635 (modify-phases %standard-phases
3636 (replace 'check
3637 (lambda* (#:key tests? #:allow-other-keys)
3638 (when tests?
3639 (invoke "pytest" "-vv")))))))
3640 (native-inputs (list python-pytest))
3641 (home-page "https://palletsprojects.com/p/click/")
3642 (synopsis "Command line library for Python")
3643 (description
3644 "Click is a Python package for creating command line interfaces in a
3645 composable way with as little code as necessary. Its name stands for
3646 \"Command Line Interface Creation Kit\". It's highly configurable but comes
3647 with sensible defaults out of the box.")
3648 (license license:bsd-3)))
3649
3650 (define-public python-click-7
3651 (package (inherit python-click)
3652 (name "python-click")
3653 (version "7.1.2")
3654 (source
3655 (origin
3656 (method url-fetch)
3657 (uri (pypi-uri "click" version))
3658 (sha256
3659 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
3660 (arguments `())))
3661
3662 (define-public python-click-5
3663 (package (inherit python-click)
3664 (name "python-click")
3665 (version "5.1")
3666 (source
3667 (origin
3668 (method url-fetch)
3669 (uri (pypi-uri "click" version))
3670 (sha256
3671 (base32 "0njsm0wn31l21bi118g5825ma5sa3rwn7v2x4wjd7yiiahkri337"))))
3672 (arguments `())))
3673
3674 (define-public python-cligj
3675 (package
3676 (name "python-cligj")
3677 (version "0.7.2")
3678 (source
3679 (origin
3680 (method url-fetch)
3681 (uri (pypi-uri "cligj" version))
3682 (sha256
3683 (base32
3684 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
3685 (build-system python-build-system)
3686 (propagated-inputs
3687 (list python-click))
3688 (native-inputs
3689 (list python-pytest-cov))
3690 (home-page "https://github.com/mapbox/cligj")
3691 (synopsis "Click params for command line interfaces to GeoJSON")
3692 (description
3693 "cligj is for Python developers who create command line interfaces
3694 for geospatial data. cligj allows you to quickly build consistent,
3695 well-tested and interoperable CLIs for handling GeoJSON.")
3696 (license license:bsd-3)))
3697
3698 (define-public python-vcversioner
3699 (package
3700 (name "python-vcversioner")
3701 (version "2.16.0.0")
3702 (source
3703 (origin
3704 (method url-fetch)
3705 (uri (pypi-uri "vcversioner" version))
3706 (sha256
3707 (base32
3708 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
3709 (build-system python-build-system)
3710 (synopsis "Python library for version number discovery")
3711 (description "Vcversioner is a Python library that inspects tagging
3712 information in a variety of version control systems in order to discover
3713 version numbers.")
3714 (home-page "https://github.com/habnabit/vcversioner")
3715 (license license:isc)))
3716
3717 (define-public python-jdcal
3718 (package
3719 (name "python-jdcal")
3720 (version "1.4.1")
3721 (source
3722 (origin
3723 (method url-fetch)
3724 (uri (pypi-uri "jdcal" version))
3725 (sha256
3726 (base32
3727 "1j6g19jf21qprjsr8h0r7nsbss366gy8j9izq8cz53gbjvh74a27"))))
3728 (build-system python-build-system)
3729 (arguments
3730 (list #:phases
3731 #~(modify-phases %standard-phases
3732 (replace 'check
3733 (lambda* (#:key tests? #:allow-other-keys)
3734 (when tests?
3735 (invoke "pytest" "-vv")))))))
3736 (native-inputs
3737 (list python-pytest))
3738 (home-page "https://github.com/phn/jdcal")
3739 (synopsis "Functions to convert between Julian dates Gregorian dates")
3740 (description "This Python library provides functions for converting
3741 between Julian dates and Gregorian dates.")
3742 (license license:bsd-2)))
3743
3744 (define-public python-jsondiff
3745 (package
3746 (name "python-jsondiff")
3747 (version "1.2.0")
3748 (source
3749 (origin
3750 (method url-fetch)
3751 (uri (pypi-uri "jsondiff" version))
3752 (sha256
3753 (base32
3754 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
3755 (build-system python-build-system)
3756 (native-inputs
3757 (list python-nose python-nose-random))
3758 (home-page
3759 "https://github.com/fzumstein/jsondiff")
3760 (synopsis "Compare JSON and JSON-like structures in Python")
3761 (description "@code{jsondiff} is a Python library which lets you
3762 compare, diff, and patch JSON and JSON-like structures in Python.")
3763 (license license:expat)))
3764
3765 (define-public python-jsonschema
3766 (package
3767 (name "python-jsonschema")
3768 (version "3.2.0")
3769 (source (origin
3770 (method url-fetch)
3771 (uri (pypi-uri "jsonschema" version))
3772 (sha256
3773 (base32
3774 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
3775 (build-system python-build-system)
3776 (arguments
3777 '(#:phases
3778 (modify-phases %standard-phases
3779 (replace 'check
3780 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3781 (when tests?
3782 (setenv "JSON_SCHEMA_TEST_SUITE" "json")
3783 (invoke "trial" "jsonschema")))))))
3784 (native-inputs
3785 `(("python-setuptools_scm" ,python-setuptools-scm)
3786 ("python-twisted" ,python-twisted)))
3787 (propagated-inputs
3788 (list python-attrs python-pyrsistent python-six))
3789 (home-page "https://github.com/Julian/jsonschema")
3790 (synopsis "Implementation of JSON Schema for Python")
3791 (description
3792 "Jsonschema is an implementation of JSON Schema for Python.")
3793 (license license:expat)))
3794
3795 ;;; TODO: Make the default python-jsonschema on core-updates
3796 (define-public python-jsonschema-next
3797 (package
3798 (inherit python-jsonschema)
3799 (version "4.5.1")
3800 (source
3801 (origin
3802 (method url-fetch)
3803 (uri (pypi-uri "jsonschema" version))
3804 (sha256
3805 (base32 "1z0x22691jva7lwfcfh377jdmlz68zhiawxzl53k631l34k8hvbw"))))
3806 (arguments
3807 (substitute-keyword-arguments (package-arguments python-jsonschema)
3808 ((#:phases phases)
3809 #~(modify-phases #$phases
3810 ;; XXX: PEP 517 manual build/install procedures copied from
3811 ;; python-isort.
3812 (replace 'build
3813 (lambda _
3814 ;; ZIP does not support timestamps before 1980.
3815 (setenv "SOURCE_DATE_EPOCH" "315532800")
3816 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
3817 (replace 'install
3818 (lambda* (#:key outputs #:allow-other-keys)
3819 (let ((whl (car (find-files "dist" "\\.whl$"))))
3820 (invoke "pip" "--no-cache-dir" "--no-input"
3821 "install" "--no-deps" "--prefix" #$output whl))))))))
3822 (native-inputs (list python-pypa-build
3823 python-setuptools-scm
3824 python-twisted))
3825 (propagated-inputs
3826 (list python-attrs
3827 python-importlib-metadata
3828 python-pyrsistent
3829 python-typing-extensions))))
3830
3831 (define-public python-schema
3832 (package
3833 (name "python-schema")
3834 (version "0.6.6")
3835 (source
3836 (origin
3837 (method url-fetch)
3838 (uri (pypi-uri "schema" version))
3839 (sha256
3840 (base32
3841 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
3842 (build-system python-build-system)
3843 (native-inputs
3844 (list python-pytest))
3845 (home-page "https://github.com/keleshev/schema")
3846 (synopsis "Simple data validation library")
3847 (description
3848 "@code{python-schema} is a library for validating Python data
3849 structures, such as those obtained from config-files, forms, external
3850 services or command-line parsing, converted from JSON/YAML (or
3851 something else) to Python data-types.")
3852 (license license:psfl)))
3853
3854 (define-public python-schema-0.5
3855 (package (inherit python-schema)
3856 (version "0.5.0")
3857 (source
3858 (origin
3859 (method url-fetch)
3860 (uri (pypi-uri "schema" version))
3861 (sha256
3862 (base32
3863 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
3864
3865 (define-public python-kitchen
3866 (package
3867 (name "python-kitchen")
3868 (version "1.2.5")
3869 (source
3870 (origin
3871 (method url-fetch)
3872 (uri (pypi-uri "kitchen" version))
3873 (sha256
3874 (base32
3875 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
3876 (build-system python-build-system)
3877 (propagated-inputs
3878 (list python-chardet))
3879 (home-page "https://github.com/fedora-infra/kitchen")
3880 (synopsis "Python API for snippets")
3881 (description "@code{kitchen} module provides a python API for all sorts of
3882 little useful snippets of code that everybody ends up writing for their projects
3883 but never seem big enough to build an independent release. Use kitchen and stop
3884 cutting and pasting that code over and over.")
3885 (license (list license:lgpl2.1+
3886 ;; subprocess.py, test_subprocess.py,
3887 ;; kitchen/pycompat25/defaultdict.py:
3888 license:psfl))))
3889
3890 (define-public python-roman
3891 (package
3892 (name "python-roman")
3893 (version "3.3")
3894 (source
3895 (origin
3896 (method url-fetch)
3897 (uri (pypi-uri "roman" version))
3898 (sha256
3899 (base32
3900 "0gyp2bmw47jgpm8j64gydzqq838bgxz5gh6cm57lxlr7p26sqiic"))))
3901 (build-system python-build-system)
3902 (home-page "https://github.com/zopefoundation/roman")
3903 (synopsis "Integer to Roman numerals converter")
3904 (description
3905 "This package provides a small helper library to convert Arabic Numbers
3906 to Roman Numerals.")
3907 (license license:psfl)))
3908
3909 (define-public python-unidecode
3910 (package
3911 (name "python-unidecode")
3912 (version "1.1.1")
3913 (source (origin
3914 (method url-fetch)
3915 (uri (pypi-uri "Unidecode" version))
3916 (sha256
3917 (base32
3918 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
3919 (build-system python-build-system)
3920 (home-page "https://pypi.org/project/Unidecode/")
3921 (synopsis "ASCII transliterations of Unicode text")
3922 (description
3923 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
3924 useful when integrating with legacy code that doesn't support Unicode, or for
3925 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
3926 machine identifiers from human-readable Unicode strings that should still be
3927 somewhat intelligible.")
3928 (license license:gpl2+)))
3929
3930 (define-public python-text-unidecode
3931 (package
3932 (name "python-text-unidecode")
3933 (version "1.3")
3934 (source (origin
3935 (method url-fetch)
3936 (uri (pypi-uri "text-unidecode" version))
3937 (sha256
3938 (base32
3939 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
3940 (build-system python-build-system)
3941 (arguments
3942 '(#:phases (modify-phases %standard-phases
3943 (replace 'check
3944 (lambda _
3945 (invoke "pytest" "-vv"))))))
3946 (native-inputs
3947 (list python-pytest))
3948 (home-page "https://github.com/kmike/text-unidecode/")
3949 (synopsis "Decode Unicode data")
3950 (description
3951 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
3952 Perl library. It can create ASCII representations of Unicode data. In general
3953 users should prefer the @code{python-unidecode} package which offers better
3954 memory usage and transliteration quality.")
3955 ;; The user can choose either license.
3956 (license (list license:clarified-artistic license:gpl2+))))
3957
3958 (define-public python-pyjwt
3959 (package
3960 (name "python-pyjwt")
3961 (version "2.4.0")
3962 (source
3963 (origin
3964 (method url-fetch)
3965 (uri (pypi-uri "PyJWT" version))
3966 (sha256
3967 (base32
3968 "1fmbcwfw1463wjzwbcgg3s16rad6kfb1mc5y7jbkp6v9ihh0hafl"))))
3969 (build-system python-build-system)
3970 (arguments
3971 '(#:phases (modify-phases %standard-phases
3972 (replace 'check
3973 (lambda* (#:key tests? #:allow-other-keys)
3974 (when tests?
3975 (invoke "pytest" "-vv")))))))
3976 (native-inputs
3977 (list python-cryptography python-pytest))
3978 (home-page "https://github.com/progrium/pyjwt")
3979 (synopsis "JSON Web Token implementation in Python")
3980 (description
3981 "PyJWT is a JSON Web Token implementation written in Python.")
3982 (license license:expat)))
3983
3984 (define-public python-pymsgbox
3985 (package
3986 (name "python-pymsgbox")
3987 (version "1.0.6")
3988 (source
3989 (origin
3990 (method git-fetch)
3991 (uri (git-reference
3992 ;; LICENSE.txt is not present on pypi
3993 (url "https://github.com/asweigart/PyMsgBox")
3994 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
3995 (file-name (git-file-name name version))
3996 (sha256
3997 (base32
3998 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
3999 (arguments
4000 ;; Circular dependency to run tests:
4001 ;; Tests need pyautogui, which depends on pymsgbox.
4002 '(#:tests? #f))
4003 (build-system python-build-system)
4004 (home-page "https://github.com/asweigart/PyMsgBox")
4005 (synopsis "Python module for JavaScript-like message boxes")
4006 (description
4007 "PyMsgBox is a simple, cross-platform, pure Python module for
4008 JavaScript-like message boxes. Types of dialog boxes include:
4009 @enumerate
4010 @item alert
4011 @item confirm
4012 @item prompt
4013 @item password
4014 @end enumerate
4015 ")
4016 (license license:bsd-3)))
4017
4018 (define-public python-pympler
4019 (package
4020 (name "python-pympler")
4021 (home-page "https://pythonhosted.org/Pympler/")
4022 (version "1.0.1")
4023 (source (origin
4024 (method url-fetch)
4025 (uri (pypi-uri "Pympler" version))
4026 (sha256
4027 (base32
4028 "1ynkqpv2akldmvkll5vh5zhwj433s1d59iv0f76lygyak4silgwr"))))
4029 (build-system python-build-system)
4030 (synopsis "Measure, monitor and analyze memory behavior")
4031 (description
4032 "Pympler is a development tool to measure, monitor and analyze
4033 the memory behavior of Python objects in a running Python application.
4034
4035 By pympling a Python application, detailed insight in the size and the
4036 lifetime of Python objects can be obtained. Undesirable or unexpected
4037 runtime behavior like memory bloat and other @samp{pymples} can easily
4038 be identified.
4039
4040 A web profiling frontend exposes process statistics, garbage
4041 visualisation and class tracker statistics.")
4042 (license license:asl2.0)))
4043
4044 (define-public python-itsdangerous
4045 (package
4046 (name "python-itsdangerous")
4047 (version "2.0.1")
4048 (source
4049 (origin
4050 (method url-fetch)
4051 (uri (pypi-uri "itsdangerous" version))
4052 (sha256
4053 (base32
4054 "1w6gfb2zhbcmrfj6digwzw1z68w6zg1q87rm6la2m412zil4swly"))))
4055 (build-system python-build-system)
4056 (home-page "https://palletsprojects.com/p/itsdangerous/")
4057 (synopsis "Python library for passing data to/from untrusted environments")
4058 (description
4059 "Itsdangerous provides various helpers to pass trusted data to untrusted
4060 environments and back.")
4061 (license license:bsd-3)))
4062
4063 (define-public python-pyyaml
4064 (package
4065 (name "python-pyyaml")
4066 (version "6.0")
4067 (source
4068 (origin
4069 (method url-fetch)
4070 (uri (pypi-uri "PyYAML" version))
4071 (sha256
4072 (base32
4073 "18imkjacvpxfgg1lbpraqywx3j7hr5dv99d242byqvrh2jf53yv8"))))
4074 (build-system python-build-system)
4075 (inputs
4076 (list libyaml python-cython))
4077 (home-page "https://pyyaml.org")
4078 (synopsis "YAML parser and emitter for Python")
4079 (description
4080 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
4081 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
4082 API, and sensible error messages. PyYAML supports standard YAML tags and
4083 provides Python-specific tags that represent an arbitrary Python object.")
4084 (license license:expat)))
4085
4086 (define-public python-pyyaml-5
4087 (package
4088 (inherit python-pyyaml)
4089 (version "5.4.1")
4090 (source
4091 (origin
4092 (method url-fetch)
4093 (uri (pypi-uri "PyYAML" version))
4094 (sha256
4095 (base32
4096 "0pm440pmpvgv5rbbnm8hk4qga5a292kvlm1bh3x2nwr8pb5p8xv0"))))))
4097
4098 (define-public python-vine
4099 (package
4100 (name "python-vine")
4101 (version "5.0.0")
4102 (source
4103 (origin
4104 (method url-fetch)
4105 (uri (pypi-uri "vine" version))
4106 (sha256
4107 (base32 "0zk3pm0g7s4qfn0gk28lfmsyplvisaxi6826cgpq5njkm4j1cfvx"))))
4108 (build-system python-build-system)
4109 (native-inputs
4110 (list python-pytest python-case))
4111 (home-page "https://github.com/celery/vine")
4112 (synopsis "Promises for Python")
4113 (description
4114 "@code{vine} provides a special implementation of promises in that it can
4115 be used both for \"promise of a value\" and lazy evaluation. The biggest
4116 upside for this is that everything in a promise can also be a promise,
4117 e.g. filters, callbacks and errbacks can all be promises.")
4118 (license license:bsd-3)))
4119
4120 (define-public python-virtualenv
4121 (package
4122 (name "python-virtualenv")
4123 (version "20.3.1")
4124 (source
4125 (origin
4126 (method url-fetch)
4127 (uri (pypi-uri "virtualenv" version))
4128 (sha256
4129 (base32
4130 "1nbhnpzswcf3lmzn5xabmfdd7ki8r2w2i37y6wml54di6qi1l48c"))))
4131 (build-system python-build-system)
4132 (native-inputs
4133 (list python-mock python-pytest python-setuptools-scm))
4134 (propagated-inputs
4135 (list python-appdirs python-distlib python-filelock python-six))
4136 (home-page "https://virtualenv.pypa.io/")
4137 (synopsis "Virtual Python environment builder")
4138 (description
4139 "Virtualenv is a tool to create isolated Python environments.")
4140 (license license:expat)))
4141
4142 (define-public python-crossenv
4143 (package
4144 (name "python-crossenv")
4145 (version "1.3.0")
4146 (source
4147 (origin
4148 (method url-fetch)
4149 (uri (pypi-uri "crossenv" version))
4150 (sha256
4151 (base32
4152 "07rv4650n19740ixmnsf4qbxyqlgi7f5m1cy8cq0gl01q3r6hps4"))))
4153 (build-system python-build-system)
4154 (arguments
4155 (list #:tests? #f)) ; tests not distributed on pypi
4156 (home-page "https://github.com/benfogle/virtualenv")
4157 (synopsis "Cross-compiling virtualenv for Python")
4158 (description "This package is a tool for cross-compiling extension
4159 modules. It creates a special virtual environment such that @command{pip} or
4160 @file{setup.py} will cross compile packages for you, usually with no further
4161 work on your part.")
4162 (license license:expat)))
4163
4164 (define-public python-markdown-it-py
4165 (package
4166 (name "python-markdown-it-py")
4167 (version "2.1.0")
4168 (source (origin
4169 (method url-fetch)
4170 (uri (pypi-uri "markdown-it-py" version))
4171 (sha256
4172 (base32
4173 "1nh75i72584r70alhqc479gys04s5m5g3vq601yf2njbs7z5jzng"))))
4174 (build-system python-build-system)
4175 (arguments
4176 (list
4177 #:tests? #f ;pypi source does not contains tests
4178 #:phases
4179 #~(modify-phases %standard-phases
4180 (replace 'build
4181 (lambda _ (invoke "flit" "build")))
4182 (replace 'install
4183 (lambda* (#:key inputs outputs #:allow-other-keys)
4184 (add-installed-pythonpath inputs outputs)
4185 (for-each
4186 (lambda (wheel)
4187 (invoke "python" "-m" "pip" "install"
4188 wheel (string-append "--prefix=" #$output)))
4189 (find-files "dist" "\\.whl$")))))))
4190 (native-inputs (list python-flit))
4191 (propagated-inputs
4192 (list python-mdurl
4193 python-typing-extensions))
4194 (home-page "https://github.com/executablebooks/markdown-it-py")
4195 (synopsis "Python port of markdown-it")
4196 (description
4197 "This is a Python port of @code{markdown-it}, and some of its associated
4198 plugins. The driving design philosophy of the port has been to change as
4199 little of the fundamental code structure (file names, function name, etc) as
4200 possible.")
4201 (license license:expat)))
4202
4203 (define-public python-markupsafe
4204 (package
4205 (name "python-markupsafe")
4206 (version "2.0.1")
4207 (source
4208 (origin
4209 (method url-fetch)
4210 (uri (pypi-uri "MarkupSafe" version))
4211 (sha256
4212 (base32
4213 "02k2ynmqvvd0z0gakkf8s4idyb606r7zgga41jrkhqmigy06fk2r"))))
4214 (build-system python-build-system)
4215 (arguments
4216 `(#:phases (modify-phases %standard-phases
4217 (replace 'check
4218 (lambda* (#:key tests? #:allow-other-keys)
4219 (when tests?
4220 (invoke "pytest" "-vv")))))))
4221 (native-inputs
4222 (list python-pytest))
4223 (home-page "https://github.com/mitsuhiko/markupsafe")
4224 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
4225 (description
4226 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
4227 for Python.")
4228 (license license:bsd-3)))
4229
4230
4231 (define-public python-jinja2
4232 (package
4233 (name "python-jinja2")
4234 (version "3.1.1")
4235 (source
4236 (origin
4237 (method url-fetch)
4238 (uri (pypi-uri "Jinja2" version))
4239 (sha256
4240 (base32
4241 "1saawzys14l1p4kafs7hkihmnvqjq8fwxjmkjiqx3jq1nm5ys2v4"))))
4242 (build-system python-build-system)
4243 (arguments
4244 '(#:phases (modify-phases %standard-phases
4245 (replace 'check
4246 (lambda* (#:key tests? #:allow-other-keys)
4247 (if tests?
4248 (invoke "pytest" "-vv")
4249 (format #t "test suite not run~%")))))))
4250 (native-inputs (list python-pytest))
4251 (propagated-inputs (list python-markupsafe))
4252 (home-page "https://jinja.palletsprojects.com/")
4253 (synopsis "Python template engine")
4254 (description
4255 "Jinja2 is a small but fast and easy to use stand-alone template engine
4256 written in pure Python.")
4257 (license license:bsd-3)))
4258
4259
4260 (define-public python-jinja2-time
4261 (package
4262 (name "python-jinja2-time")
4263 (version "0.2.0")
4264 (source
4265 (origin
4266 (method url-fetch)
4267 (uri (pypi-uri "jinja2-time" version))
4268 (sha256
4269 (base32
4270 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
4271 (build-system python-build-system)
4272 (propagated-inputs
4273 (list python-arrow python-jinja2))
4274 (home-page
4275 "https://github.com/hackebrot/jinja2-time")
4276 (synopsis "Jinja2 Extension for Dates and Times")
4277 (description
4278 "This package provides an extension for the template engine Jinja2. It
4279 adds a 'now' tag providing a convenient access to the arrow.now() API from
4280 templates. A format string can be provided to control the output.")
4281 (license license:expat)))
4282
4283 (define-public python-pysdl2
4284 (package
4285 (name "python-pysdl2")
4286 (version "0.9.11")
4287 (source (origin
4288 (method url-fetch)
4289 (uri (pypi-uri "PySDL2" version))
4290 (sha256
4291 (base32
4292 "19id1qswgcj4v4j5kn49shq1xxx3slhjpm0102w87mczsdbi1rck"))))
4293 (build-system python-build-system)
4294 (arguments
4295 (list #:tests? #f ;; Requires /dev/dri, OpenGL module, etc.
4296 #:phases
4297 #~(modify-phases %standard-phases
4298 (add-after 'unpack 'patch-paths
4299 (lambda* (#:key inputs #:allow-other-keys)
4300 (substitute* "sdl2/dll.py"
4301 ;; Disable pysdl2-dll. It can't be packaged on GNU Guix
4302 ;; as it duplicates an existing package (sdl2).
4303 (("prepath = os\\.getenv\\('PYSDL2_DLL_PATH'\\)")
4304 "prepath = \"system\"")
4305 (("^import sdl2dll$") "")
4306 (("postpath = os\\.getenv\\('PYSDL2_DLL_PATH'\\)")
4307 "postpath = \"system\"")
4308 (("DLL\\(.*, os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)\\)")
4309 (string-append
4310 "DLL(\"SDL2\", [\"SDL2\", \"SDL2-2.0\", \"SDL2-2.0.0\"], \""
4311 (dirname (search-input-file inputs "/lib/libSDL2.so"))
4312 "\")")))
4313 (substitute* "sdl2/sdlimage.py"
4314 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4315 (string-append
4316 "\""
4317 (dirname (search-input-file inputs "/lib/libSDL2_image.so"))
4318 "\"")))
4319 (substitute* "sdl2/sdlgfx.py"
4320 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4321 (string-append
4322 "\""
4323 (dirname (search-input-file inputs "/lib/libSDL2_gfx.so"))
4324 "\"")))
4325 (substitute* "sdl2/sdlmixer.py"
4326 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4327 (string-append
4328 "\""
4329 (dirname (search-input-file inputs "/lib/libSDL2_mixer.so"))
4330 "\"")))
4331 (substitute* "sdl2/sdlttf.py"
4332 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4333 (string-append
4334 "\""
4335 (dirname (search-input-file inputs "/lib/libSDL2_ttf.so"))
4336 "\""))))))))
4337 (inputs
4338 (list sdl2 sdl2-image sdl2-gfx sdl2-mixer sdl2-ttf))
4339 (home-page "https://github.com/py-sdl/py-sdl2")
4340 (synopsis "Python bindings around the SDL2 game development library")
4341 (description "PySDL2 is a pure Python wrapper around the @code{SDL2},
4342 @code{SDL2_mixer}, @code{SDL2_image}, @code{SDL2_ttf}, and @code{SDL2_gfx}
4343 libraries. Instead of relying on C code, it uses the built-in ctypes module
4344 to interface with SDL2, and provides simple Python classes and wrappers for
4345 common SDL2 functionality.")
4346 (license license:cc0)))
4347
4348 (define-public python-pystache
4349 (package
4350 (name "python-pystache")
4351 (version "0.6.0")
4352 (source (origin
4353 (method url-fetch)
4354 (uri (pypi-uri "pystache" version))
4355 (sha256
4356 (base32
4357 "03a73ppf5vxnsk6az5ackvc0hp6xqv2f4hi1s5c4nk4s2jr95gwk"))))
4358 (build-system python-build-system)
4359 (arguments
4360 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
4361 (home-page "http://defunkt.io/pystache/")
4362 (synopsis "Python logic-less template engine")
4363 (description
4364 "Pystache is a Python implementation of the framework agnostic,
4365 logic-free templating system Mustache.")
4366 (license license:expat)))
4367
4368 (define-public python-pystitcher
4369 (package
4370 (name "python-pystitcher")
4371 (version "1.0.4")
4372 (source
4373 (origin
4374 (method git-fetch)
4375 (uri
4376 (git-reference
4377 (url "https://github.com/captn3m0/pystitcher")
4378 (commit
4379 (string-append "v" version))))
4380 (file-name
4381 (git-file-name name version))
4382 (sha256
4383 (base32 "03yrzqhcsjdj5zprrk3bh5bbyqfy3vfhxra9974vmkir3m121394"))))
4384 (build-system python-build-system)
4385 (inputs
4386 (list python-html5lib python-importlib-metadata python-markdown
4387 python-pypdf3 python-validators))
4388 (home-page "https://github.com/captn3m0/pystitcher")
4389 (synopsis "Declaratively stitch together a PDF file from multiple sources")
4390 (description
4391 "This package stitches your PDF files together, generating customizable
4392 bookmarks using a declarative input in the form of a markdown file.")
4393 (license license:expat)))
4394
4395 (define-public python-joblib
4396 (package
4397 (name "python-joblib")
4398 (version "1.1.0")
4399 (source (origin
4400 (method url-fetch)
4401 (uri (pypi-uri "joblib" version))
4402 (sha256
4403 (base32
4404 "0d8ypyhsw1bjr96zan9ms8wbvnzbjqxniq4vcszghcrps7ngqn21"))))
4405 (build-system python-build-system)
4406 (arguments
4407 `(#:phases
4408 (modify-phases %standard-phases
4409 (replace 'check
4410 (lambda* (#:key tests? #:allow-other-keys)
4411 (when tests?
4412 (setenv "JOBLIB_MULTIPROCESSING" "0")
4413 (invoke "pytest" "-v" "joblib"
4414 ;; We disable this test to avoid having to depend on ipython/jupyter
4415 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))))))
4416 (native-inputs
4417 (list python-pytest))
4418 (home-page "https://joblib.readthedocs.io/")
4419 (synopsis "Using Python functions as pipeline jobs")
4420 (description
4421 "Joblib is a set of tools to provide lightweight pipelining in Python.
4422 In particular, joblib offers: transparent disk-caching of the output values
4423 and lazy re-evaluation (memoize pattern), easy simple parallel computing
4424 logging and tracing of the execution.")
4425 (license license:bsd-3)))
4426
4427
4428 (define-public python-daemon
4429 (package
4430 (name "python-daemon")
4431 (version "2.3.0")
4432 (source
4433 (origin
4434 (method url-fetch)
4435 (uri (pypi-uri "python-daemon" version))
4436 (sha256
4437 (base32
4438 "1bxfn2bq56sd4w0nm9mqy8y0905m7fc8vmhnjxlrf49vcbqr7adx"))))
4439 (build-system python-build-system)
4440 (arguments
4441 `(#:phases
4442 (modify-phases %standard-phases
4443 (add-before 'check 'adjust-tests
4444 (lambda _
4445 ;; Drop use of testtools.helpers.safe_hasattr which has
4446 ;; been removed in favor of hasattr.
4447 (substitute* "test/test_metadata.py"
4448 (("testtools\\.helpers\\.safe_hasattr")
4449 "hasattr"))
4450 ;; FIXME: Determine why test fails
4451 (substitute* "test/test_daemon.py"
4452 (("test_detaches_process_context")
4453 "skip_test_detaches_process_context")))))))
4454 (propagated-inputs
4455 (list python-lockfile))
4456 (native-inputs
4457 (list python-coverage
4458 python-testtools
4459 python-testscenarios
4460 python-twine
4461 python-mock
4462 python-docutils))
4463 (home-page "https://pagure.io/python-daemon/")
4464 (synopsis "Python library for making a Unix daemon process")
4465 (description "Python-daemon is a library that assists a Python program to
4466 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
4467
4468 This library provides a @code{DaemonContext} class that manages the following
4469 important tasks for becoming a daemon process:
4470 @enumerate
4471 @item Detach the process into its own process group.
4472 @item Set process environment appropriate for running inside a chroot.
4473 @item Renounce suid and sgid privileges.
4474 @item Close all open file descriptors.
4475 @item Change the working directory, uid, gid, and umask.
4476 @item Set appropriate signal handlers.
4477 @item Open new file descriptors for stdin, stdout, and stderr.
4478 @item Manage a specified PID lock file.
4479 @item Register cleanup functions for at-exit processing.
4480 @end enumerate")
4481 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
4482 (license (list license:asl2.0 license:gpl3+))))
4483
4484 (define-public python-anytree
4485 (package
4486 (name "python-anytree")
4487 (version "2.8.0")
4488 (source (origin
4489 (method url-fetch)
4490 (uri (pypi-uri "anytree" version))
4491 (sha256
4492 (base32
4493 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
4494 (build-system python-build-system)
4495 (propagated-inputs
4496 (list python-six))
4497 (native-inputs
4498 (list ;; For tests.
4499 graphviz ;for 'dot'
4500 python-nose))
4501 (home-page "https://github.com/c0fec0de/anytree")
4502 (synopsis "Lightweight tree data library")
4503 (description
4504 "@code{anytree} is a simple, lightweight, and extensible tree data
4505 structure for Python.")
4506 (license license:asl2.0)))
4507
4508 (define-public autokey
4509 (package
4510 (name "autokey")
4511 (version "0.95.10")
4512 (source (origin
4513 (method git-fetch)
4514 (uri (git-reference
4515 (url "https://github.com/autokey/autokey")
4516 (commit (string-append "v" version))))
4517 (file-name (git-file-name name version))
4518 (sha256
4519 (base32
4520 "0f0cqfnb49wwdy7zl2f2ypcnd5pc8r8n7z7ssxkq20d4xfxlgamr"))))
4521 (build-system python-build-system)
4522 (arguments
4523 (list
4524 ;; Tests are deprecated and broken until next version, see
4525 ;; https://github.com/autokey/autokey/issues/327
4526 #:tests? #f
4527 #:phases
4528 #~(modify-phases %standard-phases
4529 (add-after 'unpack 'fix-paths
4530 (lambda* (#:key inputs #:allow-other-keys)
4531 (substitute* "lib/autokey/scripting.py"
4532 (("\"wmctrl\"")
4533 (string-append "\"" (search-input-file inputs "bin/wmctrl") "\""))
4534 (("\"zenity\"")
4535 (string-append "\"" (search-input-file inputs "bin/zenity") "\"")))
4536 (substitute* "autokey-shell"
4537 (("'ipython3'")
4538 (string-append "'" (search-input-file inputs "bin/ipython3") "'"))
4539 (("'python3'")
4540 (string-append "'" (search-input-file inputs "bin/python3") "'")))))
4541 ;; Use 'prefix' instead of '=' to allow the user to use additional
4542 ;; GI paths from their autokey scripts. GUIX_PYTHONPATH is already
4543 ;; wrapped with prefix in python-build-system's wrap.
4544 (add-before 'wrap 'wrap-autokey-gi
4545 (lambda _
4546 (let ((gi-typelib-path (getenv "GI_TYPELIB_PATH")))
4547 (for-each
4548 (lambda (program)
4549 (wrap-program program
4550 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
4551 (map (lambda (name)
4552 (string-append #$output "/bin/" name))
4553 '("autokey-gtk"
4554 "autokey-shell")))))))))
4555 (inputs
4556 (list bash-minimal ; for wrap-program
4557 gtksourceview-3
4558 libappindicator
4559 libnotify
4560 python-dbus
4561 python-ipython
4562 python-pygobject
4563 python-pyinotify
4564 python-pyqt+qscintilla
4565 python-xlib
4566 wmctrl
4567 zenity))
4568 (home-page "https://github.com/autokey/autokey")
4569 (synopsis
4570 "Keyboard and GUI automation utility")
4571 (description
4572 "AutoKey is a desktop automation utility for X11. It allows the automation of
4573 virtually any task by responding to typed abbreviations and hotkeys. It
4574 offers a full-featured GUI (GTK and QT versions) that makes it highly
4575 accessible for novices, as well as a scripting interface offering the full
4576 flexibility and power of the Python language.")
4577 (license license:gpl3+)))
4578
4579 (define-public python-docutils
4580 (package
4581 (name "python-docutils")
4582 (version "0.17.1")
4583 (source
4584 (origin
4585 (method url-fetch)
4586 (uri (pypi-uri "docutils" version))
4587 (sha256
4588 (base32
4589 "09gii36lp1bs26cpxqyfd20xahnpbrbjzcnba2xq08y3wk97frb8"))))
4590 (build-system python-build-system)
4591 (arguments
4592 '(#:phases (modify-phases %standard-phases
4593 (replace 'check
4594 (lambda* (#:key tests? #:allow-other-keys)
4595 (if tests?
4596 (invoke "python" "test/alltests.py")
4597 (format #t "test suite not run~%"))
4598 #t)))))
4599 (home-page "http://docutils.sourceforge.net/")
4600 (synopsis "Python Documentation Utilities")
4601 (description
4602 "Docutils is a modular system for processing documentation into useful
4603 formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
4604 easy to use markup language, for input.
4605
4606 This package provides tools for converting @file{.rst} files to other formats
4607 via commands such as @command{rst2man}, as well as supporting Python code.")
4608 ;; Most of the source code is public domain, but some source files are
4609 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
4610 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
4611
4612 ;; TODO: Make this the default in the next rebuild cycle.
4613 (define-public python-docutils-0.19
4614 (package
4615 (inherit python-docutils)
4616 (version "0.19")
4617 (source (origin
4618 (method url-fetch)
4619 (uri (pypi-uri "docutils" version))
4620 (sha256
4621 (base32
4622 "1rprvir116g5rz2bgzkzgyn6mv0z8582rz7bgxbpy2y3adkmm69k"))))))
4623
4624 ;; awscli refuses to be built with docutils < 0.16.
4625 (define-public python-docutils-0.15
4626 (package
4627 (inherit python-docutils)
4628 (version "0.15")
4629 (source (origin
4630 (method url-fetch)
4631 (uri (pypi-uri "docutils" version))
4632 (sha256
4633 (base32
4634 "0ja8q6mdj6xv62jjw3phv8j5nfqi5x8hnfy4pqfcjcgz4b34k8sl"))))
4635 ;; tests contain Python 2 syntax.
4636 (arguments '(#:tests? #false))))
4637
4638 (define-public python-restructuredtext-lint
4639 (package
4640 (name "python-restructuredtext-lint")
4641 (version "1.3.0")
4642 (source
4643 (origin
4644 (method url-fetch)
4645 (uri (pypi-uri "restructuredtext-lint" version))
4646 (sha256
4647 (base32
4648 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
4649 (build-system python-build-system)
4650 (arguments
4651 `(#:phases
4652 (modify-phases %standard-phases
4653 (delete 'check)
4654 (add-after 'install 'check
4655 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4656 (when tests?
4657 (add-installed-pythonpath inputs outputs)
4658 (invoke "nosetests" "-v"))
4659 #t)))))
4660 (propagated-inputs
4661 (list python-docutils))
4662 (native-inputs
4663 (list python-nose))
4664 (home-page "https://github.com/twolfson/restructuredtext-lint")
4665 (synopsis "reStructuredText linter")
4666 (description "This package provides a linter for the reStructuredText
4667 format.")
4668 (license license:unlicense)))
4669
4670 (define-public python-click-repl
4671 (package
4672 (name "python-click-repl")
4673 (version "0.2.0")
4674 (source
4675 (origin
4676 (method git-fetch) ; no tests in PyPI release
4677 (uri (git-reference
4678 (url "https://github.com/click-contrib/click-repl")
4679 (commit version)))
4680 (file-name (git-file-name name version))
4681 (sha256
4682 (base32 "16ybsnwlj2jlqcfxflky8jz7i3nhrd3f6mvkpgs95618l8lx994i"))))
4683 (build-system python-build-system)
4684 (arguments
4685 `(#:phases
4686 (modify-phases %standard-phases
4687 (replace 'check
4688 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4689 (when tests?
4690 (add-installed-pythonpath inputs outputs)
4691 (invoke "python" "-m" "pytest")))))))
4692 (native-inputs
4693 (list python-pytest))
4694 (propagated-inputs
4695 (list python-click python-prompt-toolkit python-six))
4696 (home-page "https://github.com/untitaker/click-repl")
4697 (synopsis "REPL plugin for Click")
4698 (description "This package provides a REPL plugin for Click.")
4699 (license license:expat)))
4700
4701 (define-public python-doc8
4702 (package
4703 (name "python-doc8")
4704 (version "0.8.0")
4705 (source
4706 (origin
4707 (method url-fetch)
4708 (uri (pypi-uri "doc8" version))
4709 (sha256
4710 (base32
4711 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
4712 (build-system python-build-system)
4713 (arguments
4714 `(#:phases
4715 (modify-phases %standard-phases
4716 (delete 'check)
4717 (add-after 'install 'check
4718 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4719 (when tests?
4720 (add-installed-pythonpath inputs outputs)
4721 (invoke "pytest" "-v"))
4722 #t)))))
4723 (propagated-inputs
4724 (list python-chardet python-docutils python-restructuredtext-lint
4725 python-six python-stevedore))
4726 (native-inputs
4727 (list python-testtools python-pytest))
4728 (home-page "https://launchpad.net/doc8")
4729 (synopsis
4730 "Style checker for Sphinx (or other) RST documentation")
4731 (description
4732 "Doc8 is an opinionated style checker for reStructured Text and plain
4733 text styles of documentation.")
4734 (license license:asl2.0)))
4735
4736 (define-public python-pygments
4737 (package
4738 (name "python-pygments")
4739 (version "2.12.0")
4740 (source
4741 (origin
4742 (method url-fetch)
4743 (uri (pypi-uri "Pygments" version))
4744 (sha256
4745 (base32
4746 "1sr6iqh21xi6p8aba4wa9pqfhjbbpcvn9jcsx0ggy4lniw8idcay"))))
4747 (build-system python-build-system)
4748 (arguments
4749 ;; FIXME: Tests require sphinx, which depends on this.
4750 '(#:tests? #f))
4751 (home-page "https://pygments.org/")
4752 (synopsis "Syntax highlighting")
4753 (description
4754 "Pygments is a syntax highlighting package written in Python.")
4755 (license license:bsd-2)))
4756
4757 (define-public python-pygments-github-lexers
4758 (package
4759 (name "python-pygments-github-lexers")
4760 (version "0.0.5")
4761 (source
4762 (origin
4763 (method url-fetch)
4764 (uri (pypi-uri "pygments-github-lexers" version))
4765 (sha256
4766 (base32
4767 "0cz14clcc9z4pn79ll8hp3xzgsrfjscak5zfsvlgrz6ngkkmgjma"))))
4768 (build-system python-build-system)
4769 (propagated-inputs
4770 (list python-pygments))
4771 (home-page "https://github.com/liluo/pygments-github-lexers")
4772 (synopsis "Pygments Github custom lexers")
4773 (description "This package installs Github custom lexers to Pygments.")
4774 (license license:bsd-3)))
4775
4776 (define-public python-bump2version
4777 (package
4778 (name "python-bump2version")
4779 (version "1.0.1")
4780 (source
4781 (origin
4782 (method url-fetch)
4783 (uri (pypi-uri "bump2version" version))
4784 (sha256
4785 (base32 "1rinm4gv1fyh7xjv3v6r1p3zh5kl4ry2qifz5f7frx31mnzv4b3n"))))
4786 (build-system python-build-system)
4787 (arguments
4788 ;; XXX: Tests fail with "bumpversion: error: the following arguments are
4789 ;; required: --new-version".
4790 `(#:tests? #false))
4791 (home-page "https://github.com/c4urself/bump2version")
4792 (synopsis "Version-bump your software with a single command!")
4793 (description
4794 "This package provides a small command line tool to simplify releasing
4795 software by updating all version strings in your source code by the correct
4796 increment. It also creates commits and tags.")
4797 (license license:expat)))
4798
4799 (define-public python-bumpversion
4800 (package
4801 (name "python-bumpversion")
4802 (version "0.5.3")
4803 (source
4804 (origin
4805 (method url-fetch)
4806 (uri (pypi-uri "bumpversion" version))
4807 (sha256
4808 (base32
4809 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
4810 (build-system python-build-system)
4811 (home-page "https://github.com/peritus/bumpversion")
4812 (synopsis "Tool to bump software version")
4813 (description "This tool provides a command-line interface (CLI) to bump a
4814 software version simply.")
4815 (license license:expat)))
4816
4817 (define-public python-deprecated
4818 (package
4819 (name "python-deprecated")
4820 (version "1.2.13")
4821 (source
4822 (origin
4823 (method git-fetch)
4824 (uri (git-reference
4825 (url "https://github.com/tantale/deprecated")
4826 (commit (string-append "v" version))))
4827 (file-name (git-file-name name version))
4828 (sha256
4829 (base32
4830 "0v4ys9xr8lski2r98da99spsj6hjlnnqgnhhmyhrm66myiix885c"))))
4831 (build-system python-build-system)
4832 (arguments
4833 `(#:phases (modify-phases %standard-phases
4834 (replace 'check
4835 (lambda* (#:key tests? #:allow-other-keys)
4836 (when tests?
4837 (invoke "pytest")))))))
4838 (propagated-inputs
4839 (list python-wrapt))
4840 (native-inputs
4841 (list python-bumpversion python-pytest python-pytest-cov
4842 python-sphinx python-tox))
4843 (home-page "https://github.com/tantale/deprecated")
4844 (synopsis "Python decorator to deprecate classes, functions or methods")
4845 (description "The @code{deprecated} decorator provides a convenient way to deprecate
4846 to deprecate classes, functions or methods.")
4847 (license license:expat)))
4848
4849 (define-public python-pygithub
4850 (package
4851 (name "python-pygithub")
4852 (version "1.55")
4853 (source
4854 ;; We fetch from the Git repo because there are no tests in the PyPI
4855 ;; archive.
4856 (origin
4857 (method git-fetch)
4858 (uri (git-reference
4859 (url "https://github.com/PyGithub/PyGithub")
4860 (commit (string-append "v" version))))
4861 (file-name (git-file-name name version))
4862 (sha256
4863 (base32 "082bxffpy4h97dsay3l75cpgfjj10kywkvicnm6xscwvah285q9y"))))
4864 (build-system python-build-system)
4865 (arguments
4866 `(#:phases
4867 (modify-phases %standard-phases
4868 (replace 'check
4869 (lambda* (#:key tests? #:allow-other-keys)
4870 (when tests?
4871 (invoke "pytest"))
4872 #t)))))
4873 (propagated-inputs
4874 (list python-cryptography python-deprecated python-pyjwt
4875 python-pynacl python-requests))
4876 (native-inputs
4877 (list python-httpretty python-pytest))
4878 (home-page "https://pygithub.readthedocs.io/en/latest/")
4879 (synopsis "Python library for the GitHub API")
4880 (description "This library allows managing GitHub resources such as
4881 repositories, user profiles, and organizations in your Python applications,
4882 using version 3 of the GitHub application programming interface (API).")
4883 (license license:lgpl3+)))
4884
4885 (define-public python-rellu
4886 (package
4887 (name "python-rellu")
4888 (version "0.7")
4889 (source
4890 (origin
4891 (method url-fetch)
4892 (uri (pypi-uri "rellu" version))
4893 (sha256
4894 (base32
4895 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
4896 (build-system python-build-system)
4897 (propagated-inputs
4898 (list python-invoke python-pygithub))
4899 (home-page "https://github.com/robotframework/rellu")
4900 (synopsis "Utilities to create PyPI releases")
4901 (description "This collection of utilities contains tooling and templates
4902 to assist in creating releases on GitHub and publishing them on PyPI. It is
4903 designed to be used by Robot Framework and tools and libraries in its
4904 ecosystem, but can naturally be used also by other projects.")
4905 (license license:asl2.0)))
4906
4907 (define-public python-robotframework
4908 (package
4909 (name "python-robotframework")
4910 (version "5.0.1")
4911 ;; There are no tests in the PyPI archive.
4912 (source
4913 (origin
4914 (method git-fetch)
4915 (uri (git-reference
4916 (url "https://github.com/robotframework/robotframework")
4917 (commit (string-append "v" version))))
4918 (file-name (git-file-name name version))
4919 (sha256
4920 (base32 "0jjr71npzrm5mv16pya3m2dqaqgf6sc45yca5kfmc5lfislig5b8"))
4921 (patches (search-patches
4922 "python-robotframework-atest.patch"
4923 "python-robotframework-source-date-epoch.patch"))))
4924 (build-system python-build-system)
4925 (arguments
4926 (list
4927 #:modules '((guix build python-build-system)
4928 (guix build utils)
4929 (ice-9 ftw)
4930 (ice-9 match)
4931 (srfi srfi-26))
4932 #:phases
4933 #~(modify-phases %standard-phases
4934 (add-after 'unpack 'delete-problematic-tests
4935 (lambda _
4936 ;; Tests such as 'Tilde and username in path' rely on HOME and
4937 ;; USER being set, on top of the user's /etc/passwd home
4938 ;; directory not being '/', as is the case in the Guix build
4939 ;; container.
4940 (delete-file "atest/robot/standard_libraries/\
4941 operating_system/path_expansion.robot")))
4942 (add-before 'build 'build-and-install-doc
4943 (lambda* (#:key outputs #:allow-other-keys)
4944 (let ((doc (string-append (assoc-ref outputs "doc")
4945 "/share/doc/robotframework")))
4946 (invoke "invoke" "library-docs" "all")
4947 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
4948 (mkdir-p doc)
4949 (with-directory-excursion "dist"
4950 (define user-guide-dir
4951 (match (scandir "." (cut string-prefix?
4952 "robotframework-userguide-" <>))
4953 ((dir) dir)
4954 (_ (error "could not find the user guide directory"))))
4955 (copy-recursively user-guide-dir doc)))))
4956 (replace 'check
4957 (lambda* (#:key native-inputs inputs tests?
4958 #:allow-other-keys)
4959 (when tests?
4960 ;; Some tests require timezone data. Otherwise, they
4961 ;; look up /etc/localtime, which doesn't exist, and
4962 ;; fail with:
4963 ;;
4964 ;; OverflowError: mktime argument out of range
4965 (setenv "TZDIR"
4966 (search-input-directory
4967 (or native-inputs inputs) "share/zoneinfo"))
4968 (setenv "TZ" "Europe/Paris")
4969
4970 (format #t "Running unit tests...~%")
4971 (invoke "utest/run.py")
4972
4973 (format #t "Running acceptance tests...~%")
4974 (invoke "xvfb-run" "atest/run.py")))))))
4975 (native-inputs
4976 (list python-docutils
4977 python-jsonschema-next
4978 python-invoke
4979 python-lxml
4980 python-pygments
4981 python-pyyaml
4982 python-rellu
4983 `(,python "tk") ;used when building the HTML doc
4984 python-xmlschema
4985 scrot ;for taking screenshots
4986 tzdata-for-tests
4987 xvfb-run))
4988 (outputs '("out" "doc"))
4989 (home-page "https://robotframework.org")
4990 (synopsis "Generic automation framework")
4991 (description "Robot Framework is a generic automation framework for
4992 acceptance testing, acceptance test driven development (ATDD), and robotic
4993 process automation (RPA).")
4994 (license license:asl2.0)))
4995
4996 (define-public python-robotframework-datadriver
4997 (package
4998 (name "python-robotframework-datadriver")
4999 (version "1.6.1")
5000 (source
5001 (origin
5002 (method url-fetch)
5003 (uri (pypi-uri "robotframework-datadriver" version))
5004 (sha256
5005 (base32 "0mcyr3v98nvfnvffy096qp3jqslas7l8hh0j00lpi0mp12cd0qk9"))))
5006 (build-system python-build-system)
5007 (arguments
5008 `(#:phases
5009 (modify-phases %standard-phases
5010 (add-before 'check 'skip-problematic-tests
5011 (lambda _
5012 ;; The test file 'tab-csv-file-name.tsv' contains special
5013 ;; characters for which there is no locale in the build
5014 ;; environment, causing one test to fail.
5015 (delete-file-recursively "atest/TestCases/csv_reader_config")))
5016 (replace 'check
5017 (lambda* (#:key tests? #:allow-other-keys)
5018 (when tests?
5019 (with-directory-excursion "atest"
5020 (invoke "sh" "run_atest.sh"))))))))
5021 (native-inputs (list python-docutils
5022 python-robotframework-stacktrace))
5023 (propagated-inputs (list python-openpyxl
5024 python-pandas
5025 python-pygments
5026 python-robotframework))
5027 (home-page "https://github.com/Snooz82/robotframework-datadriver")
5028 (synopsis "Data-driven test extension for Robot Framework")
5029 (description "DataDriver is a data-driven extension for Robot Framework.
5030 DataDriver uses the Listener Interface of Robot Framework to create new test
5031 cases based on a data file that contains the test data. DataDriver supports
5032 data files in the CSV, XLS or XLSX formats.")
5033 (license license:asl2.0)))
5034
5035 (define-public python-robotframework-lint
5036 ;; There is no properly tagged release; the commit below seems to correspond
5037 ;; to the 0.9 stable release available from PyPI. The tests are not
5038 ;; included in the PyPI archive, so we fetch the sources from the upstream
5039 ;; Git repo.
5040 (let ((commit "b0619ac58a8b1be125f9c98856a664594614570f")
5041 (revision "0"))
5042 (package
5043 (name "python-robotframework-lint")
5044 (version (git-version "1.1" ;version taken from 'rflint/version.py'
5045 revision commit))
5046 (source
5047 (origin
5048 (method git-fetch)
5049 (uri (git-reference
5050 (url "https://github.com/boakley/robotframework-lint")
5051 (commit commit)))
5052 (file-name (git-file-name name version))
5053 (sha256
5054 (base32
5055 "180npmvzqync25b2scs878gv8q4y17dsinxyjcc10bw22msfap6b"))))
5056 (build-system python-build-system)
5057 (arguments
5058 `(#:phases
5059 (modify-phases %standard-phases
5060 (replace 'check
5061 (lambda _
5062 (invoke "python" "-m" "robot" "-A"
5063 "tests/conf/default.args" "tests"))))))
5064 (propagated-inputs
5065 (list python-robotframework))
5066 (home-page "https://github.com/boakley/robotframework-lint/")
5067 (synopsis "Static analysis tool (linter) for Robot Framework")
5068 (description "This package provides the @code{rflint} command-line
5069 utility, a static analysis tool (linter) for Robot Framework source files.")
5070 (license license:asl2.0))))
5071
5072 (define-public python-robotframework-pabot
5073 (package
5074 (name "python-robotframework-pabot")
5075 (version "2.7.0")
5076 (source
5077 (origin
5078 ;; There are no tests in the PyPI archive.
5079 (method git-fetch)
5080 (uri (git-reference
5081 (url "https://github.com/mkorpela/pabot")
5082 (commit version)))
5083 (file-name (git-file-name name version))
5084 (sha256
5085 (base32
5086 "0246vvyaxax0nzlrffvp9vg6mh5jmvbbm87azignf0gakjidr7nn"))))
5087 (build-system python-build-system)
5088 (arguments
5089 (list
5090 #:phases #~(modify-phases %standard-phases
5091 (replace 'check
5092 (lambda* (#:key tests? #:allow-other-keys)
5093 (when tests?
5094 (invoke "pytest" "-vv" "tests")))))))
5095 (propagated-inputs
5096 (list python-robotframework python-robotframework-stacktrace))
5097 (native-inputs
5098 (list python-pytest))
5099 (home-page "https://pabot.org")
5100 (synopsis "Parallel test runner for Robot Framework")
5101 (description "Pabot is a parallel executor for Robot Framework tests.")
5102 (license license:asl2.0)))
5103
5104 (define-public python-sshtunnel
5105 (package
5106 (name "python-sshtunnel")
5107 (version "0.4.0")
5108 (source (origin
5109 (method url-fetch)
5110 (uri (pypi-uri "sshtunnel" version))
5111 (sha256
5112 (base32
5113 "1z7rdgpp9m36ysh9pfzrn3vyiaj05bkjvcjdhj8vz0fvfjkhxjz7"))))
5114 (build-system python-build-system)
5115 (arguments
5116 `(#:phases
5117 (modify-phases %standard-phases
5118 (replace 'check
5119 (lambda* (#:key tests? #:allow-other-keys)
5120 (when tests? (invoke "pytest" "-vv" "tests")))))))
5121 (propagated-inputs (list python-paramiko))
5122 (native-inputs (list openssh python-pytest))
5123 (home-page "https://github.com/pahaz/sshtunnel")
5124 (synopsis "Python SSH tunnels library")
5125 (description "@code{sshtunnel} is a Python module for easily creating SSH
5126 tunnels in the background, using Python.")
5127 (license license:expat)))
5128
5129 (define-public python-robotframework-sshtunnellibrary
5130 (package
5131 (name "python-robotframework-sshtunnellibrary")
5132 (version "1.0.0")
5133 (source (origin
5134 (method git-fetch)
5135 (uri (git-reference
5136 (url "https://github.com/C-Squad/robotframework-sshtunnellibrary")
5137 (commit (string-append "v" version))))
5138 (file-name (git-file-name name version))
5139 (sha256
5140 (base32
5141 "1vkkmkb8iql13xpbyj4hvnnmfgzqlr8rffgryp2082cadb3w7xrd"))))
5142 (build-system python-build-system)
5143 (arguments
5144 (list #:phases #~(modify-phases %standard-phases
5145 (replace 'check
5146 (lambda* (#:key tests? #:allow-other-keys)
5147 (when tests?
5148 (invoke "python" "-m" "unittest"
5149 "discover" "-s" "test")))))))
5150 (propagated-inputs (list python-robotframework python-sshtunnel))
5151 (home-page "https://github.com/C-Squad/robotframework-sshtunnellibrary")
5152 (synopsis "Alternative RobotFramework library for SSH tunnels")
5153 (description "SSHTunnelLibrary is an alternative RobotFramework
5154 library (to the more official one that comes from the
5155 @code{robotframework-sshlibrary} package) to support SSH tunnels.")
5156 (license license:asl2.0)))
5157
5158 (define-public python-robotframework-stacktrace
5159 (package
5160 (name "python-robotframework-stacktrace")
5161 (version "0.4.1")
5162 (source
5163 (origin
5164 (method url-fetch)
5165 (uri (pypi-uri "robotframework-stacktrace" version))
5166 (sha256
5167 (base32 "19gnwr7da1zz9clhwsmvqfjf02d195i61lzpq4253dcsgrpb6v79"))))
5168 (build-system python-build-system)
5169 (arguments
5170 ;; The test suite fails (see:
5171 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
5172 `(#:tests? #f
5173 #:phases
5174 (modify-phases %standard-phases
5175 (replace 'check
5176 (lambda* (#:key tests? #:allow-other-keys)
5177 (when tests?
5178 (with-directory-excursion "tests"
5179 (invoke "python" "-m" "robot" "."))))))))
5180 (propagated-inputs (list python-robotframework))
5181 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
5182 (synopsis "Robot Framework listener to print a stack trace on error")
5183 (description "StackTrace is a Robot Framework listener that prints a stack
5184 trace directly to the terminal to ease debugging.")
5185 (license license:asl2.0)))
5186
5187 (define-public python-robotframework-sshlibrary
5188 (package
5189 (name "python-robotframework-sshlibrary")
5190 (version "3.8.0")
5191 ;; There are no tests in the PyPI archive.
5192 (source
5193 (origin
5194 (method git-fetch)
5195 (uri (git-reference
5196 (url "https://github.com/robotframework/SSHLibrary")
5197 (commit (string-append "v" version))))
5198 (file-name (git-file-name name version))
5199 (sha256
5200 (base32
5201 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
5202 (patches (search-patches
5203 "python-robotframework-sshlibrary-rf5-compat.patch"))))
5204 (build-system python-build-system)
5205 (arguments
5206 `(#:phases
5207 (modify-phases %standard-phases
5208 (add-before 'build 'build-and-install-doc
5209 (lambda* (#:key outputs #:allow-other-keys)
5210 (let ((doc (string-append
5211 (assoc-ref outputs "doc")
5212 "/share/doc/robotframework-sshlibrary")))
5213 (invoke "chmod" "-R" "+w" "docs")
5214 (invoke "invoke" "kw-docs" "project-docs")
5215 (mkdir-p doc)
5216 (for-each delete-file (find-files "docs" "\\.rst"))
5217 (copy-recursively "docs" doc))))
5218 (replace 'check
5219 (lambda* (#:key tests? #:allow-other-keys)
5220 (when tests?
5221 ;; Some tests require an SSH server; we remove them.
5222 (delete-file "utest/test_client_api.py")
5223 (delete-file "utest/test_scp.py")
5224 (invoke "python" "utest/run.py")))))))
5225 (propagated-inputs
5226 (list python-robotframework python-paramiko python-scp))
5227 (native-inputs
5228 (list openssh
5229 which
5230 ;; To generate the documentation
5231 python-docutils
5232 python-invoke
5233 python-pygments
5234 python-rellu))
5235 (outputs '("out" "doc"))
5236 (home-page "https://github.com/robotframework/SSHLibrary")
5237 (synopsis "Robot Framework library for SSH and SFTP")
5238 (description "SSHLibrary is a Robot Framework library providing support
5239 for SSH and SFTP. It has the following main usages:
5240 @itemize @bullet
5241 @item Executing commands on the remote machine, either blocking or non-blocking.
5242 @item Writing and reading in an interactive shell.
5243 @item Transferring files and directories over SFTP.
5244 @item Ensuring that files and directories exist on the remote machine.
5245 @end itemize")
5246 (license license:asl2.0)))
5247
5248 (define-public python-robotframework-pythonlibcore
5249 (package
5250 (name "python-robotframework-pythonlibcore")
5251 (version "3.0.0")
5252 (source
5253 (origin
5254 (method git-fetch) ;no tests in pypi archive
5255 (uri (git-reference
5256 (url "https://github.com/robotframework/PythonLibCore")
5257 (commit (string-append "v" version))))
5258 (file-name (git-file-name name version))
5259 (sha256
5260 (base32
5261 "0v89v8va65l6inh0fb34qgxawx6p29pnrmw4n5941yzdi3804rc4"))))
5262 (build-system python-build-system)
5263 (arguments
5264 `(#:phases (modify-phases %standard-phases
5265 (replace 'check
5266 (lambda* (#:key tests? #:allow-other-keys)
5267 (when tests?
5268 (invoke "utest/run.py")))))))
5269 (native-inputs
5270 (list python-pytest python-pytest-cov python-pytest-mockito
5271 python-robotframework))
5272 (home-page "https://github.com/robotframework/PythonLibCore")
5273 (synopsis "Robot Framework Python library tools")
5274 (description "PythonLibCore provides tools for creating larger test
5275 libraries for Robot Framework using Python. The Robot Framework hybrid and
5276 dynamic library APIs give more flexibility for library than the static library
5277 API, but they also set requirements for libraries which need to be implemented
5278 in the library side. PythonLibCore eases the problem by providing a simpler
5279 interface and by handling all the requirements towards the Robot Framework
5280 library APIs.")
5281 (license license:asl2.0)))
5282
5283 (define-public python-robotframework-seleniumlibrary
5284 (package
5285 (name "python-robotframework-seleniumlibrary")
5286 (version "5.1.3")
5287 (source
5288 (origin
5289 (method url-fetch)
5290 (uri (pypi-uri "robotframework-seleniumlibrary" version))
5291 (sha256
5292 (base32 "1dihrbcid9i7daw2qy6h3xsvwaxzmyip820jw5z11n60qrl006pm"))))
5293 (build-system python-build-system)
5294 ;; XXX: Tests require ungoogled-chromium, but the chromium module would
5295 ;; introduce a cycle if imported here.
5296 (propagated-inputs
5297 (list python-robotframework python-robotframework-pythonlibcore
5298 python-selenium))
5299 (home-page "https://github.com/robotframework/SeleniumLibrary")
5300 (synopsis "Web testing library for Robot Framework")
5301 (description "SeleniumLibrary is a web testing library for Robot Framework
5302 that utilizes the Selenium tool internally.")
5303 (license license:asl2.0)))
5304
5305 (define-public python-robotframework-seleniumscreenshots
5306 (package
5307 (name "python-robotframework-seleniumscreenshots")
5308 (version "0.9.5")
5309 (source
5310 (origin
5311 (method url-fetch)
5312 (uri (pypi-uri "robotframework-seleniumscreenshots" version))
5313 (sha256
5314 (base32 "05qv323hvjmy62h33ryrjaa9k1hyvp8hq5qnj8j1x3ap2ci3q3s0"))))
5315 (build-system python-build-system)
5316 (arguments
5317 ;; XXX: The tests require a relatively complicated setup configured in
5318 ;; their CI with Nix (!).
5319 `(#:tests? #f))
5320 (propagated-inputs
5321 (list python-robotframework python-robotframework-seleniumlibrary))
5322 (home-page "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
5323 (synopsis "Robot Framework library for annotating and cropping screenshots")
5324 (description "The SeleniumScreenshots library for Robot Framework provides
5325 keywords for annotating and cropping screenshots taken with SeleniumLibrary.
5326 It is useful for scripting automatically updated screenshots for documentation
5327 or for visual regression testing purposes.")
5328 (license license:bsd-3)))
5329
5330 (define-public python-rstr
5331 (package
5332 (name "python-rstr")
5333 (version "2.2.6")
5334 (source
5335 (origin
5336 (method url-fetch)
5337 (uri (pypi-uri "rstr" version))
5338 (sha256
5339 (base32
5340 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
5341 (build-system python-build-system)
5342 (home-page "https://github.com/leapfrogonline/rstr")
5343 (synopsis "Generate random strings in Python")
5344 (description "This package provides a python module for generating
5345 random strings of various types. It could be useful for fuzz testing,
5346 generating dummy data, or other applications. It has no dependencies
5347 outside the standard library.")
5348 (license license:bsd-3)))
5349
5350 (define-public python-scp
5351 (package
5352 (name "python-scp")
5353 (version "0.13.3")
5354 (source
5355 (origin
5356 (method url-fetch)
5357 (uri (pypi-uri "scp" version))
5358 (sha256
5359 (base32 "1m2v09m407p097cy3xy5rxicqfzrqjwf8v5rd4qhfqkk7lllimwb"))))
5360 (build-system python-build-system)
5361 (arguments
5362 '(#:tests? #f)) ;tests require an SSH server
5363 (propagated-inputs
5364 (list python-paramiko))
5365 (home-page "https://github.com/jbardin/scp.py")
5366 (synopsis "SCP protocol module for Python and Paramiko")
5367 (description "The scp module extends the Paramiko library to send and
5368 receive files via the SCP1 protocol, as implemented by the OpenSSH
5369 @command{scp} program.")
5370 (license license:gpl2+)))
5371
5372 (define-public python-rst.linker
5373 (package
5374 (name "python-rst.linker")
5375 (version "1.11")
5376 (source
5377 (origin
5378 (method url-fetch)
5379 (uri (pypi-uri "rst.linker" version))
5380 (sha256
5381 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
5382 (build-system python-build-system)
5383 (propagated-inputs
5384 (list python-dateutil python-six))
5385 (native-inputs
5386 (list python-setuptools-scm))
5387 ;; Test would require path.py, which would introduce a cyclic dependence.
5388 (arguments `(#:tests? #f))
5389 ;; Note: As of version 1.7 the documentation is not worth building.
5390 (home-page "https://github.com/jaraco/rst.linker")
5391 (synopsis "Sphinx plugin to add links and timestamps")
5392 (description "rst.linker automatically replaces text by a
5393 reStructuredText external reference or timestamps. It's primary purpose is to
5394 augment the changelog, but it can be used for other documents, too.")
5395 (license license:expat)))
5396
5397 (define-public python-sshpubkeys
5398 (package
5399 (name "python-sshpubkeys")
5400 (version "3.1.0")
5401 (home-page "https://github.com/ojarva/python-sshpubkeys")
5402 (source (origin
5403 (method git-fetch)
5404 (uri (git-reference
5405 (url home-page)
5406 (commit (string-append "v" version))))
5407 (file-name (git-file-name name version))
5408 (sha256
5409 (base32
5410 "1h4gwmcfn84kkqh83km1vfz8sc5kr2g4gzgzmr8gz704jmqiv7nq"))))
5411 (build-system python-build-system)
5412 (propagated-inputs
5413 (list python-cryptography python-ecdsa))
5414 (synopsis "OpenSSH public key parser")
5415 (description
5416 "This package provides a library for parsing and validating OpenSSH
5417 public key files.")
5418 (license license:bsd-3)))
5419
5420 (define-public python-feedgenerator
5421 (package
5422 (name "python-feedgenerator")
5423 (version "1.9")
5424 (source
5425 (origin
5426 (method url-fetch)
5427 (uri (pypi-uri "feedgenerator" version))
5428 (sha256
5429 (base32
5430 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
5431 (modules '((guix build utils)))
5432 (snippet
5433 '(begin
5434 ;; Remove pre-compiled .pyc files from source.
5435 (for-each delete-file-recursively
5436 (find-files "." "__pycache__" #:directories? #t))
5437 (for-each delete-file (find-files "." "\\.pyc$"))
5438 #t))))
5439 (build-system python-build-system)
5440 (propagated-inputs
5441 (list python-pytz python-six))
5442 (home-page "https://github.com/getpelican/feedgenerator")
5443 (synopsis
5444 "Standalone version of Django's Atom/RSS feed generator")
5445 (description
5446 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
5447 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
5448 (license license:bsd-3)))
5449
5450 (define-public python-lsp-jsonrpc
5451 (package
5452 (name "python-lsp-jsonrpc")
5453 (version "1.0.0")
5454 (source
5455 (origin
5456 (method url-fetch)
5457 (uri (pypi-uri "python-lsp-jsonrpc" version))
5458 (sha256
5459 (base32
5460 "1gb0fsamxndhplx25v8m0b3k7aknzy454fpa0qsqsqnv6c3igv3v"))))
5461 (build-system python-build-system)
5462 (native-inputs
5463 (list python-mock python-pytest))
5464 (propagated-inputs
5465 (list python-ujson))
5466 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
5467 (synopsis "JSON RPC 2.0 server library")
5468 (description
5469 "This package provides a JSON RPC 2.0 server library for Python.")
5470 (license license:expat)))
5471
5472 (define-public python-jsonrpc-server
5473 (deprecated-package "python-jsonrpc-server" python-lsp-jsonrpc))
5474
5475 (define-public python-pydantic
5476 (package
5477 (name "python-pydantic")
5478 (version "1.9.1")
5479 (source
5480 (origin
5481 (method git-fetch)
5482 (uri (git-reference
5483 (url "https://github.com/samuelcolvin/pydantic")
5484 (commit (string-append "v" version))))
5485 (file-name (git-file-name name version))
5486 (sha256
5487 (base32 "1406kgppqa7524mxllsipj7gb8fn7pwf51l11lqik59xjhsfv94f"))))
5488 (build-system python-build-system)
5489 (arguments
5490 '(#:phases
5491 (modify-phases %standard-phases
5492 (replace 'check
5493 (lambda _ (invoke "pytest" "-vv"))))))
5494 (native-inputs
5495 (list python-pytest python-pytest-mock))
5496 (propagated-inputs
5497 (list python-typing-extensions))
5498 (home-page "https://github.com/samuelcolvin/pydantic")
5499 (synopsis "Python data validation and settings management")
5500 (description
5501 "Pydantic enforces type hints at runtime, and provides user friendly
5502 errors when data is invalid.")
5503 (license license:expat)))
5504
5505 (define-public python-pydantic-cli
5506 (package
5507 (name "python-pydantic-cli")
5508 (version "4.3.0")
5509 (source
5510 (origin
5511 (method git-fetch) ;for tests
5512 (uri (git-reference
5513 (url "https://github.com/mpkocher/pydantic-cli")
5514 (commit (string-append "v" version))))
5515 (file-name (git-file-name name version))
5516 (sha256
5517 (base32
5518 "1v4dx6n60rbsan5zpw2rgdih7lb3h0xclagn1p6zfwl0r9l9cvym"))))
5519 (build-system python-build-system)
5520 (propagated-inputs
5521 (list python-pydantic))
5522 (native-inputs
5523 (list python-black
5524 python-mypy
5525 python-pytest))
5526 (home-page "https://github.com/mpkocher/pydantic-cli")
5527 (synopsis "Turn Pydantic defined data models into CLI tools")
5528 (description
5529 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
5530 Interfaces} via data models provided in the JSON format.")
5531 (license license:expat)))
5532
5533 (define-public python-pydocstyle
5534 (package
5535 (name "python-pydocstyle")
5536 (version "3.0.0")
5537 (source
5538 (origin
5539 (method url-fetch)
5540 (uri (pypi-uri "pydocstyle" version))
5541 (sha256
5542 (base32
5543 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
5544 (build-system python-build-system)
5545 (propagated-inputs
5546 (list python-six python-snowballstemmer))
5547 (home-page
5548 "https://github.com/PyCQA/pydocstyle/")
5549 (synopsis "Python docstring style checker")
5550 (description
5551 "This package provides a style checker for the Python Language
5552 Server (PLS).")
5553 (license license:expat)))
5554
5555 (define-public python-lsp-server
5556 (package
5557 (name "python-lsp-server")
5558 (version "1.3.3")
5559 (source
5560 (origin
5561 (method url-fetch)
5562 (uri (pypi-uri "python-lsp-server" version))
5563 (sha256
5564 (base32
5565 "0h6wxzmm6qjfwkkn3mnzn1fpmcp23fpbk74bi8p540q1nzccqj0v"))))
5566 (build-system python-build-system)
5567 (arguments
5568 `(#:phases
5569 (modify-phases %standard-phases
5570 (add-before 'check 'set-HOME
5571 (lambda _ (setenv "HOME" "/tmp")))
5572 (replace 'check
5573 (lambda _
5574 ;; Disable failing test.
5575 (invoke "python" "-m" "pytest" "-k"
5576 "not test_pyqt_completion"))))))
5577 (propagated-inputs
5578 (list python-autopep8
5579 python-pydocstyle
5580 python-flake8
5581 python-future
5582 python-jedi
5583 python-lsp-jsonrpc
5584 python-pluggy
5585 python-pycodestyle
5586 python-pyflakes
5587 python-rope
5588 python-ujson
5589 python-yapf))
5590 (native-inputs
5591 (list python-coverage
5592 python-flaky
5593 python-matplotlib
5594 python-mock
5595 python-numpy
5596 python-pandas
5597 python-pylint
5598 python-pytest
5599 python-pytest-cov
5600 python-versioneer))
5601 (home-page "https://github.com/python-lsp/python-lsp-server")
5602 (synopsis "Python implementation of the Language Server Protocol")
5603 (description
5604 "The Python Language Server @command{pylsp} is an implementation of the
5605 Python 3 language specification for the Language Server Protocol (LSP).
5606 This tool is used in text editing environments to provide a complete
5607 and integrated feature-set for programming Python effectively.")
5608 (license license:expat)))
5609
5610 (define-public python-language-server
5611 (deprecated-package "python-language-server" python-lsp-server))
5612
5613 (define-public python-pathspec
5614 (package
5615 (name "python-pathspec")
5616 (version "0.9.0")
5617 (source
5618 (origin
5619 (method url-fetch)
5620 (uri (pypi-uri "pathspec" version))
5621 (sha256
5622 (base32
5623 "1cdbdb3s6ldnjpwbi0bgl0xlmw4mbfxk08bbdxc3srx26na4jr75"))))
5624 (build-system python-build-system)
5625 (home-page "https://github.com/cpburnz/python-path-specification")
5626 (synopsis "Utility library for gitignore style pattern matching of file paths")
5627 (description
5628 "This package provides a utility library for gitignore style pattern
5629 matching of file paths.")
5630 (license license:mpl2.0)))
5631
5632 (define-public python-black
5633 (package
5634 (name "python-black")
5635 (version "22.3.0")
5636 (source
5637 (origin
5638 (method url-fetch)
5639 (uri (pypi-uri "black" version))
5640 (sha256
5641 (base32
5642 "0yfahlqc7dsdp1js0cbv706apldnfnlbal9b53cww8n0hs40n0im"))))
5643 (build-system python-build-system)
5644 (arguments
5645 `(#:phases
5646 (modify-phases %standard-phases
5647 (add-after 'patch-source-shebangs 'use-absolute-file-names
5648 (lambda* (#:key native-inputs inputs #:allow-other-keys)
5649 (let* ((inpts (or native-inputs inputs))
5650 (python3 (search-input-file inpts "/bin/python3")))
5651 (substitute* (find-files "tests" "\\.py$")
5652 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
5653 (string-append "#!" python3 (if (string? minor-version)
5654 minor-version
5655 "")))))))
5656 (replace 'check
5657 (lambda* (#:key tests? #:allow-other-keys)
5658 (when tests? (invoke "pytest" "-vv")))))))
5659 (propagated-inputs
5660 (list python-click
5661 python-attrs
5662 python-appdirs
5663 python-pathspec
5664 python-mypy-extensions
5665 python-platformdirs
5666 python-regex
5667 python-tomli
5668 python-typed-ast
5669 python-typing-extensions))
5670 (native-inputs
5671 (list python-pytest python-pytest-aiohttp python-setuptools-scm))
5672 (home-page "https://github.com/psf/black")
5673 (synopsis "The uncompromising code formatter")
5674 (description "Black is the uncompromising Python code formatter.")
5675 (license license:expat)))
5676
5677 (define-public python-black-macchiato
5678 (package
5679 (name "python-black-macchiato")
5680 (version "1.3.0")
5681 (source
5682 (origin
5683 (method url-fetch)
5684 (uri (pypi-uri "black-macchiato" version))
5685 (sha256
5686 (base32
5687 "1drp5p697ni1xn5y2lbjpalgpkzy2i4cyxjj5pk4dxr0vk97dd7i"))))
5688 (build-system python-build-system)
5689 (propagated-inputs
5690 (list python-black))
5691 (home-page "https://github.com/wbolster/black-macchiato")
5692 (synopsis "Partial @code{python-black} formatting")
5693 (description
5694 "This package is built on top the @{python-black} code formatter to
5695 enable formatting of partial files.")
5696 (license license:bsd-3)))
5697
5698 (define-public python-blinker
5699 (package
5700 (name "python-blinker")
5701 (version "1.4")
5702 (source
5703 (origin
5704 (method url-fetch)
5705 (uri (pypi-uri "blinker" version))
5706 (sha256
5707 (base32
5708 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
5709 (build-system python-build-system)
5710 (home-page "https://pythonhosted.org/blinker/")
5711 (synopsis "Fast, simple object-to-object and broadcast signaling")
5712 (description
5713 "Blinker provides a fast dispatching system that allows any number of
5714 interested parties to subscribe to events, or \"signals\".")
5715 (license license:expat)))
5716
5717 (define-public pelican
5718 (package
5719 (name "pelican")
5720 (version "4.7.2")
5721 (source
5722 (origin
5723 (method url-fetch)
5724 (uri (pypi-uri "pelican" version))
5725 (sha256
5726 (base32 "0m1kndc98hhnlq0yl05f4lzccw555pkxnrajj6lks18yh491kw8w"))))
5727 (build-system python-build-system)
5728 (inputs
5729 (list python-blinker
5730 python-dateutil
5731 ;; Ignoring `guix lint` warning as python-docutils is used to support
5732 ;; reStructuredText processing at runtime.
5733 python-docutils
5734 python-feedgenerator
5735 python-jinja2
5736 python-markdown
5737 python-pygments
5738 python-pytz
5739 python-rich
5740 python-unidecode))
5741 (home-page "https://blog.getpelican.com/")
5742 (arguments
5743 `(;; XXX Requires a lot more packages to do unit tests :P
5744 #:tests? #f))
5745 (synopsis "Python-based static site publishing system")
5746 (description
5747 "Pelican is a tool to generate a static blog from reStructuredText,
5748 Markdown input files, and more. Pelican uses Jinja2 for templating
5749 and is very extensible.")
5750 (license license:agpl3+)))
5751
5752 (define-public mallard-ducktype
5753 (package
5754 (name "mallard-ducktype")
5755 (version "1.0.2")
5756 (source
5757 (origin
5758 (method git-fetch)
5759 ;; git-reference because tests are not included in pypi source tarball
5760 ;; https://issues.guix.gnu.org/issue/36755#2
5761 (uri (git-reference
5762 (url "https://github.com/projectmallard/mallard-ducktype")
5763 (commit version)))
5764 (file-name (git-file-name name version))
5765 (sha256
5766 (base32
5767 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
5768 (build-system python-build-system)
5769 (arguments
5770 '(#:phases
5771 (modify-phases %standard-phases
5772 (replace 'check
5773 (lambda _
5774 (with-directory-excursion "tests"
5775 (invoke "sh" "runtests")))))))
5776 (home-page "http://projectmallard.org")
5777 (synopsis "Convert Ducktype to Mallard documentation markup")
5778 (description
5779 "Ducktype is a lightweight syntax that can represent all the semantics
5780 of the Mallard XML documentation system. Ducktype files can be converted to
5781 Mallard using the @command{ducktype} tool. The yelp-tools package
5782 provides additional functionality on the produced Mallard documents.")
5783 (license license:expat)))
5784
5785 (define-public python-cython
5786 (package
5787 (name "python-cython")
5788 (version "0.29.32")
5789 (source
5790 (origin
5791 (method url-fetch)
5792 (uri (pypi-uri "Cython" version))
5793 (sha256
5794 (base32 "1xqsihpqnfal29nb5kmw8z71nd4jbsnbz7p3lkr094xpb13wycw7"))))
5795 (build-system python-build-system)
5796 ;; we need the full python package and not just the python-wrapper
5797 ;; because we need libpython3.3m.so
5798 (inputs
5799 (list python))
5800 (arguments
5801 `(#:phases
5802 (modify-phases %standard-phases
5803 (add-before 'check 'set-HOME
5804 ;; some tests require access to "$HOME/.cython"
5805 (lambda _ (setenv "HOME" "/tmp")))
5806 (replace 'check
5807 (lambda* (#:key tests? #:allow-other-keys)
5808 ;; Disable compiler optimizations to greatly reduce the running
5809 ;; time of the test suite.
5810 (setenv "CFLAGS" "-O0")
5811
5812 (when tests?
5813 (invoke "python" "runtests.py" "-vv"
5814 "-j" (number->string (parallel-job-count))
5815 ;; XXX: On 32-bit architectures, running the parallel tests
5816 ;; fails on many-core systems, see
5817 ;; <https://github.com/cython/cython/issues/2807>.
5818 ,@(if (not (target-64bit?))
5819 '("-x" "run.parallel")
5820 '())
5821 ;; This test fails when running on 24 cores.
5822 "-x" "cpp_stl_conversion")))))))
5823 (home-page "https://cython.org/")
5824 (synopsis "C extensions for Python")
5825 (description "Cython is an optimising static compiler for both the Python
5826 programming language and the extended Cython programming language. It makes
5827 writing C extensions for Python as easy as Python itself.")
5828 (license license:asl2.0)))
5829
5830 (define-public python-cython-3
5831 (package
5832 (inherit python-cython)
5833 ;; Cython 3 is not officially released yet, so distinguish the name
5834 ;; for now.
5835 (name "python-cython-next")
5836 (version "3.0.0a10")
5837 (source (origin
5838 (method url-fetch)
5839 (uri (pypi-uri "Cython" version))
5840 (sha256
5841 (base32
5842 "17fqacrpis05w1rpi7d7sbimrk20xf8h6d3vrz5nf6ix3899abil"))))
5843 (properties '())))
5844
5845 ;; NOTE: when upgrading numpy please make sure that python-numba,
5846 ;; python-pandas and python-scipy still build, as these three packages are
5847 ;; often used together.
5848 (define-public python-numpy
5849 (package
5850 (name "python-numpy")
5851 (version "1.21.6")
5852 (source
5853 (origin
5854 (method url-fetch)
5855 (uri (string-append
5856 "https://github.com/numpy/numpy/releases/download/v"
5857 version "/numpy-" version ".tar.gz"))
5858 (sha256
5859 (base32
5860 "0b0c5y35rd3mvwfk5is1d5ppfw9nl4d2rgx9xkwh1p0w394wdvyl"))))
5861 (build-system python-build-system)
5862 (arguments
5863 (list
5864 #:modules '((guix build utils)
5865 (guix build python-build-system)
5866 (ice-9 format))
5867 #:phases
5868 #~(modify-phases %standard-phases
5869 (add-before 'build 'parallelize-build
5870 (lambda _
5871 (setenv "NPY_NUM_BUILD_JOBS"
5872 (number->string (parallel-job-count)))))
5873 (add-before 'build 'configure-blas
5874 (lambda* (#:key inputs #:allow-other-keys)
5875 (call-with-output-file "site.cfg"
5876 (lambda (port)
5877 (format port
5878 "\
5879 [openblas]
5880 libraries = openblas
5881 library_dirs = ~a/lib
5882 include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
5883 (add-before 'build 'fix-executable-paths
5884 (lambda* (#:key inputs #:allow-other-keys)
5885 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
5886 ;; instead of /bin/sh.
5887 (substitute* "numpy/distutils/exec_command.py"
5888 (("'/bin/sh'")
5889 (format #f "~s" (search-input-file inputs "bin/bash"))))
5890 ;; Don't try to call '/bin/true' specifically.
5891 (substitute* "numpy/core/tests/test_cpu_features.py"
5892 (("/bin/true") (search-input-file inputs "bin/true")))))
5893 (replace 'check
5894 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
5895 (when tests?
5896 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
5897 "-j" (number->string (parallel-job-count))
5898 ;; Contrary to scipy, the runtests.py script of numpy
5899 ;; does *not* automatically provide -n when -j is used
5900 ;; (see: https://github.com/numpy/numpy/issues/21359).
5901 "--" "-n" (number->string (parallel-job-count))
5902 "-k" (string-append
5903 ;; These tests may fail on 32-bit systems (see:
5904 ;; https://github.com/numpy/numpy/issues/18387).
5905 "not test_float_remainder_overflow "
5906 "and not test_pareto"
5907 ;; These tests seem to fail on machines without
5908 ;; an FPU is still under investigation upstream.
5909 ;; https://github.com/numpy/numpy/issues/20635
5910 #$@(if (target-riscv64?)
5911 `(" and not test_float"
5912 " and not test_fpclass")
5913 '())))))))))
5914 (native-inputs
5915 (list python-cython
5916 python-hypothesis-next
5917 python-pytest
5918 python-pytest-xdist
5919 gfortran))
5920 (inputs (list bash openblas))
5921 (home-page "https://numpy.org")
5922 (synopsis "Fundamental package for scientific computing with Python")
5923 (description "NumPy is the fundamental package for scientific computing
5924 with Python. It contains among other things: a powerful N-dimensional array
5925 object, sophisticated (broadcasting) functions, tools for integrating C/C++
5926 and Fortran code, useful linear algebra, Fourier transform, and random number
5927 capabilities.")
5928 (properties
5929 '((upstream-name . "numpy")))
5930 (license license:bsd-3)))
5931
5932 (define-public python-numpy-next
5933 (package
5934 (inherit python-numpy)
5935 (name "python-numpy-next")
5936 (version "1.22.3")
5937 (source
5938 (origin
5939 (inherit (package-source python-numpy))
5940 (method url-fetch)
5941 (uri (string-append
5942 "https://github.com/numpy/numpy/releases/download/v"
5943 version "/numpy-" version ".tar.gz"))
5944 (sha256
5945 (base32
5946 "19dw91pqbqcniw2z57kiyqs1qp56g7kqy1bdyv664g8s62sc01m9"))))))
5947
5948 (define-public python-numpy-documentation
5949 (package
5950 (inherit python-numpy)
5951 (name "python-numpy-documentation")
5952 (arguments
5953 (list
5954 #:tests? #f ;we're only generating the documentation
5955 #:phases
5956 #~(modify-phases %standard-phases
5957 (add-before 'build 'add-gnu-freefont-to-texmf
5958 (lambda _
5959 ;; XXX: The Sphinx-generated tex output specifies the GNU
5960 ;; FreeFont font to be searched via its extension, which uses
5961 ;; kpathsea instead of fontconfig and fail (see:
5962 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
5963 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
5964 ;; GUIX_TEXMF.
5965 (mkdir-p "texmf-dist/fonts/opentype/public")
5966 (symlink (string-append
5967 #$(this-package-native-input "font-gnu-freefont")
5968 "/share/fonts/opentype")
5969 (string-append
5970 (getcwd) "/"
5971 "texmf-dist/fonts/opentype/public/gnu-freefont"))
5972 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
5973 (getcwd) "/texmf-dist"))))
5974 (delete 'build)
5975 (replace 'install
5976 (lambda _
5977 (let* ((data (string-append #$output "/share"))
5978 (doc (string-append data "/doc/numpy"))
5979 (html (string-append doc "/html"))
5980 (info (string-append data "/info"))
5981 (sphinxopts (string-append
5982 "SPHINXOPTS=-j"
5983 (number->string (parallel-job-count)))))
5984 (with-directory-excursion "doc"
5985 ;; Do not treat warnings as errors.
5986 (substitute* "Makefile"
5987 ((" -WT ") " -T "))
5988 (setenv "HOME" "/tmp")
5989 ;; Build the PDF documentation.
5990 (invoke "make" "latex-build" sphinxopts)
5991 (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
5992 ;; Build the HTML documentation
5993 (invoke "make" "html" sphinxopts)
5994 ;; Build the Info documentation. The issues worked around
5995 ;; below can be tracked at
5996 ;; https://github.com/numpy/numpy/issues/12278.
5997 (substitute* "source/conf.py"
5998 ;; The root document should be "index", not "contents".
5999 (("\"contents\"") "'index'")
6000 ;; Disable Sphinx extensions that produce broken Texinfo.
6001 ((".*'numpydoc'.*") "")
6002 ((".*'sphinx.ext.autosummary'.*") ""))
6003 (invoke "make" "info" sphinxopts)
6004 ;; Install the HTML documentation.
6005 (mkdir-p html)
6006 (copy-recursively "build/html" html)
6007 ;; Install the PDF reference and user manuals.
6008 (install-file "build/latex/numpy-ref.pdf" doc)
6009 (install-file "build/latex/numpy-user.pdf" doc)
6010 ;; Install the info manual.
6011 (install-file "build/texinfo/numpy.info" info)
6012 (symlink (string-append html "/_images")
6013 (string-append info "/numpy-figures")))))))))
6014 (native-inputs
6015 (list font-gnu-freefont
6016 perl
6017 python-breathe
6018 python-ipython
6019 python-matplotlib
6020 python-numpy
6021 python-numpydoc
6022 python-pandas
6023 python-pydata-sphinx-theme
6024 python-scipy ;used by matplotlib
6025 python-sphinx-4
6026 python-sphinx-panels
6027 texinfo
6028 texlive-bin
6029 texlive-cbfonts
6030 texlive-cm-super
6031 texlive-greek-fontenc
6032 texlive-latex-expdlist
6033 texlive-polyglossia
6034 texlive-xindy))
6035 (inputs '())
6036 (propagated-inputs '())
6037 (synopsis "Documentation for the @code{python-numpy} package")
6038 (description "This package provides the complete NumPy documentation in
6039 the Texinfo, HTML, and PDF formats.")))
6040
6041 (define-public python-munch
6042 (package
6043 (name "python-munch")
6044 (version "2.5.0")
6045 (source
6046 (origin
6047 (method url-fetch)
6048 (uri (pypi-uri "munch" version))
6049 (sha256
6050 (base32
6051 "1lnvlic9g68hcmgdnv5bzp0nx2bf1kjclj54gx0s7nyl4ipmywrd"))))
6052 (build-system python-build-system)
6053 (native-inputs (list python-pbr python-pytest))
6054 (propagated-inputs (list python-six))
6055 (home-page "https://github.com/Infinidat/munch")
6056 (synopsis "Dot-accessible dictionary")
6057 (description "Munch is a dot-accessible dictionary similar to JavaScript
6058 objects.")
6059 (license license:expat)))
6060
6061 (define-public python-colormath
6062 (package
6063 (name "python-colormath")
6064 (version "3.0.0")
6065 (source
6066 (origin
6067 (method url-fetch)
6068 (uri (pypi-uri "colormath" version))
6069 (sha256
6070 (base32
6071 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
6072 (build-system python-build-system)
6073 (propagated-inputs
6074 (list python-networkx python-numpy))
6075 (home-page "https://github.com/gtaylor/python-colormath")
6076 (synopsis "Color math and conversion library")
6077 (description
6078 "This is a Python library for color math and conversions.")
6079 (license license:bsd-3)))
6080
6081 (define-public python-sparse
6082 (package
6083 (name "python-sparse")
6084 (version "0.13.0")
6085 (source
6086 (origin
6087 (method url-fetch)
6088 (uri (pypi-uri "sparse" version))
6089 (sha256
6090 (base32
6091 "05ar1lhq1yy4nb78s7vpb1wz4ac4kj0r4lrd7yrf23kpmaacjpb8"))))
6092 (build-system python-build-system)
6093 (arguments
6094 `(#:phases
6095 (modify-phases %standard-phases
6096 (replace 'check
6097 (lambda* (#:key tests? #:allow-other-keys)
6098 (when tests?
6099 (invoke "python" "-m" "pytest" "-v")))))))
6100 (propagated-inputs
6101 (list python-numba python-numpy python-scipy))
6102 (native-inputs
6103 (list python-dask python-pytest python-pytest-black
6104 python-pytest-cov))
6105 (home-page "https://github.com/pydata/sparse/")
6106 (synopsis "Library for multi-dimensional sparse arrays")
6107 (description
6108 "This package implements sparse arrays of arbitrary dimension on top of
6109 @code{numpy} and @code{scipy.sparse}. Sparse array is a matrix in which most
6110 of the elements are zero. @code{python-sparse} generalizes the
6111 @code{scipy.sparse.coo_matrix} and @code{scipy.sparse.dok_matrix} layouts, but
6112 extends beyond just rows and columns to an arbitrary number of dimensions.
6113 Additionally, this project maintains compatibility with the
6114 @code{numpy.ndarray} interface rather than the @code{numpy.matrix} interface
6115 used in @code{scipy.sparse}. These differences make this project useful in
6116 certain situations where @code{scipy.sparse} matrices are not well suited, but
6117 it should not be considered a full replacement. It lacks layouts that are not
6118 easily generalized like @dfn{compressed sparse row/column}(CSR/CSC) and
6119 depends on @code{scipy.sparse} for some computations.")
6120 (license license:bsd-3)))
6121
6122 (define-public python-spectra
6123 (package
6124 (name "python-spectra")
6125 (version "0.0.11")
6126 (source
6127 (origin
6128 (method url-fetch)
6129 (uri (pypi-uri "spectra" version))
6130 (sha256
6131 (base32
6132 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
6133 (build-system python-build-system)
6134 (arguments
6135 `(#:phases
6136 (modify-phases %standard-phases
6137 (replace 'check
6138 (lambda _ (invoke "nosetests" "-v"))))))
6139 (propagated-inputs
6140 (list python-colormath))
6141 (native-inputs
6142 (list python-nose))
6143 (home-page "https://github.com/jsvine/spectra")
6144 (synopsis "Color scales and color conversion")
6145 (description
6146 "This package provides a Python library intended to make color math,
6147 color scales, and color space conversion easy. It has support for:
6148
6149 @enumerate
6150 @item Color scales
6151 @item Color ranges
6152 @item Color blending
6153 @item Brightening/darkening colors
6154 @item Saturating/desaturating colors
6155 @item Conversion to/from multiple color spaces.
6156 @end enumerate\n")
6157 (license license:expat)))
6158
6159 (define-public python-pyspnego
6160 (package
6161 (name "python-pyspnego")
6162 (version "0.1.6")
6163 (source
6164 (origin
6165 (method git-fetch) ;no tests in PyPI release
6166 (uri (git-reference
6167 (url "https://github.com/jborean93/pyspnego")
6168 (commit (string-append "v" version))))
6169 (file-name (git-file-name name version))
6170 (sha256
6171 (base32
6172 "0pfh2x0539f0k2qi2pbjm64b2fqp64c63xxpinvg1yfaw915kgpb"))))
6173 (build-system python-build-system)
6174 (arguments
6175 `(#:phases (modify-phases %standard-phases
6176 (replace 'check
6177 (lambda* (#:key tests? #:allow-other-keys)
6178 (when tests?
6179 (invoke "pytest")))))))
6180 (native-inputs
6181 (list python-pytest python-pytest-mock))
6182 (propagated-inputs
6183 (list python-cryptography python-gssapi python-ruamel.yaml))
6184 (home-page "https://github.com/jborean93/pyspnego")
6185 (synopsis "Python SPNEGO library")
6186 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
6187 Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
6188 parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
6189 readable format.")
6190 (license license:expat)))
6191
6192 (define-public python-pygit2
6193 (package
6194 (name "python-pygit2")
6195 (version "1.9.2")
6196 (source
6197 (origin
6198 (method url-fetch)
6199 (uri (pypi-uri "pygit2" version))
6200 (sha256
6201 (base32 "068bwhirigbh2435abyv4shdxgxvyfqf4dxfmhd4hihivwrl9290"))))
6202 (build-system python-build-system)
6203 (arguments
6204 `(#:phases (modify-phases %standard-phases
6205 (replace 'check
6206 (lambda* (#:key tests? #:allow-other-keys)
6207 (when tests?
6208 (invoke "pytest" "-v")))))))
6209 (propagated-inputs
6210 (list python-cached-property python-cffi libgit2))
6211 (native-inputs
6212 (list python-pytest))
6213 (home-page "https://github.com/libgit2/pygit2")
6214 (synopsis "Python bindings for libgit2")
6215 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
6216 ;; GPL2.0 only, with linking exception.
6217 (license license:gpl2)))
6218
6219 (define-public python-patiencediff
6220 (package
6221 (name "python-patiencediff")
6222 (version "0.2.0")
6223 (source
6224 (origin
6225 (method url-fetch)
6226 (uri (pypi-uri "patiencediff" version))
6227 (sha256
6228 (base32
6229 "0yjk50lsd4gnllxls925xbcdxwvmda37w2a1shk0p1nvl3fcha6q"))))
6230 (build-system python-build-system)
6231 (home-page "https://www.breezy-vcs.org/")
6232 (synopsis "Python implementation of the patiencediff algorithm")
6233 (description
6234 "This package contains a Python implementation of the @code{patiencediff}
6235 algorithm. Patiencediff provides a good balance of performance, nice output for
6236 humans, and implementation simplicity.")
6237 (license license:gpl2)))
6238
6239 (define-public python-wmctrl
6240 (package
6241 (name "python-wmctrl")
6242 (version "0.4")
6243 (source
6244 (origin
6245 (method url-fetch)
6246 (uri (pypi-uri "wmctrl" version))
6247 (sha256
6248 (base32
6249 "1q0l1sqnj5wma87k3dsgmsyph464syjc6fl8qcpa41nan1rgzjv6"))))
6250 (build-system python-build-system)
6251 (arguments
6252 `(#:phases (modify-phases %standard-phases
6253 (add-after 'unpack 'patch-paths
6254 (lambda* (#:key inputs #:allow-other-keys)
6255 (let ((wmctrl (assoc-ref inputs "wmctrl")))
6256 (substitute* "wmctrl.py"
6257 (("'wmctrl")
6258 (string-append "'" wmctrl "/bin/wmctrl")))))))))
6259 (inputs (list wmctrl))
6260 (propagated-inputs (list python-attrs))
6261 (home-page "https://github.com/antocuni/wmctrl")
6262 (synopsis "Tool to programmatically control Xorg windows")
6263 (description "This package provides a library for programmatically
6264 controlling Xorg windows using Python. The library relies on the
6265 @command{wmctrl} to do so.")
6266 (license license:expat)))
6267
6268 (define-public python-fancycompleter
6269 (package
6270 (name "python-fancycompleter")
6271 (version "0.9.1")
6272 (source
6273 (origin
6274 (method url-fetch)
6275 (uri (pypi-uri "fancycompleter" version))
6276 (sha256
6277 (base32 "0wkj4h01pxa8prv59zl09a0i3w26k835bfpjgvyvsai4mswgxq09"))))
6278 (build-system python-build-system)
6279 (arguments
6280 `(#:phases (modify-phases %standard-phases
6281 (add-after 'unpack 'fix-setup.py
6282 (lambda _
6283 (substitute* "setup.py"
6284 ((".*setupmeta.*")
6285 "")
6286 (("versioning=.*")
6287 (string-append "version='" ,version "',"))
6288 ((".*pyrepl.*") ;broken on Python 3
6289 "")))))))
6290 (home-page "https://github.com/pdbpp/fancycompleter")
6291 (synopsis "TAB completion library for Python")
6292 (description "@code{fancycompleter} is a module that adds TAB completion
6293 to the interactive prompt. It is an extension of the @code{rlcompleter}
6294 module from the standard Python library.")
6295 (license license:bsd-3)))
6296
6297 (define-public python-ipdb
6298 (package
6299 (name "python-ipdb")
6300 (version "0.13.9")
6301 (source
6302 (origin
6303 (method url-fetch)
6304 (uri (pypi-uri "ipdb" version))
6305 (sha256
6306 (base32 "1ibql99agjf2gj7y0svzd5m0h81hailf4p3sj3yl9i1i8ykdj6wm"))))
6307 (build-system python-build-system)
6308 (arguments
6309 (list #:phases #~(modify-phases %standard-phases
6310 (replace 'check
6311 (lambda* (#:key tests? #:allow-other-keys)
6312 (when tests?
6313 (invoke "python" "-m" "unittest" "discover")))))))
6314 (propagated-inputs (list python-ipython python-toml python-decorator))
6315 (home-page "https://github.com/gotcha/ipdb")
6316 (synopsis "IPython-enhanced Python debugger (pdb)")
6317 (description "@code{ipdb} exports functions to access the IPython
6318 debugger, which features tab completion, syntax highlighting, better
6319 tracebacks and better introspection than Python's standard @command{pdb}
6320 debugger, with which it shares the same interface.")
6321 (license license:bsd-3)))
6322
6323 (define-public python-pdbpp
6324 (package
6325 (name "python-pdbpp")
6326 (version "0.10.3")
6327 (source
6328 (origin
6329 (method url-fetch)
6330 (uri (pypi-uri "pdbpp" version))
6331 (sha256
6332 (base32
6333 "1xb9yvi30rb1cdpvfdk2kg79vh3anvkz91r8bwvfp3iqv97kzr6r"))))
6334 (build-system python-build-system)
6335 (arguments
6336 `(#:phases
6337 (modify-phases %standard-phases
6338 (replace 'check
6339 (lambda* (#:key tests? #:allow-other-keys)
6340 (when tests?
6341 (invoke "pytest"
6342 "-k"
6343 (string-append
6344 ;; These tests seem to require a real TTY.
6345 "not interaction_restores_previous_sigint_handler "
6346 "and not python_m_pdb_uses_pdbpp"))))))))
6347 (propagated-inputs
6348 (list python-fancycompleter python-pygments python-wmctrl))
6349 (native-inputs
6350 (list python-pytest python-setuptools-scm))
6351 (home-page "https://github.com/pdbpp/pdbpp")
6352 (synopsis "Drop-in replacement for pdb")
6353 (description "Pdb++ is a drop-in replacement for @code{pdb}. It
6354 includes the following improvements compared to @code{pdb}:
6355 @itemize
6356 @item auto-completion
6357 @item syntax highlighting of code listings
6358 @item sticky mode
6359 @item new commands to be used from the interactive (Pdb++) prompt
6360 @item smart command parsing
6361 @item additional convenience functions in the @code{pdb} module.
6362 @end itemize")
6363 (license license:bsd-3)))
6364
6365 (define-public python-pdftotext
6366 (package
6367 (name "python-pdftotext")
6368 (version "2.1.6")
6369 (source
6370 (origin
6371 (method url-fetch)
6372 (uri (pypi-uri "pdftotext" version))
6373 (sha256
6374 (base32 "1555wbgr5spj8xflrs4mwsrdmba2f9s72nk50xzqk9ghxaxdvy6a"))))
6375 (build-system python-build-system)
6376 (inputs
6377 (list poppler))
6378 (home-page "https://github.com/jalan/pdftotext")
6379 (synopsis "Simple PDF text extraction")
6380 (description "Pdftotext is a Python library of PDF text extraction.")
6381 (license license:expat)))
6382
6383 (define-public python-pluginbase
6384 (package
6385 (name "python-pluginbase")
6386 (version "1.0.1")
6387 (source
6388 (origin
6389 (method url-fetch)
6390 (uri (pypi-uri "pluginbase" version))
6391 (sha256
6392 (base32
6393 "11z2vvbp13828y0x3w39f29p9r9xcix7h7c4fff2w8yfiylk6v7z"))))
6394 (build-system python-build-system)
6395 (arguments
6396 `(#:phases (modify-phases %standard-phases
6397 (replace 'check
6398 (lambda* (#:key tests? #:allow-other-keys)
6399 (when tests?
6400 (invoke "make" "test")))))))
6401 (native-inputs (list python-pytest))
6402 (home-page "https://github.com/mitsuhiko/pluginbase")
6403 (synopsis "Simple but flexible plugin system for Python")
6404 (description "PluginBase is a library useful in the development of
6405 flexible plugin systems in Python.")
6406 (license license:bsd-3)))
6407
6408 (define-public python-node-semver
6409 (package
6410 (name "python-node-semver")
6411 (version "0.8.1")
6412 (source
6413 (origin
6414 (method url-fetch)
6415 (uri (pypi-uri "node-semver" version))
6416 (sha256
6417 (base32
6418 "000ypfns5x72b41w5f9pk6k3jnr35scliqfbvmilyvv0178005i8"))))
6419 (build-system python-build-system)
6420 (native-inputs
6421 (list python-pytest))
6422 (home-page "https://github.com/podhmo/python-node-semver")
6423 (synopsis "Python port of node-semver")
6424 (description "This module provides a Python version of node-semver, a
6425 semantic version parser for Node.js.")
6426 (license license:expat)))
6427
6428 (define-public python-patch-ng
6429 (package
6430 (name "python-patch-ng")
6431 (version "1.17.4")
6432 (source
6433 (origin
6434 (method git-fetch) ;no tests in PyPI archive
6435 (uri (git-reference
6436 (url "https://github.com/conan-io/python-patch-ng")
6437 (commit version)))
6438 (file-name (git-file-name name version))
6439 (sha256
6440 (base32
6441 "0qxn4ss2s54qy87xrpcybz26kp2fwlaq41x4k9jcmp6d7p0w569m"))))
6442 (build-system python-build-system)
6443 (arguments
6444 `(#:phases (modify-phases %standard-phases
6445 (replace 'check
6446 (lambda* (#:key tests? #:allow-other-keys)
6447 (when tests?
6448 (invoke "tests/run_tests.py" "-v")))))))
6449 (home-page "https://github.com/conan-io/python-patch-ng")
6450 (synopsis "Python library to parse and apply unified diffs")
6451 (description "Patch NG (New Generation) is a command and Python library to
6452 parse and apply unified diffs. It has features such as:
6453 @itemize
6454 @item automatic correction of common patch formatting corruption
6455 @item patch format detection (SVN, Hg, Git)
6456 @item nice diffstat histogram.
6457 @end itemize")
6458 (license license:expat)))
6459
6460 (define-public python-numpydoc
6461 (package
6462 (name "python-numpydoc")
6463 (version "1.2.1")
6464 (source
6465 (origin
6466 (method url-fetch)
6467 (uri (pypi-uri "numpydoc" version))
6468 (sha256
6469 (base32
6470 "1xjsli2fqks4iv3524v1d329siad7bbsi4kr174zvhsl1pnjds3w"))))
6471 (build-system python-build-system)
6472 (arguments
6473 `(#:phases
6474 (modify-phases %standard-phases
6475 (add-after 'unpack 'relax-requirements
6476 (lambda _
6477 (substitute* "setup.py"
6478 (("'Jinja2>=2.10,<3.1'")
6479 "'Jinja2>=2.10'"))))
6480 (replace 'check
6481 (lambda* (#:key tests? #:allow-other-keys)
6482 (when tests?
6483 (invoke "pytest" "-v" "numpydoc/tests"
6484 ;; TODO: unclear why these fail.
6485 "-k" "not test_MyClass and not test_my_function")))))))
6486 (propagated-inputs (list python-jinja2 python-sphinx))
6487 (native-inputs (list python-matplotlib python-pytest python-pytest-cov))
6488 (home-page "https://pypi.org/project/numpydoc/")
6489 (synopsis "Numpy's Sphinx extensions")
6490 (description "Sphinx extension to support docstrings in Numpy format.")
6491 (license license:bsd-2)))
6492
6493 (define-public python-numexpr
6494 (package
6495 (name "python-numexpr")
6496 (version "2.7.3")
6497 (source
6498 (origin
6499 (method url-fetch)
6500 (uri (pypi-uri "numexpr" version))
6501 (sha256
6502 (base32
6503 "09d8yfsx33ddwfkpn8805w2mxnn4cvf47yc66g4azldpz4lnaqa3"))))
6504 (build-system python-build-system)
6505 (arguments `(#:tests? #f)) ; no tests included
6506 (propagated-inputs
6507 (list python-numpy))
6508 (home-page "https://github.com/pydata/numexpr")
6509 (synopsis "Fast numerical expression evaluator for NumPy")
6510 (description
6511 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
6512 expressions that operate on arrays are accelerated and use less memory than
6513 doing the same calculation in Python. In addition, its multi-threaded
6514 capabilities can make use of all your cores, which may accelerate
6515 computations, most specially if they are not memory-bounded (e.g. those using
6516 transcendental functions).")
6517 (license license:expat)))
6518
6519 (define-public python-cycler
6520 (package
6521 (name "python-cycler")
6522 (version "0.10.0")
6523 (source (origin
6524 (method url-fetch)
6525 (uri (pypi-uri "cycler" version))
6526 (sha256
6527 (base32
6528 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
6529 (build-system python-build-system)
6530 (arguments
6531 ;; XXX: The current version requires 'coveralls' which we don't have.
6532 ;; Enable this for the next release which uses 'python-pytest'.
6533 '(#:tests? #f))
6534 (propagated-inputs
6535 (list python-six))
6536 (home-page "https://matplotlib.org/cycler/")
6537 (synopsis "Composable keyword argument iterator")
6538 (description
6539 "When using @code{matplotlib} and plotting more than one line, it is
6540 common to want to be able to want to be able to cycle over one or more artist
6541 styles; but the plotting logic can quickly become involved.
6542 To address this and enable easy cycling over arbitrary @code{kwargs}, the
6543 @code{Cycler} class was developed.")
6544 (license license:bsd-3)))
6545
6546 (define-public python-colorspacious
6547 (package
6548 (name "python-colorspacious")
6549 (version "1.1.2")
6550 (source
6551 (origin
6552 (method git-fetch)
6553 (uri (git-reference
6554 (url "https://github.com/njsmith/colorspacious")
6555 (commit (string-append "v" version))))
6556 (file-name (git-file-name name version))
6557 (sha256
6558 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
6559 (build-system python-build-system)
6560 (propagated-inputs
6561 (list python-numpy))
6562 (native-inputs
6563 (list python-nose))
6564 (arguments
6565 `(#:phases
6566 (modify-phases %standard-phases
6567 (replace 'check
6568 (lambda _
6569 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
6570 (home-page "https://github.com/njsmith/colorspacious")
6571 (synopsis "Python library for colorspace conversions")
6572 (description "@code{colorspacious} is a Python library that lets you
6573 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
6574 (license license:expat)))
6575
6576 (define-public python-proto-matcher
6577 (package
6578 (name "python-proto-matcher")
6579 (version "0.0.3")
6580 (source
6581 (origin
6582 (method url-fetch)
6583 (uri (pypi-uri "proto_matcher" version))
6584 (sha256
6585 (base32 "1644x0hrl398ji3281n44ymfgc3cspzfagjckhqjn4nja5nlikxg"))))
6586 (build-system python-build-system)
6587 (arguments
6588 `(#:tests? #f)) ;no test suite
6589 (propagated-inputs
6590 (list python-protobuf python-pyhamcrest))
6591 (home-page "https://github.com/dayfine/proto-matcher")
6592 (synopsis "PyHamcrest test matchers for protocol buffers")
6593 (description "This package provides the following PyHamcrest test
6594 matchers, that enable matching a protocol buffer message:
6595 @table @code
6596 @item equals_proto
6597 Test the argument equals the given protobuf message.
6598 @item approximately
6599 Test the argument equals the given protobuf message, while comparing any float
6600 field using approximation.
6601 @item ignoring_field_paths
6602 Test the argument equals the given protobuf message, while ignoring those
6603 fields specified in the field paths.
6604 @item ignoring_repeated_field_ordering
6605 Test the argument equals the given protobuf message, ignoring the ordering of
6606 any repeated field.
6607 @item partially
6608 Test the argument partially equals the given protobuf message, i.e. if a field
6609 is in the argument but not in the expected message, it's ignored in the
6610 comparison.
6611 @end table")
6612 (license license:asl2.0)))
6613
6614 (define-public python-matplotlib
6615 (package
6616 (name "python-matplotlib")
6617 (version "3.5.2")
6618 (source
6619 (origin
6620 (method url-fetch)
6621 (uri (pypi-uri "matplotlib" version))
6622 (sha256
6623 (base32 "18h78s5ld1i6mz00w258hy29909nfr3ddq6ry9kq18agw468bks8"))))
6624 (build-system python-build-system)
6625 (arguments
6626 (list
6627 #:phases
6628 #~(modify-phases %standard-phases
6629 (add-before 'build 'pretend-version
6630 ;; The version string is usually derived via setuptools-scm, but
6631 ;; without the git metadata available, the version string is set to
6632 ;; '0.0.0'.
6633 (lambda _
6634 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
6635 (add-after 'unpack 'fix-and-disable-failing-tests
6636 ;; XXX: Disable all image comparison tests because we're using a
6637 ;; newer version of FreeType than matplotlib expects. This leads
6638 ;; to minor differences throughout the tests.
6639 (lambda _
6640 (substitute* (append (find-files "lib/matplotlib/tests/"
6641 "test_.*\\.py$")
6642 (find-files "lib/mpl_toolkits/tests"
6643 "test_.*\\.py$"))
6644 (("^from matplotlib" match)
6645 (string-append "import pytest\n" match))
6646 (("( *)@([^_]+_)*(image_comparison|check_figures_equal)" match
6647 indent)
6648 (string-append indent "@pytest.mark.skip(\
6649 reason=\"unknown minor image differences\")\n" match)))
6650 (substitute* "lib/matplotlib/tests/test_animation.py"
6651 (("/bin/sh") (which "sh")))
6652 (for-each delete-file
6653 ;; test_normal_axes, test_get_tightbbox_polar
6654 '("lib/matplotlib/tests/test_axes.py"
6655 "lib/matplotlib/tests/test_polar.py"
6656 ;; We don't use the webagg backend and this test
6657 ;; forces it.
6658 "lib/matplotlib/tests/test_backend_webagg.py"
6659 ;; test_outward_ticks
6660 "lib/matplotlib/tests/test_tightlayout.py"
6661 ;; test_hidden_axes fails with minor extent
6662 ;; differences, possibly due to the use of a
6663 ;; different version of FreeType.
6664 "lib/matplotlib/tests/test_constrainedlayout.py"
6665 ;; Fontconfig returns no fonts.
6666 "lib/matplotlib/tests/test_font_manager.py"
6667 ;; The images comparison test fails
6668 ;; non-deterministically when run in parallel (see:
6669 ;; https://github.com/matplotlib/matplotlib/issues/22992).
6670 "lib/matplotlib/tests/test_compare_images.py"))))
6671 (add-before 'build 'configure-environment
6672 (lambda* (#:key inputs #:allow-other-keys)
6673 ;; Fix rounding errors when using the x87 FPU.
6674 (when (string-prefix? "i686" #$(%current-system))
6675 (setenv "CFLAGS" "-ffloat-store"))
6676 (call-with-output-file "mplsetup.cfg"
6677 (lambda (port)
6678 (format port "\
6679 [libs]
6680 system_freetype = true
6681 system_qhull = true
6682
6683 [rc_options]
6684 backend=Agg
6685
6686 [directories]
6687 basedirlist = ~a,~a
6688
6689 [packages]
6690 tests = True~%" (assoc-ref inputs "tcl") (assoc-ref inputs "tk"))))))
6691 (replace 'check
6692 (lambda* (#:key tests? #:allow-other-keys)
6693 (when tests?
6694 ;; Step out of the source directory to avoid interference.
6695 (with-directory-excursion "/tmp"
6696 ;; Run the installed tests, which is what we want since not
6697 ;; everything gets built in the source directory.
6698 (invoke "pytest"
6699 "-n" (number->string (parallel-job-count))
6700 "-m" "not network" "--pyargs" "matplotlib"
6701 ;; The 'test_lazy_auto_backend_selection' fails
6702 ;; because it would require an X server; skip it.
6703 "-k" "not test_lazy_auto_backend_selection"))))))))
6704 (propagated-inputs
6705 (list gobject-introspection
6706 python-cairocffi
6707 python-certifi
6708 python-cycler
6709 python-dateutil
6710 python-fonttools
6711 python-kiwisolver
6712 python-numpy
6713 python-packaging
6714 python-pillow
6715 ;; ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
6716 ;; ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
6717 ;; ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
6718 ;; ;; object. For this reason we need to import both libraries.
6719 ;; python-pycairo
6720 python-pygobject
6721 python-pyparsing
6722 python-pytz
6723 python-six
6724 `(,python "tk")
6725 python-wxpython))
6726 (inputs
6727 (list cairo
6728 freetype
6729 glib
6730 libpng
6731 qhull
6732 tcl
6733 tk))
6734 (native-inputs
6735 (list pkg-config
6736 python-pytest
6737 python-pytest-timeout
6738 python-pytest-xdist
6739 python-setuptools-scm
6740 python-setuptools-scm-git-archive))
6741 (home-page "https://matplotlib.org/")
6742 (synopsis "2D plotting library for Python")
6743 (description
6744 "Matplotlib is a Python 2D plotting library which produces publication
6745 quality figures in a variety of hardcopy formats and interactive environments
6746 across platforms. Matplotlib can be used in Python scripts, the python and
6747 ipython shell, web application servers, and six graphical user interface
6748 toolkits.")
6749 (license license:psfl)))
6750
6751 (define-public python-matplotlib-documentation
6752 (package
6753 (inherit python-matplotlib)
6754 (name "python-matplotlib-documentation")
6755 (arguments
6756 (list
6757 #:tests? #f ;we're only generating documentation
6758 #:phases
6759 #~(modify-phases %standard-phases
6760 (replace 'build
6761 (lambda _
6762 (setenv "HOME" "/tmp")
6763 (chdir "doc")
6764 (substitute* "conf.py"
6765 ;; The sphinx_panels extension causes a "TypeError: first
6766 ;; argument must be callable" to be raised when generating the
6767 ;; info target; remove it (see:
6768 ;; https://github.com/executablebooks/sphinx-panels/issues/74).
6769 ((".*'sphinx_panels',.*") ""))
6770 (invoke "make" "html" "info"
6771 ;; Don't abort on warnings; build in parallel.
6772 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
6773 (replace 'install
6774 (lambda _
6775 (let* ((data (string-append #$output "/share"))
6776 (doc (string-append data "/doc/matplotlib"))
6777 (info (string-append data "/info"))
6778 (html (string-append doc "/html")))
6779 (mkdir-p html)
6780 (copy-recursively "build/html" html)
6781 (install-file "build/texinfo/matplotlib.info" info)
6782 ;; The "matplotlib-figures" directory contains are a subset of
6783 ;; the images produced for the html target; simply create a
6784 ;; symlink to it, saving about 11 MiB.
6785 (symlink (string-append html "/_images")
6786 (string-append info "/matplotlib-figures"))))))))
6787 (native-inputs
6788 (list graphviz
6789 inkscape/stable
6790 python-colorspacious
6791 python-mpl-sphinx-theme
6792 python-scipy
6793 python-sphinx
6794 python-sphinx-copybutton
6795 python-sphinx-gallery
6796 python-sphinxcontrib-svg2pdfconverter
6797 python-numpydoc
6798 python-ipython
6799 python-ipywidgets
6800 texlive-amsfonts
6801 texlive-amsmath
6802 texlive-babel
6803 texlive-fontspec
6804 texlive-unicode-math
6805 texlive-etoolbox
6806 texlive-latex-expdlist
6807 texlive-underscore
6808 texlive-latex-type1cm
6809 texlive-times
6810 texinfo))
6811 (synopsis "Documentation for the @code{python-matplotlib} package")))
6812
6813 (define-public python-matplotlib-inline
6814 (package
6815 (name "python-matplotlib-inline")
6816 (version "0.1.3")
6817 (source
6818 (origin
6819 (method url-fetch)
6820 (uri (pypi-uri "matplotlib-inline" version))
6821 (sha256
6822 (base32 "1vilzwj3xp00mxprmmn1hlafm3p23vn56s46kx3ra4qd5signjx0"))))
6823 (build-system python-build-system)
6824 (propagated-inputs
6825 (list python-matplotlib python-traitlets))
6826 (arguments
6827 ;; Tests disabled because of a circular dependency with ipython.
6828 `(#:tests? #f))
6829 (home-page "https://github.com/ipython/matplotlib-inline")
6830 (synopsis "Inline Matplotlib backend for Jupyter")
6831 (description
6832 "This package provides a Matplotlib inline back-end for IPython and
6833 Jupyter.")
6834 (license license:bsd-3)))
6835
6836 (define-public python-matplotlib-venn
6837 (package
6838 (name "python-matplotlib-venn")
6839 (version "0.11.5")
6840 (source
6841 (origin
6842 (method url-fetch)
6843 (uri (pypi-uri "matplotlib-venn" version ".zip"))
6844 (sha256
6845 (base32
6846 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
6847 (build-system python-build-system)
6848 (arguments '(#:tests? #f)) ; tests are not included
6849 (propagated-inputs
6850 (list python-matplotlib python-numpy python-scipy))
6851 (native-inputs
6852 (list unzip))
6853 (home-page "https://github.com/konstantint/matplotlib-venn")
6854 (synopsis "Plot area-proportional Venn diagrams")
6855 (description
6856 "This package provides tools for plotting area-proportional two- and
6857 three-way Venn diagrams in @code{matplotlib}.")
6858 (license license:expat)))
6859
6860 (define-public python-pysnptools
6861 (package
6862 (name "python-pysnptools")
6863 (version "0.4.11")
6864 (source
6865 (origin
6866 (method url-fetch)
6867 (uri (pypi-uri "pysnptools" version))
6868 (sha256
6869 (base32
6870 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
6871 (build-system python-build-system)
6872 (arguments
6873 `(#:tests? #f ; no test data are included
6874 #:phases
6875 (modify-phases %standard-phases
6876 (replace 'check
6877 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6878 (if tests?
6879 (begin
6880 (add-installed-pythonpath inputs outputs)
6881 (invoke "python3" "pysnptools/test.py"))
6882 #t))))))
6883 (propagated-inputs
6884 (list python-dill
6885 python-h5py
6886 python-numpy
6887 python-pandas
6888 python-psutil
6889 python-scipy))
6890 (native-inputs
6891 (list python-cython))
6892 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
6893 (synopsis "Library for reading and manipulating genetic data")
6894 (description
6895 "PySnpTools is a library for reading and manipulating genetic data. It
6896 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
6897 those files. It can also efficiently manipulate ranges of integers using set
6898 operators such as union, intersection, and difference.")
6899 (license license:asl2.0)))
6900
6901 (define-public python-pykdtree
6902 (package
6903 (name "python-pykdtree")
6904 (version "1.3.4")
6905 (source
6906 (origin
6907 (method url-fetch)
6908 (uri (pypi-uri "pykdtree" version))
6909 (sha256
6910 (base32 "0p8n2ljdacfixkiw092974dmhy4s1c0h032ii1z9kwi9h5h5rgmy"))))
6911 (build-system python-build-system)
6912 (native-inputs
6913 (list python-nose))
6914 (propagated-inputs
6915 (list python-numpy))
6916 (home-page "https://github.com/storpipfugl/pykdtree")
6917 (synopsis "Fast kd-tree implementation with OpenMP-enabled queries")
6918 (description
6919 "@code{pykdtree} is a kd-tree implementation for fast nearest neighbour
6920 search in Python.")
6921 (license license:lgpl3+)))
6922
6923 (define-public python-wurlitzer
6924 (package
6925 (name "python-wurlitzer")
6926 (version "2.0.1")
6927 (source
6928 (origin
6929 (method url-fetch)
6930 (uri (pypi-uri "wurlitzer" version))
6931 (sha256
6932 (base32 "0hvmbc41kdwrjns8z1s4a59a4azdvzb8q3vs7nn1li4qm4l0g3yh"))))
6933 (build-system python-build-system)
6934 (arguments
6935 '(#:phases
6936 (modify-phases %standard-phases
6937 (replace 'check
6938 (lambda _
6939 (invoke "pytest" "-vv" "test.py"))))))
6940 (native-inputs
6941 (list python-mock python-pytest))
6942 (home-page "https://github.com/minrk/wurlitzer")
6943 (synopsis "Capture C-level output in context managers")
6944 (description
6945 "This library helps to redirect @code{sys.stdout} to a stream or a file
6946 while executing some piece of code, including C code running within a Python
6947 process.")
6948 (license license:expat)))
6949
6950 (define-public python-socksipy-branch
6951 (package
6952 (name "python-socksipy-branch")
6953 (version "1.01")
6954 (source
6955 (origin
6956 (method url-fetch)
6957 (uri (pypi-uri "SocksiPy-branch" version))
6958 (sha256
6959 (base32
6960 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
6961 (build-system python-build-system)
6962 (arguments
6963 `(#:tests? #f)) ; There are no tests
6964 (home-page "https://code.google.com/archive/p/socksipy-branch/")
6965 (synopsis "Python SOCKS module")
6966 (description
6967 "SocksiPy - A Python SOCKS client module. It provides a
6968 socket-like interface that supports connections to any TCP
6969 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
6970 The original version was developed by Dan Haim, this is a
6971 branch created by Mario Vilas to address some open issues,
6972 as the original project seems to have been abandoned circa 2007.")
6973 (license license:bsd-3)))
6974
6975 (define-public python-socksipychain
6976 (package
6977 (name "python-socksipychain")
6978 (version "2.1.2")
6979 (source
6980 (origin
6981 (method git-fetch)
6982 (uri (git-reference
6983 (url "https://github.com/pagekite/PySocksipyChain")
6984 (commit (string-append "v" version))))
6985 (file-name (git-file-name name version))
6986 (sha256
6987 (base32
6988 "02pp994qmiivkdx4y6az5q80l6rzy8g6d2ipvp7kns7lsxvmc2y7"))))
6989 (build-system python-build-system)
6990 (arguments
6991 `(#:tests? #f)) ; Tests try to access the network.
6992 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
6993 (synopsis "Python SOCKS module with chained proxies support")
6994 (description
6995 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
6996 adds support for arbitrary chaining of proxy servers and various modes of
6997 TLS/SSL encryption. It was developed for use in PageKite, and also includes
6998 a simple netcat replacement with chaining support.")
6999 (license license:bsd-3)))
7000
7001 (define-public python-pycodestyle
7002 (package
7003 (name "python-pycodestyle")
7004 (version "2.8.0")
7005 (source
7006 (origin
7007 (method url-fetch)
7008 (uri (pypi-uri "pycodestyle" version))
7009 (sha256
7010 (base32
7011 "0zxyrg8029lzjhima6l5nk6y0z6lm5wfp9qchz3s33j3xx3mipgd"))))
7012 (build-system python-build-system)
7013 (arguments
7014 `(#:phases
7015 (modify-phases %standard-phases
7016 (replace 'check
7017 (lambda* (#:key tests? #:allow-other-keys)
7018 (when tests?
7019 (invoke "pytest" "-vv")))))))
7020 (native-inputs
7021 (list python-pytest))
7022 (home-page "https://pycodestyle.readthedocs.io/")
7023 (synopsis "Python style guide checker")
7024 (description "@code{pycodestyle} (formerly pep8) is a tool to check
7025 Python code against some of the style conventions in
7026 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
7027 (license license:expat)))
7028
7029 (define-public python-pycodestyle-2.6
7030 (package
7031 (inherit python-pycodestyle)
7032 (version "2.6.0")
7033 (source (origin
7034 (method url-fetch)
7035 (uri (pypi-uri "pycodestyle" version))
7036 (sha256
7037 (base32
7038 "0bhr6ia0hmgx3nhgibc9pmkzhlh1zcqk707i5fbxgs702ll7v2n5"))))))
7039
7040 (define-public python-multidict
7041 (package
7042 (name "python-multidict")
7043 (version "5.2.0")
7044 (source
7045 (origin
7046 (method url-fetch)
7047 (uri (pypi-uri "multidict" version))
7048 (sha256
7049 (base32
7050 "1kjrxav572j45xvr1iy60zb2g8zqvrinzdkl4ax36js4vczckl8d"))))
7051 (build-system python-build-system)
7052 (arguments
7053 '(#:phases (modify-phases %standard-phases
7054 (replace 'check
7055 (lambda* (#:key tests? #:allow-other-keys)
7056 (if tests?
7057 (invoke "pytest" "-vv")
7058 (format #t "test suite not run~%")))))))
7059 (native-inputs
7060 (list python-pytest python-pytest-cov))
7061 (home-page "https://github.com/aio-libs/multidict/")
7062 (synopsis "Multidict implementation")
7063 (description "Multidict is dict-like collection of key-value pairs
7064 where key might be occurred more than once in the container.")
7065 (license license:asl2.0)))
7066
7067 (define-public python-orderedmultidict
7068 (package
7069 (name "python-orderedmultidict")
7070 (version "1.0.1")
7071 (source
7072 (origin
7073 (method url-fetch)
7074 (uri (pypi-uri "orderedmultidict" version))
7075 (sha256
7076 (base32
7077 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
7078 (build-system python-build-system)
7079 (propagated-inputs
7080 (list python-six))
7081 (native-inputs
7082 (list python-flake8 python-pycodestyle))
7083 (home-page "https://github.com/gruns/orderedmultidict")
7084 (synopsis "Python Ordered Multivalue Dictionary - omdict")
7085 (description "This package contains a library for ordered multivalue
7086 dictionaries. A multivalue dictionary is a dictionary that can store
7087 multiple values for the same key. An ordered multivalue dictionary is a
7088 multivalue dictionary that retains the order of insertions and deletions.")
7089 (license license:unlicense)))
7090
7091 (define-public python-autocommand
7092 (package
7093 (name "python-autocommand")
7094 (version "2.2.1")
7095 (source
7096 (origin
7097 (method url-fetch)
7098 (uri (pypi-uri "autocommand" version))
7099 (sha256
7100 (base32 "03qp9xx4dq81ljhf56r21gp5j0lpqs1vaw99g0d84i97s3lj1m7y"))))
7101 (build-system python-build-system)
7102 (arguments
7103 (list
7104 #:phases
7105 #~(modify-phases %standard-phases
7106 (replace 'check
7107 (lambda* (#:key tests? #:allow-other-keys)
7108 (when tests?
7109 ;; This test fails with an invalid syntax error on 'task1 =
7110 ;; asyncio.async(coro_1())' (see:
7111 ;; https://github.com/Lucretiel/autocommand/issues/20).
7112 (delete-file "test/test_autoasync.py")
7113 (invoke "pytest" "-vv")))))))
7114 (native-inputs (list python-pytest python-pytest-asyncio))
7115 (home-page "https://github.com/Lucretiel/autocommand")
7116 (synopsis "Python library to build a command-line from a function")
7117 (description "@code{autocommand} is library to automatically generate and
7118 run simple @code{argparse} parsers from function signatures.")
7119 (license license:lgpl3+)))
7120
7121 (define-public python-autopage
7122 (package
7123 (name "python-autopage")
7124 (version "0.5.1")
7125 (source (origin
7126 (method url-fetch)
7127 (uri (pypi-uri "autopage" version))
7128 (sha256
7129 (base32
7130 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
7131 (build-system pyproject-build-system)
7132 (arguments
7133 (list
7134 #:phases
7135 #~(modify-phases %standard-phases
7136 (add-before 'check 'disable-e2e-tests
7137 (lambda _
7138 ;; These tests rely on KeyboardInterrupts which do not
7139 ;; work in the build container.
7140 (delete-file "autopage/tests/test_end_to_end.py"))))))
7141 (native-inputs
7142 (list python-pypa-build
7143 python-setuptools
7144 python-wheel
7145 ;; For tests.
7146 python-fixtures
7147 python-pytest
7148 python-testtools))
7149 (home-page "https://github.com/zaneb/autopage")
7150 (synopsis "Automatic paging for console output")
7151 (description
7152 "Autopage is a Python library to automatically display terminal output
7153 from a program in a @dfn{pager} such as @command{less}.")
7154 (license license:asl2.0)))
7155
7156 (define-public python-autopep8
7157 (package
7158 (name "python-autopep8")
7159 (version "1.5.3")
7160 (source
7161 (origin
7162 (method url-fetch)
7163 (uri (pypi-uri "autopep8" version))
7164 (sha256
7165 (base32
7166 "1w6vh627vrmgfbvrdcxrc3k4gxcldrb2lpgxv9irkdds851qrzb0"))))
7167 (build-system python-build-system)
7168 (propagated-inputs
7169 (list python-pycodestyle python-toml))
7170 (home-page "https://github.com/hhatto/autopep8")
7171 (synopsis "Format Python code according to the PEP 8 style guide")
7172 (description
7173 "@code{autopep8} automatically formats Python code to conform to
7174 the PEP 8 style guide. It uses the pycodestyle utility to determine
7175 what parts of the code needs to be formatted. @code{autopep8} is
7176 capable of fixing most of the formatting issues that can be reported
7177 by pycodestyle.")
7178 (license (license:non-copyleft
7179 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
7180
7181 (define-public python-distlib
7182 (package
7183 (name "python-distlib")
7184 (version "0.3.1")
7185 (source
7186 (origin
7187 (method url-fetch)
7188 (uri (pypi-uri "distlib" version ".zip"))
7189 (sha256
7190 (base32
7191 "1wdzv7fsjhrkhh1wfkarlhcwa8m00mgcpdsvknmf2qy8f9l13xpd"))))
7192 (build-system python-build-system)
7193 (arguments
7194 `(#:phases
7195 (modify-phases %standard-phases
7196 (add-before 'build 'no-/bin/sh
7197 (lambda _
7198 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
7199 (("/bin/sh") (which "sh")))
7200 #t))
7201 (add-before 'check 'prepare-test-env
7202 (lambda _
7203 (setenv "HOME" "/tmp")
7204 ;; NOTE: Any value works, the variable just has to be present.
7205 (setenv "SKIP_ONLINE" "1")
7206 #t)))))
7207 (native-inputs (list unzip))
7208 (home-page "https://bitbucket.org/pypa/distlib")
7209 (synopsis "Distribution utilities")
7210 (description "Distlib is a library which implements low-level functions that
7211 relate to packaging and distribution of Python software. It is intended to be
7212 used as the basis for third-party packaging tools.")
7213 (license license:psfl)))
7214
7215 (define-public python-distutils-extra
7216 (package
7217 (name "python-distutils-extra")
7218 (version "2.38")
7219 (source
7220 (origin
7221 (method url-fetch)
7222 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
7223 version "/+download/python-distutils-extra-"
7224 version ".tar.gz"))
7225 (sha256
7226 (base32
7227 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
7228 (build-system python-build-system)
7229 (home-page "https://launchpad.net/python-distutils-extra/")
7230 (synopsis "Enhancements to Python's distutils")
7231 (description
7232 "The python-distutils-extra module enables you to easily integrate
7233 gettext support, themed icons, and scrollkeeper-based documentation into
7234 Python's distutils.")
7235 (license license:gpl2)))
7236
7237 (define-public python-olefile
7238 (package
7239 (name "python-olefile")
7240 (version "0.46")
7241 (source
7242 (origin
7243 (method url-fetch)
7244 (uri (string-append "https://github.com/decalage2/olefile/releases/"
7245 "download/v" version "/olefile-" version ".tar.gz"))
7246 (file-name (string-append name "-" version ".tar.gz"))
7247 (sha256
7248 (base32
7249 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
7250 (build-system python-build-system)
7251 (home-page "https://www.decalage.info/python/olefileio")
7252 (synopsis "Read and write Microsoft OLE2 files")
7253 (description
7254 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
7255 Storage or Compound Document, Microsoft Office). It is an improved version of
7256 the OleFileIO module from PIL, the Python Image Library.")
7257 (license license:bsd-3)))
7258
7259 (define-public python-pypdf3
7260 (package
7261 (name "python-pypdf3")
7262 (version "1.0.5")
7263 (source
7264 (origin
7265 (method url-fetch)
7266 (uri (pypi-uri "PyPDF3" version))
7267 (sha256
7268 (base32 "018hlq9q2qa96vw4j7ppq352znykldwy98h2w9qcpkvpi93sjqhc"))))
7269 (build-system python-build-system)
7270 (propagated-inputs
7271 (list python-tqdm))
7272 (home-page "https://github.com/sfneal/PyPDF3")
7273 (synopsis "Utility to read and write PDFs with Python")
7274 (description "PyPDF3 is a pure-python PDF library capable of splitting,
7275 merging together, cropping, and transforming the pages of PDF files. It can
7276 also add custom data, viewing options, and passwords to PDF files. It can
7277 retrieve text and metadata from PDFs as well as merge entire files together.")
7278 (license license:bsd-3)))
7279
7280 (define-public python-pikepdf
7281 (package
7282 (name "python-pikepdf")
7283 (version "2.16.1")
7284 (source
7285 (origin
7286 (method url-fetch)
7287 (uri (pypi-uri "pikepdf" version))
7288 (sha256
7289 (base32 "1phdpi9cm2pbvgcxqvwr8ck327sxhdw4dnxmzhrbf7hzydmgykg2"))))
7290 (build-system python-build-system)
7291 (arguments
7292 `(#:tests? #false)) ;require python-xmp-toolkit
7293 (native-inputs
7294 (list pybind11
7295 python-setuptools
7296 python-setuptools-scm
7297 python-setuptools-scm-git-archive
7298 python-toml
7299 python-wheel))
7300 (inputs
7301 (list qpdf))
7302 (propagated-inputs
7303 (list python-lxml python-pillow))
7304 (home-page "https://github.com/pikepdf/pikepdf")
7305 (synopsis "Read and write PDFs with Python")
7306 (description
7307 "pikepdf is a Python library for reading and writing PDF files.")
7308 (license license:mpl2.0)))
7309
7310 (define-public python-pillow
7311 (package
7312 (name "python-pillow")
7313 (version "9.2.0")
7314 (source (origin
7315 (method url-fetch)
7316 (uri (pypi-uri "Pillow" version))
7317 (sha256
7318 (base32
7319 "011wgm1mssjchpva9wsi2a07im9czyjvik137xlp5f0g7vykdrkm"))
7320 (modules '((guix build utils)))
7321 (snippet '(begin
7322 (delete-file-recursively "src/thirdparty")))))
7323 (build-system python-build-system)
7324 (native-inputs (list python-pytest))
7325 (inputs (list freetype
7326 lcms
7327 libjpeg-turbo
7328 libtiff
7329 libwebp
7330 openjpeg
7331 zlib))
7332 (propagated-inputs (list python-olefile))
7333 (arguments
7334 `(#:phases (modify-phases %standard-phases
7335 (add-after 'unpack 'patch-ldconfig
7336 (lambda _
7337 (substitute* "setup.py"
7338 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
7339 (replace 'check
7340 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
7341 (when tests?
7342 (setenv "HOME"
7343 (getcwd))
7344 (add-installed-pythonpath inputs outputs)
7345 (invoke "python" "selftest.py" "--installed")
7346 (invoke "python" "-m" "pytest" "-vv")))))))
7347 (home-page "https://python-pillow.org")
7348 (synopsis "Fork of the Python Imaging Library")
7349 (description
7350 "The Python Imaging Library adds image processing capabilities to your
7351 Python interpreter. This library provides extensive file format support, an
7352 efficient internal representation, and fairly powerful image processing
7353 capabilities. The core image library is designed for fast access to data
7354 stored in a few basic pixel formats. It should provide a solid foundation for
7355 a general image processing tool.")
7356 (properties `((cpe-name . "pillow")))
7357 (license (license:x11-style
7358 "http://www.pythonware.com/products/pil/license.htm"
7359 "The PIL Software License"))))
7360
7361 (define-public python-pillow-2.9
7362 (package
7363 (inherit python-pillow)
7364 (version "2.9.0")
7365 (source
7366 (origin
7367 (method url-fetch)
7368 (uri (pypi-uri "Pillow" version))
7369 (sha256
7370 (base32
7371 "0ada7lf3lmbdsqm3b7ja920p1pllyfhmqndr85ikpj77fmz9s5qg"))))
7372 (arguments
7373 (substitute-keyword-arguments (package-arguments python-pillow)
7374 ((#:tests? _ #f) #f)))
7375 (properties '((hidden? #t)))))
7376
7377 (define-public python-pillow-simd
7378 (package
7379 (inherit python-pillow)
7380 (name "python-pillow-simd")
7381 (version "9.0.0.post1")
7382 ;; The PyPI tarball does not include test files.
7383 (source
7384 (origin
7385 (method git-fetch)
7386 (uri (git-reference
7387 (url "https://github.com/uploadcare/pillow-simd")
7388 (commit (string-append "v" version))))
7389 (file-name (git-file-name name version))
7390 (sha256
7391 (base32 "1dnvsln451aw3qy2cxg2ndd5mcanf5nrhxw9l7mcam730635hdm9"))))
7392 (inputs
7393 (modify-inputs (package-inputs python-pillow)
7394 (prepend libraqm libimagequant)))
7395 (home-page "https://github.com/uploadcare/pillow-simd")
7396 (synopsis "Fork of the Python Imaging Library (Pillow)")
7397 (description "This package is a fork of Pillow which adds support for SIMD
7398 parallelism.")))
7399
7400 (define-public python-imagecodecs
7401 (package
7402 (name "python-imagecodecs")
7403 (version "2021.3.31")
7404 (source
7405 (origin
7406 (method url-fetch)
7407 (uri (pypi-uri "imagecodecs" version))
7408 (sha256
7409 (base32
7410 "0q7pslb6wd56vbcq2mdxwsiha32mxjr7mgqqfbq5w42q601p9pi0"))
7411 (modules '((guix build utils)))
7412 (snippet
7413 '(begin
7414 ;; Unbundle 3rd party modules.
7415 (delete-file-recursively "3rdparty")
7416 ;; Delete pre-generated Cython files.
7417 (for-each delete-file (find-files "imagecodecs" "_.*\\.c$"))
7418 #t))))
7419 (build-system python-build-system)
7420 (arguments
7421 `(#:tests? #f ; Tests are disabled, because dependencies are missing.
7422 #:phases
7423 (modify-phases %standard-phases
7424 (add-after 'unpack 'create-configuration
7425 (lambda* (#:key inputs #:allow-other-keys)
7426 ;; By default everything is enabled. We can selectively disable
7427 ;; extensions (and thus dependencies) by deleting them from the
7428 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
7429 (call-with-output-file "imagecodecs_distributor_setup.py"
7430 (lambda (port)
7431 (format port "\
7432 def customize_build(EXTENSIONS, OPTIONS):
7433 del EXTENSIONS['aec']
7434 del EXTENSIONS['avif']
7435 del EXTENSIONS['bitshuffle']
7436 del EXTENSIONS['deflate']
7437 del EXTENSIONS['jpeg2k']
7438 del EXTENSIONS['jpeg12']
7439 del EXTENSIONS['jpegls']
7440 del EXTENSIONS['jpegxl']
7441 del EXTENSIONS['jpegxr']
7442 del EXTENSIONS['lerc']
7443 del EXTENSIONS['ljpeg']
7444 del EXTENSIONS['lzf']
7445 del EXTENSIONS['zfp']
7446 del EXTENSIONS['zopfli']
7447 OPTIONS['cythonize']
7448 ")))))
7449 ;; XXX: The installed scripts import packages that depend on
7450 ;; this package; disable import check to avoid the cycle.
7451 (delete 'sanity-check))))
7452 (inputs
7453 (list c-blosc
7454 giflib
7455 brotli
7456 libjpeg-turbo
7457 libpng
7458 libtiff
7459 libwebp
7460 lz4
7461 snappy
7462 xz
7463 zlib
7464 `(,zstd "lib")))
7465 (propagated-inputs
7466 ;; For the Python library.
7467 (list python-numpy))
7468 (native-inputs
7469 ;; For building.
7470 (list python-cython
7471 ;; For testing. Incomplete.
7472 ;("python-numcodecs" ,python-numcodecs)
7473 ;("python-zarr" ,python-zarr)
7474 ;("python-pytest" ,python-pytest)
7475 ))
7476 (home-page "https://www.lfd.uci.edu/~gohlke/")
7477 (synopsis
7478 "Image transformation, compression, and decompression codecs")
7479 (description
7480 "Imagecodecs is a Python library that provides block-oriented, in-memory
7481 buffer transformation, compression, and decompression functions for use in the
7482 tifffile, czifile, and other scientific image input/output modules.")
7483 (license license:bsd-3)))
7484
7485 (define-public python-property-manager
7486 (package
7487 (name "python-property-manager")
7488 (version "3.0")
7489 (source
7490 (origin
7491 (method url-fetch)
7492 (uri (pypi-uri "property-manager" version))
7493 (sha256
7494 (base32 "0m3w4spr8f39xnm65naw29ncal4r453kn7ndqb63rwbsmslnvrwk"))))
7495 (build-system python-build-system)
7496 (native-inputs
7497 (list python-pytest-cov))
7498 (propagated-inputs
7499 (list python-verboselogs
7500 python-humanfriendly
7501 python-coloredlogs))
7502 (home-page "https://github.com/xolox/python-property-manager")
7503 (synopsis "Useful property variants for Python programming")
7504 (description "The @code{property-manager} package defines several custom
7505 property variants for Python programming including required properties,
7506 writable properties, cached properties, etc.")
7507 (license license:expat))) ; MIT license
7508
7509 (define-public python-executing
7510 (package
7511 (name "python-executing")
7512 (version "0.8.2")
7513 (source
7514 (origin
7515 (method url-fetch)
7516 (uri (pypi-uri "executing" version))
7517 (sha256
7518 (base32 "08q0xh9fd8k41sqpp23q6fb9bf7yj4y2q6sv30pj36vvk8pg8fy2"))))
7519 (build-system python-build-system)
7520 (arguments
7521 `(#:tests? #f)) ; TODO: tests require python-asttokens
7522 (native-inputs
7523 (list python-setuptools-scm python-toml))
7524 (home-page "https://github.com/alexmojaki/executing")
7525 (synopsis "Get information about what a Python frame is currently doing")
7526 (description "This package lets you get information about what a frame is
7527 currently doing, particularly the AST node being executed.")
7528 (license license:expat)))
7529
7530 (define-public python-executor
7531 (package
7532 (name "python-executor")
7533 (version "23.2")
7534 (source
7535 (origin
7536 (method url-fetch)
7537 (uri (pypi-uri "executor" version))
7538 (sha256
7539 (base32 "0g83yr54j0vcwhy6h7n0jsd7q0q630kwa6v9kqzlzrm9xj6c3ip1"))))
7540 (build-system python-build-system)
7541 (arguments
7542 `(#:tests? #f)) ; TODO: tests require root/sudo
7543 (propagated-inputs
7544 (list python-six
7545 python-property-manager
7546 python-fasteners
7547 python-virtualenv))
7548 (home-page "https://github.com/xolox/python-executor")
7549 (synopsis "Programmer friendly subprocess wrapper")
7550 (description "The @code{executor} package is a simple wrapper for Python’s
7551 subprocess module that makes it very easy to handle subprocesses on UNIX
7552 systems with proper escaping of arguments and error checking currently doing,
7553 particularly the AST node being executed.")
7554 (license license:expat))) ; MIT license
7555
7556 (define-public python-roifile
7557 (package
7558 (name "python-roifile")
7559 (version "2020.11.28")
7560 (source
7561 (origin
7562 (method url-fetch)
7563 (uri (pypi-uri "roifile" version))
7564 (sha256
7565 (base32
7566 "04argnc7qccybkrj9ww18bf81ghsghhh93hnqy3p111rcdlyn66p"))))
7567 (build-system python-build-system)
7568 (arguments `(#:tests? #f)) ; there are none
7569 (propagated-inputs
7570 (list python-numpy))
7571 (home-page "https://www.lfd.uci.edu/~gohlke/")
7572 (synopsis "Read and write ImageJ ROI format")
7573 (description "Roifile is a Python library to read, write, create, and plot
7574 ImageJ ROIs, an undocumented and ImageJ application specific format to store
7575 regions of interest, geometric shapes, paths, text, etc for image overlays.")
7576 (license license:bsd-3)))
7577
7578 (define-public python-tifffile
7579 (package
7580 (name "python-tifffile")
7581 (version "2021.4.8")
7582 (source
7583 (origin
7584 (method url-fetch)
7585 (uri (pypi-uri "tifffile" version))
7586 (sha256
7587 (base32
7588 "16r0hw7shka1bqf28bv198lj2jhf2r9gy3s5zv4nf5cfsfm8pajm"))))
7589 (build-system python-build-system)
7590 ;; Tests require lfdfiles, which depends on tifffile
7591 (arguments `(#:tests? #f))
7592 (propagated-inputs
7593 (list python-numpy python-imagecodecs))
7594 (home-page "https://www.lfd.uci.edu/~gohlke/")
7595 (synopsis "Read and write TIFF(r) files")
7596 (description "This package lets you read image and metadata from many
7597 bio-scientific formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,
7598 NIH, ImageJ, MicroManager, MD GEL, and FluoView files. It also lets you write
7599 numpy arrays to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
7600 (license license:bsd-3)))
7601
7602 (define-public python-lfdfiles
7603 (package
7604 (name "python-lfdfiles")
7605 (version "2021.2.22")
7606 (source
7607 (origin
7608 (method url-fetch)
7609 (uri (pypi-uri "lfdfiles" version))
7610 (sha256
7611 (base32
7612 "12fxm4v805dgjrih7x6jnl1wd7y7jw1rkhjs3d4am8s6qk1cbar2"))
7613 (modules '((guix build utils)))
7614 (snippet
7615 '(begin
7616 ;; Delete pre-generated Cython files.
7617 (for-each delete-file (find-files "lfdfiles" "_.*\\.c$"))
7618 #t))))
7619 (build-system python-build-system)
7620 (arguments
7621 `(#:tests? #f)) ; No tests exist, despite a test dependency on pytest.
7622 (propagated-inputs
7623 (list python-click python-numpy python-tifffile))
7624 (native-inputs (list python-cython))
7625 (home-page "https://www.lfd.uci.edu/~gohlke/")
7626 (synopsis "Work with LFD data files")
7627 (description
7628 "Lfdfiles is a Python library and console script for reading, writing,
7629 converting, and viewing many of the proprietary file formats used to store
7630 experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
7631 (license license:bsd-3)))
7632
7633 (define-public python-imageio
7634 (package
7635 (name "python-imageio")
7636 (version "2.8.0")
7637 (source
7638 (origin
7639 (method url-fetch)
7640 (uri (pypi-uri "imageio" version))
7641 (sha256
7642 (base32
7643 "1ksjl523fm0fikrd85llxfba35rc1qsgwadgr6mbn9kis79xcpzv"))))
7644 (build-system python-build-system)
7645 (arguments
7646 `(#:tests? #f ; many tests require online data
7647 #:phases
7648 (modify-phases %standard-phases
7649 (replace 'check
7650 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
7651 (if tests?
7652 (begin
7653 ;; Make installed package available for running the tests.
7654 (add-installed-pythonpath inputs outputs)
7655 (invoke "pytest" "-vv"))
7656 #t))))))
7657 (propagated-inputs
7658 (list python-numpy python-pillow python-psutil))
7659 (native-inputs
7660 (list python-pytest))
7661 (home-page "https://imageio.github.io/")
7662 (synopsis "Library for reading and writing a wide range of image data")
7663 (description
7664 "Imageio is a Python library that provides an easy interface to read and
7665 write a wide range of image data, including animated images, video, volumetric
7666 data, and scientific formats.")
7667 (license license:bsd-2)))
7668
7669 (define-public python-pyvips
7670 (package
7671 (name "python-pyvips")
7672 (version "2.2.1")
7673 (source
7674 (origin
7675 (method url-fetch)
7676 (uri (pypi-uri "pyvips" version))
7677 (sha256
7678 (base32 "1dfbwwvnnsk4g2kj1pw654z9jq3mb72l1m8ma29858jpn12vn7dm"))))
7679 (build-system python-build-system)
7680 (arguments
7681 (list #:phases
7682 #~(modify-phases %standard-phases
7683 ;; Maybe switch to API mode (i.e., build the C extension)?
7684 ;; It is advertised as faster to start up and run.
7685 ;; However, even with ‘pkg-config’ and ‘python-pkgconfig’ in
7686 ;; ‘native-inputs’, the API mode build fails with:
7687 ;;
7688 ;; Falling back to ABI mode. Details: unable to find pkg-config package "vips"
7689 ;;
7690 ;; The build doesn't actually fail without the below
7691 ;; substitution, it's just slower because ‘setup.py’ tries
7692 ;; (unsuccessfully) to download the Python ‘pkgconfig’ module.
7693 (add-after 'unpack 'fix-build
7694 (lambda _
7695 (substitute* "setup.py"
7696 (("^( +setup_)API\\(\\)\n" _ prefix)
7697 (string-append prefix "ABI()\n")))))
7698 (add-after 'unpack 'fix-paths
7699 (lambda _
7700 (substitute* "pyvips/__init__.py"
7701 (("^( +_vips_libname) = '(libvips.so.42)'"
7702 _ var libname)
7703 (format #f "~a = '~a/lib/~a'"
7704 var #$(this-package-input "vips") libname))
7705 (("^( +_gobject_libname) = '(libgobject-2.0.so.0)'"
7706 _ var libname)
7707 (format #f "~a = '~a/lib/~a'"
7708 var #$(this-package-input "glib") libname)))))
7709 (replace 'check
7710 (lambda* (#:key tests? #:allow-other-keys)
7711 (when tests?
7712 (invoke "python" "setup.py" "test")))))))
7713 (native-inputs
7714 (list python-pyperf
7715 python-pytest
7716 python-pytest-flake8
7717 python-pytest-runner))
7718 (inputs
7719 (list glib vips))
7720 (propagated-inputs
7721 (list python-cffi))
7722 (home-page "https://github.com/libvips/pyvips")
7723 (synopsis "Python bindings for VIPS")
7724 (description "The @code{pyvips} package provides Python bindings for VIPS,
7725 a multithreaded image-processing system with low memory needs.")
7726 (license license:expat)))
7727
7728 (define-public python-pycparser
7729 (package
7730 (name "python-pycparser")
7731 (version "2.21")
7732 (source
7733 (origin
7734 (method url-fetch)
7735 (uri (pypi-uri "pycparser" version))
7736 (sha256
7737 (base32
7738 "01kjlyn5w2nn2saj8w1rhq7v26328pd91xwgqn32z1zp2bngsi76"))))
7739 (outputs '("out" "doc"))
7740 (build-system python-build-system)
7741 (arguments
7742 `(#:phases
7743 (modify-phases %standard-phases
7744 (replace 'check
7745 (lambda _
7746 (invoke "python" "-m" "unittest" "discover")))
7747 (add-after 'install 'install-doc
7748 (lambda* (#:key outputs #:allow-other-keys)
7749 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
7750 (doc (string-append data "/doc/" ,name "-" ,version))
7751 (examples (string-append doc "/examples")))
7752 (mkdir-p examples)
7753 (for-each (lambda (file)
7754 (copy-file (string-append "." file)
7755 (string-append doc file)))
7756 '("/README.rst" "/CHANGES" "/LICENSE"))
7757 (copy-recursively "examples" examples)))))))
7758 (home-page "https://github.com/eliben/pycparser")
7759 (synopsis "C parser in Python")
7760 (description
7761 "Pycparser is a complete parser of the C language, written in pure Python
7762 using the PLY parsing library. It parses C code into an AST and can serve as
7763 a front-end for C compilers or analysis tools.")
7764 (license license:bsd-3)))
7765
7766 (define-public python2-pycparser
7767 (package-with-python2 python-pycparser))
7768
7769 (define-public python-xlsxwriter
7770 (package
7771 (name "python-xlsxwriter")
7772 (version "3.0.3")
7773 (source
7774 (origin
7775 ;; There are no tests in the PyPI tarball.
7776 (method git-fetch)
7777 (uri (git-reference
7778 (url "https://github.com/jmcnamara/XlsxWriter")
7779 (commit (string-append "RELEASE_" version))))
7780 (file-name (git-file-name name version))
7781 (sha256
7782 (base32 "1lr7mmik6r4zns069i4zfx1cnwhz6snmlh2zsiry0cwx8cv33wpm"))))
7783 (build-system python-build-system)
7784 (home-page "https://github.com/jmcnamara/XlsxWriter")
7785 (synopsis "Python module for creating Excel XLSX files")
7786 (description
7787 "XlsxWriter is a Python module that can be used to write text, numbers,
7788 formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
7789 (license license:bsd-2)))
7790
7791 (define-public python-pywavelets
7792 (package
7793 (name "python-pywavelets")
7794 (version "1.2.0")
7795 (home-page "https://github.com/PyWavelets/pywt")
7796 (source (origin
7797 (method url-fetch)
7798 (uri (pypi-uri "PyWavelets" version))
7799 (sha256
7800 (base32
7801 "13csbr6ls9q9ww53z2xwwsj0hpsz88rj2iwp623h0kmv8yq6kgbc"))
7802 (snippet
7803 #~(begin
7804 (use-modules ((guix build utils)))
7805 (for-each delete-file
7806 (list
7807 "pywt/_extensions/_cwt.c"
7808 "pywt/_extensions/_dwt.c"
7809 "pywt/_extensions/_pywt.c"
7810 "pywt/_extensions/_pywt.h"
7811 "pywt/_extensions/_swt.c"))))))
7812 (build-system python-build-system)
7813 (arguments
7814 '(#:modules ((ice-9 ftw)
7815 (srfi srfi-1)
7816 (srfi srfi-26)
7817 (guix build utils)
7818 (guix build python-build-system))
7819 #:phases
7820 (modify-phases %standard-phases
7821 (replace 'check
7822 (lambda _
7823 (let ((cwd (getcwd))
7824 (libdir (find (cut string-prefix? "lib." <>)
7825 (scandir "build"))))
7826 (with-directory-excursion (string-append cwd "/build/" libdir)
7827 (invoke "pytest" "-vv"))))))))
7828 (native-inputs
7829 (list python-cython
7830 python-matplotlib ;for tests
7831 python-pytest))
7832 (propagated-inputs
7833 (list python-numpy))
7834 (synopsis "Wavelet transforms in Python")
7835 (description
7836 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
7837 mathematical basis functions that are localized in both time and frequency.
7838 Wavelet transforms are time-frequency transforms employing wavelets. They are
7839 similar to Fourier transforms, the difference being that Fourier transforms are
7840 localized only in frequency instead of in time and frequency.")
7841 (license license:expat)))
7842
7843 (define-public python-pywal
7844 (package
7845 (name "python-pywal")
7846 (version "3.3.0")
7847 (source
7848 (origin
7849 (method git-fetch)
7850 (uri (git-reference
7851 (url "https://github.com/dylanaraps/pywal")
7852 (commit version)))
7853 (file-name (git-file-name name version))
7854 (sha256
7855 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
7856 (build-system python-build-system)
7857 (arguments
7858 `(#:phases
7859 (modify-phases %standard-phases
7860 (add-before 'check 'fix-home-directory
7861 (lambda _
7862 ;; Tests fail with "Permission denied: '/homeless-shelter'".
7863 (setenv "HOME" "/tmp")
7864 #t)))))
7865 (inputs
7866 (list imagemagick))
7867 (home-page "https://github.com/dylanaraps/pywal")
7868 (synopsis "Color palette generator and applicator")
7869 (description
7870 "Pywal is a tool that generates a color palette from the dominant colors
7871 in an image. It then applies the colors system-wide and on-the-fly in all of
7872 your favourite programs.")
7873 (license license:expat)))
7874
7875 (define-public python-click-didyoumean
7876 (package
7877 (name "python-click-didyoumean")
7878 (version "0.3.0")
7879 (source
7880 (origin
7881 (method url-fetch)
7882 (uri (pypi-uri "click-didyoumean" version))
7883 (sha256
7884 (base32 "0dc0xrmqbw0idpx843ahzzvivmvx3fcfsm3k54lnssyra7cg117i"))))
7885 (build-system python-build-system)
7886 (arguments
7887 `(#:tests? #f)) ; no tests in PyPI and no setup.py in github
7888 (propagated-inputs
7889 (list python-click))
7890 (home-page "https://github.com/timofurrer/click-didyoumean")
7891 (synopsis "Git-like did-you-mean feature in Click")
7892 (description
7893 "This plugin enables git-like did-you-mean feature in Click.")
7894 (license license:expat)))
7895
7896 (define-public python-pywinrm
7897 (package
7898 (name "python-pywinrm")
7899 (version "0.4.1")
7900 (source
7901 (origin
7902 (method url-fetch)
7903 (uri (pypi-uri "pywinrm" version))
7904 (sha256
7905 (base32
7906 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
7907 (build-system python-build-system)
7908 (propagated-inputs
7909 (list python-six python-requests_ntlm python-xmltodict
7910 python-kerberos))
7911 (native-inputs
7912 (list python-mock python-pytest))
7913 (home-page "https://github.com/diyan/pywinrm/")
7914 (synopsis
7915 "Python library for Windows Remote Management (WinRM)")
7916 (description
7917 "pywinrm is a Python client for the Windows Remote Management (WinRM)
7918 service. It allows you to invoke commands on target Windows machines from
7919 any machine that can run Python.")
7920 (license license:expat)))
7921
7922 (define-public python-xcffib
7923 (package
7924 (name "python-xcffib")
7925 (version "0.11.1")
7926 (source
7927 (origin
7928 (method url-fetch)
7929 (uri (pypi-uri "xcffib" version))
7930 (sha256
7931 (base32
7932 "0nkglsm9nbhv238iagmmsjcz6lf1yfdvp5kmspphdj385vz9r50j"))))
7933 (build-system python-build-system)
7934 (inputs
7935 (list libxcb))
7936 (propagated-inputs
7937 (list python-cffi ; used at run time
7938 python-six))
7939 (arguments
7940 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
7941 #:tests? #f
7942 #:phases
7943 (modify-phases %standard-phases
7944 (add-after 'unpack 'fix-libxcb-path
7945 (lambda* (#:key inputs #:allow-other-keys)
7946 (let ((libxcb (assoc-ref inputs "libxcb")))
7947 (substitute* '("xcffib/__init__.py")
7948 (("soname = ctypes.util.find_library.*xcb.*")
7949 (string-append "soname = \"" libxcb "/lib/libxcb.so\"\n")))
7950 #t)))
7951 (add-after 'install 'install-doc
7952 (lambda* (#:key outputs #:allow-other-keys)
7953 (let ((doc (string-append (assoc-ref outputs "out") "/share"
7954 "/doc/" ,name "-" ,version)))
7955 (mkdir-p doc)
7956 (copy-file "README.md"
7957 (string-append doc "/README.md"))
7958 #t))))))
7959 (home-page "https://github.com/tych0/xcffib")
7960 (synopsis "XCB Python bindings")
7961 (description
7962 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
7963 support for Python 3 and PyPy. It is based on cffi.")
7964 (license license:expat)))
7965
7966 (define-public python-cairocffi
7967 (package
7968 (name "python-cairocffi")
7969 (version "1.3.0")
7970 (source
7971 (origin
7972 ;; The PyPI archive does not include the documentation, so use Git.
7973 (method git-fetch)
7974 (uri (git-reference
7975 (url "https://github.com/Kozea/cairocffi")
7976 (commit (string-append "v" version))))
7977 (file-name (git-file-name name version))
7978 (sha256
7979 (base32
7980 "0lylyxyyd8csjhn5kxwzrcr6ick6pvvm1wclpmb5ni28jznxn7lb"))))
7981 (build-system python-build-system)
7982 (outputs '("out" "doc"))
7983 (inputs
7984 (list glib gtk+ gdk-pixbuf cairo))
7985 (native-inputs
7986 (list python-numpy
7987 python-pytest
7988 python-pytest-cov
7989 python-pytest-runner
7990 python-sphinx
7991 python-sphinx-rtd-theme))
7992 (propagated-inputs
7993 (list python-xcffib)) ; used at run time
7994 (arguments
7995 `(#:phases
7996 (modify-phases %standard-phases
7997 (add-after 'unpack 'patch-paths
7998 (lambda* (#:key inputs #:allow-other-keys)
7999 (substitute* "cairocffi/__init__.py"
8000 ;; Hack the dynamic library loading mechanism.
8001 (("find_library\\(library_name\\)")
8002 "\"found\"")
8003 (("filenames = \\(library_filename,\\) \\+ filenames")
8004 "pass")
8005 (("libcairo.so.2")
8006 (search-input-file inputs "/lib/libcairo.so.2")))
8007 (substitute* "cairocffi/pixbuf.py"
8008 (("libgdk_pixbuf-2.0.so.0")
8009 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
8010 (("libgobject-2.0.so.0")
8011 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
8012 (("libglib-2.0.so.0")
8013 (search-input-file inputs "/lib/libglib-2.0.so.0"))
8014 (("libgdk-3.so.0")
8015 (search-input-file inputs "/lib/libgdk-3.so.0")))))
8016 (add-after 'unpack 'disable-linters
8017 ;; Their check fails; none of our business.
8018 (lambda _
8019 (substitute* "setup.cfg"
8020 ((".*pytest-flake8.*") "")
8021 ((".*pytest-isort.*") "")
8022 (("--flake8") "")
8023 (("--isort") ""))
8024 #t))
8025 (add-after 'install 'install-doc
8026 (lambda* (#:key inputs outputs #:allow-other-keys)
8027 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
8028 (doc (string-append data "/doc/" ,name "-" ,version))
8029 (html (string-append doc "/html")))
8030 (setenv "LD_LIBRARY_PATH"
8031 (string-append (assoc-ref inputs "cairo") "/lib" ":"
8032 (assoc-ref inputs "gdk-pixbuf") "/lib"))
8033 (setenv "LANG" "en_US.UTF-8")
8034 (mkdir-p html)
8035 (for-each (lambda (file)
8036 (copy-file (string-append "." file)
8037 (string-append doc file)))
8038 '("/README.rst" "/NEWS.rst"))
8039 (system* "python" "setup.py" "build_sphinx")
8040 (copy-recursively "docs/_build/html" html)
8041 #t))))))
8042 (home-page "https://github.com/Kozea/cairocffi")
8043 (synopsis "Python bindings and object-oriented API for Cairo")
8044 (description
8045 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
8046 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
8047 graphics library with support for multiple backends including image buffers,
8048 PNG, PostScript, PDF, and SVG file output.")
8049 (license license:bsd-3)))
8050
8051 (define-public python-decorator
8052 (package
8053 (name "python-decorator")
8054 (version "5.0.9")
8055 (source
8056 (origin
8057 (method url-fetch)
8058 (uri (pypi-uri "decorator" version))
8059 (sha256
8060 (base32 "1mcy64hllgm938v8k1x2a4g0q9swsnrfnsvhz59kr28a6ajgpv3j"))))
8061 (build-system python-build-system)
8062 (home-page "https://pypi.org/project/decorator/")
8063 (synopsis "Python module to simplify usage of decorators")
8064 (description
8065 "The aim of the decorator module is to simplify the usage of decorators
8066 for the average programmer, and to popularize decorators usage giving examples
8067 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
8068 etc. The core of this module is a decorator factory.")
8069 (license license:expat)))
8070
8071
8072 (define-public python-drmaa
8073 (package
8074 (name "python-drmaa")
8075 (version "0.7.7")
8076 (source
8077 (origin
8078 (method url-fetch)
8079 (uri (pypi-uri "drmaa" version))
8080 (sha256
8081 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
8082 (build-system python-build-system)
8083 ;; The test suite requires libdrmaa which is provided by the cluster
8084 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
8085 ;; should be set to the path of the libdrmaa library.
8086 (arguments
8087 '(#:tests? #f
8088 #:phases (modify-phases %standard-phases
8089 ;; Loading the library fails because DRMAA_LIBRARY_PATH
8090 ;; is not configured.
8091 (delete 'sanity-check))))
8092 (home-page "https://pypi.org/project/drmaa/")
8093 (synopsis "Python bindings for the DRMAA library")
8094 (description
8095 "A Python package for Distributed Resource Management (DRM) job
8096 submission and control. This package is an implementation of the DRMAA 1.0
8097 Python language binding specification.")
8098 (license license:bsd-3)))
8099
8100 (define-public python-grako
8101 (package
8102 (name "python-grako")
8103 (version "3.99.9")
8104 (source
8105 (origin
8106 (method url-fetch)
8107 (uri
8108 (pypi-uri "grako" version ".zip"))
8109 (sha256
8110 (base32
8111 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
8112 (build-system python-build-system)
8113 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
8114 (native-inputs
8115 (list unzip python-pytest python-pytest-runner))
8116 (home-page "https://bitbucket.org/neogeny/grako")
8117 (synopsis "EBNF parser generator")
8118 (description
8119 "Grako takes a grammar in a variation of EBNF as input, and outputs a
8120 memoizing PEG/Packrat parser in Python.")
8121 (license license:bsd-3)))
8122
8123 (define-public python-grandalf
8124 (package
8125 (name "python-grandalf")
8126 (version "0.7")
8127 (source
8128 (origin
8129 ;; There's no source tarball on PyPI.
8130 (method git-fetch)
8131 (uri (git-reference
8132 (url "https://github.com/bdcht/grandalf")
8133 (commit (string-append "v" version))))
8134 (file-name (git-file-name name version))
8135 (sha256
8136 (base32
8137 "03p8w8ljpb87qbyldm3s6b7qi30hfcn43h33iwlgqcf31fjsyr4g"))))
8138 (build-system python-build-system)
8139 (arguments
8140 '(#:phases
8141 (modify-phases %standard-phases
8142 (replace 'check
8143 (lambda _
8144 (invoke "python" "setup.py" "pytest"))))))
8145 (native-inputs
8146 (list python-pytest python-pytest-runner))
8147 (propagated-inputs
8148 (list python-numpy python-ply))
8149 (home-page "https://github.com/bdcht/grandalf")
8150 (synopsis "Graph and drawing algorithms framework")
8151 (description
8152 "Grandalf is a Python package made for experimentations with graphs
8153 drawing algorithms. It is written in pure Python, and currently implements
8154 two layouts: the Sugiyama hierarchical layout and the force-driven or energy
8155 minimization approach. While not as fast or featured as graphviz or other
8156 libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
8157 than thousands of nodes, while keeping the source code simple enough to tweak
8158 and hack any part of it for experimental purpose. With a total of about 1500
8159 lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
8160 in less than 600 lines. The energy minimization approach is comprised of only
8161 250 lines!
8162
8163 Grandalf does only 2 not-so-simple things:
8164 @itemize
8165 @item computing the nodes (x,y) coordinates (based on provided nodes
8166 dimensions, and a chosen layout)
8167 @item routing the edges with lines or nurbs
8168 @end itemize
8169
8170 It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
8171 will help you find where to draw things like nodes and edges, but it’s up to
8172 you to actually draw things with your favorite toolkit.")
8173 ;; The user can choose either license.
8174 (license (list license:gpl2 license:epl1.0))))
8175
8176 (define-public python-gridmap
8177 (package
8178 (name "python-gridmap")
8179 (version "0.14.0")
8180 (source
8181 (origin
8182 (method git-fetch)
8183 (uri (git-reference
8184 (url "https://github.com/pygridtools/gridmap")
8185 (commit (string-append "v" version))))
8186 (file-name (git-file-name name version))
8187 (sha256
8188 (base32 "0v0sgpg6pz8h61f9aqjf5xk0ipr512bbz8dxzjjylksj135qr19l"))))
8189 (build-system python-build-system)
8190 (arguments
8191 '(#:tests? #f ;FIXME: Requires python-cherrypy.
8192 #:phases (modify-phases %standard-phases
8193 ;; Importing the web server module requires cherrypy, too.
8194 (delete 'sanity-check))))
8195 (propagated-inputs
8196 (list python-psutil python-drmaa python-pyzmq))
8197 (home-page "https://github.com/pygridtools/gridmap")
8198 (synopsis "Create jobs on a cluster directly from Python")
8199 (description
8200 "Gridmap is a Python package to allow you to easily create jobs on the
8201 cluster directly from Python. You can directly map Python functions onto the
8202 cluster without needing to write any wrapper code yourself.")
8203 (license license:gpl3+)))
8204
8205 (define-public python-honcho
8206 (package
8207 (name "python-honcho")
8208 (version "1.1.0")
8209 (source
8210 (origin
8211 (method git-fetch)
8212 (uri (git-reference
8213 (url "https://github.com/nickstenning/honcho")
8214 (commit (string-append "v" version))))
8215 (file-name (git-file-name name version))
8216 (sha256
8217 (base32 "1y0r8dw4pqcq7r4n58ixjdg1iy60lp0gxsd7d2jmhals16ij71rj"))))
8218 (build-system python-build-system)
8219 (native-inputs
8220 (list python-pytest python-mock python-tox which)) ;for tests
8221 (propagated-inputs
8222 (list python-jinja2))
8223 (arguments
8224 `(#:phases
8225 (modify-phases %standard-phases
8226 (delete 'check)
8227 (add-after 'install 'check
8228 (lambda* (#:key outputs inputs #:allow-other-keys)
8229 ;; fix honcho path in testsuite
8230 (substitute* "tests/conftest.py"
8231 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
8232 "/bin/honcho" "'")))
8233 ;; It's easier to run tests after install.
8234 ;; Make installed package available for running the tests
8235 (add-installed-pythonpath inputs outputs)
8236 ;; Skip failing test_export
8237 (invoke "py.test" "-v" "-k" "not test_export"))))))
8238 (home-page "https://github.com/nickstenning/honcho")
8239 (synopsis "Manage Procfile-based applications")
8240 (description
8241 "A Procfile is a file which describes how to run an application
8242 consisting of several processes. honcho starts all listed processes.
8243 The output of all running processes is collected by honcho and
8244 displayed.")
8245 (license license:expat)))
8246
8247 (define-public python-pebble
8248 (package
8249 (name "python-pebble")
8250 (version "4.6.1")
8251 (source
8252 (origin
8253 (method url-fetch)
8254 (uri (pypi-uri "Pebble" version))
8255 (sha256
8256 (base32 "16siqc3brbk7dp4d9sg48bjl6a8wyy24aib3il1hf4y2624draxh"))))
8257 (build-system python-build-system)
8258 (native-inputs
8259 (list python-pytest))
8260 (arguments
8261 `(#:phases
8262 (modify-phases %standard-phases
8263 (replace 'check
8264 (lambda _ (invoke "python" "-m" "pytest" "-sv"))))))
8265 (home-page "https://github.com/noxdafox/pebble")
8266 (synopsis "Threading and multiprocessing for Python")
8267 (description
8268 "Pebble aims to help manage threads and processes in an easier way. It
8269 wraps Python's standard library threading and multiprocessing objects.")
8270 (license license:lgpl3+)))
8271
8272 (define-public python-pexpect
8273 (package
8274 (name "python-pexpect")
8275 (version "4.8.0")
8276 (source
8277 (origin
8278 (method url-fetch)
8279 (uri (pypi-uri "pexpect" version))
8280 (sha256
8281 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
8282 (build-system python-build-system)
8283 (arguments
8284 `(#:phases
8285 (modify-phases %standard-phases
8286 (add-before 'check 'prepare-tests
8287 (lambda _
8288 (substitute* (find-files "tests")
8289 (("/bin/ls") (which "ls"))
8290 (("/bin/echo") (which "echo"))
8291 (("/bin/which") (which "which"))
8292 ;; Many tests try to use the /bin directory which
8293 ;; is not present in the build environment.
8294 ;; Use one that's non-empty and unlikely to change.
8295 (("/bin'") "/dev'")
8296 ;; Disable failing test. See upstream bug report
8297 ;; https://github.com/pexpect/pexpect/issues/568
8298 (("def test_bash") "def _test_bash"))
8299 ;; XXX: Socket connection test gets "Connection reset by peer".
8300 ;; Why does it not work? Delete for now.
8301 (delete-file "tests/test_socket.py")
8302 #t))
8303 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
8304 (native-inputs
8305 `(("python-nose" ,python-nose)
8306 ("python-pytest" ,python-pytest)
8307 ("man-db" ,man-db)
8308 ("which" ,which)
8309 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
8310 (propagated-inputs
8311 (list python-ptyprocess))
8312 (home-page "http://pexpect.readthedocs.org/")
8313 (synopsis "Controlling interactive console applications")
8314 (description
8315 "Pexpect is a pure Python module for spawning child applications;
8316 controlling them; and responding to expected patterns in their output.
8317 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
8318 child application and control it as if a human were typing commands.")
8319 (license license:isc)))
8320
8321 (define-public python-sexpdata
8322 (package
8323 (name "python-sexpdata")
8324 (version "0.0.3")
8325 (source
8326 (origin
8327 (method url-fetch)
8328 (uri (pypi-uri "sexpdata" version))
8329 (sha256
8330 (base32
8331 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
8332 (build-system python-build-system)
8333 (home-page "https://github.com/jd-boyd/sexpdata")
8334 (synopsis "S-expression parser for Python")
8335 (description
8336 "Sexpdata is an S-expression parser/serializer. It has load and dump
8337 functions like pickle, json or PyYAML module.")
8338 (license license:bsd-3)))
8339
8340 (define-public python-pathlib2
8341 (package
8342 (name "python-pathlib2")
8343 (version "2.3.7.post1")
8344 (source
8345 (origin
8346 (method url-fetch)
8347 (uri (pypi-uri "pathlib2" version))
8348 (sha256
8349 (base32
8350 "0hf62d0lsf37vnr5fxqp5rfn85njgsr45j4rw71w10wbi6nyvq4z"))))
8351 (build-system python-build-system)
8352 (propagated-inputs
8353 (list python-scandir python-six))
8354 (home-page "https://pypi.org/project/pathlib2/")
8355 (synopsis "Object-oriented file system paths")
8356 (description "The goal of pathlib2 is to provide a backport of the
8357 standard @code{pathlib} module which tracks the standard library module, so
8358 all the newest features of the standard @code{pathlib} can be used also on
8359 older Python versions.")
8360 (license license:expat)))
8361
8362 (define-public python-importlib-resources
8363 (package
8364 (name "python-importlib-resources")
8365 (version "3.0.0")
8366 (source (origin
8367 (method url-fetch)
8368 (uri (pypi-uri "importlib_resources" version))
8369 (sha256
8370 (base32
8371 "1hq626mx5jl9zfl0wdrjkxsnh8qd98fqv322n68b9251xjk4bxqr"))))
8372 (build-system python-build-system)
8373 (native-inputs (list python-setuptools-scm python-toml))
8374 (home-page "http://importlib-resources.readthedocs.io/")
8375 (synopsis "Read resources from Python packages")
8376 (description
8377 "@code{importlib_resources} is a backport of Python 3's standard library
8378 @code{importlib.resources} module for Python 2.7, and Python 3.")
8379 (license license:asl2.0)))
8380
8381 (define-public python-importlib-metadata
8382 (package
8383 (name "python-importlib-metadata")
8384 (version "4.11.3")
8385 (source
8386 (origin
8387 (method url-fetch)
8388 (uri (pypi-uri "importlib_metadata" version))
8389 (sha256
8390 (base32
8391 "0f951zynlh39yicqnhrs3p1qa5p3g6ajjfcggf12y51ppxz5jk7a"))))
8392 (build-system python-build-system)
8393 (arguments
8394 (list
8395 #:phases
8396 #~(modify-phases %standard-phases
8397 ;; XXX: PEP 517 manual build/install procedures copied from
8398 ;; python-isort.
8399 (replace 'build
8400 (lambda _
8401 ;; ZIP does not support timestamps before 1980.
8402 (setenv "SOURCE_DATE_EPOCH" "315532800")
8403 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
8404 (replace 'install
8405 (lambda* (#:key outputs #:allow-other-keys)
8406 (let ((whl (car (find-files "dist" "\\.whl$"))))
8407 (invoke "pip" "--no-cache-dir" "--no-input"
8408 "install" "--no-deps" "--prefix" #$output whl))))
8409 (replace 'check
8410 (lambda* (#:key tests? #:allow-other-keys)
8411 (when tests?
8412 (invoke "pytest" "-vv" "tests")))))))
8413 (propagated-inputs (list python-zipp))
8414 (native-inputs
8415 (list python-pypa-build
8416 python-pyfakefs
8417 python-pytest
8418 python-setuptools-scm))
8419 (home-page "https://importlib-metadata.readthedocs.io/")
8420 (synopsis "Read metadata from Python packages")
8421 (description
8422 "@code{importlib_metadata} is a library which provides an API for
8423 accessing an installed Python package's metadata, such as its entry points or
8424 its top-level name. This functionality intends to replace most uses of
8425 @code{pkg_resources} entry point API and metadata API. Along with
8426 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
8427 need to use the older and less efficient @code{pkg_resources} package.")
8428 (license license:asl2.0)))
8429
8430 (define-public python-importmagic
8431 (package
8432 (name "python-importmagic")
8433 (version "0.1.7")
8434 (source
8435 (origin
8436 (method url-fetch)
8437 (uri (pypi-uri "importmagic" version))
8438 (sha256
8439 (base32
8440 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
8441 (build-system python-build-system)
8442 (arguments
8443 (list #:phases
8444 #~(modify-phases %standard-phases
8445 (replace 'check
8446 (lambda* (#:key tests? #:allow-other-keys)
8447 (when tests?
8448 (invoke "pytest" "-v")))))))
8449 (native-inputs
8450 (list python-pytest))
8451 (home-page "https://github.com/alecthomas/importmagic")
8452 (synopsis "Library for adding, removing and managing Python imports")
8453 (description
8454 "Importmagic is a Python library for automatically managing imports by
8455 finding unresolved symbols in Python code and their corresponding imports.")
8456 (license license:bsd-3)))
8457
8458 (define-public python-inotify-simple
8459 (package
8460 (name "python-inotify-simple")
8461 (version "1.3.5")
8462 (source
8463 (origin
8464 (method git-fetch)
8465 (uri (git-reference
8466 (url "https://github.com/chrisjbillington/inotify_simple")
8467 (commit version)))
8468 (file-name (git-file-name name version))
8469 (sha256
8470 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
8471 (build-system python-build-system)
8472 (home-page
8473 "https://github.com/chrisjbillington/inotify_simple")
8474 (synopsis "Simple wrapper around inotify library")
8475 (description
8476 "@code{inotify-simple} is a simple wrapper around inotify library.")
8477 (license license:bsd-3)))
8478
8479 (define-public python-jaraco-classes
8480 (package
8481 (name "python-jaraco-classes")
8482 (version "3.2.1")
8483 (source
8484 (origin
8485 (method url-fetch)
8486 (uri (pypi-uri "jaraco.classes" version))
8487 (sha256
8488 (base32 "0d6g7qvfv1jlzbzh6asprqdblqd59grvlvr3nwbdqdqrmwlbfm7d"))))
8489 (build-system python-build-system)
8490 (arguments
8491 (list
8492 #:phases
8493 #~(modify-phases %standard-phases
8494 (replace 'check
8495 (lambda* (#:key tests? #:allow-other-keys)
8496 (when tests?
8497 ;; Do not test the myproject.toml build as it tries to pull
8498 ;; dependencies from the Internet.
8499 (invoke "pytest" "-vv" "-k" "not project")))))))
8500 (native-inputs
8501 (list python-pytest
8502 python-pytest-black
8503 python-pytest-checkdocs
8504 python-pytest-cov
8505 python-pytest-enabler-bootstrap ;OK since not propagated
8506 python-pytest-flake8
8507 python-pytest-mypy
8508 python-setuptools-scm
8509 python-wheel))
8510 (propagated-inputs (list python-more-itertools))
8511 (home-page "https://github.com/jaraco/jaraco.classes")
8512 (synopsis "Utility functions for Python class constructs")
8513 (description "This Python library contains utility functions for Python
8514 class constructs.")
8515 (license license:expat)))
8516
8517 ;;; Variant used to break a cycle with python-pytest-enabler.
8518 (define-public python-jaraco-context-bootstrap
8519 (hidden-package
8520 (package
8521 (name "python-jaraco-context-bootstrap")
8522 (version "4.1.1")
8523 (source
8524 (origin
8525 (method url-fetch)
8526 (uri (pypi-uri "jaraco.context" version))
8527 (sha256
8528 (base32 "0hbjm1rpxf4pzmbdp9rh3ali4zqnlcr8m97bhh1nizxvzcpxim7h"))))
8529 (build-system python-build-system)
8530 (arguments (list #:tests? #f))
8531 (native-inputs (list python-setuptools-scm))
8532 (home-page "https://github.com/jaraco/jaraco.context")
8533 (synopsis "Context managers Python library")
8534 (description "This Python library provides context managers-related
8535 procedures.")
8536 (license license:expat))))
8537
8538 (define-public python-jaraco-context
8539 (package/inherit python-jaraco-context-bootstrap
8540 (name "python-jaraco-context")
8541 (arguments
8542 (substitute-keyword-arguments
8543 (package-arguments python-jaraco-context-bootstrap)
8544 ((#:tests? _ #f)
8545 (not (%current-target-system)))
8546 ((#:phases phases #~%standard-phases)
8547 #~(modify-phases #$phases
8548 (replace 'check
8549 (lambda* (#:key tests? #:allow-other-keys)
8550 (when tests?
8551 ;; Do not test the myproject.toml build as it tries to pull
8552 ;; dependencies from the Internet.
8553 (invoke "pytest" "-vv" "-k" "not project"))))))))
8554 (native-inputs
8555 (modify-inputs
8556 (package-native-inputs python-jaraco-context-bootstrap)
8557 (append python-pytest
8558 python-pytest-black
8559 python-pytest-checkdocs
8560 python-pytest-cov
8561 python-pytest-enabler-bootstrap ;OK since not propagated
8562 python-pytest-flake8
8563 python-pytest-mypy)))
8564 (properties (alist-delete 'hidden? (package-properties
8565 python-jaraco-context-bootstrap)))))
8566
8567 ;;; Variant used to break a cycle with python-pytest-enabler.
8568 (define-public python-jaraco-functools-bootstrap
8569 (hidden-package
8570 (package
8571 (name "python-jaraco-functools-bootstrap")
8572 (version "3.5.0")
8573 (source
8574 (origin
8575 (method url-fetch)
8576 (uri (pypi-uri "jaraco.functools" version))
8577 (sha256
8578 (base32 "186xqzs3bqhjwajnprxy3sc3h0w5vdld8spc1dxjnn9720yykq1i"))))
8579 (build-system python-build-system)
8580 (arguments (list #:tests? #f))
8581 (native-inputs (list python-setuptools-scm))
8582 (propagated-inputs (list python-more-itertools))
8583 (home-page "https://github.com/jaraco/jaraco.functools")
8584 (synopsis "Python library extending Python's @code{functools}")
8585 (description "This library extends the standard @code{functools} Python
8586 module with a few extra procedures.")
8587 (license license:expat))))
8588
8589 (define-public python-jaraco-functools
8590 (package/inherit python-jaraco-functools-bootstrap
8591 (name "python-jaraco-functools")
8592 (arguments
8593 (substitute-keyword-arguments
8594 (package-arguments python-jaraco-functools-bootstrap)
8595 ((#:tests? _ #f)
8596 (not (%current-target-system)))
8597 ((#:phases phases #~%standard-phases)
8598 #~(modify-phases #$phases
8599 (replace 'check
8600 (lambda* (#:key tests? #:allow-other-keys)
8601 (when tests?
8602 ;; Do not test the myproject.toml build as it tries to pull
8603 ;; dependencies from the Internet. Do not run a test that
8604 ;; tries to emulate a broken proprietary CI set-up, fails
8605 ;; to do so correctly, and then throws an error about it.
8606 (invoke "pytest" "-vv" "-k"
8607 "not project and not test_function_throttled"))))))))
8608 (native-inputs
8609 (modify-inputs
8610 (package-native-inputs python-jaraco-functools-bootstrap)
8611 (append python-jaraco-classes
8612 python-pytest
8613 python-pytest-black
8614 python-pytest-checkdocs
8615 python-pytest-cov
8616 python-pytest-enabler-bootstrap ;OK since not propagated
8617 python-pytest-flake8
8618 python-pytest-mypy)))
8619 (properties (alist-delete 'hidden? (package-properties
8620 python-jaraco-functools-bootstrap)))))
8621
8622 (define-public python-jaraco-packaging
8623 (package
8624 (name "python-jaraco-packaging")
8625 (version "6.1")
8626 (source
8627 (origin
8628 (method url-fetch)
8629 (uri (pypi-uri "jaraco.packaging" version))
8630 (sha256
8631 (base32
8632 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
8633 (build-system python-build-system)
8634 (propagated-inputs
8635 (list python-pytest
8636 python-pytest-checkdocs
8637 python-pytest-flake8
8638 python-rst.linker
8639 python-setuptools
8640 python-setuptools-scm
8641 python-six
8642 python-sphinx))
8643 (home-page "https://github.com/jaraco/jaraco.packaging")
8644 (synopsis "Tools to supplement packaging Python releases")
8645 (description
8646 "This package provides various tools to supplement packaging Python
8647 releases.")
8648 (license license:expat)))
8649
8650 (define-public python-simplegeneric
8651 (package
8652 (name "python-simplegeneric")
8653 (version "0.8.1")
8654 (source
8655 (origin
8656 (method url-fetch)
8657 (uri (pypi-uri "simplegeneric" version ".zip"))
8658 (sha256
8659 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
8660 (build-system python-build-system)
8661 (native-inputs
8662 (list unzip))
8663 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
8664 (synopsis "Python module for simple generic functions")
8665 (description
8666 "The simplegeneric module lets you define simple single-dispatch generic
8667 functions, akin to Python’s built-in generic functions like @code{len()},
8668 @code{iter()} and so on. However, instead of using specially-named methods,
8669 these generic functions use simple lookup tables, akin to those used by
8670 e.g. @code{pickle.dump()} and other generic functions found in the Python
8671 standard library.")
8672 (license license:zpl2.1)))
8673
8674 (define-public python-ipython-genutils
8675 ;; TODO: This package is retired, check if can be removed, see description.
8676 (package
8677 (name "python-ipython-genutils")
8678 (version "0.1.0")
8679 (source
8680 (origin
8681 (method url-fetch)
8682 (uri (pypi-uri "ipython_genutils" version))
8683 (sha256
8684 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
8685 (build-system python-build-system)
8686 (arguments `(#:tests? #f)) ; no tests
8687 (home-page "https://ipython.org")
8688 (synopsis "Vestigial utilities from IPython")
8689 (description
8690 "This package provides retired utilities from IPython. No packages
8691 outside IPython/Jupyter should depend on it.
8692
8693 This package shouldn't exist. It contains some common utilities shared by
8694 Jupyter and IPython projects during The Big Split. As soon as possible, those
8695 packages will remove their dependency on this, and this package will go
8696 away.")
8697 (license license:bsd-3)))
8698
8699 ;;; Variant used to break a cycle with python-ipykernel.
8700 (define-public python-ipyparallel-bootstrap
8701 (hidden-package
8702 (package
8703 (name "python-ipyparallel-bootstrap")
8704 (version "8.2.1")
8705 (source
8706 (origin
8707 (method url-fetch)
8708 (uri (pypi-uri "ipyparallel" version))
8709 (sha256
8710 (base32
8711 "0wiwfd7870zbmczzn96jqxxjf2zcbcaxnsl1ddn8hspwa8y4frzj"))))
8712 (build-system python-build-system)
8713 (arguments
8714 (list
8715 #:tests? #f
8716 #:phases #~(modify-phases %standard-phases
8717 ;; The python-ipykernel is normally propagated but is
8718 ;; removed from this package to break the cycle.
8719 (delete 'sanity-check))))
8720 (propagated-inputs
8721 (list python-dateutil
8722 python-decorator
8723 python-entrypoints
8724 python-ipython
8725 ;; python-ipykernel is omitted here to break a cycle.
8726 python-jupyter-client-bootstrap
8727 python-psutil
8728 python-pyzmq
8729 python-tornado-6
8730 python-tqdm
8731 python-traitlets))
8732 (home-page "https://ipython.org/")
8733 (synopsis "Interactive Parallel Computing with IPython")
8734 (description
8735 "@code{ipyparallel} is a Python package and collection of CLI scripts for
8736 controlling clusters for Jupyter. @code{ipyparallel} contains the following
8737 CLI scripts:
8738 @enumerate
8739 @item ipcluster - start/stop a cluster
8740 @item ipcontroller - start a scheduler
8741 @item ipengine - start an engine
8742 @end enumerate")
8743 (license license:bsd-3))))
8744
8745 (define-public python-ipyparallel
8746 (package
8747 (inherit python-ipyparallel-bootstrap)
8748 (name "python-ipyparallel")
8749 (arguments
8750 (list
8751 #:phases
8752 #~(modify-phases %standard-phases
8753 (replace 'check
8754 (lambda _
8755 (invoke "pytest" "-vv"))))))
8756 (native-inputs
8757 (list python-ipython
8758 python-pytest
8759 python-pytest-asyncio
8760 python-pytest-cov
8761 python-pytest-tornado
8762 python-testpath))
8763 (propagated-inputs
8764 (modify-inputs (package-propagated-inputs python-ipyparallel-bootstrap)
8765 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
8766 (append python-ipykernel)))
8767 (properties (alist-delete 'hidden? (package-properties
8768 python-ipyparallel-bootstrap)))))
8769
8770 (define-public python-ipython-cluster-helper
8771 (package
8772 (name "python-ipython-cluster-helper")
8773 (version "0.6.4")
8774 (source
8775 (origin
8776 (method url-fetch)
8777 (uri (pypi-uri "ipython-cluster-helper" version))
8778 (sha256
8779 (base32
8780 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
8781 (modules '((guix build utils)))
8782 (snippet
8783 '(begin (substitute* "requirements.txt"
8784 (("ipython.*") "ipython\n"))
8785 #t))))
8786 (build-system python-build-system)
8787 (arguments
8788 `(#:tests? #f ; Test suite can't find IPython.
8789 #:phases
8790 (modify-phases %standard-phases
8791 (replace 'check
8792 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
8793 (if tests?
8794 (begin
8795 (setenv "HOME" (getcwd))
8796 (add-installed-pythonpath inputs outputs)
8797 (invoke "python" "example/example.py" "--local"))
8798 #t))))))
8799 (propagated-inputs
8800 (list python-ipyparallel
8801 python-ipython
8802 python-netifaces
8803 python-pyzmq
8804 python-setuptools
8805 python-six))
8806 (home-page "https://github.com/roryk/ipython-cluster-helper")
8807 (synopsis
8808 "Simplify IPython cluster start up and use for multiple schedulers")
8809 (description
8810 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
8811 profile, launches a cluster and returns a view. On program exit it shuts the
8812 cluster down and deletes the throwaway profile.")
8813 (license license:expat)))
8814
8815 (define-public python-ipython-sql
8816 (package
8817 (name "python-ipython-sql")
8818 (version "0.4.1")
8819 (source
8820 (origin
8821 (method url-fetch)
8822 (uri (pypi-uri "ipython-sql" version))
8823 (sha256
8824 (base32 "1r6rz8jgrqzhkf2flwjw75d96g8l7kykmx5wli3q1988w96391ip"))))
8825 (build-system python-build-system)
8826 (arguments
8827 (list #:tests? #f ;must run under IPython
8828 #:phases
8829 #~(modify-phases %standard-phases
8830 (add-after 'unpack 'permit-newer-prettytable
8831 ;; See https://github.com/catherinedevlin/ipython-sql/issues/202
8832 (lambda _
8833 (substitute* "setup.py"
8834 (("prettytable<1")
8835 "prettytable")))))))
8836 (propagated-inputs
8837 (list python-ipython
8838 python-ipython-genutils
8839 python-prettytable
8840 python-six
8841 python-sqlalchemy
8842 python-sqlparse))
8843 (home-page "https://github.com/catherinedevlin/ipython-sql")
8844 (synopsis "RDBMS access via IPython")
8845 (description "This library connects to a database, using SQLAlchemy URL
8846 connect strings, then issue SQL commands within IPython or IPython Notebook.")
8847 (license license:expat)))
8848
8849 (define-public python-traitlets
8850 (package
8851 (name "python-traitlets")
8852 (version "5.1.1")
8853 (source
8854 (origin
8855 (method url-fetch)
8856 (uri (pypi-uri "traitlets" version))
8857 (sha256
8858 (base32
8859 "1ivhxglsrnhqw4g98ihddn7i5f6976gpk31fijwq473wb9n4b7q5"))))
8860 (build-system python-build-system)
8861 (arguments
8862 `(#:phases
8863 (modify-phases %standard-phases
8864 (replace 'check (lambda* (#:key tests? #:allow-other-keys)
8865 (when tests?
8866 (invoke "pytest" "-vv" "traitlets")))))))
8867 (native-inputs
8868 (list python-pytest))
8869 (home-page "https://ipython.org")
8870 (synopsis "Configuration system for Python applications")
8871 (description
8872 "Traitlets is a framework that lets Python classes have attributes with
8873 type checking, dynamically calculated default values, and ‘on change’
8874 callbacks. The package also includes a mechanism to use traitlets for
8875 configuration, loading values from files or from command line arguments. This
8876 is a distinct layer on top of traitlets, so you can use traitlets in your code
8877 without using the configuration machinery.")
8878 (license license:bsd-3)))
8879
8880 (define-public python-jupyter-core
8881 (package
8882 (name "python-jupyter-core")
8883 (version "4.10.0")
8884 (source
8885 (origin
8886 (method url-fetch)
8887 (uri (string-append (pypi-uri "jupyter_core" version)))
8888 (sha256
8889 (base32
8890 "1v0s31rmwppdmww135hif03hy164j9kimirh24kxfcbvdfql9pm6"))))
8891 (build-system python-build-system)
8892 (arguments
8893 `(#:phases
8894 (modify-phases %standard-phases
8895 (replace 'check
8896 (lambda* (#:key tests? #:allow-other-keys)
8897 (when tests?
8898 ;; Some tests write to $HOME.
8899 (setenv "HOME" "/tmp")
8900 (invoke "pytest" "-vv"
8901 "-k"
8902 (string-append
8903 ;; XXX: These tests fail with "ModuleNotFoundError: No
8904 ;; module named 'jupyter_core'".
8905 "not test_argv0 and not test_path_priority "
8906 "and not test_not_on_path")))))
8907 (add-after 'unpack 'patch-testsuite
8908 (lambda _
8909 ;; test_not_on_path() and test_path_priority() try to run a test
8910 ;; that loads jupyter_core, so we need GUIX_PYTHONPATH
8911 (substitute* "jupyter_core/tests/test_command.py"
8912 (("env = \\{'PATH': ''\\}")
8913 "env = {'PATH': '', 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}")
8914 (("env = \\{'PATH': str\\(b\\)\\}")
8915 "env = {'PATH': str(b), 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}"))))
8916 ;; Migration is running whenever etc/jupyter exists, but the
8917 ;; Guix-managed directory will never contain any migratable IPython
8918 ;; config files and cannot be written to anyway, so just pretend we
8919 ;; already did that.
8920 (add-after 'install 'disable-migration
8921 (lambda* (#:key outputs #:allow-other-keys)
8922 (mkdir-p (string-append (assoc-ref outputs "out") "/etc/jupyter"))
8923 (invoke "touch"
8924 (string-append
8925 (assoc-ref outputs "out")
8926 "/etc/jupyter/migrated")))))))
8927 (propagated-inputs (list python-traitlets))
8928 (native-inputs (list python-pytest))
8929 ;; This package provides the `jupyter` binary and thus also exports the
8930 ;; search paths.
8931 (native-search-paths
8932 (list (search-path-specification
8933 (variable "JUPYTER_CONFIG_PATH")
8934 (files '("etc/jupyter")))
8935 (search-path-specification
8936 (variable "JUPYTER_PATH")
8937 (files '("share/jupyter")))))
8938 (home-page "https://jupyter.org/")
8939 (synopsis "Jupyter base package")
8940 (description
8941 "Jupyter core is the base package on which Jupyter projects rely.")
8942 (license license:bsd-3)))
8943
8944 ;; Bootstrap variant of jupyter-client, which breaks the loop between ipykernel
8945 ;; and jupyter-client by removing the former from its native-inputs and
8946 ;; disabling tests.
8947 (define-public python-jupyter-client-bootstrap
8948 (hidden-package
8949 (package
8950 (name "python-jupyter-client-bootstrap")
8951 (version "7.2.2")
8952 (source
8953 (origin
8954 (method url-fetch)
8955 (uri (pypi-uri "jupyter_client" version))
8956 (sha256
8957 (base32
8958 "12pbp177bfb3710y1a5598mwn8ffhyzmpll67m0nmalb98savnwg"))))
8959 (build-system python-build-system)
8960 (arguments
8961 (list
8962 #:tests? #f
8963 #:phases
8964 #~(modify-phases %standard-phases
8965 (add-after 'unpack 'set-tool-file-names
8966 (lambda* (#:key inputs #:allow-other-keys)
8967 (substitute* "jupyter_client/localinterfaces.py"
8968 (("'ip'")
8969 (format #f "'~a'" (search-input-file inputs "sbin/ip")))))))))
8970 (inputs (list iproute))
8971 (propagated-inputs
8972 (list python-dateutil
8973 python-entrypoints
8974 python-jupyter-core
8975 python-nest-asyncio
8976 python-pyzmq
8977 python-tornado-6
8978 python-traitlets))
8979 (home-page "https://jupyter.org/")
8980 (synopsis "Jupyter protocol implementation and client libraries")
8981 (description
8982 "The @code{jupyter_client} package contains the reference implementation
8983 of the Jupyter protocol. It also provides client and kernel management APIs
8984 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
8985 installing @code{kernelspec}s for use with Jupyter frontends.")
8986 (license license:bsd-3))))
8987
8988 (define-public python-jupyter-client
8989 (let ((base python-jupyter-client-bootstrap))
8990 (package
8991 (inherit base)
8992 (name "python-jupyter-client")
8993 (arguments
8994 (substitute-keyword-arguments (package-arguments base)
8995 ((#:tests? _ #f)
8996 (not (%current-target-system)))
8997 ((#:phases phases #~%standard-phases)
8998 #~(modify-phases #$phases
8999 (replace 'check
9000 (lambda* (#:key tests? #:allow-other-keys)
9001 (when tests?
9002 ;; Some tests try to write to $HOME.
9003 (setenv "HOME" "/tmp")
9004 (invoke "pytest" "-vv"))))))))
9005 (native-inputs
9006 (list python-pytest
9007 python-pytest-asyncio
9008 python-pytest-timeout
9009 python-async-generator
9010 python-ipython
9011 python-ipykernel-bootstrap))
9012 (properties (alist-delete 'hidden? (package-properties base))))))
9013
9014 (define-public python-ipykernel
9015 (package
9016 (name "python-ipykernel")
9017 (version "6.13.0")
9018 (source
9019 (origin
9020 (method url-fetch)
9021 (uri (pypi-uri "ipykernel" version))
9022 (sha256
9023 (base32 "0q5yni8h08nadsn53f957p0pjsjhwl2b2lp1hqz3jn0854z2fa0f"))))
9024 (build-system python-build-system)
9025 (arguments
9026 (list
9027 #:imported-modules `(,@%python-build-system-modules
9028 (guix build syscalls))
9029 #:modules '((guix build python-build-system)
9030 (guix build syscalls)
9031 (guix build utils)
9032 (ice-9 match))
9033 #:phases
9034 #~(modify-phases %standard-phases
9035 (replace 'check
9036 (lambda* (#:key tests? #:allow-other-keys)
9037 (when tests?
9038 (match (primitive-fork)
9039 (0 ;child process
9040 (set-child-subreaper!)
9041 ;; XXX: Tini provides proper PID1-like signal handling that
9042 ;; reaps zombie processes, necessary for the
9043 ;; 'test_shutdown_subprocesses' test to pass.
9044
9045 ;; TODO: Complete https://issues.guix.gnu.org/30948.
9046 (setenv "HOME" "/tmp")
9047 (execlp "tini" "--" "pytest" "-vv"))
9048 (pid
9049 (match (waitpid pid)
9050 ((_ . status)
9051 (unless (zero? status)
9052 (error "`pytest' exited with status"
9053 status)))))))))
9054 (add-after 'install 'set-python-file-name
9055 (lambda* (#:key inputs #:allow-other-keys)
9056 ;; Record the absolute file name of the 'python' executable in
9057 ;; 'kernel.json'.
9058 (substitute* (string-append #$output "/share/jupyter"
9059 "/kernels/python3/kernel.json")
9060 (("\"python\"")
9061 (format #f "~s" (search-input-file inputs
9062 "/bin/python3")))))))))
9063 (propagated-inputs
9064 (list python-debugpy
9065 python-ipython
9066 python-jupyter-client ;imported at runtime during connect
9067 python-matplotlib-inline
9068 ;;python-nest-asyncio
9069 ;;python-packaging
9070 python-psutil
9071 python-tornado-6
9072 python-traitlets))
9073 (inputs (list python)) ;for cross compilation
9074 (native-inputs
9075 (list python-flaky
9076 python-ipyparallel-bootstrap
9077 ;; XXX: Our Pytest package captures its native inputs in its
9078 ;; wrapper script (such as python-nose), which is used in the code
9079 ;; and causes deprecation warnings. Using the bootstrap variant
9080 ;; avoids that.
9081 python-pytest-bootstrap
9082 python-pytest-timeout
9083 tini))
9084 (home-page "https://ipython.org")
9085 (synopsis "IPython Kernel for Jupyter")
9086 (description "This package provides the IPython kernel for Jupyter.")
9087 (license license:bsd-3)))
9088
9089 ;; Bootstrap variant of ipykernel, which uses the bootstrap jupyter-client to
9090 ;; break the cycle between ipykernel and jupyter-client.
9091 (define-public python-ipykernel-bootstrap
9092 (let ((parent python-ipykernel))
9093 (hidden-package
9094 (package
9095 (inherit parent)
9096 (name "python-ipykernel-bootstrap")
9097 (arguments (list #:tests? #f
9098 ;; The package should normally propagate ipykernel,
9099 ;; left out here to break the cycle.
9100 #:phases #~(modify-phases %standard-phases
9101 (delete 'sanity-check))))
9102 (native-inputs '())
9103 (propagated-inputs
9104 (modify-inputs (package-propagated-inputs parent)
9105 (replace "python-jupyter-client" python-jupyter-client-bootstrap)
9106 (append python-ipyparallel-bootstrap)))))))
9107
9108 (define-public python-pari-jupyter
9109 (package
9110 (name "python-pari-jupyter")
9111 (version "1.4.1")
9112 (source
9113 (origin
9114 (method url-fetch)
9115 (uri (pypi-uri "pari-jupyter" version))
9116 (sha256
9117 (base32
9118 "1ikqvv335qfrhmlji0iclci6pnm2c3fvnxf031jr1d68j79g6ypd"))))
9119 (build-system python-build-system)
9120 (arguments '(#:tests? #f)) ;no test suite
9121 (inputs
9122 (list pari-gp readline python-ipykernel))
9123 (home-page "https://github.com/sagemath/pari-jupyter")
9124 (synopsis "Jupyter kernel for PARI/GP")
9125 (description "The package provides a PARI/GP kernel for Jupyter.")
9126 (license license:gpl3+)))
9127
9128 (define-public python-backcall
9129 (package
9130 (name "python-backcall")
9131 (version "0.2.0")
9132 (source
9133 (origin
9134 (method url-fetch)
9135 (uri (pypi-uri "backcall" version))
9136 (sha256
9137 (base32
9138 "07jy4562lvnhkk6kfr3cphmizy88anlhmbwb8kdzlz2ypqkvzgaw"))))
9139 (build-system python-build-system)
9140 (home-page "https://github.com/takluyver/backcall/")
9141 (synopsis "Specifications for callback functions passed in to an API")
9142 (description
9143 "If your code lets other people supply callback functions, it's important
9144 to specify the function signature you expect, and check that functions support
9145 that. Adding extra parameters later would break other peoples code unless
9146 you're careful. The @code{backcall} package provides a way of specifying the
9147 callback signature using a prototype function.")
9148 (license license:bsd-3)))
9149
9150 (define-public python-pure-eval
9151 (package
9152 (name "python-pure-eval")
9153 (version "0.2.2")
9154 (source
9155 (origin
9156 (method url-fetch)
9157 (uri (pypi-uri "pure_eval" version))
9158 (sha256
9159 (base32 "1hwsm85cwqwh6d6x4vzcimla2865s6v19ms3ym81ganzyq534i9b"))))
9160 (build-system python-build-system)
9161 (native-inputs (list python-pytest python-setuptools-scm))
9162 (home-page "https://github.com/alexmojaki/pure_eval")
9163 (synopsis "Python library to evaluate abstract syntax tree nodes")
9164 (description "The @code{pure_eval} Python library can safely evaluate
9165 abstract syntax tree (AST) nodes without side effects.")
9166 (license license:expat)))
9167
9168 (define-public python-asttokens
9169 (package
9170 (name "python-asttokens")
9171 (version "2.0.5")
9172 (source
9173 (origin
9174 (method url-fetch)
9175 (uri (pypi-uri "asttokens" version))
9176 (sha256
9177 (base32 "1mglbkikxvnhrk3inbx0v1qzxwd38qjr6l35sn098yicy0ac2m4s"))))
9178 (build-system python-build-system)
9179 (propagated-inputs (list python-six))
9180 (native-inputs (list python-astroid python-pytest python-setuptools-scm))
9181 (home-page "https://github.com/gristlabs/asttokens")
9182 (synopsis "Python library to annotate abstract syntax trees")
9183 (description "The @code{asttokens} module annotates Python abstract syntax
9184 trees (ASTs) with the positions of tokens and text in the source code that
9185 generated them. It makes it possible for tools that work with logical AST
9186 nodes to find the particular text that resulted in those nodes, for example
9187 for automated refactoring or highlighting.")
9188 (license license:asl2.0)))
9189
9190 (define-public python-littleutils
9191 (package
9192 (name "python-littleutils")
9193 (version "0.2.2")
9194 (source
9195 (origin
9196 (method url-fetch)
9197 (uri (pypi-uri "littleutils" version))
9198 (sha256
9199 (base32 "0vwijrylppmk0nbddqvn527r9cg3zw8d6zk6r58hslry42jf7jp6"))))
9200 (build-system python-build-system)
9201 (home-page "https://github.com/alexmojaki/littleutils")
9202 (synopsis "Python utility function collection")
9203 (description "@code{littleutils} is a small collection of Python utility
9204 functions, useful in the context of writing unit tests among other uses.")
9205 (license license:expat)))
9206
9207 (define-public python-stack-data
9208 (package
9209 (name "python-stack-data")
9210 (version "0.2.0")
9211 (source
9212 (origin
9213 (method url-fetch)
9214 (uri (pypi-uri "stack_data" version))
9215 (sha256
9216 (base32 "04lfcj5qrn4qikjw89qbdzqwm0xm4bgm4m8rll1rafk3pm0jssa5"))))
9217 (build-system python-build-system)
9218 (propagated-inputs (list python-asttokens python-executing python-pure-eval))
9219 (native-inputs
9220 (list python-cython
9221 python-littleutils
9222 python-pygments
9223 python-pytest
9224 python-setuptools-scm
9225 python-typeguard))
9226 (home-page "https://github.com/alexmojaki/stack_data")
9227 (synopsis "Python stack frame and traceback manipulation library")
9228 (description "The @code{stack_data} Python library extracts data from
9229 stack frames and tracebacks. Is can be used to display more useful tracebacks
9230 than the default.")
9231 (license license:expat)))
9232
9233 (define-public python-ipython
9234 (package
9235 (name "python-ipython")
9236 (version "8.2.0")
9237 (source
9238 (origin
9239 (method url-fetch)
9240 (uri (pypi-uri "ipython" version ".tar.gz"))
9241 (sha256
9242 (base32 "1hcxa713wh3axa57412iy02rj0494ljvv6gpnls4lndc5h9yprbh"))))
9243 (build-system python-build-system)
9244 (arguments
9245 `(#:phases
9246 (modify-phases %standard-phases
9247 (add-after 'unpack 'make-docs-reproducible
9248 (lambda _
9249 (substitute* "IPython/sphinxext/ipython_directive.py"
9250 ((".*import datetime") "")
9251 ((".*datetime.datetime.now\\(\\)") "")
9252 (("%timeit") "# %timeit"))))
9253 (replace 'check
9254 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
9255 (when tests?
9256 (setenv "HOME" "/tmp/") ;required by some tests
9257 (invoke "python" "-m" "pytest" "-vv")))))))
9258 (inputs (list readline which))
9259 (propagated-inputs
9260 (list python-backcall
9261 python-decorator
9262 python-jedi
9263 python-jinja2
9264 python-jsonschema
9265 python-matplotlib
9266 python-matplotlib-inline
9267 python-mistune
9268 python-nbformat
9269 python-numpy
9270 python-numpydoc
9271 python-pexpect
9272 python-pickleshare
9273 python-prompt-toolkit
9274 python-pygments
9275 python-pyzmq
9276 python-simplegeneric
9277 python-stack-data
9278 python-terminado
9279 python-traitlets))
9280 (native-inputs
9281 (list graphviz
9282 pkg-config
9283 ;; For tests.
9284 python-pytest
9285 python-requests
9286 python-testpath))
9287 (home-page "https://ipython.org")
9288 (synopsis "IPython is a tool for interactive computing in Python")
9289 (description
9290 "IPython provides a rich architecture for interactive computing with:
9291 Powerful interactive shells, a browser-based notebook, support for interactive
9292 data visualization, embeddable interpreters and tools for parallel
9293 computing.")
9294 (properties '((cpe-name . "ipython")))
9295 (license license:bsd-3)))
9296
9297 (define-public python-ipython-documentation
9298 (package
9299 (inherit python-ipython)
9300 (name "python-ipython-documentation")
9301 (version (package-version python-ipython))
9302 (source
9303 (origin
9304 (inherit (package-source python-ipython))
9305 (patches (append (search-patches
9306 "python-ipython-documentation-chars.patch"
9307 "python-ipython-documentation-repro.patch")
9308 (origin-patches (package-source python-ipython))))))
9309 (arguments
9310 (list
9311 #:phases
9312 #~(modify-phases %standard-phases
9313 (add-after 'unpack 'set-pythonpath
9314 (lambda _
9315 ;; Ensure this fixed (via the
9316 ;; "python-ipython-documentation-chars.patch" patch) copy of
9317 ;; IPython gets used.
9318 (setenv "PYTHONPATH" (string-append (getcwd)))))
9319 (add-before 'build 'configure-sphinx-for-xelatex
9320 (lambda _
9321 ;; Use XeLaTeX instead of PDFLaTeX, as it can
9322 ;; cope with the Unicode characters present in the
9323 ;; contributors page, for example.
9324 (substitute* "docs/source/conf.py"
9325 (("project = 'IPython'.*" all)
9326 (string-append all "latex_engine = 'xelatex'\n")))
9327 ;; XXX: The Sphinx-generated ipython.tex specifies the GNU
9328 ;; FreeFont font to be searched via its extension, which uses
9329 ;; kpathsea instead of fontconfig and fail (see:
9330 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
9331 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
9332 ;; GUIX_TEXMF.
9333 (mkdir-p "texmf-dist/fonts/opentype/public")
9334 (symlink (string-append
9335 #$(this-package-native-input "font-gnu-freefont")
9336 "/share/fonts/opentype")
9337 (string-append
9338 (getcwd) "/"
9339 "texmf-dist/fonts/opentype/public/gnu-freefont"))
9340 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
9341 (getcwd) "/texmf-dist"))))
9342 (delete 'build)
9343 (delete 'check)
9344 (replace 'install
9345 (lambda* (#:key outputs #:allow-other-keys)
9346 (let* ((data (string-append #$output "/share"))
9347 (doc (string-append data "/doc/" #$name "-" #$version))
9348 (html (string-append doc "/html"))
9349 (info (string-append data "/info")))
9350 (invoke "make" "-C" "docs" "info" "html" "pdf"
9351 (string-append "SPHINXOPTS=-j"
9352 (number->string (parallel-job-count))))
9353 (install-file "COPYING.rst" doc)
9354 (copy-recursively "examples" (string-append doc "/examples"))
9355 ;; Install HTML documentation.
9356 (copy-recursively "docs/build/html" html)
9357 ;; Likewise for the PDF.
9358 (install-file "docs/build/latex/ipython.pdf" doc)
9359 ;; Likewise for the info manual.
9360 (install-file "docs/build/texinfo/ipython.info" info)
9361 (symlink (string-append html "/_images")
9362 (string-append info "/ipython-figures"))))))))
9363 (native-inputs
9364 (list fontconfig ;for XDG_DATA_DIRS to locate fonts
9365 font-gnu-freefont
9366 graphviz
9367 python-docrepr
9368 python-sphinx
9369 python-sphinx-rtd-theme
9370 texinfo
9371 texlive-bin
9372 texlive-polyglossia
9373 texlive-xindy))))
9374
9375 (define-public python-urwid
9376 (package
9377 (name "python-urwid")
9378 (version "2.1.2")
9379 (source
9380 (origin
9381 (method url-fetch)
9382 (uri (pypi-uri "urwid" version))
9383 (sha256
9384 (base32
9385 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
9386 (build-system python-build-system)
9387 (arguments
9388 (list
9389 #:phases
9390 #~(modify-phases %standard-phases
9391 (add-after 'unpack 'remove-vterm-tests
9392 ;; According to Debian these tests are cursed.
9393 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
9394 (lambda _
9395 (delete-file "urwid/tests/test_vterm.py"))))))
9396 (home-page "http://urwid.org")
9397 (synopsis "Console user interface library for Python")
9398 (description
9399 "Urwid is a curses-based UI/widget library for Python. It includes many
9400 features useful for text console applications.")
9401 (license license:lgpl2.1+)))
9402
9403 (define-public python-urwid-readline
9404 (package
9405 (name "python-urwid-readline")
9406 (version "0.13")
9407 (source
9408 (origin
9409 (method git-fetch)
9410 (uri (git-reference
9411 (url "https://github.com/rr-/urwid_readline")
9412 (commit version)))
9413 (file-name (git-file-name name version))
9414 (sha256
9415 (base32
9416 "0y9k86p31mlr9rwnrbljvfgl183r5j60yaj0r3scljn1m0mlg8qg"))))
9417 (build-system python-build-system)
9418 (arguments
9419 `(#:phases
9420 (modify-phases %standard-phases
9421 (replace 'check
9422 (lambda* (#:key tests? #:allow-other-keys)
9423 (when tests?
9424 (invoke "pytest" "-vv")))))))
9425 (propagated-inputs (list python-urwid))
9426 (native-inputs (list python-pytest))
9427 (home-page "https://github.com/rr-/urwid_readline")
9428 (synopsis "Text input widget for urwid that supports readline shortcuts")
9429 (description
9430 "This package provides a textbox edit widget for @code{python-urwid} that
9431 supports @code{readline} shortcuts.")
9432 (license license:expat)))
9433
9434 (define-public python-textdistance
9435 (package
9436 (name "python-textdistance")
9437 (version "4.2.1")
9438 (source
9439 (origin
9440 ;; There are no tests in the PyPI tarball.
9441 (method git-fetch)
9442 (uri (git-reference
9443 (url "https://github.com/life4/textdistance")
9444 (commit (string-append "v." version))))
9445 (file-name (git-file-name name version))
9446 (sha256
9447 (base32 "1g17i356fnny4k6hjr2ayy9k77jbvd6zzmngws2kbrnvhss1wgwf"))))
9448 (build-system python-build-system)
9449 (arguments
9450 `(#:test-target "pytest"
9451 #:phases
9452 (modify-phases %standard-phases
9453 (add-after 'unpack 'delete-external-test
9454 (lambda _
9455 ;; All tests in this file require external libraries.
9456 (delete-file "tests/test_external.py")
9457 #t)))))
9458 (native-inputs
9459 (list python-hypothesis
9460 python-isort
9461 python-numpy
9462 python-pytest
9463 python-pytest-runner
9464 python-tabulate))
9465 (home-page "https://github.com/life4/textdistance")
9466 (synopsis "Compute distance between the two texts")
9467 (description "@code{textdistance} is a pure Python library for comparing
9468 distance between two or more sequences by many algorithms.")
9469 (license license:expat)))
9470
9471 (define-public python-urwidtrees
9472 (package
9473 (name "python-urwidtrees")
9474 (version "1.0.3")
9475 (source
9476 (origin
9477 (method git-fetch)
9478 ;; package author intends on distributing via github rather than pypi:
9479 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
9480 (uri (git-reference
9481 (url "https://github.com/pazz/urwidtrees")
9482 (commit version)))
9483 (file-name (git-file-name name version))
9484 (sha256
9485 (base32
9486 "1y1vysx7jg0vbrarlsykhf7nmr8fc6k1fva1q3i98xq2m30s6r68"))))
9487 (build-system python-build-system)
9488 (arguments
9489 '(#:tests? #f)) ; no tests
9490 (propagated-inputs (list python-urwid))
9491 (native-inputs (list python-mock))
9492 (home-page "https://github.com/pazz/urwidtrees")
9493 (synopsis "Tree widgets for urwid")
9494 (description "Urwidtrees is a Widget Container API for the @code{urwid}
9495 toolkit. Use it to build trees of widgets.")
9496 (license license:gpl3+)))
9497
9498 (define-public python-ua-parser
9499 (package
9500 (name "python-ua-parser")
9501 (version "0.10.0")
9502 (source
9503 (origin
9504 (method url-fetch)
9505 (uri (pypi-uri "ua-parser" version))
9506 (sha256
9507 (base32
9508 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
9509 (build-system python-build-system)
9510 (arguments
9511 `(#:tests? #f)) ;no test suite in release
9512 (native-inputs
9513 (list python-pyyaml))
9514 (home-page "https://github.com/ua-parser/uap-python")
9515 (synopsis "User agent parser")
9516 (description
9517 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
9518 (license license:asl2.0)))
9519
9520 (define-public python-user-agents
9521 (package
9522 (name "python-user-agents")
9523 (version "2.2.0")
9524 (source
9525 (origin
9526 (method url-fetch)
9527 (uri (pypi-uri "user-agents" version))
9528 (sha256
9529 (base32
9530 "09mddriffm9rkwr30081fy9n3cn976ms8pwc8p8hhlxnilbjavfk"))))
9531 (build-system python-build-system)
9532 (arguments
9533 `(#:tests? #f)) ;missing devices.json test file in release
9534 (propagated-inputs
9535 (list python-ua-parser))
9536 (home-page "https://github.com/selwin/python-user-agents")
9537 (synopsis "User Agent strings parsing library")
9538 (description
9539 "A library to identify devices (phones, tablets) and their capabilities by
9540 parsing (browser/HTTP) user agent strings.")
9541 (license license:expat)))
9542
9543 (define-public python-pydbus
9544 (package
9545 (name "python-pydbus")
9546 (version "0.6.0")
9547 (source
9548 (origin
9549 (method url-fetch)
9550 (uri (pypi-uri "pydbus" version))
9551 (sha256
9552 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
9553 (build-system python-build-system)
9554 (propagated-inputs (list python-pygobject))
9555 (home-page "https://github.com/LEW21/pydbus")
9556 (synopsis "Pythonic D-Bus library")
9557 (description "Pydbus provides a pythonic interface to the D-Bus
9558 message bus system. Pydbus can be used to access remote objects and
9559 also for object publication. It is based on PyGI, the Python GObject
9560 Introspection bindings, which is the recommended way to use GLib from Python.")
9561 (license license:lgpl2.1+)))
9562
9563 (define-public python-dbus
9564 (package
9565 (name "python-dbus")
9566 (version "1.2.18")
9567 (source
9568 (origin
9569 (method url-fetch)
9570 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
9571 "dbus-python-" version ".tar.gz"))
9572 (sha256
9573 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
9574 (build-system gnu-build-system)
9575 (native-inputs
9576 (list pkg-config))
9577 (inputs
9578 `(("python" ,python-wrapper)
9579 ("dbus-glib" ,dbus-glib)))
9580 (synopsis "Python bindings for D-bus")
9581 (description "python-dbus provides bindings for libdbus, the reference
9582 implementation of D-Bus.")
9583 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
9584 (properties `((python2-variant . ,(delay python2-dbus))))
9585 (license license:expat)))
9586
9587 (define-public python2-dbus
9588 (package/inherit python-dbus
9589 (name "python2-dbus")
9590 (inputs `(("python" ,python-2)
9591 ,@(alist-delete "python"
9592 (package-inputs python-dbus))))
9593 (arguments
9594 `(#:configure-flags '("PYTHON_VERSION=2")))))
9595
9596 (define-public python-dbus-next
9597 (package
9598 (name "python-dbus-next")
9599 (version "0.2.3")
9600 (source
9601 (origin
9602 (method git-fetch)
9603 (uri (git-reference
9604 (url "https://github.com/altdesktop/python-dbus-next")
9605 (commit (string-append "v" version))))
9606 (file-name (git-file-name name version))
9607 (sha256
9608 (base32
9609 "1ahaz52kny1p9xxv6phvk4iq56rg8li390wywlxf2yslaij1188h"))))
9610 (build-system python-build-system)
9611 (native-inputs
9612 (list python-pytest))
9613 (home-page "https://github.com/altdesktop/python-dbus-next")
9614 (synopsis "Zero-dependency DBus library for Python with asyncio support")
9615 (description
9616 "This DBus library for Python aims to be a fully-featured high-level
9617 library primarily geared towards integration of applications into desktop and
9618 mobile environments.")
9619 (license license:expat)))
9620
9621 (define-public python-notify2
9622 (package
9623 (name "python-notify2")
9624 (version "0.3.1")
9625 (source
9626 (origin
9627 (method url-fetch)
9628 (uri (pypi-uri "notify2" version))
9629 (sha256
9630 (base32
9631 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
9632 (build-system python-build-system)
9633 (arguments `(#:tests? #f)) ; tests depend on system state
9634 (propagated-inputs
9635 (list python-dbus))
9636 (home-page "https://bitbucket.org/takluyver/pynotify2")
9637 (synopsis "Python interface to D-Bus notifications")
9638 (description
9639 "Pynotify2 provides a Python interface for sending D-Bus notifications.
9640 It is a reimplementation of pynotify in pure Python, and an alternative to
9641 the GObject Introspection bindings to libnotify for non-GTK applications.")
9642 (license (list license:bsd-2
9643 license:lgpl2.1+))))
9644
9645 ;; beautifulsoup4 has a totally different namespace than 3.x,
9646 ;; and pypi seems to put it under its own name, so I guess we should too
9647 (define-public python-beautifulsoup4
9648 (package
9649 (name "python-beautifulsoup4")
9650 (version "4.11.1")
9651 (source
9652 (origin
9653 (method url-fetch)
9654 (uri (pypi-uri "beautifulsoup4" version))
9655 (sha256
9656 (base32
9657 "14v68cpfzckfz63n9hnbsm271jvzvxscyijz83mhha7gcmdsb6md"))))
9658 (build-system python-build-system)
9659 (arguments
9660 '(#:phases (modify-phases %standard-phases
9661 (replace 'check
9662 (lambda* (#:key tests? #:allow-other-keys)
9663 (when tests?
9664 (invoke "pytest" "-vv")))))))
9665 (native-inputs
9666 (list python-pytest))
9667 (propagated-inputs
9668 (list python-soupsieve python-html5lib python-lxml))
9669 (home-page
9670 "https://www.crummy.com/software/BeautifulSoup/bs4/")
9671 (synopsis
9672 "Python screen-scraping library")
9673 (description
9674 "Beautiful Soup is a Python library designed for rapidly setting up
9675 screen-scraping projects. It offers Pythonic idioms for navigating,
9676 searching, and modifying a parse tree, providing a toolkit for
9677 dissecting a document and extracting what you need. It automatically
9678 converts incoming documents to Unicode and outgoing documents to UTF-8.")
9679 (license license:expat)))
9680
9681 (define-public python-soupsieve
9682 (package
9683 (name "python-soupsieve")
9684 (version "2.2.1")
9685 (source
9686 (origin
9687 (method url-fetch)
9688 (uri (pypi-uri "soupsieve" version))
9689 (sha256
9690 (base32
9691 "1k70gpn2d3vgdyxbdy536dgm4kchcraxz6lmgsfg3324iy2789q5"))))
9692 (build-system python-build-system)
9693 (arguments
9694 ;;XXX: 2 tests fail currently despite claming they were to be
9695 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
9696 ;;don't want to create a circular dependency.
9697 (list #:tests? #f
9698 #:phases
9699 #~(modify-phases %standard-phases
9700 ;; Circular dependency with python-beautifulsoup4.
9701 (delete 'sanity-check))))
9702 (home-page "https://github.com/facelessuser/soupsieve")
9703 (synopsis "CSS selector library")
9704 (description
9705 "Soup Sieve is a CSS selector library designed to be used with Beautiful
9706 Soup 4. It aims to provide selecting, matching, and filtering using modern
9707 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
9708 specifications up through the latest CSS level 4 drafts and beyond (though
9709 some are not yet implemented).")
9710 (license license:expat)))
9711
9712
9713 (define-public python-netifaces
9714 (package
9715 (name "python-netifaces")
9716 (version "0.11.0")
9717 (source
9718 (origin
9719 (method url-fetch)
9720 (uri (pypi-uri "netifaces" version))
9721 (sha256
9722 (base32
9723 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
9724 (build-system python-build-system)
9725 (home-page "https://github.com/al45tair/netifaces")
9726 (synopsis
9727 "Python module for portable network interface information")
9728 (description
9729 "Netifaces is a Python module providing information on network
9730 interfaces in an easy and portable manner.")
9731 (license license:expat)))
9732
9733 (define-public python-networkx
9734 (package
9735 (name "python-networkx")
9736 (version "2.8.6")
9737 (source
9738 (origin
9739 (method url-fetch)
9740 (uri (pypi-uri "networkx" version))
9741 (sha256
9742 (base32 "19h18f5j79l7kmwm5cvm75fadjgmkzw5m3pyvb9cnq0860q7faxx"))))
9743 (build-system python-build-system)
9744 (arguments
9745 '(#:phases (modify-phases %standard-phases
9746 (replace 'check
9747 (lambda* (#:key tests? #:allow-other-keys)
9748 (if tests?
9749 (invoke "pytest" "-vv" "--pyargs" "networkx")
9750 (format #t "test suite not run~%")) #t)))))
9751 (propagated-inputs (list python-decorator))
9752 (native-inputs (list python-pytest))
9753 (home-page "https://networkx.github.io/")
9754 (synopsis
9755 "Python module for creating and manipulating graphs and networks")
9756 (description
9757 "NetworkX is a Python package for the creation, manipulation, and study
9758 of the structure, dynamics, and functions of complex networks.")
9759 (license license:bsd-3)))
9760
9761
9762 (define-public python-datrie
9763 (package
9764 (name "python-datrie")
9765 (version "0.8.2")
9766 (source
9767 (origin
9768 (method url-fetch)
9769 (uri (pypi-uri "datrie" version))
9770 (sha256
9771 (base32
9772 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
9773 (build-system python-build-system)
9774 (native-inputs
9775 (list python-cython python-hypothesis python-pytest
9776 python-pytest-runner))
9777 (home-page "https://github.com/kmike/datrie")
9778 (synopsis "Fast, efficiently stored trie for Python")
9779 (description
9780 "This package provides a fast, efficiently stored trie implementation for
9781 Python.")
9782 (license license:lgpl2.1+)))
9783
9784 (define-public python-amply
9785 (package
9786 (name "python-amply")
9787 (version "0.1.4")
9788 (source
9789 (origin
9790 (method url-fetch)
9791 (uri (pypi-uri "amply" version))
9792 (sha256
9793 (base32
9794 "0f1db9zp0rsfzxvaz55xwh8h5rfdgr9a2a715g06ic8nknsdq4nb"))))
9795 (build-system python-build-system)
9796 (propagated-inputs
9797 (list python-docutils python-pyparsing))
9798 (native-inputs
9799 (list python-setuptools-scm))
9800 (home-page "https://github.com/willu47/amply")
9801 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
9802 (description
9803 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
9804 structures.")
9805 (license license:epl1.0)))
9806
9807 (define-public python-pulp
9808 (package
9809 (name "python-pulp")
9810 (version "2.4")
9811 (source
9812 (origin
9813 (method url-fetch)
9814 (uri (pypi-uri "PuLP" version))
9815 (sha256
9816 (base32
9817 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
9818 (build-system python-build-system)
9819 (propagated-inputs
9820 (list python-amply))
9821 (home-page "https://github.com/coin-or/pulp")
9822 (synopsis "Linear Programming modeler")
9823 (description
9824 "PuLP is a Linear Programming modeler written in Python. PuLP can
9825 generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
9826 solve linear problems.")
9827 (license license:expat)))
9828
9829 (define-public python-py-tes
9830 (package
9831 (name "python-py-tes")
9832 (version "0.4.2")
9833 (source
9834 (origin
9835 (method url-fetch)
9836 (uri (pypi-uri "py-tes" version))
9837 (sha256
9838 (base32 "0b272y392v0mnq0f3sm5kgcx8fn4qwfbym89hhvqxz3xkganr4pn"))))
9839 (build-system python-build-system)
9840 (propagated-inputs
9841 (list python-attrs python-dateutil python-future python-requests))
9842 (home-page "https://github.com/ohsu-comp-bio/py-tes")
9843 (synopsis "Library for communicating with the GA4GH Task Execution API")
9844 (description "This package provides a library for communicating with the
9845 GA4GH Task Execution API.")
9846 (license license:expat)))
9847
9848 (define-public python-toposort
9849 (package
9850 (name "python-toposort")
9851 (version "1.6")
9852 (source
9853 (origin
9854 (method url-fetch)
9855 (uri (pypi-uri "toposort" version))
9856 (sha256
9857 (base32
9858 "1b2hppzjg3p006qya3yfdnp76dwq8frl97lypdam0kw4xxb8yhm7"))))
9859 (build-system python-build-system)
9860 (home-page "https://gitlab.com/ericvsmith/toposort")
9861 (synopsis "Topological sort algorithm")
9862 (description
9863 "This package provides an implementation of a topological sort
9864 algorithm.")
9865 (license license:asl2.0)))
9866
9867 (define-public python-three-merge
9868 (package
9869 (name "python-three-merge")
9870 (version "0.1.1")
9871 (source
9872 (origin
9873 ;; There are no tests in the PyPI tarball.
9874 (method git-fetch)
9875 (uri (git-reference
9876 (url "https://github.com/spyder-ide/three-merge")
9877 (commit (string-append "v" version))))
9878 (file-name (git-file-name name version))
9879 (sha256
9880 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
9881 (build-system python-build-system)
9882 (arguments
9883 `(#:test-target "pytest"))
9884 (propagated-inputs
9885 (list python-diff-match-patch))
9886 (native-inputs
9887 (list python-flaky python-pytest python-pytest-cov
9888 python-pytest-runner python-pytest-timeout))
9889 (home-page "https://github.com/spyder-ide/three-merge")
9890 (synopsis "Library for merging two strings with respect to a base one")
9891 (description
9892 "This package provides a Python library to perform a 3-way merge between
9893 strings, based on @code{diff-match-patch}. This library performs merges at a
9894 character level, as opposed to most VCS systems, which opt for a line-based
9895 approach.")
9896 (license license:expat)))
9897
9898 (define-public snakemake
9899 (package
9900 (name "snakemake")
9901 (version "5.32.2")
9902 (source
9903 (origin
9904 (method url-fetch)
9905 (uri (pypi-uri "snakemake" version))
9906 (sha256
9907 (base32 "13013gdavwvyj1qr9xfi9fpwhb3km8c3z53bja5b7ic3sb2z6dgz"))))
9908 (build-system python-build-system)
9909 (arguments
9910 ;; TODO: Package missing test dependencies.
9911 '(#:tests? #f
9912 #:phases
9913 (modify-phases %standard-phases
9914 ;; For cluster execution Snakemake will call Python. Since there is
9915 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
9916 ;; this by calling the snakemake wrapper instead.
9917 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
9918 (lambda* (#:key outputs #:allow-other-keys)
9919 (substitute* "snakemake/executors/__init__.py"
9920 (("\\{sys.executable\\} -m snakemake")
9921 (string-append (assoc-ref outputs "out")
9922 "/bin/snakemake")))
9923 #t)))))
9924 (propagated-inputs
9925 (list python-appdirs
9926 python-configargparse
9927 python-datrie
9928 python-docutils
9929 python-gitpython
9930 python-jinja2
9931 python-jsonschema
9932 python-nbformat
9933 python-networkx
9934 python-psutil
9935 python-pulp
9936 python-pyyaml
9937 python-ratelimiter
9938 python-requests
9939 python-toposort
9940 python-wrapt))
9941 (home-page "https://snakemake.readthedocs.io")
9942 (synopsis "Python-based execution environment for make-like workflows")
9943 (description
9944 "Snakemake aims to reduce the complexity of creating workflows by
9945 providing a clean and modern domain specific specification language (DSL) in
9946 Python style, together with a fast and comfortable execution environment.")
9947 (license license:expat)))
9948
9949 (define-public snakemake-6
9950 (package
9951 (inherit snakemake)
9952 (name "snakemake")
9953 (version "6.15.5")
9954 (source
9955 (origin
9956 (method git-fetch)
9957 (uri (git-reference
9958 (url "https://github.com/snakemake/snakemake")
9959 (commit (string-append "v" version))))
9960 (file-name (git-file-name name version))
9961 (sha256
9962 (base32 "09yrpi9f86r9yvcm2dfjs5zy87c4j31bxama77kfd6y8yfrrjlai"))))
9963 (build-system python-build-system)
9964 (arguments
9965 '(#:phases
9966 (modify-phases %standard-phases
9967 ;; For cluster execution Snakemake will call Python. Since there is
9968 ;; no suitable GUIX_PYTHONPATH set, cluster execution will fail. We
9969 ;; fix this by calling the snakemake wrapper instead.
9970
9971 ;; XXX: There is another instance of sys.executable on line 692, but
9972 ;; it is not clear how to patch it.
9973 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
9974 (lambda* (#:key outputs #:allow-other-keys)
9975 (substitute* "snakemake/executors/__init__.py"
9976 (("\\{sys.executable\\} -m snakemake")
9977 (string-append (assoc-ref outputs "out")
9978 "/bin/snakemake")))))
9979 (replace 'check
9980 (lambda* (#:key tests? #:allow-other-keys)
9981 (when tests?
9982 (setenv "HOME" "/tmp")
9983 ;; This test attempts to change S3 buckets on AWS and fails
9984 ;; because there are no AWS credentials.
9985 (delete-file "tests/test_tibanna.py")
9986 (invoke "pytest")))))))
9987 (propagated-inputs
9988 (list python-appdirs
9989 python-configargparse
9990 python-connection-pool
9991 python-datrie
9992 python-docutils
9993 python-filelock
9994 python-gitpython
9995 python-jinja2
9996 python-jsonschema
9997 python-nbformat
9998 python-networkx
9999 python-psutil
10000 python-pulp
10001 python-pyyaml
10002 python-py-tes
10003 python-ratelimiter
10004 python-requests
10005 python-smart-open
10006 python-stopit
10007 python-tabulate
10008 python-toposort
10009 python-wrapt))
10010 (native-inputs
10011 (list git-minimal
10012 python-wrapper
10013 python-pytest
10014 python-pandas
10015 python-requests-mock))))
10016
10017 (define-public snakemake-7
10018 (package
10019 (inherit snakemake-6)
10020 (name "snakemake")
10021 (version "7.7.0")
10022 (source
10023 (origin
10024 (method git-fetch)
10025 (uri (git-reference
10026 (url "https://github.com/snakemake/snakemake")
10027 (commit (string-append "v" version))))
10028 (file-name (git-file-name name version))
10029 (sha256
10030 (base32 "1qrqbmx4cbis0wxr6dl2rdjv9v627sbirsz6v5c31vlbqwkvs04q"))))
10031 (build-system python-build-system)
10032 (arguments
10033 '(#:phases
10034 (modify-phases %standard-phases
10035 ;; For cluster execution Snakemake will call Python. Since there is
10036 ;; no suitable GUIX_PYTHONPATH set, cluster execution will fail. We
10037 ;; fix this by calling the snakemake wrapper instead.
10038 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
10039 (lambda* (#:key outputs #:allow-other-keys)
10040 (substitute* "snakemake/executors/__init__.py"
10041 (("self\\.get_python_executable\\(\\),")
10042 "")
10043 (("\"-m snakemake\"")
10044 (string-append "\"" (assoc-ref outputs "out")
10045 "/bin/snakemake" "\"")))))
10046 (replace 'check
10047 (lambda* (#:key tests? #:allow-other-keys)
10048 (when tests?
10049 (setenv "HOME" "/tmp")
10050 ;; This test attempts to change S3 buckets on AWS and fails
10051 ;; because there are no AWS credentials.
10052 (delete-file "tests/test_tibanna.py")
10053 ;; It's a similar story with this test, which requires access
10054 ;; to the Google Storage service.
10055 (delete-file "tests/test_google_lifesciences.py")
10056 (invoke "pytest")))))))
10057 (propagated-inputs
10058 (list python-appdirs
10059 python-configargparse
10060 python-connection-pool
10061 python-datrie
10062 python-docutils
10063 python-filelock
10064 python-gitpython
10065 python-jinja2
10066 python-jsonschema
10067 python-nbformat
10068 python-networkx
10069 python-psutil
10070 python-pulp
10071 python-pyyaml
10072 python-py-tes
10073 python-ratelimiter
10074 python-requests
10075 python-retry
10076 python-smart-open
10077 python-stopit
10078 python-tabulate
10079 python-toposort
10080 python-wrapt
10081 python-yte))
10082 (native-inputs
10083 (list git-minimal
10084 python-wrapper
10085 python-pytest
10086 python-pandas
10087 python-requests-mock))))
10088
10089 (define-public python-pyqrcode
10090 (package
10091 (name "python-pyqrcode")
10092 (version "1.2.1")
10093 (source
10094 (origin
10095 (method url-fetch)
10096 (uri (pypi-uri "PyQRCode" version))
10097 (sha256
10098 (base32
10099 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
10100 (build-system python-build-system)
10101 (home-page
10102 "https://github.com/mnooner256/pyqrcode")
10103 (synopsis "QR code generator")
10104 (description
10105 "Pyqrcode is a QR code generator written purely in Python with
10106 SVG, EPS, PNG and terminal output.")
10107 (license license:bsd-3)))
10108
10109 (define-public python-seaborn
10110 (package
10111 (name "python-seaborn")
10112 (version "0.11.2")
10113 (source (origin
10114 (method url-fetch)
10115 (uri (pypi-uri "seaborn" version))
10116 (sha256
10117 (base32
10118 "1xpl3zb945sihsiwm9q1yyx84sakk1phcg0fprj6i0j0dllfjifg"))
10119 (patches (search-patches "python-seaborn-kde-test.patch"
10120 "python-seaborn-2690.patch"))))
10121 (build-system python-build-system)
10122 (arguments
10123 `(#:phases (modify-phases %standard-phases
10124 (add-after 'unpack 'patch-more-tests
10125 (lambda _
10126 (substitute* "seaborn/tests/test_distributions.py"
10127 (("get_contour_color\\(ax\\.collections\\[0\\]\\)")
10128 "get_contour_color(ax.collections[0])")
10129 (("c\\.get_color\\(\\)") "get_contour_color(c)")
10130 (("def test_hue_ignores_cmap")
10131 "def skip_test_hue_ignores_cmap")
10132 (("def test_fill_artists")
10133 "def skip_test_fill_artists")
10134 (("def test_with_rug") "def skip_test_with_rug"))))
10135 (add-before 'check 'start-xserver
10136 (lambda _
10137 (system "Xvfb :1 &")
10138 (setenv "DISPLAY" ":1")))
10139 (replace 'check
10140 (lambda* (#:key tests? #:allow-other-keys)
10141 (when tests?
10142 (invoke "pytest" "seaborn")))))))
10143 (propagated-inputs (list python-pandas python-matplotlib python-numpy
10144 python-scipy))
10145 (native-inputs (list python-pytest xorg-server-for-tests))
10146 (home-page "https://seaborn.pydata.org/")
10147 (synopsis "Statistical data visualization")
10148 (description
10149 "Seaborn is a library for making attractive and informative statistical
10150 graphics in Python. It is built on top of matplotlib and tightly integrated
10151 with the PyData stack, including support for numpy and pandas data structures
10152 and statistical routines from scipy and statsmodels.")
10153 (license license:bsd-3)))
10154
10155
10156 (define-public python-session-info
10157 (package
10158 (name "python-session-info")
10159 (version "1.0.0")
10160 (source (origin
10161 (method url-fetch)
10162 (uri (pypi-uri "session_info" version))
10163 (sha256
10164 (base32
10165 "1dxnrgaxd2nb44n423mnrx119hmnh2yxdnzaw8mg60x7rh1mxniw"))))
10166 (build-system python-build-system)
10167 (propagated-inputs (list python-stdlib-list))
10168 (home-page "https://gitlab.com/joelostblom/session_info")
10169 (synopsis "Output version information for modules currently loaded")
10170 (description
10171 "This package outputs version information for modules loaded in the current
10172 session, Python, and the OS.")
10173 (license license:bsd-3)))
10174
10175 (define-public python-mpmath
10176 (package
10177 (name "python-mpmath")
10178 (version "1.2.1")
10179 (source (origin
10180 (method git-fetch)
10181 (uri (git-reference
10182 (url "https://github.com/fredrik-johansson/mpmath")
10183 (commit "c6a35f9ee7c294bcf4e0517bc76b268843db9499")))
10184 (file-name (git-file-name name version))
10185 (sha256
10186 (base32
10187 "0ifw59fjjls3mas104rh0frilvab2fhk1dkjraxlqni5n9l676im"))))
10188 (build-system python-build-system)
10189 (arguments
10190 `(#:phases
10191 (modify-phases %standard-phases
10192 (add-before 'build 'set-version
10193 (lambda _
10194 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)
10195 ;; ZIP does not support timestamps before 1980.
10196 (setenv "SOURCE_DATE_EPOCH" "315532800")))
10197 (replace 'check
10198 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
10199 (when tests?
10200 (add-installed-pythonpath inputs outputs)
10201 (invoke "pytest" "-vv")))))))
10202 (native-inputs
10203 (list python-pytest python-setuptools-scm))
10204 (home-page "https://mpmath.org")
10205 (synopsis "Arbitrary-precision floating-point arithmetic in python")
10206 (description
10207 "@code{mpmath} can be used as an arbitrary-precision substitute for
10208 Python's float/complex types and math/cmath modules, but also does much
10209 more advanced mathematics.")
10210 (license license:bsd-3)))
10211
10212 (define-public python-bigfloat
10213 (package
10214 (name "python-bigfloat")
10215 (version "0.3.0")
10216 (source
10217 (origin
10218 (method url-fetch)
10219 (uri (pypi-uri "bigfloat" version))
10220 (sha256
10221 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
10222 (build-system python-build-system)
10223 (inputs
10224 (list mpfr))
10225 (home-page "https://github.com/mdickinson/bigfloat")
10226 (synopsis "Arbitrary precision floating-point arithmetic for Python")
10227 (description
10228 "This package provides a Python interface to the MPFR library for
10229 multiprecision arithmetic.")
10230 (license license:lgpl3+)))
10231
10232 (define-public python-plac
10233 (package
10234 (name "python-plac")
10235 (version "1.3.5")
10236 (source
10237 (origin
10238 (method url-fetch)
10239 (uri (pypi-uri "plac" version))
10240 (sha256
10241 (base32 "1410h6jw1ksi24kb55xzkwqzba2qqjwiga1s354bf3s5s1jdig9q"))))
10242 (build-system python-build-system)
10243 (arguments
10244 '(#:phases
10245 (modify-phases %standard-phases
10246 (add-after 'unpack 'fix-tkinter
10247 (lambda _
10248 (substitute* "plac_tk.py"
10249 (("from Tkinter import Tk")
10250 "from tkinter import Tk")
10251 (("from ScrolledText import ScrolledText")
10252 "from tkinter.scrolledtext import ScrolledText")))))))
10253 (native-inputs
10254 `(("python-tkinter" ,python "tk")))
10255 (home-page "https://github.com/ialbert/plac")
10256 (synopsis "Command line arguments parser")
10257 (description "This package can generate command line parameters from
10258 function signatures.")
10259 (license license:bsd-3)))
10260
10261 (define-public python-yte
10262 (package
10263 (name "python-yte")
10264 (version "1.2.0")
10265 (source
10266 (origin
10267 (method url-fetch)
10268 (uri (pypi-uri "yte" version))
10269 (sha256
10270 (base32 "07hm1warpqi4ifqgkaz5sg887x4a44yhxafmpf835ywnpchg4s03"))))
10271 (build-system python-build-system)
10272 (arguments
10273 '(#:phases
10274 (modify-phases %standard-phases
10275 (add-after 'unpack 'set-HOME
10276 (lambda _ (setenv "HOME" "/tmp"))))))
10277 (propagated-inputs (list python-plac python-pyyaml))
10278 (home-page "https://github.com/koesterlab/yte")
10279 (synopsis "YAML template engine with Python expressions")
10280 (description
10281 "This package provides a YAML template engine with Python expressions.")
10282 (license license:expat)))
10283
10284 (define-public python-syllables
10285 (package
10286 (name "python-syllables")
10287 (version "1.0.3")
10288 (source (origin
10289 (method url-fetch)
10290 (uri (pypi-uri "syllables" version))
10291 (sha256
10292 (base32
10293 "0wkl6h0rg6fbsxfp0a8fnibf3l4l6lbh6z12cvcilgb6qhxzpmv3"))))
10294 (build-system python-build-system)
10295 (home-page "https://github.com/prosegrinder/python-syllables")
10296 (synopsis "Package for estimating the number of syllables in a word")
10297 (description
10298 "This package provides a Python package for estimating the number of
10299 syllables in a word.")
10300 (license license:gpl3)))
10301
10302 (define-public python-sympy
10303 (package
10304 (name "python-sympy")
10305 (version "1.11.1")
10306 (source
10307 (origin
10308 (method url-fetch)
10309 (uri (pypi-uri "sympy" version))
10310 (sha256
10311 (base32 "0n46x1rfy8c2a9za3yp2va5icigxj805f9fmiq8c1drwwvf808z3"))))
10312 (build-system python-build-system)
10313 (arguments
10314 `(#:phases
10315 (modify-phases %standard-phases
10316 (replace 'check
10317 (lambda* (#:key outputs #:allow-other-keys)
10318 (invoke
10319 (or (which "python3") (which "python"))
10320 "-c" "import sympy; sympy.test(\"/core\")"))))))
10321 (propagated-inputs
10322 (list python-mpmath))
10323 (home-page "https://www.sympy.org/")
10324 (synopsis "Python library for symbolic mathematics")
10325 (description
10326 "SymPy is a Python library for symbolic mathematics. It aims to become a
10327 full-featured computer algebra system (CAS) while keeping the code as simple
10328 as possible in order to be comprehensible and easily extensible.")
10329 (license license:bsd-3)))
10330
10331 (define-public python-q
10332 (package
10333 (name "python-q")
10334 (version "2.6")
10335 (source
10336 (origin
10337 (method url-fetch)
10338 (uri (pypi-uri "q" version))
10339 (sha256
10340 (base32
10341 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
10342 (build-system python-build-system)
10343 (home-page "https://github.com/zestyping/q")
10344 (synopsis "Quick-and-dirty debugging output for tired programmers")
10345 (description
10346 "q is a Python module for \"print\" style of debugging Python code. It
10347 provides convenient short API for print out of values, tracebacks, and
10348 falling into the Python interpreter.")
10349 (license license:asl2.0)))
10350
10351 (define-public python-xlib
10352 (package
10353 (name "python-xlib")
10354 (version "0.29")
10355 (source
10356 (origin
10357 (method git-fetch)
10358 (uri (git-reference
10359 (url "https://github.com/python-xlib/python-xlib")
10360 (commit version)))
10361 (file-name (git-file-name name version))
10362 (sha256
10363 (base32 "17cwd2knqm2vwrii3kqii9abwsnydhpg4byqx1vy7rjs6i1vbqfc"))))
10364 (build-system python-build-system)
10365 (arguments
10366 `(#:phases
10367 (modify-phases %standard-phases
10368 (add-before 'check 'start-xserver
10369 (lambda* (#:key inputs #:allow-other-keys)
10370 (let ((xorg-server (assoc-ref inputs "xorg-server")))
10371 ;; There must be a running X server and make check doesn't
10372 ;; start one. Therefore we must do it.
10373 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
10374 (setenv "DISPLAY" ":1")
10375 #t))))))
10376 (native-inputs
10377 (list python-mock python-setuptools-scm xorg-server))
10378 (propagated-inputs
10379 (list python-six))
10380 (home-page "https://github.com/python-xlib/python-xlib")
10381 (synopsis "Python X11 client library")
10382 (description
10383 "The Python X Library is intended to be a fully functional
10384 X client library for Python programs. It is useful to implement
10385 low-level X clients. It is written entirely in Python.")
10386 (license license:gpl2+)))
10387
10388 (define-public python-singledispatch
10389 (package
10390 (name "python-singledispatch")
10391 (version "3.4.0.3")
10392 (source
10393 (origin
10394 (method url-fetch)
10395 (uri (pypi-uri "singledispatch" version))
10396 (sha256
10397 (base32
10398 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
10399 (build-system python-build-system)
10400 (native-inputs
10401 (list python-six)) ; required for conversion, not at run-time
10402 (home-page
10403 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
10404 (synopsis "Backport of singledispatch feature from Python 3.4")
10405 (description
10406 "This library brings functools.singledispatch from Python 3.4 to Python
10407 2.6-3.3.")
10408 (license license:expat)))
10409
10410 ;; the python- version can be removed with python-3.5
10411 (define-public python-backports-abc
10412 (package
10413 (name "python-backports-abc")
10414 (version "0.5")
10415 (source
10416 (origin
10417 (method url-fetch)
10418 (uri (pypi-uri "backports_abc" version))
10419 (sha256
10420 (base32
10421 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
10422 (build-system python-build-system)
10423 (home-page "https://github.com/cython/backports_abc")
10424 (synopsis "Backport of additions to the 'collections.abc' module")
10425 (description
10426 "Python-backports-abc provides a backport of additions to the
10427 @code{collections.abc} module in Python-3.5.")
10428 (license license:psfl)))
10429
10430 (define-public python-backports-csv
10431 (package
10432 (name "python-backports-csv")
10433 (version "1.0.7")
10434 (source
10435 (origin
10436 (method url-fetch)
10437 (uri (pypi-uri "backports.csv" version))
10438 (sha256
10439 (base32 "0vdx5jlhs91iizc8j8l8811nqprwvdx39pgkdc82w2qkfgzxyxqj"))))
10440 (build-system python-build-system)
10441 (home-page "https://github.com/ryanhiebert/backports.csv")
10442 (synopsis "Backport of Python 3's csv module for Python 2")
10443 (description
10444 "Provides a backport of Python 3's @code{csv} module for parsing
10445 comma separated values. The API of the @code{csv} module in Python 2
10446 is drastically different from the @code{csv} module in Python 3.
10447 This is due, for the most part, to the difference between str in
10448 Python 2 and Python 3.")
10449 (license license:psfl)))
10450
10451 (define-public python-waf
10452 (package
10453 (name "python-waf")
10454 (version "2.0.19")
10455 (source (origin
10456 (method url-fetch)
10457 (uri (string-append "https://waf.io/"
10458 "waf-" version ".tar.bz2"))
10459 (sha256
10460 (base32
10461 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
10462 (build-system python-build-system)
10463 (arguments
10464 '(#:phases
10465 (modify-phases %standard-phases
10466 (replace 'build
10467 (lambda _
10468 ;; XXX: Find a way to add all extra tools.
10469 (let ((tools '("gccdeps"
10470 "clang_compilation_database")))
10471 (invoke "python" "waf-light" "configure" "build"
10472 (string-append "--tools="
10473 (string-join tools ","))))))
10474 (replace 'check
10475 (lambda _
10476 (invoke "python" "waf" "--version")))
10477 (replace 'install
10478 (lambda* (#:key outputs #:allow-other-keys)
10479 (let ((out (assoc-ref outputs "out")))
10480 (install-file "waf" (string-append out "/bin")))
10481 #t))
10482 ;; waf breaks when it is wrapped.
10483 (delete 'wrap))))
10484 (home-page "https://waf.io/")
10485 (synopsis "Python-based build system")
10486 (description
10487 "Waf is a Python-based framework for configuring, compiling and installing
10488 applications.")
10489 (license license:bsd-3)))
10490
10491 (define-public python-pyzmq
10492 (package
10493 (name "python-pyzmq")
10494 (version "22.3.0")
10495 (source
10496 (origin
10497 (method url-fetch)
10498 (uri (pypi-uri "pyzmq" version))
10499 (sha256
10500 (base32 "0737kizh53n4rjq1xbm6nhr0bq65xflg04i1d8fcky0nwwrw1pcf"))
10501 (snippet
10502 #~(begin
10503 (use-modules (guix build utils))
10504 ;; The bundled zeromq source code.
10505 (delete-file-recursively "bundled")
10506 ;; Delete cythonized files.
10507 (for-each delete-file
10508 (list "zmq/backend/cython/constants.c"
10509 "zmq/backend/cython/context.c"
10510 "zmq/backend/cython/_device.c"
10511 "zmq/backend/cython/error.c"
10512 "zmq/backend/cython/message.c"
10513 "zmq/backend/cython/_poll.c"
10514 "zmq/backend/cython/_proxy_steerable.c"
10515 "zmq/backend/cython/socket.c"
10516 "zmq/backend/cython/utils.c"
10517 "zmq/backend/cython/_version.c"
10518 "zmq/devices/monitoredqueue.c"))))))
10519 (build-system python-build-system)
10520 (arguments
10521 `(#:configure-flags
10522 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
10523 #:phases
10524 (modify-phases %standard-phases
10525 (add-before 'check 'build-extensions
10526 (lambda _
10527 ;; Cython extensions have to be built before running the tests.
10528 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
10529 (inputs
10530 (list zeromq))
10531 (native-inputs
10532 (list pkg-config python-cython python-pytest))
10533 (home-page "https://github.com/zeromq/pyzmq")
10534 (synopsis "Python bindings for 0MQ")
10535 (description
10536 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
10537 (license license:bsd-4)))
10538
10539 (define-public python-immutabledict
10540 (package
10541 (name "python-immutabledict")
10542 (version "2.2.1")
10543 (source
10544 (origin
10545 (method url-fetch)
10546 (uri (pypi-uri "immutabledict" version))
10547 (sha256
10548 (base32 "0fpc4gbk7inpfbgdypsg6c18bmdjw8gwx47bjw0hvixn3gghxnqx"))))
10549 (build-system python-build-system)
10550 (arguments
10551 `(#:tests? #f)) ; no tests in PyPI release and no setup.py in GitHub
10552 (native-inputs
10553 (list python-pytest))
10554 (home-page "https://github.com/corenting/immutabledict")
10555 (synopsis "Immutable wrapper around dictionaries")
10556 (description
10557 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
10558 It implements the complete mapping interface and can be used as a drop-in
10559 replacement for dictionaries where immutability is desired.")
10560 (license license:expat)))
10561
10562 (define-public python-emoji
10563 (package
10564 (name "python-emoji")
10565 (version "1.6.1")
10566 (source
10567 (origin
10568 (method url-fetch)
10569 (uri (pypi-uri "emoji" version))
10570 (sha256
10571 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))
10572 (build-system python-build-system)
10573 (arguments
10574 `(#:phases
10575 (modify-phases %standard-phases
10576 (replace 'check
10577 (lambda* (#:key tests? #:allow-other-keys)
10578 (when tests?
10579 (invoke "python" "-m" "pytest")))))))
10580 (native-inputs
10581 (list python-pytest))
10582 (home-page "https://github.com/carpedm20/emoji/")
10583 (synopsis "Emoji terminal output for Python")
10584 (description "This package provides Emoji terminal output for Python. The
10585 entire set of Emoji codes as defined by the Unicode Consortium is supported in
10586 addition to a bunch of aliases.")
10587 (license license:bsd-3)))
10588
10589 (define-public python-sarge
10590 (package
10591 (name "python-sarge")
10592 (version "0.1.7.post1") ; post release only to correct errors in metadata
10593 (source
10594 (origin
10595 (method url-fetch)
10596 (uri (pypi-uri "sarge" version))
10597 (sha256
10598 (base32 "0g9a53mfnp96877n1yq2jdk1mcv3xm0d93iisvgcn2prdsp45zv4"))))
10599 (build-system python-build-system)
10600 (home-page "https://docs.red-dove.com/sarge/")
10601 (synopsis "Subprocess wrapper with command pipeline functionality")
10602 (description "@code{sarge} is a wrapper for subprocess which provides
10603 command pipeline functionality.")
10604 (license license:bsd-3)))
10605
10606 (define-public python-zipstream-new
10607 (package
10608 (name "python-zipstream-new")
10609 (version "1.1.8")
10610 (source
10611 (origin
10612 (method git-fetch) ; no tests in PyPI release
10613 (uri (git-reference
10614 (url "https://github.com/arjan-s/python-zipstream")
10615 (commit (string-append "v" version))))
10616 (file-name (git-file-name name version))
10617 (sha256
10618 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
10619 (build-system python-build-system)
10620 (native-inputs
10621 (list python-nose))
10622 (home-page "https://github.com/arjan-s/python-zipstream")
10623 (synopsis "Zipfile generator that takes input files as well as streams")
10624 (description "@code{zipstream.py} is a zip archive generator based on
10625 @code{zipfile.py}. It was created to generate a zip file generator for
10626 streaming. This is beneficial for when you want to provide a downloadable
10627 archive of a large collection of regular files, which would be infeasible
10628 to generate the archive prior to downloading or of a very large file that
10629 you do not want to store entirely on disk or on memory.")
10630 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
10631 (license license:gpl3)))
10632
10633 (define-public python-sentry-sdk
10634 (package
10635 (name "python-sentry-sdk")
10636 (version "1.5.1")
10637 (source
10638 (origin
10639 (method git-fetch) ; no tests in PyPI release
10640 (uri (git-reference
10641 (url "https://github.com/getsentry/sentry-python")
10642 (commit version)))
10643 (file-name (git-file-name name version))
10644 (sha256
10645 (base32 "128bm136l5zprr3sqqb8j3d6k5i1fhz853mzvh3w8g0w1dw763mx"))))
10646 (build-system python-build-system)
10647 (arguments
10648 `(#:phases
10649 (modify-phases %standard-phases
10650 (replace 'check
10651 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
10652 (when tests?
10653 (add-installed-pythonpath inputs outputs)
10654 (invoke "python" "-m" "pytest" "-k"
10655 (string-append
10656 ;; This test requires extra dependencies.
10657 "not test_auto_enabling_integrations"
10658 "_catches_import_error"
10659 ;; Tests below run pip command.
10660 " and not test_unhandled_exception"
10661 " and not test_timeout_error"
10662 " and not test_performance_no_error"
10663 " and not test_performance_error"
10664 " and not test_traces_sampler_gets_correct"
10665 "_values_in_sampling_context"
10666 " and not test_handled_exception"
10667 ;; Tests below require network.
10668 " and not test_crumb_capture"
10669 " and not test_crumb_capture"
10670 " and not test_crumb_capture_hint"
10671 " and not test_httplib_misuse"
10672 ;; Fails with IndexError.
10673 " and not test_session_mode_defaults_to"
10674 "_request_mode_in_wsgi_handler"))))))))
10675 (native-inputs
10676 (list python-django
10677 python-executing
10678 python-gevent
10679 python-jsonschema
10680 python-mock
10681 python-pyrsistent
10682 python-pytest
10683 python-pytest-cov
10684 python-pytest-django
10685 python-pytest-forked
10686 python-pytest-localserver
10687 python-werkzeug))
10688 (propagated-inputs
10689 (list python-certifi python-urllib3))
10690 (home-page "https://github.com/getsentry/sentry-python")
10691 (synopsis "Python SDK for Sentry")
10692 (description "This package provides a Python SDK for the Sentry
10693 application monitoring and error tracking software.")
10694 (license license:bsd-2)))
10695
10696 (define-public python-pep8
10697 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
10698 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
10699 ;; some dependents' test suites, and nothing more.
10700 (package
10701 (name "python-pep8")
10702 (version "1.7.0")
10703 (source
10704 (origin
10705 (method url-fetch)
10706 (uri (pypi-uri "pep8" version))
10707 (sha256
10708 (base32
10709 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
10710 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
10711 (build-system python-build-system)
10712 (home-page "https://pep8.readthedocs.org/")
10713 (synopsis "Python style guide checker")
10714 (description
10715 "This tools checks Python code against some of the style conventions in
10716 PEP 8.")
10717 (license license:expat)))
10718
10719 (define-public python-pep8-naming
10720 (package
10721 (name "python-pep8-naming")
10722 (version "0.13.0")
10723 (source
10724 (origin
10725 (method url-fetch)
10726 (uri (pypi-uri "pep8-naming" version))
10727 (sha256
10728 (base32
10729 "1dc0b6xw1cxp01v9zsv4ryk49rfs1lngfpvzsixgp8b7z3ffcf4z"))))
10730 (build-system python-build-system)
10731 (propagated-inputs (list python-flake8))
10732 (home-page "https://github.com/PyCQA/pep8-naming")
10733 (synopsis "Check PEP-8 naming conventions")
10734 (description
10735 "This package provides the @code{pep8-naming} Python module, a
10736 plugin for flake8 to check PEP-8 naming conventions.")
10737 (license license:expat)))
10738
10739 (define-public python-pep517
10740 (package
10741 (inherit python-pep517-bootstrap)
10742 (name "python-pep517")
10743 (arguments
10744 '(#:phases (modify-phases %standard-phases
10745 (replace 'check
10746 (lambda* (#:key tests? #:allow-other-keys)
10747 (delete-file "pytest.ini")
10748 (delete-file "tests/test_meta.py")
10749 (if tests?
10750 (invoke "pytest") #t))))))
10751 (native-inputs (list python-mock python-pytest python-testpath))))
10752
10753 (define-public python-pyproject-metadata
10754 (package
10755 (name "python-pyproject-metadata")
10756 (version "0.6.1")
10757 (source
10758 (origin
10759 (method git-fetch)
10760 (uri (git-reference
10761 (url "https://github.com/FFY00/python-pyproject-metadata")
10762 (commit version)))
10763 (file-name (git-file-name name version))
10764 (sha256
10765 (base32
10766 "00zahgw9zjfqwf0218bj5k732aibnn68cq1p8f0wmbirb7fy5k31"))))
10767 (build-system python-build-system)
10768 (arguments
10769 (list
10770 #:phases
10771 #~(modify-phases %standard-phases
10772 ;; XXX: PEP 517 manual build/install procedures copied from
10773 ;; python-isort.
10774 (replace 'build
10775 (lambda _
10776 ;; ZIP does not support timestamps before 1980.
10777 (setenv "SOURCE_DATE_EPOCH" "315532800")
10778 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
10779 (replace 'check
10780 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
10781 (when tests?
10782 (invoke "pytest" "-vv"
10783 ;; Two parameterized test_load tests are currently
10784 ;; failing (see:
10785 ;; https://github.com/FFY00/python-pep621/issues/14).
10786 "-k" "not test_load"))))
10787 (replace 'install
10788 (lambda* (#:key outputs #:allow-other-keys)
10789 (let ((whl (car (find-files "dist" "\\.whl$"))))
10790 (invoke "pip" "--no-cache-dir" "--no-input"
10791 "install" "--no-deps" "--prefix" #$output whl)))))))
10792 (propagated-inputs (list python-packaging))
10793 (native-inputs (list python-pypa-build python-pytest python-tomli))
10794 (home-page "https://github.com/FFY00/python-pyproject-metadata")
10795 (synopsis "Dataclass for PEP 621 metadata")
10796 (description "This project does not implement the parsing of
10797 @file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
10798 data structure representing PEP 621 metadata (already parsed), it will
10799 validate this input and generate a PEP 643-compliant metadata
10800 file (e.g. @file{PKG-INFO}).")
10801 (license license:expat)))
10802
10803 ;; pep621 was renamed to pyproject-metadata.
10804 (define-public python-pep621
10805 (deprecated-package "python-pep621" python-pyproject-metadata))
10806
10807 (define-public python-pyflakes
10808 (package
10809 (name "python-pyflakes")
10810 (version "2.4.0")
10811 (source
10812 (origin
10813 (method url-fetch)
10814 (uri (pypi-uri "pyflakes" version))
10815 (sha256
10816 (base32
10817 "0k5jn8jpxni264wxf6cc3xcd1qckc0pww30bsd77mwzdf8l5ra05"))))
10818 (build-system python-build-system)
10819 (home-page "https://github.com/PyCQA/pyflakes")
10820 (synopsis "Passive checker of Python programs")
10821 (description
10822 "Pyflakes statically checks Python source code for common errors.")
10823 (license license:expat)))
10824
10825 (define-public python-pyflakes-2.2
10826 (package
10827 (inherit python-pyflakes)
10828 (version "2.2.0")
10829 (source (origin
10830 (method url-fetch)
10831 (uri (pypi-uri "pyflakes" version))
10832 (sha256
10833 (base32
10834 "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))
10835 (patches
10836 (search-patches "python-pyflakes-test-location.patch"))))))
10837
10838 (define-public python-mccabe
10839 (package
10840 (name "python-mccabe")
10841 (version "0.6.1")
10842 (source
10843 (origin
10844 (method url-fetch)
10845 (uri (pypi-uri "mccabe" version))
10846 (sha256
10847 (base32
10848 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
10849 (build-system python-build-system)
10850 (native-inputs
10851 (list python-toml python-pytest-bootstrap python-pytest-runner))
10852 (home-page "https://github.com/PyCQA/mccabe")
10853 (synopsis "McCabe checker, plugin for flake8")
10854 (description "This package provides a Flake8 plug-in to compute the McCabe
10855 cyclomatic complexity of Python source code.")
10856 (license license:expat)))
10857
10858 (define-public python-flake8
10859 (package
10860 (name "python-flake8")
10861 (version "4.0.1")
10862 (source (origin
10863 (method url-fetch)
10864 (uri (pypi-uri "flake8" version))
10865 (sha256
10866 (base32
10867 "03c7mnk34wfz7a0m5zq0273y94awz69fy5iww8alh4a4v96h6vl0"))))
10868 (build-system python-build-system)
10869 (arguments
10870 `(#:phases (modify-phases %standard-phases
10871 (replace 'check
10872 (lambda* (#:key tests? #:allow-other-keys)
10873 (when tests?
10874 (invoke "pytest" "-v")))))))
10875 (propagated-inputs
10876 (list python-entrypoints
10877 python-mccabe
10878 python-pycodestyle
10879 python-pyflakes))
10880 (native-inputs (list python-pytest))
10881 (home-page "https://gitlab.com/pycqa/flake8")
10882 (synopsis "The modular source code checker: pep8, pyflakes and co")
10883 (description
10884 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
10885 (license license:expat)))
10886
10887 (define-public python-flake8-3.8
10888 (package
10889 (inherit python-flake8)
10890 (version "3.8.4")
10891 (source (origin
10892 (method url-fetch)
10893 (uri (pypi-uri "flake8" version))
10894 (sha256
10895 (base32
10896 "0fvcrsbyzjpcli8ldbpsdbpmf238nkvwc1dy4hy82lf63rvfinma"))))
10897 (propagated-inputs
10898 (list python-pycodestyle-2.6 python-entrypoints python-pyflakes-2.2
10899 python-mccabe))))
10900
10901 (define-public python-flake8-blind-except
10902 (package
10903 (name "python-flake8-blind-except")
10904 (version "0.2.1")
10905 (source
10906 (origin
10907 (method url-fetch)
10908 (uri (pypi-uri "flake8-blind-except" version))
10909 (sha256
10910 (base32 "05nxsxfzfhwsm8gys90228imm2qbnqnw5y8bfqyfngnbkmd5fnpj"))))
10911 (build-system python-build-system)
10912 (arguments
10913 `(#:tests? #f)) ; no tests
10914 (native-inputs (list python-pycodestyle))
10915 (home-page "https://github.com/elijahandrews/flake8-blind-except")
10916 (synopsis "Check for blind @code{except:} statements")
10917 (description "This package provides a flake8 extension that checks for
10918 blind @code{except:} statements.")
10919 (license license:expat)))
10920
10921 (define-public python-flake8-bugbear
10922 (package
10923 (name "python-flake8-bugbear")
10924 (version "20.1.4")
10925 (source
10926 (origin
10927 (method url-fetch)
10928 (uri (pypi-uri "flake8-bugbear" version))
10929 (sha256
10930 (base32
10931 "0qiihb242fygzyrfynq913ak7cdmx8mcac9c0zk3y5gv16qf80mx"))))
10932 (build-system python-build-system)
10933 (arguments
10934 '(#:phases
10935 (modify-phases %standard-phases
10936 (add-before 'check 'disable-test
10937 (lambda _
10938 ;; This test fails on slow computers.
10939 (substitute* "tests/test_bugbear.py"
10940 (("def test_does_not_crash_on_any_valid_code")
10941 "def _test_does_not_crash_on_any_valid_code")))))))
10942 (native-inputs
10943 (list python-hypothesis python-hypothesmith))
10944 (propagated-inputs
10945 (list python-attrs python-flake8))
10946 (home-page "https://github.com/PyCQA/flake8-bugbear")
10947 (synopsis
10948 "Flake8 plugin for finding likely bugs and design problems in your program")
10949 (description
10950 "This package contains a plugin for Flake8 finding likely bugs and
10951 design problems in your program. It contains warnings that don't belong
10952 in pyflakes and pycodestyle.")
10953 (license license:expat)))
10954
10955 (define-public python-flake8-continuation
10956 (package
10957 (name "python-flake8-continuation")
10958 (version "1.0.5")
10959 (source
10960 (origin
10961 (method url-fetch)
10962 (uri (pypi-uri "flake8-continuation" version))
10963 (sha256
10964 (base32
10965 "0dzaw8jr7yhlabxhrblnrizxx17xa9ngjnbr1kidg5lapq6b9q1y"))))
10966 (build-system python-build-system)
10967 (propagated-inputs
10968 (list python-flake8 python-pycodestyle python-six))
10969 (home-page "https://github.com/planetlabs/flake8-continuation")
10970 (synopsis "Flake8 Line Continuation Plugin")
10971 (description "A Flake8 plugin that checks for the line continuation
10972 style to be in the preferred method according to PEP-8, specifically:
10973 @quotation
10974 The preferred way of wrapping long lines is by using Python's implied
10975 line continuation inside parentheses, brackets and braces. Long lines
10976 can be broken over multiple lines by wrapping expressions in parentheses.
10977 These should be used in preference to using a backslash for line continuation.
10978 @end quotation")
10979 (license license:asl2.0)))
10980
10981 (define-public python-flake8-debugger
10982 (package
10983 (name "python-flake8-debugger")
10984 (version "4.1.2")
10985 (source
10986 (origin
10987 (method url-fetch)
10988 (uri (pypi-uri "flake8-debugger" version))
10989 (sha256
10990 (base32 "0h1qlzbxxhjsw6kg3mcml9h8byy77m9a5z06z2dnvqs115b05c2j"))))
10991 (build-system python-build-system)
10992 (arguments
10993 `(#:tests? #f)) ; no tests in PyPI and no setup.py in GitHub
10994 (propagated-inputs
10995 (list python-flake8 python-pycodestyle))
10996 (home-page "https://github.com/jbkahn/flake8-debugger")
10997 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
10998 (description "This package provides a Flake8 plugin that checks for
10999 @code{ipdb} and @code{pdb} imports and set traces, as well as
11000 @code{from IPython.terminal.embed}, @code{import InteractiveShellEmbed}
11001 and @code{InteractiveShellEmbed()()}.")
11002 (license license:expat)))
11003
11004 (define-public python-flake8-implicit-str-concat
11005 (package
11006 (name "python-flake8-implicit-str-concat")
11007 (version "0.2.0")
11008 (source
11009 (origin
11010 (method url-fetch)
11011 (uri (pypi-uri "flake8_implicit_str_concat" version))
11012 (sha256
11013 (base32 "1v0y29xlmbr2q12a4nnpm1dm9aw1mjiys1x8jif4z8c90d63cqm6"))))
11014 (build-system python-build-system)
11015 (arguments
11016 '(#:tests? #f ;no tests
11017 #:phases (modify-phases %standard-phases
11018 (add-after 'unpack 'loosen-requirements
11019 (lambda _
11020 ;; Permit newer versions of attrs. Remove for >0.2.
11021 (substitute* "setup.py"
11022 ((", <21") "")))))))
11023 (propagated-inputs
11024 (list python-attrs python-more-itertools))
11025 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
11026 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
11027 (description
11028 "This is a plugin for the Python code checking tool Flake8 to encourage
11029 correct string literal concatenation.
11030
11031 It looks for style problems like implicitly concatenated string literals on
11032 the same line (which can be introduced by the code formatting tool Black), or
11033 unnecessary plus operators for explicit string literal concatenation.")
11034 (license license:expat)))
11035
11036 (define-public python-flake8-print
11037 (package
11038 (name "python-flake8-print")
11039 (version "4.0.0")
11040 (source
11041 (origin
11042 (method url-fetch)
11043 (uri (pypi-uri "flake8-print" version))
11044 (sha256
11045 (base32 "05k5kkvyk6fdmvnacxfzypk74vbl3pmva13dqg1aljfwnxsc7yjs"))))
11046 (build-system python-build-system)
11047 (propagated-inputs
11048 (list python-flake8 python-pycodestyle python-six))
11049 (home-page "https://github.com/jbkahn/flake8-print")
11050 (synopsis "Print statement checker plugin for Flake8")
11051 (description
11052 "This plugin for Flake8 checks for @code{print} statements in Python
11053 files.")
11054 (license license:expat)))
11055
11056 (define-public python-flake8-pyi
11057 (package
11058 (name "python-flake8-pyi")
11059 (version "20.10.0")
11060 (source
11061 (origin
11062 (method url-fetch)
11063 (uri (pypi-uri "flake8-pyi" version))
11064 (sha256
11065 (base32
11066 "0b27n2pmrxcc7nva4wp2i7mrag0fnq0firvhg1ljq593a45b5qyf"))))
11067 (build-system python-build-system)
11068 (propagated-inputs
11069 (list python-attrs python-flake8 python-pyflakes))
11070 (home-page "https://github.com/ambv/flake8-pyi")
11071 (synopsis
11072 "Flake8 plugin that provides specializations for type hinting stub files")
11073 (description
11074 "This package contains a plugin that provides specializations for
11075 type hinting stub files, especially interesting for linting typeshed. It
11076 adds the @file{.pyi} extension to the default value of the @code{--filename}
11077 command-line argument to Flake8. This means stubs are linted by default with
11078 this plugin enabled, without needing to explicitly list every file. It
11079 modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
11080 expressions after the entire file has been read. This enables support for
11081 first-class forward references that stub files use.")
11082 (license license:expat)))
11083
11084 (define-public python-flake8-pie
11085 (package
11086 (name "python-flake8-pie")
11087 (version "0.5.0")
11088 (source
11089 (origin
11090 (method url-fetch)
11091 (uri (pypi-uri "flake8-pie" version))
11092 (sha256
11093 (base32 "0kgipl5gljlp7aa7ykx15pswpzkd0d0qiznihb2z0d9a73181dyd"))))
11094 (build-system python-build-system)
11095 (home-page "https://github.com/sbdchd/flake8-pie")
11096 (synopsis "Flake8 extension that implements lints")
11097 (description
11098 "This package provides a flake8 extension that implements miscellaneous
11099 lints.")
11100 (license license:bsd-2)))
11101
11102 (define-public python-flake8-quotes
11103 (package
11104 (name "python-flake8-quotes")
11105 (version "3.2.0")
11106 (source
11107 (origin
11108 (method url-fetch)
11109 (uri (pypi-uri "flake8-quotes" version))
11110 (sha256
11111 (base32
11112 "0ph5s6lxgpzz4an0ax6s5xjqypqmngwr5b1i0h9pqhzghplic49z"))))
11113 (build-system python-build-system)
11114 (propagated-inputs
11115 (list python-flake8))
11116 (home-page "https://github.com/zheller/flake8-quotes/")
11117 (synopsis "Flake8 lint for quotes")
11118 (description "This package provides a Flake8 lint for quotes.")
11119 (license license:expat)))
11120
11121 (define-public python-flake8-todo
11122 (package
11123 (name "python-flake8-todo")
11124 (version "0.7")
11125 (source
11126 (origin
11127 (method url-fetch)
11128 (uri (pypi-uri "flake8-todo" version))
11129 (sha256
11130 (base32
11131 "05arm0sch3r8248035kilmf01z0mxsahw6vpbbz0d343zy8m8k3f"))))
11132 (build-system python-build-system)
11133 (propagated-inputs
11134 (list python-pycodestyle))
11135 (home-page "https://github.com/schlamar/flake8-todo")
11136 (synopsis "TODO notes checker, plugin for flake8")
11137 (description
11138 "This package provides the @code{flake8-todo} Python module, a
11139 TODO notes checker plugin for flake8.")
11140 (license license:expat)))
11141
11142 (define-public python-flake8-isort
11143 (package
11144 (name "python-flake8-isort")
11145 (version "4.1.1")
11146 (source
11147 (origin
11148 (method url-fetch)
11149 (uri (pypi-uri "flake8-isort" version))
11150 (sha256
11151 (base32 "05r7z0j9rqgy0a9261bhisairrz6w8hy5hy5kf2mhvhfnx53056q"))))
11152 (build-system python-build-system)
11153 (arguments
11154 (list
11155 #:phases
11156 #~(modify-phases %standard-phases
11157 (replace 'check
11158 (lambda* (#:key tests? #:allow-other-keys)
11159 (when tests?
11160 (invoke "pytest" "-vv")))))))
11161 (propagated-inputs (list python-flake8 python-isort python-testfixtures))
11162 (native-inputs (list python-pytest))
11163 (home-page "https://github.com/gforcada/flake8-isort")
11164 (synopsis "Flake8 plugin integrating isort")
11165 (description "This package provides a flake8 plugin that integrates isort,
11166 extending flake8 so that it can warn about badly sorted Python import
11167 directives.")
11168 (license license:gpl2+)))
11169
11170 (define-public python-autoflake
11171 (package
11172 (name "python-autoflake")
11173 (version "1.3.1")
11174 (source
11175 (origin
11176 (method url-fetch)
11177 (uri (pypi-uri "autoflake" version))
11178 (sha256
11179 (base32 "0nzr057dbmgprp4a52ymafdkdd5zp2wcqf42913xc7hhvvdbj338"))))
11180 (build-system python-build-system)
11181 (propagated-inputs
11182 (list python-pyflakes))
11183 (home-page "https://github.com/myint/autoflake")
11184 (synopsis "Removes unused imports and unused variables")
11185 (description
11186 "@code{autoflake} removes unused imports and unused variables from Python
11187 code as reported by @code{pyflakes}.
11188
11189 By default, it only removes unused imports for modules that are part of the
11190 standard library. Removal of unused variables is also disabled by default.
11191 It also removes useless @code{pass} statements.")
11192 (license license:expat)))
11193
11194 (define-public python-mistune
11195 (package
11196 (name "python-mistune")
11197 (version "0.8.4")
11198 (source
11199 (origin
11200 (method url-fetch)
11201 (uri (pypi-uri "mistune" version))
11202 (sha256
11203 (base32
11204 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
11205 (build-system python-build-system)
11206 (native-inputs
11207 (list python-nose python-cython))
11208 (home-page "https://github.com/lepture/mistune")
11209 (synopsis "Markdown parser in pure Python")
11210 (description "This package provides a fast markdown parser in pure
11211 Python.")
11212 (license license:bsd-3)))
11213
11214 ;; 2.0 is not released yet, but some packages have started using it.
11215 (define-public python-mistune-next
11216 (package
11217 (inherit python-mistune)
11218 (name "python-mistune-next")
11219 (version "2.0.0rc1")
11220 (source (origin
11221 (method url-fetch)
11222 (uri (pypi-uri "mistune" version))
11223 (sha256
11224 (base32
11225 "1nd7iav1ixh9hlj4hxn6lmpava88d86ys8rqm30wgvr7gjlxnas5"))))
11226 (native-inputs (list python-nose))))
11227
11228 (define-public python-markdown
11229 (package
11230 (name "python-markdown")
11231 (version "3.3.4")
11232 (source
11233 (origin
11234 (method url-fetch)
11235 (uri (pypi-uri "Markdown" version))
11236 (sha256
11237 (base32
11238 "0jbs73nincha8fkfxx267sfxac6pl0ckszjbqbb8gk4dhs8v9d9i"))))
11239 (build-system python-build-system)
11240 (native-inputs
11241 (list python-nose python-pyyaml))
11242 (home-page "https://python-markdown.github.io/")
11243 (synopsis "Python implementation of Markdown")
11244 (description
11245 "This package provides a Python implementation of John Gruber's
11246 Markdown. The library features international input, various Markdown
11247 extensions, and several HTML output formats. A command line wrapper
11248 markdown_py is also provided to convert Markdown files to HTML.")
11249 (license license:bsd-3)))
11250
11251 (define-public python-mdx-include
11252 (package
11253 (name "python-mdx-include")
11254 (version "1.4.1")
11255 (source (origin
11256 ;; Use git, as there are some test files missing from the PyPI
11257 ;; release, see https://github.com/neurobin/mdx_include/issues/9
11258 (method git-fetch)
11259 (uri (git-reference
11260 (url "https://github.com/neurobin/mdx_include")
11261 ;; Releases are not tagged on github, see
11262 ;; https://github.com/neurobin/mdx_include/issues/10
11263 (commit "683e6be7a00a1ef4d673ad0294458fa61bc97286")))
11264 (file-name (git-file-name name version))
11265 (sha256
11266 (base32
11267 "0qpzgln4ybd7pl0m9s19dv60aq9cvwrk7x3yz96kjhcywaa5w386"))))
11268 (build-system python-build-system)
11269 (arguments
11270 '(#:phases
11271 (modify-phases %standard-phases
11272 (add-before 'check 'disable-test-requiring-network
11273 (lambda _
11274 (substitute* "mdx_include/test/test.py"
11275 (("(\\s+def )test_(cache|config|default)\\(" _ pre post)
11276 (string-append pre "__off__test_" post "("))))))))
11277 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
11278 (home-page "https://github.com/neurobin/mdx_include")
11279 (synopsis "Python Markdown extension to include local or remote files")
11280 (description "Include extension for Python Markdown. It lets you include
11281 local or remote (downloadable) files into your markdown at arbitrary
11282 positions.
11283
11284 This project is motivated by markdown-include and provides the same
11285 functionalities with some extras.")
11286 (license license:bsd-3)))
11287
11288 (define-public python-ptyprocess
11289 (package
11290 (name "python-ptyprocess")
11291 (version "0.5.2")
11292 (source
11293 (origin
11294 (method url-fetch)
11295 (uri (pypi-uri "ptyprocess" version))
11296 (sha256
11297 (base32
11298 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
11299 (build-system python-build-system)
11300 (native-inputs
11301 (list python-nose))
11302 (arguments
11303 `(#:phases
11304 (modify-phases %standard-phases
11305 (replace 'check
11306 (lambda _ (invoke "nosetests"))))))
11307 (home-page "https://github.com/pexpect/ptyprocess")
11308 (synopsis "Run a subprocess in a pseudo terminal")
11309 (description
11310 "This package provides a Python library used to launch a subprocess in a
11311 pseudo terminal (pty), and interact with both the process and its pty.")
11312 (license license:isc)))
11313
11314 (define-public python-cram
11315 (package
11316 (name "python-cram")
11317 (version "0.7")
11318 (home-page "https://bitheap.org/cram/")
11319 (source (origin
11320 (method url-fetch)
11321 (uri (list (string-append home-page "cram-"
11322 version ".tar.gz")
11323 (pypi-uri "cram" version)))
11324 (sha256
11325 (base32
11326 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
11327 (arguments
11328 '(#:phases
11329 (modify-phases %standard-phases
11330 (add-after 'unpack 'patch-source
11331 (lambda _
11332 (substitute* (find-files "cram" ".*\\.py$")
11333 ;; Replace default shell path.
11334 (("/bin/sh") (which "sh")))
11335 (substitute* (find-files "tests" ".*\\.t$")
11336 (("md5") "md5sum")
11337 (("/bin/bash") (which "bash"))
11338 (("/bin/sh") (which "sh")))
11339 (substitute* "cram/_test.py"
11340 ;; This hack works around a bug triggered by substituting
11341 ;; the /bin/sh paths. "tests/usage.t" compares the output of
11342 ;; "cram -h", which breaks the output at 80 characters. This
11343 ;; causes the line showing the default shell to break into two
11344 ;; lines, but the test expects a single line...
11345 (("env\\['COLUMNS'\\] = '80'")
11346 "env['COLUMNS'] = '160'"))
11347
11348 (substitute* "Makefile"
11349 ;; Recent versions of python-coverage have caused the test
11350 ;; coverage to decrease (as of version 0.7). Allow that.
11351 (("--fail-under=100")
11352 "--fail-under=90"))
11353
11354 #t))
11355 (replace 'check
11356 ;; The test phase uses the built library and executable.
11357 (lambda* (#:key inputs outputs #:allow-other-keys)
11358 (add-installed-pythonpath inputs outputs)
11359 (setenv "PATH" (string-append (getenv "PATH") ":"
11360 (assoc-ref outputs "out") "/bin"))
11361 (invoke "make" "test"))))))
11362 (build-system python-build-system)
11363 (native-inputs
11364 (list python-coverage which))
11365 (synopsis "Simple testing framework for command line applications")
11366 (description
11367 "Cram is a functional testing framework for command line applications.
11368 Cram tests look like snippets of interactive shell sessions. Cram runs each
11369 command and compares the command output in the test with the command’s actual
11370 output.")
11371 (license license:gpl2+)))
11372
11373 (define-public python-crccheck
11374 (package
11375 (name "python-crccheck")
11376 (version "1.1")
11377 (source
11378 (origin
11379 (method url-fetch)
11380 (uri (pypi-uri "crccheck" version))
11381 (sha256
11382 (base32 "15psg7wjfbpmmry54ffwg6pg63mnv7mkwmb0a7884axnr8qj55j5"))))
11383 (build-system python-build-system)
11384 (arguments
11385 (list
11386 #:phases
11387 #~(modify-phases %standard-phases
11388 (replace 'check
11389 (lambda* (#:key tests? #:allow-other-keys)
11390 (when tests?
11391 (invoke "pytest" "-vv")))))))
11392 (native-inputs (list python-pytest))
11393 (home-page "https://sourceforge.net/projects/crccheck/")
11394 (synopsis "Calculation library for CRCs and checksums")
11395 (description "@code{crccheck} is a calculation library for CRCs and
11396 checksums. It implement more than a hundred checksum routines.")
11397 (license license:gpl3+)))
11398
11399 (define-public python-crashtest
11400 (package
11401 (name "python-crashtest")
11402 (version "0.3.1")
11403 (source
11404 (origin
11405 (method url-fetch)
11406 (uri (pypi-uri "crashtest" version))
11407 (sha256
11408 (base32 "1p9p7mn8x2j9psc4jxab98897v4i9s4fliyfw8rp8v4bx1n7pjj2"))))
11409 (build-system python-build-system)
11410 (home-page "https://github.com/sdispater/crashtest")
11411 (synopsis "Manage Python errors with ease")
11412 (description
11413 "Python library that makes exceptions handling and inspection easier.")
11414 (license license:expat)))
11415
11416 (define-public python-stdlib-list
11417 (package
11418 (name "python-stdlib-list")
11419 (version "0.8.0")
11420 (source (origin
11421 (method url-fetch)
11422 (uri (pypi-uri "stdlib-list" version))
11423 (sha256
11424 (base32
11425 "17vdn4q0sdlndc2fr9svapxx6366hnrhkn0fswp1xmr0jxqh7rd1"))))
11426 (build-system python-build-system)
11427 (arguments
11428 `(#:tests? #f)) ; Tests require more dependencies.
11429 (native-inputs
11430 (list python-sphinx))
11431 (home-page "https://github.com/jackmaney/python-stdlib-list")
11432 (synopsis "Python Standard Libraries")
11433 (description "This package contains a list of Python Standard Libraries.")
11434 (license license:expat)))
11435
11436 (define-public python-stopit
11437 (package
11438 (name "python-stopit")
11439 (version "1.1.2")
11440 (source
11441 (origin
11442 (method url-fetch)
11443 (uri (pypi-uri "stopit" version))
11444 (sha256
11445 (base32 "0vcrcvky249q4rbgmwf18mwmnypfk8jpn4h6knyjf86r7xc9rwzp"))))
11446 (build-system python-build-system)
11447 (arguments '(#:tests? #f)) ;there are none
11448 (home-page "https://pypi.python.org/pypi/stopit")
11449 (synopsis "Timeout control decorator and context managers")
11450 (description
11451 "Raise asynchronous exceptions in other threads, control the timeout of
11452 blocks or callables with two context managers and two decorators.")
11453 (license license:expat)))
11454
11455 (define-public python-timeout-decorator
11456 (package
11457 (name "python-timeout-decorator")
11458 (version "0.5.0")
11459 (source (origin
11460 (method url-fetch)
11461 (uri (pypi-uri "timeout-decorator" version))
11462 (sha256
11463 (base32
11464 "1mxk2qyydhzncm93z08kvj5ssxq3fr2n7pkrrji28nqwvdc2ybva"))))
11465 (build-system python-build-system)
11466 (home-page "https://github.com/pnpnpn/timeout-decorator")
11467 (synopsis "Timeout decorator")
11468 (description "This package provides a decorator that raises an error
11469 when an operation takes longer than expected.")
11470 (license license:expat)))
11471
11472 (define-public python-straight-plugin
11473 (package
11474 (name "python-straight-plugin")
11475 (version "1.4.1")
11476 (source
11477 (origin
11478 (method url-fetch)
11479 (uri (pypi-uri "straight.plugin" version))
11480 (sha256
11481 (base32
11482 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
11483 (build-system python-build-system)
11484 (home-page "https://github.com/ironfroggy/straight.plugin")
11485 (synopsis "Simple namespaced plugin facility")
11486 (description "Straight Plugin provides a type of plugin you can create from
11487 almost any existing Python modules, and an easy way for outside developers to
11488 add functionality and customization to your projects with their own plugins.")
11489 (license license:expat)))
11490
11491 (define-public python-pysendfile
11492 (package
11493 (name "python-pysendfile")
11494 (version "2.0.1")
11495 (source
11496 (origin
11497 (method url-fetch)
11498 (uri (pypi-uri "pysendfile" version))
11499 (sha256
11500 (base32 "05qf0m32isflln1zjgxlpw0wf469lj86vdwwqyizp1h94x5l22ji"))))
11501 (build-system python-build-system)
11502 (arguments
11503 (list
11504 #:phases #~(modify-phases %standard-phases
11505 (replace 'check
11506 (lambda* (#:key tests? #:allow-other-keys)
11507 (when tests?
11508 (setenv "HOME" "/tmp")
11509 (invoke "make" "test")))))))
11510 (home-page "https://github.com/giampaolo/pysendfile")
11511 (synopsis "Python interface to sendfile(2)")
11512 (description "The @{pysendfile} Python library provides an interface to
11513 the @code{sendfile(2)} system call.")
11514 (license license:expat)))
11515
11516 (define-public python-pyftpdlib
11517 (package
11518 (name "python-pyftpdlib")
11519 (version "1.5.6")
11520 (source
11521 (origin
11522 (method url-fetch)
11523 (uri (pypi-uri "pyftpdlib" version))
11524 (sha256
11525 (base32 "0pnv2byzmzg84q5nmmhn1xafvfil85qa5y52bj455br93zc5b9px"))))
11526 (build-system python-build-system)
11527 (arguments
11528 (list
11529 #:phases
11530 #~(modify-phases %standard-phases
11531 (replace 'check
11532 (lambda* (#:key tests? #:allow-other-keys)
11533 (when tests?
11534 (invoke
11535 "pytest"
11536 ;; Deselect failing tests.
11537 "-k" (string-append
11538 ;; Using Pytest instead of the Makefile causes the
11539 ;; command line tests to fail on unknown Pytest
11540 ;; arguments.
11541 "not TestCommandLineParser "
11542 ;; https://github.com/giampaolo/pyftpdlib/issues/478
11543 "and not test_use_gmt_times "
11544 ;; https://github.com/giampaolo/pyftpdlib/issues/550
11545 "and not test_masquerade_address "
11546 ;; https://github.com/giampaolo/pyftpdlib/issues/500
11547 "and not test_rest_on_stor "
11548 "and not test_stor_ascii"))))))))
11549 (native-inputs (list python-psutil python-pytest))
11550 (propagated-inputs (list python-pyopenssl python-pysendfile))
11551 (home-page "https://github.com/giampaolo/pyftpdlib/")
11552 (synopsis "Asynchronous and scalable Python FTP server library")
11553 (description "The Python FTP server library provides a high-level
11554 interface to write efficient, scalable and asynchronous FTP servers with
11555 Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
11556 RFC-959} FTP server implementation available for Python, and has the following
11557 traits:
11558 @itemize
11559 @item
11560 It is lightweight, fast and scalable.
11561 @item
11562 It uses the @code{sendfile(2)} system call for uploads.
11563 @item
11564 It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
11565 asynchronously.
11566 @item
11567 It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
11568 IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
11569 RFC-2640}) and MLSD/MLST commands (RFC-3659).
11570 @item
11571 It has a flexible system of @samp{authorizers} able to manage both
11572 @samp{virtual} and @samp{real} users.
11573 @end itemize")
11574 (license license:expat)))
11575
11576 (define-public python-fs
11577 (package
11578 (name "python-fs")
11579 (version "2.4.16")
11580 (source
11581 (origin
11582 (method url-fetch)
11583 (uri (pypi-uri "fs" version))
11584 (sha256
11585 (base32 "04ykd7q49qgv13hl2n71lzihs2c9099r50lmd85vgx0k2bawg5xf"))))
11586 (build-system python-build-system)
11587 (arguments
11588 (list
11589 #:phases #~(modify-phases %standard-phases
11590 (replace 'check
11591 (lambda* (#:key tests? #:allow-other-keys)
11592 (when tests?
11593 (setenv "HOME" "/tmp")
11594 (invoke "pytest" "-m" "not slow")))))))
11595 (propagated-inputs
11596 (list python-appdirs python-pytz python-six))
11597 (native-inputs
11598 (list python-mock python-parameterized python-pyftpdlib python-pytest))
11599 (home-page "https://github.com/PyFilesystem/pyfilesystem2/")
11600 (synopsis "File system abstraction layer for Python")
11601 (description "PyFilesystem's @code{FS} object is a file system abstraction
11602 sharing similarities with Python's own @code{file} object for single files.
11603 It allows opening all the files under a given directory recursively, as a
11604 single @code{FS} object. This enables, for example, counting the combined
11605 number of lines in the contained files easily.")
11606 (license license:expat)))
11607
11608 ;;; Tests are left out in the main package to avoid cycles.
11609 (define-public python-fonttools
11610 (hidden-package
11611 (package
11612 (name "python-fonttools")
11613 (version "4.28.5")
11614 (source (origin
11615 (method url-fetch)
11616 (uri (pypi-uri "fonttools" version ".zip"))
11617 (sha256
11618 (base32
11619 "1jhl5n3rfqq7fznvsh6r80n7ylap1a7ppq1040y8cflhyz80ap2l"))))
11620 (build-system python-build-system)
11621 (native-inputs
11622 (list unzip))
11623 (arguments '(#:tests? #f))
11624 (home-page "https://github.com/fonttools/fonttools")
11625 (synopsis "Tools to manipulate font files")
11626 (description
11627 "FontTools/TTX is a library to manipulate font files from Python. It
11628 supports reading and writing of TrueType/OpenType fonts, reading and writing
11629 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
11630 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
11631 from an XML-based format.")
11632 (license license:expat))))
11633
11634 ;;; Rename 'python-fonttools' in next cycle, renaming the current
11635 ;;; 'python-fonttools' to 'python-fonttools-minimal'.
11636 (define-public python-fonttools-full
11637 (package/inherit python-fonttools
11638 (arguments
11639 (substitute-keyword-arguments (package-arguments python-fonttools)
11640 ((#:tests? _ #f)
11641 (not (%current-target-system)))
11642 ((#:phases phases '%standard-phases)
11643 `(modify-phases ,phases
11644 (replace 'check
11645 (lambda* (#:key tests? #:allow-other-keys)
11646 (when tests?
11647 (invoke "pytest" "-vv"
11648 "-k"
11649 ;; XXX: These tests need .trm files that are
11650 ;; not shipped with the PyPI release.
11651 (format #f "not ~a"
11652 (string-join
11653 '("test_read_fontdimens_mathsy"
11654 "test_read_fontdimens_mathex"
11655 "test_read_fontdimens_vanilla"
11656 "test_read_boundary_char"
11657 "fontTools.tfmLib")
11658 " and not "))))))))))
11659 (native-inputs
11660 (modify-inputs (package-native-inputs python-fonttools)
11661 (append python-pytest)))
11662 (propagated-inputs
11663 (list python-brotli
11664 python-fs
11665 python-lxml
11666 python-lz4
11667 python-scipy
11668 python-unicodedata2
11669 python-zopfli))
11670 (properties (alist-delete 'hidden? (package-properties python-fonttools)))))
11671
11672 (define-public python-fonttools-next
11673 (package
11674 (inherit python-fonttools-full)
11675 (version "4.37.1")
11676 (source (origin
11677 (inherit (package-source python-fonttools-full))
11678 (method url-fetch)
11679 (uri (pypi-uri "fonttools" version ".zip"))
11680 (sha256
11681 (base32
11682 "1ryc1wca2v92wn24baryj5fr32lspl8rbsig32fnkxp1islf21j6"))))))
11683
11684 (define-public python-ly
11685 (package
11686 (name "python-ly")
11687 (version "0.9.5")
11688 (source
11689 (origin
11690 (method url-fetch)
11691 (uri (pypi-uri name version))
11692 (sha256
11693 (base32
11694 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
11695 (build-system python-build-system)
11696 (arguments
11697 ;; FIXME: Some tests need network access.
11698 '(#:tests? #f))
11699 (synopsis "Tool and library for manipulating LilyPond files")
11700 (description "This package provides a Python library to parse, manipulate
11701 or create documents in LilyPond format. A command line program ly is also
11702 provided that can be used to do various manipulations with LilyPond files.")
11703 (home-page "https://pypi.org/project/python-ly/")
11704 (license license:gpl2+)))
11705
11706 (define-public python-appdirs
11707 (package
11708 (name "python-appdirs")
11709 (version "1.4.3")
11710 (source
11711 (origin
11712 (method url-fetch)
11713 (uri (pypi-uri "appdirs" version))
11714 (sha256
11715 (base32
11716 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
11717 (build-system python-build-system)
11718 (home-page "https://github.com/ActiveState/appdirs")
11719 (synopsis
11720 "Determine platform-specific dirs, e.g. a \"user data dir\"")
11721 (description
11722 "This module provides a portable way of finding out where user data
11723 should be stored on various operating systems.")
11724 (license license:expat)))
11725
11726 (define-public python-gorilla
11727 (package
11728 (name "python-gorilla")
11729 (version "0.3.0")
11730 (source (origin
11731 (method url-fetch)
11732 (uri (pypi-uri "gorilla" version))
11733 (sha256
11734 (base32
11735 "0b40blcp6fih4nvqbilra4qw1dfccv1ahjmr41ac4d9rjadqkcpy"))))
11736 (build-system python-build-system)
11737 (home-page "https://github.com/christophercrouzet/gorilla")
11738 (synopsis "Convenient monkey patching with Python")
11739 (description
11740 "Gorilla is a Python library that provides a convenient approach to
11741 monkey patching. Monkey patching is the process of modifying module and
11742 class attributes at runtime with the purpose of replacing or extending
11743 third-party code.")
11744 (license license:expat)))
11745
11746 (define-public python-llfuse
11747 (package
11748 (name "python-llfuse")
11749 (version "1.4.1")
11750 (source (origin
11751 (method url-fetch)
11752 (uri (pypi-uri "llfuse" version))
11753 (sha256
11754 (base32
11755 "1jaf790rsxvz3hs9fbr3hrnmg0xzl6a2bqfa10bbbsjsdbcpk762"))))
11756 (build-system python-build-system)
11757 (inputs
11758 (list fuse attr))
11759 (native-inputs
11760 (list pkg-config python-pytest))
11761 (synopsis "Python bindings for FUSE")
11762 (description
11763 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
11764 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
11765 (license license:lgpl2.0+)))
11766
11767 (define-public python-msgpack
11768 (package
11769 (name "python-msgpack")
11770 (version "1.0.4")
11771 (source (origin
11772 (method url-fetch)
11773 (uri (pypi-uri "msgpack" version))
11774 (sha256
11775 (base32
11776 "0pqzy1zclyhd42gfibhkcqymbspy5a6v421g87mh40h3iz0nkn7m"))))
11777 (build-system python-build-system)
11778 (arguments
11779 `(#:modules ((guix build utils)
11780 (guix build python-build-system)
11781 (ice-9 ftw)
11782 (srfi srfi-1)
11783 (srfi srfi-26))
11784 #:phases
11785 (modify-phases %standard-phases
11786 (replace 'check
11787 (lambda _
11788 (invoke "pytest" "-v" "test"))))))
11789 (native-inputs
11790 (list python-pytest))
11791 (synopsis "MessagePack (de)serializer")
11792 (description "MessagePack is a fast, compact binary serialization format,
11793 suitable for similar data to JSON. This package provides CPython bindings for
11794 reading and writing MessagePack data.")
11795 (home-page "https://pypi.org/project/msgpack/")
11796 (license license:asl2.0)))
11797
11798 (define-public python-msgpack-1.0.2
11799 (package
11800 (inherit python-msgpack)
11801 (version "1.0.2")
11802 (source (origin
11803 (method url-fetch)
11804 (uri (pypi-uri "msgpack" version))
11805 (sha256
11806 (base32
11807 "1109s2yynrahwi64ikax68hx0mbclz8p35afmpphw5dwynb49q7s"))))))
11808
11809 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
11810 ;; release 0.5. Some packages like borg still call it by the old name for now.
11811 ;; <https://bugs.gnu.org/30662>
11812 (define-public python-msgpack-transitional
11813 (package
11814 (inherit python-msgpack)
11815 (name "python-msgpack-transitional")
11816 (version "0.5.6")
11817 (source (origin
11818 (method url-fetch)
11819 (uri (pypi-uri "msgpack" version))
11820 (sha256
11821 (base32
11822 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
11823 (arguments
11824 (substitute-keyword-arguments (package-arguments python-msgpack)
11825 ((#:phases phases)
11826 `(modify-phases ,phases
11827 (add-after 'unpack 'configure-transitional
11828 (lambda _
11829 ;; Keep using the old name.
11830 (substitute* "setup.py"
11831 (("TRANSITIONAL = False")
11832 "TRANSITIONAL = 1"))
11833 ;; This old version is not compatible with Python 3.9
11834 (substitute* '("test/test_buffer.py" "test/test_extension.py")
11835 ((".tostring\\(") ".tobytes("))
11836 (substitute* '("test/test_buffer.py" "test/test_extension.py")
11837 ((".fromstring\\(") ".frombytes("))
11838 #t))))))))
11839
11840 (define-public python-netaddr
11841 (package
11842 (name "python-netaddr")
11843 (version "0.8.0")
11844 (source
11845 (origin
11846 (method url-fetch)
11847 (uri (pypi-uri "netaddr" version))
11848 (sha256
11849 (base32
11850 "0hx2npi0wnhwlcybilgwlddw6qffx1mb7a3sj4p9s7bvl33mgk6n"))))
11851 (build-system python-build-system)
11852 (arguments `(#:tests? #f)) ;; No tests.
11853 (home-page "https://github.com/drkjam/netaddr/")
11854 (synopsis "Pythonic manipulation of network addresses")
11855 (description
11856 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
11857 and MAC network addresses.")
11858 (license license:bsd-3)))
11859
11860 (define-public python-openstep-plist
11861 (package
11862 (name "python-openstep-plist")
11863 (version "0.3.0")
11864 (home-page "https://github.com/fonttools/openstep-plist")
11865 (source (origin
11866 (method git-fetch)
11867 (uri (git-reference
11868 (url home-page)
11869 (commit (string-append "v" version))))
11870 (file-name (git-file-name name version))
11871 (sha256
11872 (base32
11873 "1rxjgzh0p069ncsr2986rn32vhdqyq35irbqg2559jh18456mkca"))))
11874 (build-system python-build-system)
11875 (arguments
11876 (list #:phases
11877 #~(modify-phases %standard-phases
11878 (add-after 'unpack 'pretend-version
11879 (lambda _
11880 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION"
11881 #$(package-version this-package))))
11882 (replace 'check
11883 (lambda* (#:key tests? #:allow-other-keys)
11884 (when tests?
11885 (invoke "pytest" "-vv")))))))
11886 (native-inputs
11887 (list python-cython python-pytest python-setuptools-scm))
11888 (synopsis "OpenStep plist parser and writer")
11889 (description
11890 "This package provides a parser for the \"old style\" OpenStep property
11891 list format (also known as ASCII plist), written in Cython.")
11892 (license license:expat)))
11893
11894 (define-public python-wrapt
11895 (package
11896 (name "python-wrapt")
11897 (version "1.11.2")
11898 (source
11899 (origin
11900 (method url-fetch)
11901 (uri (pypi-uri "wrapt" version))
11902 (sha256
11903 (base32
11904 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
11905 (build-system python-build-system)
11906 (arguments
11907 ;; Tests are not included in the tarball, they are only available in the
11908 ;; git repository.
11909 `(#:tests? #f))
11910 (home-page "https://github.com/GrahamDumpleton/wrapt")
11911 (synopsis "Module for decorators, wrappers and monkey patching")
11912 (description
11913 "The aim of the wrapt module is to provide a transparent object proxy for
11914 Python, which can be used as the basis for the construction of function
11915 wrappers and decorator functions.")
11916 (license license:bsd-2)))
11917
11918 (define-public python-commentjson
11919 (package
11920 (name "python-commentjson")
11921 (version "0.9.0")
11922 (source (origin
11923 ;; The PyPI release is missing some test files.
11924 (method git-fetch)
11925 (uri (git-reference
11926 (url "https://github.com/vaidik/commentjson")
11927 (commit (string-append "v" version))))
11928 (file-name (git-file-name name version))
11929 (sha256
11930 (base32
11931 "01iscgrc6bkyrxbzmf46csbf9c0n7g6dygdmxs3fq8fkzrrciybl"))))
11932 (build-system python-build-system)
11933 (arguments
11934 `(#:modules ((guix build python-build-system)
11935 (guix build utils)
11936 (ice-9 ftw)
11937 (ice-9 textual-ports))
11938 #:phases
11939 (modify-phases %standard-phases
11940 (add-after 'unpack 'relax-requirements
11941 (lambda _
11942 (substitute* "setup.py"
11943 (("lark-parser>=0.7.1,<0.8.0")
11944 "lark-parser>=0.7.1"))))
11945 (add-after 'unpack 'delete-unspported-tests
11946 ;; Some tests rely on the 'test' module of Python itself,
11947 ;; which is not available with the Python package in Guix;
11948 ;; remove them.
11949 (lambda _
11950 ;; XXX: Copied from (guix build dub-build-system).
11951 (define (grep string file-name)
11952 (string-contains (call-with-input-file file-name get-string-all)
11953 string))
11954
11955 (with-directory-excursion "commentjson/tests/test_json"
11956 (let* ((dot? (lambda (x) (member x '("." ".."))))
11957 (test-files (scandir "." (negate dot?))))
11958 (for-each delete-file
11959 (filter (lambda (f) (grep "from test." f))
11960 test-files)))))))))
11961 (propagated-inputs
11962 (list python-lark-parser))
11963 (native-inputs
11964 (list python-six))
11965 (home-page "https://github.com/vaidik/commentjson")
11966 (synopsis "Python library for adding comments to JSON files")
11967 (description "Comment JSON is a Python package that helps you create JSON
11968 files with Python and JavaScript style inline comments. Its API is very
11969 similar to the Python standard library's @code{json} module.")
11970 (license license:expat)))
11971
11972 (define-public python-resolvelib
11973 (package
11974 (name "python-resolvelib")
11975 (version "0.7.1")
11976 (source
11977 (origin
11978 ;; Tests are missing from the PyPI release.
11979 (method git-fetch)
11980 (uri (git-reference
11981 (url "https://github.com/sarugaku/resolvelib")
11982 (commit version)))
11983 (file-name (git-file-name name version))
11984 (sha256
11985 (base32
11986 "1fqz75riagizihvf4j7wc3zjw6kmg1dd8sf49aszyml105kb33n8"))))
11987 (build-system python-build-system)
11988 (arguments
11989 `(#:phases
11990 (modify-phases %standard-phases
11991 (replace 'check
11992 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
11993 (when tests?
11994 (add-installed-pythonpath inputs outputs)
11995 (invoke "pytest")))))))
11996 (native-inputs
11997 (list python-commentjson python-packaging python-pytest))
11998 (home-page "https://github.com/sarugaku/resolvelib")
11999 (synopsis "Abstract dependencies resolver")
12000 (description "The ResolveLib library provides a @code{Resolver} class that
12001 includes dependency resolution logic.")
12002 (license license:isc)))
12003
12004 ;;; This older version is required by ansible-core.
12005 (define-public python-resolvelib-0.5
12006 (package/inherit python-resolvelib
12007 (name "python-resolvelib")
12008 (version "0.5.4")
12009 (source
12010 (origin
12011 (method git-fetch)
12012 (uri (git-reference
12013 (url "https://github.com/sarugaku/resolvelib")
12014 (commit version)))
12015 (file-name (git-file-name name version))
12016 (sha256
12017 (base32
12018 "0697y330sqhiclk25v151qxg7aixzpj434lbg5qib0qlna5zg9la"))))))
12019
12020 (define-public python-commonmark
12021 (package
12022 (name "python-commonmark")
12023 (version "0.9.1")
12024 (source
12025 (origin
12026 (method url-fetch)
12027 (uri (pypi-uri "commonmark" version))
12028 (sha256
12029 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
12030 (build-system python-build-system)
12031 (arguments
12032 `(#:phases
12033 (modify-phases %standard-phases
12034 (replace 'check
12035 (lambda* (#:key inputs outputs #:allow-other-keys)
12036 (add-installed-pythonpath inputs outputs)
12037 (invoke "python" "setup.py" "test"))))))
12038 (home-page "https://github.com/readthedocs/commonmark.py")
12039 (synopsis "Python parser for the CommonMark Markdown spec")
12040 (description
12041 "This module is a pure Python port of jgm's @code{commonmark.js}, a
12042 Markdown parser and renderer for the CommonMark specification, using only
12043 native modules.")
12044 (license license:bsd-3)))
12045
12046 (define-public python-xlrd
12047 (package
12048 (name "python-xlrd")
12049 (version "2.0.1")
12050 (source (origin
12051 ;; The tests are not included in the PyPI archive.
12052 (method git-fetch)
12053 (uri (git-reference
12054 (url "https://github.com/python-excel/xlrd")
12055 (commit version)))
12056 (file-name (git-file-name name version))
12057 (sha256
12058 (base32
12059 "170asszffvf6rh5w169ic4h5kxgjkmdl3060vw737d4g1qfifvzz"))))
12060 (build-system python-build-system)
12061 (native-inputs
12062 (list python-pytest))
12063 (home-page "http://www.python-excel.org/")
12064 (synopsis "Library for extracting data from Excel files")
12065 (description "This package provides a library to extract data from
12066 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
12067 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
12068 Unicode-aware. It is not intended as an end-user tool.")
12069 (license license:bsd-3)))
12070
12071 ;;; Note: this package is unmaintained since 2018 (archived on GitHub).
12072 (define-public python-xlwt
12073 (package
12074 (name "python-xlwt")
12075 (version "1.3.0")
12076 (source
12077 (origin
12078 (method url-fetch)
12079 (uri (pypi-uri "xlwt" version))
12080 (sha256
12081 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
12082 (build-system python-build-system)
12083 (arguments
12084 `(#:phases
12085 (modify-phases %standard-phases
12086 (replace 'check
12087 (lambda* (#:key tests? #:allow-other-keys)
12088 (when tests?
12089 (setenv "GUIX_PYTHONPATH"
12090 (string-append (getcwd) "/build/lib:"
12091 (getenv "GUIX_PYTHONPATH")))
12092 (invoke "nosetests" "-v")))))))
12093 (native-inputs
12094 `(("nose" ,python-nose)))
12095 (home-page "http://www.python-excel.org/")
12096 (synopsis "Library for creating spreadsheet Excel files")
12097 (description "@code{xlwt} is a library for writing data and formatting
12098 information to older Excel files (i.e. .xls). The package itself is pure
12099 Python with no dependencies on modules or packages outside the standard Python
12100 distribution. It is not intended as an end-user tool.")
12101 (license license:bsd-3)))
12102
12103 (define-public python-immutables
12104 (package
12105 (name "python-immutables")
12106 (version "0.18")
12107 (source
12108 (origin
12109 (method url-fetch)
12110 (uri (pypi-uri "immutables" version))
12111 (sha256
12112 (base32 "1x4cinh0xbl6p6p2yfm2s07mxxy3lf0zzai9gqpydk4482bwfdjk"))))
12113 (build-system python-build-system)
12114 (native-inputs (list python-mypy python-pytest))
12115 (home-page "https://github.com/MagicStack/immutables")
12116 (synopsis "High-performance immutable mapping type for Python")
12117 (description
12118 "An immutable mapping type for Python. The underlying datastructure is a
12119 Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
12120 functional languages.")
12121 (license license:asl2.0)))
12122
12123 (define-public python-prettytable
12124 (package
12125 (name "python-prettytable")
12126 (version "3.3.0")
12127 (source
12128 (origin
12129 (method url-fetch)
12130 (uri (pypi-uri "prettytable" version))
12131 (sha256
12132 (base32
12133 "1c599w31i2ndzbkn85xwsgv9sd2j16r56dl922w4jh3rs97vb3hi"))))
12134 (build-system python-build-system)
12135 (arguments
12136 (list #:phases
12137 #~(modify-phases %standard-phases
12138 (replace 'check
12139 (lambda* (#:key tests? #:allow-other-keys)
12140 (when tests?
12141 (invoke "pytest" "-vv")))))))
12142 (native-inputs
12143 (list python-pytest
12144 python-pytest-lazy-fixture
12145 python-setuptools-scm))
12146 (propagated-inputs (list python-wcwidth))
12147 (home-page "https://github.com/jazzband/prettytable")
12148 (synopsis "Display tabular data in an ASCII table format")
12149 (description
12150 "A library designed to represent tabular data in visually appealing ASCII
12151 tables. PrettyTable allows for selection of which columns are to be printed,
12152 independent alignment of columns (left or right justified or centred) and
12153 printing of sub-tables by specifying a row range.")
12154 (license license:bsd-3)))
12155
12156 (define-public python-rtf-tokenize
12157 (package
12158 (name "python-rtf-tokenize")
12159 (version "1.0.0")
12160 (source (origin
12161 (method url-fetch)
12162 (uri (pypi-uri "rtf_tokenize" version))
12163 (sha256
12164 (base32
12165 "026njb9iwznycda83bln3gfivcnzdz6vy8y86xvbsy84s28g6gaw"))))
12166 (build-system python-build-system)
12167 (native-inputs (list python-pytest))
12168 (home-page "https://github.com/benoit-pierre/rtf_tokenize")
12169 (synopsis "Simple RTF tokenizer")
12170 (description "This package is a simple RTF tokenizer.")
12171 (license license:gpl2+)))
12172
12173 (define-public python-curio
12174 (package
12175 (name "python-curio")
12176 (version "1.5")
12177 (source
12178 (origin
12179 (method url-fetch)
12180 (uri (pypi-uri "curio" version))
12181 (sha256
12182 (base32 "045wwg16qadsalhicbv21p14sj8i4w0l57639j7dmdqbb4p2225g"))))
12183 (build-system python-build-system)
12184 (arguments
12185 `(#:phases
12186 (modify-phases %standard-phases
12187 (replace 'check
12188 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
12189 (when tests?
12190 (add-installed-pythonpath inputs outputs)
12191 (invoke "pytest" "-vv" "-k"
12192 (string-append
12193 ;; Tries to open an outgoing connection.
12194 "not test_ssl_outgoing "
12195 ;; This test fails since Python 3.9.9 (see:
12196 ;; https://github.com/dabeaz/curio/issues/347).
12197 "and not test_timeout"))))))))
12198 (native-inputs
12199 (list python-pytest))
12200 (home-page "https://github.com/dabeaz/curio")
12201 (synopsis "Coroutine-based library for concurrent Python")
12202 (description
12203 "Curio is a coroutine-based library for concurrent Python systems
12204 programming. It provides standard programming abstractions such as as
12205 tasks, sockets, files, locks, and queues.")
12206 (license license:bsd-3)))
12207
12208 (define-public python-tables
12209 (package
12210 (name "python-tables")
12211 (version "3.6.1")
12212 (source
12213 (origin
12214 (method url-fetch)
12215 (uri (pypi-uri "tables" version))
12216 (sha256
12217 (base32
12218 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
12219 (modules '((guix build utils)))
12220 (snippet
12221 '(begin
12222 ;; Remove pre-compiled .pyc files from source.
12223 (for-each delete-file-recursively
12224 (find-files "." "__pycache__" #:directories? #t))
12225 (for-each delete-file (find-files "." "\\.pyc$"))
12226 #t))))
12227 (build-system python-build-system)
12228 (arguments
12229 `(;; FIXME: python-build-system does not pass configure-flags to "build"
12230 ;; or "check", so we must override the build and check phases.
12231 #:phases
12232 (modify-phases %standard-phases
12233 (add-after 'unpack 'use-gcc
12234 (lambda _
12235 (substitute* "setup.py"
12236 (("^( +)compiler = new_compiler\\(\\)" line indent)
12237 (string-append line
12238 "\n"
12239 indent
12240 "compiler.set_executables(compiler='gcc',"
12241 "compiler_so='gcc',"
12242 "linker_exe='gcc',"
12243 "linker_so='gcc -shared')")))
12244 #t))
12245 (add-after 'unpack 'disable-tuning
12246 (lambda _
12247 (substitute* "setup.py"
12248 (("cpu_flags = .*")
12249 "cpu_flags = ['sse2']\n"))
12250 #t))
12251 (replace 'build
12252 (lambda* (#:key inputs #:allow-other-keys)
12253 (invoke "python" "setup.py" "build"
12254 (string-append "--hdf5="
12255 (assoc-ref inputs "hdf5")))))
12256 (replace 'check
12257 (lambda* (#:key inputs #:allow-other-keys)
12258 (invoke "python" "setup.py" "check"
12259 (string-append "--hdf5="
12260 (assoc-ref inputs "hdf5"))))))))
12261 (propagated-inputs
12262 (list python-numexpr python-numpy))
12263 (native-inputs
12264 (list python-cython pkg-config))
12265 (inputs
12266 (list hdf5-1.10 bzip2 zlib))
12267 (home-page "https://www.pytables.org/")
12268 (synopsis "Hierarchical datasets for Python")
12269 (description "PyTables is a package for managing hierarchical datasets and
12270 designed to efficiently cope with extremely large amounts of data.")
12271 (license license:bsd-3)))
12272
12273 (define-public python-sniffio
12274 (package
12275 (name "python-sniffio")
12276 (version "1.2.0")
12277 (source
12278 (origin
12279 (method url-fetch)
12280 (uri (pypi-uri "sniffio" version))
12281 (sha256
12282 (base32 "1pnkvi6wvn4qd37y69n1ls6n8l63gfmn3pvb1jb50gqxxkn6wrn4"))))
12283 (build-system python-build-system)
12284 (arguments
12285 `(#:phases
12286 (modify-phases %standard-phases
12287 (replace 'check
12288 (lambda _
12289 (invoke "pytest" "-vv"))))))
12290 (native-inputs
12291 (list python-curio python-pytest python-pytest-cov))
12292 (home-page "https://github.com/python-trio/sniffio")
12293 (synopsis "Detect which async library a program is running under")
12294 (description "This package detects which async library a program is
12295 running under. It supports multiple async I/O packages, like Trio, and
12296 asyncio.")
12297 ;; Either license applies.
12298 (license (list license:expat license:asl2.0))))
12299
12300 (define-public python-pytest-black
12301 (package
12302 (name "python-pytest-black")
12303 (version "0.3.12")
12304 (source
12305 (origin
12306 (method url-fetch)
12307 (uri (pypi-uri "pytest-black" version))
12308 (sha256
12309 (base32
12310 "19bmbcnaq02md8nnj6pywri3vps8sxnhysbfy386qkbn9w09ncqx"))))
12311 (build-system python-build-system)
12312 (propagated-inputs
12313 (list python-pytest python-black python-toml))
12314 (native-inputs
12315 (list python-setuptools-scm))
12316 (home-page "https://github.com/shopkeep/pytest-black")
12317 (synopsis "Pytest plugin to enable format checking with black")
12318 (description
12319 "This package provides a pytest plugin to enable format checking with the
12320 Python code formatter \"black\".")
12321 (license license:expat)))
12322
12323 (define-public python-geojson
12324 (package
12325 (name "python-geojson")
12326 (version "2.5.0")
12327 (source
12328 (origin
12329 (method url-fetch)
12330 (uri (pypi-uri "geojson" version))
12331 (sha256
12332 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
12333 (build-system python-build-system)
12334 (arguments
12335 ;; https://github.com/jazzband/geojson/issues/175
12336 `(#:tests? #f))
12337 (home-page "https://github.com/jazzband/geojson")
12338 (synopsis "Python bindings and utilities for GeoJSON")
12339 (description
12340 "This package provides Python bindings and utilities for
12341 @uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
12342 structures.")
12343 (license license:bsd-3)))
12344
12345 (define-public wfetch
12346 (let ((commit "e1cfa37814aebc9eb56ce994ebe877b6a6f9a715")
12347 (revision "1"))
12348 (package
12349 (name "wfetch")
12350 (version (git-version "0.1-pre" revision commit))
12351 (home-page "https://github.com/Gcat101/Wfetch")
12352 (source
12353 (origin
12354 (method git-fetch)
12355 (uri (git-reference (url home-page)
12356 (commit commit)))
12357 (file-name (git-file-name name version))
12358 (sha256
12359 (base32 "1dmr85plx8zr6s14ym3r32g6crwxghkval5a24ah90ijx4dbn5q5"))))
12360 (build-system python-build-system)
12361 (arguments
12362 `(#:use-setuptools? #f ; no setup.py
12363 #:tests? #f ; no test suite
12364 #:phases
12365 (modify-phases %standard-phases
12366 (delete 'build)
12367 (replace 'install
12368 (lambda* (#:key outputs #:allow-other-keys)
12369 (let* ((out (assoc-ref outputs "out"))
12370 (bin (string-append out "/bin"))
12371 (share (string-append out "/share")))
12372 (mkdir-p share)
12373 (substitute* "wfetch/wfetch.py"
12374 (("os.sep, 'opt', 'wfetch'") (string-append "'" share "'")))
12375 (install-file "wfetch/wfetch.py" bin)
12376 (copy-recursively "wfetch/icons" share)))))))
12377 (inputs (list python-pyowm python-fire python-termcolor python-requests))
12378 (synopsis "Command-line tool to display weather info")
12379 (description
12380 "This package provides a tool similar to Neofetch/pfetch, but for
12381 weather: it can display the weather condition, temperature, humidity, etc.
12382
12383 To use it, you must first run:
12384
12385 @example
12386 export WEATHER_CLI_API=@var{your OpenWeatherMap API key}
12387 @end example\n")
12388 (license license:gpl3+))))
12389
12390 (define-public python-get-version
12391 (package
12392 (name "python-get-version")
12393 (version "2.1")
12394 (source
12395 (origin
12396 (method url-fetch)
12397 (uri (pypi-uri "get_version" version))
12398 (sha256
12399 (base32
12400 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
12401 (build-system python-build-system)
12402 (propagated-inputs
12403 (list python-pygments
12404 python-pytest
12405 python-pytest-black
12406 python-pytest-cov
12407 python-setuptools
12408 python-testpath))
12409 (home-page "https://github.com/flying-sheep/get_version")
12410 (synopsis "Version helper in the spirit of versioneer")
12411 (description
12412 "This package provides a version helper that lets you automatically use
12413 the latest @code{vX.X.X} Git tag as the version in your Python package. It
12414 also supports getting the version from Python source distributions or, once
12415 your package is installed, via @code{pkg_resources} (part of
12416 @code{setuptools}).")
12417 (license license:gpl3+)))
12418
12419 (define-public python-filetype
12420 (package
12421 (name "python-filetype")
12422 (version "1.0.8")
12423 (source
12424 (origin
12425 (method url-fetch)
12426 (uri (pypi-uri "filetype" version))
12427 (sha256
12428 (base32 "05mkinkcn36v1cnb5hzay3zxmv7jmmflckxxp08rgzbkkf3i9pvp"))))
12429 (build-system python-build-system)
12430 (arguments
12431 `(#:phases
12432 (modify-phases %standard-phases
12433 (replace 'check
12434 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
12435 (when tests?
12436 (add-installed-pythonpath inputs outputs)
12437 (invoke "python" "-m" "pytest" "-k"
12438 (string-append
12439 ;; Both tests fail with FileNotFoundError.
12440 "not test_infer_zip_from_disk"
12441 " and not test_infer_tar_from_disk"))))))))
12442 (native-inputs
12443 (list python-pytest python-pytest-benchmark))
12444 (home-page "https://github.com/h2non/filetype.py")
12445 (synopsis "Infer file type and MIME type of any file/buffer")
12446 (description "@code{filetype} is a small and dependency free Python
12447 package to infer file type and MIME type checking the magic numbers
12448 signature of a file or buffer.")
12449 (license license:expat)))
12450
12451 (define-public python-cachelib
12452 (package
12453 (name "python-cachelib")
12454 (version "0.4.1")
12455 (source
12456 (origin
12457 (method url-fetch)
12458 (uri (pypi-uri "cachelib" version))
12459 (sha256
12460 (base32 "0p4chkvbvffcllsny5rpzmsq2vyr24ql3kzif4ha0fxp3fp7vqk8"))))
12461 (build-system python-build-system)
12462 (arguments
12463 `(#:phases
12464 (modify-phases %standard-phases
12465 (replace 'check
12466 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
12467 (when tests?
12468 (add-installed-pythonpath inputs outputs)
12469 (invoke "pytest")))))))
12470 (native-inputs
12471 (list python-pytest python-pytest-xprocess))
12472 (home-page "https://github.com/pallets/cachelib")
12473 (synopsis "Collection of cache libraries")
12474 (description "Cachelib is a library extracted from @code{werkzeug} which
12475 provides a collection of cache libraries in the same API interface.")
12476 (license license:bsd-3)))
12477
12478 (define-public python-pylru
12479 (package
12480 (name "python-pylru")
12481 (version "1.2.0")
12482 (source
12483 (origin
12484 (method url-fetch)
12485 (uri (pypi-uri "pylru" version))
12486 (sha256
12487 (base32 "15yj46307sw703vjfkgnr04dqvaicmfcj0hc6yrciildp55r6bs9"))))
12488 (build-system python-build-system)
12489 (arguments
12490 `(#:phases
12491 (modify-phases %standard-phases
12492 (replace 'check
12493 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
12494 (when tests?
12495 (add-installed-pythonpath inputs outputs)
12496 (invoke "python" "test.py")))))))
12497 (home-page "https://github.com/jlhutch/pylru")
12498 (synopsis "Least recently used (LRU) cache implementation")
12499 (description
12500 "Pylru implements a true LRU cache along with several support classes.
12501 Pylru provides a cache class with a simple dict interface. It also provides
12502 classes to wrap any object that has a dict interface with a cache. Both
12503 write-through and write-back semantics are supported. Pylru also provides
12504 classes to wrap functions in a similar way, including a function decorator.")
12505 (license license:gpl2+)))
12506
12507 (define-public python-legacy-api-wrap
12508 (package
12509 (name "python-legacy-api-wrap")
12510 (version "1.2")
12511 (source
12512 (origin
12513 (method url-fetch)
12514 (uri (pypi-uri "legacy-api-wrap" version))
12515 (sha256
12516 (base32
12517 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
12518 (build-system python-build-system)
12519 (propagated-inputs
12520 (list python-get-version python-pytest python-pytest-black
12521 python-pytest-cov python-setuptools))
12522 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
12523 (synopsis "Legacy API wrapper")
12524 (description "This module defines a decorator to wrap legacy APIs. The
12525 primary use case is APIs defined before keyword-only parameters existed.")
12526 (license license:gpl3+)))
12527
12528 (define-public python-langdetect
12529 (package
12530 (name "python-langdetect")
12531 (version "1.0.9")
12532 (source
12533 (origin
12534 (method url-fetch)
12535 (uri (pypi-uri "langdetect" version))
12536 (sha256
12537 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
12538 (build-system python-build-system)
12539 (propagated-inputs
12540 (list python-six))
12541 (home-page "https://github.com/Mimino666/langdetect")
12542 (synopsis "Language detection library")
12543 (description
12544 "This library is a port of Nakatani Shuyo's language-detection library
12545 (version from 03/03/2014) to Python.")
12546 (license license:expat)))
12547
12548 (define-public python-pyasn1
12549 (package
12550 (name "python-pyasn1")
12551 (version "0.4.8")
12552 (source
12553 (origin
12554 (method url-fetch)
12555 (uri (pypi-uri "pyasn1" version))
12556 (sha256
12557 (base32
12558 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
12559 (build-system python-build-system)
12560 (home-page "http://pyasn1.sourceforge.net/")
12561 (synopsis "ASN.1 types and codecs")
12562 (description
12563 "This is an implementation of ASN.1 types and codecs in Python. It is
12564 suitable for a wide range of protocols based on the ASN.1 specification.")
12565 (license license:bsd-2)))
12566
12567 (define-public python-pyasn1-modules
12568 (package
12569 (name "python-pyasn1-modules")
12570 (version "0.2.8")
12571 (source
12572 (origin
12573 (method url-fetch)
12574 (uri (pypi-uri "pyasn1-modules" version))
12575 (sha256
12576 (base32
12577 "0pp6dcagd8c2c9qx3lahc1rdwlnmm0y0siqr5icjq2r32b3q8pwh"))))
12578 (build-system python-build-system)
12579 (propagated-inputs
12580 (list python-pyasn1))
12581 (home-page "https://sourceforge.net/projects/pyasn1/")
12582 (synopsis "ASN.1 codec implementations")
12583 (description
12584 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
12585 implementations of ASN.1-based codecs and protocols.")
12586 (license license:bsd-3)))
12587
12588 (define-public python-ipaddress
12589 (package
12590 (name "python-ipaddress")
12591 (version "1.0.23")
12592 (source (origin
12593 (method url-fetch)
12594 (uri (pypi-uri "ipaddress" version))
12595 (sha256
12596 (base32
12597 "1qp743h30s04m3cg3yk3fycad930jv17q7dsslj4mfw0jlvf1y5p"))))
12598 (build-system python-build-system)
12599 (home-page "https://github.com/phihag/ipaddress")
12600 (synopsis "IP address manipulation library")
12601 (description
12602 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
12603 in Python. This library is used to create, poke at, and manipulate IPv4 and
12604 IPv6 addresses and networks.")
12605 (license license:psfl)))
12606
12607 (define-public python-asn1tools
12608 (package
12609 (name "python-asn1tools")
12610 (version "0.158.0")
12611 (source
12612 (origin
12613 (method url-fetch)
12614 (uri (pypi-uri "asn1tools" version))
12615 (sha256
12616 (base32 "1k88a1azmyvp2ab6qcf2i40dig5abhyn7cmlyhmwwh8kr3syvma0"))))
12617 (build-system python-build-system)
12618 (propagated-inputs
12619 (list python-bitstruct python-diskcache python-prompt-toolkit
12620 python-pyparsing))
12621 (home-page "https://github.com/eerimoq/asn1tools")
12622 (synopsis "ASN.1 parsing, encoding and decoding")
12623 (description "This package provides ASN.1 parsing, encoding and decoding
12624 for Python, including constraints checking. It supports several
12625 codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
12626 for OER and UPER.")
12627 (license license:expat)))
12628
12629 (define-public python-idna
12630 (package
12631 (name "python-idna")
12632 (version "3.3")
12633 (source
12634 (origin
12635 (method url-fetch)
12636 (uri (pypi-uri "idna" version))
12637 (sha256
12638 (base32
12639 "0v8f6qjfi5i7qc5icsbv2pi24qy6k6m8wjqjvdf2sxjvlpq3yr4x"))))
12640 (build-system python-build-system)
12641 (home-page "https://github.com/kjd/idna")
12642 (synopsis "Internationalized domain names in applications")
12643 (description
12644 "This is a library to support the Internationalised Domain Names in
12645 Applications (IDNA) protocol as specified in RFC 5891. This version of the
12646 protocol is often referred to as “IDNA2008” and can produce different results
12647 from the earlier standard from 2003. The library is also intended to act as a
12648 suitable drop-in replacement for the “encodings.idna” module that comes with
12649 the Python standard library but currently only supports the older 2003
12650 specification.")
12651 (license license:bsd-4)))
12652
12653 (define-public python-libsass
12654 (package
12655 (name "python-libsass")
12656 (version "0.20.1")
12657 (source
12658 (origin
12659 ;; PyPI tarball is missing some test files.
12660 (method git-fetch)
12661 (uri (git-reference
12662 (url "https://github.com/sass/libsass-python")
12663 (commit version)))
12664 (file-name (git-file-name name version))
12665 (sha256
12666 (base32 "1r0kgl7i6nnhgjl44sjw57k08gh2qr7l8slqih550dyxbf1akbxh"))))
12667 (build-system python-build-system)
12668 (arguments
12669 '(#:phases
12670 (modify-phases %standard-phases
12671 ;; Use Guix package of libsass instead of compiling from a checkout.
12672 (add-before 'build 'set-libsass
12673 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
12674 (replace 'check
12675 (lambda* (#:key tests? #:allow-other-keys)
12676 (when tests?
12677 (invoke "pytest" "sasstests.py"))))
12678 (add-after 'install 'delete-test
12679 (lambda* (#:key inputs outputs #:allow-other-keys)
12680 ;; Delete sasstests.py because it attempts to open a file
12681 ;; that is not installed when loaded, which breaks the sanity
12682 ;; check.
12683 (delete-file (string-append
12684 (assoc-ref outputs "out")
12685 "/lib/python"
12686 (python-version
12687 (dirname (dirname
12688 (search-input-file inputs "bin/python"))))
12689 "/site-packages/sasstests.py")))))))
12690 (native-inputs
12691 (list python-pytest python-werkzeug))
12692 (inputs
12693 (list libsass))
12694 (propagated-inputs
12695 (list python-six))
12696 (home-page "https://sass.github.io/libsass-python/")
12697 (synopsis "Straightforward binding of libsass for Python")
12698 (description
12699 "This package provides a simple Python extension module @code{sass} which
12700 is binding LibSass.")
12701 (license license:expat)))
12702
12703 (define-public python-idna-ssl
12704 (package
12705 (name "python-idna-ssl")
12706 (version "1.0.1")
12707 (source
12708 (origin
12709 (method url-fetch)
12710 (uri (pypi-uri "idna-ssl" version))
12711 (sha256
12712 (base32
12713 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
12714 (build-system python-build-system)
12715 (arguments
12716 `(#:tests? #f)) ;circular dependency with python-aiohttp
12717 (propagated-inputs (list python-idna))
12718 (home-page "https://github.com/aio-libs/idna-ssl")
12719 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
12720 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
12721 domains support.")
12722 (license license:expat)))
12723
12724 ;;; Variant used to break a cycle with python-pip-run-bootstrap.
12725 (define-public python-path-bootstrap
12726 (hidden-package
12727 (package
12728 (name "python-path-bootstrap")
12729 (version "16.4.0")
12730 (source
12731 (origin
12732 (method url-fetch)
12733 (uri (pypi-uri "path" version))
12734 (sha256
12735 (base32 "0lig13gxnfv98v790db1smvsbd3mnj7y8rwyiwhfi6xiqibygwms"))))
12736 (build-system pyproject-build-system)
12737 (arguments
12738 (list #:tests? #f))
12739 (native-inputs (list python-setuptools-scm))
12740 (home-page "https://github.com/jaraco/path")
12741 (synopsis "Object-oriented file system path manipulation library")
12742 (description "@code{path} (formerly @code{path.py}) implements path
12743 objects as first-class entities, allowing common operations on files to be
12744 invoked on those path objects directly.")
12745 (license license:expat))))
12746
12747 (define-public python-path
12748 (package/inherit python-path-bootstrap
12749 (name "python-path")
12750 (arguments
12751 (substitute-keyword-arguments
12752 (package-arguments python-path-bootstrap)
12753 ((#:tests? _ #f)
12754 (not (%current-target-system)))
12755 ((#:test-flags flags #~'())
12756 #~(append (list "-vv" "-k"
12757 (string-append
12758 ;; Do not test the myproject.toml build as it tries
12759 ;; to pull dependencies from the Internet.
12760 "not project "
12761 ;; This tests assumes a root user exists.
12762 "and not test_get_owner"))
12763 #$flags))))
12764 (native-inputs
12765 (modify-inputs (package-native-inputs python-path-bootstrap)
12766 (append python-appdirs
12767 python-packaging
12768 python-pygments
12769 python-pytest
12770 python-pytest-black
12771 python-pytest-checkdocs
12772 python-pytest-cov
12773 python-pytest-enabler
12774 python-pytest-flake8
12775 python-pytest-mypy)))
12776 (properties (alist-delete 'hidden?
12777 (package-properties
12778 python-path-bootstrap)))))
12779
12780 (define-public python-pathpy
12781 (deprecated-package "python-pathpy" python-path))
12782
12783 (define-public python-pretend
12784 (package
12785 (name "python-pretend")
12786 (version "1.0.9")
12787 (source
12788 (origin
12789 (method url-fetch)
12790 (uri (pypi-uri "pretend" version))
12791 (sha256
12792 (base32
12793 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
12794 (build-system python-build-system)
12795 (home-page "https://github.com/alex/pretend")
12796 (synopsis "Library for stubbing in Python")
12797 (description
12798 "Pretend is a library to make stubbing with Python easier. Stubbing is a
12799 technique for writing tests. You may hear the term mixed up with mocks,
12800 fakes, or doubles. Basically, a stub is an object that returns pre-canned
12801 responses, rather than doing any computation.")
12802 (license license:bsd-3)))
12803
12804 ;;; Variant used to break a dependency cycle with
12805 ;;; python-pytest-perf-bootstrap.
12806 (define-public python-pip-run-bootstrap
12807 (hidden-package
12808 (package
12809 (name "python-pip-run-bootstrap")
12810 (version "8.8.0")
12811 (source (origin
12812 (method git-fetch)
12813 (uri (git-reference
12814 (url "https://github.com/jaraco/pip-run")
12815 (commit (string-append "v" version))))
12816 (file-name (git-file-name name version))
12817 (sha256
12818 (base32
12819 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
12820 (build-system python-build-system)
12821 (arguments
12822 (list
12823 #:tests? #f
12824 #:phases
12825 #~(modify-phases %standard-phases
12826 (add-before 'build 'pretend-version
12827 ;; The version string is usually derived via setuptools-scm, but
12828 ;; without the git metadata available this fails.
12829 (lambda _
12830 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
12831 (native-inputs (list python-setuptools-scm))
12832 (propagated-inputs (list python-autocommand python-path-bootstrap
12833 python-packaging))
12834 (home-page "https://github.com/jaraco/pip-run")
12835 (synopsis "Dynamic dependency loader for Python")
12836 (description "The @command{pip-run} command provides on-demand temporary
12837 package installation for a single interpreter run. It replaces this series of
12838 commands:
12839 @example
12840 $ virtualenv --python pythonX.X --system-site-packages /tmp/env
12841 $ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
12842 $ /tmp/env/bin/python ...
12843 $ rm -rf /tmp/env
12844 @end example")
12845 (license license:expat))))
12846
12847 (define-public python-pip-run
12848 (package/inherit python-pip-run-bootstrap
12849 (name "python-pip-run")
12850 (arguments
12851 (substitute-keyword-arguments (package-arguments python-pip-run-bootstrap)
12852 ((#:tests? _ #f)
12853 (not (%current-target-system)))
12854 ((#:phases phases #~%standard-phases)
12855 #~(modify-phases #$phases
12856 (replace 'check
12857 (lambda* (#:key tests? #:allow-other-keys)
12858 (when tests?
12859 (invoke "pytest" "-k"
12860 (string-append
12861 ;; Do not test the myproject.toml build as it tries
12862 ;; to pull dependencies from the internet.
12863 "not project "
12864 ;; These tests attempt to install dependencies from
12865 ;; the network and fail.
12866 "and not test_pkg_imported "
12867 "and not test_pkg_loaded_from_alternate_index ")))))))))
12868 (propagated-inputs
12869 (modify-inputs (package-propagated-inputs python-pip-run-bootstrap)
12870 (replace "python-path-bootstrap" python-path)))
12871 (native-inputs
12872 (modify-inputs (package-native-inputs python-pip-run-bootstrap)
12873 (append python-nbformat
12874 python-pygments
12875 python-pytest
12876 python-pytest-black
12877 python-pytest-checkdocs
12878 python-pytest-cov
12879 python-pytest-enabler
12880 python-pytest-flake8
12881 python-pytest-mypy)))
12882 (properties (alist-delete 'hidden? (package-properties
12883 python-pip-run-bootstrap)))))
12884
12885 (define-public python-tlsh
12886 (package
12887 (name "python-tlsh")
12888 (version "4.11.2")
12889 (home-page "https://github.com/trendmicro/tlsh")
12890 (source
12891 (origin
12892 (method git-fetch)
12893 (uri (git-reference (url home-page) (commit version)))
12894 (file-name (git-file-name name version))
12895 (sha256
12896 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
12897 (build-system cmake-build-system)
12898 (arguments
12899 (list #:out-of-source? #f
12900 #:phases
12901 #~(modify-phases %standard-phases
12902 (replace 'install
12903 (lambda _
12904 ;; Build and install the Python bindings. The underlying
12905 ;; C++ library is apparently not meant to be installed.
12906 (with-directory-excursion "py_ext"
12907 (and (system* "python" "setup.py" "build")
12908 (system* "python" "setup.py" "install"
12909 (string-append "--prefix=" #$output))))))
12910 ;; Delay tests until the phase above has run.
12911 (delete 'check)
12912 (add-after 'install 'check
12913 (lambda* (#:key tests? #:allow-other-keys)
12914 (substitute* "Testing/python_test.sh"
12915 ;; The script sets up a working PYTHONPATH, but does not
12916 ;; export it for all subsequent test commands. Fix that.
12917 (("^PYTHONPATH=\".*" all)
12918 (string-append all "\nexport PYTHONPATH\n")))
12919 (when tests?
12920 (with-directory-excursion "Testing"
12921 (invoke "./python_test.sh"))))))))
12922 (inputs (list python-wrapper)) ;for the bindings
12923 (synopsis "Fuzzy matching library for Python")
12924 (description
12925 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
12926 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
12927 value which can be used for similarity comparisons. Similar objects have
12928 similar hash values, which allows for the detection of similar objects by
12929 comparing their hash values. The byte stream should have a sufficient amount
12930 of complexity; for example, a byte stream of identical bytes will not generate
12931 a hash value.")
12932 (license license:asl2.0)))
12933
12934 (define-public python-termcolor
12935 (package
12936 (name "python-termcolor")
12937 (version "1.1.0")
12938 (source
12939 (origin
12940 (method url-fetch)
12941 (uri (pypi-uri "termcolor" version))
12942 (sha256
12943 (base32
12944 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
12945 (build-system python-build-system)
12946 (arguments
12947 ;; There are no tests.
12948 `(#:tests? #f))
12949 (home-page "https://pypi.org/project/termcolor/")
12950 (synopsis "ANSII Color formatting for terminal output")
12951 (description
12952 "This package provides ANSII Color formatting for output in terminals.")
12953 (license license:expat)))
12954
12955 (define-public python-terminaltables
12956 (package
12957 (name "python-terminaltables")
12958 (version "3.1.0")
12959 (source
12960 (origin
12961 (method url-fetch)
12962 (uri (pypi-uri "terminaltables" version))
12963 (sha256
12964 (base32
12965 "109vhldk6nv1z3hzp4dyqf6rjvlhl0y2k5k7qcm9fcrq5swhxszk"))))
12966 (build-system python-build-system)
12967 (home-page "https://github.com/Robpol86/terminaltables")
12968 (synopsis
12969 "Generate simple tables in terminals from a nested list of strings")
12970 (description
12971 "This package makes it easy to draw tables in terminal/console
12972 applications from a list of lists of strings. It supports multi-line rows.")
12973 (license license:expat)))
12974
12975 (define-public python-libarchive-c
12976 (package
12977 (name "python-libarchive-c")
12978 (version "2.9")
12979 (source (origin
12980 (method url-fetch)
12981 (uri (pypi-uri "libarchive-c" version))
12982 (sha256
12983 (base32
12984 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
12985 (build-system python-build-system)
12986 (arguments
12987 '(#:phases (modify-phases %standard-phases
12988 (add-before
12989 'build 'reference-libarchive
12990 (lambda* (#:key inputs #:allow-other-keys)
12991 ;; Retain the absolute file name of libarchive.so.
12992 (let ((libarchive (assoc-ref inputs "libarchive")))
12993 (substitute* "libarchive/ffi.py"
12994 (("find_library\\('archive'\\)")
12995 (string-append "'" libarchive
12996 "/lib/libarchive.so'"))))))
12997 (replace 'check
12998 (lambda _ (invoke "pytest" "-vv"))))))
12999 (native-inputs
13000 (list python-mock python-pytest))
13001 (inputs
13002 (list libarchive))
13003 (home-page "https://github.com/Changaco/python-libarchive-c")
13004 (synopsis "Python interface to libarchive")
13005 (description
13006 "This package provides Python bindings to libarchive, a C library to
13007 access possibly compressed archives in many different formats. It uses
13008 Python's @code{ctypes} foreign function interface (FFI).")
13009 (license license:lgpl2.0+)))
13010
13011 (define-public python-file
13012 (package/inherit file
13013 (name "python-file")
13014 (build-system python-build-system)
13015 (arguments
13016 '(#:tests? #f ;no tests
13017 #:configure-flags '("--single-version-externally-managed" "--root=/")
13018 #:phases (modify-phases %standard-phases
13019 (add-before 'build 'change-directory
13020 (lambda _
13021 (chdir "python")
13022 #t))
13023 (add-before 'build 'set-library-file-name
13024 (lambda* (#:key inputs #:allow-other-keys)
13025 (let ((file (assoc-ref inputs "file")))
13026 (substitute* "magic.py"
13027 (("find_library\\('magic'\\)")
13028 (string-append "'" file "/lib/libmagic.so'")))
13029 #t))))))
13030 (inputs `(("file" ,file)))
13031 (native-inputs (if (%current-target-system)
13032 `(("self" ,this-package))
13033 '()))
13034 (synopsis "Python bindings to the libmagic file type guesser")
13035 (description "This package provides Python bindings to the libmagic file
13036 type guesser.
13037
13038 Note that this module and the @code{python-magic} module both provide a
13039 @file{magic.py} file; these two modules, which are different and were
13040 developed separately, both serve the same purpose: provide Python bindings for
13041 libmagic.")))
13042
13043 (define-public python-pydevd
13044 ;; Use the latest commit, which includes cleanups that removes Python 2
13045 ;; syntax that would fail to build.
13046 (let ((revision "0")
13047 (commit "47e298499ef19563bb2ef5941a57046a35ae6868"))
13048 (package
13049 (name "python-pydevd")
13050 (version (git-version "2.8.0" revision commit))
13051 (source
13052 (origin
13053 (method git-fetch)
13054 (uri (git-reference
13055 (url "https://github.com/fabioz/PyDev.Debugger")
13056 (commit commit)))
13057 (modules '((guix build utils)))
13058 (snippet '(begin
13059 ;; Delete pre-built binaries.
13060 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
13061 ;; This source is generated via Cython.
13062 (delete-file "_pydevd_bundle/pydevd_cython.c")))
13063 (file-name (git-file-name name version))
13064 (sha256
13065 (base32
13066 "1yd017dh6xgxrqcyf8kk8jrr0a3zw895yfjih0z5jghyf0rck38q"))))
13067 (build-system python-build-system)
13068 (arguments
13069 (list
13070 #:phases
13071 #~(modify-phases %standard-phases
13072 (add-after 'unpack 'fix-tests
13073 (lambda _
13074 (substitute* "tests_python/test_convert_utilities.py"
13075 ;; Add missing trailing '/'.
13076 (("'\\\\\\\\usr\\\\\\\\bin\\\\\\\\') == '/usr/bin" all)
13077 (string-append all "/")))))
13078 (add-after 'unpack 'patch-command-paths
13079 (lambda* (#:key inputs #:allow-other-keys)
13080 (substitute* "_pydevd_bundle/pydevd_api.py"
13081 (("'kill'")
13082 (format #f "~s" (search-input-file inputs "bin/kill")))
13083 (("'pgrep'")
13084 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
13085 (add-after 'unpack 'generate-sources
13086 (lambda _
13087 (setenv "PYTHONPATH" (getcwd))
13088 (invoke "python" "build_tools/build.py")))
13089 (add-after 'unpack 'adjust-attach-binary-name
13090 (lambda _
13091 (substitute*
13092 '("pydevd_tracing.py"
13093 "pydevd_attach_to_process/add_code_to_python_process.py")
13094 (("def get_(target|python_helper_lib)_filename.*" all)
13095 (format #f "~a return ~s~%" all
13096 (string-append #$output "/lib/attach.so"))))))
13097 (add-after 'unpack 'patch-gdb
13098 (lambda* (#:key inputs #:allow-other-keys)
13099 (substitute*
13100 "pydevd_attach_to_process/add_code_to_python_process.py"
13101 (("'gdb',")
13102 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
13103 (add-after 'build 'build-attach-linux-binary
13104 (lambda _
13105 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
13106 "-fPIC" "-nostartfiles"
13107 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
13108 (replace 'check
13109 (lambda* (#:key tests? #:allow-other-keys)
13110 (when tests?
13111 (setenv "PYDEVD_USE_CYTHON" "YES")
13112 (invoke "pytest" "-vv"
13113 "-n" (number->string (parallel-job-count))
13114 "-k"
13115 (string-append
13116 ;; the GUI event loop requires an X server.
13117 "not test_gui_event_loop_custom "
13118 ;; This test validates that 'pydevd' is not in the
13119 ;; exception message, but it is due to being part
13120 ;; of the build file name present in the message.
13121 "and not test_evaluate_exception_trace "
13122 ;; These fail on systems with YAMA LSM’s ptrace
13123 ;; scope > 0. Upstream issue:
13124 ;; https://github.com/fabioz/PyDev.Debugger/issues/218
13125 "and not test_attach_to_pid")))))
13126 (add-after 'install 'install-attach-binary
13127 (lambda _
13128 (install-file "attach.so"
13129 (string-append #$output "/lib"))))
13130 ;; Some modules aren't designed to be loadable by themselves, such
13131 ;; as 'pydev_app_engine_debug_startup' and fail.
13132 (delete 'sanity-check))))
13133 (native-inputs
13134 (list python-cython
13135 python-numpy
13136 python-psutil
13137 python-pytest
13138 python-pytest-xdist
13139 python-trio
13140 python-untangle))
13141 (inputs (list coreutils gdb procps))
13142 (home-page "https://github.com/fabioz/PyDev.Debugger/")
13143 (synopsis "Python debugger")
13144 (description "PyDev.Debugger is a capable Python debugger used in PyDev
13145 and other @acronym{IDEs, Integrated Development Environments}.")
13146 (license license:epl1.0))))
13147
13148 (define-public python-debugpy
13149 (package
13150 (name "python-debugpy")
13151 (version "1.6.0")
13152 (source
13153 (origin
13154 (method git-fetch)
13155 (uri (git-reference ;no tests in PyPI archive
13156 (url "https://github.com/microsoft/debugpy")
13157 (commit (string-append "v" version))))
13158 (file-name (git-file-name name version))
13159 (modules '((guix build utils)))
13160 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
13161 ;; attach binary.
13162 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
13163 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
13164 (sha256
13165 (base32
13166 "1dpfzs3p51648i7f3fz8dw5d0vrj39iwn1jhn0226idc02ybyqih"))))
13167 (build-system python-build-system)
13168 (arguments
13169 (list
13170 #:tests? #f ; Fail on systems with YAMA LSM’s ptrace scope > 0.
13171 #:phases
13172 #~(modify-phases %standard-phases
13173 (add-after 'unpack 'patch-sh-in-tests
13174 (lambda _
13175 (substitute* "tests/debugpy/test_run.py"
13176 (("#!/bin/sh")
13177 (string-append "#!" (which "sh"))))))
13178 (add-after 'unpack 'fix-version
13179 ;; Versioneer is useless when there is no git metadata.
13180 (lambda _
13181 (substitute* "setup.py"
13182 (("version=versioneer.get_version\\(),")
13183 (format #f "version=~s," #$version)))))
13184 (add-before 'build 'configure
13185 (lambda _
13186 ;; This adjusts the behavior of debugpy to load pydevd from
13187 ;; Python site packages.
13188 (setenv "DEBUGPY_BUNDLING_DISABLED" "1")))
13189 (replace 'check
13190 (lambda* (#:key tests? #:allow-other-keys)
13191 (when tests?
13192 (invoke "pytest" "-vv"
13193 "-n" (number->string (parallel-job-count))
13194 "-k"
13195 (string-append
13196 ;; These tests cannot be run in parallel because their
13197 ;; test data would not be copied by xdist and lead to
13198 ;; import errors. (see:
13199 ;; https://github.com/microsoft/debugpy/issues/342 and
13200 ;; https://github.com/microsoft/debugpy/issues/880).
13201 "not test_custom_python_args "
13202 "and not test_autokill "))))))))
13203 (native-inputs
13204 ;; See: https://raw.githubusercontent.com/microsoft/debugpy/
13205 ;; main/tests/requirements.txt.
13206 (list python-django
13207 python-gevent
13208 python-flask
13209 python-psutil
13210 python-pytest
13211 python-pytest-cov
13212 python-pytest-timeout
13213 python-pytest-xdist
13214 python-requests))
13215 (propagated-inputs (list python-pydevd))
13216 (home-page "https://aka.ms/debugpy")
13217 (synopsis "Debug Adapter Protocol Python implementation")
13218 (description "An implementation of the Debug Adapter Protocol for
13219 Python.")
13220 (license license:expat)))
13221
13222 (define-public python-debian
13223 (package
13224 (name "python-debian")
13225 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
13226 (version "0.1.36")
13227 (source
13228 (origin
13229 ;; Use git-fetch, as pypi doesn't include test suite.
13230 (method git-fetch)
13231 (uri (git-reference
13232 (url home-page)
13233 (commit version)))
13234 (file-name (git-file-name name version))
13235 (sha256
13236 (base32
13237 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
13238 (build-system python-build-system)
13239 (arguments
13240 `(#:phases (modify-phases %standard-phases
13241 (add-after 'unpack 'set-version
13242 ;; for reproducible builds, otherwise python-debian
13243 ;; generates a _version.py including the date
13244 (lambda _
13245 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
13246 (substitute* "lib/debian/_version.py"
13247 (("__CHANGELOG_VERSION__") ,version))))
13248 (add-after 'unpack 'remove-debian-specific-tests
13249 ;; python-apt, apt and dpkg are not yet available in guix,
13250 ;; and these tests heavily depend on them.
13251 (lambda _
13252 (delete-file "lib/debian/tests/test_deb822.py")
13253 (delete-file "lib/debian/tests/test_debfile.py")
13254 #t)))))
13255 (propagated-inputs
13256 (list python-six python-chardet))
13257 (synopsis "Debian package related modules")
13258 (description
13259 ;; XXX: Use @enumerate instead of @itemize to work around
13260 ;; <http://bugs.gnu.org/21772>.
13261 "This package provides Python modules that abstract many formats of
13262 Debian-related files, such as:
13263
13264 @enumerate
13265 @item Debtags information;
13266 @item @file{debian/changelog} files;
13267 @item packages files, pdiffs;
13268 @item control files of single or multiple RFC822-style paragraphs---e.g.
13269 @file{debian/control}, @file{.changes}, @file{.dsc};
13270 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
13271 contained files and meta-information.
13272 @end enumerate\n")
13273
13274 ;; Modules are either GPLv2+ or GPLv3+.
13275 (license license:gpl3+)))
13276
13277 (define-public python-json-spec
13278 (package
13279 (name "python-json-spec")
13280 (version "0.10.1")
13281 (source
13282 (origin
13283 (method url-fetch)
13284 (uri (pypi-uri "json-spec" version))
13285 (sha256
13286 (base32
13287 "06dpbsq61ja9r89wpa2pzdii47qh3xri9ajdrgn1awfl102znchb"))))
13288 (build-system python-build-system)
13289 (propagated-inputs
13290 (list python-pathlib python-six))
13291 (native-inputs
13292 (list python-pytest))
13293 (home-page "http://py.errorist.io/json-spec")
13294 (synopsis
13295 "JSON Schema, JSON Pointer and JSON Reference for Python")
13296 (description
13297 "This Python library implements several JSON specs, like JSON Schema,
13298 JSON Reference and JSON Pointer.")
13299 (license license:bsd-3)))
13300
13301 (define-public python-fastbencode
13302 (package
13303 (name "python-fastbencode")
13304 (version "0.0.7")
13305 (source
13306 (origin
13307 (method url-fetch)
13308 (uri (pypi-uri "fastbencode" version))
13309 (modules '((guix build utils)))
13310 ;; Delete pre-generated Cython C files.
13311 (snippet '(for-each delete-file (find-files "." "\\.c$")))
13312 (sha256
13313 (base32 "1r66w3vpmvfmssshjpgqaj2m14c8p94nymr96mwn61idajz9mg5n"))))
13314 (build-system python-build-system)
13315 (native-inputs (list python-cython))
13316 (home-page "https://github.com/breezy-team/fastbencode")
13317 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
13318 (description
13319 "The fastbencode Python package implements the bencode serialization
13320 format for storing and transmitting loosely structured data, originally used
13321 by BitTorrent.
13322
13323 The format can encode four different types of values: byte strings, integers,
13324 lists, and dictionaries (associative arrays). It's simple and unaffected by
13325 endianness,
13326
13327 This package includes both a pure-Python version and an optional C extension
13328 based on Cython. Both provide the same functionality, but the C version has
13329 significantly better performance.")
13330 (license (list license:expat ; _bencode_py.py
13331 license:gpl2+)))) ; __init__.py
13332
13333 (define-public python-fastjsonschema
13334 (package
13335 (name "python-fastjsonschema")
13336 (version "2.15.1")
13337 (source
13338 (origin
13339 (method url-fetch)
13340 (uri (pypi-uri "fastjsonschema" version))
13341 (sha256
13342 (base32 "1ln2j60jzyn6p8i8ljygfgrji58hc23452g7nllkcjdk4p93c7v7"))))
13343 (build-system python-build-system)
13344 (arguments
13345 `(#:tests? #f ; Fail with a strange backtrace ending in importlib.
13346 #:phases
13347 (modify-phases %standard-phases
13348 (replace 'check
13349 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
13350 (when tests?
13351 (invoke "pytest" "-vv" "-m" "not benchmark")))))))
13352 (native-inputs
13353 (list python-colorama
13354 python-json-spec
13355 python-jsonschema
13356 python-pylint
13357 python-pytest
13358 python-pytest-benchmark
13359 python-pytest-cache
13360 python-validictory))
13361 (home-page
13362 "https://github.com/horejsek/python-fastjsonschema")
13363 (synopsis
13364 "Fast Python implementation of JSON schema")
13365 (description
13366 "This library implements validation of JSON documents by JSON schema for
13367 drafts 04, 06 and 07.")
13368 (license license:bsd-3)))
13369
13370 (define-public python-nbformat
13371 (package
13372 (name "python-nbformat")
13373 (version "5.3.0")
13374 ;; The PyPi release tarball lacks some test cases and test data.
13375 (source (origin
13376 (method git-fetch)
13377 (uri (git-reference
13378 (url "https://github.com/jupyter/nbformat")
13379 (commit version)))
13380 (sha256
13381 (base32
13382 "114c5c6cvpxhxj8zrw74351gcfzyzjh1jq3py4xf8wk9rahfay9z"))
13383 (file-name (git-file-name name version))))
13384 (build-system python-build-system)
13385 (arguments
13386 `(#:phases
13387 (modify-phases %standard-phases
13388 (replace 'check
13389 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
13390 (when tests?
13391 (invoke "pytest" "-vv")))))))
13392 (propagated-inputs
13393 (list python-fastjsonschema python-jsonschema python-jupyter-core
13394 python-traitlets))
13395 (native-inputs
13396 (list python-pytest
13397 python-testpath))
13398 (home-page "https://jupyter.org")
13399 (synopsis "Jupyter Notebook format")
13400 (description "This package provides the reference implementation of the
13401 Jupyter Notebook format and Python APIs for working with notebooks.")
13402 (license license:bsd-3)))
13403
13404 (define-public python-nb-clean
13405 (package
13406 (name "python-nb-clean")
13407 (version "2.1.0")
13408 (source
13409 (origin
13410 (method url-fetch)
13411 (uri (pypi-uri "nb-clean" version))
13412 (sha256
13413 (base32 "01qvk9n7rx15dhc23m8bj9bw5wdyxh6y18c5fm8hllmrd3ndsx14"))))
13414 (build-system python-build-system)
13415 (propagated-inputs (list python-nbformat))
13416 (home-page "https://github.com/srstevenson/nb-clean")
13417 (synopsis "Clean Jupyter notebooks for versioning")
13418 (description "This package cleans Jupyter notebooks of cell execution
13419 counts, metadata, outputs, and empty cells, preparing them for committing to
13420 version control. It provides a Git filter to automatically clean notebooks
13421 before they're staged, and can also be used with other version control
13422 systems, as a command line tool, and as a Python library.")
13423 (license license:isc)))
13424
13425 (define-public python-bleach
13426 (package
13427 (name "python-bleach")
13428 (version "5.0.0")
13429 (source
13430 (origin
13431 (method url-fetch)
13432 (uri (pypi-uri "bleach" version))
13433 (sha256
13434 (base32 "0rc5avysbsl3w3i2qvb6522263zhwlvf50w0ifs8776w9c2wrmn6"))))
13435 (build-system python-build-system)
13436 (arguments
13437 '(#:phases (modify-phases %standard-phases
13438 (replace 'check
13439 (lambda* (#:key tests? #:allow-other-keys)
13440 (when tests? (invoke "pytest" "-vv")))))))
13441 (propagated-inputs (list python-tinycss2 python-webencodings))
13442 (native-inputs (list python-pytest))
13443 (home-page "https://github.com/mozilla/bleach")
13444 (synopsis "Whitelist-based HTML-sanitizing tool")
13445 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
13446 (license license:asl2.0)))
13447
13448 (define-public python-entrypoints
13449 (package
13450 (name "python-entrypoints")
13451 (version "0.3")
13452 (source
13453 (origin
13454 (method url-fetch)
13455 (uri (pypi-uri "entrypoints" version))
13456 (sha256
13457 (base32
13458 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
13459 (build-system python-build-system)
13460 ;; The package does not come with a setup.py file, so we have to generate
13461 ;; one ourselves.
13462 (arguments
13463 `(#:tests? #f
13464 #:phases
13465 (modify-phases %standard-phases
13466 (add-after 'unpack 'create-setup.py
13467 (lambda _
13468 (call-with-output-file "setup.py"
13469 (lambda (port)
13470 (format port "\
13471 from setuptools import setup
13472 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
13473 " ,version))))))))
13474 (home-page "https://github.com/takluyver/entrypoints")
13475 (synopsis "Discover and load entry points from installed Python packages")
13476 (description "Entry points are a way for Python packages to advertise
13477 objects with some common interface. The most common examples are
13478 @code{console_scripts} entry points, which define shell commands by
13479 identifying a Python function to run. The @code{entrypoints} module contains
13480 functions to find and load entry points.")
13481 (license license:expat)))
13482
13483 (define-public python-epc
13484 (package
13485 (name "python-epc")
13486 (version "0.0.5")
13487 (source
13488 (origin
13489 (method url-fetch)
13490 (uri (pypi-uri "epc" version))
13491 (sha256
13492 (base32
13493 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
13494 (build-system python-build-system)
13495 (propagated-inputs
13496 (list python-sexpdata))
13497 (native-inputs
13498 (list python-nose))
13499 (home-page "https://github.com/tkf/python-epc")
13500 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
13501 (description
13502 "Python-EPC can call elisp functions from Python and Python functions
13503 from elisp.")
13504 (license license:gpl3)))
13505
13506 (define-public python-forex-python
13507 (package
13508 (name "python-forex-python")
13509 (version "1.5")
13510 (source
13511 (origin
13512 (method url-fetch)
13513 (uri (pypi-uri "forex-python" version))
13514 (sha256
13515 (base32 "1ma8cl1i2dh8aa99pifnlilyy4d1gd1s07fj0yd17wcbpsh532cj"))))
13516 (build-system python-build-system)
13517 (arguments
13518 ;; Tests are not included in the PyPI tarball. Also, the tests in the
13519 ;; repository require online data.
13520 `(#:tests? #f))
13521 (propagated-inputs
13522 (list python-requests python-simplejson))
13523 (home-page "https://github.com/MicroPyramid/forex-python")
13524 (synopsis "Foreign exchange rates and currency conversion")
13525 (description
13526 "@code{python-forex-python} can be used to manipulate foreign
13527 exchange rates and to operate currency conversions.
13528
13529 Features:
13530 @itemize
13531 @item List all currency rates.
13532 @item BitCoin price for all currencies.
13533 @item Converting amount to BitCoins.
13534 @item Get historical rates for any day since 1999.
13535 @item Conversion rate for one currency(ex; USD to INR).
13536 @item Convert amount from one currency to other.('USD 10$' to INR).
13537 @item Currency symbols.
13538 @item Currency names.
13539 @end itemize")
13540 (license license:expat)))
13541
13542 (define-public python-simpleeval
13543 (package
13544 (name "python-simpleeval")
13545 (version "0.9.12")
13546 (source
13547 (origin
13548 (method url-fetch)
13549 (uri (pypi-uri "simpleeval" version))
13550 (sha256
13551 (base32 "0diysdzvx865yy2rjfah75ha2qfxaxz7r108kp7j2kkd903ya2ry"))))
13552 (build-system python-build-system)
13553 (home-page "https://github.com/danthedeckie/simpleeval")
13554 (synopsis "Simple, safe single expression evaluator library")
13555 (description
13556 "This package provides a quick single file library for easily adding
13557 evaluatable expressions into python projects. Say you want to allow a user
13558 to set an alarm volume, which could depend on the time of day, alarm level,
13559 how many previous alarms had gone off, and if there is music playing at the
13560 time.")
13561 (license license:expat)))
13562
13563 (define-public python-nbconvert
13564 (package
13565 (name "python-nbconvert")
13566 (version "6.5.0")
13567 (source
13568 (origin
13569 (method url-fetch)
13570 (uri (pypi-uri "nbconvert" version))
13571 (sha256
13572 (base32
13573 "17g9xq4za7vvzml6l6d8zrzknhxsvgx02hymmsw9d1dygbi4cgi2"))))
13574 (build-system python-build-system)
13575 (arguments
13576 (list
13577 #:phases
13578 #~(modify-phases %standard-phases
13579 (add-after 'unpack 'fix-paths
13580 (lambda* (#:key inputs #:allow-other-keys)
13581 ;; Use pandoc binary from input.
13582 (substitute* "nbconvert/utils/pandoc.py"
13583 (("'pandoc'")
13584 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
13585 ;; Same for LaTeX.
13586 (substitute* "nbconvert/exporters/pdf.py"
13587 (("\"xelatex\"")
13588 (format #f "~s" (search-input-file inputs "bin/xelatex")))
13589 (("\"bibtex\"")
13590 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
13591 ;; Likewise for Inkscape.
13592 (substitute* "nbconvert/preprocessors/svg2pdf.py"
13593 (("inkscape_path = which\\(\"inkscape\")")
13594 (format #f "inkscape_path = ~s"
13595 (search-input-file inputs "bin/inkscape"))))))
13596 (replace 'check
13597 (lambda* (#:key tests? #:allow-other-keys)
13598 (when tests?
13599 ;; Tests depend on templates installed to output.
13600 (setenv "JUPYTER_PATH"
13601 (string-append #$output "/share/jupyter:"
13602 (getenv "JUPYTER_PATH")))
13603 ;; Step outside of the source directory to avoid having both
13604 ;; the installed package *and* the package from the source on
13605 ;; Python's path.
13606 (with-directory-excursion "/tmp"
13607 (invoke "pytest" "--pyargs" "nbconvert"
13608 "-vv" "-n" (number->string (parallel-job-count))
13609 "-k"
13610 (string-append
13611 ;; These tests require pyppeteer, not yet
13612 ;; available in Guix.
13613 "not test_webpdf_with_chromium "
13614 "and not test_webpdf.py "
13615 ;; These tests require ipywidgets, which would
13616 ;; introduce a dependency cycle.
13617 "and not test_execute_widgets_from_nbconvert "
13618 "and not test_execute_multiple_notebooks ")))))))))
13619 (inputs
13620 (list inkscape/stable pandoc))
13621 (native-inputs
13622 (list python-ipykernel
13623 ;; Adding ipywidgets would create a cycle.
13624 ;;python-ipywidgets
13625 ;;python-pyppeteer ;TODO: package me
13626 python-pytest
13627 python-pytest-xdist))
13628 (propagated-inputs
13629 (list python-beautifulsoup4
13630 python-bleach
13631 python-defusedxml
13632 python-entrypoints
13633 python-jinja2
13634 python-jupyter-core
13635 python-mistune
13636 python-nbclient
13637 python-nbformat
13638 python-pandocfilters
13639 python-pygments
13640 python-jupyterlab-pygments
13641 python-testpath
13642 python-traitlets
13643 ;; Required, even if [serve] is not used.
13644 python-tornado-6
13645 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
13646 texlive-adjustbox
13647 texlive-booktabs
13648 texlive-caption
13649 texlive-enumitem
13650 texlive-fontspec
13651 texlive-generic-iftex
13652 texlive-grffile
13653 texlive-hyperref
13654 texlive-latex-fancyvrb
13655 texlive-latex-float
13656 texlive-latex-geometry
13657 texlive-latex-jknapltx
13658 texlive-latex-ms
13659 texlive-latex-parskip
13660 texlive-latex-trimspaces
13661 texlive-latex-upquote
13662 texlive-stringenc
13663 texlive-tcolorbox
13664 texlive-titling
13665 texlive-tools
13666 texlive-ulem
13667 texlive-unicode-math
13668 texlive-xcolor
13669 (texlive-updmap.cfg (list texlive-amsfonts
13670 texlive-amsmath
13671 texlive-eurosym
13672 texlive-fonts-rsfs
13673 texlive-jknappen
13674 texlive-latex-ucs
13675 texlive-lm
13676 texlive-lm-math
13677 texlive-mathpazo
13678 texlive-oberdiek
13679 texlive-zapfding))))
13680 (home-page "https://jupyter.org")
13681 (synopsis "Converting Jupyter Notebooks")
13682 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
13683 notebooks to various other formats via Jinja templates. It allows you to
13684 convert an @code{.ipynb} notebook file into various static formats including:
13685
13686 @enumerate
13687 @item HTML
13688 @item LaTeX
13689 @item PDF
13690 @item Reveal JS
13691 @item Markdown (md)
13692 @item ReStructured Text (rst)
13693 @item executable script
13694 @end enumerate\n")
13695 (license license:bsd-3)))
13696
13697 (define-public python-notebook
13698 (package
13699 (name "python-notebook")
13700 (version "6.4.10")
13701 (source (origin
13702 (method url-fetch)
13703 (uri (pypi-uri "notebook" version))
13704 (sha256
13705 (base32
13706 "03p976xq1l9xf4djwk0snmywd0zck3i6gjngxsl874i8qrmsf214"))))
13707 (build-system python-build-system)
13708 (arguments
13709 `(#:phases
13710 (modify-phases %standard-phases
13711 (add-after 'unpack 'use-our-home-for-tests
13712 (lambda _
13713 ;; The 'get_patch_env' function in this file reads:
13714 ;; 'HOME': cls.home_dir
13715 ;; but for some reason, that definition of HOME is not what the
13716 ;; GLib/GIO trash mechanism honors, which would cause test
13717 ;; failures. Instead, set 'HOME' here to an existing directory
13718 ;; and let the tests honor it.
13719 (substitute* "notebook/tests/launchnotebook.py"
13720 (("'HOME': .*," all)
13721 (string-append "# " all "\n")))
13722 (setenv "HOME" (getcwd))))
13723 (replace 'check
13724 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
13725 ;; These tests require a browser.
13726 (delete-file-recursively "notebook/tests/selenium")
13727 (when tests?
13728 ;; Interferes with test expectations.
13729 (unsetenv "JUPYTER_CONFIG_PATH")
13730 ;; Some tests do not expect all files to be installed in the
13731 ;; same directory, but JUPYTER_PATH contains multiple entries.
13732 (unsetenv "JUPYTER_PATH")
13733 (invoke "pytest" "-vv"
13734 ;; TODO: This tests fails because nbconvert does not
13735 ;; list "python" as a format.
13736 "-k" "not test_list_formats")))))))
13737 (propagated-inputs
13738 (list python-argon2-cffi
13739 python-ipykernel
13740 python-ipython-genutils
13741 python-jinja2
13742 python-jupyter-client
13743 python-jupyter-core
13744 python-nest-asyncio
13745 python-nbconvert
13746 python-nbformat
13747 python-prometheus-client
13748 python-pyzmq
13749 python-send2trash
13750 python-terminado
13751 python-tornado-6
13752 python-traitlets))
13753 (native-inputs
13754 (list python-coverage
13755 python-nbval
13756 python-pytest
13757 python-pytest-cov
13758 python-requests
13759 python-requests-unixsocket))
13760 (home-page "https://jupyter.org/")
13761 (synopsis "Web-based notebook environment for interactive computing")
13762 (description
13763 "The Jupyter HTML notebook is a web-based notebook environment for
13764 interactive computing.")
13765 (license license:bsd-3)))
13766
13767 (define-public python-widgetsnbextension
13768 (package
13769 (name "python-widgetsnbextension")
13770 (version "3.5.1")
13771 (source
13772 (origin
13773 (method url-fetch)
13774 (uri (pypi-uri "widgetsnbextension" version))
13775 (sha256
13776 (base32
13777 "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
13778 (build-system python-build-system)
13779 (propagated-inputs
13780 (list python-notebook))
13781 (home-page "https://ipython.org")
13782 (synopsis "IPython HTML widgets for Jupyter")
13783 (description "This package provides interactive HTML widgets for Jupyter
13784 notebooks.")
13785 (license license:bsd-3)))
13786
13787 (define-public python-ipywidgets
13788 (package
13789 (name "python-ipywidgets")
13790 (version "7.6.3")
13791 (source
13792 (origin
13793 (method url-fetch)
13794 (uri (pypi-uri "ipywidgets" version))
13795 (sha256
13796 (base32
13797 "1w217j8i53x14l7b05fk300k222zs9vkcjaa1rbrw3sk43k466lz"))))
13798 (build-system python-build-system)
13799 (propagated-inputs
13800 (list python-ipykernel
13801 python-ipython
13802 python-jupyterlab-widgets
13803 python-nbformat
13804 python-traitlets
13805 python-widgetsnbextension))
13806 (native-inputs
13807 (list python-mock python-pytest python-pytest-cov))
13808 (home-page "https://ipython.org")
13809 (synopsis "IPython HTML widgets for Jupyter")
13810 (description "Ipywidgets are interactive HTML widgets for Jupyter
13811 notebooks and the IPython kernel. Notebooks come alive when interactive
13812 widgets are used. Users gain control of their data and can visualize changes
13813 in the data.")
13814 (license license:bsd-3)))
13815
13816 (define-public python-jupyter-console
13817 (package
13818 (name "python-jupyter-console")
13819 (version "6.4.0")
13820 (source
13821 (origin
13822 (method url-fetch)
13823 (uri (pypi-uri "jupyter_console" version))
13824 (sha256
13825 (base32
13826 "1iqrxhd8hvlyf8cqbc731ssnwm61wrycnbiczy5wsfahd3hlh8i4"))))
13827 (build-system python-build-system)
13828 (propagated-inputs
13829 (list python-ipykernel python-jupyter-client python-prompt-toolkit
13830 python-pygments))
13831 (native-inputs
13832 (list python-nose python-pytest))
13833 (home-page "https://jupyter.org")
13834 (synopsis "Jupyter terminal console")
13835 (description "This package provides a terminal-based console frontend for
13836 Jupyter kernels. It also allows for console-based interaction with non-Python
13837 Jupyter kernels such as IJulia and IRKernel.")
13838 (license license:bsd-3)))
13839
13840 ;; The python-ipython and python-jupyter-console require each other. To get
13841 ;; the functionality in both packages working, strip down the
13842 ;; python-jupyter-console package when using it as an input to python-ipython.
13843 (define python-jupyter-console-minimal
13844 (package/inherit python-jupyter-console
13845 (name "python-jupyter-console-minimal")
13846 (arguments
13847 (substitute-keyword-arguments
13848 (package-arguments python-jupyter-console)
13849 ((#:phases phases)
13850 `(modify-phases ,phases
13851 (add-after 'install 'delete-bin
13852 (lambda* (#:key outputs #:allow-other-keys)
13853 ;; Delete the bin files, to avoid conflicts in profiles
13854 ;; where python-ipython and python-jupyter-console are
13855 ;; both present.
13856 (delete-file-recursively
13857 (string-append
13858 (assoc-ref outputs "out") "/bin"))))))))
13859 ;; Remove the python-ipython propagated input, to avoid the cycle
13860 (propagated-inputs
13861 (modify-inputs (package-propagated-inputs python-jupyter-console)
13862 (delete "python-ipython")))))
13863
13864 (define-public python-qtconsole
13865 (package
13866 (name "python-qtconsole")
13867 (version "5.3.0")
13868 (source
13869 (origin
13870 (method url-fetch)
13871 (uri (pypi-uri "qtconsole" version))
13872 (sha256
13873 (base32 "09anp8g7vqi8z8wyi2lv21a2frd2dyhyrzvcrk2anijyqzyj0dcf"))))
13874 (build-system python-build-system)
13875 (arguments
13876 `(#:phases
13877 (modify-phases %standard-phases
13878 (add-before 'check 'pre-check
13879 (lambda _
13880 (setenv "QT_QPA_PLATFORM" "offscreen")
13881 (setenv "HOME" "/tmp")
13882 ;; FIXME: skip a failing test.
13883 (substitute* "qtconsole/tests/test_jupyter_widget.py"
13884 (("def test_other_output") "def _test_other_output")))))))
13885 (propagated-inputs
13886 (list python-ipykernel python-ipython-genutils python-jupyter-client
13887 python-jupyter-core python-pygments python-pyqt python-pyzmq
13888 python-qtpy python-traitlets))
13889 (native-inputs
13890 (list python-flaky python-pytest python-pytest-qt))
13891 (home-page "https://jupyter.org")
13892 (synopsis "Jupyter Qt console")
13893 (description "This package provides a Qt-based console for Jupyter with
13894 support for rich media output.")
13895 (license license:bsd-3)))
13896
13897 (define-public python-jsbeautifier
13898 (package
13899 (name "python-jsbeautifier")
13900 (version "1.10.2")
13901 (home-page "https://github.com/beautify-web/js-beautify")
13902 (source (origin
13903 (method git-fetch)
13904 (uri (git-reference
13905 (url home-page)
13906 (commit (string-append "v" version))))
13907 (file-name (git-file-name name version))
13908 (sha256
13909 (base32
13910 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
13911 (build-system python-build-system)
13912 (arguments
13913 `(#:phases (modify-phases %standard-phases
13914 (add-after 'unpack 'chdir
13915 (lambda _
13916 ;; The upstream Git repository contains all the code,
13917 ;; but this package only builds the python code.
13918 (chdir "python")
13919 #t))
13920 (add-after 'unpack 'patch-python-six-requirements
13921 (lambda _
13922 (substitute* "python/setup.py"
13923 (("six>=1.12.0")
13924 "six>=1.11.0"))
13925 #t)))))
13926 (propagated-inputs
13927 (list python-editorconfig python-six))
13928 (native-inputs
13929 (list python-pytest))
13930 (synopsis "JavaScript unobfuscator and beautifier")
13931 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
13932 popular online obfuscators.")
13933 (license license:expat)))
13934
13935 (define-public jupyter
13936 (package
13937 (name "jupyter")
13938 (version "1.0.0")
13939 (source
13940 (origin
13941 (method url-fetch)
13942 (uri (pypi-uri "jupyter" version))
13943 (sha256
13944 (base32
13945 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
13946 (build-system python-build-system)
13947 (arguments '(#:tests? #f)) ; there are none.
13948 (propagated-inputs
13949 (list python-ipykernel
13950 python-ipywidgets
13951 python-jupyter-console
13952 python-nbconvert
13953 python-notebook
13954 python-qtconsole))
13955 (home-page "https://jupyter.org")
13956 (synopsis "Web application for interactive documents")
13957 (description
13958 "The Jupyter Notebook is a web application that allows you to create and
13959 share documents that contain live code, equations, visualizations and
13960 explanatory text. Uses include: data cleaning and transformation, numerical
13961 simulation, statistical modeling, machine learning and much more.")
13962 (license license:bsd-3)))
13963
13964 (define-public python-chardet
13965 (package
13966 (name "python-chardet")
13967 (version "5.0.0")
13968 (source
13969 (origin
13970 (method url-fetch)
13971 (uri (pypi-uri "chardet" version))
13972 (sha256
13973 (base32
13974 "1amqmz8731ly6f9rkbk09w4jqgmmgyxykd1bawhgrdbqzlmxys03"))))
13975 (native-inputs
13976 (list python-pytest))
13977 (build-system python-build-system)
13978 (arguments
13979 (list #:phases
13980 #~(modify-phases %standard-phases
13981 (replace 'check
13982 (lambda _
13983 (invoke "pytest" "-vv" "-k"
13984 ;; Disable test that fails sporadically:
13985 ;; https://github.com/chardet/chardet/issues/256
13986 "not test_detect_all_and_detect_one_should_agree")))
13987 ;; This package provides a 'chardetect' executable that only
13988 ;; depends on Python, so customize the wrap phase to avoid
13989 ;; adding pytest and friends in order to save size.
13990 ;; (See also <https://bugs.gnu.org/25235>.)
13991 (replace 'wrap
13992 (lambda* (#:key inputs outputs #:allow-other-keys)
13993 (let* ((sitedir (site-packages inputs outputs))
13994 (python (dirname (dirname
13995 (search-input-file
13996 inputs "bin/python"))))
13997 (python-sitedir
13998 (string-append python "/lib/python"
13999 (python-version python)
14000 "/site-packages")))
14001 (wrap-program (string-append #$output "/bin/chardetect")
14002 `("GUIX_PYTHONPATH" ":" suffix
14003 ,(list sitedir python-sitedir)))))))))
14004 (home-page "https://github.com/chardet/chardet")
14005 (synopsis "Universal encoding detector for Python 2 and 3")
14006 (description
14007 "This package provides @code{chardet}, a Python module that can
14008 automatically detect a wide range of file encodings.")
14009 (license license:lgpl2.1+)))
14010
14011 (define-public python-charset-normalizer
14012 (package
14013 (name "python-charset-normalizer")
14014 (version "2.1.0")
14015 (source
14016 (origin
14017 (method url-fetch)
14018 (uri (pypi-uri "charset-normalizer" version))
14019 (sha256
14020 (base32 "04zlajr77f6c7ai59l46as1idi0jjgbvj72lh4v5wfpz2s070pjp"))))
14021 (build-system python-build-system)
14022 (arguments
14023 (list #:phases
14024 #~(modify-phases %standard-phases
14025 ;; This package provides a 'normalizer' executable that only
14026 ;; depends on Python, so customize the wrap phase to avoid
14027 ;; adding pytest and friends in order to save size.
14028 ;; (See also <https://bugs.gnu.org/25235>.)
14029 (replace 'wrap
14030 (lambda* (#:key inputs outputs #:allow-other-keys)
14031 (let* ((sitedir (site-packages inputs outputs))
14032 (python (dirname (dirname
14033 (search-input-file
14034 inputs "bin/python"))))
14035 (python-sitedir
14036 (string-append python "/lib/python"
14037 (python-version python)
14038 "/site-packages")))
14039 (wrap-program (string-append #$output "/bin/normalizer")
14040 `("GUIX_PYTHONPATH" ":" suffix
14041 ,(list sitedir python-sitedir)))))))))
14042 (native-inputs
14043 (list python-pytest))
14044 (home-page "https://github.com/ousret/charset_normalizer")
14045 (synopsis "Universal Charset Detector, alternative to Chardet")
14046 (description "This library helps you read text from an unknown charset
14047 encoding. Motivated by @code{chardet}, it tries to resolve the issue by
14048 taking a new approach. All IANA character set names for which the Python core
14049 library provides codecs are supported.")
14050 (license license:expat)))
14051
14052 (define-public python-docopt
14053 (package
14054 (name "python-docopt")
14055 (version "0.6.2")
14056 (source
14057 (origin
14058 (method git-fetch)
14059 ;; The release on PyPI does not include tests.
14060 (uri (git-reference
14061 (url "https://github.com/docopt/docopt")
14062 (commit version)))
14063 (file-name (git-file-name name version))
14064 (sha256
14065 (base32
14066 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
14067 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
14068 (build-system python-build-system)
14069 (native-inputs
14070 (list python-pytest))
14071 (arguments
14072 `(#:phases
14073 (modify-phases %standard-phases
14074 (replace 'check
14075 (lambda* (#:key tests? #:allow-other-keys)
14076 (when tests?
14077 (invoke "py.test")))))))
14078 (home-page "http://docopt.org")
14079 (synopsis "Command-line interface description language for Python")
14080 (description "This library allows the user to define a command-line
14081 interface from a program's help message rather than specifying it
14082 programmatically with command-line parsers like @code{getopt} and
14083 @code{argparse}.")
14084 (license license:expat)))
14085
14086 (define-public python-pythonanywhere
14087 (package
14088 (name "python-pythonanywhere")
14089 (version "0.9.10")
14090 (source
14091 (origin
14092 (method git-fetch)
14093 (uri (git-reference
14094 (url "https://github.com/pythonanywhere/helper_scripts")
14095 (commit (string-append "v" version))))
14096 (file-name (git-file-name name version))
14097 (sha256
14098 (base32
14099 "0vzzc1g8pl7cb9yvm3n1j5zlzxf0jd423rzspc2kvpb8yhvydklx"))))
14100 (build-system python-build-system)
14101 (arguments
14102 `(#:phases
14103 (modify-phases %standard-phases
14104 (add-before 'check 'change-home
14105 (lambda _
14106 (setenv "HOME" "/tmp")))
14107 (replace 'check
14108 (lambda* (#:key tests? #:allow-other-keys)
14109 (when tests?
14110 ;; Exclude tests marked as slowtest that assume running
14111 ;; inside Git repository on system with virtualenvwrapper
14112 ;; installed.
14113 (invoke "pytest" "-m" "not slowtest")))))))
14114 (native-inputs
14115 (list python-pytest
14116 python-psutil
14117 python-responses
14118 python-pytest-mock))
14119 (propagated-inputs
14120 (list python-dateutil
14121 python-docopt
14122 python-packaging
14123 python-requests
14124 python-schema
14125 python-tabulate
14126 python-typer))
14127 (home-page "https://github.com/pythonanywhere/helper_scripts/")
14128 (synopsis "PythonAnywhere helper tools for users")
14129 (description "PythonAnywhere provides a command-line interface and an
14130 application programming interface that allows managing Web apps and scheduled
14131 tasks. It includes single-command deployment for the Django Girls tutorial.")
14132 (license license:expat)))
14133
14134 (define-public python-pythondialog
14135 (package
14136 (name "python-pythondialog")
14137 (version "3.4.0")
14138 (source (origin
14139 (method url-fetch)
14140 (uri (pypi-uri "pythondialog" version))
14141 (sha256
14142 (base32
14143 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
14144 (build-system python-build-system)
14145 (arguments
14146 `(#:phases (modify-phases %standard-phases
14147 (add-after 'unpack 'patch-path
14148 (lambda* (#:key inputs #:allow-other-keys)
14149 (let* ((dialog (assoc-ref inputs "dialog")))
14150 (substitute* "dialog.py"
14151 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)") (string-append
14152 "os.getenv(\"PATH\") + \":"
14153 dialog
14154 "/bin\"")))
14155 #t))))
14156 #:tests? #f))
14157 (propagated-inputs (list dialog))
14158 (home-page "http://pythondialog.sourceforge.net/")
14159 (synopsis "Python interface to the UNIX dialog utility")
14160 (description
14161 "A Python wrapper for the dialog utility. Its purpose is to
14162 provide an easy to use, pythonic and comprehensive Python interface to dialog.
14163 This allows one to make simple text-mode user interfaces on Unix-like systems")
14164 (license license:lgpl2.1)))
14165
14166 (define-public python-configobj
14167 (package
14168 (name "python-configobj")
14169 (version "5.0.6")
14170 (source (origin
14171 (method url-fetch)
14172 (uri (pypi-uri "configobj" version))
14173 (sha256
14174 (base32
14175 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
14176 ;; Patch setup.py so it looks for python-setuptools, which is
14177 ;; required to parse the keyword 'install_requires' in setup.py.
14178 (patches (search-patches "python-configobj-setuptools.patch"))))
14179 (build-system python-build-system)
14180 (propagated-inputs
14181 (list python-six))
14182 (synopsis "Config file reading, writing and validation")
14183 (description "ConfigObj is a simple but powerful config file reader and
14184 writer: an ini file round tripper. Its main feature is that it is very easy to
14185 use, with a straightforward programmer’s interface and a simple syntax for
14186 config files.")
14187 (home-page "https://github.com/DiffSK/configobj")
14188 (license license:bsd-3)))
14189
14190 (define-public python-configargparse
14191 (package
14192 (name "python-configargparse")
14193 (version "1.2.3")
14194 (source (origin
14195 (method url-fetch)
14196 (uri (pypi-uri "ConfigArgParse" version))
14197 (sha256
14198 (base32
14199 "1p1pzpf5qpf80bfxsx1mbw9blyhhypjvhl3i60pbmhfmhvlpplgd"))))
14200 (build-system python-build-system)
14201 (native-inputs
14202 (list python-pyyaml))
14203 (arguments
14204 `(#:phases
14205 (modify-phases %standard-phases
14206 (replace 'check
14207 (lambda _
14208 ;; Bypass setuptools-shim because one test relies on "setup.py"
14209 ;; being the first argument passed to the python call.
14210 ;;
14211 ;; NOTE: Many tests do not run because they rely on Python's
14212 ;; built-in test.test_argparse, but we remove the unit tests from
14213 ;; our Python installation.
14214 (invoke "python" "setup.py" "test"))))))
14215 (synopsis "Replacement for argparse")
14216 (description "A drop-in replacement for argparse that allows options to also
14217 be set via config files and/or environment variables.")
14218 (home-page "https://github.com/bw2/ConfigArgParse")
14219 (license license:expat)))
14220
14221 (define-public python-connection-pool
14222 (package
14223 (name "python-connection-pool")
14224 (version "0.0.3")
14225 (source
14226 (origin
14227 (method url-fetch)
14228 (uri (pypi-uri "connection_pool" version))
14229 (sha256
14230 (base32 "1p6hfkcl4n3hhhcgjbaxn21i7b1yipag6j7dnilir4k5xxx9whmz"))))
14231 (build-system python-build-system)
14232 (home-page "https://github.com/zhouyl/ConnectionPool")
14233 (synopsis "Thread-safe connection pool")
14234 (description "This package provides a library implementing a thread-safe
14235 connection pool.")
14236 (license license:expat)))
14237
14238 (define-public python-argparse-manpage
14239 (package
14240 (name "python-argparse-manpage")
14241 (version "1.1")
14242 (source
14243 (origin
14244 (method url-fetch)
14245 (uri (pypi-uri "argparse-manpage" version))
14246 (sha256
14247 (base32
14248 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
14249 (build-system python-build-system)
14250 (home-page "https://github.com/praiskup/argparse-manpage")
14251 (synopsis "Build manual page from Python's ArgumentParser object")
14252 (description
14253 "This package provides tools to build manual pages from Python's
14254 @code{ArgumentParser} object.")
14255 (license license:asl2.0)))
14256
14257 (define-public python-contextlib2
14258 (package
14259 (name "python-contextlib2")
14260 (version "0.6.0.post1")
14261 (source
14262 (origin
14263 (method url-fetch)
14264 (uri (pypi-uri "contextlib2" version))
14265 (sha256
14266 (base32
14267 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
14268 (build-system python-build-system)
14269 (home-page "https://contextlib2.readthedocs.org/")
14270 (synopsis "Tools for decorators and context managers")
14271 (description "This module is primarily a backport of the Python
14272 3.2 contextlib to earlier Python versions. Like contextlib, it
14273 provides utilities for common tasks involving decorators and context
14274 managers. It also contains additional features that are not part of
14275 the standard library.")
14276 (license license:psfl)))
14277
14278 (define-public python-texttable
14279 (package
14280 (name "python-texttable")
14281 (version "1.6.4")
14282 (source
14283 (origin
14284 (method url-fetch)
14285 (uri (pypi-uri "texttable" version))
14286 (sha256
14287 (base32
14288 "1sbn821394rix6xgj3zqk743pj6nqm1qz81zgis2bcpp2ng7pvj2"))))
14289 (build-system python-build-system)
14290 (arguments
14291 `(#:phases
14292 (modify-phases %standard-phases
14293 (replace 'check
14294 (lambda* (#:key tests? #:allow-other-keys)
14295 (when tests? (invoke "pytest" "-vv" "tests.py")))))))
14296 (native-inputs
14297 (list python-pytest))
14298 (home-page "https://github.com/foutaise/texttable/")
14299 (synopsis "Python module for creating simple ASCII tables")
14300 (description "Texttable is a Python module for creating simple ASCII
14301 tables.")
14302 (license license:expat)))
14303
14304 (define-public python-atomicwrites
14305 (package
14306 (name "python-atomicwrites")
14307 (version "1.4.0")
14308 (source (origin
14309 (method url-fetch)
14310 (uri (pypi-uri "atomicwrites" version))
14311 (sha256
14312 (base32
14313 "0yla2svfhfqrcj8qbyqzx7wi4jy0dwcxvlkg0k3zjd54s5m3jw5f"))))
14314 (build-system python-build-system)
14315 (arguments `(#:tests? #f)) ;avoid circular dependency with pytest
14316 (synopsis "Atomic file writes in Python")
14317 (description "Library for atomic file writes using platform dependent tools
14318 for atomic file system operations.")
14319 (home-page "https://github.com/untitaker/python-atomicwrites")
14320 (license license:expat)))
14321
14322 (define-public python-qstylizer
14323 (package
14324 (name "python-qstylizer")
14325 (version "0.1.10")
14326 (source
14327 (origin
14328 (method git-fetch)
14329 (uri (git-reference
14330 (url "https://github.com/blambright/qstylizer")
14331 (commit version)))
14332 (file-name (git-file-name name version))
14333 (sha256
14334 (base32 "0zvkn6g1dn51kkw33v8qrlnwlmf5h6sw1ay3bh14ifjr8b9xsjjz"))))
14335 (build-system python-build-system)
14336 (arguments
14337 `(#:test-target "pytest"
14338 #:phases
14339 (modify-phases %standard-phases
14340 (add-before 'build 'set-pbr-version
14341 (lambda _
14342 (setenv "PBR_VERSION" "3.0.1"))))))
14343 (native-inputs
14344 (list python-pbr
14345 python-pytest
14346 python-pytest-catchlog
14347 python-pytest-cov
14348 python-pytest-mock
14349 python-pytest-runner
14350 python-pytest-xdist))
14351 (propagated-inputs
14352 (list python-inflection python-tinycss))
14353 (home-page "https://github.com/blambright/qstylizer")
14354 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
14355 (description "@code{qstylizer} is a Python package designed to help with
14356 the construction of PyQt/PySide stylesheets.")
14357 (license license:expat)))
14358
14359 (define-public python-click-threading
14360 (package
14361 (name "python-click-threading")
14362 (version "0.5.0")
14363 (source (origin
14364 (method url-fetch)
14365 (uri (pypi-uri "click-threading" version))
14366 (sha256
14367 (base32
14368 "0f9lmxwcq0y9lb8w0whbni7gwy12gbv74h1igh85qn9aq0iydkxd"))))
14369 (build-system python-build-system)
14370 (propagated-inputs
14371 (list python-click))
14372 (synopsis "Utilities for multithreading in Click")
14373 (description "This package provides utilities for multithreading in Click
14374 applications.")
14375 (home-page "https://github.com/click-contrib/click-threading")
14376 (license license:expat)))
14377
14378 (define-public python-click-log
14379 (package
14380 (name "python-click-log")
14381 (version "0.3.2")
14382 (source (origin
14383 (method url-fetch)
14384 (uri (pypi-uri "click-log" version))
14385 (sha256
14386 (base32
14387 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
14388 (build-system python-build-system)
14389 (propagated-inputs
14390 (list python-click))
14391 (synopsis "Logging for click applications")
14392 (description "This package provides a Python library for logging Click
14393 applications.")
14394 (home-page "https://github.com/click-contrib/click-log")
14395 (license license:expat)))
14396
14397 (define-public python-click-default-group
14398 (package
14399 (name "python-click-default-group")
14400 (version "1.2.2")
14401 (source (origin
14402 (method url-fetch)
14403 (uri (pypi-uri "click-default-group" version))
14404 (sha256
14405 (base32
14406 "015r78jk8gznfw0dphpwaqcx5mhg5822b55w5xbb6i7sin70wmnr"))))
14407 (build-system python-build-system)
14408 (arguments
14409 `(#:tests? #f)) ; no target
14410 (propagated-inputs
14411 (list python-click))
14412 (synopsis "Extends click.Group")
14413 (description "This package extends click.Group to invoke a command without
14414 explicit subcommand name.")
14415 (home-page "https://github.com/click-contrib/click-default-group")
14416 (license license:bsd-3)))
14417
14418 (define-public python-structlog
14419 (package
14420 (name "python-structlog")
14421 (version "20.2.0")
14422 (source
14423 (origin
14424 (method url-fetch)
14425 (uri (pypi-uri "structlog" version))
14426 (sha256
14427 (base32
14428 "0x1i21vn3xjfa3j9ijbblia5z0jlzc9aqvpqc26sy16i8yjxyydg"))))
14429 (build-system python-build-system)
14430 (arguments
14431 `(#:phases
14432 (modify-phases %standard-phases
14433 (replace 'check
14434 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
14435 (when tests?
14436 (add-installed-pythonpath inputs outputs)
14437 (invoke "pytest"))
14438 #t)))))
14439 (native-inputs
14440 (list python-coverage
14441 python-freezegun
14442 python-pretend
14443 python-pytest
14444 python-pytest-asyncio
14445 python-simplejson
14446 python-twisted))
14447 (home-page "https://www.structlog.org/")
14448 (synopsis "Structured Logging for Python")
14449 (description "@code{structlog} changes logging in Python by adding structure
14450 to your log entries.")
14451 (license (list license:asl2.0 license:expat))))
14452
14453 (define-public python-apipkg
14454 (package
14455 (name "python-apipkg")
14456 (version "1.5")
14457 (source (origin
14458 (method url-fetch)
14459 (uri (pypi-uri "apipkg" version))
14460 (sha256
14461 (base32
14462 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
14463 (build-system python-build-system)
14464 (native-inputs
14465 (list python-pytest python-setuptools-scm))
14466 (synopsis "Namespace control and lazy-import mechanism")
14467 (description "With apipkg you can control the exported namespace of a Python
14468 package and greatly reduce the number of imports for your users. It is a small
14469 pure Python module that works on virtually all Python versions.")
14470 (home-page "https://github.com/pytest-dev/apipkg")
14471 (license license:expat)))
14472
14473 (define-public python-execnet
14474 (package
14475 (name "python-execnet")
14476 (version "1.9.0")
14477 (source (origin
14478 (method url-fetch)
14479 (uri (pypi-uri "execnet" version))
14480 (sha256
14481 (base32
14482 "1ia7dvrh0gvzzpi758mx55f9flr16bzdqlmi12swm4ncm4xlyscg"))
14483 (patches (search-patches "python-execnet-read-only-fix.patch"))))
14484 (build-system python-build-system)
14485 (arguments
14486 `(#:phases
14487 (modify-phases %standard-phases
14488 (replace 'check
14489 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
14490 (when tests?
14491 ;; Unset PYTHONDONTWRITEBYTECODE to match the
14492 ;; expectations of a test in
14493 ;; 'testing/test_gateway.py'.
14494 (unsetenv "PYTHONDONTWRITEBYTECODE")
14495
14496 (add-installed-pythonpath inputs outputs)
14497 (invoke "pytest" "-vv")))))))
14498 (native-inputs
14499 (list python-pytest python-setuptools-scm))
14500 (synopsis "Rapid multi-Python deployment")
14501 (description "Execnet provides a share-nothing model with
14502 channel-send/receive communication for distributing execution across many
14503 Python interpreters across version, platform and network barriers. It has a
14504 minimal and fast API targeting the following uses:
14505 @enumerate
14506 @item distribute tasks to (many) local or remote CPUs
14507 @item write and deploy hybrid multi-process applications
14508 @item write scripts to administer multiple environments
14509 @end enumerate")
14510 (home-page "https://codespeak.net/execnet/")
14511 (license license:expat)))
14512
14513 (define-public python-icalendar
14514 (package
14515 (name "python-icalendar")
14516 (version "4.1.0")
14517 (source (origin
14518 (method url-fetch)
14519 (uri (pypi-uri "icalendar" version))
14520 (sha256
14521 (base32
14522 "15dkq42rkqjdi17rpvmd1plnbwn4daby0nk1s1c3xi7w5v0bfj4p"))))
14523 (build-system python-build-system)
14524 (propagated-inputs
14525 (list python-dateutil python-pytz))
14526 (synopsis "Python library for parsing iCalendar files")
14527 (description "The icalendar package is a parser/generator of iCalendar
14528 files for use with Python.")
14529 (home-page "https://github.com/collective/icalendar")
14530 (license license:bsd-2)))
14531
14532 (define-public python-args
14533 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65") (revision "0"))
14534 (package
14535 (name "python-args")
14536 (version (git-version "0.1.0" revision commit))
14537 (home-page "https://github.com/kennethreitz-archive/args")
14538 (source (origin
14539 (method git-fetch)
14540 (uri (git-reference
14541 (url home-page)
14542 (commit commit)))
14543 (file-name (git-file-name name version))
14544 (sha256
14545 (base32
14546 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
14547 (build-system python-build-system)
14548 (arguments
14549 `(#:phases (modify-phases %standard-phases
14550 (add-after 'unpack 'patch-args.py
14551 (lambda _
14552 (substitute* "args.py"
14553 (("basestring") "str"))))
14554 (replace 'check
14555 (lambda* (#:key tests? #:allow-other-keys)
14556 (when tests?
14557 (invoke "nosetests" "-v")))))))
14558 (native-inputs (list python-nose))
14559 (synopsis "Command-line argument parser")
14560 (description
14561 "This library provides a Python module to parse command-line arguments.")
14562 (license license:bsd-3))))
14563
14564 (define-public python-clint
14565 (package
14566 (name "python-clint")
14567 (version "0.5.1")
14568 (source (origin
14569 (method url-fetch)
14570 (uri (pypi-uri "clint" version))
14571 (sha256
14572 (base32
14573 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
14574 (build-system python-build-system)
14575 (arguments
14576 '(#:phases
14577 (modify-phases %standard-phases
14578 (replace 'check
14579 (lambda _ (invoke "py.test" "-v"))))))
14580 (native-inputs
14581 (list python-pytest))
14582 (propagated-inputs
14583 (list python-args))
14584 (home-page "https://github.com/kennethreitz/clint")
14585 (synopsis "Command-line interface tools")
14586 (description
14587 "Clint is a Python module filled with a set of tools for developing
14588 command-line applications, including tools for colored and indented
14589 output, progress bar display, and pipes.")
14590 (license license:isc)))
14591
14592 (define-public python-rply
14593 (package
14594 (name "python-rply")
14595 (version "0.7.8")
14596 (source (origin
14597 (method url-fetch)
14598 (uri (pypi-uri "rply" version))
14599 (sha256
14600 (base32
14601 "1j81nddvnb145x4p81bnfpyai6g26i2dc1633ycsk025bb18m01a"))))
14602 (build-system python-build-system)
14603 (propagated-inputs
14604 (list python-appdirs))
14605 (home-page "https://github.com/alex/rply")
14606 (synopsis "Parser generator for Python")
14607 (description
14608 "This package provides a pure Python based parser generator, that also
14609 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
14610 with a new public API, and RPython support.")
14611 (license license:bsd-3)))
14612
14613 (define-public python-hy
14614 (package
14615 (name "python-hy")
14616 (version "0.20.0")
14617 (source
14618 (origin
14619 (method git-fetch) ; no tests in PyPI release
14620 (uri (git-reference
14621 (url "https://github.com/hylang/hy")
14622 (commit version)))
14623 (file-name (git-file-name name version))
14624 (sha256
14625 (base32 "1g7djra9z7b0wyqyfrk2n4z3zamp2xkahv00jwdv35xmwwn09hq4"))))
14626 (build-system python-build-system)
14627 (arguments
14628 '(#:phases
14629 (modify-phases %standard-phases
14630 (replace 'check
14631 (lambda* (#:key tests? #:allow-other-keys)
14632 (when tests?
14633 (invoke "python" "-m" "pytest" "-k"
14634 (string-append ; skip some failed tests
14635 "not test_bin_hy_sys_executable"
14636 " and not test_bin_hy_circular_macro_require"
14637 " and not test_macro_from_module"))))))))
14638 (native-inputs
14639 (list python-pytest))
14640 (propagated-inputs
14641 (list python-astor python-colorama python-funcparserlib python-rply))
14642 (home-page "https://docs.hylang.org/en/stable/")
14643 (synopsis "Lisp frontend to Python")
14644 (description
14645 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
14646 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
14647 Python at your fingertips, in Lisp form.")
14648 (license license:expat)))
14649
14650 (define-public python-hissp
14651 (package
14652 (name "python-hissp")
14653 (version "0.2.0")
14654 (source
14655 (origin
14656 (method url-fetch)
14657 (uri (pypi-uri "hissp" version))
14658 (sha256
14659 (base32
14660 "0yns7f0q699zn2ziagyas2nkndl7mp1hhssv9x9mpl7jxj2p5myw"))))
14661 (build-system python-build-system)
14662 (home-page "https://github.com/gilch/hissp")
14663 (synopsis "It's Python with a Lissp")
14664 (description "Hissp is a modular Lisp implementation that compiles to a
14665 functional subset of Python—Syntactic macro metaprogramming with full access
14666 to the Python ecosystem.")
14667 (license license:asl2.0)))
14668
14669 (define-public python-promise
14670 (package
14671 (name "python-promise")
14672 (version "0.4.2")
14673 (source
14674 (origin
14675 (method url-fetch)
14676 (uri (pypi-uri "promise" version))
14677 (sha256
14678 (base32
14679 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
14680 (build-system python-build-system)
14681 ;; Tests wants python-futures, which is a python2 only program, and
14682 ;; can't be found by python-promise at test time.
14683 (arguments `(#:tests? #f))
14684 (home-page "https://github.com/syrusakbary/promise")
14685 (synopsis "Promises/A+ implementation for Python")
14686 (description
14687 "Promises/A+ implementation for Python")
14688 (license license:expat)))
14689
14690 (define-public python-progress
14691 (package
14692 (name "python-progress")
14693 (version "1.6")
14694 (source
14695 (origin
14696 (method url-fetch)
14697 (uri (pypi-uri "progress" version))
14698 (sha256
14699 (base32 "1k9lpb7lqr6mywpnqcz71y6qny54xlgprdp327za2gy0nnc6xj69"))))
14700 (build-system python-build-system)
14701 (home-page "http://github.com/verigak/progress/")
14702 (synopsis "Progress reporting bars for Python")
14703 (description "This Python package provides progress reporting for visual
14704 of progress of long running operations. There are multiple choices of
14705 progress bars and spinners, with customizable options, such as width, fill
14706 character, and suffix.")
14707 (license license:isc)))
14708
14709 (define-public python-progressbar2
14710 (package
14711 (name "python-progressbar2")
14712 (version "3.51.3")
14713 (source
14714 (origin
14715 (method url-fetch)
14716 (uri (pypi-uri "progressbar2" version))
14717 (sha256
14718 (base32
14719 "0b2v3mim90rmfvixkaniz2qrs650sk230rzgd5zhcjfldmlqgxpc"))))
14720 (build-system python-build-system)
14721 (propagated-inputs
14722 (list python-six python-utils))
14723 (native-inputs
14724 (list python-flake8
14725 python-freezegun
14726 python-pycodestyle
14727 python-pytest
14728 python-pytest-cache
14729 python-pytest-cov
14730 python-pytest-flakes
14731 python-pytest-pep8
14732 python-sphinx))
14733 (home-page "https://github.com/WoLpH/python-progressbar")
14734 (synopsis "Text progress bar library for Python")
14735 (description
14736 "This package provides a Python progressbar library to provide
14737 visual (yet text based) progress to long running operations.")
14738 (license license:bsd-3)))
14739
14740 (define-public python-progressbar33
14741 (package
14742 (name "python-progressbar33")
14743 (version "2.4")
14744 (source
14745 (origin
14746 (method url-fetch)
14747 (uri (pypi-uri "progressbar33" version))
14748 (sha256
14749 (base32
14750 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
14751 (build-system python-build-system)
14752 (home-page "https://github.com/germangh/python-progressbar")
14753 (synopsis "Text progress bar library for Python")
14754 (description
14755 "This package provides a text progress bar library for Python. This
14756 version only differs from the original @code{progressbar} package in that it
14757 uses relative package imports instead of absolute imports, which is necessary
14758 for the module to work under Python 3.3.")
14759 ;; Either or both of these licenses may be selected.
14760 (license (list license:lgpl2.1+ license:bsd-3))))
14761
14762 (define-public python-colorama
14763 (package
14764 (name "python-colorama")
14765 (version "0.4.4")
14766 (source
14767 (origin
14768 (method url-fetch)
14769 (uri (pypi-uri "colorama" version))
14770 (sha256
14771 (base32 "16w62sm95hmh55rqxn4zwdz0bkh3fqm1qnz9cwi3s510iasb4har"))))
14772 (build-system python-build-system)
14773 (synopsis "Colored terminal text rendering for Python")
14774 (description "Colorama is a Python library for rendering colored terminal
14775 text.")
14776 (home-page "https://pypi.org/project/colorama/")
14777 (license license:bsd-3)))
14778
14779 ;; awscli and botocore do not accept version 0.4.4
14780 (define-public python-colorama-for-awscli
14781 (package
14782 (inherit python-colorama)
14783 (version "0.4.3")
14784 (source
14785 (origin
14786 (method url-fetch)
14787 (uri (pypi-uri "colorama" version))
14788 (sha256
14789 (base32 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))))
14790
14791 (define-public python-moto
14792 (package
14793 (name "python-moto")
14794 (version "3.1.4")
14795 (source (origin
14796 (method url-fetch)
14797 (uri (pypi-uri "moto" version))
14798 (sha256
14799 (base32 "0dfnad1f9d5ybabs69dzc7x357z1r4jbhrhgw57gyic1qnmcw864"))))
14800 (build-system python-build-system)
14801 (arguments
14802 `(#:phases
14803 (modify-phases %standard-phases
14804 (add-after 'unpack 'patch-hardcoded-executable-names
14805 (lambda* (#:key inputs #:allow-other-keys)
14806 (let ((bash-exec (search-input-file inputs "/bin/sh")))
14807 (substitute* "moto/batch/models.py"
14808 (("/bin/sh") bash-exec))
14809 (substitute* (find-files "tests" "\\.py$")
14810 (("#!/bin/bash") (string-append "#!" bash-exec))))))
14811 (replace 'check
14812 (lambda* (#:key tests? #:allow-other-keys)
14813 (when tests?
14814 (invoke "pytest" "-vv" "-m" "not network" "-k"
14815 (string-append
14816 ;; XXX: This test is timing sensitive and may
14817 ;; fail non-deterministically.
14818 "not test_cancel_pending_job"
14819 ;; These tests require Docker.
14820 " and not test_terminate_job"
14821 " and not test_invoke_function_from_sqs_exception"
14822 " and not test_create_custom_lambda_resource__verify_cfnresponse_failed"
14823 " and not test_lambda_function"
14824
14825 ;; These tests also require the network.
14826 " and not test_put_record_batch_http_destination"
14827 " and not test_put_record_http_destination"
14828 " and not test_dependencies"
14829 " and not test_cancel_running_job"
14830 " and not test_container_overrides"))))))))
14831 (native-inputs
14832 (list python-flask
14833 python-flask-cors
14834 python-freezegun
14835 python-graphql-core
14836 python-pytest
14837 python-sure))
14838 (inputs
14839 (list bash-minimal))
14840 (propagated-inputs
14841 (list python-aws-xray-sdk
14842 python-boto3
14843 python-botocore
14844 python-cfn-lint
14845 python-cryptography
14846 python-dateutil
14847 python-docker
14848 python-importlib-metadata
14849 python-jinja2
14850 python-jose
14851 python-jsondiff
14852 python-markupsafe
14853 python-pytz
14854 python-pyyaml
14855 python-requests
14856 python-responses
14857 python-sshpubkeys
14858 python-werkzeug
14859 python-xmltodict))
14860 (home-page "https://github.com/spulec/moto")
14861 (synopsis "Mock out the boto library")
14862 (description
14863 "@code{moto} is a library designed to easily mock out the
14864 @code{boto} library.")
14865 (license license:asl2.0)))
14866
14867 (define-public python-rsa
14868 (package
14869 (name "python-rsa")
14870 (version "3.4.2")
14871 (source
14872 (origin
14873 (method url-fetch)
14874 (uri (pypi-uri "rsa" version))
14875 (sha256
14876 (base32
14877 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
14878 (build-system python-build-system)
14879 (propagated-inputs
14880 (list python-pyasn1))
14881 (synopsis "Pure-Python RSA implementation")
14882 (description "Python-RSA is a pure-Python RSA implementation. It supports
14883 encryption and decryption, signing and verifying signatures, and key
14884 generation according to PKCS#1 version 1.5. It can be used as a Python
14885 library as well as on the command line.")
14886 (home-page "https://stuvel.eu/rsa")
14887 (license license:asl2.0)))
14888
14889 (define-public python-pluggy
14890 (package
14891 (name "python-pluggy")
14892 (version "0.13.1")
14893 (source
14894 (origin
14895 (method url-fetch)
14896 (uri (pypi-uri "pluggy" version))
14897 (sha256
14898 (base32
14899 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
14900 (build-system python-build-system)
14901 (native-inputs
14902 (list python-setuptools-scm))
14903 (synopsis "Plugin and hook calling mechanism for Python")
14904 (description "Pluggy is an extraction of the plugin manager as used by
14905 Pytest but stripped of Pytest specific details.")
14906 (home-page "https://pypi.org/project/pluggy/")
14907 (license license:expat)))
14908
14909 (define-public python-plumbum
14910 (package
14911 (name "python-plumbum")
14912 (version "1.7.0")
14913 (source
14914 (origin
14915 (method url-fetch)
14916 (uri (pypi-uri "plumbum" version))
14917 (sha256
14918 (base32 "1kidj821k79dw064rlxh84xamb9h79ychg3pgj81jlvm5hs48xri"))))
14919 (build-system python-build-system)
14920 (arguments
14921 `(#:tests? #f)) ;no tests
14922 (native-inputs
14923 ;; XXX: Not actually used since there are no tests but required for
14924 ;; build.
14925 (list python-pytest))
14926 (home-page "https://plumbum.readthedocs.io")
14927 (synopsis "Python shell combinators library")
14928 (description
14929 "Plumbum is a library of tools for replacing shell scripts with Python
14930 code.")
14931 (license license:expat)))
14932
14933 (define-public python-deprecation
14934 (package
14935 (name "python-deprecation")
14936 (version "2.1.0")
14937 (source
14938 (origin
14939 (method url-fetch)
14940 (uri (pypi-uri "deprecation" version))
14941 (sha256
14942 (base32
14943 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
14944 (build-system python-build-system)
14945 (propagated-inputs
14946 (list python-packaging))
14947 (native-inputs
14948 (list python-unittest2))
14949 (home-page "https://deprecation.readthedocs.io/")
14950 (synopsis "Python library to handle automated deprecations")
14951 (description
14952 "This is a library that enables automated deprecations. It offers the
14953 @code{deprecated()} decorator to wrap functions, providing proper warnings
14954 both in documentation and via Python’s warnings system, as well as the
14955 @code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
14956 that deprecated code is eventually removed.")
14957 (license license:asl2.0)))
14958
14959 (define-public python-jmespath
14960 (package
14961 (name "python-jmespath")
14962 (version "1.0.0")
14963 (source
14964 (origin
14965 (method url-fetch)
14966 (uri (pypi-uri "jmespath" version))
14967 (sha256
14968 (base32
14969 "0pmzfi230zfgiq2rz896kbb9f7mp0lnrjdl6x1npvxfixn0f5454"))))
14970 (build-system python-build-system)
14971 (native-inputs
14972 (list python-nose))
14973 (synopsis "JSON Matching Expressions")
14974 (description "JMESPath (pronounced “james path”) is a Python library that
14975 allows one to declaratively specify how to extract elements from a JSON
14976 document.")
14977 (home-page "https://github.com/jmespath/jmespath.py")
14978 (license license:expat)))
14979
14980 (define-public python-symengine
14981 (package
14982 (name "python-symengine")
14983 (version "0.9.2")
14984 (source
14985 (origin
14986 (method url-fetch)
14987 (uri (pypi-uri "symengine" version))
14988 (sha256
14989 (base32 "0qjgdbnb10kfk7jdhxnzfl8cpaps81k8vap7gm7q9ym3pgslazhg"))))
14990 (build-system python-build-system)
14991 (arguments
14992 (list
14993 #:phases
14994 #~(modify-phases %standard-phases
14995 (replace 'check
14996 (lambda* (#:key tests? #:allow-other-keys)
14997 (if tests?
14998 ;; Run tests against installed package.
14999 (with-directory-excursion "/tmp"
15000 (invoke "nosetests" "-v" "symengine.tests"))
15001 (format #t "test suite not run~%")))))))
15002 (native-inputs
15003 (list cmake python-cython python-nose))
15004 (inputs
15005 (list symengine))
15006 (home-page "https://github.com/symengine/symengine.py")
15007 (synopsis "Python library providing wrappers to SymEngine")
15008 (description
15009 "This library provides a Python wrapper to SymEngine, a fast C++ symbolic
15010 manipulation library.")
15011 (license license:expat)))
15012
15013 (define-public python-uncertainties
15014 (package
15015 (name "python-uncertainties")
15016 (version "3.1.5")
15017 (source
15018 (origin
15019 (method url-fetch)
15020 (uri (pypi-uri "uncertainties" version))
15021 (sha256
15022 (base32
15023 "00z9xl40czmqk0vmxjvmjvwb41r893l4dad7nj1nh6blw3kw28li"))))
15024 (build-system python-build-system)
15025 ;; While there are test files, there is no "tests" directory, so the tests
15026 ;; fail.
15027 (arguments '(#:tests? #false))
15028 (propagated-inputs
15029 (list python-future))
15030 (native-inputs
15031 (list python-nose python-numpy))
15032 (home-page "https://uncertainties-python-package.readthedocs.io/")
15033 (synopsis "Calculations with uncertainties")
15034 (description
15035 "The uncertainties package transparently handles calculations with
15036 numbers with uncertainties. It can also yield the derivatives of any
15037 expression.")
15038 (license license:bsd-3)))
15039
15040 (define-public python-unicodedata2
15041 (package
15042 (name "python-unicodedata2")
15043 (version "14.0.0")
15044 (source
15045 (origin
15046 (method url-fetch)
15047 (uri (pypi-uri "unicodedata2" version))
15048 (sha256
15049 (base32 "110nnvh02ssp92xbmswy39aa186jrmb7m41x4220wigl8c0dzxs1"))))
15050 (build-system python-build-system)
15051 (home-page "https://github.com/fonttools/unicodedata2")
15052 (synopsis "Python unicodedata backport")
15053 (description "This package corresponds to the latest @code{unicodedata}
15054 standard Python module.")
15055 (license license:asl2.0)))
15056
15057 (define-public python-asteval
15058 (package
15059 (name "python-asteval")
15060 (version "0.9.23")
15061 (source
15062 (origin
15063 (method url-fetch)
15064 (uri (pypi-uri "asteval" version))
15065 (sha256
15066 (base32
15067 "0f54sd4w1a72ij1bcxs2x7dk9xf8bzclawijf1z18bqx9f96l2gm"))))
15068 (build-system python-build-system)
15069 (native-inputs
15070 (list python-pytest))
15071 (home-page "https://github.com/newville/asteval")
15072 (synopsis "Minimalistic evaluator of Python expressions")
15073 (description
15074 "This package provides a minimalistic evaluator of Python expression
15075 using the @code{ast} module")
15076 (license license:expat)))
15077
15078 (define-public python-lmfit
15079 (package
15080 (name "python-lmfit")
15081 (version "1.0.2")
15082 (source
15083 (origin
15084 (method url-fetch)
15085 (uri (pypi-uri "lmfit" version))
15086 (sha256
15087 (base32
15088 "0iab33jjb60f8kn0k0cqb0vjp1mdskks2n3kpn97zkw5cvjhq2b7"))))
15089 (build-system python-build-system)
15090 (propagated-inputs
15091 (list python-asteval python-numpy python-scipy python-uncertainties))
15092 (native-inputs
15093 (list python-pytest))
15094 (home-page "https://lmfit.github.io/lmfit-py/")
15095 (synopsis "Least-Squares minimization with bounds and constraints")
15096 (description
15097 "Lmfit provides a high-level interface to non-linear optimization and
15098 curve fitting problems for Python. It builds on and extends many of the
15099 optimization methods of @code{scipy.optimize}. Initially inspired by (and
15100 named for) extending the Levenberg-Marquardt method from
15101 @code{scipy.optimize.leastsq}, lmfit now provides a number of useful
15102 enhancements to optimization and data fitting problems.")
15103 (license license:bsd-3)))
15104
15105 (define-public python-bokeh
15106 (package
15107 (name "python-bokeh")
15108 (version "2.4.3")
15109 (source (origin
15110 (method url-fetch)
15111 (uri (pypi-uri "bokeh" version))
15112 (sha256
15113 (base32
15114 "00sbhya9vfdv3yi07j6mxwx1x1h9497nhd3smdjrcdxgc48q0czg"))))
15115 (build-system python-build-system)
15116 (arguments
15117 `(#:phases
15118 (modify-phases %standard-phases
15119 (replace 'check
15120 (lambda* (#:key tests? #:allow-other-keys)
15121 (when tests?
15122 ;; These require selenium.
15123 (delete-file "tests/unit/bokeh/io/test_export.py")
15124 (delete-file "tests/unit/bokeh/io/test_webdriver.py")
15125 (delete-file "tests/unit/bokeh/embed/test_standalone.py")
15126
15127 ;; Doesn't find ManagedServerLoop fixture
15128 (delete-file "tests/unit/bokeh/test_client_server.py")
15129
15130 ;; This fails because of the Guix wrapper around pytest
15131 (delete-file "tests/unit/bokeh/io/test_util__io.py")
15132
15133 ;; Fixture ipython not found.
15134 (delete-file "tests/unit/bokeh/application/handlers/test_notebook__handlers.py")
15135 (delete-file "tests/unit/bokeh/command/subcommands/test_info.py")
15136
15137 ;; pd fixture not found.
15138 (delete-file "tests/unit/bokeh/models/test_mappers.py")
15139 (delete-file "tests/unit/bokeh/models/util/test_structure.py")
15140 (delete-file "tests/unit/bokeh/plotting/test__plot.py")
15141 (delete-file "tests/unit/bokeh/plotting/test__graph.py")
15142 (delete-file "tests/unit/bokeh/plotting/test_figure.py")
15143 (delete-file "tests/unit/bokeh/core/test_json_encoder.py")
15144 (delete-file "tests/unit/bokeh/core/property/test_bases.py")
15145 (delete-file "tests/unit/bokeh/core/property/test_container.py")
15146 (delete-file "tests/unit/bokeh/core/property/test_dataspec.py")
15147 (delete-file "tests/unit/bokeh/core/property/test_datetime.py")
15148 (delete-file "tests/unit/bokeh/core/property/test_pandas.py")
15149
15150 ;; nx fixture not found.
15151 (delete-file "tests/unit/bokeh/plotting/test_graph.py")
15152 (delete-file "tests/unit/bokeh/models/test_graphs.py")
15153 (delete-file "tests/unit/bokeh/io/test_showing.py")
15154 (delete-file "tests/unit/bokeh/document/test_events__document.py")
15155
15156 ;; These tests need external sample data
15157 (delete-file-recursively "tests/unit/bokeh/sampledata/")
15158
15159 ;; Attempts to install something via npm.
15160 (delete-file "tests/unit/bokeh/test_ext.py")
15161
15162 ;; More failures due to set up problems.
15163 (delete-file "tests/unit/bokeh/server/test_server__server.py")
15164 (delete-file "tests/unit/bokeh/server/test_tornado__server.py")
15165 (delete-file "tests/unit/bokeh/util/test_serialization.py")
15166 (delete-file "tests/unit/bokeh/util/test_hex.py")
15167 (delete-file "tests/unit/bokeh/models/test_sources.py")
15168 (delete-file "tests/unit/bokeh/embed/test_bundle.py")
15169
15170 (invoke "pytest" "-v")))))))
15171 (propagated-inputs
15172 (list node-lts
15173 python-jinja2
15174 python-numpy
15175 python-packaging
15176 python-pillow
15177 python-pyyaml
15178 python-tornado
15179 python-typing-extensions))
15180 (native-inputs
15181 (list python-beautifulsoup4
15182 python-dateutil
15183 python-flaky
15184 python-nbconvert
15185 python-pandas
15186 python-pytest
15187 python-pytz
15188 python-requests))
15189 (home-page "https://github.com/bokeh/bokeh")
15190 (synopsis "Interactive plots and applications in the browser from Python")
15191 (description
15192 "This package provides tools for interactive plots and applications in the
15193 browser from Python.")
15194 (license license:bsd-3)))
15195
15196 (define-public python-boto
15197 (package
15198 (name "python-boto")
15199 (version "2.49.0")
15200 (source (origin
15201 (method url-fetch)
15202 (uri (pypi-uri "boto" version))
15203 (sha256
15204 (base32
15205 "0njy09c4wjx7ipxhwi6vv404nflyiasl78vwwxxpclnql903n3ga"))))
15206 (build-system python-build-system)
15207 (arguments
15208 ;; XXX: This package is unmaintained and has problems with newer versions
15209 ;; of Python 3 as well as test libraries. 'python-moto' still uses a
15210 ;; subset of this library, so keep it around for now, but disable tests.
15211 '(#:tests? #f))
15212 (propagated-inputs
15213 (list python-paramiko python-requests))
15214 (home-page "https://github.com/boto/boto")
15215 (synopsis "Python interfaces for Amazon Web Services")
15216 (description
15217 "This package provides various facilities for interacting with Amazon
15218 Web Services through Python.
15219
15220 This software is unmaintained, and new projects should use @code{boto3} instead.")
15221 (license license:expat)))
15222
15223 (define-public python-botocore
15224 ;; Note: When updating botocore, also make sure that boto3 and awscli
15225 ;; are compatible.
15226 (package
15227 (name "python-botocore")
15228 (version "1.24.35")
15229 (source
15230 (origin
15231 (method url-fetch)
15232 (uri (pypi-uri "botocore" version))
15233 (sha256
15234 (base32
15235 "0rv8mvhq5s373zdjs2yb45hzvqcqdh2lp2rbb21jjc8ciwnl5d9n"))))
15236 (build-system python-build-system)
15237 (arguments
15238 ;; FIXME: Many tests are failing.
15239 '(#:tests? #f))
15240 (propagated-inputs
15241 (list python-dateutil python-jmespath python-urllib3))
15242 (home-page "https://github.com/boto/botocore")
15243 (synopsis "Low-level interface to AWS")
15244 (description "Botocore is a Python library that provides a low-level
15245 interface to the Amazon Web Services (AWS) API.")
15246 (license license:asl2.0)))
15247
15248 (define-public python-boto3
15249 (package
15250 (name "python-boto3")
15251 (version "1.21.35")
15252 (home-page "https://github.com/boto/boto3")
15253 (source (origin
15254 (method git-fetch)
15255 (uri (git-reference (url home-page) (commit version)))
15256 (file-name (git-file-name name version))
15257 (sha256
15258 (base32
15259 "1kdyf238rpfldnpzs0rdh3nhjn6hwfym4faskyhzlgzkf1smmbg1"))))
15260 (arguments
15261 `(#:phases
15262 (modify-phases %standard-phases
15263 (add-after 'unpack 'delete-network-tests
15264 ;; Deleting integration tests because they are trying to connect to AWS.
15265 (lambda _
15266 (delete-file-recursively "tests/integration")))
15267 (replace 'check
15268 (lambda* (#:key tests? #:allow-other-keys)
15269 (when tests?
15270 (invoke "pytest" "-v")))))))
15271 (build-system python-build-system)
15272 (native-inputs
15273 (list python-nose python-mock python-pytest))
15274 (propagated-inputs
15275 (list python-botocore python-jmespath python-s3transfer))
15276 (synopsis "AWS SDK for Python")
15277 (description
15278 "Boto3 is a Python library for writing programs that interact with
15279 @acronym{AWS,Amazon Web Services}.")
15280 (license license:asl2.0)))
15281
15282 (define-public python-pyfiglet
15283 (package
15284 (name "python-pyfiglet")
15285 (version "0.8.post1")
15286 (source
15287 (origin
15288 (method url-fetch)
15289 (uri (pypi-uri "pyfiglet" version))
15290 (sha256
15291 (base32
15292 "0f9n2076ga2ccsg174k2d7n0z4d44ml96yzc72s6g4nhalbk5hn6"))))
15293 (build-system python-build-system)
15294 (home-page "https://github.com/pwaller/pyfiglet")
15295 (synopsis "Draw ASCII art big letters in Python")
15296 (description "This module lets you draw large letter from ordinary characters
15297 in pure Python.")
15298 (license license:expat)))
15299
15300 (define-public python-xdo
15301 (package
15302 (name "python-xdo")
15303 (version "0.3")
15304 (source (origin
15305 (method url-fetch)
15306 (uri (string-append
15307 "http://http.debian.net/debian/pool/main/p/python-xdo/"
15308 "python-xdo_" version ".orig.tar.gz"))
15309 (sha256
15310 (base32
15311 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
15312 (build-system python-build-system)
15313 (arguments
15314 '(#:phases
15315 (modify-phases %standard-phases
15316 (add-before 'install 'patch-libxdo-path
15317 ;; Hardcode the path of dynamically loaded libxdo library.
15318 (lambda* (#:key inputs #:allow-other-keys)
15319 (let ((libxdo (string-append
15320 (assoc-ref inputs "xdotool")
15321 "/lib/libxdo.so"))
15322 (libc (string-append
15323 (assoc-ref inputs "libc")
15324 "/lib/libc.so.6")))
15325 (substitute* "xdo/_xdo.py"
15326 (("find_library\\(\"xdo\"\\)")
15327 (simple-format #f "\"~a\"" libxdo))
15328 (("ctypes\\.util\\.find_library\\('libc'\\)")
15329 (simple-format #f "\"~a\"" libc)))
15330 #t))))
15331 #:tests? #f)) ; no tests provided
15332 (propagated-inputs
15333 (list python-six))
15334 (inputs
15335 `(("xdotool" ,xdotool)
15336 ("libX11" ,libx11)))
15337 (home-page "https://tracker.debian.org/pkg/python-xdo")
15338 (synopsis "Python library for simulating X11 keyboard/mouse input")
15339 (description "Provides bindings to libxdo for manipulating X11 via simulated
15340 input. (Note that this is mostly a legacy library; you may wish to look at
15341 python-xdo for newer bindings.)")
15342 (license license:bsd-3)))
15343
15344 (define-public python-xdoctest
15345 (package
15346 (name "python-xdoctest")
15347 (version "1.0.0")
15348 (source
15349 (origin
15350 (method url-fetch)
15351 (uri (pypi-uri "xdoctest" version))
15352 (sha256
15353 (base32 "0bgbmb9nqv95f9gfxqifqff1qaz5fnanjqy4hv7ygrjp2kksgfvy"))))
15354 (build-system python-build-system)
15355 (arguments
15356 (list #:phases
15357 #~(modify-phases %standard-phases
15358 (replace 'check
15359 (lambda* (#:key tests? #:allow-other-keys)
15360 (when tests?
15361 ;; A writable HOME is needed by the
15362 ;; 'import_module_from_path' test.
15363 (setenv "HOME" "/tmp")
15364 (invoke "pytest" "-vv")))))))
15365 (propagated-inputs (list python-six))
15366 (native-inputs (list python-pytest which))
15367 (home-page "https://github.com/Erotemic/xdoctest")
15368 (synopsis "Rewrite of the Python builtin doctest module")
15369 (description "This package provides a rewrite of the builtin doctest
15370 module which leverages the Python @acronym{AST, Abstract Syntax Tree} instead
15371 of @acronym{REGEXPs, regular expressions}.")
15372 (license license:asl2.0)))
15373
15374 (define-public python-mako
15375 (package
15376 (name "python-mako")
15377 (version "1.1.3")
15378 (source
15379 (origin
15380 (method url-fetch)
15381 (uri (pypi-uri "Mako" version))
15382 (sha256
15383 (base32
15384 "09ywrmhr6gdyfx6d5727wwjnz73i6rklqcb4c14m7sqc830wi5c1"))))
15385 (build-system python-build-system)
15386 (arguments
15387 `(#:phases (modify-phases %standard-phases
15388 (replace 'check
15389 (lambda* (#:key tests? #:allow-other-keys)
15390 (if tests?
15391 (invoke "nosetests" "-v")
15392 (format #t "test suite not run~%"))
15393 #t)))))
15394 (propagated-inputs
15395 (list python-markupsafe))
15396 (native-inputs
15397 (list python-mock python-nose))
15398 (home-page "https://www.makotemplates.org/")
15399 (synopsis "Templating language for Python")
15400 (description "Mako is a templating language for Python that compiles
15401 templates into Python modules.")
15402 (license license:expat)))
15403
15404 (define-public python-waitress
15405 (package
15406 (name "python-waitress")
15407 (version "1.1.0")
15408 (source
15409 (origin
15410 (method url-fetch)
15411 (uri (pypi-uri "waitress" version))
15412 (patches (search-patches "python-waitress-fix-tests.patch"))
15413 (sha256
15414 (base32
15415 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
15416 (build-system python-build-system)
15417 (home-page "https://github.com/Pylons/waitress")
15418 (synopsis "Waitress WSGI server")
15419 (description "Waitress is meant to be a production-quality pure-Python WSGI
15420 server with very acceptable performance.")
15421 (license license:zpl2.1)))
15422
15423 (define-public python-whichcraft
15424 (package
15425 (name "python-whichcraft")
15426 (version "0.6.1")
15427 (source
15428 (origin
15429 (method url-fetch)
15430 (uri (pypi-uri "whichcraft" version))
15431 (sha256
15432 (base32
15433 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
15434 (build-system python-build-system)
15435 (native-inputs
15436 (list python-pytest))
15437 (home-page "https://github.com/pydanny/whichcraft")
15438 (synopsis "Cross-platform cross-python shutil.which functionality")
15439 (description
15440 "This package provides a shim of the shutil.which function that's
15441 designed to work across multiple versions of Python.")
15442 (license license:bsd-3)))
15443
15444 (define-public python-cookiecutter
15445 (package
15446 (name "python-cookiecutter")
15447 (version "1.7.3")
15448 (source
15449 (origin
15450 (method url-fetch)
15451 (uri (pypi-uri "cookiecutter" version))
15452 (sha256
15453 (base32 "0mx49whhwcxmvcak27zr7p7ndzkn3w7psfd7fzh3n91fi1r4v6kb"))))
15454 (build-system python-build-system)
15455 (native-inputs
15456 (list python-freezegun python-pytest python-pytest-catchlog
15457 python-pytest-cov python-pytest-mock))
15458 (propagated-inputs
15459 (list python-binaryornot
15460 python-click
15461 python-future
15462 python-jinja2
15463 python-jinja2-time
15464 python-poyo
15465 python-requests
15466 python-slugify
15467 python-text-unidecode
15468 python-whichcraft))
15469 (home-page "https://github.com/cookiecutter/cookiecutter")
15470 (synopsis
15471 "Command-line utility that creates projects from project templates")
15472 (description
15473 "This package provides a command-line utility that creates projects from
15474 project templates, e.g. creating a Python package project from a Python package
15475 project template.")
15476 (license license:bsd-3)))
15477
15478 (define-public python-pyquery
15479 (package
15480 (name "python-pyquery")
15481 (version "1.2.17")
15482 (source
15483 (origin
15484 (method url-fetch)
15485 (uri (pypi-uri "pyquery" version))
15486 (sha256
15487 (base32
15488 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
15489 (build-system python-build-system)
15490 (native-inputs
15491 (list python-webob python-webtest))
15492 (propagated-inputs
15493 (list python-lxml python-cssselect))
15494 (home-page "https://github.com/gawel/pyquery")
15495 (synopsis "Make jQuery-like queries on xml documents")
15496 (description "pyquery allows you to make jQuery queries on xml documents.
15497 The API is as much as possible the similar to jQuery. pyquery uses lxml for
15498 fast xml and html manipulation.")
15499 (license license:bsd-3)))
15500
15501 (define-public python-anyjson
15502 (package
15503 (name "python-anyjson")
15504 (version "0.3.3")
15505 (source
15506 (origin
15507 (method url-fetch)
15508 (uri (pypi-uri "anyjson" version))
15509 (sha256
15510 (base32
15511 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
15512 (build-system python-build-system)
15513 (arguments
15514 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
15515 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
15516 ;; whatever) so this transformation needs to be done before the tests
15517 ;; can be run. Maybe we could add a build step to transform beforehand
15518 ;; but it could be annoying/difficult.
15519 ;; We can enable tests for the Python 2 version, though, and do below.
15520 #:tests? #f))
15521 (home-page "https://bitbucket.org/runeh/anyjson/")
15522 (synopsis
15523 "Wraps best available JSON implementation in a common interface")
15524 (description
15525 "Anyjson loads whichever is the fastest JSON module installed
15526 and provides a uniform API regardless of which JSON implementation is used.")
15527 (license license:bsd-3)))
15528
15529 (define-public python-amqp
15530 (package
15531 (name "python-amqp")
15532 (version "5.1.1")
15533 (source
15534 (origin
15535 (method url-fetch)
15536 (uri (pypi-uri "amqp" version))
15537 (sha256
15538 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
15539 (build-system python-build-system)
15540 (arguments
15541 (list
15542 #:phases
15543 #~(modify-phases %standard-phases
15544 (replace 'check
15545 (lambda* (#:key tests? #:allow-other-keys)
15546 (when tests?
15547 (invoke "pytest" "-vv"
15548 "-c" "/dev/null" ;take control over pytest options
15549 ;; Integration tests require network connectivity.
15550 "--ignore" "t/integration")))))))
15551 (native-inputs (list python-pytest))
15552 (propagated-inputs (list python-vine))
15553 (home-page "https://github.com/celery/py-amqp")
15554 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
15555 (description
15556 "This is a fork of amqplib which was originally written by Barry Pederson.
15557 It is maintained by the Celery project, and used by kombu as a pure python
15558 alternative when librabbitmq is not available.")
15559 (license license:lgpl2.1+)))
15560
15561 (define-public python-beniget
15562 (package
15563 (name "python-beniget")
15564 (version "0.4.1")
15565 (home-page "https://github.com/serge-sans-paille/beniget")
15566 (source
15567 (origin
15568 (method url-fetch)
15569 (uri (pypi-uri "beniget" version))
15570 (sha256
15571 (base32 "035c4f78yllpw2c5p1w92520rilm7nnpsqh7yvi3qmfhi8xlnmbm"))))
15572 (build-system python-build-system)
15573 (propagated-inputs
15574 (list python-gast))
15575 (synopsis "Extract semantic information about static Python code")
15576 (description
15577 "Beniget is a collection of analyzers for Python @acronym{AST,
15578 Abstract Syntax Tree}. It is a building block for writing a static analyzer
15579 or compiler for Python.")
15580 (license license:bsd-3)))
15581
15582 (define-public python-txamqp
15583 (package
15584 (name "python-txamqp")
15585 (version "0.8.2")
15586 (source
15587 (origin
15588 (method url-fetch)
15589 (uri (pypi-uri "txAMQP" version))
15590 (sha256
15591 (base32
15592 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
15593 (build-system python-build-system)
15594 (propagated-inputs
15595 (list python-six python-twisted))
15596 (home-page "https://github.com/txamqp/txamqp")
15597 (synopsis "Communicate with AMQP peers and brokers using Twisted")
15598 (description
15599 "This package provides a Python library for communicating with AMQP peers
15600 and brokers using the asynchronous networking framework Twisted. It contains
15601 all the necessary code to connect, send and receive messages to/from an
15602 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
15603 also includes support for using Thrift RPC over AMQP in Twisted
15604 applications.")
15605 (license license:asl2.0)))
15606
15607 (define-public python-kombu
15608 (package
15609 (name "python-kombu")
15610 (version "5.2.4")
15611 (source
15612 (origin
15613 (method url-fetch)
15614 (uri (pypi-uri "kombu" version))
15615 (sha256
15616 (base32 "044ng79gj04668kf5fmy7fjkw8302xyapskkn65ym52zfbpf7kip"))))
15617 (build-system python-build-system)
15618 (arguments
15619 (list
15620 #:phases
15621 #~(modify-phases %standard-phases
15622 (replace 'check
15623 (lambda* (#:key tests? #:allow-other-keys)
15624 (when tests?
15625 (invoke "pytest" "-vv"
15626 ;; The transport tests attempt to pass messages to
15627 ;; many different databases.
15628 "--ignore" "t/unit/transport")))))))
15629 (native-inputs
15630 (list python-case python-pyro4 python-pytest-sugar
15631 python-pytest python-pytz))
15632 (propagated-inputs
15633 (list python-amqp python-cached-property python-vine))
15634 (home-page "https://kombu.readthedocs.io")
15635 (synopsis "Message passing library for Python")
15636 (description "The aim of Kombu is to make messaging in Python as easy as
15637 possible by providing an idiomatic high-level interface for the AMQ protocol,
15638 and also provide proven and tested solutions to common messaging problems.
15639 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
15640 message orientation, queuing, routing, reliability and security, for which the
15641 RabbitMQ messaging server is the most popular implementation.")
15642 (license license:bsd-3)))
15643
15644 (define-public python-billiard
15645 (package
15646 (name "python-billiard")
15647 (version "3.6.4.0")
15648 (source
15649 (origin
15650 (method url-fetch)
15651 (uri (pypi-uri "billiard" version))
15652 (sha256
15653 (base32 "0ismj2p8c66ykpss94rs0bfra5agxxmljz8r3gaq79r8valfb799"))))
15654 (build-system python-build-system)
15655 (arguments
15656 `(#:phases
15657 (modify-phases %standard-phases
15658 (add-after 'unpack 'remove-win-files
15659 (lambda _
15660 (for-each delete-file-recursively
15661 ;; test_multiprocessing seem to be written in Python2.
15662 '("t/integration/tests/test_multiprocessing.py"
15663 "t/unit/test_win32.py"
15664 "billiard/popen_spawn_win32.py"
15665 "billiard/_win.py")))))))
15666 (native-inputs
15667 (list python-case python-psutil python-pytest))
15668 (home-page "https://github.com/celery/billiard")
15669 (synopsis "Python multiprocessing fork with improvements and bugfixes")
15670 (description
15671 "Billiard is a fork of the Python 2.7 multiprocessing package. The
15672 multiprocessing package itself is a renamed and updated version of R Oudkerk's
15673 pyprocessing package. This standalone variant is intended to be compatible with
15674 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
15675 (license license:bsd-3)))
15676
15677 (define-public python-celery
15678 (package
15679 (name "python-celery")
15680 (version "5.2.6")
15681 (source
15682 (origin
15683 (method url-fetch)
15684 (uri (pypi-uri "celery" version))
15685 (sha256
15686 (base32 "109lcqarrbmh95sk1dm4yxayq1h3i27f4w23ndk64mqgyfnqqffi"))))
15687 (build-system python-build-system)
15688 (arguments
15689 '(#:phases
15690 (modify-phases %standard-phases
15691 (add-after 'unpack 'relax-requirements
15692 (lambda _
15693 (substitute* "requirements/default.txt"
15694 (("pytz.*")
15695 "pytz\n"))))
15696 (replace 'check
15697 (lambda* (#:key tests? #:allow-other-keys)
15698 (when tests?
15699 (invoke "python" "-m" "pytest" "t"
15700 "--ignore" "t/integration" ;hangs tests
15701 ;; The MongoDB backend test appears to expect an older
15702 ;; version of MongoDB which provided its own bson
15703 ;; module, fails with " AttributeError: module 'bson'
15704 ;; has no attribute 'encode'".
15705 "--ignore" "t/unit/backends/test_mongodb.py"
15706 ;; AssertionErrors
15707 "-k" "not test_check_privileges_no_fchown ")))))))
15708 (native-inputs
15709 (list python-case
15710 python-dnspython
15711 python-flaky
15712 python-iniconfig
15713 python-moto
15714 python-msgpack
15715 python-pytest
15716 python-pytest-celery
15717 python-pytest-subtests
15718 python-pytest-timeout
15719 python-toml))
15720 (propagated-inputs
15721 (list python-billiard
15722 python-click
15723 python-click-didyoumean
15724 python-click-plugins
15725 python-click-repl
15726 python-kombu
15727 python-pytz
15728 python-vine))
15729 (home-page "https://celeryproject.org")
15730 (synopsis "Distributed Task Queue")
15731 (description "Celery is an asynchronous task queue/job queue based on
15732 distributed message passing. It is focused on real-time operation, but
15733 supports scheduling as well. The execution units, called tasks, are executed
15734 concurrently on a single or more worker servers using multiprocessing,
15735 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
15736 synchronously (wait until ready).")
15737 (license license:bsd-3)))
15738
15739 (define-public python-translitcodec
15740 (package
15741 (name "python-translitcodec")
15742 (version "0.4.0")
15743 (source
15744 (origin
15745 (method url-fetch)
15746 (uri (pypi-uri "translitcodec" version))
15747 (sha256
15748 (base32
15749 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
15750 (build-system python-build-system)
15751 (arguments
15752 `(#:tests? #f)) ; no tests provided
15753 (home-page
15754 "https://github.com/claudep/translitcodec")
15755 (synopsis
15756 "Unicode to 8-bit charset transliteration codec")
15757 (description
15758 "This package contains codecs for transliterating ISO 10646 texts into
15759 best-effort representations using smaller coded character sets (ASCII,
15760 ISO 8859, etc.).")
15761 (license license:expat)))
15762
15763 (define-public python-anyqt
15764 (package
15765 (name "python-anyqt")
15766 (version "0.0.13")
15767 (source
15768 (origin
15769 (method url-fetch)
15770 (uri (pypi-uri "AnyQt" version))
15771 (sha256
15772 (base32 "0z7myf0mp1qx4gza6ncqyq9whk67vblmh9n3klk19dv4aakjml2f"))))
15773 (build-system python-build-system)
15774 (arguments
15775 `(#:tests? #f ;there are no tests
15776 #:phases
15777 (modify-phases %standard-phases
15778 (add-after 'unpack 'delete-files
15779 ;; Delete files related to other operating systems.
15780 (lambda _
15781 (delete-file "AnyQt/QtMacExtras.py")
15782 (delete-file "AnyQt/QtWinExtras.py"))))))
15783 (home-page "https://github.com/ales-erjavec/anyqt")
15784 (synopsis "PyQt4/PyQt5 compatibility layer")
15785 (description "AnyQt is a PyQt4/PyQt5 compatibility layer.")
15786 (license license:gpl3)))
15787
15788 (define-public python-pyqtgraph
15789 (package
15790 (name "python-pyqtgraph")
15791 (version "0.12.1")
15792 (source
15793 (origin
15794 (method url-fetch)
15795 (uri (pypi-uri "pyqtgraph" version))
15796 (sha256
15797 (base32 "0kc7ncv0lr3spni29i9g8nszyr4xinswqi2zzs6v8kqqi593pvyj"))))
15798 (build-system python-build-system)
15799 (arguments
15800 `(#:phases
15801 (modify-phases %standard-phases
15802 (add-before 'check 'set-home-and-qpa
15803 (lambda _
15804 (setenv "HOME" "/tmp")
15805 (setenv "QT_QPA_PLATFORM" "offscreen")
15806 #t))
15807 (replace 'check
15808 (lambda* (#:key inputs outputs #:allow-other-keys)
15809 (add-installed-pythonpath inputs outputs)
15810 (invoke "pytest" "-vv" "-k"
15811 (string-append
15812 ;; These tests try to download online data.
15813 "not test_PolyLineROI"
15814 " and not test_getArrayRegion_axisorder"
15815 " and not test_getArrayRegion"
15816 " and not test_PlotCurveItem"
15817 " and not test_NonUniformImage_colormap"
15818 " and not test_NonUniformImage_lut"
15819 " and not test_ImageItem_axisorder"
15820 " and not test_ImageItem"
15821 ;; The test_reload test fails and suggests adding
15822 ;; "--assert=plain" to the pytest command, but it
15823 ;; doesn't solve the failure.
15824 " and not test_reload")))))))
15825 (native-inputs
15826 (list python-pytest python-pytest-cov python-pytest-xdist))
15827 (inputs
15828 (list qtbase-5))
15829 (propagated-inputs
15830 (list python-h5py python-numpy python-pyopengl python-scipy
15831 python-pyqt-without-qtwebkit))
15832 (home-page "http://www.pyqtgraph.org")
15833 (synopsis "Scientific graphics and GUI library for Python")
15834 (description
15835 "PyQtGraph is a Pure-python graphics library for PyQt5, PyQt6, PySide2
15836 and PySide6. It is intended for use in mathematics, scientific or engineering
15837 applications.")
15838 (license license:expat)))
15839
15840 (define-public python-qasync
15841 (package
15842 (name "python-qasync")
15843 (version "0.22.0")
15844 (source
15845 (origin
15846 ;; There are no tests in the PyPI tarball.
15847 (method git-fetch)
15848 (uri (git-reference
15849 (url "https://github.com/CabbageDevelopment/qasync/")
15850 (commit (string-append "v" version))))
15851 (file-name (git-file-name name version))
15852 (sha256
15853 (base32 "1q9cllrwf94whr0f6mipa0hdq1rcyqvklwx19g35g2dav8f3xkjl"))))
15854 (build-system python-build-system)
15855 (arguments
15856 `(#:test-target "pytest"
15857 #:phases
15858 (modify-phases %standard-phases
15859 (add-before 'check 'set-qpa
15860 (lambda _
15861 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
15862 (native-inputs
15863 (list python-pytest python-pytest-runner))
15864 (propagated-inputs
15865 (list python-pyqt))
15866 (home-page "https://github.com/CabbageDevelopment/qasync")
15867 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
15868 (description
15869 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
15870 by providing an implementation of the PEP 3156 event-loop.")
15871 (license license:bsd-2)))
15872
15873 (define-public python-editor
15874 (package
15875 (name "python-editor")
15876 (version "1.0.4")
15877 (source
15878 (origin
15879 (method url-fetch)
15880 (uri (pypi-uri "python-editor" version))
15881 (sha256
15882 (base32
15883 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
15884 (build-system python-build-system)
15885 (arguments
15886 '(#:tests? #f)) ;XXX: needs a TTY and an editor
15887 (home-page "https://github.com/fmoo/python-editor")
15888 (synopsis "Programmatically open an editor, capture the result")
15889 (description
15890 "python-editor is a library that provides the editor module for
15891 programmatically interfacing with your system's $EDITOR.")
15892 (license license:asl2.0)))
15893
15894 (define-public python-multiprocessing-logging
15895 (package
15896 (name "python-multiprocessing-logging")
15897 (version "0.3.1")
15898 (home-page "https://github.com/jruere/multiprocessing-logging")
15899 (source (origin
15900 (method git-fetch)
15901 (uri (git-reference
15902 (url home-page)
15903 (commit (string-append "v" version))))
15904 (file-name (git-file-name name version))
15905 (sha256
15906 (base32
15907 "1625wy3djlr3b2fpd3vi822f8gw6b75mnls5a4318dbi9za5pf0y"))))
15908 (build-system python-build-system)
15909 (synopsis "Manage logs from multiple processes")
15910 (description
15911 "This Python module implements a multiprocessing-aware @code{Handler}
15912 that, when set on the root @code{Logger}, will tunnel log records to the
15913 main process so that they are handled correctly.")
15914 (license license:lgpl3+)))
15915
15916 (define-public python-vobject
15917 (package
15918 (name "python-vobject")
15919 (version "0.9.6.1")
15920 (source (origin
15921 (method url-fetch)
15922 (uri (pypi-uri "vobject" version))
15923 (sha256
15924 (base32
15925 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
15926 (build-system python-build-system)
15927 (arguments
15928 '(;; The test suite relies on some non-portable Windows interfaces.
15929 #:tests? #f))
15930 (propagated-inputs
15931 (list python-dateutil python-pyicu))
15932 (synopsis "Parse and generate vCard and vCalendar files")
15933 (description "Vobject is intended to be a full featured Python package for
15934 parsing and generating vCard and vCalendar files. Currently, iCalendar files
15935 are supported and well tested. vCard 3.0 files are supported, and all data
15936 should be imported, but only a few components are understood in a sophisticated
15937 way.")
15938 (home-page "https://eventable.github.io/vobject/")
15939 (license license:asl2.0)))
15940
15941 (define-public python-munkres
15942 (package
15943 (name "python-munkres")
15944 (version "1.1.4")
15945 (source (origin
15946 (method url-fetch)
15947 (uri (pypi-uri "munkres" version))
15948 (sha256
15949 (base32
15950 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
15951 (build-system python-build-system)
15952 (native-inputs (list python-pytest-6))
15953 (home-page "https://software.clapper.org/munkres/")
15954 (synopsis "Implementation of the Munkres algorithm")
15955 (description "The Munkres module provides an implementation of the Munkres
15956 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
15957 useful for solving the Assignment Problem.")
15958 (license license:bsd-3)))
15959
15960 (define-public python-whoosh
15961 (package
15962 (name "python-whoosh")
15963 (version "2.7.4")
15964 (source
15965 (origin
15966 (method url-fetch)
15967 (uri (pypi-uri "Whoosh" version))
15968 (sha256
15969 (base32
15970 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
15971 (build-system python-build-system)
15972 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
15973 (native-inputs
15974 (list python-pytest))
15975 (home-page "https://bitbucket.org/mchaput/whoosh")
15976 (synopsis "Full text indexing, search, and spell checking library")
15977 (description
15978 "Whoosh is a fast, pure-Python full text indexing, search, and spell
15979 checking library.")
15980 (license license:bsd-2)))
15981
15982 (define-public python-codespell
15983 (package
15984 (name "python-codespell")
15985 (version "2.1.0")
15986 (source
15987 (origin
15988 (method url-fetch)
15989 (uri (pypi-uri "codespell" version))
15990 (sha256
15991 (base32 "1r9y714cz8m894rxp7pyvicr1lw2iid24vz6fxbl5wzy8ibgxlqr"))))
15992 (build-system python-build-system)
15993 (inputs
15994 (list python-chardet))
15995 (native-inputs
15996 (list python-check-manifest python-flake8 python-pytest
15997 python-pytest-cov python-pytest-dependency))
15998 (arguments
15999 `(#:phases
16000 (modify-phases %standard-phases
16001 (replace 'check
16002 (lambda* (#:key outputs tests? #:allow-other-keys)
16003 (when tests?
16004 ;; Make installed executable available for running the tests.
16005 (setenv "PATH"
16006 (string-append (assoc-ref outputs "out") "/bin"
16007 ":" (getenv "PATH")))
16008 (invoke "pytest" "-vv")))))))
16009 (home-page "https://github.com/codespell-project/codespell/")
16010 (synopsis "Spellchecker for code")
16011 (description "Codespell fixes common misspellings in text files.
16012 It's designed primarily for checking misspelled words in source code,
16013 but it can be used with other files as well. It does not check for word
16014 membership in a complete dictionary, but instead looks for a set of
16015 common misspellings. Therefore it should catch errors like \"adn\", but
16016 it will not catch \"adnasdfasdf\". This also means it shouldn't
16017 generate false-positives when you use a niche term it doesn't know
16018 about.")
16019 (license
16020 (list
16021 ; for codespell and codespell_lib
16022 license:gpl2
16023 ; for dictionary*.txt
16024 license:cc-by-sa3.0))))
16025
16026 (define-public python-pathlib
16027 (package
16028 (name "python-pathlib")
16029 (version "1.0.1")
16030 (source (origin
16031 (method url-fetch)
16032 (uri (pypi-uri "pathlib" version))
16033 (sha256
16034 (base32
16035 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
16036 (build-system python-build-system)
16037 ;; The tests depend on the internal "test" module, which does not provide
16038 ;; a stable interface.
16039 (arguments `(#:tests? #f))
16040 (home-page "https://pathlib.readthedocs.org/")
16041 (synopsis "Object-oriented file system paths")
16042 (description "Pathlib offers a set of classes to handle file system paths.
16043 It offers the following advantages over using string objects:
16044
16045 @enumerate
16046 @item No more cumbersome use of os and os.path functions. Everything can
16047 be done easily through operators, attribute accesses, and method calls.
16048 @item Embodies the semantics of different path types. For example,
16049 comparing Windows paths ignores casing.
16050 @item Well-defined semantics, eliminating any inconsistencies or
16051 ambiguities (forward vs. backward slashes, etc.).
16052 @end enumerate
16053
16054 Note: In Python 3.4, pathlib is now part of the standard library. For other
16055 Python versions please consider python-pathlib2 instead, which tracks the
16056 standard library module. This module (python-pathlib) isn't maintained
16057 anymore.")
16058 (license license:expat)))
16059
16060 (define-public python-jellyfish
16061 (package
16062 (name "python-jellyfish")
16063 (version "0.8.8")
16064 (source (origin
16065 (method url-fetch)
16066 (uri (pypi-uri "jellyfish" version))
16067 (sha256
16068 (base32
16069 "0p2s6b30sfffx8sya2i8kz0i0riw9fq1fi0k89s8kdgrmjf0h1h5"))))
16070 (build-system python-build-system)
16071 (arguments
16072 `(#:tests? #f ; XXX: Tests cannot find C coded version.
16073 #:phases
16074 (modify-phases %standard-phases
16075 (replace 'check
16076 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
16077 (when tests?
16078 (add-installed-pythonpath inputs outputs)
16079 (invoke "pytest" "-vv" "jellyfish/test.py")))))))
16080 (native-inputs
16081 (list python-pytest))
16082 (home-page "https://github.com/jamesturk/jellyfish")
16083 (synopsis "Approximate and phonetic matching of strings")
16084 (description "Jellyfish uses a variety of string comparison and phonetic
16085 encoding algorithms to do fuzzy string matching.")
16086 (license license:bsd-2)))
16087
16088 (define-public python-pdfminer-six
16089 (package
16090 (name "python-pdfminer-six")
16091 (version "20201018")
16092 ;; There are no tests in the PyPI tarball.
16093 (source
16094 (origin
16095 (method git-fetch)
16096 (uri (git-reference
16097 (url "https://github.com/pdfminer/pdfminer.six")
16098 (commit version)))
16099 (file-name (git-file-name name version))
16100 (sha256
16101 (base32 "1a2fxxnnjqbx344znpvx7cnv1881dk6585ibw01inhfq3w6yj2lr"))))
16102 (build-system python-build-system)
16103 (arguments
16104 `(#:phases
16105 (modify-phases %standard-phases
16106 ;; Tests write to the source tree.
16107 (add-after 'unpack 'make-git-checkout-writable
16108 (lambda _
16109 (for-each make-file-writable (find-files "."))
16110 #t))
16111 (replace 'check
16112 (lambda _
16113 (invoke "make" "test"))))))
16114 (propagated-inputs
16115 (list python-chardet python-cryptography python-sortedcontainers))
16116 (native-inputs
16117 (list python-nose python-tox))
16118 (home-page "https://github.com/pdfminer/pdfminer.six")
16119 (synopsis "PDF parser and analyzer")
16120 (description "@code{pdfminer.six} is a community maintained fork of
16121 the original PDFMiner. It is a tool for extracting information from PDF
16122 documents. It focuses on getting and analyzing text data. Pdfminer.six
16123 extracts the text from a page directly from the sourcecode of the PDF. It
16124 can also be used to get the exact location, font or color of the text.")
16125 (license license:expat)))
16126
16127 (define-public python-rarfile
16128 (package
16129 (name "python-rarfile")
16130 (version "4.0")
16131 (source (origin
16132 (method url-fetch)
16133 (uri (pypi-uri "rarfile" version))
16134 (sha256
16135 (base32
16136 "1882wv9szcm29mnyhjmspyflyr2l7z73srn14w4dlnww49lqfm37"))))
16137 (build-system python-build-system)
16138 (arguments
16139 `(#:tests? #f ;; The bsdtar utility is very limited and most tests fail.
16140 #:phases
16141 (modify-phases %standard-phases
16142 (add-after 'unpack 'patch
16143 (lambda* (#:key inputs #:allow-other-keys)
16144 (substitute* "rarfile.py"
16145 ;; Disable unrar and unar, which are unavailable on Guix.
16146 (("(unrar|unar)=True" all tool) (string-append tool "=False"))
16147 ;; Hardcode path to bsdtar
16148 (("\"bsdtar\"")
16149 (string-append "\"" (assoc-ref inputs "libarchive") "/bin/bsdtar\"")))
16150 #t))
16151 (replace 'check
16152 (lambda* (#:key inputs tests? #:allow-other-keys)
16153 (when tests?
16154 (invoke "pytest" "-vv")))))))
16155 (native-inputs (list python-pytest))
16156 (inputs (list libarchive))
16157 (home-page "https://github.com/markokr/rarfile")
16158 (synopsis "RAR archive reader for Python")
16159 (description "This is Python module for RAR archive reading. The interface
16160 is made as zipfile like as possible.")
16161 (license license:isc)))
16162
16163 (define-public python-rich
16164 (package
16165 (name "python-rich")
16166 (version "12.4.1")
16167 (source (origin
16168 (method url-fetch)
16169 (uri (pypi-uri "rich" version))
16170 (sha256
16171 (base32
16172 "149vjb4cpf9mz14iig0b6d8065dm8aslp6pc45g9ipmp1wf00ffj"))))
16173 (build-system python-build-system)
16174 (arguments
16175 `(#:phases
16176 (modify-phases %standard-phases
16177 (replace 'check
16178 (lambda* (#:key inputs tests? #:allow-other-keys)
16179 (when tests?
16180 (copy-recursively (string-append
16181 (assoc-ref inputs "tests") "/tests")
16182 "tests")
16183 (invoke "python" "-m" "pytest" "-vv")))))))
16184 (propagated-inputs
16185 (list python-attrs python-colorama python-commonmark python-pygments
16186 python-typing-extensions))
16187 (native-inputs
16188 `(("python-pytest" ,python-pytest)
16189 ("tests"
16190 ;; The release on pypi comes without tests. We can't build from this
16191 ;; checkout, though, because installation requires an invocation of
16192 ;; poetry.
16193 ,(origin
16194 (method git-fetch)
16195 (uri (git-reference
16196 (url "https://github.com/willmcgugan/rich")
16197 (commit (string-append "v" version))))
16198 (file-name (git-file-name name version))
16199 (sha256
16200 (base32
16201 "17c3gljn8zv32xnpsgd3fqgqn4r7cdfqri41hridcpbhssdgkyp9"))))))
16202 (home-page "https://github.com/willmcgugan/rich")
16203 (synopsis "Render rich text and more to the terminal")
16204 (description
16205 "This is a Python package for rendering rich text, tables, progress bars,
16206 syntax highlighting, markdown and more to the terminal.")
16207 (license license:expat)))
16208
16209 (define-public python-textual
16210 (package
16211 (name "python-textual")
16212 (version "0.1.18")
16213 (source (origin
16214 (method url-fetch)
16215 (uri (pypi-uri "textual" version))
16216 (sha256
16217 (base32
16218 "08yg5a51hz1axfj5hx28hx31gq5apcj6vpkkmawmiplisa73z25j"))))
16219 (build-system python-build-system)
16220 (arguments
16221 (let ((tests
16222 ;; The release on pypi comes without tests. We can't build
16223 ;; from this checkout, though, because installation requires
16224 ;; an invocation of poetry.
16225 (origin
16226 (method git-fetch)
16227 (uri (git-reference
16228 (url "https://github.com/Textualize/textual")
16229 (commit (string-append "v" version))))
16230 (file-name (git-file-name name version))
16231 (sha256
16232 (base32
16233 "0b3ycwqhp21mg9fvmadgxhgbvkwq6fd784l2xcmvy77rravrnnax")))))
16234 (list #:phases
16235 #~(modify-phases %standard-phases
16236 (replace 'check
16237 (lambda* (#:key tests? #:allow-other-keys)
16238 (when tests?
16239 (copy-recursively #$(file-append tests "/tests")
16240 "tests")
16241 (invoke "python" "-m" "pytest" "-vv"))))))))
16242 (propagated-inputs
16243 (list python-rich python-typing-extensions))
16244 (native-inputs
16245 (list python-pytest))
16246 (home-page "https://github.com/Textualize/textual")
16247 (synopsis "Build text user interfaces in Python")
16248 (description "Textual is a @acronym{TUI, Text User Interface} framework
16249 for Python inspired by modern web development.")
16250 (license license:expat)))
16251
16252 (define-public python-magic
16253 (package
16254 (name "python-magic")
16255 (version "0.4.24")
16256 (home-page "https://github.com/ahupp/python-magic")
16257 (source
16258 (origin
16259 (method git-fetch)
16260 (uri (git-reference (url home-page) (commit version)))
16261 (file-name (git-file-name name version))
16262 (patches (search-patches "python-magic-python-bytecode.patch"))
16263 (sha256
16264 (base32
16265 "17jalhjbfd600lzfz296m0nvgp6c7vx1mgz82jbzn8hgdzknf4w0"))))
16266 (build-system python-build-system)
16267 (arguments
16268 '(#:phases (modify-phases %standard-phases
16269 ;; Replace a specific method call with a hard-coded
16270 ;; path to the necessary libmagic.so file in the
16271 ;; store. If we don't do this, then the method call
16272 ;; will fail to find the libmagic.so file, which in
16273 ;; turn will cause any application using
16274 ;; python-magic to fail.
16275 (add-before 'build 'hard-code-path-to-libmagic
16276 (lambda* (#:key inputs #:allow-other-keys)
16277 (let ((magic (search-input-file inputs "/lib/libmagic.so")))
16278 (substitute* "magic/loader.py"
16279 (("find_library\\('magic'\\)")
16280 (string-append "'" magic "'"))))))
16281 (replace 'check
16282 (lambda* (#:key tests? #:allow-other-keys)
16283 ;; The test suite mandates this variable.
16284 (setenv "LC_ALL" "en_US.UTF-8")
16285 (if tests?
16286 (with-directory-excursion "test"
16287 (invoke "python" "./test.py")
16288 (invoke "python" "./libmagic_test.py"))
16289 (format #t "test suite not run~%")))))))
16290 (native-inputs
16291 (list which))
16292 (inputs
16293 ;; python-magic needs to be able to find libmagic.so.
16294 ;; Use a newer version because 5.39 returns bogus for some archives
16295 ;; (notably Chromium .crx extensions), which breaks e.g. 'diffoscope'.
16296 (list file-next))
16297 (synopsis "File type identification using libmagic")
16298 (description
16299 "This module uses ctypes to access the libmagic file type
16300 identification library. It makes use of the local magic database and
16301 supports both textual and MIME-type output. Note that this module and
16302 the python-file module both provide a \"magic.py\" file; these two
16303 modules, which are different and were developed separately, both serve
16304 the same purpose: to provide Python bindings for libmagic.")
16305 (license license:expat)))
16306
16307 (define-public s3cmd
16308 (package
16309 (name "s3cmd")
16310 (version "2.3.0")
16311 (source
16312 (origin
16313 (method git-fetch)
16314 (uri (git-reference
16315 (url "https://github.com/s3tools/s3cmd")
16316 (commit (string-append "v" version))))
16317 (file-name (git-file-name name version))
16318 (sha256
16319 (base32 "0rdgwwmmp8mdxc84bxq6k9a7v7z2qgc3df47djzs2b84gw81dglx"))))
16320 (build-system python-build-system)
16321 (inputs
16322 (list python-dateutil
16323 python-magic))
16324 (home-page "https://s3tools.org/s3cmd")
16325 (synopsis "Command line tool for S3-compatible storage services")
16326 (description
16327 "S3cmd is a command line tool for uploading, retrieving and managing data
16328 in storage services that are compatible with the Amazon Simple Storage
16329 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
16330 GnuPG encryption, and more. It also supports management of Amazon's
16331 CloudFront content delivery network.")
16332 (license license:gpl2+)))
16333
16334 (define-public python-pkgconfig
16335 (package
16336 (name "python-pkgconfig")
16337 (version "1.3.1")
16338 (source
16339 (origin
16340 (method url-fetch)
16341 (uri (pypi-uri "pkgconfig" version))
16342 (sha256
16343 (base32
16344 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
16345 (build-system python-build-system)
16346 (native-inputs
16347 (list python-nose))
16348 (inputs
16349 (list pkg-config))
16350 (arguments
16351 `(#:phases
16352 (modify-phases %standard-phases
16353 (add-before 'build 'patch
16354 ;; Hard-code the path to pkg-config.
16355 (lambda _
16356 (substitute* "pkgconfig/pkgconfig.py"
16357 (("'pkg-config'")
16358 (string-append "'" (which "pkg-config") "'")))))
16359 (replace 'check
16360 (lambda _
16361 (invoke "nosetests" "test.py"))))))
16362 (home-page "https://github.com/matze/pkgconfig")
16363 (synopsis "Python interface for pkg-config")
16364 (description "This module provides a Python interface to pkg-config. It
16365 can be used to find all pkg-config packages, check if a package exists,
16366 check if a package meets certain version requirements, query CFLAGS and
16367 LDFLAGS and parse the output to build extensions with setup.py.")
16368 (license license:expat)))
16369
16370 (define-public python-bz2file
16371 (package
16372 (name "python-bz2file")
16373 (version "0.98")
16374 (source
16375 (origin
16376 (method url-fetch)
16377 (uri (pypi-uri "bz2file" version))
16378 (sha256
16379 (base32
16380 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
16381 (build-system python-build-system)
16382 (arguments
16383 `(#:tests? #f)) ; Tests use deprecated python modules.
16384 (home-page "https://github.com/nvawda/bz2file")
16385 (synopsis "Read and write bzip2-compressed files")
16386 (description
16387 "Bz2file is a Python library for reading and writing bzip2-compressed
16388 files. It contains a drop-in replacement for the I/O interface in the
16389 standard library's @code{bz2} module, including features from the latest
16390 development version of CPython that are not available in older releases.")
16391 (license license:asl2.0)))
16392
16393 (define-public python-future
16394 (package
16395 (name "python-future")
16396 (version "0.18.2")
16397 (source
16398 (origin
16399 (method url-fetch)
16400 (uri (pypi-uri "future" version))
16401 (sha256
16402 (base32
16403 "0zakvfj87gy6mn1nba06sdha63rn4njm7bhh0wzyrxhcny8avgmi"))))
16404 (build-system python-build-system)
16405 ;; Many tests connect to the network or are otherwise flawed.
16406 ;; https://github.com/PythonCharmers/python-future/issues/210
16407 (arguments
16408 `(#:tests? #f
16409 #:phases
16410 (modify-phases %standard-phases
16411 (replace 'sanity-check
16412 (let ((sanity-check (assoc-ref %standard-phases 'sanity-check)))
16413 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
16414 (let* ((files (find-files (site-packages inputs outputs)
16415 "top_level\\.txt"))
16416 (backups (map (lambda (f) (string-append f ".bak"))
16417 files)))
16418 (for-each copy-file files backups)
16419 (substitute* files
16420 ;; Nobody be usin' winreg on Guix
16421 ;; Also, don't force users to have tkinter when they don't
16422 ;; need it
16423 (("(winreg|tkinter)") ""))
16424 (apply sanity-check args)
16425 (for-each rename-file backups files))))))))
16426 (home-page "https://python-future.org")
16427 (synopsis "Single-source support for Python 3 and 2")
16428 (description
16429 "@code{python-future} is the missing compatibility layer between Python 2 and
16430 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
16431 to support both Python 2 and Python 3 with minimal overhead.")
16432 (license license:expat)))
16433
16434 (define-public python-cysignals
16435 (package
16436 (name "python-cysignals")
16437 (version "1.9.0")
16438 (source
16439 (origin
16440 (method url-fetch)
16441 (uri (pypi-uri "cysignals" version))
16442 (sha256
16443 (base32
16444 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
16445 (build-system python-build-system)
16446 (native-inputs
16447 (list python-cython python-sphinx))
16448 (inputs
16449 (list pari-gp))
16450 (arguments
16451 `(#:modules ((guix build python-build-system)
16452 ((guix build gnu-build-system) #:prefix gnu:)
16453 (guix build utils))
16454 ;; FIXME: Tests are executed after installation and currently fail
16455 ;; when not installing into standard locations; the author is working
16456 ;; on a fix.
16457 #:tests? #f
16458 #:phases
16459 (modify-phases %standard-phases
16460 (add-before
16461 'build 'configure
16462 (assoc-ref gnu:%standard-phases 'configure)))))
16463 (home-page
16464 "https://github.com/sagemath/cysignals")
16465 (synopsis
16466 "Handling of interrupts and signals for Cython")
16467 (description
16468 "The cysignals package provides mechanisms to handle interrupts (and
16469 other signals and errors) in Cython code, using two related approaches,
16470 for mixed Cython/Python code or external C libraries and pure Cython code,
16471 respectively.")
16472 (license license:lgpl3+)))
16473
16474 (define-public python-rope
16475 (package
16476 (name "python-rope")
16477 (version "1.1.1")
16478 (source
16479 (origin
16480 (method url-fetch)
16481 (uri (pypi-uri "rope" version))
16482 (sha256
16483 (base32
16484 "0bkzwkllxxdxd3w70xiy137lqvnlmmaplsc2ya3s23ss4kq8y10k"))))
16485 (build-system python-build-system)
16486 (arguments
16487 (list #:phases
16488 `(modify-phases %standard-phases
16489 (add-after 'unpack 'disable-broken-test
16490 (lambda _
16491 (substitute* "ropetest/contrib/autoimporttest.py"
16492 (("def test_search_module")
16493 "def __notest_search_module")
16494 (("def test_search_submodule")
16495 "def __notest_search_submodule")))))))
16496 (native-inputs
16497 (list python-pytest-timeout
16498 python-pytest))
16499 (home-page "https://github.com/python-rope/rope")
16500 (synopsis "Refactoring library for Python")
16501 (description "Rope is a refactoring library for Python. It facilitates
16502 the renaming, moving and extracting of attributes, functions, modules, fields
16503 and parameters in Python source code. These refactorings can also be applied
16504 to occurrences in strings and comments.")
16505 (license license:lgpl3+)))
16506
16507 (define-public python-py3status
16508 (package
16509 (name "python-py3status")
16510 (version "3.21")
16511 (source
16512 (origin
16513 (method url-fetch)
16514 (uri (pypi-uri "py3status" version))
16515 (sha256
16516 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
16517 (build-system python-build-system)
16518 (inputs
16519 (list file))
16520 (arguments
16521 '(#:phases
16522 (modify-phases %standard-phases
16523 ;; 'file' is used for detection of configuration file encoding
16524 ;; let's make link the dependency to particular input
16525 (add-before 'build 'patch-file-path
16526 (lambda* (#:key inputs #:allow-other-keys)
16527 (let ((file-path (assoc-ref inputs "file")))
16528 (substitute* "py3status/parse_config.py"
16529 (("\\[\"file\", \"-b\"")
16530 (string-append "['" file-path "/bin/file', '-b'")))
16531 #t))))
16532 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
16533 (home-page "https://github.com/ultrabug/py3status")
16534 (synopsis "Extensible i3status wrapper written in Python")
16535 (description "py3status is an i3status wrapper which extends i3status
16536 functionality in a modular way, allowing you to extend your panel with your
16537 own code, responding to click events and updating clock every second.")
16538 (license license:bsd-3)))
16539
16540 (define-public python-tblib
16541 (package
16542 (name "python-tblib")
16543 (version "1.6.0")
16544 (source (origin
16545 (method url-fetch)
16546 (uri (pypi-uri "tblib" version))
16547 (sha256
16548 (base32
16549 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
16550 (build-system python-build-system)
16551 (arguments
16552 `(#:phases
16553 (modify-phases %standard-phases
16554 (replace 'check
16555 (lambda _
16556 (invoke "py.test" "-vv" "tests" "README.rst"))))))
16557 (native-inputs
16558 (list python-pytest python-six))
16559 (home-page "https://github.com/ionelmc/python-tblib")
16560 (synopsis "Traceback serialization library")
16561 (description
16562 "Traceback serialization allows you to:
16563
16564 @enumerate
16565 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
16566 different processes. This allows better error handling when running code over
16567 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
16568
16569 @item Parse traceback strings and raise with the parsed tracebacks.
16570 @end enumerate\n")
16571 (license license:bsd-3)))
16572
16573 (define-public python-tftpy
16574 (package
16575 (name "python-tftpy")
16576 (version "0.8.2")
16577 (source
16578 (origin
16579 (method git-fetch) ;no tests in PyPI archive
16580 (uri (git-reference
16581 (url "https://github.com/msoulier/tftpy")
16582 (commit version)))
16583 (file-name (git-file-name name version))
16584 (sha256
16585 (base32
16586 "1gl04ps8h8r7av3h0zbm8gwmkqs9rkk5vf7n8mv2bzrkwvy9hacc"))))
16587 (build-system python-build-system)
16588 (arguments
16589 `(#:phases (modify-phases %standard-phases
16590 (replace 'check
16591 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
16592 (when tests?
16593 ;; The default DEBUG logging level is way too verbose.
16594 (substitute* "t/test.py"
16595 (("logging\\.DEBUG")
16596 "logging.INFO"))
16597 (invoke "python" "-m" "unittest" "t/test.py")))))))
16598 (home-page "http://tftpy.sourceforge.net/")
16599 (synopsis "Python trivial file transfer protocol (TFTP) library")
16600 (description "TFTPy is a trivial file transfer protocol (TFTP) Python
16601 library. It can be used to act both as a TFTP client or TFTP server.")
16602 (license license:expat)))
16603
16604 (define-public python-greenlet
16605 (package
16606 (name "python-greenlet")
16607 (version "1.1.2")
16608 (source (origin
16609 (method url-fetch)
16610 (uri (pypi-uri "greenlet" version))
16611 (sha256
16612 (base32
16613 "0jkln5bf6rq7dbvpv7ypin3pp9jqd2jr91yyxlnfcii3msj5w3z3"))))
16614 (build-system python-build-system)
16615 (home-page "https://greenlet.readthedocs.io/")
16616 (synopsis "Lightweight in-process concurrent programming")
16617 (description
16618 "Greenlet package is a spin-off of Stackless, a version of CPython
16619 that supports micro-threads called \"tasklets\". Tasklets run
16620 pseudo-concurrently (typically in a single or a few OS-level threads) and
16621 are synchronized with data exchanges on \"channels\".")
16622 (license (list license:psfl license:expat))))
16623
16624 (define-public python-objgraph
16625 (package
16626 (name "python-objgraph")
16627 (version "3.4.1")
16628 (source
16629 (origin
16630 (method url-fetch)
16631 (uri (pypi-uri "objgraph" version))
16632 (sha256
16633 (base32
16634 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
16635 (build-system python-build-system)
16636 (propagated-inputs
16637 (list python-graphviz))
16638 (native-inputs
16639 (list python-mock graphviz))
16640 (home-page "https://mg.pov.lt/objgraph/")
16641 (synopsis "Draw Python object reference graphs with graphviz")
16642 (description
16643 "This package provides tools to draw Python object reference graphs with
16644 graphviz.")
16645 (license license:expat)))
16646
16647 (define-public python-gevent
16648 (package
16649 (name "python-gevent")
16650 (version "21.12.0")
16651 (source (origin
16652 (method url-fetch)
16653 (uri (pypi-uri "gevent" version))
16654 (sha256
16655 (base32
16656 "0kh9mmq811mzfgj60n64icybjp4ryjmfmy1vg7x92yrniibn92zl"))
16657 (modules '((guix build utils)))
16658 (snippet
16659 '(begin
16660 ;; unbunding libev and c-ares
16661 (delete-file-recursively "deps")
16662 ;; Remove cythonized files.
16663 (with-directory-excursion "src/gevent"
16664 (for-each delete-file
16665 (append (list "resolver/cares.c"
16666 "queue.c"
16667 "local.c"
16668 "libev/corecext.h"
16669 "libev/corecext.c"
16670 "greenlet.c"
16671 "event.c"
16672 "_waiter.c"
16673 "_tracer.c"
16674 "_semaphore.c"
16675 "_imap.c"
16676 "_ident.c"
16677 "_hub_primitives.c"
16678 "_hub_local.c"
16679 "_greenlet_primitives.c"
16680 "_abstract_linkable.c")
16681 (find-files "." "\\.html$"))))))))
16682 (build-system python-build-system)
16683 (arguments
16684 `(#:modules ((ice-9 ftw)
16685 (ice-9 match)
16686 (srfi srfi-26)
16687 (guix build utils)
16688 (guix build python-build-system))
16689 #:phases (modify-phases %standard-phases
16690 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
16691 (lambda _
16692 (substitute* "src/gevent/subprocess.py"
16693 (("/bin/sh") (which "sh")))
16694 (for-each (lambda (file)
16695 (substitute* file
16696 (("/bin/sh") (which "sh"))
16697 (("/bin/true") (which "true"))))
16698 (find-files "src/greentest" "\\.py$"))))
16699 (add-before 'build 'do-not-use-bundled-sources
16700 (lambda _
16701 (setenv "GEVENTSETUP_EMBED" "0")
16702
16703 ;; Prevent building bundled libev.
16704 (substitute* "setup.py"
16705 (("run_make=_BUILDING")
16706 "run_make=False"))))
16707 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
16708 (lambda* (#:key inputs #:allow-other-keys)
16709 (let ((greenlet (string-append
16710 (assoc-ref inputs "python-greenlet")
16711 "/include")))
16712 (match (scandir greenlet
16713 (lambda (item)
16714 (string-prefix? "python" item)))
16715 ((python)
16716 (setenv "C_INCLUDE_PATH"
16717 (string-append greenlet "/" python ":"
16718 (or (getenv "C_INCLUDE_PATH")
16719 ""))))))))
16720 (add-before 'check 'pretend-to-be-CI
16721 (lambda _
16722 ;; A few tests are skipped due to network constraints or
16723 ;; get longer timeouts when running in a CI environment.
16724 ;; Piggy-back on that, as we need the same adjustments.
16725 (setenv "TRAVIS" "1")
16726 (setenv "APPVEYOR" "1")))
16727 (add-before 'check 'adjust-tests
16728 (lambda _
16729 (let ((disabled-tests
16730 '(;; These tests relies on networking which is
16731 ;; not available in the build container.
16732 "test__getaddrinfo_import.py"
16733 "test__server_pywsgi.py"
16734 ;; XXX: These tests borrow functionality from the
16735 ;; Python builtin 'test' module, but it is not
16736 ;; installed with the Guix Python distribution.
16737 "test_smtpd.py"
16738 "test_wsgiref.py"
16739 "test_urllib2.py"
16740 "test_thread.py"
16741 "test_threading.py"
16742 "test__threading_2.py"
16743 ;; These tests rely on KeyboardInterrupts which do not
16744 ;; work inside the build container for some reason
16745 ;; (lack of controlling terminal?).
16746 "test_subprocess.py"
16747 "test__issues461_471.py"
16748 ;; TODO: Patch out the tests that use getprotobyname, etc
16749 ;; instead of disabling all the tests from these files.
16750 "test__resolver_dnspython.py"
16751 "test__doctests.py"
16752 "test__all__.py"
16753 "test___config.py"
16754 "test__execmodules.py"
16755 ;; This test contains 'test_unlink', which
16756 ;; fails on i686 (see:
16757 ;; https://github.com/gevent/gevent/issues/1558).
16758 "test__core_stat.py")))
16759 (call-with-output-file "skipped_tests.txt"
16760 (lambda (port)
16761 (format port "~a~%"
16762 (string-join disabled-tests "\n")))))))
16763 (replace 'check
16764 (lambda _
16765 ;; Use the build daemons configured number of workers.
16766 (setenv "NWORKERS" (number->string (parallel-job-count)))
16767
16768 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
16769 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
16770 (propagated-inputs
16771 (list python-greenlet python-zope-event python-zope-interface))
16772 (native-inputs
16773 (list python-cython
16774 ;; For tests.
16775 python-dnspython python-psutil python-objgraph))
16776 (inputs
16777 (list c-ares libev))
16778 (home-page "https://www.gevent.org/")
16779 (synopsis "Coroutine-based network library")
16780 (description
16781 "@code{gevent} is a coroutine-based Python networking library that uses
16782 @code{greenlet} to provide a high-level synchronous API on top of the
16783 @code{libev} event loop.")
16784 (license license:expat)))
16785
16786 (define-public python-fastimport
16787 (package
16788 (name "python-fastimport")
16789 (version "0.9.9")
16790 (source
16791 (origin
16792 (method url-fetch)
16793 (uri (pypi-uri "fastimport" version))
16794 (sha256
16795 (base32 "06gk14qgm9dxx3pzjn0ckdbywc8ial2bjfzddqwlr4bn1nnqkbll"))))
16796 (build-system python-build-system)
16797 (home-page "https://github.com/jelmer/python-fastimport")
16798 (synopsis "VCS fastimport parser and generator in Python")
16799 (description "This package provides a parser for and generator of the Git
16800 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
16801 format.")
16802 (license license:gpl2+)))
16803
16804 (define-public python-twisted
16805 (package
16806 (name "python-twisted")
16807 (version "19.7.0")
16808 (source (origin
16809 (method url-fetch)
16810 (uri (pypi-uri "Twisted" version ".tar.bz2"))
16811 (sha256
16812 (base32
16813 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
16814 (build-system python-build-system)
16815 (arguments
16816 '(#:tests? #f ; FIXME: some tests fail
16817 #:phases
16818 (modify-phases %standard-phases
16819 ;; Remove scripts, because they depend on [conch]
16820 (add-after 'unpack 'remove-entrypoint
16821 (lambda _
16822 (substitute* "src/twisted/python/_setup.py"
16823 (("\".+ = twisted\\.conch\\.scripts\\..+\",") "")))))))
16824 (propagated-inputs
16825 (list python-zope-interface
16826 python-pyhamcrest
16827 python-incremental
16828 python-hyperlink
16829 python-constantly
16830 python-automat))
16831 (home-page "https://twistedmatrix.com/")
16832 (synopsis "Asynchronous networking framework written in Python")
16833 (description
16834 "Twisted is an extensible framework for Python programming, with special
16835 focus on event-based network programming and multiprotocol integration.")
16836 (license license:expat)))
16837
16838 (define-public python-pika
16839 (package
16840 (name "python-pika")
16841 (version "1.2.1")
16842 (source
16843 (origin
16844 (method git-fetch)
16845 (uri (git-reference
16846 (url "https://github.com/pika/pika")
16847 (commit version)))
16848 (file-name (git-file-name name version))
16849 (sha256
16850 (base32
16851 "0sqj3bg6jwign8vwvn337fbwy69sm684ns1vh5kbfnskq4him9i2"))))
16852 (build-system python-build-system)
16853 (arguments
16854 '(#:phases (modify-phases %standard-phases
16855 (add-after 'unpack 'disable-live-tests
16856 (lambda _
16857 ;; Disable tests that require RabbitMQ, which is not
16858 ;; yet available in Guix.
16859 (substitute* "nose2.cfg"
16860 (("tests=tests/unit,tests/acceptance")
16861 "start-dir=tests/unit"))
16862 (with-directory-excursion "tests"
16863 (for-each delete-file
16864 '("unit/base_connection_tests.py"
16865 "unit/threaded_test_wrapper_test.py")))))
16866 (replace 'check
16867 (lambda* (#:key tests? #:allow-other-keys)
16868 (when tests?
16869 (setenv "PYTHONPATH" (getcwd))
16870 (invoke "nose2" "-v")))))))
16871 (native-inputs
16872 (list python-mock
16873 python-nose2
16874 ;; These are optional at runtime, and provided here for tests.
16875 python-gevent
16876 python-tornado
16877 python-twisted))
16878 (home-page "https://pika.readthedocs.org")
16879 (synopsis "Pure Python AMQP Client Library")
16880 (description
16881 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
16882 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
16883 network support library.")
16884 (license license:bsd-3)))
16885
16886 (define-public python-ply
16887 (package
16888 (name "python-ply")
16889 (version "3.11")
16890 (source
16891 (origin
16892 (method url-fetch)
16893 (uri (pypi-uri "ply" version))
16894 (sha256
16895 (base32
16896 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
16897 (build-system python-build-system)
16898 (home-page "http://www.dabeaz.com/ply/")
16899 (synopsis "Python Lex & Yacc")
16900 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
16901 It uses LR parsing and does extensive error checking.")
16902 (license license:bsd-3)))
16903
16904 (define-public python-tabulate
16905 (package
16906 (name "python-tabulate")
16907 (version "0.8.9")
16908 (source (origin
16909 (method url-fetch)
16910 (uri (pypi-uri "tabulate" version))
16911 (sha256
16912 (base32
16913 "19qkdz8xwk5jxa5xn53mnk76qnh4ysm81vzj664jw1b0azr167gb"))))
16914 (build-system python-build-system)
16915 (arguments
16916 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
16917 ;; and the latest release is not tagged in the upstream repository.
16918 '(#:tests? #f))
16919 (home-page "https://bitbucket.org/astanin/python-tabulate")
16920 (synopsis "Pretty-print tabular data")
16921 (description
16922 "Tabulate is a library and command-line utility to pretty-print tabular
16923 data in Python.")
16924 (license license:expat)))
16925
16926 (define-public python-kazoo
16927 (package
16928 (name "python-kazoo")
16929 (version "2.8.0")
16930 (source
16931 (origin
16932 (method url-fetch)
16933 (uri (pypi-uri "kazoo" version))
16934 (sha256
16935 (base32
16936 "1zpj5cc8624w6i0pxgcxqkjwbkm4pkrv19d7wh5df3jais32g3jq"))))
16937 (build-system python-build-system)
16938 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
16939 (propagated-inputs
16940 (list python-six))
16941 (home-page "https://kazoo.readthedocs.org")
16942 (synopsis "High-level Zookeeper client library")
16943 (description
16944 "Kazoo is a Python client library for the Apache Zookeeper distributed
16945 application service. It is designed to be easy to use and to avoid common
16946 programming errors.")
16947 (license license:asl2.0)))
16948
16949 (define-public python-pykafka
16950 (package
16951 (name "python-pykafka")
16952 (version "2.4.0")
16953 (source (origin
16954 (method url-fetch)
16955 (uri (pypi-uri "pykafka" version))
16956 (sha256
16957 (base32
16958 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
16959 (build-system python-build-system)
16960 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
16961 (propagated-inputs
16962 (list python-gevent python-kazoo python-tabulate))
16963 (inputs
16964 (list librdkafka))
16965 (home-page "https://pykafka.readthedocs.io/")
16966 (synopsis "Apache Kafka client for Python")
16967 (description
16968 "PyKafka is a client for the Apache Kafka distributed messaging system.
16969 It includes Python implementations of Kafka producers and consumers, which
16970 are optionally backed by a C extension built on librdkafka.")
16971 (license license:asl2.0)))
16972
16973 (define-public python-wcwidth
16974 (package
16975 (name "python-wcwidth")
16976 (version "0.1.8")
16977 (source (origin
16978 (method url-fetch)
16979 (uri (pypi-uri "wcwidth" version))
16980 (sha256
16981 (base32
16982 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
16983 (build-system python-build-system)
16984 (home-page "https://github.com/jquast/wcwidth")
16985 (synopsis "Measure number of terminal column cells of wide-character codes")
16986 (description "Wcwidth measures the number of terminal column cells of
16987 wide-character codes. It is useful for those implementing a terminal emulator,
16988 or programs that carefully produce output to be interpreted by one. It is a
16989 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
16990 specified in POSIX.1-2001 and POSIX.1-2008.")
16991 (license license:expat)))
16992
16993 (define-public python-chai
16994 (package
16995 (name "python-chai")
16996 (version "1.1.2")
16997 (source (origin
16998 (method url-fetch)
16999 (uri (pypi-uri "chai" version))
17000 (sha256
17001 (base32
17002 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))
17003 (patches (search-patches "python-chai-drop-python2.patch"))))
17004 (build-system python-build-system)
17005 (home-page "https://github.com/agoragames/chai")
17006 (synopsis "Mocking framework for Python")
17007 (description
17008 "Chai provides an api for mocking, stubbing and spying your python
17009 objects, patterned after the Mocha library for Ruby.")
17010 (license license:bsd-3)))
17011
17012 (define-public python-inflection
17013 (package
17014 (name "python-inflection")
17015 (version "0.3.1")
17016 (source
17017 (origin (method url-fetch)
17018 (uri (pypi-uri "inflection" version))
17019 (sha256
17020 (base32
17021 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
17022 (build-system python-build-system)
17023 (native-inputs
17024 (list python-pytest))
17025 (home-page "https://github.com/jpvanhal/inflection")
17026 (synopsis "Python string transformation library")
17027 (description
17028 "Inflection is a string transformation library. It singularizes
17029 and pluralizes English words, and transforms strings from CamelCase to
17030 underscored string.")
17031 (license license:expat)))
17032
17033 (define-public python-pylev
17034 (package
17035 (name "python-pylev")
17036 (version "1.3.0")
17037 (source (origin
17038 (method url-fetch)
17039 (uri (pypi-uri "pylev" version))
17040 (sha256
17041 (base32
17042 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
17043 (build-system python-build-system)
17044 (home-page "https://github.com/toastdriven/pylev")
17045 (synopsis "Levenshtein distance implementation in Python")
17046 (description "Pure Python Levenshtein implementation, based off the
17047 Wikipedia code samples at
17048 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
17049 (license license:bsd-3)))
17050
17051 (define-public python-cleo
17052 (package
17053 (name "python-cleo")
17054 (version "0.8.1")
17055 (source (origin
17056 (method url-fetch)
17057 (uri (pypi-uri "cleo" version))
17058 (sha256
17059 (base32
17060 "17q6wi3q280kxmxzb2iwnnqih2xbljn18v0bjx2ip18p079j43ix"))))
17061 (build-system python-build-system)
17062 (native-inputs
17063 (list ;; For testing
17064 python-mock python-pytest-mock python-pytest))
17065 (propagated-inputs
17066 (list python-backpack python-clikit python-pastel python-pylev))
17067 (home-page "https://github.com/sdispater/cleo")
17068 (synopsis "Command-line arguments library for Python")
17069 (description
17070 "Cleo allows you to create command-line commands with signature in
17071 docstring and colored output.")
17072 (license license:expat)))
17073
17074 (define-public python-tomlkit
17075 (package
17076 (name "python-tomlkit")
17077 (version "0.7.0")
17078 (source
17079 (origin
17080 (method url-fetch)
17081 (uri (pypi-uri "tomlkit" version))
17082 (sha256
17083 (base32 "062n694sfv24ylda6nh8228y2q9hrvy554kqx84y7czsjfbg4mxc"))))
17084 (build-system python-build-system)
17085 (native-inputs
17086 (list python-pytest python-pyyaml))
17087 (home-page "https://github.com/sdispater/tomlkit")
17088 (synopsis "Style-preserving TOML library")
17089 (description
17090 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
17091 preserves all comments, indentations, whitespace and internal element ordering,
17092 and makes them accessible and editable via an intuitive API. It can also
17093 create new TOML documents from scratch using the provided helpers. Part of the
17094 implementation has been adapted, improved, and fixed from Molten.")
17095 (license license:expat)))
17096
17097 (define-public python-shellingham
17098 (package
17099 (name "python-shellingham")
17100 (version "1.4.0")
17101 (source
17102 (origin
17103 (method url-fetch)
17104 (uri (pypi-uri "shellingham" version))
17105 (sha256
17106 (base32 "07hpndvcv9mf9hp54b4apzpwzmzfzl8ryaacsfdq4139im2w4ma8"))))
17107 (build-system python-build-system)
17108 (home-page "https://github.com/sarugaku/shellingham")
17109 (synopsis "Tool to detect surrounding shell")
17110 (description
17111 "Shellingham detects what shell the current Python executable is
17112 running in.")
17113 (license license:isc)))
17114
17115 (define-public python-memcached
17116 (package
17117 (name "python-memcached")
17118 (version "1.59")
17119 (source
17120 (origin
17121 (method url-fetch)
17122 (uri (pypi-uri "python-memcached" version))
17123 (sha256
17124 (base32
17125 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))
17126 (patches (search-patches "python-memcached-syntax-warnings.patch"))))
17127 (build-system python-build-system)
17128 (propagated-inputs (list python-six))
17129 (home-page
17130 "https://github.com/linsomniac/python-memcached")
17131 (synopsis "Pure python memcached client")
17132 (description
17133 "This software is a pure Python interface to the memcached memory cache
17134 daemon. It is the client side software which allows storing values in one or
17135 more, possibly remote, memcached servers.")
17136 (license license:psfl)))
17137
17138 (define-public python-mergedeep
17139 (package
17140 (name "python-mergedeep")
17141 (version "1.3.4")
17142 (source
17143 (origin
17144 (method git-fetch)
17145 (uri (git-reference
17146 (url "https://github.com/clarketm/mergedeep")
17147 (commit (string-append "v" version))))
17148 (file-name (git-file-name name version))
17149 (sha256
17150 (base32
17151 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
17152 (build-system python-build-system)
17153 (native-inputs (list python-pytest))
17154 (home-page "https://github.com/clarketm/mergedeep")
17155 (synopsis "Deep merge function for Python")
17156 (description "This package provides a deep merge function for Python,
17157 useful to combine multiple data objects as one.")
17158 (license license:expat)))
17159
17160 (define-public python-clikit
17161 (package
17162 (name "python-clikit")
17163 (version "0.6.2")
17164 (source
17165 (origin
17166 (method url-fetch)
17167 (uri (pypi-uri "clikit" version))
17168 (sha256
17169 (base32
17170 "0ngdkmb73gkp5y00q7r9k1cdlfn0wyzws2wrqlshc4hlkbdyabj4"))))
17171 (build-system python-build-system)
17172 (arguments '(#:tests? #f)) ; no test in the PyPI tarball
17173 (propagated-inputs
17174 (list python-crashtest python-pastel python-pylev))
17175 (home-page "https://github.com/sdispater/clikit")
17176 (synopsis "Group of utilities to build command line interfaces")
17177 (description
17178 "CliKit is a group of utilities to build testable command line
17179 interfaces.")
17180 (license license:expat)))
17181
17182 (define-public python-msgpack-python
17183 (package
17184 (name "python-msgpack-python")
17185 (version "0.5.6")
17186 (source
17187 (origin
17188 (method url-fetch)
17189 (uri (pypi-uri "msgpack-python" version))
17190 (sha256
17191 (base32
17192 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
17193 (build-system python-build-system)
17194 (home-page "https://msgpack.org/")
17195 (synopsis "Package to deserialize messages in MessagePack binary format")
17196 (description
17197 "MessagePack is an efficient binary serialization format. It lets you
17198 exchange data among multiple languages like JSON. But it's faster and
17199 smaller. Small integers are encoded into a single byte, and typical short
17200 strings require only one extra byte in addition to the strings themselves.")
17201 (license license:asl2.0)))
17202
17203 (define-public python-cattrs
17204 (package
17205 (name "python-cattrs")
17206 (version "22.1.0")
17207 (source (origin
17208 (method git-fetch) ;for tests
17209 (uri (git-reference
17210 (url "https://github.com/python-attrs/cattrs")
17211 (commit (string-append "v" version))))
17212 (file-name (git-file-name name version))
17213 (sha256
17214 (base32
17215 "1n0h25gj6zd02kqyl040xpdvg4hpy1j92716sz0rg019xjqqijqb"))))
17216 (build-system pyproject-build-system)
17217 (arguments
17218 (list
17219 #:phases
17220 #~(modify-phases %standard-phases
17221 (add-after 'unpack 'adjust-for-older-attrs
17222 ;; Our older attrs package is using the 'attr' rather than 'attrs'
17223 ;; namespace.
17224 ;; TODO: Remove after python-attrs is updated to >= 21.4.0.
17225 (lambda _
17226 (substitute* (find-files "." "\\.py$")
17227 (("from attrs\\b")
17228 "from attr"))))
17229 (replace 'check
17230 (lambda* (#:key tests? #:allow-other-keys)
17231 (when tests?
17232 ;; Do not use the 'pytest' binary as it hard-codes an older
17233 ;; python-hypothesis version near the beginning of its
17234 ;; GUIX_PYTHONPATH.
17235 (invoke "python" "-m" "pytest" "-vv" "-c" "/dev/null" "tests"
17236 "-n" (number->string (parallel-job-count))
17237 ;; This test requires orjson, which needs the maturin
17238 ;; build system and new Rust dependencies.
17239 "--ignore" "tests/test_preconf.py")))))))
17240 (native-inputs
17241 (list python-hypothesis-next
17242 python-immutables
17243 python-msgpack
17244 python-poetry-core
17245 python-pymongo ;for the bson module
17246 python-pytest
17247 python-pytest-xdist))
17248 (propagated-inputs
17249 (list python-attrs
17250 python-exceptiongroup
17251 python-typing-extensions))
17252 (home-page "https://github.com/python-attrs/cattrs")
17253 (synopsis "Python library for structuring and unstructuring data")
17254 (description "@code{cattrs} is an Python library for structuring and
17255 unstructuring data. @code{cattrs} works best with @code{attrs} classes,
17256 @code{dataclasses} and the usual Python collections, but other kinds of
17257 classes can also be supported by manually registering converters.")
17258 (license license:expat)))
17259
17260 (define-public python-cachy
17261 (package
17262 (name "python-cachy")
17263 (version "0.3.0")
17264 (source
17265 (origin
17266 (method url-fetch)
17267 (uri (pypi-uri "cachy" version))
17268 (sha256
17269 (base32
17270 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
17271 (build-system python-build-system)
17272 (arguments
17273 '(#:phases
17274 (modify-phases %standard-phases
17275 (replace 'check
17276 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
17277 "pytest"))))))
17278 (native-inputs
17279 (list memcached python-fakeredis python-flexmock python-pifpaf
17280 python-pytest))
17281 (propagated-inputs
17282 (list python-memcached python-msgpack-python python-redis))
17283 (home-page "https://github.com/sdispater/cachy")
17284 (synopsis "Simple yet effective caching library")
17285 (description
17286 "Cachy provides a simple yet effective caching library. A simple but
17287 powerful API: thread-safety; decorator syntax; support for memcached, redis,
17288 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
17289 (license license:expat)))
17290
17291 (define-public poetry
17292 (package
17293 (name "poetry")
17294 (version "1.1.12")
17295 (source
17296 (origin
17297 (method url-fetch)
17298 (uri (pypi-uri "poetry" version))
17299 (sha256
17300 (base32
17301 "0rr54mvcfcv9cv6vw2122y28xvd2pwqpv2x8c8j5ayz3gwsy4rjw"))))
17302 (build-system python-build-system)
17303 (arguments
17304 `(#:tests? #f ;PyPI does not have tests
17305 #:phases
17306 (modify-phases %standard-phases
17307 (add-before 'build 'patch-setup-py
17308 (lambda _
17309 (substitute* "setup.py"
17310 ;; Relax some of the requirements.
17311 (("(keyring>=21.2.0),<22.0.0" _ keyring) keyring)
17312 (("(packaging>=20.4),<21.0" _ packaging) packaging)))))))
17313 (propagated-inputs
17314 (list python-cachecontrol
17315 python-cachy
17316 python-cleo
17317 python-crashtest
17318 python-entrypoints
17319 python-html5lib
17320 python-keyring
17321 ; Use of deprecated version of msgpack reported upstream:
17322 ; https://github.com/python-poetry/poetry/issues/3607
17323 python-msgpack-transitional
17324 python-packaging
17325 python-pexpect
17326 python-pip
17327 python-pkginfo
17328 python-poetry-core
17329 python-requests
17330 python-requests-toolbelt
17331 python-shellingham
17332 python-tomlkit
17333 python-virtualenv))
17334 (home-page "https://python-poetry.org")
17335 (synopsis "Python dependency management and packaging made easy")
17336 (description "Poetry is a tool for dependency management and packaging
17337 in Python. It allows you to declare the libraries your project depends on and
17338 it will manage (install/update) them for you.")
17339 (license license:expat)))
17340
17341 (define-public python-lark-parser
17342 (package
17343 (name "python-lark-parser")
17344 (version "0.9.0")
17345 (source (origin
17346 (method url-fetch)
17347 (uri (pypi-uri "lark-parser" version))
17348 (sha256
17349 (base32
17350 "1kd61asrb3h9spgsj4bslfbgp8q4271sw3hblk6f2vbbblv8jxcy"))))
17351 (build-system python-build-system)
17352 (home-page "https://github.com/lark-parser/lark")
17353 (synopsis "Multi-language parser for Python")
17354 (description
17355 "Lark is a parser built with a focus on ergonomics, performance and
17356 resilience. Lark can parse all context-free languages. That means it is
17357 capable of parsing almost any programming language out there, and to
17358 some degree most natural languages too.")
17359 (license license:expat)))
17360
17361 (define-public python-libcst
17362 (package
17363 (name "python-libcst")
17364 (version "0.3.8")
17365 (source (origin
17366 (method url-fetch)
17367 (uri (pypi-uri "libcst" version))
17368 (sha256
17369 (base32
17370 "05zsc61gsd2pyb6wiyh58zczndxi6rm4d2jl94rpf5cv1fzw6ks8"))))
17371 (build-system python-build-system)
17372 (arguments
17373 `(#:phases
17374 (modify-phases %standard-phases
17375 (add-after 'unpack 'remove-failing-tests
17376 (lambda _
17377 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/346>.
17378 (delete-file "libcst/tests/test_fuzz.py")
17379 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/347>.
17380 (delete-file "libcst/tests/test_pyre_integration.py")
17381 (delete-file "libcst/codemod/tests/test_codemod_cli.py")
17382 (delete-file "libcst/metadata/tests/test_full_repo_manager.py")
17383 (delete-file "libcst/metadata/tests/test_type_inference_provider.py")))
17384 (add-before 'check 'generate-test-data
17385 (lambda _
17386 (invoke "python" "-m" "libcst.codegen.generate" "visitors")
17387 (invoke "python" "-m" "libcst.codegen.generate" "return_types")))
17388 (replace 'check
17389 (lambda* (#:key tests? #:allow-other-keys)
17390 (when tests?
17391 (invoke "python" "-m" "unittest")))))))
17392 (native-inputs
17393 (list python-black python-isort))
17394 (propagated-inputs
17395 (list python-typing-extensions python-typing-inspect python-pyyaml))
17396 (home-page "https://github.com/Instagram/LibCST")
17397 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
17398 (description
17399 "LibCST parses Python source code as a CST tree that keeps all
17400 formatting details (comments, whitespaces, parentheses, etc). It's useful
17401 for building automated refactoring (codemod) applications and linters.
17402 LibCST creates a compromise between an Abstract Syntax Tree (AST) and
17403 a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
17404 naming node types and fields, LibCST creates a lossless CST that looks and
17405 feels like an AST.")
17406 (license (list license:expat
17407 ;; Some files unde libcst/_parser/ are under Python Software
17408 ;; Foundation license (see LICENSE file for details)
17409 license:psfl
17410 ;; libcst/_add_slots.py
17411 license:asl2.0))))
17412
17413 (define-public python-libcst-minimal
17414 (hidden-package
17415 (package
17416 (inherit python-libcst)
17417 (name "python-libcst-minimal")
17418 (arguments '(#:tests? #f))
17419 (native-inputs '()))))
17420
17421 (define-public python-typing-inspect
17422 (package
17423 (name "python-typing-inspect")
17424 (version "0.6.0")
17425 (source (origin
17426 (method url-fetch)
17427 (uri (pypi-uri "typing_inspect" version))
17428 (sha256
17429 (base32
17430 "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))
17431 (patches (search-patches "python-typing-inspect-fix.patch"))))
17432 (build-system python-build-system)
17433 (propagated-inputs
17434 (list python-mypy-extensions python-typing-extensions))
17435 (home-page "https://github.com/ilevkivskyi/typing_inspect")
17436 (synopsis "API for inspection of types in the Python @code{typing} module")
17437 (description
17438 "The @code{typing_inspect} module defines experimental API for runtime
17439 inspection of types defined in the Python standard typing module.")
17440 (license license:expat)))
17441
17442 (define-public python-lazy-object-proxy
17443 (package
17444 (name "python-lazy-object-proxy")
17445 (version "1.5.1")
17446 (source (origin
17447 (method url-fetch)
17448 (uri (pypi-uri "lazy-object-proxy" version))
17449 (sha256
17450 (base32
17451 "0hwh29m9wa582ramj30p4pysckdrmki1z1b8iaaxk6mpfx2kc8wp"))))
17452 (native-inputs
17453 (list python-setuptools-scm))
17454 (build-system python-build-system)
17455 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
17456 (synopsis "Lazy object proxy for python")
17457 (description
17458 "Lazy object proxy is an object that wraps a callable but defers the call
17459 until the object is actually required, and caches the result of said call.")
17460 (license license:bsd-2)))
17461
17462 (define-public python-dnspython
17463 (package
17464 (name "python-dnspython")
17465 (version "2.1.0")
17466 (source (origin
17467 (method url-fetch)
17468 (uri (pypi-uri "dnspython" version ".zip"))
17469 (sha256
17470 (base32
17471 "1m0xvyby8baaxp6pfm0fgq8d2pq5dd8qm8bzfbrs009jaw5pza74"))))
17472 (build-system python-build-system)
17473 (arguments
17474 `(#:tests? #f ; XXX: requires internet access
17475 #:phases
17476 (modify-phases %standard-phases
17477 (add-after 'unpack 'patch-getprotobyname-calls
17478 ;; These calls are problematic in the build environment as there is
17479 ;; no /etc/protocols. This breaks the sanity-check phase of any
17480 ;; package depnding on this one.
17481 (lambda _
17482 (substitute* "dns/rdtypes/IN/WKS.py"
17483 (("socket.getprotobyname\\('tcp'\\)")
17484 "6")
17485 (("socket.getprotobyname\\('udp'\\)")
17486 "17")))))))
17487 (native-inputs (list unzip))
17488 (home-page "https://www.dnspython.org")
17489 (synopsis "DNS toolkit for Python")
17490 (description
17491 "dnspython is a DNS toolkit for Python. It supports almost all record
17492 types. It can be used for queries, zone transfers, and dynamic updates.
17493 It supports TSIG authenticated messages and EDNS0.")
17494 (license license:expat)))
17495
17496 (define-public python-dnspython-1.16
17497 (package
17498 (inherit python-dnspython)
17499 (version "1.16.0")
17500 (source (origin
17501 (method url-fetch)
17502 (uri (string-append "http://www.dnspython.org/kits/"
17503 version "/dnspython-" version ".tar.gz"))
17504 (sha256
17505 (base32
17506 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
17507 (native-inputs '())))
17508
17509 (define-public python-py3dns
17510 (package
17511 (name "python-py3dns")
17512 (version "3.2.1")
17513 (source
17514 (origin
17515 (method url-fetch)
17516 (uri (pypi-uri "py3dns" version))
17517 (sha256
17518 (base32
17519 "1r25f0ys5p37bhld7m7n4gb0lrysaym3w318w2f8bncq7r3d81qz"))))
17520 (build-system python-build-system)
17521 ;; This package wants to read /etc/resolv.conf. We can't patch it without
17522 ;; removing functionality so we copy from Nix and "just don't build it".
17523 (arguments
17524 `(#:phases
17525 (modify-phases %standard-phases
17526 (add-after 'unpack 'patch-source
17527 (lambda _
17528 (substitute* "setup.py"
17529 (("import DNS") "")
17530 (("DNS.__version__") (string-append "\"" ,version "\"")))
17531 #t)))
17532 #:tests? #f)) ; Also skip the tests.
17533 (home-page "https://launchpad.net/py3dns")
17534 (synopsis "Python 3 DNS library")
17535 (description "This Python 3 module provides a DNS API for looking up DNS
17536 entries from within Python 3 modules and applications. This module is a
17537 simple, lightweight implementation.")
17538 (license license:psfl)))
17539
17540 (define-public python-email-validator
17541 (package
17542 (name "python-email-validator")
17543 (version "1.0.2")
17544 (source
17545 (origin (method url-fetch)
17546 (uri (pypi-uri "email_validator" version))
17547 (sha256
17548 (base32
17549 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
17550 (build-system python-build-system)
17551 (arguments
17552 '(#:phases
17553 (modify-phases %standard-phases
17554 (add-before 'build 'use-dnspython
17555 (lambda _
17556 (substitute* "setup.py"
17557 (("dnspython3") "dnspython"))
17558 #t)))))
17559 (propagated-inputs
17560 (list python-dnspython python-idna))
17561 (home-page "https://github.com/JoshData/python-email-validator")
17562 (synopsis "Email address validation library for Python")
17563 (description
17564 "This library validates email address syntax and deliverability.")
17565 (license license:cc0)))
17566
17567 (define-public python-ukpostcodeparser
17568 (package
17569 (name "python-ukpostcodeparser")
17570 (version "1.1.2")
17571 (source (origin
17572 (method url-fetch)
17573 (uri (pypi-uri "UkPostcodeParser" version))
17574 (sha256
17575 (base32
17576 "03jkf1ygbwq3akzbcjyjk1akc1hv2sfgx90306pq1nwklbpn80lk"))))
17577 (build-system python-build-system)
17578 (arguments
17579 `(#:phases
17580 (modify-phases %standard-phases
17581 (replace 'check
17582 (lambda* (#:key tests? #:allow-other-keys)
17583 (when tests?
17584 ;; Tests for lowercase postcodes fail.
17585 (invoke "pytest" "-vv" "ukpostcodeparser/test/parser.py" "-k"
17586 (string-append "not test_091 "
17587 "and not test_097 "
17588 "and not test_098 "
17589 "and not test_125 "
17590 "and not test_131"))))))))
17591 (native-inputs
17592 (list python-pytest))
17593 (home-page "https://github.com/hamstah/ukpostcodeparser")
17594 (synopsis "UK Postcode parser for Python")
17595 (description
17596 "This library provides the @code{parse_uk_postcode} function for
17597 parsing UK postcodes.")
17598 (license license:expat)))
17599
17600 (define-public python-faker
17601 (package
17602 (name "python-faker")
17603 (version "13.3.4")
17604 (source (origin
17605 (method url-fetch)
17606 (uri (pypi-uri "Faker" version))
17607 (sha256
17608 (base32
17609 "04855dqvvi2mr739l5x3qf82rxq0a7spc8gl76k8xixmbw36328q"))))
17610 (build-system python-build-system)
17611 (arguments
17612 '(#:phases
17613 (modify-phases %standard-phases
17614 (replace 'check
17615 (lambda* (#:key tests? #:allow-other-keys)
17616 (when tests?
17617 (invoke "python" "-m" "pytest" "-v")))))))
17618 (native-inputs
17619 (list python-freezegun
17620 python-pytest
17621 python-random2
17622 python-ukpostcodeparser
17623 python-validators))
17624 (propagated-inputs (list python-dateutil))
17625 (home-page "https://github.com/joke2k/faker")
17626 (synopsis "Python package that generates fake data")
17627 (description
17628 "Faker is a Python package that generates fake data such as names,
17629 addresses, and phone numbers.")
17630 (license license:expat)))
17631
17632 (define-public python-pyaml
17633 (package
17634 (name "python-pyaml")
17635 (version "21.10.1")
17636 (source (origin
17637 (method url-fetch)
17638 (uri (pypi-uri "pyaml" version))
17639 (sha256
17640 (base32
17641 "10w3frzqir5sbpglc9bwb8w414dsivmcvji07yxy61mz2gp9ylf6"))))
17642 (build-system python-build-system)
17643 (native-inputs
17644 (list python-unidecode))
17645 (propagated-inputs
17646 (list python-pyyaml))
17647 (home-page "https://github.com/mk-fg/pretty-yaml")
17648 (synopsis "YAML pretty-print library for Python")
17649 (description
17650 "pyaml is a PyYAML based python module to produce pretty and readable
17651 YAML-serialized data.")
17652 (license license:wtfpl2)))
17653
17654 (define-public python-pyyaml-env-tag
17655 (package
17656 (name "python-pyyaml-env-tag")
17657 (version "0.1")
17658 (source
17659 (origin
17660 (method url-fetch)
17661 (uri (pypi-uri "pyyaml_env_tag" version))
17662 (sha256
17663 (base32 "1nsva88jsmwn0cb9jnrfiz4dvs9xakkpgfii7g1xwkx1pmsjc2bh"))))
17664 (build-system python-build-system)
17665 (propagated-inputs (list python-pyyaml))
17666 (home-page "https://github.com/waylan/pyyaml-env-tag")
17667 (synopsis "Custom YAML tag for environment variables")
17668 (description "This package provides a custom YAML tag for referencing
17669 environment variables in YAML files.")
17670 (license license:expat)))
17671
17672 (define-public python-backpack
17673 (package
17674 (name "python-backpack")
17675 (version "0.1")
17676 (source
17677 (origin
17678 (method url-fetch)
17679 (uri (pypi-uri "backpack" version))
17680 (sha256
17681 (base32
17682 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
17683 (build-system python-build-system)
17684 (native-inputs
17685 (list python-pytest python-nose python-toml))
17686 (propagated-inputs
17687 (list python-simplejson))
17688 (home-page "https://github.com/sdispater/backpack")
17689 (synopsis "Utilities for working with Python collections")
17690 (description "Backpack provides some useful utilities for working with
17691 collections of data.")
17692 (license license:expat)))
17693
17694 (define-public python-prompt-toolkit
17695 (package
17696 (name "python-prompt-toolkit")
17697 (version "3.0.29")
17698 (source
17699 (origin
17700 (method url-fetch)
17701 (uri (pypi-uri "prompt_toolkit" version))
17702 (sha256
17703 (base32 "19vf5cahp3imdpwhgvk55g3dvqmc6ga175r4vkq79kffx1h0yr5x"))))
17704 (build-system python-build-system)
17705 (arguments
17706 `(#:phases
17707 (modify-phases %standard-phases
17708 (replace 'check
17709 (lambda* (#:key tests? #:allow-other-keys)
17710 (when tests?
17711 ;; HOME is needed for the test
17712 ;; "test_pathcompleter_can_expanduser".
17713 (setenv "HOME" "/tmp")
17714 (invoke "pytest" "-vv")))))))
17715 (propagated-inputs
17716 (list python-wcwidth))
17717 (native-inputs
17718 (list python-pytest))
17719 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
17720 (synopsis "Library for building command line interfaces in Python")
17721 (description
17722 "Prompt-Toolkit is a library for building interactive command line
17723 interfaces in Python. It's like GNU Readline but it also features syntax
17724 highlighting while typing, out-of-the-box multi-line input editing, advanced
17725 code completion, incremental search, support for Chinese double-width
17726 characters, mouse support, and auto suggestions.")
17727 (license license:bsd-3)))
17728
17729 (define-public python-proselint
17730 (package
17731 (name "python-proselint")
17732 (version "0.13.0")
17733 (source
17734 (origin
17735 (method url-fetch)
17736 (uri (pypi-uri "proselint" version))
17737 (sha256
17738 (base32
17739 "0n1ahnq2mkgvh94g05xhc3l1fs3hh0ycskqlqivhhfdaq8ybdlkx"))))
17740 (build-system python-build-system)
17741 (arguments
17742 `(#:tests? #f
17743 #:phases
17744 (modify-phases %standard-phases
17745 (add-after 'unpack 'set-home-directory
17746 (lambda _
17747 (setenv "HOME" "/tmp"))))))
17748 (propagated-inputs
17749 (list python-click python-future python-six))
17750 (home-page "https://github.com/amperser/proselint")
17751 (synopsis "Linter for prose")
17752 (description "@code{python-proselint} is a linter for English prose, that
17753 scans through a file and detects issues.")
17754 (license license:bsd-3)))
17755
17756 (define-public python-jedi
17757 (package
17758 (name "python-jedi")
17759 (version "0.18.1")
17760 (source
17761 (origin
17762 (method git-fetch)
17763 (uri (git-reference
17764 (url "https://github.com/davidhalter/jedi")
17765 (commit (string-append "v" version))
17766 (recursive? #true)))
17767 (file-name (git-file-name name version))
17768 (sha256
17769 (base32
17770 "07drmi3ai49jw5n23ibkambcgijqcw073ihypjgxfnks5lv4yqy1"))
17771 (modules '((guix build utils)))
17772 (snippet
17773 ;; Adjust comprehension syntax for Python > 3.8.
17774 ;; From <https://github.com/davidhalter/jedi/issues/1824>.
17775 '(substitute* "test/completion/lambdas.py"
17776 (("if lambda: 3")
17777 "if (lambda: 3)")))))
17778 (build-system python-build-system)
17779 (arguments
17780 `(#:phases
17781 (modify-phases %standard-phases
17782 (add-after 'unpack 'fix-completion-test
17783 (lambda _
17784 ;; This resolves a failure in the 'test_completion' test (see:
17785 ;; https://github.com/davidhalter/jedi/issues/1824).
17786 ;; TODO: Remove after a new release is made (currently: 0.18.1).
17787 (substitute* "test/completion/lambdas.py"
17788 (("\\[a for a in \\[1,2\\] if lambda: 3\\]\\[0\\]")
17789 "[a for a in [1,2] if (lambda: 3)][0]"))))
17790 (replace 'check
17791 (lambda* (#:key tests? #:allow-other-keys)
17792 (when tests?
17793 (setenv "HOME" "/tmp")
17794 (invoke "python" "-m" "pytest" "-vv")))))))
17795 (native-inputs
17796 (list python-colorama python-docopt python-pytest))
17797 (propagated-inputs
17798 (list python-parso))
17799 (home-page "https://github.com/davidhalter/jedi")
17800 (synopsis "Autocompletion and static analysis library for Python")
17801 (description
17802 "Jedi is a static analysis tool for Python that can be used in Integrated
17803 Development Environments (@dfn{IDE}s) and text editors. It understands Python
17804 on a deeper level than many other static analysis frameworks for Python.
17805
17806 Jedi understands docstrings and you can use Jedi autocompletion in your REPL
17807 as well.")
17808 (license license:expat)))
17809
17810 (define-public ptpython
17811 (package
17812 (name "ptpython")
17813 (version "3.0.20")
17814 (source (origin
17815 (method url-fetch)
17816 (uri (pypi-uri "ptpython" version))
17817 (sha256
17818 (base32
17819 "1mjfyr5gwrs1qbizh6nki0nv6hahmg8mhhqxi1qc6pfa4znlrzga"))))
17820 (build-system python-build-system)
17821 (arguments
17822 `(#:tests? #f)) ;there are no tests
17823 (propagated-inputs
17824 (list python-appdirs python-black python-jedi python-prompt-toolkit
17825 python-pygments))
17826 (home-page "https://github.com/jonathanslenders/ptpython")
17827 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
17828 (description
17829 "ptpython is a Python read-eval-print loop with IDE-like features.
17830 It supports syntax highlighting, multiline editing, autocompletion, mouse,
17831 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
17832 etc.")
17833 (license license:bsd-3)))
17834
17835 (define-public python-easyprocess
17836 (package
17837 (name "python-easyprocess")
17838 (version "0.3")
17839 (source
17840 (origin
17841 (method url-fetch)
17842 (uri (pypi-uri "EasyProcess" version))
17843 (sha256
17844 (base32 "115rzzr0hx4af4m6krf7dxn8851n4l8jfxahjzjc2r0zq2m8v57v"))))
17845 (build-system python-build-system)
17846 (arguments
17847 ;; Tests require pyvirtualdisplay, which requires this package.
17848 `(#:tests? #f))
17849 (home-page "https://github.com/ponty/easyprocess")
17850 (synopsis "Python subprocess interface")
17851 (description
17852 "@code{easyprocess} is an easy to use Python subprocess interface.")
17853 (license license:bsd-3)))
17854
17855 (define-public python-entrypoint2
17856 (package
17857 (name "python-entrypoint2")
17858 (version "0.2.4")
17859 (source
17860 (origin
17861 (method url-fetch)
17862 (uri (pypi-uri "entrypoint2" version))
17863 (sha256
17864 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
17865 (build-system python-build-system)
17866 (arguments
17867 `(#:test-target "pytest"))
17868 (native-inputs
17869 (list python-easyprocess python-pytest python-pytest-runner))
17870 (home-page "https://github.com/ponty/entrypoint2")
17871 (synopsis "Command-line interface for Python modules")
17872 (description
17873 "@code{entrypoint2} is an easy to use command-line interface for Python
17874 modules based on @code{argparse}. It translates function signature and
17875 documentation to argparse configuration.")
17876 (license license:bsd-3)))
17877
17878 (define-public python-pyvirtualdisplay
17879 (package
17880 (name "python-pyvirtualdisplay")
17881 (version "2.1")
17882 (source
17883 (origin
17884 (method url-fetch)
17885 (uri (pypi-uri "PyVirtualDisplay" version))
17886 (sha256
17887 (base32 "1z2fzgiw3xv3m1d9ppn53g07zhnpj05addiz56sm6ircxibnjk4x"))))
17888 (build-system python-build-system)
17889 (arguments
17890 ;; Tests fail with:
17891 ;; FileNotFoundError: [Errno 2] No such file or directory: 'Xvnc'.
17892 `(#:tests? #f))
17893 (native-inputs
17894 (list python-entrypoint2 python-psutil python-pytest
17895 python-pytest-runner))
17896 (propagated-inputs
17897 (list python-easyprocess python-pillow))
17898 (home-page "https://github.com/ponty/pyvirtualdisplay")
17899 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
17900 (description
17901 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
17902 (license license:bsd-3)))
17903
17904 (define-public python-stem
17905 (package
17906 (name "python-stem")
17907 (version "1.8.0")
17908 (source
17909 (origin
17910 (method url-fetch)
17911 (uri (pypi-uri "stem" version))
17912 (sha256
17913 (base32
17914 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
17915 (build-system python-build-system)
17916 (arguments
17917 `(#:phases
17918 (modify-phases %standard-phases
17919 (add-after 'unpack 'fix-tests
17920 ;; See https://github.com/torproject/stem/issues/56
17921 (lambda _
17922 (substitute* "run_tests.py"
17923 (("test\\.task\\.MOCK_VERSION,")
17924 ""))))
17925 (replace 'check
17926 (lambda _
17927 (invoke "./run_tests.py" "--unit")
17928 #t)))))
17929 (native-inputs
17930 (list python-mock python-pycodestyle python-pyflakes))
17931 (home-page "https://stem.torproject.org/")
17932 (synopsis
17933 "Python controller library that allows applications to interact with Tor")
17934 (description
17935 "Stem is a Python controller library for Tor. With it you can use Tor's
17936 control protocol to script against the Tor process and read descriptor data
17937 relays publish about themselves.")
17938 (license license:lgpl3)))
17939
17940 (define-public python-pyserial
17941 (package
17942 (name "python-pyserial")
17943 (version "3.5")
17944 (source
17945 (origin
17946 (method url-fetch)
17947 (uri (pypi-uri "pyserial" version))
17948 (sha256
17949 (base32
17950 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
17951 (build-system python-build-system)
17952 (arguments
17953 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
17954 ;; #:phases
17955 ;; (modify-phases %standard-phases
17956 ;; (replace 'check
17957 ;; (lambda _
17958 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
17959 (home-page
17960 "https://github.com/pyserial/pyserial")
17961 (synopsis "Python Serial Port Bindings")
17962 (description "@code{pyserial} provide serial port bindings for Python. It
17963 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
17964 and/or Xon/Xoff. The port is accessed in RAW mode.")
17965 (license license:bsd-3)))
17966
17967 (define-public python-pyserial-asyncio
17968 (package
17969 (name "python-pyserial-asyncio")
17970 (version "0.5")
17971 (source
17972 (origin
17973 (method url-fetch)
17974 (uri (pypi-uri "pyserial-asyncio" version))
17975 (sha256
17976 (base32 "0cwd2cjz859v6jrm3y6hikfqjyhyfj5vhfjb8vvflvl6791yah8n"))))
17977 (build-system python-build-system)
17978 (propagated-inputs (list python-pyserial))
17979 (home-page "https://github.com/pyserial/pyserial-asyncio")
17980 (synopsis "Pyserial asynchronous I/O extension")
17981 (description "This package extends Pyserial with asynchronous I/O
17982 support.")
17983 (license license:bsd-3)))
17984
17985 (define-public python-pymodbus
17986 (package
17987 (name "python-pymodbus")
17988 (version "2.5.3")
17989 (source
17990 (origin
17991 (method git-fetch)
17992 (uri (git-reference
17993 (url "https://github.com/riptideio/pymodbus")
17994 (commit (string-append "v" version))))
17995 (file-name (git-file-name name version))
17996 (sha256
17997 (base32
17998 "0kjjrx7xrlx0pf3y67hhr4xvqrly3xzmvf6ic5as61m6z19m7zd5"))))
17999 (build-system python-build-system)
18000 (arguments
18001 `(#:phases (modify-phases %standard-phases
18002 (add-after 'unpack 'disable-problematic-tests
18003 (lambda _
18004 ;; The following test modules rely on Python's own
18005 ;; 'test' module, which is not distributed in the Python
18006 ;; package of Guix.
18007 (delete-file "test/test_client_async_asyncio.py")
18008 (delete-file "test/test_client_sync_diag.py")
18009 ;; The following test module requires the asynctest
18010 ;; library, abandoned without support for Python 3.9+
18011 ;; (see:
18012 ;; https://github.com/riptideio/pymodbus/issues/681).
18013 (delete-file "test/test_server_asyncio.py")))
18014 (replace 'check
18015 (lambda* (#:key tests? #:allow-other-keys)
18016 (when tests?
18017 (invoke "python" "-m" "pytest")))))))
18018 (native-inputs
18019 (list python-mock
18020 python-pytest
18021 python-redis
18022 python-sqlalchemy
18023 python-tornado
18024 python-twisted))
18025 (propagated-inputs
18026 (list python-pyserial
18027 python-six
18028 ;; For the REPL.
18029 python-aiohttp
18030 python-click
18031 python-prompt-toolkit
18032 python-pygments
18033 python-pyserial-asyncio))
18034 (home-page "https://github.com/riptideio/pymodbus/")
18035 (synopsis "Modbus protocol stack in Python")
18036 (description "Pymodbus is a full Modbus protocol implementation using
18037 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
18038 communications core. It includes the following @emph{client} features:
18039 @itemize
18040 @item full read/write protocol on discrete and register
18041 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
18042 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
18043 @item asynchronous and synchronous versions
18044 @item payload builder/decoder utilities
18045 @item pymodbus read eval print loop (REPL).
18046 @end itemize
18047 It also includes the following @emph{server} features:
18048 @itemize
18049 @item can function as a fully implemented Modbus server
18050 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
18051 @item asynchronous and synchronous versions
18052 @item full server control context (device information, counters, etc)
18053 @item a number of backing contexts (database, redis, sqlite, a slave device).
18054 @end itemize")
18055 (license license:bsd-3)))
18056
18057 (define-public python-exodriver
18058 (package
18059 (name "python-exodriver")
18060 (version "2.6.0")
18061 (source (origin
18062 (method git-fetch)
18063 (uri (git-reference
18064 (url "https://github.com/labjack/exodriver")
18065 (commit (string-append "v" version))))
18066 (file-name (git-file-name name version))
18067 (sha256
18068 (base32
18069 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
18070 (outputs (list "out"
18071 "doc")) ;544 KiB of examples
18072 (build-system gnu-build-system)
18073 (arguments
18074 (list
18075 #:tests? #f ;no test suite
18076 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
18077 (string-append "PREFIX=" #$output)
18078 "RUN_LDCONFIG=0"
18079 "LINK_SO=1")
18080 #:phases
18081 #~(modify-phases %standard-phases
18082 (delete 'configure)
18083 (replace 'build
18084 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
18085 (with-directory-excursion "liblabjackusb"
18086 (apply (assoc-ref %standard-phases 'build)
18087 `(,@args #:make-flags ,make-flags)))))
18088 (replace 'install
18089 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
18090 (with-directory-excursion "liblabjackusb"
18091 (apply (assoc-ref %standard-phases 'install)
18092 `(,@args #:make-flags ,make-flags)))
18093 ;; Install udev rules.
18094 (install-file "90-labjack.rules"
18095 (string-append #$output "/lib/udev/rules.d"))
18096 ;; Install examples.
18097 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
18098 (mkdir-p doc)
18099 (copy-recursively "examples"
18100 (string-append doc "/examples"))))))))
18101 (inputs (list libusb))
18102 (home-page "https://github.com/labjack/exodriver")
18103 (synopsis "USB driver for LabJack data acquisition instruments")
18104 (description "This package provides @code{liblabjackusb}, a USB library for low-level
18105 communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
18106 instruments. A udev rule is also included to allow unprivileged users to
18107 communicate with the instruments via USB.")
18108 (license license:expat))) ;see README
18109
18110 (define-public python-labjack
18111 (package
18112 (name "python-labjack")
18113 (version "2.0.4")
18114 (source (origin
18115 (method url-fetch)
18116 (uri (pypi-uri "LabJackPython" version))
18117 (sha256
18118 (base32
18119 "013bjqdi05vlbdqprr6kqi8gs4qhqc7rnyp1klw8k6fng77rpdzz"))))
18120 (build-system python-build-system)
18121 (arguments
18122 (list
18123 #:tests? #f ;no test suite
18124 #:phases
18125 #~(modify-phases %standard-phases
18126 (add-after 'unpack 'patch-liblabjackusb.so
18127 (lambda* (#:key inputs #:allow-other-keys)
18128 (substitute* (find-files "." "\\.py$")
18129 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
18130 (format #f "ctypes.CDLL(~s"
18131 (search-input-file inputs
18132 "lib/liblabjackusb.so")))))))))
18133 ;; exodriver is provided as a regular input, as only its shared object is
18134 ;; used, not its Python API.
18135 (inputs (list python-exodriver))
18136 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
18137 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
18138 (description "This Python library allows communicating with the U3, U6,
18139 UE9 and U12 LabJack data acquisition (DAQ) modules.")
18140 (license license:expat))) ;see setup.py
18141
18142 (define-public python-kivy-garden
18143 (package
18144 (name "python-kivy-garden")
18145 (version "0.1.4")
18146 (source
18147 (origin
18148 (method url-fetch)
18149 (uri (pypi-uri "kivy-garden" version))
18150 (sha256
18151 (base32 "0wkcpr2zc1q5jb0bi7v2dgc0vs5h1y7j42mviyh764j2i0kz8mn2"))))
18152 (build-system python-build-system)
18153 (arguments
18154 '(#:phases (modify-phases %standard-phases
18155 (add-after 'install 'remove-bat-file
18156 (lambda* (#:key outputs #:allow-other-keys)
18157 (let ((out (assoc-ref outputs "out")))
18158 (delete-file
18159 (string-append out "/bin/garden.bat"))))))))
18160 (propagated-inputs
18161 (list python-requests))
18162 (home-page "https://github.com/kivy-garden/garden")
18163 (synopsis "Garden tool for Kivy flowers")
18164 (description
18165 "This package provides the @command{garden} command to install packages
18166 for Kivy, the multitouch application platform.")
18167 (license license:expat)))
18168
18169 (define-public python-kivy
18170 (package
18171 (name "python-kivy")
18172 (version "2.1.0")
18173 (source
18174 (origin
18175 (method url-fetch)
18176 (uri (pypi-uri "Kivy" version))
18177 (file-name (string-append name "-" version ".tar.gz"))
18178 (sha256
18179 (base32
18180 "1cq4djfn7h8560mvz94dydsldg2jpp5w9rby7nafgmbh7fxg65is"))))
18181 (build-system python-build-system)
18182 (arguments
18183 `(#:tests? #f ; Tests require many optional packages
18184 #:phases
18185 (modify-phases %standard-phases
18186 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
18187 (lambda* (#:key inputs #:allow-other-keys)
18188 (setenv "KIVY_SDL2_PATH"
18189 (search-input-directory inputs "/include/SDL2"))))
18190 (add-before 'build 'set-home
18191 (lambda _
18192 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
18193 (setenv "HOME" (getcwd)))))))
18194 (native-inputs
18195 (list pkg-config python-cython))
18196 (inputs
18197 (list gstreamer
18198 mesa
18199 (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
18200 python-docutils
18201 python-kivy-garden
18202 python-pygments))
18203 (home-page "https://kivy.org")
18204 (synopsis "Multitouch application framework")
18205 (description
18206 "Kivy is a software library for rapid development of hardware-accelerated
18207 multitouch applications.")
18208 (license license:expat)))
18209
18210 (define-public python-kivymd
18211 (package
18212 (name "python-kivymd")
18213 (version "0.104.2")
18214 (source
18215 (origin
18216 (method url-fetch)
18217 (uri (pypi-uri "kivymd" version))
18218 (sha256
18219 (base32 "04lwy6j0agrdwa4a6dl6qs97nx9ysmscmm8psvdzjpyj8aa1zg4p"))))
18220 (build-system python-build-system)
18221 (arguments
18222 `(#:tests? #f ;tests require network
18223 #:phases
18224 (modify-phases %standard-phases
18225 (add-before 'sanity-check 'set-home
18226 (lambda _
18227 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
18228 (setenv "HOME" (getcwd)))))))
18229 (native-inputs (list python-docutils))
18230 (propagated-inputs
18231 (list python-kivy python-pillow python-pygments python-kivy-garden))
18232 (home-page "https://github.com/kivymd/KivyMD")
18233 (synopsis "Material Design compliant widgets for use with Kivy")
18234 (description
18235 "This package provides Kivy widgets that approximate Google's Material
18236 Design spec without sacrificing ease of use or application performance.")
18237 (license license:expat)))
18238
18239 (define-public python-asynckivy
18240 (package
18241 (name "python-asynckivy")
18242 (version "0.5.3")
18243 (source
18244 (origin
18245 (method url-fetch)
18246 (uri
18247 (pypi-uri "asynckivy" version))
18248 (sha256
18249 (base32 "0ivjvch8yn3k1ybfp7c1nm8mhc0ymg7d04mq54lly7yjvg0jvcni"))))
18250 (build-system python-build-system)
18251 (arguments
18252 `(#:phases
18253 (modify-phases %standard-phases
18254 (add-before 'check 'set-home
18255 (lambda _
18256 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
18257 (setenv "HOME" (getcwd)))))))
18258 (propagated-inputs (list python-kivy python-asyncgui))
18259 (home-page "https://github.com/gottadiveintopython/asynckivy")
18260 (synopsis "Async library for Kivy")
18261 (description
18262 "This package provides async versions of Kivy functions to avoid the
18263 callback-heavy mode of interaction typical in some Kivy applications.")
18264 (license license:expat)))
18265
18266 (define-public python-asyncgui
18267 (package
18268 (name "python-asyncgui")
18269 (version "0.5.3")
18270 (source (origin
18271 (method url-fetch)
18272 (uri (pypi-uri "asyncgui" version))
18273 (sha256
18274 (base32
18275 "0614130afg2qc1qq4p82piskvvx6lpjl4nlsakbjzdyd78xywnb7"))))
18276 (build-system python-build-system)
18277 (home-page "https://github.com/gottadiveintopython/asyncgui")
18278 (synopsis "Enables async/await without an event loop")
18279 (description "This package provides support for async/await applications
18280 without requiring an event loop, useful for creative responsive GUIs.")
18281 (license license:expat)))
18282
18283 (define-public python-binaryornot
18284 (package
18285 (name "python-binaryornot")
18286 (version "0.4.4")
18287 (source (origin
18288 (method url-fetch)
18289 (uri (pypi-uri "binaryornot" version))
18290 (sha256
18291 (base32
18292 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
18293 (build-system python-build-system)
18294 (arguments
18295 `(#:phases
18296 (modify-phases %standard-phases
18297 (add-after 'unpack 'patch-tests
18298 (lambda _
18299 ;; TypeError: binary() got an unexpected keyword argument
18300 ;; 'average_size'.
18301 (substitute* "tests/test_check.py"
18302 (("average_size=512") ""))
18303 #t)))))
18304 (propagated-inputs
18305 (list python-chardet python-hypothesis))
18306 (home-page "https://github.com/audreyr/binaryornot")
18307 (synopsis "Package to check if a file is binary or text")
18308 (description "Ultra-lightweight pure Python package to check if a file is
18309 binary or text.")
18310 (license license:bsd-3)))
18311
18312 (define-public binwalk
18313 (package
18314 (name "binwalk")
18315 (version "2.3.3")
18316 (source
18317 (origin
18318 (method git-fetch)
18319 (uri (git-reference
18320 (url "https://github.com/ReFirmLabs/binwalk")
18321 (commit (string-append "v" version))))
18322 (file-name (git-file-name name version))
18323 (sha256
18324 (base32 "0phqyqv34vhh80dgipiggs4n3iq2vfjk9ywx2c5d8g61vzgbd2g8"))
18325 (modules '((guix build utils)))
18326 (snippet
18327 #~(begin
18328 (for-each delete-file
18329 (list "testing/tests/input-vectors/firmware.zip"
18330 "testing/tests/test_firmware_zip.py"))))))
18331 (build-system python-build-system)
18332 (arguments
18333 `(#:phases
18334 (modify-phases %standard-phases
18335 (add-before 'check 'set-home
18336 (lambda _
18337 (setenv "HOME" ""))))))
18338 (native-inputs
18339 (list python-coverage python-nose))
18340 (home-page "https://github.com/ReFirmLabs/binwalk")
18341 (synopsis "Firmware analysis tool")
18342 (description "Binwalk is a tool for analyzing, reverse engineering, and
18343 extracting firmware images")
18344 (license license:expat)))
18345
18346 (define-public python-binwalk
18347 (deprecated-package "python-binwalk" binwalk))
18348
18349 (define-public python-bson
18350 (package
18351 (name "python-bson")
18352 (version "0.5.10")
18353 (source
18354 (origin
18355 (method git-fetch) ;for tests
18356 (uri (git-reference
18357 (url "https://github.com/py-bson/bson")
18358 (commit version)))
18359 (file-name (git-file-name name version))
18360 (sha256
18361 (base32
18362 "1vpy4rsvm3hhawvbg9rbw4j36ck8qylkhm8cjy0q6imvinkd2als"))))
18363 (build-system python-build-system)
18364 (arguments
18365 '(#:phases
18366 (modify-phases %standard-phases
18367 (replace 'check
18368 (lambda* (#:key tests? #:allow-other-keys)
18369 (when tests?
18370 (invoke "./test.py")))))))
18371 (propagated-inputs (list python-dateutil python-six))
18372 (home-page "https://github.com/py-bson/bson")
18373 (synopsis "BSON (Binary JSON) codec for Python")
18374 (description "@code{bson} is a Python library implementing a BSON (Binary
18375 JSON) codec.")
18376 (license license:asl2.0)))
18377
18378 (define-public python-nltk
18379 (package
18380 (name "python-nltk")
18381 (version "3.6.2")
18382 (source (origin
18383 (method url-fetch)
18384 (uri (pypi-uri "nltk" version ".zip"))
18385 (sha256
18386 (base32
18387 "1sq32lwgij9h8rsksymnxxr7bqfw3vgx5ijw4azbj6k2xnmmdmap"))))
18388 (build-system python-build-system)
18389 (arguments
18390 '(;; The tests require some extra resources to be downloaded.
18391 ;; TODO Try packaging these resources.
18392 #:tests? #f))
18393 (propagated-inputs
18394 (list python-click python-joblib python-regex python-tqdm))
18395 (native-inputs
18396 (list unzip))
18397 (home-page "http://nltk.org/")
18398 (synopsis "Natural Language Toolkit")
18399 (description "It provides interfaces to over 50 corpora and lexical
18400 resources such as WordNet, along with a suite of text processing libraries
18401 for classification, tokenization, stemming, tagging, parsing, and semantic
18402 reasoning, wrappers for natural language processing libraries.")
18403 (license license:asl2.0)))
18404
18405 ;; Versions >=3.5 breaks backward-compatibility,
18406 ;; so we keep version 3.4.x around for a while.
18407 (define-public python-nltk-3.4
18408 (package
18409 (inherit python-nltk)
18410 (version "3.4.5")
18411 (source
18412 (origin
18413 (method url-fetch)
18414 (uri (pypi-uri "nltk" version ".zip"))
18415 (sha256
18416 (base32 "153x2clrnigs74jdgnn3qmljdjj4gprmvpdvh49i18ls4m8mbm5y"))))
18417 (propagated-inputs (list python-six))))
18418
18419 (define-public python-pymongo
18420 (package
18421 (name "python-pymongo")
18422 (version "4.1.1")
18423 (source (origin
18424 (method url-fetch)
18425 (uri (pypi-uri "pymongo" version))
18426 (sha256
18427 (base32
18428 "1m9hc2a4kgg10xy3g5x00z4a7rrk9s0rbf5qfypwnhq0kdfg5f6p"))))
18429 (build-system python-build-system)
18430 (propagated-inputs
18431 (list python-certifi))
18432 (home-page "https://github.com/mongodb/mongo-python-driver")
18433 (synopsis "Python driver for MongoDB")
18434 (description "Python driver for MongoDB.")
18435 (license license:asl2.0)))
18436
18437 (define-public python-consul
18438 (package
18439 (name "python-consul")
18440 (version "0.6.1")
18441 (source
18442 (origin
18443 (method url-fetch)
18444 (uri (pypi-uri "python-consul" version))
18445 (sha256
18446 (base32
18447 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
18448 (build-system python-build-system)
18449 (arguments
18450 '(#:tests? #f)) ; The tests are not distributed
18451 (propagated-inputs
18452 (list python-requests python-six))
18453 (home-page "https://github.com/cablehead/python-consul")
18454 (synopsis "Python client for Consul")
18455 (description
18456 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
18457 discovery, monitoring and configuration.")
18458 (license license:expat)))
18459
18460 (define-public python-schematics
18461 (package
18462 (name "python-schematics")
18463 (version "1.1.1")
18464 (source
18465 (origin
18466 (method git-fetch)
18467 (uri (git-reference
18468 (url "https://github.com/schematics/schematics")
18469 (commit (string-append "v" version))))
18470 (file-name (git-file-name name version))
18471 (sha256
18472 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
18473 (build-system python-build-system)
18474 (propagated-inputs
18475 (list python-six))
18476 (arguments
18477 ;; The tests require a bunch of not very nice packages with fixed
18478 ;; version requirements (e.g. python-coveralls).
18479 `(#:tests? #f))
18480 (home-page "https://github.com/schematics/schematics")
18481 (synopsis "Python Data Structures for Humans")
18482 (description "Python Data Structures for Humans.")
18483 (license license:bsd-3)))
18484
18485 (define-public python-odfpy
18486 (package
18487 (name "python-odfpy")
18488 (version "1.4.1")
18489 (source (origin
18490 (method url-fetch)
18491 (uri (pypi-uri "odfpy" version))
18492 (sha256
18493 (base32
18494 "1v1qqk9p12qla85yscq2g413l3qasn6yr4ncyc934465b5p6lxnv"))))
18495 (arguments
18496 `(#:phases
18497 (modify-phases %standard-phases
18498 (replace 'check
18499 (lambda _
18500 (invoke "pytest" "-vv"))))))
18501 (build-system python-build-system)
18502 (native-inputs
18503 (list python-pytest))
18504 (propagated-inputs
18505 (list python-defusedxml))
18506 (home-page "https://github.com/eea/odfpy")
18507 (synopsis "Python API and tools to manipulate OpenDocument files")
18508 (description "Collection of libraries and utility programs written in
18509 Python to manipulate OpenDocument 1.2 files.")
18510 (license
18511 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
18512 ;; number of files with other licenses.
18513 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
18514
18515 (define-public python-natsort
18516 (package
18517 (name "python-natsort")
18518 (version "7.1.1")
18519 (source (origin
18520 (method url-fetch)
18521 (uri (pypi-uri "natsort" version))
18522 (sha256
18523 (base32
18524 "00y49bfsi7rrsd1s42gc2w95a6arl9ipdsx2493hr0v54fj07ih0"))))
18525 (build-system python-build-system)
18526 (arguments
18527 `(#:phases
18528 (modify-phases %standard-phases
18529 (add-after 'unpack 'remove-test-hypothesis-deadlines
18530 (lambda _
18531 (substitute* "tests/test_utils.py"
18532 (("from hypothesis import given")
18533 "from hypothesis import given, settings")
18534 (("( +)@given" all spaces)
18535 (string-append spaces "@settings(deadline=None)\n" all)))))
18536 (replace 'check
18537 (lambda* (#:key tests? #:allow-other-keys)
18538 (when tests?
18539 (invoke "pytest" "-v")))))))
18540 (native-inputs
18541 (list python-hypothesis python-pytest-cov python-pytest-mock
18542 python-pytest))
18543 (propagated-inputs ; TODO: Add python-fastnumbers.
18544 (list python-pyicu))
18545 (home-page "https://github.com/SethMMorton/natsort")
18546 (synopsis "Natural sorting for python and shell")
18547 (description
18548 "Natsort lets you apply natural sorting on lists instead of
18549 lexicographical. If you use the built-in @code{sorted} method in python on a
18550 list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
18551 it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
18552 @code{a9}]}. Natsort provides a function @code{natsorted} that identifies
18553 numbers and sorts them separately from strings. It can also sort version
18554 numbers, real numbers, mixed types and more, and comes with a shell command
18555 @command{natsort} that exposes this functionality in the command line.")
18556 (license license:expat)))
18557
18558 (define-public glances
18559 (package
18560 (name "glances")
18561 (version "3.1.7")
18562 (source
18563 (origin
18564 (method url-fetch)
18565 (uri (pypi-uri "Glances" version))
18566 (sha256
18567 (base32 "020vb38qrb0m3sdr7xjr43cmcfxpnyg4hmb97wgxsa9zvwsjwa5x"))
18568 (modules '((guix build utils)))
18569 (snippet
18570 '(begin
18571 ;; Glances phones PyPI for weekly update checks by default.
18572 ;; Disable these. The user can re-enable them if desired.
18573 (substitute* "glances/outdated.py"
18574 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
18575 (string-append indentation
18576 "self.args.disable_check_update = True\n"
18577 line)))
18578 #t))))
18579 (build-system python-build-system)
18580 (propagated-inputs
18581 (list python-future python-psutil))
18582 (home-page "https://github.com/nicolargo/glances")
18583 (synopsis "Cross-platform curses-based monitoring tool")
18584 (description
18585 "Glances is a curses-based monitoring tool for a wide variety of platforms.
18586 Glances uses the PsUtil library to get information from your system. It
18587 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
18588 (license license:lgpl3+)))
18589
18590 (define-public python-graphql-core
18591 (package
18592 (name "python-graphql-core")
18593 (version "3.1.2")
18594 (source
18595 (origin
18596 (method url-fetch)
18597 (uri (pypi-uri "graphql-core" version))
18598 (sha256
18599 (base32
18600 "0fjv5w2wvgdr8gb27v241bavliipyir9fdz48rsgc3xapm644mn0"))))
18601 (build-system python-build-system)
18602 (arguments
18603 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
18604 #:phases
18605 (modify-phases %standard-phases
18606 (add-after 'unpack 'patch-hardcoded-version
18607 (lambda _ (substitute*
18608 "setup.py"
18609 (("'gevent==1.1rc1'") "'gevent'"))
18610 #t)))))
18611 (native-inputs
18612 (list python-gevent python-mock python-pytest-mock))
18613 (propagated-inputs
18614 (list python-promise python-six))
18615 (home-page "https://github.com/graphql-python/graphql-core")
18616 (synopsis "GraphQL implementation for Python")
18617 (description
18618 "GraphQL implementation for Python. GraphQL is a data query language and
18619 runtime designed and used to request and deliver data to mobile and web apps.
18620 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
18621 to Python.")
18622 (license license:expat)))
18623
18624 (define-public python-graphql-relay
18625 (package
18626 (name "python-graphql-relay")
18627 (version "3.1.0")
18628 (source
18629 (origin
18630 (method url-fetch)
18631 (uri (pypi-uri "graphql-relay" version))
18632 (sha256
18633 (base32
18634 "1d70vwam9gjhx7fqzsa03x7lc6ivcqki5r9pk8m7rslmb7pagmbh"))))
18635 (build-system python-build-system)
18636 (arguments
18637 '(#:phases
18638 (modify-phases %standard-phases
18639 (replace 'check
18640 (lambda* (#:key tests? #:allow-other-keys)
18641 (when tests?
18642 (invoke "pytest" "tests")))))))
18643 (native-inputs
18644 (list
18645 python-pytest
18646 python-pytest-asyncio))
18647 (propagated-inputs
18648 (list python-graphql-core))
18649 (home-page "https://github.com/graphql-python/graphql-relay-py")
18650 (synopsis "Relay implementation for Python")
18651 (description
18652 "This is a library to allow the easy creation of Relay-compliant servers
18653 using the GraphQL Python reference implementation of a GraphQL server. It
18654 should be noted that the code is a exact port of the original
18655 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
18656 from Facebook.")
18657 (license license:expat)))
18658
18659 (define-public python-graphene
18660 (package
18661 (name "python-graphene")
18662 (version "3.0")
18663 (source
18664 (origin
18665 (method url-fetch)
18666 (uri (pypi-uri "graphene" version))
18667 (sha256
18668 (base32
18669 "08m1n2ydk48c18cvl8474v3pwwacjl1vgq61m9qs00122mp0cj5g"))))
18670 (build-system python-build-system)
18671 (propagated-inputs
18672 (list python-graphql-core python-graphql-relay python-aniso8601
18673 python-promise python-six))
18674 (arguments
18675 `(#:tests? #f)) ; no tests/ in the PyPI tarball
18676 (home-page "https://graphene-python.org/")
18677 (synopsis "GraphQL Framework for Python")
18678 (description
18679 "Graphene is a Python library for building GraphQL schemas/types.
18680 A GraphQL schema describes your data model, and provides a GraphQL server
18681 with an associated set of resolve methods that know how to fetch data.")
18682 (license license:expat)))
18683
18684 (define-public python-random2
18685 (package
18686 (name "python-random2")
18687 (version "1.0.1")
18688 (source (origin
18689 (method url-fetch)
18690 (uri (pypi-uri "random2" version ".zip"))
18691 (sha256
18692 (base32
18693 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))
18694 (patches
18695 (search-patches "python-random2-getrandbits-test.patch"))))
18696 (build-system python-build-system)
18697 (native-inputs (list unzip))
18698 (home-page "http://pypi.python.org/pypi/random2")
18699 (synopsis "Python 3 version of the Python 2 @code{random} module")
18700 (description
18701 "This package provides a Python 3 ported version of Python 2.7’s
18702 @code{random} module. It has also been back-ported to work in Python 2.6.
18703
18704 In Python 3, the implementation of @code{randrange()} was changed, so that
18705 even with the same seed you get different sequences in Python 2 and 3.
18706
18707 This package closes that gap, allowing stable random number generation
18708 between the different Python versions.")
18709 (license license:psfl)))
18710
18711 (define-public python-snowballstemmer
18712 (package
18713 (name "python-snowballstemmer")
18714 (version "2.0.0")
18715 (source (origin
18716 (method url-fetch)
18717 (uri (pypi-uri "snowballstemmer" version))
18718 (sha256
18719 (base32
18720 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
18721 (build-system python-build-system)
18722 (arguments
18723 `(;; No tests exist
18724 #:tests? #f))
18725 (home-page "https://github.com/shibukawa/snowball_py")
18726 (synopsis "Snowball stemming library collection for Python")
18727 (description "This package provides 16 word stemmer algorithms generated
18728 from Snowball algorithms. It includes the 15 original ones plus the Poerter
18729 English stemmer.")
18730 (license license:bsd-3)))
18731
18732 (define-public python-setproctitle
18733 (package
18734 (name "python-setproctitle")
18735 (version "1.3.2")
18736 (source
18737 (origin
18738 (method url-fetch)
18739 (uri (pypi-uri "setproctitle" version))
18740 (sha256
18741 (base32
18742 "1zbp6kyzfbrmbh9j3idai0mnpa28zn5db3k5l07jc3c3gj89gyxr"))))
18743 (build-system python-build-system)
18744 (arguments
18745 '(#:phases
18746 (modify-phases %standard-phases
18747 (replace 'check
18748 (lambda* (#:key tests? #:allow-other-keys)
18749 (setenv "PYTHON" (or (which "python3") (which "python")))
18750 (setenv "PYCONFIG" (if (which "python3-config")
18751 "python3-config --embed"
18752 "python-config"))
18753 (substitute* "tests/conftest.py"
18754 (("cc") "gcc"))
18755 (when tests?
18756 (invoke "pytest" "tests/")))))))
18757 (native-inputs
18758 (list procps python-pytest)) ; required for tests
18759 (home-page "https://github.com/dvarrazzo/py-setproctitle")
18760 (synopsis
18761 "Setproctitle implementation for Python to customize the process title")
18762 (description "The library allows a process to change its title (as displayed
18763 by system tools such as @code{ps} and @code{top}).
18764
18765 Changing the title is mostly useful in multi-process systems, for example when a
18766 master process is forked: changing the children's title allows identifying the
18767 task each process is busy with. The technique is used by PostgreSQL and the
18768 OpenSSH Server for example.")
18769 (license license:bsd-3)))
18770
18771 (define-public python-validictory
18772 (package
18773 (name "python-validictory")
18774 (version "1.0.1")
18775 (source
18776 (origin
18777 (method url-fetch)
18778 (uri (pypi-uri "validictory" version))
18779 (sha256
18780 (base32
18781 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
18782 (build-system python-build-system)
18783 (arguments
18784 '(#:phases
18785 (modify-phases %standard-phases
18786 (add-after 'unpack 'bootstrap
18787 ;; Move the tests out of the package directory to avoid
18788 ;; packaging them.
18789 (lambda* _
18790 (rename-file "validictory/tests" "tests")
18791 (delete-file "tests/__init__.py")))
18792 (replace 'check
18793 (lambda _
18794 (invoke "py.test" "-vv" ))))))
18795 (native-inputs
18796 (list python-pytest))
18797 (home-page
18798 "https://github.com/jamesturk/validictory")
18799 (synopsis "General purpose Python data validator")
18800 (description "It allows validation of arbitrary Python data structures.
18801
18802 The schema format is based on the JSON Schema
18803 proposal (http://json-schema.org), so combined with json the library is also
18804 useful as a validator for JSON data.")
18805 (license license:expat)))
18806
18807 (define-public python-pyelftools
18808 (package
18809 (name "python-pyelftools")
18810 (version "0.28")
18811 (home-page "https://github.com/eliben/pyelftools")
18812 (source
18813 (origin
18814 (method git-fetch)
18815 (uri (git-reference (url home-page)
18816 (commit (string-append "v" version))))
18817 (file-name (git-file-name name version))
18818 (sha256
18819 (base32 "1z4fx39c9rds0bd4d2fjjq7n05b1nfxl36pmy523x8knm38l4gpr"))
18820 (snippet
18821 ;; Delete bundled readelf executable.
18822 '(delete-file "test/external_tools/readelf"))))
18823 (build-system python-build-system)
18824 (arguments
18825 '(#:phases (modify-phases %standard-phases
18826 (replace 'check
18827 (lambda* (#:key tests? #:allow-other-keys)
18828 (when tests?
18829 ;; Taken from tox.ini.
18830 (invoke "python" "test/run_all_unittests.py")
18831 (invoke "python" "test/run_examples_test.py")
18832 (invoke "python" "test/run_readelf_tests.py")))))))
18833 (synopsis
18834 "Analyze binary and library file information")
18835 (description "This Python library provides interfaces for parsing and
18836 analyzing two binary and library file formats ; the Executable and Linking
18837 Format (ELF), and debugging information in the Debugging With Attributed
18838 Record Format (DWARF).")
18839 (license license:public-domain)))
18840
18841 (define-public python-pefile
18842 (package
18843 (name "python-pefile")
18844 (version "2022.5.30")
18845 (source (origin
18846 (method git-fetch)
18847 (uri (git-reference
18848 (url "https://github.com/erocarrera/pefile")
18849 (commit (string-append "v" version))))
18850 (file-name (git-file-name name version))
18851 (sha256
18852 (base32
18853 "1qj90a0s2gd5hn2zggypqc1077inid5dcl1fp5973b04kf2b9z8a"))))
18854 (build-system python-build-system)
18855 (propagated-inputs (list python-future))
18856 (home-page "https://github.com/erocarrera/pefile")
18857 (synopsis "Portable Executable (PE) file parser")
18858 (description "This python library provides interfaces for parsing and
18859 working with Portable Executable (PE) files. It makes to most information
18860 from the header, as well as section details and data available.")
18861 (license license:expat)))
18862
18863 (define-public python-pyev
18864 (package
18865 (name "python-pyev")
18866 (version "0.9.0")
18867 (source
18868 (origin
18869 (method url-fetch)
18870 (uri (pypi-uri "pyev" version))
18871 (sha256
18872 (base32
18873 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
18874 (build-system python-build-system)
18875 (arguments
18876 `(#:tests? #f ; no test suite
18877 #:phases
18878 (modify-phases %standard-phases
18879 (add-after 'unpack 'patch
18880 (lambda* (#:key inputs #:allow-other-keys)
18881 (let ((libev (search-input-file inputs "/lib/libev.so.4")))
18882 (substitute* "setup.py"
18883 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
18884 (string-append "libev_dll_name = \"" libev "\"")))))))))
18885 (inputs
18886 (list libev))
18887 (home-page "https://github.com/gabrielfalcao/pyev")
18888 (synopsis "Python libev interface")
18889 (description "Pyev provides a Python interface to libev.")
18890 (license license:gpl3)))
18891
18892 (define-public python-imagesize
18893 (package
18894 (name "python-imagesize")
18895 (version "1.2.0")
18896 (source
18897 (origin
18898 (method url-fetch)
18899 (uri (pypi-uri "imagesize" version))
18900 (sha256
18901 (base32
18902 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
18903 (build-system python-build-system)
18904 (home-page "https://github.com/shibukawa/imagesize_py")
18905 (synopsis "Gets image size of files in various formats in Python")
18906 (description
18907 "This package allows determination of image size from
18908 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
18909 (license license:expat)))
18910
18911 (define-public python-termstyle
18912 (package
18913 (name "python-termstyle")
18914 (version "0.1.11")
18915 (source
18916 (origin
18917 (method url-fetch)
18918 (uri (pypi-uri "termstyle" version))
18919 (sha256
18920 (base32
18921 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
18922 (build-system python-build-system)
18923 (arguments
18924 '(#:phases
18925 (modify-phases %standard-phases
18926 (replace 'check
18927 (lambda _
18928 (invoke "python" "test3.py"))))))
18929 (home-page "https://github.com/gfxmonk/termstyle")
18930 (synopsis "Console text coloring for Python")
18931 (description "This package provides console text coloring for Python.")
18932 (license license:bsd-3)))
18933
18934 (define-public python-argcomplete
18935 (package
18936 (name "python-argcomplete")
18937 (version "1.11.1")
18938 (source
18939 (origin
18940 (method url-fetch)
18941 (uri (pypi-uri "argcomplete" version))
18942 (sha256
18943 (base32
18944 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
18945 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
18946 (build-system python-build-system)
18947 (native-inputs
18948 (list python-coverage
18949 python-flake8
18950 python-pexpect
18951 python-wheel
18952 tcsh
18953 fish
18954 bash)) ;full Bash for 'test_file_completion'
18955 (home-page "https://github.com/kislyuk/argcomplete")
18956 (synopsis "Shell tab completion for Python argparse")
18957 (description "argcomplete provides extensible command line tab completion
18958 of arguments and options for Python scripts using @code{argparse}. It's
18959 particularly useful for programs with many options or sub-parsers that can
18960 dynamically suggest completions ; for example, when browsing resources over the
18961 network.")
18962 (license license:asl2.0)))
18963
18964 (define-public python-csscompressor
18965 (package
18966 (name "python-csscompressor")
18967 (version "0.9.5")
18968 (source
18969 (origin
18970 (method url-fetch)
18971 (uri (pypi-uri "csscompressor" version))
18972 (sha256
18973 (base32
18974 "018ssffvlpnc1salmnpyl52c11glzzwj4k9f757hl4pkpjnjp8mg"))))
18975 (build-system python-build-system)
18976 (arguments
18977 '(#:phases
18978 (modify-phases %standard-phases
18979 (replace 'check
18980 (lambda _
18981 (invoke "py.test"))))))
18982 (native-inputs
18983 (list python-pytest))
18984 (home-page "https://github.com/sprymix/csscompressor")
18985 (synopsis "Python port of YUI CSS Compressor")
18986 (description
18987 "This package provides a python port of YUI CSS Compressor.")
18988 (license license:bsd-3)))
18989
18990 (define-public python-rcssmin
18991 (package
18992 (name "python-rcssmin")
18993 (version "1.0.6")
18994 (source
18995 (origin
18996 (method url-fetch)
18997 (uri (pypi-uri "rcssmin" version))
18998 (sha256
18999 (base32
19000 "0w42l4dhxghcz7pj3q7hkxp015mvb8z2cq9sfxbl31npsfavd1ya"))))
19001 (build-system python-build-system)
19002 (arguments
19003 '(#:phases
19004 (modify-phases %standard-phases
19005 (replace 'check
19006 (lambda _
19007 (invoke "python" "run_tests.py" "tests"))))))
19008 (home-page "http://opensource.perlig.de/rcssmin/")
19009 (synopsis "CSS Minifier")
19010 (description "The minifier is based on the semantics of the YUI compressor,
19011 which itself is based on the rule list by Isaac Schlueter.")
19012 (license license:asl2.0)))
19013
19014 (define-public python-rjsmin
19015 (package
19016 (name "python-rjsmin")
19017 (version "1.1.0")
19018 (source
19019 (origin
19020 (method url-fetch)
19021 (uri (pypi-uri "rjsmin" version))
19022 (sha256
19023 (base32
19024 "0cmc72rlkvzz8fl89bc83czkx0pcvhzj7yn7m29r8pgnf5fcfpdi"))
19025 (modules '((guix build utils)))
19026 (snippet
19027 '(begin
19028 (for-each delete-file (find-files "bench" "\\.js$"))
19029 #t))))
19030 (build-system python-build-system)
19031 (arguments
19032 '(#:tests? #f ; Not all test files included.
19033 #:phases
19034 (modify-phases %standard-phases
19035 (replace 'check
19036 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
19037 (add-installed-pythonpath inputs outputs)
19038 (if tests?
19039 (invoke "py.test" "-vv" "tests")
19040 #t))))))
19041 (native-inputs
19042 (list python-pytest))
19043 (home-page "http://opensource.perlig.de/rjsmin/")
19044 (synopsis "Javascript Minifier")
19045 (description "@code{rJSmin} is a javascript minifier written in Python. The
19046 minifier is based on the semantics of jsmin.c by Douglas Crockford. The module
19047 is a re-implementation aiming for speed, so it can be used at runtime (rather
19048 than during a preprocessing step).")
19049 (license license:asl2.0)))
19050
19051 (define-public python-xopen
19052 (package
19053 (name "python-xopen")
19054 (version "0.8.2")
19055 (source
19056 (origin
19057 (method url-fetch)
19058 (uri (pypi-uri "xopen" version))
19059 (sha256
19060 (base32
19061 "1xrlcnd6fri3w97zzzp6vyk4l21yq1lc8r4wksi06hgpkbh4jdq0"))))
19062 (build-system python-build-system)
19063 (propagated-inputs
19064 (list python-setuptools-scm))
19065 (home-page "https://github.com/marcelm/xopen/")
19066 (synopsis "Open compressed files transparently")
19067 (description "This module provides an @code{xopen} function that works like
19068 Python's built-in @code{open} function, but can also deal with compressed files.
19069 Supported compression formats are gzip, bzip2 and, xz, and are automatically
19070 recognized by their file extensions. The focus is on being as efficient as
19071 possible on all supported Python versions.")
19072 (license license:expat)))
19073
19074 (define-public python-cheetah
19075 (package
19076 (name "python-cheetah")
19077 (version "3.2.4")
19078 (source
19079 (origin
19080 (method url-fetch)
19081 (uri (pypi-uri "Cheetah3" version))
19082 (sha256
19083 (base32
19084 "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
19085 (build-system python-build-system)
19086 (arguments
19087 `(#:phases (modify-phases %standard-phases
19088 (add-after 'unpack 'use-absolute-python
19089 (lambda _
19090 (substitute* "Cheetah/CheetahWrapper.py"
19091 (("#!/usr/bin/env python")
19092 (string-append "#!" (which "python"))))))
19093 (add-after 'unpack 'fix-tests
19094 (lambda _
19095 (substitute* "Cheetah/Tests/ImportHooks.py"
19096 (("os.path.dirname\\(__file__\\)")
19097 (string-append "'" (getcwd) "/Cheetah/Tests'")))))
19098 (replace 'check
19099 (lambda _
19100 (setenv "TMPDIR" "/tmp")
19101 (substitute* "Cheetah/Tests/Test.py"
19102 (("unittest.TextTestRunner\\(\\)")
19103 "unittest.TextTestRunner(verbosity=2)"))
19104
19105 (invoke "python" "Cheetah/Tests/Test.py"))))))
19106 (propagated-inputs
19107 (list python-markdown)) ;optional
19108 (home-page "https://cheetahtemplate.org/")
19109 (synopsis "Template engine")
19110 (description "Cheetah is a text-based template engine and Python code
19111 generator.
19112
19113 Cheetah can be used as a standalone templating utility or referenced as
19114 a library from other Python applications. It has many potential uses,
19115 but web developers looking for a viable alternative to ASP, JSP, PHP and
19116 PSP are expected to be its principle user group.
19117
19118 Features:
19119 @enumerate
19120 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
19121 text-based format.
19122 @item Cleanly separates content, graphic design, and program code.
19123 @item Blends the power and flexibility of Python with a simple template language
19124 that non-programmers can understand.
19125 @item Gives template writers full access to any Python data structure, module,
19126 function, object, or method in their templates.
19127 @item Makes code reuse easy by providing an object-orientated interface to
19128 templates that is accessible from Python code or other Cheetah templates.
19129 One template can subclass another and selectively reimplement sections of it.
19130 @item Provides a simple, yet powerful, caching mechanism that can dramatically
19131 improve the performance of a dynamic website.
19132 @item Compiles templates into optimized, yet readable, Python code.
19133 @end enumerate")
19134 (license (license:x11-style "file://LICENSE"))))
19135
19136 (define-public python-dulwich
19137 (package
19138 (name "python-dulwich")
19139 (version "0.20.30")
19140 (source
19141 (origin
19142 (method url-fetch)
19143 (uri (list (string-append "https://www.dulwich.io/releases/"
19144 "dulwich-" version ".tar.gz")
19145 (pypi-uri "dulwich" version)))
19146 (sha256
19147 (base32
19148 "0hafaff30bmkj30b8pwpwsy3fz5h6c1pn98ihqcvl5zndflr1h22"))))
19149 (build-system python-build-system)
19150 (arguments
19151 '(#:phases
19152 (modify-phases %standard-phases
19153 (add-before 'check 'fix-tests
19154 (lambda* (#:key inputs #:allow-other-keys)
19155 (substitute* '("dulwich/tests/test_repository.py"
19156 "dulwich/tests/test_porcelain.py"
19157 "dulwich/tests/test_hooks.py")
19158 (("/bin/sh") (search-input-file inputs "/bin/sh")))
19159 (setenv "TEST_RUNNER" "unittest")
19160 (setenv "PYTHONHASHSEED" "random"))))))
19161 (propagated-inputs
19162 (list python-fastimport python-urllib3))
19163 (native-inputs
19164 (list python-mock python-geventhttpclient python-gpg
19165 git gnupg))
19166 (home-page "https://www.dulwich.io/")
19167 (synopsis "Git implementation in Python")
19168 (description "Dulwich is an implementation of the Git file formats and
19169 protocols written in pure Python.")
19170 ;; Can be used with either license.
19171 (license (list license:asl2.0 license:gpl2+))))
19172
19173 (define-public python-pbkdf2
19174 (package
19175 (name "python-pbkdf2")
19176 (version "1.3")
19177 (source
19178 (origin
19179 (method url-fetch)
19180 (uri (pypi-uri "pbkdf2" version))
19181 (sha256
19182 (base32
19183 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
19184 (build-system python-build-system)
19185 (arguments
19186 '(#:phases
19187 (modify-phases %standard-phases
19188 (replace 'check
19189 (lambda _
19190 (invoke "python" "test/test_pbkdf2.py"))))))
19191 (propagated-inputs
19192 (list python-pycrypto)) ; optional
19193 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
19194 (synopsis "Password-based key derivation")
19195 (description "This module implements the password-based key derivation
19196 function, PBKDF2, specified in RSA PKCS#5 v2.0.
19197
19198 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
19199 is part of the RSA Public Key Cryptography Standards series. The provided
19200 implementation takes a password or a passphrase and a salt value (and
19201 optionally a iteration count, a digest module, and a MAC module) and provides
19202 a file-like object from which an arbitrarily-sized key can be read.")
19203 (license license:expat)))
19204
19205 (define-public python-qrcode
19206 (package
19207 (name "python-qrcode")
19208 (version "7.3.1")
19209 (source
19210 (origin
19211 (method url-fetch)
19212 (uri (pypi-uri "qrcode" version))
19213 (sha256
19214 (base32 "0y35jlwfvkgn9341lzshyaqgpp61vysjh107vhdd96ya83r6ynip"))))
19215 (build-system python-build-system)
19216 (arguments
19217 ;; FIXME: Tests require packaging 'pymaging'.
19218 '(#:tests? #f))
19219 (propagated-inputs
19220 (list python-lxml ; for SVG output
19221 python-pillow)) ; for PNG output
19222 (home-page "https://github.com/lincolnloop/python-qrcode")
19223 (synopsis "QR Code image generator")
19224 (description "This package provides a pure Python QR Code generator
19225 module. It uses the Python Imaging Library (PIL) to allow for the generation
19226 of QR Codes.
19227
19228 In addition this package provides a command line tool to generate QR codes and
19229 either write these QR codes to a file or do the output as ascii art at the
19230 console.")
19231 (license license:bsd-3)))
19232
19233 (define-public python-rst2ansi
19234 (package
19235 (name "python-rst2ansi")
19236 (version "0.1.5")
19237 (source
19238 (origin
19239 (method url-fetch)
19240 (uri (pypi-uri "rst2ansi" version))
19241 (sha256
19242 (base32
19243 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
19244 (build-system python-build-system)
19245 (propagated-inputs
19246 (list python-docutils))
19247 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
19248 (synopsis "Convert RST to ANSI-decorated console output")
19249 (description
19250 "Python module dedicated to rendering RST (reStructuredText) documents
19251 to ansi-escaped strings suitable for display in a terminal.")
19252 (license license:expat)))
19253
19254 (define-public python-ansi2html
19255 (package
19256 (name "python-ansi2html")
19257 (version "1.2.0")
19258 (source
19259 (origin
19260 (method url-fetch)
19261 (uri (pypi-uri "ansi2html" version))
19262 (sha256
19263 (base32
19264 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
19265 (build-system python-build-system)
19266 (native-inputs
19267 (list python-mock python-nose))
19268 (propagated-inputs
19269 (list python-six))
19270 (home-page "https://github.com/ralphbean/ansi2html")
19271 (synopsis "Convert ANSI-decorated console output to HTML")
19272 (description
19273 "@command{ansi2html} is a Python library and command line utility for
19274 converting text with ANSI color codes to HTML or LaTeX.")
19275 (license license:gpl3+)))
19276
19277 (define-public python-easy-ansi
19278 (package
19279 (name "python-easy-ansi")
19280 (version "0.3")
19281 (source
19282 (origin
19283 (method git-fetch)
19284 (uri (git-reference
19285 (url "https://gitlab.com/joeysbytes/easy-ansi")
19286 (commit (string-append "v" version))))
19287 (file-name (git-file-name name version))
19288 (sha256
19289 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
19290 (build-system python-build-system)
19291 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
19292 (synopsis "Terminal framework API")
19293 (description
19294 "Easy ANSI is a terminal framework API to give you an easy way to use
19295 colors, cursor control movements, and line/box drawing. It is not meant as a
19296 replacement to more full-featured frameworks (such as curses or urwid), but as
19297 a tool to quickly create nice-looking screens in your terminal window. You
19298 can even create animations with the cursor controls.")
19299 (license license:expat)))
19300
19301 (define-public python-ddt
19302 (package
19303 (name "python-ddt")
19304 (version "1.4.2")
19305 (source
19306 (origin
19307 (method url-fetch)
19308 (uri (pypi-uri "ddt" version))
19309 (sha256
19310 (base32
19311 "0y2k756qjz1rhpivi60hy29b4bf0bh3wck39i1mn6pkil9k779k4"))))
19312 (build-system python-build-system)
19313 (native-inputs
19314 (list python-pytest))
19315 (propagated-inputs
19316 (list python-pyyaml))
19317 (home-page "https://github.com/datadriventests/ddt")
19318 (synopsis "Data-Driven Tests")
19319 (description
19320 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
19321 running it with different test data, and make it appear as multiple test
19322 cases.")
19323 (license license:expat)))
19324
19325 (define-public python-pycountry
19326 (package
19327 (name "python-pycountry")
19328 (version "22.3.5")
19329 (source
19330 (origin
19331 (method url-fetch)
19332 (uri (pypi-uri "pycountry" version))
19333 (sha256
19334 (base32
19335 "0ihnkh86zz01vi46gcwgq6h71jrpj7hq71zi13c98n2qdhj3l5mj"))))
19336 (build-system python-build-system)
19337 (home-page "https://bitbucket.org/flyingcircus/pycountry")
19338 (synopsis "ISO databases for languages, countries, currencies, etc.")
19339 (description
19340 "@code{pycountry} provides the ISO databases for the standards:
19341 @enumerate
19342 @item 639-3 (Languages)
19343 @item 3166 (Countries)
19344 @item 3166-3 (Deleted Countries)
19345 @item 3166-2 (Subdivisions of countries)
19346 @item 4217 (Currencies)
19347 @item 15924 (Scripts)
19348 @end enumerate
19349 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
19350 through a Python API.")
19351 (license license:lgpl2.1+)))
19352
19353 (define-public python-pycountry@20.7.3
19354 (package
19355 (inherit python-pycountry)
19356 (name "python-pycountry")
19357 (version "20.7.3")
19358 (source
19359 (origin
19360 (method url-fetch)
19361 (uri (pypi-uri "pycountry" version))
19362 (sha256
19363 (base32 "0hnbabsmqimx5hqh0jbd2f64i8fhzhhbrvid57048hs5sd9ll241"))))))
19364
19365 (define-public python-pycosat
19366 (package
19367 (name "python-pycosat")
19368 (version "0.6.3")
19369 (source
19370 (origin
19371 (method url-fetch)
19372 (uri (pypi-uri "pycosat" version ".zip"))
19373 (sha256
19374 (base32
19375 "1vg0f2fwcybpdqv92z0hwdl603n2safh3fqvjjxkksd78r4qg6ac"))))
19376 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
19377 (build-system python-build-system)
19378 (native-inputs
19379 (list unzip))
19380 (home-page "https://github.com/ContinuumIO/pycosat")
19381 (synopsis "Bindings to picosat (a SAT solver)")
19382 (description
19383 "This package provides efficient Python bindings to @code{picosat} on
19384 the C level. When importing pycosat, the @code{picosat} solver becomes part
19385 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
19386 Problem} (SAT) solver.")
19387 (license license:expat)))
19388
19389 (define-public python-pypeg2
19390 (package
19391 (name "python-pypeg2")
19392 (version "2.15.2")
19393 (source
19394 (origin
19395 (method url-fetch)
19396 (uri (pypi-uri "pyPEG2" version))
19397 (sha256
19398 (base32
19399 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
19400 (build-system python-build-system)
19401 (propagated-inputs (list python-lxml))
19402 (arguments
19403 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
19404 '(#:tests? #f))
19405 (home-page "https://fdik.org/pyPEG/")
19406 (synopsis "Parsing Expression Grammars in Python")
19407 (description "PyPEG is an intrinsic parser interpreter framework for
19408 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
19409 parse many formal languages.")
19410 (license license:gpl2)))
19411
19412 (define-public python-incremental
19413 (package
19414 (name "python-incremental")
19415 (version "17.5.0")
19416 (source
19417 (origin
19418 (method url-fetch)
19419 (uri (pypi-uri "incremental" version))
19420 (sha256
19421 (base32
19422 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
19423 (build-system python-build-system)
19424 (home-page "https://github.com/hawkowl/incremental")
19425 (synopsis "Library for versioning Python projects")
19426 (description "Incremental is a small library that versions your Python
19427 projects.")
19428 (license license:expat)))
19429
19430 (define-public python-invoke
19431 (package
19432 (name "python-invoke")
19433 (home-page "https://www.pyinvoke.org/")
19434 (version "1.6.0")
19435 (source (origin
19436 (method url-fetch)
19437 (uri (pypi-uri "invoke" version))
19438 (sha256
19439 (base32
19440 "1lsql9daabfr31c7syva5myc5bka45k57ygs9fliv63qrwp1wk9p"))))
19441 (build-system python-build-system)
19442 (arguments
19443 ;; XXX: Requires many dependencies that are not yet in Guix.
19444 `(#:tests? #f
19445 #:phases
19446 (modify-phases %standard-phases
19447 (add-after 'unpack 'delete-python2-code
19448 (lambda _
19449 (delete-file-recursively "invoke/vendor/yaml2")))
19450 (add-after 'unpack 'fix-bash-path
19451 (lambda* (#:key inputs #:allow-other-keys)
19452 (let ((bash (assoc-ref inputs "bash")))
19453 (substitute* "invoke/config.py"
19454 (("shell = \"/bin/bash\"")
19455 (string-append "shell = \"" bash "/bin/bash\"")))))))))
19456 (inputs
19457 `(("bash" ,bash-minimal)))
19458 (synopsis "Pythonic task execution")
19459 (description
19460 "Invoke is a Python task execution tool and library, drawing inspiration
19461 from various sources to arrive at a powerful and clean feature set. It is
19462 evolved from the Fabric project, but focuses on local and abstract concerns
19463 instead of servers and network commands.")
19464 (license license:bsd-3)))
19465
19466 (define-public python-automat
19467 (package
19468 (name "python-automat")
19469 (version "20.2.0")
19470 (source (origin
19471 (method url-fetch)
19472 (uri (pypi-uri "Automat" version))
19473 (sha256
19474 (base32
19475 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
19476 (build-system python-build-system)
19477 ;; We disable the tests because they require python-twisted, while
19478 ;; python-twisted depends on python-automat. Twisted is optional, but the
19479 ;; tests fail if it is not available. Also see
19480 ;; <https://github.com/glyph/automat/issues/71>.
19481 (arguments
19482 `(#:tests? #f
19483 #:phases
19484 (modify-phases %standard-phases
19485 ;; Remove script, because it depends on python-twisted.
19486 (add-after 'unpack 'remove-entrypoint
19487 (lambda _
19488 (substitute* "setup.py"
19489 (("\"automat-visualize = automat._visualize:tool\"") "")))))))
19490 (native-inputs
19491 (list python-m2r python-setuptools-scm python-graphviz))
19492 (propagated-inputs
19493 (list python-six python-attrs))
19494 (home-page "https://github.com/glyph/Automat")
19495 (synopsis "Self-service finite-state machines")
19496 (description "Automat is a library for concise, idiomatic Python
19497 expression of finite-state automata (particularly deterministic finite-state
19498 transducers).")
19499 (license license:expat)))
19500
19501 (define-public python-m2r
19502 (package
19503 (name "python-m2r")
19504 (version "0.2.1")
19505 (source (origin
19506 (method url-fetch)
19507 (uri (pypi-uri "m2r" version))
19508 (sha256
19509 (base32
19510 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))
19511 (modules '((guix build utils)))
19512 (snippet
19513 ;; Adjust test regex for Python 3.10 compatibility.
19514 ;; Taken from upstream pull request:
19515 ;; https://github.com/miyakogi/m2r/pull/62
19516 '(substitute* "tests/test_cli.py"
19517 (("self.assertIn\\('optional arguments:', message\\)")
19518 "self.assertRegex(message, r'option(s|al arguments):')")))))
19519 (build-system python-build-system)
19520 (propagated-inputs
19521 (list python-docutils python-mistune))
19522 (native-inputs
19523 (list python-pygments python-mock))
19524 (home-page "https://github.com/miyakogi/m2r")
19525 (synopsis "Markdown to reStructuredText converter")
19526 (description "M2R converts a markdown file including reST markups to valid
19527 reST format.")
19528 (license license:expat)))
19529
19530 (define-public python-constantly
19531 (package
19532 (name "python-constantly")
19533 (version "15.1.0")
19534 (source (origin
19535 (method url-fetch)
19536 (uri (pypi-uri "constantly" version))
19537 (sha256
19538 (base32
19539 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
19540 (build-system python-build-system)
19541 (home-page "https://github.com/twisted/constantly")
19542 (synopsis "Symbolic constants in Python")
19543 (description "Constantly is a Python library that provides symbolic
19544 constant support. It includes collections and constants with text, numeric,
19545 and bit flag values.")
19546 (license license:expat)))
19547
19548 (define-public python-attrs
19549 (package
19550 (name "python-attrs")
19551 (version "21.2.0")
19552 (source (origin
19553 (method url-fetch)
19554 (uri (pypi-uri "attrs" version))
19555 (sha256
19556 (base32
19557 "1yzmwi5d197p0qhl7rl4xi9q1w8mk9i3zn6hrl22knbcrb1slspg"))))
19558 (build-system python-build-system)
19559 (arguments
19560 `(#:phases (modify-phases %standard-phases
19561 (add-after 'unpack 'remove-test-hypothesis-deadlines
19562 (lambda _
19563 (substitute* "tests/test_make.py"
19564 (("assume, given") "assume, given, settings")
19565 (("( +)@given" all spaces)
19566 (string-append spaces "@settings(deadline=None)\n" all)))))
19567 (replace 'check
19568 (lambda* (#:key tests? #:allow-other-keys)
19569 (when tests?
19570 (invoke "pytest")))))))
19571 (native-inputs
19572 (list python-coverage python-hypothesis python-pympler python-pytest
19573 python-six))
19574 (home-page "https://github.com/python-attrs/attrs/")
19575 (synopsis "Attributes without boilerplate")
19576 (description "@code{attrs} is a Python package with class decorators that
19577 ease the chores of implementing the most common attribute-related object
19578 protocols.")
19579 (license license:expat)))
19580
19581 (define-public python-attrs-bootstrap
19582 (package
19583 (inherit python-attrs)
19584 (name "python-attrs-bootstrap")
19585 (native-inputs `())
19586 (arguments `(#:tests? #f))))
19587
19588 (define-public python-cliapp
19589 (package
19590 (name "python-cliapp")
19591 (version "1.20180812.1")
19592 (source
19593 (origin
19594 (method url-fetch)
19595 (uri (string-append
19596 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
19597 version ".tar.gz"))
19598 (sha256
19599 (base32
19600 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
19601 (build-system python-build-system)
19602 (arguments
19603 `(;; XXX: The tests only do style and coverage checks, which
19604 ;; fails due to deprecation warnings, etc.
19605 #:tests? #f))
19606 (native-inputs
19607 (list python-coverage-test-runner python-pep8))
19608 (propagated-inputs
19609 (list python-pyaml))
19610 (home-page "https://liw.fi/cliapp/")
19611 (synopsis "Python framework for command line programs")
19612 (description "@code{cliapp} is a Python framework for command line
19613 programs. It contains the typical stuff such programs need to do, such
19614 as parsing the command line for options, and iterating over input files.")
19615 (license license:gpl2+)))
19616
19617 (define-public python-ttystatus
19618 (package
19619 (name "python-ttystatus")
19620 (version "0.38")
19621 (source
19622 (origin
19623 (method git-fetch)
19624 (uri (git-reference
19625 (url "http://git.liw.fi/ttystatus")
19626 ;; There are no tags after ttystatus-0.36.
19627 (commit "e9fc573326c5d1348f5fe56263b4f7a8c32f58c9")))
19628 (sha256
19629 (base32 "0v49q839nrwdm19c83wfmj6n2kw80xslwq9k0n5509r2h7wzjiqj"))
19630 (file-name (git-file-name name version))))
19631 (build-system python-build-system)
19632 (native-inputs
19633 (list python-coverage-test-runner python-pep8))
19634 (arguments
19635 `(#:phases
19636 (modify-phases %standard-phases
19637 ;; check phase needs to be run before the build phase. If not,
19638 ;; coverage-test-runner looks for tests for the built source files,
19639 ;; and fails.
19640 (delete 'check)
19641 (add-before 'build 'check
19642 (lambda _ (invoke "make" "check"))))))
19643 (home-page "https://liw.fi/ttystatus/")
19644 (synopsis "Python library for showing progress reporting and
19645 status updates on terminals")
19646 (description "@code{ttystatus} is a Python library for showing progress
19647 reporting and status updates on terminals, for command line programs.
19648 Output is automatically adapted to the width of the terminal: truncated
19649 if it does not fit, and resized if the terminal size changes.")
19650 (license license:gpl3+)))
19651
19652 (define-public python-astroid
19653 (package
19654 (name "python-astroid")
19655 (version "2.9.0")
19656 (source
19657 (origin
19658 (method git-fetch)
19659 (uri (git-reference
19660 (url "https://github.com/PyCQA/astroid")
19661 (commit (string-append "v" version))))
19662 (file-name (git-file-name name version))
19663 (sha256
19664 (base32 "19iiys4233cicpm48fd7lrkm31kk47qiv44wvk952rqbcn4rd2dh"))))
19665 (build-system python-build-system)
19666 (propagated-inputs
19667 (list python-lazy-object-proxy python-typing-extensions python-wrapt))
19668 (native-inputs
19669 (list python-pytest python-pytest-runner))
19670 (home-page "https://github.com/PyCQA/astroid")
19671 (synopsis "Python source code base representation")
19672 (description "@code{python-astroid} provides a common base representation
19673 of Python source code for projects such as pychecker, pyreverse, pylint, etc.
19674 It provides a compatible representation which comes from the _ast module. It
19675 rebuilds the tree generated by the builtin _ast module by recursively walking
19676 down the AST and building an extended ast. The new node classes have
19677 additional methods and attributes for different usages. They include some
19678 support for static inference and local name scopes. Furthermore, astroid
19679 builds partial trees by inspecting living objects.")
19680 (license license:lgpl2.1+)))
19681
19682 (define-public python-isbnlib
19683 (package
19684 (name "python-isbnlib")
19685 (version "3.10.4")
19686 (source
19687 (origin
19688 (method url-fetch)
19689 (uri (pypi-uri "isbnlib" version))
19690 (sha256
19691 (base32
19692 "0iin0x2xqwyphyyzd0mzrq5v5xm7b6dlbb294k4dywra5qvbrgzm"))))
19693 (build-system python-build-system)
19694 (arguments '(#:tests? #f)) ; No test
19695 (home-page "https://github.com/xlcnd/isbnlib")
19696 (synopsis "Python library to work with ISBN strings")
19697 (description "@code{python-isbnlib} is a (pure) python library that provides
19698 several useful methods and functions to validate, clean, transform, hyphenate and
19699 get metadata for ISBN strings. Its origin was as the core of isbntools. This short
19700 version, is suitable to be include as a dependency in other projects.")
19701 (license license:lgpl3+)))
19702
19703 (define-public python-isort
19704 (package
19705 (name "python-isort")
19706 (version "5.10.1")
19707 (source
19708 (origin
19709 (method git-fetch)
19710 (uri (git-reference
19711 ;; Tests pass only from the Github sources
19712 (url "https://github.com/timothycrosley/isort")
19713 (commit version)))
19714 (file-name (git-file-name name version))
19715 (modules '((guix build utils)))
19716 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
19717 (sha256
19718 (base32
19719 "09spgl2k9xrprr5gbpfc91a8p7mx7a0c64ydgc91b3jhrmnd9jg1"))))
19720 (build-system python-build-system)
19721 (arguments
19722 `(#:phases
19723 (modify-phases %standard-phases
19724 (add-after 'unpack 'loosen-requirements
19725 (lambda _
19726 ;; Permit newer versions of black.
19727 (substitute* "example_isort_formatting_plugin/pyproject.toml"
19728 (("\\^20\\.08b1")
19729 ">= 20.08b1"))))
19730 ;; A foretaste of what our future python-build-system will need to
19731 ;; do.
19732 (replace 'build
19733 (lambda _
19734 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
19735 (replace 'install
19736 (lambda* (#:key outputs #:allow-other-keys)
19737 (let ((out (assoc-ref outputs "out"))
19738 (whl (car (find-files "dist" "\\.whl$"))))
19739 (invoke "pip" "--no-cache-dir" "--no-input"
19740 "install" "--no-deps" "--prefix" out whl))))
19741 (add-after 'install 'install-example-plugins
19742 (lambda* (#:key outputs #:allow-other-keys)
19743 (let ((out (assoc-ref outputs "out")))
19744 ;; Patch to use the core poetry API.
19745 (substitute* '("example_isort_formatting_plugin/pyproject.toml"
19746 "example_isort_sorting_plugin/pyproject.toml"
19747 "example_shared_isort_profile/pyproject.toml")
19748 (("poetry>=0.12")
19749 "poetry-core>=1.0.0")
19750 (("poetry.masonry.api")
19751 "poetry.core.masonry.api"))
19752 ;; Build the example plugins.
19753 (for-each (lambda (source-directory)
19754 (invoke "python" "-m" "build" "--wheel"
19755 "--no-isolation" "--outdir=dist"
19756 source-directory))
19757 '("example_isort_formatting_plugin"
19758 "example_isort_sorting_plugin"
19759 "example_shared_isort_profile"))
19760 ;; Install them to temporary storage, for the test.
19761 (setenv "HOME" (getcwd))
19762 (let ((example-whls (find-files "dist" "^example.*\\.whl$")))
19763 (apply invoke "pip" "--no-cache-dir" "--no-input"
19764 "install" "--user" "--no-deps" example-whls)))))
19765 (replace 'check
19766 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
19767 (when tests?
19768 (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
19769 (setenv "PATH" (string-append (getenv "PATH") ":" bin)))
19770 (add-installed-pythonpath inputs outputs)
19771 (invoke "pytest" "-vv" "tests/unit/"
19772 "-k" "not test_gitignore" ;requires git
19773 "--ignore=tests/unit/test_deprecated_finders.py")))))))
19774 (native-inputs
19775 (list python-black
19776 python-colorama
19777 python-hypothesmith
19778 python-libcst-minimal
19779 python-natsort
19780 python-poetry-core
19781 python-pylama
19782 python-pypa-build
19783 python-pytest-mock
19784 python-pytest))
19785 (home-page "https://github.com/PyCQA/isort")
19786 (synopsis "Python utility/library to sort python imports")
19787 (description "@code{python-isort} is a python utility/library to sort
19788 imports alphabetically, and automatically separated into sections. It
19789 provides a command line utility, a python library and plugins for various
19790 editors.")
19791 (license license:expat)))
19792
19793 (define-public python-configparser
19794 (package
19795 (name "python-configparser")
19796 (version "4.0.2")
19797 (source
19798 (origin
19799 (method url-fetch)
19800 (uri (pypi-uri "configparser" version))
19801 (sha256
19802 (base32
19803 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
19804 (native-inputs
19805 (list python-setuptools-scm))
19806 (build-system python-build-system)
19807 (home-page "https://github.com/jaraco/configparser/")
19808 (synopsis "Backport of configparser from python 3.5")
19809 (description "@code{python-configparser} is a backport of
19810 @code{configparser} from Python 3.5 so that it can be used directly
19811 in other versions.")
19812 (license license:expat)))
19813
19814 (define-public python-iniconfig
19815 (package
19816 (name "python-iniconfig")
19817 (version "1.1.1")
19818 (source
19819 (origin
19820 (method url-fetch)
19821 (uri (pypi-uri "iniconfig" version))
19822 (sha256
19823 (base32
19824 "0ckzngs3scaa1mcfmsi1w40a1l8cxxnncscrxzjjwjyisx8z0fmw"))))
19825 (build-system python-build-system)
19826 (home-page "https://github.com/RonnyPfannschmidt/iniconfig")
19827 (synopsis "Simple INI-file parser")
19828 (description "The @code{iniconfig} package provides a small and simple
19829 INI-file parser module having a unique set of features ; @code{iniconfig}
19830 @itemize
19831 @item maintains the order of sections and entries ;
19832 @item supports multi-line values with or without line-continuations ;
19833 @item supports \"#\" comments everywhere ;
19834 @item raises errors with proper line-numbers ;
19835 @item raises an error when two sections have the same name.
19836 @end itemize")
19837 (license license:expat)))
19838
19839 (define-public python-mamba
19840 (package
19841 (name "python-mamba")
19842 (version "0.11.2")
19843 (source (origin
19844 (method url-fetch)
19845 (uri (pypi-uri "mamba" version))
19846 (sha256
19847 (base32
19848 "15m4dpnpv9m60pdaygvwgi43fwqaivs3qxfxhspwrp47sbgwdkvm"))))
19849 (build-system python-build-system)
19850 (arguments `(#:tests? #f)) ; No test
19851 (propagated-inputs
19852 (list python-clint python-coverage))
19853 (home-page "https://nestorsalceda.com/mamba/")
19854 (synopsis "Test runner for Python")
19855 (description
19856 "Mamba is a Behaviour-Driven Development tool for Python developers.
19857 Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
19858 (license license:expat)))
19859
19860 (define-public python-mando
19861 (package
19862 (name "python-mando")
19863 (version "0.7.1")
19864 (source (origin
19865 (method url-fetch)
19866 (uri (pypi-uri "mando" version))
19867 (sha256
19868 (base32
19869 "001mikga36i811pbc95rb45m2kzivkx4xb0fn3pzl4xnnjcskfhq"))))
19870 (build-system python-build-system)
19871 (arguments
19872 (list #:phases
19873 #~(modify-phases %standard-phases
19874 (replace 'check
19875 (lambda* (#:key tests? #:allow-other-keys)
19876 (when tests?
19877 (invoke "pytest" "-vv")))))))
19878 (propagated-inputs
19879 (list python-rst2ansi python-six))
19880 (native-inputs
19881 (list python-pytest))
19882 (home-page "https://mando.readthedocs.org/")
19883 (synopsis
19884 "Wrapper around argparse, allowing creation of complete CLI applications")
19885 (description
19886 "This package is a wrapper around argparse, allowing you to write complete CLI
19887 applications in seconds while maintaining all the flexibility.")
19888 (license license:expat)))
19889
19890 (define-public python-mwclient
19891 (package
19892 (name "python-mwclient")
19893 (version "0.10.1")
19894 (source
19895 (origin
19896 (method git-fetch)
19897 ;; The PyPI version wouldn't contain tests.
19898 (uri (git-reference
19899 (url "https://github.com/mwclient/mwclient")
19900 (commit (string-append "v" version))))
19901 (file-name (git-file-name name version))
19902 (sha256
19903 (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
19904 (build-system python-build-system)
19905 (propagated-inputs
19906 (list python-requests-oauthlib python-six))
19907 (native-inputs
19908 (list python-mock python-pytest python-pytest-cov
19909 python-pytest-runner python-responses))
19910 (home-page "https://github.com/btongminh/mwclient")
19911 (synopsis "MediaWiki API client")
19912 (description "This package provides a MediaWiki API client.")
19913 (license license:expat)))
19914
19915 (define-public python-kneed
19916 (package
19917 (name "python-kneed")
19918 (version "0.7.0")
19919 (source
19920 (origin
19921 (method url-fetch)
19922 (uri (pypi-uri "kneed" version))
19923 (sha256
19924 (base32 "0vkwi0pr7nfkp3c46hnmx0275yx68v96v10rmspv0wis33x6f39l"))))
19925 (build-system python-build-system)
19926 (propagated-inputs
19927 (list python-matplotlib python-numpy python-scipy))
19928 (home-page "https://github.com/arvkevi/kneed")
19929 (synopsis "Knee-point detection in Python")
19930 (description "This package implements the kneedle algorithm. Given a set
19931 of x and y values, kneed will return the knee point of the function. The knee
19932 point is the point of maximum curvature.")
19933 (license license:bsd-3)))
19934
19935 (define-public python-utils
19936 (package
19937 (name "python-utils")
19938 (version "2.4.0")
19939 (source (origin
19940 (method url-fetch)
19941 (uri (pypi-uri "python-utils" version))
19942 (sha256
19943 (base32
19944 "12c0glzkm81ljgf6pwh0d4rmdm1r7vvgg3ifzp8yp9cfyngw07zj"))))
19945 (build-system python-build-system)
19946 (arguments
19947 `(#:phases
19948 (modify-phases %standard-phases
19949 (replace 'check
19950 (lambda* (#:key inputs outputs #:allow-other-keys)
19951 (add-installed-pythonpath inputs outputs)
19952 (delete-file "pytest.ini")
19953 (invoke "pytest" "-vv"))))))
19954 (native-inputs
19955 `(("pytest-runner" ,python-pytest-runner)
19956 ("pytest" ,python-pytest)
19957 ("six" ,python-six)))
19958 (home-page "https://github.com/WoLpH/python-utils")
19959 (synopsis "Convenient utilities not included with the standard Python install")
19960 (description
19961 "Python Utils is a collection of small Python functions and classes which
19962 make common patterns shorter and easier.")
19963 (license license:bsd-2)))
19964
19965 (define-public python-diff-match-patch
19966 (package
19967 (name "python-diff-match-patch")
19968 (version "20121119")
19969 (source
19970 (origin
19971 (method url-fetch)
19972 (uri (pypi-uri "diff-match-patch" version))
19973 (sha256
19974 (base32
19975 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
19976 (build-system python-build-system)
19977 (home-page "https://code.google.com/p/google-diff-match-patch")
19978 (synopsis "Synchronize plain text")
19979 (description "Diff Match and Patch libraries offer robust algorithms to
19980 perform the operations required for synchronizing plain text.")
19981 (license license:asl2.0)))
19982
19983 (define-public python-icdiff
19984 (package
19985 (name "python-icdiff")
19986 (version "2.0.5")
19987 (source (origin
19988 (method git-fetch)
19989 (uri (git-reference
19990 (url "https://github.com/jeffkaufman/icdiff")
19991 (commit (string-append "release-" version))))
19992 (file-name (git-file-name name version))
19993 (sha256
19994 (base32
19995 "14gr9j2h7sfw47pwfzspm4zinywhqmzm4a0qz5c2k9wbixz120a4"))))
19996 (build-system python-build-system)
19997 (home-page "https://www.jefftk.com/icdiff")
19998 (synopsis "Improved colored diff")
19999 (description "This package provides colored diff functions that highlight
20000 parts of the lines that were modified.")
20001 (license license:psfl)))
20002
20003 (define-public python-dirsync
20004 (package
20005 (name "python-dirsync")
20006 (version "2.2.5")
20007 (source
20008 (origin
20009 (method url-fetch)
20010 (uri (pypi-uri "dirsync" version))
20011 (sha256
20012 (base32
20013 "1gm82jddm1lkazdi8lfsl1b3vi1z0252ng60mzjym8irnv94qfhy"))))
20014 (build-system python-build-system)
20015 (propagated-inputs
20016 (list python-six))
20017 (home-page "https://github.com/tkhyn/dirsync")
20018 (synopsis "Advanced directory tree synchronisation tool")
20019 (description "Advanced directory tree synchronisation tool.")
20020 (license license:expat)))
20021
20022 (define-public python-levenshtein
20023 (package
20024 (name "python-levenshtein")
20025 (version "0.12.2")
20026 (source
20027 (origin
20028 (method url-fetch)
20029 (uri (pypi-uri "python-Levenshtein" version))
20030 (sha256
20031 (base32
20032 "1xj60gymwx1jl2ra9razx2wk8nb9cv1i7l8d14qsp8a8s7xra8yw"))))
20033 (build-system python-build-system)
20034 (home-page "https://github.com/ztane/python-Levenshtein")
20035 (synopsis "Fast computation of Levenshtein distance and string similarity")
20036 (description
20037 "The Levenshtein Python C extension module contains functions for fast computation of
20038 @enumerate
20039 @item Levenshtein (edit) distance, and edit operations
20040 @item string similarity
20041 @item approximate median strings, and generally string averaging
20042 @item string sequence and set similarity
20043 @end enumerate
20044 It supports both normal and Unicode strings.")
20045 (license license:gpl2+)))
20046
20047 (define-public python-scandir
20048 (package
20049 (name "python-scandir")
20050 (version "1.10.0")
20051 (source
20052 (origin
20053 (method url-fetch)
20054 (uri (pypi-uri "scandir" version))
20055 (sha256
20056 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
20057 (build-system python-build-system)
20058 (arguments
20059 `(#:phases (modify-phases %standard-phases
20060 (replace 'check
20061 (lambda _
20062 (invoke "python" "test/run_tests.py"))))))
20063 (home-page "https://github.com/benhoyt/scandir")
20064 (synopsis "Directory iteration function")
20065 (description
20066 "Directory iteration function like os.listdir(), except that instead of
20067 returning a list of bare filenames, it yields DirEntry objects that include
20068 file type and stat information along with the name. Using scandir() increases
20069 the speed of os.walk() by 2-20 times (depending on the platform and file
20070 system) by avoiding unnecessary calls to os.stat() in most cases.
20071
20072 This package is part of the Python standard library since version 3.5.")
20073 (license license:bsd-3)))
20074
20075 (define-public python-factory-boy
20076 (package
20077 (name "python-factory-boy")
20078 (version "3.2.1")
20079 (source
20080 (origin
20081 (method url-fetch)
20082 (uri (pypi-uri "factory_boy" version))
20083 (sha256
20084 (base32 "0pm5lbvnwm0kg5i6z611rg907yw1gy551f2advmpaz041ixjg3d9"))))
20085 (build-system python-build-system)
20086 (arguments
20087 ;; Tests are not included in the tarball.
20088 `(#:tests? #f))
20089 (propagated-inputs (list python-faker))
20090 (home-page "https://github.com/benhoyt/scandir")
20091 (synopsis "Versatile test fixtures replacement")
20092 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
20093 factory_girl. As a fixtures replacement tool, it aims to replace static, hard
20094 to maintain fixtures with easy-to-use factories for complex object. Instead
20095 of building an exhaustive test setup with every possible combination of corner
20096 cases, factory_boy allows you to use objects customized for the current test,
20097 while only declaring the test-specific fields.")
20098 (license license:expat)))
20099
20100 (define-public python-translate-toolkit
20101 (package
20102 (name "python-translate-toolkit")
20103 (version "3.6.2")
20104 (source
20105 (origin
20106 (method url-fetch)
20107 (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
20108 (sha256
20109 (base32 "0m4cpsp7x7h5m5agg4ybscf7y86wla46q2lvxpi2myplb6qlgcli"))))
20110 (build-system python-build-system)
20111 (native-inputs
20112 (list python-pytest python-sphinx))
20113 (propagated-inputs
20114 (list python-babel
20115 python-beautifulsoup4
20116 python-chardet
20117 python-diff-match-patch
20118 python-levenshtein
20119 python-lxml
20120 python-six
20121 python-vobject
20122 python-pyyaml))
20123 (arguments
20124 ;; TODO: tests are not run, because they end with
20125 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
20126 ;; 'parse_funcs'
20127 ;; during test setup.
20128 (list #:tests? #f
20129 #:phases
20130 #~(modify-phases %standard-phases
20131 ;; translate-toolkit has many optional dependencies (see
20132 ;; optional.txt), which the sanity check does not understand.
20133 (delete 'sanity-check))))
20134 (home-page "https://toolkit.translatehouse.org")
20135 (synopsis "Tools and API for translation and localization engineering")
20136 (description
20137 "Tools and API for translation and localization engineering. It contains
20138 several utilities, as well as an API for building localization tools.")
20139 (license license:gpl2+)))
20140
20141
20142 (define-public python-packaging
20143 (package/inherit python-packaging-bootstrap
20144 (name "python-packaging")
20145 (arguments
20146 `(#:phases (modify-phases %standard-phases
20147 (replace 'check
20148 (lambda* (#:key tests? #:allow-other-keys)
20149 (if tests?
20150 (invoke "pytest" "-vv")
20151 (format #t "test suite not run~%")))))))
20152 (native-inputs
20153 `(("python-pretend" ,python-pretend)
20154 ("python-pytest" ,python-pytest)))
20155 (propagated-inputs
20156 `(("python-pyparsing" ,python-pyparsing)
20157 ("python-six" ,python-six)))
20158 (home-page "https://github.com/pypa/packaging")
20159 (synopsis "Core utilities for Python packages")
20160 (description "Packaging is a Python module for dealing with Python packages.
20161 It offers an interface for working with package versions, names, and dependency
20162 information.")
20163 ;; From 'LICENSE': This software is made available under the terms of
20164 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
20165 ;; Contributions to this software is made under the terms of *both* these
20166 ;; licenses.
20167 (license (list license:asl2.0 license:bsd-2))))
20168
20169 ;; TODO(staging): merge with python-packaging-bootstrap.
20170 (define-public python-packaging-next
20171 (package
20172 (inherit python-packaging)
20173 (version "21.3")
20174 (source
20175 (origin
20176 (method url-fetch)
20177 (uri (pypi-uri "packaging" version))
20178 (sha256
20179 (base32
20180 "1sygirdrqgv4f1ckh9nhpcw1yfidrh3qjl86wq8vk6nq4wlw8iyx"))))))
20181
20182 (define-public python-relatorio
20183 (package
20184 (name "python-relatorio")
20185 (version "0.10.0")
20186 (source
20187 (origin
20188 (method url-fetch)
20189 (uri (pypi-uri "relatorio" version))
20190 (sha256
20191 (base32
20192 "09nhrz80dfm60nssbvjgz4czzy4yzfa8gxczcdlzbgcnnvm914vb"))))
20193 (build-system python-build-system)
20194 (propagated-inputs
20195 (list python-lxml python-genshi))
20196 (native-inputs
20197 (list python-magic))
20198 (home-page "https://relatorio.tryton.org/")
20199 (synopsis "Templating library able to output ODT and PDF files")
20200 (description "Relatorio is a templating library which provides a way to
20201 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
20202 for more filetypes can be easily added by creating plugins for them.")
20203 (license license:gpl3+)))
20204
20205 (define-public python-radon
20206 (package
20207 (name "python-radon")
20208 (version "5.1.0")
20209 (source
20210 (origin
20211 (method url-fetch)
20212 (uri (pypi-uri "radon" version))
20213 (sha256
20214 (base32
20215 "1vmf56zsf3paa1jadjcjghiv2kxwiismyayq42ggnqpqwm98f7fb"))))
20216 (build-system python-build-system)
20217 (arguments
20218 `(#:phases (modify-phases %standard-phases
20219 (add-after 'unpack 'relax-requirements
20220 (lambda _
20221 (substitute* "setup.py"
20222 ((".*'future'.*")
20223 "")
20224 (("mando>=0\\.6,<0\\.7")
20225 "mando>=0.6")
20226 (("colorama==0.4.1")
20227 "colorama>=0.4.1"))))
20228 (replace 'check
20229 (lambda _
20230 (invoke "python" "radon/tests/run.py"))))))
20231 (propagated-inputs (list python-colorama python-mando))
20232 (native-inputs (list python-pytest python-pytest-mock))
20233 (home-page "https://radon.readthedocs.org/")
20234 (synopsis "Code Metrics in Python")
20235 (description "Radon is a Python tool which computes various code metrics.
20236 Supported metrics are:
20237 @itemize @bullet
20238 @item raw metrics: SLOC, comment lines, blank lines, &c.
20239 @item Cyclomatic Complexity (i.e., McCabe’s Complexity)
20240 @item Halstead metrics (all of them)
20241 @item the Maintainability Index (a Visual Studio metric)
20242 @end itemize")
20243 (license license:expat)))
20244
20245 (define-public python-sure
20246 (package
20247 (name "python-sure")
20248 (version "1.4.11")
20249 (source
20250 (origin
20251 (method url-fetch)
20252 (uri (pypi-uri "sure" version))
20253 (sha256
20254 (base32
20255 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
20256 (build-system python-build-system)
20257 (propagated-inputs
20258 (list python-mock python-six))
20259 (native-inputs
20260 (list python-nose))
20261 (home-page "https://github.com/gabrielfalcao/sure")
20262 (synopsis "Automated testing library in python for python")
20263 (description
20264 "Sure is a python library that leverages a DSL for writing assertions.
20265 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
20266 (license license:gpl3+)))
20267
20268 (define-public python-misaka
20269 (package
20270 (name "python-misaka")
20271 (version "2.1.1")
20272 (source
20273 (origin
20274 (method url-fetch)
20275 (uri (pypi-uri "misaka" version))
20276 (sha256
20277 (base32
20278 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
20279 (build-system python-build-system)
20280 (arguments
20281 `(;; Line 37 of setup.py calls self.run_command('develop')
20282 ;; in the 'check' phase. This command seems to be trying
20283 ;; to write to
20284 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
20285 ;; for which it does not have the permission to write.
20286 #:tests? #f))
20287 (propagated-inputs
20288 (list python-cffi))
20289 (home-page "https://github.com/FSX/misaka")
20290 (synopsis "Python binding for Hoedown")
20291 (description
20292 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
20293 library written in C. It features a fast HTML renderer and functionality to make custom
20294 renderers (e.g. man pages or LaTeX).")
20295 (license license:expat)))
20296
20297 (define-public python-jsonpointer
20298 (package
20299 (name "python-jsonpointer")
20300 (version "1.10")
20301 (source
20302 (origin
20303 (method url-fetch)
20304 (uri (pypi-uri "jsonpointer" version))
20305 (sha256
20306 (base32
20307 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
20308 (build-system python-build-system)
20309 (home-page "https://github.com/stefankoegl/python-json-pointer")
20310 (synopsis "Identify specific nodes in a JSON document")
20311 (description "@code{jsonpointer} allows you to access specific nodes
20312 by path in a JSON document (see RFC 6901).")
20313 (license license:bsd-3)))
20314
20315 (define-public python-jsonpatch
20316 (package
20317 (name "python-jsonpatch")
20318 (version "1.16")
20319 (source
20320 (origin
20321 (method git-fetch)
20322 ;; pypi version lacks tests.js
20323 (uri (git-reference
20324 (url "https://github.com/stefankoegl/python-json-patch")
20325 (commit (string-append "v" version))))
20326 (file-name (git-file-name name version))
20327 (sha256
20328 (base32
20329 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
20330 (build-system python-build-system)
20331 (propagated-inputs
20332 (list python-jsonpointer))
20333 (home-page "https://github.com/stefankoegl/python-json-patch")
20334 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
20335 (description "@code{jsonpatch} is a library and program that allows
20336 applying JSON Patches according to RFC 6902.")
20337 (license license:bsd-3)))
20338
20339 (define-public python-jsonpatch-0.4
20340 (package (inherit python-jsonpatch)
20341 (name "python-jsonpatch")
20342 (version "0.4")
20343 (source
20344 (origin
20345 (method git-fetch)
20346 (uri (git-reference
20347 (url "https://github.com/stefankoegl/python-json-patch")
20348 (commit (string-append "v" version))))
20349 (file-name (git-file-name name version))
20350 (sha256
20351 (base32
20352 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
20353
20354 (define-public python-rfc3986
20355 (package
20356 (name "python-rfc3986")
20357 (version "1.4.0")
20358 (source (origin
20359 (method url-fetch)
20360 (uri (pypi-uri "rfc3986" version))
20361 (sha256
20362 (base32
20363 "17dvx15m3r49bmif5zlli8kzjd6bys6psixzbp14sd5367d9h8qi"))))
20364 (build-system python-build-system)
20365 (arguments
20366 `(#:phases
20367 (modify-phases %standard-phases
20368 (replace 'check
20369 (lambda _
20370 (invoke "pytest" "-v"))))))
20371 (native-inputs
20372 (list python-pytest))
20373 (home-page "https://rfc3986.readthedocs.io/")
20374 (synopsis "Parse and validate URI references")
20375 (description
20376 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
20377 validation and authority parsing. This module also supports RFC@tie{}6874
20378 which adds support for zone identifiers to IPv6 addresses.")
20379 (license license:asl2.0)))
20380
20381 (define-public python-rfc3987
20382 (package
20383 (name "python-rfc3987")
20384 (version "1.3.7")
20385 (source
20386 (origin
20387 (method url-fetch)
20388 (uri (pypi-uri "rfc3987" version))
20389 (sha256
20390 (base32
20391 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
20392 (build-system python-build-system)
20393 (home-page "https://pypi.org/project/rfc3987/")
20394 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
20395 (description "@code{rfc3987} provides routines for parsing and
20396 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
20397 (license license:gpl3+)))
20398
20399 ;; The latest commit contains fixes for building with both python3 and python2.
20400 (define-public python-rfc6555
20401 (let ((commit "1a181b432312731f6742a5eb558dae4761d32361")
20402 (revision "1"))
20403 (package
20404 (name "python-rfc6555")
20405 (version (git-version "0.0.0" revision commit))
20406 (source (origin
20407 (method git-fetch)
20408 (uri (git-reference
20409 (url "https://github.com/sethmlarson/rfc6555")
20410 (commit commit)))
20411 (file-name (git-file-name name version))
20412 (sha256
20413 (base32
20414 "1bxl17j9vs69cshcqnlwamr03hnykxqnwz3mdgi6x3s2k4q18npp"))))
20415 (build-system python-build-system)
20416 (arguments
20417 '(#:phases
20418 (modify-phases %standard-phases
20419 (replace 'check
20420 (lambda* (#:key tests? #:allow-other-keys)
20421 (if tests?
20422 ;; Other tests require network access.
20423 (invoke "pytest" "tests/test_ipv6.py")
20424 #t))))))
20425 (native-inputs
20426 (list python-pytest))
20427 (home-page "https://pypi.org/project/rfc6555/")
20428 (synopsis "Python implementation of RFC 6555")
20429 (description
20430 "Python implementation of the Happy Eyeballs Algorithm described in RFC
20431 6555. Provided with a single file and dead-simple API to allow easy vendoring
20432 and integration into other projects.")
20433 (license license:asl2.0))))
20434
20435 (define-public python-bagit
20436 (package
20437 (name "python-bagit")
20438 (version "1.7.0")
20439 (source
20440 (origin
20441 (method url-fetch)
20442 (uri (pypi-uri "bagit" version))
20443 (sha256
20444 (base32
20445 "1m6y04qmig0b5hzb35lnaw3d2yfydb7alyr1579yblvgs3da6j7j"))))
20446 (build-system python-build-system)
20447 (native-inputs
20448 (list python-setuptools-scm python-coverage python-mock))
20449 (home-page "https://libraryofcongress.github.io/bagit-python/")
20450 (synopsis "Create and validate BagIt packages")
20451 (description "Bagit is a Python library and command line utility for working
20452 with BagIt style packages. BagIt is a minimalist packaging format for digital
20453 preservation.")
20454 (license license:cc0)))
20455
20456 (define-public python-prov
20457 (package
20458 (name "python-prov")
20459 (version "2.0.0")
20460 (source
20461 (origin
20462 (method url-fetch)
20463 (uri (pypi-uri "prov" version))
20464 (sha256
20465 (base32
20466 "1vi2fj31vygfcqrkimdmk52q2ldw08g9fn4v4zlgdfgcjlhqyhxn"))))
20467 (build-system python-build-system)
20468 (propagated-inputs
20469 (list python-dateutil python-lxml python-networkx python-rdflib-5))
20470 (native-inputs
20471 (list graphviz python-pydot))
20472 (home-page "https://github.com/trungdong/prov")
20473 (synopsis
20474 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
20475 (description
20476 "This package provides a library for W3C Provenance Data Model supporting
20477 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
20478 (license license:expat)))
20479
20480 (define-public python-arcp
20481 (package
20482 (name "python-arcp")
20483 (version "0.2.1")
20484 (source
20485 (origin
20486 (method url-fetch)
20487 (uri (pypi-uri "arcp" version))
20488 (sha256
20489 (base32
20490 "1p8mfyjssa6pbn5dp6pyzv9yy6kwm2rz5jn2kjbq5vy9f9wsq5sw"))))
20491 (build-system python-build-system)
20492 (native-inputs
20493 (list python-pytest))
20494 (home-page "http://arcp.readthedocs.io/")
20495 (synopsis
20496 "Archive and Package URI parser and generator")
20497 (description
20498 "@acronym{arcp, Archive and Package} provides functions for creating
20499 @code{arcp_} URIs, which can be used for identifying or parsing hypermedia files
20500 packaged in an archive or package, like a ZIP file. arcp URIs can be used to
20501 consume or reference hypermedia resources bundled inside a file archive or an
20502 application package, as well as to resolve URIs for archive resources within a
20503 programmatic framework. This URI scheme provides mechanisms to generate a
20504 unique base URI to represent the root of the archive, so that relative URI
20505 references in a bundled resource can be resolved within the archive without
20506 having to extract the archive content on the local file system. An arcp URI can
20507 be used for purposes of isolation (e.g. when consuming multiple archives),
20508 security constraints (avoiding \"climb out\" from the archive), or for
20509 externally identiyfing sub-resources referenced by hypermedia formats.")
20510 (license license:asl2.0)))
20511
20512 (define-public python-shellescape
20513 (package
20514 (name "python-shellescape")
20515 (version "3.8.1")
20516 (source
20517 (origin
20518 (method git-fetch)
20519 (uri (git-reference
20520 (url "https://github.com/chrissimpkins/shellescape")
20521 (commit (string-append "v" version))))
20522 (file-name (git-file-name name version))
20523 (sha256
20524 (base32
20525 "0wzccxk139qx1lb2g70f5b2yh9zq15nr2mgvqdbfabg5zm0vf1qw"))))
20526 (build-system python-build-system)
20527 (arguments
20528 '(#:phases
20529 (modify-phases %standard-phases
20530 (replace 'check
20531 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
20532 (when tests?
20533 (add-installed-pythonpath inputs outputs)
20534 (invoke "python" "tests/test_shellescape.py"))
20535 #t)))))
20536 (native-inputs
20537 (list python-pytest))
20538 (home-page "https://github.com/chrissimpkins/shellescape")
20539 (synopsis
20540 "Shell escape a string to safely use it as a token in a shell command")
20541 (description
20542 "The shellescape Python module defines the @code{shellescape.quote()}
20543 function that returns a shell-escaped version of a Python string. This is a
20544 backport of the @code{shlex.quote()} function from Python 3.8 that makes it
20545 accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
20546 (license license:expat)))
20547
20548 (define-public python-validators
20549 (package
20550 (name "python-validators")
20551 (version "0.18.2")
20552 (source (origin
20553 (method url-fetch)
20554 (uri (pypi-uri "validators" version))
20555 (sha256
20556 (base32
20557 "19lypf7hm7p203ay3v8zmckc5rv6889zkfdm16nki1972f99mk9p"))))
20558 (build-system python-build-system)
20559 (arguments
20560 '(#:phases (modify-phases %standard-phases
20561 (replace 'check
20562 (lambda _
20563 (invoke "pytest" "-vv"))))))
20564 (propagated-inputs
20565 (list python-decorator python-six))
20566 (native-inputs
20567 (list python-flake8 python-isort python-pytest))
20568 (home-page "https://github.com/kvesteri/validators")
20569 (synopsis "Data validation library")
20570 (description
20571 "This package contains validators for different things such as email
20572 addresses, IP addresses, URLs, hashes and more. It has been designed to
20573 be easy to use and not require defining a schema or form just to validate
20574 some input.")
20575 (license license:expat)))
20576
20577 (define-public python-validate-email
20578 (package
20579 (name "python-validate-email")
20580 (version "1.3")
20581 (source
20582 (origin
20583 (method url-fetch)
20584 (uri (pypi-uri "validate_email" version))
20585 (sha256
20586 (base32
20587 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
20588 (build-system python-build-system)
20589 (home-page "https://github.com/syrusakbary/validate_email")
20590 (synopsis "Verifies if an email address is valid and really exists")
20591 (description "@code{validate_email} can be used to verify if an email
20592 address is valid and really exists.")
20593 (license license:lgpl3+)))
20594
20595 (define-public python-flex
20596 (package
20597 (name "python-flex")
20598 (version "6.10.0")
20599 (source
20600 (origin
20601 (method url-fetch)
20602 (uri (pypi-uri "flex" version))
20603 (sha256
20604 (base32
20605 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
20606 (build-system python-build-system)
20607 (propagated-inputs
20608 (list python-click
20609 python-iso8601
20610 python-jsonpointer
20611 python-pyyaml
20612 python-requests
20613 python-rfc3987
20614 python-six
20615 python-validate-email))
20616 (home-page "https://github.com/pipermerriam/flex")
20617 (synopsis "Validates Swagger schemata")
20618 (description "@code{flex} can be used to validate Swagger schemata.")
20619 (license license:bsd-3)))
20620
20621 (define-public python-marshmallow
20622 (package
20623 (name "python-marshmallow")
20624 (version "3.9.1")
20625 (source
20626 (origin
20627 (method url-fetch)
20628 (uri (pypi-uri "marshmallow" version))
20629 (sha256
20630 (base32
20631 "0kizhh3mnhpa08wfnsv1gagy22bpxzxszgbiylkhpz1d8qvwrykk"))))
20632 (build-system python-build-system)
20633 (propagated-inputs
20634 (list python-dateutil python-simplejson))
20635 (native-inputs
20636 (list python-pytest python-pytz))
20637 (home-page "https://github.com/marshmallow-code/marshmallow")
20638 (synopsis "Convert complex datatypes to and from native
20639 Python datatypes")
20640 (description "@code{marshmallow} provides a library for converting
20641 complex datatypes to and from native Python datatypes.")
20642 (license license:expat)))
20643
20644 (define-public python-marshmallow-jsonapi
20645 (package
20646 (name "python-marshmallow-jsonapi")
20647 (version "0.24.0")
20648 (source
20649 (origin
20650 (method url-fetch)
20651 (uri (pypi-uri "marshmallow-jsonapi" version))
20652 (sha256
20653 (base32 "1d9pxcgmln4gls99vwj1h24qv0lz7fb2jqmqrsiv1pid1snc125x"))))
20654 (build-system python-build-system)
20655 (propagated-inputs
20656 (list python-marshmallow))
20657 (native-inputs
20658 (list python-faker
20659 python-flake8
20660 python-flake8-bugbear
20661 python-flask
20662 python-mock
20663 python-pre-commit
20664 python-pytest
20665 python-tox))
20666 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
20667 (synopsis "JSON:API 1.0 formatting with Marshmallow")
20668 (description
20669 "The marshmallow-jsonapi package provides a simple way to produce
20670 @uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web framework.
20671 It includes optional utilities to integrate with Flask.")
20672 (license license:expat)))
20673
20674 (define-public python-apispec
20675 (package
20676 (name "python-apispec")
20677 (version "4.0.0")
20678 (source
20679 (origin
20680 (method url-fetch)
20681 (uri (pypi-uri "apispec" version))
20682 (sha256
20683 (base32
20684 "12n4w5zkn4drcn8izq68vmixmqvz6abviqkdn4ip0kaax3jjh3in"))))
20685 (build-system python-build-system)
20686 (arguments
20687 '(#:phases (modify-phases %standard-phases
20688 (replace 'check
20689 (lambda _
20690 (invoke "pytest" "-vv"
20691 ;; Disable validation tests since they require
20692 ;; the optional 'prance' library which is not
20693 ;; yet in Guix.
20694 "-k" "not openapi_tools_validate"))))))
20695 (propagated-inputs
20696 (list python-pyyaml))
20697 (native-inputs
20698 (list python-pytest python-marshmallow))
20699 (home-page "https://github.com/marshmallow-code/apispec")
20700 (synopsis "Swagger/OpenAPI specification generator")
20701 (description "@code{python-apispec} is a pluggable API specification
20702 generator. It currently supports the OpenAPI specification, formerly known
20703 as Swagger.")
20704 (license license:expat)))
20705
20706 (define-public python-flasgger
20707 (package
20708 (name "python-flasgger")
20709 (version "0.6.3")
20710 (source
20711 (origin
20712 (method git-fetch)
20713 (uri (git-reference
20714 (url "https://github.com/rochacbruno/flasgger")
20715 (commit version)))
20716 (file-name (git-file-name name version))
20717 (sha256
20718 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
20719 (build-system python-build-system)
20720 (arguments
20721 `(#:phases
20722 (modify-phases %standard-phases
20723 (replace 'check
20724 (lambda* (#:key inputs outputs #:allow-other-keys)
20725 (substitute* "Makefile"
20726 (("flake8 flasgger --ignore=F403")
20727 "flake8 flasgger --ignore=E731,F403"))
20728 (invoke "py.test"))))))
20729 (propagated-inputs
20730 (list python-flask python-pyyaml python-jsonschema python-mistune
20731 python-six))
20732 (native-inputs
20733 (list python-decorator
20734 python-flake8
20735 python-flask-restful
20736 python-flex
20737 python-pytest
20738 python-pytest-cov
20739 python-marshmallow
20740 python-apispec))
20741 (home-page "https://github.com/rochacbruno/flasgger/")
20742 (synopsis "Extract Swagger specs from your Flask project")
20743 (description "@code{python-flasgger} allows extracting Swagger specs
20744 from your Flask project. It is a fork of Flask-Swagger.")
20745 (license license:expat)))
20746
20747 (define-public python-swagger-spec-validator
20748 (package
20749 (name "python-swagger-spec-validator")
20750 (version "2.4.3")
20751 (source
20752 (origin
20753 (method url-fetch)
20754 (uri (pypi-uri "swagger-spec-validator" version))
20755 (sha256
20756 (base32
20757 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
20758 (build-system python-build-system)
20759 (propagated-inputs
20760 (list python-jsonschema python-pyyaml python-six))
20761 (home-page
20762 "https://github.com/Yelp/swagger_spec_validator")
20763 (synopsis "Validation of Swagger specifications")
20764 (description "@code{swagger_spec_validator} provides a library for
20765 validating Swagger API specifications.")
20766 (license license:asl2.0)))
20767
20768 (define-public python-apache-libcloud
20769 (package
20770 (name "python-apache-libcloud")
20771 (version "3.1.0")
20772 (source
20773 (origin
20774 (method url-fetch)
20775 (uri (pypi-uri "apache-libcloud" version))
20776 (sha256
20777 (base32
20778 "1b28j265kvibgxrgxx0gwfm6cmv252c8ph1j2vb0cpms8ph5if5v"))))
20779 (build-system python-build-system)
20780 (arguments
20781 '(#:phases
20782 (modify-phases %standard-phases
20783 (add-after 'unpack 'patch-ssh
20784 (lambda* (#:key inputs #:allow-other-keys)
20785 (substitute* "libcloud/compute/ssh.py"
20786 (("'ssh'")
20787 (string-append "'" (search-input-file inputs "/bin/ssh")
20788 "'")))))
20789 (add-after 'unpack 'patch-tests
20790 (lambda _
20791 (substitute* "libcloud/test/compute/test_ssh_client.py"
20792 (("^class ShellOutSSHClientTests")
20793 "@unittest.skip(\"Guix container doesn't have ssh service\")
20794 class ShellOutSSHClientTests"))))
20795 (add-before 'check 'copy-secret
20796 (lambda _
20797 (copy-file "libcloud/test/secrets.py-dist"
20798 "libcloud/test/secrets.py"))))))
20799 (inputs
20800 (list openssh))
20801 (propagated-inputs
20802 (list python-paramiko python-requests))
20803 (native-inputs
20804 (list python-lockfile python-mock python-pytest python-pytest-runner
20805 python-requests-mock))
20806 (home-page "https://libcloud.apache.org/")
20807 (synopsis "Unified Cloud API")
20808 (description "@code{libcloud} is a Python library for interacting with
20809 many of the popular cloud service providers using a unified API.")
20810 (license license:asl2.0)))
20811
20812 (define-public python-smmap
20813 (package
20814 (name "python-smmap")
20815 (version "3.0.1")
20816 (source
20817 (origin
20818 (method url-fetch)
20819 (uri (pypi-uri "smmap" version))
20820 (sha256
20821 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
20822 (build-system python-build-system)
20823 (native-inputs
20824 (list python-nosexcover))
20825 (home-page "https://github.com/Byron/smmap")
20826 (synopsis "Python sliding window memory map manager")
20827 (description "@code{smmap} is a pure Python implementation of a sliding
20828 window memory map manager.")
20829 (license license:bsd-3)))
20830
20831 (define-public python-regex
20832 (package
20833 (name "python-regex")
20834 (version "2022.1.18")
20835 (source (origin
20836 (method url-fetch)
20837 (uri (pypi-uri "regex" version))
20838 (sha256
20839 (base32
20840 "05ir92d0cmv8wkafn3r05j5q47l6shg7cpdblp2a8m407b02vwwp"))))
20841 (build-system python-build-system)
20842 (arguments
20843 '(#:phases
20844 (modify-phases %standard-phases
20845 (replace 'check
20846 (lambda* (#:key inputs outputs #:allow-other-keys)
20847 (add-installed-pythonpath inputs outputs)
20848 (invoke "python" "-c"
20849 "from regex.test_regex import test_main ; test_main()"))))))
20850 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
20851 (synopsis "Alternative regular expression module")
20852 (description "This regular expression implementation is backwards-
20853 compatible with the standard @code{re} module, but offers additional
20854 functionality like full case-folding for case-insensitive matches in Unicode.")
20855 (license license:psfl)))
20856
20857 (define-public python-pyopengl
20858 (package
20859 (name "python-pyopengl")
20860 (version "3.1.5")
20861 (source
20862 (origin
20863 (method url-fetch)
20864 (uri (pypi-uri "PyOpenGL" version))
20865 (sha256
20866 (base32
20867 "091lp9bpqi8yf1nmyg19xmvw611lrzq2q94cl1k5gnlh0c6vl1s1"))))
20868 (build-system python-build-system)
20869 (inputs
20870 (list mesa freeglut glu))
20871 (arguments
20872 `(#:tests? #f ; Tests fail: AttributeError: 'GLXPlatform' object has no
20873 ;attribute 'OSMesa'
20874 #:phases
20875 (modify-phases %standard-phases
20876 (add-before 'build 'fix-paths
20877 (lambda* (#:key inputs outputs #:allow-other-keys)
20878 (substitute* '("OpenGL/platform/ctypesloader.py")
20879 (("filenames_to_try = \\[\\]") "filenames_to_try = [name]"))
20880 (substitute* '("OpenGL/platform/glx.py" "tests/check_glut_load.py")
20881 (("'GL'")
20882 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGL.so'"))
20883 (("'GLU'")
20884 (string-append "'" (assoc-ref inputs "glu") "/lib/libGLU.so'"))
20885 (("'glut',")
20886 (string-append "'" (assoc-ref inputs "freeglut") "/lib/libglut.so',"))
20887 (("'GLESv1_CM'")
20888 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv1_CM.so'"))
20889 (("'GLESv2'")
20890 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv2.so'")))
20891 ;; Not providing libgle. It seems to be very old.
20892 #t)))))
20893 (home-page "http://pyopengl.sourceforge.net")
20894 (synopsis "Standard OpenGL bindings for Python")
20895 (description
20896 "PyOpenGL is the most common cross platform Python binding to OpenGL and
20897 related APIs. The binding is created using the standard @code{ctypes}
20898 library.")
20899 (license license:bsd-3)))
20900
20901 (define-public python-pyopengl-accelerate
20902 (package
20903 (inherit python-pyopengl)
20904 (name "python-pyopengl-accelerate")
20905 (version "3.1.5")
20906 (source
20907 (origin
20908 (method url-fetch)
20909 (uri (pypi-uri "PyOpenGL-accelerate" version))
20910 (sha256
20911 (base32
20912 "01iggy5jwxv7lxnj51zbmlbhag9wcb7dvrbwgi97i90n0a5m3r8j"))))
20913 (inputs
20914 (list mesa python-numpy)) ; for cython module
20915 ; numpy_formathandler, thus not propagated
20916 (arguments
20917 `(#:tests? #f
20918 #:phases
20919 (modify-phases %standard-phases
20920 (delete 'fix-paths))))
20921 (synopsis "Acceleration code for PyOpenGL")
20922 (description
20923 "This is the Cython-coded accelerator module for PyOpenGL.")))
20924
20925 (define-public python-rencode
20926 (package
20927 (name "python-rencode")
20928 (version "1.0.5")
20929 (source
20930 (origin
20931 (method url-fetch)
20932 (uri (pypi-uri "rencode" version))
20933 (sha256
20934 (base32
20935 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
20936 (build-system python-build-system)
20937 (arguments
20938 `(#:phases
20939 (modify-phases %standard-phases
20940 (add-before 'check 'delete-bogus-test
20941 ;; This test requires /home/aresch/Downloads, which is not provided by
20942 ;; the build environment.
20943 (lambda _
20944 (delete-file "rencode/t.py")
20945 #t)))))
20946 (native-inputs (list pkg-config python-cython))
20947 (home-page "https://github.com/aresch/rencode")
20948 (synopsis "Serialization of heterogeneous data structures")
20949 (description
20950 "The @code{rencode} module is a data structure serialization library,
20951 similar to @code{bencode} from the BitTorrent project. For complex,
20952 heterogeneous data structures with many small elements, r-encoding stake up
20953 significantly less space than b-encodings. This version of rencode is a
20954 complete rewrite in Cython to attempt to increase the performance over the
20955 pure Python module.")
20956 (license license:bsd-3)))
20957
20958 (define-public python-pysocks
20959 (package
20960 (name "python-pysocks")
20961 (version "1.7.1")
20962 (source
20963 (origin
20964 (method url-fetch)
20965 (uri (pypi-uri "PySocks" version))
20966 (sha256
20967 (base32
20968 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
20969 (build-system python-build-system)
20970 (arguments `(#:tests? #f))
20971 (home-page "https://github.com/Anorov/PySocks")
20972 (synopsis "SOCKS client module")
20973 (description "@code{pysocks} is an updated and semi-actively maintained
20974 version of @code{SocksiPy} with bug fixes and extra features.")
20975 (license license:bsd-3)))
20976
20977 (define-public python-pydiff
20978 (package
20979 (name "python-pydiff")
20980 (version "0.2")
20981 (source
20982 (origin
20983 (method url-fetch)
20984 (uri (pypi-uri "pydiff" version))
20985 (sha256
20986 (base32
20987 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
20988 (build-system python-build-system)
20989 (home-page "https://github.com/myint/pydiff")
20990 (synopsis "Library to diff two Python files at the bytecode level")
20991 (description
20992 "@code{pydiff} makes it easy to look for actual code changes while
20993 ignoring formatting changes.")
20994 (license license:expat)))
20995
20996 (define-public python-pydub
20997 (package
20998 (name "python-pydub")
20999 (version "0.25.1")
21000 (source
21001 (origin
21002 (method url-fetch)
21003 (uri (pypi-uri "pydub" version))
21004 (sha256
21005 (base32
21006 "03ykn2kp6qglsrzqi5h79z5cp3kl9mknasv0d6jv5jj9k77362lq"))))
21007 (build-system python-build-system)
21008 (arguments
21009 `(#:phases
21010 (modify-phases %standard-phases
21011 (add-after 'unpack 'fix-ffmpeg-path
21012 (lambda* (#:key inputs #:allow-other-keys)
21013 (let ((ffmpeg (assoc-ref inputs "ffmpeg")))
21014 (substitute* '("pydub/utils.py")
21015 (("return \"ffmpeg\"")
21016 (string-append "return \"" ffmpeg "/bin/ffmpeg\""))
21017 (("return \"ffplay\"")
21018 (string-append "return \"" ffmpeg "/bin/ffplay\""))
21019 (("return \"ffprobe\"")
21020 (string-append "return \"" ffmpeg "/bin/ffprobe\""))
21021 (("warn\\(\"Couldn't find ff") "# warn\\(\"Couldn't find ff"))
21022 #t))))))
21023 (home-page "https://pydub.com")
21024 (inputs
21025 (list ffmpeg))
21026 (propagated-inputs
21027 (list python-scipy))
21028 (synopsis "Manipulate audio with a high level interface in Python")
21029 (description
21030 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
21031 @code{ffmpeg} to open various audio formats.")
21032 (license license:expat))) ; MIT license
21033
21034 (define-public python-tqdm
21035 (package
21036 (name "python-tqdm")
21037 (version "4.64.1")
21038 (source
21039 (origin
21040 (method url-fetch)
21041 (uri (pypi-uri "tqdm" version))
21042 (sha256
21043 (base32
21044 "1r7i9kswpnrx4ppfvzz6discb04j1rqkqxdwa2sc2la900m6hksz"))))
21045 (build-system python-build-system)
21046 (arguments
21047 '(#:phases (modify-phases %standard-phases
21048 (replace 'check
21049 (lambda _
21050 (invoke "pytest" "-vv"
21051 "-o" "asyncio_mode=auto"
21052 "-k" "not perf"))))))
21053 (native-inputs
21054 (list python-pytest python-pytest-asyncio python-pytest-timeout
21055 python-setuptools-scm python-toml))
21056 (home-page "https://github.com/tqdm/tqdm")
21057 (synopsis "Fast, extensible progress meter")
21058 (description
21059 "Make loops show a progress bar on the console by just wrapping any
21060 iterable with @code{|tqdm(iterable)|}. Offers many options to define
21061 design and layout.")
21062 (license (list license:mpl2.0 license:expat))))
21063
21064 (define-public python-pkginfo
21065 (package
21066 (name "python-pkginfo")
21067 (version "1.8.3")
21068 (source
21069 (origin
21070 (method url-fetch)
21071 (uri (pypi-uri "pkginfo" version))
21072 (sha256
21073 (base32 "0z46w559hrl79gf7navgzimj21ma821wka27jh58fvyqilqs8kd8"))))
21074 (build-system python-build-system)
21075 (native-inputs
21076 (list python-wheel))
21077 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
21078 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
21079 (description
21080 "API to query the distutils metadata written in @file{PKG-INFO} inside a
21081 source distriubtion (an sdist) or a binary distribution (e.g., created by
21082 running bdist_egg). It can also query the EGG-INFO directory of an installed
21083 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
21084 created by running @code{python setup.py develop}).")
21085 (license license:expat)))
21086
21087 (define-public python-twine
21088 (package
21089 (name "python-twine")
21090 (version "1.15.0")
21091 (source
21092 (origin
21093 (method url-fetch)
21094 (uri (pypi-uri "twine" version))
21095 (sha256
21096 (base32 "11rpd653zcgzkq3sgwkzs3mpxl3r5rij59745ni84ikv8smjmlm3"))))
21097 (build-system python-build-system)
21098 (propagated-inputs
21099 (list python-tqdm
21100 python-packaging
21101 python-pkginfo
21102 python-readme-renderer
21103 python-requests
21104 python-requests-toolbelt))
21105 (home-page "https://github.com/pypa/twine")
21106 (synopsis "Collection of utilities for interacting with PyPI")
21107 (description
21108 "@code{twine} currently supports registering projects and uploading
21109 distributions. It authenticates the user over HTTPS, allows them to pre-sign
21110 their files and supports any packaging format (including wheels).")
21111 (license license:asl2.0)))
21112
21113 (define-public python-linecache2
21114 (package
21115 (name "python-linecache2")
21116 (version "1.0.0")
21117 (source
21118 (origin
21119 (method url-fetch)
21120 (uri (pypi-uri "linecache2" version))
21121 (sha256
21122 (base32
21123 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
21124 (build-system python-build-system)
21125 (arguments
21126 `(;; The tests depend on unittest2, and our version is a bit too old.
21127 #:tests? #f))
21128 (native-inputs
21129 `(("python-pbr" ,python-pbr-minimal)))
21130 (home-page
21131 "https://github.com/testing-cabal/linecache2")
21132 (synopsis "Backports of the linecache module")
21133 (description
21134 "The linecache module allows one to get any line from any file, while
21135 attempting to optimize internally, using a cache, the common case where many
21136 lines are read from a single file.")
21137 (license license:psfl)))
21138
21139 (define-public python-traceback2
21140 (package
21141 (name "python-traceback2")
21142 (version "1.4.0")
21143 (source
21144 (origin
21145 (method url-fetch)
21146 (uri (pypi-uri "traceback2" version))
21147 (sha256
21148 (base32
21149 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
21150 (build-system python-build-system)
21151 (arguments
21152 `(;; python-traceback2 and python-unittest2 depend on one another.
21153 #:tests? #f))
21154 (native-inputs
21155 `(("python-pbr" ,python-pbr-minimal)))
21156 (propagated-inputs
21157 (list python-linecache2 python-six))
21158 (home-page
21159 "https://github.com/testing-cabal/traceback2")
21160 (synopsis "Backports of the traceback module")
21161 (description
21162 "This module provides a standard interface to extract, format and print
21163 stack traces of Python programs. It exactly mimics the behavior of the Python
21164 interpreter when it prints a stack trace.")
21165 (license license:psfl)))
21166
21167 (define-public python-ratelimiter
21168 (package
21169 (name "python-ratelimiter")
21170 (version "1.2.0")
21171 (source
21172 (origin
21173 (method url-fetch)
21174 (uri (pypi-uri "ratelimiter" version))
21175 (sha256
21176 (base32
21177 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
21178 (build-system python-build-system)
21179 (arguments
21180 '(#:tests? #f)) ; There are no tests in the pypi archive.
21181 (home-page "https://github.com/RazerM/ratelimiter")
21182 (synopsis "Simple rate limiting object")
21183 (description
21184 "The @code{ratelimiter} module ensures that an operation will not be
21185 executed more than a given number of times during a given period.")
21186 (license license:asl2.0)))
21187
21188 (define-public python-jsonrpclib-pelix
21189 (package
21190 (name "python-jsonrpclib-pelix")
21191 (version "0.3.2")
21192 (source
21193 (origin
21194 (method url-fetch)
21195 (uri (pypi-uri "jsonrpclib-pelix" version))
21196 (sha256
21197 (base32
21198 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
21199 (build-system python-build-system)
21200 (arguments
21201 `(#:tests? #f)) ; no tests in PyPI tarball
21202 (home-page "https://github.com/tcalmant/jsonrpclib/")
21203 (synopsis "JSON-RPC 2.0 client library for Python")
21204 (description
21205 "This library implements the JSON-RPC v2.0
21206 specification (backwards-compatible) as a client library for Python. This
21207 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
21208 services.")
21209 (license license:asl2.0)))
21210
21211 (define-public python-setuptools-scm-git-archive
21212 (package
21213 (name "python-setuptools-scm-git-archive")
21214 (version "1.0")
21215 (source
21216 (origin
21217 (method url-fetch)
21218 (uri (pypi-uri "setuptools_scm_git_archive" version))
21219 (sha256
21220 (base32
21221 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
21222 (build-system python-build-system)
21223 (arguments
21224 '(#:phases (modify-phases %standard-phases
21225 (add-after 'unpack 'dont-install-defunct-egginfo
21226 (lambda _
21227 ;; When a ".git" directory is missing, the setup.py
21228 ;; script invokes setuptools.setup twice, once with
21229 ;; "0" as the version. Prevent that.
21230 (substitute* "setup.py"
21231 (("if not isdir\\('\\.git'\\):")
21232 "if False:")))))))
21233 (native-inputs
21234 (list python-pytest))
21235 (propagated-inputs
21236 (list python-setuptools-scm))
21237 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
21238 (synopsis "Setuptools_scm plugin for git archives")
21239 (description
21240 "The setuptools_scm_git_archive package is a plugin to
21241 setuptools_scm, which supports obtaining versions from git archives that
21242 belong to tagged versions.")
21243 (license license:expat)))
21244
21245 (define-public python-setuptools-git
21246 (package
21247 (name "python-setuptools-git")
21248 (version "1.2")
21249 (source
21250 (origin
21251 (method url-fetch)
21252 (uri (pypi-uri "setuptools-git" version))
21253 (sha256
21254 (base32
21255 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
21256 (build-system python-build-system)
21257 (arguments
21258 `(#:phases
21259 (modify-phases %standard-phases
21260 ;; This is needed for tests.
21261 (add-after 'unpack 'configure-git
21262 (lambda _
21263 (setenv "HOME" "/tmp")
21264 (invoke "git" "config" "--global" "user.email" "guix")
21265 (invoke "git" "config" "--global" "user.name" "guix")
21266 #t)))))
21267 (native-inputs
21268 `(("git" ,git-minimal)))
21269 (home-page "https://github.com/msabramo/setuptools-git")
21270 (synopsis "Setuptools revision control system plugin for Git")
21271 (description
21272 "This package provides a plugin for Setuptools for revision control with
21273 Git.")
21274 (license license:bsd-3)))
21275
21276 (define-public python-setuptools-rust
21277 (package
21278 (name "python-setuptools-rust")
21279 (version "1.1.2")
21280 (source
21281 (origin
21282 (method url-fetch)
21283 (uri (pypi-uri "setuptools-rust" version))
21284 (sha256
21285 (base32 "1lb57qx1azklgzmalflq960agvwci4bwddw0zvlc9zy00fsvkbd0"))))
21286 (build-system python-build-system)
21287 (arguments '(#:tests? #f)) ;no tests
21288 (native-inputs
21289 (list python-setuptools-scm))
21290 (propagated-inputs
21291 (list python-semantic-version python-typing-extensions))
21292 (home-page "https://github.com/PyO3/setuptools-rust")
21293 (synopsis "Setuptools plugin for Rust extensions")
21294 (description
21295 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
21296 Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
21297 (license license:expat)))
21298
21299 (define-public python-pyclipper
21300 (package
21301 (name "python-pyclipper")
21302 (version "1.3.0.post3")
21303 (source
21304 (origin
21305 (method url-fetch)
21306 (uri (pypi-uri "pyclipper" version))
21307 (sha256
21308 (base32 "0vqzbmq2di1jaj6230m5i1ld0mg6wdb1c6r6i5zli54varavr7v3"))
21309 (modules '((guix build utils)))
21310 (snippet
21311 '(begin
21312 ;; This file is generated by Cython.
21313 (delete-file "src/pyclipper/_pyclipper.cpp") #t))))
21314 (build-system python-build-system)
21315 (arguments
21316 `(#:phases
21317 (modify-phases %standard-phases
21318 (add-before 'build 'cythonize-sources
21319 (lambda _
21320 (with-directory-excursion "src/pyclipper"
21321 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
21322 (native-inputs
21323 (list python-cython python-setuptools-scm
21324 python-pytest python-pytest-runner))
21325 (home-page "https://github.com/greginvm/pyclipper")
21326 (synopsis "Wrapper for Angus Johnson's Clipper library")
21327 (description
21328 "Pyclipper is a Cython wrapper for the C++ translation of the
21329 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
21330 (license license:expat)))
21331
21332 (define-public python-tempdir
21333 (package
21334 (name "python-tempdir")
21335 (version "0.7.1")
21336 (source
21337 (origin
21338 (method url-fetch)
21339 (uri (pypi-uri "tempdir" version))
21340 (sha256
21341 (base32
21342 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
21343 (build-system python-build-system)
21344 (home-page "https://pypi.org/project/tempdir/")
21345 (arguments
21346 ;; the package has no tests
21347 '(#:tests? #f))
21348 (synopsis "Python library for managing temporary directories")
21349 (description
21350 "This library manages temporary directories that are automatically
21351 deleted with all their contents when they are no longer needed. It is
21352 particularly convenient for use in tests.")
21353 (license license:expat)))
21354
21355 (define-public python-tempora
21356 (package
21357 (name "python-tempora")
21358 (version "5.0.1")
21359 (source
21360 (origin
21361 (method url-fetch)
21362 (uri (pypi-uri "tempora" version))
21363 (sha256
21364 (base32 "09wirlk5vmxlhl9rnxp7g5qz2nsd6b0gnzk5fczbz0s8lsbz386b"))))
21365 (build-system pyproject-build-system)
21366 (arguments
21367 ;; Do not test the myproject.toml build as it tries to pull
21368 ;; dependencies from the Internet.
21369 (list #:test-flags #~'("-vv" "-k" "not project")))
21370 (native-inputs
21371 (list python-freezegun
21372 python-pytest
21373 python-pytest-black
21374 python-pytest-checkdocs
21375 python-pytest-cov
21376 python-pytest-enabler
21377 python-pytest-flake8
21378 python-pytest-freezegun
21379 python-pytest-mypy
21380 python-setuptools-scm
21381 python-types-freezegun
21382 python-types-pytz))
21383 (propagated-inputs (list python-jaraco-functools python-pytz))
21384 (home-page "https://github.com/jaraco/tempora")
21385 (synopsis "Python date and time objects and routines")
21386 (description "The @code{tempora} Python library contains miscellaneous
21387 date and time related utilities and constants, routines for measuring,
21388 profiling, and getting datetime-aware @acronym{UTC, Coordinated Universal
21389 Time} values as well as an event scheduler.")
21390 (license license:expat)))
21391
21392 (define-public python-activepapers
21393 (package
21394 (name "python-activepapers")
21395 (version "0.2.2")
21396 (source
21397 (origin
21398 (method url-fetch)
21399 (uri (pypi-uri "ActivePapers.Py" version))
21400 (sha256
21401 (base32
21402 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
21403 (build-system python-build-system)
21404 (arguments
21405 `(#:modules ((ice-9 ftw)
21406 (srfi srfi-1)
21407 (guix build utils)
21408 (guix build python-build-system))
21409
21410 #:phases
21411 (modify-phases %standard-phases
21412 (add-after 'unpack 'delete-python2-code
21413 (lambda _
21414 (for-each delete-file
21415 '("lib/activepapers/builtins2.py"
21416 "lib/activepapers/standardlib2.py"
21417 "lib/activepapers/utility2.py"))))
21418 (replace 'check
21419 (lambda _
21420 ;; Deactivate the test cases that download files
21421 (setenv "NO_NETWORK_ACCESS" "1")
21422 ;; For some strange reason, some tests fail if nosetests runs all
21423 ;; test modules in a single execution. They pass if each test
21424 ;; module is run individually.
21425 (for-each (lambda (filename)
21426 (invoke "nosetests"
21427 (string-append "tests/" filename)))
21428 (scandir "tests"
21429 (lambda (filename)
21430 (string-suffix? ".py" filename)))))))))
21431 (native-inputs
21432 (list python-tempdir python-nose))
21433 (propagated-inputs
21434 (list python-h5py))
21435 (home-page "https://www.activepapers.org/")
21436 (synopsis "Executable papers for scientific computing")
21437 (description
21438 "ActivePapers is a tool for working with executable papers, which
21439 combine data, code, and documentation in single-file packages,
21440 suitable for publication as supplementary material or on repositories
21441 such as figshare or Zenodo.")
21442 (license license:bsd-3)))
21443
21444 (define-public python-semver
21445 (package
21446 (name "python-semver")
21447 (version "2.9.0")
21448 (source
21449 (origin
21450 (method url-fetch)
21451 (uri (pypi-uri "semver" version))
21452 (sha256
21453 (base32
21454 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
21455 (build-system python-build-system)
21456 (arguments
21457 `(#:phases (modify-phases %standard-phases
21458 (replace 'check
21459 (lambda _
21460 (delete-file "setup.cfg")
21461 (invoke "py.test"))))))
21462 (native-inputs
21463 (list python-pytest))
21464 (home-page "https://github.com/k-bx/python-semver")
21465 (synopsis "Python helper for Semantic Versioning")
21466 (description "This package provides a Python library for
21467 @url{Semantic Versioning, http://semver.org/}.")
21468 (license license:bsd-3)))
21469
21470 (define-public python-pyro4
21471 (package
21472 (name "python-pyro4")
21473 (version "4.77")
21474 (source
21475 (origin
21476 (method url-fetch)
21477 (uri (pypi-uri "Pyro4" version))
21478 (sha256
21479 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
21480 (build-system python-build-system)
21481 (arguments
21482 '(#:tests? #f)) ;FIXME: Some tests require network access.
21483 (native-inputs
21484 (list python-cloudpickle python-dill python-msgpack))
21485 (propagated-inputs
21486 (list python-serpent))
21487 (home-page "https://pyro4.readthedocs.io")
21488 (synopsis "Distributed object middleware for Python")
21489 (description
21490 "Pyro enables you to build applications in which objects can talk to each
21491 other over the network. You can just use normal Python method calls to call
21492 objects on other machines, also known as remote procedure calls (RPC).")
21493 (license license:expat)))
21494
21495 (define-public python-phonenumbers
21496 (package
21497 (name "python-phonenumbers")
21498 (version "8.9.1")
21499 (source
21500 (origin
21501 (method url-fetch)
21502 (uri (pypi-uri "phonenumbers" version))
21503 (sha256
21504 (base32
21505 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
21506 (build-system python-build-system)
21507 (home-page
21508 "https://github.com/daviddrysdale/python-phonenumbers")
21509 (synopsis
21510 "Python library for dealing with international phone numbers")
21511 (description
21512 "This package provides a Python port of Google's libphonenumber library.")
21513 (license license:asl2.0)))
21514
21515 (define-public python-heapdict
21516 (package
21517 (name "python-heapdict")
21518 (version "1.0.1")
21519 (source
21520 (origin
21521 (method url-fetch)
21522 (uri (pypi-uri "HeapDict" version))
21523 (sha256
21524 (base32
21525 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
21526 (build-system python-build-system)
21527 (home-page "http://stutzbachenterprises.com/")
21528 (synopsis "Heap with decrease-key and increase-key operations")
21529 (description
21530 "heapdict implements the MutableMapping ABC, meaning it works pretty much
21531 like a regular Python @code{dict}. It’s designed to be used as a priority
21532 queue.")
21533 (license license:bsd-3)))
21534
21535 (define-public python-zict
21536 (package
21537 (name "python-zict")
21538 (version "2.0.0")
21539 (source
21540 (origin
21541 (method url-fetch)
21542 (uri (pypi-uri "zict" version))
21543 (sha256
21544 (base32
21545 "05pd1hyhqvpw87rnbvl3vdyf619snpyccbswaxisdj17frwnjacf"))))
21546 (build-system python-build-system)
21547 (propagated-inputs
21548 (list python-heapdict))
21549 (native-inputs
21550 (list python-pytest))
21551 (home-page "https://zict.readthedocs.io/en/latest/")
21552 (synopsis "Composable mutable mapping tools")
21553 (description "This package provides abstract @code{MutableMapping} classes
21554 that consume and build on other @code{MutableMappings}. Several of these can
21555 be composed with one another to form intuitive interfaces over complex storage
21556 systems policies.")
21557 (license license:bsd-3)))
21558
21559 (define-public python-send2trash
21560 (package
21561 (name "python-send2trash")
21562 (version "1.8.0")
21563 (source
21564 (origin (method git-fetch)
21565 ;; Source tarball on PyPI doesn't include tests.
21566 (uri (git-reference
21567 (url "https://github.com/arsenetar/send2trash")
21568 (commit version)))
21569 (file-name (git-file-name name version))
21570 (sha256
21571 (base32
21572 "1k7dfypaaq4f36fbciaasv72j6wgjihw8d88axmz9c329bz8v5qx"))))
21573 (build-system python-build-system)
21574 (arguments
21575 '(#:phases
21576 (modify-phases %standard-phases
21577 (add-before 'check 'pre-check
21578 (lambda _
21579 (setenv "HOME" "/tmp")))
21580 (replace 'check
21581 (lambda* (#:key tests? #:allow-other-keys)
21582 (when tests?
21583 (invoke "pytest" "-vv")))))))
21584 (native-inputs (list python-pytest))
21585 (home-page "https://github.com/arsenetar/send2trash")
21586 (synopsis "Send files to the user's @file{~/Trash} directory")
21587 (description "This package provides a Python library to send files to the
21588 user's @file{~/Trash} directory.")
21589 (license license:bsd-3)))
21590
21591 (define-public python-pyfavicon
21592 (package
21593 (name "python-pyfavicon")
21594 (version "0.1.1")
21595 (source
21596 (origin
21597 (method url-fetch)
21598 (uri (pypi-uri "pyfavicon" version))
21599 (sha256
21600 (base32 "15wfpa99hvcfsv8j0m8iprmydi2p4qkhm86qfx485244y0ia5mgx"))))
21601 (build-system python-build-system)
21602 (arguments
21603 ;; There are no tests in the PyPI tarball and the tests from the
21604 ;; repository require online data.
21605 '(#:tests? #f))
21606 (propagated-inputs
21607 (list python-aiohttp python-beautifulsoup4 python-pillow))
21608 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
21609 (synopsis "Async favicon fetcher")
21610 (description
21611 "@code{pyfavicon} is an async favicon fetcher.")
21612 (license license:expat)))
21613
21614 (define-public python-yamllint
21615 (package
21616 (name "python-yamllint")
21617 (version "1.26.1")
21618 (source
21619 (origin
21620 (method url-fetch)
21621 (uri (pypi-uri "yamllint" version))
21622 (sha256
21623 (base32 "090krlxj7az0d9yl8i20vjrqi66dfxx7y5xakjhxzsfp7qmldnc7"))))
21624 (build-system python-build-system)
21625 (propagated-inputs
21626 (list python-pathspec python-pyyaml python-setuptools))
21627 (home-page "https://github.com/adrienverge/yamllint")
21628 (synopsis "Linter for YAML files")
21629 (description
21630 "Yamllint is a linter for YAML files. yamllint does not only check for
21631 syntax validity, but for weirdnesses like key repetition and cosmetic problems
21632 such as lines length, trailing spaces, indentation, etc.")
21633 (license license:gpl3+)))
21634
21635 (define-public python-yapf
21636 (package
21637 (name "python-yapf")
21638 (version "0.29.0")
21639 (source
21640 (origin
21641 (method url-fetch)
21642 (uri (pypi-uri "yapf" version))
21643 (sha256
21644 (base32
21645 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
21646 (build-system python-build-system)
21647 (home-page "https://github.com/google/yapf")
21648 (synopsis "Formatter for Python code")
21649 (description "YAPF is a formatter for Python code. It's based off of
21650 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
21651 takes the code and reformats it to the best formatting that conforms to the
21652 style guide, even if the original code didn't violate the style guide.")
21653 (license license:asl2.0)))
21654
21655 (define-public python-yq
21656 (package
21657 (name "python-yq")
21658 (version "3.1.0")
21659 (source
21660 (origin
21661 (method url-fetch)
21662 (uri (pypi-uri "yq" version))
21663 (sha256
21664 (base32
21665 "1wklgs3d9si475nffw9agq5kgk8bdicbsmlj4sx4kiw64ji4ma1h"))))
21666 (build-system python-build-system)
21667 (arguments
21668 '(#:phases
21669 (modify-phases %standard-phases
21670 (add-after 'unpack 'patch
21671 (lambda* (#:key inputs #:allow-other-keys)
21672 (substitute* "yq/__init__.py"
21673 (("Popen\\(\\[\"jq")
21674 (string-append
21675 "Popen([\""
21676 (assoc-ref inputs "jq")
21677 "/bin/jq")))
21678 #t)))))
21679 (inputs
21680 (list python-argcomplete python-pyyaml python-xmltodict python-toml jq))
21681 (native-inputs
21682 (list python-coverage python-flake8 python-setuptools-scm python-wheel))
21683 (home-page "https://github.com/kislyuk/yq")
21684 (synopsis "Command-line YAML/XML processor")
21685 (description
21686 "This package provides @command{yq} and @command{xq} for processing YAML
21687 and XML respectively. The processing is done through @command{jq}, @command{jq}
21688 filters can be used to process the data as it passes through.")
21689 (license license:asl2.0)))
21690
21691 (define-public python-gyp
21692 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
21693 (revision "0"))
21694 (package
21695 (name "python-gyp")
21696 ;; Google does not release versions,
21697 ;; based on second most recent commit date.
21698 (version (git-version "0.0.0" revision commit))
21699 (source
21700 (origin
21701 ;; Google does not release tarballs,
21702 ;; git checkout is needed.
21703 (method git-fetch)
21704 (uri (git-reference
21705 (url "https://chromium.googlesource.com/external/gyp")
21706 (commit commit)))
21707 (file-name (git-file-name name version))
21708 (sha256
21709 (base32
21710 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
21711 (build-system python-build-system)
21712 (home-page "https://gyp.gsrc.io/")
21713 (synopsis "GYP is a Meta-Build system")
21714 (description
21715 "GYP builds build systems for large, cross platform applications.
21716 It can be used to generate XCode projects, Visual Studio projects, Ninja build
21717 files, and Makefiles.")
21718 (license license:bsd-3))))
21719
21720 (define-public python-whatever
21721 (package
21722 (name "python-whatever")
21723 (version "0.6")
21724 (source
21725 (origin
21726 (method git-fetch)
21727 (uri (git-reference
21728 (url "https://github.com/Suor/whatever")
21729 (commit version)))
21730 (file-name (git-file-name name version))
21731 (sha256
21732 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
21733 (build-system python-build-system)
21734 (arguments
21735 `(#:phases
21736 (modify-phases %standard-phases
21737 (replace 'check
21738 (lambda _
21739 (invoke "py.test"))))))
21740 (native-inputs
21741 (list python-pytest))
21742 (home-page "https://github.com/Suor/whatever")
21743 (synopsis "Make anonymous functions by partial application of operators")
21744 (description "@code{whatever} provides an easy way to make anonymous
21745 functions by partial application of operators.")
21746 (license license:bsd-3)))
21747
21748 (define-public python-funcy
21749 (package
21750 (name "python-funcy")
21751 (version "1.11")
21752 (source
21753 (origin
21754 (method git-fetch)
21755 (uri (git-reference
21756 (url "https://github.com/Suor/funcy")
21757 (commit version)))
21758 (sha256
21759 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
21760 (file-name (git-file-name name version))))
21761 (build-system python-build-system)
21762 (arguments
21763 `(#:phases
21764 (modify-phases %standard-phases
21765 (replace 'check
21766 (lambda _
21767 (invoke "py.test"))))))
21768 (native-inputs
21769 (list python-pytest python-whatever))
21770 (home-page "https://github.com/Suor/funcy")
21771 (synopsis "Functional tools")
21772 (description "@code{funcy} is a library that provides functional tools.
21773 Examples are:
21774 @enumerate
21775 @item merge - Merges collections of the same type
21776 @item walk - Type-preserving map
21777 @item select - Selects a part of a collection
21778 @item take - Takes the first n items of a collection
21779 @item first - Takes the first item of a collection
21780 @item remove - Predicated-removes items of a collection
21781 @item concat - Concatenates two collections
21782 @item flatten - Flattens a collection with subcollections
21783 @item distinct - Returns only distinct items
21784 @item split - Predicated-splits a collection
21785 @item split_at - Splits a collection at a given item
21786 @item group_by - Groups items by group
21787 @item pairwise - Pairs off adjacent items
21788 @item partial - Partially-applies a function
21789 @item curry - Curries a function
21790 @item compose - Composes functions
21791 @item complement - Complements a predicate
21792 @item all_fn - \"all\" with predicate
21793 @end enumerate")
21794 (license license:bsd-3)))
21795
21796 (define-public python-isoweek
21797 (package
21798 (name "python-isoweek")
21799 (version "1.3.3")
21800 (source
21801 (origin
21802 (method url-fetch)
21803 (uri (pypi-uri "isoweek" version))
21804 (sha256
21805 (base32
21806 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
21807 (build-system python-build-system)
21808 (home-page "https://github.com/gisle/isoweek")
21809 (synopsis "Objects representing a week")
21810 (description "The @code{isoweek} module provide the class Week that
21811 implements the week definition of ISO 8601. This standard also defines
21812 a notation for identifying weeks; yyyyWww (where the W is a literal).
21813 Week instances stringify to this form.")
21814 (license license:bsd-3)))
21815
21816 (define-public python-pyzbar
21817 (package
21818 (name "python-pyzbar")
21819 (version "0.1.8")
21820 (source
21821 (origin
21822 ;; There's no source tarball on PyPI.
21823 (method git-fetch)
21824 (uri (git-reference
21825 (url "https://github.com/NaturalHistoryMuseum/pyzbar")
21826 (commit (string-append "v" version))))
21827 (file-name (git-file-name name version))
21828 (sha256
21829 (base32 "1fqlfg5p2v9lzzzi0si2sz54lblprk6jjjhjw54b64lp58c1yhsl"))))
21830 (build-system python-build-system)
21831 (arguments
21832 `(#:phases
21833 (modify-phases %standard-phases
21834 (add-after 'unpack 'remove-failing-test
21835 (lambda _
21836 ;; This tests if find_library was called once, but we remove
21837 ;; the call in the stage below to make the library find libzbar.
21838 (delete-file "pyzbar/tests/test_zbar_library.py")
21839 #t))
21840 (add-before 'build 'set-library-file-name
21841 (lambda* (#:key inputs #:allow-other-keys)
21842 (let ((libzbar (assoc-ref inputs "zbar")))
21843 (substitute* "pyzbar/zbar_library.py"
21844 (("find_library\\('zbar'\\)")
21845 (string-append "'" libzbar "/lib/libzbar.so.0'")))
21846 #t))))))
21847 (native-inputs
21848 (list pkg-config python-numpy python-pillow))
21849 (inputs
21850 (list zbar))
21851 (home-page "https://github.com/NaturalHistoryMuseum/pyzbar/")
21852 (synopsis "Read one-dimensional barcodes and QR codes")
21853 (description
21854 "Read one-dimensional barcodes and QR codes using the zbar library.
21855
21856 Features:
21857
21858 @itemize
21859 @item Pure python
21860 @item Works with PIL / Pillow images, OpenCV / numpy ndarrays, and raw bytes
21861 @item Decodes locations of barcodes
21862 @item No dependencies, other than the zbar library itself
21863 @end itemize")
21864 (license license:expat)))
21865
21866 (define-public python-tokenize-rt
21867 (package
21868 (name "python-tokenize-rt")
21869 (version "2.0.1")
21870 (source
21871 (origin
21872 (method url-fetch)
21873 (uri (pypi-uri "tokenize-rt" version))
21874 (sha256
21875 (base32
21876 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
21877 (build-system python-build-system)
21878 (home-page "https://github.com/asottile/tokenize-rt")
21879 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
21880 (description
21881 "This Python library is a wrapper around @code{tokenize} from the Python
21882 standard library. It provides two additional tokens @code{ESCAPED_NL} and
21883 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
21884 and @code{tokens_to_src} to roundtrip.")
21885 (license license:expat)))
21886
21887 (define-public python-future-fstrings
21888 (package
21889 (name "python-future-fstrings")
21890 (version "0.4.1")
21891 (source
21892 (origin
21893 (method url-fetch)
21894 (uri (pypi-uri "future_fstrings" version))
21895 (sha256
21896 (base32
21897 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
21898 (build-system python-build-system)
21899 (propagated-inputs
21900 (list python-tokenize-rt))
21901 (home-page "https://github.com/asottile/future-fstrings")
21902 (synopsis "Backport of fstrings to Python < 3.6")
21903 (description
21904 "This package provides a UTF-8 compatible encoding
21905 @code{future_fstrings}, which performs source manipulation. It decodes the
21906 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
21907 @code{f} strings.")
21908 (license license:expat)))
21909
21910 (define-public python-typed-ast
21911 (package
21912 (name "python-typed-ast")
21913 (version "1.5.1")
21914 (source
21915 (origin
21916 (method git-fetch)
21917 (uri (git-reference
21918 (url "https://github.com/python/typed_ast")
21919 (commit version)))
21920 (sha256
21921 (base32 "1xfcs5246c8v5600aaa8zs7ii4sxb62q6r3sb2fgazyjx97wrxd9"))
21922 (file-name (git-file-name name version))))
21923 (build-system python-build-system)
21924 (arguments
21925 `(#:phases
21926 (modify-phases %standard-phases
21927 (replace 'check
21928 (lambda _
21929 (invoke "pytest"))))))
21930 (native-inputs (list python-pytest))
21931 (home-page "https://github.com/python/typed_ast")
21932 (synopsis "Fork of Python @code{ast} modules with type comment support")
21933 (description "This package provides a parser similar to the standard
21934 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
21935 include PEP 484 type comments and are independent of the version of Python
21936 under which they are run. The @code{typed_ast} parsers produce the standard
21937 Python AST (plus type comments), and are both fast and correct, as they are
21938 based on the CPython 2.7 and 3.7 parsers.")
21939 ;; See the file "LICENSE" for the details.
21940 (license (list license:psfl
21941 license:asl2.0
21942 license:expat)))) ;ast27/Parser/spark.py
21943
21944 (define-public python-typer
21945 (package
21946 (name "python-typer")
21947 (version "0.6.1")
21948 (source
21949 (origin
21950 (method git-fetch)
21951 (uri (git-reference
21952 (url "https://github.com/tiangolo/typer")
21953 (commit version)))
21954 (file-name (git-file-name name version))
21955 (sha256
21956 (base32 "1knv353qhkl2imav3jfp6bgq47m8wkkqhq1dzmqg2sv8rsy7zgl7"))))
21957 (build-system python-build-system)
21958 (arguments
21959 `(#:phases
21960 ,#~(modify-phases %standard-phases
21961 ;; Unfortunately, this doesn't seem to be enough to fix these two
21962 ;; tests, but we'll patch this anyway.
21963 (add-after 'unpack 'patch-shell-reference
21964 (lambda _
21965 (substitute* "tests/test_completion/test_completion.py"
21966 (("\"bash\"") (string-append "\"" (which "bash") "\""))
21967 (("\"/bin/bash\"")
21968 (string-append "\"" (which "bash") "\"")))))
21969 (replace 'build
21970 (lambda _
21971 (invoke "flit" "build")))
21972 (replace 'install
21973 (lambda* (#:key inputs outputs #:allow-other-keys)
21974 (add-installed-pythonpath inputs outputs)
21975 (for-each
21976 (lambda (wheel)
21977 (format #true wheel)
21978 (invoke "python" "-m" "pip" "install"
21979 wheel (string-append "--prefix=" #$output)))
21980 (find-files "dist" "\\.whl$"))))
21981 (replace 'check
21982 (lambda* (#:key tests? #:allow-other-keys)
21983 (when tests?
21984 (setenv "HOME" "/tmp") ; some tests need it
21985
21986 ;; This is for completion tests
21987 (with-output-to-file "/tmp/.bashrc"
21988 (lambda _ (display "# dummy")))
21989
21990 (setenv "GUIX_PYTHONPATH"
21991 (string-append (getcwd) ":"
21992 (getenv "GUIX_PYTHONPATH")))
21993 (let ((disabled-tests (list "test_show_completion"
21994 "test_install_completion")))
21995 (invoke "python" "-m" "pytest" "tests/"
21996 "-k"
21997 (string-append "not "
21998 (string-join disabled-tests
21999 " and not "))))))))))
22000 (propagated-inputs
22001 (list python-click))
22002 (native-inputs
22003 (list python-coverage python-flit python-pytest python-rich
22004 python-shellingham))
22005 (home-page "https://github.com/tiangolo/typer")
22006 (synopsis
22007 "Typer builds CLI based on Python type hints")
22008 (description
22009 "Typer is a library for building CLI applications. It's based on
22010 Python 3.6+ type hints.")
22011 ;; MIT license
22012 (license license:expat)))
22013
22014 (define-public python-typeguard
22015 (package
22016 (name "python-typeguard")
22017 (version "2.13.3")
22018 (source
22019 (origin
22020 (method url-fetch)
22021 (uri (pypi-uri "typeguard" version))
22022 (sha256
22023 (base32 "1i5qzcyw2715h1g1hvj7fxykck2bkxyshpngjr3nfcx1lf6smv80"))))
22024 (build-system python-build-system)
22025 (arguments
22026 (list
22027 #:phases
22028 #~(modify-phases %standard-phases
22029 (replace 'check
22030 (lambda* (#:key tests? #:allow-other-keys)
22031 (when tests?
22032 (invoke "pytest" "-vv" "-k"
22033 ;; XXX: These fail when installed as a library:
22034 ;; https://github.com/agronholm/typeguard/issues/176
22035 "not usefixtures and not test_cached_module")))))))
22036 (native-inputs
22037 (list python-mypy python-pytest python-typing-extensions))
22038 (home-page "https://github.com/agronholm/typeguard")
22039 (synopsis "Run-time type checker for Python")
22040 (description
22041 "@code{typeguard} provides run-time type checking for functions defined
22042 with PEP 484 argument (and return) type annotations.")
22043 (license license:expat)))
22044
22045 (define-public python-typing-extensions
22046 (package
22047 (name "python-typing-extensions")
22048 (version "4.0.1")
22049 (source (origin
22050 ;; The test script is missing from the PyPI archive.
22051 (method git-fetch)
22052 (uri (git-reference
22053 (url "https://github.com/python/typing")
22054 (commit version)))
22055 (file-name (git-file-name name version))
22056 (sha256
22057 (base32
22058 "0a35fh5wk9s538x0w3dz95y0avnhd2srzyv9s1a372711n8hdl4p"))))
22059 (build-system python-build-system)
22060 (arguments
22061 (list
22062 #:tests? #f ;requires Python's test module, not available in Guix
22063 #:phases
22064 #~(modify-phases %standard-phases
22065 (add-after 'unpack 'enter-source-directory
22066 (lambda _
22067 (chdir "typing_extensions")))
22068 ;; XXX: PEP 517 manual build copied from python-isort.
22069 (replace 'build
22070 (lambda _
22071 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
22072 (replace 'check
22073 (lambda* (#:key tests? #:allow-other-keys)
22074 (when tests?
22075 (invoke "python" "src/test_typing_extensions.py"))))
22076 (replace 'install
22077 (lambda _
22078 (let ((whl (car (find-files "dist" "\\.whl$"))))
22079 (invoke "pip" "--no-cache-dir" "--no-input"
22080 "install" "--no-deps" "--prefix" #$output whl)))))))
22081 (native-inputs (list python-pypa-build python-flit-core))
22082 (home-page "https://github.com/python/typing/typing_extensions")
22083 (synopsis "Experimental type hints for Python")
22084 (description
22085 "The typing_extensions module contains additional @code{typing} hints not
22086 yet present in the of the @code{typing} standard library.
22087 Included are implementations of:
22088 @enumerate
22089 @item ClassVar
22090 @item ContextManager
22091 @item Counter
22092 @item DefaultDict
22093 @item Deque
22094 @item NewType
22095 @item NoReturn
22096 @item overload
22097 @item Protocol
22098 @item runtime
22099 @item Text
22100 @item Type
22101 @item TYPE_CHECKING
22102 @item AsyncGenerator
22103 @end enumerate\n")
22104 (license license:psfl)))
22105
22106 (define-public python-typing-extensions-next
22107 (package
22108 (inherit python-typing-extensions)
22109 (name "python-typing-extensions")
22110 (version "4.2.0")
22111 (source (origin
22112 (method git-fetch)
22113 (uri (git-reference
22114 (url "https://github.com/python/typing")
22115 (commit version)))
22116 (file-name (git-file-name name version))
22117 (sha256
22118 (base32
22119 "1bbry1rg7q5ppkgzdk4nwl7q1w8bbhajm4q68wb9dm6rf7hg1023"))))))
22120
22121 (define-public bpython
22122 (package
22123 (name "bpython")
22124 (version "0.23")
22125 (source
22126 (origin
22127 (method url-fetch)
22128 (uri (pypi-uri "bpython" version))
22129 (sha256
22130 (base32 "0ah5giynavyh70yc0jqgmjaajv3xg5j2y7k9i3q8mi47r2mph04z"))))
22131 (build-system python-build-system)
22132 (arguments
22133 `(#:phases
22134 (modify-phases %standard-phases
22135 (add-after 'unpack 'remove-failing-test
22136 (lambda _
22137 ;; Remove failing test. FIXME: make it pass
22138 (delete-file "bpython/test/test_args.py")
22139 #t))
22140 (add-after 'wrap 'add-aliases
22141 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
22142 (lambda* (#:key outputs #:allow-other-keys)
22143 (let ((out (assoc-ref outputs "out")))
22144 (for-each
22145 (lambda (old new)
22146 (symlink old (string-append out "/bin/" new)))
22147 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
22148 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
22149 #t)))))
22150 (propagated-inputs
22151 (list python-pygments
22152 python-requests
22153 python-curtsies
22154 python-greenlet
22155 python-six
22156 python-cwcwidth
22157 python-pyxdg
22158 ;; optional dependencies
22159 python-urwid ; for bpython-urwid only
22160 python-watchdog
22161 python-jedi))
22162 (native-inputs
22163 (list python-sphinx python-mock python-tox python-wheel))
22164 (home-page "https://bpython-interpreter.org/")
22165 (synopsis "Fancy interface to the Python interpreter")
22166 (description "Bpython is a fancy interface to the Python
22167 interpreter. bpython's main features are
22168
22169 @enumerate
22170 @item in-line syntax highlighting,
22171 @item readline-like autocomplete with suggestions displayed as you type,
22172 @item expected parameter list for any Python function,
22173 @item \"rewind\" function to pop the last line of code from memory and
22174 re-evaluate,
22175 @item send the code you've entered off to a pastebin,
22176 @item save the code you've entered to a file, and
22177 @item auto-indentation.
22178 @end enumerate")
22179 (license license:expat)))
22180
22181 (define-public python-pyinotify
22182 (package
22183 (name "python-pyinotify")
22184 (version "0.9.6")
22185 (source (origin
22186 (method url-fetch)
22187 (uri (pypi-uri "pyinotify" version))
22188 (sha256
22189 (base32
22190 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
22191 (build-system python-build-system)
22192 (arguments `(#:tests? #f)) ;no tests
22193 (home-page "https://github.com/seb-m/pyinotify")
22194 (synopsis "Python library for monitoring inotify events")
22195 (description
22196 "@code{pyinotify} provides a Python interface for monitoring
22197 file system events on Linux.")
22198 (license license:expat)))
22199
22200
22201 (define-public python-more-itertools
22202 (package
22203 (name "python-more-itertools")
22204 (version "8.2.0")
22205 (source
22206 (origin
22207 (method url-fetch)
22208 (uri (pypi-uri "more-itertools" version))
22209 (sha256
22210 (base32
22211 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
22212 (build-system python-build-system)
22213 (home-page "https://github.com/erikrose/more-itertools")
22214 (synopsis "More routines for operating on iterables, beyond itertools")
22215 (description "Python's built-in @code{itertools} module implements a
22216 number of iterator building blocks inspired by constructs from APL, Haskell,
22217 and SML. @code{more-itertools} includes additional building blocks for
22218 working with iterables.")
22219 (license license:expat)))
22220
22221 (define-public python-latexcodec
22222 (package
22223 (name "python-latexcodec")
22224 (version "2.0.1")
22225 (source
22226 (origin
22227 (method url-fetch)
22228 (uri (pypi-uri "latexcodec" version))
22229 (sha256
22230 (base32 "16pynfnn8y8xp55yp06i721fccv5dlx9ba6k5bzcwq9j6wf5b8ia"))))
22231 (build-system python-build-system)
22232 (propagated-inputs
22233 (list python-six))
22234 (home-page "https://readthedocs.org/projects/latexcodec/")
22235 (synopsis "Work with LaTeX code in Python")
22236 (description "Lexer and codec to work with LaTeX code in Python.")
22237 (license license:expat)))
22238
22239 (define-public python-pybtex
22240 (package
22241 (name "python-pybtex")
22242 (version "0.24.0")
22243 (source
22244 (origin
22245 (method url-fetch)
22246 (uri (pypi-uri "pybtex" version))
22247 (sha256
22248 (base32 "0ma7sc10hk6caq5zghbk865vrlaynz7x5z630z0facqpnqssx3l1"))))
22249 (build-system python-build-system)
22250 (native-inputs
22251 (list python-pytest))
22252 (propagated-inputs
22253 (list python-latexcodec python-pyyaml python-six))
22254 (arguments
22255 (list
22256 #:phases #~(modify-phases %standard-phases
22257 (replace 'check
22258 (lambda* (#:key tests? #:allow-other-keys)
22259 (when tests?
22260 (invoke "pytest")))))))
22261 (home-page "https://pybtex.org/")
22262 (synopsis "BibTeX-compatible bibliography processor")
22263 (description "Pybtex is a BibTeX-compatible bibliography processor written
22264 in Python. You can simply type pybtex instead of bibtex.")
22265 (license license:expat)))
22266
22267 (define-public python-onetimepass
22268 (package
22269 (name "python-onetimepass")
22270 (version "1.0.1")
22271 (source
22272 (origin
22273 (method url-fetch)
22274 (uri (pypi-uri "onetimepass" version))
22275 (sha256
22276 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
22277 (build-system python-build-system)
22278 (propagated-inputs (list python-six))
22279 (home-page "https://github.com/tadeck/onetimepass/")
22280 (synopsis "One-time password library")
22281 (description "Python one-time password library for HMAC-based (HOTP) and
22282 time-based (TOTP) passwords.")
22283 (license license:expat)))
22284
22285 (define-public python-parso
22286 (package
22287 (name "python-parso")
22288 (version "0.8.3")
22289 (source
22290 (origin
22291 (method url-fetch)
22292 (uri (pypi-uri "parso" version))
22293 (sha256
22294 (base32 "185gkxq92kqiw2h5zp1cmyn04055x0lix4hmi5c077xm1clvw1wc"))))
22295 (native-inputs
22296 (list python-pytest))
22297 (build-system python-build-system)
22298 (arguments
22299 `(#:phases
22300 (modify-phases %standard-phases
22301 (replace 'check
22302 (lambda* (#:key tests? #:allow-other-keys)
22303 (when tests?
22304 (invoke "pytest" "-vv")))))))
22305 (home-page "https://github.com/davidhalter/parso")
22306 (synopsis "Python Parser")
22307 (description "Parso is a Python parser that supports error recovery and
22308 round-trip parsing for different Python versions (in multiple Python versions).
22309 Parso is also able to list multiple syntax errors in your Python file.")
22310 (license license:expat)))
22311
22312 (define-public python-async-generator
22313 (package
22314 (name "python-async-generator")
22315 (version "1.10")
22316 (source
22317 (origin
22318 (method url-fetch)
22319 (uri (pypi-uri "async_generator" version))
22320 (sha256
22321 (base32
22322 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
22323 (build-system python-build-system)
22324 (native-inputs
22325 (list python-pytest))
22326 (home-page "https://github.com/python-trio/async_generator")
22327 (synopsis "Async generators and context managers for Python 3.5+")
22328 (description "@code{async_generator} back-ports Python 3.6's native async
22329 generators and Python 3.7's context managers into Python 3.5.")
22330 ;; Dual licensed.
22331 (license (list license:expat license:asl2.0))))
22332
22333 (define-public python-async-timeout
22334 (package
22335 (name "python-async-timeout")
22336 (version "4.0.2")
22337 (source
22338 (origin
22339 (method url-fetch)
22340 (uri (pypi-uri "async-timeout" version))
22341 (sha256
22342 (base32
22343 "05bbjz16n1a7m1s3lmcwri2x5rc7hnh6f2hdr2lbflnv1mjf2qr1"))))
22344 (build-system python-build-system)
22345 (home-page "https://github.com/aio-libs/async-timeout")
22346 (synopsis "Timeout context manager for asyncio programs")
22347 (description "@code{async-timeout} provides a timeout timeout context
22348 manager compatible with @code{asyncio}.")
22349 (license license:asl2.0)))
22350
22351 (define-public python-glob2
22352 (package
22353 (name "python-glob2")
22354 (version "0.7")
22355 (source
22356 (origin
22357 (method git-fetch)
22358 (uri (git-reference
22359 (url "https://github.com/miracle2k/python-glob2")
22360 (commit (string-append "v" version))))
22361 (file-name (git-file-name name version))
22362 (sha256
22363 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
22364 (build-system python-build-system)
22365 (home-page "https://github.com/miracle2k/python-glob2/")
22366 (synopsis "Extended Version of the python buildin glob module")
22367 (description "This is an extended version of the Python
22368 @url{http://docs.python.org/library/glob.html, built-in glob module} which
22369 adds:
22370
22371 @itemize
22372 @item The ability to capture the text matched by glob patterns, and return
22373 those matches alongside the file names.
22374 @item A recursive @code{**} globbing syntax, akin for example to the
22375 @code{globstar} option of Bash.
22376 @item The ability to replace the file system functions used, in order to glob
22377 on virtual file systems.
22378 @item Compatible with Python 2 and Python 3 (tested with 3.3).
22379 @end itemize
22380
22381 Glob2 currently based on the glob code from Python 3.3.1.")
22382 (license license:bsd-2)))
22383
22384 (define-public python-gipc
22385 (package
22386 (name "python-gipc")
22387 (version "0.6.0")
22388 (source
22389 (origin
22390 (method url-fetch)
22391 (uri (pypi-uri "gipc" version ".zip"))
22392 (sha256
22393 (base32
22394 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
22395 (build-system python-build-system)
22396 (native-inputs
22397 (list unzip))
22398 (propagated-inputs
22399 (list python-gevent))
22400 (home-page "https://gehrcke.de/gipc/")
22401 (synopsis "Child process management in the context of gevent")
22402 (description "Usage of Python's multiprocessing package in a
22403 gevent-powered application may raise problems. With @code{gipc},
22404 process-based child processes can safely be created anywhere within a
22405 gevent-powered application.")
22406 (license license:expat)))
22407
22408 (define-public python-beautifultable
22409 (package
22410 (name "python-beautifultable")
22411 (version "1.0.0")
22412 (source
22413 (origin
22414 (method url-fetch)
22415 (uri (pypi-uri "beautifultable" version))
22416 (sha256
22417 (base32
22418 "0wwlbifcbpzy3wfv6yzsxncarsngzizmmxbn6cy5gazlcq7h4k5x"))))
22419 (build-system python-build-system)
22420 (propagated-inputs
22421 (list python-wcwidth))
22422 (arguments
22423 `(#:phases
22424 (modify-phases %standard-phases
22425 (add-after 'unpack 'patch-setup.py
22426 (lambda _
22427 (substitute* "setup.py"
22428 (("setup\\(")
22429 "setup(\n test_suite=\"test\",")))))))
22430 (home-page "https://github.com/pri22296/beautifultable")
22431 (synopsis "Print ASCII tables for terminals")
22432 (description "@code{python-beautifultable} provides a class for easily
22433 printing tabular data in a visually appealing ASCII format to a terminal.
22434
22435 Features include, but are not limited to:
22436 @itemize
22437 @item Full customization of the look and feel of the table
22438 @item Row and column accessors.
22439 @item Full support for colors using ANSI sequences or any library.
22440 @item Plenty of predefined styles and option to create custom ones.
22441 @item Support for Unicode characters.
22442 @item Supports streaming table when data is slow to retrieve.
22443 @end itemize")
22444 (license license:expat)))
22445
22446 (define-public python-globber
22447 (package
22448 (name "python-globber")
22449 (version "0.2.1")
22450 (source
22451 (origin
22452 (method git-fetch)
22453 (uri (git-reference
22454 (url "https://github.com/asharov/globber")
22455 (commit version)))
22456 (file-name (git-file-name name version))
22457 (sha256
22458 (base32
22459 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
22460 (build-system python-build-system)
22461 (home-page "https://github.com/asharov/globber")
22462 (synopsis "Library for string matching with glob patterns")
22463 (description
22464 "Globber is a Python library for matching file names against glob patterns.
22465 In contrast to other glob-matching libraries, it matches arbitrary strings and
22466 doesn't require the matched names to be existing files. In addition, it
22467 supports the globstar @code{**} operator to match an arbitrary number of
22468 path components.")
22469 (license license:asl2.0)))
22470
22471 (define-public python-git-hammer
22472 (package
22473 (name "python-git-hammer")
22474 (version "0.3.1")
22475 (source
22476 (origin
22477 (method git-fetch)
22478 (uri (git-reference
22479 (url "https://github.com/asharov/git-hammer")
22480 (commit version)))
22481 (file-name (git-file-name name version))
22482 (sha256
22483 (base32
22484 "0f9xlk86ijzpdj25hr1q4wcy8k72v3w470ngwm9mpdkfj8ng84wr"))))
22485 (build-system python-build-system)
22486 (arguments
22487 `(#:phases
22488 (modify-phases %standard-phases
22489 (add-after 'unpack 'patch-setup.py
22490 (lambda _
22491 (substitute* "setup.py"
22492 (("setup\\(")
22493 "setup(\n test_suite=\"test\",")))))))
22494 (propagated-inputs
22495 (list python-beautifultable
22496 python-dateutil
22497 python-gitpython
22498 python-globber
22499 python-matplotlib
22500 python-sqlalchemy
22501 python-sqlalchemy-utils))
22502 (home-page "https://github.com/asharov/git-hammer")
22503 (synopsis "Provide statistics for git repositories")
22504 (description
22505 "Git Hammer is a statistics tool for projects in git repositories.
22506 Its major feature is tracking the number of lines authored by each person for every
22507 commit, but it also includes some other useful statistics.")
22508 (license license:asl2.0)))
22509
22510 (define-public python-fusepy
22511 (package
22512 (name "python-fusepy")
22513 (version "2.0.4")
22514 (source
22515 (origin
22516 (method url-fetch)
22517 (uri (pypi-uri "fusepy" version))
22518 (sha256
22519 (base32
22520 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
22521 (build-system python-build-system)
22522 (arguments
22523 `(#:phases
22524 (modify-phases %standard-phases
22525 (add-before 'build 'set-library-file-name
22526 (lambda* (#:key inputs #:allow-other-keys)
22527 (let ((fuse (assoc-ref inputs "fuse")))
22528 (substitute* "fuse.py"
22529 (("find_library\\('fuse'\\)")
22530 (string-append "'" fuse "/lib/libfuse.so'")))
22531 #t))))))
22532 (propagated-inputs
22533 (list fuse))
22534 (home-page "https://github.com/fusepy/fusepy")
22535 (synopsis "Simple ctypes bindings for FUSE")
22536 (description "Python module that provides a simple interface to FUSE and
22537 MacFUSE. The binding is created using the standard @code{ctypes} library.")
22538 (license license:isc)))
22539
22540 (define-public python-fusepyng
22541 (package
22542 (name "python-fusepyng")
22543 (version "1.0.7")
22544 (source
22545 (origin
22546 (method url-fetch)
22547 (uri (pypi-uri "fusepyng" version))
22548 (sha256
22549 (base32
22550 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
22551 (build-system python-build-system)
22552 (arguments
22553 '(#:phases
22554 (modify-phases %standard-phases
22555 (add-after 'unpack 'set-libfuse-path
22556 (lambda* (#:key inputs #:allow-other-keys)
22557 (let ((fuse (assoc-ref inputs "fuse")))
22558 (substitute* "fusepyng.py"
22559 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
22560 (string-append "\"" fuse "/lib/libfuse.so\""))))
22561 #t)))))
22562 (inputs
22563 (list fuse))
22564 (propagated-inputs
22565 (list python-paramiko))
22566 (home-page "https://github.com/rianhunter/fusepyng")
22567 (synopsis "Simple ctypes bindings for FUSE")
22568 (description "@code{fusepyng} is a Python module that provides a simple
22569 interface to FUSE on various operating systems. It's just one file and is
22570 implemented using @code{ctypes}.")
22571 (license license:isc)))
22572
22573 (define-public python-update-checker
22574 (package
22575 (name "python-update-checker")
22576 (version "0.18.0")
22577 (source
22578 (origin
22579 (method url-fetch)
22580 (uri (pypi-uri "update-checker" version))
22581 (sha256
22582 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
22583 (build-system python-build-system)
22584 (propagated-inputs (list python-requests))
22585 (native-inputs (list python-black python-flake8 python-pytest))
22586 (home-page "https://github.com/bboe/update_checker")
22587 (synopsis "Python module that will check for package updates")
22588 (description "This package provides a Python module that will check for
22589 package updates.")
22590 (license license:bsd-2)))
22591
22592 (define-public python-userspacefs
22593 (package
22594 (name "python-userspacefs")
22595 (version "2.0.5")
22596 (source
22597 (origin
22598 (method url-fetch)
22599 (uri (pypi-uri "userspacefs" version))
22600 (sha256
22601 (base32
22602 "0v0qkdwfc61s2yiq7d7amin93x5biypfmi9pfhf8yj1rdpx5yvsx"))))
22603 (build-system python-build-system)
22604 (propagated-inputs
22605 (list python-fusepyng))
22606 (home-page "https://github.com/rianhunter/userspacefs")
22607 (synopsis "User-space file systems for Python")
22608 (description
22609 "@code{userspacefs} is a library that allows you to easily write
22610 user-space file systems in Python.")
22611 (license license:gpl3+)))
22612
22613 (define-public python-stone
22614 (package
22615 (name "python-stone")
22616 (version "3.2.1")
22617 (source
22618 (origin
22619 (method url-fetch)
22620 (uri (pypi-uri "stone" version))
22621 (sha256
22622 (base32
22623 "0xby5mpsms7b2rv8j6mvxzmzz5i9ii01brb9ylxz6kiv2i08piwv"))))
22624 (build-system python-build-system)
22625 (arguments
22626 `(#:phases
22627 (modify-phases %standard-phases
22628 (add-after 'unpack 'change-version-requirements
22629 (lambda _
22630 ;; Match the requirement in test/requirements.txt
22631 (substitute* "setup.py"
22632 (("pytest < 5") "pytest < 7"))
22633 ;; We don't care about a coverage report.
22634 (substitute* "test/requirements.txt"
22635 (("coverage.*") "coverage\n"))))
22636 (replace 'check
22637 (lambda* (#:key tests? #:allow-other-keys)
22638 (when tests?
22639 ;; These tests don't import currectly.
22640 (delete-file "test/test_js_client.py")
22641 (delete-file "test/test_tsd_types.py")
22642 (delete-file "test/test_python_gen.py")
22643 (invoke "pytest")))))))
22644 (propagated-inputs
22645 (list python-ply python-six))
22646 (native-inputs
22647 (list python-coverage python-mock python-pytest python-pytest-runner))
22648 (home-page "https://github.com/dropbox/stone")
22649 (synopsis "Official Api Spec Language for Dropbox")
22650 (description
22651 "Stone is an interface description language (IDL) for APIs.")
22652 (license license:expat)))
22653
22654 (define-public pybind11
22655 (package
22656 (name "pybind11")
22657 (version "2.8.1")
22658 (source (origin
22659 (method git-fetch)
22660 (uri (git-reference
22661 (url "https://github.com/pybind/pybind11")
22662 (commit (string-append "v" version))))
22663 (sha256
22664 (base32
22665 "10hrkrh78sk7k0ydw1ghmp7gvpwmkby0l2s0kf2iaj9sz0vijkhs"))
22666 (file-name (git-file-name name version))))
22667 (build-system cmake-build-system)
22668 (native-inputs
22669 `(("python" ,python-wrapper)
22670
22671 ;; The following dependencies are used for tests.
22672 ("python-pytest" ,python-pytest)
22673 ("catch" ,catch2-1)
22674 ("eigen" ,eigen)))
22675 (arguments
22676 `(#:configure-flags
22677 (list (string-append "-DCATCH_INCLUDE_DIR="
22678 (assoc-ref %build-inputs "catch")
22679 "/include/catch"))
22680
22681 #:phases (modify-phases %standard-phases
22682 (add-after 'install 'install-python
22683 (lambda* (#:key outputs #:allow-other-keys)
22684 (let ((out (assoc-ref outputs "out")))
22685 (with-directory-excursion "../source"
22686 (setenv "PYBIND11_USE_CMAKE" "yes")
22687 (invoke "python" "setup.py" "install"
22688 "--single-version-externally-managed"
22689 "--root=/"
22690 (string-append "--prefix=" out)))))))
22691
22692 #:test-target "check"))
22693 (home-page "https://github.com/pybind/pybind11/")
22694 (synopsis "Seamless operability between C++11 and Python")
22695 (description
22696 "@code{pybind11} is a lightweight header-only library that exposes C++
22697 types in Python and vice versa, mainly to create Python bindings of existing
22698 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
22699 library: to minimize boilerplate code in traditional extension modules by
22700 inferring type information using compile-time introspection.")
22701 (license license:bsd-3)))
22702
22703 ;; This is needed for python-vaex-core.
22704 (define-public pybind11-2.3
22705 (package
22706 (inherit pybind11)
22707 (name "pybind11")
22708 (version "2.3.0")
22709 (source (origin
22710 (method git-fetch)
22711 (uri (git-reference
22712 (url "https://github.com/pybind/pybind11")
22713 (commit (string-append "v" version))))
22714 (sha256
22715 (base32
22716 "11b6dniri8m05spfd2a19irz82shf4sdca73566bniggrf3zclnf"))
22717 (file-name (git-file-name name version))))
22718 (arguments
22719 (substitute-keyword-arguments (package-arguments pybind11)
22720 ((#:tests? tests? #false)
22721 #false)))))
22722
22723 (define-public python-pooch
22724 (package
22725 (name "python-pooch")
22726 (version "1.3.0")
22727 (source
22728 (origin
22729 (method url-fetch)
22730 (uri (pypi-uri "pooch" version))
22731 (sha256
22732 (base32 "1618adsg9r8fsv422sv35z1i723q3a1iir5v7dv2sklh4pl4im1h"))))
22733 (build-system python-build-system)
22734 (arguments
22735 `(#:tests? #f)) ;requires online data
22736 (propagated-inputs
22737 (list python-appdirs python-packaging python-requests))
22738 (home-page "https://github.com/fatiando/pooch")
22739 (synopsis "Manage your Python library's sample data files")
22740 (description
22741 "Pooch manages your Python library's sample data files: it automatically
22742 downloads and stores them in a local directory, with support for versioning
22743 and corruption checks.")
22744 (license license:bsd-3)))
22745
22746 (define-public python-fasteners
22747 (package
22748 (name "python-fasteners")
22749 (version "0.15")
22750 (source
22751 (origin
22752 (method url-fetch)
22753 (uri (pypi-uri "fasteners" version))
22754 (sha256
22755 (base32
22756 "1vzmz1xh38b84dv0f4hlp7arwmx8wjlih6lf964bpy8dnyk6s5rs"))))
22757 (build-system python-build-system)
22758 (propagated-inputs
22759 (list python-monotonic python-six))
22760 (native-inputs
22761 (list python-testtools))
22762 (home-page "https://github.com/harlowja/fasteners")
22763 (synopsis "Python package that provides useful locks")
22764 (description
22765 "This package provides a Python program that provides following locks:
22766
22767 @itemize
22768 @item Locking decorator
22769 @item Reader-writer locks
22770 @item Inter-process locks
22771 @item Generic helpers
22772 @end itemize\n")
22773 (license license:asl2.0)))
22774
22775 (define-public python-requests-file
22776 (package
22777 (name "python-requests-file")
22778 (version "1.5.1")
22779 (source
22780 (origin
22781 (method url-fetch)
22782 (uri (pypi-uri "requests-file" version))
22783 (sha256
22784 (base32 "13kx4k83i9zcv20h0fnmawwwdzhcmw1z97mqib1h379qsc445mq7"))))
22785 (build-system python-build-system)
22786 (arguments
22787 `(#:phases
22788 (modify-phases %standard-phases
22789 (replace 'check
22790 (lambda* (#:key tests? #:allow-other-keys)
22791 (when tests?
22792 (invoke "python" "tests/test_requests_file.py")))))))
22793 (propagated-inputs
22794 (list python-requests python-six))
22795 (home-page "https://github.com/dashea/requests-file")
22796 (synopsis "File transport adapter for Requests")
22797 (description
22798 "Requests-File is a transport adapter for use with the Requests Python
22799 library to allow local file system access via @code{file://} URLs.")
22800 (license license:asl2.0)))
22801
22802 (define-public python-identify
22803 (package
22804 (name "python-identify")
22805 (version "1.4.25")
22806 (source
22807 (origin
22808 ;; There are no tests in the PyPI tarball.
22809 (method git-fetch)
22810 (uri (git-reference
22811 (url "https://github.com/chriskuehl/identify")
22812 (commit (string-append "v" version))))
22813 (file-name (git-file-name name version))
22814 (sha256
22815 (base32 "1fqgci6skckcq0x5pnxh6k2qjzn1ndsrgha1j6wwv1ld4g9bd3hz"))))
22816 (build-system python-build-system)
22817 (arguments
22818 `(#:phases
22819 (modify-phases %standard-phases
22820 ;; system-error "utime" "~A" ("No such file or directory")
22821 (delete 'ensure-no-mtimes-pre-1980)
22822 (replace 'check
22823 (lambda* (#:key tests? #:allow-other-keys)
22824 (when tests?
22825 (invoke "pytest" "-vv")))))))
22826 (native-inputs
22827 (list python-coverage python-pytest))
22828 (propagated-inputs
22829 (list python-editdistance))
22830 (home-page "https://github.com/chriskuehl/identify")
22831 (synopsis "File identification library for Python")
22832 (description
22833 "@code{identify} is a file identification library for Python. Given
22834 a file (or some information about a file), return a set of standardized tags
22835 identifying what the file is.")
22836 (license license:expat)))
22837
22838 (define-public python-tldextract
22839 (package
22840 (name "python-tldextract")
22841 (version "3.3.0")
22842 (source
22843 (origin
22844 (method url-fetch)
22845 (uri (pypi-uri "tldextract" version))
22846 (sha256
22847 (base32
22848 "1wac4yvcpgqjvls770mfx165amvy7gr00nnd2w24bqqwyamj9kdd"))))
22849 (build-system python-build-system)
22850 (native-inputs
22851 (list python-pytest python-responses python-setuptools-scm))
22852 (propagated-inputs
22853 (list python-filelock python-idna python-requests python-requests-file))
22854 (home-page
22855 "https://github.com/john-kurkowski/tldextract")
22856 (synopsis
22857 "Separate the TLD from the registered domain and subdomains of a URL")
22858 (description
22859 "TLDExtract accurately separates the TLD from the registered domain and
22860 subdomains of a URL, using the Public Suffix List. By default, this includes
22861 the public ICANN TLDs and their exceptions. It can optionally support the
22862 Public Suffix List's private domains as well.")
22863 (license license:bsd-3)))
22864
22865 (define-public python-tldr
22866 (package
22867 (name "python-tldr")
22868 (version "3.1.0")
22869 (source
22870 (origin
22871 ;; There's no test in PyPI.
22872 (method git-fetch)
22873 (uri (git-reference
22874 (url "https://github.com/tldr-pages/tldr-python-client")
22875 (commit version)))
22876 (file-name (git-file-name name version))
22877 (sha256
22878 (base32 "1hxmprqg8c4cvs19n7f80f3y7jj74i8sc2dmq2gdjmsdrb54bbzc"))))
22879 (build-system python-build-system)
22880 (arguments
22881 (list #:phases
22882 #~(modify-phases %standard-phases
22883 (add-after 'build 'build-doc
22884 (lambda _
22885 (invoke "make" "-C" "docs")))
22886 (replace 'check
22887 (lambda* (#:key tests? #:allow-other-keys)
22888 (when tests?
22889 ;; This test fails. It tries to open a network socket.
22890 (invoke "pytest" "-vv" "-k" "not test_error_message")))))))
22891 (native-inputs
22892 (list python-pytest python-pytest-runner python-sphinx-argparse))
22893 (inputs
22894 (list python-argcomplete python-colorama python-termcolor python-shtab))
22895 (home-page "https://github.com/tldr-pages/tldr-python-client")
22896 (synopsis "Python command-line client for tldr pages")
22897 (description "This package provides the @code{tldr} command allowing users
22898 to view @code{tldr} pages from a shell. The @code{tldr} pages are a community
22899 effort to simplify the man pages with practical examples.")
22900 (license license:expat))) ; MIT license
22901
22902 (define-public python-nodeenv
22903 (package
22904 (name "python-nodeenv")
22905 (version "1.4.0")
22906 (source
22907 (origin
22908 ;; There's no tarball in PyPI.
22909 (method git-fetch)
22910 (uri (git-reference
22911 (url "https://github.com/ekalinin/nodeenv")
22912 (commit version)))
22913 (file-name (git-file-name name version))
22914 (sha256
22915 (base32 "0y443icx0w7jlzmxmmcm4q8dqfiwgafbb9cp8jpm68mbqxbz40a7"))))
22916 (build-system python-build-system)
22917 (arguments
22918 `(#:phases
22919 (modify-phases %standard-phases
22920 (replace 'check
22921 (lambda _
22922 ;; This test fails. It tries to open a network socket.
22923 (invoke "pytest" "-vv" "-k" "not test_smoke"))))))
22924 (native-inputs
22925 (list python-coverage python-mock python-pytest))
22926 (home-page "https://ekalinin.github.io/nodeenv/")
22927 (synopsis "Create isolated node.js environments")
22928 (description
22929 "Nodeenv (node.js virtual environment) is a tool to create isolated
22930 node.js environments. It creates an environment that has its own installation
22931 directories, that doesn't share libraries with other node.js virtual
22932 environments.")
22933 (license license:bsd-3)))
22934
22935 (define-public python-pynamecheap
22936 (package
22937 (name "python-pynamecheap")
22938 (version "0.0.3")
22939 (source
22940 (origin
22941 (method url-fetch)
22942 (uri (pypi-uri "PyNamecheap" version))
22943 (sha256
22944 (base32
22945 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
22946 (build-system python-build-system)
22947 (propagated-inputs
22948 (list python-requests))
22949 (home-page
22950 "https://github.com/Bemmu/PyNamecheap")
22951 (synopsis
22952 "Namecheap API client in Python")
22953 (description
22954 "PyNamecheap is a Namecheap API client in Python.")
22955 (license license:expat)))
22956
22957 (define-public python-dns-lexicon
22958 (package
22959 (name "python-dns-lexicon")
22960 (version "2.4.0")
22961 (source
22962 (origin
22963 (method url-fetch)
22964 (uri (pypi-uri "dns-lexicon" version))
22965 (sha256
22966 (base32
22967 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
22968 (build-system python-build-system)
22969 (arguments
22970 `(#:tests? #f)) ;requires internet access
22971 (propagated-inputs
22972 (list python-future python-pynamecheap python-requests
22973 python-tldextract python-urllib3))
22974 (home-page "https://github.com/AnalogJ/lexicon")
22975 (synopsis
22976 "Manipulate DNS records on various DNS providers")
22977 (description
22978 "Lexicon provides a way to manipulate DNS records on multiple DNS
22979 providers in a standardized way. It has a CLI but it can also be used as a
22980 Python library. It was designed to be used in automation, specifically with
22981 Let's Encrypt.")
22982 (license license:expat)))
22983
22984 (define-public python-cfgv
22985 (package
22986 (name "python-cfgv")
22987 (version "3.3.1")
22988 (source
22989 (origin
22990 ;; There are no tests in the PyPI tarball.
22991 (method git-fetch)
22992 (uri (git-reference
22993 (url "https://github.com/asottile/cfgv")
22994 (commit (string-append "v" version))))
22995 (file-name (git-file-name name version))
22996 (sha256
22997 (base32 "1pci97cmn3v45sfch9s3lshidrl0309ls9byidic0l8drkwnkwcj"))))
22998 (build-system python-build-system)
22999 (arguments
23000 `(#:phases
23001 (modify-phases %standard-phases
23002 (replace 'check
23003 (lambda* (#:key tests? #:allow-other-keys)
23004 (when tests?
23005 (invoke "pytest" "-vv")))))))
23006 (native-inputs
23007 (list python-pytest))
23008 (home-page "https://github.com/asottile/cfgv")
23009 (synopsis "Configuration validation library")
23010 (description
23011 "This library helps to validate configuration files and produce human
23012 readable error messages.")
23013 (license license:expat)))
23014
23015 (define-public python-commandlines
23016 (package
23017 (name "python-commandlines")
23018 (version "0.4.1")
23019 (source
23020 (origin
23021 (method url-fetch)
23022 (uri (pypi-uri "commandlines" version))
23023 (sha256
23024 (base32
23025 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
23026 (build-system python-build-system)
23027 (home-page "https://github.com/chrissimpkins/commandlines")
23028 (synopsis "Command line argument to object parsing library")
23029 (description
23030 "@code{Commandlines} is a Python library for command line application
23031 development that supports command line argument parsing, command string
23032 validation testing and application logic.")
23033 (license license:expat)))
23034
23035 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
23036 ;; python-numba. They have a very unflexible relationship.
23037 (define-public python-numba
23038 (package
23039 (name "python-numba")
23040 (version "0.55.1")
23041 (source
23042 (origin
23043 (method url-fetch)
23044 (uri (pypi-uri "numba" version))
23045 (sha256
23046 (base32
23047 "18rf8i32m1045zxglvicpgldvzmqdxqvs3dhjd7wilb64sd0ds83"))))
23048 (build-system python-build-system)
23049 (arguments
23050 `(#:phases
23051 (modify-phases %standard-phases
23052 (add-after 'unpack 'disable-proprietary-features
23053 (lambda _
23054 (setenv "NUMBA_DISABLE_HSA" "1")
23055 (setenv "NUMBA_DISABLE_CUDA" "1")))
23056 (add-after 'unpack 'disable-failing-tests
23057 (lambda _
23058 ;; This one test fails because a deprecation warning is printed.
23059 (substitute* "numba/tests/test_import.py"
23060 (("def test_no_accidental_warnings")
23061 "def disabled_test_no_accidental_warnings"))))
23062 (replace 'check
23063 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
23064 (when tests?
23065 (add-installed-pythonpath inputs outputs)
23066 ;; Something is wrong with the PYTHONPATH when running the
23067 ;; tests from the build directory, as it complains about not being
23068 ;; able to import certain modules.
23069 (with-directory-excursion "/tmp"
23070 (setenv "HOME" (getcwd))
23071 (invoke "python3" "-m" "numba.runtests" "-v" "-m"))))))))
23072 (propagated-inputs
23073 (list python-llvmlite python-numpy python-singledispatch))
23074 (native-inputs ;for tests
23075 (list python-jinja2 python-pygments))
23076 (home-page "https://numba.pydata.org")
23077 (synopsis "Compile Python code using LLVM")
23078 (description "Numba gives you the power to speed up your applications with
23079 high performance functions written directly in Python. With a few
23080 annotations, array-oriented and math-heavy Python code can be just-in-time
23081 compiled to native machine instructions, similar in performance to C, C++ and
23082 Fortran, without having to switch languages or Python interpreters.
23083
23084 Numba works by generating optimized machine code using the LLVM compiler
23085 infrastructure at import time, runtime, or statically (using the included pycc
23086 tool).")
23087 (license license:bsd-3)))
23088
23089 (define-public python-numcodecs
23090 (package
23091 (name "python-numcodecs")
23092 (version "0.6.4")
23093 (source
23094 (origin
23095 (method url-fetch)
23096 (uri (pypi-uri "numcodecs" version))
23097 (sha256
23098 (base32
23099 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))
23100 (modules '((guix build utils)))
23101 (snippet
23102 '(begin
23103 (delete-file-recursively "c-blosc")
23104 (for-each delete-file '("numcodecs/blosc.c"
23105 "numcodecs/compat_ext.c"
23106 "numcodecs/lz4.c"
23107 "numcodecs/vlen.c"
23108 "numcodecs/zstd.c"))))))
23109 (build-system python-build-system)
23110 (arguments
23111 `(#:tests? #false ; TODO: unclear why numcodecs.* are not found
23112 #:phases
23113 (modify-phases %standard-phases
23114 (add-after 'unpack 'disable-avx2
23115 (lambda _
23116 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
23117 (add-after 'unpack 'unbundle
23118 (lambda _
23119 (substitute* "setup.py"
23120 (("sources=sources \\+ blosc_sources,")
23121 "sources=sources,")
23122 (("extra_compile_args=extra_compile_args")
23123 "extra_compile_args=list(base_compile_args)")
23124 (("'numcodecs.zstd',")
23125 "'numcodecs.zstd', libraries=['zstd'], ")
23126 (("'numcodecs.lz4',")
23127 "'numcodecs.lz4', libraries=['lz4'], ")
23128 (("'numcodecs.blosc',")
23129 "'numcodecs.blosc', libraries=['blosc'], "))))
23130 (replace 'check
23131 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
23132 (when tests?
23133 (add-installed-pythonpath inputs outputs)
23134 (invoke "pytest" "-vv")))))))
23135 (inputs
23136 (list c-blosc lz4 zlib
23137 `(,zstd "lib")))
23138 (propagated-inputs
23139 (list python-numpy python-msgpack))
23140 (native-inputs
23141 (list python-cython python-pytest python-setuptools-scm))
23142 (home-page "https://github.com/zarr-developers/numcodecs")
23143 (synopsis "Buffer compression and transformation codecs")
23144 (description
23145 "This Python package provides buffer compression and transformation
23146 codecs for use in data storage and communication applications.")
23147 (license license:expat)))
23148
23149 (define-public python-asciitree
23150 (package
23151 (name "python-asciitree")
23152 (version "0.3.3")
23153 (source
23154 (origin
23155 (method url-fetch)
23156 (uri (pypi-uri "asciitree" version))
23157 (sha256
23158 (base32
23159 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
23160 (build-system python-build-system)
23161 (home-page "https://github.com/mbr/asciitree")
23162 (synopsis "Draws ASCII trees")
23163 (description "This package draws tree structures using characters.")
23164 (license license:expat)))
23165
23166 (define-public python-zarr
23167 (package
23168 (name "python-zarr")
23169 (version "2.4.0")
23170 (source
23171 (origin
23172 (method url-fetch)
23173 (uri (pypi-uri "zarr" version))
23174 (sha256
23175 (base32
23176 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
23177 (build-system python-build-system)
23178 (arguments
23179 `(#:phases
23180 (modify-phases %standard-phases
23181 (add-after 'unpack 'disable-service-tests
23182 (lambda _
23183 (setenv "ZARR_TEST_ABS" "0")
23184 (setenv "ZARR_TEST_MONGO" "0")
23185 (setenv "ZARR_TEST_REDIS" "0")
23186 #t))
23187 (replace 'check
23188 (lambda _
23189 (invoke "pytest" "-vv" "-k" "not lmdb")
23190 #t)))))
23191 (propagated-inputs
23192 (list python-asciitree python-fasteners python-numcodecs
23193 python-numpy))
23194 (native-inputs
23195 (list python-pytest python-setuptools-scm))
23196 (home-page "https://github.com/zarr-developers/zarr-python")
23197 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
23198 (description
23199 "This package provides an implementation of chunked, compressed,
23200 N-dimensional arrays for Python.")
23201 (license license:expat)))
23202
23203 (define-public python-anndata
23204 (package
23205 (name "python-anndata")
23206 (version "0.8.0")
23207 (source
23208 (origin
23209 ;; The tarball from PyPi doesn't include tests.
23210 (method git-fetch)
23211 (uri (git-reference
23212 (url "https://github.com/theislab/anndata")
23213 (commit version)))
23214 (file-name (git-file-name name version))
23215 (sha256
23216 (base32
23217 "0v7npqrg1rdm8jzw22a45c0mqrmsv05r3k88i3lhzi0pzzxca1i1"))))
23218 (build-system python-build-system)
23219 (arguments
23220 `(#:phases
23221 (modify-phases %standard-phases
23222 (delete 'check)
23223 (replace 'build
23224 (lambda _
23225 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)
23226 (substitute* "anndata/_metadata.py"
23227 (("__version__ =.*")
23228 (string-append "__version__ = \"" ,version "\"\n")))
23229 ;; ZIP does not support timestamps before 1980.
23230 (setenv "SOURCE_DATE_EPOCH" "315532800")
23231 (invoke "flit" "build")))
23232 (replace 'install
23233 (lambda* (#:key inputs outputs #:allow-other-keys)
23234 (add-installed-pythonpath inputs outputs)
23235 (let ((out (assoc-ref outputs "out")))
23236 (for-each (lambda (wheel)
23237 (format #true wheel)
23238 (invoke "python" "-m" "pip" "install"
23239 wheel (string-append "--prefix=" out)))
23240 (find-files "dist" "\\.whl$"))))))))
23241 (propagated-inputs
23242 (list python-h5py
23243 python-importlib-metadata
23244 python-natsort
23245 python-numcodecs
23246 python-packaging
23247 python-pandas
23248 python-scipy
23249 python-zarr))
23250 (native-inputs
23251 (list python-joblib python-pytest python-toml python-flit
23252 python-setuptools-scm))
23253 (home-page "https://github.com/theislab/anndata")
23254 (synopsis "Annotated data for data analysis pipelines")
23255 (description "Anndata is a package for simple (functional) high-level APIs
23256 for data analysis pipelines. In this context, it provides an efficient,
23257 scalable way of keeping track of data together with learned annotations and
23258 reduces the code overhead typically encountered when using a mostly
23259 object-oriented library such as @code{scikit-learn}.")
23260 (license license:bsd-3)))
23261
23262 (define-public python-dill
23263 (package
23264 (name "python-dill")
23265 (version "0.3.5.1")
23266 (source
23267 (origin
23268 (method url-fetch)
23269 (uri (pypi-uri "dill" version))
23270 (sha256
23271 (base32 "11lc40x37cx2i8qqbc5qklifm65dyjl6prrqsycybvpixzrl2pnp"))))
23272 (build-system python-build-system)
23273 (arguments
23274 `(#:phases
23275 (modify-phases %standard-phases
23276 (replace 'check
23277 (lambda _
23278 (with-directory-excursion "/tmp"
23279 (invoke "nosetests" "-v"))
23280 #t)))))
23281 (native-inputs
23282 (list python-nose))
23283 (home-page "https://pypi.org/project/dill/")
23284 (synopsis "Serialize all of Python")
23285 (description "Dill extends Python's @code{pickle} module for serializing
23286 and de-serializing Python objects to the majority of the built-in Python
23287 types. Dill provides the user the same interface as the @code{pickle} module,
23288 and also includes some additional features. In addition to pickling Python
23289 objects, @code{dill} provides the ability to save the state of an interpreter
23290 session in a single command. Hence, it would be feasible to save a
23291 interpreter session, close the interpreter, ship the pickled file to another
23292 computer, open a new interpreter, unpickle the session and thus continue from
23293 the saved state of the original interpreter session.")
23294 (license license:bsd-3)))
23295
23296 (define-public python-multiprocess
23297 (package
23298 (name "python-multiprocess")
23299 (version "0.70.9")
23300 (source
23301 (origin
23302 (method url-fetch)
23303 (uri (pypi-uri "multiprocess" version))
23304 (sha256
23305 (base32
23306 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
23307 (build-system python-build-system)
23308 (arguments
23309 `(#:phases
23310 (modify-phases %standard-phases
23311 (add-after 'unpack 'disable-broken-tests
23312 (lambda _
23313 ;; This test is broken as there is no keyboard interrupt.
23314 (substitute* "py3.7/multiprocess/tests/__init__.py"
23315 (("^(.*)def test_wait_result"
23316 line indent)
23317 (string-append indent
23318 "@unittest.skip(\"Disabled by Guix\")\n"
23319 line)))
23320 #t))
23321 ;; Tests must be run after installation.
23322 (delete 'check)
23323 (add-after 'install 'check
23324 (lambda* (#:key inputs outputs #:allow-other-keys)
23325 (add-installed-pythonpath inputs outputs)
23326 (invoke "python" "-m" "multiprocess.tests")
23327 #t)))))
23328 (propagated-inputs
23329 (list python-dill))
23330 (home-page "https://pypi.org/project/multiprocess/")
23331 (synopsis "Multiprocessing and multithreading in Python")
23332 (description
23333 "This package is a fork of the multiprocessing Python package, a package
23334 which supports the spawning of processes using the API of the standard
23335 library's @code{threading} module.")
23336 (license license:bsd-3)))
23337
23338 (define-public python-multiprocessing-on-dill
23339 (package
23340 (name "python-multiprocessing-on-dill")
23341 (version "3.5.0a4")
23342 (source (origin
23343 (method url-fetch)
23344 (uri (pypi-uri "multiprocessing_on_dill" version))
23345 (sha256
23346 (base32
23347 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
23348 (build-system python-build-system)
23349 (arguments
23350 (list
23351 #:phases
23352 #~(modify-phases %standard-phases
23353 (replace 'check
23354 (lambda* (#:key tests? #:allow-other-keys)
23355 (when tests?
23356 (invoke "pytest" "-vv")))))))
23357 (propagated-inputs (list python-dill))
23358 (native-inputs (list python-check-manifest python-pytest python-wheel))
23359 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
23360 (synopsis "Multiprocessing using dill instead of pickle")
23361 (description
23362 "This package provides a friendly fork of multiprocessing which uses dill
23363 instead of pickle.")
23364 (license license:psfl)))
23365
23366 (define-public python-toolrack
23367 (package
23368 (name "python-toolrack")
23369 (version "3.0.1")
23370 (source
23371 (origin
23372 (method git-fetch)
23373 (uri (git-reference
23374 (url "https://github.com/albertodonato/toolrack")
23375 (commit (string-append "v" version))))
23376 (file-name (git-file-name name version))
23377 (sha256
23378 (base32
23379 "0ych11b7nchnkhqgf7dgivbvn2lzafjsi7nhb1an5zjjyns39gpx"))))
23380 (build-system python-build-system)
23381 (arguments
23382 (list
23383 #:phases
23384 #~(modify-phases %standard-phases
23385 (add-after 'unpack 'patch-/bin/sh
23386 (lambda _
23387 (substitute* "toolrack/aio/tests/test_process.py"
23388 (("/bin/sh")
23389 (which "sh")))))
23390 (replace 'check
23391 (lambda* (#:key tests? #:allow-other-keys)
23392 (when tests?
23393 (invoke "pytest" "-vv" "--pyargs" "toolrack"
23394 "-k"
23395 (string-append
23396 ;; These tests fail for unknown reason comparing the
23397 ;; expected output of shell scripts.
23398 "not test_parse_stderr "
23399 "and not test_parse_no_ending_newline "
23400 "and not test_parse_stdout"))))))))
23401 (native-inputs (list python-pytest python-pytest-asyncio
23402 python-pytest-mock))
23403 (home-page "https://github.com/albertodonato/toolrack")
23404 (synopsis "Collection of Python utility functions and classes")
23405 (description "This package provides a collection of miscellaneous utility
23406 functions and classes.")
23407 (license license:lgpl3+)))
23408
23409 (define-public python-toolz
23410 (package
23411 (name "python-toolz")
23412 (version "0.11.2")
23413 (source
23414 (origin
23415 (method url-fetch)
23416 (uri (pypi-uri "toolz" version))
23417 (sha256
23418 (base32
23419 "0cxwlh8dz8gq0l0bzchjnqqwhdp261nfd958ppqm518k2mg2scbb"))))
23420 (build-system python-build-system)
23421 (arguments
23422 `(#:phases
23423 (modify-phases %standard-phases
23424 (replace 'check
23425 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
23426 (when tests?
23427 (add-installed-pythonpath inputs outputs)
23428 (invoke "python" "-m" "pytest" "--doctest-modules"
23429 "--pyargs" "toolz")))))))
23430 (native-inputs
23431 (list python-pytest))
23432 (home-page "https://github.com/pytoolz/toolz/")
23433 (synopsis "List processing tools and functional utilities")
23434 (description
23435 "This package provides a set of utility functions for iterators,
23436 functions, and dictionaries.")
23437 (license license:bsd-3)))
23438
23439 (define-public python-cytoolz
23440 (package
23441 (name "python-cytoolz")
23442 (version "0.11.2")
23443 (source
23444 (origin
23445 (method url-fetch)
23446 (uri (pypi-uri "cytoolz" version))
23447 (sha256
23448 (base32
23449 "1d12mgaippxxhn24w2hj0my3aqkx80fks5g4wzfdsvl0acqnc8za"))
23450 (modules '((guix build utils)))
23451 (snippet
23452 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
23453 (build-system python-build-system)
23454 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
23455 ;; 'exceptions'"
23456 (arguments '(#:tests? #f))
23457 (propagated-inputs
23458 (list python-toolz))
23459 (native-inputs
23460 (list python-cython))
23461 (home-page "https://github.com/pytoolz/cytoolz")
23462 (synopsis "High performance functional utilities")
23463 (description
23464 "The cytoolz package implements the same API as provided by toolz. The
23465 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
23466 that is accessible to other projects developed in Cython.")
23467 (license license:bsd-3)))
23468
23469 (define-public python-sortedcollections
23470 (package
23471 (name "python-sortedcollections")
23472 (version "2.1.0")
23473 (source
23474 (origin
23475 (method url-fetch)
23476 (uri (pypi-uri "sortedcollections" version))
23477 (sha256
23478 (base32
23479 "1kfabpnjyjm5ml2zspry9jy3xq49aybchgaa4ahic2jqdjfn1sfq"))))
23480 (build-system python-build-system)
23481 (propagated-inputs
23482 (list python-sortedcontainers))
23483 (arguments '(#:tests? #f)) ; Tests not included in release tarball.
23484 (home-page "http://www.grantjenks.com/docs/sortedcollections/")
23485 (synopsis "Python Sorted Collections")
23486 (description "Sorted Collections is a Python sorted collections library.")
23487 (license license:asl2.0)))
23488
23489 (define-public python-sortedcontainers
23490 (package
23491 (name "python-sortedcontainers")
23492 (version "2.1.0")
23493 (source
23494 (origin
23495 (method url-fetch)
23496 (uri (pypi-uri "sortedcontainers" version))
23497 (sha256
23498 (base32
23499 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
23500 (build-system python-build-system)
23501 (arguments
23502 ;; FIXME: Tests require many extra dependencies, and would introduce
23503 ;; a circular dependency on hypothesis, which uses this package.
23504 '(#:tests? #f))
23505 (propagated-inputs
23506 `(("python-appdirs" ,python-appdirs)
23507 ("python-distlib" ,python-distlib)
23508 ("python-filelock" ,python-filelock)
23509 ("python-six" ,python-six-bootstrap)))
23510 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
23511 (synopsis "Sorted List, Sorted Dict, Sorted Set")
23512 (description
23513 "This package provides a sorted collections library, written in
23514 pure-Python.")
23515 (license license:asl2.0)))
23516
23517 (define python-cloudpickle-testpkg
23518 (package
23519 (name "python-cloudpickle-testpkg")
23520 (version "1.6.0")
23521 (source
23522 (origin
23523 ;; Archive on pypi does not include test infrastructure.
23524 (method git-fetch)
23525 (uri (git-reference
23526 (url "https://github.com/cloudpipe/cloudpickle")
23527 (commit (string-append "v" version))))
23528 (file-name (git-file-name name version))
23529 (sha256
23530 (base32
23531 "1584d21d4rcpryn8yfz0pjnjprk4zm367m0razdcz8cjbsh0dxp6"))))
23532 (build-system python-build-system)
23533 (arguments
23534 '(#:phases
23535 (modify-phases %standard-phases
23536 (add-after 'unpack 'chdir
23537 (lambda _ (chdir "tests/cloudpickle_testpkg"))))))
23538 (home-page "https://github.com/cloudpipe/cloudpickle")
23539 (synopsis "Extended pickling support for Python objects")
23540 (description
23541 "Cloudpickle makes it possible to serialize Python constructs not
23542 supported by the default pickle module from the Python standard library. It
23543 is especially useful for cluster computing where Python expressions are
23544 shipped over the network to execute on remote hosts, possibly close to the
23545 data.")
23546 (license license:bsd-3)))
23547
23548 (define-public python-cloudpickle
23549 (package
23550 (inherit python-cloudpickle-testpkg)
23551 (name "python-cloudpickle")
23552 (build-system python-build-system)
23553 (arguments
23554 '(#:phases
23555 (modify-phases %standard-phases
23556 (replace 'check
23557 (lambda* (#:key tests? #:allow-other-keys)
23558 (if tests?
23559 (invoke "pytest" "-s" "-vv")
23560 (format #t "test suite not run~%")))))))
23561 (native-inputs
23562 (list ;; For tests.
23563 python-cloudpickle-testpkg python-psutil python-pytest
23564 python-tornado-6))
23565 (home-page "https://github.com/cloudpipe/cloudpickle")
23566 (synopsis "Extended pickling support for Python objects")
23567 (description
23568 "Cloudpickle makes it possible to serialize Python constructs not
23569 supported by the default pickle module from the Python standard library. It
23570 is especially useful for cluster computing where Python expressions are
23571 shipped over the network to execute on remote hosts, possibly close to the
23572 data.")
23573 (license license:bsd-3)))
23574
23575 (define-public python-locket
23576 (package
23577 (name "python-locket")
23578 (version "1.0.0")
23579 (source
23580 (origin
23581 (method url-fetch)
23582 (uri (pypi-uri "locket" version))
23583 (sha256
23584 (base32
23585 "0cm6290zm3ba62n2x2piy3s8d41hrmffda2nw18ggfwb582lq3aw"))))
23586 (build-system python-build-system)
23587 (home-page "https://github.com/mwilliamson/locket.py")
23588 (synopsis "File-based locks for Python")
23589 (description
23590 "Locket implements a lock that can be used by multiple processes provided
23591 they use the same path.")
23592 (license license:bsd-2)))
23593
23594 (define-public python-blosc
23595 (package
23596 (name "python-blosc")
23597 (version "1.5.1")
23598 (source
23599 (origin
23600 (method url-fetch)
23601 (uri (pypi-uri "blosc" version))
23602 (sha256
23603 (base32
23604 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
23605 (build-system python-build-system)
23606 ;; FIXME: all tests pass, but then this error is printed:
23607 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
23608 (arguments '(#:tests? #f))
23609 (propagated-inputs
23610 (list python-numpy))
23611 (home-page "https://github.com/blosc/python-blosc")
23612 (synopsis "Python wrapper for the Blosc data compressor library")
23613 (description "Blosc is a high performance compressor optimized for binary
23614 data. It has been designed to transmit data to the processor cache faster
23615 than the traditional, non-compressed, direct memory fetch approach via a
23616 @code{memcpy()} system call.
23617
23618 Blosc works well for compressing numerical arrays that contains data with
23619 relatively low entropy, like sparse data, time series, grids with
23620 regular-spaced values, etc.
23621
23622 This Python package wraps the Blosc library.")
23623 (license license:bsd-3)))
23624
23625 (define-public python-partd
23626 (package
23627 (name "python-partd")
23628 (version "1.2.0")
23629 (source
23630 (origin
23631 (method url-fetch)
23632 (uri (pypi-uri "partd" version))
23633 (sha256
23634 (base32
23635 "1sy3vdfyyx3bc5590zb7gwpsmimqz8m992x9hsydq8nmhixqjrxa"))))
23636 (build-system python-build-system)
23637 (propagated-inputs
23638 (list python-blosc
23639 python-locket
23640 python-numpy
23641 python-pandas
23642 python-pyzmq
23643 python-toolz))
23644 (home-page "https://github.com/dask/partd/")
23645 (synopsis "Appendable key-value storage")
23646 (description "Partd stores key-value pairs. Values are raw bytes. We
23647 append on old values. Partd excels at shuffling operations.")
23648 (license license:bsd-3)))
23649
23650 (define-public python-fsspec
23651 (package
23652 (name "python-fsspec")
23653 (version "2022.5.0")
23654 (source
23655 (origin
23656 (method url-fetch)
23657 (uri (pypi-uri "fsspec" version))
23658 (sha256
23659 (base32
23660 "1d43qiz8g395042a52yswz6j7q41gvrv3k53wvxn1rs4bk3mjm3s"))))
23661 (build-system python-build-system)
23662 (arguments '(#:tests? #f)) ; there are none
23663 (home-page "https://github.com/intake/filesystem_spec")
23664 (synopsis "File-system specification")
23665 (description "The purpose of this package is to produce a template or
23666 specification for a file-system interface, that specific implementations
23667 should follow, so that applications making use of them can rely on a common
23668 behavior and not have to worry about the specific internal implementation
23669 decisions with any given backend.")
23670 (license license:bsd-3)))
23671
23672 ;; Note: Remember to update python-distributed when updating dask.
23673 (define-public python-dask
23674 (package
23675 (name "python-dask")
23676 (version "2022.05.2")
23677 (source
23678 (origin
23679 (method git-fetch)
23680 (uri (git-reference
23681 (url "https://github.com/dask/dask/")
23682 (commit "8db1597c9745543df3129399bead5fbc95a54571")))
23683 (file-name (git-file-name name version))
23684 (sha256
23685 (base32 "1xfk3wml972z502w5ii5mn03ls3rg5p4hqgl0hkicgpmzlyz9kph"))
23686 (snippet
23687 ;; Delete generated copy of python-versioneer. We recreate it below.
23688 '(delete-file "versioneer.py"))))
23689 (build-system python-build-system)
23690 (arguments
23691 `(#:phases
23692 (modify-phases %standard-phases
23693 (add-after 'unpack 'versioneer
23694 (lambda _
23695 (invoke "versioneer" "install")))
23696 (replace 'check
23697 (lambda* (#:key tests? #:allow-other-keys)
23698 (when tests? (invoke "pytest" "-vv")))))))
23699 (propagated-inputs
23700 (list python-cloudpickle
23701 python-fsspec
23702 python-numpy
23703 python-packaging
23704 python-pandas
23705 python-partd
23706 python-toolz
23707 python-pyyaml))
23708 (native-inputs
23709 (list python-pytest python-pytest-runner python-pytest-rerunfailures
23710 python-versioneer))
23711 (home-page "https://github.com/dask/dask/")
23712 (synopsis "Parallel computing with task scheduling")
23713 (description
23714 "Dask is a flexible parallel computing library for analytics. It
23715 consists of two components: dynamic task scheduling optimized for computation,
23716 and large data collections like parallel arrays, dataframes, and lists that
23717 extend common interfaces like NumPy, Pandas, or Python iterators to
23718 larger-than-memory or distributed environments. These parallel collections
23719 run on top of the dynamic task schedulers.")
23720 (license license:bsd-3)))
23721
23722 (define-public python-ilinkedlist
23723 (package
23724 (name "python-ilinkedlist")
23725 (version "0.4.0")
23726 (source
23727 (origin
23728 (method url-fetch)
23729 (uri (pypi-uri "ilinkedlist" version))
23730 (sha256
23731 (base32
23732 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
23733 (build-system python-build-system)
23734 (native-inputs (list python-pytest))
23735 (inputs (list python))
23736 (home-page "https://github.com/luther9/ilinkedlist-py")
23737 (synopsis "Immutable linked list library")
23738 (description
23739 "This is a implementation of immutable linked lists for Python. It
23740 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
23741 Since a linked list is treated as immutable, it is hashable, and its length
23742 can be retrieved in constant time. Some of the terminology is inspired by
23743 LISP. It is possible to create an improper list by creating a @code{Pair}
23744 with a non-list @code{cdr}.")
23745 (license license:gpl3+)))
23746
23747 (define-public python-readlike
23748 (package
23749 (name "python-readlike")
23750 (version "0.1.3")
23751 (source
23752 (origin
23753 (method url-fetch)
23754 (uri (pypi-uri "readlike" version))
23755 (sha256
23756 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
23757 (build-system python-build-system)
23758 (home-page "https://github.com/jangler/readlike")
23759 (synopsis "GNU Readline-like line editing module")
23760 (description
23761 "This Python module provides line editing functions similar to the default
23762 Emacs-style ones of GNU Readline. Unlike the Python standard library's
23763 @code{readline} package, this one allows access to those capabilities in settings
23764 outside of a standard command-line interface. It is especially well-suited to
23765 interfacing with Urwid, due to a shared syntax for describing key inputs.
23766
23767 Currently, all stateless Readline commands are implemented. Yanking and history
23768 are not supported.")
23769 (license license:expat)))
23770
23771 (define-public python-reparser
23772 (package
23773 (name "python-reparser")
23774 (version "1.4.3")
23775 (source
23776 (origin
23777 (method url-fetch)
23778 (uri (pypi-uri "ReParser" version))
23779 (sha256
23780 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
23781 (build-system python-build-system)
23782 (home-page "https://github.com/xmikos/reparser")
23783 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
23784 (description
23785 "This Python library provides a simple lexer/parser for inline markup based
23786 on regular expressions.")
23787 (license license:expat)))
23788
23789 (define-public python-retrying
23790 (package
23791 (name "python-retrying")
23792 (version "1.3.3")
23793 (source
23794 (origin
23795 (method git-fetch)
23796 (uri (git-reference
23797 (url "https://github.com/rholder/retrying")
23798 (commit (string-append "v" version))))
23799 (file-name (git-file-name name version))
23800 (sha256
23801 (base32
23802 "1kqipkbdaw5s1xg0gi29awm03vp1x8dz24pjidgxagvkvrjpzhi7"))))
23803 (build-system python-build-system)
23804 (propagated-inputs
23805 (list python-six))
23806 (home-page "https://github.com/rholder/retrying")
23807 (synopsis "Library for adding retry behavior")
23808 (description "Retrying is a general-purpose retrying library to simplify
23809 the task of adding retry behavior to just about anything.
23810
23811 Features:
23812
23813 @itemize
23814 @item Generic Decorator API.
23815 @item Specify stop condition (i.e. limit by number of attempts).
23816 @item Specify wait condition (i.e. exponential backoff sleeping between attempts).
23817 @item Customize retrying on Exceptions.
23818 @item Customize retrying on expected returned result.
23819 @end itemize")
23820 (license license:asl2.0)))
23821
23822 (define-public python-pre-commit
23823 (package
23824 (name "python-pre-commit")
23825 (version "2.10.0")
23826 (source
23827 (origin
23828 (method url-fetch)
23829 (uri (pypi-uri "pre_commit" version))
23830 (sha256
23831 (base32 "1ycf6wpxrhxhdzz0vpryhbdxlwik5khgcvp3hxwvfr447a6k84zl"))))
23832 (build-system python-build-system)
23833 (arguments
23834 ;; Tests fail with "AttributeError: module 'pre_commit.resources' has no
23835 ;; attribute 'empty_template_setup'".
23836 `(#:tests? #false))
23837 (propagated-inputs
23838 (list python-cfgv
23839 python-identify
23840 python-importlib-metadata
23841 python-nodeenv
23842 python-pyyaml
23843 python-toml
23844 python-virtualenv))
23845 (home-page "https://github.com/pre-commit/pre-commit")
23846 (synopsis "Framework for managing multi-language pre-commit hooks")
23847 (description
23848 "This package provides a framework for managing and maintaining
23849 multi-language pre-commit hooks.")
23850 (license license:expat)))
23851
23852 (define-public python-precis-i18n
23853 (package
23854 (name "python-precis-i18n")
23855 (version "1.0.3")
23856 (source
23857 (origin
23858 (method url-fetch)
23859 (uri (pypi-uri "precis_i18n" version))
23860 (sha256
23861 (base32
23862 "1qfb78zpx565vqkg0xhx75pna9sc35m370vpcz82982c8ix3ypyz"))))
23863 (build-system python-build-system)
23864 (home-page "https://github.com/byllyfish/precis_i18n")
23865 (synopsis "Implementation of the PRECIS framework")
23866 (description
23867 "This module implements the PRECIS Framework as described in RFC 8264,
23868 RFC 8265 and RFC 8266.")
23869 (license license:expat)))
23870
23871 (define-public python-absl-py
23872 (package
23873 (name "python-absl-py")
23874 (version "0.6.1")
23875 (source
23876 (origin
23877 (method url-fetch)
23878 (uri (pypi-uri "absl-py" version))
23879 (sha256
23880 (base32
23881 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
23882 (build-system python-build-system)
23883 (propagated-inputs
23884 (list python-six))
23885 (home-page "https://github.com/abseil/abseil-py")
23886 (synopsis "Abseil Python common libraries")
23887 (description
23888 "This package provides the Abseil Python Common Libraries, a collection
23889 of Python libraries for building Python applications.")
23890 (license license:asl2.0)))
23891
23892 (define-public python-astor
23893 (package
23894 (name "python-astor")
23895 (version "0.8.1")
23896 (source
23897 (origin
23898 (method url-fetch)
23899 (uri (pypi-uri "astor" version))
23900 (sha256
23901 (base32
23902 "0ppscdzzvxpznclkmhhj53iz314x3pfv4yc7c6gwxqgljgdgyvka"))))
23903 (build-system python-build-system)
23904 ;; FIXME: There are two errors and two test failures.
23905 (arguments `(#:tests? #f))
23906 (home-page "https://github.com/berkerpeksag/astor")
23907 (synopsis "Read and write Python ASTs")
23908 (description "Astor is designed to allow easy manipulation of Python
23909 source via the Abstract Syntax Tree.")
23910 (license license:bsd-3)))
23911
23912 (define-public python-astunparse
23913 (package
23914 (name "python-astunparse")
23915 (version "1.6.3")
23916 (source
23917 (origin
23918 (method url-fetch)
23919 (uri (pypi-uri "astunparse" version))
23920 (sha256
23921 (base32 "0wh8jjvwafxc7rvbyb13cdwndkicm7cry1bd8p1q9l7has23mnas"))))
23922 (build-system python-build-system)
23923 (arguments '(#:tests? #f)) ; there are none
23924 (propagated-inputs
23925 (list python-six python-wheel))
23926 (home-page "https://github.com/simonpercivall/astunparse")
23927 (synopsis "AST unparser for Python")
23928 (description "This package provides an AST unparser for Python. It is a
23929 factored out version of @code{unparse} found in the Python source
23930 distribution.")
23931 (license license:bsd-3)))
23932
23933 (define-public python-gast
23934 (package
23935 (name "python-gast")
23936 (version "0.5.3")
23937 (source
23938 (origin
23939 (method url-fetch)
23940 (uri (pypi-uri "gast" version))
23941 (sha256
23942 (base32 "1sidaczriw54pfkj3523y9j9q2harrczc1qqgnfaylz641ca5gng"))))
23943 (build-system python-build-system)
23944 (arguments
23945 '(#:phases (modify-phases %standard-phases
23946 (replace 'check
23947 (lambda* (#:key tests? #:allow-other-keys)
23948 (when tests?
23949 (invoke "pytest" "-vv")))))))
23950 (native-inputs
23951 (list python-pytest))
23952 (propagated-inputs
23953 (list python-astunparse))
23954 (home-page "https://github.com/serge-sans-paille/gast/")
23955 (synopsis "Generic Python AST that abstracts the underlying Python version")
23956 (description
23957 "GAST provides a compatibility layer between the AST of various Python
23958 versions, as produced by @code{ast.parse} from the standard @code{ast}
23959 module.")
23960 (license license:bsd-3)))
23961
23962 (define-public python-wikidata
23963 (package
23964 (name "python-wikidata")
23965 (version "0.6.1")
23966 (source
23967 (origin
23968 (method url-fetch)
23969 (uri (pypi-uri "Wikidata" version))
23970 (sha256
23971 (base32
23972 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
23973 (build-system python-build-system)
23974 (propagated-inputs
23975 (list python-babel))
23976 (home-page "https://github.com/dahlia/wikidata")
23977 (synopsis "Wikidata client library")
23978 (description
23979 "This package provides a Python interface to
23980 @url{https://www.wikidata.org/, Wikidata}.")
23981 (properties '((upstream-name . "Wikidata")))
23982 (license license:gpl3+)))
23983
23984 (define-public python-doctest-ignore-unicode
23985 (package
23986 (name "python-doctest-ignore-unicode")
23987 (version "0.1.2")
23988 (source
23989 (origin
23990 (method url-fetch)
23991 (uri (pypi-uri "doctest-ignore-unicode" version))
23992 (sha256
23993 (base32
23994 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
23995 (build-system python-build-system)
23996 (native-inputs
23997 (list python-nose))
23998 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
23999 (synopsis "Ignore Unicode literal prefixes in doctests")
24000 (description
24001 "This package adds support for a flag to ignore Unicode literal prefixes
24002 in doctests.")
24003 (license license:asl2.0)))
24004
24005 (define-public python-attr
24006 (package
24007 (name "python-attr")
24008 (version "0.3.1")
24009 (source
24010 (origin
24011 (method url-fetch)
24012 (uri (pypi-uri "attr" version))
24013 (sha256
24014 (base32
24015 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
24016 (build-system python-build-system)
24017 (home-page "https://github.com/denis-ryzhkov/attr")
24018 (synopsis "Decorator for attributes of target function or class")
24019 (description "Simple decorator to set attributes of target function or
24020 class in a @acronym{DRY, Don't Repeat Yourself} way.")
24021 (license license:expat)))
24022
24023 (define-public python-construct
24024 (package
24025 (name "python-construct")
24026 (version "2.10.56")
24027 (source
24028 (origin
24029 (method url-fetch)
24030 (uri (pypi-uri "construct" version))
24031 (sha256
24032 (base32
24033 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
24034 (build-system python-build-system)
24035 (arguments
24036 `(#:tests? #f)) ; No tests exist.
24037 (propagated-inputs
24038 (list python-extras python-arrow python-numpy python-ruamel.yaml))
24039 (home-page "https://construct.readthedocs.io")
24040 (synopsis "Declarative and symmetrical parser and builder for binary data")
24041 (description
24042 "This package provides both simple, atomic constructs (such as
24043 integers of various sizes), as well as composite ones which allow you
24044 form hierarchical and sequential structures of increasing complexity.
24045 It features bit and byte granularity, easy debugging and testing, an
24046 easy-to-extend subclass system, and lots of primitive constructs to
24047 make your work easier.")
24048 (license license:expat)))
24049
24050 (define-public python-outcome
24051 (package
24052 (name "python-outcome")
24053 (version "1.0.1")
24054 (source
24055 (origin
24056 (method url-fetch)
24057 (uri (pypi-uri "outcome" version))
24058 (sha256
24059 (base32 "0vxn04vspmlkkyijjkjnsc46f93ki8g62hr7ag10zpd7ic324y7w"))))
24060 (build-system python-build-system)
24061 (arguments
24062 `(#:phases
24063 (modify-phases %standard-phases
24064 (replace 'check
24065 (lambda* (#:key inputs outputs #:allow-other-keys)
24066 (add-installed-pythonpath inputs outputs)
24067 (invoke "pytest" "-vv"))))))
24068 (native-inputs
24069 (list python-pytest python-pytest-cov python-pytest-asyncio))
24070 (propagated-inputs
24071 (list python-async-generator python-attrs))
24072 (home-page "https://github.com/python-trio/outcome")
24073 (synopsis "Capture the outcome of Python function calls")
24074 (description
24075 "Capture the outcome of Python function calls. Extracted from the Trio
24076 project.")
24077 ;; Either license applies.
24078 (license (list license:expat license:asl2.0))))
24079
24080 (define-public python-trio
24081 (package
24082 (name "python-trio")
24083 (version "0.20.0")
24084 (source
24085 (origin
24086 (method url-fetch)
24087 (uri (pypi-uri "trio" version))
24088 (sha256
24089 (base32 "0w30cwmdwfa8zq2agqv3h62jzwwsk7ms8f683ag8f3jx279m42k7"))))
24090 (build-system python-build-system)
24091 (arguments
24092 `(#:phases
24093 (modify-phases %standard-phases
24094 (add-after 'unpack 'patch-sleep
24095 (lambda _
24096 (substitute* "trio/tests/test_subprocess.py"
24097 (("/bin/sleep")
24098 (which "sleep")))))
24099 (add-before 'check 'change-home
24100 (lambda _
24101 ;; Tests require a writable home.
24102 (setenv "HOME" "/tmp")))
24103 (replace 'check
24104 (lambda* (#:key tests? #:allow-other-keys)
24105 (when tests?
24106 (invoke "pytest" "-vv"
24107 "-n" (number->string (parallel-job-count))
24108 "-k"
24109 (string-append
24110 ;; This test times out.
24111 "not test_ki_protection_works"
24112 ;; Assertion errors.
24113 " and not test_guest_mode_ki"
24114 " and not test_run_in_trio_thread_ki"
24115 " and not test_simple_cancel_scope_usage_doesnt_create_cyclic_garbage"
24116 " and not test_nursery_cancel_doesnt_create_cyclic_garbage"
24117 " and not test_cancel_scope_exit_doesnt_create_cyclic_garbage"
24118 " and not test_locals_destroyed_promptly_on_cancel"
24119 " and not test_ipython_exc_handler"
24120 " and not test_for_leaking_fds"
24121 ;; These try to raise KeyboardInterrupt which does not work
24122 ;; in the build environment.
24123 " and not test_ki_self"
24124 " and not test_ki_wakes_us_up"
24125 ;; Failure in name resolution.
24126 " and not test_getnameinfo"
24127 " and not test_SocketType_resolve"
24128 ;; OSError: protocol not found.
24129 " and not test_getprotobyname"
24130 ;; EOFError: Ran out of input.
24131 " and not test_static_tool_sees_all_symbols"))))))))
24132 (native-inputs
24133 (list python-astor
24134 python-ipython
24135 python-jedi
24136 python-pylint
24137 python-pyopenssl
24138 python-pytest
24139 python-pytest-xdist
24140 python-pytest-cov
24141 python-trustme))
24142 (propagated-inputs
24143 (list python-async-generator
24144 python-attrs
24145 python-idna
24146 python-outcome
24147 python-sniffio
24148 python-sortedcontainers))
24149 (home-page "https://github.com/python-trio/trio")
24150 (synopsis "Friendly Python library for async concurrency and I/O")
24151 (description
24152 "Trio strives to be a production-quality, async/await-native I/O library
24153 for Python. Like all async libraries, its main purpose is to help you write
24154 programs that do multiple things at the same time with parallelized I/O.")
24155 ;; Either license applies.
24156 (license (list license:expat license:asl2.0))))
24157
24158 (define-public python-trio-typing
24159 (package
24160 (name "python-trio-typing")
24161 (version "0.5.0")
24162 (source
24163 (origin
24164 (method url-fetch)
24165 (uri (pypi-uri "trio-typing" version))
24166 (sha256
24167 (base32 "1yvlj4vf3wyvp16dw6vyfm4i2idm8lvdc3fvjhi6mhm62zv7s07j"))))
24168 (build-system python-build-system)
24169 (arguments
24170 `(#:phases
24171 (modify-phases %standard-phases
24172 (replace 'check
24173 (lambda _
24174 (invoke "pytest" "-vv"))))))
24175 (native-inputs
24176 (list python-attrs python-pytest))
24177 (propagated-inputs
24178 (list python-mypy python-mypy-extensions python-trio
24179 python-typing-extensions))
24180 (home-page "https://github.com/python-trio/trio-typing")
24181 (synopsis "Static type checking support for Trio and related projects")
24182 (description
24183 "This package provides:
24184
24185 @itemize
24186 @item PEP 561 typing stubs packages for the Trio project packages:
24187
24188 @itemize
24189 @item trio (@code{trio-stubs})
24190 @item outcome (@code{outcome-stubs})
24191 @item async_generator (@code{async_generator-stubs})
24192 @end itemize
24193
24194 @item A package @code{trio_typing} containing types that Trio programs often
24195 want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
24196 a mypy plugin that smooths over some limitations in the basic type hints.
24197 @end itemize")
24198 ;; Either license applies.
24199 (license (list license:expat license:asl2.0))))
24200
24201 (define-public python-trio-websocket
24202 (package
24203 (name "python-trio-websocket")
24204 (version "0.9.2")
24205 (source
24206 (origin
24207 (method git-fetch) ;no tests in pypi archive
24208 (uri (git-reference
24209 (url "https://github.com/HyperionGray/trio-websocket")
24210 (commit version)))
24211 (file-name (git-file-name name version))
24212 (sha256
24213 (base32 "1yk2ak991kbl30xg8ldpggack1lwkizd7s5cpr28ir34z8iyjnpi"))))
24214 (build-system python-build-system)
24215 (arguments
24216 `(#:phases
24217 (modify-phases %standard-phases
24218 (replace 'check
24219 (lambda* (#:key tests? #:allow-other-keys)
24220 (when tests? (invoke "pytest" "-vv")))))))
24221 (native-inputs (list python-pytest python-pytest-trio python-trustme))
24222 (propagated-inputs (list python-async-generator python-trio python-wsproto))
24223 (home-page "https://github.com/HyperionGray/trio-websocket")
24224 (synopsis "WebSocket library for Trio")
24225 (description "This library implements both server and client aspects of
24226 the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
24227 striving for safety, correctness, and ergonomics. It is based on the
24228 @url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
24229 @url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
24230 the majority of the WebSocket protocol, including framing, codecs, and events.
24231 This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
24232 the Trio framework}.")
24233 (license license:expat)))
24234
24235 (define-public python-humanize
24236 (package
24237 (name "python-humanize")
24238 (version "0.5.1")
24239 (source
24240 (origin
24241 (method url-fetch)
24242 (uri (pypi-uri "humanize" version))
24243 (sha256
24244 (base32
24245 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
24246 (arguments
24247 '(#:tests? #f)) ; tests not in pypi archive
24248 (build-system python-build-system)
24249 (home-page "https://github.com/jmoiron/humanize")
24250 (synopsis "Print numerical information in a human-readable form")
24251 (description "This package provides a Python module that displays numbers
24252 and dates in \"human readable\" forms. For example, it would display
24253 \"12345591313\" as \"12.3 billion\".")
24254 (license license:expat)))
24255
24256 (define-public python-txaio
24257 (package
24258 (name "python-txaio")
24259 (version "18.8.1")
24260 (source
24261 (origin
24262 (method url-fetch)
24263 (uri (pypi-uri "txaio" version))
24264 (sha256
24265 (base32
24266 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
24267 (build-system python-build-system)
24268 (propagated-inputs
24269 (list python-twisted python-six))
24270 (home-page "https://github.com/crossbario/txaio")
24271 (synopsis "Compatibility layer between Python asyncio and Twisted")
24272 (description "Txaio provides a compatibility layer between the Python
24273 @code{asyncio} module and @code{Twisted}.")
24274 (license license:expat)))
24275
24276 (define-public python-toolshed
24277 (package
24278 (name "python-toolshed")
24279 (version "0.4.6")
24280 (source
24281 (origin
24282 (method url-fetch)
24283 (uri (pypi-uri "toolshed" version))
24284 (sha256
24285 (base32
24286 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
24287 (build-system python-build-system)
24288 (native-inputs
24289 (list python-nose))
24290 (home-page "https://github.com/brentp/toolshed/")
24291 (synopsis "Collection of modules and functions for working with data")
24292 (description "This is a collection of well-tested, simple modules and
24293 functions that aim to reduce boilerplate when working with data.")
24294 (license license:bsd-2)))
24295
24296 (define-public python-annoy
24297 (package
24298 (name "python-annoy")
24299 (version "1.15.1")
24300 (source
24301 (origin
24302 (method url-fetch)
24303 (uri (pypi-uri "annoy" version))
24304 (sha256
24305 (base32
24306 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
24307 (build-system python-build-system)
24308 (native-inputs
24309 (list python-nose))
24310 (home-page "https://github.com/spotify/annoy/")
24311 (synopsis "Approximate nearest neighbors library")
24312 (description
24313 "Annoy is a C++ library with Python bindings to search for points in
24314 space that are close to a given query point. It also creates large read-only
24315 file-based data structures that are @code{mmap}ped into memory so that many
24316 processes may share the same data.")
24317 (license license:asl2.0)))
24318
24319 (define-public python-croniter
24320 (package
24321 (name "python-croniter")
24322 (version "1.3.4")
24323 (source (origin
24324 (method url-fetch)
24325 (uri (pypi-uri "croniter" version))
24326 (sha256
24327 (base32
24328 "1whbm26m9kpn0klgr9dqiqpp83ki9nhpxifaq9afcjw32rckcs9i"))))
24329 (build-system python-build-system)
24330 (propagated-inputs (list python-dateutil))
24331 (home-page "https://github.com/kiorky/croniter")
24332 (synopsis "Iterate datetime objects with cron-like syntax")
24333 (description
24334 "@code{croniter} provides iteration for datetime object with cron-like
24335 format.")
24336 (license license:expat)))
24337
24338 (define-public python-crontab
24339 (package
24340 (name "python-crontab")
24341 (version "2.5.1")
24342 (source
24343 (origin
24344 (method url-fetch)
24345 (uri (pypi-uri name version))
24346 (sha256
24347 (base32 "0cccrqc10r8781ba81x8r2frs3pl2m4hkm599k5358ak0xr7xgjb"))))
24348 (build-system python-build-system)
24349 (arguments
24350 ;; Comptability tests fail so they are disabled.
24351 `(#:tests? #f))
24352 (inputs
24353 (list python-dateutil))
24354 (home-page "https://gitlab.com/doctormo/python-crontab/")
24355 (synopsis "Module for reading and writing crontab files")
24356 (description "This Python module can read, write crontab files, and
24357 access the system cron automatically and simply using a direct API.")
24358 (license license:lgpl3+)))
24359
24360 (define-public python-pylzma
24361 (package
24362 (name "python-pylzma")
24363 (version "0.5.0")
24364 (source
24365 (origin
24366 (method url-fetch)
24367 (uri (pypi-uri "pylzma" version))
24368 (sha256
24369 (base32
24370 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
24371 (build-system python-build-system)
24372 (home-page "https://www.joachim-bauch.de/projects/pylzma/")
24373 (synopsis "Python bindings for the LZMA library by Igor Pavlov")
24374 (description "This package provides Python bindings for the LZMA library
24375 by Igor Pavlov.")
24376 (license license:lgpl2.1+)))
24377
24378 (define-public python-ifaddr
24379 (package
24380 (name "python-ifaddr")
24381 (version "0.1.7")
24382 (source
24383 (origin
24384 (method url-fetch)
24385 (uri (pypi-uri "ifaddr" version))
24386 (sha256
24387 (base32
24388 "150sxdlicwrphmhnv03ykxplyd2jdrxz0mikgnivavgilrn8m7hz"))))
24389 (build-system python-build-system)
24390 (arguments
24391 `(#:phases
24392 (modify-phases %standard-phases
24393 (replace 'check
24394 (lambda _ (invoke "nosetests"))))))
24395 (native-inputs
24396 (list python-nose))
24397 (home-page "https://github.com/pydron/ifaddr")
24398 (synopsis "Network interface and IP address enumeration library")
24399 (description "This package provides a network interface and IP address
24400 enumeration library in Python.")
24401 (license license:expat)))
24402
24403 (define-public python-zeroconf
24404 (package
24405 (name "python-zeroconf")
24406 (version "0.38.1")
24407 (source
24408 (origin
24409 (method git-fetch) ; no tests in PyPI release
24410 (uri (git-reference
24411 (url "https://github.com/jstasiak/python-zeroconf")
24412 (commit version)))
24413 (file-name (git-file-name name version))
24414 (sha256
24415 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
24416 (build-system python-build-system)
24417 (arguments
24418 `(#:phases
24419 (modify-phases %standard-phases
24420 (replace 'check
24421 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
24422 (when tests?
24423 (add-installed-pythonpath inputs outputs)
24424 (invoke "python" "-m" "pytest" "-k"
24425 (string-append
24426 ;; Networking isn't available for these tests.
24427 "not test_integration_with_listener_ipv6"
24428 " and not test_launch_and_close_v4_v6"
24429 " and not test_launch_and_close_context_manager"
24430 " and not test_launch_and_close"
24431 " and not test_close_multiple_times"))))))))
24432 (native-inputs
24433 (list python-pytest))
24434 (propagated-inputs
24435 (list python-ifaddr))
24436 (home-page "https://github.com/jstasiak/python-zeroconf")
24437 (synopsis "Pure Python mDNS service discovery")
24438 (description "Pure Python multicast DNS (mDNS) service discovery library
24439 (Bonjour/Avahi compatible).")
24440 (license license:lgpl2.1+)))
24441
24442 (define-public python-bsddb3
24443 (package
24444 (name "python-bsddb3")
24445 (version "6.2.9")
24446 (source
24447 (origin
24448 (method url-fetch)
24449 (uri (pypi-uri "bsddb3" version))
24450 (sha256
24451 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
24452 (build-system python-build-system)
24453 (inputs
24454 (list bdb))
24455 (arguments
24456 '(#:phases
24457 (modify-phases %standard-phases
24458 (add-after 'unpack 'configure-locations
24459 (lambda* (#:key inputs #:allow-other-keys)
24460 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
24461 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
24462 #t))
24463 (replace 'check
24464 (lambda _
24465 (invoke "python3" "test3.py" "-v"))))))
24466 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
24467 (synopsis "Python bindings for Oracle Berkeley DB")
24468 (description
24469 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
24470 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
24471 Transaction objects, and each of these is exposed as a Python type in the
24472 bsddb3.db module. The database objects can use various access methods: btree,
24473 hash, recno, and queue. Complete support of Berkeley DB distributed
24474 transactions. Complete support for Berkeley DB Replication Manager.
24475 Complete support for Berkeley DB Base Replication. Support for RPC.")
24476 (license license:bsd-3)))
24477
24478 (define-public python-dbfread
24479 (package
24480 (name "python-dbfread")
24481 (version "2.0.7")
24482 (source (origin
24483 (method url-fetch)
24484 (uri (pypi-uri "dbfread" version))
24485 (sha256
24486 (base32
24487 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
24488 (build-system python-build-system)
24489 (native-inputs
24490 (list python-pytest))
24491 (home-page "https://dbfread.readthedocs.io")
24492 (synopsis "Read DBF Files with Python")
24493 (description
24494 "This library reads DBF files and returns the data as native Python data
24495 types for further processing. It is primarily intended for batch jobs and
24496 one-off scripts.")
24497 (license license:expat)))
24498
24499 (define-public python-cached-property
24500 (package
24501 (name "python-cached-property")
24502 (version "1.5.2")
24503 (source
24504 (origin
24505 (method url-fetch)
24506 (uri (pypi-uri "cached-property" version))
24507 (sha256
24508 (base32
24509 "0c51i6yzg6dlq6zhk4c6nv33mg8gv05kkan36k9b5jzf71c7b9cz"))))
24510 (build-system python-build-system)
24511 (arguments
24512 `(#:phases
24513 (modify-phases %standard-phases
24514 ;; https://github.com/pydanny/cached-property/issues/131
24515 ;; recent versions of freezegun break one test
24516 (add-after 'unpack 'disable-broken-test
24517 (lambda _
24518 (substitute* "tests/test_cached_property.py"
24519 (("def test_threads_ttl_expiry\\(self\\)" m)
24520 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
24521 " " m)))
24522 #t)))))
24523 (native-inputs
24524 (list python-freezegun))
24525 (home-page
24526 "https://github.com/pydanny/cached-property")
24527 (synopsis
24528 "Decorator for caching properties in classes")
24529 (description
24530 "This package provides a decorator which makes caching
24531 time-or-computationally-expensive properties quick and easy and works in Python
24532 2 or 3.")
24533 (license license:bsd-3)))
24534
24535 (define-public python-folium
24536 (package
24537 (name "python-folium")
24538 (version "0.13.0")
24539 (source
24540 (origin
24541 ;; PyPI has a ".whl" file but not a proper source release.
24542 ;; Thus, fetch code from Git.
24543 (method git-fetch)
24544 (uri (git-reference
24545 (url "https://github.com/python-visualization/folium")
24546 (commit (string-append "v" version))))
24547 (file-name (git-file-name name version))
24548 (sha256
24549 (base32 "00adpdi1890zzzg7ffp04hmx59igdcdpyqa129vnmwqh54b5a006"))))
24550 (build-system python-build-system)
24551 (propagated-inputs
24552 (list python-branca python-jinja2 python-numpy python-requests))
24553 (native-inputs
24554 (list python-pytest))
24555 (home-page "https://github.com/python-visualization/folium")
24556 (synopsis "Make beautiful maps with Leaflet.js & Python")
24557 (description "@code{folium} makes it easy to visualize data that’s been
24558 manipulated in Python on an interactive leaflet map. It enables both the
24559 binding of data to a map for @code{choropleth} visualizations as well as
24560 passing rich vector/raster/HTML visualizations as markers on the map.
24561
24562 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
24563 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
24564 supports Image, Video, GeoJSON and TopoJSON overlays.")
24565 (license license:expat)))
24566
24567 (define-public python-mercantile
24568 (package
24569 (name "python-mercantile")
24570 (version "1.2.1")
24571 (source
24572 (origin
24573 (method url-fetch)
24574 (uri (pypi-uri "mercantile" version))
24575 (sha256
24576 (base32 "0sxmndhzzrvss5irsgzfrk51k6jihwcb7661992mizdgbnqnsg7s"))))
24577 (build-system python-build-system)
24578 (propagated-inputs (list python-click))
24579 (native-inputs
24580 (list python-check-manifest python-hypothesis python-pytest))
24581 (home-page "https://github.com/mapbox/mercantile")
24582 (synopsis "Web mercator XYZ tile utilities")
24583 (description "The mercantile module provides @code{ul(xtile, ytile, zoom)}
24584 and @code{bounds(xtile, ytile, zoom)} functions that respectively return the
24585 upper left corner and bounding longitudes and latitudes for XYZ tiles, a
24586 @code{xy(lng, lat)} function that returns spherical mercator x and y
24587 coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
24588 containing a given point, and quadkey conversion functions
24589 @code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
24590 translating between quadkey and tile coordinates.")
24591 (license license:bsd-3)))
24592
24593 (define-public python-xyzservices
24594 (package
24595 (name "python-xyzservices")
24596 (version "2022.4.0")
24597 (source
24598 (origin
24599 (method url-fetch)
24600 (uri (pypi-uri "xyzservices" version))
24601 (sha256
24602 (base32 "1paxv4i0dws85md7csv7pf80jl3xh792mx8rxnsrk61ks3ivbsyg"))))
24603 (build-system python-build-system)
24604 (arguments
24605 '(#:phases
24606 (modify-phases %standard-phases
24607 (replace 'check
24608 (lambda* (#:key tests? #:allow-other-keys)
24609 (when tests?
24610 (invoke "pytest" "-vv")))))))
24611 (native-inputs
24612 (list python-pytest python-mercantile python-requests))
24613 (home-page "https://github.com/geopandas/xyzservices")
24614 (synopsis "Source of XYZ tiles providers")
24615 (description "@code{xyzservices} is a lightweight library providing a
24616 repository of available XYZ services offering raster basemap tiles. The
24617 repository is provided via Python API and as a compressed JSON file.")
24618 (license license:bsd-3)))
24619
24620 (define-public jube
24621 (package
24622 ;; This is a command-line tool, so no "python-" prefix.
24623 (name "jube")
24624 (version "2.2.2")
24625 (source (origin
24626 (method url-fetch)
24627 (uri (string-append
24628 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
24629 version))
24630 (sha256
24631 (base32
24632 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
24633 (file-name (string-append "jube-" version ".tar.gz"))))
24634 (build-system python-build-system)
24635 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
24636 (synopsis "Benchmarking environment")
24637 (description
24638 "JUBE helps perform and analyze benchmarks in a systematic way. For each
24639 benchmarked application, benchmark data is stored in a format that allows JUBE
24640 to deduct the desired information. This data can be parsed by automatic pre-
24641 and post-processing scripts that draw information and store it more densely
24642 for manual interpretation.")
24643 (license license:gpl3+)))
24644
24645 (define-public python-pyroutelib3
24646 (package
24647 (name "python-pyroutelib3")
24648 (version "1.3.post1")
24649 (source
24650 (origin
24651 (method url-fetch)
24652 (uri (pypi-uri "pyroutelib3" version))
24653 (sha256
24654 (base32
24655 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
24656 (build-system python-build-system)
24657 (propagated-inputs
24658 (list python-dateutil))
24659 (home-page "https://github.com/MKuranowski/pyroutelib3")
24660 (synopsis "Library for simple routing on OSM data")
24661 (description "Library for simple routing on OSM data")
24662 (license license:gpl3+)))
24663
24664 (define-public python-bibtexparser
24665 (package
24666 (name "python-bibtexparser")
24667 (version "1.1.0")
24668 (source
24669 (origin
24670 (method url-fetch)
24671 (uri (pypi-uri "bibtexparser" version))
24672 (sha256
24673 (base32
24674 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
24675 (build-system python-build-system)
24676 (propagated-inputs
24677 (list python-pyparsing))
24678 (native-inputs
24679 (list python-future))
24680 (home-page "https://github.com/sciunto-org/python-bibtexparser")
24681 (synopsis "Python library to parse BibTeX files")
24682 (description "BibtexParser is a Python library to parse BibTeX files.")
24683 (license (list license:bsd-3 license:lgpl3))))
24684
24685 (define-public python-distro
24686 (package
24687 (name "python-distro")
24688 (version "1.6.0")
24689 (source
24690 (origin
24691 (method url-fetch)
24692 (uri (pypi-uri "distro" version))
24693 (sha256
24694 (base32
24695 "09441261dd3c8b2gv15vhw1cryzg60lmgpkk07v6hpwwkyhfbxc3"))))
24696 (build-system python-build-system)
24697 (native-inputs
24698 (list python-pytest))
24699 (home-page "https://github.com/nir0s/distro")
24700 (synopsis
24701 "OS platform information API")
24702 (description
24703 "@code{distro} provides information about the OS distribution it runs on,
24704 such as a reliable machine-readable ID, or version information.
24705
24706 It is the recommended replacement for Python's original
24707 `platform.linux_distribution` function (which will be removed in Python 3.8).
24708 @code{distro} also provides a command-line interface to output the platform
24709 information in various formats.")
24710 (license license:asl2.0)))
24711
24712 (define-public python-cairosvg
24713 (package
24714 (name "python-cairosvg")
24715 (version "2.5.0")
24716 (source
24717 (origin
24718 (method url-fetch)
24719 (uri (pypi-uri "CairoSVG" version))
24720 (sha256
24721 (base32 "1ylsisha2cc4w0yydxwhy7idkfw1inl9fsipxsrm7vyby080vi9z"))))
24722 (build-system python-build-system)
24723 (arguments
24724 `(#:phases
24725 (modify-phases %standard-phases
24726 (replace 'check
24727 (lambda _ (invoke "pytest"))))))
24728 (propagated-inputs
24729 (list python-cairocffi python-cssselect2 python-defusedxml
24730 python-pillow python-tinycss2))
24731 (native-inputs
24732 (list python-pytest-flake8 python-pytest-isort python-pytest-runner))
24733 (home-page "https://cairosvg.org/")
24734 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
24735 (description "CairoSVG is a SVG converter based on Cairo. It can export
24736 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
24737 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
24738 parsed, the result is drawn to a Cairo surface that can be exported to
24739 qvarious formats: PDF, PostScript, PNG and even SVG.")
24740 (license license:lgpl3+)))
24741
24742 (define-public python-pyphen
24743 (package
24744 (name "python-pyphen")
24745 (version "0.10.0")
24746 (source
24747 (origin
24748 (method url-fetch)
24749 (uri (pypi-uri "Pyphen" version))
24750 (sha256
24751 (base32 "0a1iwrgs4hzwzz60q4i1813kbzimhm0i4q8grh8vqkxhnkgj36vi"))))
24752 (build-system python-build-system)
24753 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
24754 ;; embedded set provided by upstream - like Debian does.
24755 (home-page "https://github.com/Kozea/Pyphen")
24756 (synopsis "Pure Python module to hyphenate text")
24757 (description "Pyphen is a pure Python module to hyphenate text using
24758 existing Hunspell hyphenation dictionaries.")
24759 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
24760
24761 (define-public python-intelhex
24762 (package
24763 (name "python-intelhex")
24764 (version "2.3.0")
24765 (source
24766 (origin
24767 (method url-fetch)
24768 (uri (pypi-uri "intelhex" version))
24769 (sha256
24770 (base32
24771 "14q04p6qs47ab9w55232ylrdn4wm9rswz36s6x999x0rlxhp6aw9"))))
24772 (build-system python-build-system)
24773 (home-page "https://pypi.org/project/IntelHex/")
24774 (synopsis "Python library for Intel HEX files manipulations")
24775 (description "The Intel HEX file format is widely used in microprocessors
24776 and microcontrollers area (embedded systems etc.) as the de facto standard for
24777 representation of code to be programmed into microelectronic devices. This
24778 package provides an intelhex Python library to read, write, create from
24779 scratch and manipulate data from Intel HEX file format. It also includes
24780 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
24781 converters and more, those based on the library itself.")
24782 (license license:bsd-3)))
24783
24784 (define-public python-interlap
24785 (package
24786 (name "python-interlap")
24787 (version "0.2.7")
24788 (source (origin
24789 (method url-fetch)
24790 (uri (pypi-uri "interlap" version))
24791 (sha256
24792 (base32
24793 "1jbfh00bkrf0i5psa6n75rlgmqp5389xixa9j29w8rxhah6g7r1i"))))
24794 (build-system python-build-system)
24795 (home-page "https://brentp.github.io/interlap")
24796 (synopsis "Fast, simple interval overlap testing")
24797 (description "InterLap does fast interval overlap testing with a simple Python data
24798 structure.")
24799 (license license:expat)))
24800
24801 (define-public python-pykwalify
24802 (package
24803 (name "python-pykwalify")
24804 (version "1.7.0")
24805 (source
24806 (origin
24807 (method url-fetch)
24808 (uri (pypi-uri "pykwalify" version))
24809 (sha256
24810 (base32
24811 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
24812 (build-system python-build-system)
24813 (arguments '(#:tests? #f)) ;missing dependencies
24814 (propagated-inputs
24815 (list python-dateutil python-docopt python-pyyaml))
24816 (home-page "https://github.com/grokzen/pykwalify")
24817 (synopsis
24818 "Python lib/cli for JSON/YAML schema validation")
24819 (description
24820 "This package provides a parser, schema validator, and data binding tool
24821 for YAML and JSON.")
24822 (license license:expat)))
24823
24824 (define-public python-dbusmock
24825 (package
24826 (name "python-dbusmock")
24827 (version "0.25.0")
24828 (source
24829 (origin
24830 (method url-fetch)
24831 (uri (pypi-uri "python-dbusmock" version))
24832 (sha256
24833 (base32
24834 "1nwl0gzzds2g1w1gfxfzlgrkb5hr1rrdyn619ml25c6b1rjyfk3g"))))
24835 (build-system python-build-system)
24836 (arguments
24837 `(#:imported-modules (,@%python-build-system-modules
24838 (guix build syscalls))
24839 #:modules ((guix build python-build-system)
24840 (guix build syscalls)
24841 (guix build utils)
24842 (ice-9 match))
24843 #:phases
24844 (modify-phases %standard-phases
24845 (add-after 'unpack 'patch-paths
24846 (lambda* (#:key inputs #:allow-other-keys)
24847 (substitute* "tests/test_code.py"
24848 (("/bin/bash") (which "bash")))
24849 (substitute* "dbusmock/testcase.py"
24850 (("'dbus-daemon'")
24851 (string-append "'" (assoc-ref inputs "dbus")
24852 "/bin/dbus-daemon'")))))
24853 (replace 'check
24854 (lambda* (#:key tests? #:allow-other-keys)
24855 (when tests?
24856 (match (primitive-fork)
24857 (0 ;child process
24858 (set-child-subreaper!)
24859 ;; Use tini so that signals are properly handled and
24860 ;; doubly-forked processes get reaped; otherwise,
24861 ;; python-dbusmock would waste time polling for the dbus
24862 ;; processes it spawns to be reaped, in vain.
24863 (execlp "tini" "--" "pytest" "-vv"))
24864 (pid
24865 (match (waitpid pid)
24866 ((_ . status)
24867 (unless (zero? status)
24868 (error "`pytest' exited with status"
24869 status))))))))))))
24870 (native-inputs
24871 (list dbus python-pytest tini which))
24872 (inputs
24873 (list dbus))
24874 (propagated-inputs
24875 (list python-dbus python-pygobject))
24876 (home-page "https://github.com/martinpitt/python-dbusmock")
24877 (synopsis "Python library for mock D-Bus objects")
24878 (description "python-dbusmock allows for the easy creation of mock objects on
24879 D-Bus. This is useful for writing tests for software which talks to D-Bus
24880 services such as upower, systemd, logind, gnome-session or others, and it is
24881 hard (or impossible without root privileges) to set the state of the real
24882 services to what you expect in your tests.")
24883 (license license:lgpl3+)))
24884
24885 (define-public python-jsonplus
24886 (package
24887 (name "python-jsonplus")
24888 (version "0.8.0")
24889 (home-page "https://github.com/randomir/jsonplus")
24890 (source (origin
24891 (method url-fetch)
24892 (uri (pypi-uri "jsonplus" version))
24893 (sha256
24894 (base32
24895 "05yv3dw813zwas9snz124k2hki49y268b3mx0gj9w7v1nrjmglq1"))))
24896 (build-system python-build-system)
24897 ;; XXX: No tests on PyPI, and the repository has no tags.
24898 (arguments '(#:tests? #f))
24899 (propagated-inputs
24900 (list python-dateutil python-simplejson python-sortedcontainers))
24901 (synopsis "Serialize Python types to/from JSON")
24902 (description
24903 "This package provides functionality to serialize arbitrary data types
24904 to and from JSON. Common data types are implemented and it is easy to
24905 register custom encoders and decoders.")
24906 (license license:expat)))
24907
24908 (define-public python-ujson
24909 (package
24910 (name "python-ujson")
24911 (version "4.0.2")
24912 (source
24913 (origin
24914 (method url-fetch)
24915 (uri (pypi-uri "ujson" version))
24916 (sha256
24917 (base32
24918 "0k9w0kypy7vlskzzp2vsjswaw8lbqdrplzkbflxki9vqwglsj5f6"))
24919 (modules '((guix build utils)))
24920 (snippet
24921 '(begin (delete-file-recursively "deps") #t))))
24922 (build-system python-build-system)
24923 (arguments
24924 `(#:phases
24925 (modify-phases %standard-phases
24926 (add-after 'unpack 'link-to-system-double-conversion
24927 (lambda* (#:key inputs #:allow-other-keys)
24928 (let ((d-c (assoc-ref inputs "double-conversion")))
24929 (substitute* "setup.py"
24930 (("./deps/double-conversion/double-conversion\"")
24931 (string-append d-c "/include/double-conversion\""))
24932 (("-lstdc++" stdc)
24933 (string-append "-L" d-c "/lib\","
24934 " \"-ldouble-conversion\","
24935 " \"" stdc)))
24936 #t)))
24937 (replace 'check
24938 (lambda* (#:key inputs outputs #:allow-other-keys)
24939 (add-installed-pythonpath inputs outputs)
24940 (invoke "pytest"))))))
24941 (native-inputs
24942 (list double-conversion python-setuptools-scm python-pytest))
24943 (home-page "https://github.com/ultrajson/ultrajson")
24944 (synopsis "Ultra fast JSON encoder and decoder for Python")
24945 (description
24946 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
24947 bindings for Python 3.")
24948 (license license:bsd-3)))
24949
24950 (define-public python-iocapture
24951 ;; The latest release is more than a year older than this commit.
24952 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
24953 (revision "1"))
24954 (package
24955 (name "python-iocapture")
24956 (version "0.1.2")
24957 (source
24958 (origin
24959 (method git-fetch)
24960 (uri (git-reference
24961 (url "https://github.com/oinume/iocapture")
24962 (commit commit)))
24963 (file-name (git-file-name name version))
24964 (sha256
24965 (base32
24966 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
24967 (build-system python-build-system)
24968 (arguments
24969 `(#:phases
24970 (modify-phases %standard-phases
24971 (delete 'check)
24972 (add-after 'install 'check
24973 (lambda* (#:key inputs outputs #:allow-other-keys)
24974 (add-installed-pythonpath inputs outputs)
24975 (invoke "py.test" "-v" "tests")
24976 #t)))))
24977 (propagated-inputs
24978 (list python-flexmock python-pytest python-pytest-cov python-six))
24979 (home-page "https://github.com/oinume/iocapture")
24980 (synopsis "Python capturing tool for stdout and stderr")
24981 (description
24982 "This package helps you to capture the standard out (stdout) and the
24983 standard error channel (stderr) in your program.")
24984 (license license:expat))))
24985
24986 (define-public python-anyio
24987 (package
24988 (name "python-anyio")
24989 (version "3.5.0")
24990 (source
24991 (origin
24992 (method url-fetch)
24993 (uri (pypi-uri "anyio" version))
24994 (sha256
24995 (base32
24996 "19m58805wir4i2s45dd5ynwlzb7ky1218isbir53gpqzzgigzbm0"))))
24997 (build-system python-build-system)
24998 (arguments
24999 `(#:phases
25000 (modify-phases %standard-phases
25001 (replace 'check
25002 (lambda* (#:key tests? #:allow-other-keys)
25003 (when tests?
25004 (invoke
25005 "pytest" "-vv" "-p" "no:asyncio"
25006 "-m" "not network"
25007 "-k"
25008 (string-append
25009 "not test_is_block_device"
25010
25011 ;; These fail because of network (or specifically IPv6
25012 ;; network) access (see:
25013 ;; https://github.com/agronholm/anyio/issues/417).
25014 " and not test_accept"
25015 " and not test_accept_after_close"
25016 " and not test_close_during_receive"
25017 " and not test_close_from_other_task"
25018 " and not test_concurrent_receive"
25019 " and not test_concurrent_send"
25020 " and not test_connect_tcp_with_tls"
25021 " and not test_connect_tcp_with_tls_cert_check_fail"
25022 " and not test_connection_refused"
25023 " and not test_extra_attributes"
25024 " and not test_getaddrinfo"
25025 " and not test_getnameinfo"
25026 " and not test_happy_eyeballs"
25027 " and not test_iterate"
25028 " and not test_receive_after_close"
25029 " and not test_receive_timeout"
25030 " and not test_reuse_port"
25031 " and not test_run_process"
25032 " and not test_send_after_close"
25033 " and not test_send_after_eof"
25034 " and not test_send_after_peer_closed"
25035 " and not test_send_eof"
25036 " and not test_send_large_buffer"
25037 " and not test_send_receive"
25038 " and not test_socket_options"
25039 " and not test_unretrieved_future_exception_server_crash"))))))))
25040 (propagated-inputs
25041 (list python-contextvars
25042 python-dataclasses
25043 python-idna
25044 python-sniffio
25045 python-typing-extensions))
25046 (native-inputs
25047 (list python-contextlib2
25048 python-coverage
25049 python-hypothesis
25050 python-mock
25051 python-pytest
25052 python-pytest-mock
25053 python-setuptools-scm
25054 python-trio
25055 python-trustme
25056 python-uvloop))
25057 (home-page "https://github.com/agronholm/anyio")
25058 (synopsis "Compatibility layer for multiple asynchronous event loops")
25059 (description
25060 "AnyIO is an asynchronous networking and concurrency library that works
25061 on top of either asyncio or trio. It implements trio-like structured
25062 concurrency on top of asyncio, and works in harmony with the native SC of trio
25063 itself.")
25064 (license license:expat)))
25065
25066 (define-public python-argh
25067 ;; There are 21 commits since the latest release containing important
25068 ;; improvements.
25069 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
25070 (revision "1"))
25071 (package
25072 (name "python-argh")
25073 (version (git-version "0.26.2" revision commit))
25074 (source
25075 (origin
25076 (method git-fetch)
25077 (uri (git-reference
25078 (url "https://github.com/neithere/argh")
25079 (commit commit)))
25080 (file-name (git-file-name name version))
25081 (sha256
25082 (base32
25083 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
25084 (build-system python-build-system)
25085 (arguments
25086 '(#:phases
25087 (modify-phases %standard-phases
25088 (add-after 'unpack 'patch-tests
25089 (lambda _
25090 ;; Fix test failures on Python 3.9.9+.
25091 ;; Taken via <https://github.com/neithere/argh/issues/148>.
25092 (substitute* "test/test_integration.py"
25093 (("assert run\\(p, '(bar|orig-name|nest bar)', exit=True\\)\
25094 \\.startswith\\('invalid choice'\\)" _ name)
25095 (string-append "assert 'invalid choice' in \
25096 run(p, '" name "', exit=True)")))))
25097 (replace 'check
25098 (lambda* (#:key tests? #:allow-other-keys)
25099 (when tests?
25100 (invoke "pytest" "-vv")))))))
25101 (propagated-inputs
25102 (list python-iocapture python-mock python-pytest python-pytest-cov
25103 python-pytest-xdist))
25104 (home-page "https://github.com/neithere/argh/")
25105 (synopsis "Argparse wrapper with natural syntax")
25106 (description
25107 "python-argh is a small library that provides several layers of
25108 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
25109 always possible to declare a command with the highest possible (and least
25110 flexible) layer and then tune the behaviour with any of the lower layers
25111 including the native API of @code{python-argparse}.")
25112 (license license:lgpl3+))))
25113
25114 (define-public python-ppft
25115 (package
25116 (name "python-ppft")
25117 (version "1.6.6.1")
25118 (source
25119 (origin
25120 (method url-fetch)
25121 (uri (pypi-uri "ppft" version))
25122 (sha256
25123 (base32
25124 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
25125 (build-system python-build-system)
25126 (arguments '(#:tests? #f)) ; there are none
25127 (propagated-inputs
25128 (list python-six))
25129 (home-page "https://pypi.org/project/ppft/")
25130 (synopsis "Fork of Parallel Python")
25131 (description
25132 "This package is a fork of Parallel Python. The Parallel Python
25133 module (@code{pp}) provides an easy and efficient way to create
25134 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
25135 computers and clusters. It features cross-platform portability and dynamic
25136 load balancing.")
25137 (license license:bsd-3)))
25138
25139 (define-public python-pox
25140 (package
25141 (name "python-pox")
25142 (version "0.2.7")
25143 (source
25144 (origin
25145 (method url-fetch)
25146 (uri (pypi-uri "pox" version))
25147 (sha256
25148 (base32
25149 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
25150 (build-system python-build-system)
25151 (arguments
25152 `(#:phases
25153 (modify-phases %standard-phases
25154 (replace 'check
25155 (lambda _
25156 (mkdir-p "/tmp/guix")
25157 (setenv "SHELL" "bash")
25158 (setenv "USERNAME" "guix")
25159 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
25160 (invoke "py.test" "-vv")
25161 #t)))))
25162 (native-inputs
25163 (list python-pytest which))
25164 (home-page "https://pypi.org/project/pox/")
25165 (synopsis "Python utilities for file system exploration and automated builds")
25166 (description
25167 "Pox provides a collection of utilities for navigating and manipulating
25168 file systems. This module is designed to facilitate some of the low-level
25169 operating system interactions that are useful when exploring a file system on a
25170 remote host. Pox provides Python equivalents of several shell commands such
25171 as @command{which} and @command{find}. These commands allow automated
25172 discovery of what has been installed on an operating system, and where the
25173 essential tools are located.")
25174 (license license:bsd-3)))
25175
25176 (define-public python-pathos
25177 (package
25178 (name "python-pathos")
25179 (version "0.2.5")
25180 (source
25181 (origin
25182 (method url-fetch)
25183 (uri (pypi-uri "pathos" version))
25184 (sha256
25185 (base32
25186 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
25187 (build-system python-build-system)
25188 (arguments
25189 '(#:phases
25190 (modify-phases %standard-phases
25191 (replace 'check
25192 (lambda _
25193 (invoke "python" "./tests/__main__.py"))))))
25194 (propagated-inputs
25195 (list python-dill python-multiprocess python-pox python-ppft))
25196 (native-inputs
25197 (list python-pytest))
25198 (home-page "https://pypi.org/project/pathos/")
25199 (synopsis
25200 "Parallel graph management and execution in heterogeneous computing")
25201 (description
25202 "Python-pathos is a framework for heterogeneous computing. It provides a
25203 consistent high-level interface for configuring and launching parallel
25204 computations across heterogeneous resources. Python-pathos provides configurable
25205 launchers for parallel and distributed computing, where each launcher contains
25206 the syntactic logic to configure and launch jobs in an execution environment.")
25207 (license license:bsd-3)))
25208
25209 (define-public python-flit
25210 (package
25211 (name "python-flit")
25212 (version "3.5.1")
25213 (source
25214 (origin
25215 (method url-fetch)
25216 (uri (pypi-uri "flit" version))
25217 (sha256
25218 (base32 "04152qj46sqbnlrj7ch9p7svjrrlpzbk0qr39g2yr0s4f5vp6frf"))))
25219 (build-system python-build-system)
25220 (arguments
25221 (list
25222 #:phases
25223 #~(modify-phases %standard-phases
25224 ;; XXX: PEP 517 manual build copied from python-isort.
25225 (replace 'build
25226 (lambda _
25227 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
25228 (replace 'check
25229 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
25230 (when tests?
25231 (setenv "HOME" "/tmp")
25232 (setenv "FLIT_NO_NETWORK" "1"))))
25233 (replace 'install
25234 (lambda _
25235 (let ((whl (car (find-files "dist" "\\.whl$"))))
25236 (invoke "pip" "--no-cache-dir" "--no-input"
25237 "install" "--no-deps" "--prefix" #$output whl)))))))
25238 (propagated-inputs
25239 (list python-pypa-build
25240 python-tomli-w
25241 python-flit-core
25242 python-docutils
25243 python-requests))
25244 (native-inputs
25245 (list python-responses
25246 python-pygments-github-lexers
25247 python-pytest
25248 python-pytest-cov
25249 python-sphinx
25250 python-sphinxcontrib-github-alt
25251 python-testpath))
25252 (home-page "https://flit.readthedocs.io/")
25253 (synopsis "Simple packaging tool for simple packages")
25254 (description "Flit is a simple way to put Python packages and modules on
25255 PyPI. Flit packages a single importable module or package at a time, using
25256 the import name as the name on PyPI. All subpackages and data files within a
25257 package are included automatically.")
25258 (license license:bsd-3)))
25259
25260 (define-public python-pathtools
25261 (package
25262 (name "python-pathtools")
25263 (version "0.1.2")
25264 (source
25265 (origin
25266 (method url-fetch)
25267 (uri (pypi-uri "pathtools" version))
25268 (sha256
25269 (base32
25270 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
25271 (build-system python-build-system)
25272 (home-page
25273 "https://github.com/gorakhargosh/pathtools")
25274 (synopsis "Path utilities for Python")
25275 (description "Pattern matching and various utilities for file systems
25276 paths.")
25277 (license license:expat)))
25278
25279 (define-public python-fastentrypoints
25280 (package
25281 (name "python-fastentrypoints")
25282 (version "0.12")
25283 (source
25284 (origin
25285 (method url-fetch)
25286 (uri (pypi-uri "fastentrypoints" version))
25287 (sha256
25288 (base32
25289 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
25290 (build-system python-build-system)
25291 (home-page
25292 "https://github.com/ninjaaron/fast-entry_points")
25293 (synopsis
25294 "Makes entry_points specified in setup.py load more quickly")
25295 (description
25296 "Using entry_points in your setup.py makes scripts that start really
25297 slowly because it imports pkg_resources. This package allows such setup
25298 scripts to load entry points more quickly.")
25299 (license license:bsd-3)))
25300
25301 (define-public python-funcparserlib
25302 (package
25303 (name "python-funcparserlib")
25304 (version "1.0.0")
25305 (source
25306 (origin
25307 (method url-fetch)
25308 (uri (pypi-uri "funcparserlib" version))
25309 (sha256
25310 (base32 "0swbqf53x7lfnczvi566s1g3nkf5mfrxz7sbpyymricz57a3vlvx"))))
25311 (build-system python-build-system)
25312 (arguments
25313 `(#:tests? #f)) ; no tests in PyPI and no setup.py in GitHub
25314 (home-page "https://github.com/vlasovskikh/funcparserlib")
25315 (synopsis
25316 "Recursive descent parsing library based on functional combinators")
25317 (description
25318 "This package is a recursive descent parsing library for Python based on
25319 functional combinators. Parser combinators are just higher-order functions
25320 that take parsers as their arguments and return them as result values.")
25321 (license license:expat)))
25322
25323 (define-public python-speg
25324 (package
25325 (name "python-speg")
25326 (version "0.3")
25327 (source
25328 (origin
25329 (method url-fetch)
25330 (uri (pypi-uri "speg" version ".zip"))
25331 (sha256
25332 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
25333 (arguments
25334 `(#:tests? #f)) ;FIXME: tests fail, not sure why
25335 (native-inputs
25336 (list unzip))
25337 (build-system python-build-system)
25338 (home-page "https://github.com/avakar/speg")
25339 (synopsis "PEG-based parser interpreter with memoization")
25340 (description "This package is a PEG-based parser and interpreter with
25341 memoization.")
25342 (license license:expat)))
25343
25344 (define-public python-cson
25345 (package
25346 (name "python-cson")
25347 (version "0.8")
25348 (source
25349 (origin
25350 (method url-fetch)
25351 (uri (pypi-uri "cson" version))
25352 (sha256
25353 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
25354 (build-system python-build-system)
25355 (propagated-inputs
25356 (list python-speg))
25357 (home-page "https://github.com/avakar/pycson")
25358 (synopsis "Parser for Coffeescript Object Notation (CSON)")
25359 (description "This package is a parser for Coffeescript Object
25360 Notation (CSON).")
25361 (license license:expat)))
25362
25363 (define-public python-aionotify
25364 (package
25365 (name "python-aionotify")
25366 (version "0.2.0")
25367 (source
25368 (origin
25369 ;; Source tarball on PyPi lacks tests
25370 (method git-fetch)
25371 (uri (git-reference
25372 (url "https://github.com/rbarrois/aionotify")
25373 (commit (string-append "v" version))))
25374 (file-name (git-file-name name version))
25375 (sha256
25376 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))
25377 (patches (search-patches "python-aionotify-0.2.0-py3.8.patch"))))
25378 (build-system python-build-system)
25379 (home-page "https://github.com/rbarrois/aionotify")
25380 (synopsis "Asyncio-powered inotify library")
25381 (description
25382 "@code{aionotify} is a simple, asyncio-based inotify library.")
25383 (license license:bsd-3)))
25384
25385 (define-public python-forbiddenfruit
25386 (package
25387 (name "python-forbiddenfruit")
25388 (version "0.1.3")
25389 (source
25390 (origin
25391 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
25392 (method git-fetch)
25393 (uri (git-reference
25394 (url "https://github.com/clarete/forbiddenfruit")
25395 (commit version)))
25396 (file-name (git-file-name name version))
25397 (sha256
25398 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
25399 (build-system python-build-system)
25400 (arguments
25401 '(#:phases
25402 (modify-phases %standard-phases
25403 (replace 'check
25404 (lambda _
25405 (invoke "make" "SKIP_DEPS=1"))))))
25406 (native-inputs
25407 (list python-nose python-coverage))
25408 (home-page "https://github.com/clarete/forbiddenfruit")
25409 (synopsis "Patch python built-in objects")
25410 (description "This project allows Python code to extend built-in types.")
25411 (license (list license:gpl3+ license:expat))))
25412
25413 (define-public python-k5test
25414 (package
25415 (name "python-k5test")
25416 (version "0.9.2")
25417 (source
25418 (origin
25419 (method url-fetch)
25420 (uri (pypi-uri "k5test" version))
25421 (sha256
25422 (base32
25423 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
25424 (build-system python-build-system)
25425 (propagated-inputs
25426 (list python-six
25427 ;; `which`, `kadmin.local` binaries called inside library
25428 which mit-krb5))
25429 (native-inputs (list mit-krb5))
25430 (arguments
25431 '(#:phases
25432 (modify-phases %standard-phases
25433 (add-after 'unpack 'apply-upstream-fixes
25434 (lambda* _
25435 (substitute* "k5test/realm.py"
25436 ;; Upstream commit f6b302d94dbdce37a1b81cc3faeeac4dc637b0e9.
25437 (("'kadmin_local'") "'kadmin.local'")
25438 ;; Upstream commit 3aef84515cf3d1a171c66856c898d0a5cbbd03ea.
25439 (("\\.stop_daemon") "._stop_daemon")))))))
25440 (home-page "https://github.com/pythongssapi/k5test")
25441 (synopsis "Library for setting up self-contained Kerberos 5 environments")
25442 (description
25443 "@code{k5test} is a library for setting up self-contained Kerberos 5
25444 environments, and running Python unit tests inside those environments. It is
25445 based on the file of the same name found alongside the MIT Kerberos 5 unit
25446 tests.")
25447 (license license:isc)))
25448
25449 (define-public python-gssapi
25450 (package
25451 (name "python-gssapi")
25452 (version "1.6.12")
25453 (source
25454 (origin
25455 (method url-fetch)
25456 (uri (pypi-uri "gssapi" version))
25457 (sha256
25458 (base32
25459 "1j2idrbrbczykzlb56q1bn0ivc9c0rjjljpk4yz86xn3gxfkpv8n"))))
25460 (build-system python-build-system)
25461 (propagated-inputs
25462 (list python-decorator python-six))
25463 (inputs
25464 (list mit-krb5))
25465 ;; for tests
25466 (native-inputs
25467 (list python-parameterized python-k5test python-nose))
25468 (home-page "https://github.com/pythongssapi/python-gssapi")
25469 (synopsis "Python GSSAPI Wrapper")
25470 (description
25471 "Python-GSSAPI provides both low-level and high level wrappers around the
25472 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
25473 also be usable with other GSSAPI mechanisms.")
25474 (license license:isc)))
25475
25476 (define-public python-check-manifest
25477 (package
25478 (name "python-check-manifest")
25479 (version "0.37")
25480 (source
25481 (origin
25482 (method url-fetch)
25483 (uri (pypi-uri "check-manifest" version))
25484 (sha256
25485 (base32
25486 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
25487 (build-system python-build-system)
25488 (native-inputs
25489 (list python-mock git))
25490 (home-page "https://github.com/mgedmin/check-manifest")
25491 (synopsis "Check MANIFEST.in in a Python source package for completeness")
25492 (description "Python package can include a MANIFEST.in file to help with
25493 sending package files to the Python Package Index. This package checks that
25494 file to ensure it completely and accurately describes your project.")
25495 (license license:expat)))
25496
25497 (define-public python-android-stringslib
25498 (package
25499 (name "python-android-stringslib")
25500 (version "0.1.2")
25501 (source
25502 (origin
25503 (method git-fetch)
25504 (uri (git-reference
25505 (url "https://framagit.org/tyreunom/python-android-strings-lib")
25506 (commit (string-append "v" version))))
25507 (file-name (git-file-name name version))
25508 (sha256
25509 (base32
25510 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
25511 (build-system python-build-system)
25512 (arguments
25513 `(#:tests? #f))
25514 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
25515 (synopsis "Android strings.xml support")
25516 (description "Android Strings Lib provides support for android's strings.xml
25517 files. These files are used to translate strings in android apps.")
25518 (license license:expat)))
25519
25520 (define-public python-watchdog
25521 (package
25522 (name "python-watchdog")
25523 (version "2.1.6")
25524 (source
25525 (origin
25526 (method url-fetch)
25527 (uri (pypi-uri "watchdog" version))
25528 (sha256
25529 (base32 "1rx2nyl0cyj0v4ja795cl3gi26577c5wg48syr3byz3ndkgpavm3"))))
25530 (build-system python-build-system)
25531 (arguments
25532 `(#:phases
25533 (modify-phases %standard-phases
25534 (replace 'check
25535 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
25536 (when tests?
25537 (add-installed-pythonpath inputs outputs)
25538 (invoke "python" "-m" "pytest" "-k"
25539 ;; This test failed.
25540 "not test_kill_auto_restart")))))))
25541 (propagated-inputs
25542 (list python-pathtools python-pyyaml))
25543 (native-inputs
25544 (list python-pytest-cov python-pytest-timeout))
25545 (home-page "https://github.com/gorakhargosh/watchdog")
25546 (synopsis "File system events monitoring")
25547 (description "This package provides a way to monitor file system events
25548 such as a file modification and trigger an action. This is similar to inotify,
25549 but portable.")
25550 (license license:asl2.0)))
25551
25552 (define-public python-watchgod
25553 (package
25554 (name "python-watchgod")
25555 (version "0.7")
25556 (source
25557 (origin
25558 ;; There are no tests in the PyPI tarball.
25559 (method git-fetch)
25560 (uri (git-reference
25561 (url "https://github.com/samuelcolvin/watchgod")
25562 (commit (string-append "v" version))))
25563 (file-name (git-file-name name version))
25564 (sha256
25565 (base32 "1w2xsidwp9n4giqhja0bzw7rwrh01db0kdxf2n54mv3dkx545jpq"))))
25566 (build-system python-build-system)
25567 (arguments
25568 `(#:phases
25569 (modify-phases %standard-phases
25570 (replace 'check
25571 (lambda* (#:key tests? #:allow-other-keys)
25572 (when tests?
25573 (invoke "pytest" "-vv"
25574 "-o" "asyncio_mode=auto")))))))
25575 (native-inputs
25576 (list python-coverage
25577 python-pygments
25578 python-pytest
25579 python-pytest-asyncio
25580 python-pytest-cov
25581 python-pytest-mock
25582 python-pytest-sugar
25583 python-pytest-toolbox))
25584 (home-page "https://github.com/samuelcolvin/watchgod")
25585 (synopsis "Simple, modern file watching and code reload in Python")
25586 (description
25587 "Simple, modern file watching and code reload in Python inspired by
25588 @code{watchdog}. Among the differences are a unified approach for each
25589 operating systems and an elegant approach to concurrency using threading.")
25590 (license license:expat)))
25591
25592 (define-public python-wget
25593 (package
25594 (name "python-wget")
25595 (version "3.2")
25596 (source
25597 (origin
25598 (method url-fetch)
25599 (uri (pypi-uri "wget" version ".zip"))
25600 (sha256
25601 (base32
25602 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
25603 (build-system python-build-system)
25604 (native-inputs (list unzip))
25605 (home-page "https://bitbucket.org/techtonik/python-wget/")
25606 (synopsis "Pure Python download utility")
25607 (description "The python-wget library provides an API to download files
25608 with features similar to the @command{wget} utility.")
25609 (license license:unlicense)))
25610
25611 (define-public offlate
25612 (package
25613 (name "offlate")
25614 (version "0.6.1")
25615 (source
25616 (origin
25617 (method git-fetch)
25618 (uri (git-reference
25619 (url "https://framagit.org/tyreunom/offlate")
25620 (commit version)))
25621 (file-name (git-file-name name version))
25622 (sha256
25623 (base32
25624 "1sx5cv8pamyw1m089b6x8ykaxdkx26jk9cblhbzlf0m3ckz52jik"))))
25625 (build-system python-build-system)
25626 (arguments
25627 ;; No tests
25628 `(#:tests? #f
25629 #:phases
25630 (modify-phases %standard-phases
25631 (add-before 'build 'generate-fonts
25632 (lambda _
25633 (invoke "make" "fonts")))
25634 (add-before 'build 'generate-translations
25635 (lambda _
25636 (invoke "make" "update-langs"))))))
25637 (propagated-inputs
25638 (list python-android-stringslib
25639 python-dateutil
25640 python-gitlab
25641 python-lxml
25642 python-polib
25643 python-pycountry
25644 python-pyenchant
25645 python-pygit2
25646 python-pygithub
25647 python-pyqt
25648 python-requests
25649 python-ruamel.yaml
25650 python-translate-toolkit
25651 python-translation-finder
25652 python-watchdog))
25653 (native-inputs
25654 (list qttools-5 fontforge))
25655 (home-page "https://framagit.org/tyreunom/offlate")
25656 (synopsis "Offline translation interface for online translation tools")
25657 (description "Offlate offers a unified interface for different translation
25658 file formats, as well as many different online translation platforms. You can
25659 use it to get work from online platforms, specialized such as the Translation
25660 Project, or not such a gitlab instance when your upstream doesn't use any
25661 dedicated platform. The tool proposes a unified interface for any format and
25662 an upload option to send your work back to the platform.")
25663 (license license:gpl3+)))
25664
25665 (define-public python-titlecase
25666 (package
25667 (name "python-titlecase")
25668 (version "0.12.0")
25669 (source
25670 (origin
25671 (method url-fetch)
25672 (uri (pypi-uri "titlecase" version))
25673 (sha256
25674 (base32
25675 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
25676 (build-system python-build-system)
25677 (native-inputs
25678 (list python-nose))
25679 (home-page "https://github.com/ppannuto/python-titlecase")
25680 (synopsis "Capitalize strings similar to book titles")
25681 (description
25682 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
25683 It capitalizes (predominantly English) strings in a way that is similar to
25684 book titles, using the New York Times Manual of Style to leave certain words
25685 lowercase.")
25686 (license license:expat)))
25687
25688 (define-public python-pypng
25689 (package
25690 (name "python-pypng")
25691 (version "0.0.20")
25692 (source
25693 (origin
25694 (method url-fetch)
25695 (uri (pypi-uri "pypng" version))
25696 (sha256
25697 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
25698 (build-system python-build-system)
25699 (home-page "https://github.com/drj11/pypng")
25700 (synopsis "Pure Python PNG image encoder/decoder")
25701 (description
25702 "The PyPNG module implements support for PNG images. It reads and writes
25703 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
25704 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
25705 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
25706 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
25707 A number of optional chunks can be specified (when writing) and
25708 understood (when reading): tRNS, bKGD, gAMA.
25709
25710 PyPNG is not a high level toolkit for image processing (like PIL) and does not
25711 aim at being a replacement or competitor. Its strength lies in fine-grained
25712 extensive support of PNG features. It can also read and write Netpbm PAM
25713 files, with a focus on its use as an intermediate format for implementing
25714 custom PNG processing.")
25715 (license license:expat)))
25716
25717 (define-public python-fuzzywuzzy
25718 (package
25719 (name "python-fuzzywuzzy")
25720 (version "0.18.0")
25721 (source
25722 (origin
25723 (method url-fetch)
25724 (uri (pypi-uri "fuzzywuzzy" version))
25725 (sha256
25726 (base32
25727 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
25728 (build-system python-build-system)
25729 (native-inputs
25730 (list python-hypothesis python-pycodestyle python-pytest))
25731 (propagated-inputs
25732 (list python-levenshtein))
25733 (home-page "https://github.com/seatgeek/fuzzywuzzy")
25734 (synopsis "Fuzzy string matching in Python")
25735 (description "Approximate string matching using
25736 @emph{Levenshtein Distance} to calculate the differences between
25737 sequences.")
25738 (license license:gpl2)))
25739
25740 (define-public python-block-tracing
25741 (package
25742 (name "python-block-tracing")
25743 (version "1.0.1")
25744 (source
25745 (origin
25746 (method url-fetch)
25747 (uri (pypi-uri "block_tracing" version))
25748 (sha256
25749 (base32
25750 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
25751 (build-system python-build-system)
25752 (arguments '(#:tests? #f)) ; no tests
25753 (home-page "https://github.com/rianhunter/block_tracing")
25754 (synopsis "Protect process memory")
25755 (description
25756 "@code{block_tracing} is a tiny Python library that can be used to
25757 prevent debuggers and other applications from inspecting the memory within
25758 your process.")
25759 (license license:expat)))
25760
25761 (define-public python-gcovr
25762 (package
25763 (name "python-gcovr")
25764 (version "4.2")
25765 (source
25766 (origin
25767 (method url-fetch)
25768 (uri (pypi-uri "gcovr" version))
25769 (sha256
25770 (base32
25771 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
25772 (build-system python-build-system)
25773 (propagated-inputs
25774 (list python-lxml python-jinja2))
25775 (home-page "https://gcovr.com/")
25776 (synopsis "Utility for generating code coverage results")
25777 (description
25778 "Gcovr provides a utility for managing the use of the GNU gcov
25779 utility and generating summarized code coverage results. It is inspired
25780 by the Python coverage.py package, which provides a similar utility for
25781 Python.")
25782 (license license:bsd-3)))
25783
25784 (define-public python-owslib
25785 (package
25786 (name "python-owslib")
25787 (version "0.19.2")
25788 (source
25789 (origin
25790 (method url-fetch)
25791 (uri (pypi-uri "OWSLib" version))
25792 (sha256
25793 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
25794 (build-system python-build-system)
25795 (arguments
25796 ;; TODO: package dependencies required for tests.
25797 '(#:tests? #f
25798 #:phases (modify-phases %standard-phases
25799 (delete 'sanity-check))))
25800 (synopsis "Interface for Open Geospatial Consortium web service")
25801 (description
25802 "OWSLib is a Python package for client programming with Open Geospatial
25803 Consortium (OGC) web service (hence OWS) interface standards, and their related
25804 content models.")
25805 (home-page "https://geopython.github.io/OWSLib/")
25806 (license license:bsd-3)))
25807
25808 (define-public python-docusign-esign
25809 (package
25810 (name "python-docusign-esign")
25811 (version "3.1.0")
25812 (source (origin
25813 (method url-fetch)
25814 (uri (pypi-uri "docusign_esign" version))
25815 (sha256
25816 (base32
25817 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
25818 (build-system python-build-system)
25819 ;; Testing requires undocumented setup changes, and so testing is disabled here.
25820 (arguments `(#:tests? #f))
25821 (propagated-inputs
25822 (list python-certifi
25823 python-six
25824 python-dateutil
25825 python-urllib3
25826 python-pyjwt
25827 python-cryptography
25828 python-nose))
25829 (synopsis "DocuSign Python Client")
25830 (description "The Official DocuSign Python Client Library used to interact
25831 with the eSign REST API. Send, sign, and approve documents using this client.")
25832 (home-page "https://www.docusign.com/devcenter")
25833 (license license:expat)))
25834
25835 (define-public python-xattr
25836 (package
25837 (name "python-xattr")
25838 (version "0.9.9")
25839 (source
25840 (origin
25841 (method url-fetch)
25842 (uri (pypi-uri "xattr" version))
25843 (sha256
25844 (base32
25845 "0ipkfblyvp5hylahjkw9zss1ii9xnwjypr3b3ncv989szcg7xjq9"))))
25846 (build-system python-build-system)
25847 (propagated-inputs
25848 (list python-cffi))
25849 (home-page "https://github.com/xattr/xattr")
25850 (synopsis
25851 "Python wrapper for extended file system attributes")
25852 (description "This package provides a Python wrapper for using extended
25853 file system attributes. Extended attributes extend the basic attributes of files
25854 and directories in the file system. They are stored as name:data pairs
25855 associated with file system objects (files, directories, symlinks, etc).")
25856 (license license:expat)))
25857
25858 (define-public python-json-logger
25859 (package
25860 (name "python-json-logger")
25861 (version "0.1.11")
25862 (source
25863 (origin
25864 (method url-fetch)
25865 (uri (pypi-uri "python-json-logger" version))
25866 (sha256
25867 (base32
25868 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
25869 (build-system python-build-system)
25870 (home-page
25871 "https://github.com/madzak/python-json-logger")
25872 (synopsis "JSON log formatter in Python")
25873 (description "This library allows standard Python logging to output log data
25874 as JSON objects. With JSON we can make our logs more readable by machines and
25875 we can stop writing custom parsers for syslog-type records.")
25876 (license license:bsd-3)))
25877
25878 (define-public python-daiquiri
25879 (package
25880 (name "python-daiquiri")
25881 (version "2.1.1")
25882 (source
25883 (origin
25884 (method url-fetch)
25885 (uri (pypi-uri "daiquiri" version))
25886 (sha256
25887 (base32
25888 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
25889 (build-system python-build-system)
25890 (propagated-inputs
25891 (list python-json-logger))
25892 (native-inputs
25893 (list python-mock python-pytest python-setuptools-scm python-six))
25894 (home-page "https://github.com/jd/daiquiri")
25895 (synopsis
25896 "Library to configure Python logging easily")
25897 (description "The daiquiri library provides an easy way to configure
25898 logging in Python. It also provides some custom formatters and handlers.")
25899 (license license:asl2.0)))
25900
25901 (define-public python-pifpaf
25902 (package
25903 (name "python-pifpaf")
25904 (version "3.1.5")
25905 (source
25906 (origin
25907 (method url-fetch)
25908 (uri (pypi-uri "pifpaf" version))
25909 (sha256
25910 (base32
25911 "19bdmxldc2m570isl7hbqgbb20si4sin7pi5fw8sv9py8dyv2s4n"))))
25912 (build-system python-build-system)
25913 (arguments
25914 '(#:phases
25915 (modify-phases %standard-phases
25916 (replace 'check
25917 (lambda _
25918 (invoke "python" "setup.py" "testr" "--slowest"
25919 "--testr-args=until-failure"))))))
25920 (propagated-inputs
25921 (list python-click
25922 python-daiquiri
25923 python-fixtures
25924 python-jinja2
25925 python-pbr
25926 python-psutil
25927 python-xattr))
25928 (native-inputs
25929 (list python-mock python-os-testr python-requests
25930 python-testrepository python-testtools))
25931 (home-page "https://github.com/jd/pifpaf")
25932 (synopsis "Tools and fixtures to manage daemons for testing in Python")
25933 (description "Pifpaf is a suite of fixtures and a command-line tool that
25934 starts and stops daemons for a quick throw-away usage. This is typically
25935 useful when needing these daemons to run integration testing. It originally
25936 evolved from its precursor @code{overtest}.")
25937 (license license:asl2.0)))
25938
25939 (define-public python-pytest-check-links
25940 (package
25941 (name "python-pytest-check-links")
25942 (version "0.3.0")
25943 (source
25944 (origin
25945 (method url-fetch)
25946 ;; URI uses underscores
25947 (uri (pypi-uri "pytest_check_links" version))
25948 (sha256
25949 (base32
25950 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
25951 (build-system python-build-system)
25952 (propagated-inputs
25953 (list python-docutils
25954 python-html5lib
25955 python-nbconvert
25956 python-nbformat
25957 python-pytest
25958 python-six))
25959 (native-inputs
25960 (list python-pbr-minimal))
25961 (home-page "https://github.com/minrk/pytest-check-links")
25962 (synopsis "Check links in files")
25963 (description "This package provides a pytest plugin that checks URLs for
25964 HTML-containing files.")
25965 (license license:bsd-3)))
25966
25967 (define-public python-json5
25968 (package
25969 (name "python-json5")
25970 (version "0.8.5")
25971 (source
25972 (origin
25973 ;; sample.json5 is missing from PyPi source tarball
25974 (method git-fetch)
25975 (uri (git-reference
25976 (url "https://github.com/dpranke/pyjson5")
25977 (commit (string-append "v" version))))
25978 (file-name (git-file-name name version))
25979 (sha256
25980 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
25981 (build-system python-build-system)
25982 (home-page "https://github.com/dpranke/pyjson5")
25983 (synopsis
25984 "Python implementation of the JSON5 data format")
25985 (description
25986 "JSON5 extends the JSON data interchange format to make it slightly more
25987 usable as a configuration language. This Python package implements parsing and
25988 dumping of JSON5 data structures.")
25989 (license license:asl2.0)))
25990
25991 (define-public python-freetype-py
25992 (package
25993 (name "python-freetype-py")
25994 (version "2.3.0")
25995 (source
25996 (origin
25997 (method url-fetch)
25998 (uri (pypi-uri "freetype-py" version ".zip"))
25999 (sha256
26000 (base32 "1l55wzy21jmdayjna29ahzxrf2fp68580978rs6kap1a4zilrdpr"))))
26001 (build-system python-build-system)
26002 (native-inputs
26003 (list python-setuptools-scm
26004 unzip))
26005 (inputs (list freetype))
26006 (arguments
26007 `(#:phases
26008 ;; Note: the pypi archive does not contain tests, but running the check
26009 ;; phase will at least test whether the module loads correctly.
26010 (modify-phases %standard-phases
26011 (add-before 'build 'embed-library-reference
26012 (lambda* (#:key inputs #:allow-other-keys)
26013 (substitute* "freetype/raw.py"
26014 (("^(filename = ).*" _ >)
26015 (string-append > "\"" (search-input-file inputs "/lib/libfreetype.so")
26016 "\"\n"))))))))
26017 (home-page "https://github.com/rougier/freetype-py")
26018 (synopsis "Freetype python bindings")
26019 (description "Freetype Python provides bindings for the FreeType
26020 library. Only the high-level API is bound.")
26021 (license license:bsd-3)))
26022
26023 (define-public python-frozendict
26024 (package
26025 (name "python-frozendict")
26026 (version "1.2")
26027 (source
26028 (origin
26029 (method url-fetch)
26030 (uri (pypi-uri "frozendict" version))
26031 (sha256
26032 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
26033 (build-system python-build-system)
26034 (home-page "https://github.com/slezica/python-frozendict")
26035 (synopsis "Simple immutable mapping for Python")
26036 (description
26037 "@dfn{frozendict} is an immutable wrapper around dictionaries that
26038 implements the complete mapping interface. It can be used as a drop-in
26039 replacement for dictionaries where immutability is desired.")
26040 (license license:expat)))
26041
26042 (define-public python-unpaddedbase64
26043 (package
26044 (name "python-unpaddedbase64")
26045 (version "2.1.0")
26046 (source
26047 (origin
26048 (method url-fetch)
26049 (uri (pypi-uri "unpaddedbase64" version))
26050 (sha256
26051 (base32 "01ghlmw63fgslwj8j74vkpf1kqvr7a4agm6nyn89vqwx106ccwvj"))))
26052 (build-system python-build-system)
26053 (arguments
26054 `(#:phases
26055 (modify-phases %standard-phases
26056 (replace 'check
26057 (lambda* (#:key inputs tests? #:allow-other-keys)
26058 (when tests?
26059 (copy-recursively (string-append
26060 (assoc-ref inputs "tests") "/tests")
26061 "tests")
26062 (invoke "python" "-m" "pytest" "-vv")))))))
26063 (native-inputs
26064 `(("python-pytest" ,python-pytest)
26065 ("tests"
26066 ;; The release on pypi comes without tests. We can't build from this
26067 ;; checkout, though, because installation requires an invocation of
26068 ;; poetry.
26069 ,(origin
26070 (method git-fetch)
26071 (uri (git-reference
26072 (url "https://github.com/matrix-org/python-unpaddedbase64")
26073 (commit (string-append "v" version))))
26074 (file-name (git-file-name name version))
26075 (sha256
26076 (base32
26077 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))))
26078 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
26079 (synopsis "Encode and decode Base64 without “=” padding")
26080 (description
26081 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
26082 using “=” characters. However this conveys no benefit so many protocols
26083 choose to use Base64 without the “=” padding.")
26084 (license license:asl2.0)))
26085
26086 (define-public python-py-cpuinfo
26087 ;; This is the first commit where riscv64-linux support is available.
26088 ;; We can move back to pypi releases with the next release.
26089 (let ((commit "4d6987e5c30f2ebacb20781892c01329042cce60")
26090 (revision "1"))
26091 (package
26092 (name "python-py-cpuinfo")
26093 (version (git-version "8.0.0" revision commit))
26094 (source
26095 (origin
26096 (method git-fetch)
26097 (uri (git-reference
26098 (url "https://github.com/workhorsy/py-cpuinfo")
26099 (commit commit)))
26100 (file-name (git-file-name name version))
26101 (sha256
26102 (base32
26103 "0h5wi1bfcqqr1x3j1pa7dmkx7siprsyksbsy80fl2sdrrgpji0b0"))))
26104 (build-system python-build-system)
26105 (home-page "https://github.com/workhorsy/py-cpuinfo")
26106 (synopsis "Get CPU info with Python")
26107 (description
26108 "This Python module returns the CPU info by using the best sources of
26109 information for your operating system.")
26110 (license license:expat))))
26111
26112 (define-public python-canonicaljson
26113 (package
26114 (name "python-canonicaljson")
26115 (version "1.4.0")
26116 (source
26117 (origin
26118 (method url-fetch)
26119 (uri (pypi-uri "canonicaljson" version))
26120 (sha256
26121 (base32 "0c86g0vvzdcg3nrcsqnbzlfhpprc2i894p8i14hska56yl27d6w9"))))
26122 (build-system python-build-system)
26123 (propagated-inputs
26124 (list python-six python-frozendict python-simplejson))
26125 (home-page "https://github.com/matrix-org/python-canonicaljson")
26126 (synopsis "Canonical JSON")
26127 (description
26128 "Deterministically encode JSON.
26129
26130 @itemize
26131 @item Encodes objects and arrays as RFC 7159 JSON.
26132 @item Sorts object keys so that you get the same result each time.
26133 @item Has no insignificant whitespace to make the output as small as possible.
26134 @item Escapes only the characters that must be escaped, U+0000 to
26135 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
26136 @item Uses the shortest escape sequence for each escaped character.
26137 @item Encodes the JSON as UTF-8.
26138 @item Can encode frozendict immutable dictionaries.
26139 @end itemize")
26140 (license license:asl2.0)))
26141
26142 (define-public python-signedjson
26143 (package
26144 (name "python-signedjson")
26145 (version "1.1.1")
26146 (source
26147 (origin
26148 (method url-fetch)
26149 (uri (pypi-uri "signedjson" version))
26150 (sha256
26151 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
26152 (build-system python-build-system)
26153 (propagated-inputs
26154 (list python-canonicaljson python-importlib-metadata python-pynacl
26155 python-typing-extensions python-unpaddedbase64))
26156 (native-inputs
26157 (list python-setuptools-scm))
26158 (home-page "https://github.com/matrix-org/python-signedjson")
26159 (synopsis "Sign JSON objects with ED25519 signatures")
26160 (description
26161 "Sign JSON objects with ED25519 signatures.
26162
26163 @itemize
26164 @item More than one entity can sign the same object.
26165 @item Each entity can sign the object with more than one key making it easier to
26166 rotate keys
26167 @item ED25519 can be replaced with a different algorithm.
26168 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
26169 key.
26170 @end itemize")
26171 (license license:asl2.0)))
26172
26173 (define-public python-daemonize
26174 (package
26175 (name "python-daemonize")
26176 (version "2.5.0")
26177 (source
26178 (origin
26179 (method url-fetch)
26180 (uri (pypi-uri "daemonize" version))
26181 (sha256
26182 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
26183 (build-system python-build-system)
26184 (home-page "https://github.com/thesharp/daemonize")
26185 (synopsis "Library for writing system daemons in Python")
26186 (description "Daemonize is a library for writing system daemons in Python.")
26187 (license license:expat)))
26188
26189 (define-public python-pymacaroons
26190 (package
26191 (name "python-pymacaroons")
26192 (version "0.13.0")
26193 (source
26194 (origin
26195 (method url-fetch)
26196 (uri (pypi-uri "pymacaroons" version))
26197 (sha256
26198 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
26199 (build-system python-build-system)
26200 (propagated-inputs
26201 (list python-six python-pynacl))
26202 (home-page "https://github.com/ecordell/pymacaroons")
26203 (synopsis "Python Macaroon Library")
26204 (description
26205 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
26206 tokens, macaroons embed caveats that define specific authorization
26207 requirements for the target service, the service that issued the root macaroon
26208 and which is capable of verifying the integrity of macaroons it receives.
26209
26210 Macaroons allow for delegation and attenuation of authorization. They are
26211 simple and fast to verify, and decouple authorization policy from the
26212 enforcement of that policy.")
26213 (license license:expat)))
26214
26215 (define-public python-ldap3
26216 (package
26217 (name "python-ldap3")
26218 (version "2.7")
26219 (home-page "https://github.com/cannatag/ldap3")
26220 (source
26221 (origin
26222 (method git-fetch)
26223 (uri (git-reference (url home-page)
26224 (commit (string-append "v" version))))
26225 (file-name (git-file-name name version))
26226 (sha256
26227 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
26228 (build-system python-build-system)
26229 (arguments
26230 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
26231 #:phases (modify-phases %standard-phases
26232 (replace 'check
26233 (lambda* (#:key tests? #:allow-other-keys)
26234 (when tests?
26235 (invoke "nosetests" "-s" "test"))
26236 #t)))))
26237 (native-inputs
26238 (list python-nose))
26239 (propagated-inputs
26240 (list python-gssapi python-pyasn1))
26241 (synopsis "Python LDAP client")
26242 (description
26243 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
26244 library.")
26245 (license license:lgpl3+)))
26246
26247 (define-public python-boltons
26248 (package
26249 (name "python-boltons")
26250 (version "20.0.0")
26251 (source
26252 (origin
26253 (method url-fetch)
26254 (uri (pypi-uri "boltons" version))
26255 (sha256
26256 (base32
26257 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
26258 (build-system python-build-system)
26259 (home-page "https://github.com/mahmoud/boltons")
26260 (synopsis "Extensions to the Python standard library")
26261 (description
26262 "Boltons is a set of over 230 pure-Python utilities in the same spirit
26263 as — and yet conspicuously missing from — the standard library, including:
26264
26265 @itemize
26266 @item Atomic file saving, bolted on with fileutils
26267 @item A highly-optimized OrderedMultiDict, in dictutils
26268 @item Two types of PriorityQueue, in queueutils
26269 @item Chunked and windowed iteration, in iterutils
26270 @item Recursive data structure iteration and merging, with iterutils.remap
26271 @item Exponential backoff functionality, including jitter, through
26272 iterutils.backoff
26273 @item A full-featured TracebackInfo type, for representing stack traces, in
26274 tbutils
26275 @end itemize")
26276 (license license:bsd-3)))
26277
26278 (define-public python-eliot
26279 (package
26280 (name "python-eliot")
26281 (version "1.13.0")
26282 (source
26283 (origin
26284 (method url-fetch)
26285 (uri (pypi-uri "eliot" version))
26286 (sha256
26287 (base32 "1xzzhsjrrw430dc84vamf683bwp9i0nr86xf2iav6yla615ijq2p"))))
26288 (build-system python-build-system)
26289 (arguments
26290 `(#:phases
26291 (modify-phases %standard-phases
26292 (add-after 'unpack 'remove-journald-support
26293 (lambda _
26294 (for-each delete-file
26295 '("eliot/tests/test_journald.py"
26296 "eliot/journald.py"))
26297 #t))
26298 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
26299 ;; remove command-line tool's tests. TODO eliot-prettyprint should
26300 ;; be installed and these tests should pass.
26301 (lambda _
26302 (delete-file "eliot/tests/test_prettyprint.py")
26303 #t))
26304 (add-after 'remove-eliot-prettyprint-tests 'remove-failing-tests
26305 (lambda _
26306 ;; These tests started to fail after updating python-pandas to
26307 ;; 1.3.3 and python-dask to 2021.9.1.
26308 (substitute* "eliot/tests/test_validation.py"
26309 (("test_omitLoggerFromActionType")
26310 "_test_omitLoggerFromActionType")
26311 (("test_logCallsDefaultLoggerWrite")
26312 "_test_logCallsDefaultLoggerWrite"))
26313 #t)))))
26314 (propagated-inputs
26315 (list python-boltons python-pyrsistent python-six
26316 python-zope-interface))
26317 (native-inputs
26318 (list python-black
26319 python-coverage
26320 python-dask
26321 python-flake8
26322 python-hypothesis
26323 python-pytest
26324 python-setuptools
26325 python-sphinx
26326 python-sphinx-rtd-theme
26327 python-testtools
26328 python-twine
26329 python-twisted))
26330 (home-page "https://github.com/itamarst/eliot/")
26331 (synopsis "Eliot: the logging system that tells you why it happened")
26332 (description
26333 "@dfn{eliot} is a Python logging system that outputs causal chains of
26334 actions: actions can spawn other actions, and eventually they either succeed
26335 or fail. The resulting logs tell you the story of what your software did: what
26336 happened, and what caused it.")
26337 (license license:asl2.0)))
26338
26339 (define-public python-pem
26340 (package
26341 (name "python-pem")
26342 (version "20.1.0")
26343 (source
26344 (origin
26345 (method url-fetch)
26346 (uri (pypi-uri "pem" version))
26347 (sha256
26348 (base32
26349 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
26350 (build-system python-build-system)
26351 (native-inputs
26352 (list python-certifi
26353 python-coverage
26354 python-pretend
26355 python-pyopenssl
26356 python-pytest
26357 python-sphinx
26358 python-twisted))
26359 (home-page "https://pem.readthedocs.io/")
26360 (synopsis "Easy PEM file parsing in Python")
26361 (description
26362 "This package provides a Python module for parsing and splitting PEM files.")
26363 (license license:expat)))
26364
26365 (define-public python-txsni
26366 ;; We need a few commits on top of 0.1.9 for compatibility with newer
26367 ;; Python and OpenSSL.
26368 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
26369 (revision "0"))
26370 (package
26371 (name "python-txsni")
26372 (version (git-version "0.1.9" revision commit))
26373 (home-page "https://github.com/glyph/txsni")
26374 (source
26375 (origin
26376 (method git-fetch)
26377 (uri (git-reference (url home-page) (commit commit)))
26378 (file-name (git-file-name name version))
26379 (sha256
26380 (base32
26381 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
26382 (build-system python-build-system)
26383 (propagated-inputs
26384 (list python-pyopenssl python-service-identity python-twisted))
26385 (synopsis "Run TLS servers with Twisted")
26386 (description
26387 "This package provides an easy-to-use SNI endpoint for use
26388 with the Twisted web framework.")
26389 (license license:expat))))
26390
26391 (define-public python-txacme
26392 (package
26393 (name "python-txacme")
26394 (version "0.9.2")
26395 (source
26396 (origin
26397 (method url-fetch)
26398 (uri (pypi-uri "txacme" version))
26399 (sha256
26400 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
26401 (build-system python-build-system)
26402 (propagated-inputs
26403 (list python-acme
26404 python-attrs
26405 python-eliot
26406 python-josepy
26407 python-pem
26408 python-treq
26409 python-twisted
26410 python-txsni))
26411 (native-inputs
26412 (list python-fixtures
26413 python-hypothesis
26414 python-mock
26415 python-service-identity
26416 python-testrepository
26417 python-testscenarios
26418 python-testtools))
26419 (home-page "https://github.com/twisted/txacme")
26420 (synopsis "Twisted implexmentation of the ACME protocol")
26421 (description
26422 "ACME is Automatic Certificate Management Environment, a protocol that
26423 allows clients and certificate authorities to automate verification and
26424 certificate issuance. The ACME protocol is used by the free Let's Encrypt
26425 Certificate Authority.
26426
26427 txacme is an implementation of the protocol for Twisted, the event-driven
26428 networking engine for Python.")
26429 (license license:expat)))
26430
26431 (define-public python-pysaml2
26432 (package
26433 (name "python-pysaml2")
26434 (version "6.5.1")
26435 (source
26436 (origin
26437 (method url-fetch)
26438 (uri (pypi-uri "pysaml2" version))
26439 (sha256
26440 (base32
26441 "1xk2x0slz1f8cqv7vn77qx99xfd1mshhswiwrljk9m72w2m9iivd"))))
26442 (build-system python-build-system)
26443 (propagated-inputs
26444 (list python-cryptography
26445 python-dateutil
26446 python-defusedxml
26447 python-importlib-resources
26448 python-pyopenssl
26449 python-pytz
26450 python-requests
26451 python-six
26452 python-xmlschema))
26453 (home-page "https://idpy.org")
26454 (synopsis "Python implementation of SAML Version 2 Standard")
26455 (description
26456 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
26457 It contains all necessary pieces for building a SAML2 service provider or
26458 an identity provider. The distribution contains examples of both.
26459
26460 This package was originally written to work in a WSGI environment, but
26461 there are extensions that allow you to use it with other frameworks.")
26462 (license license:asl2.0)))
26463
26464 (define-public python-click-plugins
26465 (package
26466 (name "python-click-plugins")
26467 (version "1.1.1")
26468 (source
26469 (origin
26470 (method url-fetch)
26471 (uri (pypi-uri "click-plugins" version))
26472 (sha256
26473 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
26474 (build-system python-build-system)
26475 (native-inputs
26476 (list python-pytest))
26477 (propagated-inputs
26478 (list python-click))
26479 (synopsis "Extension for Click to register external CLI commands")
26480 (description "This package provides n extension module for Click to
26481 register external CLI commands via setuptools entry-points.")
26482 (home-page "https://github.com/click-contrib/click-plugins")
26483 (license license:bsd-3)))
26484
26485 (define-public python-diceware
26486 (package
26487 (name "python-diceware")
26488 (version "0.9.6")
26489 (source
26490 (origin
26491 (method url-fetch)
26492 (uri (pypi-uri "diceware" version))
26493 (sha256
26494 (base32
26495 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
26496 (build-system python-build-system)
26497 (native-inputs
26498 (list python-coverage python-pytest python-pytest-runner))
26499 (home-page "https://github.com/ulif/diceware/")
26500 (synopsis "Generates memorable passphrases")
26501 (description "This package generates passphrases by concatenating words
26502 randomly picked from wordlists. It supports several sources of
26503 randomness (including real life dice) and different wordlists (including
26504 cryptographically signed ones).")
26505 (license license:gpl3+)))
26506
26507 (define-public python-dictdiffer
26508 (package
26509 (name "python-dictdiffer")
26510 (version "0.9.0")
26511 (source (origin
26512 (method url-fetch)
26513 (uri (pypi-uri "dictdiffer" version))
26514 (sha256
26515 (base32
26516 "0y3mk74qm2q9hsm37892i1wzn8bbdrvbs4nmnvqwq4z6pxgwzfhp"))))
26517 (build-system python-build-system)
26518 (arguments
26519 ;; XXX: The PyPI tarball lacks tests and the git repository
26520 ;; fails to determine version.
26521 '(#:tests? #f))
26522 (native-inputs
26523 (list python-pytest-runner python-setuptools-scm))
26524 (home-page "https://github.com/inveniosoftware/dictdiffer")
26525 (synopsis "Diff and patch Python dictionary objects")
26526 (description
26527 "Dictdiffer is a Python module that helps you to diff and patch
26528 dictionaries.")
26529 (license license:expat)))
26530
26531 (define-public python-dictpath
26532 (package
26533 (name "python-dictpath")
26534 (version "0.1.3")
26535 (source
26536 (origin
26537 (method url-fetch)
26538 (uri (pypi-uri "dictpath" version))
26539 (sha256
26540 (base32 "1n4hq4wbgaw59bbb16nhkgg5wk8sl4iw940vjrgx4xmifqxxw73m"))))
26541 (build-system python-build-system)
26542 (native-inputs (list python-pytest python-pytest-cov python-pytest-flake8))
26543 (home-page "https://github.com/p1c2u/pathable")
26544 (synopsis "Object-oriented path library for Python")
26545 (description "This object-oriented dictionary path Python library enables
26546 traversing resources like paths or accessing resources on demand with separate
26547 accessor layer.")
26548 (license license:asl2.0)))
26549
26550 (define-public pyzo
26551 (package
26552 (name "pyzo")
26553 (version "4.12.3")
26554 (source
26555 (origin
26556 (method git-fetch)
26557 (uri (git-reference
26558 (url "https://github.com/pyzo/pyzo.git")
26559 (commit (string-append "v" version))))
26560 (file-name (git-file-name name version))
26561 (sha256
26562 (base32
26563 "0v6rgp52bf9za2spxx9c1yc6wmskvlsj81iw0gipjy7y8vpypgn2"))))
26564 (build-system python-build-system)
26565 (arguments
26566 `(#:phases
26567 (modify-phases %standard-phases
26568 (add-before 'check 'fix-home-directory
26569 (lambda _
26570 ;; Tests fail with "Permission denied: '/homeless-shelter'".
26571 (setenv "HOME" "/tmp"))))
26572 ;; Tests fail with "Uncaught Python exception: python: undefined
26573 ;; symbol: objc_getClass".
26574 #:tests? #f))
26575 (propagated-inputs
26576 (list python-pyqt))
26577 (home-page "https://pyzo.org")
26578 (synopsis
26579 "Python IDE for scientific computing")
26580 (description
26581 "Pyzo is a Python IDE focused on interactivity and introspection,
26582 which makes it very suitable for scientific computing. Its practical
26583 design is aimed at simplicity and efficiency.
26584
26585 It consists of two main components, the editor and the shell, and uses
26586 a set of pluggable tools to help the programmer in various ways. Some
26587 example tools are source structure, project manager, interactive help,
26588 workspace...")
26589 (license license:bsd-2)))
26590
26591 (define-public python-osc
26592 (package
26593 (name "python-osc")
26594 (version "1.7.4")
26595 (source
26596 (origin
26597 (method url-fetch)
26598 (uri (pypi-uri "python-osc" version))
26599 (sha256
26600 (base32
26601 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
26602 (build-system python-build-system)
26603 (home-page "https://github.com/attwad/python-osc")
26604 (synopsis "Open Sound Control server and client implementations")
26605 (description
26606 "@code{python-osc} is a pure Python library with no external
26607 dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
26608 Open Sound Control 1.0} specification.")
26609 (license license:unlicense)))
26610
26611 (define-public python-voluptuous
26612 (package
26613 (name "python-voluptuous")
26614 (version "0.11.7")
26615 (source
26616 (origin
26617 (method url-fetch)
26618 (uri (pypi-uri "voluptuous" version))
26619 (sha256
26620 (base32
26621 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
26622 (build-system python-build-system)
26623 (native-inputs
26624 (list python-nose))
26625 (home-page "https://github.com/alecthomas/voluptuous")
26626 (synopsis "Python data validation library")
26627 (description
26628 "Voluptuous is a Python data validation library. It is primarily
26629 intended for validating data coming into Python as JSON, YAML, etc.")
26630 (license license:bsd-3)))
26631
26632 (define-public python-cmd2
26633 (package
26634 (name "python-cmd2")
26635 (version "2.3.3")
26636 (source
26637 (origin
26638 (method url-fetch)
26639 (uri (pypi-uri "cmd2" version))
26640 (sha256
26641 (base32
26642 "0h1naik558qh48gx2iyy0a0khvw5fz0in69y84mbrhsm9nq7w3bm"))))
26643 (build-system python-build-system)
26644 (arguments
26645 '(#:phases
26646 (modify-phases %standard-phases
26647 (replace 'check
26648 (lambda* (#:key tests? #:allow-other-keys)
26649 (if tests?
26650 (invoke "pytest" "-vv" "-k"
26651 ;; These tests fail because no EDITOR is in PATH.
26652 "not test_find_editor_not_specified \
26653 and not test_transcript")
26654 (format #t "test suite not run~%")))))))
26655 (propagated-inputs
26656 (list python-attrs python-colorama python-pyperclip python-wcwidth))
26657 (native-inputs
26658 (list python-invoke
26659 python-mock
26660 python-pytest
26661 python-pytest-cov
26662 python-pytest-mock
26663 python-setuptools-scm))
26664 (home-page "https://github.com/python-cmd2/cmd2")
26665 (synopsis "Tool for building interactive command line applications")
26666 (description
26667 "Cmd2 is a tool for building interactive command line applications in
26668 Python. Its goal is to make it quick and easy for developers to build
26669 feature-rich and user-friendly interactive command line applications. It
26670 provides a simple API which is an extension of Python's built-in @code{cmd}
26671 module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
26672 make your life easier and eliminates much of the boilerplate code which would
26673 be necessary when using @code{cmd}.")
26674 (license license:expat)))
26675
26676 (define-public python-pytidylib
26677 (package
26678 (name "python-pytidylib")
26679 (version "0.3.2")
26680 (source (origin
26681 (method url-fetch)
26682 (uri (pypi-uri "pytidylib" version))
26683 (sha256
26684 (base32
26685 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
26686 (build-system python-build-system)
26687 (arguments
26688 '(#:phases
26689 (modify-phases %standard-phases
26690 (add-before 'build 'qualify-libtidy
26691 (lambda* (#:key inputs #:allow-other-keys)
26692 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
26693 (substitute* "tidylib/tidy.py"
26694 (("ctypes\\.util\\.find_library\\('tidy'\\)")
26695 (format #f "'~a'" libtidy)))
26696 #t))))))
26697 (inputs (list tidy))
26698 (home-page "https://github.com/countergram/pytidylib")
26699 (synopsis "Python wrapper for HTML Tidy library")
26700 (description
26701 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
26702 allows you, from Python code, to “fix” invalid (X)HTML markup.")
26703 (license license:expat)))
26704
26705 (define-public python-mujson
26706 (package
26707 (name "python-mujson")
26708 (version "1.4")
26709 (source
26710 (origin
26711 (method url-fetch)
26712 (uri (pypi-uri "mujson" version))
26713 (sha256
26714 (base32
26715 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
26716 (build-system python-build-system)
26717 (home-page "https://github.com/mattgiles/mujson")
26718 (synopsis "Use the fastest JSON functions available at import time")
26719 (description "This package selects the fastest JSON functions available
26720 at import time.")
26721 (license license:expat)))
26722
26723 (define-public python-bashlex
26724 (package
26725 (name "python-bashlex")
26726 (version "0.14")
26727 (source
26728 (origin
26729 (method url-fetch)
26730 (uri (pypi-uri "bashlex" version))
26731 (sha256
26732 (base32
26733 "1z9g96fgsfpdwawp4sb5x6hbdhmda7kgmcrqlf9xx4bs1f8f14js"))))
26734 (build-system python-build-system)
26735 (arguments
26736 `(#:phases
26737 (modify-phases %standard-phases
26738 (add-before 'build 'pregenerate-yacc-tables
26739 (lambda _
26740 ;; parser.py caches tables, which attempts to write to site lib
26741 ;; see https://github.com/idank/bashlex/issues/51
26742 (invoke "python" "-c" "import bashlex"))))))
26743 (home-page
26744 "https://github.com/idank/bashlex")
26745 (synopsis "Python parser for bash")
26746 (description "@code{bashlex} is a Python port of the parser used
26747 internally by GNU bash.
26748
26749 For the most part it's transliterated from C, the major differences are:
26750
26751 @itemize
26752 @item it does not execute anything
26753 @item it is reentrant
26754 @item it generates a complete AST
26755 @end itemize
26756 ")
26757 (license license:gpl3+)))
26758
26759 (define-public python-jinxed
26760 (package
26761 (name "python-jinxed")
26762 (version "1.0.0")
26763 (source
26764 (origin
26765 (method url-fetch)
26766 (uri (pypi-uri "jinxed" version))
26767 (sha256
26768 (base32
26769 "1n7vl03rhjd0xhjgbjlh8x9f8yfbhamcwkgvs4jg7g5qj8f0wk89"))))
26770 (build-system python-build-system)
26771 (arguments
26772 '(#:phases
26773 (modify-phases %standard-phases
26774 (add-before 'check 'set-environment-variables
26775 (lambda* (#:key inputs #:allow-other-keys)
26776 (let ((ncurses (assoc-ref inputs "ncurses")))
26777 (setenv "TERM" "LINUX")
26778 (setenv "TERMINFO" (string-append ncurses "/share/terminfo"))
26779 #t))))
26780 #:tests? #f)) ; _curses.error: setupterm: could not find terminal
26781 (native-inputs
26782 (list ncurses))
26783 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
26784 (synopsis "Jinxed Terminal Library")
26785 (description
26786 "Jinxed is an implementation of a subset of the Python curses library.")
26787 (license license:mpl2.0)))
26788
26789 (define-public python-svgutils
26790 (package
26791 (name "python-svgutils")
26792 (version "0.3.4")
26793 (source
26794 (origin
26795 (method url-fetch)
26796 (uri (pypi-uri "svgutils" version))
26797 (sha256
26798 (base32
26799 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
26800 (build-system python-build-system)
26801 (propagated-inputs
26802 (list python-lxml))
26803 (home-page "https://svgutils.readthedocs.io")
26804 (synopsis "Python SVG editor")
26805 (description "This is an utility package that helps with editing and
26806 concatenating SVG files. It is especially directed at scientists preparing
26807 final figures for submission to journals. So far it supports arbitrary
26808 placement and scaling of SVG figures and adding markers, such as labels.")
26809 (license license:expat)))
26810
26811 (define-public python-blessed
26812 (package
26813 (name "python-blessed")
26814 (version "1.17.8")
26815 (source
26816 (origin
26817 (method url-fetch)
26818 (uri (pypi-uri "blessed" version))
26819 (sha256
26820 (base32
26821 "1wdj342sk22hfrg0n91x2qnqsbzbiyq9y009v3pxnvfzn9bx0wbn"))
26822 (modules '((guix build utils)))
26823 (snippet
26824 '(begin
26825 ;; Don't get hung up on Windows test failures.
26826 (delete-file "blessed/win_terminal.py") #t))))
26827 (build-system python-build-system)
26828 (propagated-inputs
26829 (list python-jinxed python-six python-wcwidth))
26830 (native-inputs
26831 (list python-mock python-pytest))
26832 (home-page "https://github.com/jquast/blessed")
26833 (synopsis "Wrapper around terminal capabilities")
26834 (description
26835 "Blessed is a thin, practical wrapper around terminal styling, screen
26836 positioning, and keyboard input.")
26837 (license license:expat)))
26838
26839 (define-public python-readme-renderer
26840 (package
26841 (name "python-readme-renderer")
26842 (version "34.0")
26843 (source
26844 (origin
26845 (method url-fetch)
26846 (uri (pypi-uri "readme_renderer" version))
26847 (sha256
26848 (base32
26849 "1c75h9znffc2lh4j56yg23l5ifj5l8fbdq3kfigi8vbh45zx3d6z"))))
26850 (build-system python-build-system)
26851 (arguments
26852 '(#:phases (modify-phases %standard-phases
26853 (add-after 'unpack 'loosen-cmarkgfm-dependency
26854 (lambda _
26855 ;; Permit newer versions of cmarkgfm.
26856 (substitute* "setup.py"
26857 (("cmarkgfm>=0\\.5\\.0,<0\\.7\\.0")
26858 "cmarkgfm>=0.5.0"))))
26859 (replace 'check
26860 (lambda* (#:key tests? #:allow-other-keys)
26861 (when tests?
26862 ;; The GFM tests fail due to slight differences in the
26863 ;; generated vs expected HTML due to using a more
26864 ;; recent bleach version (see:
26865 ;; https://github.com/pypa/readme_renderer/issues/234).
26866 (invoke "pytest" "-vv" "-k" "not GFM")))))))
26867 (propagated-inputs
26868 (list python-bleach python-docutils python-pygments
26869
26870 ;; Optional dependencies.
26871 python-cmarkgfm)) ;required by postorius
26872 (native-inputs
26873 (list python-mock python-pytest))
26874 (home-page "https://github.com/pypa/readme_renderer")
26875 (synopsis "Render README files in Warehouse")
26876 (description
26877 "Readme Renderer is a library that will safely render arbitrary README
26878 files into HTML. It is designed to be used in Warehouse to render the
26879 @code{long_description} for packages. It can handle Markdown, reStructuredText,
26880 and plain text.")
26881 (license license:asl2.0)))
26882
26883 (define-public python-lazr-delegates
26884 (package
26885 (name "python-lazr-delegates")
26886 (version "2.0.4")
26887 (source
26888 (origin
26889 (method url-fetch)
26890 (uri (pypi-uri "lazr.delegates" version))
26891 (sha256
26892 (base32
26893 "1rdnl85j9ayp8n85l0ciip621j9dcziz5qnmv2m7krgwgcn31vfx"))))
26894 (build-system python-build-system)
26895 (arguments
26896 '(#:phases
26897 (modify-phases %standard-phases
26898 (replace 'check
26899 (lambda* (#:key tests? #:allow-other-keys)
26900 (when tests? (invoke "nosetests")))))))
26901 (native-inputs
26902 (list python-nose))
26903 (propagated-inputs
26904 (list python-zope-interface))
26905 (home-page "https://launchpad.net/lazr.delegates")
26906 (synopsis "Easily write objects that delegate behavior")
26907 (description
26908 "The @code{lazr.delegates} package makes it easy to write objects that
26909 delegate behavior to another object. The new object adds some property or
26910 behavior on to the other object, while still providing the underlying interface,
26911 and delegating behavior.")
26912 (license license:lgpl3)))
26913
26914 (define-public python-lazr-config
26915 (package
26916 (name "python-lazr-config")
26917 (version "2.2.3")
26918 (source
26919 (origin
26920 (method url-fetch)
26921 (uri (pypi-uri "lazr.config" version))
26922 (sha256
26923 (base32
26924 "1qdbrzl61q7cjhbnxvw9y3frcr935y7diwy15xrwcv9ynvw76jmp"))))
26925 (build-system python-build-system)
26926 (arguments
26927 '(#:phases
26928 (modify-phases %standard-phases
26929 (replace 'check
26930 (lambda _
26931 (invoke "python" "-s" "-m" "nose" "-P" "lazr"))))))
26932 (native-inputs
26933 (list python-nose))
26934 (propagated-inputs
26935 (list python-lazr-delegates python-zope-interface))
26936 (home-page "https://launchpad.net/lazr.config")
26937 (synopsis "Create configuration schemas and process and validate configurations")
26938 (description
26939 "The LAZR config system is typically used to manage process configuration.
26940 Process configuration is for saying how things change when we run systems on
26941 different machines, or under different circumstances. This system uses ini-like
26942 file format of section, keys, and values. The config file supports inheritance
26943 to minimize duplication of information across files. The format supports schema
26944 validation.")
26945 (license license:lgpl3)))
26946
26947 (define-public python-flufl-bounce
26948 (package
26949 (name "python-flufl-bounce")
26950 (version "4.0")
26951 (source
26952 (origin
26953 (method url-fetch)
26954 (uri (pypi-uri "flufl.bounce" version))
26955 (sha256
26956 (base32
26957 "0c9qc2l47lyqnpwskp6vvi7m3jqh6hx42v6d35dgxh3fjzmlll15"))))
26958 (build-system python-build-system)
26959 (arguments
26960 (list #:phases
26961 #~(modify-phases %standard-phases
26962 (replace 'check
26963 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
26964 (when tests?
26965 (with-directory-excursion
26966 (string-append (site-packages inputs outputs) "/flufl")
26967 (invoke "python" "-m" "nose2" "-v"))))))))
26968 (propagated-inputs
26969 (list python-atpublic python-zope-interface))
26970 (native-inputs
26971 (list python-flufl-testing python-nose2))
26972 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
26973 (synopsis "Email bounce detectors")
26974 (description "The @code{flufl.bounce} library provides a set of heuristics
26975 and an API for detecting the original bouncing email addresses from a bounce
26976 message. Many formats found in the wild are supported, as are VERP and
26977 RFC 3464.")
26978 (license (list license:asl2.0
26979 license:lgpl3)))) ; only for setup_headers.py
26980
26981 (define-public python-flufl-i18n
26982 (package
26983 (name "python-flufl-i18n")
26984 (version "3.0")
26985 (source
26986 (origin
26987 (method url-fetch)
26988 (uri (pypi-uri "flufl.i18n" version))
26989 (sha256
26990 (base32
26991 "1flwpn1xhgc957zj3zxw92dhdjh0lsy0hdvzq32dzqpsajfsvq1r"))))
26992 (build-system python-build-system)
26993 (propagated-inputs
26994 (list python-atpublic))
26995 (home-page "https://flufli18n.readthedocs.io")
26996 (synopsis "API for Python internationalization")
26997 (description
26998 "This package provides a high-level, convenient API for managing
26999 internationalization/translation contexts in Python applications. There is a
27000 simple API for single-context applications, such as command line scripts which
27001 only need to translate into one language during the entire course of their
27002 execution. There is a more flexible, but still convenient API for multi-context
27003 applications, such as servers, which may need to switch language contexts for
27004 different tasks.")
27005 (license license:asl2.0)))
27006
27007 (define-public python-flufl-lock
27008 (package
27009 (name "python-flufl-lock")
27010 (version "4.0")
27011 (source
27012 (origin
27013 (method url-fetch)
27014 (uri (pypi-uri "flufl.lock" version))
27015 (sha256
27016 (base32
27017 "055941zyma3wfx25jhm8wcsghpv3jc3iwi1gdrdjhzcnfhn62lxq"))))
27018 (build-system python-build-system)
27019 (propagated-inputs
27020 (list python-atpublic python-psutil))
27021 (home-page "https://flufllock.readthedocs.io")
27022 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
27023 (description
27024 "The @dfn{flufl.lock} package provides NFS-safe file locking with
27025 timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
27026 @code{open} system call but uses a lockfile. Lock objects support lock-breaking
27027 and have a maximum lifetime built-in.")
27028 (license (list license:asl2.0
27029 license:lgpl3)))) ; only for setup_helpers.py
27030
27031 (define-public python-flufl-testing
27032 (package
27033 (name "python-flufl-testing")
27034 (version "0.8")
27035 (source
27036 (origin
27037 (method url-fetch)
27038 (uri (pypi-uri "flufl.testing" version))
27039 (sha256
27040 (base32
27041 "1nkm95mhcfhl4x5jgs6y97ikszaxsfh07nyawsih6cxxm6l62641"))))
27042 (build-system python-build-system)
27043 (arguments '(#:tests? #f)) ;no tests
27044 (home-page "https://gitlab.com/warsaw/flufl.testing")
27045 (synopsis "Collection of test tool plugins")
27046 (description
27047 "This package contains a small collection of test tool plugins for
27048 @code{nose2} and @code{flake8}.")
27049 (license license:asl2.0)))
27050
27051 (define-public python-devtools
27052 (package
27053 (name "python-devtools")
27054 (version "0.6")
27055 (source
27056 (origin
27057 (method git-fetch)
27058 (uri (git-reference
27059 (url "https://github.com/samuelcolvin/python-devtools")
27060 (commit (string-append "v" version))))
27061 (file-name (git-file-name name version))
27062 (sha256
27063 (base32 "15zczdcm90wl54c68f1qjb05nkd5bjsc9xjl3lk4frs7k7wkmrvp"))))
27064 (build-system python-build-system)
27065 (native-inputs
27066 (list python-pytest python-pytest-mock))
27067 (propagated-inputs
27068 (list python-pygments))
27069 (arguments
27070 `(#:phases (modify-phases %standard-phases
27071 (replace 'check
27072 (lambda _
27073 (invoke "pytest")
27074 #t)))))
27075 (home-page "https://github.com/samuelcolvin/python-devtools")
27076 (synopsis "Debug command and development tools")
27077 (description
27078 "This package provides a debug print command and other development tools.
27079 It adds a simple and readable way to print stuff during development.")
27080 (license license:expat)))
27081
27082 (define-public python-dateparser
27083 (package
27084 (name "python-dateparser")
27085 (version "0.7.6")
27086 (source
27087 (origin
27088 (method url-fetch)
27089 (uri (pypi-uri "dateparser" version))
27090 (sha256
27091 (base32
27092 "1ypbyqxlk7n6zibk90js3ybz37xmin3kk0i35g8c51bwqpcfyxg8"))))
27093 (build-system python-build-system)
27094 (propagated-inputs
27095 (list python-dateutil python-pytz python-regex python-ruamel.yaml
27096 python-tzlocal))
27097 (native-inputs
27098 (list python-mock python-parameterized tzdata-for-tests))
27099 (arguments
27100 `(;; TODO: Of 23320 tests, 6 fail and 53 error.
27101 #:tests? #f
27102 #:phases
27103 (modify-phases %standard-phases
27104 (add-before 'check 'set-check-environment
27105 (lambda* (#:key inputs #:allow-other-keys)
27106 (setenv "TZ" "UTC")
27107 (setenv "TZDIR"
27108 (search-input-directory inputs
27109 "share/zoneinfo")))))))
27110 (home-page "https://github.com/scrapinghub/dateparser")
27111 (synopsis
27112 "Date parsing library designed to parse dates from HTML pages")
27113 (description
27114 "@code{python-dateparser} provides modules to easily parse localized
27115 dates in almost any string formats commonly found on web pages.")
27116 (license license:bsd-3)))
27117
27118 (define-public python-dparse
27119 (package
27120 (name "python-dparse")
27121 (version "0.5.1")
27122 (source
27123 (origin
27124 (method url-fetch)
27125 (uri (pypi-uri "dparse" version))
27126 (sha256
27127 (base32
27128 "0rzkg3nymsbwdjc0ms2bsajkda02jipwyp3xk97qj71f21lz3dd1"))))
27129 (build-system python-build-system)
27130 (native-inputs
27131 (list python-pytest))
27132 (propagated-inputs
27133 (list python-packaging python-pyyaml python-toml))
27134 (home-page "https://github.com/pyupio/dparse")
27135 (synopsis "Parser for Python dependency files")
27136 (description "This package provides a parser for Python dependency files.")
27137 (license license:expat)))
27138
27139 (define-public python-dpath
27140 (package
27141 (name "python-dpath")
27142 (version "2.0.1")
27143 (source
27144 (origin
27145 (method url-fetch)
27146 (uri (pypi-uri "dpath" version))
27147 (sha256
27148 (base32
27149 "1ymi9ssk7i0mx3mviplf4csfvzibdd6wyj4qzj6s487n9xgnp85y"))))
27150 (build-system python-build-system)
27151 (native-inputs
27152 (list python-hypothesis python-mock python-nose))
27153 (arguments
27154 '(#:phases
27155 (modify-phases %standard-phases
27156 (replace 'check
27157 (lambda* (#:key inputs outputs #:allow-other-keys)
27158 (add-installed-pythonpath inputs outputs)
27159 ;; This invokation is taken from tox.ini.
27160 (invoke "nosetests" "-d" "-v" "tests/"))))))
27161 (home-page "https://github.com/akesterson/dpath-python")
27162 (synopsis "File-system-like pathing and searching for dictionaries")
27163 (description
27164 "@code{python-dpath} is a library for accessing and searching
27165 dictionaries via /slashed/paths ala xpath.
27166
27167 Basically it lets you glob over a dictionary as if it were a file system. It
27168 allows you to specify globs (ala the bash eglob syntax, through some advanced
27169 fnmatch.fnmatch magic) to access dictionary elements, and provides some
27170 facility for filtering those results.")
27171 (license license:expat)))
27172
27173 (define-public python-safety
27174 (package
27175 (name "python-safety")
27176 (version "1.9.0")
27177 (source
27178 (origin
27179 (method url-fetch)
27180 (uri (pypi-uri "safety" version))
27181 (sha256
27182 (base32
27183 "1j801xsxfzavjbzhhc934awvnk1b7jc0qsw3jp3ys0241mlj1gr3"))))
27184 (build-system python-build-system)
27185 (arguments
27186 `(#:phases
27187 (modify-phases %standard-phases
27188 (add-after 'unpack 'disable-tests
27189 (lambda _
27190 (substitute* "tests/test_safety.py"
27191 ;; requires network
27192 (("def test_check_live") "def _test_check_live"))
27193 #t)))))
27194 (propagated-inputs
27195 (list python-click python-dparse python-packaging python-requests))
27196 (home-page "https://github.com/pyupio/safety")
27197 (synopsis "Check installed dependencies for known vulnerabilities")
27198 (description "Safety checks installed dependencies for known vulnerabilities.
27199 By default it uses the open Python vulnerability database Safety DB.")
27200 (license license:expat)))
27201
27202 (define-public python-pypandoc
27203 (package
27204 (name "python-pypandoc")
27205 (version "1.6.4")
27206 (source
27207 (origin
27208 (method url-fetch)
27209 (uri (pypi-uri "pypandoc" version))
27210 (sha256
27211 (base32
27212 "149basv4pvzg9zm74cjz68x8s2n5fykyj7prgysb0qfmja73r83f"))))
27213 (build-system python-build-system)
27214 (inputs
27215 (list pandoc))
27216 (propagated-inputs
27217 `(("wheel" ,python-wheel)))
27218 (native-inputs
27219 `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
27220 texlive-fonts-ec
27221 texlive-generic-iftex
27222 texlive-hyperref
27223 texlive-oberdiek
27224 texlive-lm
27225 texlive-xcolor)))))
27226 (arguments
27227 `(#:phases
27228 (modify-phases %standard-phases
27229 (add-before 'check 'disable-tests
27230 (lambda _
27231 ;; Disable test requiring network access
27232 (substitute* "tests.py"
27233 (("test_basic_conversion_from_http_url")
27234 "skip_test_basic_conversion_from_http_url"))
27235 #t)))))
27236 (home-page "https://github.com/bebraw/pypandoc")
27237 (synopsis "Python wrapper for pandoc")
27238 (description "pypandoc is a thin Python wrapper around pandoc
27239 and pandoc-citeproc.")
27240 (license license:expat)))
27241
27242 (define-public python-rnc2rng
27243 (package
27244 (name "python-rnc2rng")
27245 (version "2.6.4")
27246 (source
27247 (origin
27248 (method url-fetch)
27249 (uri (pypi-uri "rnc2rng" version))
27250 (sha256
27251 (base32
27252 "1kmp3iwxxyzjsd47j2sprd47ihhkwhb3yydih3af5bbfq0ibh1w8"))))
27253 (build-system python-build-system)
27254 (propagated-inputs
27255 (list python-rply))
27256 (arguments
27257 `(#:phases (modify-phases %standard-phases
27258 (replace 'check
27259 (lambda _
27260 (invoke "python" "test.py"))))))
27261 (home-page "https://github.com/djc/rnc2rng")
27262 (synopsis "Convert RELAX NG Compact to regular syntax")
27263 (description
27264 "This package provides the @command{rnc2rng} command-line tool as well as
27265 a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
27266 equivalent schemata in the XML-based default RELAX NG syntax.")
27267 (license license:expat)))
27268
27269 (define-public python-telethon
27270 (package
27271 (name "python-telethon")
27272 (version "1.17.5")
27273 (source
27274 (origin
27275 (method git-fetch)
27276 (uri (git-reference
27277 (url "https://github.com/LonamiWebs/Telethon")
27278 (commit (string-append "v" version))))
27279 (file-name (git-file-name name version))
27280 (sha256
27281 (base32 "0l9fhdrq576vllgi9aam45xzw5xi6jhgdv5zz8i4ygssdp7cm8jl"))))
27282 (build-system python-build-system)
27283 (arguments
27284 '(#:phases
27285 (modify-phases %standard-phases
27286 (replace 'check
27287 (lambda* (#:key tests? #:allow-other-keys)
27288 (when tests?
27289 (invoke "py.test" "-v"))
27290 #t)))))
27291 (propagated-inputs
27292 (list python-rsa python-pyaes))
27293 (native-inputs
27294 (list python-pytest python-pytest-asyncio python-pytest-trio))
27295 (home-page "https://docs.telethon.dev")
27296 (synopsis "Full-featured Telegram client library for Python 3")
27297 (description "This library is designed to make it easy to write Python
27298 programs that can interact with Telegram.")
27299 (license license:expat)))
27300
27301 (define-public python-citeproc-py
27302 (package
27303 (name "python-citeproc-py")
27304 (version "0.5.1")
27305 (source
27306 (origin
27307 (method url-fetch)
27308 (uri (pypi-uri "citeproc-py" version))
27309 (sha256
27310 (base32
27311 "00aaff50jy4j0nakdzq9258z1gzrac9baarli2ymgspj88jg5968"))))
27312 (build-system python-build-system)
27313 (propagated-inputs
27314 (list python-lxml python-rnc2rng))
27315 (home-page
27316 "https://github.com/brechtm/citeproc-py")
27317 (synopsis "Citations and bibliography formatter")
27318 (description
27319 "Citeproc-py is a CSL processor for Python. It aims to implement the
27320 CSL 1.0.1 specification. citeproc-py can output styled citations and
27321 bibliographies in a number of different output formats. Currently supported
27322 are plain text, reStructuredText and HTML.")
27323 (license license:bsd-2)))
27324
27325 (define-public python-inform
27326 (package
27327 (name "python-inform")
27328 (version "1.23.0")
27329 (source
27330 (origin
27331 (method url-fetch)
27332 (uri (pypi-uri "inform" version))
27333 (sha256
27334 (base32
27335 "0dvc5klbnbryrvspp45nmlg02g40j7xspcz7lqsm0c0dj0z29zdz"))))
27336 (build-system python-build-system)
27337 (arguments
27338 `(#:tests? #f)) ; PyPI tarball lacks tests
27339 (native-inputs
27340 (list python-hypothesis python-pytest-cov python-pytest-runner))
27341 (propagated-inputs
27342 (list python-arrow python-six))
27343 (home-page "https://inform.readthedocs.io")
27344 (synopsis "Print & logging utilities for communicating with user")
27345 (description
27346 "Inform is designed to display messages from programs that are typically run from
27347 a console. It provides a collection of ‘print’ functions that allow you to simply and
27348 cleanly print different types of messages.")
27349 (license license:gpl3+)))
27350
27351 (define-public python-nestedtext
27352 (package
27353 (name "python-nestedtext")
27354 (version "1.0.0")
27355 (source
27356 (origin
27357 (method url-fetch)
27358 (uri (pypi-uri "nestedtext" version))
27359 (sha256
27360 (base32
27361 "0xjx863n7yd1xmkwhy48lhmqrmlzgbx3civhk386hvrzyq4sx148"))))
27362 (build-system python-build-system)
27363 (arguments
27364 `(#:tests? #f)) ; PyPI tarball lacks tests
27365 (propagated-inputs
27366 (list python-inform))
27367 (home-page "https://nestedtext.org")
27368 (synopsis "Human readable and writable data interchange format")
27369 (description
27370 "NestedText is a file format for holding data that is to be entered, edited, or
27371 viewed by people. It allows data to be organized into a nested collection of
27372 dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
27373 without the complexity and risk of YAML and without the syntactic clutter of JSON.
27374 NestedText is both simple and natural. Only a small number of concepts and rules must
27375 be kept in mind when creating it. It is easily created, modified, or viewed with
27376 a text editor and easily understood and used by both programmers and non-programmers.")
27377 (license license:expat))) ; MIT license
27378
27379 (define-public python-nest-asyncio
27380 (package
27381 (name "python-nest-asyncio")
27382 (version "1.5.5")
27383 (source
27384 (origin
27385 (method url-fetch)
27386 (uri (pypi-uri "nest_asyncio" version))
27387 (sha256
27388 (base32
27389 "0rbdw7lry66yj13hh4w63yzflnapdal1ffl237k8nsa2v4f2jhp4"))))
27390 (build-system python-build-system)
27391 (home-page "https://github.com/erdewit/nest_asyncio")
27392 (synopsis "Patch asyncio to allow nested event loops")
27393 (description
27394 "By design @code{asyncio} does not allow its event loop to be nested.
27395 This presents a practical problem: when in an environment where the event loop
27396 is already running it's impossible to run tasks and wait for the result. This
27397 module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
27398 @code{loop.run_until_complete}.")
27399 (license license:bsd-3)))
27400
27401 (define-public python-simpervisor
27402 (package
27403 (name "python-simpervisor")
27404 (version "0.4")
27405 (source
27406 (origin
27407 ;; Tests not included in release.
27408 (method git-fetch)
27409 (uri (git-reference
27410 (url "https://github.com/yuvipanda/simpervisor")
27411 (commit (string-append "v" version))))
27412 (file-name (git-file-name name version))
27413 (sha256
27414 (base32 "1brsisx7saf4ic0dih1n5y7rbdbwn1ywv9pl32bch3061r46prvv"))))
27415 (build-system python-build-system)
27416 (arguments
27417 `(#:tests? #f ; Test suite can't find aiohttp.
27418 #:phases
27419 (modify-phases %standard-phases
27420 (replace 'check
27421 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
27422 (when tests?
27423 (add-installed-pythonpath inputs outputs)
27424 (invoke "pytest" "--maxfail" "3" "--verbose"))
27425 #t)))))
27426 (native-inputs
27427 (list python-aiohttp python-pytest python-pytest-asyncio))
27428 (home-page "https://github.com/yuvipanda/simpervisor")
27429 (synopsis "Simple async process supervisor")
27430 (description
27431 "This package provides a simple async process supervisor in Python.")
27432 (license license:bsd-3)))
27433
27434 (define-public python-parallel
27435 (package
27436 (name "python-parallel")
27437 (version "1.6.4.4")
27438 (source
27439 (origin
27440 (method url-fetch)
27441 (uri (string-append
27442 "https://www.parallelpython.com/downloads/pp/pp-"
27443 version ".zip"))
27444 (sha256
27445 (base32
27446 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
27447 (native-inputs
27448 (list unzip))
27449 (build-system python-build-system)
27450 (arguments '(#:tests? #f)) ; No test suite.
27451 (home-page "https://www.parallelpython.com")
27452 (synopsis "Parallel and distributed programming for Python")
27453 (description "Parallel Python module (PP) provides an easy and efficient
27454 way to create parallel-enabled applications for SMP computers and clusters.
27455 PP module features cross-platform portability and dynamic load balancing.
27456 Thus applications written with PP will parallelize efficiently even on
27457 heterogeneous and multi-platform clusters (including clusters running other
27458 applications with variable CPU loads).")
27459 (license license:bsd-3)))
27460
27461 (define-public python-djvulibre
27462 (package
27463 (name "python-djvulibre")
27464 (version "0.8.6")
27465 (source
27466 (origin
27467 (method url-fetch)
27468 (uri (pypi-uri "python-djvulibre" version))
27469 (sha256
27470 (base32 "089smpq29ll0z37lnq26r2f72d31i33xm9fw9pc6hlcsm6nbjbiv"))))
27471 (build-system python-build-system)
27472 (native-inputs
27473 (list ghostscript pkg-config python-nose))
27474 (inputs
27475 (list djvulibre python-cython))
27476 (arguments
27477 `(#:phases
27478 (modify-phases %standard-phases
27479 (add-after 'unpack 'fix-tests
27480 (lambda _
27481 ;; Unit tests try to load the 'dllpath.py' and fail, because it
27482 ;; doesn't make sense on GNU/Linux.
27483 (delete-file "djvu/dllpath.py")
27484 #t)))))
27485 (synopsis "Python bindings for DjVuLibre")
27486 (description "This is a set of Python bindings for the DjVuLibre library.")
27487 (home-page "https://jwilk.net/software/python-djvulibre")
27488 (license license:gpl2)))
27489
27490 (define-public python-version
27491 ;; No version tags available in the git repo; just using bare commit instead.
27492 (let ((commit "5232eea250ab72cc5cb72b0b75efb35d2192b906")
27493 (revision "1"))
27494 (package
27495 (name "python-version")
27496 (version (git-version "0.0.2" revision commit))
27497 (source (origin
27498 (method git-fetch)
27499 (uri (git-reference
27500 (url "https://gitlab.com/halfak/python_version")
27501 (commit commit)))
27502 (file-name (git-file-name name version))
27503 (sha256
27504 (base32
27505 "0w210559ypdynlj9yn40m9awzkaknwrf682i99hswl7h66sdgh0h"))))
27506 (build-system python-build-system)
27507 (home-page "https://gitlab.com/halfak/python_version")
27508 (synopsis "Python version checking utility")
27509 (description
27510 "This package provides a simple utility for checking the python version.")
27511 (license license:expat))))
27512
27513 (define-public python-versioneer
27514 (package
27515 (name "python-versioneer")
27516 (version "0.21")
27517 (source
27518 (origin
27519 (method url-fetch)
27520 (uri (pypi-uri "versioneer" version))
27521 (sha256
27522 (base32
27523 "084fglxafbzvf1vbkzfajvs9qwnvjwwn8pxql9nrlpyipv5xpwk4"))
27524 (patches (search-patches "python-versioneer-guix-support.patch"))))
27525 (build-system python-build-system)
27526 (home-page
27527 "https://github.com/python-versioneer/python-versioneer")
27528 (synopsis
27529 "Version-string management for VCS-controlled trees")
27530 (description
27531 "@code{versioneer} is a tool for managing a recorded version number in
27532 distutils-based python projects. The goal is to remove the tedious and
27533 error-prone \"update the embedded version string\" step from your release
27534 process.")
27535 (license license:public-domain)))
27536
27537 (define-public python-gamera
27538 (package
27539 (name "python-gamera")
27540 (version "4.0.0")
27541 (source
27542 (origin
27543 (method url-fetch)
27544 (uri (string-append "https://gamera.informatik.hsnr.de/download/"
27545 "gamera-" version ".tar.gz"))
27546 (sha256
27547 (base32 "0fhlwbvpm3k54n4aa1y6qd348jqrb54ak9p0ic16drx7f07dsq05"))
27548 (modules '((guix build utils)))
27549 (snippet
27550 '(begin
27551 ;; Remove bundled libraries.
27552 (for-each delete-file-recursively
27553 '("src/libpng-1.2.5"
27554 "src/libtiff"
27555 "src/zlib-1.2.8"))))))
27556 (build-system python-build-system)
27557 (arguments
27558 `(#:phases
27559 (modify-phases %standard-phases
27560 (add-after 'unpack 'disable-wx-support
27561 (lambda _
27562 (substitute* "setup.py"
27563 (("no_wx = False")
27564 "no_wx = True"))))
27565 (replace 'check
27566 (lambda* (#:key tests? #:allow-other-keys)
27567 (when tests?
27568 ;; Some tests require a writable HOME directory and test
27569 ;; directory.
27570 (setenv "HOME" "/tmp")
27571 (mkdir "tests/tmp") ;the code assumes this directory exists
27572 ;; (for-each make-file-writable (find-files "tests"))
27573 (with-directory-excursion "tests"
27574 (invoke "pytest" "-vv"
27575 ;; This test causes gamera/gendoc.py to be loaded,
27576 ;; which fails due to the missing docutils, pygments
27577 ;; and silvercity (very old, unpackaged) libraries.
27578 "--ignore" "test_plugins.py"
27579 ;; This test triggers a segfault (see:
27580 ;; https://github.com/hsnr-gamera/gamera-4/issues/47).
27581 "--ignore" "test_rle.py"))))))))
27582 (native-inputs (list python-pytest))
27583 (inputs (list libpng libtiff zlib))
27584 (synopsis "Framework for building document analysis applications")
27585 (description
27586 "Gamera is a toolkit for building document image recognition systems.")
27587 (home-page "https://gamera.informatik.hsnr.de/")
27588 (license license:gpl2+)))
27589
27590 (define-public python-contextvars
27591 (package
27592 (name "python-contextvars")
27593 (version "2.4")
27594 (source
27595 (origin
27596 (method url-fetch)
27597 (uri (pypi-uri "contextvars" version))
27598 (sha256
27599 (base32
27600 "17n3w8c20kgkgc6khaafdhhlcdj4bzman4paxqsl7harma59137k"))))
27601 (build-system python-build-system)
27602 (propagated-inputs
27603 (list python-immutables))
27604 (home-page
27605 "https://github.com/MagicStack/contextvars")
27606 (synopsis "PEP 567 Backport")
27607 (description "This package implements a backport of Python 3.7
27608 @code{contextvars} module (see PEP 567) for Python 3.6.")
27609 (license license:asl2.0)))
27610
27611 (define-public python-aiofiles
27612 (package
27613 (name "python-aiofiles")
27614 (version "0.6.0")
27615 (source
27616 (origin
27617 (method url-fetch)
27618 (uri (pypi-uri "aiofiles" version))
27619 (sha256
27620 (base32
27621 "14m01kjxm2j7zyljjj6xlhlgygcsriymbx730gc5jp9xglaina70"))))
27622 (build-system python-build-system)
27623 (home-page "https://github.com/Tinche/aiofiles")
27624 (synopsis "File support for @code{asyncio}")
27625 (description "@code{python-aiofiles} is a library for handling local
27626 disk files in asyncio applications.")
27627 (license license:asl2.0)))
27628
27629 (define-public python-pyre-extensions
27630 (package
27631 (name "python-pyre-extensions")
27632 (version "0.0.18")
27633 (source
27634 (origin
27635 (method url-fetch)
27636 (uri (pypi-uri "pyre-extensions" version))
27637 (sha256
27638 (base32
27639 "0c5cbbqrfyjwakdh3kbwxis6mbrbwky1z1fqslgszgpcj4g43q30"))))
27640 (build-system python-build-system)
27641 (propagated-inputs
27642 (list python-typing-extensions python-typing-inspect))
27643 (home-page "https://pyre-check.org")
27644 (synopsis
27645 "Type system extensions for use with @code{python-pyre}")
27646 (description
27647 "@code{python-pyre-extensions} defines extensions to the standard
27648 @code{typing} module that are supported by the Pyre typechecker.")
27649 (license license:expat)))
27650
27651 (define-public python-dataclasses
27652 (package
27653 (name "python-dataclasses")
27654 (version "0.8")
27655 (source
27656 (origin
27657 (method url-fetch)
27658 (uri (pypi-uri "dataclasses" version))
27659 (sha256
27660 (base32
27661 "15sc12nrc7gxwb30vfa6frzdnpmbap9ibi1fr1yrbkra6izhcyc4"))))
27662 (build-system python-build-system)
27663 (home-page
27664 "https://github.com/ericvsmith/dataclasses")
27665 (synopsis
27666 "Backport of the @code{dataclasses} module for Python 3.6")
27667 (description
27668 "This is an implementation of PEP 557, Data Classes. It is a
27669 backport of the @code{dataclasses} module for Python 3.6.")
27670 (license license:asl2.0)))
27671
27672 (define-public python-pywatchman
27673 (package
27674 (name "python-pywatchman")
27675 (version "1.4.1")
27676 (source
27677 (origin
27678 (method url-fetch)
27679 (uri (pypi-uri "pywatchman" version))
27680 (sha256
27681 (base32
27682 "1yf2gm20wc3djpb5larxii3l55xxby0il2ns3q0v1byyfnr7w16h"))))
27683 (build-system python-build-system)
27684 (arguments
27685 `(#:tests? #f)) ;there are none
27686 (home-page
27687 "https://facebook.github.io/watchman/")
27688 (synopsis "Watchman client for python")
27689 (description "@code{python-pywatchman} is a library to connect and
27690 query Watchman to discover file changes.")
27691 (license license:bsd-3)))
27692
27693 (define-public python-roundrobin
27694 (package
27695 (name "python-roundrobin")
27696 (version "0.0.2")
27697 (source (origin
27698 (method url-fetch)
27699 (uri (pypi-uri "roundrobin" version))
27700 (sha256
27701 (base32 "1akwhvfyi0120zg2xkhfc6jwfkirz5x90yyvw06bndhaaxwcnc5c"))))
27702 (build-system python-build-system)
27703 (arguments '(#:tests? #f)) ;no tests on PyPI and no tags in repo
27704 (home-page "https://github.com/linnik/roundrobin")
27705 (synopsis "Collection of roundrobin utilities")
27706 (description
27707 "This package provides a collection of utilities for round-robin
27708 distribution in Python.")
27709 (license license:expat)))
27710
27711 (define-public python-helpdev
27712 (package
27713 (name "python-helpdev")
27714 (version "0.7.1")
27715 (source
27716 (origin
27717 (method url-fetch)
27718 (uri (pypi-uri "helpdev" version))
27719 (sha256
27720 (base32
27721 "0gfvj28i82va7c264jl2p4cdsl3lpf9fpb9cyjnis55crfdafqmv"))))
27722 (build-system python-build-system)
27723 (arguments
27724 `(#:phases
27725 (modify-phases %standard-phases
27726 (replace 'check
27727 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
27728 (when tests?
27729 (add-installed-pythonpath inputs outputs)
27730 (invoke "pytest" "tests"))
27731 #t)))))
27732 (propagated-inputs
27733 (list python-importlib-metadata))
27734 (native-inputs
27735 (list python-pytest))
27736 (home-page "https://gitlab.com/dpizetta/helpdev")
27737 (synopsis
27738 "Extract information about the Python environment easily")
27739 (description
27740 "Helpdev is a library to easily extract information about the Python
27741 environment.")
27742 (license license:expat)))
27743
27744 (define-public python-logutils
27745 (package
27746 (name "python-logutils")
27747 (version "0.3.5")
27748 (source
27749 (origin
27750 (method url-fetch)
27751 (uri (pypi-uri "logutils" version))
27752 (sha256
27753 (base32
27754 "10lsi5wv5ysnvf9ya4ncbix6mmipnv5067sf2cglc2f2sljql1dw"))))
27755 (build-system python-build-system)
27756 (home-page "https://bitbucket.org/vinay.sajip/logutils/")
27757 (synopsis "Logging utilities")
27758 (description "This package provides a set of handlers for the Python
27759 standard library logging package. Some of these handlers are out-of-scope
27760 for the standard library, and so they are packaged here. Others are updated
27761 versions which have appeared in recent Python releases, but are usable with
27762 older versions of Python and so are packaged here.")
27763 (license license:bsd-3)))
27764
27765 (define-public python-helper
27766 (package
27767 (name "python-helper")
27768 (version "2.5.0")
27769 (source (origin
27770 (method url-fetch)
27771 (uri (pypi-uri "helper" version))
27772 (sha256
27773 (base32
27774 "1d2j64wgbggzv5rhvil10zndp2w78wa5np5w0psj122ws9qr9wsa"))))
27775 (build-system python-build-system)
27776 (native-inputs
27777 (list python-mock))
27778 (propagated-inputs
27779 (list python-logutils python-pyyaml))
27780 (home-page "https://github.com/gmr/helper")
27781 (synopsis "Library for writing configurable applications and daemons")
27782 (description
27783 "This package provides procedures for quickly writing configurable
27784 applications and daemons.")
27785 (license license:bsd-3)))
27786
27787 (define-public python-qtsass
27788 (package
27789 (name "python-qtsass")
27790 (version "0.3.0")
27791 (source
27792 (origin
27793 ;; There are no tests in the PyPI tarball.
27794 (method git-fetch)
27795 (uri (git-reference
27796 (url "https://github.com/spyder-ide/qtsass/")
27797 (commit (string-append "v" version))))
27798 (file-name (git-file-name name version))
27799 (sha256
27800 (base32 "09s04aa14d8jqbh71clrb5y7vcmkxlp94mwmvzrkxahry3bk03cb"))))
27801 (build-system python-build-system)
27802 (arguments
27803 `(#:test-target "pytest"
27804 #:phases
27805 (modify-phases %standard-phases
27806 ;; Tests need to read and write files.
27807 (add-before 'check 'make-git-checkout-writable
27808 (lambda _
27809 (for-each make-file-writable (find-files "."))
27810 #t)))))
27811 (native-inputs
27812 (list python-pytest python-pytest-cov python-pytest-runner))
27813 (propagated-inputs
27814 (list python-libsass))
27815 (home-page "https://github.com/spyder-ide/qtsass")
27816 (synopsis "Compile SCSS files to valid Qt stylesheets")
27817 (description
27818 "Besides being used in web development, CSS is also the way to stylize
27819 Qt-based desktop applications. However, Qt's CSS has a few variations that
27820 prevent the direct use of SASS compiler.
27821
27822 The purpose of this tool is to fill the gap between SASS and Qt-CSS by
27823 handling those variations.")
27824 (license license:expat)))
27825
27826 (define-public python-qdarkstyle
27827 (package
27828 (name "python-qdarkstyle")
27829 (version "2.8.1")
27830 (source
27831 (origin
27832 (method url-fetch)
27833 (uri (pypi-uri "QDarkStyle" version))
27834 (sha256
27835 (base32
27836 "0883vzg35fzpyl1aiijzpfcdfvpq5vi325w0m7xkx7nxplh02fym"))))
27837 (build-system python-build-system)
27838 (arguments
27839 `(;; Fails unable to detect valid Qt bindings even when
27840 ;; added as native-inputs.
27841 #:tests? #f))
27842 (propagated-inputs
27843 (list python-helpdev python-qtpy))
27844 (home-page
27845 "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
27846 (synopsis
27847 "Complete dark stylesheet for Python and Qt applications")
27848 (description "QDarkStyle is the most complete dark stylesheet for Python and
27849 Qt applications.")
27850 (license license:expat)))
27851
27852 (define-public python-bitstring
27853 (package
27854 (name "python-bitstring")
27855 (version "3.1.7")
27856 (source
27857 (origin
27858 (method url-fetch)
27859 (uri (pypi-uri "bitstring" version))
27860 (sha256
27861 (base32
27862 "0jl6192dwrlm5ybkbh7ywmyaymrc3cmz9y07nm7qdli9n9rfpwzx"))))
27863 (build-system python-build-system)
27864 (arguments
27865 `(#:phases
27866 (modify-phases %standard-phases
27867 (replace 'check
27868 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
27869 (when tests?
27870 (add-installed-pythonpath inputs outputs)
27871 (with-directory-excursion "test"
27872 (invoke "pytest")))
27873 #t)))))
27874 (native-inputs
27875 (list python-pytest))
27876 (home-page "https://github.com/scott-griffiths/bitstring")
27877 (synopsis
27878 "Simple construction, analysis and modification of binary data")
27879 (description
27880 "Bitstring is a library for simple construction, analysis and modification
27881 of binary data.")
27882 (license license:expat)))
27883
27884 (define-public python-confuse
27885 (package
27886 (name "python-confuse")
27887 (version "1.5.0")
27888 (source
27889 (origin
27890 (method url-fetch)
27891 (uri (pypi-uri "confuse" version))
27892 (sha256
27893 (base32
27894 "0bh2kyj8wd7h9gg4nsvrbykl5ly0f70f0wi3fbm204b1f0fcmywj"))))
27895 (build-system python-build-system)
27896 (propagated-inputs
27897 (list python-pyyaml))
27898 (home-page "https://github.com/beetbox/confuse")
27899 (synopsis "Painless YAML configuration")
27900 (description "Confuse is a configuration library for Python that uses
27901 YAML. It takes care of defaults, overrides, type checking, command-line
27902 integration, human-readable errors, and standard OS-specific locations.")
27903 (license license:expat)))
27904
27905 (define-public python-reflink
27906 (package
27907 (name "python-reflink")
27908 (version "0.2.1")
27909 (source
27910 (origin
27911 (method url-fetch)
27912 (uri (pypi-uri "reflink" version))
27913 (sha256
27914 (base32
27915 "0fkf3sd958g9hvr3jwlhnhqqzrwxljrc3grsf3yknh94vf13a9f9"))))
27916 (build-system python-build-system)
27917 (arguments
27918 `(#:tests? #false)) ; almost all tests want to run mkfs.btrfs
27919 (propagated-inputs
27920 (list python-cffi))
27921 (native-inputs
27922 (list python-pytest python-pytest-runner))
27923 (home-page "https://gitlab.com/rubdos/pyreflink")
27924 (synopsis "Python wrapper around reflink system call")
27925 (description
27926 "Python reflink wraps around platform specific @code{reflink}
27927 implementations.")
27928 (license license:expat)))
27929
27930 (define-public python-retry
27931 (package
27932 (name "python-retry")
27933 (version "0.9.2")
27934 (source (origin
27935 (method url-fetch)
27936 (uri (pypi-uri "retry" version))
27937 (sha256
27938 (base32 "197v6qrh6858bhzzrjgk2zdqrybppymb1lsvdxnm1i39kfwsigzq"))))
27939 (build-system python-build-system)
27940 (arguments
27941 (list #:phases
27942 #~(modify-phases %standard-phases
27943 (replace 'check
27944 (lambda* (#:key tests? #:allow-other-keys)
27945 (when tests? (invoke "pytest" "-vv")))))))
27946 (native-inputs (list python-pbr python-pytest))
27947 (propagated-inputs (list python-decorator python-py))
27948 (home-page "https://github.com/invl/retry")
27949 (synopsis "Retry decorator")
27950 (description
27951 "@code{retry} is an easy to use retry decorator for Python. It can be
27952 used to retry a function a given number of times.")
27953 (license license:asl2.0)))
27954
27955 (define-public python-pivy
27956 (package
27957 (name "python-pivy")
27958 (version "0.6.5")
27959 (source
27960 (origin
27961 (method git-fetch)
27962 (uri (git-reference
27963 (url "https://github.com/coin3d/pivy")
27964 (commit version)))
27965 (file-name (git-file-name name version))
27966 (sha256
27967 (base32 "0vids7sxk8w5vr73xdnf8xdci71a7syl6cd35aiisppbqyyfmykx"))))
27968 (build-system python-build-system)
27969 (arguments
27970 `(;; The test suite fails due to an import cycle between 'pivy' and '_coin'
27971 #:tests? #f
27972 #:phases
27973 (modify-phases %standard-phases
27974 (add-after 'unpack 'patch-cmake-include-dirs
27975 (lambda _
27976 ;; Patch buildsystem to respect Coin3D include directory
27977 (substitute* "CMakeLists.txt"
27978 (("\\$\\{SoQt_INCLUDE_DIRS}")
27979 "${Coin_INCLUDE_DIR};${SoQt_INCLUDE_DIRS}"))
27980 #t)))))
27981 (native-inputs
27982 (list cmake swig))
27983 (inputs
27984 (list python-wrapper
27985 qtbase-5
27986 libxi
27987 libice
27988 soqt
27989 glew
27990 coin3D-4))
27991 (home-page "https://github.com/coin3d/pivy")
27992 (synopsis "Python bindings to Coin3D")
27993 (description
27994 "Pivy provides python bindings for Coin, a 3D graphics library with an
27995 Application Programming Interface based on the Open Inventor 2.1 API.")
27996 (license license:isc)))
27997
27998 (define-public python-crayons
27999 (package
28000 (name "python-crayons")
28001 (version "0.4.0")
28002 (source
28003 (origin
28004 (method url-fetch)
28005 (uri (pypi-uri "crayons" version))
28006 (sha256
28007 (base32
28008 "0gw106k4b6y8mw7pp52awxyplj2bwvwk315k4sywzwh0g1abfcxx"))))
28009 (build-system python-build-system)
28010 (propagated-inputs
28011 (list python-colorama))
28012 (home-page "https://github.com/MasterOdin/crayons")
28013 (synopsis "TextUI colors for Python")
28014 (description "This package gives you colored strings for the terminal.
28015 Crayons automatically wraps a given string in the foreground color and
28016 restores the original state after the string is printed.")
28017 (license license:expat)))
28018
28019 (define-public python-sane
28020 (package
28021 (name "python-sane")
28022 (version "2.9.1")
28023 (source
28024 (origin
28025 (method url-fetch)
28026 (uri (pypi-uri name version))
28027 (sha256
28028 (base32
28029 "1pi597z94n2mkd821ln52fq0g727n2jxfskf280ip3kf7jw8w294"))))
28030 (build-system python-build-system)
28031 (native-inputs
28032 (list python-pytest))
28033 (inputs
28034 (list sane-backends))
28035 (home-page "https://github.com/python-pillow/Sane")
28036 (synopsis "Python interface to the SANE scanner")
28037 (description "This package provides Python interface to the SANE scanner
28038 and frame grabber interface.")
28039 (license (license:non-copyleft
28040 ;; Yet another variant of the X/MIT license.
28041 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
28042
28043 (define-public python-scikit-build
28044 (package
28045 (name "python-scikit-build")
28046 (version "0.14.0")
28047 (source
28048 (origin
28049 (method url-fetch)
28050 (uri (pypi-uri "scikit-build" version))
28051 (sha256
28052 (base32 "1wx1m9vnxnnz59lyaisgyxldp313kciyd4af8lf112vb8vbjy9yk"))))
28053 (build-system pyproject-build-system)
28054 (arguments
28055 (list
28056 #:phases
28057 #~(modify-phases %standard-phases
28058 (add-after 'unpack 'patch-cmake-executable
28059 (lambda* (#:key inputs #:allow-other-keys)
28060 (substitute* "skbuild/constants.py"
28061 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
28062 (format #f "~a ~s~%" head
28063 (search-input-file inputs "bin/cmake"))))))
28064 (replace 'check
28065 (lambda* (#:key tests? #:allow-other-keys)
28066 (when tests?
28067 ;; These tests attempt to pull dependencies from the Internet.
28068 (delete-file "tests/test_distribution.py")
28069 (delete-file "tests/test_pep518.py")
28070 (invoke "pytest" "-vv"
28071 "-n" (number->string (parallel-job-count))
28072 "-k" (string-append
28073 ;; These tests attempt to write to read-only
28074 ;; Python install directory.
28075 "not test_install_command "
28076 "and not test_test_command "
28077 "and not test_hello_develop "
28078 ;; These sdist-related tests fail for unknown
28079 ;; reasons (see:
28080 ;; https://github.com/scikit-build/scikit-build/issues/689).
28081 "and not test_hello_sdist_with_base "
28082 "and not test_manifest_in_sdist "
28083 "and not test_hello_sdist "
28084 "and not test_sdist_with_symlinks "
28085 ;; These are not parallel safe and fail
28086 ;; nondeterministically (see:
28087 ;; https://github.com/scikit-build/scikit-build/issues/711).
28088 "and not test_generator_cleanup "
28089 "and not test_generator_selection "))))))))
28090 (native-inputs
28091 (list cmake-minimal
28092 gfortran
28093 git-minimal
28094 ninja
28095 python-coverage
28096 python-cython
28097 python-mock
28098 python-packaging
28099 python-path
28100 python-pytest
28101 python-pytest-cov
28102 python-pytest-mock
28103 python-pytest-virtualenv
28104 python-pytest-xdist
28105 python-requests
28106 python-setuptools-scm))
28107 (propagated-inputs
28108 (list python-distro python-packaging python-wheel))
28109 (home-page "https://github.com/scikit-build/scikit-build")
28110 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
28111 (description "Scikit-build is an improved build system generator for
28112 CPython C/C++/Fortran/Cython extensions. It has support for additional
28113 compilers, build systems, cross compilation, and locating dependencies and
28114 determining their build requirements. The scikit-build package is
28115 fundamentally just glue between the @code{setuptools} Python module and
28116 CMake.")
28117 (license license:expat)))
28118
28119 (define-public python-screenkey
28120 (package
28121 (name "python-screenkey")
28122 (version "1.4")
28123 (source
28124 (origin
28125 (method git-fetch)
28126 (uri (git-reference
28127 (url "https://gitlab.com/screenkey/screenkey")
28128 (commit (string-append "v" version))))
28129 (file-name (git-file-name name version))
28130 (sha256
28131 (base32
28132 "1rfngmkh01g5192pi04r1fm7vsz6hg9k3qd313sn9rl9xkjgp11l"))))
28133 (build-system python-build-system)
28134 (arguments
28135 `(#:phases
28136 (modify-phases %standard-phases
28137 (add-after 'unpack 'fix-dlopen-paths
28138 (lambda* (#:key inputs outputs #:allow-other-keys)
28139 (let* ((x11 (assoc-ref inputs "libx11"))
28140 (xtst (assoc-ref inputs "libxtst")))
28141 (substitute* "Screenkey/xlib.py"
28142 (("libX11.so.6")
28143 (string-append x11 "/lib/libX11.so.6")))
28144 (substitute* "Screenkey/xlib.py"
28145 (("libXtst.so.6")
28146 (string-append xtst "/lib/libXtst.so.6")))
28147 #t)))
28148 (add-after 'install 'wrap-screenkey
28149 (lambda* (#:key outputs #:allow-other-keys)
28150 (wrap-program
28151 (string-append (assoc-ref outputs "out") "/bin/screenkey")
28152 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
28153 `("GI_TYPELIB_PATH"
28154 ":" prefix (,(getenv "GI_TYPELIB_PATH")))))))))
28155 (inputs
28156 (list python-distutils-extra
28157 python-tokenize-rt
28158 libx11
28159 libxtst
28160 gtk+
28161 python-pygobject
28162 python-pycairo
28163 python-setuptools-git
28164 python-babel))
28165 (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
28166 (synopsis
28167 "Screencast tool to display pressed keys")
28168 (description
28169 "Screenkey is a screencast tool to display your keys inspired by
28170 Screenflick.")
28171 (license license:gpl3+)))
28172
28173 (define-public python-jinja2-cli
28174 (package
28175 (name "python-jinja2-cli")
28176 (version "0.7.0")
28177 (source
28178 (origin
28179 (method url-fetch)
28180 (uri (pypi-uri "jinja2-cli" version))
28181 (sha256
28182 (base32
28183 "0vikx7v6fbvww6kfrv0k5a24jyv3ak7nindg60906pdd1m9qvkcw"))))
28184 (build-system python-build-system)
28185 (propagated-inputs
28186 (list python-jinja2))
28187 (native-inputs
28188 (list python-flake8 python-jinja2 python-pytest))
28189 (home-page "https://github.com/mattrobenolt/jinja2-cli")
28190 (synopsis "Command-line interface to Jinja2")
28191 (description
28192 "This package provides a command-line interface (CLI) to the Jinja2
28193 template engine.")
28194 (license license:bsd-3)))
28195
28196 (define-public python-readability
28197 (package
28198 (name "python-readability")
28199 (version "0.3.1")
28200 (source
28201 (origin
28202 (method url-fetch)
28203 (uri (pypi-uri "readability" version))
28204 (sha256
28205 (base32
28206 "1b8gq3g2zwvx0aivvdg56cc0bn7xw6f2v6psmxdx9aiipkw0s0zr"))))
28207 (build-system python-build-system)
28208 (home-page
28209 "https://github.com/andreasvc/readability/")
28210 (synopsis
28211 "Measure the readability of a given text using surface
28212 characteristics")
28213 (description
28214 "This package provides a Python library that is an implementation of
28215 traditional readability measures based on simple surface
28216 characteristics. These measures are basically linear regressions based on the
28217 number of words, syllables, and sentences.")
28218 (license license:asl2.0)))
28219
28220 (define-public python-readability-lxml
28221 (package
28222 (name "python-readability-lxml")
28223 (version "0.8.1")
28224 (source (origin
28225 (method git-fetch)
28226 (uri (git-reference
28227 (url "https://github.com/buriy/python-readability")
28228 (commit (string-append "v" version))))
28229 (sha256
28230 (base32
28231 "13nfy2v0pbbf62jn9qwgi489gg97hbb22q6w3f78mnvjxd2m19rh"))
28232 (snippet
28233 #~(begin (delete-file "readability/compat/two.py")))))
28234 (build-system python-build-system)
28235 (arguments
28236 (list
28237 #:phases
28238 #~(modify-phases %standard-phases
28239 (replace 'check
28240 (lambda* (#:key tests? #:allow-other-keys)
28241 (when tests?
28242 (invoke "python" "-m" "pytest" "-v" "tests/")))))))
28243 (propagated-inputs (list python-chardet python-cssselect python-lxml))
28244 (native-inputs (list python-timeout-decorator python-pytest))
28245 (home-page "http://github.com/buriy/python-readability")
28246 (synopsis "HTML to text parser")
28247 (description
28248 "This package provides classes and function that strip gratuitous markup
28249 from web pages to make them easier to read.")
28250 (license license:asl2.0)))
28251
28252 (define-public python-listparser
28253 (package
28254 (name "python-listparser")
28255 (version "0.18")
28256 (source
28257 (origin
28258 (method url-fetch)
28259 (uri (pypi-uri "listparser" version))
28260 (sha256
28261 (base32
28262 "0hdqs1mmayw1r8yla43hgb4d9y3zqs5483vgf8j9ygczkd2wrq2b"))))
28263 (build-system python-build-system)
28264 (home-page
28265 "https://github.com/kurtmckee/listparser")
28266 (synopsis
28267 "Parse subscription lists in Python")
28268 (description
28269 "This package provides a Python library that can parse OPML, FOAF, and
28270 iGoogle subscription lists.")
28271 (license license:expat)))
28272
28273 (define-public python-smartypants
28274 (package
28275 (name "python-smartypants")
28276 (version "2.0.1")
28277 (source
28278 (origin
28279 ;; There's no source tarball for 2.0.1 on PyPI.
28280 (method git-fetch)
28281 (uri (git-reference
28282 (url "https://github.com/leohemsted/smartypants.py")
28283 (commit (string-append "v" version))))
28284 (file-name (git-file-name name version))
28285 (sha256
28286 (base32 "00p1gnb9pzb3svdq3c5b9b332gsp50wrqqa39gj00m133zadanjp"))))
28287 (build-system python-build-system)
28288 (arguments
28289 '(#:phases
28290 (modify-phases %standard-phases
28291 (replace 'check
28292 ;; Its `setup.py test` doesn't report failure with exit status, so
28293 ;; we use `nose` instead.
28294 (lambda _
28295 (invoke "nosetests" "-v" "--exclude=^load_tests$"))))))
28296 (native-inputs
28297 ;; For tests.
28298 (list python-docutils python-nose python-pygments))
28299 (home-page "https://github.com/leohemsted/smartypants.py")
28300 (synopsis "Translate punctuation characters into smart quotes")
28301 (description
28302 "@command{smartpants} can perform the following transformations:
28303 @enumerate
28304 @item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
28305 @item Backticks-style quotes (``like this'') into \"curly\" quote HTML
28306 entities
28307 @item Dashes (-- and ---) into en- and em-dash entities
28308 @item Three consecutive dots (... or . . .) into an ellipsis entity
28309 @end enumerate")
28310 (license license:bsd-3)))
28311
28312 (define-public python-typogrify
28313 (package
28314 (name "python-typogrify")
28315 (version "2.0.7")
28316 (source (origin
28317 (method url-fetch)
28318 (uri (pypi-uri "typogrify" version))
28319 (sha256
28320 (base32
28321 "0f6b2gnnxjbx1fbmkcscc6qjr4hi78kwm1wx4b766ha3va66dr4b"))))
28322 (build-system python-build-system)
28323 (arguments
28324 '(#:phases
28325 (modify-phases %standard-phases
28326 (replace 'check
28327 (lambda _
28328 (invoke "nosetests" "-v"))))))
28329 (propagated-inputs
28330 (list python-smartypants))
28331 (native-inputs
28332 ;; For tests.
28333 (list python-nose))
28334 (home-page "https://github.com/mintchaos/typogrify")
28335 (synopsis "Filters to transform text into typographically-improved HTML")
28336 (description
28337 "@code{typogrify} provides a set of custom filters that automatically
28338 apply various transformations to plain text in order to yield
28339 typographically-improved HTML. While often used in conjunction with Jinja and
28340 Django template systems, the filters can be used in any environment.")
28341 (license license:bsd-3)))
28342
28343 (define-public python-ld
28344 (package
28345 (name "python-ld")
28346 (version "0.5.0")
28347 (source
28348 (origin
28349 (method url-fetch)
28350 (uri (pypi-uri "ld" version))
28351 (sha256
28352 (base32
28353 "1k4ydp5rgkv4985v459kcl06i1igjm1ywvh2vkbi9ck1zyyri1z5"))))
28354 (build-system python-build-system)
28355 (propagated-inputs
28356 (list python-six))
28357 (home-page "https://github.com/nir0s/ld")
28358 (synopsis "OS platform information API")
28359 (description
28360 "The ld package provides information about the GNU/Linux distribution it
28361 runs on, such as a reliable machine-readable ID, or version information.")
28362 (license license:asl2.0)))
28363
28364 (define-public python-quicktions
28365 (package
28366 (name "python-quicktions")
28367 (version "1.11")
28368 (source
28369 (origin
28370 (method url-fetch)
28371 (uri (pypi-uri "quicktions" version))
28372 (sha256
28373 (base32
28374 "1px21a6x527i1bsr2p6bbf3jziqpvd1vjkvvzh13gsy4iip0yvzn"))
28375 (modules '((guix build utils)))
28376 (snippet
28377 '(begin
28378 ;; This file is generated by Cython.
28379 (delete-file "src/quicktions.c") #t))))
28380 (build-system python-build-system)
28381 (arguments
28382 `(#:phases
28383 (modify-phases %standard-phases
28384 (add-before 'build 'cythonize-sources
28385 (lambda _
28386 (with-directory-excursion "src"
28387 (invoke "cython" "quicktions.pyx"))))
28388 (replace 'check
28389 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
28390 (when tests?
28391 (add-installed-pythonpath inputs outputs)
28392 (invoke "pytest"))
28393 #t)))))
28394 (native-inputs
28395 (list python-cython python-pytest))
28396 (home-page "https://github.com/scoder/quicktions")
28397 (synopsis "Fast fractions data type for rational numbers")
28398 (description
28399 "This package provides fast fractions data type for rational numbers. It
28400 is the cythonized version of @code{fractions.Fraction}.")
28401 (license license:psfl)))
28402
28403 (define-public python-pathvalidate
28404 (package
28405 (name "python-pathvalidate")
28406 (version "2.4.1")
28407 (source
28408 (origin
28409 (method url-fetch)
28410 (uri (pypi-uri "pathvalidate" version))
28411 (sha256
28412 (base32 "0s14ycjgb44lxr2wg8lrq3b7kybmmrbf7yqz47xrqgn2gr6dk6rw"))))
28413 (build-system python-build-system)
28414 (arguments
28415 '(#:tests? #f))
28416 ;; Tests disabled because of circular dependencies.
28417 ;; pathvalidate tests depend on pytest-md-report, which
28418 ;; depends on pathvalidate.
28419 (native-inputs
28420 (list python-allpairspy python-click python-faker python-pytest))
28421 (home-page "https://github.com/thombashi/pathvalidate")
28422 (synopsis "Sanitize strings representing paths")
28423 (description
28424 "@code{pathvalidate} is a Python library to sanitize/validate strings
28425 representing paths or filenames.")
28426 (license license:expat)))
28427
28428 (define-public python-escapism
28429 (package
28430 (name "python-escapism")
28431 (version "1.0.1")
28432 (source
28433 (origin
28434 (method url-fetch)
28435 (uri (pypi-uri "escapism" version))
28436 (sha256
28437 (base32
28438 "1v74243wifcwhj5zkdiispxc9kb1xvnfzilg8bq308pjnkgnn9bk"))))
28439 (build-system python-build-system)
28440 (home-page "https://github.com/minrk/escapism")
28441 (synopsis "Simple, generic library for escaping strings")
28442 (description
28443 "This Python library provides a programming interface to, given a set of
28444 safe characters and an escape character, escape safe strings and unescape the
28445 result.")
28446 (license license:expat)))
28447
28448 (define-public python-recommonmark
28449 (package
28450 (name "python-recommonmark")
28451 (version "0.7.1")
28452 (source
28453 (origin
28454 (method url-fetch)
28455 (uri (pypi-uri "recommonmark" version))
28456 (sha256
28457 (base32
28458 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
28459 (build-system python-build-system)
28460 (propagated-inputs
28461 (list python-commonmark python-docutils python-sphinx))
28462 (arguments
28463 '(#:phases (modify-phases %standard-phases
28464 (add-after 'unpack 'delete-test-sphinx
28465 (lambda* (#:key outputs #:allow-other-keys)
28466 (let* ((out (assoc-ref outputs "out")))
28467 (delete-file "tests/test_sphinx.py")))))))
28468 (home-page "https://github.com/readthedocs/recommonmark")
28469 (synopsis "Docutils-compatibility bridge to CommonMark")
28470 (description
28471 "This package provides a docutils-compatibility bridge to CommonMark that
28472 lets you write CommonMark inside of Docutils & Sphinx projects.")
28473 (license license:expat)))
28474
28475 (define-public python-pyhull
28476 (package
28477 (name "python-pyhull")
28478 (version "2015.2.1")
28479 (source
28480 (origin
28481 (method url-fetch)
28482 (uri (pypi-uri "pyhull" version))
28483 (sha256
28484 (base32
28485 "091sph52c4yk1jlm5w8xidxpzbia9r7s42bnb23q4m4b56ihmzyj"))))
28486 (build-system python-build-system)
28487 (propagated-inputs
28488 (list python-numpy))
28489 (home-page "https://github.com/materialsvirtuallab/pyhull")
28490 (synopsis "Python wrapper to Qhull")
28491 (description
28492 "This package provides a Python wrapper to @uref{http://www.qhull.org/,
28493 Qhull} for the computation of the convex hull, Delaunay triangulation, and
28494 Voronoi diagram.")
28495 (license license:expat)))
28496
28497 (define-public python-opcodes
28498 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
28499 ;; version number, which is what we use here.
28500 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
28501 (package
28502 (name "python-opcodes")
28503 (version "0.3.14") ;from 'opcodes/__init__.py'
28504 (home-page "https://github.com/Maratyszcza/Opcodes")
28505 (source (origin
28506 (method git-fetch)
28507 (uri (git-reference (url home-page) (commit commit)))
28508 (file-name (git-file-name name version))
28509 (sha256
28510 (base32
28511 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
28512 (build-system python-build-system)
28513 (synopsis "Database of processor instructions and opcodes")
28514 (description
28515 "This project documents instruction sets in a format convenient for
28516 tools development. An instruction set is represented by three files:
28517
28518 @itemize
28519 @item an XML file that describes instructions;
28520 @item an XSD file that describes the structure of the XML file;
28521 @item a Python module that reads the XML file and represents it as a set of
28522 Python objects;
28523 @end itemize
28524
28525 It currently provides descriptions for most user-mode x86, x86_64, and k1om
28526 instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
28527 and BMI2).")
28528 (license license:bsd-2))))
28529
28530 (define-public python-peachpy
28531 ;; There is no tag in this repo.
28532 (let ((commit "913d74c35a6b1d330e90bfc055208ce5b06b35a0")
28533 (version "0.2.0") ;from 'peachpy/__init__.py'
28534 (revision "2"))
28535 (package
28536 (name "python-peachpy")
28537 (version (git-version version revision commit))
28538 (home-page "https://github.com/Maratyszcza/PeachPy")
28539 (source (origin
28540 (method git-fetch)
28541 (uri (git-reference (url home-page) (commit commit)))
28542 (file-name (git-file-name name version))
28543 (sha256
28544 (base32
28545 "1wnqxspxsacw4556q0b9fbw11nhrkgn6gs8g43jdnpa35f3z9kb6"))
28546 (patches (search-patches "python-peachpy-determinism.patch"))))
28547 (build-system python-build-system)
28548 (arguments
28549 '(#:phases (modify-phases %standard-phases
28550 (replace 'check
28551 (lambda* (#:key tests? #:allow-other-keys)
28552 (when tests?
28553 (invoke "nosetests")))))))
28554 (native-inputs
28555 (list python-nose python-rednose python-setuptools))
28556 (propagated-inputs
28557 (list python-six python-opcodes))
28558 (synopsis "Efficient assembly code generation in Python")
28559 (description
28560 "PeachPy is a Python framework for writing high-performance assembly kernels.
28561 PeachPy aims to simplify writing optimized assembly kernels while preserving
28562 all optimization opportunities of traditional assembly.
28563
28564 PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
28565 for the Go language tool chain; it adapts to different calling conventions and
28566 application binary interfaces (ABIs); it takes care of register allocation; it
28567 supports x86_64 instructions up to AVX-512 and SHA.")
28568 (license license:bsd-2))))
28569
28570 (define-public python-sgmllib3k
28571 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
28572 (revision "1"))
28573 (package
28574 (name "python-sgmllib3k")
28575 (version
28576 (git-version "1.0.0" revision commit))
28577 (source
28578 (origin
28579 (method git-fetch)
28580 (uri (git-reference
28581 (url "https://github.com/hsoft/sgmllib")
28582 (commit commit)))
28583 (file-name (git-file-name name version))
28584 (sha256
28585 (base32
28586 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))))
28587 (build-system python-build-system)
28588 (home-page "https://github.com/hsoft/sgmllib")
28589 (synopsis "Python 3 port of sgmllib")
28590 (description "This package provides an unmaintained port of sgmllib to
28591 Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
28592 Generalized Mark-up Language}.")
28593 (license license:bsd-3))))
28594
28595 (define-public python-cwcwidth
28596 (package
28597 (name "python-cwcwidth")
28598 (version "0.1.4")
28599 (source
28600 (origin
28601 (method url-fetch)
28602 (uri (pypi-uri "cwcwidth" version))
28603 (sha256
28604 (base32
28605 "1azrphpkcyggg38xvkfb9dpc4xmmm90p02kf8dkqd4d6j5w96aj8"))))
28606 (build-system python-build-system)
28607 (native-inputs
28608 (list python-cython python-pytest python-setuptools-scm python-toml
28609 python-wheel))
28610 (home-page
28611 "https://github.com/sebastinas/cwcwidth")
28612 (synopsis "Python bindings for wc(s)width")
28613 (description "This package provides bindings for wcwidth and wcswidth
28614 functions defined in POSIX.1-2001 and POSIX.1-2008.")
28615 (license license:expat)))
28616
28617 (define-public python-pyan3
28618 (package
28619 (name "python-pyan3")
28620 (version "1.2.0")
28621 (source
28622 (origin
28623 ;; Source tarball on PyPI lacks tests.
28624 (method git-fetch)
28625 (uri (git-reference
28626 (url "https://github.com/Technologicat/pyan")
28627 (commit (string-append "v" version))))
28628 (file-name (git-file-name name version))
28629 (sha256
28630 (base32
28631 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
28632 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
28633 "python-pyan3-fix-absolute-path-bug.patch"))))
28634 (build-system python-build-system)
28635 (arguments
28636 `(#:phases
28637 (modify-phases %standard-phases
28638 (replace 'check
28639 (lambda* (#:key tests? #:allow-other-keys)
28640 (when tests?
28641 ;; Extend PYTHONPATH so the built package will be found.
28642 (setenv "GUIX_PYTHONPATH"
28643 (string-append (getcwd) ":" (getenv "GUIX_PYTHONPATH")))
28644 (invoke "pytest")))))))
28645 (native-inputs
28646 (list python-pytest python-pytest-cov python-wheel))
28647 (propagated-inputs
28648 (list python-jinja2))
28649 (home-page "https://github.com/Technologicat/pyan")
28650 (synopsis "Offline call graph generator for Python 3")
28651 (description "Pyan takes one or more Python source files, performs
28652 a (rather superficial) static analysis, and constructs a directed graph of the
28653 objects in the combined source, and how they define or use each other. The
28654 graph can be output for rendering by GraphViz or yEd.")
28655 (license license:gpl2)))
28656
28657 (define-public python-multipledispatch
28658 (package
28659 (name "python-multipledispatch")
28660 (version "0.6.0")
28661 (source
28662 (origin
28663 (method url-fetch)
28664 (uri (pypi-uri "multipledispatch" version))
28665 (sha256
28666 (base32
28667 "1slblghfjg9fdi9zpd7gmrkvfbv20nrdgnrymcnbky8bzm8i9ax7"))))
28668 (build-system python-build-system)
28669 (propagated-inputs (list python-six))
28670 (home-page "https://github.com/mrocklin/multipledispatch/")
28671 (synopsis "Multiple dispatch for Python based on pattern matching")
28672 (description "This library provides an efficient mechanism for overloading
28673 function implementations based on the types of the arguments.")
28674 (license license:bsd-3)))
28675
28676 (define-public python-logical-unification
28677 (package
28678 (name "python-logical-unification")
28679 (version "0.4.3")
28680 (source
28681 (origin
28682 (method url-fetch)
28683 (uri (pypi-uri "logical-unification" version))
28684 (sha256
28685 (base32
28686 "0j57953hi7kg2rl0163vzjzsvzdyjimnklhx6idf5vaqqf1d3p1j"))))
28687 (build-system python-build-system)
28688 (propagated-inputs
28689 (list python-multipledispatch python-toolz))
28690 (home-page "https://github.com/pythological/unification/")
28691 (synopsis "Logical unification in Python for solving symbolic expressions")
28692 (description "This library provides algorithms and data types for solving
28693 symbolic expressions in pure Python using the technique of logical unification.")
28694 (license license:bsd-3)))
28695
28696 (define-public python-cons
28697 (package
28698 (name "python-cons")
28699 (version "0.4.2")
28700 (source
28701 (origin
28702 (method url-fetch)
28703 (uri (pypi-uri "cons" version))
28704 (sha256
28705 (base32
28706 "0w9giq196wps7mbm47c4shdzs5yvwvqajqzkim2p92i51sm5qgvm"))))
28707 (build-system python-build-system)
28708 (native-inputs
28709 (list python-pytest-6 python-toml))
28710 (propagated-inputs
28711 (list python-logical-unification))
28712 (home-page "https://github.com/pythological/python-cons")
28713 (synopsis "Cons cell data structures and related algorithms for Python")
28714 (description
28715 "This library implements algorithms and data structures for Lisp-style
28716 cons cells in Python.")
28717 (license license:lgpl3+)))
28718
28719 (define-public python-etuples
28720 (package
28721 (name "python-etuples")
28722 (version "0.3.3")
28723 (source
28724 (origin
28725 (method url-fetch)
28726 (uri (pypi-uri "etuples" version))
28727 (sha256
28728 (base32
28729 "0jhfyp177v37rl0i7wqfx7q6s5qkz027hl283d1x8d0vm3w0zqc8"))))
28730 (build-system python-build-system)
28731 (propagated-inputs
28732 (list python-cons python-multipledispatch))
28733 (home-page "https://github.com/pythological/etuples")
28734 (synopsis "S-expressions in Python")
28735 (description
28736 "This library implements eval'able S-expression in Python using tuple-like objects.")
28737 (license license:asl2.0)))
28738
28739 (define-public python-minikanren
28740 (package
28741 (name "python-minikanren")
28742 (version "1.0.1")
28743 (source
28744 (origin
28745 (method git-fetch)
28746 (uri (git-reference
28747 (url "https://github.com/pythological/kanren")
28748 (commit (string-append "v" version))))
28749 (file-name (git-file-name name version))
28750 (sha256
28751 (base32 "0g7wfj5hxalwz7k1301nsjqhjpzsif1bj6wjm2x2kavlm2ypv9jc"))))
28752 (build-system python-build-system)
28753 (arguments
28754 '(#:phases (modify-phases %standard-phases
28755 (replace 'check
28756 (lambda* (#:key tests? #:allow-other-keys)
28757 (when tests?
28758 (invoke "python" "-m" "pytest" "-v" "tests/" "kanren/"))
28759 #t)))))
28760 (native-inputs
28761 (list python-coveralls
28762 python-pydocstyle
28763 python-pytest
28764 python-pytest-cov
28765 python-pylint
28766 python-black
28767 python-sympy
28768 python-versioneer
28769 python-coverage
28770 python-pre-commit))
28771 (propagated-inputs
28772 (list python-toolz python-cons python-multipledispatch
28773 python-etuples python-logical-unification))
28774 (home-page "https://github.com/pythological/kanren")
28775 (synopsis "Relational logic programming in pure Python")
28776 (description
28777 "The minikanren library provides an algorithmic core for computer algebra
28778 systems in Python.")
28779 (license license:bsd-3)))
28780
28781 (define-public python-dotenv
28782 (package
28783 (name "python-dotenv")
28784 (version "0.20.0")
28785 (source
28786 (origin
28787 (method url-fetch)
28788 (uri (pypi-uri "python-dotenv" version))
28789 (sha256
28790 (base32 "13s9imfd0k4d7b1qy5wfqzw5vyj6rhmcrccsdz1l4g39b55b1qxp"))))
28791 (build-system python-build-system)
28792 (arguments
28793 `(#:phases
28794 (modify-phases %standard-phases
28795 (replace 'check
28796 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
28797 (when tests?
28798 (add-installed-pythonpath inputs outputs)
28799 (setenv "PATH" (string-append (getenv "PATH") ":"
28800 (assoc-ref outputs "out") "/bin"))
28801 ;; Skip the ipython tests.
28802 (delete-file "tests/test_ipython.py")
28803 (invoke "python" "-m" "pytest")))))))
28804 (propagated-inputs
28805 (list python-click))
28806 (native-inputs
28807 (list python-mock python-pytest python-sh))
28808 (home-page "https://saurabh-kumar.com/python-dotenv/")
28809 (synopsis "Setup environment variables according to .env files")
28810 (description
28811 "This package provides the @code{python-dotenv} Python module to read
28812 key-value pairs from a @code{.env} file and set them as environment variables.")
28813 (license license:bsd-3)))
28814
28815 (define-public python-dotenv-0.13.0
28816 (package (inherit python-dotenv)
28817 (name "python-dotenv")
28818 (version "0.13.0")
28819 (source
28820 (origin
28821 (method url-fetch)
28822 (uri (pypi-uri "python-dotenv" version))
28823 (sha256
28824 (base32
28825 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))))
28826
28827 (define-public date2name
28828 (let ((commit "6c8f37277e8ec82aa50f90b8921422be30c4e798")
28829 (revision "1"))
28830 (package
28831 (name "date2name")
28832 (version (git-version "0.0" revision commit))
28833 (source
28834 (origin
28835 (method git-fetch)
28836 (uri (git-reference
28837 (url "https://github.com/novoid/date2name")
28838 (commit commit)))
28839 (file-name (git-file-name name version))
28840 (sha256
28841 (base32
28842 "1vq96b7n16d932nyfhnzwdwxff0zrqanidmwr4cxj2p67ad9y3w7"))))
28843 (build-system python-build-system)
28844 (arguments
28845 `(#:tests? #f ; no tests
28846 #:phases
28847 (modify-phases %standard-phases
28848 (delete 'build)
28849 (replace 'install
28850 (lambda* (#:key outputs #:allow-other-keys)
28851 (let* ((bindir (string-append (assoc-ref outputs "out") "/bin"))
28852 (binary (string-append bindir "/date2name")))
28853 (mkdir-p bindir)
28854 (copy-file "date2name/__init__.py" binary)
28855 (chmod binary #o555)))))))
28856 (synopsis "Handling time-stamps and date-stamps in file names")
28857 (description "By default, date2name gets the modification time of matching
28858 files and directories and adds a datestamp in standard ISO 8601+ format
28859 YYYY-MM-DD at the beginning of the file or directory name.")
28860 (home-page "https://github.com/novoid/date2name")
28861 (license license:gpl3+))))
28862
28863 (define-public python-braintree
28864 (package
28865 (name "python-braintree")
28866 (version "4.12.0")
28867 (source
28868 (origin
28869 (method url-fetch)
28870 (uri (pypi-uri "braintree" version))
28871 (sha256
28872 (base32 "19kli85q18p80nsn8fm4ql6axpr7bllfqg5chv2ywhr8zr8bssll"))))
28873 (build-system python-build-system)
28874 (propagated-inputs
28875 (list python-requests))
28876 (home-page
28877 "https://developers.braintreepayments.com/python/sdk/server/overview")
28878 (synopsis "Braintree Python Library")
28879 (description "The Braintree Python SDK provides integration access to the
28880 Braintree Gateway. Braintree is a US-based payments service provider.")
28881 (license license:expat)))
28882
28883 (define-public python-markuppy
28884 (package
28885 (name "python-markuppy")
28886 (version "1.14")
28887 (source
28888 (origin
28889 (method url-fetch)
28890 (uri (pypi-uri "MarkupPy" version))
28891 (sha256
28892 (base32 "0pqdmpxbr8iq22b4css2gz5z6s01ddpzyj25x27kgbs2lp0f5phs"))))
28893 (build-system python-build-system)
28894 (home-page "https://github.com/tylerbakke/MarkupPy")
28895 (synopsis "Pythonic HTML/XML generator")
28896 (description "This Python module attempts to make it easier to generate
28897 HTML/XML from a Python program in an intuitive, lightweight, customizable and
28898 pythonic way.")
28899 (license license:expat)))
28900
28901 (define-public python-tablib
28902 (package
28903 (name "python-tablib")
28904 (version "3.0.0")
28905 (source
28906 (origin
28907 (method url-fetch)
28908 (uri (pypi-uri "tablib" version))
28909 (sha256
28910 (base32 "03f1z6jq6rf67gwhbm9ma4rydm8h447a5nh5lcs5l8jg8l4aqg7q"))))
28911 (build-system python-build-system)
28912 (arguments
28913 '(#:phases
28914 (modify-phases %standard-phases
28915 (replace 'check
28916 (lambda* (#:key tests? #:allow-other-keys)
28917 (when tests?
28918 (setenv "GUIX_PYTHONPATH"
28919 (string-append (getcwd) "/build/lib:"
28920 (getenv "GUIX_PYTHONPATH")))
28921 (invoke "pytest")))))))
28922 (native-inputs
28923 (list python-pandas ;; required for test-suite
28924 python-pytest python-pytest-cov python-setuptools-scm))
28925 (propagated-inputs
28926 (list python-markuppy
28927 python-odfpy
28928 python-openpyxl
28929 python-pyyaml
28930 python-tabulate
28931 python-xlrd
28932 python-xlwt))
28933 (home-page "https://tablib.readthedocs.io")
28934 (synopsis "Format agnostic tabular data library")
28935 (description "@code{tablib} is a format-agnostic tabular dataset library,
28936 written in Python. Supported output formats are Excel (Sets + Books),
28937 JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
28938 TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
28939
28940 @code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
28941 quite huge, this Guix package doesn't depend on pandas. In case, just also
28942 install @code{python-pandas}.")
28943 (license license:expat)))
28944
28945 (define-public python-csb43
28946 (package
28947 (name "python-csb43")
28948 (version "0.9.1")
28949 (source
28950 (origin
28951 (method url-fetch)
28952 (uri (pypi-uri "csb43" version))
28953 (sha256
28954 (base32 "0r0csl9npncnkfafg3rg6xr38d1qr0sxvq7wn7mg9bq41hvvh1si"))))
28955 (build-system python-build-system)
28956 (native-inputs
28957 (list python-lxml))
28958 (propagated-inputs
28959 (list python-pycountry python-pyyaml python-tablib))
28960 (home-page "https://bitbucket.org/wmj/csb43")
28961 (synopsis "Tools for converting from the Spanish banks' format CSB norm
28962 43 (CSB43)")
28963 (description "This package provides tools to convert files in the format
28964 used by multiple Spanish banks (standard 43 of the Spanish Banking Council
28965 [CSB43] / Spanish Banking Association [AEB43]) to other formats.
28966
28967 Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
28968 spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
28969 (license license:lgpl3)))
28970
28971 (define-public python-febelfin-coda
28972 (package
28973 (name "python-febelfin-coda")
28974 (version "0.2.0")
28975 (source
28976 (origin
28977 (method url-fetch)
28978 (uri (pypi-uri "febelfin-coda" version))
28979 (sha256
28980 (base32 "1isnf87gxlvfbmackv7b2c978vmnj7ij0v4svhyjl8pbb9hwjsvm"))))
28981 (build-system python-build-system)
28982 (home-page "https://coda.b2ck.com/")
28983 (synopsis "Module to parse Belgian CODA files")
28984 (description "This package provides a module to parse Coded statement of
28985 account (CODA) files as defined be the Belgian Febelfin bank standard.")
28986 (license license:bsd-3)))
28987
28988 (define-public python-ofxparse
28989 (package
28990 (name "python-ofxparse")
28991 (version "0.21")
28992 (source
28993 (origin
28994 (method url-fetch)
28995 (uri (pypi-uri "ofxparse" version))
28996 (sha256
28997 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
28998 (build-system python-build-system)
28999 (arguments
29000 '(#:phases
29001 (modify-phases %standard-phases
29002 (replace 'check
29003 (lambda* (#:key tests? #:allow-other-keys)
29004 (when tests?
29005 (invoke "nosetests" "-v")))))))
29006 (native-inputs
29007 (list python-nose))
29008 (propagated-inputs
29009 (list python-beautifulsoup4 python-lxml python-six))
29010 (home-page "http://sites.google.com/site/ofxparse")
29011 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
29012 format")
29013 (description "@code{ofxparse} is a parser for Open Financial
29014 Exchange (.ofx) format files. OFX files are available from almost any online
29015 banking site, so they work well if you want to pull together your finances
29016 from multiple sources. Online trading accounts also often provide account
29017 statements in OFX files.")
29018 (license license:expat)))
29019
29020 (define-public python-rfc3339-validator
29021 (package
29022 (name "python-rfc3339-validator")
29023 (version "0.1.4")
29024 (source
29025 (origin
29026 (method url-fetch)
29027 (uri (pypi-uri "rfc3339_validator" version))
29028 (sha256
29029 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
29030 (build-system python-build-system)
29031 (native-inputs (list python-hypothesis
29032 python-pytest
29033 python-pytest-runner
29034 python-strict-rfc3339))
29035 (propagated-inputs (list python-six))
29036 (home-page "https://github.com/naimetti/rfc3339-validator")
29037 (synopsis "Python RFC3339 validator")
29038 (description "This package provides a pure Python RFC3339 validator.")
29039 (license license:expat)))
29040
29041 (define-public python-strict-rfc3339
29042 (package
29043 (name "python-strict-rfc3339")
29044 (version "0.7")
29045 (source
29046 (origin
29047 (method git-fetch) ;no tests in pypi release
29048 (uri (git-reference
29049 (url "https://github.com/danielrichman/strict-rfc3339")
29050 (commit (string-append "version-" version))))
29051 (file-name (git-file-name name version))
29052 (sha256
29053 (base32
29054 "0b12bh9v9gwkm89kxbidxw2z81lg8fx1v5fzgs313v1wgx6qb09p"))))
29055 (build-system python-build-system)
29056 (arguments
29057 (list
29058 #:phases
29059 #~(modify-phases %standard-phases
29060 (replace 'check
29061 (lambda* (#:key tests? #:allow-other-keys)
29062 (when tests?
29063 (invoke "pytest" "-vv"
29064 ;; The timestamp to local offset tests fail due to
29065 ;; missing timezone data (see:
29066 ;; https://github.com/danielrichman/strict-rfc3339/issues/9).
29067 "-k" "not LocalOffset")))))))
29068 (native-inputs (list python-pytest))
29069 (home-page "https://github.com/danielrichman/strict-rfc3339")
29070 (synopsis "RFC3339 procedures library")
29071 (description "The @code{strict_rfc3339} Python module provides strict,
29072 simple, lightweight RFC3339 procedures. It enables or aims to:
29073 @itemize
29074 @item Convert UNIX timestamps to and from RFC3339.
29075 @item Produce RFC3339 strings with a UTC offset (Z) or with the offset that
29076 the C time module reports is the local timezone offset.
29077 @item Be simple with minimal dependencies/libraries.
29078 @item Avoid timezones as much as possible.
29079 @item Be very strict and follow RFC3339.
29080 @end itemize")
29081 (license license:gpl3+)))
29082
29083 (define-public python-stripe
29084 (package
29085 (name "python-stripe")
29086 (version "2.60.0")
29087 (source
29088 (origin
29089 (method url-fetch)
29090 (uri (pypi-uri "stripe" version))
29091 (sha256
29092 (base32 "0258lzh4qikhinfggnlfh5aklcvg7lrvl8giqrh0yf0l61wvfrl9"))))
29093 (build-system python-build-system)
29094 (arguments
29095 '(#:tests? #f)) ;; tests require network
29096 (propagated-inputs
29097 (list python-requests))
29098 (home-page "https://github.com/stripe/stripe-python")
29099 (synopsis "Python bindings for the Stripe financial services' API")
29100 (description "This package provides access to the Stripe financial
29101 services' API. It includes a pre-defined set of classes for API resources
29102 that initialize themselves dynamically from API responses which makes it
29103 compatible with a wide range of versions of the Stripe API.")
29104 (license license:expat)))
29105
29106 (define-public python-platformdirs
29107 (package
29108 (name "python-platformdirs")
29109 (version "2.4.1")
29110 (source
29111 (origin
29112 (method url-fetch)
29113 (uri (pypi-uri "platformdirs" version))
29114 (sha256
29115 (base32 "1njz0h4iky8iglrb85cd07hpa3lp1a2dfr934dj65hxwzvfk61j4"))))
29116 (build-system python-build-system)
29117 (arguments
29118 '(#:phases (modify-phases %standard-phases
29119 (replace 'check
29120 (lambda* (#:key tests? #:allow-other-keys)
29121 (when tests?
29122 (invoke "pytest" "-vv")))))))
29123 (native-inputs
29124 (list python-appdirs python-pytest python-pytest-mock
29125 python-setuptools-scm))
29126 (home-page "https://github.com/platformdirs/platformdirs")
29127 (synopsis "Determine the appropriate platform-specific directories")
29128 (description "When writing applications, finding the right location to
29129 store user data and configuration varies per platform. Even for
29130 single-platform apps, there may by plenty of nuances in figuring out the right
29131 location. This small Python module determines the appropriate
29132 platform-specific directories, e.g. the ``user data dir''.")
29133 (license license:expat)))
29134
29135 (define-public python-json2html
29136 (package
29137 (name "python-json2html")
29138 (version "1.3.0")
29139 (source
29140 ;; There are no tests in the PyPI tarball.
29141 (origin
29142 (method git-fetch)
29143 (uri (git-reference
29144 (url "https://github.com/softvar/json2html")
29145 (commit (string-append "v" version))))
29146 (file-name (git-file-name name version))
29147 (sha256
29148 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
29149 (build-system python-build-system)
29150 (arguments
29151 '(#:phases
29152 (modify-phases %standard-phases
29153 (replace 'check
29154 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29155 (when tests?
29156 (add-installed-pythonpath inputs outputs)
29157 (invoke "python" "test/run_tests.py")))))))
29158 (home-page "https://github.com/softvar/json2html")
29159 (synopsis "Convert JSON to HTML table")
29160 (description "@code{python-json2html} is a python module to convert JSON
29161 into a human readable HTML table representation.")
29162 (license license:expat)))
29163
29164 (define-public python-face
29165 (package
29166 (name "python-face")
29167 (version "20.1.1")
29168 (source
29169 (origin
29170 (method url-fetch)
29171 (uri (pypi-uri "face" version))
29172 (sha256
29173 (base32 "0gpd9f0rmbv3rd2szi2na37l29fabkwazikjrxc6wca1lddwlnbx"))))
29174 (build-system python-build-system)
29175 (arguments
29176 '(#:phases
29177 (modify-phases %standard-phases
29178 (replace 'check
29179 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29180 (when tests?
29181 ;; Make installed package available for running the tests.
29182 (add-installed-pythonpath inputs outputs)
29183 (invoke "pytest" "-v")))))))
29184 (native-inputs
29185 (list python-pytest))
29186 (propagated-inputs
29187 (list python-boltons))
29188 (home-page "https://github.com/mahmoud/face")
29189 (synopsis "CLI parsing and dispatching microframework")
29190 (description "@code{python-face} is a Pythonic microframework for building
29191 command-line applications.
29192
29193 @itemize
29194 @item First-class subcommand support
29195 @item Powerful middleware architecture
29196 @item Separate parser layer
29197 @item Built-in flagfile support
29198 @item Handy testing utilities
29199 @item Themeable help display
29200 @end itemize")
29201 (license license:bsd-3)))
29202
29203 (define-public python-glom
29204 (package
29205 (name "python-glom")
29206 (version "20.11.0")
29207 (source
29208 (origin
29209 (method url-fetch)
29210 (uri (pypi-uri "glom" version))
29211 (sha256
29212 (base32 "04pba09vdr3qjvqvy14g60fscdsi35chbbyqpczdp76cpir101al"))))
29213 (build-system python-build-system)
29214 (arguments
29215 '(#:phases
29216 (modify-phases %standard-phases
29217 (replace 'check
29218 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29219 (when tests?
29220 ;; Make installed executable available for running the tests.
29221 (setenv "PATH"
29222 (string-append (assoc-ref outputs "out") "/bin"
29223 ":" (getenv "PATH")))
29224 (invoke "pytest" "-v")))))))
29225 (native-inputs
29226 (list python-pytest python-pyyaml))
29227 (propagated-inputs
29228 (list python-attrs python-boltons python-face))
29229 (home-page "https://github.com/mahmoud/glom")
29230 (synopsis "Declaratively restructure data")
29231 (description "Real applications have real data, and real data
29232 nests---objects inside of objects inside of lists of objects. glom is a new
29233 and powerful way to handle real-world data, featuring:
29234
29235 @itemize
29236 @item Path-based access to nested data structures
29237 @item Readable, meaningful error messages
29238 @item Declarative data transformation, using lightweight, Pythonic specifications
29239 @item Built-in data exploration and debugging features
29240 @end itemize")
29241 (license license:bsd-3)))
29242
29243 (define-public python-box
29244 (package
29245 (name "python-box")
29246 (version "5.3.0")
29247 (source
29248 (origin
29249 (method url-fetch)
29250 (uri (pypi-uri "python-box" version))
29251 (sha256
29252 (base32
29253 "0jhrdif57khx2hsw1q6a9x42knwcvq8ijgqyq1jmll6y6ifyzm2f"))))
29254 (build-system python-build-system)
29255 (propagated-inputs
29256 (list python-msgpack python-ruamel.yaml python-toml))
29257 (home-page "https://github.com/cdgriffith/Box")
29258 (synopsis "Advanced Python dictionaries with dot notation access")
29259 (description
29260 "This package provides the @code{python-box} Python module.
29261 It implements advanced Python dictionaries with dot notation access.")
29262 (license license:expat)))
29263
29264 (define-public python-fields
29265 (package
29266 (name "python-fields")
29267 (version "5.0.0")
29268 (source
29269 (origin
29270 (method url-fetch)
29271 (uri (pypi-uri "fields" version))
29272 (sha256
29273 (base32 "09sppvhhkhkv9zc9g994m53z15v92csxwcf42ggkaknlv01smm1i"))))
29274 (build-system python-build-system)
29275 (home-page "https://python-fields.readthedocs.io/")
29276 (synopsis "Python container class boilerplate killer")
29277 (description "Avoid repetetive boilerplate code in Python classes.")
29278 (license license:bsd-3)))
29279
29280 (define-public python-aspectlib
29281 (package
29282 (name "python-aspectlib")
29283 (version "1.5.2")
29284 (source
29285 (origin
29286 (method url-fetch)
29287 (uri (pypi-uri "aspectlib" version))
29288 (sha256
29289 (base32 "1am4ycf292zbmgz791z393v63w7qrynf8q5p9db2wwf2qj1fqxfj"))))
29290 (build-system python-build-system)
29291 (propagated-inputs (list python-fields))
29292 (home-page "https://github.com/ionelmc/python-aspectlib")
29293 (synopsis
29294 "Python monkey-patching and decorators")
29295 (description
29296 "This package provides an aspect-oriented programming, monkey-patch
29297 and decorators library. It is useful when changing behavior in existing
29298 code is desired. It includes tools for debugging and testing:
29299 simple mock/record and a complete capture/replay framework.")
29300 (license license:bsd-2)))
29301
29302 (define-public python-ijson
29303 (package
29304 (name "python-ijson")
29305 (version "3.1.4")
29306 (source
29307 (origin
29308 (method url-fetch)
29309 (uri (pypi-uri "ijson" version))
29310 (sha256
29311 (base32 "1sp463ywj4jv5cp6hsv2qwiima30d09xsabxb2dyq5b17jp0640x"))))
29312 (arguments
29313 `(#:phases
29314 (modify-phases %standard-phases
29315 ;; the tests run by the default setup.py require yajl 1.x,
29316 ;; but we have 2.x. yajl 1.x support is going to be removed
29317 ;; anyway, so use pytest to avoid running the yajl1-related
29318 ;; tests. See: https://github.com/ICRAR/ijson/issues/55
29319 (replace 'check
29320 (lambda* (#:key tests? #:allow-other-keys)
29321 (when tests?
29322 (invoke "pytest" "-vv")))))))
29323 (inputs
29324 ;; libyajl is optional, but compiling with it makes faster
29325 ;; backends available to ijson:
29326 (list libyajl))
29327 (native-inputs
29328 (list python-pytest))
29329 (build-system python-build-system)
29330 (home-page "https://github.com/ICRAR/ijson")
29331 (synopsis "Iterative JSON parser with Python iterator interfaces")
29332 (description
29333 "Ijson is an iterative JSON parser with standard Python iterator
29334 interfaces.")
29335 (license license:bsd-3)))
29336
29337 (define-public python-ordered-set
29338 (package
29339 (name "python-ordered-set")
29340 (version "4.1.0")
29341 (source
29342 (origin
29343 (method url-fetch)
29344 (uri (pypi-uri "ordered-set" version))
29345 (sha256
29346 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
29347 (build-system python-build-system)
29348 (arguments
29349 (list #:phases
29350 #~(modify-phases %standard-phases
29351 (replace 'check
29352 (lambda* (#:key tests? #:allow-other-keys)
29353 (when tests?
29354 (invoke "pytest" "-vv")))))))
29355 (native-inputs (list python-cython python-pytest))
29356 (home-page "https://github.com/simonpercivall/orderedset")
29357 (synopsis "Ordered Set implementation in Cython")
29358 (description "This library provides an @code{OrderedSet} data type that
29359 works like a regular set, but remembers insertion order. It supports the full
29360 Python @code{set} interface.")
29361 (license license:asl2.0)))
29362
29363 (define-public python-orgparse
29364 (package
29365 (name "python-orgparse")
29366 (version "0.3.0")
29367 (source
29368 (origin
29369 (method url-fetch)
29370 (uri (pypi-uri "orgparse" version))
29371 (sha256
29372 (base32 "14iv4pg3rma9560plg0w943x04mr2cmrssda43y2d1x9acrd2n71"))))
29373 (build-system python-build-system)
29374 (arguments
29375 `(#:phases
29376 (modify-phases %standard-phases
29377 (replace 'check
29378 (lambda* (#:key tests? #:allow-other-keys)
29379 (when tests?
29380 (invoke "pytest" "-vv" "orgparse/tests")))))))
29381 (native-inputs
29382 (list python-pytest python-setuptools-scm))
29383 (home-page "https://github.com/karlicoss/orgparse")
29384 (synopsis "Emacs Org mode parser in Python")
29385 (description
29386 "This package is a Python module for reading Emacs Org mode files.")
29387 (license license:bsd-3)))
29388
29389 (define-public dynaconf
29390 (package
29391 (name "dynaconf")
29392 (version "3.1.7")
29393 (source
29394 (origin
29395 (method git-fetch)
29396 (uri
29397 (git-reference
29398 (url "https://github.com/rochacbruno/dynaconf")
29399 (commit version)))
29400 (file-name (git-file-name name version))
29401 (sha256
29402 (base32
29403 "0pjyjsdzairpn5vq8nzddhxwxmr18grn272nj31wcy2ipwdl3c3h"))
29404 (patches (search-patches "dynaconf-unvendor-deps.patch"))
29405 (modules '((guix build utils)))
29406 (snippet '(begin
29407 ;; Remove vendored dependencies
29408 (let ((unvendor '("click" "dotenv" "ruamel" "toml")))
29409 (with-directory-excursion "dynaconf/vendor"
29410 (for-each delete-file-recursively unvendor))
29411 (with-directory-excursion "dynaconf/vendor_src"
29412 (for-each delete-file-recursively unvendor)))))))
29413 (build-system python-build-system)
29414 (arguments
29415 `(#:phases
29416 (modify-phases %standard-phases
29417 (add-after 'unpack 'patch-for-click-8
29418 (lambda _
29419 (substitute* "dynaconf/cli.py"
29420 (("click.get_os_args\\()") ;deprecated from Click 8.1+
29421 "sys.argv[1:]"))))
29422 (replace 'check
29423 (lambda* (#:key tests? outputs #:allow-other-keys)
29424 (when tests?
29425 ;; These tests depend on hvac and a live Vault process.
29426 (delete-file "tests/test_vault.py")
29427 (invoke "make" "test_only")))))))
29428 (propagated-inputs
29429 (list python-click python-configobj python-dotenv-0.13.0
29430 python-ruamel.yaml python-toml))
29431 (native-inputs
29432 (list python-django python-flask python-pytest python-pytest-cov
29433 python-pytest-mock))
29434 (home-page "https://www.dynaconf.com/")
29435 (synopsis "The dynamic configurator for your Python project")
29436 (description
29437 "This package provides @code{dynaconf} the dynamic configurator manager for
29438 your Python project. It provides features such as:
29439
29440 @itemize
29441 @item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
29442 @item Settings management (default values, validation, parsing, templating);
29443 @item Protection of sensitive information (passwords/tokens);
29444 @item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
29445 loaders;
29446 @item Full support for environment variables to override existing settings
29447 (dotenv support included);
29448 @item Optional layered system for multiple environments @code{[default,
29449 development, testing, production]};
29450 @item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
29451 @item Built-in extensions for Django and Flask web frameworks;
29452 @item CLI for common operations such as @code{init, list, write, validate, export}.
29453 @end itemize")
29454 (license license:expat)))
29455
29456 (define-public python-pudb
29457 (package
29458 (name "python-pudb")
29459 (version "2022.1.2")
29460 (source (origin
29461 (method url-fetch)
29462 (uri (pypi-uri "pudb" version))
29463 (sha256
29464 (base32
29465 "03a7zalgdxfd2z2k6050ng087gwqgqis544n2083gdfxbf0ap0vb"))))
29466 (build-system python-build-system)
29467 (arguments
29468 `(#:phases (modify-phases %standard-phases
29469 (add-before 'check 'fix-read-only-home
29470 (lambda _
29471 (setenv "HOME" "/tmp")))
29472 (replace 'check
29473 (lambda* (#:key tests? #:allow-other-keys)
29474 (when tests?
29475 (invoke "pytest" "-vv")))))))
29476 (native-inputs (list python-pytest python-pytest-mock))
29477 (propagated-inputs (list python-jedi python-pygments python-urwid
29478 python-urwid-readline))
29479 (home-page "https://documen.tician.de/pudb/")
29480 (synopsis "Console-based Python debugger")
29481 (description
29482 "@command{pudb} is a full-screen, console-based Python debugger providing
29483 all the niceties of modern GUI-based debuggers in a more lightweight and
29484 keyboard-friendly package.")
29485 (license license:expat)))
29486
29487 (define-public pudb
29488 (deprecated-package "pudb" python-pudb))
29489
29490 (define-public python-iwlib
29491 (package
29492 (name "python-iwlib")
29493 (version "1.7.0")
29494 (source
29495 (origin
29496 (method url-fetch)
29497 (uri (pypi-uri "iwlib" version))
29498 (sha256
29499 (base32 "18bd35wn7zclalpqbry42pf7bjrdggxkkw58mc0k1vkhg9czc1d8"))))
29500 (build-system python-build-system)
29501 (inputs
29502 (list wireless-tools))
29503 (propagated-inputs (list python-cffi))
29504 (home-page "https://github.com/nhoad/python-iwlib")
29505 (synopsis "Python module to interface with iwlib")
29506 (description
29507 "This package provides a Python interface to iw wireless tools.")
29508 (license license:gpl2)))
29509
29510 (define-public python-pdoc3
29511 (package
29512 (name "python-pdoc3")
29513 (version "0.10.0")
29514 (source
29515 (origin
29516 (method url-fetch)
29517 (uri (pypi-uri "pdoc3" version))
29518 (sha256
29519 (base32 "1dz4hw10ngidzg9cjvflc8nlrwrjbb3ijhmaw4w6f039p6yff8jz"))
29520 (patches
29521 (search-patches "python-pdoc3-tests.patch"))))
29522 (build-system python-build-system)
29523 (native-inputs
29524 (list python-setuptools-git python-setuptools-scm))
29525 (propagated-inputs (list python-mako python-markdown))
29526 (home-page "https://pdoc3.github.io/pdoc/")
29527 (synopsis "Auto-generate API documentation for Python projects")
29528 (description
29529 "This package auto-generates API documentation from Python projects
29530 already existing modules and objects docstrings.")
29531 (license license:agpl3+)))
29532
29533 (define-public python-piexif
29534 (package
29535 (name "python-piexif")
29536 (version "1.1.3")
29537 (source
29538 (origin
29539 (method url-fetch)
29540 (uri (pypi-uri "piexif" version ".zip"))
29541 (sha256
29542 (base32 "06sz58q4mrw472p8fbnq7wsj8zpi5js5r8phm2hiwfmz0v33bjw3"))
29543 (patches
29544 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
29545 (build-system python-build-system)
29546 (native-inputs
29547 (list unzip python-pillow))
29548 (home-page "https://github.com/hMatoba/Piexif")
29549 (synopsis "Simplify exif manipulations with Python")
29550 (description "Piexif simplifies interacting with EXIF data in
29551 Python. It includes the tools necessary for extracting, creating,
29552 manipulating, converting and writing EXIF data to JPEG, WebP and TIFF files.")
29553 (license license:expat)))
29554
29555 (define-public python-pyrss2gen
29556 (package
29557 (name "python-pyrss2gen")
29558 (version "1.1")
29559 (source
29560 (origin
29561 (method url-fetch)
29562 (uri (pypi-uri "PyRSS2Gen" version))
29563 (sha256
29564 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
29565 (build-system python-build-system)
29566 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
29567 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
29568 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
29569 PyRSS2Gen builds the feed up by using a XML generator.")
29570 (license license:bsd-3)))
29571
29572 (define-public python-yapsy
29573 (package
29574 (name "python-yapsy")
29575 (version "1.12.2")
29576 (source
29577 (origin
29578 (method url-fetch)
29579 (uri (pypi-uri "Yapsy" version))
29580 (sha256
29581 (base32 "12rznbnswfw0w7qfbvmmffr9r317gl1rqg36nijwzsklkjgks4fq"))))
29582 (build-system python-build-system)
29583 (home-page "http://yapsy.sourceforge.net")
29584 (synopsis "Simple plugin system for Python applications")
29585 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
29586 implementing the core mechanisms needed to build a plugin system into a wider
29587 application.
29588
29589 The main purpose is to depend only on Python's standard libraries and to
29590 implement only the basic functionalities needed to detect, load and keep track
29591 of several plugins.")
29592 (license license:bsd-3)))
29593
29594 (define-public python-doit
29595 (package
29596 (name "python-doit")
29597 (version "0.34.0")
29598 (source
29599 (origin
29600 (method url-fetch)
29601 (uri (pypi-uri "doit" version))
29602 (sha256
29603 (base32 "0bf0m9n0hyjvjpv051zd26725j8jr23gyvc37v3kkadwbh8dxwcf"))))
29604 (build-system python-build-system)
29605 (propagated-inputs
29606 (list python-cloudpickle python-pyinotify))
29607 (native-inputs
29608 (list python-pytest))
29609 (home-page "https://pydoit.org")
29610 (synopsis "Automation tool to execute any kind of task in a build-tools
29611 fashion")
29612 (description "doit is an automation tool that brings the power of
29613 build-tools to execute any kind of task.
29614
29615 A task describes some computation to be done (actions), and contains some
29616 extra meta-data. The actions can be external programs or Python functions. A
29617 single task may define more than one action.doit uses the task’s meta-data
29618 to:
29619
29620 @itemize
29621 @item cache task results
29622 @item correct execution order
29623 @item parallel execution
29624 @item powerful dependency system
29625 @end itemize")
29626 (license license:expat)))
29627
29628 (define-public python-phpserialize
29629 (package
29630 (name "python-phpserialize")
29631 (version "1.3")
29632 (source
29633 (origin
29634 (method url-fetch)
29635 (uri (pypi-uri "phpserialize" version))
29636 (sha256
29637 (base32 "19qgkb9z4zjbjxlpwh2w6pxkz2j3iymnydi69jl0jg905lqjsrxz"))))
29638 (build-system python-build-system)
29639 (arguments
29640 (list
29641 ;; tests missing in pypi archive, anhow they are quite simple and not worth any hassle
29642 #:tests? #f))
29643 (home-page "http://github.com/mitsuhiko/phpserialize")
29644 (synopsis "Python port of the serialize and unserialize functions of PHP")
29645 (description
29646 "This package provides a port of the serialize and unserialize functions of PHP for Python")
29647 (license license:bsd-3)))
29648
29649 (define-public nikola
29650 (package
29651 (name "nikola")
29652 (version "8.2.2")
29653 (source
29654 (origin
29655 (method url-fetch)
29656 (uri (pypi-uri "Nikola" version))
29657 (sha256
29658 (base32 "1h96y4sfypp2fbqxa8xrqch5f7r3srm2ly222k9w2n143h2spx4m"))))
29659 (build-system python-build-system)
29660 (propagated-inputs
29661 (list python-babel
29662 python-blinker
29663 python-dateutil
29664 python-docutils
29665 python-doit
29666 python-jinja2 ;; for themes
29667 python-lxml
29668 python-mako
29669 python-markdown
29670 python-natsort
29671 python-notebook ;; for ipynb
29672 python-phpserialize ;; for wordpress import
29673 python-piexif
29674 python-pillow
29675 python-pygments
29676 python-pyrss2gen
29677 python-requests
29678 python-ruamel.yaml ;; for YAML metadata
29679 python-unidecode
29680 python-yapsy))
29681 (native-inputs
29682 (list python-coverage
29683 python-flake8
29684 python-freezegun
29685 python-pytest
29686 python-pytest-cov))
29687 (arguments
29688 (list
29689 #:phases
29690 #~(modify-phases %standard-phases
29691 (replace 'check
29692 (lambda* (#:key tests? #:allow-other-keys)
29693 (when tests?
29694 (invoke "pytest" "tests" "--no-cov"
29695 "-k" "not test_compiling_markdown[hilite]")))))))
29696 (home-page "https://getnikola.com/")
29697 (synopsis "Modular, fast and simple static website and blog generator")
29698 (description "Nikola generates static websites and blogs. Out of the box,
29699 it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
29700 and has plugins for many other formats.")
29701 (license license:expat)))
29702
29703 (define-public nbss-upload
29704 (package
29705 (name "nbss-upload")
29706 (version "0.1")
29707 (source
29708 (origin
29709 (method url-fetch)
29710 (uri (pypi-uri "nbss-upload" version))
29711 (sha256
29712 (base32 "0jhyfm7w2ssknmh9789fmpnf79xr7sxbdcjwak6hfha6qparvk38"))))
29713 (build-system python-build-system)
29714 (propagated-inputs
29715 (list python-requests))
29716 (arguments
29717 `(#:tests? #f)) ;no tests
29718 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
29719 (synopsis "Upload notebooks to a notebooksharing.space instance")
29720 (description
29721 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
29722 notebooksharing.space instance.")
29723 (license license:bsd-3)))
29724
29725 (define-public python-reedsolo
29726 (package
29727 (name "python-reedsolo")
29728 (version "1.5.4")
29729 (source
29730 (origin
29731 (method url-fetch)
29732 (uri (pypi-uri "reedsolo" version))
29733 (sha256
29734 (base32 "09q15ji9iac3nmmxrcdvz8ynldvvqanqy3hs6q3cp327hgf5rcmq"))))
29735 (build-system python-build-system)
29736 (home-page "https://github.com/tomerfiliba/reedsolomon")
29737 (synopsis "Pure-Python Reed Solomon encoder/decoder")
29738 (description "A pure-python universal errors-and-erasures Reed-Solomon
29739 Codec, based on the tutorial at Wikiversity. This is a burst-type
29740 implementation, so that it supports any Galois field higher than 2^3,
29741 but not binary streams.")
29742 (license license:public-domain)))
29743
29744 (define-public python-esprima
29745 (package
29746 (name "python-esprima")
29747 (version "4.0.1")
29748 (source
29749 (origin
29750 (method url-fetch)
29751 (uri (pypi-uri "esprima" version))
29752 (sha256
29753 (base32 "1vi32g991lxcxzmncfiszh8m9bwkh4887szskkdi0a9wdn3imnq8"))))
29754 (build-system python-build-system)
29755 (home-page "https://github.com/Kronuz/esprima-python")
29756 (synopsis
29757 "ECMAScript parsing infrastructure for analysis in Python")
29758 (description
29759 "This package provides ECMAScript parsing infrastructure for
29760 multipurpose analysis in Python.")
29761 (license license:bsd-3)))
29762
29763 (define-public python-types-dataclasses
29764 (package
29765 (name "python-types-dataclasses")
29766 (version "0.6.1")
29767 (source (origin
29768 (method url-fetch)
29769 (uri (pypi-uri "types-dataclasses" version))
29770 (sha256
29771 (base32
29772 "1mq6qd365m8ml889zl5dxj9kncjv71iq1d1fvgj59y0ixlpm6s35"))))
29773 (build-system python-build-system)
29774 (home-page "https://github.com/python/typeshed")
29775 (synopsis "Typing stubs for dataclasses")
29776 (description
29777 "This package provides a collection of library stubs for Python, with
29778 static types.")
29779 (license license:asl2.0)))
29780
29781 (define-public python-types-docutils
29782 (package
29783 (name "python-types-docutils")
29784 (version "0.18.2")
29785 (source
29786 (origin
29787 (method url-fetch)
29788 (uri (pypi-uri "types-docutils" version))
29789 (sha256
29790 (base32 "14ypv0x6fk1pjw0bvvr1lkb2g6dvq2pwvbd5b5pzjl6182fhmaim"))))
29791 (build-system python-build-system)
29792 (home-page "https://github.com/python/typeshed")
29793 (synopsis "Typing stubs for docutils")
29794 (description "This package provides a collection of library stubs for
29795 Python, with static types.")
29796 (license license:asl2.0)))
29797
29798 (define-public python-psycopg2-binary
29799 (package
29800 (name "python-psycopg2-binary")
29801 (version "2.9.3")
29802 (source (origin
29803 (method url-fetch)
29804 (uri (pypi-uri "psycopg2-binary" version))
29805 (sha256
29806 (base32
29807 "0kpaxg3lg5wg5ww5kxmzi2z2d7arsx13ci915d8a2pf17lqza7bn"))))
29808 (build-system python-build-system)
29809 (inputs (list postgresql))
29810 (arguments
29811 ;; Tests are disable because they need a live instance of PostgreSQL.
29812 '(#:tests? #f))
29813 (home-page "https://psycopg.org/")
29814 (synopsis "PostgreSQL database adapter for Python")
29815 (description
29816 "Psycopg is a PostgreSQL database adapter for the Python programming
29817 language. Its main features are the complete implementation of the Python DB
29818 API 2.0 specification and the thread safety (several threads can share the
29819 same connection). It was designed for heavily multi-threaded applications
29820 that create and destroy lots of cursors and make a large number of concurrent
29821 @code{INSERT}s or @code{UPDATE}s.
29822
29823 Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
29824 being both efficient and secure. It features client-side and
29825 server-side cursors, asynchronous communication and notifications,
29826 @code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
29827 out-of-the-box and adapted to matching PostgreSQL data types;
29828 adaptation can be extended and customized thanks to a flexible objects
29829 adaptation system.
29830
29831 Psycopg 2 is both Unicode and Python 3 friendly.")
29832 (license license:lgpl3+)))
29833
29834 (define-public python-pyfuse3
29835 (package
29836 (name "python-pyfuse3")
29837 (version "3.2.1")
29838 (source
29839 (origin
29840 (method url-fetch)
29841 (uri (pypi-uri "pyfuse3" version))
29842 (sha256
29843 (base32 "0cvybynv9igssfa4l13q09gb6m7afmwk34wsbq8jk14sqpd4dl92"))))
29844 (build-system python-build-system)
29845 (native-inputs (list pkg-config))
29846 (inputs (list fuse-3))
29847 (propagated-inputs (list python-pytest-trio))
29848 (home-page "https://github.com/libfuse/pyfuse3")
29849 (synopsis "Python bindings FUSE 3")
29850 (description "This package provides Python 3 bindings for libfuse 3 with
29851 async I/O support.")
29852 (license license:gpl2+)))
29853
29854 (define-public python-ansicolors
29855 (package
29856 (name "python-ansicolors")
29857 (version "1.1.8")
29858 (source
29859 (origin
29860 (method url-fetch)
29861 (uri (pypi-uri "ansicolors" version ".zip"))
29862 (sha256
29863 (base32 "1q3jqglkq4z0f6nkkn8bswcwqg012i2grrc27kabr8286dg4zycr"))))
29864 (build-system python-build-system)
29865 (native-inputs
29866 (list python-tox
29867 python-pytest-cov
29868 unzip))
29869 (home-page "https://github.com/jonathaneunice/colors/")
29870 (synopsis "ANSI colors for Python")
29871 (description
29872 "This package adds ANSI colors and decorations to your strings.")
29873 (license license:isc)))
29874
29875 (define-public python-types-freezegun
29876 (package
29877 (name "python-types-freezegun")
29878 (version "1.1.8")
29879 (source
29880 (origin
29881 (method url-fetch)
29882 (uri (pypi-uri "types-freezegun" version))
29883 (sha256
29884 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
29885 (build-system python-build-system)
29886 (home-page "https://github.com/python/typeshed")
29887 (synopsis "Typing stubs for @code{freezegun}")
29888 (description "This package contains typing stubs for for @code{freezegun}, a
29889 very small subset the Python stubs contained in the complete @code{typeshed}
29890 collection.")
29891 (license license:asl2.0)))
29892
29893 (define-public python-types-protobuf
29894 (package
29895 (name "python-types-protobuf")
29896 (version "3.20.1")
29897 (source (origin
29898 (method url-fetch)
29899 (uri (pypi-uri "types-protobuf" version))
29900 (sha256
29901 (base32
29902 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
29903 (build-system python-build-system)
29904 (home-page "https://github.com/python/typeshed")
29905 (synopsis "Typing stubs for @code{protobuf}")
29906 (description "This package contains typing stubs for @code{protobuf}, a
29907 very small subset the Python stubs contained in the complete @code{typeshed}
29908 collection.")
29909 (license license:asl2.0)))
29910
29911 (define-public python-types-pytz
29912 (package
29913 (name "python-types-pytz")
29914 (version "2021.3.6")
29915 (source
29916 (origin
29917 (method url-fetch)
29918 (uri (pypi-uri "types-pytz" version))
29919 (sha256
29920 (base32 "14yr5hg2ww8s4a0mz2bkd549fv8qgm538fnzxvqv92ld1pcpym3l"))))
29921 (build-system python-build-system)
29922 (home-page "https://github.com/python/typeshed")
29923 (synopsis "Typing stubs for pytz")
29924 (description "This package contains typing stubs for @code{pytz}, a very
29925 small subset the Python stubs contained in the complete @code{typeshed}
29926 collection.")
29927 (license license:asl2.0)))
29928
29929 (define-public python-types-toml
29930 (package
29931 (name "python-types-toml")
29932 (version "0.10.5")
29933 (source
29934 (origin
29935 (method url-fetch)
29936 (uri (pypi-uri "types-toml" version))
29937 (sha256
29938 (base32 "10400bd3yv6rjfnq8galskkbpqz1sfx9sfgr5qwvw04270x4cjgr"))))
29939 (build-system python-build-system)
29940 (home-page "https://github.com/python/typeshed")
29941 (synopsis "Typing stubs for TOML")
29942 (description "This package contains typing stubs for TOML, a very small
29943 subset the Python stubs contained in the complete @code{typeshed}
29944 collection.")
29945 (license license:asl2.0)))
29946
29947 (define-public python-types-ujson
29948 (package
29949 (name "python-types-ujson")
29950 (version "4.2.1")
29951 (source (origin
29952 (method url-fetch)
29953 (uri (pypi-uri "types-ujson" version))
29954 (sha256
29955 (base32
29956 "0k9n9hsq4k2zaakdwbkcsvi7m8d3mv2y9yl6f171y58ld4qpcxcy"))))
29957 (build-system python-build-system)
29958 (home-page "https://github.com/python/typeshed")
29959 (synopsis "Typing stubs for ujson")
29960 (description
29961 "This is a PEP 561 type stub package for the ujson package. It can be
29962 used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
29963 uses ujson.")
29964 (license license:asl2.0)))
29965
29966 (define-public python-stltools
29967 (package
29968 (name "python-stltools")
29969 (version "2022.01.20")
29970 (source (origin
29971 (method git-fetch)
29972 (uri (git-reference
29973 (url "https://github.com/rsmith-nl/stltools")
29974 (commit version)))
29975 (file-name (git-file-name name version))
29976 (sha256
29977 (base32
29978 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
29979 (build-system python-build-system)
29980 (arguments
29981 `(#:use-setuptools? #f
29982 #:phases
29983 (modify-phases %standard-phases
29984 (delete 'build)
29985 (replace 'install
29986 (lambda* (#:key inputs outputs #:allow-other-keys)
29987 (let ((moddir (string-append (site-packages inputs outputs) "/stltools"))
29988 (bindir (string-append (assoc-ref outputs "out") "/bin")))
29989 (copy-recursively "stltools" moddir)
29990 (mkdir-p bindir)
29991 (for-each
29992 (lambda (script)
29993 (let ((source (string-append script ".py"))
29994 (target (string-append bindir "/" script)))
29995 (copy-file source target)
29996 (chmod target #o555)))
29997 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo")))))
29998 (replace 'check
29999 (lambda* (#:key tests? #:allow-other-keys)
30000 (when tests?
30001 (invoke "py.test" "-v")))))))
30002 (propagated-inputs (list python-pycairo))
30003 (native-inputs (list python-pytest))
30004 (home-page "https://github.com/rsmith-nl/stltools")
30005 (synopsis "Python modules and scripts for handling STL files")
30006 (description "This package consists of Python modules and scripts for
30007 manipulating stereolithography (STL) files. It can convert STL files into
30008 POV-ray meshes, PDF and PostScript. The Python modules allow for reading and
30009 writing STL files. It supports both the text and binary forms of STL.")
30010 (license license:expat)))
30011
30012 (define-public python-multipart
30013 (package
30014 (name "python-multipart")
30015 (version "0.0.5")
30016 (source (origin
30017 (method url-fetch)
30018 (uri (pypi-uri "python-multipart" version))
30019 (sha256
30020 (base32
30021 "0hzshd665rl1bkwvaj9va4j3gs8nmb478fbvligx20663xhmzfzp"))))
30022 (build-system python-build-system)
30023 (propagated-inputs (list python-six))
30024 (native-inputs (list python-pyyaml python-mock python-pytest-cov))
30025 (arguments
30026 `(#:phases (modify-phases %standard-phases
30027 ;; There is a bug in the test_suit specification.
30028 (add-after 'unpack 'patch-test-suite
30029 (lambda _
30030 ;; Make compatible with PyYAML 6.
30031 (substitute* "multipart/tests/test_multipart.py"
30032 (("yaml.load")
30033 "yaml.safe_load"))
30034 (substitute* "setup.py"
30035 (("test_suite = 'multipart.tests.suite'")
30036 "test_suite = 'multipart.tests.test_multipart.suite'"))
30037 ;; Needed by PyYAML 6.0.
30038 (substitute* "multipart/tests/test_multipart.py"
30039 (("yaml_data = yaml.load\\(f\\)")
30040 "yaml_data = yaml.load(f, Loader=yaml.SafeLoader)")))))))
30041 (home-page "https://github.com/andrew-d/python-multipart")
30042 (synopsis "Streaming multipart parser for Python")
30043 (description
30044 "This package provides a streaming multipart parser for Python.")
30045 (license license:asl2.0)))
30046
30047 (define-public python-aiopg
30048 (package
30049 (name "python-aiopg")
30050 (version "1.3.3")
30051 (source (origin
30052 (method url-fetch)
30053 (uri (pypi-uri "aiopg" version))
30054 (sha256
30055 (base32
30056 "1mwmypsfzh8adjbyvf7kqv9h3k1kf5ykhi1g3ahw4wqdxaj6nz2l"))))
30057 (build-system python-build-system)
30058 (native-inputs (list python-sqlalchemy))
30059 (propagated-inputs (list python-async-timeout python-psycopg2-binary))
30060 (home-page "https://aiopg.readthedocs.io")
30061 (synopsis "Postgres integration with asyncio")
30062 (description
30063 "aiopg is a library for accessing a PostgreSQL
30064 database from the asyncio (PEP-3156/tulip) framework. It wraps
30065 asynchronous features of the Psycopg database driver.")
30066 (license license:bsd-3)))
30067
30068 (define-public python-verspec
30069 (package
30070 (name "python-verspec")
30071 (version "0.1.0")
30072 (source (origin
30073 (method url-fetch)
30074 (uri (pypi-uri "verspec" version))
30075 (sha256
30076 (base32
30077 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
30078 (build-system python-build-system)
30079 (native-inputs (list python-coverage python-flake8 python-mypy
30080 python-pretend python-pytest))
30081 (arguments
30082 `(#:phases (modify-phases %standard-phases
30083 (replace 'check
30084 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30085 (when tests?
30086 (add-installed-pythonpath inputs outputs)
30087 (invoke "touch" "test/__init__.py")
30088 (invoke "pytest")))))))
30089 (home-page "https://github.com/jimporter/verspec")
30090 (synopsis "Flexible version handling for Python")
30091 (description
30092 "This Python library handles software versions and specifiers. It is
30093 adapted from the @code{packaging} package.")
30094 (license (list license:bsd-2 license:asl2.0))))
30095
30096 (define-public python-shtab
30097 (package
30098 (name "python-shtab")
30099 (version "1.5.3")
30100 (source
30101 (origin
30102 (method url-fetch)
30103 (uri (pypi-uri "shtab" version))
30104 (sha256
30105 (base32 "127mymfm7r0hddk2vknqq34fj6dirj6ip990i3g4isx0lsd7pnsc"))))
30106 (build-system python-build-system)
30107 (native-inputs
30108 (list bash
30109 python-pytest
30110 python-pytest-cov
30111 python-pytest-timeout
30112 python-setuptools-scm
30113 python-wheel))
30114 (arguments
30115 `(#:phases
30116 (modify-phases %standard-phases
30117 (replace
30118 'check
30119 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30120 (when tests?
30121 (add-installed-pythonpath inputs outputs)
30122 (invoke "pytest")))))))
30123 (home-page "https://github.com/iterative/shtab")
30124 (synopsis "Automagic shell tab completion for Python CLI applications")
30125 (description
30126 "This package automatically generates shell tab completion scripts for
30127 Python CLI apps.")
30128 (license license:asl2.0)))
30129
30130 (define-public python-style
30131 (package
30132 (name "python-style")
30133 (version "1.1.6")
30134 (source
30135 (origin
30136 (method url-fetch)
30137 (uri (pypi-uri "style" version))
30138 (sha256
30139 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
30140 (build-system python-build-system)
30141 (home-page "https://github.com/lmittmann/style")
30142 (synopsis "Terminal string styling")
30143 (description
30144 "@code{python-style} is a simple terminal string styling package. Its API is
30145 a port of the chalk package for javascript.")
30146 (license license:expat)))
30147
30148 (define-public python-sre-yield
30149 (package
30150 (name "python-sre-yield")
30151 (version "1.2")
30152 (source
30153 (origin
30154 (method url-fetch)
30155 (uri (pypi-uri "sre_yield" version))
30156 (sha256
30157 (base32
30158 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
30159 (build-system python-build-system)
30160 (native-inputs (list python-nose))
30161 (home-page "https://github.com/google/sre_yield")
30162 (synopsis "Expands a regular expression to its possible matches")
30163 (description
30164 "The goal of sre_yield is to efficiently generate all values that can
30165 match a given regular expression, or count possible matches efficiently. It
30166 uses the parsed regular expression, so you get a much more accurate result
30167 than trying to just split strings.")
30168 (license license:asl2.0)))
30169
30170 (define-public python-pyperf
30171 (package
30172 (name "python-pyperf")
30173 (version "2.3.1")
30174 (source
30175 (origin
30176 (method url-fetch)
30177 (uri (pypi-uri "pyperf" version))
30178 (sha256
30179 (base32 "189qf9wdbig0fk4n3bavx8acgdbay5lllfvw48jvbfaafb7y5hja"))))
30180 (build-system python-build-system)
30181 (arguments
30182 '(#:phases
30183 (modify-phases %standard-phases
30184 (add-after 'unpack 'fix-tests
30185 (lambda _
30186 ;; Some of these tests fail with:
30187 ;;
30188 ;; ModuleNotFoundError: No module named 'pyperf'
30189 ;;
30190 ;; even when calling ‘add-installed-pythonpath’ in the ‘check’
30191 ;; phase.
30192 (delete-file "pyperf/tests/test_examples.py")))
30193 (replace 'check
30194 (lambda* (#:key tests? #:allow-other-keys)
30195 (when tests?
30196 ;; From tox.ini's ‘testenv.commands’.
30197 (invoke "python" "-bb" "-Wd"
30198 "-m" "unittest" "discover"
30199 "-s" "pyperf/tests/" "-v")))))))
30200 (native-inputs
30201 (list python-psutil))
30202 (home-page "https://github.com/psf/pyperf")
30203 (synopsis "Toolkit for running Python benchmarks")
30204 (description "The Python @code{pyperf} module is a toolkit for writing,
30205 running and analyzing benchmarks. It features a simple API that can:
30206
30207 @itemize
30208 @item automatically calibrate a benchmark for a time budget;
30209 @item spawn multiple worker processes;
30210 @item compute the mean and standard deviation;
30211 @item detect if a benchmark result seems unstable;
30212 @item store benchmark results in JSON format;
30213 @item support multiple units: seconds, bytes and integer.
30214 @end itemize")
30215 (license license:expat)))
30216
30217 (define-public python-pydispatcher
30218 (package
30219 (name "python-pydispatcher")
30220 (version "2.0.5")
30221 (source
30222 (origin
30223 (method url-fetch)
30224 (uri (pypi-uri "PyDispatcher" version))
30225 (sha256
30226 (base32 "1bswbmhlbqdxlgbxlb6xrlm4k253sg8nvpl1whgsys8p3fg0cw2m"))))
30227 (build-system python-build-system)
30228 (arguments
30229 `(#:phases
30230 (modify-phases %standard-phases
30231 (replace 'check
30232 (lambda* (#:key tests? #:allow-other-keys)
30233 (when tests?
30234 (invoke "pytest")))))))
30235 (native-inputs (list python-pytest))
30236 (home-page "http://pydispatcher.sourceforge.net")
30237 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
30238 (description "PyDispatcher is an enhanced version of Patrick K. O’Brien’s
30239 original @code{dispatcher.py} module. It provides the Python programmer with
30240 a robust mechanism for event routing within various application contexts.
30241
30242 Included in the package are the robustapply and saferef modules, which
30243 provide the ability to selectively apply arguments to callable objects
30244 and to reference instance methods using weak-references.")
30245 (license license:bsd-3)))
30246
30247 (define-public python-queuelib
30248 (package
30249 (name "python-queuelib")
30250 (version "1.6.2")
30251 (source
30252 (origin
30253 (method url-fetch)
30254 (uri (pypi-uri "queuelib" version))
30255 (sha256
30256 (base32 "1lpwq8wx3025i14y5h0hbald2ypbarf081pql6cqcak4y9kp482b"))))
30257 (build-system python-build-system)
30258 (native-inputs (list python-pytest))
30259 (home-page "https://github.com/scrapy/queuelib")
30260 (synopsis
30261 "Collection of persistent (disk-based) and non-persistent (memory-based) queues")
30262 (description "Queuelib is a Python library that implements object
30263 collections which are stored in memory or persisted to disk, provide a
30264 simple API, and run fast.
30265
30266 Queuelib provides collections for queues (FIFO), stacks (LIFO), queues
30267 sorted by priority and queues that are emptied in a round-robin
30268 fashion.")
30269 (license license:bsd-3)))
30270
30271 (define-public python-posix-ipc
30272 (package
30273 (name "python-posix-ipc")
30274 (version "1.0.5")
30275 (source
30276 (origin
30277 ;; The source distributed on PyPI is prebuild.
30278 (method git-fetch)
30279 (uri (git-reference
30280 (url "https://github.com/osvenskan/posix_ipc")
30281 (commit (string-append "rel" version))))
30282 (file-name (git-file-name name version))
30283 (sha256
30284 (base32 "17y4d0pmvp199c5hbs602ailhlh9f9zv89kmpbd8jhyl6rgaxsvs"))))
30285 (build-system python-build-system)
30286 (arguments
30287 (list #:phases
30288 #~(modify-phases %standard-phases
30289 (add-after 'unpack 'patch-cc-path
30290 (lambda _
30291 (substitute* "prober.py"
30292 (("cmd = .cc")
30293 (string-append "cmd = \"" #$(cc-for-target)))))))))
30294 (home-page "http://semanchuk.com/philip/posix_ipc/")
30295 (synopsis "POSIX IPC primitives for Python")
30296 (description
30297 "This package provides POSIX IPC primitives - semaphores, shared memory and
30298 message queues for Python.")
30299 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
30300
30301 (define-public python-itemadapter
30302 (package
30303 (name "python-itemadapter")
30304 (version "0.5.0")
30305 (source
30306 (origin
30307 (method url-fetch)
30308 (uri (pypi-uri "itemadapter" version))
30309 (sha256
30310 (base32 "083wp3h2brh8x19jbdr8rz3biqwp3jlqd0rfzcyrjyhssffsgdh5"))))
30311 (build-system python-build-system)
30312 (home-page "https://github.com/scrapy/itemadapter")
30313 (synopsis "Common interface for data container classes")
30314 (description "The ItemAdapter class is a wrapper for data container
30315 objects, providing a common interface to handle objects of different
30316 types in an uniform manner, regardless of their underlying implementation.
30317
30318 Currently supported types are:
30319 @itemize
30320 @item scrapy.item.Item
30321 @item dict
30322 @item dataclass-based classes
30323 @item attrs-based classes
30324 @item pydantic-based classes
30325 @end itemize
30326
30327 Additionally, interaction with arbitrary types is supported by
30328 implementing a pre-defined interface.")
30329 (license license:bsd-3)))
30330
30331 (define-public python-itemloaders
30332 (package
30333 (name "python-itemloaders")
30334 (version "1.0.4")
30335 (source
30336 (origin
30337 (method url-fetch)
30338 (uri (pypi-uri "itemloaders" version))
30339 (sha256
30340 (base32 "15hc78h90qhwass1bga1c3xar2dd6j8sxg61zg6jvh74lf6csxqj"))))
30341 (build-system python-build-system)
30342 (propagated-inputs
30343 (list python-itemadapter python-jmespath python-parsel python-w3lib))
30344 (home-page "https://github.com/scrapy/itemloaders")
30345 (synopsis "Base library for scrapy's ItemLoader")
30346 (description "Itemloaders is a library that helps you collect data
30347 from HTML and XML sources. It comes in handy to extract data from web
30348 pages, as it supports data extraction using CSS and XPath Selectors.
30349
30350 It’s specially useful when you need to standardize the data from many
30351 sources. For example, it allows you to have all your casting and
30352 parsing rules in a single place.")
30353 (license license:bsd-3)))
30354
30355 (define-public python-hypy-utils
30356 (package
30357 (name "python-hypy-utils")
30358 (version "1.0.6")
30359 (source (origin
30360 (method url-fetch)
30361 (uri (pypi-uri "hypy_utils" version))
30362 (sha256
30363 (base32
30364 "05csk0x8ivavq88x457cq5hwjcdirfbkzj7bbg5qgnpnf2dxxhiw"))))
30365 (build-system python-build-system)
30366 (home-page "https://github.com/hykilpikonna/HyPyUtils")
30367 (synopsis "Python utility functions for HyDEV")
30368 (description "This module provides Python utility functions for modifying
30369 and setting the color of terminal output, via HyDEV.")
30370 (license license:expat)))
30371
30372 (define-public python-mike
30373 (package
30374 (name "python-mike")
30375 (version "1.1.2")
30376 (source (origin
30377 (method url-fetch)
30378 (uri (pypi-uri "mike" version))
30379 (sha256
30380 (base32
30381 "0yxp816x7s948xsd0fifvq9shg01xdxlifd9rzf5y2rd9iwz3hsn"))))
30382 (build-system python-build-system)
30383 (native-inputs
30384 (list python-coverage python-flake8 python-shtab))
30385 (propagated-inputs
30386 (list python-jinja2 python-mkdocs python-pyyaml python-verspec))
30387 (home-page "https://github.com/jimporter/mike")
30388 (synopsis "Manage multiple versions of MkDocs-powered documentation")
30389 (description
30390 "This package provides a Python utility to easily deploy multiple
30391 versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
30392 to Github via gh-pages.")
30393 (license license:bsd-3)))
30394
30395 (define-public python-arpeggio
30396 (package
30397 (name "python-arpeggio")
30398 (version "2.0.0")
30399 (source (origin
30400 (method url-fetch)
30401 (uri (pypi-uri "Arpeggio" version))
30402 (sha256
30403 (base32
30404 "0ggdsck1wpladd5bh9drhkmm86bblgk2wagrhn3sdf4v04wkic6n"))))
30405 (build-system python-build-system)
30406 (native-inputs (list python-coverage
30407 python-coveralls
30408 python-flake8
30409 python-mike
30410 python-mkdocs
30411 python-pytest
30412 python-pytest-runner
30413 python-twine
30414 python-wheel))
30415 (home-page "https://github.com/textX/Arpeggio")
30416 (synopsis "Packrat parser interpreter for Python")
30417 (description
30418 "This Python library provides a recursive descent parser with backtracking
30419 and memoization (a.k.a. packrat parser). Arpeggio grammars are based on PEG
30420 formalism. Arpeggio's main use is a foundation for a toolchain for DSL
30421 development but it can be used for all sorts of general purpose parsing.")
30422 (license license:expat)))
30423
30424 (define-public python-flatten-json
30425 (package
30426 (name "python-flatten-json")
30427 (version "0.1.13")
30428 (source
30429 (origin
30430 (method url-fetch)
30431 (uri (pypi-uri "flatten_json" version))
30432 (sha256
30433 (base32 "007m28gfs7pmz2rqqjxpial6skzw26hrfi8vrdy9agi9x0rj6dgf"))))
30434 (build-system python-build-system)
30435 (propagated-inputs (list python-six))
30436 (home-page "https://github.com/amirziai/flatten")
30437 (synopsis "Flatten JSON objects")
30438 (description
30439 "The @code{flatten_json} Python library flattens the hierarchy in your
30440 object, which can be useful if you want to force your objects into a table.")
30441 (license license:expat)))
30442
30443 (define-public python-deepmerge
30444 (package
30445 (name "python-deepmerge")
30446 (version "1.0.1")
30447 (source
30448 (origin
30449 (method url-fetch)
30450 (uri (pypi-uri "deepmerge" version))
30451 (sha256
30452 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
30453 (build-system pyproject-build-system)
30454 (arguments
30455 (list
30456 #:phases
30457 #~(modify-phases %standard-phases
30458 (add-before 'build 'set-version
30459 (lambda _
30460 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
30461 (native-inputs
30462 (list python-setuptools-scm
30463 python-pytest))
30464 (home-page "https://deepmerge.readthedocs.io/en/latest/")
30465 (synopsis "Merge nested data structures")
30466 (description
30467 "The @code{deep-merge} Python library provides a toolset to deeply merge
30468 nested data structures in Python like lists and dictionaries.")
30469 (license license:expat)))
30470
30471 (define-public python-murmurhash3
30472 (package
30473 (name "python-murmurhash3")
30474 (version "2.3.5")
30475 (source (origin
30476 (method url-fetch)
30477 (uri (pypi-uri "murmurhash3" version))
30478 (sha256
30479 (base32
30480 "1gdzys1212dx70byz07ipknbw1awbqskh6aznlkm85js8b8qfczm"))))
30481 (build-system python-build-system)
30482 (native-inputs (list python-cython python-pytest))
30483 (inputs (list python))
30484 (arguments
30485 (list #:modules
30486 '((ice-9 ftw) (ice-9 match)
30487 (guix build utils)
30488 (guix build python-build-system))
30489 #:phases
30490 #~(modify-phases %standard-phases
30491 (add-after 'unpack 'set-source-file-times-to-1980
30492 (lambda _
30493 (let ((circa-1980 (* 10 366 24 60 60)))
30494 (ftw "."
30495 (lambda (file stat flag)
30496 (utime file circa-1980 circa-1980) #t))))))))
30497 (home-page "https://github.com/veegee/mmh3")
30498 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
30499 (description
30500 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
30501 of fast and robust hash functions. This library is a Python extension module
30502 written in C.")
30503 (license license:public-domain)))
30504
30505 (define-public python-murmurhash
30506 (package
30507 (name "python-murmurhash")
30508 (version "1.0.7")
30509 (source (origin
30510 (method url-fetch)
30511 (uri (pypi-uri "murmurhash" version))
30512 (sha256
30513 (base32
30514 "0vwkn98c703nvsigl2nz99rax2pafkx3djjfkgc49jiipmp3j2k3"))))
30515 (build-system python-build-system)
30516 (native-inputs (list python-cython python-pytest))
30517 (inputs (list python python-murmurhash3))
30518 (arguments
30519 (list #:modules
30520 '((ice-9 ftw) (ice-9 match)
30521 (guix build utils)
30522 (guix build python-build-system))
30523 #:phases
30524 #~(modify-phases %standard-phases
30525 (add-after 'unpack 'set-source-file-times-to-1980
30526 (lambda _
30527 (let ((circa-1980 (* 10 366 24 60 60)))
30528 (ftw "."
30529 (lambda (file stat flag)
30530 (utime file circa-1980 circa-1980) #t))))))))
30531 (home-page "https://github.com/explosion/murmurhash")
30532 (synopsis "Cython bindings for MurmurHash2")
30533 (description "This package provides Cython bindings for MurmurHash2.")
30534 (license license:expat)))
30535
30536 ;; Scooby requires for its test suite a ‘pyvips’ package that is missing its
30537 ;; VIPS dependency.
30538 (define python-pyvips-for-python-scooby
30539 (package
30540 (inherit python-pyvips)
30541 (name "python-pyvips-for-python-scooby")
30542 (arguments
30543 (substitute-keyword-arguments (package-arguments python-pyvips)
30544 ((#:phases phases)
30545 #~(modify-phases #$phases
30546 (delete 'fix-paths)
30547 ;; The checks won't succeed without VIPS.
30548 (delete 'check)
30549 (delete 'sanity-check)))))
30550 (inputs
30551 (modify-inputs (package-inputs python-pyvips)
30552 (delete "vips")))
30553 (synopsis "pyvips for Scooby's test suite")))
30554
30555 (define-public python-scooby
30556 (package
30557 (name "python-scooby")
30558 (version "0.5.12")
30559 (source
30560 ;; The PyPI tarball does not contain the tests.
30561 (origin
30562 (method git-fetch)
30563 (uri (git-reference
30564 (url "https://github.com/banesullivan/scooby")
30565 (commit (string-append "v" version))))
30566 (file-name (git-file-name name version))
30567 (sha256
30568 (base32 "1gkpmz8wl3jg8ylf1na35308sznw2g9wx33zqlyq5i2gpy2ml9mw"))))
30569 (build-system python-build-system)
30570 (native-inputs
30571 (list python-beautifulsoup4
30572 python-numpy
30573 python-pytest
30574 python-pytest-cov
30575 python-pyvips-for-python-scooby
30576 python-scipy))
30577 (propagated-inputs
30578 (list python-psutil))
30579 (arguments
30580 '(#:phases
30581 (modify-phases %standard-phases
30582 (add-after 'unpack 'fix-tests
30583 (lambda _
30584 (substitute* "tests/test_scooby.py"
30585 ;; The test suite uses the no-version PyPI package
30586 ;; (https://pypi.org/project/no-version/),
30587 ;; but it doesn't seem worth packaging in Guix just for this.
30588 (("scooby\\.report\\.VERSION_NOT_FOUND")
30589 "scooby.report.MODULE_NOT_FOUND")
30590 (("^ +import no_version # noqa.*") ""))))
30591 (replace 'check
30592 (lambda* (#:key tests? #:allow-other-keys)
30593 (when tests?
30594 (invoke "pytest")))))))
30595 (home-page "https://github.com/banesullivan/scooby")
30596 (synopsis "Report hardware information and Python package versions")
30597 (description
30598 "The Scooby package reports the following information about the currently
30599 running system:
30600
30601 @itemize
30602 @item operating system name;
30603 @item hardware information including machine type (e.g., @samp{i386},
30604 @samp{x86_64}, etc.), CPU count and total RAM;
30605 @item Python environment (e.g., Python, IPython, etc.);
30606 @item file system name;
30607 @item Python version;
30608 @item versions of specified Python packages.
30609 @end itemize
30610
30611 It can generate reports as HTML tables or plain text lists.
30612
30613 Scooby has no required dependencies, and only few optional dependencies.")
30614 (license license:expat)))
30615
30616 (define-public python-cymem
30617 (package
30618 (name "python-cymem")
30619 (version "2.0.6")
30620 (source (origin
30621 (method url-fetch)
30622 (uri (pypi-uri "cymem" version))
30623 (sha256
30624 (base32
30625 "0pkyy60zk9654sj991w111p1l0m8wvz36nslw96x6nb9h6sjb5qn"))))
30626 (build-system python-build-system)
30627 (native-inputs
30628 (list python-cython
30629 python-pytest))
30630 (inputs
30631 (list python))
30632 (arguments
30633 (list
30634 #:modules '((ice-9 ftw)
30635 (ice-9 match)
30636 (guix build utils)
30637 (guix build python-build-system))
30638 #:phases
30639 #~(modify-phases %standard-phases
30640 (add-after 'unpack 'set-source-file-times-to-1980
30641 ;; XXX One of the tests uses a ZIP library to pack up some of the
30642 ;; source tree, and fails with "ZIP does not support timestamps
30643 ;; before 1980". Work around this by setting the file times in the
30644 ;; source tree to sometime in early 1980.
30645 (lambda _
30646 (let ((circa-1980 (* 10 366 24 60 60)))
30647 (ftw "." (lambda (file stat flag)
30648 (utime file circa-1980 circa-1980)
30649 #t))))))))
30650 (home-page "https://github.com/explosion/cymem")
30651 (synopsis "Cython memory pool for RAII-style memory management")
30652 (description
30653 "Cymem provides two small memory-management helpers for Cython. They make it
30654 easy to tie memory to a Python object's life-cycle, so that the memory is freed
30655 when the object is garbage collected.")
30656 (license license:expat)))
30657
30658 (define-public python-preshed
30659 (package
30660 (name "python-preshed")
30661 (version "3.0.6")
30662 (source (origin
30663 (method url-fetch)
30664 (uri (pypi-uri "preshed" version))
30665 (sha256
30666 (base32
30667 "0akpydd23xqxx9d04drsnw9140rb3cv07r1zpzqz5wm0lf47afzv"))))
30668 (build-system python-build-system)
30669 (native-inputs (list python-cython python-cymem python-pytest))
30670 (inputs (list python python-cymem python-murmurhash))
30671 (arguments
30672 (list #:modules
30673 '((ice-9 ftw) (ice-9 match)
30674 (guix build utils)
30675 (guix build python-build-system))
30676 #:phases
30677 #~(modify-phases %standard-phases
30678 (add-after 'unpack 'set-source-file-times-to-1980
30679 (lambda _
30680 (let ((circa-1980 (* 10 366 24 60 60)))
30681 (ftw "."
30682 (lambda (file stat flag)
30683 (utime file circa-1980 circa-1980) #t))))))))
30684 (home-page "https://github.com/explosion/preshed")
30685 (synopsis "Cython hash tables that assume keys are pre-hashed")
30686 (description
30687 "Simple but high performance Cython hash table mapping pre-randomized keys
30688 to void* values.")
30689 (license license:expat)))
30690
30691 (define-public python-catalogue
30692 (package
30693 (name "python-catalogue")
30694 (version "2.0.7")
30695 (source (origin
30696 (method url-fetch)
30697 (uri (pypi-uri "catalogue" version))
30698 (sha256
30699 (base32
30700 "0srdxiil2xys8q1gpc1nvzhvis3a33d8a7amk2i1rlpbg6p36pak"))))
30701 (build-system python-build-system)
30702 (native-inputs (list python-pytest))
30703 (inputs (list python python-zipp python-typing-extensions python-mypy))
30704 (home-page "https://github.com/explosion/catalogue")
30705 (synopsis "Lightweight function registries for your library")
30706 (description
30707 "\"catalogue\" is a tiny, zero-dependencies library that
30708 makes it easy to add function (or object) registries to your code. Function
30709 registries are helpful when you have objects that need to be both easily
30710 serializable and fully customizable. Instead of passing a function into your
30711 object, you pass in an identifier name, which the object can use to lookup the
30712 function from the registry. This makes the object easy to serialize, because the
30713 name is a simple string. If you instead saved the function, you'd have to use
30714 Pickle for serialization, which has many drawbacks.")
30715 (license license:expat)))
30716
30717 (define-public python-wasabi
30718 (package
30719 (name "python-wasabi")
30720 (version "0.9.1")
30721 (source (origin
30722 (method url-fetch)
30723 (uri (pypi-uri "wasabi" version))
30724 (sha256
30725 (base32
30726 "1kwqfalq7qxs9f7xb2m055g01qpbznyzxl7sjnzjdvvhkczg39md"))))
30727 (build-system python-build-system)
30728 (native-inputs (list python-pytest))
30729 (home-page "https://github.com/ines/wasabi")
30730 (synopsis "Console printing and formatting toolkit")
30731 (description
30732 "This package provides a lightweight console printing and formatting
30733 toolkit for Python.")
30734 (license license:expat)))
30735
30736 (define-public python-srt
30737 (package
30738 (name "python-srt")
30739 (version "3.5.2")
30740 (source (origin
30741 (method url-fetch)
30742 (uri (pypi-uri "srt" version))
30743 (sha256
30744 (base32
30745 "0l24710spxarijmv3h7iicvx0lv6m3d4xg77nd9kyv8jwifav93s"))))
30746 (build-system python-build-system)
30747 (home-page "https://github.com/cdown/srt")
30748 (synopsis "SRT parsing library")
30749 (description
30750 "This package provides a Python library for parsing, modifying, and
30751 composing subtitles in the SRT file format.")
30752 (license license:expat)))
30753
30754 (define-public python-gatt
30755 (package
30756 (name "python-gatt")
30757 (version "0.2.7")
30758 (source (origin
30759 (method url-fetch)
30760 (uri (pypi-uri "gatt" version))
30761 (sha256
30762 (base32
30763 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
30764 (propagated-inputs (list python-dbus python-pygobject))
30765 (build-system python-build-system)
30766 (home-page "https://github.com/getsenic/gatt-python")
30767 (synopsis "Bluetooth GATT SDK for Python")
30768 (description "The Bluetooth @acronym{GATT, Generic ATTribute Profile}
30769 @acronym{SDK, Software Development Kit} for Python helps you implement and
30770 communicate with any Bluetooth Low Energy device that has a GATT
30771 profile. It supports:
30772
30773 @itemize @bullet
30774 @item Discovering nearby Bluetooth Low Energy devices
30775 @item Connecting and disconnecting devices
30776 @item Implementing your custom GATT profile
30777 @item Accessing all GATT services
30778 @item Accessing all GATT characteristics
30779 @item Reading characteristic values
30780 @item Writing characteristic values
30781 @item Subscribing for characteristic value change notifications
30782 @end itemize
30783
30784 Currently, Linux is the only platform supported by this library.")
30785 (license license:expat)))
30786
30787 (define-public python-clrprint
30788 (package
30789 (name "python-clrprint")
30790 (version "2.0.1")
30791 (source (origin
30792 (method url-fetch)
30793 (uri (pypi-uri "clrprint" version))
30794 (sha256
30795 (base32
30796 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
30797 (build-system python-build-system)
30798 (arguments '(#:tests? #f)) ;there are no tests
30799 (propagated-inputs (list python-colorama python-termcolor))
30800 (home-page "https://github.com/AbhijithAJ/clrprint")
30801 (synopsis "Print colorful output in the terminal")
30802 (description "@code{clrprint} is developed to print colorful output in the
30803 terminal. It has red, blue, green, yellow, purple and black/white (default)
30804 colors.")
30805 (license license:expat)))
30806
30807 (define-public python-musical-scales
30808 (package
30809 (name "python-musical-scales")
30810 (version "1.0.1")
30811 (source (origin
30812 (method url-fetch)
30813 (uri (pypi-uri "musical-scales" version))
30814 (sha256
30815 (base32
30816 "1ckn8n37i7b65h0i385ycn0w8sg9na0iabz0kmhxxc1wj0hddkw9"))))
30817 (build-system python-build-system)
30818 (native-inputs (list python-wheel))
30819 (home-page "https://github.com/hmillerbakewell/musical-scale")
30820 (synopsis "Retrieve a scale based on a given mode and starting note")
30821 (description
30822 "Retrieve a scale based on a given mode and starting note.
30823 Information about these scales can be
30824 @url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
30825 Wikipedia}.")
30826 (license license:expat)))
30827
30828 (define-public python-langcodes
30829 (package
30830 (name "python-langcodes")
30831 (version "3.3.0")
30832 (source (origin
30833 (method url-fetch)
30834 (uri (pypi-uri "langcodes" version))
30835 (sha256
30836 (base32
30837 "1xkyh3qdcigb18qiimbwl2669y22hhdmd89mqcd270c7lbahfkbr"))))
30838 (build-system python-build-system)
30839 (native-inputs (list python-pytest))
30840 (home-page "https://github.com/rspeer/langcodes")
30841 (synopsis "Python library for working with language codes")
30842 (description
30843 "This package provides a Python library for working with and comparing
30844 language codes.
30845
30846 @code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
30847 47}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
30848 47 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
30849 with it, and it also implements recommendations from the
30850 @url{http://cldr.unicode.org/, Unicode CLDR}.
30851
30852 @code{python-langcodes} can also refer to a database of language properties
30853 and names, built from Unicode CLDR and the IANA subtag registry, if you
30854 install @code{python-language-data}.")
30855 (license license:expat)))
30856
30857 (define-public python-geomet
30858 (package
30859 (name "python-geomet")
30860 (version "0.3.0")
30861 (source (origin
30862 (method url-fetch)
30863 (uri (pypi-uri "geomet" version))
30864 (sha256
30865 (base32
30866 "06rfvadx5dr5xrgsc5bsmqil9c9kff6i13xl988gy0gfg0cl2lnb"))))
30867 (build-system python-build-system)
30868 (propagated-inputs (list python-click python-six))
30869 (home-page "https://github.com/geomet/geomet")
30870 (synopsis "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or
30871 GeoPackage Binary")
30872 (description "This package provides utilities and functions for converting
30873 GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
30874 versa. Extended WKB/WKT are also supported.")
30875 (license license:asl2.0)))
30876
30877 (define-public python-bsdiff4
30878 (package
30879 (name "python-bsdiff4")
30880 (version "1.2.2")
30881 (home-page "https://github.com/ilanschnell/bsdiff4")
30882 (source (origin
30883 (method git-fetch)
30884 (uri (git-reference
30885 (url home-page)
30886 (commit version)))
30887 (file-name (git-file-name name version))
30888 (sha256
30889 (base32
30890 "1fa0vkmbr0a9xifq7i5gfcf7ifn739i1fdij8awynm299fsqvvhx"))))
30891 (build-system python-build-system)
30892 (synopsis "Binary diff and patch using the BSDIFF4 format")
30893 (description "This package provides a Python library for the @code{bsdiff}
30894 binary diff utility. It also provides two command-line tools, @code{bsdiff4}
30895 and @code{bspatch4}.")
30896 (license license:bsd-2)))
30897
30898 (define-public python-mpv
30899 (package
30900 (name "python-mpv")
30901 (version "1.0.1")
30902 (source
30903 (origin
30904 ;; python-mpv from pypi does not include the tests directory.
30905 (method git-fetch)
30906 (uri (git-reference
30907 (url "https://github.com/jaseg/python-mpv")
30908 (commit (string-append "v" version))))
30909 (file-name (git-file-name name version))
30910 (sha256
30911 (base32
30912 "10w6j3n62ap45sf6q487kz8z6g58sha37i14fa2hhng794z7a8jh"))
30913 (modules '((guix build utils)))
30914 (snippet
30915 #~(begin
30916 ;; One of the tests never completes, so neutering it using
30917 ;; early return allows other test to run without issue.
30918 (substitute* "tests/test_mpv.py"
30919 ;; Note the typo in "prooperty" - this was fixed later in
30920 ;; upstream but has no effect on whether the tests hangs or not.
30921 (("test_wait_for_prooperty_event_overflow.*" line)
30922 ;; The long whitespace between \n and return is to match the
30923 ;; identation level, which is significant in python.
30924 (string-append line "\n return\n")))))))
30925 (build-system python-build-system)
30926 (arguments
30927 (list #:phases
30928 #~(modify-phases %standard-phases
30929 (add-before 'build 'patch-reference-to-mpv
30930 (lambda* (#:key inputs #:allow-other-keys)
30931 ;; Without an absolute path it is not able find and
30932 ;; load the libmpv library.
30933 (substitute* "mpv.py"
30934 (("sofile = .*")
30935 (string-append "sofile = \""
30936 (search-input-file inputs "/lib/libmpv.so")
30937 "\"\n")))))
30938 (add-before 'check 'prepare-for-tests
30939 (lambda _
30940 ;; Fontconfig throws errors when it has no cache dir to use.
30941 (setenv "XDG_CACHE_HOME" (getcwd))
30942 ;; Some tests fail without a writable and readable HOME.
30943 (setenv "HOME" (getcwd)))))))
30944 (native-inputs
30945 (list python-xvfbwrapper)) ; needed for tests only
30946 (inputs (list mpv))
30947 (propagated-inputs (list python-pillow)) ; for raw screenshots
30948 (home-page "https://github.com/jaseg/python-mpv")
30949 (synopsis "Python interface to the mpv media player")
30950 (description
30951 "python-mpv is a ctypes-based python interface to the mpv media player.
30952 It gives you more or less full control of all features of the player, just
30953 as the lua interface does.")
30954 ;; From the project's README:
30955 ;; python-mpv inherits the underlying libmpv's license, which can be either
30956 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
30957 ;; copyright page.
30958 (license license:gpl2+)))
30959
30960 (define-public python-biblib
30961 (let ((upstream-version "0.1.0")
30962 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
30963 (revision "1"))
30964 (package
30965 (name "python-biblib")
30966 (version (git-version upstream-version revision commit))
30967 (source
30968 (origin
30969 (method git-fetch)
30970 (uri (git-reference
30971 (url "https://github.com/aclements/biblib")
30972 (commit commit)))
30973 (sha256
30974 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
30975 (file-name (git-file-name name version))))
30976 (build-system python-build-system)
30977 (home-page "https://github.com/aclements/biblib")
30978 (synopsis "BibTeX parsing and transformation library")
30979 (description
30980 "Biblib provides a simple, standalone Python 3 package for parsing
30981 BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
30982 entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
30983 source code for BibTeX and hence (barring bugs in translation) should be fully
30984 compatible with BibTeX's own parser.")
30985 ;; N.B. It seems the parser was translated from WEB by hand: this
30986 ;; package does not contain any generated files.
30987 (license license:expat))))
30988
30989 (define-public python-i3ipc
30990 (package
30991 (name "python-i3ipc")
30992 (version "2.2.1")
30993 (source (origin
30994 (method git-fetch)
30995 (uri (git-reference
30996 (url "https://github.com/altdesktop/i3ipc-python")
30997 (commit (string-append "v" version))))
30998 (file-name (git-file-name name version))
30999 (sha256
31000 (base32
31001 "13bzs9dcv27czpnnbgz7a037lm8h991c8gk0qzzk5mq5yak24715"))))
31002 (build-system python-build-system)
31003 (arguments (list #:tests? #f)) ;FIXME: some tests are unable to run
31004 (propagated-inputs (list python-xlib))
31005 (home-page "https://github.com/altdesktop/i3ipc-python")
31006 (synopsis "Python library for controlling i3 and Sway")
31007 (description
31008 "This package provides a Python library for controlling the i3 and Sway
31009 window managers.")
31010 (license license:bsd-3)))
31011
31012 (define-public i3-autotiling
31013 (package
31014 (name "i3-autotiling")
31015 (version "1.6.1")
31016 (source (origin
31017 (method git-fetch)
31018 (uri (git-reference
31019 (url "https://github.com/nwg-piotr/autotiling")
31020 (commit (string-append "v" version))))
31021 (file-name (git-file-name name version))
31022 (sha256
31023 (base32
31024 "1m8k3g83n2n1xws89dh20f3sy6753wvip9dzf6bssv2cz9ll7406"))))
31025 (build-system python-build-system)
31026 (arguments (list #:tests? #f)) ;no tests
31027 (native-inputs (list python-wheel))
31028 (propagated-inputs (list python-i3ipc))
31029 (home-page "https://github.com/nwg-piotr/autotiling")
31030 (synopsis "Automatically tile windows in i3 and Sway")
31031 (description
31032 "Script for Sway and i3 to automatically switch the horizontal/vertical
31033 window split orientation.")
31034 (license license:gpl3)))
31035
31036 (define-public python-cyclic
31037 (package
31038 (name "python-cyclic")
31039 (version "1.0.0")
31040 (source (origin
31041 ;; Use git, as there are some test files missing from the PyPI
31042 ;; release, see https://github.com/neurobin/cyclic/issues/1
31043 (method git-fetch)
31044 (uri (git-reference
31045 (url "https://github.com/neurobin/cyclic")
31046 ;; Release is not tagged on github, see
31047 ;; https://github.com/neurobin/cyclic/issues/2
31048 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
31049 (file-name (git-file-name name version))
31050 (sha256
31051 (base32
31052 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
31053 (build-system python-build-system)
31054 (home-page "https://github.com/neurobin/cyclic")
31055 (synopsis "Handle cyclic relations")
31056 (description "This package handles cyclic relations compared by value.")
31057 (license license:bsd-3)))
31058
31059 (define-public python-rcslice
31060 (package
31061 (name "python-rcslice")
31062 (version "1.1.0")
31063 (source (origin
31064 ;; Use git, as there are some test files missing from the PyPI
31065 ;; release, see https://github.com/neurobin/rcslice/issues/1
31066 (method git-fetch)
31067 (uri (git-reference
31068 (url "https://github.com/neurobin/rcslice")
31069 ;; Releases are not tagged on github, see
31070 ;; https://github.com/neurobin/rcslice/issues/2
31071 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
31072 (file-name (git-file-name name version))
31073 (sha256
31074 (base32
31075 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
31076 (build-system python-build-system)
31077 (home-page "https://github.com/neurobin/rcslice")
31078 (synopsis "Slice a list of sliceables")
31079 (description "This package provides Python module to slice a list of
31080 sliceables (1 indexed, both start and end index are inclusive). Helps to
31081 slice file content line by line or column by column or a combination of
31082 both.")
31083 (license license:bsd-3)))
31084
31085 (define-public python-types-orjson
31086 (package
31087 (name "python-types-orjson")
31088 (version "3.6.2")
31089 (source (origin
31090 (method url-fetch)
31091 (uri (pypi-uri "types-orjson" version))
31092 (sha256
31093 (base32
31094 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
31095 (build-system python-build-system)
31096 (home-page "https://github.com/python/typeshed")
31097 (synopsis "Typing stubs for orjson")
31098 (description "This is a PEP 561 type stub package for the @code{orjson}
31099 package. It can be used by type-checking tools like mypy, PyCharm, pytype
31100 etc. to check code that uses @code{orjson}.")
31101 (license license:asl2.0)))
31102
31103 (define-public python-nanoid
31104 ;; There are no tests on PyPi.
31105 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
31106 (revision "0"))
31107 (package
31108 (name "python-nanoid")
31109 (version "2.0.0")
31110 (source
31111 (origin
31112 (method git-fetch)
31113 (uri
31114 (git-reference
31115 (url "https://github.com/puyuan/py-nanoid")
31116 (commit commit)))
31117 (file-name (git-file-name name commit))
31118 (sha256
31119 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
31120 (build-system python-build-system)
31121 (native-inputs (list python-pytest))
31122 (arguments
31123 '(#:phases
31124 (modify-phases %standard-phases
31125 (replace 'check
31126 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
31127 (when tests?
31128 (invoke "pytest")))))))
31129 (home-page "https://github.com/puyuan/py-nanoid")
31130 (synopsis "Unique string ID generator")
31131 (description
31132 "This package provides a tiny, secure, URL-friendly, unique string ID
31133 generator for Python.")
31134 (license license:expat))))
31135
31136 (define-public python-misskey
31137 (package
31138 (name "python-misskey")
31139 (version "4.1.0")
31140 (source (origin
31141 (method git-fetch)
31142 (uri (git-reference
31143 (url "https://github.com/YuzuRyo61/Misskey.py")
31144 (commit (string-append "v" version))))
31145 (file-name (git-file-name name version))
31146 (sha256
31147 (base32
31148 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
31149 (build-system python-build-system)
31150 (arguments (list #:tests? #f)) ;needs network
31151 (propagated-inputs (list python-requests))
31152 (home-page "https://misskeypy.readthedocs.io")
31153 (synopsis "Python bindings for Misskey's API")
31154 (description
31155 "This package provides access to Misskey's API. Misskey is a SNS
31156 platform using the ActivityPub protocol.")
31157 (license license:expat)))
31158
31159 (define-public python-lief
31160 (package
31161 (name "python-lief")
31162 (version "0.12.2")
31163 (source (origin
31164 (method git-fetch)
31165 (uri (git-reference
31166 (url "https://github.com/lief-project/LIEF")
31167 (commit version)))
31168 (file-name (git-file-name name version))
31169 (sha256
31170 (base32
31171 "1xb21jsws8lw93by8r25ibzgiml8n1cp7rpzybc648lk6idw0zg6"))))
31172 (build-system python-build-system)
31173 (native-inputs (list cmake))
31174 (arguments
31175 (list
31176 #:tests? #f ;needs network
31177 #:phases #~(modify-phases %standard-phases
31178 (replace 'build
31179 (lambda _
31180 (invoke
31181 "python" "setup.py" "--sdk" "build"
31182 (string-append
31183 "-j" (number->string (parallel-job-count)))))))))
31184 (home-page "https://github.com/lief-project/LIEF")
31185 (synopsis "Library to instrument executable formats")
31186 (description
31187 "@code{python-lief} is a cross platform library which can parse, modify
31188 and abstract ELF, PE and MachO formats.")
31189 (license license:asl2.0)))
31190
31191 (define-public shrinkwrap
31192 (package
31193 (name "shrinkwrap")
31194 (version "0.1.0")
31195 (source (origin
31196 (method git-fetch)
31197 (uri (git-reference
31198 (url "https://github.com/fzakaria/shrinkwrap")
31199 (commit (string-append "v" version))))
31200 (file-name (git-file-name name version))
31201 (modules '((guix build utils)))
31202 (snippet '(substitute* "pyproject.toml"
31203 (("lief = \"0\\.12\\.0\"") "lief = \"*\"")))
31204 (sha256
31205 (base32
31206 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp"))))
31207 (build-system python-build-system)
31208 (arguments
31209 (list
31210 #:phases
31211 #~(modify-phases %standard-phases
31212 (replace 'check
31213 (lambda* (#:key tests? #:allow-other-keys)
31214 (when tests?
31215 (invoke "pytest" "-v" "tests"))))
31216 ;; XXX: PEP 517 manual build copied from python-isort.
31217 (replace 'build
31218 (lambda _
31219 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
31220 (replace 'install
31221 (lambda _
31222 (let ((whl (car (find-files "dist" "\\.whl$"))))
31223 (invoke "pip" "--no-cache-dir" "--no-input"
31224 "install" "--no-deps" "--prefix" #$output whl)))))))
31225 (native-inputs
31226 (list python-click
31227 python-poetry-core
31228 python-pypa-build
31229 python-pytest))
31230 (inputs (list python-lief python-sh))
31231 (home-page "https://github.com/fzakaria/shrinkwrap")
31232 (synopsis "Emboss needed dependencies on the top level executable")
31233 (description
31234 "@code{shrinkwrap} is a tool which will discover all transitive dynamic
31235 shared objects, and lift them up to the executable referenced by absolute
31236 path.")
31237 (license license:expat)))
31238
31239 (define-public python-pymonad
31240 (package
31241 (name "python-pymonad")
31242 (version "2.4.0")
31243 ;; The tests are incomplete in the PyPI archive.
31244 (source (origin
31245 (method git-fetch)
31246 (uri (git-reference
31247 (url "https://github.com/jasondelaat/pymonad")
31248 (commit (string-append "v" version))))
31249 (file-name (git-file-name name version))
31250 (sha256
31251 (base32
31252 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
31253 (build-system python-build-system)
31254 (arguments
31255 `(#:phases
31256 (modify-phases %standard-phases
31257 (replace 'check
31258 (lambda* (#:key tests? #:allow-other-keys)
31259 (when tests?
31260 (invoke "./run_tests.sh")))))))
31261 (home-page "https://github.com/jasondelaat/pymonad")
31262 (synopsis "Monadic style functional programming for Python")
31263 (description "@code{python-pymonad} implements data structures typically
31264 available in purely functional or functional first programming languages such
31265 as Haskell and F#. Included are
31266
31267 @itemize
31268 @item Monad and Monoid data types with several common monads such as Maybe and
31269 State
31270 @item Useful tools such as the @code{@@curry} decorator for defining curried
31271 functions
31272 @item Type annotations to help ensure correct usage
31273 @end itemize")
31274 (license license:bsd-3)))
31275
31276 ;;;
31277 ;;; Avoid adding new packages to the end of this file. To reduce the chances
31278 ;;; of a merge conflict, place them above by existing packages with similar
31279 ;;; functionality or similar names.
31280 ;;;