gnu: python-beautifulsoup4: Update to 4.11.1.
[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 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
70 ;;; Copyright © 2020 Riku Viitanen <riku.viitanen@protonmail.com>
71 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
72 ;;; Copyright © 2020 sirgazil <sirgazil@zoho.com>
73 ;;; Copyright © 2020 Sebastian Schott <sschott@mailbox.org>
74 ;;; Copyright © 2020, 2021 Alexandros Theodotou <alex@zrythm.org>
75 ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com>
76 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
77 ;;; Copyright © 2020 Alex ter Weele <alex.ter.weele@gmail.com>
78 ;;; Copyright © 2020 Matthew James Kraai <kraai@ftbfs.org>
79 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
80 ;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw>
81 ;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
82 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
83 ;;; Copyright © 2020, 2021, 2022 Vinicius Monego <monego@posteo.net>
84 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
85 ;;; Copyright © 2020 Hendursaga <hendursaga@yahoo.com>
86 ;;; Copyright © 2020 Malte Frank Gerdes <malte.f.gerdes@gmail.com>
87 ;;; Copyright © 2020 Joseph LaFreniere <joseph@lafreniere.xyz>
88 ;;; Copyright © 2020 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
89 ;;; Copyright © 2020, 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
90 ;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
91 ;;; Copyright © 2020 Diego N. Barbato <dnbarbato@posteo.de>
92 ;;; Copyright © 2020 Liliana Marie Prikler <liliana.prikler@gmail.com>
93 ;;; Copyright © 2019 Kristian Trandem <kristian@devup.no>
94 ;;; Copyright © 2020, 2021 Zheng Junjie <873216071@qq.com>
95 ;;; Copyright © 2020 EuAndreh <eu@euandre.org>
96 ;;; Copyright © 2021, 2022 Morgan Smith <Morgan.J.Smith@outlook.com>
97 ;;; Copyright © 2021, 2022 Sharlatan Hellseher <sharlatanus@gmail.com>
98 ;;; Copyright © 2021 Ellis Kenyő <me@elken.dev>
99 ;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
100 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
101 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
102 ;;; Copyright © 2021 jgart <jgart@dismail.de>
103 ;;; Copyright © 2021 Danial Behzadi <dani.behzi@ubuntu.com>
104 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
105 ;;; Copyright © 2021 Hugo Lecomte <hugo.lecomte@inria.fr>
106 ;;; Copyright © 2021 Franck Pérignon <franck.perignon@univ-grenoble-alpes.fr>
107 ;;; Copyright © 2021 Petr Hodina <phodina@protonmail.com>
108 ;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
109 ;;; Copyright © 2021 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
110 ;;; Copyright © 2021, 2022 Pradana Aumars <paumars@courrier.dev>
111 ;;; Copyright © 2021, 2022 Felix Gruber <felgru@posteo.net>
112 ;;; Copyright © 2021 Sébastien Lerique <sl@eauchat.org>
113 ;;; Copyright © 2021 Raphaël Mélotte <raphael.melotte@mind.be>
114 ;;; Copyright © 2021 ZmnSCPxj <ZmnSCPxj@protonmail.com>
115 ;;; Copyright © 2021 Filip Lajszczak <filip@lajszczak.dev>
116 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
117 ;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
118 ;;; Copyright © 2022 Aleksandr Vityazev <avityazev@posteo.org>
119 ;;; Copyright © 2022 Evgeny Pisemsky <evgeny@pisemsky.com>
120 ;;; Copyright © 2022 drozdov <drozdov@portalenergy.tech>
121 ;;; Copyright © 2022 Peter Polidoro <peter@polidoro.io>
122 ;;; Copyright © 2022 Wamm K. D. <jaft.r@outlook.com>
123 ;;; Copyright © 2022 Jai Vetrivelan <jaivetrivelan@gmail.com>
124 ;;; Copyright © 2022 Artyom V. Poptsov <poptsov.artyom@gmail.com>
125 ;;; Copyright © 2022 Paul A. Patience <paul@apatience.com>
126 ;;; Copyright © 2022 Jean-Pierre De Jesus DIAZ <me@jeandudey.tech>
127 ;;; Copyright © 2022 Philip McGrath <philip@philipmcgrath.com>
128 ;;; Copyright © 2022 Marek Felšöci <marek@felsoci.sk>
129 ;;; Copyright © 2022 Hilton Chain <hako@ultrarare.space>
130 ;;; Copyright © 2022 Tomasz Jeneralczyk <tj@schwi.pl>
131 ;;;
132 ;;; This file is part of GNU Guix.
133 ;;;
134 ;;; GNU Guix is free software; you can redistribute it and/or modify it
135 ;;; under the terms of the GNU General Public License as published by
136 ;;; the Free Software Foundation; either version 3 of the License, or (at
137 ;;; your option) any later version.
138 ;;;
139 ;;; GNU Guix is distributed in the hope that it will be useful, but
140 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
141 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
142 ;;; GNU General Public License for more details.
143 ;;;
144 ;;; You should have received a copy of the GNU General Public License
145 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
146
147 (define-module (gnu packages python-xyz)
148 #:use-module ((guix licenses) #:prefix license:)
149 #:use-module (gnu packages)
150 #:use-module (gnu packages algebra)
151 #:use-module (gnu packages adns)
152 #:use-module (gnu packages aidc)
153 #:use-module (gnu packages attr)
154 #:use-module (gnu packages backup)
155 #:use-module (gnu packages bash)
156 #:use-module (gnu packages check)
157 #:use-module (gnu packages cmake)
158 #:use-module (gnu packages compression)
159 #:use-module (gnu packages crypto)
160 #:use-module (gnu packages databases)
161 #:use-module (gnu packages dbm)
162 #:use-module (gnu packages django)
163 #:use-module (gnu packages djvu)
164 #:use-module (gnu packages docker)
165 #:use-module (gnu packages documentation)
166 #:use-module (gnu packages enchant)
167 #:use-module (gnu packages file)
168 #:use-module (gnu packages fontutils)
169 #:use-module (gnu packages fonts)
170 #:use-module (gnu packages freedesktop)
171 #:use-module (gnu packages gdb)
172 #:use-module (gnu packages gcc)
173 #:use-module (gnu packages geo)
174 #:use-module (gnu packages ghostscript)
175 #:use-module (gnu packages gl)
176 #:use-module (gnu packages glib)
177 #:use-module (gnu packages gnome)
178 #:use-module (gnu packages gnupg)
179 #:use-module (gnu packages graphviz)
180 #:use-module (gnu packages graphics)
181 #:use-module (gnu packages gsasl)
182 #:use-module (gnu packages gstreamer)
183 #:use-module (gnu packages gtk)
184 #:use-module (gnu packages haskell-xyz)
185 #:use-module (gnu packages icu4c)
186 #:use-module (gnu packages inkscape)
187 #:use-module (gnu packages image)
188 #:use-module (gnu packages image-processing)
189 #:use-module (gnu packages imagemagick)
190 #:use-module (gnu packages jupyter)
191 #:use-module (gnu packages kerberos)
192 #:use-module (gnu packages libevent)
193 #:use-module (gnu packages libffi)
194 #:use-module (gnu packages libidn)
195 #:use-module (gnu packages libusb)
196 #:use-module (gnu packages linux)
197 #:use-module (gnu packages llvm)
198 #:use-module (gnu packages man)
199 #:use-module (gnu packages markup)
200 #:use-module (gnu packages maths)
201 #:use-module (gnu packages monitoring)
202 #:use-module (gnu packages multiprecision)
203 #:use-module (gnu packages networking)
204 #:use-module (gnu packages ncurses)
205 #:use-module (gnu packages node)
206 #:use-module (gnu packages ninja)
207 #:use-module (gnu packages openstack)
208 #:use-module (gnu packages pcre)
209 #:use-module (gnu packages pdf)
210 #:use-module (gnu packages perl)
211 #:use-module (gnu packages photo)
212 #:use-module (gnu packages pkg-config)
213 #:use-module (gnu packages protobuf)
214 #:use-module (gnu packages python)
215 #:use-module (gnu packages python-build)
216 #:use-module (gnu packages python-check)
217 #:use-module (gnu packages python-compression)
218 #:use-module (gnu packages python-crypto)
219 #:use-module (gnu packages python-science)
220 #:use-module (gnu packages python-web)
221 #:use-module (gnu packages qt)
222 #:use-module (gnu packages rdf)
223 #:use-module (gnu packages readline)
224 #:use-module (gnu packages regex)
225 #:use-module (gnu packages sdl)
226 #:use-module (gnu packages scanner)
227 #:use-module (gnu packages search)
228 #:use-module (gnu packages serialization)
229 #:use-module (gnu packages shells)
230 #:use-module (gnu packages sphinx)
231 #:use-module (gnu packages ssh)
232 #:use-module (gnu packages swig)
233 #:use-module (gnu packages terminals)
234 #:use-module (gnu packages tex)
235 #:use-module (gnu packages texinfo)
236 #:use-module (gnu packages textutils)
237 #:use-module (gnu packages time)
238 #:use-module (gnu packages tls)
239 #:use-module (gnu packages version-control)
240 #:use-module (gnu packages video)
241 #:use-module (gnu packages web)
242 #:use-module (gnu packages wxwidgets)
243 #:use-module (gnu packages base)
244 #:use-module (gnu packages xml)
245 #:use-module (gnu packages xorg)
246 #:use-module (gnu packages xdisorg)
247 #:use-module (gnu packages tcl)
248 #:use-module (gnu packages bdw-gc)
249 #:use-module (gnu packages serialization)
250 #:use-module (guix packages)
251 #:use-module (guix download)
252 #:use-module (guix gexp)
253 #:use-module (guix git-download)
254 #:use-module (guix hg-download)
255 #:use-module (guix gexp)
256 #:use-module (guix utils)
257 #:use-module (guix build-system gnu)
258 #:use-module (guix build-system cmake)
259 #:use-module (guix build-system python)
260 #:use-module (guix build-system trivial)
261 #:use-module (srfi srfi-1)
262 #:use-module (srfi srfi-26))
263
264 (define-public python-xmldiff
265 (package
266 (name "python-xmldiff")
267 (version "2.4")
268 (source
269 (origin
270 (method url-fetch)
271 (uri (pypi-uri "xmldiff" version))
272 (sha256
273 (base32 "0qygxi3z1jwb0471k7bh5gcqf7wqm4xhrkmwhf36gjgjw46a5gh5"))))
274 (build-system python-build-system)
275 (propagated-inputs (list python-lxml python-six))
276 (home-page "https://github.com/Shoobx/xmldiff")
277 (synopsis "Creates diffs of XML files")
278 (description "This Python tool figures out the differences between two
279 similar XML files, in the same way the @command{diff} utility does it.")
280 (license license:expat)))
281
282 (define-public python-janus
283 (package
284 (name "python-janus")
285 (version "0.6.1")
286 (source
287 (origin
288 (method url-fetch)
289 (uri (pypi-uri "janus" version))
290 (sha256
291 (base32 "030xvl2vghi5ispfalhvch1rl6i2jsy5bf1dgjafa7vifppy04j7"))))
292 (build-system python-build-system)
293 (arguments
294 `(#:phases
295 (modify-phases %standard-phases
296 (replace 'check
297 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
298 (when tests?
299 (add-installed-pythonpath inputs outputs)
300 (invoke "pytest" "--cov=janus" "--cov=tests")))))))
301 (native-inputs
302 (list python-pytest python-pytest-cov python-pytest-asyncio))
303 (home-page "https://github.com/aio-libs/janus/")
304 (synopsis
305 "Sync-async queue to interoperate between asyncio tasks and classic threads")
306 (description
307 "Mixed sync-async queue, supposed to be used for communicating between
308 classic synchronous (threaded) code and asynchronous (in terms of
309 @url{https://docs.python.org/3/library/asyncio.html,asyncio}) one. Like
310 @url{https://en.wikipedia.org/wiki/Janus,Janus god} the queue object from the
311 library has two faces: synchronous and asynchronous interface. Synchronous is
312 fully compatible with
313 @url{https://docs.python.org/3/library/queue.html,standard queue},
314 asynchronous one follows
315 @url{https://docs.python.org/3/library/asyncio-queue.html,asyncio queue
316 design}.")
317 (license license:asl2.0)))
318
319 (define-public python-logzero
320 (package
321 (name "python-logzero")
322 (version "1.7.0")
323 (source
324 (origin
325 (method url-fetch)
326 (uri (pypi-uri "logzero" version))
327 (sha256
328 (base32 "10nh186vk6hpnpfycym44gja4fja0jyzw7q8dwimfd1rmv9xswvz"))))
329 (build-system python-build-system)
330 (native-inputs
331 (list python-pytest python-pytest-runner))
332 (arguments
333 `(#:phases
334 (modify-phases %standard-phases
335 (replace 'check
336 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
337 (when tests?
338 (add-installed-pythonpath inputs outputs)
339 (invoke "pytest")))))))
340 (home-page "https://github.com/metachris/logzero")
341 (synopsis "Robust and effective logging for Python")
342 (description
343 "@code{logzero} provides a fully configured Python logger object for
344 easy logging and rotating to a console or a file.")
345 (license license:expat)))
346
347 (define-public python-logbook
348 (package
349 (name "python-logbook")
350 (version "1.5.3")
351 (source
352 (origin
353 (method url-fetch)
354 (uri (pypi-uri "Logbook" version))
355 (sha256
356 (base32 "1s1gyfw621vid7qqvhddq6c3z2895ci4lq3g0r1swvpml2nm9x36"))))
357 (build-system python-build-system)
358 (arguments
359 `(#:phases
360 (modify-phases %standard-phases
361 (add-before 'build 'cythonize-sources
362 (lambda _
363 (with-directory-excursion "logbook"
364 (invoke "cython" "_speedups.pyx"))))
365 (replace 'check
366 (lambda* (#:key tests? #:allow-other-keys)
367 (when tests?
368 ;; Check cython build also
369 (setenv "CYBUILD" "True")
370 (invoke "pytest" "--cov=logbook" "-r" "s" "tests")))))))
371 (native-inputs
372 (list python-cython python-mock python-pytest python-pytest-cov
373 python-google-brotli))
374 (home-page "https://github.com/getlogbook/logbook")
375 (synopsis "Logbook is a logging replacement for Python")
376 (description
377 "Logbook is a logging system for Python that replaces the standard
378 library’s logging module. It was designed with both complex and simple
379 applications in mind and the idea to make logging fun.")
380 (license license:bsd-3)))
381
382 (define-public python-ubelt
383 (package
384 (name "python-ubelt")
385 (version "1.0.1")
386 (source
387 (origin
388 (method git-fetch)
389 (uri (git-reference
390 (url "https://github.com/Erotemic/ubelt")
391 (commit (string-append "v" version))))
392 (file-name (git-file-name name version))
393 (sha256
394 (base32
395 "0hac9nqqvqfbca2s4g0mp1fnj0ah60bg9fb8234ibna3jww8qs33"))))
396 (build-system python-build-system)
397 (arguments
398 (list #:phases
399 #~(modify-phases %standard-phases
400 (replace 'check
401 (lambda* (#:key tests? #:allow-other-keys)
402 (when tests?
403 (setenv "HOME" "/tmp") ;else the test suite hangs
404 (invoke "pytest" "-vv" "-k"
405 (string-append
406 ;; The builder user home doesn't match HOME,
407 ;; which causes this test to fail.
408 "not userhome "
409 ;; This one pointlessly tries
410 ;; locating various binaries on
411 ;; the path.
412 "and not find_exe"))))))))
413 (propagated-inputs (list python-ordered-set))
414 (native-inputs
415 (list python-pytest
416 python-requests
417 python-xdoctest))
418 (home-page "https://github.com/Erotemic/ubelt")
419 (synopsis "Python library for hashing, caching, timing and more")
420 (description "Ubelt is a small library of simple functions that extend the
421 Python standard library. It includes an @acronym{API, Application Programming
422 Interface} to simplify common problems such as caching, timing, computing
423 progress, among other things.")
424 (license license:asl2.0)))
425
426 (define-public python-ueberzug
427 (package
428 (name "python-ueberzug")
429 (version "18.1.9")
430 (source
431 (origin
432 (method url-fetch)
433 (uri (pypi-uri "ueberzug" version))
434 (sha256
435 (base32
436 "1hxd45dnwa9yv908acarr98n2drmar66wzq9z2qd3irj24srzr3w"))))
437 (build-system python-build-system)
438 (inputs
439 (list libx11 libxext))
440 (propagated-inputs
441 (list python-attrs python-docopt python-pillow python-xlib))
442 (home-page "https://github.com/seebye/ueberzug")
443 (synopsis "Command line util to display images in combination with X11")
444 (description "Überzug is a command line util which draws images on
445 terminals by using child windows. The advantages of using Überzug are:
446 @itemize
447 @item No race conditions as a new window is created to display images.
448 @item Expose events will be processed, so images will be redrawn on switch
449 workspaces.
450 @item Tmux support (excluding multi pane windows).
451 @item Terminals without the WINDOWID environment variable are supported.
452 @item Chars are used as position - and size unit.
453 @item No memory leak (/ unlimited cache).
454 @end itemize")
455 (license license:gpl3+)))
456
457 (define-public python-fire
458 (package
459 (name "python-fire")
460 (version "0.4.0")
461 (source
462 (origin
463 (method url-fetch)
464 (uri (pypi-uri "fire" version))
465 (sha256
466 (base32
467 "0qka44n88y3qcj7xz0k0f3qb4phcg4z0wvd4jcii9lcr6rvbiqn5"))))
468 (build-system python-build-system)
469 (native-inputs
470 (list python-pytest))
471 (arguments
472 '(#:phases
473 (modify-phases %standard-phases
474 (replace 'check
475 (lambda* (#:key tests? #:allow-other-keys)
476 (when tests?
477 (invoke "pytest")))))))
478 (inputs
479 (list python-six python-termcolor))
480 (synopsis "Library for automatically generating command line interfaces")
481 (description
482 "Fire is a library for automatically generating command line interfaces
483 from absolutely any Python object. The following are the advantages:
484 @itemize
485 @item A simple way to create a CLI in Python.
486 @item A helpful tool for developing and debugging Python code.
487 @item Helps with exploring existing code or turning other people's code into a
488 command line interface.
489 @item Makes transitioning between Bash and Python easier.
490 @item Makes using a Python REPL easier by setting up the REPL with the modules
491 and variables you'll need already imported and created.
492 @end itemize")
493 (home-page "https://github.com/google/python-fire")
494 (license license:asl2.0)))
495
496 (define-public python-twodict
497 (package
498 (name "python-twodict")
499 (version "1.2")
500 (source
501 (origin
502 (method url-fetch)
503 (uri (pypi-uri "twodict" version))
504 (sha256
505 (base32 "0ifv7dv18jn2lg0a3l6zdlvmmlda2ivixfjbsda58a2ay6kxznr0"))))
506 (build-system python-build-system)
507 (home-page "https://github.com/MrS0m30n3/twodict")
508 (synopsis "Two way ordered dictionary for Python")
509 (description "TwoDict is a custom dictionary in which you can get the
510 key:value relationship but you can also get the value:key relationship. It also
511 remembers the order in which the items were inserted and supports almost all the
512 features of the Python's built-in dict.")
513 (license license:unlicense)))
514
515 (define-public python-argopt
516 (package
517 (name "python-argopt")
518 (version "0.7.0")
519 (source (origin
520 (method url-fetch)
521 (uri (pypi-uri "argopt" version))
522 (sha256
523 (base32
524 "0ybs7kkp0cpl8zn1lvf7481xhssg1bbhh5la2cjzdm5yibashyxa"))))
525 (build-system python-build-system)
526 (native-inputs
527 (list python-coverage python-nose python-setuptools ; Won't build without this.
528 python-setuptools-scm))
529 (propagated-inputs
530 (list python-toml python-flake8))
531 (home-page "https://github.com/casperdcl/argopt")
532 (synopsis "Generate a command-line interface from a docstring")
533 (description "This package provides tools to define a command line interface
534 from a docstring rather than the other way around.")
535 (license license:mpl2.0)))
536
537 (define-public python-cachetools
538 (package
539 (name "python-cachetools")
540 (version "4.2.2")
541 (source (origin
542 (method url-fetch)
543 (uri (pypi-uri "cachetools" version))
544 (sha256
545 (base32
546 "1zqc098gk6y614lxwqd9z2gm8lldgvrpid133pnlm4m048gfvdb1"))))
547 (build-system python-build-system)
548 (home-page "https://github.com/tkem/cachetools/")
549 (synopsis "Extensible memoizing collections and decorators")
550 (description "This module provides various memoizing collections and
551 decorators, including variants of the Python standard library's
552 @code{lru_cache} function decorator.")
553 (license license:expat)))
554
555 (define-public python-colorful
556 (package
557 (name "python-colorful")
558 (version "0.5.4")
559 (source
560 (origin
561 (method url-fetch)
562 (uri
563 (pypi-uri "colorful" version))
564 (sha256
565 (base32 "1sh7g2cn1fyz2hzmzs933razdxi2bna9i1lxa790r9pdwba8m146"))))
566 (build-system python-build-system)
567 ;; FIXME: tests cannot be computed:
568 ;; "Can't perform this operation for unregistered loader type"
569 (arguments
570 `(#:tests? #f))
571 (native-inputs
572 (list python-coverage python-flake8 python-pytest))
573 (propagated-inputs
574 (list python-colorama))
575 (home-page "http://github.com/timofurrer/colorful")
576 (synopsis "Terminal string styling")
577 (description "Colorful provides an array of text styles, that can be used
578 as functions or string constants to form colored terminal output.")
579 (license license:expat)))
580
581 (define-public python-yaspin
582 (package
583 (name "python-yaspin")
584 (version "1.5.0")
585 (source
586 (origin
587 (method url-fetch)
588 (uri
589 (pypi-uri "yaspin" version))
590 (sha256
591 (base32 "1iirah0kydrdp505qnjj6gi54avcr7z0hbkfx9vmh8myr30rpz6q"))))
592 (build-system python-build-system)
593 (native-inputs
594 (list python-pytest))
595 (home-page "https://github.com/pavdmyt/yaspin")
596 (synopsis "Yet Another Terminal Spinner")
597 (description "Yaspin provides a terminal spinner to indicate the progress
598 during long operations.")
599 (license license:expat)))
600
601 (define-public python-lunr
602 (package
603 (name "python-lunr")
604 (version "0.6.0")
605 (source
606 (origin
607 (method url-fetch)
608 (uri
609 (pypi-uri "lunr" version))
610 (sha256
611 (base32 "106akalywfmnypzkdrhgz4n4740a8xayspybsw59kq06vz8i2qrc"))))
612 (build-system python-build-system)
613 (native-inputs
614 (list python-mock python-pytest))
615 (propagated-inputs
616 (list python-nltk-3.4))
617 (home-page
618 "https://github.com/yeraydiazdiaz/lunr.py")
619 (synopsis "Full-text search library")
620 (description "This package provides python library for full-text search.
621 It indexes documents and provides a search interface for retrieving documents
622 that best match text queries.")
623 (license license:expat)))
624
625 (define-public python-mrkd
626 (package
627 (name "python-mrkd")
628 (version "0.2.0")
629 (source
630 (origin
631 (method url-fetch)
632 (uri (pypi-uri "mrkd" version))
633 (sha256
634 (base32 "1bvaqbna1ihb4y2mv9pmvqcq3r9j6lwbbii99dani8lxx4dqqvs5"))))
635 (build-system python-build-system)
636 (propagated-inputs
637 (list python-jinja2 python-mistune python-pygments))
638 (home-page "https://pypi.org/project/mrkd/")
639 (synopsis "Python Markdown implementation")
640 (description
641 "@code{mrkd} writes man pages using Markdown, and convert them to Roff or
642 HTML")
643 (license license:bsd-3)))
644
645 (define-public python-mkdocs
646 (package
647 (name "python-mkdocs")
648 (version "1.3.0")
649 (source
650 (origin
651 ;; The tests suite appears to be incomplete in the PyPI archive.
652 (method git-fetch)
653 (uri (git-reference
654 (url "https://github.com/mkdocs/mkdocs")
655 (commit version)))
656 (file-name (git-file-name name version))
657 (sha256
658 (base32
659 "1n5rdllrxvhnxmdrddf55p3s86dakx0rq2gg6bj6pr6jg2pn932b"))))
660 (build-system python-build-system)
661 (arguments
662 `(#:phases
663 (modify-phases %standard-phases
664 ;; Requirements refer to a specific version of dependencies,
665 ;; which are too old. So we patch to refer to any later version.
666 (add-after 'unpack 'patch-requirements
667 (lambda _
668 (substitute* "setup.py"
669 (("==") ">="))))
670 (replace 'check
671 (lambda* (#:key tests? #:allow-other-keys)
672 (when tests?
673 (invoke "python" "-m" "unittest"
674 "discover" "-p" "*tests.py" "mkdocs"
675 "--top-level-directory" ".")))))))
676 (propagated-inputs
677 (list python-babel
678 python-click
679 python-ghp-import
680 python-importlib-metadata
681 python-jinja2
682 python-markdown
683 python-markupsafe
684 python-mdx-gh-links
685 python-mergedeep
686 python-packaging
687 python-pyyaml
688 python-pyyaml-env-tag
689 python-watchdog))
690 (home-page "https://www.mkdocs.org")
691 (synopsis "Project documentation with Markdown")
692 (description "MkDocs is a static site generator geared towards building
693 project documentation. Documentation source files are written in Markdown, and
694 configured with a single YAML configuration file.")
695 (license license:bsd-3)))
696
697 (define-public python-mkdocs-markdownextradata-plugin
698 (package
699 (name "python-mkdocs-markdownextradata-plugin")
700 (version "0.2.5")
701 (source (origin
702 ;; Use git, as there are some test files missing from the PyPI release,
703 ;; see https://github.com/rosscdh/mkdocs-markdownextradata-plugin/issues/41.
704 (method git-fetch)
705 (uri (git-reference
706 (url "https://github.com/rosscdh/mkdocs-markdownextradata-plugin")
707 (commit version)))
708 (file-name (git-file-name name version))
709 (sha256
710 (base32
711 "1a3868s9m7pzyfncpjbjsa9vw5nihssl2v47pxj7h6qa67kvlk3g"))))
712 (build-system python-build-system)
713 (native-inputs (list python-pytest))
714 (propagated-inputs (list python-mkdocs python-pyyaml))
715 (home-page "https://github.com/rosscdh/mkdocs-markdownextradata-plugin/")
716 (synopsis "Inject mkdocs.yml extra variables into the MkDocs markdown
717 template")
718 (description
719 "This package provides a MkDocs plugin that injects the mkdocs.yml extra
720 variables into the markdown template")
721 (license license:expat)))
722
723 (define-public python-pymdown-extensions
724 (package
725 (name "python-pymdown-extensions")
726 (version "8.1.1")
727 (source
728 (origin
729 (method url-fetch)
730 (uri
731 (pypi-uri "pymdown-extensions" version))
732 (sha256
733 (base32 "0d8pdndrl1kj105lq7r6kw2dnhcvll6h2qs07w71mcpi7gx728v3"))))
734 (build-system python-build-system)
735 ;; FIXME: "AssertionError: False is not true"
736 (arguments
737 `(#:tests? #f))
738 (propagated-inputs
739 (list python-markdown))
740 (home-page "https://github.com/facelessuser/pymdown-extensions")
741 (synopsis "Extension pack for Python Markdown")
742 (description "PyMdown Extensions is a collection of extensions for Python
743 Markdown. All extensions are found under the module namespace of pymdownx.")
744 (license license:expat)))
745
746 (define-public python-plotille
747 (package
748 (name "python-plotille")
749 (version "4.0.2")
750 (source (origin
751 (method url-fetch)
752 (uri (pypi-uri "plotille" version))
753 (sha256
754 (base32
755 "0fvsk6glxfphhqy405h05rj3v95jd1byl5hv2fyd5l31wln23shj"))))
756 (build-system python-build-system)
757 (native-inputs (list python-six))
758 (home-page "https://github.com/tammoippen/plotille")
759 (synopsis "Plot in the terminal using braille dots")
760 (description
761 "Plotille provides a figure class and graphing functions to create plots,
762 scatter plots, histograms and heatmaps in the terminal using braille dots.")
763 (license license:expat)))
764
765 (define-public python-mdx-gh-links
766 (package
767 (name "python-mdx-gh-links")
768 (version "0.2")
769 (source
770 (origin
771 (method url-fetch)
772 (uri (pypi-uri "mdx_gh_links" version))
773 (sha256
774 (base32 "167k1jbp3jifxbnlpi6wy0z1skam7gqv2sixb5bhggb2vypqvysr"))))
775 (build-system python-build-system)
776 (arguments (list #:tests? #f)) ;tests connect github
777 (propagated-inputs (list python-markdown))
778 (home-page "https://github.com/Python-Markdown/github-links/")
779 (synopsis "Python-Markdown extension adding support for shorthand links")
780 (description "This package is an extension to Python-Markdown which adds
781 support for shorthand links to GitHub users, repositories, issues and
782 commits.")
783 (license license:bsd-3)))
784
785 (define-public python-mkdocs-material
786 (package
787 (name "python-mkdocs-material")
788 (version "7.1.3")
789 (source
790 (origin
791 (method url-fetch)
792 (uri
793 (pypi-uri "mkdocs-material" version))
794 (sha256
795 (base32 "0ci9xiasq9nfn09v11m7p49vzazdbgslw7rpzjd6y3hsmn9vljz3"))))
796 (build-system python-build-system)
797 (arguments
798 `(#:phases
799 (modify-phases %standard-phases
800 ;; Requirement mkdocs-material-extensions
801 ;; in-turn requires mkdocs-material. This causes
802 ;; circular dependency, so we remove this requirement.
803 (add-after 'unpack 'patch-requirements
804 (lambda _
805 (substitute* "requirements.txt"
806 (("mkdocs-material-extensions.*$") "")))))))
807 (propagated-inputs
808 (list python-markdown python-mkdocs python-pygments
809 python-pymdown-extensions))
810 (home-page "https://squidfunk.github.io/mkdocs-material/")
811 (synopsis "Material Design theme for MkDocs")
812 (description "This package provides a theme plugin for the static site
813 generator MkDocs.")
814 (license license:expat)))
815
816 (define-public python-slixmpp
817 (package
818 (name "python-slixmpp")
819 (version "1.5.2")
820 (source
821 (origin
822 (method git-fetch)
823 (uri
824 (git-reference
825 (url "https://lab.louiz.org/poezio/slixmpp.git")
826 (commit
827 (string-append "slix-" version))))
828 (file-name
829 (git-file-name name version))
830 (sha256
831 (base32 "15mqxcws14bjvh5jcfwl86zsvrymkdw3ya07vb44md7vfnsnclwx"))))
832 (build-system python-build-system)
833 (arguments
834 `(#:phases
835 (modify-phases %standard-phases
836 (add-after 'unpack 'patch
837 (lambda _
838 (substitute* "setup.py"
839 (("'CC', 'cc'")
840 "'CC', 'gcc'"))
841 #t)))))
842 (native-inputs
843 `(("cython" ,python-cython)
844 ("gnupg" ,gnupg)
845 ("pkg-config" ,pkg-config)))
846 (propagated-inputs
847 (list python-aiodns python-aiohttp python-pyasn1
848 python-pyasn1-modules))
849 (inputs
850 (list libidn python)) ; We are building a Python extension.
851 (synopsis "XMPP library without threads")
852 (description "Slixmpp is a XMPP library for Python 3.7+. It is a fork of
853 SleekXMPP. Its goal is to only rewrite the core of the library (the low level
854 socket handling, the timers, the events dispatching) in order to remove all
855 threads.")
856 (home-page "https://lab.louiz.org/poezio/slixmpp")
857 (license license:expat)))
858
859 (define-public python-tenacity
860 (package
861 (name "python-tenacity")
862 (version "8.0.1")
863 (source (origin
864 (method url-fetch)
865 (uri (pypi-uri "tenacity" version))
866 (sha256
867 (base32
868 "0bwkvjpjfyi9dgszzad9aww2vc00w3bczjnbifi92cp7wch2l923"))))
869 (build-system python-build-system)
870 (native-inputs
871 (list python-setuptools-scm python-tornado python-typeguard
872 python-pytest))
873 (arguments
874 (list #:phases
875 #~(modify-phases %standard-phases
876 (replace 'check
877 (lambda _ (invoke "pytest" "-vv"))))))
878 (home-page "https://github.com/jd/tenacity")
879 (synopsis "Retrying library for python")
880 (description "Tenacity is a general-purpose python library to simplify the
881 task of adding retry behavior to just about anything.")
882 (license license:asl2.0)))
883
884 (define-public python-pytelegrambotapi
885 (package
886 (name "python-pytelegrambotapi")
887 (version "3.7.4")
888 (source
889 (origin
890 (method git-fetch)
891 (uri (git-reference
892 (url "https://github.com/eternnoir/pyTelegramBotAPI")
893 (commit version)))
894 (file-name (git-file-name name version))
895 (sha256
896 (base32 "0r7g5zs0fk3g2dxvbpl0pi730x7r2kalrhn30fs0pvc15a59fmxz"))))
897 (build-system python-build-system)
898 (arguments
899 `(#:phases
900 (modify-phases %standard-phases
901 (replace 'check
902 (lambda* (#:key tests? #:allow-other-keys)
903 (when tests?
904 (with-directory-excursion "tests"
905 (invoke "py.test")))
906 #t)))))
907 (propagated-inputs
908 (list python-requests))
909 (native-inputs
910 (list python-pytest))
911 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
912 (synopsis "Python Telegram bot api")
913 (description "This package provides a simple, but extensible Python
914 implementation for the Telegram Bot API.")
915 (license license:gpl2)))
916
917 (define-public python-colorlog
918 (package
919 (name "python-colorlog")
920 (version "6.6.0")
921 (source
922 (origin
923 (method url-fetch)
924 (uri (pypi-uri "colorlog" version))
925 (sha256
926 (base32 "1s7x0v872h8aks8xp01wmv6hzisxqjrh1svbbcycir0980h76krl"))))
927 (build-system python-build-system)
928 (arguments
929 `(#:phases
930 (modify-phases %standard-phases
931 (replace 'check
932 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
933 (when tests?
934 (add-installed-pythonpath inputs outputs)
935 (invoke "python" "-m" "pytest")))))))
936 (native-inputs
937 (list python-pytest))
938 (home-page "https://github.com/borntyping/python-colorlog")
939 (synopsis "Log formatting with colors for python")
940 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
941 with Python's logging module that outputs records using terminal colors.")
942 (license license:expat)))
943
944 (define-public python-pyprind
945 (package
946 (name "python-pyprind")
947 (version "2.11.3")
948 (source (origin
949 (method url-fetch)
950 (uri (pypi-uri "PyPrind" version))
951 (sha256
952 (base32
953 "1gscnlvj37m421ch3akm3kddxqkrgbg5zrpwy2ky1j59w6vclzg3"))))
954 (build-system python-build-system)
955 (propagated-inputs
956 (list python-psutil))
957 (home-page "https://github.com/rasbt/pyprind")
958 (synopsis "Python Progress Bar and Percent Indicator Utility")
959 (description "The PyPrind (Python Progress Indicator) module provides a
960 progress bar and a percentage indicator object that let you track the progress
961 of a loop structure or other iterative computation.")
962 (license license:bsd-3)))
963
964 (define-public python-glymur
965 (package
966 (name "python-glymur")
967 (version "0.10.1")
968 (source
969 (origin
970 (method git-fetch) ; no tests data in PyPi package
971 (uri (git-reference
972 (url "https://github.com/quintusdias/glymur")
973 (commit (string-append "v" version))))
974 (file-name (git-file-name name version))
975 (sha256
976 (base32 "1cq9r8vzwvds1kasy5gc2rxw034jh9l43rraps1n739072pfz6qg"))))
977 (build-system python-build-system)
978 (arguments
979 (list
980 #:phases
981 #~(modify-phases %standard-phases
982 (add-after 'unpack 'patch-library-locations
983 (lambda* (#:key inputs #:allow-other-keys)
984 ;; XXX: It's a workaround for Python inability to find the
985 ;; .so libraries with ctypes.util.find_library()
986 (substitute* '("glymur/config.py")
987 (("path = find_library\\(libname\\)")
988 (string-append
989 "if libname == \"openjp2\":\n"
990 " path = \""
991 (search-input-file inputs "/lib/libopenjp2.so") "\"\n"
992 " elif libname == \"tiff\":\n"
993 " path = \""
994 (search-input-file inputs "/lib/libtiff.so") "\"\n"
995 " elif libname == \"c\":\n"
996 " path = \""
997 (search-input-file inputs "/lib/libc.so.6") "\"\n")))))
998 ;; TODO: implement as a feature of python-build-system (PEP-621,
999 ;; PEP-631, PEP-660)
1000 (replace 'build
1001 (lambda _
1002 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
1003 ;; ZIP does not support timestamps before 1980.
1004 (setenv "SOURCE_DATE_EPOCH" "315532800")
1005 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
1006 (replace 'install
1007 (lambda* (#:key outputs #:allow-other-keys)
1008 (let ((whl (car (find-files "dist" "\\.whl$"))))
1009 (invoke "pip" "--no-cache-dir" "--no-input"
1010 "install" "--no-deps" "--prefix" #$output whl))))
1011 (replace 'check
1012 (lambda* (#:key tests? #:allow-other-keys)
1013 (when tests?
1014 ;; Failing test due to inability of
1015 ;; ctypes.util.find_library() to determine library path,
1016 ;; which is patched above.
1017 (delete-file "tests/test_config.py")
1018 (invoke "python" "-m" "pytest" "-vv" "tests")))))))
1019 (native-inputs
1020 (list python-pypa-build python-pytest))
1021 (inputs
1022 (list openjpeg ; glymur/lib/openjp2.py
1023 libtiff)) ; glymur/lib/tiff.py
1024 (propagated-inputs
1025 (list python-lxml
1026 python-numpy
1027 python-packaging))
1028 (home-page "https://github.com/quintusdias/glymur")
1029 (synopsis "Python interface to OpenJPEG and LibTIFF")
1030 (description
1031 "This package provides Python interface to the OpenJPEG library which
1032 allows one to read and write JPEG 2000 files")
1033 (license license:expat)))
1034
1035 (define-public python-gphoto2
1036 (package
1037 (name "python-gphoto2")
1038 (version "2.2.1")
1039 (source (origin
1040 (method url-fetch)
1041 (uri (pypi-uri "gphoto2" version))
1042 (sha256
1043 (base32
1044 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
1045 (build-system python-build-system)
1046 (native-inputs
1047 (list pkg-config))
1048 (inputs
1049 (list libgphoto2))
1050 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
1051 (synopsis "Python interface to libgphoto2")
1052 (description "@code{python-gphoto2} is a comprehensive Python interface
1053 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
1054 automatically generate the interface code.")
1055 (license license:gpl3+)))
1056
1057 (define-public python-colour
1058 (package
1059 (name "python-colour")
1060 (version "0.1.5")
1061 (source (origin
1062 (method url-fetch)
1063 (uri (pypi-uri "colour" version))
1064 (sha256
1065 (base32
1066 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
1067 (build-system python-build-system)
1068 (native-inputs
1069 (list python-d2to1))
1070 (home-page "https://github.com/vaab/colour")
1071 (synopsis "Convert and manipulate various color representations")
1072 (description "Pythonic way to manipulate color representations (HSL, RVB,
1073 web, X11, ...).")
1074 (license license:expat)))
1075
1076 (define-public python-d2to1
1077 (package
1078 (name "python-d2to1")
1079 (version "0.2.12.post1")
1080 (source (origin
1081 (method url-fetch)
1082 (uri (pypi-uri "d2to1" version))
1083 (sha256
1084 (base32
1085 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
1086 (build-system python-build-system)
1087 (native-inputs
1088 (list python-nose))
1089 (home-page "https://github.com/embray/d2to1")
1090 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
1091 in python")
1092 (description "The python package d2to1 (the d is for distutils) allows
1093 using distutils2-like setup.cfg files for a package's metadata with a
1094 distribute/setuptools setup.py script.")
1095 (license license:bsd-2)))
1096
1097 (define-public python-rawkit
1098 (package
1099 (name "python-rawkit")
1100 (version "0.6.0")
1101 (source (origin
1102 (method url-fetch)
1103 (uri (pypi-uri "rawkit" version))
1104 (sha256
1105 (base32
1106 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
1107 (build-system python-build-system)
1108 (native-inputs
1109 (list python-pytest python-mock))
1110 (inputs
1111 (list libraw))
1112 (home-page "https://rawkit.readthedocs.io")
1113 (synopsis "Ctypes-based LibRaw binding for Python")
1114 (description "The rawkit package provides two modules: rawkit and libraw.
1115 The rawkit module provides a high-level Pythonic interface for developing raw
1116 photos, while the libraw module provides a CTypes based interface for
1117 interacting with the low-level LibRaw C APIs.")
1118 (license license:expat)))
1119
1120 (define-public python-easygui
1121 (package
1122 (name "python-easygui")
1123 (version "0.98.1")
1124 (source (origin
1125 (method url-fetch)
1126 (uri (pypi-uri "easygui" version))
1127 (sha256
1128 (base32
1129 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
1130 (build-system python-build-system)
1131 (propagated-inputs
1132 (list `(,python "tk")))
1133 (home-page "https://github.com/robertlugg/easygui")
1134 (synopsis "GUI programming module for Python")
1135 (description "EasyGUI is a module for very simple, very easy GUI
1136 programming in Python. EasyGUI is different from other GUI generators in that
1137 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
1138 simple function calls.")
1139 (license license:bsd-3)))
1140
1141 (define-public python-pymd4c
1142 (package
1143 (name "python-pymd4c")
1144 (version "0.4.6.0b1")
1145 (source
1146 (origin
1147 (method url-fetch)
1148 (uri (pypi-uri "pymd4c" version))
1149 (sha256
1150 (base32 "07s3arn85ri92im6x3ipljdmrxmpik7irs06i6lm17j1x6j9841d"))))
1151 (build-system python-build-system)
1152 (inputs
1153 (list md4c))
1154 (native-inputs
1155 (list python-flake8 python-pkgconfig pkg-config))
1156 (home-page "https://github.com/dominickpastore/pymd4c")
1157 (synopsis "Python bindings for MD4C")
1158 (description
1159 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
1160 to CommonMark.")
1161 (license license:expat)))
1162
1163 (define-public python-pymediainfo
1164 (package
1165 (name "python-pymediainfo")
1166 (version "4.1")
1167 (source
1168 (origin
1169 (method url-fetch)
1170 (uri (pypi-uri "pymediainfo" version))
1171 (sha256
1172 (base32
1173 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
1174 (build-system python-build-system)
1175 (native-inputs
1176 (list python-setuptools-scm python-pytest))
1177 (inputs
1178 (list libmediainfo))
1179 (arguments
1180 `(#:phases
1181 (modify-phases %standard-phases
1182 (add-after 'unpack 'patch-libmediainfo
1183 (lambda _
1184 (substitute* "pymediainfo/__init__.py"
1185 (("libmediainfo.so.0")
1186 (search-input-file %build-inputs
1187 "/lib/libmediainfo.so.0")))))
1188 (replace 'check
1189 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
1190 (when tests?
1191 (add-installed-pythonpath inputs outputs)
1192 ;; Skip the only failing test "test_parse_url" because it tries
1193 ;; to access the internet.
1194 (invoke "pytest" "-vv" "-k" "not test_parse_url")))))))
1195 (home-page
1196 "https://github.com/sbraz/pymediainfo")
1197 (synopsis
1198 "Python wrapper for the mediainfo library")
1199 (description
1200 "This package provides a Python wrapper for the mediainfo library to
1201 access the technical and tag data for video and audio files.")
1202 (license license:expat)))
1203
1204 (define-public python-psutil
1205 (package
1206 (name "python-psutil")
1207 (version "5.9.0")
1208 (source
1209 (origin
1210 (method url-fetch)
1211 (uri (pypi-uri "psutil" version))
1212 (sha256
1213 (base32 "09fa4vfhansixvxd3lv664xcrbnfdyfn53hm2wr0rf3bsvdl5646"))))
1214 (build-system python-build-system)
1215 (arguments
1216 ;; FIXME: some tests do not return and time out. Some tests fail because
1217 ;; some processes survive kill().
1218 '(#:tests? #f))
1219 (home-page "https://github.com/giampaolo/psutil")
1220 (synopsis "Library for retrieving information on running processes")
1221 (description
1222 "@code{psutil} (Python system and process utilities) is a library for
1223 retrieving information on running processes and system utilization (CPU,
1224 memory, disks, network) in Python. It is useful mainly for system monitoring,
1225 profiling and limiting process resources and management of running processes.
1226 It implements many functionalities offered by command line tools such as: ps,
1227 top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
1228 iotop, uptime, pidof, tty, taskset, pmap.")
1229 (license license:bsd-3)))
1230
1231 (define-public python-shapely
1232 (package
1233 (name "python-shapely")
1234 (version "1.8.4")
1235 (source
1236 (origin
1237 (method url-fetch)
1238 (uri (pypi-uri "Shapely" version))
1239 (sha256
1240 (base32 "130rqd0czi128wm5pdn47v4m6czxd7pkzanbya8q48gsm8ffb5d1"))))
1241 (build-system python-build-system)
1242 (native-inputs
1243 (list python-cython python-matplotlib python-pytest
1244 python-pytest-cov))
1245 (inputs
1246 (list geos))
1247 (propagated-inputs
1248 (list python-numpy))
1249 (arguments
1250 `(#:phases
1251 (modify-phases %standard-phases
1252 (add-after 'unpack 'patch-geos-path
1253 (lambda* (#:key inputs #:allow-other-keys)
1254 (let ((geos (assoc-ref inputs "geos"))
1255 (glibc (assoc-ref inputs ,(if (%current-target-system)
1256 "cross-libc" "libc"))))
1257 (substitute* '("shapely/geos.py" "shapely/_buildcfg.py")
1258 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
1259 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
1260 geos "/lib/libgeos_c.so'])"))
1261 (("free = load_dll\\('c'\\)\\.free")
1262 (string-append "free = load_dll('c', fallbacks=['"
1263 glibc "/lib/libc.so.6']).free"))
1264 (("free = load_dll\\('c', fallbacks=.*\\)\\.free")
1265 (string-append "free = load_dll('c', fallbacks=['"
1266 glibc "/lib/libc.so.6']).free"))))
1267 #t)))))
1268 (home-page "https://github.com/Toblerity/Shapely")
1269 (synopsis "Library for the manipulation and analysis of geometric objects")
1270 (description "Shapely is a Python package for manipulation and analysis of
1271 planar geometric objects. It is based on the @code{GEOS} library.")
1272 (license license:bsd-3)))
1273
1274 (define-public python-shortuuid
1275 (package
1276 (name "python-shortuuid")
1277 (version "0.5.0")
1278 (source
1279 (origin
1280 (method url-fetch)
1281 (uri (pypi-uri "shortuuid" version))
1282 (sha256
1283 (base32
1284 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
1285 (build-system python-build-system)
1286 (native-inputs
1287 (list python-pep8))
1288 (home-page "https://github.com/skorokithakis/shortuuid")
1289 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
1290 (description
1291 "@code{shortuuid} is a Python library for generating concise, unambiguous
1292 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
1293 module and then similar looking characters are removed.")
1294 (license license:bsd-3)))
1295
1296 (define-public python-logwrap
1297 (package
1298 (name "python-logwrap")
1299 (version "8.2.0.post0")
1300 (source
1301 (origin
1302 (method url-fetch)
1303 (uri (pypi-uri "logwrap" version))
1304 (sha256
1305 (base32
1306 "1dv7gny3rfci5cal2ipr6d0pcz3yhka7af96dfsd3ir1mxy8p1j9"))))
1307 (build-system python-build-system)
1308 (arguments
1309 `(#:tests? #f ; Tests not included in pypi release.
1310 #:phases
1311 (modify-phases %standard-phases
1312 (replace 'check
1313 (lambda* (#:key tests? #:allow-other-keys)
1314 (when tests?
1315 (invoke "pytest"))
1316 #t)))))
1317 (native-inputs
1318 (list python-cython python-pytest python-setuptools-scm python-toml
1319 python-wheel))
1320 (home-page "https://github.com/python-useful-helpers/logwrap")
1321 (synopsis "Decorator for logging function arguments")
1322 (description "This package provides a decorator to log function arguments
1323 and function call return values in a human-readable way.")
1324 (license license:asl2.0)))
1325
1326 (define-public python-clyent
1327 (package
1328 (name "python-clyent")
1329 (version "1.2.1")
1330 (source
1331 (origin
1332 (method url-fetch)
1333 (uri (pypi-uri "clyent" version))
1334 (sha256
1335 (base32
1336 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
1337 (build-system python-build-system)
1338 (native-inputs
1339 (list python-mock))
1340 (home-page "https://github.com/Anaconda-Platform/clyent")
1341 (synopsis "Command line client library")
1342 (description "Clyent is a Python command line utility library. It is used
1343 by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
1344 (license license:bsd-3)))
1345
1346 (define-public python-babel
1347 (package
1348 (name "python-babel")
1349 (version "2.9.0")
1350 (source
1351 (origin
1352 (method url-fetch)
1353 (uri (pypi-uri "Babel" version))
1354 (sha256
1355 (base32
1356 "018yg7g2pa6vjixx1nx41cfispgfi0azzp0a1chlycbj8jsil0ys"))))
1357 (build-system python-build-system)
1358 (native-inputs
1359 (list python-freezegun python-pytest tzdata-for-tests))
1360 (propagated-inputs
1361 (list python-pytz))
1362 (arguments
1363 `(#:phases (modify-phases %standard-phases
1364 (replace 'check
1365 (lambda _
1366 (invoke "pytest" "-vv"))))))
1367 (home-page "https://babel.pocoo.org/")
1368 (synopsis
1369 "Tools for internationalizing Python applications")
1370 (description
1371 "Babel is composed of two major parts:
1372 - tools to build and work with gettext message catalogs
1373 - a Python interface to the CLDR (Common Locale Data Repository), providing
1374 access to various locale display names, localized number and date formatting,
1375 etc.")
1376 (license license:bsd-3)))
1377
1378 (define-public python-bidict
1379 (package
1380 (name "python-bidict")
1381 (version "0.21.2")
1382 (source
1383 (origin
1384 (method url-fetch)
1385 (uri (pypi-uri "bidict" version))
1386 (sha256
1387 (base32
1388 "02dy0b1k7qlhn7ajyzkrvxhyhjj0hzcq6ws3zjml9hkdz5znz92g"))))
1389 (build-system python-build-system)
1390 (native-inputs
1391 (list python-coverage
1392 python-hypothesis
1393 python-pre-commit
1394 python-py
1395 python-pytest
1396 python-pytest-benchmark
1397 python-pytest-cov
1398 python-setuptools-scm
1399 python-sortedcollections
1400 python-sortedcontainers
1401 python-sphinx
1402 python-sphinx-autodoc-typehints
1403 python-tox))
1404 (arguments
1405 `(#:phases (modify-phases %standard-phases
1406 (add-after 'unpack 'relax-reqs
1407 (lambda _
1408 (substitute* "setup.py"
1409 (("sortedcollections < 2") "sortedcollections"))
1410 #t))
1411 (replace 'check
1412 (lambda _ (invoke "./run_tests.py"))))))
1413 (home-page "https://bidict.readthedocs.io")
1414 (synopsis "Bidirectional mapping library")
1415 (description "The @code{bidict} library provides several data structures
1416 for working with bidirectional mappings in Python.")
1417 (license license:mpl2.0)))
1418
1419 (define-public python-bip39
1420 (package
1421 (name "python-bip39")
1422 (version "0.0.2")
1423 (source
1424 (origin
1425 (method url-fetch)
1426 (uri (pypi-uri "bip39" version))
1427 (sha256
1428 (base32 "18m7d3gi7vj2zi0bl1z7m0nhcj6i8j9vj4vil276siagnpkv64ry"))))
1429 (build-system python-build-system)
1430 (native-inputs (list python-pytest))
1431 (home-page "https://github.com/de-centralized-systems/python-bip39/")
1432 (synopsis "Self-contained and simple BIP39 implementation in Python")
1433 (description
1434 "This package provides a self-contained and simple BIP39
1435 implementation written in Python. It includes a @code{bip39.py} executable.
1436
1437 BIP39 is a standardized mapping between binary data (the @emph{entropy}),
1438 and a list of words that are easier to remember for humans (the
1439 @emph{mnemonic}).")
1440 (license license:expat)))
1441
1442 (define-public python-bitarray
1443 (package
1444 (name "python-bitarray")
1445 (version "1.4.0")
1446 (source (origin
1447 (method url-fetch)
1448 (uri (pypi-uri "bitarray" version))
1449 (sha256
1450 (base32
1451 "177fj6wbw5jln54wpp6plcqy2329wjkwqwvgz7022rrg3xfrq49g"))))
1452 (build-system python-build-system)
1453 (home-page "https://github.com/ilanschnell/bitarray")
1454 (synopsis "Efficient arrays of booleans")
1455 (description "This package provides an object type which efficiently
1456 represents an array of booleans. Bitarrays are sequence types and behave very
1457 much like usual lists. Eight bits are represented by one byte in a contiguous
1458 block of memory. The user can select between two representations:
1459 little-endian and big-endian. All of the functionality is implemented in C.
1460 Methods for accessing the machine representation are provided. This can be
1461 useful when bit level access to binary files is required, such as portable
1462 bitmap image files. Also, when dealing with compressed data which uses
1463 variable bit length encoding, you may find this module useful.")
1464 (license license:psfl)))
1465
1466 (define-public python-boolean.py
1467 (package
1468 (name "python-boolean.py")
1469 (version "3.6")
1470 (source
1471 (origin
1472 ;; There's no source tarball on PyPI.
1473 (method git-fetch)
1474 (uri (git-reference
1475 (url "https://github.com/bastikr/boolean.py")
1476 (commit (string-append "v" version))))
1477 (file-name (git-file-name name version))
1478 (sha256
1479 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
1480 (build-system python-build-system)
1481 (home-page "https://github.com/bastikr/boolean.py")
1482 (synopsis "Boolean algebra in one Python module")
1483 (description
1484 "This is a small Python library that implements boolean algebra.
1485 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
1486 @code{Symbol} class that can take on one of these two values. Calculations
1487 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
1488 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
1489 Expressions are constructed from parsed strings or directly in Python.")
1490 (license license:bsd-2)))
1491
1492 (define-public python-hdf4
1493 (package
1494 (name "python-hdf4")
1495 (version "0.9")
1496 (source
1497 (origin
1498 (method url-fetch)
1499 (uri (pypi-uri name version))
1500 (sha256
1501 (base32
1502 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
1503 (build-system python-build-system)
1504 (native-inputs `(("nose" ,python-nose)))
1505 (propagated-inputs `(("numpy" ,python-numpy)))
1506 (inputs
1507 `(("hdf4" ,hdf4)
1508 ("libjpeg" ,libjpeg-turbo)
1509 ("zlib" ,zlib)))
1510 (arguments
1511 `(#:phases
1512 (modify-phases %standard-phases
1513 (replace 'check
1514 (lambda _
1515 (invoke "./runexamples.sh")
1516 (invoke "nosetests" "-v"))))))
1517 (home-page "https://github.com/fhs/python-hdf4")
1518 (synopsis "Python interface to the NCSA HDF4 library")
1519 (description
1520 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
1521 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
1522 NetCDF files can also be read and modified. Python-HDF4 is a fork of
1523 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
1524 (license license:expat)))
1525
1526 (define-public python-h5netcdf
1527 (package
1528 (name "python-h5netcdf")
1529 (version "1.0.1")
1530 (source
1531 (origin
1532 (method url-fetch)
1533 (uri (pypi-uri "h5netcdf" version))
1534 (sha256
1535 (base32 "1b2dcgf5rwy7pb7hr4prkc5vgcw9qc2was20dmnj90lbrpx08rvp"))))
1536 (build-system python-build-system)
1537 (arguments
1538 (list #:phases
1539 #~(modify-phases %standard-phases
1540 (replace 'check
1541 (lambda* (#:key tests? #:allow-other-keys)
1542 (when tests?
1543 (invoke "pytest" "-vv" "h5netcdf/tests")))))))
1544 (native-inputs
1545 (list python-netcdf4
1546 python-pytest
1547 python-setuptools-scm))
1548 (propagated-inputs
1549 (list python-h5py python-packaging))
1550 (home-page "https://h5netcdf.org")
1551 (synopsis "Python interface for the netCDF4 file-format based on h5py")
1552 (description "This package provides Python interface for the netCDF4
1553 file-format that reads and writes local or remote HDF5 files directly via h5py
1554 or h5pyd, without relying on the Unidata netCDF library")
1555 (license license:bsd-3)))
1556
1557 (define-public python-h5py
1558 (package
1559 (name "python-h5py")
1560 (version "3.6.0")
1561 (source
1562 (origin
1563 (method url-fetch)
1564 (uri (pypi-uri "h5py" version))
1565 (sha256
1566 (base32
1567 "0afv805vqrm5071g7alwv41920nhh8kjv4m5nbia9awj9a0x4ll7"))))
1568 (build-system python-build-system)
1569 (arguments
1570 `(#:tests? #f ; no test target
1571 #:phases
1572 (modify-phases %standard-phases
1573 (add-after 'unpack 'fix-hdf5-paths
1574 (lambda* (#:key inputs #:allow-other-keys)
1575 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5")))))))
1576 (propagated-inputs
1577 (list python-six python-numpy))
1578 (inputs
1579 (list hdf5-1.10))
1580 (native-inputs
1581 (list python-cython python-pkgconfig pkg-config))
1582 (home-page "https://www.h5py.org/")
1583 (synopsis "Read and write HDF5 files from Python")
1584 (description
1585 "The h5py package provides both a high- and low-level interface to the
1586 HDF5 library from Python. The low-level interface is intended to be a
1587 complete wrapping of the HDF5 API, while the high-level component supports
1588 access to HDF5 files, datasets and groups using established Python and NumPy
1589 concepts.")
1590 (license license:bsd-3)))
1591
1592 (define-public python-hnswlib
1593 (package
1594 (name "python-hnswlib")
1595 (version "0.5.2")
1596 (source
1597 (origin
1598 (method url-fetch)
1599 (uri (pypi-uri "hnswlib" version))
1600 (sha256
1601 (base32 "0wf1cwmxmdzfqmfhrkqdxb5spf21ylgl2bidswhzjrqhwf35c9qf"))))
1602 (build-system python-build-system)
1603 (arguments
1604 `(#:phases
1605 (modify-phases %standard-phases
1606 (add-after 'unpack 'disable-native-optimization
1607 (lambda _
1608 (substitute* "setup.py"
1609 ((", '-march=native'") "")))))))
1610 (propagated-inputs
1611 (list python-numpy))
1612 (native-inputs
1613 (list pybind11))
1614 (home-page "https://github.com/nmslib/hnswlib")
1615 (synopsis "Fast approximate nearest neighbor search")
1616 (description "Hnswlib is a header-only C++ implementation of fast
1617 approximate nearest neighbor search with Python bindings.")
1618 (license license:asl2.0)))
1619
1620 (define-public python-pyls-black
1621 (package
1622 (name "python-pyls-black")
1623 (version "0.4.7")
1624 (source
1625 (origin
1626 ;; There are no tests in the PyPI tarball.
1627 (method git-fetch)
1628 (uri (git-reference
1629 (url "https://github.com/rupert/pyls-black/")
1630 (commit (string-append "v" version))))
1631 (file-name (git-file-name name version))
1632 (sha256
1633 (base32 "0bkhfnlik89j3yamr20br4wm8975f20v33wabi2nyxvj10whr5dj"))
1634 ;; Patch to work with python-lsp-server. Taken from
1635 ;; <https://github.com/rupert/pyls-black/pull/37>.
1636 (modules '((guix build utils)))
1637 (snippet
1638 '(begin
1639 (substitute* "setup.cfg"
1640 (("python-language-server")
1641 "python-lsp-server"))
1642 (substitute* '("pyls_black/plugin.py" "tests/test_plugin.py")
1643 (("pyls_format_document")
1644 "pylsp_format_document")
1645 (("pyls_format_range")
1646 "pylsp_format_range")
1647 (("from pyls([ \\.])" _ char)
1648 (string-append "from pylsp" char)))))))
1649 (build-system python-build-system)
1650 (arguments
1651 `(#:test-target "pytest"))
1652 (propagated-inputs
1653 (list python-black python-lsp-server python-tomli))
1654 (native-inputs
1655 (list python-flake8 python-isort python-mypy python-pytest
1656 python-pytest-runner))
1657 (home-page "https://github.com/rupert/pyls-black")
1658 (synopsis "Black plugin for the Python Language Server")
1659 (description "Black plugin for the Python Language Server.")
1660 (license license:expat)))
1661
1662 (define-public python-sh
1663 (package
1664 (name "python-sh")
1665 (version "1.14.2")
1666 (source
1667 (origin
1668 (method url-fetch)
1669 (uri (pypi-uri "sh" version))
1670 (sha256
1671 (base32
1672 "03gyss1rhj4in7pgysg4q0hxp3230whinlpy1532ljs99lrx0ywx"))))
1673 (build-system python-build-system)
1674 (arguments
1675 '(#:phases
1676 (modify-phases %standard-phases
1677 (replace 'check
1678 (lambda _
1679 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
1680 (setenv "HOME" "/tmp")
1681 (invoke "python" "sh.py" "test"))))))
1682 (native-inputs
1683 (list python-coverage))
1684 (home-page "https://github.com/amoffat/sh")
1685 (synopsis "Python subprocess replacement")
1686 (description "This package provides a replacement for Python's
1687 @code{subprocess} feature.")
1688 (license license:expat)))
1689
1690 (define-public python-cftime
1691 (package
1692 (name "python-cftime")
1693 (version "1.5.1.1")
1694 (source
1695 (origin
1696 (method url-fetch)
1697 (uri (pypi-uri "cftime" version))
1698 (sha256
1699 (base32 "0l1a22zlhdpgaisibvvm7dhij4vzfm661rnv00y2snpyqxpdgi3d"))))
1700 (build-system python-build-system)
1701 (propagated-inputs
1702 (list python-numpy))
1703 (native-inputs
1704 (list python-check-manifest
1705 python-coverage
1706 python-coveralls
1707 python-cython
1708 python-pytest-cov
1709 python-sphinx
1710 python-twine
1711 python-wheel))
1712 (home-page "https://unidata.github.io/cftime/")
1713 (synopsis "Library for time handling")
1714 (description
1715 "This package provides time-handling functionality that used to be part
1716 of the netcdf4 package before.")
1717 (license license:expat)))
1718
1719 (define-public python-netcdf4
1720 (package
1721 (name "python-netcdf4")
1722 (version "1.6.0")
1723 (source
1724 (origin
1725 (method url-fetch)
1726 (uri (pypi-uri "netCDF4" version))
1727 (sha256
1728 (base32
1729 "0qxs8r1qmsmg760wm5q0wqlcm7hdd3k7cghryw6wvqd3v5rs7vwm"))))
1730 (build-system python-build-system)
1731 (arguments
1732 '(#:phases
1733 (modify-phases %standard-phases
1734 (add-after 'unpack 'configure-locations
1735 (lambda* (#:key inputs #:allow-other-keys)
1736 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
1737 #t)))))
1738 (native-inputs
1739 (list python-cython))
1740 (propagated-inputs
1741 (list python-numpy python-cftime))
1742 (inputs
1743 (list netcdf hdf4 hdf5))
1744 (home-page "https://github.com/Unidata/netcdf4-python")
1745 (synopsis "Python/numpy interface to the netCDF library")
1746 (description "Netcdf4-python is a Python interface to the netCDF C
1747 library. netCDF version 4 has many features not found in earlier
1748 versions of the library and is implemented on top of HDF5. This module
1749 can read and write files in both the new netCDF 4 and the old netCDF 3
1750 format, and can create files that are readable by HDF5 clients. The
1751 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
1752 to users of that module.")
1753 ;; The software is mainly ISC, but includes some files covered
1754 ;; by the Expat license.
1755 (license (list license:isc license:expat))))
1756
1757 (define-public python-ncclient
1758 (package
1759 (name "python-ncclient")
1760 (version "0.6.12")
1761 (source
1762 (origin
1763 (method git-fetch) ;no tests in PyPI release
1764 (uri (git-reference
1765 (url "https://github.com/ncclient/ncclient")
1766 (commit (string-append "v" version))))
1767 (file-name (git-file-name name version))
1768 (sha256
1769 (base32
1770 "0cb568z5syg6hh0dv813bw7s1mjy7ga5xzxbm9naf4zz2qfdg4js"))))
1771 (build-system python-build-system)
1772 (arguments
1773 `(#:phases (modify-phases %standard-phases
1774 (replace 'check
1775 (lambda* (#:key tests? #:allow-other-keys)
1776 (when tests?
1777 (invoke "pytest")))))))
1778 (native-inputs
1779 (list python-pytest))
1780 (propagated-inputs
1781 (list python-lxml python-paramiko))
1782 (home-page "https://github.com/ncclient/ncclient")
1783 (synopsis "Python library for NETCONF clients")
1784 (description "@code{ncclient} is a Python library that facilitates
1785 client-side scripting and application development around the NETCONF
1786 protocol.")
1787 (license license:asl2.0)))
1788
1789 (define-public python-ncls
1790 (package
1791 (name "python-ncls")
1792 (version "0.0.65")
1793 (source (origin
1794 (method url-fetch)
1795 (uri (pypi-uri "ncls" version))
1796 (sha256
1797 (base32
1798 "1wx06xqknd2r98w8z93f47g5dpxzn92kamhj8vkq0nj569hf7cg1"))))
1799 (build-system python-build-system)
1800 (propagated-inputs (list python-numpy))
1801 (home-page "https://github.com/endrebak/ncls")
1802 (synopsis "Nested containment list data structure")
1803 (description
1804 "This package provides a wrapper for the nested containment list data
1805 structure. It is a static interval-tree that is fast for both construction
1806 and lookups.")
1807 (license license:bsd-3)))
1808
1809 (define-public python-license-expression
1810 (package
1811 (name "python-license-expression")
1812 (version "1.2")
1813 (source
1814 (origin
1815 (method url-fetch)
1816 (uri (pypi-uri "license-expression" version))
1817 (sha256
1818 (base32 "1g0sgphss8hbi1rpl4avy1nmbixmy9v194xdbvkjgl90vzgy2q3r"))))
1819 (build-system python-build-system)
1820 (propagated-inputs
1821 (list python-boolean.py))
1822 (home-page "https://github.com/nexB/license-expression")
1823 (synopsis "Apply boolean logic to license expressions")
1824 (description
1825 "This Python module defines a tiny language to evaluate and compare
1826 license expressions using boolean logic. Logical combinations of licenses can
1827 be tested for equality, containment, and equivalence. They can be normalised
1828 and simplified. It supports SPDX license expressions as well as other naming
1829 conventions and aliases in the same expression.")
1830 (license license:gpl2+)))
1831
1832 (define-public python-wand
1833 (package
1834 (name "python-wand")
1835 (version "0.6.10")
1836 (source
1837 (origin
1838 (method url-fetch)
1839 (uri (pypi-uri "Wand" version))
1840 (sha256
1841 (base32 "0mywzs235skwq670c80achrd34kangwy24793k1nij3651zllgrp"))))
1842 (build-system python-build-system)
1843 (arguments
1844 `(#:phases
1845 (modify-phases %standard-phases
1846 (add-after 'unpack 'find-magickwand
1847 (lambda* (#:key inputs #:allow-other-keys)
1848 (setenv "MAGICK_HOME" (assoc-ref inputs "imagemagick"))
1849 (setenv "WAND_MAGICK_LIBRARY_SUFFIX" ".Q16"))))))
1850 (native-inputs
1851 (list python-pytest))
1852 (inputs
1853 (list imagemagick))
1854 (home-page "https://docs.wand-py.org/")
1855 (synopsis "MagickWand API binding for Python")
1856 (description
1857 "Wand is a ctypes-based binding for ImageMagick's MagickWand library.")
1858 (license license:expat)))
1859
1860 (define-public python-lockfile
1861 (package
1862 (name "python-lockfile")
1863 (version "0.12.2")
1864 (source
1865 (origin
1866 (method url-fetch)
1867 (uri (pypi-uri "lockfile" version))
1868 (sha256
1869 (base32
1870 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
1871 (build-system python-build-system)
1872 (arguments '(#:test-target "check"))
1873 (native-inputs
1874 (list python-pbr))
1875 (home-page "https://launchpad.net/pylockfile")
1876 (synopsis "Platform-independent file locking module")
1877 (description
1878 "The lockfile package exports a LockFile class which provides a simple
1879 API for locking files.")
1880 (license license:expat)))
1881
1882 (define-public python-fb-re2
1883 (package
1884 (name "python-fb-re2")
1885 (version "1.0.7")
1886 (source
1887 (origin
1888 (method git-fetch)
1889 (uri (git-reference
1890 (url "https://github.com/facebook/pyre2")
1891 (commit (string-append "v" version))))
1892 (file-name (git-file-name name version))
1893 (sha256
1894 (base32
1895 "0snprxdnh3m45r3b0az4v0l28h90ycmfbybzla6xg1qviwv9w1ak"))))
1896 (build-system python-build-system)
1897 (inputs
1898 (list re2))
1899 (home-page "https://github.com/facebook/pyre2")
1900 (synopsis "Python wrapper for RE2")
1901 (description "This package provides a Python extension that wraps Google's
1902 RE2 regular expression library. It implements many of the features of
1903 Python's built-in @code{re} module with compatible interfaces.")
1904 (license license:bsd-3)))
1905
1906 (define-public python-filelock
1907 (package
1908 (name "python-filelock")
1909 (version "3.0.12")
1910 (source
1911 (origin
1912 (method url-fetch)
1913 (uri (pypi-uri "filelock" version))
1914 (sha256
1915 (base32
1916 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
1917 (build-system python-build-system)
1918 (home-page
1919 "https://github.com/benediktschmitt/py-filelock")
1920 (synopsis "Platform independent file lock")
1921 (description "@code{filelock} contains a single module implementing
1922 a platform independent file lock in Python, which provides a simple way of
1923 inter-process communication.")
1924 (license license:unlicense)))
1925
1926 (define-public python-semantic-version
1927 (package
1928 (name "python-semantic-version")
1929 (version "2.8.5")
1930 (source
1931 (origin
1932 (method url-fetch)
1933 (uri (pypi-uri "semantic_version" version))
1934 (sha256
1935 (base32
1936 "0m4avx8zdkzc7qglv5zlr54g8yna5vl098drg5396ql7aph2vjyj"))))
1937 (build-system python-build-system)
1938 (home-page "https://github.com/rbarrois/python-semanticversion")
1939 (synopsis "Semantic versioning module for Python")
1940 (description
1941 "The @code{semantic_version} class is a small library for handling
1942 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
1943
1944 It can compare versions, generate a new version that represents a bump in one of
1945 the version levels, and check whether any given string is a proper semantic
1946 version identifier.")
1947 (license license:bsd-3)))
1948
1949 (define-public python-serpent
1950 (package
1951 (name "python-serpent")
1952 (version "1.28")
1953 (source
1954 (origin
1955 (method url-fetch)
1956 (uri (pypi-uri "serpent" version))
1957 (sha256
1958 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
1959 (build-system python-build-system)
1960 (native-inputs
1961 (list python-attrs python-pytz))
1962 (home-page "https://github.com/irmen/Serpent")
1963 (synopsis "Serializer for literal Python expressions")
1964 (description
1965 "Serpent provides @code{ast.literal_eval()}-compatible object tree
1966 serialization. It serializes an object tree into bytes (an utf-8 encoded
1967 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
1968 to rebuild the original object tree.
1969
1970 Because only safe literals are encoded, it is safe to send serpent data to
1971 other machines, such as over the network.")
1972 (license license:expat)))
1973
1974 (define-public python-setuptools
1975 (package
1976 (name "python-setuptools")
1977 (version "64.0.3")
1978 (source
1979 (origin
1980 (method url-fetch)
1981 (uri (pypi-uri "setuptools" version))
1982 (sha256
1983 (base32
1984 "1sllqf0bhsl2yilf1w0xnlz0r4yaksmwaj0ap91zdc6kgbigdjiv"))
1985 (modules '((guix build utils)))
1986 (snippet
1987 ;; Remove included binaries which are used to build self-extracting
1988 ;; installers for Windows.
1989 ;; TODO: Find some way to build them ourself so we can include them.
1990 '(for-each delete-file (find-files "setuptools"
1991 "^(cli|gui).*\\.exe$")))))
1992 (build-system python-build-system)
1993 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1994 ;; One could bootstrap with an internal untested setuptools.
1995 (arguments (list #:tests? #f))
1996 (home-page "https://pypi.org/project/setuptools/")
1997 (synopsis "Library designed to facilitate packaging Python projects")
1998 (description "Setuptools is a fully-featured, stable library designed to
1999 facilitate packaging Python projects, where packaging includes:
2000 @itemize
2001 @item Python package and module definitions
2002 @item distribution package metadata
2003 @item test hooks
2004 @item project installation
2005 @item platform-specific details.
2006 @end itemize")
2007 ;; TODO: setuptools now bundles the following libraries:
2008 ;; packaging, pyparsing, six and appdirs. How to unbundle?
2009 (license (list license:psfl ;setuptools itself
2010 license:expat ;six, appdirs, pyparsing
2011 license:asl2.0 ;packaging is dual ASL2/BSD-2
2012 license:bsd-2))))
2013
2014 (define-public python-setuptools-declarative-requirements
2015 (package
2016 (name "python-setuptools-declarative-requirements")
2017 (version "1.2.0")
2018 (source
2019 (origin
2020 (method url-fetch)
2021 (uri (pypi-uri
2022 "setuptools-declarative-requirements"
2023 version))
2024 (sha256
2025 (base32
2026 "1l8zmcnp9h8sp8hsw7b81djaa1a9yig0y7i4phh5pihqz1gdn7yi"))))
2027 (build-system python-build-system)
2028 (native-inputs
2029 (list python-pytest python-setuptools-scm))
2030 (propagated-inputs
2031 (list python-toml python-wheel))
2032 (home-page
2033 "https://github.com/s0undt3ch/setuptools-declarative-requirements")
2034 (synopsis "File support for setuptools declarative setup.cfg")
2035 (description
2036 "This package provides file support for setuptools declarative
2037 @code{setup.cfg}.")
2038 (license license:asl2.0)))
2039
2040 ;; The setuptools provided by Python 3.9 is too new for Tensorflow.
2041 (define-public python-setuptools-for-tensorflow
2042 (hidden-package
2043 (package
2044 (inherit python-setuptools)
2045 (version "39.1.0")
2046 (source (origin
2047 (inherit (package-source python-setuptools))
2048 (uri (pypi-uri "setuptools" version ".zip"))
2049 (sha256
2050 (base32
2051 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65"))))
2052 (arguments
2053 `(#:tests? #f ; tests require vendored resources
2054 #:phases
2055 (modify-phases %standard-phases
2056 (add-after 'unpack 'compatibility-fixes
2057 (lambda _
2058 ;; Python 3.9 no longer has HTMLParser
2059 (substitute* "setuptools/py33compat.py"
2060 (("html_parser.HTMLParser\\(\\).unescape")
2061 "html.unescape"))
2062 ;; This needs distutils.msvc9compiler
2063 (delete-file "setuptools/tests/test_msvc.py"))))))
2064 (native-inputs
2065 (list python-pytest python-mock python-six)))))
2066
2067 (define-public python-uniseg
2068 (package
2069 (name "python-uniseg")
2070 (version "0.7.1")
2071 (source
2072 (origin
2073 (method url-fetch)
2074 (uri (pypi-uri "uniseg" version ".zip"))
2075 (sha256
2076 (base32
2077 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
2078 (build-system python-build-system)
2079 (arguments
2080 '(#:tests? #f)) ; The test suite requires network access.
2081 (native-inputs
2082 (list unzip))
2083 (home-page
2084 "https://bitbucket.org/emptypage/uniseg-python")
2085 (synopsis
2086 "Python library to determine Unicode text segmentations")
2087 (description
2088 "Uniseg is a Python package used to determine Unicode text segmentations.
2089 Supported segmentations include:
2090 @enumerate
2091 @item @dfn{Code point} (any value in the Unicode codespace)
2092 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
2093 multiple Unicode code points, e.g. \"G\" + acute-accent)
2094 @item Word break
2095 @item Sentence break
2096 @item Line break
2097 @end enumerate")
2098 (license license:expat)))
2099
2100 (define-public python-humanfriendly
2101 (package
2102 (name "python-humanfriendly")
2103 (version "8.2")
2104 (source
2105 (origin
2106 (method url-fetch)
2107 (uri (pypi-uri "humanfriendly" version))
2108 (sha256
2109 (base32
2110 "04ixg8b7p6xc8x8lffhi7wfl77xhszakhd0s6j0cf6a84j8yqlmz"))))
2111 (build-system python-build-system)
2112 (arguments
2113 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
2114 #:tests? #f))
2115 (home-page "https://humanfriendly.readthedocs.io")
2116 (synopsis "Human-friendly input and output in Python")
2117 (description
2118 "The functions and classes in @code{humanfriendly} can be used to make
2119 text interfaces more user-friendly. It includes tools to parse and format
2120 numbers, file sizes, and timespans, timers for long-running operations, menus
2121 to allow the user to choose from a list of options, and terminal interaction
2122 helpers.")
2123 (license license:expat)))
2124
2125 (define-public python-textparser
2126 (package
2127 (name "python-textparser")
2128 (version "0.23.0")
2129 (source
2130 (origin
2131 (method url-fetch)
2132 (uri (pypi-uri "textparser" version))
2133 (sha256
2134 (base32
2135 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
2136 (build-system python-build-system)
2137 (home-page "https://github.com/eerimoq/textparser")
2138 (synopsis "Fast text parser for Python")
2139 (description "This library provides a text parser written in the Python
2140 language. It aims to be fast.")
2141 (license license:expat)))
2142
2143 (define-public python-aenum
2144 (package
2145 (name "python-aenum")
2146 (version "2.2.4")
2147 (source
2148 (origin
2149 (method url-fetch)
2150 (uri (pypi-uri "aenum" version))
2151 (sha256
2152 (base32 "0r1812bjm72x73pl7y4yhffr4zbdjgxa08avsy4b3di0pqgqv0l1"))))
2153 (build-system python-build-system)
2154 (arguments
2155 `(#:phases (modify-phases %standard-phases
2156 (replace 'check
2157 (lambda _
2158 ;; We must run the test suite module directly, as it
2159 ;; fails to define the 'tempdir' variable in scope for
2160 ;; the tests otherwise
2161 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
2162 ;; issues/32/running-tests-with-python-setuppy-test).
2163 (invoke "python3" "aenum/test.py")
2164 ;; This one fails with "NameError: name
2165 ;; 'test_pickle_dump_load' is not defined" (see:
2166 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
2167 ;; /error-running-the-test_v3py-test-suite).
2168 ;; (invoke "python3" "aenum/test_v3.py")
2169 #t)))))
2170 (home-page "https://bitbucket.org/stoneleaf/aenum")
2171 (synopsis "Advanced enumerations, namedtuples and constants for Python")
2172 (description "The aenum library includes an @code{Enum} base class, a
2173 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
2174 class.")
2175 (license license:bsd-3)))
2176
2177 (define-public python-can
2178 (package
2179 (name "python-can")
2180 (version "4.0.0")
2181 (source
2182 (origin
2183 (method url-fetch)
2184 (uri (pypi-uri "python-can" version))
2185 (sha256
2186 (base32
2187 "0pcbdgdw94lc2sxd56w6wdsshrs9dd5d3wp0x4sfd0drzx32inar"))))
2188 (build-system python-build-system)
2189 (arguments
2190 `(#:phases (modify-phases %standard-phases
2191 (add-after 'unpack 'relax-version-requirements
2192 (lambda _
2193 (substitute* "setup.py"
2194 (("mock~=2\\.0") "mock")
2195 (("coverage<5") "coverage")
2196 (("pytest~=4\\.6") "pytest")
2197 (("pytest-timeout~=1\\.3") "pytest-timeout")
2198 (("pytest-cov.*") "pytest-cov\n")
2199 (("hypothesis~=4\\.56") "hypothesis"))))
2200 (add-after 'unpack 'fix-broken-tests
2201 ;; The tests try to run two scripts it expects should be
2202 ;; in PATH, but they aren't at this time (see:
2203 ;; https://github.com/hardbyte/python-can/issues/805).
2204 (lambda _
2205 (substitute* "test/test_scripts.py"
2206 (("\"can_logger\\.py --help\"") "")
2207 (("\"can_player\\.py --help\"") ""))))
2208 (replace 'check
2209 (lambda* (#:key tests? #:allow-other-keys)
2210 (when tests?
2211 (invoke "pytest" "-vv" "test"
2212 ;; Disable tests which require specific CAN
2213 ;; drivers we have no package for in Guix.
2214 "--ignore" "test/test_interface_canalystii.py"
2215 ;; These tests fail with "OSError: [Errno 19]
2216 ;; No such device".
2217 "-k" "not BasicTestUdpMulticastBusIPv")))))))
2218 (propagated-inputs
2219 (list python-msgpack python-typing-extensions python-wrapt))
2220 (native-inputs
2221 (list python-codecov
2222 python-coverage
2223 python-future
2224 python-hypothesis
2225 python-mock
2226 python-parameterized
2227 python-pyserial
2228 python-pytest
2229 python-pytest-cov
2230 python-pytest-runner
2231 python-pytest-timeout))
2232 (home-page "https://github.com/hardbyte/python-can")
2233 (synopsis "Controller Area Network (CAN) interface module for Python")
2234 (description "This package defines the @code{can} module, which provides
2235 controller area network (CAN) support for Python developers; providing common
2236 abstractions to different hardware devices, and a suite of utilities for
2237 sending and receiving messages on a CAN bus.")
2238 (license license:lgpl3+)))
2239
2240 (define-public python-canopen
2241 (package
2242 (name "python-canopen")
2243 (version "2.0.0")
2244 (source
2245 (origin
2246 (method url-fetch)
2247 (uri (pypi-uri "canopen" version))
2248 (sha256
2249 (base32 "1nb543wb37kj95v6bhh272lm5gkpi41q3pnsl1fxlyizm2gamj5w"))))
2250 (build-system python-build-system)
2251 (native-inputs (list python-packaging))
2252 (propagated-inputs (list python-can))
2253 (home-page "https://github.com/christiansandberg/canopen")
2254 (synopsis "CANopen stack implementation")
2255 (description
2256 "This package provides a Python implementation of the
2257 @uref{https://www.can-cia.org/canopen/,CANopen standard} for
2258 @acronym{CANs, controller-area networks}. The aim of the project is to
2259 support the most common parts of the CiA 301 standard in a simple
2260 Pythonic interface. It is mainly targeted for testing and automation
2261 tasks rather than a standard compliant master implementation.")
2262 (license license:expat)))
2263
2264 (define-public python-caniusepython3
2265 (package
2266 (name "python-caniusepython3")
2267 (version "7.2.0")
2268 (source
2269 (origin
2270 (method url-fetch)
2271 (uri (pypi-uri "caniusepython3" version))
2272 (sha256
2273 (base32
2274 "0a755444ln38j8d7xb3yw0wzpd0mjrzfn6zqvsh06nw1vdaq4l28"))))
2275 (build-system python-build-system)
2276 (arguments
2277 `(#:phases (modify-phases %standard-phases
2278 (add-after 'unpack 'relax-requirements
2279 (lambda _
2280 (substitute* "setup.py"
2281 ;; These are for compatibility with Python 2.
2282 ((".*'argparse', 'backports.functools_lru_cache',.*")
2283 ""))
2284 (substitute* "dev_requirements.txt"
2285 ((".*pylint.*") "")) ;not actually required
2286 #t))
2287 (replace 'check
2288 (lambda _
2289 (invoke "py.test" "-k" "not NetworkTests"))))))
2290 (propagated-inputs
2291 (list python-distlib python-packaging python-requests))
2292 (native-inputs
2293 (list python-mock python-pytest))
2294 (home-page "https://github.com/brettcannon/caniusepython3")
2295 (synopsis "Check for Python 3-incompatible Python libraries")
2296 (description "The @command{caniusepython3} command scans your project and
2297 reports the Python 3-incompatible libraries it found. It can also be used as
2298 a library.")
2299 (license license:asl2.0)))
2300
2301 (define-public python-diskcache
2302 (package
2303 (name "python-diskcache")
2304 (version "4.1.0")
2305 (source
2306 (origin
2307 (method url-fetch)
2308 (uri (pypi-uri "diskcache" version))
2309 (sha256
2310 (base32
2311 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
2312 (build-system python-build-system)
2313 (arguments
2314 `(#:tests? #f)) ;test suite not included in the release
2315 (home-page "http://www.grantjenks.com/docs/diskcache/")
2316 (synopsis "Disk and file backed cache library")
2317 (description "DiskCache is a disk and file backed persistent cache.")
2318 (license license:asl2.0)))
2319
2320 (define-public python-argparse-addons
2321 (package
2322 (name "python-argparse-addons")
2323 (version "0.7.0")
2324 (source
2325 (origin
2326 (method url-fetch)
2327 (uri (pypi-uri "argparse_addons" version))
2328 (sha256
2329 (base32 "1yx54dmnr3xggjcjk6bbdafvzp6cynrakl56wyz3jglmfvk0znpm"))))
2330 (build-system python-build-system)
2331 (home-page "https://github.com/eerimoq/argparse_addons")
2332 (synopsis "Extensions for Python's @code{argparse} library")
2333 (description "This Python library provides additional types and actions
2334 for the standard @code{argparse} library.")
2335 (license license:expat)))
2336
2337 (define-public python-bitstruct
2338 (package
2339 (name "python-bitstruct")
2340 (version "8.14.0")
2341 (source
2342 (origin
2343 (method url-fetch)
2344 (uri (pypi-uri "bitstruct" version))
2345 (sha256
2346 (base32
2347 "149c73yrqbph71bbyf925r2mbh2jdymqxc6d49lnylpiflf1j313"))))
2348 (build-system python-build-system)
2349 (home-page "https://github.com/eerimoq/bitstruct")
2350 (synopsis "Python values to and C bit field structs converter")
2351 (description "This module performs conversions between Python values and C
2352 bit field structs represented as Python byte strings. It is intended to have
2353 a similar interface as the @code{struct} module from Python, but working on
2354 bits instead of primitive data types like @code{char}, @code{int}, etc.")
2355 (license license:expat)))
2356
2357 (define-public python-cantools
2358 (package
2359 (name "python-cantools")
2360 (version "37.0.7")
2361 (source
2362 (origin
2363 ;; We take the sources from the Git repository as the documentation is
2364 ;; not included with the PyPI archive.
2365 (method git-fetch)
2366 (uri (git-reference
2367 (url "https://github.com/eerimoq/cantools")
2368 (commit version)))
2369 (file-name (git-file-name name version))
2370 (sha256
2371 (base32
2372 "1qcf1fcwif7w70qmhxw2b8kqh420igbinq60p1chzf98xcb0ansx"))))
2373 (build-system python-build-system)
2374 (arguments
2375 (list
2376 #:phases
2377 #~(modify-phases %standard-phases
2378 (add-after 'build 'build-doc
2379 (lambda _
2380 ;; See: https://github.com/eerimoq/cantools/issues/190.
2381 (substitute* "README.rst"
2382 (("https://github.com/eerimoq/cantools/raw/master\
2383 /docs/monitor.png")
2384 "monitor.png"))
2385 (invoke "make" "-C" "docs" "man" "info")))
2386 (add-after 'install 'install-doc
2387 (lambda* (#:key outputs #:allow-other-keys)
2388 (let* ((info (string-append #$output "/share/info"))
2389 (man1 (string-append #$output "/share/man/man1")))
2390 (install-file "docs/_build/texinfo/cantools.info" info)
2391 (install-file "docs/_build/man/cantools.1" man1)))))))
2392 (native-inputs (list python-sphinx texinfo))
2393 (propagated-inputs
2394 (list python-argparse-addons
2395 python-bitstruct
2396 python-can
2397 python-crccheck
2398 python-diskcache
2399 python-matplotlib
2400 python-parameterized
2401 python-textparser))
2402 (home-page "https://github.com/eerimoq/cantools")
2403 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
2404 (description "This package includes Controller Area Network (CAN) related
2405 tools that can be used to:
2406 @itemize
2407 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
2408 @item encode and decode CAN messages
2409 @item multiplex simple and extended signals
2410 @item diagnose DID encoding and decoding
2411 @item dump the CAN decoder output
2412 @item test CAN nodes
2413 @item generate C source code
2414 @item monitor the CAN bus
2415 @end itemize")
2416 (license license:expat)))
2417
2418 (define-public python-capturer
2419 (package
2420 (name "python-capturer")
2421 (version "2.4")
2422 (source
2423 (origin
2424 (method url-fetch)
2425 (uri (pypi-uri "capturer" version))
2426 (sha256
2427 (base32
2428 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
2429 (build-system python-build-system)
2430 (arguments
2431 `(#:tests? #f))
2432 (propagated-inputs
2433 (list python-humanfriendly))
2434 (home-page "https://capturer.readthedocs.io")
2435 (synopsis "Capture stdout and stderr streams of the current process")
2436 (description
2437 "The capturer package makes it easy to capture the stdout and stderr
2438 streams of the current process and subprocesses. Output can be relayed
2439 to the terminal in real time but is also available to the Python program
2440 for additional processing.")
2441 (license license:expat)))
2442
2443 (define-public python-case
2444 (package
2445 (name "python-case")
2446 (version "1.5.3")
2447 (source
2448 (origin
2449 (method url-fetch)
2450 (uri (pypi-uri "case" version))
2451 (sha256
2452 (base32
2453 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
2454 (build-system python-build-system)
2455 (propagated-inputs
2456 (list python-mock python-nose python-six))
2457 (native-inputs
2458 (list python-coverage))
2459 (home-page "https://github.com/celery/case")
2460 (synopsis "Unittest utilities and convenience methods")
2461 (description
2462 "The @code{case} package provides utilities on top of unittest, including
2463 some helpful Python 2 compatibility convenience methods.")
2464 (license license:bsd-3)))
2465
2466 (define-public python-verboselogs
2467 (package
2468 (name "python-verboselogs")
2469 (version "1.7")
2470 (source
2471 (origin
2472 (method url-fetch)
2473 (uri (pypi-uri "verboselogs" version))
2474 (sha256
2475 (base32
2476 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
2477 (build-system python-build-system)
2478 (arguments
2479 `(#:phases
2480 (modify-phases %standard-phases
2481 (replace 'check
2482 (lambda _
2483 ;; Do not run pylint plugin test, as astroid is an old
2484 ;; unsupported version.
2485 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
2486 "verboselogs/tests.py"))))))
2487 (native-inputs
2488 (list python-mock python-pytest))
2489 (home-page "https://verboselogs.readthedocs.io")
2490 (synopsis "Verbose logging level for Python's logging module")
2491 (description
2492 "The @code{verboselogs} package extends Python's @code{logging} module to
2493 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
2494 (license license:expat)))
2495
2496 (define-public python-coloredlogs
2497 (package
2498 (name "python-coloredlogs")
2499 (version "10.0")
2500 (source
2501 (origin
2502 (method url-fetch)
2503 (uri (pypi-uri "coloredlogs" version))
2504 (sha256
2505 (base32
2506 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
2507 (build-system python-build-system)
2508 (arguments
2509 `(;Tests require some updated modules
2510 #:tests? #f))
2511 (propagated-inputs
2512 (list python-capturer))
2513 (home-page "https://coloredlogs.readthedocs.io")
2514 (synopsis "Colored stream handler for Python's logging module")
2515 (description
2516 "The @code{coloredlogs} package enables colored terminal output for
2517 Python's logging module. The @code{ColoredFormatter} class inherits from
2518 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
2519 messages in color.")
2520 (license license:expat)))
2521
2522 (define-public python-editorconfig
2523 (package
2524 (name "python-editorconfig")
2525 (version "0.12.2")
2526 (source
2527 (origin
2528 (method url-fetch)
2529 (uri (pypi-uri "EditorConfig" version))
2530 (sha256
2531 (base32
2532 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
2533 (build-system python-build-system)
2534 (home-page "https://editorconfig.org/")
2535 (synopsis "EditorConfig bindings for python")
2536 (description "The EditorConfig project consists of a file format for
2537 defining coding styles and a collection of text editor plugins that enable
2538 editors to read the file format and adhere to defined styles. EditorConfig
2539 files are easily readable and they work nicely with version control systems.")
2540 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
2541 (license (list license:bsd-2 license:psfl))))
2542
2543 (define-public dosage
2544 (package
2545 (name "dosage")
2546 (version "2.17")
2547 (source
2548 (origin
2549 (method url-fetch)
2550 (uri (pypi-uri "dosage" version))
2551 (sha256
2552 (base32
2553 "0vmxgn9wd3j80hp4gr5iq06jrl4gryz5zgfdd2ah30d12sfcfig0"))))
2554 (build-system python-build-system)
2555 (propagated-inputs
2556 (list python-cached-property
2557 python-colorama
2558 python-imagesize
2559 python-importlib-metadata
2560 python-lxml
2561 python-requests
2562 python-six))
2563 (native-inputs
2564 (list python-pytest-cov python-pytest-xdist python-responses
2565 python-setuptools-scm))
2566 (home-page "https://github.com/webcomics/dosage")
2567 (synopsis "Comic strip downloader and archiver")
2568 (description "Dosage is designed to keep a local copy of specific webcomics and other
2569 picture-based content such as Picture of the Day sites. With the @command{dosage}
2570 command-line script you can get the latest strip of a webcomic, catch-up to the last strip
2571 downloaded, or download a strip for a particular date or index, if possible.")
2572 (license license:expat)))
2573
2574 (define-public python-et-xmlfile
2575 (package
2576 (name "python-et-xmlfile")
2577 (version "1.1")
2578 (source
2579 (origin
2580 ;; Use a checkout because the PyPI archive does not contain tests.
2581 (method hg-fetch)
2582 (uri (hg-reference
2583 (url "https://foss.heptapod.net/openpyxl/et_xmlfile")
2584 (changeset version)))
2585 (file-name (string-append name "-" version "-checkout"))
2586 (sha256
2587 (base32 "09r8rjc5bhkqrm5c4n9jrlvad8vrvbyswl9g0wrc1qc7nzh9mpw7"))))
2588 (build-system python-build-system)
2589 (arguments
2590 (list #:phases
2591 #~(modify-phases %standard-phases
2592 (replace 'check
2593 (lambda* (#:key tests? #:allow-other-keys)
2594 (when tests?
2595 (invoke "pytest" "-vv")))))))
2596 (native-inputs
2597 (list python-pytest python-lxml)) ;used for the tests
2598 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
2599 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
2600 (description "This Python library is based upon the @code{xmlfile} module
2601 from @code{lxml}. It aims to provide a low memory, compatible implementation
2602 of @code{xmlfile}.")
2603 (license license:expat)))
2604
2605 (define-public python-openpyxl
2606 (package
2607 (name "python-openpyxl")
2608 (version "3.0.9")
2609 (source
2610 (origin
2611 ;; We use the upstream repository, as the tests are not included in the
2612 ;; PyPI releases.
2613 (method hg-fetch)
2614 (uri (hg-reference
2615 (url "https://foss.heptapod.net/openpyxl/openpyxl")
2616 (changeset version)))
2617 (file-name (string-append name "-" version "-checkout"))
2618 (sha256
2619 (base32 "1p8xvc2gjw6zyzbd7qdvc3x178sm00ymrbyh9539l4fpzgxh0j9c"))))
2620 (build-system python-build-system)
2621 (arguments
2622 `(#:phases (modify-phases %standard-phases
2623 (replace 'check
2624 (lambda _
2625 (invoke "pytest"))))))
2626 (native-inputs (list python-lxml python-pillow python-pytest))
2627 (propagated-inputs (list python-et-xmlfile python-jdcal))
2628 (home-page "https://openpyxl.readthedocs.io")
2629 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
2630 (description
2631 "This Python library allows reading and writing to the Excel XLSX, XLSM,
2632 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
2633 standard.")
2634 (license license:expat)))
2635
2636 (define-public python-eventlet
2637 (package
2638 (name "python-eventlet")
2639 (version "0.33.0")
2640 (source
2641 (origin
2642 (method url-fetch)
2643 (uri (pypi-uri "eventlet" version))
2644 (sha256
2645 (base32
2646 "07qlyhcm0f28sxdizawvdf3d50m3hnbzz5kg3fjp7chvki44y540"))))
2647 (build-system python-build-system)
2648 (propagated-inputs
2649 (list python-dnspython python-greenlet python-monotonic python-six))
2650 (native-inputs
2651 (list python-nose))
2652 (arguments
2653 '(#:phases
2654 (modify-phases %standard-phases
2655 (add-after 'unpack 'avoid-OSError
2656 (lambda _
2657 ;; If eventlet tries to load greendns, an OSError is thrown when
2658 ;; getprotobyname is called. Thankfully there is an environment
2659 ;; variable to disable the greendns import, so use it:
2660 (setenv "EVENTLET_NO_GREENDNS" "yes")))
2661 (add-after 'unpack 'delete-broken-tests
2662 (lambda _
2663 (delete-file "tests/greendns_test.py")
2664 (delete-file "tests/socket_test.py")))
2665 ;; See https://github.com/eventlet/eventlet/issues/562#issuecomment-714183009
2666 (replace 'check
2667 (lambda* (#:key tests? #:allow-other-keys)
2668 (when tests?
2669 (invoke "nosetests" "-v" "tests/")))))))
2670 (home-page "https://eventlet.net")
2671 (synopsis "Concurrent networking library for Python")
2672 (description
2673 "Eventlet is a concurrent networking library for Python that
2674 allows you to change how you run your code, not how you write it.
2675 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
2676 Coroutines ensure that the developer uses a blocking style of programming
2677 that is similar to threading, but provide the benefits of non-blocking I/O.
2678 The event dispatch is implicit, which means you can easily use @code{Eventlet}
2679 from the Python interpreter, or as a small part of a larger application.")
2680 (license license:expat)))
2681
2682 (define-public python-sinfo
2683 (package
2684 (name "python-sinfo")
2685 (version "0.3.4")
2686 (source (origin
2687 (method url-fetch)
2688 (uri (pypi-uri "sinfo" version))
2689 (sha256
2690 (base32
2691 "0kdsp883mx0lfyykv0p12bvs203kdm3skb8bw5wf2pc7kb393sl1"))))
2692 (build-system python-build-system)
2693 (propagated-inputs
2694 (list python-stdlib-list))
2695 (home-page "https://gitlab.com/joelostblom/session_info")
2696 (synopsis "Output module version information loaded in a Python session")
2697 (description "This package outputs version information for modules loaded
2698 in the current session, Python, and the OS.")
2699 (license license:bsd-3)))
2700
2701 (define-public python-six
2702 (package/inherit python-six-bootstrap
2703 (name "python-six")
2704 (arguments
2705 `(#:phases
2706 (modify-phases %standard-phases
2707 (replace 'check
2708 (lambda _
2709 (invoke "pytest" "-v"))))))
2710 (native-inputs
2711 `(("python-pytest" ,python-pytest-bootstrap)))))
2712
2713 (define-public python2-six
2714 (let ((base (package-with-python2 python-six)))
2715 (package
2716 (inherit base)
2717 ;; Reduce Python 2 closure by disabling tests and removing the native
2718 ;; inputs.
2719 (arguments (substitute-keyword-arguments (package-arguments base)
2720 ((#:phases phases)
2721 `(modify-phases ,phases
2722 (delete 'check)))))
2723 (native-inputs '()))))
2724
2725 (define-public python-schedule
2726 (package
2727 (name "python-schedule")
2728 (version "0.4.3")
2729 (source
2730 (origin
2731 (method url-fetch)
2732 (uri (pypi-uri "schedule" version))
2733 (sha256
2734 (base32
2735 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
2736 (build-system python-build-system)
2737 (native-inputs
2738 (list python-pytest python-mock))
2739 (home-page "https://github.com/dbader/schedule")
2740 (synopsis "Schedule periodic function calls in Python")
2741 (description
2742 "Schedule is an in-process scheduler for periodic jobs that uses the
2743 builder pattern for configuration. Schedule lets you run Python functions (or
2744 any other callable) periodically at pre-determined intervals using a simple,
2745 human-friendly syntax.")
2746 (license license:expat)))
2747
2748 (define-public python-scour
2749 (package
2750 (name "python-scour")
2751 (version "0.38.2")
2752 (source
2753 (origin
2754 (method git-fetch)
2755 (uri
2756 (git-reference
2757 (url "https://github.com/scour-project/scour")
2758 (commit
2759 (string-append "v" version))))
2760 (file-name (git-file-name name version))
2761 (sha256
2762 (base32 "0mmfvx4wqp8gkpv0kbih89zfs9njvmd3v4dxfqii62xddpxq0f1k"))))
2763 (propagated-inputs
2764 (list python-six))
2765 (build-system python-build-system)
2766 (home-page "https://github.com/scour-project/scour")
2767 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
2768 (description "The goal of Scour is to output a file that renders
2769 identically at a fraction of the size by removing a lot of redundant
2770 information created by most SVG editors. Optimization options are typically
2771 lossless but can be tweaked for more aggressive cleaning.")
2772 (license license:asl2.0)))
2773
2774 (define-public python-mechanize
2775 (package
2776 (name "python-mechanize")
2777 (version "0.4.5")
2778 (source
2779 (origin
2780 (method url-fetch)
2781 (uri (pypi-uri "mechanize" version))
2782 (sha256
2783 (base32
2784 "1z9kqcwb8gfq2l6i42z624kxpd8692a0c8gw2x5bbm7n848w2mb3"))))
2785 (build-system python-build-system)
2786 (propagated-inputs
2787 (list python-html5lib))
2788 (home-page "https://github.com/python-mechanize/mechanize")
2789 (synopsis
2790 "Stateful programmatic web browsing in Python")
2791 (description
2792 "Mechanize implements stateful programmatic web browsing in Python,
2793 after Andy Lester’s Perl module WWW::Mechanize.")
2794 (license license:bsd-3)))
2795
2796 (define-public python-simpleaudio
2797 (package
2798 (name "python-simpleaudio")
2799 (version "1.0.4")
2800 (source
2801 (origin
2802 (method url-fetch)
2803 (uri (pypi-uri "simpleaudio" version))
2804 (sha256
2805 (base32
2806 "07glihg0fpca0gvbbvqs9q815w8xhflzdvg72yvlsm23j9j8h739"))))
2807 (build-system python-build-system)
2808 (arguments
2809 `(#:tests? #f))
2810 (inputs
2811 (list alsa-lib))
2812 (home-page
2813 "https://github.com/hamiltron/py-simple-audio")
2814 (synopsis "Simple, asynchronous audio playback for Python 3")
2815 (description
2816 "The @code{simplaudio} package provides cross-platform, dependency-free
2817 audio playback capability for Python 3 on OSX, Windows, and Linux.")
2818 (license license:expat))) ; MIT license
2819
2820 (define-public python-simplejson
2821 (package
2822 (name "python-simplejson")
2823 (version "3.17.6")
2824 (source
2825 (origin
2826 (method url-fetch)
2827 (uri (pypi-uri "simplejson" version))
2828 (sha256
2829 (base32
2830 "19pqqn01y6qmhhv8q6dh4p1acav49kl923kklnns2qxz5a6h766g"))))
2831 (build-system python-build-system)
2832 (native-inputs
2833 (list python-toml))
2834 (home-page "https://simplejson.readthedocs.io/en/latest")
2835 (synopsis
2836 "Json library for Python")
2837 (description
2838 "JSON (JavaScript Object Notation) is a subset of JavaScript
2839 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
2840 format.
2841
2842 Simplejson exposes an API familiar to users of the standard library marshal
2843 and pickle modules. It is the externally maintained version of the json
2844 library contained in Python 2.6, but maintains compatibility with Python 2.5
2845 and (currently) has significant performance advantages, even without using
2846 the optional C extension for speedups. Simplejson is also supported on
2847 Python 3.3+.")
2848 (license license:x11)))
2849
2850
2851 (define-public python-pyicu
2852 (package
2853 (name "python-pyicu")
2854 (version "2.9")
2855 (source
2856 (origin
2857 (method url-fetch)
2858 (uri (pypi-uri "PyICU" version))
2859 (sha256
2860 (base32
2861 "0y2qhh443vydi3y7kmhyb6kz3z6d7qq7ld0sg88mfqalcp7dca9w"))))
2862 (build-system python-build-system)
2863 (inputs
2864 (list icu4c))
2865 (native-inputs
2866 (list python-pytest python-six))
2867 (home-page "https://gitlab.pyicu.org/main/pyicu")
2868 (synopsis "Python extension wrapping the ICU C++ API")
2869 (description
2870 "PyICU is a python extension wrapping the ICU C++ API.")
2871 (license license:x11)))
2872
2873 (define-public python-dogtail
2874 (package
2875 (name "python-dogtail")
2876 (version "0.9.11")
2877 (source (origin
2878 (method url-fetch)
2879 (uri
2880 (string-append
2881 "https://gitlab.com/dogtail/dogtail/-/raw/released/"
2882 "dogtail-" version ".tar.gz"))
2883 (sha256
2884 (base32
2885 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
2886 (build-system python-build-system)
2887 (arguments
2888 `(#:tests? #f ; TODO Launching dbus for the tests
2889 ; fails
2890 #:phases
2891 (modify-phases %standard-phases
2892 (replace 'check
2893 (lambda* (#:key tests? #:allow-other-keys)
2894 (when tests?
2895 (system "Xvfb :1 &")
2896 (setenv "DISPLAY" ":1")
2897 (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
2898 #t)))))
2899 (propagated-inputs
2900 (list python-pygobject python-pycairo python-pyatspi))
2901 (native-inputs
2902 `(("python-nose" ,python-nose)
2903 ("gtk+" ,gtk+)
2904 ("xvfb" ,xorg-server)
2905 ("dbus" ,dbus)
2906 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
2907 ("gobject-introspection" ,gobject-introspection)))
2908 (home-page "https://gitlab.com/dogtail/dogtail/")
2909 (synopsis "GUI test tool and automation framework written in Python")
2910 (description
2911 "Dogtail is a GUI test tool and automation framework written in Python.
2912 It uses Accessibility (a11y) technologies to communicate with desktop
2913 applications. dogtail scripts are written in Python and executed like any
2914 other Python program.")
2915 (license license:gpl2+)))
2916
2917 (define-public python-empy
2918 (package
2919 (name "python-empy")
2920 (version "3.3.3")
2921 (source (origin
2922 (method url-fetch)
2923 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
2924 version ".tar.gz"))
2925 (sha256
2926 (base32
2927 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
2928 (build-system python-build-system)
2929 (arguments
2930 `(#:tests? #f)) ; python2 only
2931 (home-page "http://www.alcyone.com/software/empy/")
2932 (synopsis "Templating system for Python")
2933 (description
2934 "EmPy is a system for embedding Python expressions and statements in
2935 template text; it takes an EmPy source file, processes it, and produces
2936 output. This is accomplished via expansions, which are special signals to the
2937 EmPy system and are set off by a special prefix (by default the at sign, @@).
2938 EmPy can expand arbitrary Python expressions and statements in this way, as
2939 well as a variety of special forms. Textual data not explicitly delimited in
2940 this way is sent unaffected to the output, allowing Python to be used in
2941 effect as a markup language. Also supported are callbacks via hooks,
2942 recording and playback via diversions, and dynamic, chainable filters. The
2943 system is highly configurable via command line options and embedded
2944 commands.")
2945 (license license:lgpl2.1+)))
2946
2947 (define-public python-enum34
2948 (package
2949 (name "python-enum34")
2950 (version "1.1.6")
2951 (source
2952 (origin
2953 (method url-fetch)
2954 (uri (pypi-uri "enum34" version))
2955 (sha256
2956 (base32
2957 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
2958 (build-system python-build-system)
2959 (home-page "https://pypi.org/project/enum34/")
2960 (synopsis "Backported Python 3.4 Enum")
2961 (description
2962 "Enum34 is the new Python stdlib enum module available in Python 3.4
2963 backported for previous versions of Python from 2.4 to 3.3.")
2964 (license license:bsd-3)))
2965
2966 (define-public python-parse-type
2967 (package
2968 (name "python-parse-type")
2969 (version "0.6.0")
2970 (source
2971 (origin
2972 (method url-fetch)
2973 (uri (pypi-uri "parse_type" version))
2974 (sha256
2975 (base32
2976 "07smqnzc9km7sbvxfyx4gdm9njrx58x8grdw6gs4gva81rk3rd10"))))
2977 (build-system python-build-system)
2978 (arguments
2979 '(#:phases
2980 (modify-phases %standard-phases
2981 (replace 'check
2982 (lambda* (#:key tests? #:allow-other-keys)
2983 (when tests?
2984 (invoke "pytest" "-vv" "-c" "/dev/null")))))))
2985 (propagated-inputs (list python-six python-parse))
2986 (native-inputs (list python-pytest))
2987 (home-page "https://github.com/jenisys/parse_type")
2988 (synopsis "Extended parse module")
2989 (description "Parse_type extends the python parse module.")
2990 (license license:bsd-3)))
2991
2992 (define-public python-parse
2993 (package
2994 (name "python-parse")
2995 (version "1.18.0")
2996 (source
2997 (origin
2998 (method url-fetch)
2999 (uri (pypi-uri "parse" version))
3000 (sha256
3001 (base32
3002 "19063x4xdjpaf7rfxai6jpgm2k4yvkq7wha8aa8cagbjsqr60rli"))))
3003 (build-system python-build-system)
3004 (arguments
3005 `(#:phases
3006 (modify-phases %standard-phases
3007 (replace 'check
3008 (lambda _ (invoke "python" "test_parse.py"))))))
3009 (home-page "https://github.com/r1chardj0n3s/parse")
3010 (synopsis "Parse strings")
3011 (description
3012 "Parse strings using a specification based on the Python @code{format()}
3013 syntax.")
3014 (license license:x11)))
3015
3016 (define-public python-polib
3017 (package
3018 (name "python-polib")
3019 (version "1.1.0")
3020 (source (origin
3021 (method url-fetch)
3022 (uri (pypi-uri "polib" version))
3023 (sha256
3024 (base32
3025 "0aikb8gcarhifn3sadrbbs5czagih9hjv250gsrgy9v1d49pvn7s"))))
3026 (build-system python-build-system)
3027 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
3028 (synopsis "Manipulate, create and modify gettext files")
3029 (description "Polib can manipulate any gettext format (po, pot and mo)
3030 files. It can be used to create po files from scratch or to modify
3031 existing ones.")
3032 (license license:expat)))
3033
3034 (define-public python-polling2
3035 (package
3036 (name "python-polling2")
3037 (version "0.5.0")
3038 (source
3039 (origin
3040 (method url-fetch)
3041 (uri (pypi-uri "polling2" version))
3042 (sha256
3043 (base32 "0hp3238fv6k1qk43gv4jwnv1mwlkmx33akbj560b9nvsry1dmdwh"))))
3044 (build-system python-build-system)
3045 (arguments '(#:tests? #false)) ; no tests included
3046 (native-inputs
3047 (list python-mock python-pytest python-pytest-runner))
3048 (home-page "https://github.com/ddmee/polling2")
3049 (synopsis "Polling utility with many configurable options")
3050 (description "Polling2 is a utility used to wait for a function to return
3051 a certain expected condition.")
3052 (license license:expat)))
3053
3054 (define-public python-poyo
3055 (package
3056 (name "python-poyo")
3057 (version "0.5.0")
3058 (source
3059 (origin
3060 (method url-fetch)
3061 (uri (pypi-uri "poyo" version))
3062 (sha256
3063 (base32
3064 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
3065 (build-system python-build-system)
3066 (home-page "https://github.com/hackebrot/poyo")
3067 (synopsis "Lightweight YAML Parser for Python")
3068 (description
3069 "This package provides a lightweight YAML Parser for Python. It supports
3070 only a chosen subset of the YAML format that is required to parse cookiecutter
3071 user configuration files. It does not have support for serializing into YAML
3072 and is not compatible with JSON.")
3073 (license license:expat)))
3074
3075 (define-public python-exceptiongroup
3076 (package
3077 (name "python-exceptiongroup")
3078 (version "1.0.0rc8")
3079 (source (origin
3080 (method git-fetch)
3081 (uri (git-reference
3082 (url "https://github.com/agronholm/exceptiongroup")
3083 (commit version)))
3084 (file-name (git-file-name name version))
3085 (sha256
3086 (base32
3087 "0xsbpv22n51p6yvyvz231mf8zhbi1i88b4zmacaxxx31zrq5ifv4"))))
3088 (build-system python-build-system)
3089 (arguments
3090 (list
3091 #:phases
3092 #~(modify-phases %standard-phases
3093 ;; XXX: PEP 517 manual build/install procedures copied from
3094 ;; python-isort.
3095 (replace 'build
3096 (lambda _
3097 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
3098 ;; ZIP does not support timestamps before 1980.
3099 (setenv "SOURCE_DATE_EPOCH" "315532800")
3100 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
3101 (replace 'install
3102 (lambda* (#:key outputs #:allow-other-keys)
3103 (let ((whl (car (find-files "dist" "\\.whl$"))))
3104 (invoke "pip" "--no-cache-dir" "--no-input"
3105 "install" "--no-deps" "--prefix" #$output whl))))
3106 (replace 'check
3107 (lambda* (#:key tests? #:allow-other-keys)
3108 (when tests?
3109 (invoke "pytest" "-vv" "tests")))))))
3110 (native-inputs (list python-flit-scm python-pypa-build python-pytest))
3111 (home-page "https://github.com/agronholm/exceptiongroup")
3112 (synopsis "PEP 654 backport from Python 3.11")
3113 (description "This is a backport of the @code{BaseExceptionGroup} and
3114 @code{ExceptionGroup} classes from Python 3.11.")
3115 (license license:expat)))
3116
3117 (define-public python-extension-helpers
3118 (package
3119 (name "python-extension-helpers")
3120 (version "0.1")
3121 (source
3122 (origin
3123 (method url-fetch)
3124 (uri (pypi-uri "extension-helpers" version))
3125 (sha256
3126 (base32 "10iqjzmya2h4sk765dlm1pbqypwlqyh8rw59a5m9i63d3klnz2mc"))))
3127 (build-system python-build-system)
3128 (native-inputs
3129 (list python-coverage python-pytest-astropy python-pytest-cov
3130 python-setuptools-scm))
3131 (home-page "https://github.com/astropy/astropy-helpers")
3132 (synopsis
3133 "Utilities for building and installing packages in the Astropy ecosystem")
3134 (description
3135 "The extension-helpers package includes many build, installation, and
3136 documentation-related tools used by the Astropy project.")
3137 (license license:bsd-3)))
3138
3139 (define-public python-extras
3140 (package
3141 (name "python-extras")
3142 (version "1.0.0")
3143 (source
3144 (origin
3145 (method url-fetch)
3146 (uri (pypi-uri "extras" version))
3147 (sha256
3148 (base32
3149 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
3150 (build-system python-build-system)
3151 (arguments
3152 ;; FIXME: Circular dependency on testtools.
3153 '(#:tests? #f))
3154 (home-page "https://github.com/testing-cabal/extras")
3155 (synopsis "Useful extensions to the Python standard library")
3156 (description
3157 "Extras is a set of extensions to the Python standard library.")
3158 (license license:expat)))
3159
3160 (define-public python-mimeparse
3161 (package
3162 (name "python-mimeparse")
3163 (version "1.6.0")
3164 (source
3165 (origin
3166 (method url-fetch)
3167 (uri (pypi-uri "python-mimeparse" version))
3168 (sha256
3169 (base32
3170 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
3171 (build-system python-build-system)
3172 (arguments
3173 '(#:phases
3174 (modify-phases %standard-phases
3175 (replace 'check
3176 (lambda _
3177 (invoke "./mimeparse_test.py"))))))
3178 (home-page
3179 "https://github.com/dbtsai/python-mimeparse")
3180 (synopsis "Python library for parsing MIME types")
3181 (description
3182 "Mimeparse provides basic functions for parsing MIME type names and
3183 matching them against a list of media-ranges.")
3184 (license license:expat)))
3185
3186 (define-public python-miniboa
3187 (package
3188 (name "python-miniboa")
3189 (version "1.0.8")
3190 (source
3191 (origin
3192 (method url-fetch)
3193 (uri (pypi-uri "miniboa" version))
3194 (sha256
3195 (base32
3196 "002c1aki9hsrwj5plrwdrf3sk8rn95fqylqyjx2arrjfpsih4dgs"))))
3197 (build-system python-build-system)
3198 (home-page "https://github.com/shmup/miniboa")
3199 (synopsis "Simple, single-threaded Telnet server")
3200 (description
3201 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
3202 server.")
3203 (license license:asl2.0)))
3204
3205 (define-public python-pafy
3206 (package
3207 (name "python-pafy")
3208 (version "0.5.3.1")
3209 (source
3210 (origin
3211 (method url-fetch)
3212 (uri (pypi-uri "pafy" version))
3213 (sha256
3214 (base32
3215 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
3216 (build-system python-build-system)
3217 (arguments
3218 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
3219 (propagated-inputs
3220 ;; Youtube-dl is a python package which is imported in the file
3221 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
3222 (list youtube-dl))
3223 (home-page "https://np1.github.io/pafy/")
3224 (synopsis "Retrieve YouTube content and metadata")
3225 (description
3226 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
3227 (license license:lgpl3+)))
3228
3229 (define-public python-miniupnpc
3230 (package
3231 (name "python-miniupnpc")
3232 (version "2.2.3")
3233 (source
3234 (origin
3235 (method git-fetch)
3236 (uri
3237 (git-reference
3238 (url "https://github.com/miniupnp/miniupnp")
3239 (commit
3240 (string-append
3241 "miniupnpc_" (string-replace-substring version "." "_")))))
3242 (file-name
3243 (git-file-name name version))
3244 (sha256
3245 (base32 "03q1rlzvfzm15g1bfw2zqzavlsyaypnaf2k3cz6ha7k5rirkdy0l"))))
3246 (build-system python-build-system)
3247 (arguments
3248 (list
3249 #:phases
3250 #~(modify-phases %standard-phases
3251 (add-after 'unpack 'subdir
3252 (lambda* (#:key inputs #:allow-other-keys)
3253 (chdir "miniupnpc")
3254 (setenv "CC" #$(cc-for-target))
3255 (substitute* "Makefile"
3256 (("/bin/sh") (search-input-file inputs "/bin/sh")))))
3257 (add-before 'subdir 'remove-kernel-version
3258 ;; Avoid embedding the running kernel version for reproducible builds
3259 (lambda _
3260 (substitute*
3261 "miniupnpc/updateminiupnpcstrings.sh"
3262 (("^OS_VERSION=`uname -r`") "OS_VERSION=Guix")))))))
3263 (inputs (list python)) ;we are building a Python extension
3264 (synopsis "UPnP client for Python")
3265 (description "Miniupnpc is a client library for Python programs to set up
3266 port forwards using @acronym{UPnP, Universal Plug and Play}.")
3267 (home-page "http://miniupnp.free.fr")
3268 (license license:bsd-3)))
3269
3270 (define-public python-py
3271 (package
3272 (name "python-py")
3273 (version "1.10.0")
3274 (source
3275 (origin
3276 (method url-fetch)
3277 (uri (pypi-uri "py" version))
3278 (sha256
3279 (base32
3280 "1lqvkqk3b440g9z82gqbzlzas84wrm6ir8kplzhzavmn2pd1pf11"))))
3281 (build-system python-build-system)
3282 (arguments
3283 ;; FIXME: "ImportError: 'test' module incorrectly imported from
3284 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
3285 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
3286 ;; Is this module globally installed?"
3287 '(#:tests? #f))
3288 (native-inputs
3289 (list python-setuptools-scm))
3290 (home-page "https://github.com/pytest-dev/py")
3291 (synopsis "Python library for parsing, I/O, instrospection, and logging")
3292 (description
3293 "Py is a Python library for file name parsing, .ini file parsing, I/O,
3294 code introspection, and logging.")
3295 (license license:expat)))
3296
3297 ;; Recent versions of python-fixtures and python-testrepository need
3298 ;; python-pbr for packaging, which itself needs these two packages for
3299 ;; testing.
3300 ;; To fix this circular dependency, we use a build of python-pbr, based on the
3301 ;; same source, just without any test dependencies and with tests disabled.
3302 ;; python-pbr-minmal is then used to package python-fixtures and
3303 ;; python-testrepository.
3304 ;; Strictly speaking we currently could remove the test-requirements from the
3305 ;; normal python-pbr package (and save this package) since test are disabled
3306 ;; there anyway. But this may change in future.
3307 (define-public python-pbr-minimal
3308 (package
3309 (name "python-pbr-minimal")
3310 (version "5.5.1")
3311 (source
3312 (origin
3313 (method url-fetch)
3314 (uri (pypi-uri "pbr" version))
3315 (sha256
3316 (base32
3317 "1j8k5d4rdhy5bw5ai1vkjzln2albah94in3vvyvxa0n42fv81baz"))))
3318 (build-system python-build-system)
3319 (arguments
3320 `(#:tests? #f))
3321 (home-page "https://docs.openstack.org/pbr/latest/")
3322 (synopsis "Minimal build of python-pbr used for bootstrapping")
3323 (description
3324 "Used only for bootstrapping python2-pbr, you should not need this.")
3325 (license license:asl2.0)))
3326
3327 (define-public python-pbr
3328 (package
3329 (inherit python-pbr-minimal)
3330 (name "python-pbr")
3331 (arguments
3332 `(#:tests? #f)) ;; Most tests seem to use the Internet.
3333 (propagated-inputs
3334 (list git)) ;; pbr actually uses the "git" binary.
3335 (native-inputs
3336 `(("python-fixtures" ,python-fixtures-bootstrap)
3337 ;; discover, coverage, hacking, subunit
3338 ("python-mock" ,python-mock)
3339 ("python-six" ,python-six)
3340 ("python-sphinx" ,python-sphinx)
3341 ("python-testrepository" ,python-testrepository-bootstrap)
3342 ("python-testresources" ,python-testresources-bootstrap)
3343 ("python-testscenarios" ,python-testscenarios-bootstrap)
3344 ("python-testtools" ,python-testtools-bootstrap)
3345 ("python-virtualenv" ,python-virtualenv)))
3346 (synopsis "Enhance the default behavior of Python’s setuptools")
3347 (description
3348 "Python Build Reasonableness (PBR) is a library that injects some useful
3349 and sensible default behaviors into your setuptools run. It will set
3350 versions, process requirements files and generate AUTHORS and ChangeLog file
3351 from git information.
3352 ")))
3353
3354 (define-public python-pyrsistent
3355 (package
3356 (name "python-pyrsistent")
3357 (version "0.16.0")
3358 (home-page "https://github.com/tobgu/pyrsistent")
3359 (source (origin
3360 (method url-fetch)
3361 (uri (pypi-uri "pyrsistent" version))
3362 (sha256
3363 (base32
3364 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
3365 (build-system python-build-system)
3366 (arguments
3367 '(#:phases (modify-phases %standard-phases
3368 ;; The package works fine with newer Pytest and Hypothesis, but
3369 ;; has pinned older versions to stay compatible with Python 2.
3370 (add-before 'check 'loosen-pytest-requirement
3371 (lambda _
3372 (substitute* "setup.py"
3373 (("pytest<5") "pytest")
3374 (("hypothesis<5") "hypothesis"))
3375 #t)))))
3376 (native-inputs
3377 (list python-hypothesis python-pytest python-pytest-runner))
3378 (propagated-inputs
3379 (list python-six))
3380 (synopsis "Persistent data structures for Python")
3381 (description
3382 "Pyrsistent is a number of persistent collections (by some referred to as
3383 functional data structures). Persistent in the sense that they are immutable.
3384
3385 All methods on a data structure that would normally mutate it instead return a
3386 new copy of the structure containing the requested updates. The original
3387 structure is left untouched.")
3388 (license license:expat)))
3389
3390 (define-public python-exif-read
3391 (package
3392 (name "python-exif-read")
3393 (version "2.1.2")
3394 (source (origin
3395 (method url-fetch)
3396 (uri (pypi-uri "ExifRead" version))
3397 (sha256
3398 (base32
3399 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
3400 (build-system python-build-system)
3401 (arguments `(#:tests? #f)) ; no tests
3402 (home-page "https://github.com/ianare/exif-py")
3403 (synopsis "Python library to extract EXIF data from image files")
3404 (description
3405 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
3406 files.")
3407 (license license:bsd-3)))
3408
3409 (define-public python-pyld
3410 (package
3411 (name "python-pyld")
3412 (version "1.0.5")
3413 (source (origin
3414 (method url-fetch)
3415 (uri (pypi-uri "PyLD" version))
3416 (sha256
3417 (base32
3418 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
3419 (build-system python-build-system)
3420 (home-page "https://github.com/digitalbazaar/pyld")
3421 (synopsis "Python implementation of the JSON-LD specification")
3422 (description
3423 "PyLD is an implementation of the JSON-LD specification.")
3424 (license license:bsd-3)))
3425
3426 (define-public python-cli-helpers
3427 (package
3428 (name "python-cli-helpers")
3429 (version "2.2.1")
3430 (source
3431 (origin
3432 ;; There's no source tarball on PyPI.
3433 (method git-fetch)
3434 (uri (git-reference
3435 (url "https://github.com/dbcli/cli_helpers")
3436 (commit (string-append "v" version))))
3437 (file-name (git-file-name name version))
3438 (sha256
3439 (base32 "1hzavh9v9lkd1dn9f0nvg80f7v4banxvcrj10zy72przqz51k1sb"))))
3440 (build-system python-build-system)
3441 (native-inputs
3442 (list python-pytest))
3443 (propagated-inputs
3444 (list python-wcwidth python-configobj python-tabulate))
3445 (home-page "https://github.com/dbcli/cli_helpers")
3446 (synopsis "Helpers for building command-line apps")
3447 (description
3448 "CLI Helpers is a Python package that makes it easy to perform common
3449 tasks when building command-line apps. It's a helper library for command-line
3450 interfaces.")
3451 (license license:bsd-3)))
3452
3453 (define-public python-click
3454 (package
3455 (name "python-click")
3456 (version "8.1.2")
3457 (source
3458 (origin
3459 (method url-fetch)
3460 (uri (pypi-uri "click" version))
3461 (sha256
3462 (base32
3463 "0whs38a2i0561kwbgigs6vic9r0a1887m2v1aw3rmv6r2kz0g5s7"))))
3464 (build-system python-build-system)
3465 (arguments
3466 `(#:phases
3467 (modify-phases %standard-phases
3468 (replace 'check
3469 (lambda* (#:key tests? #:allow-other-keys)
3470 (when tests?
3471 (invoke "pytest" "-vv")))))))
3472 (native-inputs (list python-pytest))
3473 (home-page "https://palletsprojects.com/p/click/")
3474 (synopsis "Command line library for Python")
3475 (description
3476 "Click is a Python package for creating command line interfaces in a
3477 composable way with as little code as necessary. Its name stands for
3478 \"Command Line Interface Creation Kit\". It's highly configurable but comes
3479 with sensible defaults out of the box.")
3480 (license license:bsd-3)))
3481
3482 (define-public python-click-7
3483 (package (inherit python-click)
3484 (name "python-click")
3485 (version "7.1.2")
3486 (source
3487 (origin
3488 (method url-fetch)
3489 (uri (pypi-uri "click" version))
3490 (sha256
3491 (base32 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
3492 (arguments `())))
3493
3494 (define-public python-click-5
3495 (package (inherit python-click)
3496 (name "python-click")
3497 (version "5.1")
3498 (source
3499 (origin
3500 (method url-fetch)
3501 (uri (pypi-uri "click" version))
3502 (sha256
3503 (base32 "0njsm0wn31l21bi118g5825ma5sa3rwn7v2x4wjd7yiiahkri337"))))
3504 (arguments `())))
3505
3506 (define-public python-cligj
3507 (package
3508 (name "python-cligj")
3509 (version "0.7.2")
3510 (source
3511 (origin
3512 (method url-fetch)
3513 (uri (pypi-uri "cligj" version))
3514 (sha256
3515 (base32
3516 "09vbkik6kyn6yrqzl2r74vaybjk8kjykvi975hy3fsrm4gb17g54"))))
3517 (build-system python-build-system)
3518 (propagated-inputs
3519 (list python-click))
3520 (native-inputs
3521 (list python-pytest-cov))
3522 (home-page "https://github.com/mapbox/cligj")
3523 (synopsis "Click params for command line interfaces to GeoJSON")
3524 (description
3525 "cligj is for Python developers who create command line interfaces
3526 for geospatial data. cligj allows you to quickly build consistent,
3527 well-tested and interoperable CLIs for handling GeoJSON.")
3528 (license license:bsd-3)))
3529
3530 (define-public python-vcversioner
3531 (package
3532 (name "python-vcversioner")
3533 (version "2.16.0.0")
3534 (source
3535 (origin
3536 (method url-fetch)
3537 (uri (pypi-uri "vcversioner" version))
3538 (sha256
3539 (base32
3540 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
3541 (build-system python-build-system)
3542 (synopsis "Python library for version number discovery")
3543 (description "Vcversioner is a Python library that inspects tagging
3544 information in a variety of version control systems in order to discover
3545 version numbers.")
3546 (home-page "https://github.com/habnabit/vcversioner")
3547 (license license:isc)))
3548
3549 (define-public python-jdcal
3550 (package
3551 (name "python-jdcal")
3552 (version "1.4.1")
3553 (source
3554 (origin
3555 (method url-fetch)
3556 (uri (pypi-uri "jdcal" version))
3557 (sha256
3558 (base32
3559 "1j6g19jf21qprjsr8h0r7nsbss366gy8j9izq8cz53gbjvh74a27"))))
3560 (build-system python-build-system)
3561 (arguments
3562 (list #:phases
3563 #~(modify-phases %standard-phases
3564 (replace 'check
3565 (lambda* (#:key tests? #:allow-other-keys)
3566 (when tests?
3567 (invoke "pytest" "-vv")))))))
3568 (native-inputs
3569 (list python-pytest))
3570 (home-page "https://github.com/phn/jdcal")
3571 (synopsis "Functions to convert between Julian dates Gregorian dates")
3572 (description "This Python library provides functions for converting
3573 between Julian dates and Gregorian dates.")
3574 (license license:bsd-2)))
3575
3576 (define-public python-jsondiff
3577 (package
3578 (name "python-jsondiff")
3579 (version "1.2.0")
3580 (source
3581 (origin
3582 (method url-fetch)
3583 (uri (pypi-uri "jsondiff" version))
3584 (sha256
3585 (base32
3586 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
3587 (build-system python-build-system)
3588 (native-inputs
3589 (list python-nose python-nose-random))
3590 (home-page
3591 "https://github.com/fzumstein/jsondiff")
3592 (synopsis "Compare JSON and JSON-like structures in Python")
3593 (description "@code{jsondiff} is a Python library which lets you
3594 compare, diff, and patch JSON and JSON-like structures in Python.")
3595 (license license:expat)))
3596
3597 (define-public python-jsonschema
3598 (package
3599 (name "python-jsonschema")
3600 (version "3.2.0")
3601 (source (origin
3602 (method url-fetch)
3603 (uri (pypi-uri "jsonschema" version))
3604 (sha256
3605 (base32
3606 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
3607 (build-system python-build-system)
3608 (arguments
3609 '(#:phases
3610 (modify-phases %standard-phases
3611 (replace 'check
3612 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3613 (when tests?
3614 (setenv "JSON_SCHEMA_TEST_SUITE" "json")
3615 (invoke "trial" "jsonschema")))))))
3616 (native-inputs
3617 `(("python-setuptools_scm" ,python-setuptools-scm)
3618 ("python-twisted" ,python-twisted)))
3619 (propagated-inputs
3620 (list python-attrs python-pyrsistent python-six))
3621 (home-page "https://github.com/Julian/jsonschema")
3622 (synopsis "Implementation of JSON Schema for Python")
3623 (description
3624 "Jsonschema is an implementation of JSON Schema for Python.")
3625 (license license:expat)))
3626
3627 ;;; TODO: Make the default python-jsonschema on core-updates
3628 (define-public python-jsonschema-next
3629 (package
3630 (inherit python-jsonschema)
3631 (version "4.5.1")
3632 (source
3633 (origin
3634 (method url-fetch)
3635 (uri (pypi-uri "jsonschema" version))
3636 (sha256
3637 (base32 "1z0x22691jva7lwfcfh377jdmlz68zhiawxzl53k631l34k8hvbw"))))
3638 (arguments
3639 (substitute-keyword-arguments (package-arguments python-jsonschema)
3640 ((#:phases phases)
3641 #~(modify-phases #$phases
3642 ;; XXX: PEP 517 manual build/install procedures copied from
3643 ;; python-isort.
3644 (replace 'build
3645 (lambda _
3646 ;; ZIP does not support timestamps before 1980.
3647 (setenv "SOURCE_DATE_EPOCH" "315532800")
3648 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
3649 (replace 'install
3650 (lambda* (#:key outputs #:allow-other-keys)
3651 (let ((whl (car (find-files "dist" "\\.whl$"))))
3652 (invoke "pip" "--no-cache-dir" "--no-input"
3653 "install" "--no-deps" "--prefix" #$output whl))))))))
3654 (native-inputs (list python-pypa-build
3655 python-setuptools-scm
3656 python-twisted))
3657 (propagated-inputs
3658 (list python-attrs
3659 python-importlib-metadata
3660 python-pyrsistent
3661 python-typing-extensions))))
3662
3663 (define-public python-schema
3664 (package
3665 (name "python-schema")
3666 (version "0.6.6")
3667 (source
3668 (origin
3669 (method url-fetch)
3670 (uri (pypi-uri "schema" version))
3671 (sha256
3672 (base32
3673 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
3674 (build-system python-build-system)
3675 (native-inputs
3676 (list python-pytest))
3677 (home-page "https://github.com/keleshev/schema")
3678 (synopsis "Simple data validation library")
3679 (description
3680 "@code{python-schema} is a library for validating Python data
3681 structures, such as those obtained from config-files, forms, external
3682 services or command-line parsing, converted from JSON/YAML (or
3683 something else) to Python data-types.")
3684 (license license:psfl)))
3685
3686 (define-public python-schema-0.5
3687 (package (inherit python-schema)
3688 (version "0.5.0")
3689 (source
3690 (origin
3691 (method url-fetch)
3692 (uri (pypi-uri "schema" version))
3693 (sha256
3694 (base32
3695 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
3696
3697 (define-public python-kitchen
3698 (package
3699 (name "python-kitchen")
3700 (version "1.2.5")
3701 (source
3702 (origin
3703 (method url-fetch)
3704 (uri (pypi-uri "kitchen" version))
3705 (sha256
3706 (base32
3707 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
3708 (build-system python-build-system)
3709 (propagated-inputs
3710 (list python-chardet))
3711 (home-page "https://github.com/fedora-infra/kitchen")
3712 (synopsis "Python API for snippets")
3713 (description "@code{kitchen} module provides a python API for all sorts of
3714 little useful snippets of code that everybody ends up writing for their projects
3715 but never seem big enough to build an independent release. Use kitchen and stop
3716 cutting and pasting that code over and over.")
3717 (license (list license:lgpl2.1+
3718 ;; subprocess.py, test_subprocess.py,
3719 ;; kitchen/pycompat25/defaultdict.py:
3720 license:psfl))))
3721
3722 (define-public python-roman
3723 (package
3724 (name "python-roman")
3725 (version "3.3")
3726 (source
3727 (origin
3728 (method url-fetch)
3729 (uri (pypi-uri "roman" version))
3730 (sha256
3731 (base32
3732 "0gyp2bmw47jgpm8j64gydzqq838bgxz5gh6cm57lxlr7p26sqiic"))))
3733 (build-system python-build-system)
3734 (home-page "https://github.com/zopefoundation/roman")
3735 (synopsis "Integer to Roman numerals converter")
3736 (description
3737 "This package provides a small helper library to convert Arabic Numbers
3738 to Roman Numerals.")
3739 (license license:psfl)))
3740
3741 (define-public python-unidecode
3742 (package
3743 (name "python-unidecode")
3744 (version "1.1.1")
3745 (source (origin
3746 (method url-fetch)
3747 (uri (pypi-uri "Unidecode" version))
3748 (sha256
3749 (base32
3750 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
3751 (build-system python-build-system)
3752 (home-page "https://pypi.org/project/Unidecode/")
3753 (synopsis "ASCII transliterations of Unicode text")
3754 (description
3755 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
3756 useful when integrating with legacy code that doesn't support Unicode, or for
3757 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
3758 machine identifiers from human-readable Unicode strings that should still be
3759 somewhat intelligible.")
3760 (license license:gpl2+)))
3761
3762 (define-public python-text-unidecode
3763 (package
3764 (name "python-text-unidecode")
3765 (version "1.3")
3766 (source (origin
3767 (method url-fetch)
3768 (uri (pypi-uri "text-unidecode" version))
3769 (sha256
3770 (base32
3771 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
3772 (build-system python-build-system)
3773 (arguments
3774 '(#:phases (modify-phases %standard-phases
3775 (replace 'check
3776 (lambda _
3777 (invoke "pytest" "-vv"))))))
3778 (native-inputs
3779 (list python-pytest))
3780 (home-page "https://github.com/kmike/text-unidecode/")
3781 (synopsis "Decode Unicode data")
3782 (description
3783 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
3784 Perl library. It can create ASCII representations of Unicode data. In general
3785 users should prefer the @code{python-unidecode} package which offers better
3786 memory usage and transliteration quality.")
3787 ;; The user can choose either license.
3788 (license (list license:clarified-artistic license:gpl2+))))
3789
3790 (define-public python-pyjwt
3791 (package
3792 (name "python-pyjwt")
3793 (version "2.4.0")
3794 (source
3795 (origin
3796 (method url-fetch)
3797 (uri (pypi-uri "PyJWT" version))
3798 (sha256
3799 (base32
3800 "1fmbcwfw1463wjzwbcgg3s16rad6kfb1mc5y7jbkp6v9ihh0hafl"))))
3801 (build-system python-build-system)
3802 (arguments
3803 '(#:phases (modify-phases %standard-phases
3804 (replace 'check
3805 (lambda* (#:key tests? #:allow-other-keys)
3806 (when tests?
3807 (invoke "pytest" "-vv")))))))
3808 (native-inputs
3809 (list python-cryptography python-pytest))
3810 (home-page "https://github.com/progrium/pyjwt")
3811 (synopsis "JSON Web Token implementation in Python")
3812 (description
3813 "PyJWT is a JSON Web Token implementation written in Python.")
3814 (license license:expat)))
3815
3816 (define-public python-pymsgbox
3817 (package
3818 (name "python-pymsgbox")
3819 (version "1.0.6")
3820 (source
3821 (origin
3822 (method git-fetch)
3823 (uri (git-reference
3824 ;; LICENSE.txt is not present on pypi
3825 (url "https://github.com/asweigart/PyMsgBox")
3826 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
3827 (file-name (git-file-name name version))
3828 (sha256
3829 (base32
3830 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
3831 (arguments
3832 ;; Circular dependency to run tests:
3833 ;; Tests need pyautogui, which depends on pymsgbox.
3834 '(#:tests? #f))
3835 (build-system python-build-system)
3836 (home-page "https://github.com/asweigart/PyMsgBox")
3837 (synopsis "Python module for JavaScript-like message boxes")
3838 (description
3839 "PyMsgBox is a simple, cross-platform, pure Python module for
3840 JavaScript-like message boxes. Types of dialog boxes include:
3841 @enumerate
3842 @item alert
3843 @item confirm
3844 @item prompt
3845 @item password
3846 @end enumerate
3847 ")
3848 (license license:bsd-3)))
3849
3850 (define-public python-pympler
3851 (package
3852 (name "python-pympler")
3853 (home-page "https://pythonhosted.org/Pympler/")
3854 (version "0.9")
3855 (source (origin
3856 (method url-fetch)
3857 (uri (pypi-uri "Pympler" version))
3858 (sha256
3859 (base32
3860 "0ivfw2k86nbw9ck9swidl4422w7bhjldxwj90a4sy5r1cbgygjzj"))))
3861 (build-system python-build-system)
3862 (arguments
3863 `(#:phases (modify-phases %standard-phases
3864 (delete 'check)
3865 (add-after 'install 'check
3866 (lambda* (#:key inputs outputs #:allow-other-keys)
3867 (add-installed-pythonpath inputs outputs)
3868 (invoke "python" "setup.py" "test"))))))
3869 (synopsis "Measure, monitor and analyze memory behavior")
3870 (description
3871 "Pympler is a development tool to measure, monitor and analyze
3872 the memory behavior of Python objects in a running Python application.
3873
3874 By pympling a Python application, detailed insight in the size and the
3875 lifetime of Python objects can be obtained. Undesirable or unexpected
3876 runtime behavior like memory bloat and other @samp{pymples} can easily
3877 be identified.
3878
3879 A web profiling frontend exposes process statistics, garbage
3880 visualisation and class tracker statistics.")
3881 (license license:asl2.0)))
3882
3883 (define-public python-itsdangerous
3884 (package
3885 (name "python-itsdangerous")
3886 (version "2.0.1")
3887 (source
3888 (origin
3889 (method url-fetch)
3890 (uri (pypi-uri "itsdangerous" version))
3891 (sha256
3892 (base32
3893 "1w6gfb2zhbcmrfj6digwzw1z68w6zg1q87rm6la2m412zil4swly"))))
3894 (build-system python-build-system)
3895 (home-page "https://palletsprojects.com/p/itsdangerous/")
3896 (synopsis "Python library for passing data to/from untrusted environments")
3897 (description
3898 "Itsdangerous provides various helpers to pass trusted data to untrusted
3899 environments and back.")
3900 (license license:bsd-3)))
3901
3902 (define-public python-pyyaml
3903 (package
3904 (name "python-pyyaml")
3905 (version "6.0")
3906 (source
3907 (origin
3908 (method url-fetch)
3909 (uri (pypi-uri "PyYAML" version))
3910 (sha256
3911 (base32
3912 "18imkjacvpxfgg1lbpraqywx3j7hr5dv99d242byqvrh2jf53yv8"))))
3913 (build-system python-build-system)
3914 (inputs
3915 (list libyaml python-cython))
3916 (home-page "https://pyyaml.org")
3917 (synopsis "YAML parser and emitter for Python")
3918 (description
3919 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
3920 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
3921 API, and sensible error messages. PyYAML supports standard YAML tags and
3922 provides Python-specific tags that represent an arbitrary Python object.")
3923 (license license:expat)))
3924
3925 (define-public python-pyyaml-5
3926 (package
3927 (inherit python-pyyaml)
3928 (version "5.4.1")
3929 (source
3930 (origin
3931 (method url-fetch)
3932 (uri (pypi-uri "PyYAML" version))
3933 (sha256
3934 (base32
3935 "0pm440pmpvgv5rbbnm8hk4qga5a292kvlm1bh3x2nwr8pb5p8xv0"))))))
3936
3937 (define-public python-vine
3938 (package
3939 (name "python-vine")
3940 (version "5.0.0")
3941 (source
3942 (origin
3943 (method url-fetch)
3944 (uri (pypi-uri "vine" version))
3945 (sha256
3946 (base32 "0zk3pm0g7s4qfn0gk28lfmsyplvisaxi6826cgpq5njkm4j1cfvx"))))
3947 (build-system python-build-system)
3948 (native-inputs
3949 (list python-pytest python-case))
3950 (home-page "https://github.com/celery/vine")
3951 (synopsis "Promises for Python")
3952 (description
3953 "@code{vine} provides a special implementation of promises in that it can
3954 be used both for \"promise of a value\" and lazy evaluation. The biggest
3955 upside for this is that everything in a promise can also be a promise,
3956 e.g. filters, callbacks and errbacks can all be promises.")
3957 (license license:bsd-3)))
3958
3959 (define-public python-virtualenv
3960 (package
3961 (name "python-virtualenv")
3962 (version "20.3.1")
3963 (source
3964 (origin
3965 (method url-fetch)
3966 (uri (pypi-uri "virtualenv" version))
3967 (sha256
3968 (base32
3969 "1nbhnpzswcf3lmzn5xabmfdd7ki8r2w2i37y6wml54di6qi1l48c"))))
3970 (build-system python-build-system)
3971 (native-inputs
3972 (list python-mock python-pytest python-setuptools-scm))
3973 (propagated-inputs
3974 (list python-appdirs python-distlib python-filelock python-six))
3975 (home-page "https://virtualenv.pypa.io/")
3976 (synopsis "Virtual Python environment builder")
3977 (description
3978 "Virtualenv is a tool to create isolated Python environments.")
3979 (license license:expat)))
3980
3981 (define-public python-markupsafe
3982 (package
3983 (name "python-markupsafe")
3984 (version "2.0.1")
3985 (source
3986 (origin
3987 (method url-fetch)
3988 (uri (pypi-uri "MarkupSafe" version))
3989 (sha256
3990 (base32
3991 "02k2ynmqvvd0z0gakkf8s4idyb606r7zgga41jrkhqmigy06fk2r"))))
3992 (build-system python-build-system)
3993 (arguments
3994 `(#:phases (modify-phases %standard-phases
3995 (replace 'check
3996 (lambda* (#:key tests? #:allow-other-keys)
3997 (when tests?
3998 (invoke "pytest" "-vv")))))))
3999 (native-inputs
4000 (list python-pytest))
4001 (home-page "https://github.com/mitsuhiko/markupsafe")
4002 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
4003 (description
4004 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
4005 for Python.")
4006 (license license:bsd-3)))
4007
4008
4009 (define-public python-jinja2
4010 (package
4011 (name "python-jinja2")
4012 (version "3.1.1")
4013 (source
4014 (origin
4015 (method url-fetch)
4016 (uri (pypi-uri "Jinja2" version))
4017 (sha256
4018 (base32
4019 "1saawzys14l1p4kafs7hkihmnvqjq8fwxjmkjiqx3jq1nm5ys2v4"))))
4020 (build-system python-build-system)
4021 (arguments
4022 '(#:phases (modify-phases %standard-phases
4023 (replace 'check
4024 (lambda* (#:key tests? #:allow-other-keys)
4025 (if tests?
4026 (invoke "pytest" "-vv")
4027 (format #t "test suite not run~%")))))))
4028 (native-inputs (list python-pytest))
4029 (propagated-inputs (list python-markupsafe))
4030 (home-page "https://jinja.palletsprojects.com/")
4031 (synopsis "Python template engine")
4032 (description
4033 "Jinja2 is a small but fast and easy to use stand-alone template engine
4034 written in pure Python.")
4035 (license license:bsd-3)))
4036
4037
4038 (define-public python-jinja2-time
4039 (package
4040 (name "python-jinja2-time")
4041 (version "0.2.0")
4042 (source
4043 (origin
4044 (method url-fetch)
4045 (uri (pypi-uri "jinja2-time" version))
4046 (sha256
4047 (base32
4048 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
4049 (build-system python-build-system)
4050 (propagated-inputs
4051 (list python-arrow python-jinja2))
4052 (home-page
4053 "https://github.com/hackebrot/jinja2-time")
4054 (synopsis "Jinja2 Extension for Dates and Times")
4055 (description
4056 "This package provides an extension for the template engine Jinja2. It
4057 adds a 'now' tag providing a convenient access to the arrow.now() API from
4058 templates. A format string can be provided to control the output.")
4059 (license license:expat)))
4060
4061 (define-public python-pysdl2
4062 (package
4063 (name "python-pysdl2")
4064 (version "0.9.11")
4065 (source (origin
4066 (method url-fetch)
4067 (uri (pypi-uri "PySDL2" version))
4068 (sha256
4069 (base32
4070 "19id1qswgcj4v4j5kn49shq1xxx3slhjpm0102w87mczsdbi1rck"))))
4071 (build-system python-build-system)
4072 (arguments
4073 (list #:tests? #f ;; Requires /dev/dri, OpenGL module, etc.
4074 #:phases
4075 #~(modify-phases %standard-phases
4076 (add-after 'unpack 'patch-paths
4077 (lambda* (#:key inputs #:allow-other-keys)
4078 (substitute* "sdl2/dll.py"
4079 ;; Disable pysdl2-dll. It can't be packaged on GNU Guix
4080 ;; as it duplicates an existing package (sdl2).
4081 (("prepath = os\\.getenv\\('PYSDL2_DLL_PATH'\\)")
4082 "prepath = \"system\"")
4083 (("^import sdl2dll$") "")
4084 (("postpath = os\\.getenv\\('PYSDL2_DLL_PATH'\\)")
4085 "postpath = \"system\"")
4086 (("DLL\\(.*, os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)\\)")
4087 (string-append
4088 "DLL(\"SDL2\", [\"SDL2\", \"SDL2-2.0\", \"SDL2-2.0.0\"], \""
4089 (dirname (search-input-file inputs "/lib/libSDL2.so"))
4090 "\")")))
4091 (substitute* "sdl2/sdlimage.py"
4092 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4093 (string-append
4094 "\""
4095 (dirname (search-input-file inputs "/lib/libSDL2_image.so"))
4096 "\"")))
4097 (substitute* "sdl2/sdlgfx.py"
4098 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4099 (string-append
4100 "\""
4101 (dirname (search-input-file inputs "/lib/libSDL2_gfx.so"))
4102 "\"")))
4103 (substitute* "sdl2/sdlmixer.py"
4104 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4105 (string-append
4106 "\""
4107 (dirname (search-input-file inputs "/lib/libSDL2_mixer.so"))
4108 "\"")))
4109 (substitute* "sdl2/sdlttf.py"
4110 (("os\\.getenv\\(\"PYSDL2_DLL_PATH\"\\)")
4111 (string-append
4112 "\""
4113 (dirname (search-input-file inputs "/lib/libSDL2_ttf.so"))
4114 "\""))))))))
4115 (inputs
4116 (list sdl2 sdl2-image sdl2-gfx sdl2-mixer sdl2-ttf))
4117 (home-page "https://github.com/py-sdl/py-sdl2")
4118 (synopsis "Python bindings around the SDL2 game development library")
4119 (description "PySDL2 is a pure Python wrapper around the @code{SDL2},
4120 @code{SDL2_mixer}, @code{SDL2_image}, @code{SDL2_ttf}, and @code{SDL2_gfx}
4121 libraries. Instead of relying on C code, it uses the built-in ctypes module
4122 to interface with SDL2, and provides simple Python classes and wrappers for
4123 common SDL2 functionality.")
4124 (license license:cc0)))
4125
4126 (define-public python-pystache
4127 (package
4128 (name "python-pystache")
4129 (version "0.6.0")
4130 (source (origin
4131 (method url-fetch)
4132 (uri (pypi-uri "pystache" version))
4133 (sha256
4134 (base32
4135 "03a73ppf5vxnsk6az5ackvc0hp6xqv2f4hi1s5c4nk4s2jr95gwk"))))
4136 (build-system python-build-system)
4137 (arguments
4138 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
4139 (home-page "http://defunkt.io/pystache/")
4140 (synopsis "Python logic-less template engine")
4141 (description
4142 "Pystache is a Python implementation of the framework agnostic,
4143 logic-free templating system Mustache.")
4144 (license license:expat)))
4145
4146 (define-public python-pystitcher
4147 (package
4148 (name "python-pystitcher")
4149 (version "1.0.4")
4150 (source
4151 (origin
4152 (method git-fetch)
4153 (uri
4154 (git-reference
4155 (url "https://github.com/captn3m0/pystitcher")
4156 (commit
4157 (string-append "v" version))))
4158 (file-name
4159 (git-file-name name version))
4160 (sha256
4161 (base32 "03yrzqhcsjdj5zprrk3bh5bbyqfy3vfhxra9974vmkir3m121394"))))
4162 (build-system python-build-system)
4163 (inputs
4164 (list python-html5lib python-importlib-metadata python-markdown
4165 python-pypdf3 python-validators))
4166 (home-page "https://github.com/captn3m0/pystitcher")
4167 (synopsis "Declaratively stitch together a PDF file from multiple sources")
4168 (description
4169 "This package stitches your PDF files together, generating customizable
4170 bookmarks using a declarative input in the form of a markdown file.")
4171 (license license:expat)))
4172
4173 (define-public python-joblib
4174 (package
4175 (name "python-joblib")
4176 (version "1.1.0")
4177 (source (origin
4178 (method url-fetch)
4179 (uri (pypi-uri "joblib" version))
4180 (sha256
4181 (base32
4182 "0d8ypyhsw1bjr96zan9ms8wbvnzbjqxniq4vcszghcrps7ngqn21"))))
4183 (build-system python-build-system)
4184 (arguments
4185 `(#:phases
4186 (modify-phases %standard-phases
4187 (replace 'check
4188 (lambda* (#:key tests? #:allow-other-keys)
4189 (when tests?
4190 (setenv "JOBLIB_MULTIPROCESSING" "0")
4191 (invoke "pytest" "-v" "joblib"
4192 ;; We disable this test to avoid having to depend on ipython/jupyter
4193 "-k" "not test_parallel_call_cached_function_defined_in_jupyter")))))))
4194 (native-inputs
4195 (list python-pytest))
4196 (home-page "https://joblib.readthedocs.io/")
4197 (synopsis "Using Python functions as pipeline jobs")
4198 (description
4199 "Joblib is a set of tools to provide lightweight pipelining in Python.
4200 In particular, joblib offers: transparent disk-caching of the output values
4201 and lazy re-evaluation (memoize pattern), easy simple parallel computing
4202 logging and tracing of the execution.")
4203 (license license:bsd-3)))
4204
4205
4206 (define-public python-daemon
4207 (package
4208 (name "python-daemon")
4209 (version "2.3.0")
4210 (source
4211 (origin
4212 (method url-fetch)
4213 (uri (pypi-uri "python-daemon" version))
4214 (sha256
4215 (base32
4216 "1bxfn2bq56sd4w0nm9mqy8y0905m7fc8vmhnjxlrf49vcbqr7adx"))))
4217 (build-system python-build-system)
4218 (arguments
4219 `(#:phases
4220 (modify-phases %standard-phases
4221 (add-before 'check 'adjust-tests
4222 (lambda _
4223 ;; Drop use of testtools.helpers.safe_hasattr which has
4224 ;; been removed in favor of hasattr.
4225 (substitute* "test/test_metadata.py"
4226 (("testtools\\.helpers\\.safe_hasattr")
4227 "hasattr"))
4228 ;; FIXME: Determine why test fails
4229 (substitute* "test/test_daemon.py"
4230 (("test_detaches_process_context")
4231 "skip_test_detaches_process_context")))))))
4232 (propagated-inputs
4233 (list python-lockfile))
4234 (native-inputs
4235 (list python-coverage
4236 python-testtools
4237 python-testscenarios
4238 python-twine
4239 python-mock
4240 python-docutils))
4241 (home-page "https://pagure.io/python-daemon/")
4242 (synopsis "Python library for making a Unix daemon process")
4243 (description "Python-daemon is a library that assists a Python program to
4244 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
4245
4246 This library provides a @code{DaemonContext} class that manages the following
4247 important tasks for becoming a daemon process:
4248 @enumerate
4249 @item Detach the process into its own process group.
4250 @item Set process environment appropriate for running inside a chroot.
4251 @item Renounce suid and sgid privileges.
4252 @item Close all open file descriptors.
4253 @item Change the working directory, uid, gid, and umask.
4254 @item Set appropriate signal handlers.
4255 @item Open new file descriptors for stdin, stdout, and stderr.
4256 @item Manage a specified PID lock file.
4257 @item Register cleanup functions for at-exit processing.
4258 @end enumerate")
4259 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
4260 (license (list license:asl2.0 license:gpl3+))))
4261
4262 (define-public python-anytree
4263 (package
4264 (name "python-anytree")
4265 (version "2.8.0")
4266 (source (origin
4267 (method url-fetch)
4268 (uri (pypi-uri "anytree" version))
4269 (sha256
4270 (base32
4271 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
4272 (build-system python-build-system)
4273 (propagated-inputs
4274 (list python-six))
4275 (native-inputs
4276 (list ;; For tests.
4277 graphviz ;for 'dot'
4278 python-nose))
4279 (home-page "https://github.com/c0fec0de/anytree")
4280 (synopsis "Lightweight tree data library")
4281 (description
4282 "@code{anytree} is a simple, lightweight, and extensible tree data
4283 structure for Python.")
4284 (license license:asl2.0)))
4285
4286 (define-public autokey
4287 (package
4288 (name "autokey")
4289 (version "0.95.10")
4290 (source (origin
4291 (method git-fetch)
4292 (uri (git-reference
4293 (url "https://github.com/autokey/autokey")
4294 (commit (string-append "v" version))))
4295 (file-name (git-file-name name version))
4296 (sha256
4297 (base32
4298 "0f0cqfnb49wwdy7zl2f2ypcnd5pc8r8n7z7ssxkq20d4xfxlgamr"))))
4299 (build-system python-build-system)
4300 (arguments
4301 (list
4302 ;; Tests are deprecated and broken until next version, see
4303 ;; https://github.com/autokey/autokey/issues/327
4304 #:tests? #f
4305 #:phases
4306 #~(modify-phases %standard-phases
4307 (add-after 'unpack 'fix-paths
4308 (lambda* (#:key inputs #:allow-other-keys)
4309 (substitute* "lib/autokey/scripting.py"
4310 (("\"wmctrl\"")
4311 (string-append "\"" (search-input-file inputs "bin/wmctrl") "\""))
4312 (("\"zenity\"")
4313 (string-append "\"" (search-input-file inputs "bin/zenity") "\"")))
4314 (substitute* "autokey-shell"
4315 (("'ipython3'")
4316 (string-append "'" (search-input-file inputs "bin/ipython3") "'"))
4317 (("'python3'")
4318 (string-append "'" (search-input-file inputs "bin/python3") "'")))))
4319 ;; Use 'prefix' instead of '=' to allow the user to use additional
4320 ;; GI paths from their autokey scripts. GUIX_PYTHONPATH is already
4321 ;; wrapped with prefix in python-build-system's wrap.
4322 (add-before 'wrap 'wrap-autokey-gi
4323 (lambda _
4324 (let ((gi-typelib-path (getenv "GI_TYPELIB_PATH")))
4325 (for-each
4326 (lambda (program)
4327 (wrap-program program
4328 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
4329 (map (lambda (name)
4330 (string-append #$output "/bin/" name))
4331 '("autokey-gtk"
4332 "autokey-shell")))))))))
4333 (inputs
4334 (list bash-minimal ; for wrap-program
4335 gtksourceview-3
4336 libappindicator
4337 libnotify
4338 python-dbus
4339 python-ipython
4340 python-pygobject
4341 python-pyinotify
4342 python-pyqt+qscintilla
4343 python-xlib
4344 wmctrl
4345 zenity))
4346 (home-page "https://github.com/autokey/autokey")
4347 (synopsis
4348 "Keyboard and GUI automation utility")
4349 (description
4350 "AutoKey is a desktop automation utility for X11. It allows the automation of
4351 virtually any task by responding to typed abbreviations and hotkeys. It
4352 offers a full-featured GUI (GTK and QT versions) that makes it highly
4353 accessible for novices, as well as a scripting interface offering the full
4354 flexibility and power of the Python language.")
4355 (license license:gpl3+)))
4356
4357 (define-public python-docutils
4358 (package
4359 (name "python-docutils")
4360 (version "0.17.1")
4361 (source
4362 (origin
4363 (method url-fetch)
4364 (uri (pypi-uri "docutils" version))
4365 (sha256
4366 (base32
4367 "09gii36lp1bs26cpxqyfd20xahnpbrbjzcnba2xq08y3wk97frb8"))))
4368 (build-system python-build-system)
4369 (arguments
4370 '(#:phases (modify-phases %standard-phases
4371 (replace 'check
4372 (lambda* (#:key tests? #:allow-other-keys)
4373 (if tests?
4374 (invoke "python" "test/alltests.py")
4375 (format #t "test suite not run~%"))
4376 #t)))))
4377 (home-page "http://docutils.sourceforge.net/")
4378 (synopsis "Python Documentation Utilities")
4379 (description
4380 "Docutils is a modular system for processing documentation into useful
4381 formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
4382 easy to use markup language, for input.
4383
4384 This package provides tools for converting @file{.rst} files to other formats
4385 via commands such as @command{rst2man}, as well as supporting Python code.")
4386 ;; Most of the source code is public domain, but some source files are
4387 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
4388 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
4389
4390 ;; awscli refuses to be built with docutils < 0.16.
4391 (define-public python-docutils-0.15
4392 (package
4393 (inherit python-docutils)
4394 (version "0.15")
4395 (source (origin
4396 (method url-fetch)
4397 (uri (pypi-uri "docutils" version))
4398 (sha256
4399 (base32
4400 "0ja8q6mdj6xv62jjw3phv8j5nfqi5x8hnfy4pqfcjcgz4b34k8sl"))))
4401 ;; tests contain Python 2 syntax.
4402 (arguments '(#:tests? #false))))
4403
4404 (define-public python-restructuredtext-lint
4405 (package
4406 (name "python-restructuredtext-lint")
4407 (version "1.3.0")
4408 (source
4409 (origin
4410 (method url-fetch)
4411 (uri (pypi-uri "restructuredtext-lint" version))
4412 (sha256
4413 (base32
4414 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
4415 (build-system python-build-system)
4416 (arguments
4417 `(#:phases
4418 (modify-phases %standard-phases
4419 (delete 'check)
4420 (add-after 'install 'check
4421 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4422 (when tests?
4423 (add-installed-pythonpath inputs outputs)
4424 (invoke "nosetests" "-v"))
4425 #t)))))
4426 (propagated-inputs
4427 (list python-docutils))
4428 (native-inputs
4429 (list python-nose))
4430 (home-page "https://github.com/twolfson/restructuredtext-lint")
4431 (synopsis "reStructuredText linter")
4432 (description "This package provides a linter for the reStructuredText
4433 format.")
4434 (license license:unlicense)))
4435
4436 (define-public python-click-repl
4437 (package
4438 (name "python-click-repl")
4439 (version "0.2.0")
4440 (source
4441 (origin
4442 (method git-fetch) ; no tests in PyPI release
4443 (uri (git-reference
4444 (url "https://github.com/click-contrib/click-repl")
4445 (commit version)))
4446 (file-name (git-file-name name version))
4447 (sha256
4448 (base32 "16ybsnwlj2jlqcfxflky8jz7i3nhrd3f6mvkpgs95618l8lx994i"))))
4449 (build-system python-build-system)
4450 (arguments
4451 `(#:phases
4452 (modify-phases %standard-phases
4453 (replace 'check
4454 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4455 (when tests?
4456 (add-installed-pythonpath inputs outputs)
4457 (invoke "python" "-m" "pytest")))))))
4458 (native-inputs
4459 (list python-pytest))
4460 (propagated-inputs
4461 (list python-click python-prompt-toolkit python-six))
4462 (home-page "https://github.com/untitaker/click-repl")
4463 (synopsis "REPL plugin for Click")
4464 (description "This package provides a REPL plugin for Click.")
4465 (license license:expat)))
4466
4467 (define-public python-doc8
4468 (package
4469 (name "python-doc8")
4470 (version "0.8.0")
4471 (source
4472 (origin
4473 (method url-fetch)
4474 (uri (pypi-uri "doc8" version))
4475 (sha256
4476 (base32
4477 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
4478 (build-system python-build-system)
4479 (arguments
4480 `(#:phases
4481 (modify-phases %standard-phases
4482 (delete 'check)
4483 (add-after 'install 'check
4484 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4485 (when tests?
4486 (add-installed-pythonpath inputs outputs)
4487 (invoke "pytest" "-v"))
4488 #t)))))
4489 (propagated-inputs
4490 (list python-chardet python-docutils python-restructuredtext-lint
4491 python-six python-stevedore))
4492 (native-inputs
4493 (list python-testtools python-pytest))
4494 (home-page "https://launchpad.net/doc8")
4495 (synopsis
4496 "Style checker for Sphinx (or other) RST documentation")
4497 (description
4498 "Doc8 is an opinionated style checker for reStructured Text and plain
4499 text styles of documentation.")
4500 (license license:asl2.0)))
4501
4502 (define-public python-pygments
4503 (package
4504 (name "python-pygments")
4505 (version "2.12.0")
4506 (source
4507 (origin
4508 (method url-fetch)
4509 (uri (pypi-uri "Pygments" version))
4510 (sha256
4511 (base32
4512 "1sr6iqh21xi6p8aba4wa9pqfhjbbpcvn9jcsx0ggy4lniw8idcay"))))
4513 (build-system python-build-system)
4514 (arguments
4515 ;; FIXME: Tests require sphinx, which depends on this.
4516 '(#:tests? #f))
4517 (home-page "https://pygments.org/")
4518 (synopsis "Syntax highlighting")
4519 (description
4520 "Pygments is a syntax highlighting package written in Python.")
4521 (license license:bsd-2)))
4522
4523 (define-public python-pygments-github-lexers
4524 (package
4525 (name "python-pygments-github-lexers")
4526 (version "0.0.5")
4527 (source
4528 (origin
4529 (method url-fetch)
4530 (uri (pypi-uri "pygments-github-lexers" version))
4531 (sha256
4532 (base32
4533 "0cz14clcc9z4pn79ll8hp3xzgsrfjscak5zfsvlgrz6ngkkmgjma"))))
4534 (build-system python-build-system)
4535 (propagated-inputs
4536 (list python-pygments))
4537 (home-page "https://github.com/liluo/pygments-github-lexers")
4538 (synopsis "Pygments Github custom lexers")
4539 (description "This package installs Github custom lexers to Pygments.")
4540 (license license:bsd-3)))
4541
4542 (define-public python-bump2version
4543 (package
4544 (name "python-bump2version")
4545 (version "1.0.1")
4546 (source
4547 (origin
4548 (method url-fetch)
4549 (uri (pypi-uri "bump2version" version))
4550 (sha256
4551 (base32 "1rinm4gv1fyh7xjv3v6r1p3zh5kl4ry2qifz5f7frx31mnzv4b3n"))))
4552 (build-system python-build-system)
4553 (arguments
4554 ;; XXX: Tests fail with "bumpversion: error: the following arguments are
4555 ;; required: --new-version".
4556 `(#:tests? #false))
4557 (home-page "https://github.com/c4urself/bump2version")
4558 (synopsis "Version-bump your software with a single command!")
4559 (description
4560 "This package provides a small command line tool to simplify releasing
4561 software by updating all version strings in your source code by the correct
4562 increment. It also creates commits and tags.")
4563 (license license:expat)))
4564
4565 (define-public python-bumpversion
4566 (package
4567 (name "python-bumpversion")
4568 (version "0.5.3")
4569 (source
4570 (origin
4571 (method url-fetch)
4572 (uri (pypi-uri "bumpversion" version))
4573 (sha256
4574 (base32
4575 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
4576 (build-system python-build-system)
4577 (home-page "https://github.com/peritus/bumpversion")
4578 (synopsis "Tool to bump software version")
4579 (description "This tool provides a command-line interface (CLI) to bump a
4580 software version simply.")
4581 (license license:expat)))
4582
4583 (define-public python-deprecated
4584 (package
4585 (name "python-deprecated")
4586 (version "1.2.13")
4587 (source
4588 (origin
4589 (method git-fetch)
4590 (uri (git-reference
4591 (url "https://github.com/tantale/deprecated")
4592 (commit (string-append "v" version))))
4593 (file-name (git-file-name name version))
4594 (sha256
4595 (base32
4596 "0v4ys9xr8lski2r98da99spsj6hjlnnqgnhhmyhrm66myiix885c"))))
4597 (build-system python-build-system)
4598 (arguments
4599 `(#:phases (modify-phases %standard-phases
4600 (replace 'check
4601 (lambda* (#:key tests? #:allow-other-keys)
4602 (when tests?
4603 (invoke "pytest")))))))
4604 (propagated-inputs
4605 (list python-wrapt))
4606 (native-inputs
4607 (list python-bumpversion python-pytest python-pytest-cov
4608 python-sphinx python-tox))
4609 (home-page "https://github.com/tantale/deprecated")
4610 (synopsis "Python decorator to deprecate classes, functions or methods")
4611 (description "The @code{deprecated} decorator provides a convenient way to deprecate
4612 to deprecate classes, functions or methods.")
4613 (license license:expat)))
4614
4615 (define-public python-pygithub
4616 (package
4617 (name "python-pygithub")
4618 (version "1.55")
4619 (source
4620 ;; We fetch from the Git repo because there are no tests in the PyPI
4621 ;; archive.
4622 (origin
4623 (method git-fetch)
4624 (uri (git-reference
4625 (url "https://github.com/PyGithub/PyGithub")
4626 (commit (string-append "v" version))))
4627 (file-name (git-file-name name version))
4628 (sha256
4629 (base32 "082bxffpy4h97dsay3l75cpgfjj10kywkvicnm6xscwvah285q9y"))))
4630 (build-system python-build-system)
4631 (arguments
4632 `(#:phases
4633 (modify-phases %standard-phases
4634 (replace 'check
4635 (lambda* (#:key tests? #:allow-other-keys)
4636 (when tests?
4637 (invoke "pytest"))
4638 #t)))))
4639 (propagated-inputs
4640 (list python-cryptography python-deprecated python-pyjwt
4641 python-pynacl python-requests))
4642 (native-inputs
4643 (list python-httpretty python-pytest))
4644 (home-page "https://pygithub.readthedocs.io/en/latest/")
4645 (synopsis "Python library for the GitHub API")
4646 (description "This library allows managing GitHub resources such as
4647 repositories, user profiles, and organizations in your Python applications,
4648 using version 3 of the GitHub application programming interface (API).")
4649 (license license:lgpl3+)))
4650
4651 (define-public python-rellu
4652 (package
4653 (name "python-rellu")
4654 (version "0.7")
4655 (source
4656 (origin
4657 (method url-fetch)
4658 (uri (pypi-uri "rellu" version))
4659 (sha256
4660 (base32
4661 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
4662 (build-system python-build-system)
4663 (propagated-inputs
4664 (list python-invoke python-pygithub))
4665 (home-page "https://github.com/robotframework/rellu")
4666 (synopsis "Utilities to create PyPI releases")
4667 (description "This collection of utilities contains tooling and templates
4668 to assist in creating releases on GitHub and publishing them on PyPI. It is
4669 designed to be used by Robot Framework and tools and libraries in its
4670 ecosystem, but can naturally be used also by other projects.")
4671 (license license:asl2.0)))
4672
4673 (define-public python-robotframework
4674 (package
4675 (name "python-robotframework")
4676 (version "5.0")
4677 ;; There are no tests in the PyPI archive.
4678 (source
4679 (origin
4680 (method git-fetch)
4681 (uri (git-reference
4682 (url "https://github.com/robotframework/robotframework")
4683 (commit (string-append "v" version))))
4684 (file-name (git-file-name name version))
4685 (sha256
4686 (base32 "0qcm36c8hachbv3bc05ky7cf63i3sj0y8dw3bwjvcln28i543f81"))
4687 (patches (search-patches
4688 "python-robotframework-atest.patch"
4689 "python-robotframework-source-date-epoch.patch"))))
4690 (build-system python-build-system)
4691 (arguments
4692 (list
4693 #:modules '((guix build python-build-system)
4694 (guix build utils)
4695 (ice-9 ftw)
4696 (ice-9 match)
4697 (srfi srfi-26))
4698 #:phases
4699 #~(modify-phases %standard-phases
4700 (add-after 'unpack 'delete-problematic-tests
4701 (lambda _
4702 ;; Tests such as 'Tilde and username in path' rely on HOME and
4703 ;; USER being set, on top of the user's /etc/passwd home
4704 ;; directory not being '/', as is the case in the Guix build
4705 ;; container.
4706 (delete-file "atest/robot/standard_libraries/\
4707 operating_system/path_expansion.robot")
4708 ;; FIXME: The test 'Process.Sending Signal.By default signal
4709 ;; is not sent to process running in shell' fails for unknown
4710 ;; reason (see:
4711 ;; https://github.com/robotframework/robotframework/issues/4292).
4712 (delete-file "atest/robot/standard_libraries/\
4713 process/sending_signal.robot")))
4714 (add-before 'build 'build-and-install-doc
4715 (lambda* (#:key outputs #:allow-other-keys)
4716 (let ((doc (string-append (assoc-ref outputs "doc")
4717 "/share/doc/robotframework")))
4718 (invoke "invoke" "library-docs" "all")
4719 (invoke "doc/userguide/ug2html.py" "dist") ;user guide
4720 (mkdir-p doc)
4721 (with-directory-excursion "dist"
4722 (define user-guide-dir
4723 (match (scandir "." (cut string-prefix?
4724 "robotframework-userguide-" <>))
4725 ((dir) dir)
4726 (_ (error "could not find the user guide directory"))))
4727 (copy-recursively user-guide-dir doc)))))
4728 (replace 'check
4729 (lambda* (#:key native-inputs inputs tests?
4730 #:allow-other-keys)
4731 (when tests?
4732 ;; Some tests require timezone data. Otherwise, they
4733 ;; look up /etc/localtime, which doesn't exist, and
4734 ;; fail with:
4735 ;;
4736 ;; OverflowError: mktime argument out of range
4737 (setenv "TZDIR"
4738 (search-input-directory
4739 (or native-inputs inputs) "share/zoneinfo"))
4740 (setenv "TZ" "Europe/Paris")
4741
4742 (format #t "Running unit tests...~%")
4743 (invoke "utest/run.py")
4744
4745 (format #t "Running acceptance tests...~%")
4746 (invoke "xvfb-run" "atest/run.py")))))))
4747 (native-inputs
4748 (list python-docutils
4749 python-jsonschema
4750 python-invoke
4751 python-lxml
4752 python-pygments
4753 python-pyyaml
4754 python-rellu
4755 `(,python "tk") ;used when building the HTML doc
4756 python-xmlschema
4757 scrot ;for taking screenshots
4758 tzdata-for-tests
4759 xvfb-run))
4760 (outputs '("out" "doc"))
4761 (home-page "https://robotframework.org")
4762 (synopsis "Generic automation framework")
4763 (description "Robot Framework is a generic automation framework for
4764 acceptance testing, acceptance test driven development (ATDD), and robotic
4765 process automation (RPA).")
4766 (license license:asl2.0)))
4767
4768 (define-public python-robotframework-datadriver
4769 (package
4770 (name "python-robotframework-datadriver")
4771 (version "1.6.0")
4772 (source
4773 (origin
4774 (method url-fetch)
4775 (uri (pypi-uri "robotframework-datadriver" version))
4776 (sha256
4777 (base32 "0qa2vry8jr49k5rbrvmkgggzsmis1wv06dp5dvwmp7afm7vjc51k"))))
4778 (build-system python-build-system)
4779 (arguments
4780 `(#:phases
4781 (modify-phases %standard-phases
4782 (add-before 'check 'skip-problematic-tests
4783 (lambda _
4784 ;; The test file 'tab-csv-file-name.tsv' contains special
4785 ;; characters for which there is no locale in the build
4786 ;; environment, causing one test to fail.
4787 (delete-file-recursively "atest/TestCases/csv_reader_config")))
4788 (replace 'check
4789 (lambda* (#:key tests? #:allow-other-keys)
4790 (when tests?
4791 (with-directory-excursion "atest"
4792 (invoke "sh" "run_atest.sh"))))))))
4793 (native-inputs (list python-docutils
4794 python-robotframework-stacktrace))
4795 (propagated-inputs (list python-openpyxl
4796 python-pandas
4797 python-pygments
4798 python-robotframework))
4799 (home-page "https://github.com/Snooz82/robotframework-datadriver")
4800 (synopsis "Data-driven test extension for Robot Framework")
4801 (description "DataDriver is a data-driven extension for Robot Framework.
4802 DataDriver uses the Listener Interface of Robot Framework to create new test
4803 cases based on a data file that contains the test data. DataDriver supports
4804 data files in the CSV, XLS or XLSX formats.")
4805 (license license:asl2.0)))
4806
4807 (define-public python-robotframework-lint
4808 ;; There is no properly tagged release; the commit below seems to correspond
4809 ;; to the 0.9 stable release available from PyPI. The tests are not
4810 ;; included in the PyPI archive, so we fetch the sources from the upstream
4811 ;; Git repo.
4812 (let ((commit "b0619ac58a8b1be125f9c98856a664594614570f")
4813 (revision "0"))
4814 (package
4815 (name "python-robotframework-lint")
4816 (version (git-version "1.1" ;version taken from 'rflint/version.py'
4817 revision commit))
4818 (source
4819 (origin
4820 (method git-fetch)
4821 (uri (git-reference
4822 (url "https://github.com/boakley/robotframework-lint")
4823 (commit commit)))
4824 (file-name (git-file-name name version))
4825 (sha256
4826 (base32
4827 "180npmvzqync25b2scs878gv8q4y17dsinxyjcc10bw22msfap6b"))))
4828 (build-system python-build-system)
4829 (arguments
4830 `(#:phases
4831 (modify-phases %standard-phases
4832 (replace 'check
4833 (lambda _
4834 (invoke "python" "-m" "robot" "-A"
4835 "tests/conf/default.args" "tests"))))))
4836 (propagated-inputs
4837 (list python-robotframework))
4838 (home-page "https://github.com/boakley/robotframework-lint/")
4839 (synopsis "Static analysis tool (linter) for Robot Framework")
4840 (description "This package provides the @code{rflint} command-line
4841 utility, a static analysis tool (linter) for Robot Framework source files.")
4842 (license license:asl2.0))))
4843
4844 (define-public python-robotframework-pabot
4845 (package
4846 (name "python-robotframework-pabot")
4847 (version "2.5.2")
4848 (source
4849 (origin
4850 ;; There are no tests in the PyPI archive.
4851 (method git-fetch)
4852 (uri (git-reference
4853 (url "https://github.com/mkorpela/pabot")
4854 (commit version)))
4855 (file-name (git-file-name name version))
4856 (sha256
4857 (base32
4858 "14a8isq1f4lgfwjb84hhzg6jm7ns18dxa9bg6dy8k2ml8zl0qknk"))))
4859 (build-system python-build-system)
4860 (arguments
4861 (list
4862 #:phases #~(modify-phases %standard-phases
4863 (replace 'check
4864 (lambda* (#:key tests? #:allow-other-keys)
4865 (when tests?
4866 (invoke "pytest" "-vv" "tests")))))))
4867 (propagated-inputs
4868 (list python-robotframework python-robotframework-stacktrace))
4869 (native-inputs
4870 (list python-pytest))
4871 (home-page "https://pabot.org")
4872 (synopsis "Parallel test runner for Robot Framework")
4873 (description "Pabot is a parallel executor for Robot Framework tests.")
4874 (license license:asl2.0)))
4875
4876 (define-public python-sshtunnel
4877 (package
4878 (name "python-sshtunnel")
4879 (version "0.4.0")
4880 (source (origin
4881 (method url-fetch)
4882 (uri (pypi-uri "sshtunnel" version))
4883 (sha256
4884 (base32
4885 "1z7rdgpp9m36ysh9pfzrn3vyiaj05bkjvcjdhj8vz0fvfjkhxjz7"))))
4886 (build-system python-build-system)
4887 (arguments
4888 `(#:phases
4889 (modify-phases %standard-phases
4890 (replace 'check
4891 (lambda* (#:key tests? #:allow-other-keys)
4892 (when tests? (invoke "pytest" "-vv" "tests")))))))
4893 (propagated-inputs (list python-paramiko))
4894 (native-inputs (list openssh python-pytest))
4895 (home-page "https://github.com/pahaz/sshtunnel")
4896 (synopsis "Python SSH tunnels library")
4897 (description "@code{sshtunnel} is a Python module for easily creating SSH
4898 tunnels in the background, using Python.")
4899 (license license:expat)))
4900
4901 (define-public python-robotframework-sshtunnellibrary
4902 (package
4903 (name "python-robotframework-sshtunnellibrary")
4904 (version "1.0.0")
4905 (source (origin
4906 (method git-fetch)
4907 (uri (git-reference
4908 (url "https://github.com/C-Squad/robotframework-sshtunnellibrary")
4909 (commit (string-append "v" version))))
4910 (file-name (git-file-name name version))
4911 (sha256
4912 (base32
4913 "1vkkmkb8iql13xpbyj4hvnnmfgzqlr8rffgryp2082cadb3w7xrd"))))
4914 (build-system python-build-system)
4915 (arguments
4916 (list #:phases #~(modify-phases %standard-phases
4917 (replace 'check
4918 (lambda* (#:key tests? #:allow-other-keys)
4919 (when tests?
4920 (invoke "python" "-m" "unittest"
4921 "discover" "-s" "test")))))))
4922 (propagated-inputs (list python-robotframework python-sshtunnel))
4923 (home-page "https://github.com/C-Squad/robotframework-sshtunnellibrary")
4924 (synopsis "Alternative RobotFramework library for SSH tunnels")
4925 (description "SSHTunnelLibrary is an alternative RobotFramework
4926 library (to the more official one that comes from the
4927 @code{robotframework-sshlibrary} package) to support SSH tunnels.")
4928 (license license:asl2.0)))
4929
4930 (define-public python-robotframework-stacktrace
4931 (package
4932 (name "python-robotframework-stacktrace")
4933 (version "0.4.1")
4934 (source
4935 (origin
4936 (method url-fetch)
4937 (uri (pypi-uri "robotframework-stacktrace" version))
4938 (sha256
4939 (base32 "19gnwr7da1zz9clhwsmvqfjf02d195i61lzpq4253dcsgrpb6v79"))))
4940 (build-system python-build-system)
4941 (arguments
4942 ;; The test suite fails (see:
4943 ;; https://github.com/MarketSquare/robotframework-stacktrace/issues/4).
4944 `(#:tests? #f
4945 #:phases
4946 (modify-phases %standard-phases
4947 (replace 'check
4948 (lambda* (#:key tests? #:allow-other-keys)
4949 (when tests?
4950 (with-directory-excursion "tests"
4951 (invoke "python" "-m" "robot" "."))))))))
4952 (propagated-inputs (list python-robotframework))
4953 (home-page "https://github.com/MarketSquare/robotframework-stacktrace")
4954 (synopsis "Robot Framework listener to print a stack trace on error")
4955 (description "StackTrace is a Robot Framework listener that prints a stack
4956 trace directly to the terminal to ease debugging.")
4957 (license license:asl2.0)))
4958
4959 (define-public python-robotframework-sshlibrary
4960 (package
4961 (name "python-robotframework-sshlibrary")
4962 (version "3.8.0")
4963 ;; There are no tests in the PyPI archive.
4964 (source
4965 (origin
4966 (method git-fetch)
4967 (uri (git-reference
4968 (url "https://github.com/robotframework/SSHLibrary")
4969 (commit (string-append "v" version))))
4970 (file-name (git-file-name name version))
4971 (sha256
4972 (base32
4973 "1fn72hw7xacjjpl4dd6wynh2x63i9rk8iqhj3v640db21qpcnbkw"))
4974 (patches (search-patches
4975 "python-robotframework-sshlibrary-rf5-compat.patch"))))
4976 (build-system python-build-system)
4977 (arguments
4978 `(#:phases
4979 (modify-phases %standard-phases
4980 (add-before 'build 'build-and-install-doc
4981 (lambda* (#:key outputs #:allow-other-keys)
4982 (let ((doc (string-append
4983 (assoc-ref outputs "doc")
4984 "/share/doc/robotframework-sshlibrary")))
4985 (invoke "chmod" "-R" "+w" "docs")
4986 (invoke "invoke" "kw-docs" "project-docs")
4987 (mkdir-p doc)
4988 (for-each delete-file (find-files "docs" "\\.rst"))
4989 (copy-recursively "docs" doc))))
4990 (replace 'check
4991 (lambda* (#:key tests? #:allow-other-keys)
4992 (when tests?
4993 ;; Some tests require an SSH server; we remove them.
4994 (delete-file "utest/test_client_api.py")
4995 (delete-file "utest/test_scp.py")
4996 (invoke "python" "utest/run.py")))))))
4997 (propagated-inputs
4998 (list python-robotframework python-paramiko python-scp))
4999 (native-inputs
5000 (list openssh
5001 which
5002 ;; To generate the documentation
5003 python-docutils
5004 python-invoke
5005 python-pygments
5006 python-rellu))
5007 (outputs '("out" "doc"))
5008 (home-page "https://github.com/robotframework/SSHLibrary")
5009 (synopsis "Robot Framework library for SSH and SFTP")
5010 (description "SSHLibrary is a Robot Framework library providing support
5011 for SSH and SFTP. It has the following main usages:
5012 @itemize @bullet
5013 @item Executing commands on the remote machine, either blocking or non-blocking.
5014 @item Writing and reading in an interactive shell.
5015 @item Transferring files and directories over SFTP.
5016 @item Ensuring that files and directories exist on the remote machine.
5017 @end itemize")
5018 (license license:asl2.0)))
5019
5020 (define-public python-robotframework-pythonlibcore
5021 (package
5022 (name "python-robotframework-pythonlibcore")
5023 (version "3.0.0")
5024 (source
5025 (origin
5026 (method git-fetch) ;no tests in pypi archive
5027 (uri (git-reference
5028 (url "https://github.com/robotframework/PythonLibCore")
5029 (commit (string-append "v" version))))
5030 (file-name (git-file-name name version))
5031 (sha256
5032 (base32
5033 "0v89v8va65l6inh0fb34qgxawx6p29pnrmw4n5941yzdi3804rc4"))))
5034 (build-system python-build-system)
5035 (arguments
5036 `(#:phases (modify-phases %standard-phases
5037 (replace 'check
5038 (lambda* (#:key tests? #:allow-other-keys)
5039 (when tests?
5040 (invoke "utest/run.py")))))))
5041 (native-inputs
5042 (list python-pytest python-pytest-cov python-pytest-mockito
5043 python-robotframework))
5044 (home-page "https://github.com/robotframework/PythonLibCore")
5045 (synopsis "Robot Framework Python library tools")
5046 (description "PythonLibCore provides tools for creating larger test
5047 libraries for Robot Framework using Python. The Robot Framework hybrid and
5048 dynamic library APIs give more flexibility for library than the static library
5049 API, but they also set requirements for libraries which need to be implemented
5050 in the library side. PythonLibCore eases the problem by providing a simpler
5051 interface and by handling all the requirements towards the Robot Framework
5052 library APIs.")
5053 (license license:asl2.0)))
5054
5055 (define-public python-robotframework-seleniumlibrary
5056 (package
5057 (name "python-robotframework-seleniumlibrary")
5058 (version "5.1.3")
5059 (source
5060 (origin
5061 (method url-fetch)
5062 (uri (pypi-uri "robotframework-seleniumlibrary" version))
5063 (sha256
5064 (base32 "1dihrbcid9i7daw2qy6h3xsvwaxzmyip820jw5z11n60qrl006pm"))))
5065 (build-system python-build-system)
5066 ;; XXX: Tests require ungoogled-chromium, but the chromium module would
5067 ;; introduce a cycle if imported here.
5068 (propagated-inputs
5069 (list python-robotframework python-robotframework-pythonlibcore
5070 python-selenium))
5071 (home-page "https://github.com/robotframework/SeleniumLibrary")
5072 (synopsis "Web testing library for Robot Framework")
5073 (description "SeleniumLibrary is a web testing library for Robot Framework
5074 that utilizes the Selenium tool internally.")
5075 (license license:asl2.0)))
5076
5077 (define-public python-robotframework-seleniumscreenshots
5078 (package
5079 (name "python-robotframework-seleniumscreenshots")
5080 (version "0.9.5")
5081 (source
5082 (origin
5083 (method url-fetch)
5084 (uri (pypi-uri "robotframework-seleniumscreenshots" version))
5085 (sha256
5086 (base32 "05qv323hvjmy62h33ryrjaa9k1hyvp8hq5qnj8j1x3ap2ci3q3s0"))))
5087 (build-system python-build-system)
5088 (arguments
5089 ;; XXX: The tests require a relatively complicated setup configured in
5090 ;; their CI with Nix (!).
5091 `(#:tests? #f))
5092 (propagated-inputs
5093 (list python-robotframework python-robotframework-seleniumlibrary))
5094 (home-page "https://github.com/MarketSquare/robotframework-seleniumscreenshots")
5095 (synopsis "Robot Framework library for annotating and cropping screenshots")
5096 (description "The SeleniumScreenshots library for Robot Framework provides
5097 keywords for annotating and cropping screenshots taken with SeleniumLibrary.
5098 It is useful for scripting automatically updated screenshots for documentation
5099 or for visual regression testing purposes.")
5100 (license license:bsd-3)))
5101
5102 (define-public python-rstr
5103 (package
5104 (name "python-rstr")
5105 (version "2.2.6")
5106 (source
5107 (origin
5108 (method url-fetch)
5109 (uri (pypi-uri "rstr" version))
5110 (sha256
5111 (base32
5112 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
5113 (build-system python-build-system)
5114 (home-page "https://github.com/leapfrogonline/rstr")
5115 (synopsis "Generate random strings in Python")
5116 (description "This package provides a python module for generating
5117 random strings of various types. It could be useful for fuzz testing,
5118 generating dummy data, or other applications. It has no dependencies
5119 outside the standard library.")
5120 (license license:bsd-3)))
5121
5122 (define-public python-scp
5123 (package
5124 (name "python-scp")
5125 (version "0.13.3")
5126 (source
5127 (origin
5128 (method url-fetch)
5129 (uri (pypi-uri "scp" version))
5130 (sha256
5131 (base32 "1m2v09m407p097cy3xy5rxicqfzrqjwf8v5rd4qhfqkk7lllimwb"))))
5132 (build-system python-build-system)
5133 (arguments
5134 '(#:tests? #f)) ;tests require an SSH server
5135 (propagated-inputs
5136 (list python-paramiko))
5137 (home-page "https://github.com/jbardin/scp.py")
5138 (synopsis "SCP protocol module for Python and Paramiko")
5139 (description "The scp module extends the Paramiko library to send and
5140 receive files via the SCP1 protocol, as implemented by the OpenSSH
5141 @command{scp} program.")
5142 (license license:gpl2+)))
5143
5144 (define-public python-rst.linker
5145 (package
5146 (name "python-rst.linker")
5147 (version "1.11")
5148 (source
5149 (origin
5150 (method url-fetch)
5151 (uri (pypi-uri "rst.linker" version))
5152 (sha256
5153 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
5154 (build-system python-build-system)
5155 (propagated-inputs
5156 (list python-dateutil python-six))
5157 (native-inputs
5158 (list python-setuptools-scm))
5159 ;; Test would require path.py, which would introduce a cyclic dependence.
5160 (arguments `(#:tests? #f))
5161 ;; Note: As of version 1.7 the documentation is not worth building.
5162 (home-page "https://github.com/jaraco/rst.linker")
5163 (synopsis "Sphinx plugin to add links and timestamps")
5164 (description "rst.linker automatically replaces text by a
5165 reStructuredText external reference or timestamps. It's primary purpose is to
5166 augment the changelog, but it can be used for other documents, too.")
5167 (license license:expat)))
5168
5169 (define-public python-sshpubkeys
5170 (package
5171 (name "python-sshpubkeys")
5172 (version "3.1.0")
5173 (home-page "https://github.com/ojarva/python-sshpubkeys")
5174 (source (origin
5175 (method git-fetch)
5176 (uri (git-reference
5177 (url home-page)
5178 (commit (string-append "v" version))))
5179 (file-name (git-file-name name version))
5180 (sha256
5181 (base32
5182 "1h4gwmcfn84kkqh83km1vfz8sc5kr2g4gzgzmr8gz704jmqiv7nq"))))
5183 (build-system python-build-system)
5184 (propagated-inputs
5185 (list python-cryptography python-ecdsa))
5186 (synopsis "OpenSSH public key parser")
5187 (description
5188 "This package provides a library for parsing and validating OpenSSH
5189 public key files.")
5190 (license license:bsd-3)))
5191
5192 (define-public python-feedgenerator
5193 (package
5194 (name "python-feedgenerator")
5195 (version "1.9")
5196 (source
5197 (origin
5198 (method url-fetch)
5199 (uri (pypi-uri "feedgenerator" version))
5200 (sha256
5201 (base32
5202 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
5203 (modules '((guix build utils)))
5204 (snippet
5205 '(begin
5206 ;; Remove pre-compiled .pyc files from source.
5207 (for-each delete-file-recursively
5208 (find-files "." "__pycache__" #:directories? #t))
5209 (for-each delete-file (find-files "." "\\.pyc$"))
5210 #t))))
5211 (build-system python-build-system)
5212 (propagated-inputs
5213 (list python-pytz python-six))
5214 (home-page "https://github.com/getpelican/feedgenerator")
5215 (synopsis
5216 "Standalone version of Django's Atom/RSS feed generator")
5217 (description
5218 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
5219 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
5220 (license license:bsd-3)))
5221
5222 (define-public python-lsp-jsonrpc
5223 (package
5224 (name "python-lsp-jsonrpc")
5225 (version "1.0.0")
5226 (source
5227 (origin
5228 (method url-fetch)
5229 (uri (pypi-uri "python-lsp-jsonrpc" version))
5230 (sha256
5231 (base32
5232 "1gb0fsamxndhplx25v8m0b3k7aknzy454fpa0qsqsqnv6c3igv3v"))))
5233 (build-system python-build-system)
5234 (native-inputs
5235 (list python-mock python-pytest))
5236 (propagated-inputs
5237 (list python-ujson))
5238 (home-page "https://github.com/python-lsp/python-lsp-jsonrpc")
5239 (synopsis "JSON RPC 2.0 server library")
5240 (description
5241 "This package provides a JSON RPC 2.0 server library for Python.")
5242 (license license:expat)))
5243
5244 (define-public python-jsonrpc-server
5245 (deprecated-package "python-jsonrpc-server" python-lsp-jsonrpc))
5246
5247 (define-public python-pydantic
5248 (package
5249 (name "python-pydantic")
5250 (version "1.9.1")
5251 (source
5252 (origin
5253 (method git-fetch)
5254 (uri (git-reference
5255 (url "https://github.com/samuelcolvin/pydantic")
5256 (commit (string-append "v" version))))
5257 (file-name (git-file-name name version))
5258 (sha256
5259 (base32 "1406kgppqa7524mxllsipj7gb8fn7pwf51l11lqik59xjhsfv94f"))))
5260 (build-system python-build-system)
5261 (arguments
5262 '(#:phases
5263 (modify-phases %standard-phases
5264 (replace 'check
5265 (lambda _ (invoke "pytest" "-vv"))))))
5266 (native-inputs
5267 (list python-pytest python-pytest-mock))
5268 (propagated-inputs
5269 (list python-typing-extensions))
5270 (home-page "https://github.com/samuelcolvin/pydantic")
5271 (synopsis "Python data validation and settings management")
5272 (description
5273 "Pydantic enforces type hints at runtime, and provides user friendly
5274 errors when data is invalid.")
5275 (license license:expat)))
5276
5277 (define-public python-pydantic-cli
5278 (package
5279 (name "python-pydantic-cli")
5280 (version "4.3.0")
5281 (source
5282 (origin
5283 (method git-fetch) ;for tests
5284 (uri (git-reference
5285 (url "https://github.com/mpkocher/pydantic-cli")
5286 (commit (string-append "v" version))))
5287 (file-name (git-file-name name version))
5288 (sha256
5289 (base32
5290 "1v4dx6n60rbsan5zpw2rgdih7lb3h0xclagn1p6zfwl0r9l9cvym"))))
5291 (build-system python-build-system)
5292 (propagated-inputs
5293 (list python-pydantic))
5294 (native-inputs
5295 (list python-black
5296 python-mypy
5297 python-pytest))
5298 (home-page "https://github.com/mpkocher/pydantic-cli")
5299 (synopsis "Turn Pydantic defined data models into CLI tools")
5300 (description
5301 "@code{python-pydantic} enables specifying @acronym{CLI, Command Line
5302 Interfaces} via data models provided in the JSON format.")
5303 (license license:expat)))
5304
5305 (define-public python-pydocstyle
5306 (package
5307 (name "python-pydocstyle")
5308 (version "3.0.0")
5309 (source
5310 (origin
5311 (method url-fetch)
5312 (uri (pypi-uri "pydocstyle" version))
5313 (sha256
5314 (base32
5315 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
5316 (build-system python-build-system)
5317 (propagated-inputs
5318 (list python-six python-snowballstemmer))
5319 (home-page
5320 "https://github.com/PyCQA/pydocstyle/")
5321 (synopsis "Python docstring style checker")
5322 (description
5323 "This package provides a style checker for the Python Language
5324 Server (PLS).")
5325 (license license:expat)))
5326
5327 (define-public python-lsp-server
5328 (package
5329 (name "python-lsp-server")
5330 (version "1.3.3")
5331 (source
5332 (origin
5333 (method url-fetch)
5334 (uri (pypi-uri "python-lsp-server" version))
5335 (sha256
5336 (base32
5337 "0h6wxzmm6qjfwkkn3mnzn1fpmcp23fpbk74bi8p540q1nzccqj0v"))))
5338 (build-system python-build-system)
5339 (arguments
5340 `(#:phases
5341 (modify-phases %standard-phases
5342 (add-before 'check 'set-HOME
5343 (lambda _ (setenv "HOME" "/tmp")))
5344 (replace 'check
5345 (lambda _
5346 ;; Disable failing test.
5347 (invoke "python" "-m" "pytest" "-k"
5348 "not test_pyqt_completion"))))))
5349 (propagated-inputs
5350 (list python-autopep8
5351 python-pydocstyle
5352 python-flake8
5353 python-future
5354 python-jedi
5355 python-lsp-jsonrpc
5356 python-pluggy
5357 python-pycodestyle
5358 python-pyflakes
5359 python-rope
5360 python-ujson
5361 python-yapf))
5362 (native-inputs
5363 (list python-coverage
5364 python-flaky
5365 python-matplotlib
5366 python-mock
5367 python-numpy
5368 python-pandas
5369 python-pylint
5370 python-pytest
5371 python-pytest-cov
5372 python-versioneer))
5373 (home-page "https://github.com/python-lsp/python-lsp-server")
5374 (synopsis "Python implementation of the Language Server Protocol")
5375 (description
5376 "The Python Language Server @command{pylsp} is an implementation of the
5377 Python 3 language specification for the Language Server Protocol (LSP).
5378 This tool is used in text editing environments to provide a complete
5379 and integrated feature-set for programming Python effectively.")
5380 (license license:expat)))
5381
5382 (define-public python-language-server
5383 (deprecated-package "python-language-server" python-lsp-server))
5384
5385 (define-public python-pathspec
5386 (package
5387 (name "python-pathspec")
5388 (version "0.9.0")
5389 (source
5390 (origin
5391 (method url-fetch)
5392 (uri (pypi-uri "pathspec" version))
5393 (sha256
5394 (base32
5395 "1cdbdb3s6ldnjpwbi0bgl0xlmw4mbfxk08bbdxc3srx26na4jr75"))))
5396 (build-system python-build-system)
5397 (home-page "https://github.com/cpburnz/python-path-specification")
5398 (synopsis "Utility library for gitignore style pattern matching of file paths")
5399 (description
5400 "This package provides a utility library for gitignore style pattern
5401 matching of file paths.")
5402 (license license:mpl2.0)))
5403
5404 (define-public python-black
5405 (package
5406 (name "python-black")
5407 (version "22.3.0")
5408 (source
5409 (origin
5410 (method url-fetch)
5411 (uri (pypi-uri "black" version))
5412 (sha256
5413 (base32
5414 "0yfahlqc7dsdp1js0cbv706apldnfnlbal9b53cww8n0hs40n0im"))))
5415 (build-system python-build-system)
5416 (arguments
5417 `(#:phases
5418 (modify-phases %standard-phases
5419 (add-after 'patch-source-shebangs 'use-absolute-file-names
5420 (lambda* (#:key native-inputs inputs #:allow-other-keys)
5421 (let* ((inpts (or native-inputs inputs))
5422 (python3 (search-input-file inpts "/bin/python3")))
5423 (substitute* (find-files "tests" "\\.py$")
5424 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
5425 (string-append "#!" python3 (if (string? minor-version)
5426 minor-version
5427 "")))))))
5428 (replace 'check
5429 (lambda* (#:key tests? #:allow-other-keys)
5430 (when tests? (invoke "pytest" "-vv")))))))
5431 (propagated-inputs
5432 (list python-click
5433 python-attrs
5434 python-appdirs
5435 python-pathspec
5436 python-mypy-extensions
5437 python-platformdirs
5438 python-regex
5439 python-tomli
5440 python-typed-ast
5441 python-typing-extensions))
5442 (native-inputs
5443 (list python-pytest python-pytest-aiohttp python-setuptools-scm))
5444 (home-page "https://github.com/psf/black")
5445 (synopsis "The uncompromising code formatter")
5446 (description "Black is the uncompromising Python code formatter.")
5447 (license license:expat)))
5448
5449 (define-public python-black-macchiato
5450 (package
5451 (name "python-black-macchiato")
5452 (version "1.3.0")
5453 (source
5454 (origin
5455 (method url-fetch)
5456 (uri (pypi-uri "black-macchiato" version))
5457 (sha256
5458 (base32
5459 "1drp5p697ni1xn5y2lbjpalgpkzy2i4cyxjj5pk4dxr0vk97dd7i"))))
5460 (build-system python-build-system)
5461 (propagated-inputs
5462 (list python-black))
5463 (home-page "https://github.com/wbolster/black-macchiato")
5464 (synopsis "Partial @code{python-black} formatting")
5465 (description
5466 "This package is built on top the @{python-black} code formatter to
5467 enable formatting of partial files.")
5468 (license license:bsd-3)))
5469
5470 (define-public python-blinker
5471 (package
5472 (name "python-blinker")
5473 (version "1.4")
5474 (source
5475 (origin
5476 (method url-fetch)
5477 (uri (pypi-uri "blinker" version))
5478 (sha256
5479 (base32
5480 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
5481 (build-system python-build-system)
5482 (home-page "https://pythonhosted.org/blinker/")
5483 (synopsis "Fast, simple object-to-object and broadcast signaling")
5484 (description
5485 "Blinker provides a fast dispatching system that allows any number of
5486 interested parties to subscribe to events, or \"signals\".")
5487 (license license:expat)))
5488
5489 (define-public pelican
5490 (package
5491 (name "pelican")
5492 (version "4.7.2")
5493 (source
5494 (origin
5495 (method url-fetch)
5496 (uri (pypi-uri "pelican" version))
5497 (sha256
5498 (base32 "0m1kndc98hhnlq0yl05f4lzccw555pkxnrajj6lks18yh491kw8w"))))
5499 (build-system python-build-system)
5500 (inputs
5501 (list python-blinker
5502 python-dateutil
5503 ;; Ignoring `guix lint` warning as python-docutils is used to support
5504 ;; reStructuredText processing at runtime.
5505 python-docutils
5506 python-feedgenerator
5507 python-jinja2
5508 python-markdown
5509 python-pygments
5510 python-pytz
5511 python-rich
5512 python-unidecode))
5513 (home-page "https://blog.getpelican.com/")
5514 (arguments
5515 `(;; XXX Requires a lot more packages to do unit tests :P
5516 #:tests? #f))
5517 (synopsis "Python-based static site publishing system")
5518 (description
5519 "Pelican is a tool to generate a static blog from reStructuredText,
5520 Markdown input files, and more. Pelican uses Jinja2 for templating
5521 and is very extensible.")
5522 (license license:agpl3+)))
5523
5524 (define-public mallard-ducktype
5525 (package
5526 (name "mallard-ducktype")
5527 (version "1.0.2")
5528 (source
5529 (origin
5530 (method git-fetch)
5531 ;; git-reference because tests are not included in pypi source tarball
5532 ;; https://issues.guix.gnu.org/issue/36755#2
5533 (uri (git-reference
5534 (url "https://github.com/projectmallard/mallard-ducktype")
5535 (commit version)))
5536 (file-name (git-file-name name version))
5537 (sha256
5538 (base32
5539 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
5540 (build-system python-build-system)
5541 (arguments
5542 '(#:phases
5543 (modify-phases %standard-phases
5544 (replace 'check
5545 (lambda _
5546 (with-directory-excursion "tests"
5547 (invoke "sh" "runtests")))))))
5548 (home-page "http://projectmallard.org")
5549 (synopsis "Convert Ducktype to Mallard documentation markup")
5550 (description
5551 "Ducktype is a lightweight syntax that can represent all the semantics
5552 of the Mallard XML documentation system. Ducktype files can be converted to
5553 Mallard using the @command{ducktype} tool. The yelp-tools package
5554 provides additional functionality on the produced Mallard documents.")
5555 (license license:expat)))
5556
5557 (define-public python-cython
5558 (package
5559 (name "python-cython")
5560 (version "0.29.24")
5561 (source
5562 (origin
5563 (method url-fetch)
5564 (uri (pypi-uri "Cython" version))
5565 (sha256
5566 (base32 "0hw4gs18rh4slij1fg252argxhraypld9apbqbl60230qc3lvw6d"))))
5567 (build-system python-build-system)
5568 ;; we need the full python package and not just the python-wrapper
5569 ;; because we need libpython3.3m.so
5570 (inputs
5571 (list python))
5572 (arguments
5573 `(#:phases
5574 (modify-phases %standard-phases
5575 (add-before 'check 'set-HOME
5576 ;; some tests require access to "$HOME/.cython"
5577 (lambda _ (setenv "HOME" "/tmp")))
5578 (replace 'check
5579 (lambda* (#:key tests? #:allow-other-keys)
5580 ;; Disable compiler optimizations to greatly reduce the running
5581 ;; time of the test suite.
5582 (setenv "CFLAGS" "-O0")
5583
5584 (when tests?
5585 (invoke "python" "runtests.py" "-vv"
5586 "-j" (number->string (parallel-job-count))
5587 ;; XXX: On 32-bit architectures, running the parallel tests
5588 ;; fails on many-core systems, see
5589 ;; <https://github.com/cython/cython/issues/2807>.
5590 ,@(if (not (target-64bit?))
5591 '("-x" "run.parallel")
5592 '())
5593 ;; This test fails when running on 24 cores.
5594 "-x" "cpp_stl_conversion")))))))
5595 (home-page "https://cython.org/")
5596 (synopsis "C extensions for Python")
5597 (description "Cython is an optimising static compiler for both the Python
5598 programming language and the extended Cython programming language. It makes
5599 writing C extensions for Python as easy as Python itself.")
5600 (license license:asl2.0)))
5601
5602 (define-public python-cython-3
5603 (package
5604 (inherit python-cython)
5605 ;; Cython 3 is not officially released yet, so distinguish the name
5606 ;; for now.
5607 (name "python-cython-next")
5608 (version "3.0.0a10")
5609 (source (origin
5610 (method url-fetch)
5611 (uri (pypi-uri "Cython" version))
5612 (sha256
5613 (base32
5614 "17fqacrpis05w1rpi7d7sbimrk20xf8h6d3vrz5nf6ix3899abil"))))
5615 (properties '())))
5616
5617 ;; NOTE: when upgrading numpy please make sure that python-numba,
5618 ;; python-pandas and python-scipy still build, as these three packages are
5619 ;; often used together.
5620 (define-public python-numpy
5621 (package
5622 (name "python-numpy")
5623 (version "1.21.6")
5624 (source
5625 (origin
5626 (method url-fetch)
5627 (uri (string-append
5628 "https://github.com/numpy/numpy/releases/download/v"
5629 version "/numpy-" version ".tar.gz"))
5630 (sha256
5631 (base32
5632 "0b0c5y35rd3mvwfk5is1d5ppfw9nl4d2rgx9xkwh1p0w394wdvyl"))))
5633 (build-system python-build-system)
5634 (arguments
5635 (list
5636 #:modules '((guix build utils)
5637 (guix build python-build-system)
5638 (ice-9 format))
5639 #:phases
5640 #~(modify-phases %standard-phases
5641 (add-before 'build 'parallelize-build
5642 (lambda _
5643 (setenv "NPY_NUM_BUILD_JOBS"
5644 (number->string (parallel-job-count)))))
5645 (add-before 'build 'configure-blas
5646 (lambda* (#:key inputs #:allow-other-keys)
5647 (call-with-output-file "site.cfg"
5648 (lambda (port)
5649 (format port
5650 "\
5651 [openblas]
5652 libraries = openblas
5653 library_dirs = ~a/lib
5654 include_dirs = ~:*~a/include~%" #$(this-package-input "openblas"))))))
5655 (add-before 'build 'fix-executable-paths
5656 (lambda* (#:key inputs #:allow-other-keys)
5657 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
5658 ;; instead of /bin/sh.
5659 (substitute* "numpy/distutils/exec_command.py"
5660 (("'/bin/sh'")
5661 (format #f "~s" (search-input-file inputs "bin/bash"))))
5662 ;; Don't try to call '/bin/true' specifically.
5663 (substitute* "numpy/core/tests/test_cpu_features.py"
5664 (("/bin/true") (search-input-file inputs "bin/true")))))
5665 (replace 'check
5666 (lambda* (#:key tests? outputs inputs #:allow-other-keys)
5667 (when tests?
5668 (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
5669 "-j" (number->string (parallel-job-count))
5670 ;; Contrary to scipy, the runtests.py script of numpy
5671 ;; does *not* automatically provide -n when -j is used
5672 ;; (see: https://github.com/numpy/numpy/issues/21359).
5673 "--" "-n" (number->string (parallel-job-count))
5674 "-k" (string-append
5675 ;; These tests may fail on 32-bit systems (see:
5676 ;; https://github.com/numpy/numpy/issues/18387).
5677 "not test_float_remainder_overflow "
5678 "and not test_pareto"
5679 ;; These tests seem to fail on machines without
5680 ;; an FPU is still under investigation upstream.
5681 ;; https://github.com/numpy/numpy/issues/20635
5682 #$@(if (target-riscv64?)
5683 `(" and not test_float"
5684 " and not test_fpclass")
5685 '())))))))))
5686 (native-inputs
5687 (list python-cython
5688 python-hypothesis-next
5689 python-pytest
5690 python-pytest-xdist
5691 gfortran))
5692 (inputs (list bash openblas))
5693 (home-page "https://numpy.org")
5694 (synopsis "Fundamental package for scientific computing with Python")
5695 (description "NumPy is the fundamental package for scientific computing
5696 with Python. It contains among other things: a powerful N-dimensional array
5697 object, sophisticated (broadcasting) functions, tools for integrating C/C++
5698 and Fortran code, useful linear algebra, Fourier transform, and random number
5699 capabilities.")
5700 (properties
5701 '((upstream-name . "numpy")))
5702 (license license:bsd-3)))
5703
5704 (define-public python-numpy-next
5705 (package
5706 (inherit python-numpy)
5707 (name "python-numpy-next")
5708 (version "1.22.3")
5709 (source
5710 (origin
5711 (inherit (package-source python-numpy))
5712 (method url-fetch)
5713 (uri (string-append
5714 "https://github.com/numpy/numpy/releases/download/v"
5715 version "/numpy-" version ".tar.gz"))
5716 (sha256
5717 (base32
5718 "19dw91pqbqcniw2z57kiyqs1qp56g7kqy1bdyv664g8s62sc01m9"))))))
5719
5720 (define-public python-numpy-documentation
5721 (package
5722 (inherit python-numpy)
5723 (name "python-numpy-documentation")
5724 (arguments
5725 (list
5726 #:tests? #f ;we're only generating the documentation
5727 #:phases
5728 #~(modify-phases %standard-phases
5729 (add-before 'build 'add-gnu-freefont-to-texmf
5730 (lambda _
5731 ;; XXX: The Sphinx-generated tex output specifies the GNU
5732 ;; FreeFont font to be searched via its extension, which uses
5733 ;; kpathsea instead of fontconfig and fail (see:
5734 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
5735 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
5736 ;; GUIX_TEXMF.
5737 (mkdir-p "texmf-dist/fonts/opentype/public")
5738 (symlink (string-append
5739 #$(this-package-native-input "font-gnu-freefont")
5740 "/share/fonts/opentype")
5741 (string-append
5742 (getcwd) "/"
5743 "texmf-dist/fonts/opentype/public/gnu-freefont"))
5744 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
5745 (getcwd) "/texmf-dist"))))
5746 (delete 'build)
5747 (replace 'install
5748 (lambda _
5749 (let* ((data (string-append #$output "/share"))
5750 (doc (string-append data "/doc/numpy"))
5751 (html (string-append doc "/html"))
5752 (info (string-append data "/info"))
5753 (sphinxopts (string-append
5754 "SPHINXOPTS=-j"
5755 (number->string (parallel-job-count)))))
5756 (with-directory-excursion "doc"
5757 ;; Do not treat warnings as errors.
5758 (substitute* "Makefile"
5759 ((" -WT ") " -T "))
5760 (setenv "HOME" "/tmp")
5761 ;; Build the PDF documentation.
5762 (invoke "make" "latex-build" sphinxopts)
5763 (invoke "make" "-C" "build/latex" "all-pdf" sphinxopts)
5764 ;; Build the HTML documentation
5765 (invoke "make" "html" sphinxopts)
5766 ;; Build the Info documentation. The issues worked around
5767 ;; below can be tracked at
5768 ;; https://github.com/numpy/numpy/issues/12278.
5769 (substitute* "source/conf.py"
5770 ;; The root document should be "index", not "contents".
5771 (("\"contents\"") "'index'")
5772 ;; Disable Sphinx extensions that produce broken Texinfo.
5773 ((".*'numpydoc'.*") "")
5774 ((".*'sphinx.ext.autosummary'.*") ""))
5775 (invoke "make" "info" sphinxopts)
5776 ;; Install the HTML documentation.
5777 (mkdir-p html)
5778 (copy-recursively "build/html" html)
5779 ;; Install the PDF reference and user manuals.
5780 (install-file "build/latex/numpy-ref.pdf" doc)
5781 (install-file "build/latex/numpy-user.pdf" doc)
5782 ;; Install the info manual.
5783 (install-file "build/texinfo/numpy.info" info)
5784 (symlink (string-append html "/_images")
5785 (string-append info "/numpy-figures")))))))))
5786 (native-inputs
5787 (list font-gnu-freefont
5788 perl
5789 python-breathe
5790 python-ipython
5791 python-matplotlib
5792 python-numpy
5793 python-numpydoc
5794 python-pandas
5795 python-pydata-sphinx-theme
5796 python-scipy ;used by matplotlib
5797 python-sphinx
5798 python-sphinx-panels
5799 texinfo
5800 texlive-bin
5801 texlive-cbfonts
5802 texlive-cm-super
5803 texlive-greek-fontenc
5804 texlive-latex-expdlist
5805 texlive-polyglossia
5806 texlive-xindy))
5807 (inputs '())
5808 (propagated-inputs '())
5809 (synopsis "Documentation for the @code{python-numpy} package")
5810 (description "This package provides the complete NumPy documentation in
5811 the Texinfo, HTML, and PDF formats.")))
5812
5813 (define-public python-munch
5814 (package
5815 (name "python-munch")
5816 (version "2.5.0")
5817 (source
5818 (origin
5819 (method url-fetch)
5820 (uri (pypi-uri "munch" version))
5821 (sha256
5822 (base32
5823 "1lnvlic9g68hcmgdnv5bzp0nx2bf1kjclj54gx0s7nyl4ipmywrd"))))
5824 (build-system python-build-system)
5825 (native-inputs (list python-pbr python-pytest))
5826 (propagated-inputs (list python-six))
5827 (home-page "https://github.com/Infinidat/munch")
5828 (synopsis "Dot-accessible dictionary")
5829 (description "Munch is a dot-accessible dictionary similar to JavaScript
5830 objects.")
5831 (license license:expat)))
5832
5833 (define-public python-colormath
5834 (package
5835 (name "python-colormath")
5836 (version "3.0.0")
5837 (source
5838 (origin
5839 (method url-fetch)
5840 (uri (pypi-uri "colormath" version))
5841 (sha256
5842 (base32
5843 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
5844 (build-system python-build-system)
5845 (propagated-inputs
5846 (list python-networkx python-numpy))
5847 (home-page "https://github.com/gtaylor/python-colormath")
5848 (synopsis "Color math and conversion library")
5849 (description
5850 "This is a Python library for color math and conversions.")
5851 (license license:bsd-3)))
5852
5853 (define-public python-sparse
5854 (package
5855 (name "python-sparse")
5856 (version "0.13.0")
5857 (source
5858 (origin
5859 (method url-fetch)
5860 (uri (pypi-uri "sparse" version))
5861 (sha256
5862 (base32
5863 "05ar1lhq1yy4nb78s7vpb1wz4ac4kj0r4lrd7yrf23kpmaacjpb8"))))
5864 (build-system python-build-system)
5865 (arguments
5866 `(#:phases
5867 (modify-phases %standard-phases
5868 (replace 'check
5869 (lambda* (#:key tests? #:allow-other-keys)
5870 (when tests?
5871 (invoke "python" "-m" "pytest" "-v")))))))
5872 (propagated-inputs
5873 (list python-numba python-numpy python-scipy))
5874 (native-inputs
5875 (list python-dask python-pytest python-pytest-black
5876 python-pytest-cov))
5877 (home-page "https://github.com/pydata/sparse/")
5878 (synopsis "Library for multi-dimensional sparse arrays")
5879 (description
5880 "This package implements sparse arrays of arbitrary dimension on top of
5881 @code{numpy} and @code{scipy.sparse}. Sparse array is a matrix in which most
5882 of the elements are zero. @code{python-sparse} generalizes the
5883 @code{scipy.sparse.coo_matrix} and @code{scipy.sparse.dok_matrix} layouts, but
5884 extends beyond just rows and columns to an arbitrary number of dimensions.
5885 Additionally, this project maintains compatibility with the
5886 @code{numpy.ndarray} interface rather than the @code{numpy.matrix} interface
5887 used in @code{scipy.sparse}. These differences make this project useful in
5888 certain situations where @code{scipy.sparse} matrices are not well suited, but
5889 it should not be considered a full replacement. It lacks layouts that are not
5890 easily generalized like @dfn{compressed sparse row/column}(CSR/CSC) and
5891 depends on @code{scipy.sparse} for some computations.")
5892 (license license:bsd-3)))
5893
5894 (define-public python-spectra
5895 (package
5896 (name "python-spectra")
5897 (version "0.0.11")
5898 (source
5899 (origin
5900 (method url-fetch)
5901 (uri (pypi-uri "spectra" version))
5902 (sha256
5903 (base32
5904 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
5905 (build-system python-build-system)
5906 (arguments
5907 `(#:phases
5908 (modify-phases %standard-phases
5909 (replace 'check
5910 (lambda _ (invoke "nosetests" "-v"))))))
5911 (propagated-inputs
5912 (list python-colormath))
5913 (native-inputs
5914 (list python-nose))
5915 (home-page "https://github.com/jsvine/spectra")
5916 (synopsis "Color scales and color conversion")
5917 (description
5918 "This package provides a Python library intended to make color math,
5919 color scales, and color space conversion easy. It has support for:
5920
5921 @enumerate
5922 @item Color scales
5923 @item Color ranges
5924 @item Color blending
5925 @item Brightening/darkening colors
5926 @item Saturating/desaturating colors
5927 @item Conversion to/from multiple color spaces.
5928 @end enumerate\n")
5929 (license license:expat)))
5930
5931 (define-public python-pyspnego
5932 (package
5933 (name "python-pyspnego")
5934 (version "0.1.6")
5935 (source
5936 (origin
5937 (method git-fetch) ;no tests in PyPI release
5938 (uri (git-reference
5939 (url "https://github.com/jborean93/pyspnego")
5940 (commit (string-append "v" version))))
5941 (file-name (git-file-name name version))
5942 (sha256
5943 (base32
5944 "0pfh2x0539f0k2qi2pbjm64b2fqp64c63xxpinvg1yfaw915kgpb"))))
5945 (build-system python-build-system)
5946 (arguments
5947 `(#:phases (modify-phases %standard-phases
5948 (replace 'check
5949 (lambda* (#:key tests? #:allow-other-keys)
5950 (when tests?
5951 (invoke "pytest")))))))
5952 (native-inputs
5953 (list python-pytest python-pytest-mock))
5954 (propagated-inputs
5955 (list python-cryptography python-gssapi python-ruamel.yaml))
5956 (home-page "https://github.com/jborean93/pyspnego")
5957 (synopsis "Python SPNEGO library")
5958 (description "The @code{pyspnego} Python library handles Negotiate, NTLM,
5959 Kerberos (SPNEGO) and CredSSP authentication. It also includes a packet
5960 parser that can be used to decode raw NTLM/SPNEGO/Kerberos tokens into a human
5961 readable format.")
5962 (license license:expat)))
5963
5964 (define-public python-pygit2
5965 (package
5966 (name "python-pygit2")
5967 (version "1.9.2")
5968 (source
5969 (origin
5970 (method url-fetch)
5971 (uri (pypi-uri "pygit2" version))
5972 (sha256
5973 (base32 "068bwhirigbh2435abyv4shdxgxvyfqf4dxfmhd4hihivwrl9290"))))
5974 (build-system python-build-system)
5975 (arguments
5976 `(#:phases (modify-phases %standard-phases
5977 (replace 'check
5978 (lambda* (#:key tests? #:allow-other-keys)
5979 (when tests?
5980 (invoke "pytest" "-v")))))))
5981 (propagated-inputs
5982 (list python-cached-property python-cffi libgit2))
5983 (native-inputs
5984 (list python-pytest))
5985 (home-page "https://github.com/libgit2/pygit2")
5986 (synopsis "Python bindings for libgit2")
5987 (description "Pygit2 is a set of Python bindings to the libgit2 shared library.")
5988 ;; GPL2.0 only, with linking exception.
5989 (license license:gpl2)))
5990
5991 (define-public python-patiencediff
5992 (package
5993 (name "python-patiencediff")
5994 (version "0.2.0")
5995 (source
5996 (origin
5997 (method url-fetch)
5998 (uri (pypi-uri "patiencediff" version))
5999 (sha256
6000 (base32
6001 "0yjk50lsd4gnllxls925xbcdxwvmda37w2a1shk0p1nvl3fcha6q"))))
6002 (build-system python-build-system)
6003 (home-page "https://www.breezy-vcs.org/")
6004 (synopsis "Python implementation of the patiencediff algorithm")
6005 (description
6006 "This package contains a Python implementation of the @code{patiencediff}
6007 algorithm. Patiencediff provides a good balance of performance, nice output for
6008 humans, and implementation simplicity.")
6009 (license license:gpl2)))
6010
6011 (define-public python-wmctrl
6012 (package
6013 (name "python-wmctrl")
6014 (version "0.4")
6015 (source
6016 (origin
6017 (method url-fetch)
6018 (uri (pypi-uri "wmctrl" version))
6019 (sha256
6020 (base32
6021 "1q0l1sqnj5wma87k3dsgmsyph464syjc6fl8qcpa41nan1rgzjv6"))))
6022 (build-system python-build-system)
6023 (arguments
6024 `(#:phases (modify-phases %standard-phases
6025 (add-after 'unpack 'patch-paths
6026 (lambda* (#:key inputs #:allow-other-keys)
6027 (let ((wmctrl (assoc-ref inputs "wmctrl")))
6028 (substitute* "wmctrl.py"
6029 (("'wmctrl")
6030 (string-append "'" wmctrl "/bin/wmctrl")))))))))
6031 (inputs (list wmctrl))
6032 (propagated-inputs (list python-attrs))
6033 (home-page "https://github.com/antocuni/wmctrl")
6034 (synopsis "Tool to programmatically control Xorg windows")
6035 (description "This package provides a library for programmatically
6036 controlling Xorg windows using Python. The library relies on the
6037 @command{wmctrl} to do so.")
6038 (license license:expat)))
6039
6040 (define-public python-fancycompleter
6041 (package
6042 (name "python-fancycompleter")
6043 (version "0.9.1")
6044 (source
6045 (origin
6046 (method url-fetch)
6047 (uri (pypi-uri "fancycompleter" version))
6048 (sha256
6049 (base32 "0wkj4h01pxa8prv59zl09a0i3w26k835bfpjgvyvsai4mswgxq09"))))
6050 (build-system python-build-system)
6051 (arguments
6052 `(#:phases (modify-phases %standard-phases
6053 (add-after 'unpack 'fix-setup.py
6054 (lambda _
6055 (substitute* "setup.py"
6056 ((".*setupmeta.*")
6057 "")
6058 (("versioning=.*")
6059 (string-append "version='" ,version "',"))
6060 ((".*pyrepl.*") ;broken on Python 3
6061 "")))))))
6062 (home-page "https://github.com/pdbpp/fancycompleter")
6063 (synopsis "TAB completion library for Python")
6064 (description "@code{fancycompleter} is a module that adds TAB completion
6065 to the interactive prompt. It is an extension of the @code{rlcompleter}
6066 module from the standard Python library.")
6067 (license license:bsd-3)))
6068
6069 (define-public python-ipdb
6070 (package
6071 (name "python-ipdb")
6072 (version "0.13.9")
6073 (source
6074 (origin
6075 (method url-fetch)
6076 (uri (pypi-uri "ipdb" version))
6077 (sha256
6078 (base32 "1ibql99agjf2gj7y0svzd5m0h81hailf4p3sj3yl9i1i8ykdj6wm"))))
6079 (build-system python-build-system)
6080 (arguments
6081 (list #:phases #~(modify-phases %standard-phases
6082 (replace 'check
6083 (lambda* (#:key tests? #:allow-other-keys)
6084 (when tests?
6085 (invoke "python" "-m" "unittest" "discover")))))))
6086 (propagated-inputs (list python-ipython python-toml python-decorator))
6087 (home-page "https://github.com/gotcha/ipdb")
6088 (synopsis "IPython-enhanced Python debugger (pdb)")
6089 (description "@code{ipdb} exports functions to access the IPython
6090 debugger, which features tab completion, syntax highlighting, better
6091 tracebacks and better introspection than Python's standard @command{pdb}
6092 debugger, with which it shares the same interface.")
6093 (license license:bsd-3)))
6094
6095 (define-public python-pdbpp
6096 (package
6097 (name "python-pdbpp")
6098 (version "0.10.3")
6099 (source
6100 (origin
6101 (method url-fetch)
6102 (uri (pypi-uri "pdbpp" version))
6103 (sha256
6104 (base32
6105 "1xb9yvi30rb1cdpvfdk2kg79vh3anvkz91r8bwvfp3iqv97kzr6r"))))
6106 (build-system python-build-system)
6107 (arguments
6108 `(#:phases
6109 (modify-phases %standard-phases
6110 (replace 'check
6111 (lambda* (#:key tests? #:allow-other-keys)
6112 (when tests?
6113 (invoke "pytest"
6114 "-k"
6115 (string-append
6116 ;; These tests seem to require a real TTY.
6117 "not interaction_restores_previous_sigint_handler "
6118 "and not python_m_pdb_uses_pdbpp"))))))))
6119 (propagated-inputs
6120 (list python-fancycompleter python-pygments python-wmctrl))
6121 (native-inputs
6122 (list python-pytest python-setuptools-scm))
6123 (home-page "https://github.com/pdbpp/pdbpp")
6124 (synopsis "Drop-in replacement for pdb")
6125 (description "Pdb++ is a drop-in replacement for @code{pdb}. It
6126 includes the following improvements compared to @code{pdb}:
6127 @itemize
6128 @item auto-completion
6129 @item syntax highlighting of code listings
6130 @item sticky mode
6131 @item new commands to be used from the interactive (Pdb++) prompt
6132 @item smart command parsing
6133 @item additional convenience functions in the @code{pdb} module.
6134 @end itemize")
6135 (license license:bsd-3)))
6136
6137 (define-public python-pdftotext
6138 (package
6139 (name "python-pdftotext")
6140 (version "2.1.6")
6141 (source
6142 (origin
6143 (method url-fetch)
6144 (uri (pypi-uri "pdftotext" version))
6145 (sha256
6146 (base32 "1555wbgr5spj8xflrs4mwsrdmba2f9s72nk50xzqk9ghxaxdvy6a"))))
6147 (build-system python-build-system)
6148 (inputs
6149 (list poppler))
6150 (home-page "https://github.com/jalan/pdftotext")
6151 (synopsis "Simple PDF text extraction")
6152 (description "Pdftotext is a Python library of PDF text extraction.")
6153 (license license:expat)))
6154
6155 (define-public python-pluginbase
6156 (package
6157 (name "python-pluginbase")
6158 (version "1.0.1")
6159 (source
6160 (origin
6161 (method url-fetch)
6162 (uri (pypi-uri "pluginbase" version))
6163 (sha256
6164 (base32
6165 "11z2vvbp13828y0x3w39f29p9r9xcix7h7c4fff2w8yfiylk6v7z"))))
6166 (build-system python-build-system)
6167 (arguments
6168 `(#:phases (modify-phases %standard-phases
6169 (replace 'check
6170 (lambda* (#:key tests? #:allow-other-keys)
6171 (when tests?
6172 (invoke "make" "test")))))))
6173 (native-inputs (list python-pytest))
6174 (home-page "https://github.com/mitsuhiko/pluginbase")
6175 (synopsis "Simple but flexible plugin system for Python")
6176 (description "PluginBase is a library useful in the development of
6177 flexible plugin systems in Python.")
6178 (license license:bsd-3)))
6179
6180 (define-public python-node-semver
6181 (package
6182 (name "python-node-semver")
6183 (version "0.8.1")
6184 (source
6185 (origin
6186 (method url-fetch)
6187 (uri (pypi-uri "node-semver" version))
6188 (sha256
6189 (base32
6190 "000ypfns5x72b41w5f9pk6k3jnr35scliqfbvmilyvv0178005i8"))))
6191 (build-system python-build-system)
6192 (native-inputs
6193 (list python-pytest))
6194 (home-page "https://github.com/podhmo/python-node-semver")
6195 (synopsis "Python port of node-semver")
6196 (description "This module provides a Python version of node-semver, a
6197 semantic version parser for Node.js.")
6198 (license license:expat)))
6199
6200 (define-public python-patch-ng
6201 (package
6202 (name "python-patch-ng")
6203 (version "1.17.4")
6204 (source
6205 (origin
6206 (method git-fetch) ;no tests in PyPI archive
6207 (uri (git-reference
6208 (url "https://github.com/conan-io/python-patch-ng")
6209 (commit version)))
6210 (file-name (git-file-name name version))
6211 (sha256
6212 (base32
6213 "0qxn4ss2s54qy87xrpcybz26kp2fwlaq41x4k9jcmp6d7p0w569m"))))
6214 (build-system python-build-system)
6215 (arguments
6216 `(#:phases (modify-phases %standard-phases
6217 (replace 'check
6218 (lambda* (#:key tests? #:allow-other-keys)
6219 (when tests?
6220 (invoke "tests/run_tests.py" "-v")))))))
6221 (home-page "https://github.com/conan-io/python-patch-ng")
6222 (synopsis "Python library to parse and apply unified diffs")
6223 (description "Patch NG (New Generation) is a command and Python library to
6224 parse and apply unified diffs. It has features such as:
6225 @itemize
6226 @item automatic correction of common patch formatting corruption
6227 @item patch format detection (SVN, Hg, Git)
6228 @item nice diffstat histogram.
6229 @end itemize")
6230 (license license:expat)))
6231
6232 (define-public python-numpydoc
6233 (package
6234 (name "python-numpydoc")
6235 (version "1.2.1")
6236 (source
6237 (origin
6238 (method url-fetch)
6239 (uri (pypi-uri "numpydoc" version))
6240 (sha256
6241 (base32
6242 "1xjsli2fqks4iv3524v1d329siad7bbsi4kr174zvhsl1pnjds3w"))))
6243 (build-system python-build-system)
6244 (arguments
6245 `(#:phases
6246 (modify-phases %standard-phases
6247 (add-after 'unpack 'relax-requirements
6248 (lambda _
6249 (substitute* "setup.py"
6250 (("'Jinja2>=2.10,<3.1'")
6251 "'Jinja2>=2.10'"))))
6252 (replace 'check
6253 (lambda* (#:key tests? #:allow-other-keys)
6254 (when tests?
6255 (invoke "pytest" "-v" "numpydoc/tests"
6256 ;; TODO: unclear why these fail.
6257 "-k" "not test_MyClass and not test_my_function")))))))
6258 (propagated-inputs (list python-jinja2 python-sphinx))
6259 (native-inputs (list python-matplotlib python-pytest python-pytest-cov))
6260 (home-page "https://pypi.org/project/numpydoc/")
6261 (synopsis "Numpy's Sphinx extensions")
6262 (description "Sphinx extension to support docstrings in Numpy format.")
6263 (license license:bsd-2)))
6264
6265 (define-public python-numexpr
6266 (package
6267 (name "python-numexpr")
6268 (version "2.7.3")
6269 (source
6270 (origin
6271 (method url-fetch)
6272 (uri (pypi-uri "numexpr" version))
6273 (sha256
6274 (base32
6275 "09d8yfsx33ddwfkpn8805w2mxnn4cvf47yc66g4azldpz4lnaqa3"))))
6276 (build-system python-build-system)
6277 (arguments `(#:tests? #f)) ; no tests included
6278 (propagated-inputs
6279 (list python-numpy))
6280 (home-page "https://github.com/pydata/numexpr")
6281 (synopsis "Fast numerical expression evaluator for NumPy")
6282 (description
6283 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
6284 expressions that operate on arrays are accelerated and use less memory than
6285 doing the same calculation in Python. In addition, its multi-threaded
6286 capabilities can make use of all your cores, which may accelerate
6287 computations, most specially if they are not memory-bounded (e.g. those using
6288 transcendental functions).")
6289 (license license:expat)))
6290
6291 (define-public python-cycler
6292 (package
6293 (name "python-cycler")
6294 (version "0.10.0")
6295 (source (origin
6296 (method url-fetch)
6297 (uri (pypi-uri "cycler" version))
6298 (sha256
6299 (base32
6300 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
6301 (build-system python-build-system)
6302 (arguments
6303 ;; XXX: The current version requires 'coveralls' which we don't have.
6304 ;; Enable this for the next release which uses 'python-pytest'.
6305 '(#:tests? #f))
6306 (propagated-inputs
6307 (list python-six))
6308 (home-page "https://matplotlib.org/cycler/")
6309 (synopsis "Composable keyword argument iterator")
6310 (description
6311 "When using @code{matplotlib} and plotting more than one line, it is
6312 common to want to be able to want to be able to cycle over one or more artist
6313 styles; but the plotting logic can quickly become involved.
6314 To address this and enable easy cycling over arbitrary @code{kwargs}, the
6315 @code{Cycler} class was developed.")
6316 (license license:bsd-3)))
6317
6318 (define-public python-colorspacious
6319 (package
6320 (name "python-colorspacious")
6321 (version "1.1.2")
6322 (source
6323 (origin
6324 (method git-fetch)
6325 (uri (git-reference
6326 (url "https://github.com/njsmith/colorspacious")
6327 (commit (string-append "v" version))))
6328 (file-name (git-file-name name version))
6329 (sha256
6330 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
6331 (build-system python-build-system)
6332 (propagated-inputs
6333 (list python-numpy))
6334 (native-inputs
6335 (list python-nose))
6336 (arguments
6337 `(#:phases
6338 (modify-phases %standard-phases
6339 (replace 'check
6340 (lambda _
6341 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
6342 (home-page "https://github.com/njsmith/colorspacious")
6343 (synopsis "Python library for colorspace conversions")
6344 (description "@code{colorspacious} is a Python library that lets you
6345 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
6346 (license license:expat)))
6347
6348 (define-public python-proto-matcher
6349 (package
6350 (name "python-proto-matcher")
6351 (version "0.0.3")
6352 (source
6353 (origin
6354 (method url-fetch)
6355 (uri (pypi-uri "proto_matcher" version))
6356 (sha256
6357 (base32 "1644x0hrl398ji3281n44ymfgc3cspzfagjckhqjn4nja5nlikxg"))))
6358 (build-system python-build-system)
6359 (arguments
6360 `(#:tests? #f)) ;no test suite
6361 (propagated-inputs
6362 (list python-protobuf python-pyhamcrest))
6363 (home-page "https://github.com/dayfine/proto-matcher")
6364 (synopsis "PyHamcrest test matchers for protocol buffers")
6365 (description "This package provides the following PyHamcrest test
6366 matchers, that enable matching a protocol buffer message:
6367 @table @code
6368 @item equals_proto
6369 Test the argument equals the given protobuf message.
6370 @item approximately
6371 Test the argument equals the given protobuf message, while comparing any float
6372 field using approximation.
6373 @item ignoring_field_paths
6374 Test the argument equals the given protobuf message, while ignoring those
6375 fields specified in the field paths.
6376 @item ignoring_repeated_field_ordering
6377 Test the argument equals the given protobuf message, ignoring the ordering of
6378 any repeated field.
6379 @item partially
6380 Test the argument partially equals the given protobuf message, i.e. if a field
6381 is in the argument but not in the expected message, it's ignored in the
6382 comparison.
6383 @end table")
6384 (license license:asl2.0)))
6385
6386 (define-public python-matplotlib
6387 (package
6388 (name "python-matplotlib")
6389 (version "3.5.2")
6390 (source
6391 (origin
6392 (method url-fetch)
6393 (uri (pypi-uri "matplotlib" version))
6394 (sha256
6395 (base32 "18h78s5ld1i6mz00w258hy29909nfr3ddq6ry9kq18agw468bks8"))))
6396 (build-system python-build-system)
6397 (arguments
6398 (list
6399 #:phases
6400 #~(modify-phases %standard-phases
6401 (add-before 'build 'pretend-version
6402 ;; The version string is usually derived via setuptools-scm, but
6403 ;; without the git metadata available, the version string is set to
6404 ;; '0.0.0'.
6405 (lambda _
6406 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))
6407 (add-after 'unpack 'fix-and-disable-failing-tests
6408 ;; XXX: Disable all image comparison tests because we're using a
6409 ;; newer version of FreeType than matplotlib expects. This leads
6410 ;; to minor differences throughout the tests.
6411 (lambda _
6412 (substitute* (append (find-files "lib/matplotlib/tests/"
6413 "test_.*\\.py$")
6414 (find-files "lib/mpl_toolkits/tests"
6415 "test_.*\\.py$"))
6416 (("^from matplotlib" match)
6417 (string-append "import pytest\n" match))
6418 (("( *)@([^_]+_)*(image_comparison|check_figures_equal)" match
6419 indent)
6420 (string-append indent "@pytest.mark.skip(\
6421 reason=\"unknown minor image differences\")\n" match)))
6422 (substitute* "lib/matplotlib/tests/test_animation.py"
6423 (("/bin/sh") (which "sh")))
6424 (for-each delete-file
6425 ;; test_normal_axes, test_get_tightbbox_polar
6426 '("lib/matplotlib/tests/test_axes.py"
6427 "lib/matplotlib/tests/test_polar.py"
6428 ;; We don't use the webagg backend and this test
6429 ;; forces it.
6430 "lib/matplotlib/tests/test_backend_webagg.py"
6431 ;; test_outward_ticks
6432 "lib/matplotlib/tests/test_tightlayout.py"
6433 ;; test_hidden_axes fails with minor extent
6434 ;; differences, possibly due to the use of a
6435 ;; different version of FreeType.
6436 "lib/matplotlib/tests/test_constrainedlayout.py"
6437 ;; Fontconfig returns no fonts.
6438 "lib/matplotlib/tests/test_font_manager.py"
6439 ;; The images comparison test fails
6440 ;; non-deterministically when run in parallel (see:
6441 ;; https://github.com/matplotlib/matplotlib/issues/22992).
6442 "lib/matplotlib/tests/test_compare_images.py"))))
6443 (add-before 'build 'configure-environment
6444 (lambda* (#:key inputs #:allow-other-keys)
6445 ;; Fix rounding errors when using the x87 FPU.
6446 (when (string-prefix? "i686" #$(%current-system))
6447 (setenv "CFLAGS" "-ffloat-store"))
6448 (call-with-output-file "mplsetup.cfg"
6449 (lambda (port)
6450 (format port "\
6451 [libs]
6452 system_freetype = true
6453 system_qhull = true
6454
6455 [rc_options]
6456 backend=Agg
6457
6458 [directories]
6459 basedirlist = ~a,~a
6460
6461 [packages]
6462 tests = True~%" (assoc-ref inputs "tcl") (assoc-ref inputs "tk"))))))
6463 (replace 'check
6464 (lambda* (#:key tests? #:allow-other-keys)
6465 (when tests?
6466 ;; Step out of the source directory to avoid interference.
6467 (with-directory-excursion "/tmp"
6468 ;; Run the installed tests, which is what we want since not
6469 ;; everything gets built in the source directory.
6470 (invoke "pytest"
6471 "-n" (number->string (parallel-job-count))
6472 "-m" "not network" "--pyargs" "matplotlib"
6473 ;; The 'test_lazy_auto_backend_selection' fails
6474 ;; because it would require an X server; skip it.
6475 "-k" "not test_lazy_auto_backend_selection"))))))))
6476 (propagated-inputs
6477 (list gobject-introspection
6478 python-cairocffi
6479 python-certifi
6480 python-cycler
6481 python-dateutil
6482 python-fonttools
6483 python-kiwisolver
6484 python-numpy
6485 python-packaging
6486 python-pillow
6487 ;; ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
6488 ;; ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
6489 ;; ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
6490 ;; ;; object. For this reason we need to import both libraries.
6491 ;; python-pycairo
6492 python-pygobject
6493 python-pyparsing
6494 python-pytz
6495 python-six
6496 `(,python "tk")
6497 python-wxpython))
6498 (inputs
6499 (list cairo
6500 freetype
6501 glib
6502 libpng
6503 qhull
6504 tcl
6505 tk))
6506 (native-inputs
6507 (list pkg-config
6508 python-pytest
6509 python-pytest-timeout
6510 python-pytest-xdist
6511 python-setuptools-scm
6512 python-setuptools-scm-git-archive))
6513 (home-page "https://matplotlib.org/")
6514 (synopsis "2D plotting library for Python")
6515 (description
6516 "Matplotlib is a Python 2D plotting library which produces publication
6517 quality figures in a variety of hardcopy formats and interactive environments
6518 across platforms. Matplotlib can be used in Python scripts, the python and
6519 ipython shell, web application servers, and six graphical user interface
6520 toolkits.")
6521 (license license:psfl)))
6522
6523 (define-public python-matplotlib-documentation
6524 (package
6525 (inherit python-matplotlib)
6526 (name "python-matplotlib-documentation")
6527 (arguments
6528 (list
6529 #:tests? #f ;we're only generating documentation
6530 #:phases
6531 #~(modify-phases %standard-phases
6532 (replace 'build
6533 (lambda _
6534 (setenv "HOME" "/tmp")
6535 (chdir "doc")
6536 (substitute* "conf.py"
6537 ;; The sphinx_panels extension causes a "TypeError: first
6538 ;; argument must be callable" to be raised when generating the
6539 ;; info target; remove it (see:
6540 ;; https://github.com/executablebooks/sphinx-panels/issues/74).
6541 ((".*'sphinx_panels',.*") ""))
6542 (invoke "make" "html" "info"
6543 ;; Don't abort on warnings; build in parallel.
6544 (format #f "SPHINXOPTS=-j~a" (parallel-job-count)))))
6545 (replace 'install
6546 (lambda _
6547 (let* ((data (string-append #$output "/share"))
6548 (doc (string-append data "/doc/matplotlib"))
6549 (info (string-append data "/info"))
6550 (html (string-append doc "/html")))
6551 (mkdir-p html)
6552 (copy-recursively "build/html" html)
6553 (install-file "build/texinfo/matplotlib.info" info)
6554 ;; The "matplotlib-figures" directory contains are a subset of
6555 ;; the images produced for the html target; simply create a
6556 ;; symlink to it, saving about 11 MiB.
6557 (symlink (string-append html "/_images")
6558 (string-append info "/matplotlib-figures"))))))))
6559 (native-inputs
6560 (list graphviz
6561 inkscape/stable
6562 python-colorspacious
6563 python-mpl-sphinx-theme
6564 python-scipy
6565 python-sphinx
6566 python-sphinx-copybutton
6567 python-sphinx-gallery
6568 python-sphinxcontrib-svg2pdfconverter
6569 python-numpydoc
6570 python-ipython
6571 python-ipywidgets
6572 texlive-amsfonts
6573 texlive-amsmath
6574 texlive-babel
6575 texlive-fontspec
6576 texlive-unicode-math
6577 texlive-etoolbox
6578 texlive-latex-expdlist
6579 texlive-underscore
6580 texlive-latex-type1cm
6581 texlive-times
6582 texinfo))
6583 (synopsis "Documentation for the @code{python-matplotlib} package")))
6584
6585 (define-public python-matplotlib-inline
6586 (package
6587 (name "python-matplotlib-inline")
6588 (version "0.1.3")
6589 (source
6590 (origin
6591 (method url-fetch)
6592 (uri (pypi-uri "matplotlib-inline" version))
6593 (sha256
6594 (base32 "1vilzwj3xp00mxprmmn1hlafm3p23vn56s46kx3ra4qd5signjx0"))))
6595 (build-system python-build-system)
6596 (propagated-inputs
6597 (list python-matplotlib python-traitlets))
6598 (arguments
6599 ;; Tests disabled because of a circular dependency with ipython.
6600 `(#:tests? #f))
6601 (home-page "https://github.com/ipython/matplotlib-inline")
6602 (synopsis "Inline Matplotlib backend for Jupyter")
6603 (description
6604 "This package provides a Matplotlib inline back-end for IPython and
6605 Jupyter.")
6606 (license license:bsd-3)))
6607
6608 (define-public python-matplotlib-venn
6609 (package
6610 (name "python-matplotlib-venn")
6611 (version "0.11.5")
6612 (source
6613 (origin
6614 (method url-fetch)
6615 (uri (pypi-uri "matplotlib-venn" version ".zip"))
6616 (sha256
6617 (base32
6618 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
6619 (build-system python-build-system)
6620 (arguments '(#:tests? #f)) ; tests are not included
6621 (propagated-inputs
6622 (list python-matplotlib python-numpy python-scipy))
6623 (native-inputs
6624 (list unzip))
6625 (home-page "https://github.com/konstantint/matplotlib-venn")
6626 (synopsis "Plot area-proportional Venn diagrams")
6627 (description
6628 "This package provides tools for plotting area-proportional two- and
6629 three-way Venn diagrams in @code{matplotlib}.")
6630 (license license:expat)))
6631
6632 (define-public python-pysnptools
6633 (package
6634 (name "python-pysnptools")
6635 (version "0.4.11")
6636 (source
6637 (origin
6638 (method url-fetch)
6639 (uri (pypi-uri "pysnptools" version))
6640 (sha256
6641 (base32
6642 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
6643 (build-system python-build-system)
6644 (arguments
6645 `(#:tests? #f ; no test data are included
6646 #:phases
6647 (modify-phases %standard-phases
6648 (replace 'check
6649 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6650 (if tests?
6651 (begin
6652 (add-installed-pythonpath inputs outputs)
6653 (invoke "python3" "pysnptools/test.py"))
6654 #t))))))
6655 (propagated-inputs
6656 (list python-dill
6657 python-h5py
6658 python-numpy
6659 python-pandas
6660 python-psutil
6661 python-scipy))
6662 (native-inputs
6663 (list python-cython))
6664 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
6665 (synopsis "Library for reading and manipulating genetic data")
6666 (description
6667 "PySnpTools is a library for reading and manipulating genetic data. It
6668 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
6669 those files. It can also efficiently manipulate ranges of integers using set
6670 operators such as union, intersection, and difference.")
6671 (license license:asl2.0)))
6672
6673 (define-public python-pykdtree
6674 (package
6675 (name "python-pykdtree")
6676 (version "1.3.4")
6677 (source
6678 (origin
6679 (method url-fetch)
6680 (uri (pypi-uri "pykdtree" version))
6681 (sha256
6682 (base32 "0p8n2ljdacfixkiw092974dmhy4s1c0h032ii1z9kwi9h5h5rgmy"))))
6683 (build-system python-build-system)
6684 (native-inputs
6685 (list python-nose))
6686 (propagated-inputs
6687 (list python-numpy))
6688 (home-page "https://github.com/storpipfugl/pykdtree")
6689 (synopsis "Fast kd-tree implementation with OpenMP-enabled queries")
6690 (description
6691 "@code{pykdtree} is a kd-tree implementation for fast nearest neighbour
6692 search in Python.")
6693 (license license:lgpl3+)))
6694
6695 (define-public python-wurlitzer
6696 (package
6697 (name "python-wurlitzer")
6698 (version "2.0.1")
6699 (source
6700 (origin
6701 (method url-fetch)
6702 (uri (pypi-uri "wurlitzer" version))
6703 (sha256
6704 (base32 "0hvmbc41kdwrjns8z1s4a59a4azdvzb8q3vs7nn1li4qm4l0g3yh"))))
6705 (build-system python-build-system)
6706 (arguments
6707 '(#:phases
6708 (modify-phases %standard-phases
6709 (replace 'check
6710 (lambda _
6711 (invoke "pytest" "-vv" "test.py"))))))
6712 (native-inputs
6713 (list python-mock python-pytest))
6714 (home-page "https://github.com/minrk/wurlitzer")
6715 (synopsis "Capture C-level output in context managers")
6716 (description
6717 "This library helps to redirect @code{sys.stdout} to a stream or a file
6718 while executing some piece of code, including C code running within a Python
6719 process.")
6720 (license license:expat)))
6721
6722 (define-public python-socksipy-branch
6723 (package
6724 (name "python-socksipy-branch")
6725 (version "1.01")
6726 (source
6727 (origin
6728 (method url-fetch)
6729 (uri (pypi-uri "SocksiPy-branch" version))
6730 (sha256
6731 (base32
6732 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
6733 (build-system python-build-system)
6734 (arguments
6735 `(#:tests? #f)) ; There are no tests
6736 (home-page "https://code.google.com/archive/p/socksipy-branch/")
6737 (synopsis "Python SOCKS module")
6738 (description
6739 "SocksiPy - A Python SOCKS client module. It provides a
6740 socket-like interface that supports connections to any TCP
6741 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
6742 The original version was developed by Dan Haim, this is a
6743 branch created by Mario Vilas to address some open issues,
6744 as the original project seems to have been abandoned circa 2007.")
6745 (license license:bsd-3)))
6746
6747 (define-public python-socksipychain
6748 (package
6749 (name "python-socksipychain")
6750 (version "2.1.2")
6751 (source
6752 (origin
6753 (method git-fetch)
6754 (uri (git-reference
6755 (url "https://github.com/pagekite/PySocksipyChain")
6756 (commit (string-append "v" version))))
6757 (file-name (git-file-name name version))
6758 (sha256
6759 (base32
6760 "02pp994qmiivkdx4y6az5q80l6rzy8g6d2ipvp7kns7lsxvmc2y7"))))
6761 (build-system python-build-system)
6762 (arguments
6763 `(#:tests? #f)) ; Tests try to access the network.
6764 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
6765 (synopsis "Python SOCKS module with chained proxies support")
6766 (description
6767 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
6768 adds support for arbitrary chaining of proxy servers and various modes of
6769 TLS/SSL encryption. It was developed for use in PageKite, and also includes
6770 a simple netcat replacement with chaining support.")
6771 (license license:bsd-3)))
6772
6773 (define-public python-pycodestyle
6774 (package
6775 (name "python-pycodestyle")
6776 (version "2.8.0")
6777 (source
6778 (origin
6779 (method url-fetch)
6780 (uri (pypi-uri "pycodestyle" version))
6781 (sha256
6782 (base32
6783 "0zxyrg8029lzjhima6l5nk6y0z6lm5wfp9qchz3s33j3xx3mipgd"))))
6784 (build-system python-build-system)
6785 (arguments
6786 `(#:phases
6787 (modify-phases %standard-phases
6788 (replace 'check
6789 (lambda* (#:key tests? #:allow-other-keys)
6790 (when tests?
6791 (invoke "pytest" "-vv")))))))
6792 (native-inputs
6793 (list python-pytest))
6794 (home-page "https://pycodestyle.readthedocs.io/")
6795 (synopsis "Python style guide checker")
6796 (description "@code{pycodestyle} (formerly pep8) is a tool to check
6797 Python code against some of the style conventions in
6798 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
6799 (license license:expat)))
6800
6801 (define-public python-pycodestyle-2.6
6802 (package
6803 (inherit python-pycodestyle)
6804 (version "2.6.0")
6805 (source (origin
6806 (method url-fetch)
6807 (uri (pypi-uri "pycodestyle" version))
6808 (sha256
6809 (base32
6810 "0bhr6ia0hmgx3nhgibc9pmkzhlh1zcqk707i5fbxgs702ll7v2n5"))))))
6811
6812 (define-public python-multidict
6813 (package
6814 (name "python-multidict")
6815 (version "5.2.0")
6816 (source
6817 (origin
6818 (method url-fetch)
6819 (uri (pypi-uri "multidict" version))
6820 (sha256
6821 (base32
6822 "1kjrxav572j45xvr1iy60zb2g8zqvrinzdkl4ax36js4vczckl8d"))))
6823 (build-system python-build-system)
6824 (arguments
6825 '(#:phases (modify-phases %standard-phases
6826 (replace 'check
6827 (lambda* (#:key tests? #:allow-other-keys)
6828 (if tests?
6829 (invoke "pytest" "-vv")
6830 (format #t "test suite not run~%")))))))
6831 (native-inputs
6832 (list python-pytest python-pytest-cov))
6833 (home-page "https://github.com/aio-libs/multidict/")
6834 (synopsis "Multidict implementation")
6835 (description "Multidict is dict-like collection of key-value pairs
6836 where key might be occurred more than once in the container.")
6837 (license license:asl2.0)))
6838
6839 (define-public python-orderedmultidict
6840 (package
6841 (name "python-orderedmultidict")
6842 (version "1.0.1")
6843 (source
6844 (origin
6845 (method url-fetch)
6846 (uri (pypi-uri "orderedmultidict" version))
6847 (sha256
6848 (base32
6849 "1bc2v0yflsxjyyjx4q9wqx0j3bvzcw9z87d5pz4iqac7bsxhn1q4"))))
6850 (build-system python-build-system)
6851 (propagated-inputs
6852 (list python-six))
6853 (native-inputs
6854 (list python-flake8 python-pycodestyle))
6855 (home-page "https://github.com/gruns/orderedmultidict")
6856 (synopsis "Python Ordered Multivalue Dictionary - omdict")
6857 (description "This package contains a library for ordered multivalue
6858 dictionaries. A multivalue dictionary is a dictionary that can store
6859 multiple values for the same key. An ordered multivalue dictionary is a
6860 multivalue dictionary that retains the order of insertions and deletions.")
6861 (license license:unlicense)))
6862
6863 (define-public python-autocommand
6864 (package
6865 (name "python-autocommand")
6866 (version "2.2.1")
6867 (source
6868 (origin
6869 (method url-fetch)
6870 (uri (pypi-uri "autocommand" version))
6871 (sha256
6872 (base32 "03qp9xx4dq81ljhf56r21gp5j0lpqs1vaw99g0d84i97s3lj1m7y"))))
6873 (build-system python-build-system)
6874 (arguments
6875 (list
6876 #:phases
6877 #~(modify-phases %standard-phases
6878 (replace 'check
6879 (lambda* (#:key tests? #:allow-other-keys)
6880 (when tests?
6881 ;; This test fails with an invalid syntax error on 'task1 =
6882 ;; asyncio.async(coro_1())' (see:
6883 ;; https://github.com/Lucretiel/autocommand/issues/20).
6884 (delete-file "test/test_autoasync.py")
6885 (invoke "pytest" "-vv")))))))
6886 (native-inputs (list python-pytest python-pytest-asyncio))
6887 (home-page "https://github.com/Lucretiel/autocommand")
6888 (synopsis "Python library to build a command-line from a function")
6889 (description "@code{autocommand} is library to automatically generate and
6890 run simple @code{argparse} parsers from function signatures.")
6891 (license license:lgpl3+)))
6892
6893 (define-public python-autopage
6894 (package
6895 (name "python-autopage")
6896 (version "0.5.1")
6897 (source (origin
6898 (method url-fetch)
6899 (uri (pypi-uri "autopage" version))
6900 (sha256
6901 (base32
6902 "169ixll1ncm2a2pcc86665ikjv2lrzs10p6c1w4yj55p3gk3xgh1"))))
6903 (build-system python-build-system)
6904 (arguments
6905 (list
6906 #:phases
6907 #~(modify-phases %standard-phases
6908 ;; Do a manual PEP 517 style build/install procedure until the
6909 ;; python-build-system overhaul is merged.
6910 (replace 'build
6911 (lambda _
6912 ;; ZIP does not support timestamps before 1980.
6913 (let ((circa-1980 (* 10 366 24 60 60)))
6914 (setenv "SOURCE_DATE_EPOCH" (number->string circa-1980))
6915 (invoke "python" "-m" "build" "--wheel" "--no-isolation" "."))))
6916 (add-before 'check 'disable-e2e-tests
6917 (lambda _
6918 ;; These tests rely on KeyboardInterrupts which do not
6919 ;; work in the build container.
6920 (delete-file "autopage/tests/test_end_to_end.py")))
6921 (replace 'check
6922 (lambda* (#:key tests? #:allow-other-keys)
6923 (when tests?
6924 (invoke "pytest" "-vv"))))
6925 (replace 'install
6926 (lambda _
6927 (let ((whl (car (find-files "dist" "\\.whl$"))))
6928 (invoke "pip" "--no-cache-dir" "--no-input"
6929 "install" "--no-deps" "--prefix" #$output whl)))))))
6930 (native-inputs
6931 (list python-pypa-build
6932 python-setuptools
6933 python-wheel
6934 ;; For tests.
6935 python-fixtures
6936 python-pytest
6937 python-testtools))
6938 (home-page "https://github.com/zaneb/autopage")
6939 (synopsis "Automatic paging for console output")
6940 (description
6941 "Autopage is a Python library to automatically display terminal output
6942 from a program in a @dfn{pager} such as @command{less}.")
6943 (license license:asl2.0)))
6944
6945 (define-public python-autopep8
6946 (package
6947 (name "python-autopep8")
6948 (version "1.5.3")
6949 (source
6950 (origin
6951 (method url-fetch)
6952 (uri (pypi-uri "autopep8" version))
6953 (sha256
6954 (base32
6955 "1w6vh627vrmgfbvrdcxrc3k4gxcldrb2lpgxv9irkdds851qrzb0"))))
6956 (build-system python-build-system)
6957 (propagated-inputs
6958 (list python-pycodestyle python-toml))
6959 (home-page "https://github.com/hhatto/autopep8")
6960 (synopsis "Format Python code according to the PEP 8 style guide")
6961 (description
6962 "@code{autopep8} automatically formats Python code to conform to
6963 the PEP 8 style guide. It uses the pycodestyle utility to determine
6964 what parts of the code needs to be formatted. @code{autopep8} is
6965 capable of fixing most of the formatting issues that can be reported
6966 by pycodestyle.")
6967 (license (license:non-copyleft
6968 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
6969
6970 (define-public python-distlib
6971 (package
6972 (name "python-distlib")
6973 (version "0.3.1")
6974 (source
6975 (origin
6976 (method url-fetch)
6977 (uri (pypi-uri "distlib" version ".zip"))
6978 (sha256
6979 (base32
6980 "1wdzv7fsjhrkhh1wfkarlhcwa8m00mgcpdsvknmf2qy8f9l13xpd"))))
6981 (build-system python-build-system)
6982 (arguments
6983 `(#:phases
6984 (modify-phases %standard-phases
6985 (add-before 'build 'no-/bin/sh
6986 (lambda _
6987 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
6988 (("/bin/sh") (which "sh")))
6989 #t))
6990 (add-before 'check 'prepare-test-env
6991 (lambda _
6992 (setenv "HOME" "/tmp")
6993 ;; NOTE: Any value works, the variable just has to be present.
6994 (setenv "SKIP_ONLINE" "1")
6995 #t)))))
6996 (native-inputs (list unzip))
6997 (home-page "https://bitbucket.org/pypa/distlib")
6998 (synopsis "Distribution utilities")
6999 (description "Distlib is a library which implements low-level functions that
7000 relate to packaging and distribution of Python software. It is intended to be
7001 used as the basis for third-party packaging tools.")
7002 (license license:psfl)))
7003
7004 (define-public python-distutils-extra
7005 (package
7006 (name "python-distutils-extra")
7007 (version "2.38")
7008 (source
7009 (origin
7010 (method url-fetch)
7011 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
7012 version "/+download/python-distutils-extra-"
7013 version ".tar.gz"))
7014 (sha256
7015 (base32
7016 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
7017 (build-system python-build-system)
7018 (home-page "https://launchpad.net/python-distutils-extra/")
7019 (synopsis "Enhancements to Python's distutils")
7020 (description
7021 "The python-distutils-extra module enables you to easily integrate
7022 gettext support, themed icons, and scrollkeeper-based documentation into
7023 Python's distutils.")
7024 (license license:gpl2)))
7025
7026 (define-public python-olefile
7027 (package
7028 (name "python-olefile")
7029 (version "0.46")
7030 (source
7031 (origin
7032 (method url-fetch)
7033 (uri (string-append "https://github.com/decalage2/olefile/releases/"
7034 "download/v" version "/olefile-" version ".tar.gz"))
7035 (file-name (string-append name "-" version ".tar.gz"))
7036 (sha256
7037 (base32
7038 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
7039 (build-system python-build-system)
7040 (home-page "https://www.decalage.info/python/olefileio")
7041 (synopsis "Read and write Microsoft OLE2 files")
7042 (description
7043 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
7044 Storage or Compound Document, Microsoft Office). It is an improved version of
7045 the OleFileIO module from PIL, the Python Image Library.")
7046 (license license:bsd-3)))
7047
7048 (define-public python-pypdf3
7049 (package
7050 (name "python-pypdf3")
7051 (version "1.0.5")
7052 (source
7053 (origin
7054 (method url-fetch)
7055 (uri (pypi-uri "PyPDF3" version))
7056 (sha256
7057 (base32 "018hlq9q2qa96vw4j7ppq352znykldwy98h2w9qcpkvpi93sjqhc"))))
7058 (build-system python-build-system)
7059 (propagated-inputs
7060 (list python-tqdm))
7061 (home-page "https://github.com/sfneal/PyPDF3")
7062 (synopsis "Utility to read and write PDFs with Python")
7063 (description "PyPDF3 is a pure-python PDF library capable of splitting,
7064 merging together, cropping, and transforming the pages of PDF files. It can
7065 also add custom data, viewing options, and passwords to PDF files. It can
7066 retrieve text and metadata from PDFs as well as merge entire files together.")
7067 (license license:bsd-3)))
7068
7069 (define-public python-pikepdf
7070 (package
7071 (name "python-pikepdf")
7072 (version "2.16.1")
7073 (source
7074 (origin
7075 (method url-fetch)
7076 (uri (pypi-uri "pikepdf" version))
7077 (sha256
7078 (base32 "1phdpi9cm2pbvgcxqvwr8ck327sxhdw4dnxmzhrbf7hzydmgykg2"))))
7079 (build-system python-build-system)
7080 (arguments
7081 `(#:tests? #false)) ;require python-xmp-toolkit
7082 (native-inputs
7083 (list pybind11
7084 python-setuptools
7085 python-setuptools-scm
7086 python-setuptools-scm-git-archive
7087 python-toml
7088 python-wheel))
7089 (inputs
7090 (list qpdf))
7091 (propagated-inputs
7092 (list python-lxml python-pillow))
7093 (home-page "https://github.com/pikepdf/pikepdf")
7094 (synopsis "Read and write PDFs with Python")
7095 (description
7096 "pikepdf is a Python library for reading and writing PDF files.")
7097 (license license:mpl2.0)))
7098
7099 (define-public python-pillow
7100 (package
7101 (name "python-pillow")
7102 (version "9.0.0")
7103 (source (origin
7104 (method url-fetch)
7105 (uri (pypi-uri "Pillow" version))
7106 (sha256
7107 (base32
7108 "0gjry0yqryd2678sm47jhdnbghzxn5wk8pgyaqwr4qi7x5ijjvpf"))
7109 (modules '((guix build utils)))
7110 (snippet '(begin
7111 (delete-file-recursively "src/thirdparty")))))
7112 (build-system python-build-system)
7113 (native-inputs (list python-pytest))
7114 (inputs (list freetype
7115 lcms
7116 libjpeg-turbo
7117 libtiff
7118 libwebp
7119 openjpeg
7120 zlib))
7121 (propagated-inputs (list python-olefile))
7122 (arguments
7123 `(#:phases (modify-phases %standard-phases
7124 (add-after 'unpack 'patch-ldconfig
7125 (lambda _
7126 (substitute* "setup.py"
7127 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
7128 (replace 'check
7129 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
7130 (when tests?
7131 (setenv "HOME"
7132 (getcwd))
7133 (add-installed-pythonpath inputs outputs)
7134 (invoke "python" "selftest.py" "--installed")
7135 (invoke "python" "-m" "pytest" "-vv")))))))
7136 (home-page "https://python-pillow.org")
7137 (synopsis "Fork of the Python Imaging Library")
7138 (description
7139 "The Python Imaging Library adds image processing capabilities to your
7140 Python interpreter. This library provides extensive file format support, an
7141 efficient internal representation, and fairly powerful image processing
7142 capabilities. The core image library is designed for fast access to data
7143 stored in a few basic pixel formats. It should provide a solid foundation for
7144 a general image processing tool.")
7145 (properties `((cpe-name . "pillow")))
7146 (license (license:x11-style
7147 "http://www.pythonware.com/products/pil/license.htm"
7148 "The PIL Software License"))))
7149
7150 (define-public python-pillow-2.9
7151 (package
7152 (inherit python-pillow)
7153 (version "2.9.0")
7154 (source
7155 (origin
7156 (method url-fetch)
7157 (uri (pypi-uri "Pillow" version))
7158 (sha256
7159 (base32
7160 "0ada7lf3lmbdsqm3b7ja920p1pllyfhmqndr85ikpj77fmz9s5qg"))))
7161 (arguments
7162 (substitute-keyword-arguments (package-arguments python-pillow)
7163 ((#:tests? _ #f) #f)))
7164 (properties '((hidden? #t)))))
7165
7166 (define-public python-pillow-simd
7167 (package
7168 (inherit python-pillow)
7169 (name "python-pillow-simd")
7170 (version "9.0.0.post1")
7171 ;; The PyPI tarball does not include test files.
7172 (source
7173 (origin
7174 (method git-fetch)
7175 (uri (git-reference
7176 (url "https://github.com/uploadcare/pillow-simd")
7177 (commit (string-append "v" version))))
7178 (file-name (git-file-name name version))
7179 (sha256
7180 (base32 "1dnvsln451aw3qy2cxg2ndd5mcanf5nrhxw9l7mcam730635hdm9"))))
7181 (inputs
7182 (modify-inputs (package-inputs python-pillow)
7183 (prepend libraqm libimagequant)))
7184 (home-page "https://github.com/uploadcare/pillow-simd")
7185 (synopsis "Fork of the Python Imaging Library (Pillow)")
7186 (description "This package is a fork of Pillow which adds support for SIMD
7187 parallelism.")))
7188
7189 (define-public python-imagecodecs
7190 (package
7191 (name "python-imagecodecs")
7192 (version "2021.3.31")
7193 (source
7194 (origin
7195 (method url-fetch)
7196 (uri (pypi-uri "imagecodecs" version))
7197 (sha256
7198 (base32
7199 "0q7pslb6wd56vbcq2mdxwsiha32mxjr7mgqqfbq5w42q601p9pi0"))
7200 (modules '((guix build utils)))
7201 (snippet
7202 '(begin
7203 ;; Unbundle 3rd party modules.
7204 (delete-file-recursively "3rdparty")
7205 ;; Delete pre-generated Cython files.
7206 (for-each delete-file (find-files "imagecodecs" "_.*\\.c$"))
7207 #t))))
7208 (build-system python-build-system)
7209 (arguments
7210 `(#:tests? #f ; Tests are disabled, because dependencies are missing.
7211 #:phases
7212 (modify-phases %standard-phases
7213 (add-after 'unpack 'create-configuration
7214 (lambda* (#:key inputs #:allow-other-keys)
7215 ;; By default everything is enabled. We can selectively disable
7216 ;; extensions (and thus dependencies) by deleting them from the
7217 ;; EXTENSIONS dictionary. This is upstream’s preferred way.
7218 (call-with-output-file "imagecodecs_distributor_setup.py"
7219 (lambda (port)
7220 (format port "\
7221 def customize_build(EXTENSIONS, OPTIONS):
7222 del EXTENSIONS['aec']
7223 del EXTENSIONS['avif']
7224 del EXTENSIONS['bitshuffle']
7225 del EXTENSIONS['deflate']
7226 del EXTENSIONS['jpeg2k']
7227 del EXTENSIONS['jpeg12']
7228 del EXTENSIONS['jpegls']
7229 del EXTENSIONS['jpegxl']
7230 del EXTENSIONS['jpegxr']
7231 del EXTENSIONS['lerc']
7232 del EXTENSIONS['ljpeg']
7233 del EXTENSIONS['lzf']
7234 del EXTENSIONS['zfp']
7235 del EXTENSIONS['zopfli']
7236 OPTIONS['cythonize']
7237 ")))))
7238 ;; XXX: The installed scripts import packages that depend on
7239 ;; this package; disable import check to avoid the cycle.
7240 (delete 'sanity-check))))
7241 (inputs
7242 (list c-blosc
7243 giflib
7244 brotli
7245 libjpeg-turbo
7246 libpng
7247 libtiff
7248 libwebp
7249 lz4
7250 snappy
7251 xz
7252 zlib
7253 `(,zstd "lib")))
7254 (propagated-inputs
7255 ;; For the Python library.
7256 (list python-numpy))
7257 (native-inputs
7258 ;; For building.
7259 (list python-cython
7260 ;; For testing. Incomplete.
7261 ;("python-numcodecs" ,python-numcodecs)
7262 ;("python-zarr" ,python-zarr)
7263 ;("python-pytest" ,python-pytest)
7264 ))
7265 (home-page "https://www.lfd.uci.edu/~gohlke/")
7266 (synopsis
7267 "Image transformation, compression, and decompression codecs")
7268 (description
7269 "Imagecodecs is a Python library that provides block-oriented, in-memory
7270 buffer transformation, compression, and decompression functions for use in the
7271 tifffile, czifile, and other scientific image input/output modules.")
7272 (license license:bsd-3)))
7273
7274 (define-public python-executing
7275 (package
7276 (name "python-executing")
7277 (version "0.8.2")
7278 (source
7279 (origin
7280 (method url-fetch)
7281 (uri (pypi-uri "executing" version))
7282 (sha256
7283 (base32 "08q0xh9fd8k41sqpp23q6fb9bf7yj4y2q6sv30pj36vvk8pg8fy2"))))
7284 (build-system python-build-system)
7285 (arguments
7286 `(#:tests? #f)) ; TODO: tests require python-asttokens
7287 (native-inputs
7288 (list python-setuptools-scm python-toml))
7289 (home-page "https://github.com/alexmojaki/executing")
7290 (synopsis "Get information about what a Python frame is currently doing")
7291 (description "This package lets you get information about what a frame is
7292 currently doing, particularly the AST node being executed.")
7293 (license license:expat)))
7294
7295 (define-public python-roifile
7296 (package
7297 (name "python-roifile")
7298 (version "2020.11.28")
7299 (source
7300 (origin
7301 (method url-fetch)
7302 (uri (pypi-uri "roifile" version))
7303 (sha256
7304 (base32
7305 "04argnc7qccybkrj9ww18bf81ghsghhh93hnqy3p111rcdlyn66p"))))
7306 (build-system python-build-system)
7307 (arguments `(#:tests? #f)) ; there are none
7308 (propagated-inputs
7309 (list python-numpy))
7310 (home-page "https://www.lfd.uci.edu/~gohlke/")
7311 (synopsis "Read and write ImageJ ROI format")
7312 (description "Roifile is a Python library to read, write, create, and plot
7313 ImageJ ROIs, an undocumented and ImageJ application specific format to store
7314 regions of interest, geometric shapes, paths, text, etc for image overlays.")
7315 (license license:bsd-3)))
7316
7317 (define-public python-tifffile
7318 (package
7319 (name "python-tifffile")
7320 (version "2021.4.8")
7321 (source
7322 (origin
7323 (method url-fetch)
7324 (uri (pypi-uri "tifffile" version))
7325 (sha256
7326 (base32
7327 "16r0hw7shka1bqf28bv198lj2jhf2r9gy3s5zv4nf5cfsfm8pajm"))))
7328 (build-system python-build-system)
7329 ;; Tests require lfdfiles, which depends on tifffile
7330 (arguments `(#:tests? #f))
7331 (propagated-inputs
7332 (list python-numpy python-imagecodecs))
7333 (home-page "https://www.lfd.uci.edu/~gohlke/")
7334 (synopsis "Read and write TIFF(r) files")
7335 (description "This package lets you read image and metadata from many
7336 bio-scientific formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,
7337 NIH, ImageJ, MicroManager, MD GEL, and FluoView files. It also lets you write
7338 numpy arrays to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
7339 (license license:bsd-3)))
7340
7341 (define-public python-lfdfiles
7342 (package
7343 (name "python-lfdfiles")
7344 (version "2021.2.22")
7345 (source
7346 (origin
7347 (method url-fetch)
7348 (uri (pypi-uri "lfdfiles" version))
7349 (sha256
7350 (base32
7351 "12fxm4v805dgjrih7x6jnl1wd7y7jw1rkhjs3d4am8s6qk1cbar2"))
7352 (modules '((guix build utils)))
7353 (snippet
7354 '(begin
7355 ;; Delete pre-generated Cython files.
7356 (for-each delete-file (find-files "lfdfiles" "_.*\\.c$"))
7357 #t))))
7358 (build-system python-build-system)
7359 (arguments
7360 `(#:tests? #f)) ; No tests exist, despite a test dependency on pytest.
7361 (propagated-inputs
7362 (list python-click python-numpy python-tifffile))
7363 (native-inputs (list python-cython))
7364 (home-page "https://www.lfd.uci.edu/~gohlke/")
7365 (synopsis "Work with LFD data files")
7366 (description
7367 "Lfdfiles is a Python library and console script for reading, writing,
7368 converting, and viewing many of the proprietary file formats used to store
7369 experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
7370 (license license:bsd-3)))
7371
7372 (define-public python-imageio
7373 (package
7374 (name "python-imageio")
7375 (version "2.8.0")
7376 (source
7377 (origin
7378 (method url-fetch)
7379 (uri (pypi-uri "imageio" version))
7380 (sha256
7381 (base32
7382 "1ksjl523fm0fikrd85llxfba35rc1qsgwadgr6mbn9kis79xcpzv"))))
7383 (build-system python-build-system)
7384 (arguments
7385 `(#:tests? #f ; many tests require online data
7386 #:phases
7387 (modify-phases %standard-phases
7388 (replace 'check
7389 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
7390 (if tests?
7391 (begin
7392 ;; Make installed package available for running the tests.
7393 (add-installed-pythonpath inputs outputs)
7394 (invoke "pytest" "-vv"))
7395 #t))))))
7396 (propagated-inputs
7397 (list python-numpy python-pillow python-psutil))
7398 (native-inputs
7399 (list python-pytest))
7400 (home-page "https://imageio.github.io/")
7401 (synopsis "Library for reading and writing a wide range of image data")
7402 (description
7403 "Imageio is a Python library that provides an easy interface to read and
7404 write a wide range of image data, including animated images, video, volumetric
7405 data, and scientific formats.")
7406 (license license:bsd-2)))
7407
7408 (define-public python-pyvips
7409 (package
7410 (name "python-pyvips")
7411 (version "2.2.0")
7412 (source
7413 (origin
7414 (method url-fetch)
7415 (uri (pypi-uri "pyvips" version))
7416 (sha256
7417 (base32 "0lq71iiic4pc8qhxr60gi141w25pjnn4vsh05d5l0fjkgjsv137b"))))
7418 (build-system python-build-system)
7419 (arguments
7420 (list #:phases
7421 #~(modify-phases %standard-phases
7422 ;; Maybe switch to API mode (i.e., build the C extension)?
7423 ;; It is advertised as faster to start up and run.
7424 ;; However, even with ‘pkg-config’ and ‘python-pkgconfig’ in
7425 ;; ‘native-inputs’, the API mode build fails with:
7426 ;;
7427 ;; Falling back to ABI mode. Details: unable to find pkg-config package "vips"
7428 ;;
7429 ;; The build doesn't actually fail without the below
7430 ;; substitution, it's just slower because ‘setup.py’ tries
7431 ;; (unsuccessfully) to download the Python ‘pkgconfig’ module.
7432 (add-after 'unpack 'fix-build
7433 (lambda _
7434 (substitute* "setup.py"
7435 (("^( +setup_)API\\(\\)\n" _ prefix)
7436 (string-append prefix "ABI()\n")))))
7437 (add-after 'unpack 'fix-paths
7438 (lambda _
7439 (substitute* "pyvips/__init__.py"
7440 (("^( +_vips_libname) = '(libvips.so.42)'"
7441 _ var libname)
7442 (format #f "~a = '~a/lib/~a'"
7443 var #$(this-package-input "vips") libname))
7444 (("^( +_gobject_libname) = '(libgobject-2.0.so.0)'"
7445 _ var libname)
7446 (format #f "~a = '~a/lib/~a'"
7447 var #$(this-package-input "glib") libname)))))
7448 (replace 'check
7449 (lambda* (#:key tests? #:allow-other-keys)
7450 (when tests?
7451 (invoke "python" "setup.py" "test")))))))
7452 (native-inputs
7453 (list python-pyperf
7454 python-pytest
7455 python-pytest-flake8
7456 python-pytest-runner))
7457 (inputs
7458 (list glib vips))
7459 (propagated-inputs
7460 (list python-cffi))
7461 (home-page "https://github.com/libvips/pyvips")
7462 (synopsis "Python bindings for VIPS")
7463 (description "The @code{pyvips} package provides Python bindings for VIPS,
7464 a multithreaded image-processing system with low memory needs.")
7465 (license license:expat)))
7466
7467 (define-public python-pycparser
7468 (package
7469 (name "python-pycparser")
7470 (version "2.21")
7471 (source
7472 (origin
7473 (method url-fetch)
7474 (uri (pypi-uri "pycparser" version))
7475 (sha256
7476 (base32
7477 "01kjlyn5w2nn2saj8w1rhq7v26328pd91xwgqn32z1zp2bngsi76"))))
7478 (outputs '("out" "doc"))
7479 (build-system python-build-system)
7480 (arguments
7481 `(#:phases
7482 (modify-phases %standard-phases
7483 (replace 'check
7484 (lambda _
7485 (invoke "python" "-m" "unittest" "discover")))
7486 (add-after 'install 'install-doc
7487 (lambda* (#:key outputs #:allow-other-keys)
7488 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
7489 (doc (string-append data "/doc/" ,name "-" ,version))
7490 (examples (string-append doc "/examples")))
7491 (mkdir-p examples)
7492 (for-each (lambda (file)
7493 (copy-file (string-append "." file)
7494 (string-append doc file)))
7495 '("/README.rst" "/CHANGES" "/LICENSE"))
7496 (copy-recursively "examples" examples)))))))
7497 (home-page "https://github.com/eliben/pycparser")
7498 (synopsis "C parser in Python")
7499 (description
7500 "Pycparser is a complete parser of the C language, written in pure Python
7501 using the PLY parsing library. It parses C code into an AST and can serve as
7502 a front-end for C compilers or analysis tools.")
7503 (license license:bsd-3)))
7504
7505 (define-public python2-pycparser
7506 (package-with-python2 python-pycparser))
7507
7508 (define-public python-xlsxwriter
7509 (package
7510 (name "python-xlsxwriter")
7511 (version "3.0.3")
7512 (source
7513 (origin
7514 ;; There are no tests in the PyPI tarball.
7515 (method git-fetch)
7516 (uri (git-reference
7517 (url "https://github.com/jmcnamara/XlsxWriter")
7518 (commit (string-append "RELEASE_" version))))
7519 (file-name (git-file-name name version))
7520 (sha256
7521 (base32 "1lr7mmik6r4zns069i4zfx1cnwhz6snmlh2zsiry0cwx8cv33wpm"))))
7522 (build-system python-build-system)
7523 (home-page "https://github.com/jmcnamara/XlsxWriter")
7524 (synopsis "Python module for creating Excel XLSX files")
7525 (description
7526 "XlsxWriter is a Python module that can be used to write text, numbers,
7527 formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
7528 (license license:bsd-2)))
7529
7530 (define-public python-pywavelets
7531 (package
7532 (name "python-pywavelets")
7533 (version "1.2.0")
7534 (home-page "https://github.com/PyWavelets/pywt")
7535 (source (origin
7536 (method url-fetch)
7537 (uri (pypi-uri "PyWavelets" version))
7538 (sha256
7539 (base32
7540 "13csbr6ls9q9ww53z2xwwsj0hpsz88rj2iwp623h0kmv8yq6kgbc"))
7541 (snippet
7542 #~(begin
7543 (use-modules ((guix build utils)))
7544 (for-each delete-file
7545 (list
7546 "pywt/_extensions/_cwt.c"
7547 "pywt/_extensions/_dwt.c"
7548 "pywt/_extensions/_pywt.c"
7549 "pywt/_extensions/_pywt.h"
7550 "pywt/_extensions/_swt.c"))))))
7551 (build-system python-build-system)
7552 (arguments
7553 '(#:modules ((ice-9 ftw)
7554 (srfi srfi-1)
7555 (srfi srfi-26)
7556 (guix build utils)
7557 (guix build python-build-system))
7558 #:phases
7559 (modify-phases %standard-phases
7560 (replace 'check
7561 (lambda _
7562 (let ((cwd (getcwd))
7563 (libdir (find (cut string-prefix? "lib." <>)
7564 (scandir "build"))))
7565 (with-directory-excursion (string-append cwd "/build/" libdir)
7566 (invoke "pytest" "-vv"))))))))
7567 (native-inputs
7568 (list python-cython
7569 python-matplotlib ;for tests
7570 python-pytest))
7571 (propagated-inputs
7572 (list python-numpy))
7573 (synopsis "Wavelet transforms in Python")
7574 (description
7575 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
7576 mathematical basis functions that are localized in both time and frequency.
7577 Wavelet transforms are time-frequency transforms employing wavelets. They are
7578 similar to Fourier transforms, the difference being that Fourier transforms are
7579 localized only in frequency instead of in time and frequency.")
7580 (license license:expat)))
7581
7582 (define-public python-pywal
7583 (package
7584 (name "python-pywal")
7585 (version "3.3.0")
7586 (source
7587 (origin
7588 (method git-fetch)
7589 (uri (git-reference
7590 (url "https://github.com/dylanaraps/pywal")
7591 (commit version)))
7592 (file-name (git-file-name name version))
7593 (sha256
7594 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
7595 (build-system python-build-system)
7596 (arguments
7597 `(#:phases
7598 (modify-phases %standard-phases
7599 (add-before 'check 'fix-home-directory
7600 (lambda _
7601 ;; Tests fail with "Permission denied: '/homeless-shelter'".
7602 (setenv "HOME" "/tmp")
7603 #t)))))
7604 (inputs
7605 (list imagemagick))
7606 (home-page "https://github.com/dylanaraps/pywal")
7607 (synopsis "Color palette generator and applicator")
7608 (description
7609 "Pywal is a tool that generates a color palette from the dominant colors
7610 in an image. It then applies the colors system-wide and on-the-fly in all of
7611 your favourite programs.")
7612 (license license:expat)))
7613
7614 (define-public python-click-didyoumean
7615 (package
7616 (name "python-click-didyoumean")
7617 (version "0.3.0")
7618 (source
7619 (origin
7620 (method url-fetch)
7621 (uri (pypi-uri "click-didyoumean" version))
7622 (sha256
7623 (base32 "0dc0xrmqbw0idpx843ahzzvivmvx3fcfsm3k54lnssyra7cg117i"))))
7624 (build-system python-build-system)
7625 (arguments
7626 `(#:tests? #f)) ; no tests in PyPI and no setup.py in github
7627 (propagated-inputs
7628 (list python-click))
7629 (home-page "https://github.com/timofurrer/click-didyoumean")
7630 (synopsis "Git-like did-you-mean feature in Click")
7631 (description
7632 "This plugin enables git-like did-you-mean feature in Click.")
7633 (license license:expat)))
7634
7635 (define-public python-pywinrm
7636 (package
7637 (name "python-pywinrm")
7638 (version "0.4.1")
7639 (source
7640 (origin
7641 (method url-fetch)
7642 (uri (pypi-uri "pywinrm" version))
7643 (sha256
7644 (base32
7645 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
7646 (build-system python-build-system)
7647 (propagated-inputs
7648 (list python-six python-requests_ntlm python-xmltodict
7649 python-kerberos))
7650 (native-inputs
7651 (list python-mock python-pytest))
7652 (home-page "https://github.com/diyan/pywinrm/")
7653 (synopsis
7654 "Python library for Windows Remote Management (WinRM)")
7655 (description
7656 "pywinrm is a Python client for the Windows Remote Management (WinRM)
7657 service. It allows you to invoke commands on target Windows machines from
7658 any machine that can run Python.")
7659 (license license:expat)))
7660
7661 (define-public python-xcffib
7662 (package
7663 (name "python-xcffib")
7664 (version "0.11.1")
7665 (source
7666 (origin
7667 (method url-fetch)
7668 (uri (pypi-uri "xcffib" version))
7669 (sha256
7670 (base32
7671 "0nkglsm9nbhv238iagmmsjcz6lf1yfdvp5kmspphdj385vz9r50j"))))
7672 (build-system python-build-system)
7673 (inputs
7674 (list libxcb))
7675 (propagated-inputs
7676 (list python-cffi ; used at run time
7677 python-six))
7678 (arguments
7679 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
7680 #:tests? #f
7681 #:phases
7682 (modify-phases %standard-phases
7683 (add-after 'unpack 'fix-libxcb-path
7684 (lambda* (#:key inputs #:allow-other-keys)
7685 (let ((libxcb (assoc-ref inputs "libxcb")))
7686 (substitute* '("xcffib/__init__.py")
7687 (("soname = ctypes.util.find_library.*xcb.*")
7688 (string-append "soname = \"" libxcb "/lib/libxcb.so\"\n")))
7689 #t)))
7690 (add-after 'install 'install-doc
7691 (lambda* (#:key outputs #:allow-other-keys)
7692 (let ((doc (string-append (assoc-ref outputs "out") "/share"
7693 "/doc/" ,name "-" ,version)))
7694 (mkdir-p doc)
7695 (copy-file "README.md"
7696 (string-append doc "/README.md"))
7697 #t))))))
7698 (home-page "https://github.com/tych0/xcffib")
7699 (synopsis "XCB Python bindings")
7700 (description
7701 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
7702 support for Python 3 and PyPy. It is based on cffi.")
7703 (license license:expat)))
7704
7705 (define-public python-cairocffi
7706 (package
7707 (name "python-cairocffi")
7708 (version "1.3.0")
7709 (source
7710 (origin
7711 ;; The PyPI archive does not include the documentation, so use Git.
7712 (method git-fetch)
7713 (uri (git-reference
7714 (url "https://github.com/Kozea/cairocffi")
7715 (commit (string-append "v" version))))
7716 (file-name (git-file-name name version))
7717 (sha256
7718 (base32
7719 "0lylyxyyd8csjhn5kxwzrcr6ick6pvvm1wclpmb5ni28jznxn7lb"))))
7720 (build-system python-build-system)
7721 (outputs '("out" "doc"))
7722 (inputs
7723 (list glib gtk+ gdk-pixbuf cairo))
7724 (native-inputs
7725 (list python-numpy
7726 python-pytest
7727 python-pytest-cov
7728 python-pytest-runner
7729 python-sphinx
7730 python-sphinx-rtd-theme))
7731 (propagated-inputs
7732 (list python-xcffib)) ; used at run time
7733 (arguments
7734 `(#:phases
7735 (modify-phases %standard-phases
7736 (add-after 'unpack 'patch-paths
7737 (lambda* (#:key inputs #:allow-other-keys)
7738 (substitute* "cairocffi/__init__.py"
7739 ;; Hack the dynamic library loading mechanism.
7740 (("find_library\\(library_name\\)")
7741 "\"found\"")
7742 (("filenames = \\(library_filename,\\) \\+ filenames")
7743 "pass")
7744 (("libcairo.so.2")
7745 (search-input-file inputs "/lib/libcairo.so.2")))
7746 (substitute* "cairocffi/pixbuf.py"
7747 (("libgdk_pixbuf-2.0.so.0")
7748 (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0"))
7749 (("libgobject-2.0.so.0")
7750 (search-input-file inputs "/lib/libgobject-2.0.so.0"))
7751 (("libglib-2.0.so.0")
7752 (search-input-file inputs "/lib/libglib-2.0.so.0"))
7753 (("libgdk-3.so.0")
7754 (search-input-file inputs "/lib/libgdk-3.so.0")))))
7755 (add-after 'unpack 'disable-linters
7756 ;; Their check fails; none of our business.
7757 (lambda _
7758 (substitute* "setup.cfg"
7759 ((".*pytest-flake8.*") "")
7760 ((".*pytest-isort.*") "")
7761 (("--flake8") "")
7762 (("--isort") ""))
7763 #t))
7764 (add-after 'install 'install-doc
7765 (lambda* (#:key inputs outputs #:allow-other-keys)
7766 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
7767 (doc (string-append data "/doc/" ,name "-" ,version))
7768 (html (string-append doc "/html")))
7769 (setenv "LD_LIBRARY_PATH"
7770 (string-append (assoc-ref inputs "cairo") "/lib" ":"
7771 (assoc-ref inputs "gdk-pixbuf") "/lib"))
7772 (setenv "LANG" "en_US.UTF-8")
7773 (mkdir-p html)
7774 (for-each (lambda (file)
7775 (copy-file (string-append "." file)
7776 (string-append doc file)))
7777 '("/README.rst" "/NEWS.rst"))
7778 (system* "python" "setup.py" "build_sphinx")
7779 (copy-recursively "docs/_build/html" html)
7780 #t))))))
7781 (home-page "https://github.com/Kozea/cairocffi")
7782 (synopsis "Python bindings and object-oriented API for Cairo")
7783 (description
7784 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
7785 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
7786 graphics library with support for multiple backends including image buffers,
7787 PNG, PostScript, PDF, and SVG file output.")
7788 (license license:bsd-3)))
7789
7790 (define-public python-decorator
7791 (package
7792 (name "python-decorator")
7793 (version "5.0.9")
7794 (source
7795 (origin
7796 (method url-fetch)
7797 (uri (pypi-uri "decorator" version))
7798 (sha256
7799 (base32 "1mcy64hllgm938v8k1x2a4g0q9swsnrfnsvhz59kr28a6ajgpv3j"))))
7800 (build-system python-build-system)
7801 (home-page "https://pypi.org/project/decorator/")
7802 (synopsis "Python module to simplify usage of decorators")
7803 (description
7804 "The aim of the decorator module is to simplify the usage of decorators
7805 for the average programmer, and to popularize decorators usage giving examples
7806 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
7807 etc. The core of this module is a decorator factory.")
7808 (license license:expat)))
7809
7810
7811 (define-public python-drmaa
7812 (package
7813 (name "python-drmaa")
7814 (version "0.7.7")
7815 (source
7816 (origin
7817 (method url-fetch)
7818 (uri (pypi-uri "drmaa" version))
7819 (sha256
7820 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
7821 (build-system python-build-system)
7822 ;; The test suite requires libdrmaa which is provided by the cluster
7823 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
7824 ;; should be set to the path of the libdrmaa library.
7825 (arguments
7826 '(#:tests? #f
7827 #:phases (modify-phases %standard-phases
7828 ;; Loading the library fails because DRMAA_LIBRARY_PATH
7829 ;; is not configured.
7830 (delete 'sanity-check))))
7831 (home-page "https://pypi.org/project/drmaa/")
7832 (synopsis "Python bindings for the DRMAA library")
7833 (description
7834 "A Python package for Distributed Resource Management (DRM) job
7835 submission and control. This package is an implementation of the DRMAA 1.0
7836 Python language binding specification.")
7837 (license license:bsd-3)))
7838
7839 (define-public python-grako
7840 (package
7841 (name "python-grako")
7842 (version "3.99.9")
7843 (source
7844 (origin
7845 (method url-fetch)
7846 (uri
7847 (pypi-uri "grako" version ".zip"))
7848 (sha256
7849 (base32
7850 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
7851 (build-system python-build-system)
7852 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
7853 (native-inputs
7854 (list unzip python-pytest python-pytest-runner))
7855 (home-page "https://bitbucket.org/neogeny/grako")
7856 (synopsis "EBNF parser generator")
7857 (description
7858 "Grako takes a grammar in a variation of EBNF as input, and outputs a
7859 memoizing PEG/Packrat parser in Python.")
7860 (license license:bsd-3)))
7861
7862 (define-public python-grandalf
7863 (package
7864 (name "python-grandalf")
7865 (version "0.7")
7866 (source
7867 (origin
7868 ;; There's no source tarball on PyPI.
7869 (method git-fetch)
7870 (uri (git-reference
7871 (url "https://github.com/bdcht/grandalf")
7872 (commit (string-append "v" version))))
7873 (file-name (git-file-name name version))
7874 (sha256
7875 (base32
7876 "03p8w8ljpb87qbyldm3s6b7qi30hfcn43h33iwlgqcf31fjsyr4g"))))
7877 (build-system python-build-system)
7878 (arguments
7879 '(#:phases
7880 (modify-phases %standard-phases
7881 (replace 'check
7882 (lambda _
7883 (invoke "python" "setup.py" "pytest"))))))
7884 (native-inputs
7885 (list python-pytest python-pytest-runner))
7886 (propagated-inputs
7887 (list python-numpy python-ply))
7888 (home-page "https://github.com/bdcht/grandalf")
7889 (synopsis "Graph and drawing algorithms framework")
7890 (description
7891 "Grandalf is a Python package made for experimentations with graphs
7892 drawing algorithms. It is written in pure Python, and currently implements
7893 two layouts: the Sugiyama hierarchical layout and the force-driven or energy
7894 minimization approach. While not as fast or featured as graphviz or other
7895 libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
7896 than thousands of nodes, while keeping the source code simple enough to tweak
7897 and hack any part of it for experimental purpose. With a total of about 1500
7898 lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
7899 in less than 600 lines. The energy minimization approach is comprised of only
7900 250 lines!
7901
7902 Grandalf does only 2 not-so-simple things:
7903 @itemize
7904 @item computing the nodes (x,y) coordinates (based on provided nodes
7905 dimensions, and a chosen layout)
7906 @item routing the edges with lines or nurbs
7907 @end itemize
7908
7909 It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
7910 will help you find where to draw things like nodes and edges, but it’s up to
7911 you to actually draw things with your favorite toolkit.")
7912 ;; The user can choose either license.
7913 (license (list license:gpl2 license:epl1.0))))
7914
7915 (define-public python-gridmap
7916 (package
7917 (name "python-gridmap")
7918 (version "0.14.0")
7919 (source
7920 (origin
7921 (method git-fetch)
7922 (uri (git-reference
7923 (url "https://github.com/pygridtools/gridmap")
7924 (commit (string-append "v" version))))
7925 (file-name (git-file-name name version))
7926 (sha256
7927 (base32 "0v0sgpg6pz8h61f9aqjf5xk0ipr512bbz8dxzjjylksj135qr19l"))))
7928 (build-system python-build-system)
7929 (arguments
7930 '(#:tests? #f ;FIXME: Requires python-cherrypy.
7931 #:phases (modify-phases %standard-phases
7932 ;; Importing the web server module requires cherrypy, too.
7933 (delete 'sanity-check))))
7934 (propagated-inputs
7935 (list python-psutil python-drmaa python-pyzmq))
7936 (home-page "https://github.com/pygridtools/gridmap")
7937 (synopsis "Create jobs on a cluster directly from Python")
7938 (description
7939 "Gridmap is a Python package to allow you to easily create jobs on the
7940 cluster directly from Python. You can directly map Python functions onto the
7941 cluster without needing to write any wrapper code yourself.")
7942 (license license:gpl3+)))
7943
7944 (define-public python-honcho
7945 (package
7946 (name "python-honcho")
7947 (version "1.1.0")
7948 (source
7949 (origin
7950 (method git-fetch)
7951 (uri (git-reference
7952 (url "https://github.com/nickstenning/honcho")
7953 (commit (string-append "v" version))))
7954 (file-name (git-file-name name version))
7955 (sha256
7956 (base32 "1y0r8dw4pqcq7r4n58ixjdg1iy60lp0gxsd7d2jmhals16ij71rj"))))
7957 (build-system python-build-system)
7958 (native-inputs
7959 (list python-pytest python-mock python-tox which)) ;for tests
7960 (propagated-inputs
7961 (list python-jinja2))
7962 (arguments
7963 `(#:phases
7964 (modify-phases %standard-phases
7965 (delete 'check)
7966 (add-after 'install 'check
7967 (lambda* (#:key outputs inputs #:allow-other-keys)
7968 ;; fix honcho path in testsuite
7969 (substitute* "tests/conftest.py"
7970 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
7971 "/bin/honcho" "'")))
7972 ;; It's easier to run tests after install.
7973 ;; Make installed package available for running the tests
7974 (add-installed-pythonpath inputs outputs)
7975 ;; Skip failing test_export
7976 (invoke "py.test" "-v" "-k" "not test_export"))))))
7977 (home-page "https://github.com/nickstenning/honcho")
7978 (synopsis "Manage Procfile-based applications")
7979 (description
7980 "A Procfile is a file which describes how to run an application
7981 consisting of several processes. honcho starts all listed processes.
7982 The output of all running processes is collected by honcho and
7983 displayed.")
7984 (license license:expat)))
7985
7986 (define-public python-pebble
7987 (package
7988 (name "python-pebble")
7989 (version "4.6.1")
7990 (source
7991 (origin
7992 (method url-fetch)
7993 (uri (pypi-uri "Pebble" version))
7994 (sha256
7995 (base32 "16siqc3brbk7dp4d9sg48bjl6a8wyy24aib3il1hf4y2624draxh"))))
7996 (build-system python-build-system)
7997 (native-inputs
7998 (list python-pytest))
7999 (arguments
8000 `(#:phases
8001 (modify-phases %standard-phases
8002 (replace 'check
8003 (lambda _ (invoke "python" "-m" "pytest" "-sv"))))))
8004 (home-page "https://github.com/noxdafox/pebble")
8005 (synopsis "Threading and multiprocessing for Python")
8006 (description
8007 "Pebble aims to help manage threads and processes in an easier way. It
8008 wraps Python's standard library threading and multiprocessing objects.")
8009 (license license:lgpl3+)))
8010
8011 (define-public python-pexpect
8012 (package
8013 (name "python-pexpect")
8014 (version "4.8.0")
8015 (source
8016 (origin
8017 (method url-fetch)
8018 (uri (pypi-uri "pexpect" version))
8019 (sha256
8020 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
8021 (build-system python-build-system)
8022 (arguments
8023 `(#:phases
8024 (modify-phases %standard-phases
8025 (add-before 'check 'prepare-tests
8026 (lambda _
8027 (substitute* (find-files "tests")
8028 (("/bin/ls") (which "ls"))
8029 (("/bin/echo") (which "echo"))
8030 (("/bin/which") (which "which"))
8031 ;; Many tests try to use the /bin directory which
8032 ;; is not present in the build environment.
8033 ;; Use one that's non-empty and unlikely to change.
8034 (("/bin'") "/dev'")
8035 ;; Disable failing test. See upstream bug report
8036 ;; https://github.com/pexpect/pexpect/issues/568
8037 (("def test_bash") "def _test_bash"))
8038 ;; XXX: Socket connection test gets "Connection reset by peer".
8039 ;; Why does it not work? Delete for now.
8040 (delete-file "tests/test_socket.py")
8041 #t))
8042 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
8043 (native-inputs
8044 `(("python-nose" ,python-nose)
8045 ("python-pytest" ,python-pytest)
8046 ("man-db" ,man-db)
8047 ("which" ,which)
8048 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
8049 (propagated-inputs
8050 (list python-ptyprocess))
8051 (home-page "http://pexpect.readthedocs.org/")
8052 (synopsis "Controlling interactive console applications")
8053 (description
8054 "Pexpect is a pure Python module for spawning child applications;
8055 controlling them; and responding to expected patterns in their output.
8056 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
8057 child application and control it as if a human were typing commands.")
8058 (license license:isc)))
8059
8060 (define-public python-sexpdata
8061 (package
8062 (name "python-sexpdata")
8063 (version "0.0.3")
8064 (source
8065 (origin
8066 (method url-fetch)
8067 (uri (pypi-uri "sexpdata" version))
8068 (sha256
8069 (base32
8070 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
8071 (build-system python-build-system)
8072 (home-page "https://github.com/jd-boyd/sexpdata")
8073 (synopsis "S-expression parser for Python")
8074 (description
8075 "Sexpdata is an S-expression parser/serializer. It has load and dump
8076 functions like pickle, json or PyYAML module.")
8077 (license license:bsd-3)))
8078
8079 (define-public python-pathlib2
8080 (package
8081 (name "python-pathlib2")
8082 (version "2.3.6")
8083 (source
8084 (origin
8085 (method url-fetch)
8086 (uri (pypi-uri "pathlib2" version))
8087 (sha256
8088 (base32
8089 "0psyg60vk8wca473djrh0v9gb853z8wcawi8im5dyg00amawp2vx"))))
8090 (build-system python-build-system)
8091 (propagated-inputs
8092 (list python-scandir python-six))
8093 (home-page "https://pypi.org/project/pathlib2/")
8094 (synopsis "Object-oriented file system paths")
8095 (description "The goal of pathlib2 is to provide a backport of the
8096 standard @code{pathlib} module which tracks the standard library module, so
8097 all the newest features of the standard @code{pathlib} can be used also on
8098 older Python versions.")
8099 (license license:expat)))
8100
8101 (define-public python-importlib-resources
8102 (package
8103 (name "python-importlib-resources")
8104 (version "3.0.0")
8105 (source (origin
8106 (method url-fetch)
8107 (uri (pypi-uri "importlib_resources" version))
8108 (sha256
8109 (base32
8110 "1hq626mx5jl9zfl0wdrjkxsnh8qd98fqv322n68b9251xjk4bxqr"))))
8111 (build-system python-build-system)
8112 (native-inputs (list python-setuptools-scm python-toml))
8113 (home-page "http://importlib-resources.readthedocs.io/")
8114 (synopsis "Read resources from Python packages")
8115 (description
8116 "@code{importlib_resources} is a backport of Python 3's standard library
8117 @code{importlib.resources} module for Python 2.7, and Python 3.")
8118 (license license:asl2.0)))
8119
8120 (define-public python-importlib-metadata
8121 (package
8122 (name "python-importlib-metadata")
8123 (version "4.11.3")
8124 (source
8125 (origin
8126 (method url-fetch)
8127 (uri (pypi-uri "importlib_metadata" version))
8128 (sha256
8129 (base32
8130 "0f951zynlh39yicqnhrs3p1qa5p3g6ajjfcggf12y51ppxz5jk7a"))))
8131 (build-system python-build-system)
8132 (arguments
8133 (list
8134 #:phases
8135 #~(modify-phases %standard-phases
8136 ;; XXX: PEP 517 manual build/install procedures copied from
8137 ;; python-isort.
8138 (replace 'build
8139 (lambda _
8140 ;; ZIP does not support timestamps before 1980.
8141 (setenv "SOURCE_DATE_EPOCH" "315532800")
8142 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
8143 (replace 'install
8144 (lambda* (#:key outputs #:allow-other-keys)
8145 (let ((whl (car (find-files "dist" "\\.whl$"))))
8146 (invoke "pip" "--no-cache-dir" "--no-input"
8147 "install" "--no-deps" "--prefix" #$output whl))))
8148 (replace 'check
8149 (lambda* (#:key tests? #:allow-other-keys)
8150 (when tests?
8151 (invoke "pytest" "-vv" "tests")))))))
8152 (propagated-inputs (list python-zipp))
8153 (native-inputs
8154 (list python-pypa-build
8155 python-pyfakefs
8156 python-pytest
8157 python-setuptools-scm))
8158 (home-page "https://importlib-metadata.readthedocs.io/")
8159 (synopsis "Read metadata from Python packages")
8160 (description
8161 "@code{importlib_metadata} is a library which provides an API for
8162 accessing an installed Python package's metadata, such as its entry points or
8163 its top-level name. This functionality intends to replace most uses of
8164 @code{pkg_resources} entry point API and metadata API. Along with
8165 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
8166 need to use the older and less efficient @code{pkg_resources} package.")
8167 (license license:asl2.0)))
8168
8169 (define-public python-importmagic
8170 (package
8171 (name "python-importmagic")
8172 (version "0.1.7")
8173 (source
8174 (origin
8175 (method url-fetch)
8176 (uri (pypi-uri "importmagic" version))
8177 (sha256
8178 (base32
8179 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
8180 (build-system python-build-system)
8181 (arguments
8182 (list #:phases
8183 #~(modify-phases %standard-phases
8184 (replace 'check
8185 (lambda* (#:key tests? #:allow-other-keys)
8186 (when tests?
8187 (invoke "pytest" "-v")))))))
8188 (native-inputs
8189 (list python-pytest))
8190 (home-page "https://github.com/alecthomas/importmagic")
8191 (synopsis "Library for adding, removing and managing Python imports")
8192 (description
8193 "Importmagic is a Python library for automatically managing imports by
8194 finding unresolved symbols in Python code and their corresponding imports.")
8195 (license license:bsd-3)))
8196
8197 (define-public python-inotify-simple
8198 (package
8199 (name "python-inotify-simple")
8200 (version "1.3.5")
8201 (source
8202 (origin
8203 (method git-fetch)
8204 (uri (git-reference
8205 (url "https://github.com/chrisjbillington/inotify_simple")
8206 (commit version)))
8207 (file-name (git-file-name name version))
8208 (sha256
8209 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
8210 (build-system python-build-system)
8211 (home-page
8212 "https://github.com/chrisjbillington/inotify_simple")
8213 (synopsis "Simple wrapper around inotify library")
8214 (description
8215 "@code{inotify-simple} is a simple wrapper around inotify library.")
8216 (license license:bsd-3)))
8217
8218 (define-public python-jaraco-classes
8219 (package
8220 (name "python-jaraco-classes")
8221 (version "3.2.1")
8222 (source
8223 (origin
8224 (method url-fetch)
8225 (uri (pypi-uri "jaraco.classes" version))
8226 (sha256
8227 (base32 "0d6g7qvfv1jlzbzh6asprqdblqd59grvlvr3nwbdqdqrmwlbfm7d"))))
8228 (build-system python-build-system)
8229 (arguments
8230 (list
8231 #:phases
8232 #~(modify-phases %standard-phases
8233 (replace 'check
8234 (lambda* (#:key tests? #:allow-other-keys)
8235 (when tests?
8236 ;; Do not test the myproject.toml build as it tries to pull
8237 ;; dependencies from the Internet.
8238 (invoke "pytest" "-vv" "-k" "not project")))))))
8239 (native-inputs
8240 (list python-pytest
8241 python-pytest-black
8242 python-pytest-checkdocs
8243 python-pytest-cov
8244 python-pytest-enabler-bootstrap ;OK since not propagated
8245 python-pytest-flake8
8246 python-pytest-mypy
8247 python-setuptools-scm
8248 python-wheel))
8249 (propagated-inputs (list python-more-itertools))
8250 (home-page "https://github.com/jaraco/jaraco.classes")
8251 (synopsis "Utility functions for Python class constructs")
8252 (description "This Python library contains utility functions for Python
8253 class constructs.")
8254 (license license:expat)))
8255
8256 ;;; Variant used to break a cycle with python-pytest-enabler.
8257 (define-public python-jaraco-context-bootstrap
8258 (hidden-package
8259 (package
8260 (name "python-jaraco-context-bootstrap")
8261 (version "4.1.1")
8262 (source
8263 (origin
8264 (method url-fetch)
8265 (uri (pypi-uri "jaraco.context" version))
8266 (sha256
8267 (base32 "0hbjm1rpxf4pzmbdp9rh3ali4zqnlcr8m97bhh1nizxvzcpxim7h"))))
8268 (build-system python-build-system)
8269 (arguments (list #:tests? #f))
8270 (native-inputs (list python-setuptools-scm))
8271 (home-page "https://github.com/jaraco/jaraco.context")
8272 (synopsis "Context managers Python library")
8273 (description "This Python library provides context managers-related
8274 procedures.")
8275 (license license:expat))))
8276
8277 (define-public python-jaraco-context
8278 (package/inherit python-jaraco-context-bootstrap
8279 (name "python-jaraco-context")
8280 (arguments
8281 (substitute-keyword-arguments
8282 (package-arguments python-jaraco-context-bootstrap)
8283 ((#:tests? _ #f)
8284 (not (%current-target-system)))
8285 ((#:phases phases #~%standard-phases)
8286 #~(modify-phases #$phases
8287 (replace 'check
8288 (lambda* (#:key tests? #:allow-other-keys)
8289 (when tests?
8290 ;; Do not test the myproject.toml build as it tries to pull
8291 ;; dependencies from the Internet.
8292 (invoke "pytest" "-vv" "-k" "not project"))))))))
8293 (native-inputs
8294 (modify-inputs
8295 (package-native-inputs python-jaraco-context-bootstrap)
8296 (append python-pytest
8297 python-pytest-black
8298 python-pytest-checkdocs
8299 python-pytest-cov
8300 python-pytest-enabler-bootstrap ;OK since not propagated
8301 python-pytest-flake8
8302 python-pytest-mypy)))
8303 (properties (alist-delete 'hidden? (package-properties
8304 python-jaraco-context-bootstrap)))))
8305
8306 ;;; Variant used to break a cycle with python-pytest-enabler.
8307 (define-public python-jaraco-functools-bootstrap
8308 (hidden-package
8309 (package
8310 (name "python-jaraco-functools-bootstrap")
8311 (version "3.5.0")
8312 (source
8313 (origin
8314 (method url-fetch)
8315 (uri (pypi-uri "jaraco.functools" version))
8316 (sha256
8317 (base32 "186xqzs3bqhjwajnprxy3sc3h0w5vdld8spc1dxjnn9720yykq1i"))))
8318 (build-system python-build-system)
8319 (arguments (list #:tests? #f))
8320 (native-inputs (list python-setuptools-scm))
8321 (propagated-inputs (list python-more-itertools))
8322 (home-page "https://github.com/jaraco/jaraco.functools")
8323 (synopsis "Python library extending Python's @code{functools}")
8324 (description "This library extends the standard @code{functools} Python
8325 module with a few extra procedures.")
8326 (license license:expat))))
8327
8328 (define-public python-jaraco-functools
8329 (package/inherit python-jaraco-functools-bootstrap
8330 (name "python-jaraco-functools")
8331 (arguments
8332 (substitute-keyword-arguments
8333 (package-arguments python-jaraco-functools-bootstrap)
8334 ((#:tests? _ #f)
8335 (not (%current-target-system)))
8336 ((#:phases phases #~%standard-phases)
8337 #~(modify-phases #$phases
8338 (replace 'check
8339 (lambda* (#:key tests? #:allow-other-keys)
8340 (when tests?
8341 ;; Do not test the myproject.toml build as it tries to pull
8342 ;; dependencies from the Internet. Do not run a test that
8343 ;; tries to emulate a broken proprietary CI set-up, fails
8344 ;; to do so correctly, and then throws an error about it.
8345 (invoke "pytest" "-vv" "-k"
8346 "not project and not test_function_throttled"))))))))
8347 (native-inputs
8348 (modify-inputs
8349 (package-native-inputs python-jaraco-functools-bootstrap)
8350 (append python-jaraco-classes
8351 python-pytest
8352 python-pytest-black
8353 python-pytest-checkdocs
8354 python-pytest-cov
8355 python-pytest-enabler-bootstrap ;OK since not propagated
8356 python-pytest-flake8
8357 python-pytest-mypy)))
8358 (properties (alist-delete 'hidden? (package-properties
8359 python-jaraco-functools-bootstrap)))))
8360
8361 (define-public python-jaraco-packaging
8362 (package
8363 (name "python-jaraco-packaging")
8364 (version "6.1")
8365 (source
8366 (origin
8367 (method url-fetch)
8368 (uri (pypi-uri "jaraco.packaging" version))
8369 (sha256
8370 (base32
8371 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
8372 (build-system python-build-system)
8373 (propagated-inputs
8374 (list python-pytest
8375 python-pytest-checkdocs
8376 python-pytest-flake8
8377 python-rst.linker
8378 python-setuptools
8379 python-setuptools-scm
8380 python-six
8381 python-sphinx))
8382 (home-page "https://github.com/jaraco/jaraco.packaging")
8383 (synopsis "Tools to supplement packaging Python releases")
8384 (description
8385 "This package provides various tools to supplement packaging Python
8386 releases.")
8387 (license license:expat)))
8388
8389 (define-public python-simplegeneric
8390 (package
8391 (name "python-simplegeneric")
8392 (version "0.8.1")
8393 (source
8394 (origin
8395 (method url-fetch)
8396 (uri (pypi-uri "simplegeneric" version ".zip"))
8397 (sha256
8398 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
8399 (build-system python-build-system)
8400 (native-inputs
8401 (list unzip))
8402 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
8403 (synopsis "Python module for simple generic functions")
8404 (description
8405 "The simplegeneric module lets you define simple single-dispatch generic
8406 functions, akin to Python’s built-in generic functions like @code{len()},
8407 @code{iter()} and so on. However, instead of using specially-named methods,
8408 these generic functions use simple lookup tables, akin to those used by
8409 e.g. @code{pickle.dump()} and other generic functions found in the Python
8410 standard library.")
8411 (license license:zpl2.1)))
8412
8413 (define-public python-ipython-genutils
8414 ;; TODO: This package is retired, check if can be removed, see description.
8415 (package
8416 (name "python-ipython-genutils")
8417 (version "0.1.0")
8418 (source
8419 (origin
8420 (method url-fetch)
8421 (uri (pypi-uri "ipython_genutils" version))
8422 (sha256
8423 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
8424 (build-system python-build-system)
8425 (arguments `(#:tests? #f)) ; no tests
8426 (home-page "https://ipython.org")
8427 (synopsis "Vestigial utilities from IPython")
8428 (description
8429 "This package provides retired utilities from IPython. No packages
8430 outside IPython/Jupyter should depend on it.
8431
8432 This package shouldn't exist. It contains some common utilities shared by
8433 Jupyter and IPython projects during The Big Split. As soon as possible, those
8434 packages will remove their dependency on this, and this package will go
8435 away.")
8436 (license license:bsd-3)))
8437
8438 ;;; Variant used to break a cycle with python-ipykernel.
8439 (define-public python-ipyparallel-bootstrap
8440 (hidden-package
8441 (package
8442 (name "python-ipyparallel-bootstrap")
8443 (version "8.2.1")
8444 (source
8445 (origin
8446 (method url-fetch)
8447 (uri (pypi-uri "ipyparallel" version))
8448 (sha256
8449 (base32
8450 "0wiwfd7870zbmczzn96jqxxjf2zcbcaxnsl1ddn8hspwa8y4frzj"))))
8451 (build-system python-build-system)
8452 (arguments
8453 (list
8454 #:tests? #f
8455 #:phases #~(modify-phases %standard-phases
8456 ;; The python-ipykernel is normally propagated but is
8457 ;; removed from this package to break the cycle.
8458 (delete 'sanity-check))))
8459 (propagated-inputs
8460 (list python-dateutil
8461 python-decorator
8462 python-entrypoints
8463 python-ipython
8464 ;; python-ipykernel is omitted here to break a cycle.
8465 python-jupyter-client-bootstrap
8466 python-psutil
8467 python-pyzmq
8468 python-tornado-6
8469 python-tqdm
8470 python-traitlets))
8471 (home-page "https://ipython.org/")
8472 (synopsis "Interactive Parallel Computing with IPython")
8473 (description
8474 "@code{ipyparallel} is a Python package and collection of CLI scripts for
8475 controlling clusters for Jupyter. @code{ipyparallel} contains the following
8476 CLI scripts:
8477 @enumerate
8478 @item ipcluster - start/stop a cluster
8479 @item ipcontroller - start a scheduler
8480 @item ipengine - start an engine
8481 @end enumerate")
8482 (license license:bsd-3))))
8483
8484 (define-public python-ipyparallel
8485 (package
8486 (inherit python-ipyparallel-bootstrap)
8487 (name "python-ipyparallel")
8488 (arguments
8489 (list
8490 #:phases
8491 #~(modify-phases %standard-phases
8492 (replace 'check
8493 (lambda _
8494 (invoke "pytest" "-vv"))))))
8495 (native-inputs
8496 (list python-ipython
8497 python-pytest
8498 python-pytest-asyncio
8499 python-pytest-cov
8500 python-pytest-tornado
8501 python-testpath))
8502 (propagated-inputs
8503 (modify-inputs (package-propagated-inputs python-ipyparallel-bootstrap)
8504 (replace "python-jupyter-client-bootstrap" python-jupyter-client)
8505 (append python-ipykernel)))
8506 (properties (alist-delete 'hidden? (package-properties
8507 python-ipyparallel-bootstrap)))))
8508
8509 (define-public python-ipython-cluster-helper
8510 (package
8511 (name "python-ipython-cluster-helper")
8512 (version "0.6.4")
8513 (source
8514 (origin
8515 (method url-fetch)
8516 (uri (pypi-uri "ipython-cluster-helper" version))
8517 (sha256
8518 (base32
8519 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
8520 (modules '((guix build utils)))
8521 (snippet
8522 '(begin (substitute* "requirements.txt"
8523 (("ipython.*") "ipython\n"))
8524 #t))))
8525 (build-system python-build-system)
8526 (arguments
8527 `(#:tests? #f ; Test suite can't find IPython.
8528 #:phases
8529 (modify-phases %standard-phases
8530 (replace 'check
8531 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
8532 (if tests?
8533 (begin
8534 (setenv "HOME" (getcwd))
8535 (add-installed-pythonpath inputs outputs)
8536 (invoke "python" "example/example.py" "--local"))
8537 #t))))))
8538 (propagated-inputs
8539 (list python-ipyparallel
8540 python-ipython
8541 python-netifaces
8542 python-pyzmq
8543 python-setuptools
8544 python-six))
8545 (home-page "https://github.com/roryk/ipython-cluster-helper")
8546 (synopsis
8547 "Simplify IPython cluster start up and use for multiple schedulers")
8548 (description
8549 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
8550 profile, launches a cluster and returns a view. On program exit it shuts the
8551 cluster down and deletes the throwaway profile.")
8552 (license license:expat)))
8553
8554 (define-public python-ipython-sql
8555 (package
8556 (name "python-ipython-sql")
8557 (version "0.4.1")
8558 (source
8559 (origin
8560 (method url-fetch)
8561 (uri (pypi-uri "ipython-sql" version))
8562 (sha256
8563 (base32 "1r6rz8jgrqzhkf2flwjw75d96g8l7kykmx5wli3q1988w96391ip"))))
8564 (build-system python-build-system)
8565 (arguments
8566 (list #:tests? #f ;must run under IPython
8567 #:phases
8568 #~(modify-phases %standard-phases
8569 (add-after 'unpack 'permit-newer-prettytable
8570 ;; See https://github.com/catherinedevlin/ipython-sql/issues/202
8571 (lambda _
8572 (substitute* "setup.py"
8573 (("prettytable<1")
8574 "prettytable")))))))
8575 (propagated-inputs
8576 (list python-ipython
8577 python-ipython-genutils
8578 python-prettytable
8579 python-six
8580 python-sqlalchemy
8581 python-sqlparse))
8582 (home-page "https://github.com/catherinedevlin/ipython-sql")
8583 (synopsis "RDBMS access via IPython")
8584 (description "This library connects to a database, using SQLAlchemy URL
8585 connect strings, then issue SQL commands within IPython or IPython Notebook.")
8586 (license license:expat)))
8587
8588 (define-public python-traitlets
8589 (package
8590 (name "python-traitlets")
8591 (version "5.1.1")
8592 (source
8593 (origin
8594 (method url-fetch)
8595 (uri (pypi-uri "traitlets" version))
8596 (sha256
8597 (base32
8598 "1ivhxglsrnhqw4g98ihddn7i5f6976gpk31fijwq473wb9n4b7q5"))))
8599 (build-system python-build-system)
8600 (arguments
8601 `(#:phases
8602 (modify-phases %standard-phases
8603 (replace 'check (lambda* (#:key tests? #:allow-other-keys)
8604 (when tests?
8605 (invoke "pytest" "-vv" "traitlets")))))))
8606 (native-inputs
8607 (list python-pytest))
8608 (home-page "https://ipython.org")
8609 (synopsis "Configuration system for Python applications")
8610 (description
8611 "Traitlets is a framework that lets Python classes have attributes with
8612 type checking, dynamically calculated default values, and ‘on change’
8613 callbacks. The package also includes a mechanism to use traitlets for
8614 configuration, loading values from files or from command line arguments. This
8615 is a distinct layer on top of traitlets, so you can use traitlets in your code
8616 without using the configuration machinery.")
8617 (license license:bsd-3)))
8618
8619 (define-public python-jupyter-core
8620 (package
8621 (name "python-jupyter-core")
8622 (version "4.10.0")
8623 (source
8624 (origin
8625 (method url-fetch)
8626 (uri (string-append (pypi-uri "jupyter_core" version)))
8627 (sha256
8628 (base32
8629 "1v0s31rmwppdmww135hif03hy164j9kimirh24kxfcbvdfql9pm6"))))
8630 (build-system python-build-system)
8631 (arguments
8632 `(#:phases
8633 (modify-phases %standard-phases
8634 (replace 'check
8635 (lambda* (#:key tests? #:allow-other-keys)
8636 (when tests?
8637 ;; Some tests write to $HOME.
8638 (setenv "HOME" "/tmp")
8639 (invoke "pytest" "-vv"
8640 "-k"
8641 (string-append
8642 ;; XXX: These tests fail with "ModuleNotFoundError: No
8643 ;; module named 'jupyter_core'".
8644 "not test_argv0 and not test_path_priority "
8645 "and not test_not_on_path")))))
8646 (add-after 'unpack 'patch-testsuite
8647 (lambda _
8648 ;; test_not_on_path() and test_path_priority() try to run a test
8649 ;; that loads jupyter_core, so we need GUIX_PYTHONPATH
8650 (substitute* "jupyter_core/tests/test_command.py"
8651 (("env = \\{'PATH': ''\\}")
8652 "env = {'PATH': '', 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}")
8653 (("env = \\{'PATH': str\\(b\\)\\}")
8654 "env = {'PATH': str(b), 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}"))))
8655 ;; Migration is running whenever etc/jupyter exists, but the
8656 ;; Guix-managed directory will never contain any migratable IPython
8657 ;; config files and cannot be written to anyway, so just pretend we
8658 ;; already did that.
8659 (add-after 'install 'disable-migration
8660 (lambda* (#:key outputs #:allow-other-keys)
8661 (mkdir-p (string-append (assoc-ref outputs "out") "/etc/jupyter"))
8662 (invoke "touch"
8663 (string-append
8664 (assoc-ref outputs "out")
8665 "/etc/jupyter/migrated")))))))
8666 (propagated-inputs (list python-traitlets))
8667 (native-inputs (list python-pytest))
8668 ;; This package provides the `jupyter` binary and thus also exports the
8669 ;; search paths.
8670 (native-search-paths
8671 (list (search-path-specification
8672 (variable "JUPYTER_CONFIG_PATH")
8673 (files '("etc/jupyter")))
8674 (search-path-specification
8675 (variable "JUPYTER_PATH")
8676 (files '("share/jupyter")))))
8677 (home-page "https://jupyter.org/")
8678 (synopsis "Jupyter base package")
8679 (description
8680 "Jupyter core is the base package on which Jupyter projects rely.")
8681 (license license:bsd-3)))
8682
8683 ;; Bootstrap variant of jupyter-client, which breaks the loop between ipykernel
8684 ;; and jupyter-client by removing the former from its native-inputs and
8685 ;; disabling tests.
8686 (define-public python-jupyter-client-bootstrap
8687 (hidden-package
8688 (package
8689 (name "python-jupyter-client-bootstrap")
8690 (version "7.2.2")
8691 (source
8692 (origin
8693 (method url-fetch)
8694 (uri (pypi-uri "jupyter_client" version))
8695 (sha256
8696 (base32
8697 "12pbp177bfb3710y1a5598mwn8ffhyzmpll67m0nmalb98savnwg"))))
8698 (build-system python-build-system)
8699 (arguments
8700 (list
8701 #:tests? #f
8702 #:phases
8703 #~(modify-phases %standard-phases
8704 (add-after 'unpack 'set-tool-file-names
8705 (lambda* (#:key inputs #:allow-other-keys)
8706 (substitute* "jupyter_client/localinterfaces.py"
8707 (("'ip'")
8708 (format #f "'~a'" (search-input-file inputs "sbin/ip")))))))))
8709 (inputs (list iproute))
8710 (propagated-inputs
8711 (list python-dateutil
8712 python-entrypoints
8713 python-jupyter-core
8714 python-nest-asyncio
8715 python-pyzmq
8716 python-tornado-6
8717 python-traitlets))
8718 (home-page "https://jupyter.org/")
8719 (synopsis "Jupyter protocol implementation and client libraries")
8720 (description
8721 "The @code{jupyter_client} package contains the reference implementation
8722 of the Jupyter protocol. It also provides client and kernel management APIs
8723 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
8724 installing @code{kernelspec}s for use with Jupyter frontends.")
8725 (license license:bsd-3))))
8726
8727 (define-public python-jupyter-client
8728 (let ((base python-jupyter-client-bootstrap))
8729 (package
8730 (inherit base)
8731 (name "python-jupyter-client")
8732 (arguments
8733 (substitute-keyword-arguments (package-arguments base)
8734 ((#:tests? _ #f)
8735 (not (%current-target-system)))
8736 ((#:phases phases #~%standard-phases)
8737 #~(modify-phases #$phases
8738 (replace 'check
8739 (lambda* (#:key tests? #:allow-other-keys)
8740 (when tests?
8741 ;; Some tests try to write to $HOME.
8742 (setenv "HOME" "/tmp")
8743 (invoke "pytest" "-vv"))))))))
8744 (native-inputs
8745 (list python-pytest
8746 python-pytest-asyncio
8747 python-pytest-timeout
8748 python-async-generator
8749 python-ipython
8750 python-ipykernel-bootstrap))
8751 (properties (alist-delete 'hidden? (package-properties base))))))
8752
8753 (define-public python-ipykernel
8754 (package
8755 (name "python-ipykernel")
8756 (version "6.13.0")
8757 (source
8758 (origin
8759 (method url-fetch)
8760 (uri (pypi-uri "ipykernel" version))
8761 (sha256
8762 (base32 "0q5yni8h08nadsn53f957p0pjsjhwl2b2lp1hqz3jn0854z2fa0f"))))
8763 (build-system python-build-system)
8764 (arguments
8765 (list
8766 #:imported-modules `(,@%python-build-system-modules
8767 (guix build syscalls))
8768 #:modules '((guix build python-build-system)
8769 (guix build syscalls)
8770 (guix build utils)
8771 (ice-9 match))
8772 #:phases
8773 #~(modify-phases %standard-phases
8774 (replace 'check
8775 (lambda* (#:key tests? #:allow-other-keys)
8776 (when tests?
8777 (match (primitive-fork)
8778 (0 ;child process
8779 (set-child-subreaper!)
8780 ;; XXX: Tini provides proper PID1-like signal handling that
8781 ;; reaps zombie processes, necessary for the
8782 ;; 'test_shutdown_subprocesses' test to pass.
8783
8784 ;; TODO: Complete https://issues.guix.gnu.org/30948.
8785 (setenv "HOME" "/tmp")
8786 (execlp "tini" "--" "pytest" "-vv"))
8787 (pid
8788 (match (waitpid pid)
8789 ((_ . status)
8790 (unless (zero? status)
8791 (error "`pytest' exited with status"
8792 status)))))))))
8793 (add-after 'install 'set-python-file-name
8794 (lambda* (#:key inputs #:allow-other-keys)
8795 ;; Record the absolute file name of the 'python' executable in
8796 ;; 'kernel.json'.
8797 (substitute* (string-append #$output "/share/jupyter"
8798 "/kernels/python3/kernel.json")
8799 (("\"python\"")
8800 (format #f "~s" (search-input-file inputs
8801 "/bin/python3")))))))))
8802 (propagated-inputs
8803 (list python-debugpy
8804 python-ipython
8805 python-jupyter-client ;imported at runtime during connect
8806 python-matplotlib-inline
8807 ;;python-nest-asyncio
8808 ;;python-packaging
8809 python-psutil
8810 python-tornado-6
8811 python-traitlets))
8812 (inputs (list python)) ;for cross compilation
8813 (native-inputs
8814 (list python-flaky
8815 python-ipyparallel-bootstrap
8816 ;; XXX: Our Pytest package captures its native inputs in its
8817 ;; wrapper script (such as python-nose), which is used in the code
8818 ;; and causes deprecation warnings. Using the bootstrap variant
8819 ;; avoids that.
8820 python-pytest-bootstrap
8821 python-pytest-timeout
8822 tini))
8823 (home-page "https://ipython.org")
8824 (synopsis "IPython Kernel for Jupyter")
8825 (description "This package provides the IPython kernel for Jupyter.")
8826 (license license:bsd-3)))
8827
8828 ;; Bootstrap variant of ipykernel, which uses the bootstrap jupyter-client to
8829 ;; break the cycle between ipykernel and jupyter-client.
8830 (define-public python-ipykernel-bootstrap
8831 (let ((parent python-ipykernel))
8832 (hidden-package
8833 (package
8834 (inherit parent)
8835 (name "python-ipykernel-bootstrap")
8836 (arguments (list #:tests? #f
8837 ;; The package should normally propagate ipykernel,
8838 ;; left out here to break the cycle.
8839 #:phases #~(modify-phases %standard-phases
8840 (delete 'sanity-check))))
8841 (native-inputs '())
8842 (propagated-inputs
8843 (modify-inputs (package-propagated-inputs parent)
8844 (replace "python-jupyter-client" python-jupyter-client-bootstrap)
8845 (append python-ipyparallel-bootstrap)))))))
8846
8847 (define-public python-pari-jupyter
8848 (package
8849 (name "python-pari-jupyter")
8850 (version "1.4.1")
8851 (source
8852 (origin
8853 (method url-fetch)
8854 (uri (pypi-uri "pari-jupyter" version))
8855 (sha256
8856 (base32
8857 "1ikqvv335qfrhmlji0iclci6pnm2c3fvnxf031jr1d68j79g6ypd"))))
8858 (build-system python-build-system)
8859 (arguments '(#:tests? #f)) ;no test suite
8860 (inputs
8861 (list pari-gp readline python-ipykernel))
8862 (home-page "https://github.com/sagemath/pari-jupyter")
8863 (synopsis "Jupyter kernel for PARI/GP")
8864 (description "The package provides a PARI/GP kernel for Jupyter.")
8865 (license license:gpl3+)))
8866
8867 (define-public python-backcall
8868 (package
8869 (name "python-backcall")
8870 (version "0.2.0")
8871 (source
8872 (origin
8873 (method url-fetch)
8874 (uri (pypi-uri "backcall" version))
8875 (sha256
8876 (base32
8877 "07jy4562lvnhkk6kfr3cphmizy88anlhmbwb8kdzlz2ypqkvzgaw"))))
8878 (build-system python-build-system)
8879 (home-page "https://github.com/takluyver/backcall/")
8880 (synopsis "Specifications for callback functions passed in to an API")
8881 (description
8882 "If your code lets other people supply callback functions, it's important
8883 to specify the function signature you expect, and check that functions support
8884 that. Adding extra parameters later would break other peoples code unless
8885 you're careful. The @code{backcall} package provides a way of specifying the
8886 callback signature using a prototype function.")
8887 (license license:bsd-3)))
8888
8889 (define-public python-pure-eval
8890 (package
8891 (name "python-pure-eval")
8892 (version "0.2.2")
8893 (source
8894 (origin
8895 (method url-fetch)
8896 (uri (pypi-uri "pure_eval" version))
8897 (sha256
8898 (base32 "1hwsm85cwqwh6d6x4vzcimla2865s6v19ms3ym81ganzyq534i9b"))))
8899 (build-system python-build-system)
8900 (native-inputs (list python-pytest python-setuptools-scm))
8901 (home-page "https://github.com/alexmojaki/pure_eval")
8902 (synopsis "Python library to evaluate abstract syntax tree nodes")
8903 (description "The @code{pure_eval} Python library can safely evaluate
8904 abstract syntax tree (AST) nodes without side effects.")
8905 (license license:expat)))
8906
8907 (define-public python-asttokens
8908 (package
8909 (name "python-asttokens")
8910 (version "2.0.5")
8911 (source
8912 (origin
8913 (method url-fetch)
8914 (uri (pypi-uri "asttokens" version))
8915 (sha256
8916 (base32 "1mglbkikxvnhrk3inbx0v1qzxwd38qjr6l35sn098yicy0ac2m4s"))))
8917 (build-system python-build-system)
8918 (propagated-inputs (list python-six))
8919 (native-inputs (list python-astroid python-pytest python-setuptools-scm))
8920 (home-page "https://github.com/gristlabs/asttokens")
8921 (synopsis "Python library to annotate abstract syntax trees")
8922 (description "The @code{asttokens} module annotates Python abstract syntax
8923 trees (ASTs) with the positions of tokens and text in the source code that
8924 generated them. It makes it possible for tools that work with logical AST
8925 nodes to find the particular text that resulted in those nodes, for example
8926 for automated refactoring or highlighting.")
8927 (license license:asl2.0)))
8928
8929 (define-public python-littleutils
8930 (package
8931 (name "python-littleutils")
8932 (version "0.2.2")
8933 (source
8934 (origin
8935 (method url-fetch)
8936 (uri (pypi-uri "littleutils" version))
8937 (sha256
8938 (base32 "0vwijrylppmk0nbddqvn527r9cg3zw8d6zk6r58hslry42jf7jp6"))))
8939 (build-system python-build-system)
8940 (home-page "https://github.com/alexmojaki/littleutils")
8941 (synopsis "Python utility function collection")
8942 (description "@code{littleutils} is a small collection of Python utility
8943 functions, useful in the context of writing unit tests among other uses.")
8944 (license license:expat)))
8945
8946 (define-public python-stack-data
8947 (package
8948 (name "python-stack-data")
8949 (version "0.2.0")
8950 (source
8951 (origin
8952 (method url-fetch)
8953 (uri (pypi-uri "stack_data" version))
8954 (sha256
8955 (base32 "04lfcj5qrn4qikjw89qbdzqwm0xm4bgm4m8rll1rafk3pm0jssa5"))))
8956 (build-system python-build-system)
8957 (propagated-inputs (list python-asttokens python-executing python-pure-eval))
8958 (native-inputs
8959 (list python-cython
8960 python-littleutils
8961 python-pygments
8962 python-pytest
8963 python-setuptools-scm
8964 python-typeguard))
8965 (home-page "https://github.com/alexmojaki/stack_data")
8966 (synopsis "Python stack frame and traceback manipulation library")
8967 (description "The @code{stack_data} Python library extracts data from
8968 stack frames and tracebacks. Is can be used to display more useful tracebacks
8969 than the default.")
8970 (license license:expat)))
8971
8972 (define-public python-ipython
8973 (package
8974 (name "python-ipython")
8975 (version "8.2.0")
8976 (source
8977 (origin
8978 (method url-fetch)
8979 (uri (pypi-uri "ipython" version ".tar.gz"))
8980 (sha256
8981 (base32 "1hcxa713wh3axa57412iy02rj0494ljvv6gpnls4lndc5h9yprbh"))))
8982 (build-system python-build-system)
8983 (arguments
8984 `(#:phases
8985 (modify-phases %standard-phases
8986 (add-after 'unpack 'make-docs-reproducible
8987 (lambda _
8988 (substitute* "IPython/sphinxext/ipython_directive.py"
8989 ((".*import datetime") "")
8990 ((".*datetime.datetime.now\\(\\)") "")
8991 (("%timeit") "# %timeit"))))
8992 (replace 'check
8993 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
8994 (when tests?
8995 (setenv "HOME" "/tmp/") ;required by some tests
8996 (invoke "python" "-m" "pytest" "-vv")))))))
8997 (inputs (list readline which))
8998 (propagated-inputs
8999 (list python-backcall
9000 python-decorator
9001 python-jedi
9002 python-jinja2
9003 python-jsonschema
9004 python-matplotlib
9005 python-matplotlib-inline
9006 python-mistune
9007 python-nbformat
9008 python-numpy
9009 python-numpydoc
9010 python-pexpect
9011 python-pickleshare
9012 python-prompt-toolkit
9013 python-pygments
9014 python-pyzmq
9015 python-simplegeneric
9016 python-stack-data
9017 python-terminado
9018 python-traitlets))
9019 (native-inputs
9020 (list graphviz
9021 pkg-config
9022 ;; For tests.
9023 python-pytest
9024 python-requests
9025 python-testpath))
9026 (home-page "https://ipython.org")
9027 (synopsis "IPython is a tool for interactive computing in Python")
9028 (description
9029 "IPython provides a rich architecture for interactive computing with:
9030 Powerful interactive shells, a browser-based notebook, support for interactive
9031 data visualization, embeddable interpreters and tools for parallel
9032 computing.")
9033 (properties '((cpe-name . "ipython")))
9034 (license license:bsd-3)))
9035
9036 (define-public python-ipython-documentation
9037 (package
9038 (inherit python-ipython)
9039 (name "python-ipython-documentation")
9040 (version (package-version python-ipython))
9041 (source
9042 (origin
9043 (inherit (package-source python-ipython))
9044 (patches (append (search-patches
9045 "python-ipython-documentation-chars.patch"
9046 "python-ipython-documentation-repro.patch")
9047 (origin-patches (package-source python-ipython))))))
9048 (arguments
9049 (list
9050 #:phases
9051 #~(modify-phases %standard-phases
9052 (add-after 'unpack 'set-pythonpath
9053 (lambda _
9054 ;; Ensure this fixed (via the
9055 ;; "python-ipython-documentation-chars.patch" patch) copy of
9056 ;; IPython gets used.
9057 (setenv "PYTHONPATH" (string-append (getcwd)))))
9058 (add-before 'build 'configure-sphinx-for-xelatex
9059 (lambda _
9060 ;; Use XeLaTeX instead of PDFLaTeX, as it can
9061 ;; cope with the Unicode characters present in the
9062 ;; contributors page, for example.
9063 (substitute* "docs/source/conf.py"
9064 (("project = 'IPython'.*" all)
9065 (string-append all "latex_engine = 'xelatex'\n")))
9066 ;; XXX: The Sphinx-generated ipython.tex specifies the GNU
9067 ;; FreeFont font to be searched via its extension, which uses
9068 ;; kpathsea instead of fontconfig and fail (see:
9069 ;; https://github.com/sphinx-doc/sphinx/issues/10347). Create a
9070 ;; symlink to GNU FreeFont and add it to the TEXMF tree via
9071 ;; GUIX_TEXMF.
9072 (mkdir-p "texmf-dist/fonts/opentype/public")
9073 (symlink (string-append
9074 #$(this-package-native-input "font-gnu-freefont")
9075 "/share/fonts/opentype")
9076 (string-append
9077 (getcwd) "/"
9078 "texmf-dist/fonts/opentype/public/gnu-freefont"))
9079 (setenv "GUIX_TEXMF" (string-append (getenv "GUIX_TEXMF") ":"
9080 (getcwd) "/texmf-dist"))))
9081 (delete 'build)
9082 (delete 'check)
9083 (replace 'install
9084 (lambda* (#:key outputs #:allow-other-keys)
9085 (let* ((data (string-append #$output "/share"))
9086 (doc (string-append data "/doc/" #$name "-" #$version))
9087 (html (string-append doc "/html"))
9088 (info (string-append data "/info")))
9089 (invoke "make" "-C" "docs" "info" "html" "pdf"
9090 (string-append "SPHINXOPTS=-j"
9091 (number->string (parallel-job-count))))
9092 (install-file "COPYING.rst" doc)
9093 (copy-recursively "examples" (string-append doc "/examples"))
9094 ;; Install HTML documentation.
9095 (copy-recursively "docs/build/html" html)
9096 ;; Likewise for the PDF.
9097 (install-file "docs/build/latex/ipython.pdf" doc)
9098 ;; Likewise for the info manual.
9099 (install-file "docs/build/texinfo/ipython.info" info)
9100 (symlink (string-append html "/_images")
9101 (string-append info "/ipython-figures"))))))))
9102 (native-inputs
9103 (list fontconfig ;for XDG_DATA_DIRS to locate fonts
9104 font-gnu-freefont
9105 graphviz
9106 python-docrepr
9107 python-sphinx
9108 python-sphinx-rtd-theme
9109 texinfo
9110 texlive-bin
9111 texlive-polyglossia
9112 texlive-xindy))))
9113
9114 (define-public python-urwid
9115 (package
9116 (name "python-urwid")
9117 (version "2.1.2")
9118 (source
9119 (origin
9120 (method url-fetch)
9121 (uri (pypi-uri "urwid" version))
9122 (sha256
9123 (base32
9124 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
9125 (build-system python-build-system)
9126 (arguments
9127 (list
9128 #:phases
9129 #~(modify-phases %standard-phases
9130 (add-after 'unpack 'remove-vterm-tests
9131 ;; According to Debian these tests are cursed.
9132 ;; https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
9133 (lambda _
9134 (delete-file "urwid/tests/test_vterm.py"))))))
9135 (home-page "http://urwid.org")
9136 (synopsis "Console user interface library for Python")
9137 (description
9138 "Urwid is a curses-based UI/widget library for Python. It includes many
9139 features useful for text console applications.")
9140 (license license:lgpl2.1+)))
9141
9142 (define-public python-urwid-readline
9143 (package
9144 (name "python-urwid-readline")
9145 (version "0.13")
9146 (source
9147 (origin
9148 (method git-fetch)
9149 (uri (git-reference
9150 (url "https://github.com/rr-/urwid_readline")
9151 (commit version)))
9152 (file-name (git-file-name name version))
9153 (sha256
9154 (base32
9155 "0y9k86p31mlr9rwnrbljvfgl183r5j60yaj0r3scljn1m0mlg8qg"))))
9156 (build-system python-build-system)
9157 (arguments
9158 `(#:phases
9159 (modify-phases %standard-phases
9160 (replace 'check
9161 (lambda* (#:key tests? #:allow-other-keys)
9162 (when tests?
9163 (invoke "pytest" "-vv")))))))
9164 (propagated-inputs (list python-urwid))
9165 (native-inputs (list python-pytest))
9166 (home-page "https://github.com/rr-/urwid_readline")
9167 (synopsis "Text input widget for urwid that supports readline shortcuts")
9168 (description
9169 "This package provides a textbox edit widget for @code{python-urwid} that
9170 supports @code{readline} shortcuts.")
9171 (license license:expat)))
9172
9173 (define-public python-textdistance
9174 (package
9175 (name "python-textdistance")
9176 (version "4.2.1")
9177 (source
9178 (origin
9179 ;; There are no tests in the PyPI tarball.
9180 (method git-fetch)
9181 (uri (git-reference
9182 (url "https://github.com/life4/textdistance")
9183 (commit (string-append "v." version))))
9184 (file-name (git-file-name name version))
9185 (sha256
9186 (base32 "1g17i356fnny4k6hjr2ayy9k77jbvd6zzmngws2kbrnvhss1wgwf"))))
9187 (build-system python-build-system)
9188 (arguments
9189 `(#:test-target "pytest"
9190 #:phases
9191 (modify-phases %standard-phases
9192 (add-after 'unpack 'delete-external-test
9193 (lambda _
9194 ;; All tests in this file require external libraries.
9195 (delete-file "tests/test_external.py")
9196 #t)))))
9197 (native-inputs
9198 (list python-hypothesis
9199 python-isort
9200 python-numpy
9201 python-pytest
9202 python-pytest-runner
9203 python-tabulate))
9204 (home-page "https://github.com/life4/textdistance")
9205 (synopsis "Compute distance between the two texts")
9206 (description "@code{textdistance} is a pure Python library for comparing
9207 distance between two or more sequences by many algorithms.")
9208 (license license:expat)))
9209
9210 (define-public python-urwidtrees
9211 (package
9212 (name "python-urwidtrees")
9213 (version "1.0.3")
9214 (source
9215 (origin
9216 (method git-fetch)
9217 ;; package author intends on distributing via github rather than pypi:
9218 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
9219 (uri (git-reference
9220 (url "https://github.com/pazz/urwidtrees")
9221 (commit version)))
9222 (file-name (git-file-name name version))
9223 (sha256
9224 (base32
9225 "1y1vysx7jg0vbrarlsykhf7nmr8fc6k1fva1q3i98xq2m30s6r68"))))
9226 (build-system python-build-system)
9227 (arguments
9228 '(#:tests? #f)) ; no tests
9229 (propagated-inputs (list python-urwid))
9230 (native-inputs (list python-mock))
9231 (home-page "https://github.com/pazz/urwidtrees")
9232 (synopsis "Tree widgets for urwid")
9233 (description "Urwidtrees is a Widget Container API for the @code{urwid}
9234 toolkit. Use it to build trees of widgets.")
9235 (license license:gpl3+)))
9236
9237 (define-public python-ua-parser
9238 (package
9239 (name "python-ua-parser")
9240 (version "0.10.0")
9241 (source
9242 (origin
9243 (method url-fetch)
9244 (uri (pypi-uri "ua-parser" version))
9245 (sha256
9246 (base32
9247 "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
9248 (build-system python-build-system)
9249 (arguments
9250 `(#:tests? #f)) ;no test suite in release
9251 (native-inputs
9252 (list python-pyyaml))
9253 (home-page "https://github.com/ua-parser/uap-python")
9254 (synopsis "User agent parser")
9255 (description
9256 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
9257 (license license:asl2.0)))
9258
9259 (define-public python-user-agents
9260 (package
9261 (name "python-user-agents")
9262 (version "2.2.0")
9263 (source
9264 (origin
9265 (method url-fetch)
9266 (uri (pypi-uri "user-agents" version))
9267 (sha256
9268 (base32
9269 "09mddriffm9rkwr30081fy9n3cn976ms8pwc8p8hhlxnilbjavfk"))))
9270 (build-system python-build-system)
9271 (arguments
9272 `(#:tests? #f)) ;missing devices.json test file in release
9273 (propagated-inputs
9274 (list python-ua-parser))
9275 (home-page "https://github.com/selwin/python-user-agents")
9276 (synopsis "User Agent strings parsing library")
9277 (description
9278 "A library to identify devices (phones, tablets) and their capabilities by
9279 parsing (browser/HTTP) user agent strings.")
9280 (license license:expat)))
9281
9282 (define-public python-pydbus
9283 (package
9284 (name "python-pydbus")
9285 (version "0.6.0")
9286 (source
9287 (origin
9288 (method url-fetch)
9289 (uri (pypi-uri "pydbus" version))
9290 (sha256
9291 (base32 "0b0gipvz7vcfa9ddmwq2jrx16d4apb0hdnl5q4i3h8jlzwp1c1s2"))))
9292 (build-system python-build-system)
9293 (propagated-inputs (list python-pygobject))
9294 (home-page "https://github.com/LEW21/pydbus")
9295 (synopsis "Pythonic D-Bus library")
9296 (description "Pydbus provides a pythonic interface to the D-Bus
9297 message bus system. Pydbus can be used to access remote objects and
9298 also for object publication. It is based on PyGI, the Python GObject
9299 Introspection bindings, which is the recommended way to use GLib from Python.")
9300 (license license:lgpl2.1+)))
9301
9302 (define-public python-dbus
9303 (package
9304 (name "python-dbus")
9305 (version "1.2.18")
9306 (source
9307 (origin
9308 (method url-fetch)
9309 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
9310 "dbus-python-" version ".tar.gz"))
9311 (sha256
9312 (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj"))))
9313 (build-system gnu-build-system)
9314 (native-inputs
9315 (list pkg-config))
9316 (inputs
9317 `(("python" ,python-wrapper)
9318 ("dbus-glib" ,dbus-glib)))
9319 (synopsis "Python bindings for D-bus")
9320 (description "python-dbus provides bindings for libdbus, the reference
9321 implementation of D-Bus.")
9322 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
9323 (properties `((python2-variant . ,(delay python2-dbus))))
9324 (license license:expat)))
9325
9326 (define-public python2-dbus
9327 (package/inherit python-dbus
9328 (name "python2-dbus")
9329 (inputs `(("python" ,python-2)
9330 ,@(alist-delete "python"
9331 (package-inputs python-dbus))))
9332 (arguments
9333 `(#:configure-flags '("PYTHON_VERSION=2")))))
9334
9335 (define-public python-dbus-next
9336 (package
9337 (name "python-dbus-next")
9338 (version "0.2.3")
9339 (source
9340 (origin
9341 (method git-fetch)
9342 (uri (git-reference
9343 (url "https://github.com/altdesktop/python-dbus-next")
9344 (commit (string-append "v" version))))
9345 (file-name (git-file-name name version))
9346 (sha256
9347 (base32
9348 "1ahaz52kny1p9xxv6phvk4iq56rg8li390wywlxf2yslaij1188h"))))
9349 (build-system python-build-system)
9350 (native-inputs
9351 (list python-pytest))
9352 (home-page "https://github.com/altdesktop/python-dbus-next")
9353 (synopsis "Zero-dependency DBus library for Python with asyncio support")
9354 (description
9355 "This DBus library for Python aims to be a fully-featured high-level
9356 library primarily geared towards integration of applications into desktop and
9357 mobile environments.")
9358 (license license:expat)))
9359
9360 (define-public python-notify2
9361 (package
9362 (name "python-notify2")
9363 (version "0.3.1")
9364 (source
9365 (origin
9366 (method url-fetch)
9367 (uri (pypi-uri "notify2" version))
9368 (sha256
9369 (base32
9370 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
9371 (build-system python-build-system)
9372 (arguments `(#:tests? #f)) ; tests depend on system state
9373 (propagated-inputs
9374 (list python-dbus))
9375 (home-page "https://bitbucket.org/takluyver/pynotify2")
9376 (synopsis "Python interface to D-Bus notifications")
9377 (description
9378 "Pynotify2 provides a Python interface for sending D-Bus notifications.
9379 It is a reimplementation of pynotify in pure Python, and an alternative to
9380 the GObject Introspection bindings to libnotify for non-GTK applications.")
9381 (license (list license:bsd-2
9382 license:lgpl2.1+))))
9383
9384 ;; beautifulsoup4 has a totally different namespace than 3.x,
9385 ;; and pypi seems to put it under its own name, so I guess we should too
9386 (define-public python-beautifulsoup4
9387 (package
9388 (name "python-beautifulsoup4")
9389 (version "4.11.1")
9390 (source
9391 (origin
9392 (method url-fetch)
9393 (uri (pypi-uri "beautifulsoup4" version))
9394 (sha256
9395 (base32
9396 "14v68cpfzckfz63n9hnbsm271jvzvxscyijz83mhha7gcmdsb6md"))))
9397 (build-system python-build-system)
9398 (arguments
9399 '(#:phases (modify-phases %standard-phases
9400 (replace 'check
9401 (lambda* (#:key tests? #:allow-other-keys)
9402 (when tests?
9403 (invoke "pytest" "-vv")))))))
9404 (native-inputs
9405 (list python-pytest))
9406 (propagated-inputs
9407 (list python-soupsieve python-html5lib python-lxml))
9408 (home-page
9409 "https://www.crummy.com/software/BeautifulSoup/bs4/")
9410 (synopsis
9411 "Python screen-scraping library")
9412 (description
9413 "Beautiful Soup is a Python library designed for rapidly setting up
9414 screen-scraping projects. It offers Pythonic idioms for navigating,
9415 searching, and modifying a parse tree, providing a toolkit for
9416 dissecting a document and extracting what you need. It automatically
9417 converts incoming documents to Unicode and outgoing documents to UTF-8.")
9418 (license license:expat)))
9419
9420 (define-public python-soupsieve
9421 (package
9422 (name "python-soupsieve")
9423 (version "2.2.1")
9424 (source
9425 (origin
9426 (method url-fetch)
9427 (uri (pypi-uri "soupsieve" version))
9428 (sha256
9429 (base32
9430 "1k70gpn2d3vgdyxbdy536dgm4kchcraxz6lmgsfg3324iy2789q5"))))
9431 (build-system python-build-system)
9432 (arguments
9433 ;;XXX: 2 tests fail currently despite claming they were to be
9434 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
9435 ;;don't want to create a circular dependency.
9436 (list #:tests? #f
9437 #:phases
9438 #~(modify-phases %standard-phases
9439 ;; Circular dependency with python-beautifulsoup4.
9440 (delete 'sanity-check))))
9441 (home-page "https://github.com/facelessuser/soupsieve")
9442 (synopsis "CSS selector library")
9443 (description
9444 "Soup Sieve is a CSS selector library designed to be used with Beautiful
9445 Soup 4. It aims to provide selecting, matching, and filtering using modern
9446 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
9447 specifications up through the latest CSS level 4 drafts and beyond (though
9448 some are not yet implemented).")
9449 (license license:expat)))
9450
9451
9452 (define-public python-netifaces
9453 (package
9454 (name "python-netifaces")
9455 (version "0.11.0")
9456 (source
9457 (origin
9458 (method url-fetch)
9459 (uri (pypi-uri "netifaces" version))
9460 (sha256
9461 (base32
9462 "0cnajf5rl4w1sa72j921scbigr6zndig56cq8ggpx45jdqa7jfh4"))))
9463 (build-system python-build-system)
9464 (home-page "https://github.com/al45tair/netifaces")
9465 (synopsis
9466 "Python module for portable network interface information")
9467 (description
9468 "Netifaces is a Python module providing information on network
9469 interfaces in an easy and portable manner.")
9470 (license license:expat)))
9471
9472 (define-public python-networkx
9473 (package
9474 (name "python-networkx")
9475 (version "2.6.2")
9476 (source
9477 (origin
9478 (method url-fetch)
9479 (uri (pypi-uri "networkx" version))
9480 (sha256
9481 (base32 "1fqrq7gc0nn4rd4zqibw96cap75vb5nlixapkajwawp71jaz21i3"))))
9482 (build-system python-build-system)
9483 (arguments
9484 '(#:phases (modify-phases %standard-phases
9485 (replace 'check
9486 (lambda* (#:key tests? #:allow-other-keys)
9487 (if tests?
9488 (invoke "pytest" "-vv" "--pyargs" "networkx")
9489 (format #t "test suite not run~%")) #t)))))
9490 (propagated-inputs (list python-decorator))
9491 (native-inputs (list python-pytest))
9492 (home-page "https://networkx.github.io/")
9493 (synopsis
9494 "Python module for creating and manipulating graphs and networks")
9495 (description
9496 "NetworkX is a Python package for the creation, manipulation, and study
9497 of the structure, dynamics, and functions of complex networks.")
9498 (license license:bsd-3)))
9499
9500
9501 (define-public python-datrie
9502 (package
9503 (name "python-datrie")
9504 (version "0.8.2")
9505 (source
9506 (origin
9507 (method url-fetch)
9508 (uri (pypi-uri "datrie" version))
9509 (sha256
9510 (base32
9511 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
9512 (build-system python-build-system)
9513 (native-inputs
9514 (list python-cython python-hypothesis python-pytest
9515 python-pytest-runner))
9516 (home-page "https://github.com/kmike/datrie")
9517 (synopsis "Fast, efficiently stored trie for Python")
9518 (description
9519 "This package provides a fast, efficiently stored trie implementation for
9520 Python.")
9521 (license license:lgpl2.1+)))
9522
9523 (define-public python-amply
9524 (package
9525 (name "python-amply")
9526 (version "0.1.4")
9527 (source
9528 (origin
9529 (method url-fetch)
9530 (uri (pypi-uri "amply" version))
9531 (sha256
9532 (base32
9533 "0f1db9zp0rsfzxvaz55xwh8h5rfdgr9a2a715g06ic8nknsdq4nb"))))
9534 (build-system python-build-system)
9535 (propagated-inputs
9536 (list python-docutils python-pyparsing))
9537 (native-inputs
9538 (list python-setuptools-scm))
9539 (home-page "https://github.com/willu47/amply")
9540 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
9541 (description
9542 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
9543 structures.")
9544 (license license:epl1.0)))
9545
9546 (define-public python-pulp
9547 (package
9548 (name "python-pulp")
9549 (version "2.4")
9550 (source
9551 (origin
9552 (method url-fetch)
9553 (uri (pypi-uri "PuLP" version))
9554 (sha256
9555 (base32
9556 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
9557 (build-system python-build-system)
9558 (propagated-inputs
9559 (list python-amply))
9560 (home-page "https://github.com/coin-or/pulp")
9561 (synopsis "Linear Programming modeler")
9562 (description
9563 "PuLP is a Linear Programming modeler written in Python. PuLP can
9564 generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
9565 solve linear problems.")
9566 (license license:expat)))
9567
9568 (define-public python-py-tes
9569 (package
9570 (name "python-py-tes")
9571 (version "0.4.2")
9572 (source
9573 (origin
9574 (method url-fetch)
9575 (uri (pypi-uri "py-tes" version))
9576 (sha256
9577 (base32 "0b272y392v0mnq0f3sm5kgcx8fn4qwfbym89hhvqxz3xkganr4pn"))))
9578 (build-system python-build-system)
9579 (propagated-inputs
9580 (list python-attrs python-dateutil python-future python-requests))
9581 (home-page "https://github.com/ohsu-comp-bio/py-tes")
9582 (synopsis "Library for communicating with the GA4GH Task Execution API")
9583 (description "This package provides a library for communicating with the
9584 GA4GH Task Execution API.")
9585 (license license:expat)))
9586
9587 (define-public python-toposort
9588 (package
9589 (name "python-toposort")
9590 (version "1.6")
9591 (source
9592 (origin
9593 (method url-fetch)
9594 (uri (pypi-uri "toposort" version))
9595 (sha256
9596 (base32
9597 "1b2hppzjg3p006qya3yfdnp76dwq8frl97lypdam0kw4xxb8yhm7"))))
9598 (build-system python-build-system)
9599 (home-page "https://gitlab.com/ericvsmith/toposort")
9600 (synopsis "Topological sort algorithm")
9601 (description
9602 "This package provides an implementation of a topological sort
9603 algorithm.")
9604 (license license:asl2.0)))
9605
9606 (define-public python-three-merge
9607 (package
9608 (name "python-three-merge")
9609 (version "0.1.1")
9610 (source
9611 (origin
9612 ;; There are no tests in the PyPI tarball.
9613 (method git-fetch)
9614 (uri (git-reference
9615 (url "https://github.com/spyder-ide/three-merge")
9616 (commit (string-append "v" version))))
9617 (file-name (git-file-name name version))
9618 (sha256
9619 (base32 "1fw28swh6jq4myr09j7gv68l241b8vwg470ak5xv0x4xwh2a1m86"))))
9620 (build-system python-build-system)
9621 (arguments
9622 `(#:test-target "pytest"))
9623 (propagated-inputs
9624 (list python-diff-match-patch))
9625 (native-inputs
9626 (list python-flaky python-pytest python-pytest-cov
9627 python-pytest-runner python-pytest-timeout))
9628 (home-page "https://github.com/spyder-ide/three-merge")
9629 (synopsis "Library for merging two strings with respect to a base one")
9630 (description
9631 "This package provides a Python library to perform a 3-way merge between
9632 strings, based on @code{diff-match-patch}. This library performs merges at a
9633 character level, as opposed to most VCS systems, which opt for a line-based
9634 approach.")
9635 (license license:expat)))
9636
9637 (define-public snakemake
9638 (package
9639 (name "snakemake")
9640 (version "5.32.2")
9641 (source
9642 (origin
9643 (method url-fetch)
9644 (uri (pypi-uri "snakemake" version))
9645 (sha256
9646 (base32 "13013gdavwvyj1qr9xfi9fpwhb3km8c3z53bja5b7ic3sb2z6dgz"))))
9647 (build-system python-build-system)
9648 (arguments
9649 ;; TODO: Package missing test dependencies.
9650 '(#:tests? #f
9651 #:phases
9652 (modify-phases %standard-phases
9653 ;; For cluster execution Snakemake will call Python. Since there is
9654 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
9655 ;; this by calling the snakemake wrapper instead.
9656 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
9657 (lambda* (#:key outputs #:allow-other-keys)
9658 (substitute* "snakemake/executors/__init__.py"
9659 (("\\{sys.executable\\} -m snakemake")
9660 (string-append (assoc-ref outputs "out")
9661 "/bin/snakemake")))
9662 #t)))))
9663 (propagated-inputs
9664 (list python-appdirs
9665 python-configargparse
9666 python-datrie
9667 python-docutils
9668 python-gitpython
9669 python-jinja2
9670 python-jsonschema
9671 python-nbformat
9672 python-networkx
9673 python-psutil
9674 python-pulp
9675 python-pyyaml
9676 python-ratelimiter
9677 python-requests
9678 python-toposort
9679 python-wrapt))
9680 (home-page "https://snakemake.readthedocs.io")
9681 (synopsis "Python-based execution environment for make-like workflows")
9682 (description
9683 "Snakemake aims to reduce the complexity of creating workflows by
9684 providing a clean and modern domain specific specification language (DSL) in
9685 Python style, together with a fast and comfortable execution environment.")
9686 (license license:expat)))
9687
9688 (define-public snakemake-6
9689 (package
9690 (inherit snakemake)
9691 (name "snakemake")
9692 (version "6.15.5")
9693 (source
9694 (origin
9695 (method git-fetch)
9696 (uri (git-reference
9697 (url "https://github.com/snakemake/snakemake")
9698 (commit (string-append "v" version))))
9699 (file-name (git-file-name name version))
9700 (sha256
9701 (base32 "09yrpi9f86r9yvcm2dfjs5zy87c4j31bxama77kfd6y8yfrrjlai"))))
9702 (build-system python-build-system)
9703 (arguments
9704 '(#:phases
9705 (modify-phases %standard-phases
9706 ;; For cluster execution Snakemake will call Python. Since there is
9707 ;; no suitable GUIX_PYTHONPATH set, cluster execution will fail. We
9708 ;; fix this by calling the snakemake wrapper instead.
9709
9710 ;; XXX: There is another instance of sys.executable on line 692, but
9711 ;; it is not clear how to patch it.
9712 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
9713 (lambda* (#:key outputs #:allow-other-keys)
9714 (substitute* "snakemake/executors/__init__.py"
9715 (("\\{sys.executable\\} -m snakemake")
9716 (string-append (assoc-ref outputs "out")
9717 "/bin/snakemake")))))
9718 (replace 'check
9719 (lambda* (#:key tests? #:allow-other-keys)
9720 (when tests?
9721 (setenv "HOME" "/tmp")
9722 ;; This test attempts to change S3 buckets on AWS and fails
9723 ;; because there are no AWS credentials.
9724 (delete-file "tests/test_tibanna.py")
9725 (invoke "pytest")))))))
9726 (propagated-inputs
9727 (list python-appdirs
9728 python-configargparse
9729 python-connection-pool
9730 python-datrie
9731 python-docutils
9732 python-filelock
9733 python-gitpython
9734 python-jinja2
9735 python-jsonschema
9736 python-nbformat
9737 python-networkx
9738 python-psutil
9739 python-pulp
9740 python-pyyaml
9741 python-py-tes
9742 python-ratelimiter
9743 python-requests
9744 python-smart-open
9745 python-stopit
9746 python-tabulate
9747 python-toposort
9748 python-wrapt))
9749 (native-inputs
9750 (list git-minimal
9751 python-wrapper
9752 python-pytest
9753 python-pandas
9754 python-requests-mock))))
9755
9756 (define-public snakemake-7
9757 (package
9758 (inherit snakemake-6)
9759 (name "snakemake")
9760 (version "7.7.0")
9761 (source
9762 (origin
9763 (method git-fetch)
9764 (uri (git-reference
9765 (url "https://github.com/snakemake/snakemake")
9766 (commit (string-append "v" version))))
9767 (file-name (git-file-name name version))
9768 (sha256
9769 (base32 "1qrqbmx4cbis0wxr6dl2rdjv9v627sbirsz6v5c31vlbqwkvs04q"))))
9770 (build-system python-build-system)
9771 (arguments
9772 '(#:phases
9773 (modify-phases %standard-phases
9774 ;; For cluster execution Snakemake will call Python. Since there is
9775 ;; no suitable GUIX_PYTHONPATH set, cluster execution will fail. We
9776 ;; fix this by calling the snakemake wrapper instead.
9777 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
9778 (lambda* (#:key outputs #:allow-other-keys)
9779 (substitute* "snakemake/executors/__init__.py"
9780 (("self\\.get_python_executable\\(\\),")
9781 "")
9782 (("\"-m snakemake\"")
9783 (string-append "\"" (assoc-ref outputs "out")
9784 "/bin/snakemake" "\"")))))
9785 (replace 'check
9786 (lambda* (#:key tests? #:allow-other-keys)
9787 (when tests?
9788 (setenv "HOME" "/tmp")
9789 ;; This test attempts to change S3 buckets on AWS and fails
9790 ;; because there are no AWS credentials.
9791 (delete-file "tests/test_tibanna.py")
9792 ;; It's a similar story with this test, which requires access
9793 ;; to the Google Storage service.
9794 (delete-file "tests/test_google_lifesciences.py")
9795 (invoke "pytest")))))))
9796 (propagated-inputs
9797 (list python-appdirs
9798 python-configargparse
9799 python-connection-pool
9800 python-datrie
9801 python-docutils
9802 python-filelock
9803 python-gitpython
9804 python-jinja2
9805 python-jsonschema
9806 python-nbformat
9807 python-networkx
9808 python-psutil
9809 python-pulp
9810 python-pyyaml
9811 python-py-tes
9812 python-ratelimiter
9813 python-requests
9814 python-retry
9815 python-smart-open
9816 python-stopit
9817 python-tabulate
9818 python-toposort
9819 python-wrapt
9820 python-yte))
9821 (native-inputs
9822 (list git-minimal
9823 python-wrapper
9824 python-pytest
9825 python-pandas
9826 python-requests-mock))))
9827
9828 (define-public python-pyqrcode
9829 (package
9830 (name "python-pyqrcode")
9831 (version "1.2.1")
9832 (source
9833 (origin
9834 (method url-fetch)
9835 (uri (pypi-uri "PyQRCode" version))
9836 (sha256
9837 (base32
9838 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
9839 (build-system python-build-system)
9840 (home-page
9841 "https://github.com/mnooner256/pyqrcode")
9842 (synopsis "QR code generator")
9843 (description
9844 "Pyqrcode is a QR code generator written purely in Python with
9845 SVG, EPS, PNG and terminal output.")
9846 (license license:bsd-3)))
9847
9848 (define-public python-seaborn
9849 (package
9850 (name "python-seaborn")
9851 (version "0.11.2")
9852 (source (origin
9853 (method url-fetch)
9854 (uri (pypi-uri "seaborn" version))
9855 (sha256
9856 (base32
9857 "1xpl3zb945sihsiwm9q1yyx84sakk1phcg0fprj6i0j0dllfjifg"))
9858 (patches (search-patches "python-seaborn-kde-test.patch"
9859 "python-seaborn-2690.patch"))))
9860 (build-system python-build-system)
9861 (arguments
9862 `(#:phases (modify-phases %standard-phases
9863 (add-after 'unpack 'patch-more-tests
9864 (lambda _
9865 (substitute* "seaborn/tests/test_distributions.py"
9866 (("get_contour_color\\(ax\\.collections\\[0\\]\\)")
9867 "get_contour_color(ax.collections[0])")
9868 (("c\\.get_color\\(\\)") "get_contour_color(c)")
9869 (("def test_hue_ignores_cmap")
9870 "def skip_test_hue_ignores_cmap")
9871 (("def test_fill_artists")
9872 "def skip_test_fill_artists")
9873 (("def test_with_rug") "def skip_test_with_rug"))))
9874 (add-before 'check 'start-xserver
9875 (lambda _
9876 (system "Xvfb :1 &")
9877 (setenv "DISPLAY" ":1")))
9878 (replace 'check
9879 (lambda* (#:key tests? #:allow-other-keys)
9880 (when tests?
9881 (invoke "pytest" "seaborn")))))))
9882 (propagated-inputs (list python-pandas python-matplotlib python-numpy
9883 python-scipy))
9884 (native-inputs (list python-pytest xorg-server-for-tests))
9885 (home-page "https://seaborn.pydata.org/")
9886 (synopsis "Statistical data visualization")
9887 (description
9888 "Seaborn is a library for making attractive and informative statistical
9889 graphics in Python. It is built on top of matplotlib and tightly integrated
9890 with the PyData stack, including support for numpy and pandas data structures
9891 and statistical routines from scipy and statsmodels.")
9892 (license license:bsd-3)))
9893
9894
9895 (define-public python-session-info
9896 (package
9897 (name "python-session-info")
9898 (version "1.0.0")
9899 (source (origin
9900 (method url-fetch)
9901 (uri (pypi-uri "session_info" version))
9902 (sha256
9903 (base32
9904 "1dxnrgaxd2nb44n423mnrx119hmnh2yxdnzaw8mg60x7rh1mxniw"))))
9905 (build-system python-build-system)
9906 (propagated-inputs (list python-stdlib-list))
9907 (home-page "https://gitlab.com/joelostblom/session_info")
9908 (synopsis "Output version information for modules currently loaded")
9909 (description
9910 "This package outputs version information for modules loaded in the current
9911 session, Python, and the OS.")
9912 (license license:bsd-3)))
9913
9914 (define-public python-mpmath
9915 (package
9916 (name "python-mpmath")
9917 (version "1.2.1")
9918 (source (origin
9919 (method git-fetch)
9920 (uri (git-reference
9921 (url "https://github.com/fredrik-johansson/mpmath")
9922 (commit "c6a35f9ee7c294bcf4e0517bc76b268843db9499")))
9923 (file-name (git-file-name name version))
9924 (sha256
9925 (base32
9926 "0ifw59fjjls3mas104rh0frilvab2fhk1dkjraxlqni5n9l676im"))))
9927 (build-system python-build-system)
9928 (arguments
9929 `(#:phases
9930 (modify-phases %standard-phases
9931 (add-before 'build 'set-version
9932 (lambda _
9933 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)
9934 ;; ZIP does not support timestamps before 1980.
9935 (setenv "SOURCE_DATE_EPOCH" "315532800")))
9936 (replace 'check
9937 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
9938 (when tests?
9939 (add-installed-pythonpath inputs outputs)
9940 (invoke "pytest" "-vv")))))))
9941 (native-inputs
9942 (list python-pytest python-setuptools-scm))
9943 (home-page "https://mpmath.org")
9944 (synopsis "Arbitrary-precision floating-point arithmetic in python")
9945 (description
9946 "@code{mpmath} can be used as an arbitrary-precision substitute for
9947 Python's float/complex types and math/cmath modules, but also does much
9948 more advanced mathematics.")
9949 (license license:bsd-3)))
9950
9951 (define-public python-bigfloat
9952 (package
9953 (name "python-bigfloat")
9954 (version "0.3.0")
9955 (source
9956 (origin
9957 (method url-fetch)
9958 (uri (pypi-uri "bigfloat" version))
9959 (sha256
9960 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
9961 (build-system python-build-system)
9962 (inputs
9963 (list mpfr))
9964 (home-page "https://github.com/mdickinson/bigfloat")
9965 (synopsis "Arbitrary precision floating-point arithmetic for Python")
9966 (description
9967 "This package provides a Python interface to the MPFR library for
9968 multiprecision arithmetic.")
9969 (license license:lgpl3+)))
9970
9971 (define-public python-plac
9972 (package
9973 (name "python-plac")
9974 (version "1.3.5")
9975 (source
9976 (origin
9977 (method url-fetch)
9978 (uri (pypi-uri "plac" version))
9979 (sha256
9980 (base32 "1410h6jw1ksi24kb55xzkwqzba2qqjwiga1s354bf3s5s1jdig9q"))))
9981 (build-system python-build-system)
9982 (arguments
9983 '(#:phases
9984 (modify-phases %standard-phases
9985 (add-after 'unpack 'fix-tkinter
9986 (lambda _
9987 (substitute* "plac_tk.py"
9988 (("from Tkinter import Tk")
9989 "from tkinter import Tk")
9990 (("from ScrolledText import ScrolledText")
9991 "from tkinter.scrolledtext import ScrolledText")))))))
9992 (native-inputs
9993 `(("python-tkinter" ,python "tk")))
9994 (home-page "https://github.com/ialbert/plac")
9995 (synopsis "Command line arguments parser")
9996 (description "This package can generate command line parameters from
9997 function signatures.")
9998 (license license:bsd-3)))
9999
10000 (define-public python-yte
10001 (package
10002 (name "python-yte")
10003 (version "1.2.0")
10004 (source
10005 (origin
10006 (method url-fetch)
10007 (uri (pypi-uri "yte" version))
10008 (sha256
10009 (base32 "07hm1warpqi4ifqgkaz5sg887x4a44yhxafmpf835ywnpchg4s03"))))
10010 (build-system python-build-system)
10011 (arguments
10012 '(#:phases
10013 (modify-phases %standard-phases
10014 (add-after 'unpack 'set-HOME
10015 (lambda _ (setenv "HOME" "/tmp"))))))
10016 (propagated-inputs (list python-plac python-pyyaml))
10017 (home-page "https://github.com/koesterlab/yte")
10018 (synopsis "YAML template engine with Python expressions")
10019 (description
10020 "This package provides a YAML template engine with Python expressions.")
10021 (license license:expat)))
10022
10023 (define-public python-sympy
10024 (package
10025 (name "python-sympy")
10026 (version "1.11.1")
10027 (source
10028 (origin
10029 (method url-fetch)
10030 (uri (pypi-uri "sympy" version))
10031 (sha256
10032 (base32 "0n46x1rfy8c2a9za3yp2va5icigxj805f9fmiq8c1drwwvf808z3"))))
10033 (build-system python-build-system)
10034 (arguments
10035 `(#:phases
10036 (modify-phases %standard-phases
10037 (replace 'check
10038 (lambda* (#:key outputs #:allow-other-keys)
10039 (invoke
10040 (or (which "python3") (which "python"))
10041 "-c" "import sympy; sympy.test(\"/core\")"))))))
10042 (propagated-inputs
10043 (list python-mpmath))
10044 (home-page "https://www.sympy.org/")
10045 (synopsis "Python library for symbolic mathematics")
10046 (description
10047 "SymPy is a Python library for symbolic mathematics. It aims to become a
10048 full-featured computer algebra system (CAS) while keeping the code as simple
10049 as possible in order to be comprehensible and easily extensible.")
10050 (license license:bsd-3)))
10051
10052 (define-public python-q
10053 (package
10054 (name "python-q")
10055 (version "2.6")
10056 (source
10057 (origin
10058 (method url-fetch)
10059 (uri (pypi-uri "q" version))
10060 (sha256
10061 (base32
10062 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
10063 (build-system python-build-system)
10064 (home-page "https://github.com/zestyping/q")
10065 (synopsis "Quick-and-dirty debugging output for tired programmers")
10066 (description
10067 "q is a Python module for \"print\" style of debugging Python code. It
10068 provides convenient short API for print out of values, tracebacks, and
10069 falling into the Python interpreter.")
10070 (license license:asl2.0)))
10071
10072 (define-public python-xlib
10073 (package
10074 (name "python-xlib")
10075 (version "0.29")
10076 (source
10077 (origin
10078 (method git-fetch)
10079 (uri (git-reference
10080 (url "https://github.com/python-xlib/python-xlib")
10081 (commit version)))
10082 (file-name (git-file-name name version))
10083 (sha256
10084 (base32 "17cwd2knqm2vwrii3kqii9abwsnydhpg4byqx1vy7rjs6i1vbqfc"))))
10085 (build-system python-build-system)
10086 (arguments
10087 `(#:phases
10088 (modify-phases %standard-phases
10089 (add-before 'check 'start-xserver
10090 (lambda* (#:key inputs #:allow-other-keys)
10091 (let ((xorg-server (assoc-ref inputs "xorg-server")))
10092 ;; There must be a running X server and make check doesn't
10093 ;; start one. Therefore we must do it.
10094 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
10095 (setenv "DISPLAY" ":1")
10096 #t))))))
10097 (native-inputs
10098 (list python-mock python-setuptools-scm xorg-server))
10099 (propagated-inputs
10100 (list python-six))
10101 (home-page "https://github.com/python-xlib/python-xlib")
10102 (synopsis "Python X11 client library")
10103 (description
10104 "The Python X Library is intended to be a fully functional
10105 X client library for Python programs. It is useful to implement
10106 low-level X clients. It is written entirely in Python.")
10107 (license license:gpl2+)))
10108
10109 (define-public python-singledispatch
10110 (package
10111 (name "python-singledispatch")
10112 (version "3.4.0.3")
10113 (source
10114 (origin
10115 (method url-fetch)
10116 (uri (pypi-uri "singledispatch" version))
10117 (sha256
10118 (base32
10119 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
10120 (build-system python-build-system)
10121 (native-inputs
10122 (list python-six)) ; required for conversion, not at run-time
10123 (home-page
10124 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
10125 (synopsis "Backport of singledispatch feature from Python 3.4")
10126 (description
10127 "This library brings functools.singledispatch from Python 3.4 to Python
10128 2.6-3.3.")
10129 (license license:expat)))
10130
10131 ;; the python- version can be removed with python-3.5
10132 (define-public python-backports-abc
10133 (package
10134 (name "python-backports-abc")
10135 (version "0.5")
10136 (source
10137 (origin
10138 (method url-fetch)
10139 (uri (pypi-uri "backports_abc" version))
10140 (sha256
10141 (base32
10142 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
10143 (build-system python-build-system)
10144 (home-page "https://github.com/cython/backports_abc")
10145 (synopsis "Backport of additions to the 'collections.abc' module")
10146 (description
10147 "Python-backports-abc provides a backport of additions to the
10148 @code{collections.abc} module in Python-3.5.")
10149 (license license:psfl)))
10150
10151 (define-public python-backports-csv
10152 (package
10153 (name "python-backports-csv")
10154 (version "1.0.7")
10155 (source
10156 (origin
10157 (method url-fetch)
10158 (uri (pypi-uri "backports.csv" version))
10159 (sha256
10160 (base32 "0vdx5jlhs91iizc8j8l8811nqprwvdx39pgkdc82w2qkfgzxyxqj"))))
10161 (build-system python-build-system)
10162 (home-page "https://github.com/ryanhiebert/backports.csv")
10163 (synopsis "Backport of Python 3's csv module for Python 2")
10164 (description
10165 "Provides a backport of Python 3's @code{csv} module for parsing
10166 comma separated values. The API of the @code{csv} module in Python 2
10167 is drastically different from the @code{csv} module in Python 3.
10168 This is due, for the most part, to the difference between str in
10169 Python 2 and Python 3.")
10170 (license license:psfl)))
10171
10172 (define-public python-waf
10173 (package
10174 (name "python-waf")
10175 (version "2.0.19")
10176 (source (origin
10177 (method url-fetch)
10178 (uri (string-append "https://waf.io/"
10179 "waf-" version ".tar.bz2"))
10180 (sha256
10181 (base32
10182 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
10183 (build-system python-build-system)
10184 (arguments
10185 '(#:phases
10186 (modify-phases %standard-phases
10187 (replace 'build
10188 (lambda _
10189 ;; XXX: Find a way to add all extra tools.
10190 (let ((tools '("gccdeps"
10191 "clang_compilation_database")))
10192 (invoke "python" "waf-light" "configure" "build"
10193 (string-append "--tools="
10194 (string-join tools ","))))))
10195 (replace 'check
10196 (lambda _
10197 (invoke "python" "waf" "--version")))
10198 (replace 'install
10199 (lambda* (#:key outputs #:allow-other-keys)
10200 (let ((out (assoc-ref outputs "out")))
10201 (install-file "waf" (string-append out "/bin")))
10202 #t))
10203 ;; waf breaks when it is wrapped.
10204 (delete 'wrap))))
10205 (home-page "https://waf.io/")
10206 (synopsis "Python-based build system")
10207 (description
10208 "Waf is a Python-based framework for configuring, compiling and installing
10209 applications.")
10210 (license license:bsd-3)))
10211
10212 (define-public python-pyzmq
10213 (package
10214 (name "python-pyzmq")
10215 (version "22.3.0")
10216 (source
10217 (origin
10218 (method url-fetch)
10219 (uri (pypi-uri "pyzmq" version))
10220 (sha256
10221 (base32 "0737kizh53n4rjq1xbm6nhr0bq65xflg04i1d8fcky0nwwrw1pcf"))
10222 (snippet
10223 #~(begin
10224 (use-modules (guix build utils))
10225 ;; The bundled zeromq source code.
10226 (delete-file-recursively "bundled")
10227 ;; Delete cythonized files.
10228 (for-each delete-file
10229 (list "zmq/backend/cython/constants.c"
10230 "zmq/backend/cython/context.c"
10231 "zmq/backend/cython/_device.c"
10232 "zmq/backend/cython/error.c"
10233 "zmq/backend/cython/message.c"
10234 "zmq/backend/cython/_poll.c"
10235 "zmq/backend/cython/_proxy_steerable.c"
10236 "zmq/backend/cython/socket.c"
10237 "zmq/backend/cython/utils.c"
10238 "zmq/backend/cython/_version.c"
10239 "zmq/devices/monitoredqueue.c"))))))
10240 (build-system python-build-system)
10241 (arguments
10242 `(#:configure-flags
10243 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
10244 #:phases
10245 (modify-phases %standard-phases
10246 (add-before 'check 'build-extensions
10247 (lambda _
10248 ;; Cython extensions have to be built before running the tests.
10249 (invoke "python" "setup.py" "build_ext" "--inplace"))))))
10250 (inputs
10251 (list zeromq))
10252 (native-inputs
10253 (list pkg-config python-cython python-pytest))
10254 (home-page "https://github.com/zeromq/pyzmq")
10255 (synopsis "Python bindings for 0MQ")
10256 (description
10257 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
10258 (license license:bsd-4)))
10259
10260 (define-public python-immutabledict
10261 (package
10262 (name "python-immutabledict")
10263 (version "2.2.1")
10264 (source
10265 (origin
10266 (method url-fetch)
10267 (uri (pypi-uri "immutabledict" version))
10268 (sha256
10269 (base32 "0fpc4gbk7inpfbgdypsg6c18bmdjw8gwx47bjw0hvixn3gghxnqx"))))
10270 (build-system python-build-system)
10271 (arguments
10272 `(#:tests? #f)) ; no tests in PyPI release and no setup.py in GitHub
10273 (native-inputs
10274 (list python-pytest))
10275 (home-page "https://github.com/corenting/immutabledict")
10276 (synopsis "Immutable wrapper around dictionaries")
10277 (description
10278 "@dfn{immutabledict} is an immutable wrapper around dictionaries.
10279 It implements the complete mapping interface and can be used as a drop-in
10280 replacement for dictionaries where immutability is desired.")
10281 (license license:expat)))
10282
10283 (define-public python-emoji
10284 (package
10285 (name "python-emoji")
10286 (version "1.6.1")
10287 (source
10288 (origin
10289 (method url-fetch)
10290 (uri (pypi-uri "emoji" version))
10291 (sha256
10292 (base32 "0923mpixwq6hdpkgvi4r46alfvf608iq975rb8lnqpq29j71mmjk"))))
10293 (build-system python-build-system)
10294 (arguments
10295 `(#:phases
10296 (modify-phases %standard-phases
10297 (replace 'check
10298 (lambda* (#:key tests? #:allow-other-keys)
10299 (when tests?
10300 (invoke "python" "-m" "pytest")))))))
10301 (native-inputs
10302 (list python-pytest))
10303 (home-page "https://github.com/carpedm20/emoji/")
10304 (synopsis "Emoji terminal output for Python")
10305 (description "This package provides Emoji terminal output for Python. The
10306 entire set of Emoji codes as defined by the Unicode Consortium is supported in
10307 addition to a bunch of aliases.")
10308 (license license:bsd-3)))
10309
10310 (define-public python-sarge
10311 (package
10312 (name "python-sarge")
10313 (version "0.1.7.post1") ; post release only to correct errors in metadata
10314 (source
10315 (origin
10316 (method url-fetch)
10317 (uri (pypi-uri "sarge" version))
10318 (sha256
10319 (base32 "0g9a53mfnp96877n1yq2jdk1mcv3xm0d93iisvgcn2prdsp45zv4"))))
10320 (build-system python-build-system)
10321 (home-page "https://docs.red-dove.com/sarge/")
10322 (synopsis "Subprocess wrapper with command pipeline functionality")
10323 (description "@code{sarge} is a wrapper for subprocess which provides
10324 command pipeline functionality.")
10325 (license license:bsd-3)))
10326
10327 (define-public python-zipstream-new
10328 (package
10329 (name "python-zipstream-new")
10330 (version "1.1.8")
10331 (source
10332 (origin
10333 (method git-fetch) ; no tests in PyPI release
10334 (uri (git-reference
10335 (url "https://github.com/arjan-s/python-zipstream")
10336 (commit (string-append "v" version))))
10337 (file-name (git-file-name name version))
10338 (sha256
10339 (base32 "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv"))))
10340 (build-system python-build-system)
10341 (native-inputs
10342 (list python-nose))
10343 (home-page "https://github.com/arjan-s/python-zipstream")
10344 (synopsis "Zipfile generator that takes input files as well as streams")
10345 (description "@code{zipstream.py} is a zip archive generator based on
10346 @code{zipfile.py}. It was created to generate a zip file generator for
10347 streaming. This is beneficial for when you want to provide a downloadable
10348 archive of a large collection of regular files, which would be infeasible
10349 to generate the archive prior to downloading or of a very large file that
10350 you do not want to store entirely on disk or on memory.")
10351 ;; No copyright headers in the source. The LICENSE file indicates GPL3.
10352 (license license:gpl3)))
10353
10354 (define-public python-sentry-sdk
10355 (package
10356 (name "python-sentry-sdk")
10357 (version "1.5.1")
10358 (source
10359 (origin
10360 (method git-fetch) ; no tests in PyPI release
10361 (uri (git-reference
10362 (url "https://github.com/getsentry/sentry-python")
10363 (commit version)))
10364 (file-name (git-file-name name version))
10365 (sha256
10366 (base32 "128bm136l5zprr3sqqb8j3d6k5i1fhz853mzvh3w8g0w1dw763mx"))))
10367 (build-system python-build-system)
10368 (arguments
10369 `(#:phases
10370 (modify-phases %standard-phases
10371 (replace 'check
10372 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
10373 (when tests?
10374 (add-installed-pythonpath inputs outputs)
10375 (invoke "python" "-m" "pytest" "-k"
10376 (string-append
10377 ;; This test requires extra dependencies.
10378 "not test_auto_enabling_integrations"
10379 "_catches_import_error"
10380 ;; Tests below run pip command.
10381 " and not test_unhandled_exception"
10382 " and not test_timeout_error"
10383 " and not test_performance_no_error"
10384 " and not test_performance_error"
10385 " and not test_traces_sampler_gets_correct"
10386 "_values_in_sampling_context"
10387 " and not test_handled_exception"
10388 ;; Tests below require network.
10389 " and not test_crumb_capture"
10390 " and not test_crumb_capture"
10391 " and not test_crumb_capture_hint"
10392 " and not test_httplib_misuse"
10393 ;; Fails with IndexError.
10394 " and not test_session_mode_defaults_to"
10395 "_request_mode_in_wsgi_handler"))))))))
10396 (native-inputs
10397 (list python-django
10398 python-executing
10399 python-gevent
10400 python-jsonschema
10401 python-mock
10402 python-pyrsistent
10403 python-pytest
10404 python-pytest-cov
10405 python-pytest-django
10406 python-pytest-forked
10407 python-pytest-localserver
10408 python-werkzeug))
10409 (propagated-inputs
10410 (list python-certifi python-urllib3))
10411 (home-page "https://github.com/getsentry/sentry-python")
10412 (synopsis "Python SDK for Sentry")
10413 (description "This package provides a Python SDK for the Sentry
10414 application monitoring and error tracking software.")
10415 (license license:bsd-2)))
10416
10417 (define-public python-pep8
10418 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
10419 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
10420 ;; some dependents' test suites, and nothing more.
10421 (package
10422 (name "python-pep8")
10423 (version "1.7.0")
10424 (source
10425 (origin
10426 (method url-fetch)
10427 (uri (pypi-uri "pep8" version))
10428 (sha256
10429 (base32
10430 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
10431 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
10432 (build-system python-build-system)
10433 (home-page "https://pep8.readthedocs.org/")
10434 (synopsis "Python style guide checker")
10435 (description
10436 "This tools checks Python code against some of the style conventions in
10437 PEP 8.")
10438 (license license:expat)))
10439
10440 (define-public python-pep8-naming
10441 (package
10442 (name "python-pep8-naming")
10443 (version "0.13.0")
10444 (source
10445 (origin
10446 (method url-fetch)
10447 (uri (pypi-uri "pep8-naming" version))
10448 (sha256
10449 (base32
10450 "1dc0b6xw1cxp01v9zsv4ryk49rfs1lngfpvzsixgp8b7z3ffcf4z"))))
10451 (build-system python-build-system)
10452 (propagated-inputs (list python-flake8))
10453 (home-page "https://github.com/PyCQA/pep8-naming")
10454 (synopsis "Check PEP-8 naming conventions")
10455 (description
10456 "This package provides the @code{pep8-naming} Python module, a
10457 plugin for flake8 to check PEP-8 naming conventions.")
10458 (license license:expat)))
10459
10460 (define-public python-pep517
10461 (package
10462 (inherit python-pep517-bootstrap)
10463 (name "python-pep517")
10464 (arguments
10465 '(#:phases (modify-phases %standard-phases
10466 (replace 'check
10467 (lambda* (#:key tests? #:allow-other-keys)
10468 (delete-file "pytest.ini")
10469 (delete-file "tests/test_meta.py")
10470 (if tests?
10471 (invoke "pytest") #t))))))
10472 (native-inputs (list python-mock python-pytest python-testpath))))
10473
10474
10475 (define-public python-pep621
10476 (package
10477 (name "python-pep621")
10478 (version "0.4.0")
10479 (source
10480 (origin
10481 (method git-fetch)
10482 (uri (git-reference
10483 (url "https://github.com/FFY00/python-pep621")
10484 (commit version)))
10485 (file-name (git-file-name name version))
10486 (sha256
10487 (base32
10488 "0nzig7bmzf0xx5svxlf065mrzihr0ci4p1yaxka9flqjba98flpr"))))
10489 (build-system python-build-system)
10490 (arguments
10491 (list
10492 #:phases
10493 #~(modify-phases %standard-phases
10494 ;; XXX: PEP 517 manual build/install procedures copied from
10495 ;; python-isort.
10496 (replace 'build
10497 (lambda _
10498 ;; ZIP does not support timestamps before 1980.
10499 (setenv "SOURCE_DATE_EPOCH" "315532800")
10500 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
10501 (replace 'check
10502 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
10503 (when tests?
10504 (invoke "pytest" "-vv"
10505 ;; Two parameterized test_load tests are currently
10506 ;; failing (see:
10507 ;; https://github.com/FFY00/python-pep621/issues/14).
10508 "-k" "not test_load"))))
10509 (replace 'install
10510 (lambda* (#:key outputs #:allow-other-keys)
10511 (let ((whl (car (find-files "dist" "\\.whl$"))))
10512 (invoke "pip" "--no-cache-dir" "--no-input"
10513 "install" "--no-deps" "--prefix" #$output whl)))))))
10514 (propagated-inputs (list python-packaging))
10515 (native-inputs (list python-pypa-build python-pytest python-tomli))
10516 (home-page "https://github.com/FFY00/python-pep621")
10517 (synopsis "Dataclass for PEP 621 metadata")
10518 (description "This project does not implement the parsing of
10519 @file{pyproject.toml} containing PEP 621 metadata. Instead, given a Python
10520 data structure representing PEP 621 metadata (already parsed), it will
10521 validate this input and generate a PEP 643-compliant metadata
10522 file (e.g. @file{PKG-INFO}).")
10523 (license license:expat)))
10524
10525 (define-public python-pyflakes
10526 (package
10527 (name "python-pyflakes")
10528 (version "2.4.0")
10529 (source
10530 (origin
10531 (method url-fetch)
10532 (uri (pypi-uri "pyflakes" version))
10533 (sha256
10534 (base32
10535 "0k5jn8jpxni264wxf6cc3xcd1qckc0pww30bsd77mwzdf8l5ra05"))))
10536 (build-system python-build-system)
10537 (home-page "https://github.com/PyCQA/pyflakes")
10538 (synopsis "Passive checker of Python programs")
10539 (description
10540 "Pyflakes statically checks Python source code for common errors.")
10541 (license license:expat)))
10542
10543 (define-public python-pyflakes-2.2
10544 (package
10545 (inherit python-pyflakes)
10546 (version "2.2.0")
10547 (source (origin
10548 (method url-fetch)
10549 (uri (pypi-uri "pyflakes" version))
10550 (sha256
10551 (base32
10552 "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))
10553 (patches
10554 (search-patches "python-pyflakes-test-location.patch"))))))
10555
10556 (define-public python-mccabe
10557 (package
10558 (name "python-mccabe")
10559 (version "0.6.1")
10560 (source
10561 (origin
10562 (method url-fetch)
10563 (uri (pypi-uri "mccabe" version))
10564 (sha256
10565 (base32
10566 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
10567 (build-system python-build-system)
10568 (native-inputs
10569 (list python-toml python-pytest-bootstrap python-pytest-runner))
10570 (home-page "https://github.com/PyCQA/mccabe")
10571 (synopsis "McCabe checker, plugin for flake8")
10572 (description "This package provides a Flake8 plug-in to compute the McCabe
10573 cyclomatic complexity of Python source code.")
10574 (license license:expat)))
10575
10576 (define-public python-flake8
10577 (package
10578 (name "python-flake8")
10579 (version "4.0.1")
10580 (source (origin
10581 (method url-fetch)
10582 (uri (pypi-uri "flake8" version))
10583 (sha256
10584 (base32
10585 "03c7mnk34wfz7a0m5zq0273y94awz69fy5iww8alh4a4v96h6vl0"))))
10586 (build-system python-build-system)
10587 (arguments
10588 `(#:phases (modify-phases %standard-phases
10589 (replace 'check
10590 (lambda* (#:key tests? #:allow-other-keys)
10591 (when tests?
10592 (invoke "pytest" "-v")))))))
10593 (propagated-inputs
10594 (list python-entrypoints
10595 python-mccabe
10596 python-pycodestyle
10597 python-pyflakes))
10598 (native-inputs (list python-pytest))
10599 (home-page "https://gitlab.com/pycqa/flake8")
10600 (synopsis "The modular source code checker: pep8, pyflakes and co")
10601 (description
10602 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
10603 (license license:expat)))
10604
10605 (define-public python-flake8-3.8
10606 (package
10607 (inherit python-flake8)
10608 (version "3.8.4")
10609 (source (origin
10610 (method url-fetch)
10611 (uri (pypi-uri "flake8" version))
10612 (sha256
10613 (base32
10614 "0fvcrsbyzjpcli8ldbpsdbpmf238nkvwc1dy4hy82lf63rvfinma"))))
10615 (propagated-inputs
10616 (list python-pycodestyle-2.6 python-entrypoints python-pyflakes-2.2
10617 python-mccabe))))
10618
10619 (define-public python-flake8-blind-except
10620 (package
10621 (name "python-flake8-blind-except")
10622 (version "0.2.1")
10623 (source
10624 (origin
10625 (method url-fetch)
10626 (uri (pypi-uri "flake8-blind-except" version))
10627 (sha256
10628 (base32 "05nxsxfzfhwsm8gys90228imm2qbnqnw5y8bfqyfngnbkmd5fnpj"))))
10629 (build-system python-build-system)
10630 (arguments
10631 `(#:tests? #f)) ; no tests
10632 (native-inputs (list python-pycodestyle))
10633 (home-page "https://github.com/elijahandrews/flake8-blind-except")
10634 (synopsis "Check for blind @code{except:} statements")
10635 (description "This package provides a flake8 extension that checks for
10636 blind @code{except:} statements.")
10637 (license license:expat)))
10638
10639 (define-public python-flake8-bugbear
10640 (package
10641 (name "python-flake8-bugbear")
10642 (version "20.1.4")
10643 (source
10644 (origin
10645 (method url-fetch)
10646 (uri (pypi-uri "flake8-bugbear" version))
10647 (sha256
10648 (base32
10649 "0qiihb242fygzyrfynq913ak7cdmx8mcac9c0zk3y5gv16qf80mx"))))
10650 (build-system python-build-system)
10651 (arguments
10652 '(#:phases
10653 (modify-phases %standard-phases
10654 (add-before 'check 'disable-test
10655 (lambda _
10656 ;; This test fails on slow computers.
10657 (substitute* "tests/test_bugbear.py"
10658 (("def test_does_not_crash_on_any_valid_code")
10659 "def _test_does_not_crash_on_any_valid_code")))))))
10660 (native-inputs
10661 (list python-hypothesis python-hypothesmith))
10662 (propagated-inputs
10663 (list python-attrs python-flake8))
10664 (home-page "https://github.com/PyCQA/flake8-bugbear")
10665 (synopsis
10666 "Flake8 plugin for finding likely bugs and design problems in your program")
10667 (description
10668 "This package contains a plugin for Flake8 finding likely bugs and
10669 design problems in your program. It contains warnings that don't belong
10670 in pyflakes and pycodestyle.")
10671 (license license:expat)))
10672
10673 (define-public python-flake8-continuation
10674 (package
10675 (name "python-flake8-continuation")
10676 (version "1.0.5")
10677 (source
10678 (origin
10679 (method url-fetch)
10680 (uri (pypi-uri "flake8-continuation" version))
10681 (sha256
10682 (base32
10683 "0dzaw8jr7yhlabxhrblnrizxx17xa9ngjnbr1kidg5lapq6b9q1y"))))
10684 (build-system python-build-system)
10685 (propagated-inputs
10686 (list python-flake8 python-pycodestyle python-six))
10687 (home-page "https://github.com/planetlabs/flake8-continuation")
10688 (synopsis "Flake8 Line Continuation Plugin")
10689 (description "A Flake8 plugin that checks for the line continuation
10690 style to be in the preferred method according to PEP-8, specifically:
10691 @quotation
10692 The preferred way of wrapping long lines is by using Python's implied
10693 line continuation inside parentheses, brackets and braces. Long lines
10694 can be broken over multiple lines by wrapping expressions in parentheses.
10695 These should be used in preference to using a backslash for line continuation.
10696 @end quotation")
10697 (license license:asl2.0)))
10698
10699 (define-public python-flake8-debugger
10700 (package
10701 (name "python-flake8-debugger")
10702 (version "4.1.2")
10703 (source
10704 (origin
10705 (method url-fetch)
10706 (uri (pypi-uri "flake8-debugger" version))
10707 (sha256
10708 (base32 "0h1qlzbxxhjsw6kg3mcml9h8byy77m9a5z06z2dnvqs115b05c2j"))))
10709 (build-system python-build-system)
10710 (arguments
10711 `(#:tests? #f)) ; no tests in PyPI and no setup.py in GitHub
10712 (propagated-inputs
10713 (list python-flake8 python-pycodestyle))
10714 (home-page "https://github.com/jbkahn/flake8-debugger")
10715 (synopsis "@code{ipdb} and @code{pdb} statement checker plugin for flake8")
10716 (description "This package provides a Flake8 plugin that checks for
10717 @code{ipdb} and @code{pdb} imports and set traces, as well as
10718 @code{from IPython.terminal.embed}, @code{import InteractiveShellEmbed}
10719 and @code{InteractiveShellEmbed()()}.")
10720 (license license:expat)))
10721
10722 (define-public python-flake8-implicit-str-concat
10723 (package
10724 (name "python-flake8-implicit-str-concat")
10725 (version "0.2.0")
10726 (source
10727 (origin
10728 (method url-fetch)
10729 (uri (pypi-uri "flake8_implicit_str_concat" version))
10730 (sha256
10731 (base32 "1v0y29xlmbr2q12a4nnpm1dm9aw1mjiys1x8jif4z8c90d63cqm6"))))
10732 (build-system python-build-system)
10733 (arguments
10734 '(#:tests? #f ;no tests
10735 #:phases (modify-phases %standard-phases
10736 (add-after 'unpack 'loosen-requirements
10737 (lambda _
10738 ;; Permit newer versions of attrs. Remove for >0.2.
10739 (substitute* "setup.py"
10740 ((", <21") "")))))))
10741 (propagated-inputs
10742 (list python-attrs python-more-itertools))
10743 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
10744 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
10745 (description
10746 "This is a plugin for the Python code checking tool Flake8 to encourage
10747 correct string literal concatenation.
10748
10749 It looks for style problems like implicitly concatenated string literals on
10750 the same line (which can be introduced by the code formatting tool Black), or
10751 unnecessary plus operators for explicit string literal concatenation.")
10752 (license license:expat)))
10753
10754 (define-public python-flake8-print
10755 (package
10756 (name "python-flake8-print")
10757 (version "4.0.0")
10758 (source
10759 (origin
10760 (method url-fetch)
10761 (uri (pypi-uri "flake8-print" version))
10762 (sha256
10763 (base32 "05k5kkvyk6fdmvnacxfzypk74vbl3pmva13dqg1aljfwnxsc7yjs"))))
10764 (build-system python-build-system)
10765 (propagated-inputs
10766 (list python-flake8 python-pycodestyle python-six))
10767 (home-page "https://github.com/jbkahn/flake8-print")
10768 (synopsis "Print statement checker plugin for Flake8")
10769 (description
10770 "This plugin for Flake8 checks for @code{print} statements in Python
10771 files.")
10772 (license license:expat)))
10773
10774 (define-public python-flake8-pyi
10775 (package
10776 (name "python-flake8-pyi")
10777 (version "20.10.0")
10778 (source
10779 (origin
10780 (method url-fetch)
10781 (uri (pypi-uri "flake8-pyi" version))
10782 (sha256
10783 (base32
10784 "0b27n2pmrxcc7nva4wp2i7mrag0fnq0firvhg1ljq593a45b5qyf"))))
10785 (build-system python-build-system)
10786 (propagated-inputs
10787 (list python-attrs python-flake8 python-pyflakes))
10788 (home-page "https://github.com/ambv/flake8-pyi")
10789 (synopsis
10790 "Flake8 plugin that provides specializations for type hinting stub files")
10791 (description
10792 "This package contains a plugin that provides specializations for
10793 type hinting stub files, especially interesting for linting typeshed. It
10794 adds the @file{.pyi} extension to the default value of the @code{--filename}
10795 command-line argument to Flake8. This means stubs are linted by default with
10796 this plugin enabled, without needing to explicitly list every file. It
10797 modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
10798 expressions after the entire file has been read. This enables support for
10799 first-class forward references that stub files use.")
10800 (license license:expat)))
10801
10802 (define-public python-flake8-pie
10803 (package
10804 (name "python-flake8-pie")
10805 (version "0.5.0")
10806 (source
10807 (origin
10808 (method url-fetch)
10809 (uri (pypi-uri "flake8-pie" version))
10810 (sha256
10811 (base32 "0kgipl5gljlp7aa7ykx15pswpzkd0d0qiznihb2z0d9a73181dyd"))))
10812 (build-system python-build-system)
10813 (home-page "https://github.com/sbdchd/flake8-pie")
10814 (synopsis "Flake8 extension that implements lints")
10815 (description
10816 "This package provides a flake8 extension that implements miscellaneous
10817 lints.")
10818 (license license:bsd-2)))
10819
10820 (define-public python-flake8-quotes
10821 (package
10822 (name "python-flake8-quotes")
10823 (version "3.2.0")
10824 (source
10825 (origin
10826 (method url-fetch)
10827 (uri (pypi-uri "flake8-quotes" version))
10828 (sha256
10829 (base32
10830 "0ph5s6lxgpzz4an0ax6s5xjqypqmngwr5b1i0h9pqhzghplic49z"))))
10831 (build-system python-build-system)
10832 (propagated-inputs
10833 (list python-flake8))
10834 (home-page "https://github.com/zheller/flake8-quotes/")
10835 (synopsis "Flake8 lint for quotes")
10836 (description "This package provides a Flake8 lint for quotes.")
10837 (license license:expat)))
10838
10839 (define-public python-flake8-todo
10840 (package
10841 (name "python-flake8-todo")
10842 (version "0.7")
10843 (source
10844 (origin
10845 (method url-fetch)
10846 (uri (pypi-uri "flake8-todo" version))
10847 (sha256
10848 (base32
10849 "05arm0sch3r8248035kilmf01z0mxsahw6vpbbz0d343zy8m8k3f"))))
10850 (build-system python-build-system)
10851 (propagated-inputs
10852 (list python-pycodestyle))
10853 (home-page "https://github.com/schlamar/flake8-todo")
10854 (synopsis "TODO notes checker, plugin for flake8")
10855 (description
10856 "This package provides the @code{flake8-todo} Python module, a
10857 TODO notes checker plugin for flake8.")
10858 (license license:expat)))
10859
10860 (define-public python-flake8-isort
10861 (package
10862 (name "python-flake8-isort")
10863 (version "4.1.1")
10864 (source
10865 (origin
10866 (method url-fetch)
10867 (uri (pypi-uri "flake8-isort" version))
10868 (sha256
10869 (base32 "05r7z0j9rqgy0a9261bhisairrz6w8hy5hy5kf2mhvhfnx53056q"))))
10870 (build-system python-build-system)
10871 (arguments
10872 (list
10873 #:phases
10874 #~(modify-phases %standard-phases
10875 (replace 'check
10876 (lambda* (#:key tests? #:allow-other-keys)
10877 (when tests?
10878 (invoke "pytest" "-vv")))))))
10879 (propagated-inputs (list python-flake8 python-isort python-testfixtures))
10880 (native-inputs (list python-pytest))
10881 (home-page "https://github.com/gforcada/flake8-isort")
10882 (synopsis "Flake8 plugin integrating isort")
10883 (description "This package provides a flake8 plugin that integrates isort,
10884 extending flake8 so that it can warn about badly sorted Python import
10885 directives.")
10886 (license license:gpl2+)))
10887
10888 (define-public python-autoflake
10889 (package
10890 (name "python-autoflake")
10891 (version "1.3.1")
10892 (source
10893 (origin
10894 (method url-fetch)
10895 (uri (pypi-uri "autoflake" version))
10896 (sha256
10897 (base32 "0nzr057dbmgprp4a52ymafdkdd5zp2wcqf42913xc7hhvvdbj338"))))
10898 (build-system python-build-system)
10899 (propagated-inputs
10900 (list python-pyflakes))
10901 (home-page "https://github.com/myint/autoflake")
10902 (synopsis "Removes unused imports and unused variables")
10903 (description
10904 "@code{autoflake} removes unused imports and unused variables from Python
10905 code as reported by @code{pyflakes}.
10906
10907 By default, it only removes unused imports for modules that are part of the
10908 standard library. Removal of unused variables is also disabled by default.
10909 It also removes useless @code{pass} statements.")
10910 (license license:expat)))
10911
10912 (define-public python-mistune
10913 (package
10914 (name "python-mistune")
10915 (version "0.8.4")
10916 (source
10917 (origin
10918 (method url-fetch)
10919 (uri (pypi-uri "mistune" version))
10920 (sha256
10921 (base32
10922 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
10923 (build-system python-build-system)
10924 (native-inputs
10925 (list python-nose python-cython))
10926 (home-page "https://github.com/lepture/mistune")
10927 (synopsis "Markdown parser in pure Python")
10928 (description "This package provides a fast markdown parser in pure
10929 Python.")
10930 (license license:bsd-3)))
10931
10932 ;; 2.0 is not released yet, but some packages have started using it.
10933 (define-public python-mistune-next
10934 (package
10935 (inherit python-mistune)
10936 (name "python-mistune-next")
10937 (version "2.0.0rc1")
10938 (source (origin
10939 (method url-fetch)
10940 (uri (pypi-uri "mistune" version))
10941 (sha256
10942 (base32
10943 "1nd7iav1ixh9hlj4hxn6lmpava88d86ys8rqm30wgvr7gjlxnas5"))))
10944 (native-inputs (list python-nose))))
10945
10946 (define-public python-markdown
10947 (package
10948 (name "python-markdown")
10949 (version "3.3.4")
10950 (source
10951 (origin
10952 (method url-fetch)
10953 (uri (pypi-uri "Markdown" version))
10954 (sha256
10955 (base32
10956 "0jbs73nincha8fkfxx267sfxac6pl0ckszjbqbb8gk4dhs8v9d9i"))))
10957 (build-system python-build-system)
10958 (native-inputs
10959 (list python-nose python-pyyaml))
10960 (home-page "https://python-markdown.github.io/")
10961 (synopsis "Python implementation of Markdown")
10962 (description
10963 "This package provides a Python implementation of John Gruber's
10964 Markdown. The library features international input, various Markdown
10965 extensions, and several HTML output formats. A command line wrapper
10966 markdown_py is also provided to convert Markdown files to HTML.")
10967 (license license:bsd-3)))
10968
10969 (define-public python-mdx-include
10970 (package
10971 (name "python-mdx-include")
10972 (version "1.4.1")
10973 (source (origin
10974 ;; Use git, as there are some test files missing from the PyPI
10975 ;; release, see https://github.com/neurobin/mdx_include/issues/9
10976 (method git-fetch)
10977 (uri (git-reference
10978 (url "https://github.com/neurobin/mdx_include")
10979 ;; Releases are not tagged on github, see
10980 ;; https://github.com/neurobin/mdx_include/issues/10
10981 (commit "683e6be7a00a1ef4d673ad0294458fa61bc97286")))
10982 (file-name (git-file-name name version))
10983 (sha256
10984 (base32
10985 "0qpzgln4ybd7pl0m9s19dv60aq9cvwrk7x3yz96kjhcywaa5w386"))))
10986 (build-system python-build-system)
10987 (arguments
10988 '(#:phases
10989 (modify-phases %standard-phases
10990 (add-before 'check 'disable-test-requiring-network
10991 (lambda _
10992 (substitute* "mdx_include/test/test.py"
10993 (("(\\s+def )test_(cache|config|default)\\(" _ pre post)
10994 (string-append pre "__off__test_" post "("))))))))
10995 (propagated-inputs (list python-cyclic python-markdown python-rcslice))
10996 (home-page "https://github.com/neurobin/mdx_include")
10997 (synopsis "Python Markdown extension to include local or remote files")
10998 (description "Include extension for Python Markdown. It lets you include
10999 local or remote (downloadable) files into your markdown at arbitrary
11000 positions.
11001
11002 This project is motivated by markdown-include and provides the same
11003 functionalities with some extras.")
11004 (license license:bsd-3)))
11005
11006 (define-public python-ptyprocess
11007 (package
11008 (name "python-ptyprocess")
11009 (version "0.5.2")
11010 (source
11011 (origin
11012 (method url-fetch)
11013 (uri (pypi-uri "ptyprocess" version))
11014 (sha256
11015 (base32
11016 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
11017 (build-system python-build-system)
11018 (native-inputs
11019 (list python-nose))
11020 (arguments
11021 `(#:phases
11022 (modify-phases %standard-phases
11023 (replace 'check
11024 (lambda _ (invoke "nosetests"))))))
11025 (home-page "https://github.com/pexpect/ptyprocess")
11026 (synopsis "Run a subprocess in a pseudo terminal")
11027 (description
11028 "This package provides a Python library used to launch a subprocess in a
11029 pseudo terminal (pty), and interact with both the process and its pty.")
11030 (license license:isc)))
11031
11032 (define-public python-cram
11033 (package
11034 (name "python-cram")
11035 (version "0.7")
11036 (home-page "https://bitheap.org/cram/")
11037 (source (origin
11038 (method url-fetch)
11039 (uri (list (string-append home-page "cram-"
11040 version ".tar.gz")
11041 (pypi-uri "cram" version)))
11042 (sha256
11043 (base32
11044 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
11045 (arguments
11046 '(#:phases
11047 (modify-phases %standard-phases
11048 (add-after 'unpack 'patch-source
11049 (lambda _
11050 (substitute* (find-files "cram" ".*\\.py$")
11051 ;; Replace default shell path.
11052 (("/bin/sh") (which "sh")))
11053 (substitute* (find-files "tests" ".*\\.t$")
11054 (("md5") "md5sum")
11055 (("/bin/bash") (which "bash"))
11056 (("/bin/sh") (which "sh")))
11057 (substitute* "cram/_test.py"
11058 ;; This hack works around a bug triggered by substituting
11059 ;; the /bin/sh paths. "tests/usage.t" compares the output of
11060 ;; "cram -h", which breaks the output at 80 characters. This
11061 ;; causes the line showing the default shell to break into two
11062 ;; lines, but the test expects a single line...
11063 (("env\\['COLUMNS'\\] = '80'")
11064 "env['COLUMNS'] = '160'"))
11065
11066 (substitute* "Makefile"
11067 ;; Recent versions of python-coverage have caused the test
11068 ;; coverage to decrease (as of version 0.7). Allow that.
11069 (("--fail-under=100")
11070 "--fail-under=90"))
11071
11072 #t))
11073 (replace 'check
11074 ;; The test phase uses the built library and executable.
11075 (lambda* (#:key inputs outputs #:allow-other-keys)
11076 (add-installed-pythonpath inputs outputs)
11077 (setenv "PATH" (string-append (getenv "PATH") ":"
11078 (assoc-ref outputs "out") "/bin"))
11079 (invoke "make" "test"))))))
11080 (build-system python-build-system)
11081 (native-inputs
11082 (list python-coverage which))
11083 (synopsis "Simple testing framework for command line applications")
11084 (description
11085 "Cram is a functional testing framework for command line applications.
11086 Cram tests look like snippets of interactive shell sessions. Cram runs each
11087 command and compares the command output in the test with the command’s actual
11088 output.")
11089 (license license:gpl2+)))
11090
11091 (define-public python-crccheck
11092 (package
11093 (name "python-crccheck")
11094 (version "1.1")
11095 (source
11096 (origin
11097 (method url-fetch)
11098 (uri (pypi-uri "crccheck" version))
11099 (sha256
11100 (base32 "15psg7wjfbpmmry54ffwg6pg63mnv7mkwmb0a7884axnr8qj55j5"))))
11101 (build-system python-build-system)
11102 (arguments
11103 (list
11104 #:phases
11105 #~(modify-phases %standard-phases
11106 (replace 'check
11107 (lambda* (#:key tests? #:allow-other-keys)
11108 (when tests?
11109 (invoke "pytest" "-vv")))))))
11110 (native-inputs (list python-pytest))
11111 (home-page "https://sourceforge.net/projects/crccheck/")
11112 (synopsis "Calculation library for CRCs and checksums")
11113 (description "@code{crccheck} is a calculation library for CRCs and
11114 checksums. It implement more than a hundred checksum routines.")
11115 (license license:gpl3+)))
11116
11117 (define-public python-crashtest
11118 (package
11119 (name "python-crashtest")
11120 (version "0.3.1")
11121 (source
11122 (origin
11123 (method url-fetch)
11124 (uri (pypi-uri "crashtest" version))
11125 (sha256
11126 (base32 "1p9p7mn8x2j9psc4jxab98897v4i9s4fliyfw8rp8v4bx1n7pjj2"))))
11127 (build-system python-build-system)
11128 (home-page "https://github.com/sdispater/crashtest")
11129 (synopsis "Manage Python errors with ease")
11130 (description
11131 "Python library that makes exceptions handling and inspection easier.")
11132 (license license:expat)))
11133
11134 (define-public python-stdlib-list
11135 (package
11136 (name "python-stdlib-list")
11137 (version "0.8.0")
11138 (source (origin
11139 (method url-fetch)
11140 (uri (pypi-uri "stdlib-list" version))
11141 (sha256
11142 (base32
11143 "17vdn4q0sdlndc2fr9svapxx6366hnrhkn0fswp1xmr0jxqh7rd1"))))
11144 (build-system python-build-system)
11145 (arguments
11146 `(#:tests? #f)) ; Tests require more dependencies.
11147 (native-inputs
11148 (list python-sphinx))
11149 (home-page "https://github.com/jackmaney/python-stdlib-list")
11150 (synopsis "Python Standard Libraries")
11151 (description "This package contains a list of Python Standard Libraries.")
11152 (license license:expat)))
11153
11154 (define-public python-stopit
11155 (package
11156 (name "python-stopit")
11157 (version "1.1.2")
11158 (source
11159 (origin
11160 (method url-fetch)
11161 (uri (pypi-uri "stopit" version))
11162 (sha256
11163 (base32 "0vcrcvky249q4rbgmwf18mwmnypfk8jpn4h6knyjf86r7xc9rwzp"))))
11164 (build-system python-build-system)
11165 (arguments '(#:tests? #f)) ;there are none
11166 (home-page "https://pypi.python.org/pypi/stopit")
11167 (synopsis "Timeout control decorator and context managers")
11168 (description
11169 "Raise asynchronous exceptions in other threads, control the timeout of
11170 blocks or callables with two context managers and two decorators.")
11171 (license license:expat)))
11172
11173 (define-public python-straight-plugin
11174 (package
11175 (name "python-straight-plugin")
11176 (version "1.4.1")
11177 (source
11178 (origin
11179 (method url-fetch)
11180 (uri (pypi-uri "straight.plugin" version))
11181 (sha256
11182 (base32
11183 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
11184 (build-system python-build-system)
11185 (home-page "https://github.com/ironfroggy/straight.plugin")
11186 (synopsis "Simple namespaced plugin facility")
11187 (description "Straight Plugin provides a type of plugin you can create from
11188 almost any existing Python modules, and an easy way for outside developers to
11189 add functionality and customization to your projects with their own plugins.")
11190 (license license:expat)))
11191
11192 (define-public python-pysendfile
11193 (package
11194 (name "python-pysendfile")
11195 (version "2.0.1")
11196 (source
11197 (origin
11198 (method url-fetch)
11199 (uri (pypi-uri "pysendfile" version))
11200 (sha256
11201 (base32 "05qf0m32isflln1zjgxlpw0wf469lj86vdwwqyizp1h94x5l22ji"))))
11202 (build-system python-build-system)
11203 (arguments
11204 (list
11205 #:phases #~(modify-phases %standard-phases
11206 (replace 'check
11207 (lambda* (#:key tests? #:allow-other-keys)
11208 (when tests?
11209 (setenv "HOME" "/tmp")
11210 (invoke "make" "test")))))))
11211 (home-page "https://github.com/giampaolo/pysendfile")
11212 (synopsis "Python interface to sendfile(2)")
11213 (description "The @{pysendfile} Python library provides an interface to
11214 the @code{sendfile(2)} system call.")
11215 (license license:expat)))
11216
11217 (define-public python-pyftpdlib
11218 (package
11219 (name "python-pyftpdlib")
11220 (version "1.5.6")
11221 (source
11222 (origin
11223 (method url-fetch)
11224 (uri (pypi-uri "pyftpdlib" version))
11225 (sha256
11226 (base32 "0pnv2byzmzg84q5nmmhn1xafvfil85qa5y52bj455br93zc5b9px"))))
11227 (build-system python-build-system)
11228 (arguments
11229 (list
11230 #:phases
11231 #~(modify-phases %standard-phases
11232 (replace 'check
11233 (lambda* (#:key tests? #:allow-other-keys)
11234 (when tests?
11235 (invoke
11236 "pytest"
11237 ;; Deselect failing tests.
11238 "-k" (string-append
11239 ;; Using Pytest instead of the Makefile causes the
11240 ;; command line tests to fail on unknown Pytest
11241 ;; arguments.
11242 "not TestCommandLineParser "
11243 ;; https://github.com/giampaolo/pyftpdlib/issues/478
11244 "and not test_use_gmt_times "
11245 ;; https://github.com/giampaolo/pyftpdlib/issues/550
11246 "and not test_masquerade_address "
11247 ;; https://github.com/giampaolo/pyftpdlib/issues/500
11248 "and not test_rest_on_stor "
11249 "and not test_stor_ascii"))))))))
11250 (native-inputs (list python-psutil python-pytest))
11251 (propagated-inputs (list python-pyopenssl python-pysendfile))
11252 (home-page "https://github.com/giampaolo/pyftpdlib/")
11253 (synopsis "Asynchronous and scalable Python FTP server library")
11254 (description "The Python FTP server library provides a high-level
11255 interface to write efficient, scalable and asynchronous FTP servers with
11256 Python. It is the most complete @url{http://www.faqs.org/rfcs/rfc959.html,
11257 RFC-959} FTP server implementation available for Python, and has the following
11258 traits:
11259 @itemize
11260 @item
11261 It is lightweight, fast and scalable.
11262 @item
11263 It uses the @code{sendfile(2)} system call for uploads.
11264 @item
11265 It uses @code{epoll}, @code{kqueue} and @code{select} to handle concurrency
11266 asynchronously.
11267 @item
11268 It supports FTPS (@url{http://tools.ietf.org/html/rfc4217, RFC-4217}),
11269 IPv6 (RFC-2428), Unicode file names (@url{http://tools.ietf.org/html/rfc2640,
11270 RFC-2640}) and MLSD/MLST commands (RFC-3659).
11271 @item
11272 It has a flexible system of @samp{authorizers} able to manage both
11273 @samp{virtual} and @samp{real} users.
11274 @end itemize")
11275 (license license:expat)))
11276
11277 (define-public python-fs
11278 (package
11279 (name "python-fs")
11280 (version "2.4.16")
11281 (source
11282 (origin
11283 (method url-fetch)
11284 (uri (pypi-uri "fs" version))
11285 (sha256
11286 (base32 "04ykd7q49qgv13hl2n71lzihs2c9099r50lmd85vgx0k2bawg5xf"))))
11287 (build-system python-build-system)
11288 (arguments
11289 (list
11290 #:phases #~(modify-phases %standard-phases
11291 (replace 'check
11292 (lambda* (#:key tests? #:allow-other-keys)
11293 (when tests?
11294 (setenv "HOME" "/tmp")
11295 (invoke "pytest" "-m" "not slow")))))))
11296 (propagated-inputs
11297 (list python-appdirs python-pytz python-six))
11298 (native-inputs
11299 (list python-mock python-parameterized python-pyftpdlib python-pytest))
11300 (home-page "https://github.com/PyFilesystem/pyfilesystem2/")
11301 (synopsis "File system abstraction layer for Python")
11302 (description "PyFilesystem's @code{FS} object is a file system abstraction
11303 sharing similarities with Python's own @code{file} object for single files.
11304 It allows opening all the files under a given directory recursively, as a
11305 single @code{FS} object. This enables, for example, counting the combined
11306 number of lines in the contained files easily.")
11307 (license license:expat)))
11308
11309 ;;; Tests are left out in the main package to avoid cycles.
11310 (define-public python-fonttools
11311 (hidden-package
11312 (package
11313 (name "python-fonttools")
11314 (version "4.28.5")
11315 (source (origin
11316 (method url-fetch)
11317 (uri (pypi-uri "fonttools" version ".zip"))
11318 (sha256
11319 (base32
11320 "1jhl5n3rfqq7fznvsh6r80n7ylap1a7ppq1040y8cflhyz80ap2l"))))
11321 (build-system python-build-system)
11322 (native-inputs
11323 (list unzip))
11324 (arguments '(#:tests? #f))
11325 (home-page "https://github.com/fonttools/fonttools")
11326 (synopsis "Tools to manipulate font files")
11327 (description
11328 "FontTools/TTX is a library to manipulate font files from Python. It
11329 supports reading and writing of TrueType/OpenType fonts, reading and writing
11330 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
11331 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
11332 from an XML-based format.")
11333 (license license:expat))))
11334
11335 ;;; Rename 'python-fonttools' in next cycle, renaming the current
11336 ;;; 'python-fonttools' to 'python-fonttools-minimal'.
11337 (define-public python-fonttools-full
11338 (package/inherit python-fonttools
11339 (arguments
11340 (substitute-keyword-arguments (package-arguments python-fonttools)
11341 ((#:tests? _ #f)
11342 (not (%current-target-system)))
11343 ((#:phases phases '%standard-phases)
11344 `(modify-phases ,phases
11345 (replace 'check
11346 (lambda* (#:key tests? #:allow-other-keys)
11347 (when tests?
11348 (invoke "pytest" "-vv"
11349 "-k"
11350 ;; XXX: These tests need .trm files that are
11351 ;; not shipped with the PyPI release.
11352 (format #f "not ~a"
11353 (string-join
11354 '("test_read_fontdimens_mathsy"
11355 "test_read_fontdimens_mathex"
11356 "test_read_fontdimens_vanilla"
11357 "test_read_boundary_char"
11358 "fontTools.tfmLib")
11359 " and not "))))))))))
11360 (native-inputs
11361 (modify-inputs (package-native-inputs python-fonttools)
11362 (append python-pytest)))
11363 (propagated-inputs
11364 (list python-brotli
11365 python-fs
11366 python-lxml
11367 python-lz4
11368 python-scipy
11369 python-unicodedata2
11370 python-zopfli))
11371 (properties (alist-delete 'hidden? (package-properties python-fonttools)))))
11372
11373 (define-public python-fonttools-next
11374 (package
11375 (inherit python-fonttools-full)
11376 (version "4.32.0")
11377 (source (origin
11378 (inherit (package-source python-fonttools-full))
11379 (method url-fetch)
11380 (uri (pypi-uri "fonttools" version ".zip"))
11381 (sha256
11382 (base32
11383 "14nk43z0dmznypm3zp4sdc04x1y608jawlnmwdkk32a947khvaar"))))))
11384
11385 (define-public python-ly
11386 (package
11387 (name "python-ly")
11388 (version "0.9.5")
11389 (source
11390 (origin
11391 (method url-fetch)
11392 (uri (pypi-uri name version))
11393 (sha256
11394 (base32
11395 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
11396 (build-system python-build-system)
11397 (arguments
11398 ;; FIXME: Some tests need network access.
11399 '(#:tests? #f))
11400 (synopsis "Tool and library for manipulating LilyPond files")
11401 (description "This package provides a Python library to parse, manipulate
11402 or create documents in LilyPond format. A command line program ly is also
11403 provided that can be used to do various manipulations with LilyPond files.")
11404 (home-page "https://pypi.org/project/python-ly/")
11405 (license license:gpl2+)))
11406
11407 (define-public python-appdirs
11408 (package
11409 (name "python-appdirs")
11410 (version "1.4.3")
11411 (source
11412 (origin
11413 (method url-fetch)
11414 (uri (pypi-uri "appdirs" version))
11415 (sha256
11416 (base32
11417 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
11418 (build-system python-build-system)
11419 (home-page "https://github.com/ActiveState/appdirs")
11420 (synopsis
11421 "Determine platform-specific dirs, e.g. a \"user data dir\"")
11422 (description
11423 "This module provides a portable way of finding out where user data
11424 should be stored on various operating systems.")
11425 (license license:expat)))
11426
11427 (define-public python-gorilla
11428 (package
11429 (name "python-gorilla")
11430 (version "0.3.0")
11431 (source (origin
11432 (method url-fetch)
11433 (uri (pypi-uri "gorilla" version))
11434 (sha256
11435 (base32
11436 "0b40blcp6fih4nvqbilra4qw1dfccv1ahjmr41ac4d9rjadqkcpy"))))
11437 (build-system python-build-system)
11438 (home-page "https://github.com/christophercrouzet/gorilla")
11439 (synopsis "Convenient monkey patching with Python")
11440 (description
11441 "Gorilla is a Python library that provides a convenient approach to
11442 monkey patching. Monkey patching is the process of modifying module and
11443 class attributes at runtime with the purpose of replacing or extending
11444 third-party code.")
11445 (license license:expat)))
11446
11447 (define-public python-llfuse
11448 (package
11449 (name "python-llfuse")
11450 (version "1.4.1")
11451 (source (origin
11452 (method url-fetch)
11453 (uri (pypi-uri "llfuse" version))
11454 (sha256
11455 (base32
11456 "1jaf790rsxvz3hs9fbr3hrnmg0xzl6a2bqfa10bbbsjsdbcpk762"))))
11457 (build-system python-build-system)
11458 (inputs
11459 (list fuse attr))
11460 (native-inputs
11461 (list pkg-config python-pytest))
11462 (synopsis "Python bindings for FUSE")
11463 (description
11464 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
11465 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
11466 (license license:lgpl2.0+)))
11467
11468 (define-public python-msgpack
11469 (package
11470 (name "python-msgpack")
11471 (version "1.0.4")
11472 (source (origin
11473 (method url-fetch)
11474 (uri (pypi-uri "msgpack" version))
11475 (sha256
11476 (base32
11477 "0pqzy1zclyhd42gfibhkcqymbspy5a6v421g87mh40h3iz0nkn7m"))))
11478 (build-system python-build-system)
11479 (arguments
11480 `(#:modules ((guix build utils)
11481 (guix build python-build-system)
11482 (ice-9 ftw)
11483 (srfi srfi-1)
11484 (srfi srfi-26))
11485 #:phases
11486 (modify-phases %standard-phases
11487 (replace 'check
11488 (lambda _
11489 (invoke "pytest" "-v" "test"))))))
11490 (native-inputs
11491 (list python-pytest))
11492 (synopsis "MessagePack (de)serializer")
11493 (description "MessagePack is a fast, compact binary serialization format,
11494 suitable for similar data to JSON. This package provides CPython bindings for
11495 reading and writing MessagePack data.")
11496 (home-page "https://pypi.org/project/msgpack/")
11497 (license license:asl2.0)))
11498
11499 (define-public python-msgpack-1.0.2
11500 (package
11501 (inherit python-msgpack)
11502 (version "1.0.2")
11503 (source (origin
11504 (method url-fetch)
11505 (uri (pypi-uri "msgpack" version))
11506 (sha256
11507 (base32
11508 "1109s2yynrahwi64ikax68hx0mbclz8p35afmpphw5dwynb49q7s"))))))
11509
11510 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
11511 ;; release 0.5. Some packages like borg still call it by the old name for now.
11512 ;; <https://bugs.gnu.org/30662>
11513 (define-public python-msgpack-transitional
11514 (package
11515 (inherit python-msgpack)
11516 (name "python-msgpack-transitional")
11517 (version "0.5.6")
11518 (source (origin
11519 (method url-fetch)
11520 (uri (pypi-uri "msgpack" version))
11521 (sha256
11522 (base32
11523 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
11524 (arguments
11525 (substitute-keyword-arguments (package-arguments python-msgpack)
11526 ((#:phases phases)
11527 `(modify-phases ,phases
11528 (add-after 'unpack 'configure-transitional
11529 (lambda _
11530 ;; Keep using the old name.
11531 (substitute* "setup.py"
11532 (("TRANSITIONAL = False")
11533 "TRANSITIONAL = 1"))
11534 ;; This old version is not compatible with Python 3.9
11535 (substitute* '("test/test_buffer.py" "test/test_extension.py")
11536 ((".tostring\\(") ".tobytes("))
11537 (substitute* '("test/test_buffer.py" "test/test_extension.py")
11538 ((".fromstring\\(") ".frombytes("))
11539 #t))))))))
11540
11541 (define-public python-netaddr
11542 (package
11543 (name "python-netaddr")
11544 (version "0.8.0")
11545 (source
11546 (origin
11547 (method url-fetch)
11548 (uri (pypi-uri "netaddr" version))
11549 (sha256
11550 (base32
11551 "0hx2npi0wnhwlcybilgwlddw6qffx1mb7a3sj4p9s7bvl33mgk6n"))))
11552 (build-system python-build-system)
11553 (arguments `(#:tests? #f)) ;; No tests.
11554 (home-page "https://github.com/drkjam/netaddr/")
11555 (synopsis "Pythonic manipulation of network addresses")
11556 (description
11557 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
11558 and MAC network addresses.")
11559 (license license:bsd-3)))
11560
11561 (define-public python-wrapt
11562 (package
11563 (name "python-wrapt")
11564 (version "1.11.2")
11565 (source
11566 (origin
11567 (method url-fetch)
11568 (uri (pypi-uri "wrapt" version))
11569 (sha256
11570 (base32
11571 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
11572 (build-system python-build-system)
11573 (arguments
11574 ;; Tests are not included in the tarball, they are only available in the
11575 ;; git repository.
11576 `(#:tests? #f))
11577 (home-page "https://github.com/GrahamDumpleton/wrapt")
11578 (synopsis "Module for decorators, wrappers and monkey patching")
11579 (description
11580 "The aim of the wrapt module is to provide a transparent object proxy for
11581 Python, which can be used as the basis for the construction of function
11582 wrappers and decorator functions.")
11583 (license license:bsd-2)))
11584
11585 (define-public python-commentjson
11586 (package
11587 (name "python-commentjson")
11588 (version "0.9.0")
11589 (source (origin
11590 ;; The PyPI release is missing some test files.
11591 (method git-fetch)
11592 (uri (git-reference
11593 (url "https://github.com/vaidik/commentjson")
11594 (commit (string-append "v" version))))
11595 (file-name (git-file-name name version))
11596 (sha256
11597 (base32
11598 "01iscgrc6bkyrxbzmf46csbf9c0n7g6dygdmxs3fq8fkzrrciybl"))))
11599 (build-system python-build-system)
11600 (arguments
11601 `(#:modules ((guix build python-build-system)
11602 (guix build utils)
11603 (ice-9 ftw)
11604 (ice-9 textual-ports))
11605 #:phases
11606 (modify-phases %standard-phases
11607 (add-after 'unpack 'relax-requirements
11608 (lambda _
11609 (substitute* "setup.py"
11610 (("lark-parser>=0.7.1,<0.8.0")
11611 "lark-parser>=0.7.1"))))
11612 (add-after 'unpack 'delete-unspported-tests
11613 ;; Some tests rely on the 'test' module of Python itself,
11614 ;; which is not available with the Python package in Guix;
11615 ;; remove them.
11616 (lambda _
11617 ;; XXX: Copied from (guix build dub-build-system).
11618 (define (grep string file-name)
11619 (string-contains (call-with-input-file file-name get-string-all)
11620 string))
11621
11622 (with-directory-excursion "commentjson/tests/test_json"
11623 (let* ((dot? (lambda (x) (member x '("." ".."))))
11624 (test-files (scandir "." (negate dot?))))
11625 (for-each delete-file
11626 (filter (lambda (f) (grep "from test." f))
11627 test-files)))))))))
11628 (propagated-inputs
11629 (list python-lark-parser))
11630 (native-inputs
11631 (list python-six))
11632 (home-page "https://github.com/vaidik/commentjson")
11633 (synopsis "Python library for adding comments to JSON files")
11634 (description "Comment JSON is a Python package that helps you create JSON
11635 files with Python and JavaScript style inline comments. Its API is very
11636 similar to the Python standard library's @code{json} module.")
11637 (license license:expat)))
11638
11639 (define-public python-resolvelib
11640 (package
11641 (name "python-resolvelib")
11642 (version "0.7.1")
11643 (source
11644 (origin
11645 ;; Tests are missing from the PyPI release.
11646 (method git-fetch)
11647 (uri (git-reference
11648 (url "https://github.com/sarugaku/resolvelib")
11649 (commit version)))
11650 (file-name (git-file-name name version))
11651 (sha256
11652 (base32
11653 "1fqz75riagizihvf4j7wc3zjw6kmg1dd8sf49aszyml105kb33n8"))))
11654 (build-system python-build-system)
11655 (arguments
11656 `(#:phases
11657 (modify-phases %standard-phases
11658 (replace 'check
11659 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
11660 (when tests?
11661 (add-installed-pythonpath inputs outputs)
11662 (invoke "pytest")))))))
11663 (native-inputs
11664 (list python-commentjson python-packaging python-pytest))
11665 (home-page "https://github.com/sarugaku/resolvelib")
11666 (synopsis "Abstract dependencies resolver")
11667 (description "The ResolveLib library provides a @code{Resolver} class that
11668 includes dependency resolution logic.")
11669 (license license:isc)))
11670
11671 ;;; This older version is required by ansible-core.
11672 (define-public python-resolvelib-0.5
11673 (package/inherit python-resolvelib
11674 (name "python-resolvelib")
11675 (version "0.5.4")
11676 (source
11677 (origin
11678 (method git-fetch)
11679 (uri (git-reference
11680 (url "https://github.com/sarugaku/resolvelib")
11681 (commit version)))
11682 (file-name (git-file-name name version))
11683 (sha256
11684 (base32
11685 "0697y330sqhiclk25v151qxg7aixzpj434lbg5qib0qlna5zg9la"))))))
11686
11687 (define-public python-commonmark
11688 (package
11689 (name "python-commonmark")
11690 (version "0.9.1")
11691 (source
11692 (origin
11693 (method url-fetch)
11694 (uri (pypi-uri "commonmark" version))
11695 (sha256
11696 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
11697 (build-system python-build-system)
11698 (arguments
11699 `(#:phases
11700 (modify-phases %standard-phases
11701 (replace 'check
11702 (lambda* (#:key inputs outputs #:allow-other-keys)
11703 (add-installed-pythonpath inputs outputs)
11704 (invoke "python" "setup.py" "test"))))))
11705 (home-page "https://github.com/readthedocs/commonmark.py")
11706 (synopsis "Python parser for the CommonMark Markdown spec")
11707 (description
11708 "This module is a pure Python port of jgm's @code{commonmark.js}, a
11709 Markdown parser and renderer for the CommonMark specification, using only
11710 native modules.")
11711 (license license:bsd-3)))
11712
11713 (define-public python-xlrd
11714 (package
11715 (name "python-xlrd")
11716 (version "2.0.1")
11717 (source (origin
11718 ;; The tests are not included in the PyPI archive.
11719 (method git-fetch)
11720 (uri (git-reference
11721 (url "https://github.com/python-excel/xlrd")
11722 (commit version)))
11723 (file-name (git-file-name name version))
11724 (sha256
11725 (base32
11726 "170asszffvf6rh5w169ic4h5kxgjkmdl3060vw737d4g1qfifvzz"))))
11727 (build-system python-build-system)
11728 (native-inputs
11729 (list python-pytest))
11730 (home-page "http://www.python-excel.org/")
11731 (synopsis "Library for extracting data from Excel files")
11732 (description "This package provides a library to extract data from
11733 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
11734 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
11735 Unicode-aware. It is not intended as an end-user tool.")
11736 (license license:bsd-3)))
11737
11738 ;;; Note: this package is unmaintained since 2018 (archived on GitHub).
11739 (define-public python-xlwt
11740 (package
11741 (name "python-xlwt")
11742 (version "1.3.0")
11743 (source
11744 (origin
11745 (method url-fetch)
11746 (uri (pypi-uri "xlwt" version))
11747 (sha256
11748 (base32 "123c2pdamshkq75wwvck8fq0cjq1843xd3x9qaiz2a4vg9qi56f5"))))
11749 (build-system python-build-system)
11750 (arguments
11751 `(#:phases
11752 (modify-phases %standard-phases
11753 (replace 'check
11754 (lambda* (#:key tests? #:allow-other-keys)
11755 (when tests?
11756 (setenv "GUIX_PYTHONPATH"
11757 (string-append (getcwd) "/build/lib:"
11758 (getenv "GUIX_PYTHONPATH")))
11759 (invoke "nosetests" "-v")))))))
11760 (native-inputs
11761 `(("nose" ,python-nose)))
11762 (home-page "http://www.python-excel.org/")
11763 (synopsis "Library for creating spreadsheet Excel files")
11764 (description "@code{xlwt} is a library for writing data and formatting
11765 information to older Excel files (i.e. .xls). The package itself is pure
11766 Python with no dependencies on modules or packages outside the standard Python
11767 distribution. It is not intended as an end-user tool.")
11768 (license license:bsd-3)))
11769
11770 (define-public python-immutables
11771 (package
11772 (name "python-immutables")
11773 (version "0.18")
11774 (source
11775 (origin
11776 (method url-fetch)
11777 (uri (pypi-uri "immutables" version))
11778 (sha256
11779 (base32 "1x4cinh0xbl6p6p2yfm2s07mxxy3lf0zzai9gqpydk4482bwfdjk"))))
11780 (build-system python-build-system)
11781 (native-inputs (list python-mypy python-pytest))
11782 (home-page "https://github.com/MagicStack/immutables")
11783 (synopsis "High-performance immutable mapping type for Python")
11784 (description
11785 "An immutable mapping type for Python. The underlying datastructure is a
11786 Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
11787 functional languages.")
11788 (license license:asl2.0)))
11789
11790 (define-public python-prettytable
11791 (package
11792 (name "python-prettytable")
11793 (version "3.3.0")
11794 (source
11795 (origin
11796 (method url-fetch)
11797 (uri (pypi-uri "prettytable" version))
11798 (sha256
11799 (base32
11800 "1c599w31i2ndzbkn85xwsgv9sd2j16r56dl922w4jh3rs97vb3hi"))))
11801 (build-system python-build-system)
11802 (arguments
11803 (list #:phases
11804 #~(modify-phases %standard-phases
11805 (replace 'check
11806 (lambda* (#:key tests? #:allow-other-keys)
11807 (when tests?
11808 (invoke "pytest" "-vv")))))))
11809 (native-inputs
11810 (list python-pytest
11811 python-pytest-lazy-fixture
11812 python-setuptools-scm))
11813 (propagated-inputs (list python-wcwidth))
11814 (home-page "https://github.com/jazzband/prettytable")
11815 (synopsis "Display tabular data in an ASCII table format")
11816 (description
11817 "A library designed to represent tabular data in visually appealing ASCII
11818 tables. PrettyTable allows for selection of which columns are to be printed,
11819 independent alignment of columns (left or right justified or centred) and
11820 printing of sub-tables by specifying a row range.")
11821 (license license:bsd-3)))
11822
11823 (define-public python-curio
11824 (package
11825 (name "python-curio")
11826 (version "1.5")
11827 (source
11828 (origin
11829 (method url-fetch)
11830 (uri (pypi-uri "curio" version))
11831 (sha256
11832 (base32 "045wwg16qadsalhicbv21p14sj8i4w0l57639j7dmdqbb4p2225g"))))
11833 (build-system python-build-system)
11834 (arguments
11835 `(#:phases
11836 (modify-phases %standard-phases
11837 (replace 'check
11838 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
11839 (when tests?
11840 (add-installed-pythonpath inputs outputs)
11841 (invoke "pytest" "-vv" "-k"
11842 (string-append
11843 ;; Tries to open an outgoing connection.
11844 "not test_ssl_outgoing "
11845 ;; This test fails since Python 3.9.9 (see:
11846 ;; https://github.com/dabeaz/curio/issues/347).
11847 "and not test_timeout"))))))))
11848 (native-inputs
11849 (list python-pytest))
11850 (home-page "https://github.com/dabeaz/curio")
11851 (synopsis "Coroutine-based library for concurrent Python")
11852 (description
11853 "Curio is a coroutine-based library for concurrent Python systems
11854 programming. It provides standard programming abstractions such as as
11855 tasks, sockets, files, locks, and queues.")
11856 (license license:bsd-3)))
11857
11858 (define-public python-tables
11859 (package
11860 (name "python-tables")
11861 (version "3.6.1")
11862 (source
11863 (origin
11864 (method url-fetch)
11865 (uri (pypi-uri "tables" version))
11866 (sha256
11867 (base32
11868 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
11869 (modules '((guix build utils)))
11870 (snippet
11871 '(begin
11872 ;; Remove pre-compiled .pyc files from source.
11873 (for-each delete-file-recursively
11874 (find-files "." "__pycache__" #:directories? #t))
11875 (for-each delete-file (find-files "." "\\.pyc$"))
11876 #t))))
11877 (build-system python-build-system)
11878 (arguments
11879 `(;; FIXME: python-build-system does not pass configure-flags to "build"
11880 ;; or "check", so we must override the build and check phases.
11881 #:phases
11882 (modify-phases %standard-phases
11883 (add-after 'unpack 'use-gcc
11884 (lambda _
11885 (substitute* "setup.py"
11886 (("^( +)compiler = new_compiler\\(\\)" line indent)
11887 (string-append line
11888 "\n"
11889 indent
11890 "compiler.set_executables(compiler='gcc',"
11891 "compiler_so='gcc',"
11892 "linker_exe='gcc',"
11893 "linker_so='gcc -shared')")))
11894 #t))
11895 (add-after 'unpack 'disable-tuning
11896 (lambda _
11897 (substitute* "setup.py"
11898 (("cpu_flags = .*")
11899 "cpu_flags = ['sse2']\n"))
11900 #t))
11901 (replace 'build
11902 (lambda* (#:key inputs #:allow-other-keys)
11903 (invoke "python" "setup.py" "build"
11904 (string-append "--hdf5="
11905 (assoc-ref inputs "hdf5")))))
11906 (replace 'check
11907 (lambda* (#:key inputs #:allow-other-keys)
11908 (invoke "python" "setup.py" "check"
11909 (string-append "--hdf5="
11910 (assoc-ref inputs "hdf5"))))))))
11911 (propagated-inputs
11912 (list python-numexpr python-numpy))
11913 (native-inputs
11914 (list python-cython pkg-config))
11915 (inputs
11916 (list hdf5-1.10 bzip2 zlib))
11917 (home-page "https://www.pytables.org/")
11918 (synopsis "Hierarchical datasets for Python")
11919 (description "PyTables is a package for managing hierarchical datasets and
11920 designed to efficiently cope with extremely large amounts of data.")
11921 (license license:bsd-3)))
11922
11923 (define-public python-sniffio
11924 (package
11925 (name "python-sniffio")
11926 (version "1.2.0")
11927 (source
11928 (origin
11929 (method url-fetch)
11930 (uri (pypi-uri "sniffio" version))
11931 (sha256
11932 (base32 "1pnkvi6wvn4qd37y69n1ls6n8l63gfmn3pvb1jb50gqxxkn6wrn4"))))
11933 (build-system python-build-system)
11934 (arguments
11935 `(#:phases
11936 (modify-phases %standard-phases
11937 (replace 'check
11938 (lambda _
11939 (invoke "pytest" "-vv"))))))
11940 (native-inputs
11941 (list python-curio python-pytest python-pytest-cov))
11942 (home-page "https://github.com/python-trio/sniffio")
11943 (synopsis "Detect which async library a program is running under")
11944 (description "This package detects which async library a program is
11945 running under. It supports multiple async I/O packages, like Trio, and
11946 asyncio.")
11947 ;; Either license applies.
11948 (license (list license:expat license:asl2.0))))
11949
11950 (define-public python-pytest-black
11951 (package
11952 (name "python-pytest-black")
11953 (version "0.3.12")
11954 (source
11955 (origin
11956 (method url-fetch)
11957 (uri (pypi-uri "pytest-black" version))
11958 (sha256
11959 (base32
11960 "19bmbcnaq02md8nnj6pywri3vps8sxnhysbfy386qkbn9w09ncqx"))))
11961 (build-system python-build-system)
11962 (propagated-inputs
11963 (list python-pytest python-black python-toml))
11964 (native-inputs
11965 (list python-setuptools-scm))
11966 (home-page "https://github.com/shopkeep/pytest-black")
11967 (synopsis "Pytest plugin to enable format checking with black")
11968 (description
11969 "This package provides a pytest plugin to enable format checking with the
11970 Python code formatter \"black\".")
11971 (license license:expat)))
11972
11973 (define-public python-geojson
11974 (package
11975 (name "python-geojson")
11976 (version "2.5.0")
11977 (source
11978 (origin
11979 (method url-fetch)
11980 (uri (pypi-uri "geojson" version))
11981 (sha256
11982 (base32 "12k5bzqskvq3gqzkryarhdjl0df47y5k9cf8r3clasi2wjnbfjvf"))))
11983 (build-system python-build-system)
11984 (arguments
11985 ;; https://github.com/jazzband/geojson/issues/175
11986 `(#:tests? #f))
11987 (home-page "https://github.com/jazzband/geojson")
11988 (synopsis "Python bindings and utilities for GeoJSON")
11989 (description
11990 "This package provides Python bindings and utilities for
11991 @uref{http://geojson.org/, GeoJSON}, a format for encoding geographic data
11992 structures.")
11993 (license license:bsd-3)))
11994
11995 (define-public wfetch
11996 (let ((commit "e1cfa37814aebc9eb56ce994ebe877b6a6f9a715")
11997 (revision "1"))
11998 (package
11999 (name "wfetch")
12000 (version (git-version "0.1-pre" revision commit))
12001 (home-page "https://github.com/Gcat101/Wfetch")
12002 (source
12003 (origin
12004 (method git-fetch)
12005 (uri (git-reference (url home-page)
12006 (commit commit)))
12007 (file-name (git-file-name name version))
12008 (sha256
12009 (base32 "1dmr85plx8zr6s14ym3r32g6crwxghkval5a24ah90ijx4dbn5q5"))))
12010 (build-system python-build-system)
12011 (arguments
12012 `(#:use-setuptools? #f ; no setup.py
12013 #:tests? #f ; no test suite
12014 #:phases
12015 (modify-phases %standard-phases
12016 (delete 'build)
12017 (replace 'install
12018 (lambda* (#:key outputs #:allow-other-keys)
12019 (let* ((out (assoc-ref outputs "out"))
12020 (bin (string-append out "/bin"))
12021 (share (string-append out "/share")))
12022 (mkdir-p share)
12023 (substitute* "wfetch/wfetch.py"
12024 (("os.sep, 'opt', 'wfetch'") (string-append "'" share "'")))
12025 (install-file "wfetch/wfetch.py" bin)
12026 (copy-recursively "wfetch/icons" share)))))))
12027 (inputs (list python-pyowm python-fire python-termcolor python-requests))
12028 (synopsis "Command-line tool to display weather info")
12029 (description
12030 "This package provides a tool similar to Neofetch/pfetch, but for
12031 weather: it can display the weather condition, temperature, humidity, etc.
12032
12033 To use it, you must first run:
12034
12035 @example
12036 export WEATHER_CLI_API=@var{your OpenWeatherMap API key}
12037 @end example\n")
12038 (license license:gpl3+))))
12039
12040 (define-public python-get-version
12041 (package
12042 (name "python-get-version")
12043 (version "2.1")
12044 (source
12045 (origin
12046 (method url-fetch)
12047 (uri (pypi-uri "get_version" version))
12048 (sha256
12049 (base32
12050 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
12051 (build-system python-build-system)
12052 (propagated-inputs
12053 (list python-pygments
12054 python-pytest
12055 python-pytest-black
12056 python-pytest-cov
12057 python-setuptools
12058 python-testpath))
12059 (home-page "https://github.com/flying-sheep/get_version")
12060 (synopsis "Version helper in the spirit of versioneer")
12061 (description
12062 "This package provides a version helper that lets you automatically use
12063 the latest @code{vX.X.X} Git tag as the version in your Python package. It
12064 also supports getting the version from Python source distributions or, once
12065 your package is installed, via @code{pkg_resources} (part of
12066 @code{setuptools}).")
12067 (license license:gpl3+)))
12068
12069 (define-public python-filetype
12070 (package
12071 (name "python-filetype")
12072 (version "1.0.8")
12073 (source
12074 (origin
12075 (method url-fetch)
12076 (uri (pypi-uri "filetype" version))
12077 (sha256
12078 (base32 "05mkinkcn36v1cnb5hzay3zxmv7jmmflckxxp08rgzbkkf3i9pvp"))))
12079 (build-system python-build-system)
12080 (arguments
12081 `(#:phases
12082 (modify-phases %standard-phases
12083 (replace 'check
12084 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
12085 (when tests?
12086 (add-installed-pythonpath inputs outputs)
12087 (invoke "python" "-m" "pytest" "-k"
12088 (string-append
12089 ;; Both tests fail with FileNotFoundError.
12090 "not test_infer_zip_from_disk"
12091 " and not test_infer_tar_from_disk"))))))))
12092 (native-inputs
12093 (list python-pytest python-pytest-benchmark))
12094 (home-page "https://github.com/h2non/filetype.py")
12095 (synopsis "Infer file type and MIME type of any file/buffer")
12096 (description "@code{filetype} is a small and dependency free Python
12097 package to infer file type and MIME type checking the magic numbers
12098 signature of a file or buffer.")
12099 (license license:expat)))
12100
12101 (define-public python-cachelib
12102 (package
12103 (name "python-cachelib")
12104 (version "0.4.1")
12105 (source
12106 (origin
12107 (method url-fetch)
12108 (uri (pypi-uri "cachelib" version))
12109 (sha256
12110 (base32 "0p4chkvbvffcllsny5rpzmsq2vyr24ql3kzif4ha0fxp3fp7vqk8"))))
12111 (build-system python-build-system)
12112 (arguments
12113 `(#:phases
12114 (modify-phases %standard-phases
12115 (replace 'check
12116 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
12117 (when tests?
12118 (add-installed-pythonpath inputs outputs)
12119 (invoke "pytest")))))))
12120 (native-inputs
12121 (list python-pytest python-pytest-xprocess))
12122 (home-page "https://github.com/pallets/cachelib")
12123 (synopsis "Collection of cache libraries")
12124 (description "Cachelib is a library extracted from @code{werkzeug} which
12125 provides a collection of cache libraries in the same API interface.")
12126 (license license:bsd-3)))
12127
12128 (define-public python-pylru
12129 (package
12130 (name "python-pylru")
12131 (version "1.2.0")
12132 (source
12133 (origin
12134 (method url-fetch)
12135 (uri (pypi-uri "pylru" version))
12136 (sha256
12137 (base32 "15yj46307sw703vjfkgnr04dqvaicmfcj0hc6yrciildp55r6bs9"))))
12138 (build-system python-build-system)
12139 (arguments
12140 `(#:phases
12141 (modify-phases %standard-phases
12142 (replace 'check
12143 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
12144 (when tests?
12145 (add-installed-pythonpath inputs outputs)
12146 (invoke "python" "test.py")))))))
12147 (home-page "https://github.com/jlhutch/pylru")
12148 (synopsis "Least recently used (LRU) cache implementation")
12149 (description
12150 "Pylru implements a true LRU cache along with several support classes.
12151 Pylru provides a cache class with a simple dict interface. It also provides
12152 classes to wrap any object that has a dict interface with a cache. Both
12153 write-through and write-back semantics are supported. Pylru also provides
12154 classes to wrap functions in a similar way, including a function decorator.")
12155 (license license:gpl2+)))
12156
12157 (define-public python-legacy-api-wrap
12158 (package
12159 (name "python-legacy-api-wrap")
12160 (version "1.2")
12161 (source
12162 (origin
12163 (method url-fetch)
12164 (uri (pypi-uri "legacy-api-wrap" version))
12165 (sha256
12166 (base32
12167 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
12168 (build-system python-build-system)
12169 (propagated-inputs
12170 (list python-get-version python-pytest python-pytest-black
12171 python-pytest-cov python-setuptools))
12172 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
12173 (synopsis "Legacy API wrapper")
12174 (description "This module defines a decorator to wrap legacy APIs. The
12175 primary use case is APIs defined before keyword-only parameters existed.")
12176 (license license:gpl3+)))
12177
12178 (define-public python-langdetect
12179 (package
12180 (name "python-langdetect")
12181 (version "1.0.9")
12182 (source
12183 (origin
12184 (method url-fetch)
12185 (uri (pypi-uri "langdetect" version))
12186 (sha256
12187 (base32 "1805svvb7xjm4sf1j7b6nc3409x37pd1xmabfwwjf1ldkzwgxhfb"))))
12188 (build-system python-build-system)
12189 (propagated-inputs
12190 (list python-six))
12191 (home-page "https://github.com/Mimino666/langdetect")
12192 (synopsis "Language detection library")
12193 (description
12194 "This library is a port of Nakatani Shuyo's language-detection library
12195 (version from 03/03/2014) to Python.")
12196 (license license:expat)))
12197
12198 (define-public python-pyasn1
12199 (package
12200 (name "python-pyasn1")
12201 (version "0.4.8")
12202 (source
12203 (origin
12204 (method url-fetch)
12205 (uri (pypi-uri "pyasn1" version))
12206 (sha256
12207 (base32
12208 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
12209 (build-system python-build-system)
12210 (home-page "http://pyasn1.sourceforge.net/")
12211 (synopsis "ASN.1 types and codecs")
12212 (description
12213 "This is an implementation of ASN.1 types and codecs in Python. It is
12214 suitable for a wide range of protocols based on the ASN.1 specification.")
12215 (license license:bsd-2)))
12216
12217 (define-public python-pyasn1-modules
12218 (package
12219 (name "python-pyasn1-modules")
12220 (version "0.2.8")
12221 (source
12222 (origin
12223 (method url-fetch)
12224 (uri (pypi-uri "pyasn1-modules" version))
12225 (sha256
12226 (base32
12227 "0pp6dcagd8c2c9qx3lahc1rdwlnmm0y0siqr5icjq2r32b3q8pwh"))))
12228 (build-system python-build-system)
12229 (propagated-inputs
12230 (list python-pyasn1))
12231 (home-page "https://sourceforge.net/projects/pyasn1/")
12232 (synopsis "ASN.1 codec implementations")
12233 (description
12234 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
12235 implementations of ASN.1-based codecs and protocols.")
12236 (license license:bsd-3)))
12237
12238 (define-public python-ipaddress
12239 (package
12240 (name "python-ipaddress")
12241 (version "1.0.23")
12242 (source (origin
12243 (method url-fetch)
12244 (uri (pypi-uri "ipaddress" version))
12245 (sha256
12246 (base32
12247 "1qp743h30s04m3cg3yk3fycad930jv17q7dsslj4mfw0jlvf1y5p"))))
12248 (build-system python-build-system)
12249 (home-page "https://github.com/phihag/ipaddress")
12250 (synopsis "IP address manipulation library")
12251 (description
12252 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
12253 in Python. This library is used to create, poke at, and manipulate IPv4 and
12254 IPv6 addresses and networks.")
12255 (license license:psfl)))
12256
12257 (define-public python-asn1tools
12258 (package
12259 (name "python-asn1tools")
12260 (version "0.158.0")
12261 (source
12262 (origin
12263 (method url-fetch)
12264 (uri (pypi-uri "asn1tools" version))
12265 (sha256
12266 (base32 "1k88a1azmyvp2ab6qcf2i40dig5abhyn7cmlyhmwwh8kr3syvma0"))))
12267 (build-system python-build-system)
12268 (propagated-inputs
12269 (list python-bitstruct python-diskcache python-prompt-toolkit
12270 python-pyparsing))
12271 (home-page "https://github.com/eerimoq/asn1tools")
12272 (synopsis "ASN.1 parsing, encoding and decoding")
12273 (description "This package provides ASN.1 parsing, encoding and decoding
12274 for Python, including constraints checking. It supports several
12275 codecs (e.g. BER, PER, UPER, XER) as well as limited C source code generating
12276 for OER and UPER.")
12277 (license license:expat)))
12278
12279 (define-public python-idna
12280 (package
12281 (name "python-idna")
12282 (version "3.3")
12283 (source
12284 (origin
12285 (method url-fetch)
12286 (uri (pypi-uri "idna" version))
12287 (sha256
12288 (base32
12289 "0v8f6qjfi5i7qc5icsbv2pi24qy6k6m8wjqjvdf2sxjvlpq3yr4x"))))
12290 (build-system python-build-system)
12291 (home-page "https://github.com/kjd/idna")
12292 (synopsis "Internationalized domain names in applications")
12293 (description
12294 "This is a library to support the Internationalised Domain Names in
12295 Applications (IDNA) protocol as specified in RFC 5891. This version of the
12296 protocol is often referred to as “IDNA2008” and can produce different results
12297 from the earlier standard from 2003. The library is also intended to act as a
12298 suitable drop-in replacement for the “encodings.idna” module that comes with
12299 the Python standard library but currently only supports the older 2003
12300 specification.")
12301 (license license:bsd-4)))
12302
12303 (define-public python-libsass
12304 (package
12305 (name "python-libsass")
12306 (version "0.20.1")
12307 (source
12308 (origin
12309 ;; PyPI tarball is missing some test files.
12310 (method git-fetch)
12311 (uri (git-reference
12312 (url "https://github.com/sass/libsass-python")
12313 (commit version)))
12314 (file-name (git-file-name name version))
12315 (sha256
12316 (base32 "1r0kgl7i6nnhgjl44sjw57k08gh2qr7l8slqih550dyxbf1akbxh"))))
12317 (build-system python-build-system)
12318 (arguments
12319 '(#:phases
12320 (modify-phases %standard-phases
12321 ;; Use Guix package of libsass instead of compiling from a checkout.
12322 (add-before 'build 'set-libsass
12323 (lambda _ (setenv "SYSTEM_SASS" "indeed")))
12324 (replace 'check
12325 (lambda* (#:key tests? #:allow-other-keys)
12326 (when tests?
12327 (invoke "pytest" "sasstests.py"))))
12328 (add-after 'install 'delete-test
12329 (lambda* (#:key inputs outputs #:allow-other-keys)
12330 ;; Delete sasstests.py because it attempts to open a file
12331 ;; that is not installed when loaded, which breaks the sanity
12332 ;; check.
12333 (delete-file (string-append
12334 (assoc-ref outputs "out")
12335 "/lib/python"
12336 (python-version
12337 (dirname (dirname
12338 (search-input-file inputs "bin/python"))))
12339 "/site-packages/sasstests.py")))))))
12340 (native-inputs
12341 (list python-pytest python-werkzeug))
12342 (inputs
12343 (list libsass))
12344 (propagated-inputs
12345 (list python-six))
12346 (home-page "https://sass.github.io/libsass-python/")
12347 (synopsis "Straightforward binding of libsass for Python")
12348 (description
12349 "This package provides a simple Python extension module @code{sass} which
12350 is binding LibSass.")
12351 (license license:expat)))
12352
12353 (define-public python-idna-ssl
12354 (package
12355 (name "python-idna-ssl")
12356 (version "1.0.1")
12357 (source
12358 (origin
12359 (method url-fetch)
12360 (uri (pypi-uri "idna-ssl" version))
12361 (sha256
12362 (base32
12363 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
12364 (build-system python-build-system)
12365 (arguments
12366 `(#:tests? #f)) ;circular dependency with python-aiohttp
12367 (propagated-inputs (list python-idna))
12368 (home-page "https://github.com/aio-libs/idna-ssl")
12369 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
12370 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
12371 domains support.")
12372 (license license:expat)))
12373
12374 ;;; Variant used to break a cycle with python-pip-run-bootstrap.
12375 (define-public python-path-bootstrap
12376 (hidden-package
12377 (package
12378 (name "python-path-bootstrap")
12379 (version "16.4.0")
12380 (source
12381 (origin
12382 (method url-fetch)
12383 (uri (pypi-uri "path" version))
12384 (sha256
12385 (base32 "0lig13gxnfv98v790db1smvsbd3mnj7y8rwyiwhfi6xiqibygwms"))))
12386 (build-system python-build-system)
12387 (arguments
12388 (list
12389 #:tests? #f
12390 #:phases
12391 #~(modify-phases %standard-phases
12392 ;; XXX: PEP 517 manual build/install procedures copied from
12393 ;; python-isort.
12394 (replace 'build
12395 (lambda _
12396 ;; ZIP does not support timestamps before 1980.
12397 (setenv "SOURCE_DATE_EPOCH" "315532800")
12398 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
12399 (replace 'install
12400 (lambda* (#:key outputs #:allow-other-keys)
12401 (let ((whl (car (find-files "dist" "\\.whl$"))))
12402 (invoke "pip" "--no-cache-dir" "--no-input"
12403 "install" "--no-deps" "--prefix" #$output whl)))))))
12404 (native-inputs (list python-pypa-build python-setuptools-scm))
12405 (home-page "https://github.com/jaraco/path")
12406 (synopsis "Object-oriented file system path manipulation library")
12407 (description "@code{path} (formerly @code{path.py}) implements path
12408 objects as first-class entities, allowing common operations on files to be
12409 invoked on those path objects directly.")
12410 (license license:expat))))
12411
12412 (define-public python-path
12413 (package/inherit python-path-bootstrap
12414 (name "python-path")
12415 (arguments
12416 (substitute-keyword-arguments
12417 (package-arguments python-path-bootstrap)
12418 ((#:tests? _ #f)
12419 (not (%current-target-system)))
12420 ((#:phases phases #~%standard-phases)
12421 #~(modify-phases #$phases
12422 (replace 'check
12423 (lambda* (#:key tests? #:allow-other-keys)
12424 (when tests?
12425 ;; Do not test the myproject.toml build as it tries to pull
12426 ;; dependencies from the Internet.
12427 (invoke "pytest" "-vv" "-k"
12428 (string-append
12429 "not project "
12430 ;; This tests assumes a root user exists.
12431 "and not test_get_owner")))))))))
12432 (native-inputs
12433 (modify-inputs (package-native-inputs python-path-bootstrap)
12434 (append python-appdirs
12435 python-packaging
12436 python-pygments
12437 python-pytest
12438 python-pytest-black
12439 python-pytest-checkdocs
12440 python-pytest-cov
12441 python-pytest-enabler
12442 python-pytest-flake8
12443 python-pytest-mypy)))
12444 (properties (alist-delete 'hidden?
12445 (package-properties
12446 python-path-bootstrap)))))
12447
12448 (define-public python-pathpy
12449 (deprecated-package "python-pathpy" python-path))
12450
12451 (define-public python-pretend
12452 (package
12453 (name "python-pretend")
12454 (version "1.0.9")
12455 (source
12456 (origin
12457 (method url-fetch)
12458 (uri (pypi-uri "pretend" version))
12459 (sha256
12460 (base32
12461 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
12462 (build-system python-build-system)
12463 (home-page "https://github.com/alex/pretend")
12464 (synopsis "Library for stubbing in Python")
12465 (description
12466 "Pretend is a library to make stubbing with Python easier. Stubbing is a
12467 technique for writing tests. You may hear the term mixed up with mocks,
12468 fakes, or doubles. Basically, a stub is an object that returns pre-canned
12469 responses, rather than doing any computation.")
12470 (license license:bsd-3)))
12471
12472 (define-public python-pip
12473 (package
12474 (name "python-pip")
12475 (version "20.2.4")
12476 (source
12477 (origin
12478 (method url-fetch)
12479 (uri (pypi-uri "pip" version))
12480 (sha256
12481 (base32
12482 "18b4qcijwivvkj1g0hs4w8zjbks0bjzdjcrqybnhmyx0gs2rmjc5"))))
12483 (build-system python-build-system)
12484 (arguments
12485 '(#:tests? #f)) ; there are no tests in the pypi archive.
12486 (home-page "https://pip.pypa.io/")
12487 (synopsis "Package manager for Python software")
12488 (description
12489 "Pip is a package manager for Python software, that finds packages on the
12490 Python Package Index (PyPI).")
12491 (license license:expat)))
12492
12493 ;;; Variant used to break a dependency cycle with
12494 ;;; python-pytest-perf-bootstrap.
12495 (define-public python-pip-run-bootstrap
12496 (hidden-package
12497 (package
12498 (name "python-pip-run-bootstrap")
12499 (version "8.8.0")
12500 (source (origin
12501 (method git-fetch)
12502 (uri (git-reference
12503 (url "https://github.com/jaraco/pip-run")
12504 (commit (string-append "v" version))))
12505 (file-name (git-file-name name version))
12506 (sha256
12507 (base32
12508 "0ycrjj3jgqcr9c2k7y8vprq65iblg0q0hvwz8zwi13gmb0ffds0c"))))
12509 (build-system python-build-system)
12510 (arguments
12511 (list
12512 #:tests? #f
12513 #:phases
12514 #~(modify-phases %standard-phases
12515 (add-before 'build 'pretend-version
12516 ;; The version string is usually derived via setuptools-scm, but
12517 ;; without the git metadata available this fails.
12518 (lambda _
12519 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version))))))
12520 (native-inputs (list python-setuptools-scm))
12521 (propagated-inputs (list python-autocommand python-path-bootstrap
12522 python-packaging))
12523 (home-page "https://github.com/jaraco/pip-run")
12524 (synopsis "Dynamic dependency loader for Python")
12525 (description "The @command{pip-run} command provides on-demand temporary
12526 package installation for a single interpreter run. It replaces this series of
12527 commands:
12528 @example
12529 $ virtualenv --python pythonX.X --system-site-packages /tmp/env
12530 $ /tmp/env/bin/pip install pkg1 pkg2 -r reqs.txt
12531 $ /tmp/env/bin/python ...
12532 $ rm -rf /tmp/env
12533 @end example")
12534 (license license:expat))))
12535
12536 (define-public python-pip-run
12537 (package/inherit python-pip-run-bootstrap
12538 (name "python-pip-run")
12539 (arguments
12540 (substitute-keyword-arguments (package-arguments python-pip-run-bootstrap)
12541 ((#:tests? _ #f)
12542 (not (%current-target-system)))
12543 ((#:phases phases #~%standard-phases)
12544 #~(modify-phases #$phases
12545 (replace 'check
12546 (lambda* (#:key tests? #:allow-other-keys)
12547 (when tests?
12548 (invoke "pytest" "-k"
12549 (string-append
12550 ;; Do not test the myproject.toml build as it tries
12551 ;; to pull dependencies from the internet.
12552 "not project "
12553 ;; These tests attempt to install dependencies from
12554 ;; the network and fail.
12555 "and not test_pkg_imported "
12556 "and not test_pkg_loaded_from_alternate_index ")))))))))
12557 (propagated-inputs
12558 (modify-inputs (package-propagated-inputs python-pip-run-bootstrap)
12559 (replace "python-path-bootstrap" python-path)))
12560 (native-inputs
12561 (modify-inputs (package-native-inputs python-pip-run-bootstrap)
12562 (append python-nbformat
12563 python-pygments
12564 python-pytest
12565 python-pytest-black
12566 python-pytest-checkdocs
12567 python-pytest-cov
12568 python-pytest-enabler
12569 python-pytest-flake8
12570 python-pytest-mypy)))
12571 (properties (alist-delete 'hidden? (package-properties
12572 python-pip-run-bootstrap)))))
12573
12574 (define-public python-tlsh
12575 (package
12576 (name "python-tlsh")
12577 (version "4.11.2")
12578 (home-page "https://github.com/trendmicro/tlsh")
12579 (source
12580 (origin
12581 (method git-fetch)
12582 (uri (git-reference (url home-page) (commit version)))
12583 (file-name (git-file-name name version))
12584 (sha256
12585 (base32 "1gb5j73nw3nmx030rf8pm75rns5syxhv44zxr6i74kjicyly1i9w"))))
12586 (build-system cmake-build-system)
12587 (arguments
12588 (list #:out-of-source? #f
12589 #:phases
12590 #~(modify-phases %standard-phases
12591 (replace 'install
12592 (lambda _
12593 ;; Build and install the Python bindings. The underlying
12594 ;; C++ library is apparently not meant to be installed.
12595 (with-directory-excursion "py_ext"
12596 (and (system* "python" "setup.py" "build")
12597 (system* "python" "setup.py" "install"
12598 (string-append "--prefix=" #$output))))))
12599 ;; Delay tests until the phase above has run.
12600 (delete 'check)
12601 (add-after 'install 'check
12602 (lambda* (#:key tests? #:allow-other-keys)
12603 (substitute* "Testing/python_test.sh"
12604 ;; The script sets up a working PYTHONPATH, but does not
12605 ;; export it for all subsequent test commands. Fix that.
12606 (("^PYTHONPATH=\".*" all)
12607 (string-append all "\nexport PYTHONPATH\n")))
12608 (when tests?
12609 (with-directory-excursion "Testing"
12610 (invoke "./python_test.sh"))))))))
12611 (inputs (list python-wrapper)) ;for the bindings
12612 (synopsis "Fuzzy matching library for Python")
12613 (description
12614 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
12615 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
12616 value which can be used for similarity comparisons. Similar objects have
12617 similar hash values, which allows for the detection of similar objects by
12618 comparing their hash values. The byte stream should have a sufficient amount
12619 of complexity; for example, a byte stream of identical bytes will not generate
12620 a hash value.")
12621 (license license:asl2.0)))
12622
12623 (define-public python-termcolor
12624 (package
12625 (name "python-termcolor")
12626 (version "1.1.0")
12627 (source
12628 (origin
12629 (method url-fetch)
12630 (uri (pypi-uri "termcolor" version))
12631 (sha256
12632 (base32
12633 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
12634 (build-system python-build-system)
12635 (arguments
12636 ;; There are no tests.
12637 `(#:tests? #f))
12638 (home-page "https://pypi.org/project/termcolor/")
12639 (synopsis "ANSII Color formatting for terminal output")
12640 (description
12641 "This package provides ANSII Color formatting for output in terminals.")
12642 (license license:expat)))
12643
12644 (define-public python-terminaltables
12645 (package
12646 (name "python-terminaltables")
12647 (version "3.1.0")
12648 (source
12649 (origin
12650 (method url-fetch)
12651 (uri (pypi-uri "terminaltables" version))
12652 (sha256
12653 (base32
12654 "109vhldk6nv1z3hzp4dyqf6rjvlhl0y2k5k7qcm9fcrq5swhxszk"))))
12655 (build-system python-build-system)
12656 (home-page "https://github.com/Robpol86/terminaltables")
12657 (synopsis
12658 "Generate simple tables in terminals from a nested list of strings")
12659 (description
12660 "This package makes it easy to draw tables in terminal/console
12661 applications from a list of lists of strings. It supports multi-line rows.")
12662 (license license:expat)))
12663
12664 (define-public python-libarchive-c
12665 (package
12666 (name "python-libarchive-c")
12667 (version "2.9")
12668 (source (origin
12669 (method url-fetch)
12670 (uri (pypi-uri "libarchive-c" version))
12671 (sha256
12672 (base32
12673 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
12674 (build-system python-build-system)
12675 (arguments
12676 '(#:phases (modify-phases %standard-phases
12677 (add-before
12678 'build 'reference-libarchive
12679 (lambda* (#:key inputs #:allow-other-keys)
12680 ;; Retain the absolute file name of libarchive.so.
12681 (let ((libarchive (assoc-ref inputs "libarchive")))
12682 (substitute* "libarchive/ffi.py"
12683 (("find_library\\('archive'\\)")
12684 (string-append "'" libarchive
12685 "/lib/libarchive.so'"))))))
12686 (replace 'check
12687 (lambda _ (invoke "pytest" "-vv"))))))
12688 (native-inputs
12689 (list python-mock python-pytest))
12690 (inputs
12691 (list libarchive))
12692 (home-page "https://github.com/Changaco/python-libarchive-c")
12693 (synopsis "Python interface to libarchive")
12694 (description
12695 "This package provides Python bindings to libarchive, a C library to
12696 access possibly compressed archives in many different formats. It uses
12697 Python's @code{ctypes} foreign function interface (FFI).")
12698 (license license:lgpl2.0+)))
12699
12700 (define-public python-file
12701 (package/inherit file
12702 (name "python-file")
12703 (build-system python-build-system)
12704 (arguments
12705 '(#:tests? #f ;no tests
12706 #:configure-flags '("--single-version-externally-managed" "--root=/")
12707 #:phases (modify-phases %standard-phases
12708 (add-before 'build 'change-directory
12709 (lambda _
12710 (chdir "python")
12711 #t))
12712 (add-before 'build 'set-library-file-name
12713 (lambda* (#:key inputs #:allow-other-keys)
12714 (let ((file (assoc-ref inputs "file")))
12715 (substitute* "magic.py"
12716 (("find_library\\('magic'\\)")
12717 (string-append "'" file "/lib/libmagic.so'")))
12718 #t))))))
12719 (inputs `(("file" ,file)))
12720 (native-inputs (if (%current-target-system)
12721 `(("self" ,this-package))
12722 '()))
12723 (synopsis "Python bindings to the libmagic file type guesser")
12724 (description "This package provides Python bindings to the libmagic file
12725 type guesser.
12726
12727 Note that this module and the @code{python-magic} module both provide a
12728 @file{magic.py} file; these two modules, which are different and were
12729 developed separately, both serve the same purpose: provide Python bindings for
12730 libmagic.")))
12731
12732 (define-public python-pydevd
12733 ;; Use the latest commit, which includes cleanups that removes Python 2
12734 ;; syntax that would fail to build.
12735 (let ((revision "0")
12736 (commit "47e298499ef19563bb2ef5941a57046a35ae6868"))
12737 (package
12738 (name "python-pydevd")
12739 (version (git-version "2.8.0" revision commit))
12740 (source
12741 (origin
12742 (method git-fetch)
12743 (uri (git-reference
12744 (url "https://github.com/fabioz/PyDev.Debugger")
12745 (commit commit)))
12746 (modules '((guix build utils)))
12747 (snippet '(begin
12748 ;; Delete pre-built binaries.
12749 (for-each delete-file (find-files "." "\\.(so|dylib|dll)"))
12750 ;; This source is generated via Cython.
12751 (delete-file "_pydevd_bundle/pydevd_cython.c")))
12752 (file-name (git-file-name name version))
12753 (sha256
12754 (base32
12755 "1yd017dh6xgxrqcyf8kk8jrr0a3zw895yfjih0z5jghyf0rck38q"))))
12756 (build-system python-build-system)
12757 (arguments
12758 (list
12759 #:phases
12760 #~(modify-phases %standard-phases
12761 (add-after 'unpack 'fix-tests
12762 (lambda _
12763 (substitute* "tests_python/test_convert_utilities.py"
12764 ;; Add missing trailing '/'.
12765 (("'\\\\\\\\usr\\\\\\\\bin\\\\\\\\') == '/usr/bin" all)
12766 (string-append all "/")))))
12767 (add-after 'unpack 'patch-command-paths
12768 (lambda* (#:key inputs #:allow-other-keys)
12769 (substitute* "_pydevd_bundle/pydevd_api.py"
12770 (("'kill'")
12771 (format #f "~s" (search-input-file inputs "bin/kill")))
12772 (("'pgrep'")
12773 (format #f "~s" (search-input-file inputs "bin/pgrep"))))))
12774 (add-after 'unpack 'generate-sources
12775 (lambda _
12776 (setenv "PYTHONPATH" (getcwd))
12777 (invoke "python" "build_tools/build.py")))
12778 (add-after 'unpack 'adjust-attach-binary-name
12779 (lambda _
12780 (substitute*
12781 '("pydevd_tracing.py"
12782 "pydevd_attach_to_process/add_code_to_python_process.py")
12783 (("def get_(target|python_helper_lib)_filename.*" all)
12784 (format #f "~a return ~s~%" all
12785 (string-append #$output "/lib/attach.so"))))))
12786 (add-after 'unpack 'patch-gdb
12787 (lambda* (#:key inputs #:allow-other-keys)
12788 (substitute*
12789 "pydevd_attach_to_process/add_code_to_python_process.py"
12790 (("'gdb',")
12791 (format #f "~s," (search-input-file inputs "bin/gdb"))))))
12792 (add-after 'build 'build-attach-linux-binary
12793 (lambda _
12794 (invoke #+(cxx-for-target) "-shared" "-o" "attach.so"
12795 "-fPIC" "-nostartfiles"
12796 "pydevd_attach_to_process/linux_and_mac/attach.cpp")))
12797 (replace 'check
12798 (lambda* (#:key tests? #:allow-other-keys)
12799 (when tests?
12800 (setenv "PYDEVD_USE_CYTHON" "YES")
12801 (invoke "pytest" "-vv"
12802 "-n" (number->string (parallel-job-count))
12803 "-k"
12804 (string-append
12805 ;; the GUI event loop requires an X server.
12806 "not test_gui_event_loop_custom "
12807 ;; This test validates that 'pydevd' is not in the
12808 ;; exception message, but it is due to being part
12809 ;; of the build file name present in the message.
12810 "and not test_evaluate_exception_trace "
12811 ;; These fail on systems with YAMA LSM’s ptrace
12812 ;; scope > 0. Upstream issue:
12813 ;; https://github.com/fabioz/PyDev.Debugger/issues/218
12814 "and not test_attach_to_pid")))))
12815 (add-after 'install 'install-attach-binary
12816 (lambda _
12817 (install-file "attach.so"
12818 (string-append #$output "/lib"))))
12819 ;; Some modules aren't designed to be loadable by themselves, such
12820 ;; as 'pydev_app_engine_debug_startup' and fail.
12821 (delete 'sanity-check))))
12822 (native-inputs
12823 (list python-cython
12824 python-numpy
12825 python-psutil
12826 python-pytest
12827 python-pytest-xdist
12828 python-trio
12829 python-untangle))
12830 (inputs (list coreutils gdb procps))
12831 (home-page "https://github.com/fabioz/PyDev.Debugger/")
12832 (synopsis "Python debugger")
12833 (description "PyDev.Debugger is a capable Python debugger used in PyDev
12834 and other @acronym{IDEs, Integrated Development Environments}.")
12835 (license license:epl1.0))))
12836
12837 (define-public python-debugpy
12838 (package
12839 (name "python-debugpy")
12840 (version "1.6.0")
12841 (source
12842 (origin
12843 (method git-fetch)
12844 (uri (git-reference ;no tests in PyPI archive
12845 (url "https://github.com/microsoft/debugpy")
12846 (commit (string-append "v" version))))
12847 (file-name (git-file-name name version))
12848 (modules '((guix build utils)))
12849 ;; Remove the bundled PyDev-Debugger copy, including its pre-built
12850 ;; attach binary.
12851 (snippet '(delete-file-recursively "src/debugpy/_vendored"))
12852 (patches (search-patches "python-debugpy-unbundle-pydevd.patch"))
12853 (sha256
12854 (base32
12855 "1dpfzs3p51648i7f3fz8dw5d0vrj39iwn1jhn0226idc02ybyqih"))))
12856 (build-system python-build-system)
12857 (arguments
12858 (list
12859 #:tests? #f ; Fail on systems with YAMA LSM’s ptrace scope > 0.
12860 #:phases
12861 #~(modify-phases %standard-phases
12862 (add-after 'unpack 'patch-sh-in-tests
12863 (lambda _
12864 (substitute* "tests/debugpy/test_run.py"
12865 (("#!/bin/sh")
12866 (string-append "#!" (which "sh"))))))
12867 (add-after 'unpack 'fix-version
12868 ;; Versioneer is useless when there is no git metadata.
12869 (lambda _
12870 (substitute* "setup.py"
12871 (("version=versioneer.get_version\\(),")
12872 (format #f "version=~s," #$version)))))
12873 (add-before 'build 'configure
12874 (lambda _
12875 ;; This adjusts the behavior of debugpy to load pydevd from
12876 ;; Python site packages.
12877 (setenv "DEBUGPY_BUNDLING_DISABLED" "1")))
12878 (replace 'check
12879 (lambda* (#:key tests? #:allow-other-keys)
12880 (when tests?
12881 (invoke "pytest" "-vv"
12882 "-n" (number->string (parallel-job-count))
12883 "-k"
12884 (string-append
12885 ;; These tests cannot be run in parallel because their
12886 ;; test data would not be copied by xdist and lead to
12887 ;; import errors. (see:
12888 ;; https://github.com/microsoft/debugpy/issues/342 and
12889 ;; https://github.com/microsoft/debugpy/issues/880).
12890 "not test_custom_python_args "
12891 "and not test_autokill "))))))))
12892 (native-inputs
12893 ;; See: https://raw.githubusercontent.com/microsoft/debugpy/
12894 ;; main/tests/requirements.txt.
12895 (list python-django
12896 python-gevent
12897 python-flask
12898 python-psutil
12899 python-pytest
12900 python-pytest-cov
12901 python-pytest-timeout
12902 python-pytest-xdist
12903 python-requests))
12904 (propagated-inputs (list python-pydevd))
12905 (home-page "https://aka.ms/debugpy")
12906 (synopsis "Debug Adapter Protocol Python implementation")
12907 (description "An implementation of the Debug Adapter Protocol for
12908 Python.")
12909 (license license:expat)))
12910
12911 (define-public python-debian
12912 (package
12913 (name "python-debian")
12914 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
12915 (version "0.1.36")
12916 (source
12917 (origin
12918 ;; Use git-fetch, as pypi doesn't include test suite.
12919 (method git-fetch)
12920 (uri (git-reference
12921 (url home-page)
12922 (commit version)))
12923 (file-name (git-file-name name version))
12924 (sha256
12925 (base32
12926 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
12927 (build-system python-build-system)
12928 (arguments
12929 `(#:phases (modify-phases %standard-phases
12930 (add-after 'unpack 'set-version
12931 ;; for reproducible builds, otherwise python-debian
12932 ;; generates a _version.py including the date
12933 (lambda _
12934 (copy-file "lib/debian/_version.py.in" "lib/debian/_version.py")
12935 (substitute* "lib/debian/_version.py"
12936 (("__CHANGELOG_VERSION__") ,version))))
12937 (add-after 'unpack 'remove-debian-specific-tests
12938 ;; python-apt, apt and dpkg are not yet available in guix,
12939 ;; and these tests heavily depend on them.
12940 (lambda _
12941 (delete-file "lib/debian/tests/test_deb822.py")
12942 (delete-file "lib/debian/tests/test_debfile.py")
12943 #t)))))
12944 (propagated-inputs
12945 (list python-six python-chardet))
12946 (synopsis "Debian package related modules")
12947 (description
12948 ;; XXX: Use @enumerate instead of @itemize to work around
12949 ;; <http://bugs.gnu.org/21772>.
12950 "This package provides Python modules that abstract many formats of
12951 Debian-related files, such as:
12952
12953 @enumerate
12954 @item Debtags information;
12955 @item @file{debian/changelog} files;
12956 @item packages files, pdiffs;
12957 @item control files of single or multiple RFC822-style paragraphs---e.g.
12958 @file{debian/control}, @file{.changes}, @file{.dsc};
12959 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
12960 contained files and meta-information.
12961 @end enumerate\n")
12962
12963 ;; Modules are either GPLv2+ or GPLv3+.
12964 (license license:gpl3+)))
12965
12966 (define-public python-json-spec
12967 (package
12968 (name "python-json-spec")
12969 (version "0.10.1")
12970 (source
12971 (origin
12972 (method url-fetch)
12973 (uri (pypi-uri "json-spec" version))
12974 (sha256
12975 (base32
12976 "06dpbsq61ja9r89wpa2pzdii47qh3xri9ajdrgn1awfl102znchb"))))
12977 (build-system python-build-system)
12978 (propagated-inputs
12979 (list python-pathlib python-six))
12980 (native-inputs
12981 (list python-pytest))
12982 (home-page "http://py.errorist.io/json-spec")
12983 (synopsis
12984 "JSON Schema, JSON Pointer and JSON Reference for Python")
12985 (description
12986 "This Python library implements several JSON specs, like JSON Schema,
12987 JSON Reference and JSON Pointer.")
12988 (license license:bsd-3)))
12989
12990 (define-public python-fastbencode
12991 (package
12992 (name "python-fastbencode")
12993 (version "0.0.7")
12994 (source
12995 (origin
12996 (method url-fetch)
12997 (uri (pypi-uri "fastbencode" version))
12998 (modules '((guix build utils)))
12999 ;; Delete pre-generated Cython C files.
13000 (snippet '(for-each delete-file (find-files "." "\\.c$")))
13001 (sha256
13002 (base32 "1r66w3vpmvfmssshjpgqaj2m14c8p94nymr96mwn61idajz9mg5n"))))
13003 (build-system python-build-system)
13004 (native-inputs (list python-cython))
13005 (home-page "https://github.com/breezy-team/fastbencode")
13006 (synopsis "Python Bencode (de)serializer with optional fast C extensions")
13007 (description
13008 "The fastbencode Python package implements the bencode serialization
13009 format for storing and transmitting loosely structured data, originally used
13010 by BitTorrent.
13011
13012 The format can encode four different types of values: byte strings, integers,
13013 lists, and dictionaries (associative arrays). It's simple and unaffected by
13014 endianness,
13015
13016 This package includes both a pure-Python version and an optional C extension
13017 based on Cython. Both provide the same functionality, but the C version has
13018 significantly better performance.")
13019 (license (list license:expat ; _bencode_py.py
13020 license:gpl2+)))) ; __init__.py
13021
13022 (define-public python-fastjsonschema
13023 (package
13024 (name "python-fastjsonschema")
13025 (version "2.15.1")
13026 (source
13027 (origin
13028 (method url-fetch)
13029 (uri (pypi-uri "fastjsonschema" version))
13030 (sha256
13031 (base32 "1ln2j60jzyn6p8i8ljygfgrji58hc23452g7nllkcjdk4p93c7v7"))))
13032 (build-system python-build-system)
13033 (arguments
13034 `(#:tests? #f ; Fail with a strange backtrace ending in importlib.
13035 #:phases
13036 (modify-phases %standard-phases
13037 (replace 'check
13038 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
13039 (when tests?
13040 (invoke "pytest" "-vv" "-m" "not benchmark")))))))
13041 (native-inputs
13042 (list python-colorama
13043 python-json-spec
13044 python-jsonschema
13045 python-pylint
13046 python-pytest
13047 python-pytest-benchmark
13048 python-pytest-cache
13049 python-validictory))
13050 (home-page
13051 "https://github.com/horejsek/python-fastjsonschema")
13052 (synopsis
13053 "Fast Python implementation of JSON schema")
13054 (description
13055 "This library implements validation of JSON documents by JSON schema for
13056 drafts 04, 06 and 07.")
13057 (license license:bsd-3)))
13058
13059 (define-public python-nbformat
13060 (package
13061 (name "python-nbformat")
13062 (version "5.3.0")
13063 ;; The PyPi release tarball lacks some test cases and test data.
13064 (source (origin
13065 (method git-fetch)
13066 (uri (git-reference
13067 (url "https://github.com/jupyter/nbformat")
13068 (commit version)))
13069 (sha256
13070 (base32
13071 "114c5c6cvpxhxj8zrw74351gcfzyzjh1jq3py4xf8wk9rahfay9z"))
13072 (file-name (git-file-name name version))))
13073 (build-system python-build-system)
13074 (arguments
13075 `(#:phases
13076 (modify-phases %standard-phases
13077 (replace 'check
13078 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
13079 (when tests?
13080 (invoke "pytest" "-vv")))))))
13081 (propagated-inputs
13082 (list python-fastjsonschema python-jsonschema python-jupyter-core
13083 python-traitlets))
13084 (native-inputs
13085 (list python-pytest
13086 python-testpath))
13087 (home-page "https://jupyter.org")
13088 (synopsis "Jupyter Notebook format")
13089 (description "This package provides the reference implementation of the
13090 Jupyter Notebook format and Python APIs for working with notebooks.")
13091 (license license:bsd-3)))
13092
13093 (define-public python-nb-clean
13094 (package
13095 (name "python-nb-clean")
13096 (version "2.1.0")
13097 (source
13098 (origin
13099 (method url-fetch)
13100 (uri (pypi-uri "nb-clean" version))
13101 (sha256
13102 (base32 "01qvk9n7rx15dhc23m8bj9bw5wdyxh6y18c5fm8hllmrd3ndsx14"))))
13103 (build-system python-build-system)
13104 (propagated-inputs (list python-nbformat))
13105 (home-page "https://github.com/srstevenson/nb-clean")
13106 (synopsis "Clean Jupyter notebooks for versioning")
13107 (description "This package cleans Jupyter notebooks of cell execution
13108 counts, metadata, outputs, and empty cells, preparing them for committing to
13109 version control. It provides a Git filter to automatically clean notebooks
13110 before they're staged, and can also be used with other version control
13111 systems, as a command line tool, and as a Python library.")
13112 (license license:isc)))
13113
13114 (define-public python-bleach
13115 (package
13116 (name "python-bleach")
13117 (version "5.0.0")
13118 (source
13119 (origin
13120 (method url-fetch)
13121 (uri (pypi-uri "bleach" version))
13122 (sha256
13123 (base32 "0rc5avysbsl3w3i2qvb6522263zhwlvf50w0ifs8776w9c2wrmn6"))))
13124 (build-system python-build-system)
13125 (arguments
13126 '(#:phases (modify-phases %standard-phases
13127 (replace 'check
13128 (lambda* (#:key tests? #:allow-other-keys)
13129 (when tests? (invoke "pytest" "-vv")))))))
13130 (propagated-inputs (list python-tinycss2 python-webencodings))
13131 (native-inputs (list python-pytest))
13132 (home-page "https://github.com/mozilla/bleach")
13133 (synopsis "Whitelist-based HTML-sanitizing tool")
13134 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
13135 (license license:asl2.0)))
13136
13137 (define-public python-entrypoints
13138 (package
13139 (name "python-entrypoints")
13140 (version "0.3")
13141 (source
13142 (origin
13143 (method url-fetch)
13144 (uri (pypi-uri "entrypoints" version))
13145 (sha256
13146 (base32
13147 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
13148 (build-system python-build-system)
13149 ;; The package does not come with a setup.py file, so we have to generate
13150 ;; one ourselves.
13151 (arguments
13152 `(#:tests? #f
13153 #:phases
13154 (modify-phases %standard-phases
13155 (add-after 'unpack 'create-setup.py
13156 (lambda _
13157 (call-with-output-file "setup.py"
13158 (lambda (port)
13159 (format port "\
13160 from setuptools import setup
13161 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
13162 " ,version))))))))
13163 (home-page "https://github.com/takluyver/entrypoints")
13164 (synopsis "Discover and load entry points from installed Python packages")
13165 (description "Entry points are a way for Python packages to advertise
13166 objects with some common interface. The most common examples are
13167 @code{console_scripts} entry points, which define shell commands by
13168 identifying a Python function to run. The @code{entrypoints} module contains
13169 functions to find and load entry points.")
13170 (license license:expat)))
13171
13172 (define-public python-epc
13173 (package
13174 (name "python-epc")
13175 (version "0.0.5")
13176 (source
13177 (origin
13178 (method url-fetch)
13179 (uri (pypi-uri "epc" version))
13180 (sha256
13181 (base32
13182 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
13183 (build-system python-build-system)
13184 (propagated-inputs
13185 (list python-sexpdata))
13186 (native-inputs
13187 (list python-nose))
13188 (home-page "https://github.com/tkf/python-epc")
13189 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
13190 (description
13191 "Python-EPC can call elisp functions from Python and Python functions
13192 from elisp.")
13193 (license license:gpl3)))
13194
13195 (define-public python-forex-python
13196 (package
13197 (name "python-forex-python")
13198 (version "1.5")
13199 (source
13200 (origin
13201 (method url-fetch)
13202 (uri (pypi-uri "forex-python" version))
13203 (sha256
13204 (base32 "1ma8cl1i2dh8aa99pifnlilyy4d1gd1s07fj0yd17wcbpsh532cj"))))
13205 (build-system python-build-system)
13206 (arguments
13207 ;; Tests are not included in the PyPI tarball. Also, the tests in the
13208 ;; repository require online data.
13209 `(#:tests? #f))
13210 (propagated-inputs
13211 (list python-requests python-simplejson))
13212 (home-page "https://github.com/MicroPyramid/forex-python")
13213 (synopsis "Foreign exchange rates and currency conversion")
13214 (description
13215 "@code{python-forex-python} can be used to manipulate foreign
13216 exchange rates and to operate currency conversions.
13217
13218 Features:
13219 @itemize
13220 @item List all currency rates.
13221 @item BitCoin price for all currencies.
13222 @item Converting amount to BitCoins.
13223 @item Get historical rates for any day since 1999.
13224 @item Conversion rate for one currency(ex; USD to INR).
13225 @item Convert amount from one currency to other.('USD 10$' to INR).
13226 @item Currency symbols.
13227 @item Currency names.
13228 @end itemize")
13229 (license license:expat)))
13230
13231 (define-public python-simpleeval
13232 (package
13233 (name "python-simpleeval")
13234 (version "0.9.12")
13235 (source
13236 (origin
13237 (method url-fetch)
13238 (uri (pypi-uri "simpleeval" version))
13239 (sha256
13240 (base32 "0diysdzvx865yy2rjfah75ha2qfxaxz7r108kp7j2kkd903ya2ry"))))
13241 (build-system python-build-system)
13242 (home-page "https://github.com/danthedeckie/simpleeval")
13243 (synopsis "Simple, safe single expression evaluator library")
13244 (description
13245 "This package provides a quick single file library for easily adding
13246 evaluatable expressions into python projects. Say you want to allow a user
13247 to set an alarm volume, which could depend on the time of day, alarm level,
13248 how many previous alarms had gone off, and if there is music playing at the
13249 time.")
13250 (license license:expat)))
13251
13252 (define-public python-nbconvert
13253 (package
13254 (name "python-nbconvert")
13255 (version "6.5.0")
13256 (source
13257 (origin
13258 (method url-fetch)
13259 (uri (pypi-uri "nbconvert" version))
13260 (sha256
13261 (base32
13262 "17g9xq4za7vvzml6l6d8zrzknhxsvgx02hymmsw9d1dygbi4cgi2"))))
13263 (build-system python-build-system)
13264 (arguments
13265 (list
13266 #:phases
13267 #~(modify-phases %standard-phases
13268 (add-after 'unpack 'fix-paths
13269 (lambda* (#:key inputs #:allow-other-keys)
13270 ;; Use pandoc binary from input.
13271 (substitute* "nbconvert/utils/pandoc.py"
13272 (("'pandoc'")
13273 (format #f "~s" (search-input-file inputs "bin/pandoc"))))
13274 ;; Same for LaTeX.
13275 (substitute* "nbconvert/exporters/pdf.py"
13276 (("\"xelatex\"")
13277 (format #f "~s" (search-input-file inputs "bin/xelatex")))
13278 (("\"bibtex\"")
13279 (format #f "~s" (search-input-file inputs "bin/bibtex"))))
13280 ;; Likewise for Inkscape.
13281 (substitute* "nbconvert/preprocessors/svg2pdf.py"
13282 (("inkscape_path = which\\(\"inkscape\")")
13283 (format #f "inkscape_path = ~s"
13284 (search-input-file inputs "bin/inkscape"))))))
13285 (replace 'check
13286 (lambda* (#:key tests? #:allow-other-keys)
13287 (when tests?
13288 ;; Tests depend on templates installed to output.
13289 (setenv "JUPYTER_PATH"
13290 (string-append #$output "/share/jupyter:"
13291 (getenv "JUPYTER_PATH")))
13292 ;; Step outside of the source directory to avoid having both
13293 ;; the installed package *and* the package from the source on
13294 ;; Python's path.
13295 (with-directory-excursion "/tmp"
13296 (invoke "pytest" "--pyargs" "nbconvert"
13297 "-vv" "-n" (number->string (parallel-job-count))
13298 "-k"
13299 (string-append
13300 ;; These tests require pyppeteer, not yet
13301 ;; available in Guix.
13302 "not test_webpdf_with_chromium "
13303 "and not test_webpdf.py "
13304 ;; These tests require ipywidgets, which would
13305 ;; introduce a dependency cycle.
13306 "and not test_execute_widgets_from_nbconvert "
13307 "and not test_execute_multiple_notebooks ")))))))))
13308 (inputs
13309 (list inkscape/stable pandoc))
13310 (native-inputs
13311 (list python-ipykernel
13312 ;; Adding ipywidgets would create a cycle.
13313 ;;python-ipywidgets
13314 ;;python-pyppeteer ;TODO: package me
13315 python-pytest
13316 python-pytest-xdist))
13317 (propagated-inputs
13318 (list python-beautifulsoup4
13319 python-bleach
13320 python-defusedxml
13321 python-entrypoints
13322 python-jinja2
13323 python-jupyter-core
13324 python-mistune
13325 python-nbclient
13326 python-nbformat
13327 python-pandocfilters
13328 python-pygments
13329 python-jupyterlab-pygments
13330 python-testpath
13331 python-traitlets
13332 ;; Required, even if [serve] is not used.
13333 python-tornado-6
13334 ;; Required at runtime for `jupyter nbconvert --to=pdf`.
13335 texlive-adjustbox
13336 texlive-booktabs
13337 texlive-caption
13338 texlive-enumitem
13339 texlive-fontspec
13340 texlive-generic-iftex
13341 texlive-grffile
13342 texlive-hyperref
13343 texlive-latex-fancyvrb
13344 texlive-latex-float
13345 texlive-latex-geometry
13346 texlive-latex-jknapltx
13347 texlive-latex-ms
13348 texlive-latex-parskip
13349 texlive-latex-trimspaces
13350 texlive-latex-upquote
13351 texlive-stringenc
13352 texlive-tcolorbox
13353 texlive-titling
13354 texlive-tools
13355 texlive-ulem
13356 texlive-unicode-math
13357 texlive-xcolor
13358 (texlive-updmap.cfg (list texlive-amsfonts
13359 texlive-amsmath
13360 texlive-eurosym
13361 texlive-fonts-rsfs
13362 texlive-jknappen
13363 texlive-latex-ucs
13364 texlive-lm
13365 texlive-lm-math
13366 texlive-mathpazo
13367 texlive-oberdiek
13368 texlive-zapfding))))
13369 (home-page "https://jupyter.org")
13370 (synopsis "Converting Jupyter Notebooks")
13371 (description "The @code{nbconvert} tool, @code{jupyter nbconvert}, converts
13372 notebooks to various other formats via Jinja templates. It allows you to
13373 convert an @code{.ipynb} notebook file into various static formats including:
13374
13375 @enumerate
13376 @item HTML
13377 @item LaTeX
13378 @item PDF
13379 @item Reveal JS
13380 @item Markdown (md)
13381 @item ReStructured Text (rst)
13382 @item executable script
13383 @end enumerate\n")
13384 (license license:bsd-3)))
13385
13386 (define-public python-notebook
13387 (package
13388 (name "python-notebook")
13389 (version "6.4.10")
13390 (source (origin
13391 (method url-fetch)
13392 (uri (pypi-uri "notebook" version))
13393 (sha256
13394 (base32
13395 "03p976xq1l9xf4djwk0snmywd0zck3i6gjngxsl874i8qrmsf214"))))
13396 (build-system python-build-system)
13397 (arguments
13398 `(#:phases
13399 (modify-phases %standard-phases
13400 (add-after 'unpack 'use-our-home-for-tests
13401 (lambda _
13402 ;; The 'get_patch_env' function in this file reads:
13403 ;; 'HOME': cls.home_dir
13404 ;; but for some reason, that definition of HOME is not what the
13405 ;; GLib/GIO trash mechanism honors, which would cause test
13406 ;; failures. Instead, set 'HOME' here to an existing directory
13407 ;; and let the tests honor it.
13408 (substitute* "notebook/tests/launchnotebook.py"
13409 (("'HOME': .*," all)
13410 (string-append "# " all "\n")))
13411 (setenv "HOME" (getcwd))))
13412 (replace 'check
13413 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
13414 ;; These tests require a browser.
13415 (delete-file-recursively "notebook/tests/selenium")
13416 (when tests?
13417 ;; Interferes with test expectations.
13418 (unsetenv "JUPYTER_CONFIG_PATH")
13419 ;; Some tests do not expect all files to be installed in the
13420 ;; same directory, but JUPYTER_PATH contains multiple entries.
13421 (unsetenv "JUPYTER_PATH")
13422 (invoke "pytest" "-vv"
13423 ;; TODO: This tests fails because nbconvert does not
13424 ;; list "python" as a format.
13425 "-k" "not test_list_formats")))))))
13426 (propagated-inputs
13427 (list python-argon2-cffi
13428 python-ipykernel
13429 python-ipython-genutils
13430 python-jinja2
13431 python-jupyter-client
13432 python-jupyter-core
13433 python-nest-asyncio
13434 python-nbconvert
13435 python-nbformat
13436 python-prometheus-client
13437 python-pyzmq
13438 python-send2trash
13439 python-terminado
13440 python-tornado-6
13441 python-traitlets))
13442 (native-inputs
13443 (list python-coverage
13444 python-nbval
13445 python-pytest
13446 python-pytest-cov
13447 python-requests
13448 python-requests-unixsocket))
13449 (home-page "https://jupyter.org/")
13450 (synopsis "Web-based notebook environment for interactive computing")
13451 (description
13452 "The Jupyter HTML notebook is a web-based notebook environment for
13453 interactive computing.")
13454 (license license:bsd-3)))
13455
13456 (define-public python-widgetsnbextension
13457 (package
13458 (name "python-widgetsnbextension")
13459 (version "3.5.1")
13460 (source
13461 (origin
13462 (method url-fetch)
13463 (uri (pypi-uri "widgetsnbextension" version))
13464 (sha256
13465 (base32
13466 "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
13467 (build-system python-build-system)
13468 (propagated-inputs
13469 (list python-notebook))
13470 (home-page "https://ipython.org")
13471 (synopsis "IPython HTML widgets for Jupyter")
13472 (description "This package provides interactive HTML widgets for Jupyter
13473 notebooks.")
13474 (license license:bsd-3)))
13475
13476 (define-public python-ipywidgets
13477 (package
13478 (name "python-ipywidgets")
13479 (version "7.6.3")
13480 (source
13481 (origin
13482 (method url-fetch)
13483 (uri (pypi-uri "ipywidgets" version))
13484 (sha256
13485 (base32
13486 "1w217j8i53x14l7b05fk300k222zs9vkcjaa1rbrw3sk43k466lz"))))
13487 (build-system python-build-system)
13488 (propagated-inputs
13489 (list python-ipykernel
13490 python-ipython
13491 python-jupyterlab-widgets
13492 python-nbformat
13493 python-traitlets
13494 python-widgetsnbextension))
13495 (native-inputs
13496 (list python-mock python-pytest python-pytest-cov))
13497 (home-page "https://ipython.org")
13498 (synopsis "IPython HTML widgets for Jupyter")
13499 (description "Ipywidgets are interactive HTML widgets for Jupyter
13500 notebooks and the IPython kernel. Notebooks come alive when interactive
13501 widgets are used. Users gain control of their data and can visualize changes
13502 in the data.")
13503 (license license:bsd-3)))
13504
13505 (define-public python-jupyter-console
13506 (package
13507 (name "python-jupyter-console")
13508 (version "6.4.0")
13509 (source
13510 (origin
13511 (method url-fetch)
13512 (uri (pypi-uri "jupyter_console" version))
13513 (sha256
13514 (base32
13515 "1iqrxhd8hvlyf8cqbc731ssnwm61wrycnbiczy5wsfahd3hlh8i4"))))
13516 (build-system python-build-system)
13517 (propagated-inputs
13518 (list python-ipykernel python-jupyter-client python-prompt-toolkit
13519 python-pygments))
13520 (native-inputs
13521 (list python-nose python-pytest))
13522 (home-page "https://jupyter.org")
13523 (synopsis "Jupyter terminal console")
13524 (description "This package provides a terminal-based console frontend for
13525 Jupyter kernels. It also allows for console-based interaction with non-Python
13526 Jupyter kernels such as IJulia and IRKernel.")
13527 (license license:bsd-3)))
13528
13529 ;; The python-ipython and python-jupyter-console require each other. To get
13530 ;; the functionality in both packages working, strip down the
13531 ;; python-jupyter-console package when using it as an input to python-ipython.
13532 (define python-jupyter-console-minimal
13533 (package/inherit python-jupyter-console
13534 (name "python-jupyter-console-minimal")
13535 (arguments
13536 (substitute-keyword-arguments
13537 (package-arguments python-jupyter-console)
13538 ((#:phases phases)
13539 `(modify-phases ,phases
13540 (add-after 'install 'delete-bin
13541 (lambda* (#:key outputs #:allow-other-keys)
13542 ;; Delete the bin files, to avoid conflicts in profiles
13543 ;; where python-ipython and python-jupyter-console are
13544 ;; both present.
13545 (delete-file-recursively
13546 (string-append
13547 (assoc-ref outputs "out") "/bin"))))))))
13548 ;; Remove the python-ipython propagated input, to avoid the cycle
13549 (propagated-inputs
13550 (modify-inputs (package-propagated-inputs python-jupyter-console)
13551 (delete "python-ipython")))))
13552
13553 (define-public python-qtconsole
13554 (package
13555 (name "python-qtconsole")
13556 (version "5.3.0")
13557 (source
13558 (origin
13559 (method url-fetch)
13560 (uri (pypi-uri "qtconsole" version))
13561 (sha256
13562 (base32 "09anp8g7vqi8z8wyi2lv21a2frd2dyhyrzvcrk2anijyqzyj0dcf"))))
13563 (build-system python-build-system)
13564 (arguments
13565 `(#:phases
13566 (modify-phases %standard-phases
13567 (add-before 'check 'pre-check
13568 (lambda _
13569 (setenv "QT_QPA_PLATFORM" "offscreen")
13570 (setenv "HOME" "/tmp")
13571 ;; FIXME: skip a failing test.
13572 (substitute* "qtconsole/tests/test_jupyter_widget.py"
13573 (("def test_other_output") "def _test_other_output")))))))
13574 (propagated-inputs
13575 (list python-ipykernel python-ipython-genutils python-jupyter-client
13576 python-jupyter-core python-pygments python-pyqt python-pyzmq
13577 python-qtpy python-traitlets))
13578 (native-inputs
13579 (list python-flaky python-pytest python-pytest-qt))
13580 (home-page "https://jupyter.org")
13581 (synopsis "Jupyter Qt console")
13582 (description "This package provides a Qt-based console for Jupyter with
13583 support for rich media output.")
13584 (license license:bsd-3)))
13585
13586 (define-public python-jsbeautifier
13587 (package
13588 (name "python-jsbeautifier")
13589 (version "1.10.2")
13590 (home-page "https://github.com/beautify-web/js-beautify")
13591 (source (origin
13592 (method git-fetch)
13593 (uri (git-reference
13594 (url home-page)
13595 (commit (string-append "v" version))))
13596 (file-name (git-file-name name version))
13597 (sha256
13598 (base32
13599 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
13600 (build-system python-build-system)
13601 (arguments
13602 `(#:phases (modify-phases %standard-phases
13603 (add-after 'unpack 'chdir
13604 (lambda _
13605 ;; The upstream Git repository contains all the code,
13606 ;; but this package only builds the python code.
13607 (chdir "python")
13608 #t))
13609 (add-after 'unpack 'patch-python-six-requirements
13610 (lambda _
13611 (substitute* "python/setup.py"
13612 (("six>=1.12.0")
13613 "six>=1.11.0"))
13614 #t)))))
13615 (propagated-inputs
13616 (list python-editorconfig python-six))
13617 (native-inputs
13618 (list python-pytest))
13619 (synopsis "JavaScript unobfuscator and beautifier")
13620 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
13621 popular online obfuscators.")
13622 (license license:expat)))
13623
13624 (define-public jupyter
13625 (package
13626 (name "jupyter")
13627 (version "1.0.0")
13628 (source
13629 (origin
13630 (method url-fetch)
13631 (uri (pypi-uri "jupyter" version))
13632 (sha256
13633 (base32
13634 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
13635 (build-system python-build-system)
13636 (arguments '(#:tests? #f)) ; there are none.
13637 (propagated-inputs
13638 (list python-ipykernel
13639 python-ipywidgets
13640 python-jupyter-console
13641 python-nbconvert
13642 python-notebook
13643 python-qtconsole))
13644 (home-page "https://jupyter.org")
13645 (synopsis "Web application for interactive documents")
13646 (description
13647 "The Jupyter Notebook is a web application that allows you to create and
13648 share documents that contain live code, equations, visualizations and
13649 explanatory text. Uses include: data cleaning and transformation, numerical
13650 simulation, statistical modeling, machine learning and much more.")
13651 (license license:bsd-3)))
13652
13653 (define-public python-chardet
13654 (package
13655 (name "python-chardet")
13656 (version "4.0.0")
13657 (source
13658 (origin
13659 (method url-fetch)
13660 (uri (pypi-uri "chardet" version))
13661 (sha256
13662 (base32
13663 "1ykr04qyhgpc0h5b7dhqw4g92b1xv7ki2ky910mhy4mlbnhm6vqd"))))
13664 (native-inputs
13665 (list python-pytest))
13666 (build-system python-build-system)
13667 (arguments
13668 (list #:phases
13669 #~(modify-phases %standard-phases
13670 (replace 'check
13671 (lambda _
13672 (invoke "pytest" "-vv")))
13673 ;; This package provides a 'chardetect' executable that only
13674 ;; depends on Python, so customize the wrap phase to avoid
13675 ;; adding pytest and friends in order to save size.
13676 ;; (See also <https://bugs.gnu.org/25235>.)
13677 (replace 'wrap
13678 (lambda* (#:key inputs outputs #:allow-other-keys)
13679 (let* ((sitedir (site-packages inputs outputs))
13680 (python (dirname (dirname
13681 (search-input-file
13682 inputs "bin/python"))))
13683 (python-sitedir
13684 (string-append python "/lib/python"
13685 (python-version python)
13686 "/site-packages")))
13687 (wrap-program (string-append #$output "/bin/chardetect")
13688 `("GUIX_PYTHONPATH" ":" suffix
13689 ,(list sitedir python-sitedir)))))))))
13690 (home-page "https://github.com/chardet/chardet")
13691 (synopsis "Universal encoding detector for Python 2 and 3")
13692 (description
13693 "This package provides @code{chardet}, a Python module that can
13694 automatically detect a wide range of file encodings.")
13695 (license license:lgpl2.1+)))
13696
13697 (define-public python-charset-normalizer
13698 (package
13699 (name "python-charset-normalizer")
13700 (version "2.0.11")
13701 (source
13702 (origin
13703 (method url-fetch)
13704 (uri (pypi-uri "charset-normalizer" version))
13705 (sha256
13706 (base32 "071pi2kd222rjjrjdllffqv3iz4bfaj93a9bfs65907fd6fqlfcq"))))
13707 (build-system python-build-system)
13708 (arguments
13709 (list #:phases
13710 #~(modify-phases %standard-phases
13711 ;; This package provides a 'normalizer' executable that only
13712 ;; depends on Python, so customize the wrap phase to avoid
13713 ;; adding pytest and friends in order to save size.
13714 ;; (See also <https://bugs.gnu.org/25235>.)
13715 (replace 'wrap
13716 (lambda* (#:key inputs outputs #:allow-other-keys)
13717 (let* ((sitedir (site-packages inputs outputs))
13718 (python (dirname (dirname
13719 (search-input-file
13720 inputs "bin/python"))))
13721 (python-sitedir
13722 (string-append python "/lib/python"
13723 (python-version python)
13724 "/site-packages")))
13725 (wrap-program (string-append #$output "/bin/normalizer")
13726 `("GUIX_PYTHONPATH" ":" suffix
13727 ,(list sitedir python-sitedir)))))))))
13728 (native-inputs
13729 (list python-pytest))
13730 (home-page "https://github.com/ousret/charset_normalizer")
13731 (synopsis "Universal Charset Detector, alternative to Chardet")
13732 (description "This library helps you read text from an unknown charset
13733 encoding. Motivated by @code{chardet}, it tries to resolve the issue by
13734 taking a new approach. All IANA character set names for which the Python core
13735 library provides codecs are supported.")
13736 (license license:expat)))
13737
13738 (define-public python-docopt
13739 (package
13740 (name "python-docopt")
13741 (version "0.6.2")
13742 (source
13743 (origin
13744 (method git-fetch)
13745 ;; The release on PyPI does not include tests.
13746 (uri (git-reference
13747 (url "https://github.com/docopt/docopt")
13748 (commit version)))
13749 (file-name (git-file-name name version))
13750 (sha256
13751 (base32
13752 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))
13753 (patches (search-patches "python-docopt-pytest6-compat.patch"))))
13754 (build-system python-build-system)
13755 (native-inputs
13756 (list python-pytest))
13757 (arguments
13758 `(#:phases
13759 (modify-phases %standard-phases
13760 (replace 'check
13761 (lambda* (#:key tests? #:allow-other-keys)
13762 (when tests?
13763 (invoke "py.test")))))))
13764 (home-page "http://docopt.org")
13765 (synopsis "Command-line interface description language for Python")
13766 (description "This library allows the user to define a command-line
13767 interface from a program's help message rather than specifying it
13768 programmatically with command-line parsers like @code{getopt} and
13769 @code{argparse}.")
13770 (license license:expat)))
13771
13772 (define-public python-pythonanywhere
13773 (package
13774 (name "python-pythonanywhere")
13775 (version "0.9.10")
13776 (source
13777 (origin
13778 (method git-fetch)
13779 (uri (git-reference
13780 (url "https://github.com/pythonanywhere/helper_scripts")
13781 (commit (string-append "v" version))))
13782 (file-name (git-file-name name version))
13783 (sha256
13784 (base32
13785 "0vzzc1g8pl7cb9yvm3n1j5zlzxf0jd423rzspc2kvpb8yhvydklx"))))
13786 (build-system python-build-system)
13787 (arguments
13788 `(#:phases
13789 (modify-phases %standard-phases
13790 (add-before 'check 'change-home
13791 (lambda _
13792 (setenv "HOME" "/tmp")))
13793 (replace 'check
13794 (lambda* (#:key tests? #:allow-other-keys)
13795 (when tests?
13796 ;; Exclude tests marked as slowtest that assume running
13797 ;; inside Git repository on system with virtualenvwrapper
13798 ;; installed.
13799 (invoke "pytest" "-m" "not slowtest")))))))
13800 (native-inputs
13801 (list python-pytest
13802 python-psutil
13803 python-responses
13804 python-pytest-mock))
13805 (propagated-inputs
13806 (list python-dateutil
13807 python-docopt
13808 python-packaging
13809 python-requests
13810 python-schema
13811 python-tabulate
13812 python-typer))
13813 (home-page "https://github.com/pythonanywhere/helper_scripts/")
13814 (synopsis "PythonAnywhere helper tools for users")
13815 (description "PythonAnywhere provides a command-line interface and an
13816 application programming interface that allows managing Web apps and scheduled
13817 tasks. It includes single-command deployment for the Django Girls tutorial.")
13818 (license license:expat)))
13819
13820 (define-public python-pythondialog
13821 (package
13822 (name "python-pythondialog")
13823 (version "3.4.0")
13824 (source (origin
13825 (method url-fetch)
13826 (uri (pypi-uri "pythondialog" version))
13827 (sha256
13828 (base32
13829 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
13830 (build-system python-build-system)
13831 (arguments
13832 `(#:phases (modify-phases %standard-phases
13833 (add-after 'unpack 'patch-path
13834 (lambda* (#:key inputs #:allow-other-keys)
13835 (let* ((dialog (assoc-ref inputs "dialog")))
13836 (substitute* "dialog.py"
13837 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)") (string-append
13838 "os.getenv(\"PATH\") + \":"
13839 dialog
13840 "/bin\"")))
13841 #t))))
13842 #:tests? #f))
13843 (propagated-inputs (list dialog))
13844 (home-page "http://pythondialog.sourceforge.net/")
13845 (synopsis "Python interface to the UNIX dialog utility")
13846 (description
13847 "A Python wrapper for the dialog utility. Its purpose is to
13848 provide an easy to use, pythonic and comprehensive Python interface to dialog.
13849 This allows one to make simple text-mode user interfaces on Unix-like systems")
13850 (license license:lgpl2.1)))
13851
13852 (define-public python-configobj
13853 (package
13854 (name "python-configobj")
13855 (version "5.0.6")
13856 (source (origin
13857 (method url-fetch)
13858 (uri (pypi-uri "configobj" version))
13859 (sha256
13860 (base32
13861 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
13862 ;; Patch setup.py so it looks for python-setuptools, which is
13863 ;; required to parse the keyword 'install_requires' in setup.py.
13864 (patches (search-patches "python-configobj-setuptools.patch"))))
13865 (build-system python-build-system)
13866 (propagated-inputs
13867 (list python-six))
13868 (synopsis "Config file reading, writing and validation")
13869 (description "ConfigObj is a simple but powerful config file reader and
13870 writer: an ini file round tripper. Its main feature is that it is very easy to
13871 use, with a straightforward programmer’s interface and a simple syntax for
13872 config files.")
13873 (home-page "https://github.com/DiffSK/configobj")
13874 (license license:bsd-3)))
13875
13876 (define-public python-configargparse
13877 (package
13878 (name "python-configargparse")
13879 (version "1.2.3")
13880 (source (origin
13881 (method url-fetch)
13882 (uri (pypi-uri "ConfigArgParse" version))
13883 (sha256
13884 (base32
13885 "1p1pzpf5qpf80bfxsx1mbw9blyhhypjvhl3i60pbmhfmhvlpplgd"))))
13886 (build-system python-build-system)
13887 (native-inputs
13888 (list python-pyyaml))
13889 (arguments
13890 `(#:phases
13891 (modify-phases %standard-phases
13892 (replace 'check
13893 (lambda _
13894 ;; Bypass setuptools-shim because one test relies on "setup.py"
13895 ;; being the first argument passed to the python call.
13896 ;;
13897 ;; NOTE: Many tests do not run because they rely on Python's
13898 ;; built-in test.test_argparse, but we remove the unit tests from
13899 ;; our Python installation.
13900 (invoke "python" "setup.py" "test"))))))
13901 (synopsis "Replacement for argparse")
13902 (description "A drop-in replacement for argparse that allows options to also
13903 be set via config files and/or environment variables.")
13904 (home-page "https://github.com/bw2/ConfigArgParse")
13905 (license license:expat)))
13906
13907 (define-public python-connection-pool
13908 (package
13909 (name "python-connection-pool")
13910 (version "0.0.3")
13911 (source
13912 (origin
13913 (method url-fetch)
13914 (uri (pypi-uri "connection_pool" version))
13915 (sha256
13916 (base32 "1p6hfkcl4n3hhhcgjbaxn21i7b1yipag6j7dnilir4k5xxx9whmz"))))
13917 (build-system python-build-system)
13918 (home-page "https://github.com/zhouyl/ConnectionPool")
13919 (synopsis "Thread-safe connection pool")
13920 (description "This package provides a library implementing a thread-safe
13921 connection pool.")
13922 (license license:expat)))
13923
13924 (define-public python-argparse-manpage
13925 (package
13926 (name "python-argparse-manpage")
13927 (version "1.1")
13928 (source
13929 (origin
13930 (method url-fetch)
13931 (uri (pypi-uri "argparse-manpage" version))
13932 (sha256
13933 (base32
13934 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
13935 (build-system python-build-system)
13936 (home-page "https://github.com/praiskup/argparse-manpage")
13937 (synopsis "Build manual page from Python's ArgumentParser object")
13938 (description
13939 "This package provides tools to build manual pages from Python's
13940 @code{ArgumentParser} object.")
13941 (license license:asl2.0)))
13942
13943 (define-public python-contextlib2
13944 (package
13945 (name "python-contextlib2")
13946 (version "0.6.0.post1")
13947 (source
13948 (origin
13949 (method url-fetch)
13950 (uri (pypi-uri "contextlib2" version))
13951 (sha256
13952 (base32
13953 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
13954 (build-system python-build-system)
13955 (home-page "https://contextlib2.readthedocs.org/")
13956 (synopsis "Tools for decorators and context managers")
13957 (description "This module is primarily a backport of the Python
13958 3.2 contextlib to earlier Python versions. Like contextlib, it
13959 provides utilities for common tasks involving decorators and context
13960 managers. It also contains additional features that are not part of
13961 the standard library.")
13962 (license license:psfl)))
13963
13964 (define-public python-texttable
13965 (package
13966 (name "python-texttable")
13967 (version "1.6.4")
13968 (source
13969 (origin
13970 (method url-fetch)
13971 (uri (pypi-uri "texttable" version))
13972 (sha256
13973 (base32
13974 "1sbn821394rix6xgj3zqk743pj6nqm1qz81zgis2bcpp2ng7pvj2"))))
13975 (build-system python-build-system)
13976 (arguments
13977 `(#:phases
13978 (modify-phases %standard-phases
13979 (replace 'check
13980 (lambda* (#:key tests? #:allow-other-keys)
13981 (when tests? (invoke "pytest" "-vv" "tests.py")))))))
13982 (native-inputs
13983 (list python-pytest))
13984 (home-page "https://github.com/foutaise/texttable/")
13985 (synopsis "Python module for creating simple ASCII tables")
13986 (description "Texttable is a Python module for creating simple ASCII
13987 tables.")
13988 (license license:expat)))
13989
13990 (define-public python-atomicwrites
13991 (package
13992 (name "python-atomicwrites")
13993 (version "1.4.0")
13994 (source (origin
13995 (method url-fetch)
13996 (uri (pypi-uri "atomicwrites" version))
13997 (sha256
13998 (base32
13999 "0yla2svfhfqrcj8qbyqzx7wi4jy0dwcxvlkg0k3zjd54s5m3jw5f"))))
14000 (build-system python-build-system)
14001 (arguments `(#:tests? #f)) ;avoid circular dependency with pytest
14002 (synopsis "Atomic file writes in Python")
14003 (description "Library for atomic file writes using platform dependent tools
14004 for atomic file system operations.")
14005 (home-page "https://github.com/untitaker/python-atomicwrites")
14006 (license license:expat)))
14007
14008 (define-public python-qstylizer
14009 (package
14010 (name "python-qstylizer")
14011 (version "0.1.10")
14012 (source
14013 (origin
14014 (method git-fetch)
14015 (uri (git-reference
14016 (url "https://github.com/blambright/qstylizer")
14017 (commit version)))
14018 (file-name (git-file-name name version))
14019 (sha256
14020 (base32 "0zvkn6g1dn51kkw33v8qrlnwlmf5h6sw1ay3bh14ifjr8b9xsjjz"))))
14021 (build-system python-build-system)
14022 (arguments
14023 `(#:test-target "pytest"
14024 #:phases
14025 (modify-phases %standard-phases
14026 (add-before 'build 'set-pbr-version
14027 (lambda _
14028 (setenv "PBR_VERSION" "3.0.1"))))))
14029 (native-inputs
14030 (list python-pbr
14031 python-pytest
14032 python-pytest-catchlog
14033 python-pytest-cov
14034 python-pytest-mock
14035 python-pytest-runner
14036 python-pytest-xdist))
14037 (propagated-inputs
14038 (list python-inflection python-tinycss))
14039 (home-page "https://github.com/blambright/qstylizer")
14040 (synopsis "Qt stylesheet generation utility for PyQt/PySide")
14041 (description "@code{qstylizer} is a Python package designed to help with
14042 the construction of PyQt/PySide stylesheets.")
14043 (license license:expat)))
14044
14045 (define-public python-click-threading
14046 (package
14047 (name "python-click-threading")
14048 (version "0.5.0")
14049 (source (origin
14050 (method url-fetch)
14051 (uri (pypi-uri "click-threading" version))
14052 (sha256
14053 (base32
14054 "0f9lmxwcq0y9lb8w0whbni7gwy12gbv74h1igh85qn9aq0iydkxd"))))
14055 (build-system python-build-system)
14056 (propagated-inputs
14057 (list python-click))
14058 (synopsis "Utilities for multithreading in Click")
14059 (description "This package provides utilities for multithreading in Click
14060 applications.")
14061 (home-page "https://github.com/click-contrib/click-threading")
14062 (license license:expat)))
14063
14064 (define-public python-click-log
14065 (package
14066 (name "python-click-log")
14067 (version "0.3.2")
14068 (source (origin
14069 (method url-fetch)
14070 (uri (pypi-uri "click-log" version))
14071 (sha256
14072 (base32
14073 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
14074 (build-system python-build-system)
14075 (propagated-inputs
14076 (list python-click))
14077 (synopsis "Logging for click applications")
14078 (description "This package provides a Python library for logging Click
14079 applications.")
14080 (home-page "https://github.com/click-contrib/click-log")
14081 (license license:expat)))
14082
14083 (define-public python-click-default-group
14084 (package
14085 (name "python-click-default-group")
14086 (version "1.2.2")
14087 (source (origin
14088 (method url-fetch)
14089 (uri (pypi-uri "click-default-group" version))
14090 (sha256
14091 (base32
14092 "015r78jk8gznfw0dphpwaqcx5mhg5822b55w5xbb6i7sin70wmnr"))))
14093 (build-system python-build-system)
14094 (arguments
14095 `(#:tests? #f)) ; no target
14096 (propagated-inputs
14097 (list python-click))
14098 (synopsis "Extends click.Group")
14099 (description "This package extends click.Group to invoke a command without
14100 explicit subcommand name.")
14101 (home-page "https://github.com/click-contrib/click-default-group")
14102 (license license:bsd-3)))
14103
14104 (define-public python-structlog
14105 (package
14106 (name "python-structlog")
14107 (version "20.2.0")
14108 (source
14109 (origin
14110 (method url-fetch)
14111 (uri (pypi-uri "structlog" version))
14112 (sha256
14113 (base32
14114 "0x1i21vn3xjfa3j9ijbblia5z0jlzc9aqvpqc26sy16i8yjxyydg"))))
14115 (build-system python-build-system)
14116 (arguments
14117 `(#:phases
14118 (modify-phases %standard-phases
14119 (replace 'check
14120 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
14121 (when tests?
14122 (add-installed-pythonpath inputs outputs)
14123 (invoke "pytest"))
14124 #t)))))
14125 (native-inputs
14126 (list python-coverage
14127 python-freezegun
14128 python-pretend
14129 python-pytest
14130 python-pytest-asyncio
14131 python-simplejson
14132 python-twisted))
14133 (home-page "https://www.structlog.org/")
14134 (synopsis "Structured Logging for Python")
14135 (description "@code{structlog} changes logging in Python by adding structure
14136 to your log entries.")
14137 (license (list license:asl2.0 license:expat))))
14138
14139 (define-public python-apipkg
14140 (package
14141 (name "python-apipkg")
14142 (version "1.5")
14143 (source (origin
14144 (method url-fetch)
14145 (uri (pypi-uri "apipkg" version))
14146 (sha256
14147 (base32
14148 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
14149 (build-system python-build-system)
14150 (native-inputs
14151 (list python-pytest python-setuptools-scm))
14152 (synopsis "Namespace control and lazy-import mechanism")
14153 (description "With apipkg you can control the exported namespace of a Python
14154 package and greatly reduce the number of imports for your users. It is a small
14155 pure Python module that works on virtually all Python versions.")
14156 (home-page "https://github.com/pytest-dev/apipkg")
14157 (license license:expat)))
14158
14159 (define-public python-execnet
14160 (package
14161 (name "python-execnet")
14162 (version "1.9.0")
14163 (source (origin
14164 (method url-fetch)
14165 (uri (pypi-uri "execnet" version))
14166 (sha256
14167 (base32
14168 "1ia7dvrh0gvzzpi758mx55f9flr16bzdqlmi12swm4ncm4xlyscg"))
14169 (patches (search-patches "python-execnet-read-only-fix.patch"))))
14170 (build-system python-build-system)
14171 (arguments
14172 `(#:phases
14173 (modify-phases %standard-phases
14174 (replace 'check
14175 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
14176 (when tests?
14177 ;; Unset PYTHONDONTWRITEBYTECODE to match the
14178 ;; expectations of a test in
14179 ;; 'testing/test_gateway.py'.
14180 (unsetenv "PYTHONDONTWRITEBYTECODE")
14181
14182 (add-installed-pythonpath inputs outputs)
14183 (invoke "pytest" "-vv")))))))
14184 (native-inputs
14185 (list python-pytest python-setuptools-scm))
14186 (synopsis "Rapid multi-Python deployment")
14187 (description "Execnet provides a share-nothing model with
14188 channel-send/receive communication for distributing execution across many
14189 Python interpreters across version, platform and network barriers. It has a
14190 minimal and fast API targeting the following uses:
14191 @enumerate
14192 @item distribute tasks to (many) local or remote CPUs
14193 @item write and deploy hybrid multi-process applications
14194 @item write scripts to administer multiple environments
14195 @end enumerate")
14196 (home-page "https://codespeak.net/execnet/")
14197 (license license:expat)))
14198
14199 (define-public python-icalendar
14200 (package
14201 (name "python-icalendar")
14202 (version "4.1.0")
14203 (source (origin
14204 (method url-fetch)
14205 (uri (pypi-uri "icalendar" version))
14206 (sha256
14207 (base32
14208 "15dkq42rkqjdi17rpvmd1plnbwn4daby0nk1s1c3xi7w5v0bfj4p"))))
14209 (build-system python-build-system)
14210 (propagated-inputs
14211 (list python-dateutil python-pytz))
14212 (synopsis "Python library for parsing iCalendar files")
14213 (description "The icalendar package is a parser/generator of iCalendar
14214 files for use with Python.")
14215 (home-page "https://github.com/collective/icalendar")
14216 (license license:bsd-2)))
14217
14218 (define-public python-args
14219 (let ((commit "9460f1a35eb3055e9e4de1f0a6932e0883c72d65") (revision "0"))
14220 (package
14221 (name "python-args")
14222 (version (git-version "0.1.0" revision commit))
14223 (home-page "https://github.com/kennethreitz-archive/args")
14224 (source (origin
14225 (method git-fetch)
14226 (uri (git-reference
14227 (url home-page)
14228 (commit commit)))
14229 (file-name (git-file-name name version))
14230 (sha256
14231 (base32
14232 "1zfxpbp9vldqdrjmd0c6y3wisl35mx5v8zlyp3nhwpy1730wrc9j"))))
14233 (build-system python-build-system)
14234 (arguments
14235 `(#:phases (modify-phases %standard-phases
14236 (add-after 'unpack 'patch-args.py
14237 (lambda _
14238 (substitute* "args.py"
14239 (("basestring") "str"))))
14240 (replace 'check
14241 (lambda* (#:key tests? #:allow-other-keys)
14242 (when tests?
14243 (invoke "nosetests" "-v")))))))
14244 (native-inputs (list python-nose))
14245 (synopsis "Command-line argument parser")
14246 (description
14247 "This library provides a Python module to parse command-line arguments.")
14248 (license license:bsd-3))))
14249
14250 (define-public python-clint
14251 (package
14252 (name "python-clint")
14253 (version "0.5.1")
14254 (source (origin
14255 (method url-fetch)
14256 (uri (pypi-uri "clint" version))
14257 (sha256
14258 (base32
14259 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
14260 (build-system python-build-system)
14261 (arguments
14262 '(#:phases
14263 (modify-phases %standard-phases
14264 (replace 'check
14265 (lambda _ (invoke "py.test" "-v"))))))
14266 (native-inputs
14267 (list python-pytest))
14268 (propagated-inputs
14269 (list python-args))
14270 (home-page "https://github.com/kennethreitz/clint")
14271 (synopsis "Command-line interface tools")
14272 (description
14273 "Clint is a Python module filled with a set of tools for developing
14274 command-line applications, including tools for colored and indented
14275 output, progress bar display, and pipes.")
14276 (license license:isc)))
14277
14278 (define-public python-rply
14279 (package
14280 (name "python-rply")
14281 (version "0.7.8")
14282 (source (origin
14283 (method url-fetch)
14284 (uri (pypi-uri "rply" version))
14285 (sha256
14286 (base32
14287 "1j81nddvnb145x4p81bnfpyai6g26i2dc1633ycsk025bb18m01a"))))
14288 (build-system python-build-system)
14289 (propagated-inputs
14290 (list python-appdirs))
14291 (home-page "https://github.com/alex/rply")
14292 (synopsis "Parser generator for Python")
14293 (description
14294 "This package provides a pure Python based parser generator, that also
14295 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
14296 with a new public API, and RPython support.")
14297 (license license:bsd-3)))
14298
14299 (define-public python-hy
14300 (package
14301 (name "python-hy")
14302 (version "0.20.0")
14303 (source
14304 (origin
14305 (method git-fetch) ; no tests in PyPI release
14306 (uri (git-reference
14307 (url "https://github.com/hylang/hy")
14308 (commit version)))
14309 (file-name (git-file-name name version))
14310 (sha256
14311 (base32 "1g7djra9z7b0wyqyfrk2n4z3zamp2xkahv00jwdv35xmwwn09hq4"))))
14312 (build-system python-build-system)
14313 (arguments
14314 '(#:phases
14315 (modify-phases %standard-phases
14316 (replace 'check
14317 (lambda* (#:key tests? #:allow-other-keys)
14318 (when tests?
14319 (invoke "python" "-m" "pytest" "-k"
14320 (string-append ; skip some failed tests
14321 "not test_bin_hy_sys_executable"
14322 " and not test_bin_hy_circular_macro_require"
14323 " and not test_macro_from_module"))))))))
14324 (native-inputs
14325 (list python-pytest))
14326 (propagated-inputs
14327 (list python-astor python-colorama python-funcparserlib python-rply))
14328 (home-page "https://docs.hylang.org/en/stable/")
14329 (synopsis "Lisp frontend to Python")
14330 (description
14331 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
14332 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
14333 Python at your fingertips, in Lisp form.")
14334 (license license:expat)))
14335
14336 (define-public python-hissp
14337 (package
14338 (name "python-hissp")
14339 (version "0.2.0")
14340 (source
14341 (origin
14342 (method url-fetch)
14343 (uri (pypi-uri "hissp" version))
14344 (sha256
14345 (base32
14346 "0yns7f0q699zn2ziagyas2nkndl7mp1hhssv9x9mpl7jxj2p5myw"))))
14347 (build-system python-build-system)
14348 (home-page "https://github.com/gilch/hissp")
14349 (synopsis "It's Python with a Lissp")
14350 (description "Hissp is a modular Lisp implementation that compiles to a
14351 functional subset of Python—Syntactic macro metaprogramming with full access
14352 to the Python ecosystem.")
14353 (license license:asl2.0)))
14354
14355 (define-public python-promise
14356 (package
14357 (name "python-promise")
14358 (version "0.4.2")
14359 (source
14360 (origin
14361 (method url-fetch)
14362 (uri (pypi-uri "promise" version))
14363 (sha256
14364 (base32
14365 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
14366 (build-system python-build-system)
14367 ;; Tests wants python-futures, which is a python2 only program, and
14368 ;; can't be found by python-promise at test time.
14369 (arguments `(#:tests? #f))
14370 (home-page "https://github.com/syrusakbary/promise")
14371 (synopsis "Promises/A+ implementation for Python")
14372 (description
14373 "Promises/A+ implementation for Python")
14374 (license license:expat)))
14375
14376 (define-public python-progress
14377 (package
14378 (name "python-progress")
14379 (version "1.6")
14380 (source
14381 (origin
14382 (method url-fetch)
14383 (uri (pypi-uri "progress" version))
14384 (sha256
14385 (base32 "1k9lpb7lqr6mywpnqcz71y6qny54xlgprdp327za2gy0nnc6xj69"))))
14386 (build-system python-build-system)
14387 (home-page "http://github.com/verigak/progress/")
14388 (synopsis "Progress reporting bars for Python")
14389 (description "This Python package provides progress reporting for visual
14390 of progress of long running operations. There are multiple choices of
14391 progress bars and spinners, with customizable options, such as width, fill
14392 character, and suffix.")
14393 (license license:isc)))
14394
14395 (define-public python-progressbar2
14396 (package
14397 (name "python-progressbar2")
14398 (version "3.51.3")
14399 (source
14400 (origin
14401 (method url-fetch)
14402 (uri (pypi-uri "progressbar2" version))
14403 (sha256
14404 (base32
14405 "0b2v3mim90rmfvixkaniz2qrs650sk230rzgd5zhcjfldmlqgxpc"))))
14406 (build-system python-build-system)
14407 (propagated-inputs
14408 (list python-six python-utils))
14409 (native-inputs
14410 (list python-flake8
14411 python-freezegun
14412 python-pycodestyle
14413 python-pytest
14414 python-pytest-cache
14415 python-pytest-cov
14416 python-pytest-flakes
14417 python-pytest-pep8
14418 python-sphinx))
14419 (home-page "https://github.com/WoLpH/python-progressbar")
14420 (synopsis "Text progress bar library for Python")
14421 (description
14422 "This package provides a Python progressbar library to provide
14423 visual (yet text based) progress to long running operations.")
14424 (license license:bsd-3)))
14425
14426 (define-public python-progressbar33
14427 (package
14428 (name "python-progressbar33")
14429 (version "2.4")
14430 (source
14431 (origin
14432 (method url-fetch)
14433 (uri (pypi-uri "progressbar33" version))
14434 (sha256
14435 (base32
14436 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
14437 (build-system python-build-system)
14438 (home-page "https://github.com/germangh/python-progressbar")
14439 (synopsis "Text progress bar library for Python")
14440 (description
14441 "This package provides a text progress bar library for Python. This
14442 version only differs from the original @code{progressbar} package in that it
14443 uses relative package imports instead of absolute imports, which is necessary
14444 for the module to work under Python 3.3.")
14445 ;; Either or both of these licenses may be selected.
14446 (license (list license:lgpl2.1+ license:bsd-3))))
14447
14448 (define-public python-colorama
14449 (package
14450 (name "python-colorama")
14451 (version "0.4.4")
14452 (source
14453 (origin
14454 (method url-fetch)
14455 (uri (pypi-uri "colorama" version))
14456 (sha256
14457 (base32 "16w62sm95hmh55rqxn4zwdz0bkh3fqm1qnz9cwi3s510iasb4har"))))
14458 (build-system python-build-system)
14459 (synopsis "Colored terminal text rendering for Python")
14460 (description "Colorama is a Python library for rendering colored terminal
14461 text.")
14462 (home-page "https://pypi.org/project/colorama/")
14463 (license license:bsd-3)))
14464
14465 ;; awscli and botocore do not accept version 0.4.4
14466 (define-public python-colorama-for-awscli
14467 (package
14468 (inherit python-colorama)
14469 (version "0.4.3")
14470 (source
14471 (origin
14472 (method url-fetch)
14473 (uri (pypi-uri "colorama" version))
14474 (sha256
14475 (base32 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))))
14476
14477 (define-public python-moto
14478 (package
14479 (name "python-moto")
14480 (version "3.1.4")
14481 (source (origin
14482 (method url-fetch)
14483 (uri (pypi-uri "moto" version))
14484 (sha256
14485 (base32 "0dfnad1f9d5ybabs69dzc7x357z1r4jbhrhgw57gyic1qnmcw864"))))
14486 (build-system python-build-system)
14487 (arguments
14488 `(#:phases
14489 (modify-phases %standard-phases
14490 (add-after 'unpack 'patch-hardcoded-executable-names
14491 (lambda* (#:key inputs #:allow-other-keys)
14492 (let ((bash-exec (search-input-file inputs "/bin/sh")))
14493 (substitute* "moto/batch/models.py"
14494 (("/bin/sh") bash-exec))
14495 (substitute* (find-files "tests" "\\.py$")
14496 (("#!/bin/bash") (string-append "#!" bash-exec))))))
14497 (replace 'check
14498 (lambda* (#:key tests? #:allow-other-keys)
14499 (when tests?
14500 (invoke "pytest" "-vv" "-m" "not network" "-k"
14501 (string-append
14502 ;; XXX: This test is timing sensitive and may
14503 ;; fail non-deterministically.
14504 "not test_cancel_pending_job"
14505 ;; These tests require Docker.
14506 " and not test_terminate_job"
14507 " and not test_invoke_function_from_sqs_exception"
14508 " and not test_create_custom_lambda_resource__verify_cfnresponse_failed"
14509 " and not test_lambda_function"
14510
14511 ;; These tests also require the network.
14512 " and not test_put_record_batch_http_destination"
14513 " and not test_put_record_http_destination"
14514 " and not test_dependencies"
14515 " and not test_cancel_running_job"
14516 " and not test_container_overrides"))))))))
14517 (native-inputs
14518 (list python-flask
14519 python-flask-cors
14520 python-freezegun
14521 python-graphql-core
14522 python-pytest
14523 python-sure))
14524 (inputs
14525 (list bash-minimal))
14526 (propagated-inputs
14527 (list python-aws-xray-sdk
14528 python-boto3
14529 python-botocore
14530 python-cfn-lint
14531 python-cryptography
14532 python-dateutil
14533 python-docker
14534 python-importlib-metadata
14535 python-jinja2
14536 python-jose
14537 python-jsondiff
14538 python-markupsafe
14539 python-pytz
14540 python-pyyaml
14541 python-requests
14542 python-responses
14543 python-sshpubkeys
14544 python-werkzeug
14545 python-xmltodict))
14546 (home-page "https://github.com/spulec/moto")
14547 (synopsis "Mock out the boto library")
14548 (description
14549 "@code{moto} is a library designed to easily mock out the
14550 @code{boto} library.")
14551 (license license:asl2.0)))
14552
14553 (define-public python-rsa
14554 (package
14555 (name "python-rsa")
14556 (version "3.4.2")
14557 (source
14558 (origin
14559 (method url-fetch)
14560 (uri (pypi-uri "rsa" version))
14561 (sha256
14562 (base32
14563 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
14564 (build-system python-build-system)
14565 (propagated-inputs
14566 (list python-pyasn1))
14567 (synopsis "Pure-Python RSA implementation")
14568 (description "Python-RSA is a pure-Python RSA implementation. It supports
14569 encryption and decryption, signing and verifying signatures, and key
14570 generation according to PKCS#1 version 1.5. It can be used as a Python
14571 library as well as on the command line.")
14572 (home-page "https://stuvel.eu/rsa")
14573 (license license:asl2.0)))
14574
14575 (define-public python-pluggy
14576 (package
14577 (name "python-pluggy")
14578 (version "0.13.1")
14579 (source
14580 (origin
14581 (method url-fetch)
14582 (uri (pypi-uri "pluggy" version))
14583 (sha256
14584 (base32
14585 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
14586 (build-system python-build-system)
14587 (native-inputs
14588 (list python-setuptools-scm))
14589 (synopsis "Plugin and hook calling mechanism for Python")
14590 (description "Pluggy is an extraction of the plugin manager as used by
14591 Pytest but stripped of Pytest specific details.")
14592 (home-page "https://pypi.org/project/pluggy/")
14593 (license license:expat)))
14594
14595 (define-public python-plumbum
14596 (package
14597 (name "python-plumbum")
14598 (version "1.7.0")
14599 (source
14600 (origin
14601 (method url-fetch)
14602 (uri (pypi-uri "plumbum" version))
14603 (sha256
14604 (base32 "1kidj821k79dw064rlxh84xamb9h79ychg3pgj81jlvm5hs48xri"))))
14605 (build-system python-build-system)
14606 (arguments
14607 `(#:tests? #f)) ;no tests
14608 (native-inputs
14609 ;; XXX: Not actually used since there are no tests but required for
14610 ;; build.
14611 (list python-pytest))
14612 (home-page "https://plumbum.readthedocs.io")
14613 (synopsis "Python shell combinators library")
14614 (description
14615 "Plumbum is a library of tools for replacing shell scripts with Python
14616 code.")
14617 (license license:expat)))
14618
14619 (define-public python-deprecation
14620 (package
14621 (name "python-deprecation")
14622 (version "2.1.0")
14623 (source
14624 (origin
14625 (method url-fetch)
14626 (uri (pypi-uri "deprecation" version))
14627 (sha256
14628 (base32
14629 "1zqqjlgmhgkpzg9ss5ki8wamxl83xn51fs6gn2a8cxsx9vkbvcvj"))))
14630 (build-system python-build-system)
14631 (propagated-inputs
14632 (list python-packaging))
14633 (native-inputs
14634 (list python-unittest2))
14635 (home-page "https://deprecation.readthedocs.io/")
14636 (synopsis "Python library to handle automated deprecations")
14637 (description
14638 "This is a library that enables automated deprecations. It offers the
14639 @code{deprecated()} decorator to wrap functions, providing proper warnings
14640 both in documentation and via Python’s warnings system, as well as the
14641 @code{deprecation.fail_if_not_removed()} decorator for test methods to ensure
14642 that deprecated code is eventually removed.")
14643 (license license:asl2.0)))
14644
14645 (define-public python-jmespath
14646 (package
14647 (name "python-jmespath")
14648 (version "1.0.0")
14649 (source
14650 (origin
14651 (method url-fetch)
14652 (uri (pypi-uri "jmespath" version))
14653 (sha256
14654 (base32
14655 "0pmzfi230zfgiq2rz896kbb9f7mp0lnrjdl6x1npvxfixn0f5454"))))
14656 (build-system python-build-system)
14657 (native-inputs
14658 (list python-nose))
14659 (synopsis "JSON Matching Expressions")
14660 (description "JMESPath (pronounced “james path”) is a Python library that
14661 allows one to declaratively specify how to extract elements from a JSON
14662 document.")
14663 (home-page "https://github.com/jmespath/jmespath.py")
14664 (license license:expat)))
14665
14666 (define-public python-symengine
14667 (package
14668 (name "python-symengine")
14669 (version "0.9.2")
14670 (source
14671 (origin
14672 (method url-fetch)
14673 (uri (pypi-uri "symengine" version))
14674 (sha256
14675 (base32 "0qjgdbnb10kfk7jdhxnzfl8cpaps81k8vap7gm7q9ym3pgslazhg"))))
14676 (build-system python-build-system)
14677 (arguments
14678 (list
14679 #:phases
14680 #~(modify-phases %standard-phases
14681 (replace 'check
14682 (lambda* (#:key tests? #:allow-other-keys)
14683 (if tests?
14684 ;; Run tests against installed package.
14685 (with-directory-excursion "/tmp"
14686 (invoke "nosetests" "-v" "symengine.tests"))
14687 (format #t "test suite not run~%")))))))
14688 (native-inputs
14689 (list cmake python-cython python-nose))
14690 (inputs
14691 (list symengine))
14692 (home-page "https://github.com/symengine/symengine.py")
14693 (synopsis "Python library providing wrappers to SymEngine")
14694 (description
14695 "This library provides a Python wrapper to SymEngine, a fast C++ symbolic
14696 manipulation library.")
14697 (license license:expat)))
14698
14699 (define-public python-uncertainties
14700 (package
14701 (name "python-uncertainties")
14702 (version "3.1.5")
14703 (source
14704 (origin
14705 (method url-fetch)
14706 (uri (pypi-uri "uncertainties" version))
14707 (sha256
14708 (base32
14709 "00z9xl40czmqk0vmxjvmjvwb41r893l4dad7nj1nh6blw3kw28li"))))
14710 (build-system python-build-system)
14711 ;; While there are test files, there is no "tests" directory, so the tests
14712 ;; fail.
14713 (arguments '(#:tests? #false))
14714 (propagated-inputs
14715 (list python-future))
14716 (native-inputs
14717 (list python-nose python-numpy))
14718 (home-page "https://uncertainties-python-package.readthedocs.io/")
14719 (synopsis "Calculations with uncertainties")
14720 (description
14721 "The uncertainties package transparently handles calculations with
14722 numbers with uncertainties. It can also yield the derivatives of any
14723 expression.")
14724 (license license:bsd-3)))
14725
14726 (define-public python-unicodedata2
14727 (package
14728 (name "python-unicodedata2")
14729 (version "14.0.0")
14730 (source
14731 (origin
14732 (method url-fetch)
14733 (uri (pypi-uri "unicodedata2" version))
14734 (sha256
14735 (base32 "110nnvh02ssp92xbmswy39aa186jrmb7m41x4220wigl8c0dzxs1"))))
14736 (build-system python-build-system)
14737 (home-page "https://github.com/fonttools/unicodedata2")
14738 (synopsis "Python unicodedata backport")
14739 (description "This package corresponds to the latest @code{unicodedata}
14740 standard Python module.")
14741 (license license:asl2.0)))
14742
14743 (define-public python-asteval
14744 (package
14745 (name "python-asteval")
14746 (version "0.9.23")
14747 (source
14748 (origin
14749 (method url-fetch)
14750 (uri (pypi-uri "asteval" version))
14751 (sha256
14752 (base32
14753 "0f54sd4w1a72ij1bcxs2x7dk9xf8bzclawijf1z18bqx9f96l2gm"))))
14754 (build-system python-build-system)
14755 (native-inputs
14756 (list python-pytest))
14757 (home-page "https://github.com/newville/asteval")
14758 (synopsis "Minimalistic evaluator of Python expressions")
14759 (description
14760 "This package provides a minimalistic evaluator of Python expression
14761 using the @code{ast} module")
14762 (license license:expat)))
14763
14764 (define-public python-lmfit
14765 (package
14766 (name "python-lmfit")
14767 (version "1.0.2")
14768 (source
14769 (origin
14770 (method url-fetch)
14771 (uri (pypi-uri "lmfit" version))
14772 (sha256
14773 (base32
14774 "0iab33jjb60f8kn0k0cqb0vjp1mdskks2n3kpn97zkw5cvjhq2b7"))))
14775 (build-system python-build-system)
14776 (propagated-inputs
14777 (list python-asteval python-numpy python-scipy python-uncertainties))
14778 (native-inputs
14779 (list python-pytest))
14780 (home-page "https://lmfit.github.io/lmfit-py/")
14781 (synopsis "Least-Squares minimization with bounds and constraints")
14782 (description
14783 "Lmfit provides a high-level interface to non-linear optimization and
14784 curve fitting problems for Python. It builds on and extends many of the
14785 optimization methods of @code{scipy.optimize}. Initially inspired by (and
14786 named for) extending the Levenberg-Marquardt method from
14787 @code{scipy.optimize.leastsq}, lmfit now provides a number of useful
14788 enhancements to optimization and data fitting problems.")
14789 (license license:bsd-3)))
14790
14791 (define-public python-bokeh
14792 (package
14793 (name "python-bokeh")
14794 (version "2.4.3")
14795 (source (origin
14796 (method url-fetch)
14797 (uri (pypi-uri "bokeh" version))
14798 (sha256
14799 (base32
14800 "00sbhya9vfdv3yi07j6mxwx1x1h9497nhd3smdjrcdxgc48q0czg"))))
14801 (build-system python-build-system)
14802 (arguments
14803 `(#:phases
14804 (modify-phases %standard-phases
14805 (replace 'check
14806 (lambda* (#:key tests? #:allow-other-keys)
14807 (when tests?
14808 ;; These require selenium.
14809 (delete-file "tests/unit/bokeh/io/test_export.py")
14810 (delete-file "tests/unit/bokeh/io/test_webdriver.py")
14811 (delete-file "tests/unit/bokeh/embed/test_standalone.py")
14812
14813 ;; Doesn't find ManagedServerLoop fixture
14814 (delete-file "tests/unit/bokeh/test_client_server.py")
14815
14816 ;; This fails because of the Guix wrapper around pytest
14817 (delete-file "tests/unit/bokeh/io/test_util__io.py")
14818
14819 ;; Fixture ipython not found.
14820 (delete-file "tests/unit/bokeh/application/handlers/test_notebook__handlers.py")
14821 (delete-file "tests/unit/bokeh/command/subcommands/test_info.py")
14822
14823 ;; pd fixture not found.
14824 (delete-file "tests/unit/bokeh/models/test_mappers.py")
14825 (delete-file "tests/unit/bokeh/models/util/test_structure.py")
14826 (delete-file "tests/unit/bokeh/plotting/test__plot.py")
14827 (delete-file "tests/unit/bokeh/plotting/test__graph.py")
14828 (delete-file "tests/unit/bokeh/plotting/test_figure.py")
14829 (delete-file "tests/unit/bokeh/core/test_json_encoder.py")
14830 (delete-file "tests/unit/bokeh/core/property/test_bases.py")
14831 (delete-file "tests/unit/bokeh/core/property/test_container.py")
14832 (delete-file "tests/unit/bokeh/core/property/test_dataspec.py")
14833 (delete-file "tests/unit/bokeh/core/property/test_datetime.py")
14834 (delete-file "tests/unit/bokeh/core/property/test_pandas.py")
14835
14836 ;; nx fixture not found.
14837 (delete-file "tests/unit/bokeh/plotting/test_graph.py")
14838 (delete-file "tests/unit/bokeh/models/test_graphs.py")
14839 (delete-file "tests/unit/bokeh/io/test_showing.py")
14840 (delete-file "tests/unit/bokeh/document/test_events__document.py")
14841
14842 ;; These tests need external sample data
14843 (delete-file-recursively "tests/unit/bokeh/sampledata/")
14844
14845 ;; Attempts to install something via npm.
14846 (delete-file "tests/unit/bokeh/test_ext.py")
14847
14848 ;; More failures due to set up problems.
14849 (delete-file "tests/unit/bokeh/server/test_server__server.py")
14850 (delete-file "tests/unit/bokeh/server/test_tornado__server.py")
14851 (delete-file "tests/unit/bokeh/util/test_serialization.py")
14852 (delete-file "tests/unit/bokeh/util/test_hex.py")
14853 (delete-file "tests/unit/bokeh/models/test_sources.py")
14854 (delete-file "tests/unit/bokeh/embed/test_bundle.py")
14855
14856 (invoke "pytest" "-v")))))))
14857 (propagated-inputs
14858 (list node-lts
14859 python-jinja2
14860 python-numpy
14861 python-packaging
14862 python-pillow
14863 python-pyyaml
14864 python-tornado
14865 python-typing-extensions))
14866 (native-inputs
14867 (list python-beautifulsoup4
14868 python-dateutil
14869 python-flaky
14870 python-nbconvert
14871 python-pandas
14872 python-pytest
14873 python-pytz
14874 python-requests))
14875 (home-page "https://github.com/bokeh/bokeh")
14876 (synopsis "Interactive plots and applications in the browser from Python")
14877 (description
14878 "This package provides tools for interactive plots and applications in the
14879 browser from Python.")
14880 (license license:bsd-3)))
14881
14882 (define-public python-boto
14883 (package
14884 (name "python-boto")
14885 (version "2.49.0")
14886 (source (origin
14887 (method url-fetch)
14888 (uri (pypi-uri "boto" version))
14889 (sha256
14890 (base32
14891 "0njy09c4wjx7ipxhwi6vv404nflyiasl78vwwxxpclnql903n3ga"))))
14892 (build-system python-build-system)
14893 (arguments
14894 ;; XXX: This package is unmaintained and has problems with newer versions
14895 ;; of Python 3 as well as test libraries. 'python-moto' still uses a
14896 ;; subset of this library, so keep it around for now, but disable tests.
14897 '(#:tests? #f))
14898 (propagated-inputs
14899 (list python-paramiko python-requests))
14900 (home-page "https://github.com/boto/boto")
14901 (synopsis "Python interfaces for Amazon Web Services")
14902 (description
14903 "This package provides various facilities for interacting with Amazon
14904 Web Services through Python.
14905
14906 This software is unmaintained, and new projects should use @code{boto3} instead.")
14907 (license license:expat)))
14908
14909 (define-public python-botocore
14910 ;; Note: When updating botocore, also make sure that boto3 and awscli
14911 ;; are compatible.
14912 (package
14913 (name "python-botocore")
14914 (version "1.24.35")
14915 (source
14916 (origin
14917 (method url-fetch)
14918 (uri (pypi-uri "botocore" version))
14919 (sha256
14920 (base32
14921 "0rv8mvhq5s373zdjs2yb45hzvqcqdh2lp2rbb21jjc8ciwnl5d9n"))))
14922 (build-system python-build-system)
14923 (arguments
14924 ;; FIXME: Many tests are failing.
14925 '(#:tests? #f))
14926 (propagated-inputs
14927 (list python-dateutil python-jmespath python-urllib3))
14928 (home-page "https://github.com/boto/botocore")
14929 (synopsis "Low-level interface to AWS")
14930 (description "Botocore is a Python library that provides a low-level
14931 interface to the Amazon Web Services (AWS) API.")
14932 (license license:asl2.0)))
14933
14934 (define-public python-boto3
14935 (package
14936 (name "python-boto3")
14937 (version "1.21.35")
14938 (home-page "https://github.com/boto/boto3")
14939 (source (origin
14940 (method git-fetch)
14941 (uri (git-reference (url home-page) (commit version)))
14942 (file-name (git-file-name name version))
14943 (sha256
14944 (base32
14945 "1kdyf238rpfldnpzs0rdh3nhjn6hwfym4faskyhzlgzkf1smmbg1"))))
14946 (arguments
14947 `(#:phases
14948 (modify-phases %standard-phases
14949 (add-after 'unpack 'delete-network-tests
14950 ;; Deleting integration tests because they are trying to connect to AWS.
14951 (lambda _
14952 (delete-file-recursively "tests/integration")))
14953 (replace 'check
14954 (lambda* (#:key tests? #:allow-other-keys)
14955 (when tests?
14956 (invoke "pytest" "-v")))))))
14957 (build-system python-build-system)
14958 (native-inputs
14959 (list python-nose python-mock python-pytest))
14960 (propagated-inputs
14961 (list python-botocore python-jmespath python-s3transfer))
14962 (synopsis "AWS SDK for Python")
14963 (description
14964 "Boto3 is a Python library for writing programs that interact with
14965 @acronym{AWS,Amazon Web Services}.")
14966 (license license:asl2.0)))
14967
14968 (define-public python-pyfiglet
14969 (package
14970 (name "python-pyfiglet")
14971 (version "0.8.post1")
14972 (source
14973 (origin
14974 (method url-fetch)
14975 (uri (pypi-uri "pyfiglet" version))
14976 (sha256
14977 (base32
14978 "0f9n2076ga2ccsg174k2d7n0z4d44ml96yzc72s6g4nhalbk5hn6"))))
14979 (build-system python-build-system)
14980 (home-page "https://github.com/pwaller/pyfiglet")
14981 (synopsis "Draw ASCII art big letters in Python")
14982 (description "This module lets you draw large letter from ordinary characters
14983 in pure Python.")
14984 (license license:expat)))
14985
14986 (define-public python-xdo
14987 (package
14988 (name "python-xdo")
14989 (version "0.3")
14990 (source (origin
14991 (method url-fetch)
14992 (uri (string-append
14993 "http://http.debian.net/debian/pool/main/p/python-xdo/"
14994 "python-xdo_" version ".orig.tar.gz"))
14995 (sha256
14996 (base32
14997 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
14998 (build-system python-build-system)
14999 (arguments
15000 '(#:phases
15001 (modify-phases %standard-phases
15002 (add-before 'install 'patch-libxdo-path
15003 ;; Hardcode the path of dynamically loaded libxdo library.
15004 (lambda* (#:key inputs #:allow-other-keys)
15005 (let ((libxdo (string-append
15006 (assoc-ref inputs "xdotool")
15007 "/lib/libxdo.so"))
15008 (libc (string-append
15009 (assoc-ref inputs "libc")
15010 "/lib/libc.so.6")))
15011 (substitute* "xdo/_xdo.py"
15012 (("find_library\\(\"xdo\"\\)")
15013 (simple-format #f "\"~a\"" libxdo))
15014 (("ctypes\\.util\\.find_library\\('libc'\\)")
15015 (simple-format #f "\"~a\"" libc)))
15016 #t))))
15017 #:tests? #f)) ; no tests provided
15018 (propagated-inputs
15019 (list python-six))
15020 (inputs
15021 `(("xdotool" ,xdotool)
15022 ("libX11" ,libx11)))
15023 (home-page "https://tracker.debian.org/pkg/python-xdo")
15024 (synopsis "Python library for simulating X11 keyboard/mouse input")
15025 (description "Provides bindings to libxdo for manipulating X11 via simulated
15026 input. (Note that this is mostly a legacy library; you may wish to look at
15027 python-xdo for newer bindings.)")
15028 (license license:bsd-3)))
15029
15030 (define-public python-xdoctest
15031 (package
15032 (name "python-xdoctest")
15033 (version "1.0.0")
15034 (source
15035 (origin
15036 (method url-fetch)
15037 (uri (pypi-uri "xdoctest" version))
15038 (sha256
15039 (base32 "0bgbmb9nqv95f9gfxqifqff1qaz5fnanjqy4hv7ygrjp2kksgfvy"))))
15040 (build-system python-build-system)
15041 (arguments
15042 (list #:phases
15043 #~(modify-phases %standard-phases
15044 (replace 'check
15045 (lambda* (#:key tests? #:allow-other-keys)
15046 (when tests?
15047 ;; A writable HOME is needed by the
15048 ;; 'import_module_from_path' test.
15049 (setenv "HOME" "/tmp")
15050 (invoke "pytest" "-vv")))))))
15051 (propagated-inputs (list python-six))
15052 (native-inputs (list python-pytest which))
15053 (home-page "https://github.com/Erotemic/xdoctest")
15054 (synopsis "Rewrite of the Python builtin doctest module")
15055 (description "This package provides a rewrite of the builtin doctest
15056 module which leverages the Python @acronym{AST, Abstract Syntax Tree} instead
15057 of @acronym{REGEXPs, regular expressions}.")
15058 (license license:asl2.0)))
15059
15060 (define-public python-mako
15061 (package
15062 (name "python-mako")
15063 (version "1.1.3")
15064 (source
15065 (origin
15066 (method url-fetch)
15067 (uri (pypi-uri "Mako" version))
15068 (sha256
15069 (base32
15070 "09ywrmhr6gdyfx6d5727wwjnz73i6rklqcb4c14m7sqc830wi5c1"))))
15071 (build-system python-build-system)
15072 (arguments
15073 `(#:phases (modify-phases %standard-phases
15074 (replace 'check
15075 (lambda* (#:key tests? #:allow-other-keys)
15076 (if tests?
15077 (invoke "nosetests" "-v")
15078 (format #t "test suite not run~%"))
15079 #t)))))
15080 (propagated-inputs
15081 (list python-markupsafe))
15082 (native-inputs
15083 (list python-mock python-nose))
15084 (home-page "https://www.makotemplates.org/")
15085 (synopsis "Templating language for Python")
15086 (description "Mako is a templating language for Python that compiles
15087 templates into Python modules.")
15088 (license license:expat)))
15089
15090 (define-public python-waitress
15091 (package
15092 (name "python-waitress")
15093 (version "1.1.0")
15094 (source
15095 (origin
15096 (method url-fetch)
15097 (uri (pypi-uri "waitress" version))
15098 (patches (search-patches "python-waitress-fix-tests.patch"))
15099 (sha256
15100 (base32
15101 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
15102 (build-system python-build-system)
15103 (home-page "https://github.com/Pylons/waitress")
15104 (synopsis "Waitress WSGI server")
15105 (description "Waitress is meant to be a production-quality pure-Python WSGI
15106 server with very acceptable performance.")
15107 (license license:zpl2.1)))
15108
15109 (define-public python-whichcraft
15110 (package
15111 (name "python-whichcraft")
15112 (version "0.6.1")
15113 (source
15114 (origin
15115 (method url-fetch)
15116 (uri (pypi-uri "whichcraft" version))
15117 (sha256
15118 (base32
15119 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
15120 (build-system python-build-system)
15121 (native-inputs
15122 (list python-pytest))
15123 (home-page "https://github.com/pydanny/whichcraft")
15124 (synopsis "Cross-platform cross-python shutil.which functionality")
15125 (description
15126 "This package provides a shim of the shutil.which function that's
15127 designed to work across multiple versions of Python.")
15128 (license license:bsd-3)))
15129
15130 (define-public python-cookiecutter
15131 (package
15132 (name "python-cookiecutter")
15133 (version "1.7.3")
15134 (source
15135 (origin
15136 (method url-fetch)
15137 (uri (pypi-uri "cookiecutter" version))
15138 (sha256
15139 (base32 "0mx49whhwcxmvcak27zr7p7ndzkn3w7psfd7fzh3n91fi1r4v6kb"))))
15140 (build-system python-build-system)
15141 (native-inputs
15142 (list python-freezegun python-pytest python-pytest-catchlog
15143 python-pytest-cov python-pytest-mock))
15144 (propagated-inputs
15145 (list python-binaryornot
15146 python-click
15147 python-future
15148 python-jinja2
15149 python-jinja2-time
15150 python-poyo
15151 python-requests
15152 python-slugify
15153 python-text-unidecode
15154 python-whichcraft))
15155 (home-page "https://github.com/cookiecutter/cookiecutter")
15156 (synopsis
15157 "Command-line utility that creates projects from project templates")
15158 (description
15159 "This package provides a command-line utility that creates projects from
15160 project templates, e.g. creating a Python package project from a Python package
15161 project template.")
15162 (license license:bsd-3)))
15163
15164 (define-public python-pyquery
15165 (package
15166 (name "python-pyquery")
15167 (version "1.2.17")
15168 (source
15169 (origin
15170 (method url-fetch)
15171 (uri (pypi-uri "pyquery" version))
15172 (sha256
15173 (base32
15174 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
15175 (build-system python-build-system)
15176 (native-inputs
15177 (list python-webob python-webtest))
15178 (propagated-inputs
15179 (list python-lxml python-cssselect))
15180 (home-page "https://github.com/gawel/pyquery")
15181 (synopsis "Make jQuery-like queries on xml documents")
15182 (description "pyquery allows you to make jQuery queries on xml documents.
15183 The API is as much as possible the similar to jQuery. pyquery uses lxml for
15184 fast xml and html manipulation.")
15185 (license license:bsd-3)))
15186
15187 (define-public python-anyjson
15188 (package
15189 (name "python-anyjson")
15190 (version "0.3.3")
15191 (source
15192 (origin
15193 (method url-fetch)
15194 (uri (pypi-uri "anyjson" version))
15195 (sha256
15196 (base32
15197 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
15198 (build-system python-build-system)
15199 (arguments
15200 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
15201 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
15202 ;; whatever) so this transformation needs to be done before the tests
15203 ;; can be run. Maybe we could add a build step to transform beforehand
15204 ;; but it could be annoying/difficult.
15205 ;; We can enable tests for the Python 2 version, though, and do below.
15206 #:tests? #f))
15207 (home-page "https://bitbucket.org/runeh/anyjson/")
15208 (synopsis
15209 "Wraps best available JSON implementation in a common interface")
15210 (description
15211 "Anyjson loads whichever is the fastest JSON module installed
15212 and provides a uniform API regardless of which JSON implementation is used.")
15213 (license license:bsd-3)))
15214
15215 (define-public python-amqp
15216 (package
15217 (name "python-amqp")
15218 (version "5.1.1")
15219 (source
15220 (origin
15221 (method url-fetch)
15222 (uri (pypi-uri "amqp" version))
15223 (sha256
15224 (base32 "1qmmffiy48nady7is8529vxcyqbq88v5zgawqr3fk4q8rkz166rc"))))
15225 (build-system python-build-system)
15226 (arguments
15227 (list
15228 #:phases
15229 #~(modify-phases %standard-phases
15230 (replace 'check
15231 (lambda* (#:key tests? #:allow-other-keys)
15232 (when tests?
15233 (invoke "pytest" "-vv"
15234 "-c" "/dev/null" ;take control over pytest options
15235 ;; Integration tests require network connectivity.
15236 "--ignore" "t/integration")))))))
15237 (native-inputs (list python-pytest))
15238 (propagated-inputs (list python-vine))
15239 (home-page "https://github.com/celery/py-amqp")
15240 (synopsis "Low-level AMQP client for Python (fork of amqplib)")
15241 (description
15242 "This is a fork of amqplib which was originally written by Barry Pederson.
15243 It is maintained by the Celery project, and used by kombu as a pure python
15244 alternative when librabbitmq is not available.")
15245 (license license:lgpl2.1+)))
15246
15247 (define-public python-beniget
15248 (package
15249 (name "python-beniget")
15250 (version "0.4.1")
15251 (home-page "https://github.com/serge-sans-paille/beniget")
15252 (source
15253 (origin
15254 (method url-fetch)
15255 (uri (pypi-uri "beniget" version))
15256 (sha256
15257 (base32 "035c4f78yllpw2c5p1w92520rilm7nnpsqh7yvi3qmfhi8xlnmbm"))))
15258 (build-system python-build-system)
15259 (propagated-inputs
15260 (list python-gast))
15261 (synopsis "Extract semantic information about static Python code")
15262 (description
15263 "Beniget is a collection of analyzers for Python @acronym{AST,
15264 Abstract Syntax Tree}. It is a building block for writing a static analyzer
15265 or compiler for Python.")
15266 (license license:bsd-3)))
15267
15268 (define-public python-txamqp
15269 (package
15270 (name "python-txamqp")
15271 (version "0.8.2")
15272 (source
15273 (origin
15274 (method url-fetch)
15275 (uri (pypi-uri "txAMQP" version))
15276 (sha256
15277 (base32
15278 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
15279 (build-system python-build-system)
15280 (propagated-inputs
15281 (list python-six python-twisted))
15282 (home-page "https://github.com/txamqp/txamqp")
15283 (synopsis "Communicate with AMQP peers and brokers using Twisted")
15284 (description
15285 "This package provides a Python library for communicating with AMQP peers
15286 and brokers using the asynchronous networking framework Twisted. It contains
15287 all the necessary code to connect, send and receive messages to/from an
15288 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
15289 also includes support for using Thrift RPC over AMQP in Twisted
15290 applications.")
15291 (license license:asl2.0)))
15292
15293 (define-public python-kombu
15294 (package
15295 (name "python-kombu")
15296 (version "5.2.4")
15297 (source
15298 (origin
15299 (method url-fetch)
15300 (uri (pypi-uri "kombu" version))
15301 (sha256
15302 (base32 "044ng79gj04668kf5fmy7fjkw8302xyapskkn65ym52zfbpf7kip"))))
15303 (build-system python-build-system)
15304 (arguments
15305 (list
15306 #:phases
15307 #~(modify-phases %standard-phases
15308 (replace 'check
15309 (lambda* (#:key tests? #:allow-other-keys)
15310 (when tests?
15311 (invoke "pytest" "-vv"
15312 ;; The transport tests attempt to pass messages to
15313 ;; many different databases.
15314 "--ignore" "t/unit/transport")))))))
15315 (native-inputs
15316 (list python-case python-pyro4 python-pytest-sugar
15317 python-pytest python-pytz))
15318 (propagated-inputs
15319 (list python-amqp python-cached-property python-vine))
15320 (home-page "https://kombu.readthedocs.io")
15321 (synopsis "Message passing library for Python")
15322 (description "The aim of Kombu is to make messaging in Python as easy as
15323 possible by providing an idiomatic high-level interface for the AMQ protocol,
15324 and also provide proven and tested solutions to common messaging problems.
15325 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
15326 message orientation, queuing, routing, reliability and security, for which the
15327 RabbitMQ messaging server is the most popular implementation.")
15328 (license license:bsd-3)))
15329
15330 (define-public python-billiard
15331 (package
15332 (name "python-billiard")
15333 (version "3.6.4.0")
15334 (source
15335 (origin
15336 (method url-fetch)
15337 (uri (pypi-uri "billiard" version))
15338 (sha256
15339 (base32 "0ismj2p8c66ykpss94rs0bfra5agxxmljz8r3gaq79r8valfb799"))))
15340 (build-system python-build-system)
15341 (arguments
15342 `(#:phases
15343 (modify-phases %standard-phases
15344 (add-after 'unpack 'remove-win-files
15345 (lambda _
15346 (for-each delete-file-recursively
15347 ;; test_multiprocessing seem to be written in Python2.
15348 '("t/integration/tests/test_multiprocessing.py"
15349 "t/unit/test_win32.py"
15350 "billiard/popen_spawn_win32.py"
15351 "billiard/_win.py")))))))
15352 (native-inputs
15353 (list python-case python-psutil python-pytest))
15354 (home-page "https://github.com/celery/billiard")
15355 (synopsis "Python multiprocessing fork with improvements and bugfixes")
15356 (description
15357 "Billiard is a fork of the Python 2.7 multiprocessing package. The
15358 multiprocessing package itself is a renamed and updated version of R Oudkerk's
15359 pyprocessing package. This standalone variant is intended to be compatible with
15360 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
15361 (license license:bsd-3)))
15362
15363 (define-public python-celery
15364 (package
15365 (name "python-celery")
15366 (version "5.2.6")
15367 (source
15368 (origin
15369 (method url-fetch)
15370 (uri (pypi-uri "celery" version))
15371 (sha256
15372 (base32 "109lcqarrbmh95sk1dm4yxayq1h3i27f4w23ndk64mqgyfnqqffi"))))
15373 (build-system python-build-system)
15374 (arguments
15375 '(#:phases
15376 (modify-phases %standard-phases
15377 (add-after 'unpack 'relax-requirements
15378 (lambda _
15379 (substitute* "requirements/default.txt"
15380 (("pytz.*")
15381 "pytz\n"))))
15382 (replace 'check
15383 (lambda* (#:key tests? #:allow-other-keys)
15384 (when tests?
15385 (invoke "python" "-m" "pytest" "t"
15386 "--ignore" "t/integration" ;hangs tests
15387 ;; The MongoDB backend test appears to expect an older
15388 ;; version of MongoDB which provided its own bson
15389 ;; module, fails with " AttributeError: module 'bson'
15390 ;; has no attribute 'encode'".
15391 "--ignore" "t/unit/backends/test_mongodb.py"
15392 ;; AssertionErrors
15393 "-k" "not test_check_privileges_no_fchown ")))))))
15394 (native-inputs
15395 (list python-case
15396 python-dnspython
15397 python-flaky
15398 python-iniconfig
15399 python-moto
15400 python-msgpack
15401 python-pytest
15402 python-pytest-celery
15403 python-pytest-subtests
15404 python-pytest-timeout
15405 python-toml))
15406 (propagated-inputs
15407 (list python-billiard
15408 python-click
15409 python-click-didyoumean
15410 python-click-plugins
15411 python-click-repl
15412 python-kombu
15413 python-pytz
15414 python-vine))
15415 (home-page "https://celeryproject.org")
15416 (synopsis "Distributed Task Queue")
15417 (description "Celery is an asynchronous task queue/job queue based on
15418 distributed message passing. It is focused on real-time operation, but
15419 supports scheduling as well. The execution units, called tasks, are executed
15420 concurrently on a single or more worker servers using multiprocessing,
15421 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
15422 synchronously (wait until ready).")
15423 (license license:bsd-3)))
15424
15425 (define-public python-translitcodec
15426 (package
15427 (name "python-translitcodec")
15428 (version "0.4.0")
15429 (source
15430 (origin
15431 (method url-fetch)
15432 (uri (pypi-uri "translitcodec" version))
15433 (sha256
15434 (base32
15435 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
15436 (build-system python-build-system)
15437 (arguments
15438 `(#:tests? #f)) ; no tests provided
15439 (home-page
15440 "https://github.com/claudep/translitcodec")
15441 (synopsis
15442 "Unicode to 8-bit charset transliteration codec")
15443 (description
15444 "This package contains codecs for transliterating ISO 10646 texts into
15445 best-effort representations using smaller coded character sets (ASCII,
15446 ISO 8859, etc.).")
15447 (license license:expat)))
15448
15449 (define-public python-anyqt
15450 (package
15451 (name "python-anyqt")
15452 (version "0.0.13")
15453 (source
15454 (origin
15455 (method url-fetch)
15456 (uri (pypi-uri "AnyQt" version))
15457 (sha256
15458 (base32 "0z7myf0mp1qx4gza6ncqyq9whk67vblmh9n3klk19dv4aakjml2f"))))
15459 (build-system python-build-system)
15460 (arguments
15461 `(#:tests? #f ;there are no tests
15462 #:phases
15463 (modify-phases %standard-phases
15464 (add-after 'unpack 'delete-files
15465 ;; Delete files related to other operating systems.
15466 (lambda _
15467 (delete-file "AnyQt/QtMacExtras.py")
15468 (delete-file "AnyQt/QtWinExtras.py"))))))
15469 (home-page "https://github.com/ales-erjavec/anyqt")
15470 (synopsis "PyQt4/PyQt5 compatibility layer")
15471 (description "AnyQt is a PyQt4/PyQt5 compatibility layer.")
15472 (license license:gpl3)))
15473
15474 (define-public python-pyqtgraph
15475 (package
15476 (name "python-pyqtgraph")
15477 (version "0.12.1")
15478 (source
15479 (origin
15480 (method url-fetch)
15481 (uri (pypi-uri "pyqtgraph" version))
15482 (sha256
15483 (base32 "0kc7ncv0lr3spni29i9g8nszyr4xinswqi2zzs6v8kqqi593pvyj"))))
15484 (build-system python-build-system)
15485 (arguments
15486 `(#:phases
15487 (modify-phases %standard-phases
15488 (add-before 'check 'set-home-and-qpa
15489 (lambda _
15490 (setenv "HOME" "/tmp")
15491 (setenv "QT_QPA_PLATFORM" "offscreen")
15492 #t))
15493 (replace 'check
15494 (lambda* (#:key inputs outputs #:allow-other-keys)
15495 (add-installed-pythonpath inputs outputs)
15496 (invoke "pytest" "-vv" "-k"
15497 (string-append
15498 ;; These tests try to download online data.
15499 "not test_PolyLineROI"
15500 " and not test_getArrayRegion_axisorder"
15501 " and not test_getArrayRegion"
15502 " and not test_PlotCurveItem"
15503 " and not test_NonUniformImage_colormap"
15504 " and not test_NonUniformImage_lut"
15505 " and not test_ImageItem_axisorder"
15506 " and not test_ImageItem"
15507 ;; The test_reload test fails and suggests adding
15508 ;; "--assert=plain" to the pytest command, but it
15509 ;; doesn't solve the failure.
15510 " and not test_reload")))))))
15511 (native-inputs
15512 (list python-pytest python-pytest-cov python-pytest-xdist))
15513 (inputs
15514 (list qtbase-5))
15515 (propagated-inputs
15516 (list python-h5py python-numpy python-pyopengl python-scipy
15517 python-pyqt-without-qtwebkit))
15518 (home-page "http://www.pyqtgraph.org")
15519 (synopsis "Scientific graphics and GUI library for Python")
15520 (description
15521 "PyQtGraph is a Pure-python graphics library for PyQt5, PyQt6, PySide2
15522 and PySide6. It is intended for use in mathematics, scientific or engineering
15523 applications.")
15524 (license license:expat)))
15525
15526 (define-public python-qasync
15527 (package
15528 (name "python-qasync")
15529 (version "0.22.0")
15530 (source
15531 (origin
15532 ;; There are no tests in the PyPI tarball.
15533 (method git-fetch)
15534 (uri (git-reference
15535 (url "https://github.com/CabbageDevelopment/qasync/")
15536 (commit (string-append "v" version))))
15537 (file-name (git-file-name name version))
15538 (sha256
15539 (base32 "1q9cllrwf94whr0f6mipa0hdq1rcyqvklwx19g35g2dav8f3xkjl"))))
15540 (build-system python-build-system)
15541 (arguments
15542 `(#:test-target "pytest"
15543 #:phases
15544 (modify-phases %standard-phases
15545 (add-before 'check 'set-qpa
15546 (lambda _
15547 (setenv "QT_QPA_PLATFORM" "offscreen"))))))
15548 (native-inputs
15549 (list python-pytest python-pytest-runner))
15550 (propagated-inputs
15551 (list python-pyqt))
15552 (home-page "https://github.com/CabbageDevelopment/qasync")
15553 (synopsis "Implementation of the PEP 3156 Event-Loop with Qt")
15554 (description
15555 "@code{qasync} allows coroutines to be used in PyQt/PySide applications
15556 by providing an implementation of the PEP 3156 event-loop.")
15557 (license license:bsd-2)))
15558
15559 (define-public python-editor
15560 (package
15561 (name "python-editor")
15562 (version "1.0.4")
15563 (source
15564 (origin
15565 (method url-fetch)
15566 (uri (pypi-uri "python-editor" version))
15567 (sha256
15568 (base32
15569 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
15570 (build-system python-build-system)
15571 (arguments
15572 '(#:tests? #f)) ;XXX: needs a TTY and an editor
15573 (home-page "https://github.com/fmoo/python-editor")
15574 (synopsis "Programmatically open an editor, capture the result")
15575 (description
15576 "python-editor is a library that provides the editor module for
15577 programmatically interfacing with your system's $EDITOR.")
15578 (license license:asl2.0)))
15579
15580 (define-public python-multiprocessing-logging
15581 (package
15582 (name "python-multiprocessing-logging")
15583 (version "0.3.1")
15584 (home-page "https://github.com/jruere/multiprocessing-logging")
15585 (source (origin
15586 (method git-fetch)
15587 (uri (git-reference
15588 (url home-page)
15589 (commit (string-append "v" version))))
15590 (file-name (git-file-name name version))
15591 (sha256
15592 (base32
15593 "1625wy3djlr3b2fpd3vi822f8gw6b75mnls5a4318dbi9za5pf0y"))))
15594 (build-system python-build-system)
15595 (synopsis "Manage logs from multiple processes")
15596 (description
15597 "This Python module implements a multiprocessing-aware @code{Handler}
15598 that, when set on the root @code{Logger}, will tunnel log records to the
15599 main process so that they are handled correctly.")
15600 (license license:lgpl3+)))
15601
15602 (define-public python-vobject
15603 (package
15604 (name "python-vobject")
15605 (version "0.9.6.1")
15606 (source (origin
15607 (method url-fetch)
15608 (uri (pypi-uri "vobject" version))
15609 (sha256
15610 (base32
15611 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
15612 (build-system python-build-system)
15613 (arguments
15614 '(;; The test suite relies on some non-portable Windows interfaces.
15615 #:tests? #f))
15616 (propagated-inputs
15617 (list python-dateutil python-pyicu))
15618 (synopsis "Parse and generate vCard and vCalendar files")
15619 (description "Vobject is intended to be a full featured Python package for
15620 parsing and generating vCard and vCalendar files. Currently, iCalendar files
15621 are supported and well tested. vCard 3.0 files are supported, and all data
15622 should be imported, but only a few components are understood in a sophisticated
15623 way.")
15624 (home-page "https://eventable.github.io/vobject/")
15625 (license license:asl2.0)))
15626
15627 (define-public python-munkres
15628 (package
15629 (name "python-munkres")
15630 (version "1.1.4")
15631 (source (origin
15632 (method url-fetch)
15633 (uri (pypi-uri "munkres" version))
15634 (sha256
15635 (base32
15636 "00yvj8bxmhhhhd74v7j0x673is7vizmxwgb3dd5xmnkr74ybyi7w"))))
15637 (build-system python-build-system)
15638 (native-inputs (list python-pytest-6))
15639 (home-page "https://software.clapper.org/munkres/")
15640 (synopsis "Implementation of the Munkres algorithm")
15641 (description "The Munkres module provides an implementation of the Munkres
15642 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
15643 useful for solving the Assignment Problem.")
15644 (license license:bsd-3)))
15645
15646 (define-public python-whoosh
15647 (package
15648 (name "python-whoosh")
15649 (version "2.7.4")
15650 (source
15651 (origin
15652 (method url-fetch)
15653 (uri (pypi-uri "Whoosh" version))
15654 (sha256
15655 (base32
15656 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
15657 (build-system python-build-system)
15658 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
15659 (native-inputs
15660 (list python-pytest))
15661 (home-page "https://bitbucket.org/mchaput/whoosh")
15662 (synopsis "Full text indexing, search, and spell checking library")
15663 (description
15664 "Whoosh is a fast, pure-Python full text indexing, search, and spell
15665 checking library.")
15666 (license license:bsd-2)))
15667
15668 (define-public python-codespell
15669 (package
15670 (name "python-codespell")
15671 (version "2.1.0")
15672 (source
15673 (origin
15674 (method url-fetch)
15675 (uri (pypi-uri "codespell" version))
15676 (sha256
15677 (base32 "1r9y714cz8m894rxp7pyvicr1lw2iid24vz6fxbl5wzy8ibgxlqr"))))
15678 (build-system python-build-system)
15679 (inputs
15680 (list python-chardet))
15681 (native-inputs
15682 (list python-check-manifest python-flake8 python-pytest
15683 python-pytest-cov python-pytest-dependency))
15684 (arguments
15685 `(#:phases
15686 (modify-phases %standard-phases
15687 (replace 'check
15688 (lambda* (#:key outputs tests? #:allow-other-keys)
15689 (when tests?
15690 ;; Make installed executable available for running the tests.
15691 (setenv "PATH"
15692 (string-append (assoc-ref outputs "out") "/bin"
15693 ":" (getenv "PATH")))
15694 (invoke "pytest" "-vv")))))))
15695 (home-page "https://github.com/codespell-project/codespell/")
15696 (synopsis "Spellchecker for code")
15697 (description "Codespell fixes common misspellings in text files.
15698 It's designed primarily for checking misspelled words in source code,
15699 but it can be used with other files as well. It does not check for word
15700 membership in a complete dictionary, but instead looks for a set of
15701 common misspellings. Therefore it should catch errors like \"adn\", but
15702 it will not catch \"adnasdfasdf\". This also means it shouldn't
15703 generate false-positives when you use a niche term it doesn't know
15704 about.")
15705 (license
15706 (list
15707 ; for codespell and codespell_lib
15708 license:gpl2
15709 ; for dictionary*.txt
15710 license:cc-by-sa3.0))))
15711
15712 (define-public python-pathlib
15713 (package
15714 (name "python-pathlib")
15715 (version "1.0.1")
15716 (source (origin
15717 (method url-fetch)
15718 (uri (pypi-uri "pathlib" version))
15719 (sha256
15720 (base32
15721 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
15722 (build-system python-build-system)
15723 ;; The tests depend on the internal "test" module, which does not provide
15724 ;; a stable interface.
15725 (arguments `(#:tests? #f))
15726 (home-page "https://pathlib.readthedocs.org/")
15727 (synopsis "Object-oriented file system paths")
15728 (description "Pathlib offers a set of classes to handle file system paths.
15729 It offers the following advantages over using string objects:
15730
15731 @enumerate
15732 @item No more cumbersome use of os and os.path functions. Everything can
15733 be done easily through operators, attribute accesses, and method calls.
15734 @item Embodies the semantics of different path types. For example,
15735 comparing Windows paths ignores casing.
15736 @item Well-defined semantics, eliminating any inconsistencies or
15737 ambiguities (forward vs. backward slashes, etc.).
15738 @end enumerate
15739
15740 Note: In Python 3.4, pathlib is now part of the standard library. For other
15741 Python versions please consider python-pathlib2 instead, which tracks the
15742 standard library module. This module (python-pathlib) isn't maintained
15743 anymore.")
15744 (license license:expat)))
15745
15746 (define-public python-jellyfish
15747 (package
15748 (name "python-jellyfish")
15749 (version "0.8.8")
15750 (source (origin
15751 (method url-fetch)
15752 (uri (pypi-uri "jellyfish" version))
15753 (sha256
15754 (base32
15755 "0p2s6b30sfffx8sya2i8kz0i0riw9fq1fi0k89s8kdgrmjf0h1h5"))))
15756 (build-system python-build-system)
15757 (arguments
15758 `(#:tests? #f ; XXX: Tests cannot find C coded version.
15759 #:phases
15760 (modify-phases %standard-phases
15761 (replace 'check
15762 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
15763 (when tests?
15764 (add-installed-pythonpath inputs outputs)
15765 (invoke "pytest" "-vv" "jellyfish/test.py")))))))
15766 (native-inputs
15767 (list python-pytest))
15768 (home-page "https://github.com/jamesturk/jellyfish")
15769 (synopsis "Approximate and phonetic matching of strings")
15770 (description "Jellyfish uses a variety of string comparison and phonetic
15771 encoding algorithms to do fuzzy string matching.")
15772 (license license:bsd-2)))
15773
15774 (define-public python-pdfminer-six
15775 (package
15776 (name "python-pdfminer-six")
15777 (version "20201018")
15778 ;; There are no tests in the PyPI tarball.
15779 (source
15780 (origin
15781 (method git-fetch)
15782 (uri (git-reference
15783 (url "https://github.com/pdfminer/pdfminer.six")
15784 (commit version)))
15785 (file-name (git-file-name name version))
15786 (sha256
15787 (base32 "1a2fxxnnjqbx344znpvx7cnv1881dk6585ibw01inhfq3w6yj2lr"))))
15788 (build-system python-build-system)
15789 (arguments
15790 `(#:phases
15791 (modify-phases %standard-phases
15792 ;; Tests write to the source tree.
15793 (add-after 'unpack 'make-git-checkout-writable
15794 (lambda _
15795 (for-each make-file-writable (find-files "."))
15796 #t))
15797 (replace 'check
15798 (lambda _
15799 (invoke "make" "test"))))))
15800 (propagated-inputs
15801 (list python-chardet python-cryptography python-sortedcontainers))
15802 (native-inputs
15803 (list python-nose python-tox))
15804 (home-page "https://github.com/pdfminer/pdfminer.six")
15805 (synopsis "PDF parser and analyzer")
15806 (description "@code{pdfminer.six} is a community maintained fork of
15807 the original PDFMiner. It is a tool for extracting information from PDF
15808 documents. It focuses on getting and analyzing text data. Pdfminer.six
15809 extracts the text from a page directly from the sourcecode of the PDF. It
15810 can also be used to get the exact location, font or color of the text.")
15811 (license license:expat)))
15812
15813 (define-public python-rarfile
15814 (package
15815 (name "python-rarfile")
15816 (version "4.0")
15817 (source (origin
15818 (method url-fetch)
15819 (uri (pypi-uri "rarfile" version))
15820 (sha256
15821 (base32
15822 "1882wv9szcm29mnyhjmspyflyr2l7z73srn14w4dlnww49lqfm37"))))
15823 (build-system python-build-system)
15824 (arguments
15825 `(#:tests? #f ;; The bsdtar utility is very limited and most tests fail.
15826 #:phases
15827 (modify-phases %standard-phases
15828 (add-after 'unpack 'patch
15829 (lambda* (#:key inputs #:allow-other-keys)
15830 (substitute* "rarfile.py"
15831 ;; Disable unrar and unar, which are unavailable on Guix.
15832 (("(unrar|unar)=True" all tool) (string-append tool "=False"))
15833 ;; Hardcode path to bsdtar
15834 (("\"bsdtar\"")
15835 (string-append "\"" (assoc-ref inputs "libarchive") "/bin/bsdtar\"")))
15836 #t))
15837 (replace 'check
15838 (lambda* (#:key inputs tests? #:allow-other-keys)
15839 (when tests?
15840 (invoke "pytest" "-vv")))))))
15841 (native-inputs (list python-pytest))
15842 (inputs (list libarchive))
15843 (home-page "https://github.com/markokr/rarfile")
15844 (synopsis "RAR archive reader for Python")
15845 (description "This is Python module for RAR archive reading. The interface
15846 is made as zipfile like as possible.")
15847 (license license:isc)))
15848
15849 (define-public python-rich
15850 (package
15851 (name "python-rich")
15852 (version "12.4.1")
15853 (source (origin
15854 (method url-fetch)
15855 (uri (pypi-uri "rich" version))
15856 (sha256
15857 (base32
15858 "149vjb4cpf9mz14iig0b6d8065dm8aslp6pc45g9ipmp1wf00ffj"))))
15859 (build-system python-build-system)
15860 (arguments
15861 `(#:phases
15862 (modify-phases %standard-phases
15863 (replace 'check
15864 (lambda* (#:key inputs tests? #:allow-other-keys)
15865 (when tests?
15866 (copy-recursively (string-append
15867 (assoc-ref inputs "tests") "/tests")
15868 "tests")
15869 (invoke "python" "-m" "pytest" "-vv")))))))
15870 (propagated-inputs
15871 (list python-attrs python-colorama python-commonmark python-pygments
15872 python-typing-extensions))
15873 (native-inputs
15874 `(("python-pytest" ,python-pytest)
15875 ("tests"
15876 ;; The release on pypi comes without tests. We can't build from this
15877 ;; checkout, though, because installation requires an invocation of
15878 ;; poetry.
15879 ,(origin
15880 (method git-fetch)
15881 (uri (git-reference
15882 (url "https://github.com/willmcgugan/rich")
15883 (commit (string-append "v" version))))
15884 (file-name (git-file-name name version))
15885 (sha256
15886 (base32
15887 "17c3gljn8zv32xnpsgd3fqgqn4r7cdfqri41hridcpbhssdgkyp9"))))))
15888 (home-page "https://github.com/willmcgugan/rich")
15889 (synopsis "Render rich text and more to the terminal")
15890 (description
15891 "This is a Python package for rendering rich text, tables, progress bars,
15892 syntax highlighting, markdown and more to the terminal.")
15893 (license license:expat)))
15894
15895 (define-public python-magic
15896 (package
15897 (name "python-magic")
15898 (version "0.4.24")
15899 (home-page "https://github.com/ahupp/python-magic")
15900 (source
15901 (origin
15902 (method git-fetch)
15903 (uri (git-reference (url home-page) (commit version)))
15904 (file-name (git-file-name name version))
15905 (patches (search-patches "python-magic-python-bytecode.patch"))
15906 (sha256
15907 (base32
15908 "17jalhjbfd600lzfz296m0nvgp6c7vx1mgz82jbzn8hgdzknf4w0"))))
15909 (build-system python-build-system)
15910 (arguments
15911 '(#:phases (modify-phases %standard-phases
15912 ;; Replace a specific method call with a hard-coded
15913 ;; path to the necessary libmagic.so file in the
15914 ;; store. If we don't do this, then the method call
15915 ;; will fail to find the libmagic.so file, which in
15916 ;; turn will cause any application using
15917 ;; python-magic to fail.
15918 (add-before 'build 'hard-code-path-to-libmagic
15919 (lambda* (#:key inputs #:allow-other-keys)
15920 (let ((magic (search-input-file inputs "/lib/libmagic.so")))
15921 (substitute* "magic/loader.py"
15922 (("find_library\\('magic'\\)")
15923 (string-append "'" magic "'"))))))
15924 (replace 'check
15925 (lambda* (#:key tests? #:allow-other-keys)
15926 ;; The test suite mandates this variable.
15927 (setenv "LC_ALL" "en_US.UTF-8")
15928 (if tests?
15929 (with-directory-excursion "test"
15930 (invoke "python" "./test.py")
15931 (invoke "python" "./libmagic_test.py"))
15932 (format #t "test suite not run~%")))))))
15933 (native-inputs
15934 (list which))
15935 (inputs
15936 ;; python-magic needs to be able to find libmagic.so.
15937 ;; Use a newer version because 5.39 returns bogus for some archives
15938 ;; (notably Chromium .crx extensions), which breaks e.g. 'diffoscope'.
15939 (list file-next))
15940 (synopsis "File type identification using libmagic")
15941 (description
15942 "This module uses ctypes to access the libmagic file type
15943 identification library. It makes use of the local magic database and
15944 supports both textual and MIME-type output. Note that this module and
15945 the python-file module both provide a \"magic.py\" file; these two
15946 modules, which are different and were developed separately, both serve
15947 the same purpose: to provide Python bindings for libmagic.")
15948 (license license:expat)))
15949
15950 (define-public python-pkgconfig
15951 (package
15952 (name "python-pkgconfig")
15953 (version "1.3.1")
15954 (source
15955 (origin
15956 (method url-fetch)
15957 (uri (pypi-uri "pkgconfig" version))
15958 (sha256
15959 (base32
15960 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
15961 (build-system python-build-system)
15962 (native-inputs
15963 (list python-nose))
15964 (inputs
15965 (list pkg-config))
15966 (arguments
15967 `(#:phases
15968 (modify-phases %standard-phases
15969 (add-before 'build 'patch
15970 ;; Hard-code the path to pkg-config.
15971 (lambda _
15972 (substitute* "pkgconfig/pkgconfig.py"
15973 (("'pkg-config'")
15974 (string-append "'" (which "pkg-config") "'")))))
15975 (replace 'check
15976 (lambda _
15977 (invoke "nosetests" "test.py"))))))
15978 (home-page "https://github.com/matze/pkgconfig")
15979 (synopsis "Python interface for pkg-config")
15980 (description "This module provides a Python interface to pkg-config. It
15981 can be used to find all pkg-config packages, check if a package exists,
15982 check if a package meets certain version requirements, query CFLAGS and
15983 LDFLAGS and parse the output to build extensions with setup.py.")
15984 (license license:expat)))
15985
15986 (define-public python-bz2file
15987 (package
15988 (name "python-bz2file")
15989 (version "0.98")
15990 (source
15991 (origin
15992 (method url-fetch)
15993 (uri (pypi-uri "bz2file" version))
15994 (sha256
15995 (base32
15996 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
15997 (build-system python-build-system)
15998 (arguments
15999 `(#:tests? #f)) ; Tests use deprecated python modules.
16000 (home-page "https://github.com/nvawda/bz2file")
16001 (synopsis "Read and write bzip2-compressed files")
16002 (description
16003 "Bz2file is a Python library for reading and writing bzip2-compressed
16004 files. It contains a drop-in replacement for the I/O interface in the
16005 standard library's @code{bz2} module, including features from the latest
16006 development version of CPython that are not available in older releases.")
16007 (license license:asl2.0)))
16008
16009 (define-public python-future
16010 (package
16011 (name "python-future")
16012 (version "0.18.2")
16013 (source
16014 (origin
16015 (method url-fetch)
16016 (uri (pypi-uri "future" version))
16017 (sha256
16018 (base32
16019 "0zakvfj87gy6mn1nba06sdha63rn4njm7bhh0wzyrxhcny8avgmi"))))
16020 (build-system python-build-system)
16021 ;; Many tests connect to the network or are otherwise flawed.
16022 ;; https://github.com/PythonCharmers/python-future/issues/210
16023 (arguments
16024 `(#:tests? #f
16025 #:phases
16026 (modify-phases %standard-phases
16027 (replace 'sanity-check
16028 (let ((sanity-check (assoc-ref %standard-phases 'sanity-check)))
16029 (lambda* (#:key inputs outputs #:allow-other-keys #:rest args)
16030 (let* ((files (find-files (site-packages inputs outputs)
16031 "top_level\\.txt"))
16032 (backups (map (lambda (f) (string-append f ".bak"))
16033 files)))
16034 (for-each copy-file files backups)
16035 (substitute* files
16036 ;; Nobody be usin' winreg on Guix
16037 ;; Also, don't force users to have tkinter when they don't
16038 ;; need it
16039 (("(winreg|tkinter)") ""))
16040 (apply sanity-check args)
16041 (for-each rename-file backups files))))))))
16042 (home-page "https://python-future.org")
16043 (synopsis "Single-source support for Python 3 and 2")
16044 (description
16045 "@code{python-future} is the missing compatibility layer between Python 2 and
16046 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
16047 to support both Python 2 and Python 3 with minimal overhead.")
16048 (license license:expat)))
16049
16050 (define-public python-cysignals
16051 (package
16052 (name "python-cysignals")
16053 (version "1.9.0")
16054 (source
16055 (origin
16056 (method url-fetch)
16057 (uri (pypi-uri "cysignals" version))
16058 (sha256
16059 (base32
16060 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
16061 (build-system python-build-system)
16062 (native-inputs
16063 (list python-cython python-sphinx))
16064 (inputs
16065 (list pari-gp))
16066 (arguments
16067 `(#:modules ((guix build python-build-system)
16068 ((guix build gnu-build-system) #:prefix gnu:)
16069 (guix build utils))
16070 ;; FIXME: Tests are executed after installation and currently fail
16071 ;; when not installing into standard locations; the author is working
16072 ;; on a fix.
16073 #:tests? #f
16074 #:phases
16075 (modify-phases %standard-phases
16076 (add-before
16077 'build 'configure
16078 (assoc-ref gnu:%standard-phases 'configure)))))
16079 (home-page
16080 "https://github.com/sagemath/cysignals")
16081 (synopsis
16082 "Handling of interrupts and signals for Cython")
16083 (description
16084 "The cysignals package provides mechanisms to handle interrupts (and
16085 other signals and errors) in Cython code, using two related approaches,
16086 for mixed Cython/Python code or external C libraries and pure Cython code,
16087 respectively.")
16088 (license license:lgpl3+)))
16089
16090 (define-public python-rope
16091 (package
16092 (name "python-rope")
16093 (version "1.1.1")
16094 (source
16095 (origin
16096 (method url-fetch)
16097 (uri (pypi-uri "rope" version))
16098 (sha256
16099 (base32
16100 "0bkzwkllxxdxd3w70xiy137lqvnlmmaplsc2ya3s23ss4kq8y10k"))))
16101 (build-system python-build-system)
16102 (arguments
16103 (list #:phases
16104 `(modify-phases %standard-phases
16105 (add-after 'unpack 'disable-broken-test
16106 (lambda _
16107 (substitute* "ropetest/contrib/autoimporttest.py"
16108 (("def test_search_module")
16109 "def __notest_search_module")
16110 (("def test_search_submodule")
16111 "def __notest_search_submodule")))))))
16112 (native-inputs
16113 (list python-pytest-timeout
16114 python-pytest))
16115 (home-page "https://github.com/python-rope/rope")
16116 (synopsis "Refactoring library for Python")
16117 (description "Rope is a refactoring library for Python. It facilitates
16118 the renaming, moving and extracting of attributes, functions, modules, fields
16119 and parameters in Python source code. These refactorings can also be applied
16120 to occurrences in strings and comments.")
16121 (license license:lgpl3+)))
16122
16123 (define-public python-py3status
16124 (package
16125 (name "python-py3status")
16126 (version "3.21")
16127 (source
16128 (origin
16129 (method url-fetch)
16130 (uri (pypi-uri "py3status" version))
16131 (sha256
16132 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
16133 (build-system python-build-system)
16134 (inputs
16135 (list file))
16136 (arguments
16137 '(#:phases
16138 (modify-phases %standard-phases
16139 ;; 'file' is used for detection of configuration file encoding
16140 ;; let's make link the dependency to particular input
16141 (add-before 'build 'patch-file-path
16142 (lambda* (#:key inputs #:allow-other-keys)
16143 (let ((file-path (assoc-ref inputs "file")))
16144 (substitute* "py3status/parse_config.py"
16145 (("\\[\"file\", \"-b\"")
16146 (string-append "['" file-path "/bin/file', '-b'")))
16147 #t))))
16148 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
16149 (home-page "https://github.com/ultrabug/py3status")
16150 (synopsis "Extensible i3status wrapper written in Python")
16151 (description "py3status is an i3status wrapper which extends i3status
16152 functionality in a modular way, allowing you to extend your panel with your
16153 own code, responding to click events and updating clock every second.")
16154 (license license:bsd-3)))
16155
16156 (define-public python-tblib
16157 (package
16158 (name "python-tblib")
16159 (version "1.6.0")
16160 (source (origin
16161 (method url-fetch)
16162 (uri (pypi-uri "tblib" version))
16163 (sha256
16164 (base32
16165 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
16166 (build-system python-build-system)
16167 (arguments
16168 `(#:phases
16169 (modify-phases %standard-phases
16170 (replace 'check
16171 (lambda _
16172 (invoke "py.test" "-vv" "tests" "README.rst"))))))
16173 (native-inputs
16174 (list python-pytest python-six))
16175 (home-page "https://github.com/ionelmc/python-tblib")
16176 (synopsis "Traceback serialization library")
16177 (description
16178 "Traceback serialization allows you to:
16179
16180 @enumerate
16181 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
16182 different processes. This allows better error handling when running code over
16183 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
16184
16185 @item Parse traceback strings and raise with the parsed tracebacks.
16186 @end enumerate\n")
16187 (license license:bsd-3)))
16188
16189 (define-public python-tftpy
16190 (package
16191 (name "python-tftpy")
16192 (version "0.8.2")
16193 (source
16194 (origin
16195 (method git-fetch) ;no tests in PyPI archive
16196 (uri (git-reference
16197 (url "https://github.com/msoulier/tftpy")
16198 (commit version)))
16199 (file-name (git-file-name name version))
16200 (sha256
16201 (base32
16202 "1gl04ps8h8r7av3h0zbm8gwmkqs9rkk5vf7n8mv2bzrkwvy9hacc"))))
16203 (build-system python-build-system)
16204 (arguments
16205 `(#:phases (modify-phases %standard-phases
16206 (replace 'check
16207 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
16208 (when tests?
16209 ;; The default DEBUG logging level is way too verbose.
16210 (substitute* "t/test.py"
16211 (("logging\\.DEBUG")
16212 "logging.INFO"))
16213 (invoke "python" "-m" "unittest" "t/test.py")))))))
16214 (home-page "http://tftpy.sourceforge.net/")
16215 (synopsis "Python trivial file transfer protocol (TFTP) library")
16216 (description "TFTPy is a trivial file transfer protocol (TFTP) Python
16217 library. It can be used to act both as a TFTP client or TFTP server.")
16218 (license license:expat)))
16219
16220 (define-public python-greenlet
16221 (package
16222 (name "python-greenlet")
16223 (version "1.1.2")
16224 (source (origin
16225 (method url-fetch)
16226 (uri (pypi-uri "greenlet" version))
16227 (sha256
16228 (base32
16229 "0jkln5bf6rq7dbvpv7ypin3pp9jqd2jr91yyxlnfcii3msj5w3z3"))))
16230 (build-system python-build-system)
16231 (home-page "https://greenlet.readthedocs.io/")
16232 (synopsis "Lightweight in-process concurrent programming")
16233 (description
16234 "Greenlet package is a spin-off of Stackless, a version of CPython
16235 that supports micro-threads called \"tasklets\". Tasklets run
16236 pseudo-concurrently (typically in a single or a few OS-level threads) and
16237 are synchronized with data exchanges on \"channels\".")
16238 (license (list license:psfl license:expat))))
16239
16240 (define-public python-objgraph
16241 (package
16242 (name "python-objgraph")
16243 (version "3.4.1")
16244 (source
16245 (origin
16246 (method url-fetch)
16247 (uri (pypi-uri "objgraph" version))
16248 (sha256
16249 (base32
16250 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
16251 (build-system python-build-system)
16252 (propagated-inputs
16253 (list python-graphviz))
16254 (native-inputs
16255 (list python-mock graphviz))
16256 (home-page "https://mg.pov.lt/objgraph/")
16257 (synopsis "Draw Python object reference graphs with graphviz")
16258 (description
16259 "This package provides tools to draw Python object reference graphs with
16260 graphviz.")
16261 (license license:expat)))
16262
16263 (define-public python-gevent
16264 (package
16265 (name "python-gevent")
16266 (version "21.12.0")
16267 (source (origin
16268 (method url-fetch)
16269 (uri (pypi-uri "gevent" version))
16270 (sha256
16271 (base32
16272 "0kh9mmq811mzfgj60n64icybjp4ryjmfmy1vg7x92yrniibn92zl"))
16273 (modules '((guix build utils)))
16274 (snippet
16275 '(begin
16276 ;; unbunding libev and c-ares
16277 (delete-file-recursively "deps")
16278 ;; Remove cythonized files.
16279 (with-directory-excursion "src/gevent"
16280 (for-each delete-file
16281 (append (list "resolver/cares.c"
16282 "queue.c"
16283 "local.c"
16284 "libev/corecext.h"
16285 "libev/corecext.c"
16286 "greenlet.c"
16287 "event.c"
16288 "_waiter.c"
16289 "_tracer.c"
16290 "_semaphore.c"
16291 "_imap.c"
16292 "_ident.c"
16293 "_hub_primitives.c"
16294 "_hub_local.c"
16295 "_greenlet_primitives.c"
16296 "_abstract_linkable.c")
16297 (find-files "." "\\.html$"))))))))
16298 (build-system python-build-system)
16299 (arguments
16300 `(#:modules ((ice-9 ftw)
16301 (ice-9 match)
16302 (srfi srfi-26)
16303 (guix build utils)
16304 (guix build python-build-system))
16305 #:phases (modify-phases %standard-phases
16306 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
16307 (lambda _
16308 (substitute* "src/gevent/subprocess.py"
16309 (("/bin/sh") (which "sh")))
16310 (for-each (lambda (file)
16311 (substitute* file
16312 (("/bin/sh") (which "sh"))
16313 (("/bin/true") (which "true"))))
16314 (find-files "src/greentest" "\\.py$"))))
16315 (add-before 'build 'do-not-use-bundled-sources
16316 (lambda _
16317 (setenv "GEVENTSETUP_EMBED" "0")
16318
16319 ;; Prevent building bundled libev.
16320 (substitute* "setup.py"
16321 (("run_make=_BUILDING")
16322 "run_make=False"))))
16323 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
16324 (lambda* (#:key inputs #:allow-other-keys)
16325 (let ((greenlet (string-append
16326 (assoc-ref inputs "python-greenlet")
16327 "/include")))
16328 (match (scandir greenlet
16329 (lambda (item)
16330 (string-prefix? "python" item)))
16331 ((python)
16332 (setenv "C_INCLUDE_PATH"
16333 (string-append greenlet "/" python ":"
16334 (or (getenv "C_INCLUDE_PATH")
16335 ""))))))))
16336 (add-before 'check 'pretend-to-be-CI
16337 (lambda _
16338 ;; A few tests are skipped due to network constraints or
16339 ;; get longer timeouts when running in a CI environment.
16340 ;; Piggy-back on that, as we need the same adjustments.
16341 (setenv "TRAVIS" "1")
16342 (setenv "APPVEYOR" "1")))
16343 (add-before 'check 'adjust-tests
16344 (lambda _
16345 (let ((disabled-tests
16346 '(;; These tests relies on networking which is
16347 ;; not available in the build container.
16348 "test__getaddrinfo_import.py"
16349 "test__server_pywsgi.py"
16350 ;; XXX: These tests borrow functionality from the
16351 ;; Python builtin 'test' module, but it is not
16352 ;; installed with the Guix Python distribution.
16353 "test_smtpd.py"
16354 "test_wsgiref.py"
16355 "test_urllib2.py"
16356 "test_thread.py"
16357 "test_threading.py"
16358 "test__threading_2.py"
16359 ;; These tests rely on KeyboardInterrupts which do not
16360 ;; work inside the build container for some reason
16361 ;; (lack of controlling terminal?).
16362 "test_subprocess.py"
16363 "test__issues461_471.py"
16364 ;; TODO: Patch out the tests that use getprotobyname, etc
16365 ;; instead of disabling all the tests from these files.
16366 "test__resolver_dnspython.py"
16367 "test__doctests.py"
16368 "test__all__.py"
16369 "test___config.py"
16370 "test__execmodules.py"
16371 ;; This test contains 'test_unlink', which
16372 ;; fails on i686 (see:
16373 ;; https://github.com/gevent/gevent/issues/1558).
16374 "test__core_stat.py")))
16375 (call-with-output-file "skipped_tests.txt"
16376 (lambda (port)
16377 (format port "~a~%"
16378 (string-join disabled-tests "\n")))))))
16379 (replace 'check
16380 (lambda _
16381 ;; Use the build daemons configured number of workers.
16382 (setenv "NWORKERS" (number->string (parallel-job-count)))
16383
16384 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
16385 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
16386 (propagated-inputs
16387 (list python-greenlet python-zope-event python-zope-interface))
16388 (native-inputs
16389 (list python-cython
16390 ;; For tests.
16391 python-dnspython python-psutil python-objgraph))
16392 (inputs
16393 (list c-ares libev))
16394 (home-page "https://www.gevent.org/")
16395 (synopsis "Coroutine-based network library")
16396 (description
16397 "@code{gevent} is a coroutine-based Python networking library that uses
16398 @code{greenlet} to provide a high-level synchronous API on top of the
16399 @code{libev} event loop.")
16400 (license license:expat)))
16401
16402 (define-public python-fastimport
16403 (package
16404 (name "python-fastimport")
16405 (version "0.9.9")
16406 (source
16407 (origin
16408 (method url-fetch)
16409 (uri (pypi-uri "fastimport" version))
16410 (sha256
16411 (base32 "06gk14qgm9dxx3pzjn0ckdbywc8ial2bjfzddqwlr4bn1nnqkbll"))))
16412 (build-system python-build-system)
16413 (home-page "https://github.com/jelmer/python-fastimport")
16414 (synopsis "VCS fastimport parser and generator in Python")
16415 (description "This package provides a parser for and generator of the Git
16416 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
16417 format.")
16418 (license license:gpl2+)))
16419
16420 (define-public python-twisted
16421 (package
16422 (name "python-twisted")
16423 (version "19.7.0")
16424 (source (origin
16425 (method url-fetch)
16426 (uri (pypi-uri "Twisted" version ".tar.bz2"))
16427 (sha256
16428 (base32
16429 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
16430 (build-system python-build-system)
16431 (arguments
16432 '(#:tests? #f ; FIXME: some tests fail
16433 #:phases
16434 (modify-phases %standard-phases
16435 ;; Remove scripts, because they depend on [conch]
16436 (add-after 'unpack 'remove-entrypoint
16437 (lambda _
16438 (substitute* "src/twisted/python/_setup.py"
16439 (("\".+ = twisted\\.conch\\.scripts\\..+\",") "")))))))
16440 (propagated-inputs
16441 (list python-zope-interface
16442 python-pyhamcrest
16443 python-incremental
16444 python-hyperlink
16445 python-constantly
16446 python-automat))
16447 (home-page "https://twistedmatrix.com/")
16448 (synopsis "Asynchronous networking framework written in Python")
16449 (description
16450 "Twisted is an extensible framework for Python programming, with special
16451 focus on event-based network programming and multiprotocol integration.")
16452 (license license:expat)))
16453
16454 (define-public python-pika
16455 (package
16456 (name "python-pika")
16457 (version "1.2.1")
16458 (source
16459 (origin
16460 (method git-fetch)
16461 (uri (git-reference
16462 (url "https://github.com/pika/pika")
16463 (commit version)))
16464 (file-name (git-file-name name version))
16465 (sha256
16466 (base32
16467 "0sqj3bg6jwign8vwvn337fbwy69sm684ns1vh5kbfnskq4him9i2"))))
16468 (build-system python-build-system)
16469 (arguments
16470 '(#:phases (modify-phases %standard-phases
16471 (add-after 'unpack 'disable-live-tests
16472 (lambda _
16473 ;; Disable tests that require RabbitMQ, which is not
16474 ;; yet available in Guix.
16475 (substitute* "nose2.cfg"
16476 (("tests=tests/unit,tests/acceptance")
16477 "start-dir=tests/unit"))
16478 (with-directory-excursion "tests"
16479 (for-each delete-file
16480 '("unit/base_connection_tests.py"
16481 "unit/threaded_test_wrapper_test.py")))))
16482 (replace 'check
16483 (lambda* (#:key tests? #:allow-other-keys)
16484 (when tests?
16485 (setenv "PYTHONPATH" (getcwd))
16486 (invoke "nose2" "-v")))))))
16487 (native-inputs
16488 (list python-mock
16489 python-nose2
16490 ;; These are optional at runtime, and provided here for tests.
16491 python-gevent
16492 python-tornado
16493 python-twisted))
16494 (home-page "https://pika.readthedocs.org")
16495 (synopsis "Pure Python AMQP Client Library")
16496 (description
16497 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
16498 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
16499 network support library.")
16500 (license license:bsd-3)))
16501
16502 (define-public python-ply
16503 (package
16504 (name "python-ply")
16505 (version "3.11")
16506 (source
16507 (origin
16508 (method url-fetch)
16509 (uri (pypi-uri "ply" version))
16510 (sha256
16511 (base32
16512 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
16513 (build-system python-build-system)
16514 (home-page "http://www.dabeaz.com/ply/")
16515 (synopsis "Python Lex & Yacc")
16516 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
16517 It uses LR parsing and does extensive error checking.")
16518 (license license:bsd-3)))
16519
16520 (define-public python-tabulate
16521 (package
16522 (name "python-tabulate")
16523 (version "0.8.9")
16524 (source (origin
16525 (method url-fetch)
16526 (uri (pypi-uri "tabulate" version))
16527 (sha256
16528 (base32
16529 "19qkdz8xwk5jxa5xn53mnk76qnh4ysm81vzj664jw1b0azr167gb"))))
16530 (build-system python-build-system)
16531 (arguments
16532 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
16533 ;; and the latest release is not tagged in the upstream repository.
16534 '(#:tests? #f))
16535 (home-page "https://bitbucket.org/astanin/python-tabulate")
16536 (synopsis "Pretty-print tabular data")
16537 (description
16538 "Tabulate is a library and command-line utility to pretty-print tabular
16539 data in Python.")
16540 (license license:expat)))
16541
16542 (define-public python-kazoo
16543 (package
16544 (name "python-kazoo")
16545 (version "2.8.0")
16546 (source
16547 (origin
16548 (method url-fetch)
16549 (uri (pypi-uri "kazoo" version))
16550 (sha256
16551 (base32
16552 "1zpj5cc8624w6i0pxgcxqkjwbkm4pkrv19d7wh5df3jais32g3jq"))))
16553 (build-system python-build-system)
16554 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
16555 (propagated-inputs
16556 (list python-six))
16557 (home-page "https://kazoo.readthedocs.org")
16558 (synopsis "High-level Zookeeper client library")
16559 (description
16560 "Kazoo is a Python client library for the Apache Zookeeper distributed
16561 application service. It is designed to be easy to use and to avoid common
16562 programming errors.")
16563 (license license:asl2.0)))
16564
16565 (define-public python-pykafka
16566 (package
16567 (name "python-pykafka")
16568 (version "2.4.0")
16569 (source (origin
16570 (method url-fetch)
16571 (uri (pypi-uri "pykafka" version))
16572 (sha256
16573 (base32
16574 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
16575 (build-system python-build-system)
16576 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
16577 (propagated-inputs
16578 (list python-gevent python-kazoo python-tabulate))
16579 (inputs
16580 (list librdkafka))
16581 (home-page "https://pykafka.readthedocs.io/")
16582 (synopsis "Apache Kafka client for Python")
16583 (description
16584 "PyKafka is a client for the Apache Kafka distributed messaging system.
16585 It includes Python implementations of Kafka producers and consumers, which
16586 are optionally backed by a C extension built on librdkafka.")
16587 (license license:asl2.0)))
16588
16589 (define-public python-wcwidth
16590 (package
16591 (name "python-wcwidth")
16592 (version "0.1.8")
16593 (source (origin
16594 (method url-fetch)
16595 (uri (pypi-uri "wcwidth" version))
16596 (sha256
16597 (base32
16598 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
16599 (build-system python-build-system)
16600 (home-page "https://github.com/jquast/wcwidth")
16601 (synopsis "Measure number of terminal column cells of wide-character codes")
16602 (description "Wcwidth measures the number of terminal column cells of
16603 wide-character codes. It is useful for those implementing a terminal emulator,
16604 or programs that carefully produce output to be interpreted by one. It is a
16605 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
16606 specified in POSIX.1-2001 and POSIX.1-2008.")
16607 (license license:expat)))
16608
16609 (define-public python-chai
16610 (package
16611 (name "python-chai")
16612 (version "1.1.2")
16613 (source (origin
16614 (method url-fetch)
16615 (uri (pypi-uri "chai" version))
16616 (sha256
16617 (base32
16618 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))
16619 (patches (search-patches "python-chai-drop-python2.patch"))))
16620 (build-system python-build-system)
16621 (home-page "https://github.com/agoragames/chai")
16622 (synopsis "Mocking framework for Python")
16623 (description
16624 "Chai provides an api for mocking, stubbing and spying your python
16625 objects, patterned after the Mocha library for Ruby.")
16626 (license license:bsd-3)))
16627
16628 (define-public python-inflection
16629 (package
16630 (name "python-inflection")
16631 (version "0.3.1")
16632 (source
16633 (origin (method url-fetch)
16634 (uri (pypi-uri "inflection" version))
16635 (sha256
16636 (base32
16637 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
16638 (build-system python-build-system)
16639 (native-inputs
16640 (list python-pytest))
16641 (home-page "https://github.com/jpvanhal/inflection")
16642 (synopsis "Python string transformation library")
16643 (description
16644 "Inflection is a string transformation library. It singularizes
16645 and pluralizes English words, and transforms strings from CamelCase to
16646 underscored string.")
16647 (license license:expat)))
16648
16649 (define-public python-pylev
16650 (package
16651 (name "python-pylev")
16652 (version "1.3.0")
16653 (source (origin
16654 (method url-fetch)
16655 (uri (pypi-uri "pylev" version))
16656 (sha256
16657 (base32
16658 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
16659 (build-system python-build-system)
16660 (home-page "https://github.com/toastdriven/pylev")
16661 (synopsis "Levenshtein distance implementation in Python")
16662 (description "Pure Python Levenshtein implementation, based off the
16663 Wikipedia code samples at
16664 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
16665 (license license:bsd-3)))
16666
16667 (define-public python-cleo
16668 (package
16669 (name "python-cleo")
16670 (version "0.8.1")
16671 (source (origin
16672 (method url-fetch)
16673 (uri (pypi-uri "cleo" version))
16674 (sha256
16675 (base32
16676 "17q6wi3q280kxmxzb2iwnnqih2xbljn18v0bjx2ip18p079j43ix"))))
16677 (build-system python-build-system)
16678 (native-inputs
16679 (list ;; For testing
16680 python-mock python-pytest-mock python-pytest))
16681 (propagated-inputs
16682 (list python-backpack python-clikit python-pastel python-pylev))
16683 (home-page "https://github.com/sdispater/cleo")
16684 (synopsis "Command-line arguments library for Python")
16685 (description
16686 "Cleo allows you to create command-line commands with signature in
16687 docstring and colored output.")
16688 (license license:expat)))
16689
16690 (define-public python-tomlkit
16691 (package
16692 (name "python-tomlkit")
16693 (version "0.7.0")
16694 (source
16695 (origin
16696 (method url-fetch)
16697 (uri (pypi-uri "tomlkit" version))
16698 (sha256
16699 (base32 "062n694sfv24ylda6nh8228y2q9hrvy554kqx84y7czsjfbg4mxc"))))
16700 (build-system python-build-system)
16701 (native-inputs
16702 (list python-pytest python-pyyaml))
16703 (home-page "https://github.com/sdispater/tomlkit")
16704 (synopsis "Style-preserving TOML library")
16705 (description
16706 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
16707 preserves all comments, indentations, whitespace and internal element ordering,
16708 and makes them accessible and editable via an intuitive API. It can also
16709 create new TOML documents from scratch using the provided helpers. Part of the
16710 implementation has been adapted, improved, and fixed from Molten.")
16711 (license license:expat)))
16712
16713 (define-public python-shellingham
16714 (package
16715 (name "python-shellingham")
16716 (version "1.4.0")
16717 (source
16718 (origin
16719 (method url-fetch)
16720 (uri (pypi-uri "shellingham" version))
16721 (sha256
16722 (base32 "07hpndvcv9mf9hp54b4apzpwzmzfzl8ryaacsfdq4139im2w4ma8"))))
16723 (build-system python-build-system)
16724 (home-page "https://github.com/sarugaku/shellingham")
16725 (synopsis "Tool to detect surrounding shell")
16726 (description
16727 "Shellingham detects what shell the current Python executable is
16728 running in.")
16729 (license license:isc)))
16730
16731 (define-public python-memcached
16732 (package
16733 (name "python-memcached")
16734 (version "1.59")
16735 (source
16736 (origin
16737 (method url-fetch)
16738 (uri (pypi-uri "python-memcached" version))
16739 (sha256
16740 (base32
16741 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))
16742 (patches (search-patches "python-memcached-syntax-warnings.patch"))))
16743 (build-system python-build-system)
16744 (propagated-inputs (list python-six))
16745 (home-page
16746 "https://github.com/linsomniac/python-memcached")
16747 (synopsis "Pure python memcached client")
16748 (description
16749 "This software is a pure Python interface to the memcached memory cache
16750 daemon. It is the client side software which allows storing values in one or
16751 more, possibly remote, memcached servers.")
16752 (license license:psfl)))
16753
16754 (define-public python-mergedeep
16755 (package
16756 (name "python-mergedeep")
16757 (version "1.3.4")
16758 (source
16759 (origin
16760 (method git-fetch)
16761 (uri (git-reference
16762 (url "https://github.com/clarketm/mergedeep")
16763 (commit (string-append "v" version))))
16764 (file-name (git-file-name name version))
16765 (sha256
16766 (base32
16767 "1msvvdzk33sxzgyvs4fs8dlsrsi7fjj038z83s0yw5h8m8d78469"))))
16768 (build-system python-build-system)
16769 (native-inputs (list python-pytest))
16770 (home-page "https://github.com/clarketm/mergedeep")
16771 (synopsis "Deep merge function for Python")
16772 (description "This package provides a deep merge function for Python,
16773 useful to combine multiple data objects as one.")
16774 (license license:expat)))
16775
16776 (define-public python-clikit
16777 (package
16778 (name "python-clikit")
16779 (version "0.6.2")
16780 (source
16781 (origin
16782 (method url-fetch)
16783 (uri (pypi-uri "clikit" version))
16784 (sha256
16785 (base32
16786 "0ngdkmb73gkp5y00q7r9k1cdlfn0wyzws2wrqlshc4hlkbdyabj4"))))
16787 (build-system python-build-system)
16788 (arguments '(#:tests? #f)) ; no test in the PyPI tarball
16789 (propagated-inputs
16790 (list python-crashtest python-pastel python-pylev))
16791 (home-page "https://github.com/sdispater/clikit")
16792 (synopsis "Group of utilities to build command line interfaces")
16793 (description
16794 "CliKit is a group of utilities to build testable command line
16795 interfaces.")
16796 (license license:expat)))
16797
16798 (define-public python-msgpack-python
16799 (package
16800 (name "python-msgpack-python")
16801 (version "0.5.6")
16802 (source
16803 (origin
16804 (method url-fetch)
16805 (uri (pypi-uri "msgpack-python" version))
16806 (sha256
16807 (base32
16808 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
16809 (build-system python-build-system)
16810 (home-page "https://msgpack.org/")
16811 (synopsis "Package to deserialize messages in MessagePack binary format")
16812 (description
16813 "MessagePack is an efficient binary serialization format. It lets you
16814 exchange data among multiple languages like JSON. But it's faster and
16815 smaller. Small integers are encoded into a single byte, and typical short
16816 strings require only one extra byte in addition to the strings themselves.")
16817 (license license:asl2.0)))
16818
16819 (define-public python-cattrs
16820 (package
16821 (name "python-cattrs")
16822 (version "22.1.0")
16823 (source (origin
16824 (method git-fetch) ;for tests
16825 (uri (git-reference
16826 (url "https://github.com/python-attrs/cattrs")
16827 (commit (string-append "v" version))))
16828 (file-name (git-file-name name version))
16829 (sha256
16830 (base32
16831 "1n0h25gj6zd02kqyl040xpdvg4hpy1j92716sz0rg019xjqqijqb"))))
16832 (build-system python-build-system)
16833 (arguments
16834 (list
16835 #:phases
16836 #~(modify-phases %standard-phases
16837 ;; XXX: PEP 517 manual build copied from python-isort.
16838 (add-after 'unpack 'adjust-for-older-attrs
16839 ;; Our older attrs package is using the 'attr' rather than 'attrs'
16840 ;; namespace.
16841 ;; TODO: Remove after python-attrs is updated to >= 21.4.0.
16842 (lambda _
16843 (substitute* (find-files "." "\\.py$")
16844 (("from attrs\\b")
16845 "from attr"))))
16846 (replace 'build
16847 (lambda _
16848 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
16849 (replace 'install
16850 (lambda _
16851 (let ((whl (car (find-files "dist" "\\.whl$"))))
16852 (invoke "pip" "--no-cache-dir" "--no-input"
16853 "install" "--no-deps" "--prefix" #$output whl))))
16854 (replace 'check
16855 (lambda* (#:key tests? #:allow-other-keys)
16856 (when tests?
16857 ;; Do not use the 'pytest' binary as it hard-codes an older
16858 ;; python-hypothesis version near the beginning of its
16859 ;; GUIX_PYTHONPATH.
16860 (invoke "python" "-m" "pytest" "-vv" "-c" "/dev/null" "tests"
16861 "-n" (number->string (parallel-job-count))
16862 ;; This test requires orjson, which needs the maturin
16863 ;; build system and new Rust dependencies.
16864 "--ignore" "tests/test_preconf.py")))))))
16865 (native-inputs
16866 (list python-hypothesis-next
16867 python-immutables
16868 python-msgpack
16869 python-poetry-core
16870 python-pymongo ;for the bson module
16871 python-pypa-build
16872 python-pytest
16873 python-pytest-xdist))
16874 (propagated-inputs
16875 (list python-attrs
16876 python-exceptiongroup
16877 python-typing-extensions))
16878 (home-page "https://github.com/python-attrs/cattrs")
16879 (synopsis "Python library for structuring and unstructuring data")
16880 (description "@code{cattrs} is an Python library for structuring and
16881 unstructuring data. @code{cattrs} works best with @code{attrs} classes,
16882 @code{dataclasses} and the usual Python collections, but other kinds of
16883 classes can also be supported by manually registering converters.")
16884 (license license:expat)))
16885
16886 (define-public python-cachy
16887 (package
16888 (name "python-cachy")
16889 (version "0.3.0")
16890 (source
16891 (origin
16892 (method url-fetch)
16893 (uri (pypi-uri "cachy" version))
16894 (sha256
16895 (base32
16896 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
16897 (build-system python-build-system)
16898 (arguments
16899 '(#:phases
16900 (modify-phases %standard-phases
16901 (replace 'check
16902 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
16903 "pytest"))))))
16904 (native-inputs
16905 (list memcached python-fakeredis python-flexmock python-pifpaf
16906 python-pytest))
16907 (propagated-inputs
16908 (list python-memcached python-msgpack-python python-redis))
16909 (home-page "https://github.com/sdispater/cachy")
16910 (synopsis "Simple yet effective caching library")
16911 (description
16912 "Cachy provides a simple yet effective caching library. A simple but
16913 powerful API: thread-safety; decorator syntax; support for memcached, redis,
16914 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
16915 (license license:expat)))
16916
16917 (define-public poetry
16918 (package
16919 (name "poetry")
16920 (version "1.1.12")
16921 (source
16922 (origin
16923 (method url-fetch)
16924 (uri (pypi-uri "poetry" version))
16925 (sha256
16926 (base32
16927 "0rr54mvcfcv9cv6vw2122y28xvd2pwqpv2x8c8j5ayz3gwsy4rjw"))))
16928 (build-system python-build-system)
16929 (arguments
16930 `(#:tests? #f ;PyPI does not have tests
16931 #:phases
16932 (modify-phases %standard-phases
16933 (add-before 'build 'patch-setup-py
16934 (lambda _
16935 (substitute* "setup.py"
16936 ;; Relax some of the requirements.
16937 (("(keyring>=21.2.0),<22.0.0" _ keyring) keyring)
16938 (("(packaging>=20.4),<21.0" _ packaging) packaging)))))))
16939 (propagated-inputs
16940 (list python-cachecontrol
16941 python-cachy
16942 python-cleo
16943 python-crashtest
16944 python-entrypoints
16945 python-html5lib
16946 python-keyring
16947 ; Use of deprecated version of msgpack reported upstream:
16948 ; https://github.com/python-poetry/poetry/issues/3607
16949 python-msgpack-transitional
16950 python-packaging
16951 python-pexpect
16952 python-pip
16953 python-pkginfo
16954 python-poetry-core
16955 python-requests
16956 python-requests-toolbelt
16957 python-shellingham
16958 python-tomlkit
16959 python-virtualenv))
16960 (home-page "https://python-poetry.org")
16961 (synopsis "Python dependency management and packaging made easy")
16962 (description "Poetry is a tool for dependency management and packaging
16963 in Python. It allows you to declare the libraries your project depends on and
16964 it will manage (install/update) them for you.")
16965 (license license:expat)))
16966
16967 (define-public python-lark-parser
16968 (package
16969 (name "python-lark-parser")
16970 (version "0.9.0")
16971 (source (origin
16972 (method url-fetch)
16973 (uri (pypi-uri "lark-parser" version))
16974 (sha256
16975 (base32
16976 "1kd61asrb3h9spgsj4bslfbgp8q4271sw3hblk6f2vbbblv8jxcy"))))
16977 (build-system python-build-system)
16978 (home-page "https://github.com/lark-parser/lark")
16979 (synopsis "Multi-language parser for Python")
16980 (description
16981 "Lark is a parser built with a focus on ergonomics, performance and
16982 resilience. Lark can parse all context-free languages. That means it is
16983 capable of parsing almost any programming language out there, and to
16984 some degree most natural languages too.")
16985 (license license:expat)))
16986
16987 (define-public python-libcst
16988 (package
16989 (name "python-libcst")
16990 (version "0.3.8")
16991 (source (origin
16992 (method url-fetch)
16993 (uri (pypi-uri "libcst" version))
16994 (sha256
16995 (base32
16996 "05zsc61gsd2pyb6wiyh58zczndxi6rm4d2jl94rpf5cv1fzw6ks8"))))
16997 (build-system python-build-system)
16998 (arguments
16999 `(#:phases
17000 (modify-phases %standard-phases
17001 (add-after 'unpack 'remove-failing-tests
17002 (lambda _
17003 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/346>.
17004 (delete-file "libcst/tests/test_fuzz.py")
17005 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/347>.
17006 (delete-file "libcst/tests/test_pyre_integration.py")
17007 (delete-file "libcst/codemod/tests/test_codemod_cli.py")
17008 (delete-file "libcst/metadata/tests/test_full_repo_manager.py")
17009 (delete-file "libcst/metadata/tests/test_type_inference_provider.py")))
17010 (add-before 'check 'generate-test-data
17011 (lambda _
17012 (invoke "python" "-m" "libcst.codegen.generate" "visitors")
17013 (invoke "python" "-m" "libcst.codegen.generate" "return_types")))
17014 (replace 'check
17015 (lambda* (#:key tests? #:allow-other-keys)
17016 (when tests?
17017 (invoke "python" "-m" "unittest")))))))
17018 (native-inputs
17019 (list python-black python-isort))
17020 (propagated-inputs
17021 (list python-typing-extensions python-typing-inspect python-pyyaml))
17022 (home-page "https://github.com/Instagram/LibCST")
17023 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
17024 (description
17025 "LibCST parses Python source code as a CST tree that keeps all
17026 formatting details (comments, whitespaces, parentheses, etc). It's useful
17027 for building automated refactoring (codemod) applications and linters.
17028 LibCST creates a compromise between an Abstract Syntax Tree (AST) and
17029 a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
17030 naming node types and fields, LibCST creates a lossless CST that looks and
17031 feels like an AST.")
17032 (license (list license:expat
17033 ;; Some files unde libcst/_parser/ are under Python Software
17034 ;; Foundation license (see LICENSE file for details)
17035 license:psfl
17036 ;; libcst/_add_slots.py
17037 license:asl2.0))))
17038
17039 (define-public python-libcst-minimal
17040 (hidden-package
17041 (package
17042 (inherit python-libcst)
17043 (name "python-libcst-minimal")
17044 (arguments '(#:tests? #f))
17045 (native-inputs '()))))
17046
17047 (define-public python-typing-inspect
17048 (package
17049 (name "python-typing-inspect")
17050 (version "0.6.0")
17051 (source (origin
17052 (method url-fetch)
17053 (uri (pypi-uri "typing_inspect" version))
17054 (sha256
17055 (base32
17056 "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))
17057 (patches (search-patches "python-typing-inspect-fix.patch"))))
17058 (build-system python-build-system)
17059 (propagated-inputs
17060 (list python-mypy-extensions python-typing-extensions))
17061 (home-page "https://github.com/ilevkivskyi/typing_inspect")
17062 (synopsis "API for inspection of types in the Python @code{typing} module")
17063 (description
17064 "The @code{typing_inspect} module defines experimental API for runtime
17065 inspection of types defined in the Python standard typing module.")
17066 (license license:expat)))
17067
17068 (define-public python-lazy-object-proxy
17069 (package
17070 (name "python-lazy-object-proxy")
17071 (version "1.5.1")
17072 (source (origin
17073 (method url-fetch)
17074 (uri (pypi-uri "lazy-object-proxy" version))
17075 (sha256
17076 (base32
17077 "0hwh29m9wa582ramj30p4pysckdrmki1z1b8iaaxk6mpfx2kc8wp"))))
17078 (native-inputs
17079 (list python-setuptools-scm))
17080 (build-system python-build-system)
17081 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
17082 (synopsis "Lazy object proxy for python")
17083 (description
17084 "Lazy object proxy is an object that wraps a callable but defers the call
17085 until the object is actually required, and caches the result of said call.")
17086 (license license:bsd-2)))
17087
17088 (define-public python-dnspython
17089 (package
17090 (name "python-dnspython")
17091 (version "2.1.0")
17092 (source (origin
17093 (method url-fetch)
17094 (uri (pypi-uri "dnspython" version ".zip"))
17095 (sha256
17096 (base32
17097 "1m0xvyby8baaxp6pfm0fgq8d2pq5dd8qm8bzfbrs009jaw5pza74"))))
17098 (build-system python-build-system)
17099 (arguments
17100 `(#:tests? #f ; XXX: requires internet access
17101 #:phases
17102 (modify-phases %standard-phases
17103 (add-after 'unpack 'patch-getprotobyname-calls
17104 ;; These calls are problematic in the build environment as there is
17105 ;; no /etc/protocols. This breaks the sanity-check phase of any
17106 ;; package depnding on this one.
17107 (lambda _
17108 (substitute* "dns/rdtypes/IN/WKS.py"
17109 (("socket.getprotobyname\\('tcp'\\)")
17110 "6")
17111 (("socket.getprotobyname\\('udp'\\)")
17112 "17")))))))
17113 (native-inputs (list unzip))
17114 (home-page "https://www.dnspython.org")
17115 (synopsis "DNS toolkit for Python")
17116 (description
17117 "dnspython is a DNS toolkit for Python. It supports almost all record
17118 types. It can be used for queries, zone transfers, and dynamic updates.
17119 It supports TSIG authenticated messages and EDNS0.")
17120 (license license:expat)))
17121
17122 (define-public python-dnspython-1.16
17123 (package
17124 (inherit python-dnspython)
17125 (version "1.16.0")
17126 (source (origin
17127 (method url-fetch)
17128 (uri (string-append "http://www.dnspython.org/kits/"
17129 version "/dnspython-" version ".tar.gz"))
17130 (sha256
17131 (base32
17132 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
17133 (native-inputs '())))
17134
17135 (define-public python-py3dns
17136 (package
17137 (name "python-py3dns")
17138 (version "3.2.1")
17139 (source
17140 (origin
17141 (method url-fetch)
17142 (uri (pypi-uri "py3dns" version))
17143 (sha256
17144 (base32
17145 "1r25f0ys5p37bhld7m7n4gb0lrysaym3w318w2f8bncq7r3d81qz"))))
17146 (build-system python-build-system)
17147 ;; This package wants to read /etc/resolv.conf. We can't patch it without
17148 ;; removing functionality so we copy from Nix and "just don't build it".
17149 (arguments
17150 `(#:phases
17151 (modify-phases %standard-phases
17152 (add-after 'unpack 'patch-source
17153 (lambda _
17154 (substitute* "setup.py"
17155 (("import DNS") "")
17156 (("DNS.__version__") (string-append "\"" ,version "\"")))
17157 #t)))
17158 #:tests? #f)) ; Also skip the tests.
17159 (home-page "https://launchpad.net/py3dns")
17160 (synopsis "Python 3 DNS library")
17161 (description "This Python 3 module provides a DNS API for looking up DNS
17162 entries from within Python 3 modules and applications. This module is a
17163 simple, lightweight implementation.")
17164 (license license:psfl)))
17165
17166 (define-public python-email-validator
17167 (package
17168 (name "python-email-validator")
17169 (version "1.0.2")
17170 (source
17171 (origin (method url-fetch)
17172 (uri (pypi-uri "email_validator" version))
17173 (sha256
17174 (base32
17175 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
17176 (build-system python-build-system)
17177 (arguments
17178 '(#:phases
17179 (modify-phases %standard-phases
17180 (add-before 'build 'use-dnspython
17181 (lambda _
17182 (substitute* "setup.py"
17183 (("dnspython3") "dnspython"))
17184 #t)))))
17185 (propagated-inputs
17186 (list python-dnspython python-idna))
17187 (home-page "https://github.com/JoshData/python-email-validator")
17188 (synopsis "Email address validation library for Python")
17189 (description
17190 "This library validates email address syntax and deliverability.")
17191 (license license:cc0)))
17192
17193 (define-public python-ukpostcodeparser
17194 (package
17195 (name "python-ukpostcodeparser")
17196 (version "1.1.2")
17197 (source (origin
17198 (method url-fetch)
17199 (uri (pypi-uri "UkPostcodeParser" version))
17200 (sha256
17201 (base32
17202 "03jkf1ygbwq3akzbcjyjk1akc1hv2sfgx90306pq1nwklbpn80lk"))))
17203 (build-system python-build-system)
17204 (arguments
17205 `(#:phases
17206 (modify-phases %standard-phases
17207 (replace 'check
17208 (lambda* (#:key tests? #:allow-other-keys)
17209 (when tests?
17210 ;; Tests for lowercase postcodes fail.
17211 (invoke "pytest" "-vv" "ukpostcodeparser/test/parser.py" "-k"
17212 (string-append "not test_091 "
17213 "and not test_097 "
17214 "and not test_098 "
17215 "and not test_125 "
17216 "and not test_131"))))))))
17217 (native-inputs
17218 (list python-pytest))
17219 (home-page "https://github.com/hamstah/ukpostcodeparser")
17220 (synopsis "UK Postcode parser for Python")
17221 (description
17222 "This library provides the @code{parse_uk_postcode} function for
17223 parsing UK postcodes.")
17224 (license license:expat)))
17225
17226 (define-public python-faker
17227 (package
17228 (name "python-faker")
17229 (version "13.3.4")
17230 (source (origin
17231 (method url-fetch)
17232 (uri (pypi-uri "Faker" version))
17233 (sha256
17234 (base32
17235 "04855dqvvi2mr739l5x3qf82rxq0a7spc8gl76k8xixmbw36328q"))))
17236 (build-system python-build-system)
17237 (arguments
17238 '(#:phases
17239 (modify-phases %standard-phases
17240 (replace 'check
17241 (lambda* (#:key tests? #:allow-other-keys)
17242 (when tests?
17243 (invoke "python" "-m" "pytest" "-v")))))))
17244 (native-inputs
17245 (list python-freezegun
17246 python-pytest
17247 python-random2
17248 python-ukpostcodeparser
17249 python-validators))
17250 (propagated-inputs (list python-dateutil))
17251 (home-page "https://github.com/joke2k/faker")
17252 (synopsis "Python package that generates fake data")
17253 (description
17254 "Faker is a Python package that generates fake data such as names,
17255 addresses, and phone numbers.")
17256 (license license:expat)))
17257
17258 (define-public python-pyaml
17259 (package
17260 (name "python-pyaml")
17261 (version "21.10.1")
17262 (source (origin
17263 (method url-fetch)
17264 (uri (pypi-uri "pyaml" version))
17265 (sha256
17266 (base32
17267 "10w3frzqir5sbpglc9bwb8w414dsivmcvji07yxy61mz2gp9ylf6"))))
17268 (build-system python-build-system)
17269 (native-inputs
17270 (list python-unidecode))
17271 (propagated-inputs
17272 (list python-pyyaml))
17273 (home-page "https://github.com/mk-fg/pretty-yaml")
17274 (synopsis "YAML pretty-print library for Python")
17275 (description
17276 "pyaml is a PyYAML based python module to produce pretty and readable
17277 YAML-serialized data.")
17278 (license license:wtfpl2)))
17279
17280 (define-public python-pyyaml-env-tag
17281 (package
17282 (name "python-pyyaml-env-tag")
17283 (version "0.1")
17284 (source
17285 (origin
17286 (method url-fetch)
17287 (uri (pypi-uri "pyyaml_env_tag" version))
17288 (sha256
17289 (base32 "1nsva88jsmwn0cb9jnrfiz4dvs9xakkpgfii7g1xwkx1pmsjc2bh"))))
17290 (build-system python-build-system)
17291 (propagated-inputs (list python-pyyaml))
17292 (home-page "https://github.com/waylan/pyyaml-env-tag")
17293 (synopsis "Custom YAML tag for environment variables")
17294 (description "This package provides a custom YAML tag for referencing
17295 environment variables in YAML files.")
17296 (license license:expat)))
17297
17298 (define-public python-backpack
17299 (package
17300 (name "python-backpack")
17301 (version "0.1")
17302 (source
17303 (origin
17304 (method url-fetch)
17305 (uri (pypi-uri "backpack" version))
17306 (sha256
17307 (base32
17308 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
17309 (build-system python-build-system)
17310 (native-inputs
17311 (list python-pytest python-nose python-toml))
17312 (propagated-inputs
17313 (list python-simplejson))
17314 (home-page "https://github.com/sdispater/backpack")
17315 (synopsis "Utilities for working with Python collections")
17316 (description "Backpack provides some useful utilities for working with
17317 collections of data.")
17318 (license license:expat)))
17319
17320 (define-public python-prompt-toolkit
17321 (package
17322 (name "python-prompt-toolkit")
17323 (version "3.0.29")
17324 (source
17325 (origin
17326 (method url-fetch)
17327 (uri (pypi-uri "prompt_toolkit" version))
17328 (sha256
17329 (base32 "19vf5cahp3imdpwhgvk55g3dvqmc6ga175r4vkq79kffx1h0yr5x"))))
17330 (build-system python-build-system)
17331 (arguments
17332 `(#:phases
17333 (modify-phases %standard-phases
17334 (replace 'check
17335 (lambda* (#:key tests? #:allow-other-keys)
17336 (when tests?
17337 ;; HOME is needed for the test
17338 ;; "test_pathcompleter_can_expanduser".
17339 (setenv "HOME" "/tmp")
17340 (invoke "pytest" "-vv")))))))
17341 (propagated-inputs
17342 (list python-wcwidth))
17343 (native-inputs
17344 (list python-pytest))
17345 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
17346 (synopsis "Library for building command line interfaces in Python")
17347 (description
17348 "Prompt-Toolkit is a library for building interactive command line
17349 interfaces in Python. It's like GNU Readline but it also features syntax
17350 highlighting while typing, out-of-the-box multi-line input editing, advanced
17351 code completion, incremental search, support for Chinese double-width
17352 characters, mouse support, and auto suggestions.")
17353 (license license:bsd-3)))
17354
17355 (define-public python-proselint
17356 (package
17357 (name "python-proselint")
17358 (version "0.13.0")
17359 (source
17360 (origin
17361 (method url-fetch)
17362 (uri (pypi-uri "proselint" version))
17363 (sha256
17364 (base32
17365 "0n1ahnq2mkgvh94g05xhc3l1fs3hh0ycskqlqivhhfdaq8ybdlkx"))))
17366 (build-system python-build-system)
17367 (arguments
17368 `(#:tests? #f
17369 #:phases
17370 (modify-phases %standard-phases
17371 (add-after 'unpack 'set-home-directory
17372 (lambda _
17373 (setenv "HOME" "/tmp"))))))
17374 (propagated-inputs
17375 (list python-click python-future python-six))
17376 (home-page "https://github.com/amperser/proselint")
17377 (synopsis "Linter for prose")
17378 (description "@code{python-proselint} is a linter for English prose, that
17379 scans through a file and detects issues.")
17380 (license license:bsd-3)))
17381
17382 (define-public python-jedi
17383 (package
17384 (name "python-jedi")
17385 (version "0.18.1")
17386 (source
17387 (origin
17388 (method git-fetch)
17389 (uri (git-reference
17390 (url "https://github.com/davidhalter/jedi")
17391 (commit (string-append "v" version))
17392 (recursive? #true)))
17393 (file-name (git-file-name name version))
17394 (sha256
17395 (base32
17396 "07drmi3ai49jw5n23ibkambcgijqcw073ihypjgxfnks5lv4yqy1"))
17397 (modules '((guix build utils)))
17398 (snippet
17399 ;; Adjust comprehension syntax for Python > 3.8.
17400 ;; From <https://github.com/davidhalter/jedi/issues/1824>.
17401 '(substitute* "test/completion/lambdas.py"
17402 (("if lambda: 3")
17403 "if (lambda: 3)")))))
17404 (build-system python-build-system)
17405 (arguments
17406 `(#:phases
17407 (modify-phases %standard-phases
17408 (add-after 'unpack 'fix-completion-test
17409 (lambda _
17410 ;; This resolves a failure in the 'test_completion' test (see:
17411 ;; https://github.com/davidhalter/jedi/issues/1824).
17412 ;; TODO: Remove after a new release is made (currently: 0.18.1).
17413 (substitute* "test/completion/lambdas.py"
17414 (("\\[a for a in \\[1,2\\] if lambda: 3\\]\\[0\\]")
17415 "[a for a in [1,2] if (lambda: 3)][0]"))))
17416 (replace 'check
17417 (lambda* (#:key tests? #:allow-other-keys)
17418 (when tests?
17419 (setenv "HOME" "/tmp")
17420 (invoke "python" "-m" "pytest" "-vv")))))))
17421 (native-inputs
17422 (list python-colorama python-docopt python-pytest))
17423 (propagated-inputs
17424 (list python-parso))
17425 (home-page "https://github.com/davidhalter/jedi")
17426 (synopsis "Autocompletion and static analysis library for Python")
17427 (description
17428 "Jedi is a static analysis tool for Python that can be used in Integrated
17429 Development Environments (@dfn{IDE}s) and text editors. It understands Python
17430 on a deeper level than many other static analysis frameworks for Python.
17431
17432 Jedi understands docstrings and you can use Jedi autocompletion in your REPL
17433 as well.")
17434 (license license:expat)))
17435
17436 (define-public ptpython
17437 (package
17438 (name "ptpython")
17439 (version "3.0.17")
17440 (source (origin
17441 (method url-fetch)
17442 (uri (pypi-uri "ptpython" version))
17443 (sha256
17444 (base32
17445 "1phk1grcvn456igjg8gwjjg8bf4kszddq5nd5sdlz3hslg62a7ci"))))
17446 (build-system python-build-system)
17447 (arguments
17448 `(#:tests? #f)) ;there are no tests
17449 (propagated-inputs
17450 (list python-appdirs python-black python-jedi python-prompt-toolkit
17451 python-pygments))
17452 (home-page "https://github.com/jonathanslenders/ptpython")
17453 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
17454 (description
17455 "ptpython is a Python read-eval-print loop with IDE-like features.
17456 It supports syntax highlighting, multiline editing, autocompletion, mouse,
17457 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
17458 etc.")
17459 (license license:bsd-3)))
17460
17461 (define-public python-easyprocess
17462 (package
17463 (name "python-easyprocess")
17464 (version "0.3")
17465 (source
17466 (origin
17467 (method url-fetch)
17468 (uri (pypi-uri "EasyProcess" version))
17469 (sha256
17470 (base32 "115rzzr0hx4af4m6krf7dxn8851n4l8jfxahjzjc2r0zq2m8v57v"))))
17471 (build-system python-build-system)
17472 (arguments
17473 ;; Tests require pyvirtualdisplay, which requires this package.
17474 `(#:tests? #f))
17475 (home-page "https://github.com/ponty/easyprocess")
17476 (synopsis "Python subprocess interface")
17477 (description
17478 "@code{easyprocess} is an easy to use Python subprocess interface.")
17479 (license license:bsd-3)))
17480
17481 (define-public python-entrypoint2
17482 (package
17483 (name "python-entrypoint2")
17484 (version "0.2.4")
17485 (source
17486 (origin
17487 (method url-fetch)
17488 (uri (pypi-uri "entrypoint2" version))
17489 (sha256
17490 (base32 "1qyxq54r2fbh09ab5sffbxajy8arbk6czxz5lq3ccr9qrypw6w27"))))
17491 (build-system python-build-system)
17492 (arguments
17493 `(#:test-target "pytest"))
17494 (native-inputs
17495 (list python-easyprocess python-pytest python-pytest-runner))
17496 (home-page "https://github.com/ponty/entrypoint2")
17497 (synopsis "Command-line interface for Python modules")
17498 (description
17499 "@code{entrypoint2} is an easy to use command-line interface for Python
17500 modules based on @code{argparse}. It translates function signature and
17501 documentation to argparse configuration.")
17502 (license license:bsd-3)))
17503
17504 (define-public python-pyvirtualdisplay
17505 (package
17506 (name "python-pyvirtualdisplay")
17507 (version "2.1")
17508 (source
17509 (origin
17510 (method url-fetch)
17511 (uri (pypi-uri "PyVirtualDisplay" version))
17512 (sha256
17513 (base32 "1z2fzgiw3xv3m1d9ppn53g07zhnpj05addiz56sm6ircxibnjk4x"))))
17514 (build-system python-build-system)
17515 (arguments
17516 ;; Tests fail with:
17517 ;; FileNotFoundError: [Errno 2] No such file or directory: 'Xvnc'.
17518 `(#:tests? #f))
17519 (native-inputs
17520 (list python-entrypoint2 python-psutil python-pytest
17521 python-pytest-runner))
17522 (propagated-inputs
17523 (list python-easyprocess python-pillow))
17524 (home-page "https://github.com/ponty/pyvirtualdisplay")
17525 (synopsis "Python wrapper for Xvfb, Xephyr and Xvnc")
17526 (description
17527 "@code{pyvirtualdisplay} is a Python wrapper for Xvfb, Xephyr and Xvnc.")
17528 (license license:bsd-3)))
17529
17530 (define-public python-stem
17531 (package
17532 (name "python-stem")
17533 (version "1.8.0")
17534 (source
17535 (origin
17536 (method url-fetch)
17537 (uri (pypi-uri "stem" version))
17538 (sha256
17539 (base32
17540 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
17541 (build-system python-build-system)
17542 (arguments
17543 `(#:phases
17544 (modify-phases %standard-phases
17545 (add-after 'unpack 'fix-tests
17546 ;; See https://github.com/torproject/stem/issues/56
17547 (lambda _
17548 (substitute* "run_tests.py"
17549 (("test\\.task\\.MOCK_VERSION,")
17550 ""))))
17551 (replace 'check
17552 (lambda _
17553 (invoke "./run_tests.py" "--unit")
17554 #t)))))
17555 (native-inputs
17556 (list python-mock python-pycodestyle python-pyflakes))
17557 (home-page "https://stem.torproject.org/")
17558 (synopsis
17559 "Python controller library that allows applications to interact with Tor")
17560 (description
17561 "Stem is a Python controller library for Tor. With it you can use Tor's
17562 control protocol to script against the Tor process and read descriptor data
17563 relays publish about themselves.")
17564 (license license:lgpl3)))
17565
17566 (define-public python-pyserial
17567 (package
17568 (name "python-pyserial")
17569 (version "3.5")
17570 (source
17571 (origin
17572 (method url-fetch)
17573 (uri (pypi-uri "pyserial" version))
17574 (sha256
17575 (base32
17576 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
17577 (build-system python-build-system)
17578 (arguments
17579 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
17580 ;; #:phases
17581 ;; (modify-phases %standard-phases
17582 ;; (replace 'check
17583 ;; (lambda _
17584 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
17585 (home-page
17586 "https://github.com/pyserial/pyserial")
17587 (synopsis "Python Serial Port Bindings")
17588 (description "@code{pyserial} provide serial port bindings for Python. It
17589 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
17590 and/or Xon/Xoff. The port is accessed in RAW mode.")
17591 (license license:bsd-3)))
17592
17593 (define-public python-pyserial-asyncio
17594 (package
17595 (name "python-pyserial-asyncio")
17596 (version "0.5")
17597 (source
17598 (origin
17599 (method url-fetch)
17600 (uri (pypi-uri "pyserial-asyncio" version))
17601 (sha256
17602 (base32 "0cwd2cjz859v6jrm3y6hikfqjyhyfj5vhfjb8vvflvl6791yah8n"))))
17603 (build-system python-build-system)
17604 (propagated-inputs (list python-pyserial))
17605 (home-page "https://github.com/pyserial/pyserial-asyncio")
17606 (synopsis "Pyserial asynchronous I/O extension")
17607 (description "This package extends Pyserial with asynchronous I/O
17608 support.")
17609 (license license:bsd-3)))
17610
17611 (define-public python-pymodbus
17612 (package
17613 (name "python-pymodbus")
17614 (version "2.5.3")
17615 (source
17616 (origin
17617 (method git-fetch)
17618 (uri (git-reference
17619 (url "https://github.com/riptideio/pymodbus")
17620 (commit (string-append "v" version))))
17621 (file-name (git-file-name name version))
17622 (sha256
17623 (base32
17624 "0kjjrx7xrlx0pf3y67hhr4xvqrly3xzmvf6ic5as61m6z19m7zd5"))))
17625 (build-system python-build-system)
17626 (arguments
17627 `(#:phases (modify-phases %standard-phases
17628 (add-after 'unpack 'disable-problematic-tests
17629 (lambda _
17630 ;; The following test modules rely on Python's own
17631 ;; 'test' module, which is not distributed in the Python
17632 ;; package of Guix.
17633 (delete-file "test/test_client_async_asyncio.py")
17634 (delete-file "test/test_client_sync_diag.py")
17635 ;; The following test module requires the asynctest
17636 ;; library, abandoned without support for Python 3.9+
17637 ;; (see:
17638 ;; https://github.com/riptideio/pymodbus/issues/681).
17639 (delete-file "test/test_server_asyncio.py")))
17640 (replace 'check
17641 (lambda* (#:key tests? #:allow-other-keys)
17642 (when tests?
17643 (invoke "python" "-m" "pytest")))))))
17644 (native-inputs
17645 (list python-mock
17646 python-pytest
17647 python-redis
17648 python-sqlalchemy
17649 python-tornado
17650 python-twisted))
17651 (propagated-inputs
17652 (list python-pyserial
17653 python-six
17654 ;; For the REPL.
17655 python-aiohttp
17656 python-click
17657 python-prompt-toolkit
17658 python-pygments
17659 python-pyserial-asyncio))
17660 (home-page "https://github.com/riptideio/pymodbus/")
17661 (synopsis "Modbus protocol stack in Python")
17662 (description "Pymodbus is a full Modbus protocol implementation using
17663 @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous
17664 communications core. It includes the following @emph{client} features:
17665 @itemize
17666 @item full read/write protocol on discrete and register
17667 @item most of the extended protocol (diagnostic/file/pipe/setting/information)
17668 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
17669 @item asynchronous and synchronous versions
17670 @item payload builder/decoder utilities
17671 @item pymodbus read eval print loop (REPL).
17672 @end itemize
17673 It also includes the following @emph{server} features:
17674 @itemize
17675 @item can function as a fully implemented Modbus server
17676 @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary
17677 @item asynchronous and synchronous versions
17678 @item full server control context (device information, counters, etc)
17679 @item a number of backing contexts (database, redis, sqlite, a slave device).
17680 @end itemize")
17681 (license license:bsd-3)))
17682
17683 (define-public python-exodriver
17684 (package
17685 (name "python-exodriver")
17686 (version "2.6.0")
17687 (source (origin
17688 (method git-fetch)
17689 (uri (git-reference
17690 (url "https://github.com/labjack/exodriver")
17691 (commit (string-append "v" version))))
17692 (file-name (git-file-name name version))
17693 (sha256
17694 (base32
17695 "1ikjz8147p14s814yabdq821y691klnr2yg54zgsymcc97kvwp2q"))))
17696 (outputs (list "out"
17697 "doc")) ;544 KiB of examples
17698 (build-system gnu-build-system)
17699 (arguments
17700 (list
17701 #:tests? #f ;no test suite
17702 #:make-flags #~(list (string-append "CC=" #$(cc-for-target))
17703 (string-append "PREFIX=" #$output)
17704 "RUN_LDCONFIG=0"
17705 "LINK_SO=1")
17706 #:phases
17707 #~(modify-phases %standard-phases
17708 (delete 'configure)
17709 (replace 'build
17710 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
17711 (with-directory-excursion "liblabjackusb"
17712 (apply (assoc-ref %standard-phases 'build)
17713 `(,@args #:make-flags ,make-flags)))))
17714 (replace 'install
17715 (lambda* (#:key make-flags #:allow-other-keys #:rest args)
17716 (with-directory-excursion "liblabjackusb"
17717 (apply (assoc-ref %standard-phases 'install)
17718 `(,@args #:make-flags ,make-flags)))
17719 ;; Install udev rules.
17720 (install-file "90-labjack.rules"
17721 (string-append #$output "/lib/udev/rules.d"))
17722 ;; Install examples.
17723 (let ((doc (string-append #$output:doc "/share/doc/" #$name)))
17724 (mkdir-p doc)
17725 (copy-recursively "examples"
17726 (string-append doc "/examples"))))))))
17727 (inputs (list libusb))
17728 (home-page "https://github.com/labjack/exodriver")
17729 (synopsis "USB driver for LabJack data acquisition instruments")
17730 (description "This package provides @code{liblabjackusb}, a USB library for low-level
17731 communication with the U3, U6, UE9, Digit, T4 and T7 LabJack data acquisition
17732 instruments. A udev rule is also included to allow unprivileged users to
17733 communicate with the instruments via USB.")
17734 (license license:expat))) ;see README
17735
17736 (define-public python-labjack
17737 (package
17738 (name "python-labjack")
17739 (version "2.0.4")
17740 (source (origin
17741 (method url-fetch)
17742 (uri (pypi-uri "LabJackPython" version))
17743 (sha256
17744 (base32
17745 "013bjqdi05vlbdqprr6kqi8gs4qhqc7rnyp1klw8k6fng77rpdzz"))))
17746 (build-system python-build-system)
17747 (arguments
17748 (list
17749 #:tests? #f ;no test suite
17750 #:phases
17751 #~(modify-phases %standard-phases
17752 (add-after 'unpack 'patch-liblabjackusb.so
17753 (lambda* (#:key inputs #:allow-other-keys)
17754 (substitute* (find-files "." "\\.py$")
17755 (("ctypes.CDLL\\(\"liblabjackusb.so\"")
17756 (format #f "ctypes.CDLL(~s"
17757 (search-input-file inputs
17758 "lib/liblabjackusb.so")))))))))
17759 ;; exodriver is provided as a regular input, as only its shared object is
17760 ;; used, not its Python API.
17761 (inputs (list python-exodriver))
17762 (home-page "https://labjack.com/support/software/examples/ud/labjackpython")
17763 (synopsis "Python library for LabJack U3, U6, UE9 and U12")
17764 (description "This Python library allows communicating with the U3, U6,
17765 UE9 and U12 LabJack data acquisition (DAQ) modules.")
17766 (license license:expat))) ;see setup.py
17767
17768 (define-public python-kivy-garden
17769 (package
17770 (name "python-kivy-garden")
17771 (version "0.1.4")
17772 (source
17773 (origin
17774 (method url-fetch)
17775 (uri (pypi-uri "kivy-garden" version))
17776 (sha256
17777 (base32 "0wkcpr2zc1q5jb0bi7v2dgc0vs5h1y7j42mviyh764j2i0kz8mn2"))))
17778 (build-system python-build-system)
17779 (arguments
17780 '(#:phases (modify-phases %standard-phases
17781 (add-after 'install 'remove-bat-file
17782 (lambda* (#:key outputs #:allow-other-keys)
17783 (let ((out (assoc-ref outputs "out")))
17784 (delete-file
17785 (string-append out "/bin/garden.bat"))))))))
17786 (propagated-inputs
17787 (list python-requests))
17788 (home-page "https://github.com/kivy-garden/garden")
17789 (synopsis "Garden tool for Kivy flowers")
17790 (description
17791 "This package provides the @command{garden} command to install packages
17792 for Kivy, the multitouch application platform.")
17793 (license license:expat)))
17794
17795 (define-public python-kivy
17796 (package
17797 (name "python-kivy")
17798 (version "2.1.0")
17799 (source
17800 (origin
17801 (method url-fetch)
17802 (uri (pypi-uri "Kivy" version))
17803 (file-name (string-append name "-" version ".tar.gz"))
17804 (sha256
17805 (base32
17806 "1cq4djfn7h8560mvz94dydsldg2jpp5w9rby7nafgmbh7fxg65is"))))
17807 (build-system python-build-system)
17808 (arguments
17809 `(#:tests? #f ; Tests require many optional packages
17810 #:phases
17811 (modify-phases %standard-phases
17812 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
17813 (lambda* (#:key inputs #:allow-other-keys)
17814 (setenv "KIVY_SDL2_PATH"
17815 (search-input-directory inputs "/include/SDL2"))))
17816 (add-before 'build 'set-home
17817 (lambda _
17818 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
17819 (setenv "HOME" (getcwd)))))))
17820 (native-inputs
17821 (list pkg-config python-cython))
17822 (inputs
17823 (list gstreamer
17824 mesa
17825 (sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))
17826 python-docutils
17827 python-kivy-garden
17828 python-pygments))
17829 (home-page "https://kivy.org")
17830 (synopsis "Multitouch application framework")
17831 (description
17832 "Kivy is a software library for rapid development of hardware-accelerated
17833 multitouch applications.")
17834 (license license:expat)))
17835
17836 (define-public python-kivymd
17837 (package
17838 (name "python-kivymd")
17839 (version "0.104.2")
17840 (source
17841 (origin
17842 (method url-fetch)
17843 (uri (pypi-uri "kivymd" version))
17844 (sha256
17845 (base32 "04lwy6j0agrdwa4a6dl6qs97nx9ysmscmm8psvdzjpyj8aa1zg4p"))))
17846 (build-system python-build-system)
17847 (arguments
17848 `(#:tests? #f ;tests require network
17849 #:phases
17850 (modify-phases %standard-phases
17851 (add-before 'sanity-check 'set-home
17852 (lambda _
17853 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
17854 (setenv "HOME" (getcwd)))))))
17855 (native-inputs (list python-docutils))
17856 (propagated-inputs
17857 (list python-kivy python-pillow python-pygments python-kivy-garden))
17858 (home-page "https://github.com/kivymd/KivyMD")
17859 (synopsis "Material Design compliant widgets for use with Kivy")
17860 (description
17861 "This package provides Kivy widgets that approximate Google's Material
17862 Design spec without sacrificing ease of use or application performance.")
17863 (license license:expat)))
17864
17865 (define-public python-asynckivy
17866 (package
17867 (name "python-asynckivy")
17868 (version "0.5.3")
17869 (source
17870 (origin
17871 (method url-fetch)
17872 (uri
17873 (pypi-uri "asynckivy" version))
17874 (sha256
17875 (base32 "0ivjvch8yn3k1ybfp7c1nm8mhc0ymg7d04mq54lly7yjvg0jvcni"))))
17876 (build-system python-build-system)
17877 (arguments
17878 `(#:phases
17879 (modify-phases %standard-phases
17880 (add-before 'check 'set-home
17881 (lambda _
17882 ;; 'kivy/__init__.py' wants to create $HOME/.kivy.
17883 (setenv "HOME" (getcwd)))))))
17884 (propagated-inputs (list python-kivy python-asyncgui))
17885 (home-page "https://github.com/gottadiveintopython/asynckivy")
17886 (synopsis "Async library for Kivy")
17887 (description
17888 "This package provides async versions of Kivy functions to avoid the
17889 callback-heavy mode of interaction typical in some Kivy applications.")
17890 (license license:expat)))
17891
17892 (define-public python-asyncgui
17893 (package
17894 (name "python-asyncgui")
17895 (version "0.5.3")
17896 (source (origin
17897 (method url-fetch)
17898 (uri (pypi-uri "asyncgui" version))
17899 (sha256
17900 (base32
17901 "0614130afg2qc1qq4p82piskvvx6lpjl4nlsakbjzdyd78xywnb7"))))
17902 (build-system python-build-system)
17903 (home-page "https://github.com/gottadiveintopython/asyncgui")
17904 (synopsis "Enables async/await without an event loop")
17905 (description "This package provides support for async/await applications
17906 without requiring an event loop, useful for creative responsive GUIs.")
17907 (license license:expat)))
17908
17909 (define-public python-binaryornot
17910 (package
17911 (name "python-binaryornot")
17912 (version "0.4.4")
17913 (source (origin
17914 (method url-fetch)
17915 (uri (pypi-uri "binaryornot" version))
17916 (sha256
17917 (base32
17918 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
17919 (build-system python-build-system)
17920 (arguments
17921 `(#:phases
17922 (modify-phases %standard-phases
17923 (add-after 'unpack 'patch-tests
17924 (lambda _
17925 ;; TypeError: binary() got an unexpected keyword argument
17926 ;; 'average_size'.
17927 (substitute* "tests/test_check.py"
17928 (("average_size=512") ""))
17929 #t)))))
17930 (propagated-inputs
17931 (list python-chardet python-hypothesis))
17932 (home-page "https://github.com/audreyr/binaryornot")
17933 (synopsis "Package to check if a file is binary or text")
17934 (description "Ultra-lightweight pure Python package to check if a file is
17935 binary or text.")
17936 (license license:bsd-3)))
17937
17938 (define-public binwalk
17939 (package
17940 (name "binwalk")
17941 (version "2.3.2")
17942 (source
17943 (origin
17944 (method git-fetch)
17945 (uri (git-reference
17946 (url "https://github.com/ReFirmLabs/binwalk")
17947 (commit (string-append "v" version))))
17948 (file-name (git-file-name name version))
17949 (sha256
17950 (base32 "01dalxw07c42ka4fqpixcacvy42h04ya909lzpmsblr9s2xdgwcm"))))
17951 (build-system python-build-system)
17952 (arguments
17953 `(#:phases
17954 (modify-phases %standard-phases
17955 (add-before 'check 'set-home
17956 (lambda _
17957 (setenv "HOME" ""))))))
17958 (native-inputs
17959 (list python-coverage python-nose))
17960 (home-page "https://github.com/ReFirmLabs/binwalk")
17961 (synopsis "Firmware analysis tool")
17962 (description "Binwalk is a tool for analyzing, reverse engineering, and
17963 extracting firmware images")
17964 (license license:expat)))
17965
17966 (define-public python-binwalk
17967 (deprecated-package "python-binwalk" binwalk))
17968
17969 (define-public python-bson
17970 (package
17971 (name "python-bson")
17972 (version "0.5.10")
17973 (source
17974 (origin
17975 (method git-fetch) ;for tests
17976 (uri (git-reference
17977 (url "https://github.com/py-bson/bson")
17978 (commit version)))
17979 (file-name (git-file-name name version))
17980 (sha256
17981 (base32
17982 "1vpy4rsvm3hhawvbg9rbw4j36ck8qylkhm8cjy0q6imvinkd2als"))))
17983 (build-system python-build-system)
17984 (arguments
17985 '(#:phases
17986 (modify-phases %standard-phases
17987 (replace 'check
17988 (lambda* (#:key tests? #:allow-other-keys)
17989 (when tests?
17990 (invoke "./test.py")))))))
17991 (propagated-inputs (list python-dateutil python-six))
17992 (home-page "https://github.com/py-bson/bson")
17993 (synopsis "BSON (Binary JSON) codec for Python")
17994 (description "@code{bson} is a Python library implementing a BSON (Binary
17995 JSON) codec.")
17996 (license license:asl2.0)))
17997
17998 (define-public python-nltk
17999 (package
18000 (name "python-nltk")
18001 (version "3.6.2")
18002 (source (origin
18003 (method url-fetch)
18004 (uri (pypi-uri "nltk" version ".zip"))
18005 (sha256
18006 (base32
18007 "1sq32lwgij9h8rsksymnxxr7bqfw3vgx5ijw4azbj6k2xnmmdmap"))))
18008 (build-system python-build-system)
18009 (arguments
18010 '(;; The tests require some extra resources to be downloaded.
18011 ;; TODO Try packaging these resources.
18012 #:tests? #f))
18013 (propagated-inputs
18014 (list python-click python-joblib python-regex python-tqdm))
18015 (native-inputs
18016 (list unzip))
18017 (home-page "http://nltk.org/")
18018 (synopsis "Natural Language Toolkit")
18019 (description "It provides interfaces to over 50 corpora and lexical
18020 resources such as WordNet, along with a suite of text processing libraries
18021 for classification, tokenization, stemming, tagging, parsing, and semantic
18022 reasoning, wrappers for natural language processing libraries.")
18023 (license license:asl2.0)))
18024
18025 ;; Versions >=3.5 breaks backward-compatibility,
18026 ;; so we keep version 3.4.x around for a while.
18027 (define-public python-nltk-3.4
18028 (package
18029 (inherit python-nltk)
18030 (version "3.4.5")
18031 (source
18032 (origin
18033 (method url-fetch)
18034 (uri (pypi-uri "nltk" version ".zip"))
18035 (sha256
18036 (base32 "153x2clrnigs74jdgnn3qmljdjj4gprmvpdvh49i18ls4m8mbm5y"))))
18037 (propagated-inputs (list python-six))))
18038
18039 (define-public python-pymongo
18040 (package
18041 (name "python-pymongo")
18042 (version "4.1.1")
18043 (source (origin
18044 (method url-fetch)
18045 (uri (pypi-uri "pymongo" version))
18046 (sha256
18047 (base32
18048 "1m9hc2a4kgg10xy3g5x00z4a7rrk9s0rbf5qfypwnhq0kdfg5f6p"))))
18049 (build-system python-build-system)
18050 (propagated-inputs
18051 (list python-certifi))
18052 (home-page "https://github.com/mongodb/mongo-python-driver")
18053 (synopsis "Python driver for MongoDB")
18054 (description "Python driver for MongoDB.")
18055 (license license:asl2.0)))
18056
18057 (define-public python-consul
18058 (package
18059 (name "python-consul")
18060 (version "0.6.1")
18061 (source
18062 (origin
18063 (method url-fetch)
18064 (uri (pypi-uri "python-consul" version))
18065 (sha256
18066 (base32
18067 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
18068 (build-system python-build-system)
18069 (arguments
18070 '(#:tests? #f)) ; The tests are not distributed
18071 (propagated-inputs
18072 (list python-requests python-six))
18073 (home-page "https://github.com/cablehead/python-consul")
18074 (synopsis "Python client for Consul")
18075 (description
18076 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
18077 discovery, monitoring and configuration.")
18078 (license license:expat)))
18079
18080 (define-public python-schematics
18081 (package
18082 (name "python-schematics")
18083 (version "1.1.1")
18084 (source
18085 (origin
18086 (method git-fetch)
18087 (uri (git-reference
18088 (url "https://github.com/schematics/schematics")
18089 (commit (string-append "v" version))))
18090 (file-name (git-file-name name version))
18091 (sha256
18092 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
18093 (build-system python-build-system)
18094 (propagated-inputs
18095 (list python-six))
18096 (arguments
18097 ;; The tests require a bunch of not very nice packages with fixed
18098 ;; version requirements (e.g. python-coveralls).
18099 `(#:tests? #f))
18100 (home-page "https://github.com/schematics/schematics")
18101 (synopsis "Python Data Structures for Humans")
18102 (description "Python Data Structures for Humans.")
18103 (license license:bsd-3)))
18104
18105 (define-public python-odfpy
18106 (package
18107 (name "python-odfpy")
18108 (version "1.4.1")
18109 (source (origin
18110 (method url-fetch)
18111 (uri (pypi-uri "odfpy" version))
18112 (sha256
18113 (base32
18114 "1v1qqk9p12qla85yscq2g413l3qasn6yr4ncyc934465b5p6lxnv"))))
18115 (arguments
18116 `(#:phases
18117 (modify-phases %standard-phases
18118 (replace 'check
18119 (lambda _
18120 (invoke "pytest" "-vv"))))))
18121 (build-system python-build-system)
18122 (native-inputs
18123 (list python-pytest))
18124 (propagated-inputs
18125 (list python-defusedxml))
18126 (home-page "https://github.com/eea/odfpy")
18127 (synopsis "Python API and tools to manipulate OpenDocument files")
18128 (description "Collection of libraries and utility programs written in
18129 Python to manipulate OpenDocument 1.2 files.")
18130 (license
18131 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
18132 ;; number of files with other licenses.
18133 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
18134
18135 (define-public python-natsort
18136 (package
18137 (name "python-natsort")
18138 (version "7.1.1")
18139 (source (origin
18140 (method url-fetch)
18141 (uri (pypi-uri "natsort" version))
18142 (sha256
18143 (base32
18144 "00y49bfsi7rrsd1s42gc2w95a6arl9ipdsx2493hr0v54fj07ih0"))))
18145 (build-system python-build-system)
18146 (arguments
18147 `(#:phases
18148 (modify-phases %standard-phases
18149 (add-after 'unpack 'remove-test-hypothesis-deadlines
18150 (lambda _
18151 (substitute* "tests/test_utils.py"
18152 (("from hypothesis import given")
18153 "from hypothesis import given, settings")
18154 (("( +)@given" all spaces)
18155 (string-append spaces "@settings(deadline=None)\n" all)))))
18156 (replace 'check
18157 (lambda* (#:key tests? #:allow-other-keys)
18158 (when tests?
18159 (invoke "pytest" "-v")))))))
18160 (native-inputs
18161 (list python-hypothesis python-pytest-cov python-pytest-mock
18162 python-pytest))
18163 (propagated-inputs ; TODO: Add python-fastnumbers.
18164 (list python-pyicu))
18165 (home-page "https://github.com/SethMMorton/natsort")
18166 (synopsis "Natural sorting for python and shell")
18167 (description
18168 "Natsort lets you apply natural sorting on lists instead of
18169 lexicographical. If you use the built-in @code{sorted} method in python on a
18170 list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, @code{a10}]},
18171 it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, @code{a4},
18172 @code{a9}]}. Natsort provides a function @code{natsorted} that identifies
18173 numbers and sorts them separately from strings. It can also sort version
18174 numbers, real numbers, mixed types and more, and comes with a shell command
18175 @command{natsort} that exposes this functionality in the command line.")
18176 (license license:expat)))
18177
18178 (define-public glances
18179 (package
18180 (name "glances")
18181 (version "3.1.7")
18182 (source
18183 (origin
18184 (method url-fetch)
18185 (uri (pypi-uri "Glances" version))
18186 (sha256
18187 (base32 "020vb38qrb0m3sdr7xjr43cmcfxpnyg4hmb97wgxsa9zvwsjwa5x"))
18188 (modules '((guix build utils)))
18189 (snippet
18190 '(begin
18191 ;; Glances phones PyPI for weekly update checks by default.
18192 ;; Disable these. The user can re-enable them if desired.
18193 (substitute* "glances/outdated.py"
18194 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
18195 (string-append indentation
18196 "self.args.disable_check_update = True\n"
18197 line)))
18198 #t))))
18199 (build-system python-build-system)
18200 (propagated-inputs
18201 (list python-future python-psutil))
18202 (home-page "https://github.com/nicolargo/glances")
18203 (synopsis "Cross-platform curses-based monitoring tool")
18204 (description
18205 "Glances is a curses-based monitoring tool for a wide variety of platforms.
18206 Glances uses the PsUtil library to get information from your system. It
18207 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
18208 (license license:lgpl3+)))
18209
18210 (define-public python-graphql-core
18211 (package
18212 (name "python-graphql-core")
18213 (version "3.1.2")
18214 (source
18215 (origin
18216 (method url-fetch)
18217 (uri (pypi-uri "graphql-core" version))
18218 (sha256
18219 (base32
18220 "0fjv5w2wvgdr8gb27v241bavliipyir9fdz48rsgc3xapm644mn0"))))
18221 (build-system python-build-system)
18222 (arguments
18223 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
18224 #:phases
18225 (modify-phases %standard-phases
18226 (add-after 'unpack 'patch-hardcoded-version
18227 (lambda _ (substitute*
18228 "setup.py"
18229 (("'gevent==1.1rc1'") "'gevent'"))
18230 #t)))))
18231 (native-inputs
18232 (list python-gevent python-mock python-pytest-mock))
18233 (propagated-inputs
18234 (list python-promise python-six))
18235 (home-page "https://github.com/graphql-python/graphql-core")
18236 (synopsis "GraphQL implementation for Python")
18237 (description
18238 "GraphQL implementation for Python. GraphQL is a data query language and
18239 runtime designed and used to request and deliver data to mobile and web apps.
18240 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
18241 to Python.")
18242 (license license:expat)))
18243
18244 (define-public python-graphql-relay
18245 (package
18246 (name "python-graphql-relay")
18247 (version "3.1.0")
18248 (source
18249 (origin
18250 (method url-fetch)
18251 (uri (pypi-uri "graphql-relay" version))
18252 (sha256
18253 (base32
18254 "1d70vwam9gjhx7fqzsa03x7lc6ivcqki5r9pk8m7rslmb7pagmbh"))))
18255 (build-system python-build-system)
18256 (arguments
18257 '(#:phases
18258 (modify-phases %standard-phases
18259 (replace 'check
18260 (lambda* (#:key tests? #:allow-other-keys)
18261 (when tests?
18262 (invoke "pytest" "tests")))))))
18263 (native-inputs
18264 (list
18265 python-pytest
18266 python-pytest-asyncio))
18267 (propagated-inputs
18268 (list python-graphql-core))
18269 (home-page "https://github.com/graphql-python/graphql-relay-py")
18270 (synopsis "Relay implementation for Python")
18271 (description
18272 "This is a library to allow the easy creation of Relay-compliant servers
18273 using the GraphQL Python reference implementation of a GraphQL server. It
18274 should be noted that the code is a exact port of the original
18275 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
18276 from Facebook.")
18277 (license license:expat)))
18278
18279 (define-public python-graphene
18280 (package
18281 (name "python-graphene")
18282 (version "3.0")
18283 (source
18284 (origin
18285 (method url-fetch)
18286 (uri (pypi-uri "graphene" version))
18287 (sha256
18288 (base32
18289 "08m1n2ydk48c18cvl8474v3pwwacjl1vgq61m9qs00122mp0cj5g"))))
18290 (build-system python-build-system)
18291 (propagated-inputs
18292 (list python-graphql-core python-graphql-relay python-aniso8601
18293 python-promise python-six))
18294 (arguments
18295 `(#:tests? #f)) ; no tests/ in the PyPI tarball
18296 (home-page "https://graphene-python.org/")
18297 (synopsis "GraphQL Framework for Python")
18298 (description
18299 "Graphene is a Python library for building GraphQL schemas/types.
18300 A GraphQL schema describes your data model, and provides a GraphQL server
18301 with an associated set of resolve methods that know how to fetch data.")
18302 (license license:expat)))
18303
18304 (define-public python-random2
18305 (package
18306 (name "python-random2")
18307 (version "1.0.1")
18308 (source (origin
18309 (method url-fetch)
18310 (uri (pypi-uri "random2" version ".zip"))
18311 (sha256
18312 (base32
18313 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))
18314 (patches
18315 (search-patches "python-random2-getrandbits-test.patch"))))
18316 (build-system python-build-system)
18317 (native-inputs (list unzip))
18318 (home-page "http://pypi.python.org/pypi/random2")
18319 (synopsis "Python 3 version of the Python 2 @code{random} module")
18320 (description
18321 "This package provides a Python 3 ported version of Python 2.7’s
18322 @code{random} module. It has also been back-ported to work in Python 2.6.
18323
18324 In Python 3, the implementation of @code{randrange()} was changed, so that
18325 even with the same seed you get different sequences in Python 2 and 3.
18326
18327 This package closes that gap, allowing stable random number generation
18328 between the different Python versions.")
18329 (license license:psfl)))
18330
18331 (define-public python-snowballstemmer
18332 (package
18333 (name "python-snowballstemmer")
18334 (version "2.0.0")
18335 (source (origin
18336 (method url-fetch)
18337 (uri (pypi-uri "snowballstemmer" version))
18338 (sha256
18339 (base32
18340 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
18341 (build-system python-build-system)
18342 (arguments
18343 `(;; No tests exist
18344 #:tests? #f))
18345 (home-page "https://github.com/shibukawa/snowball_py")
18346 (synopsis "Snowball stemming library collection for Python")
18347 (description "This package provides 16 word stemmer algorithms generated
18348 from Snowball algorithms. It includes the 15 original ones plus the Poerter
18349 English stemmer.")
18350 (license license:bsd-3)))
18351
18352 (define-public python-setproctitle
18353 (package
18354 (name "python-setproctitle")
18355 (version "1.3.2")
18356 (source
18357 (origin
18358 (method url-fetch)
18359 (uri (pypi-uri "setproctitle" version))
18360 (sha256
18361 (base32
18362 "1zbp6kyzfbrmbh9j3idai0mnpa28zn5db3k5l07jc3c3gj89gyxr"))))
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 (setenv "PYTHON" (or (which "python3") (which "python")))
18370 (setenv "PYCONFIG" (if (which "python3-config")
18371 "python3-config --embed"
18372 "python-config"))
18373 (substitute* "tests/conftest.py"
18374 (("cc") "gcc"))
18375 (when tests?
18376 (invoke "pytest" "tests/")))))))
18377 (native-inputs
18378 (list procps python-pytest)) ; required for tests
18379 (home-page "https://github.com/dvarrazzo/py-setproctitle")
18380 (synopsis
18381 "Setproctitle implementation for Python to customize the process title")
18382 (description "The library allows a process to change its title (as displayed
18383 by system tools such as @code{ps} and @code{top}).
18384
18385 Changing the title is mostly useful in multi-process systems, for example when a
18386 master process is forked: changing the children's title allows identifying the
18387 task each process is busy with. The technique is used by PostgreSQL and the
18388 OpenSSH Server for example.")
18389 (license license:bsd-3)))
18390
18391 (define-public python-validictory
18392 (package
18393 (name "python-validictory")
18394 (version "1.0.1")
18395 (source
18396 (origin
18397 (method url-fetch)
18398 (uri (pypi-uri "validictory" version))
18399 (sha256
18400 (base32
18401 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
18402 (build-system python-build-system)
18403 (arguments
18404 '(#:phases
18405 (modify-phases %standard-phases
18406 (add-after 'unpack 'bootstrap
18407 ;; Move the tests out of the package directory to avoid
18408 ;; packaging them.
18409 (lambda* _
18410 (rename-file "validictory/tests" "tests")
18411 (delete-file "tests/__init__.py")))
18412 (replace 'check
18413 (lambda _
18414 (invoke "py.test" "-vv" ))))))
18415 (native-inputs
18416 (list python-pytest))
18417 (home-page
18418 "https://github.com/jamesturk/validictory")
18419 (synopsis "General purpose Python data validator")
18420 (description "It allows validation of arbitrary Python data structures.
18421
18422 The schema format is based on the JSON Schema
18423 proposal (http://json-schema.org), so combined with json the library is also
18424 useful as a validator for JSON data.")
18425 (license license:expat)))
18426
18427 (define-public python-pyelftools
18428 (package
18429 (name "python-pyelftools")
18430 (version "0.28")
18431 (home-page "https://github.com/eliben/pyelftools")
18432 (source
18433 (origin
18434 (method git-fetch)
18435 (uri (git-reference (url home-page)
18436 (commit (string-append "v" version))))
18437 (file-name (git-file-name name version))
18438 (sha256
18439 (base32 "1z4fx39c9rds0bd4d2fjjq7n05b1nfxl36pmy523x8knm38l4gpr"))
18440 (snippet
18441 ;; Delete bundled readelf executable.
18442 '(delete-file "test/external_tools/readelf"))))
18443 (build-system python-build-system)
18444 (arguments
18445 '(#:phases (modify-phases %standard-phases
18446 (replace 'check
18447 (lambda* (#:key tests? #:allow-other-keys)
18448 (when tests?
18449 ;; Taken from tox.ini.
18450 (invoke "python" "test/run_all_unittests.py")
18451 (invoke "python" "test/run_examples_test.py")
18452 (invoke "python" "test/run_readelf_tests.py")))))))
18453 (synopsis
18454 "Analyze binary and library file information")
18455 (description "This Python library provides interfaces for parsing and
18456 analyzing two binary and library file formats ; the Executable and Linking
18457 Format (ELF), and debugging information in the Debugging With Attributed
18458 Record Format (DWARF).")
18459 (license license:public-domain)))
18460
18461 (define-public python-pefile
18462 (package
18463 (name "python-pefile")
18464 (version "2022.5.30")
18465 (source (origin
18466 (method git-fetch)
18467 (uri (git-reference
18468 (url "https://github.com/erocarrera/pefile")
18469 (commit (string-append "v" version))))
18470 (file-name (git-file-name name version))
18471 (sha256
18472 (base32
18473 "1qj90a0s2gd5hn2zggypqc1077inid5dcl1fp5973b04kf2b9z8a"))))
18474 (build-system python-build-system)
18475 (propagated-inputs (list python-future))
18476 (home-page "https://github.com/erocarrera/pefile")
18477 (synopsis "Portable Executable (PE) file parser")
18478 (description "This python library provides interfaces for parsing and
18479 working with Portable Executable (PE) files. It makes to most information
18480 from the header, as well as section details and data available.")
18481 (license license:expat)))
18482
18483 (define-public python-pyev
18484 (package
18485 (name "python-pyev")
18486 (version "0.9.0")
18487 (source
18488 (origin
18489 (method url-fetch)
18490 (uri (pypi-uri "pyev" version))
18491 (sha256
18492 (base32
18493 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
18494 (build-system python-build-system)
18495 (arguments
18496 `(#:tests? #f ; no test suite
18497 #:phases
18498 (modify-phases %standard-phases
18499 (add-after 'unpack 'patch
18500 (lambda* (#:key inputs #:allow-other-keys)
18501 (let ((libev (search-input-file inputs "/lib/libev.so.4")))
18502 (substitute* "setup.py"
18503 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
18504 (string-append "libev_dll_name = \"" libev "\"")))))))))
18505 (inputs
18506 (list libev))
18507 (home-page "https://github.com/gabrielfalcao/pyev")
18508 (synopsis "Python libev interface")
18509 (description "Pyev provides a Python interface to libev.")
18510 (license license:gpl3)))
18511
18512 (define-public python-imagesize
18513 (package
18514 (name "python-imagesize")
18515 (version "1.2.0")
18516 (source
18517 (origin
18518 (method url-fetch)
18519 (uri (pypi-uri "imagesize" version))
18520 (sha256
18521 (base32
18522 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
18523 (build-system python-build-system)
18524 (home-page "https://github.com/shibukawa/imagesize_py")
18525 (synopsis "Gets image size of files in various formats in Python")
18526 (description
18527 "This package allows determination of image size from
18528 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
18529 (license license:expat)))
18530
18531 (define-public python-termstyle
18532 (package
18533 (name "python-termstyle")
18534 (version "0.1.11")
18535 (source
18536 (origin
18537 (method url-fetch)
18538 (uri (pypi-uri "termstyle" version))
18539 (sha256
18540 (base32
18541 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
18542 (build-system python-build-system)
18543 (arguments
18544 '(#:phases
18545 (modify-phases %standard-phases
18546 (replace 'check
18547 (lambda _
18548 (invoke "python" "test3.py"))))))
18549 (home-page "https://github.com/gfxmonk/termstyle")
18550 (synopsis "Console text coloring for Python")
18551 (description "This package provides console text coloring for Python.")
18552 (license license:bsd-3)))
18553
18554 (define-public python-argcomplete
18555 (package
18556 (name "python-argcomplete")
18557 (version "1.11.1")
18558 (source
18559 (origin
18560 (method url-fetch)
18561 (uri (pypi-uri "argcomplete" version))
18562 (sha256
18563 (base32
18564 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
18565 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
18566 (build-system python-build-system)
18567 (native-inputs
18568 (list python-coverage
18569 python-flake8
18570 python-pexpect
18571 python-wheel
18572 tcsh
18573 fish
18574 bash)) ;full Bash for 'test_file_completion'
18575 (home-page "https://github.com/kislyuk/argcomplete")
18576 (synopsis "Shell tab completion for Python argparse")
18577 (description "argcomplete provides extensible command line tab completion
18578 of arguments and options for Python scripts using @code{argparse}. It's
18579 particularly useful for programs with many options or sub-parsers that can
18580 dynamically suggest completions ; for example, when browsing resources over the
18581 network.")
18582 (license license:asl2.0)))
18583
18584 (define-public python-csscompressor
18585 (package
18586 (name "python-csscompressor")
18587 (version "0.9.5")
18588 (source
18589 (origin
18590 (method url-fetch)
18591 (uri (pypi-uri "csscompressor" version))
18592 (sha256
18593 (base32
18594 "018ssffvlpnc1salmnpyl52c11glzzwj4k9f757hl4pkpjnjp8mg"))))
18595 (build-system python-build-system)
18596 (arguments
18597 '(#:phases
18598 (modify-phases %standard-phases
18599 (replace 'check
18600 (lambda _
18601 (invoke "py.test"))))))
18602 (native-inputs
18603 (list python-pytest))
18604 (home-page "https://github.com/sprymix/csscompressor")
18605 (synopsis "Python port of YUI CSS Compressor")
18606 (description
18607 "This package provides a python port of YUI CSS Compressor.")
18608 (license license:bsd-3)))
18609
18610 (define-public python-rcssmin
18611 (package
18612 (name "python-rcssmin")
18613 (version "1.0.6")
18614 (source
18615 (origin
18616 (method url-fetch)
18617 (uri (pypi-uri "rcssmin" version))
18618 (sha256
18619 (base32
18620 "0w42l4dhxghcz7pj3q7hkxp015mvb8z2cq9sfxbl31npsfavd1ya"))))
18621 (build-system python-build-system)
18622 (arguments
18623 '(#:phases
18624 (modify-phases %standard-phases
18625 (replace 'check
18626 (lambda _
18627 (invoke "python" "run_tests.py" "tests"))))))
18628 (home-page "http://opensource.perlig.de/rcssmin/")
18629 (synopsis "CSS Minifier")
18630 (description "The minifier is based on the semantics of the YUI compressor,
18631 which itself is based on the rule list by Isaac Schlueter.")
18632 (license license:asl2.0)))
18633
18634 (define-public python-rjsmin
18635 (package
18636 (name "python-rjsmin")
18637 (version "1.1.0")
18638 (source
18639 (origin
18640 (method url-fetch)
18641 (uri (pypi-uri "rjsmin" version))
18642 (sha256
18643 (base32
18644 "0cmc72rlkvzz8fl89bc83czkx0pcvhzj7yn7m29r8pgnf5fcfpdi"))
18645 (modules '((guix build utils)))
18646 (snippet
18647 '(begin
18648 (for-each delete-file (find-files "bench" "\\.js$"))
18649 #t))))
18650 (build-system python-build-system)
18651 (arguments
18652 '(#:tests? #f ; Not all test files included.
18653 #:phases
18654 (modify-phases %standard-phases
18655 (replace 'check
18656 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
18657 (add-installed-pythonpath inputs outputs)
18658 (if tests?
18659 (invoke "py.test" "-vv" "tests")
18660 #t))))))
18661 (native-inputs
18662 (list python-pytest))
18663 (home-page "http://opensource.perlig.de/rjsmin/")
18664 (synopsis "Javascript Minifier")
18665 (description "@code{rJSmin} is a javascript minifier written in Python. The
18666 minifier is based on the semantics of jsmin.c by Douglas Crockford. The module
18667 is a re-implementation aiming for speed, so it can be used at runtime (rather
18668 than during a preprocessing step).")
18669 (license license:asl2.0)))
18670
18671 (define-public python-xopen
18672 (package
18673 (name "python-xopen")
18674 (version "0.8.2")
18675 (source
18676 (origin
18677 (method url-fetch)
18678 (uri (pypi-uri "xopen" version))
18679 (sha256
18680 (base32
18681 "1xrlcnd6fri3w97zzzp6vyk4l21yq1lc8r4wksi06hgpkbh4jdq0"))))
18682 (build-system python-build-system)
18683 (propagated-inputs
18684 (list python-setuptools-scm))
18685 (home-page "https://github.com/marcelm/xopen/")
18686 (synopsis "Open compressed files transparently")
18687 (description "This module provides an @code{xopen} function that works like
18688 Python's built-in @code{open} function, but can also deal with compressed files.
18689 Supported compression formats are gzip, bzip2 and, xz, and are automatically
18690 recognized by their file extensions. The focus is on being as efficient as
18691 possible on all supported Python versions.")
18692 (license license:expat)))
18693
18694 (define-public python-cheetah
18695 (package
18696 (name "python-cheetah")
18697 (version "3.2.4")
18698 (source
18699 (origin
18700 (method url-fetch)
18701 (uri (pypi-uri "Cheetah3" version))
18702 (sha256
18703 (base32
18704 "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
18705 (build-system python-build-system)
18706 (arguments
18707 `(#:phases (modify-phases %standard-phases
18708 (add-after 'unpack 'use-absolute-python
18709 (lambda _
18710 (substitute* "Cheetah/CheetahWrapper.py"
18711 (("#!/usr/bin/env python")
18712 (string-append "#!" (which "python"))))))
18713 (add-after 'unpack 'fix-tests
18714 (lambda _
18715 (substitute* "Cheetah/Tests/ImportHooks.py"
18716 (("os.path.dirname\\(__file__\\)")
18717 (string-append "'" (getcwd) "/Cheetah/Tests'")))))
18718 (replace 'check
18719 (lambda _
18720 (setenv "TMPDIR" "/tmp")
18721 (substitute* "Cheetah/Tests/Test.py"
18722 (("unittest.TextTestRunner\\(\\)")
18723 "unittest.TextTestRunner(verbosity=2)"))
18724
18725 (invoke "python" "Cheetah/Tests/Test.py"))))))
18726 (propagated-inputs
18727 (list python-markdown)) ;optional
18728 (home-page "https://cheetahtemplate.org/")
18729 (synopsis "Template engine")
18730 (description "Cheetah is a text-based template engine and Python code
18731 generator.
18732
18733 Cheetah can be used as a standalone templating utility or referenced as
18734 a library from other Python applications. It has many potential uses,
18735 but web developers looking for a viable alternative to ASP, JSP, PHP and
18736 PSP are expected to be its principle user group.
18737
18738 Features:
18739 @enumerate
18740 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
18741 text-based format.
18742 @item Cleanly separates content, graphic design, and program code.
18743 @item Blends the power and flexibility of Python with a simple template language
18744 that non-programmers can understand.
18745 @item Gives template writers full access to any Python data structure, module,
18746 function, object, or method in their templates.
18747 @item Makes code reuse easy by providing an object-orientated interface to
18748 templates that is accessible from Python code or other Cheetah templates.
18749 One template can subclass another and selectively reimplement sections of it.
18750 @item Provides a simple, yet powerful, caching mechanism that can dramatically
18751 improve the performance of a dynamic website.
18752 @item Compiles templates into optimized, yet readable, Python code.
18753 @end enumerate")
18754 (license (license:x11-style "file://LICENSE"))))
18755
18756 (define-public python-dulwich
18757 (package
18758 (name "python-dulwich")
18759 (version "0.20.30")
18760 (source
18761 (origin
18762 (method url-fetch)
18763 (uri (list (string-append "https://www.dulwich.io/releases/"
18764 "dulwich-" version ".tar.gz")
18765 (pypi-uri "dulwich" version)))
18766 (sha256
18767 (base32
18768 "0hafaff30bmkj30b8pwpwsy3fz5h6c1pn98ihqcvl5zndflr1h22"))))
18769 (build-system python-build-system)
18770 (arguments
18771 '(#:phases
18772 (modify-phases %standard-phases
18773 (add-before 'check 'fix-tests
18774 (lambda* (#:key inputs #:allow-other-keys)
18775 (substitute* '("dulwich/tests/test_repository.py"
18776 "dulwich/tests/test_porcelain.py"
18777 "dulwich/tests/test_hooks.py")
18778 (("/bin/sh") (search-input-file inputs "/bin/sh")))
18779 (setenv "TEST_RUNNER" "unittest")
18780 (setenv "PYTHONHASHSEED" "random"))))))
18781 (propagated-inputs
18782 (list python-fastimport python-urllib3))
18783 (native-inputs
18784 (list python-mock python-geventhttpclient python-gpg
18785 git gnupg))
18786 (home-page "https://www.dulwich.io/")
18787 (synopsis "Git implementation in Python")
18788 (description "Dulwich is an implementation of the Git file formats and
18789 protocols written in pure Python.")
18790 ;; Can be used with either license.
18791 (license (list license:asl2.0 license:gpl2+))))
18792
18793 (define-public python-pbkdf2
18794 (package
18795 (name "python-pbkdf2")
18796 (version "1.3")
18797 (source
18798 (origin
18799 (method url-fetch)
18800 (uri (pypi-uri "pbkdf2" version))
18801 (sha256
18802 (base32
18803 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
18804 (build-system python-build-system)
18805 (arguments
18806 '(#:phases
18807 (modify-phases %standard-phases
18808 (replace 'check
18809 (lambda _
18810 (invoke "python" "test/test_pbkdf2.py"))))))
18811 (propagated-inputs
18812 (list python-pycrypto)) ; optional
18813 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
18814 (synopsis "Password-based key derivation")
18815 (description "This module implements the password-based key derivation
18816 function, PBKDF2, specified in RSA PKCS#5 v2.0.
18817
18818 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
18819 is part of the RSA Public Key Cryptography Standards series. The provided
18820 implementation takes a password or a passphrase and a salt value (and
18821 optionally a iteration count, a digest module, and a MAC module) and provides
18822 a file-like object from which an arbitrarily-sized key can be read.")
18823 (license license:expat)))
18824
18825 (define-public python-qrcode
18826 (package
18827 (name "python-qrcode")
18828 (version "6.1")
18829 (source
18830 (origin
18831 (method url-fetch)
18832 (uri (pypi-uri "qrcode" version))
18833 (sha256
18834 (base32 "0sa3n298b9jpz6zn0birnjii3mg9sihjq28n9nzjlzv09y2m6ljh"))))
18835 (build-system python-build-system)
18836 (arguments
18837 ;; FIXME: Tests require packaging 'pymaging'.
18838 '(#:tests? #f))
18839 (propagated-inputs
18840 (list python-lxml ; for SVG output
18841 python-pillow ; for PNG output
18842 python-six))
18843 (home-page "https://github.com/lincolnloop/python-qrcode")
18844 (synopsis "QR Code image generator")
18845 (description "This package provides a pure Python QR Code generator
18846 module. It uses the Python Imaging Library (PIL) to allow for the generation
18847 of QR Codes.
18848
18849 In addition this package provides a command line tool to generate QR codes and
18850 either write these QR codes to a file or do the output as ascii art at the
18851 console.")
18852 (license license:bsd-3)))
18853
18854 (define-public python-rst2ansi
18855 (package
18856 (name "python-rst2ansi")
18857 (version "0.1.5")
18858 (source
18859 (origin
18860 (method url-fetch)
18861 (uri (pypi-uri "rst2ansi" version))
18862 (sha256
18863 (base32
18864 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
18865 (build-system python-build-system)
18866 (propagated-inputs
18867 (list python-docutils))
18868 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
18869 (synopsis "Convert RST to ANSI-decorated console output")
18870 (description
18871 "Python module dedicated to rendering RST (reStructuredText) documents
18872 to ansi-escaped strings suitable for display in a terminal.")
18873 (license license:expat)))
18874
18875 (define-public python-ansi2html
18876 (package
18877 (name "python-ansi2html")
18878 (version "1.2.0")
18879 (source
18880 (origin
18881 (method url-fetch)
18882 (uri (pypi-uri "ansi2html" version))
18883 (sha256
18884 (base32
18885 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
18886 (build-system python-build-system)
18887 (native-inputs
18888 (list python-mock python-nose))
18889 (propagated-inputs
18890 (list python-six))
18891 (home-page "https://github.com/ralphbean/ansi2html")
18892 (synopsis "Convert ANSI-decorated console output to HTML")
18893 (description
18894 "@command{ansi2html} is a Python library and command line utility for
18895 converting text with ANSI color codes to HTML or LaTeX.")
18896 (license license:gpl3+)))
18897
18898 (define-public python-easy-ansi
18899 (package
18900 (name "python-easy-ansi")
18901 (version "0.3")
18902 (source
18903 (origin
18904 (method git-fetch)
18905 (uri (git-reference
18906 (url "https://gitlab.com/joeysbytes/easy-ansi")
18907 (commit (string-append "v" version))))
18908 (file-name (git-file-name name version))
18909 (sha256
18910 (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3"))))
18911 (build-system python-build-system)
18912 (home-page "https://gitlab.com/joeysbytes/easy-ansi")
18913 (synopsis "Terminal framework API")
18914 (description
18915 "Easy ANSI is a terminal framework API to give you an easy way to use
18916 colors, cursor control movements, and line/box drawing. It is not meant as a
18917 replacement to more full-featured frameworks (such as curses or urwid), but as
18918 a tool to quickly create nice-looking screens in your terminal window. You
18919 can even create animations with the cursor controls.")
18920 (license license:expat)))
18921
18922 (define-public python-ddt
18923 (package
18924 (name "python-ddt")
18925 (version "1.4.2")
18926 (source
18927 (origin
18928 (method url-fetch)
18929 (uri (pypi-uri "ddt" version))
18930 (sha256
18931 (base32
18932 "0y2k756qjz1rhpivi60hy29b4bf0bh3wck39i1mn6pkil9k779k4"))))
18933 (build-system python-build-system)
18934 (native-inputs
18935 (list python-pytest))
18936 (propagated-inputs
18937 (list python-pyyaml))
18938 (home-page "https://github.com/datadriventests/ddt")
18939 (synopsis "Data-Driven Tests")
18940 (description
18941 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
18942 running it with different test data, and make it appear as multiple test
18943 cases.")
18944 (license license:expat)))
18945
18946 (define-public python-pycountry
18947 (package
18948 (name "python-pycountry")
18949 (version "22.3.5")
18950 (source
18951 (origin
18952 (method url-fetch)
18953 (uri (pypi-uri "pycountry" version))
18954 (sha256
18955 (base32
18956 "0ihnkh86zz01vi46gcwgq6h71jrpj7hq71zi13c98n2qdhj3l5mj"))))
18957 (build-system python-build-system)
18958 (home-page "https://bitbucket.org/flyingcircus/pycountry")
18959 (synopsis "ISO databases for languages, countries, currencies, etc.")
18960 (description
18961 "@code{pycountry} provides the ISO databases for the standards:
18962 @enumerate
18963 @item 639-3 (Languages)
18964 @item 3166 (Countries)
18965 @item 3166-3 (Deleted Countries)
18966 @item 3166-2 (Subdivisions of countries)
18967 @item 4217 (Currencies)
18968 @item 15924 (Scripts)
18969 @end enumerate
18970 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
18971 through a Python API.")
18972 (license license:lgpl2.1+)))
18973
18974 (define-public python-pycountry@20.7.3
18975 (package
18976 (inherit python-pycountry)
18977 (name "python-pycountry")
18978 (version "20.7.3")
18979 (source
18980 (origin
18981 (method url-fetch)
18982 (uri (pypi-uri "pycountry" version))
18983 (sha256
18984 (base32 "0hnbabsmqimx5hqh0jbd2f64i8fhzhhbrvid57048hs5sd9ll241"))))))
18985
18986 (define-public python-pycosat
18987 (package
18988 (name "python-pycosat")
18989 (version "0.6.3")
18990 (source
18991 (origin
18992 (method url-fetch)
18993 (uri (pypi-uri "pycosat" version ".zip"))
18994 (sha256
18995 (base32
18996 "1vg0f2fwcybpdqv92z0hwdl603n2safh3fqvjjxkksd78r4qg6ac"))))
18997 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
18998 (build-system python-build-system)
18999 (native-inputs
19000 (list unzip))
19001 (home-page "https://github.com/ContinuumIO/pycosat")
19002 (synopsis "Bindings to picosat (a SAT solver)")
19003 (description
19004 "This package provides efficient Python bindings to @code{picosat} on
19005 the C level. When importing pycosat, the @code{picosat} solver becomes part
19006 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
19007 Problem} (SAT) solver.")
19008 (license license:expat)))
19009
19010 (define-public python-pypeg2
19011 (package
19012 (name "python-pypeg2")
19013 (version "2.15.2")
19014 (source
19015 (origin
19016 (method url-fetch)
19017 (uri (pypi-uri "pyPEG2" version))
19018 (sha256
19019 (base32
19020 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
19021 (build-system python-build-system)
19022 (propagated-inputs (list python-lxml))
19023 (arguments
19024 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
19025 '(#:tests? #f))
19026 (home-page "https://fdik.org/pyPEG/")
19027 (synopsis "Parsing Expression Grammars in Python")
19028 (description "PyPEG is an intrinsic parser interpreter framework for
19029 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
19030 parse many formal languages.")
19031 (license license:gpl2)))
19032
19033 (define-public python-incremental
19034 (package
19035 (name "python-incremental")
19036 (version "17.5.0")
19037 (source
19038 (origin
19039 (method url-fetch)
19040 (uri (pypi-uri "incremental" version))
19041 (sha256
19042 (base32
19043 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
19044 (build-system python-build-system)
19045 (home-page "https://github.com/hawkowl/incremental")
19046 (synopsis "Library for versioning Python projects")
19047 (description "Incremental is a small library that versions your Python
19048 projects.")
19049 (license license:expat)))
19050
19051 (define-public python-invoke
19052 (package
19053 (name "python-invoke")
19054 (home-page "https://www.pyinvoke.org/")
19055 (version "1.6.0")
19056 (source (origin
19057 (method url-fetch)
19058 (uri (pypi-uri "invoke" version))
19059 (sha256
19060 (base32
19061 "1lsql9daabfr31c7syva5myc5bka45k57ygs9fliv63qrwp1wk9p"))))
19062 (build-system python-build-system)
19063 (arguments
19064 ;; XXX: Requires many dependencies that are not yet in Guix.
19065 `(#:tests? #f
19066 #:phases
19067 (modify-phases %standard-phases
19068 (add-after 'unpack 'delete-python2-code
19069 (lambda _
19070 (delete-file-recursively "invoke/vendor/yaml2")))
19071 (add-after 'unpack 'fix-bash-path
19072 (lambda* (#:key inputs #:allow-other-keys)
19073 (let ((bash (assoc-ref inputs "bash")))
19074 (substitute* "invoke/config.py"
19075 (("shell = \"/bin/bash\"")
19076 (string-append "shell = \"" bash "/bin/bash\"")))))))))
19077 (inputs
19078 `(("bash" ,bash-minimal)))
19079 (synopsis "Pythonic task execution")
19080 (description
19081 "Invoke is a Python task execution tool and library, drawing inspiration
19082 from various sources to arrive at a powerful and clean feature set. It is
19083 evolved from the Fabric project, but focuses on local and abstract concerns
19084 instead of servers and network commands.")
19085 (license license:bsd-3)))
19086
19087 (define-public python-automat
19088 (package
19089 (name "python-automat")
19090 (version "20.2.0")
19091 (source (origin
19092 (method url-fetch)
19093 (uri (pypi-uri "Automat" version))
19094 (sha256
19095 (base32
19096 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
19097 (build-system python-build-system)
19098 ;; We disable the tests because they require python-twisted, while
19099 ;; python-twisted depends on python-automat. Twisted is optional, but the
19100 ;; tests fail if it is not available. Also see
19101 ;; <https://github.com/glyph/automat/issues/71>.
19102 (arguments
19103 `(#:tests? #f
19104 #:phases
19105 (modify-phases %standard-phases
19106 ;; Remove script, because it depends on python-twisted.
19107 (add-after 'unpack 'remove-entrypoint
19108 (lambda _
19109 (substitute* "setup.py"
19110 (("\"automat-visualize = automat._visualize:tool\"") "")))))))
19111 (native-inputs
19112 (list python-m2r python-setuptools-scm python-graphviz))
19113 (propagated-inputs
19114 (list python-six python-attrs))
19115 (home-page "https://github.com/glyph/Automat")
19116 (synopsis "Self-service finite-state machines")
19117 (description "Automat is a library for concise, idiomatic Python
19118 expression of finite-state automata (particularly deterministic finite-state
19119 transducers).")
19120 (license license:expat)))
19121
19122 (define-public python-m2r
19123 (package
19124 (name "python-m2r")
19125 (version "0.2.1")
19126 (source (origin
19127 (method url-fetch)
19128 (uri (pypi-uri "m2r" version))
19129 (sha256
19130 (base32
19131 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))
19132 (modules '((guix build utils)))
19133 (snippet
19134 ;; Adjust test regex for Python 3.10 compatibility.
19135 ;; Taken from upstream pull request:
19136 ;; https://github.com/miyakogi/m2r/pull/62
19137 '(substitute* "tests/test_cli.py"
19138 (("self.assertIn\\('optional arguments:', message\\)")
19139 "self.assertRegex(message, r'option(s|al arguments):')")))))
19140 (build-system python-build-system)
19141 (propagated-inputs
19142 (list python-docutils python-mistune))
19143 (native-inputs
19144 (list python-pygments python-mock))
19145 (home-page "https://github.com/miyakogi/m2r")
19146 (synopsis "Markdown to reStructuredText converter")
19147 (description "M2R converts a markdown file including reST markups to valid
19148 reST format.")
19149 (license license:expat)))
19150
19151 (define-public python-constantly
19152 (package
19153 (name "python-constantly")
19154 (version "15.1.0")
19155 (source (origin
19156 (method url-fetch)
19157 (uri (pypi-uri "constantly" version))
19158 (sha256
19159 (base32
19160 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
19161 (build-system python-build-system)
19162 (home-page "https://github.com/twisted/constantly")
19163 (synopsis "Symbolic constants in Python")
19164 (description "Constantly is a Python library that provides symbolic
19165 constant support. It includes collections and constants with text, numeric,
19166 and bit flag values.")
19167 (license license:expat)))
19168
19169 (define-public python-attrs
19170 (package
19171 (name "python-attrs")
19172 (version "21.2.0")
19173 (source (origin
19174 (method url-fetch)
19175 (uri (pypi-uri "attrs" version))
19176 (sha256
19177 (base32
19178 "1yzmwi5d197p0qhl7rl4xi9q1w8mk9i3zn6hrl22knbcrb1slspg"))))
19179 (build-system python-build-system)
19180 (arguments
19181 `(#:phases (modify-phases %standard-phases
19182 ,@(if (target-riscv64?)
19183 ;; TODO: Remove the conditional on staging.
19184 `((add-after 'unpack 'remove-test-hypothesis-deadlines
19185 (lambda _
19186 (substitute* "tests/test_make.py"
19187 (("assume, given") "assume, given, settings")
19188 (("( +)@given" all spaces)
19189 (string-append spaces "@settings(deadline=None)\n" all))))))
19190 '())
19191 (replace 'check
19192 (lambda* (#:key tests? #:allow-other-keys)
19193 (when tests?
19194 (invoke "pytest")))))))
19195 (native-inputs
19196 (list python-coverage python-hypothesis python-pympler python-pytest
19197 python-six))
19198 (home-page "https://github.com/python-attrs/attrs/")
19199 (synopsis "Attributes without boilerplate")
19200 (description "@code{attrs} is a Python package with class decorators that
19201 ease the chores of implementing the most common attribute-related object
19202 protocols.")
19203 (license license:expat)))
19204
19205 (define-public python-attrs-bootstrap
19206 (package
19207 (inherit python-attrs)
19208 (name "python-attrs-bootstrap")
19209 (native-inputs `())
19210 (arguments `(#:tests? #f))))
19211
19212 (define-public python-cliapp
19213 (package
19214 (name "python-cliapp")
19215 (version "1.20180812.1")
19216 (source
19217 (origin
19218 (method url-fetch)
19219 (uri (string-append
19220 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
19221 version ".tar.gz"))
19222 (sha256
19223 (base32
19224 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
19225 (build-system python-build-system)
19226 (arguments
19227 `(;; XXX: The tests only do style and coverage checks, which
19228 ;; fails due to deprecation warnings, etc.
19229 #:tests? #f))
19230 (native-inputs
19231 (list python-coverage-test-runner python-pep8))
19232 (propagated-inputs
19233 (list python-pyaml))
19234 (home-page "https://liw.fi/cliapp/")
19235 (synopsis "Python framework for command line programs")
19236 (description "@code{cliapp} is a Python framework for command line
19237 programs. It contains the typical stuff such programs need to do, such
19238 as parsing the command line for options, and iterating over input files.")
19239 (license license:gpl2+)))
19240
19241 (define-public python-ttystatus
19242 (package
19243 (name "python-ttystatus")
19244 (version "0.38")
19245 (source
19246 (origin
19247 (method git-fetch)
19248 (uri (git-reference
19249 (url "http://git.liw.fi/ttystatus")
19250 ;; There are no tags after ttystatus-0.36.
19251 (commit "e9fc573326c5d1348f5fe56263b4f7a8c32f58c9")))
19252 (sha256
19253 (base32 "0v49q839nrwdm19c83wfmj6n2kw80xslwq9k0n5509r2h7wzjiqj"))
19254 (file-name (git-file-name name version))))
19255 (build-system python-build-system)
19256 (native-inputs
19257 (list python-coverage-test-runner python-pep8))
19258 (arguments
19259 `(#:phases
19260 (modify-phases %standard-phases
19261 ;; check phase needs to be run before the build phase. If not,
19262 ;; coverage-test-runner looks for tests for the built source files,
19263 ;; and fails.
19264 (delete 'check)
19265 (add-before 'build 'check
19266 (lambda _ (invoke "make" "check"))))))
19267 (home-page "https://liw.fi/ttystatus/")
19268 (synopsis "Python library for showing progress reporting and
19269 status updates on terminals")
19270 (description "@code{ttystatus} is a Python library for showing progress
19271 reporting and status updates on terminals, for command line programs.
19272 Output is automatically adapted to the width of the terminal: truncated
19273 if it does not fit, and resized if the terminal size changes.")
19274 (license license:gpl3+)))
19275
19276 (define-public python-astroid
19277 (package
19278 (name "python-astroid")
19279 (version "2.9.0")
19280 (source
19281 (origin
19282 (method git-fetch)
19283 (uri (git-reference
19284 (url "https://github.com/PyCQA/astroid")
19285 (commit (string-append "v" version))))
19286 (file-name (git-file-name name version))
19287 (sha256
19288 (base32 "19iiys4233cicpm48fd7lrkm31kk47qiv44wvk952rqbcn4rd2dh"))))
19289 (build-system python-build-system)
19290 (propagated-inputs
19291 (list python-lazy-object-proxy python-typing-extensions python-wrapt))
19292 (native-inputs
19293 (list python-pytest python-pytest-runner))
19294 (home-page "https://github.com/PyCQA/astroid")
19295 (synopsis "Python source code base representation")
19296 (description "@code{python-astroid} provides a common base representation
19297 of Python source code for projects such as pychecker, pyreverse, pylint, etc.
19298 It provides a compatible representation which comes from the _ast module. It
19299 rebuilds the tree generated by the builtin _ast module by recursively walking
19300 down the AST and building an extended ast. The new node classes have
19301 additional methods and attributes for different usages. They include some
19302 support for static inference and local name scopes. Furthermore, astroid
19303 builds partial trees by inspecting living objects.")
19304 (license license:lgpl2.1+)))
19305
19306 (define-public python-isbnlib
19307 (package
19308 (name "python-isbnlib")
19309 (version "3.10.4")
19310 (source
19311 (origin
19312 (method url-fetch)
19313 (uri (pypi-uri "isbnlib" version))
19314 (sha256
19315 (base32
19316 "0iin0x2xqwyphyyzd0mzrq5v5xm7b6dlbb294k4dywra5qvbrgzm"))))
19317 (build-system python-build-system)
19318 (arguments '(#:tests? #f)) ; No test
19319 (home-page "https://github.com/xlcnd/isbnlib")
19320 (synopsis "Python library to work with ISBN strings")
19321 (description "@code{python-isbnlib} is a (pure) python library that provides
19322 several useful methods and functions to validate, clean, transform, hyphenate and
19323 get metadata for ISBN strings. Its origin was as the core of isbntools. This short
19324 version, is suitable to be include as a dependency in other projects.")
19325 (license license:lgpl3+)))
19326
19327 (define-public python-isort
19328 (package
19329 (name "python-isort")
19330 (version "5.10.1")
19331 (source
19332 (origin
19333 (method git-fetch)
19334 (uri (git-reference
19335 ;; Tests pass only from the Github sources
19336 (url "https://github.com/timothycrosley/isort")
19337 (commit version)))
19338 (file-name (git-file-name name version))
19339 (modules '((guix build utils)))
19340 (snippet '(for-each delete-file (find-files "." "\\.whl$")))
19341 (sha256
19342 (base32
19343 "09spgl2k9xrprr5gbpfc91a8p7mx7a0c64ydgc91b3jhrmnd9jg1"))))
19344 (build-system python-build-system)
19345 (arguments
19346 `(#:phases
19347 (modify-phases %standard-phases
19348 (add-after 'unpack 'loosen-requirements
19349 (lambda _
19350 ;; Permit newer versions of black.
19351 (substitute* "example_isort_formatting_plugin/pyproject.toml"
19352 (("\\^20\\.08b1")
19353 ">= 20.08b1"))))
19354 ;; A foretaste of what our future python-build-system will need to
19355 ;; do.
19356 (replace 'build
19357 (lambda _
19358 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
19359 (replace 'install
19360 (lambda* (#:key outputs #:allow-other-keys)
19361 (let ((out (assoc-ref outputs "out"))
19362 (whl (car (find-files "dist" "\\.whl$"))))
19363 (invoke "pip" "--no-cache-dir" "--no-input"
19364 "install" "--no-deps" "--prefix" out whl))))
19365 (add-after 'install 'install-example-plugins
19366 (lambda* (#:key outputs #:allow-other-keys)
19367 (let ((out (assoc-ref outputs "out")))
19368 ;; Patch to use the core poetry API.
19369 (substitute* '("example_isort_formatting_plugin/pyproject.toml"
19370 "example_isort_sorting_plugin/pyproject.toml"
19371 "example_shared_isort_profile/pyproject.toml")
19372 (("poetry>=0.12")
19373 "poetry-core>=1.0.0")
19374 (("poetry.masonry.api")
19375 "poetry.core.masonry.api"))
19376 ;; Build the example plugins.
19377 (for-each (lambda (source-directory)
19378 (invoke "python" "-m" "build" "--wheel"
19379 "--no-isolation" "--outdir=dist"
19380 source-directory))
19381 '("example_isort_formatting_plugin"
19382 "example_isort_sorting_plugin"
19383 "example_shared_isort_profile"))
19384 ;; Install them to temporary storage, for the test.
19385 (setenv "HOME" (getcwd))
19386 (let ((example-whls (find-files "dist" "^example.*\\.whl$")))
19387 (apply invoke "pip" "--no-cache-dir" "--no-input"
19388 "install" "--user" "--no-deps" example-whls)))))
19389 (replace 'check
19390 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
19391 (when tests?
19392 (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
19393 (setenv "PATH" (string-append (getenv "PATH") ":" bin)))
19394 (add-installed-pythonpath inputs outputs)
19395 (invoke "pytest" "-vv" "tests/unit/"
19396 "-k" "not test_gitignore" ;requires git
19397 "--ignore=tests/unit/test_deprecated_finders.py")))))))
19398 (native-inputs
19399 (list python-black
19400 python-colorama
19401 python-hypothesmith
19402 python-libcst-minimal
19403 python-natsort
19404 python-poetry-core
19405 python-pylama
19406 python-pypa-build
19407 python-pytest-mock
19408 python-pytest))
19409 (home-page "https://github.com/PyCQA/isort")
19410 (synopsis "Python utility/library to sort python imports")
19411 (description "@code{python-isort} is a python utility/library to sort
19412 imports alphabetically, and automatically separated into sections. It
19413 provides a command line utility, a python library and plugins for various
19414 editors.")
19415 (license license:expat)))
19416
19417 (define-public python-configparser
19418 (package
19419 (name "python-configparser")
19420 (version "4.0.2")
19421 (source
19422 (origin
19423 (method url-fetch)
19424 (uri (pypi-uri "configparser" version))
19425 (sha256
19426 (base32
19427 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
19428 (native-inputs
19429 (list python-setuptools-scm))
19430 (build-system python-build-system)
19431 (home-page "https://github.com/jaraco/configparser/")
19432 (synopsis "Backport of configparser from python 3.5")
19433 (description "@code{python-configparser} is a backport of
19434 @code{configparser} from Python 3.5 so that it can be used directly
19435 in other versions.")
19436 (license license:expat)))
19437
19438 (define-public python-iniconfig
19439 (package
19440 (name "python-iniconfig")
19441 (version "1.1.1")
19442 (source
19443 (origin
19444 (method url-fetch)
19445 (uri (pypi-uri "iniconfig" version))
19446 (sha256
19447 (base32
19448 "0ckzngs3scaa1mcfmsi1w40a1l8cxxnncscrxzjjwjyisx8z0fmw"))))
19449 (build-system python-build-system)
19450 (home-page "https://github.com/RonnyPfannschmidt/iniconfig")
19451 (synopsis "Simple INI-file parser")
19452 (description "The @code{iniconfig} package provides a small and simple
19453 INI-file parser module having a unique set of features ; @code{iniconfig}
19454 @itemize
19455 @item maintains the order of sections and entries ;
19456 @item supports multi-line values with or without line-continuations ;
19457 @item supports \"#\" comments everywhere ;
19458 @item raises errors with proper line-numbers ;
19459 @item raises an error when two sections have the same name.
19460 @end itemize")
19461 (license license:expat)))
19462
19463 (define-public python-mamba
19464 (package
19465 (name "python-mamba")
19466 (version "0.11.2")
19467 (source (origin
19468 (method url-fetch)
19469 (uri (pypi-uri "mamba" version))
19470 (sha256
19471 (base32
19472 "15m4dpnpv9m60pdaygvwgi43fwqaivs3qxfxhspwrp47sbgwdkvm"))))
19473 (build-system python-build-system)
19474 (arguments `(#:tests? #f)) ; No test
19475 (propagated-inputs
19476 (list python-clint python-coverage))
19477 (home-page "https://nestorsalceda.com/mamba/")
19478 (synopsis "Test runner for Python")
19479 (description
19480 "Mamba is a Behaviour-Driven Development tool for Python developers.
19481 Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
19482 (license license:expat)))
19483
19484 (define-public python-mando
19485 (package
19486 (name "python-mando")
19487 (version "0.7.1")
19488 (source (origin
19489 (method url-fetch)
19490 (uri (pypi-uri "mando" version))
19491 (sha256
19492 (base32
19493 "001mikga36i811pbc95rb45m2kzivkx4xb0fn3pzl4xnnjcskfhq"))))
19494 (build-system python-build-system)
19495 (arguments
19496 (list #:phases
19497 #~(modify-phases %standard-phases
19498 (replace 'check
19499 (lambda* (#:key tests? #:allow-other-keys)
19500 (when tests?
19501 (invoke "pytest" "-vv")))))))
19502 (propagated-inputs
19503 (list python-rst2ansi python-six))
19504 (native-inputs
19505 (list python-pytest))
19506 (home-page "https://mando.readthedocs.org/")
19507 (synopsis
19508 "Wrapper around argparse, allowing creation of complete CLI applications")
19509 (description
19510 "This package is a wrapper around argparse, allowing you to write complete CLI
19511 applications in seconds while maintaining all the flexibility.")
19512 (license license:expat)))
19513
19514 (define-public python-mwclient
19515 (package
19516 (name "python-mwclient")
19517 (version "0.10.1")
19518 (source
19519 (origin
19520 (method git-fetch)
19521 ;; The PyPI version wouldn't contain tests.
19522 (uri (git-reference
19523 (url "https://github.com/mwclient/mwclient")
19524 (commit (string-append "v" version))))
19525 (file-name (git-file-name name version))
19526 (sha256
19527 (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
19528 (build-system python-build-system)
19529 (propagated-inputs
19530 (list python-requests-oauthlib python-six))
19531 (native-inputs
19532 (list python-mock python-pytest python-pytest-cov
19533 python-pytest-runner python-responses))
19534 (home-page "https://github.com/btongminh/mwclient")
19535 (synopsis "MediaWiki API client")
19536 (description "This package provides a MediaWiki API client.")
19537 (license license:expat)))
19538
19539 (define-public python-kneed
19540 (package
19541 (name "python-kneed")
19542 (version "0.7.0")
19543 (source
19544 (origin
19545 (method url-fetch)
19546 (uri (pypi-uri "kneed" version))
19547 (sha256
19548 (base32 "0vkwi0pr7nfkp3c46hnmx0275yx68v96v10rmspv0wis33x6f39l"))))
19549 (build-system python-build-system)
19550 (propagated-inputs
19551 (list python-matplotlib python-numpy python-scipy))
19552 (home-page "https://github.com/arvkevi/kneed")
19553 (synopsis "Knee-point detection in Python")
19554 (description "This package implements the kneedle algorithm. Given a set
19555 of x and y values, kneed will return the knee point of the function. The knee
19556 point is the point of maximum curvature.")
19557 (license license:bsd-3)))
19558
19559 (define-public python-utils
19560 (package
19561 (name "python-utils")
19562 (version "2.4.0")
19563 (source (origin
19564 (method url-fetch)
19565 (uri (pypi-uri "python-utils" version))
19566 (sha256
19567 (base32
19568 "12c0glzkm81ljgf6pwh0d4rmdm1r7vvgg3ifzp8yp9cfyngw07zj"))))
19569 (build-system python-build-system)
19570 (arguments
19571 `(#:phases
19572 (modify-phases %standard-phases
19573 (replace 'check
19574 (lambda* (#:key inputs outputs #:allow-other-keys)
19575 (add-installed-pythonpath inputs outputs)
19576 (delete-file "pytest.ini")
19577 (invoke "pytest" "-vv"))))))
19578 (native-inputs
19579 `(("pytest-runner" ,python-pytest-runner)
19580 ("pytest" ,python-pytest)
19581 ("six" ,python-six)))
19582 (home-page "https://github.com/WoLpH/python-utils")
19583 (synopsis "Convenient utilities not included with the standard Python install")
19584 (description
19585 "Python Utils is a collection of small Python functions and classes which
19586 make common patterns shorter and easier.")
19587 (license license:bsd-2)))
19588
19589 (define-public python-diff-match-patch
19590 (package
19591 (name "python-diff-match-patch")
19592 (version "20121119")
19593 (source
19594 (origin
19595 (method url-fetch)
19596 (uri (pypi-uri "diff-match-patch" version))
19597 (sha256
19598 (base32
19599 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
19600 (build-system python-build-system)
19601 (home-page "https://code.google.com/p/google-diff-match-patch")
19602 (synopsis "Synchronize plain text")
19603 (description "Diff Match and Patch libraries offer robust algorithms to
19604 perform the operations required for synchronizing plain text.")
19605 (license license:asl2.0)))
19606
19607 (define-public python-dirsync
19608 (package
19609 (name "python-dirsync")
19610 (version "2.2.5")
19611 (source
19612 (origin
19613 (method url-fetch)
19614 (uri (pypi-uri "dirsync" version))
19615 (sha256
19616 (base32
19617 "1gm82jddm1lkazdi8lfsl1b3vi1z0252ng60mzjym8irnv94qfhy"))))
19618 (build-system python-build-system)
19619 (propagated-inputs
19620 (list python-six))
19621 (home-page "https://github.com/tkhyn/dirsync")
19622 (synopsis "Advanced directory tree synchronisation tool")
19623 (description "Advanced directory tree synchronisation tool.")
19624 (license license:expat)))
19625
19626 (define-public python-levenshtein
19627 (package
19628 (name "python-levenshtein")
19629 (version "0.12.2")
19630 (source
19631 (origin
19632 (method url-fetch)
19633 (uri (pypi-uri "python-Levenshtein" version))
19634 (sha256
19635 (base32
19636 "1xj60gymwx1jl2ra9razx2wk8nb9cv1i7l8d14qsp8a8s7xra8yw"))))
19637 (build-system python-build-system)
19638 (home-page "https://github.com/ztane/python-Levenshtein")
19639 (synopsis "Fast computation of Levenshtein distance and string similarity")
19640 (description
19641 "The Levenshtein Python C extension module contains functions for fast computation of
19642 @enumerate
19643 @item Levenshtein (edit) distance, and edit operations
19644 @item string similarity
19645 @item approximate median strings, and generally string averaging
19646 @item string sequence and set similarity
19647 @end enumerate
19648 It supports both normal and Unicode strings.")
19649 (license license:gpl2+)))
19650
19651 (define-public python-scandir
19652 (package
19653 (name "python-scandir")
19654 (version "1.10.0")
19655 (source
19656 (origin
19657 (method url-fetch)
19658 (uri (pypi-uri "scandir" version))
19659 (sha256
19660 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
19661 (build-system python-build-system)
19662 (arguments
19663 `(#:phases (modify-phases %standard-phases
19664 (replace 'check
19665 (lambda _
19666 (invoke "python" "test/run_tests.py"))))))
19667 (home-page "https://github.com/benhoyt/scandir")
19668 (synopsis "Directory iteration function")
19669 (description
19670 "Directory iteration function like os.listdir(), except that instead of
19671 returning a list of bare filenames, it yields DirEntry objects that include
19672 file type and stat information along with the name. Using scandir() increases
19673 the speed of os.walk() by 2-20 times (depending on the platform and file
19674 system) by avoiding unnecessary calls to os.stat() in most cases.
19675
19676 This package is part of the Python standard library since version 3.5.")
19677 (license license:bsd-3)))
19678
19679 (define-public python-factory-boy
19680 (package
19681 (name "python-factory-boy")
19682 (version "3.2.1")
19683 (source
19684 (origin
19685 (method url-fetch)
19686 (uri (pypi-uri "factory_boy" version))
19687 (sha256
19688 (base32 "0pm5lbvnwm0kg5i6z611rg907yw1gy551f2advmpaz041ixjg3d9"))))
19689 (build-system python-build-system)
19690 (arguments
19691 ;; Tests are not included in the tarball.
19692 `(#:tests? #f))
19693 (propagated-inputs (list python-faker))
19694 (home-page "https://github.com/benhoyt/scandir")
19695 (synopsis "Versatile test fixtures replacement")
19696 (description "Factory_boy is a fixtures replacement based on thoughtbot’s
19697 factory_girl. As a fixtures replacement tool, it aims to replace static, hard
19698 to maintain fixtures with easy-to-use factories for complex object. Instead
19699 of building an exhaustive test setup with every possible combination of corner
19700 cases, factory_boy allows you to use objects customized for the current test,
19701 while only declaring the test-specific fields.")
19702 (license license:expat)))
19703
19704 (define-public python-translate-toolkit
19705 (package
19706 (name "python-translate-toolkit")
19707 (version "3.6.2")
19708 (source
19709 (origin
19710 (method url-fetch)
19711 (uri (pypi-uri "translate-toolkit" version ".tar.gz"))
19712 (sha256
19713 (base32 "0m4cpsp7x7h5m5agg4ybscf7y86wla46q2lvxpi2myplb6qlgcli"))))
19714 (build-system python-build-system)
19715 (native-inputs
19716 (list python-pytest python-sphinx))
19717 (propagated-inputs
19718 (list python-babel
19719 python-beautifulsoup4
19720 python-chardet
19721 python-diff-match-patch
19722 python-levenshtein
19723 python-lxml
19724 python-six
19725 python-vobject
19726 python-pyyaml))
19727 (arguments
19728 ;; TODO: tests are not run, because they end with
19729 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
19730 ;; 'parse_funcs'
19731 ;; during test setup.
19732 (list #:tests? #f
19733 #:phases
19734 #~(modify-phases %standard-phases
19735 ;; translate-toolkit has many optional dependencies (see
19736 ;; optional.txt), which the sanity check does not understand.
19737 (delete 'sanity-check))))
19738 (home-page "https://toolkit.translatehouse.org")
19739 (synopsis "Tools and API for translation and localization engineering")
19740 (description
19741 "Tools and API for translation and localization engineering. It contains
19742 several utilities, as well as an API for building localization tools.")
19743 (license license:gpl2+)))
19744
19745
19746 (define-public python-packaging
19747 (package/inherit python-packaging-bootstrap
19748 (name "python-packaging")
19749 (arguments
19750 `(#:phases (modify-phases %standard-phases
19751 (replace 'check
19752 (lambda* (#:key tests? #:allow-other-keys)
19753 (if tests?
19754 (invoke "pytest" "-vv")
19755 (format #t "test suite not run~%")))))))
19756 (native-inputs
19757 `(("python-pretend" ,python-pretend)
19758 ("python-pytest" ,python-pytest)))
19759 (propagated-inputs
19760 `(("python-pyparsing" ,python-pyparsing)
19761 ("python-six" ,python-six)))
19762 (home-page "https://github.com/pypa/packaging")
19763 (synopsis "Core utilities for Python packages")
19764 (description "Packaging is a Python module for dealing with Python packages.
19765 It offers an interface for working with package versions, names, and dependency
19766 information.")
19767 ;; From 'LICENSE': This software is made available under the terms of
19768 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
19769 ;; Contributions to this software is made under the terms of *both* these
19770 ;; licenses.
19771 (license (list license:asl2.0 license:bsd-2))))
19772
19773 ;; TODO(staging): merge with python-packaging-bootstrap.
19774 (define-public python-packaging-next
19775 (package
19776 (inherit python-packaging)
19777 (version "21.3")
19778 (source
19779 (origin
19780 (method url-fetch)
19781 (uri (pypi-uri "packaging" version))
19782 (sha256
19783 (base32
19784 "1sygirdrqgv4f1ckh9nhpcw1yfidrh3qjl86wq8vk6nq4wlw8iyx"))))))
19785
19786 (define-public python-relatorio
19787 (package
19788 (name "python-relatorio")
19789 (version "0.10.0")
19790 (source
19791 (origin
19792 (method url-fetch)
19793 (uri (pypi-uri "relatorio" version))
19794 (sha256
19795 (base32
19796 "09nhrz80dfm60nssbvjgz4czzy4yzfa8gxczcdlzbgcnnvm914vb"))))
19797 (build-system python-build-system)
19798 (propagated-inputs
19799 (list python-lxml python-genshi))
19800 (native-inputs
19801 (list python-magic))
19802 (home-page "https://relatorio.tryton.org/")
19803 (synopsis "Templating library able to output ODT and PDF files")
19804 (description "Relatorio is a templating library which provides a way to
19805 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
19806 for more filetypes can be easily added by creating plugins for them.")
19807 (license license:gpl3+)))
19808
19809 (define-public python-radon
19810 (package
19811 (name "python-radon")
19812 (version "5.1.0")
19813 (source
19814 (origin
19815 (method url-fetch)
19816 (uri (pypi-uri "radon" version))
19817 (sha256
19818 (base32
19819 "1vmf56zsf3paa1jadjcjghiv2kxwiismyayq42ggnqpqwm98f7fb"))))
19820 (build-system python-build-system)
19821 (arguments
19822 `(#:phases (modify-phases %standard-phases
19823 (add-after 'unpack 'relax-requirements
19824 (lambda _
19825 (substitute* "setup.py"
19826 ((".*'future'.*")
19827 "")
19828 (("mando>=0\\.6,<0\\.7")
19829 "mando>=0.6")
19830 (("colorama==0.4.1")
19831 "colorama>=0.4.1"))))
19832 (replace 'check
19833 (lambda _
19834 (invoke "python" "radon/tests/run.py"))))))
19835 (propagated-inputs (list python-colorama python-mando))
19836 (native-inputs (list python-pytest python-pytest-mock))
19837 (home-page "https://radon.readthedocs.org/")
19838 (synopsis "Code Metrics in Python")
19839 (description "Radon is a Python tool which computes various code metrics.
19840 Supported metrics are:
19841 @itemize @bullet
19842 @item raw metrics: SLOC, comment lines, blank lines, &c.
19843 @item Cyclomatic Complexity (i.e., McCabe’s Complexity)
19844 @item Halstead metrics (all of them)
19845 @item the Maintainability Index (a Visual Studio metric)
19846 @end itemize")
19847 (license license:expat)))
19848
19849 (define-public python-sure
19850 (package
19851 (name "python-sure")
19852 (version "1.4.11")
19853 (source
19854 (origin
19855 (method url-fetch)
19856 (uri (pypi-uri "sure" version))
19857 (sha256
19858 (base32
19859 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
19860 (build-system python-build-system)
19861 (propagated-inputs
19862 (list python-mock python-six))
19863 (native-inputs
19864 (list python-nose))
19865 (home-page "https://github.com/gabrielfalcao/sure")
19866 (synopsis "Automated testing library in python for python")
19867 (description
19868 "Sure is a python library that leverages a DSL for writing assertions.
19869 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
19870 (license license:gpl3+)))
19871
19872 (define-public python-misaka
19873 (package
19874 (name "python-misaka")
19875 (version "2.1.1")
19876 (source
19877 (origin
19878 (method url-fetch)
19879 (uri (pypi-uri "misaka" version))
19880 (sha256
19881 (base32
19882 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
19883 (build-system python-build-system)
19884 (arguments
19885 `(;; Line 37 of setup.py calls self.run_command('develop')
19886 ;; in the 'check' phase. This command seems to be trying
19887 ;; to write to
19888 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
19889 ;; for which it does not have the permission to write.
19890 #:tests? #f))
19891 (propagated-inputs
19892 (list python-cffi))
19893 (home-page "https://github.com/FSX/misaka")
19894 (synopsis "Python binding for Hoedown")
19895 (description
19896 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
19897 library written in C. It features a fast HTML renderer and functionality to make custom
19898 renderers (e.g. man pages or LaTeX).")
19899 (license license:expat)))
19900
19901 (define-public python-jsonpointer
19902 (package
19903 (name "python-jsonpointer")
19904 (version "1.10")
19905 (source
19906 (origin
19907 (method url-fetch)
19908 (uri (pypi-uri "jsonpointer" version))
19909 (sha256
19910 (base32
19911 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
19912 (build-system python-build-system)
19913 (home-page "https://github.com/stefankoegl/python-json-pointer")
19914 (synopsis "Identify specific nodes in a JSON document")
19915 (description "@code{jsonpointer} allows you to access specific nodes
19916 by path in a JSON document (see RFC 6901).")
19917 (license license:bsd-3)))
19918
19919 (define-public python-jsonpatch
19920 (package
19921 (name "python-jsonpatch")
19922 (version "1.16")
19923 (source
19924 (origin
19925 (method git-fetch)
19926 ;; pypi version lacks tests.js
19927 (uri (git-reference
19928 (url "https://github.com/stefankoegl/python-json-patch")
19929 (commit (string-append "v" version))))
19930 (file-name (git-file-name name version))
19931 (sha256
19932 (base32
19933 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
19934 (build-system python-build-system)
19935 (propagated-inputs
19936 (list python-jsonpointer))
19937 (home-page "https://github.com/stefankoegl/python-json-patch")
19938 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
19939 (description "@code{jsonpatch} is a library and program that allows
19940 applying JSON Patches according to RFC 6902.")
19941 (license license:bsd-3)))
19942
19943 (define-public python-jsonpatch-0.4
19944 (package (inherit python-jsonpatch)
19945 (name "python-jsonpatch")
19946 (version "0.4")
19947 (source
19948 (origin
19949 (method git-fetch)
19950 (uri (git-reference
19951 (url "https://github.com/stefankoegl/python-json-patch")
19952 (commit (string-append "v" version))))
19953 (file-name (git-file-name name version))
19954 (sha256
19955 (base32
19956 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
19957
19958 (define-public python-rfc3986
19959 (package
19960 (name "python-rfc3986")
19961 (version "1.4.0")
19962 (source (origin
19963 (method url-fetch)
19964 (uri (pypi-uri "rfc3986" version))
19965 (sha256
19966 (base32
19967 "17dvx15m3r49bmif5zlli8kzjd6bys6psixzbp14sd5367d9h8qi"))))
19968 (build-system python-build-system)
19969 (arguments
19970 `(#:phases
19971 (modify-phases %standard-phases
19972 (replace 'check
19973 (lambda _
19974 (invoke "pytest" "-v"))))))
19975 (native-inputs
19976 (list python-pytest))
19977 (home-page "https://rfc3986.readthedocs.io/")
19978 (synopsis "Parse and validate URI references")
19979 (description
19980 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
19981 validation and authority parsing. This module also supports RFC@tie{}6874
19982 which adds support for zone identifiers to IPv6 addresses.")
19983 (license license:asl2.0)))
19984
19985 (define-public python-rfc3987
19986 (package
19987 (name "python-rfc3987")
19988 (version "1.3.7")
19989 (source
19990 (origin
19991 (method url-fetch)
19992 (uri (pypi-uri "rfc3987" version))
19993 (sha256
19994 (base32
19995 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
19996 (build-system python-build-system)
19997 (home-page "https://pypi.org/project/rfc3987/")
19998 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
19999 (description "@code{rfc3987} provides routines for parsing and
20000 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
20001 (license license:gpl3+)))
20002
20003 ;; The latest commit contains fixes for building with both python3 and python2.
20004 (define-public python-rfc6555
20005 (let ((commit "1a181b432312731f6742a5eb558dae4761d32361")
20006 (revision "1"))
20007 (package
20008 (name "python-rfc6555")
20009 (version (git-version "0.0.0" revision commit))
20010 (source (origin
20011 (method git-fetch)
20012 (uri (git-reference
20013 (url "https://github.com/sethmlarson/rfc6555")
20014 (commit commit)))
20015 (file-name (git-file-name name version))
20016 (sha256
20017 (base32
20018 "1bxl17j9vs69cshcqnlwamr03hnykxqnwz3mdgi6x3s2k4q18npp"))))
20019 (build-system python-build-system)
20020 (arguments
20021 '(#:phases
20022 (modify-phases %standard-phases
20023 (replace 'check
20024 (lambda* (#:key tests? #:allow-other-keys)
20025 (if tests?
20026 ;; Other tests require network access.
20027 (invoke "pytest" "tests/test_ipv6.py")
20028 #t))))))
20029 (native-inputs
20030 (list python-pytest))
20031 (home-page "https://pypi.org/project/rfc6555/")
20032 (synopsis "Python implementation of RFC 6555")
20033 (description
20034 "Python implementation of the Happy Eyeballs Algorithm described in RFC
20035 6555. Provided with a single file and dead-simple API to allow easy vendoring
20036 and integration into other projects.")
20037 (license license:asl2.0))))
20038
20039 (define-public python-bagit
20040 (package
20041 (name "python-bagit")
20042 (version "1.7.0")
20043 (source
20044 (origin
20045 (method url-fetch)
20046 (uri (pypi-uri "bagit" version))
20047 (sha256
20048 (base32
20049 "1m6y04qmig0b5hzb35lnaw3d2yfydb7alyr1579yblvgs3da6j7j"))))
20050 (build-system python-build-system)
20051 (native-inputs
20052 (list python-setuptools-scm python-coverage python-mock))
20053 (home-page "https://libraryofcongress.github.io/bagit-python/")
20054 (synopsis "Create and validate BagIt packages")
20055 (description "Bagit is a Python library and command line utility for working
20056 with BagIt style packages. BagIt is a minimalist packaging format for digital
20057 preservation.")
20058 (license license:cc0)))
20059
20060 (define-public python-prov
20061 (package
20062 (name "python-prov")
20063 (version "2.0.0")
20064 (source
20065 (origin
20066 (method url-fetch)
20067 (uri (pypi-uri "prov" version))
20068 (sha256
20069 (base32
20070 "1vi2fj31vygfcqrkimdmk52q2ldw08g9fn4v4zlgdfgcjlhqyhxn"))))
20071 (build-system python-build-system)
20072 (propagated-inputs
20073 (list python-dateutil python-lxml python-networkx python-rdflib-5))
20074 (native-inputs
20075 (list graphviz python-pydot))
20076 (home-page "https://github.com/trungdong/prov")
20077 (synopsis
20078 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
20079 (description
20080 "This package provides a library for W3C Provenance Data Model supporting
20081 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
20082 (license license:expat)))
20083
20084 (define-public python-arcp
20085 (package
20086 (name "python-arcp")
20087 (version "0.2.1")
20088 (source
20089 (origin
20090 (method url-fetch)
20091 (uri (pypi-uri "arcp" version))
20092 (sha256
20093 (base32
20094 "1p8mfyjssa6pbn5dp6pyzv9yy6kwm2rz5jn2kjbq5vy9f9wsq5sw"))))
20095 (build-system python-build-system)
20096 (native-inputs
20097 (list python-pytest))
20098 (home-page "http://arcp.readthedocs.io/")
20099 (synopsis
20100 "Archive and Package URI parser and generator")
20101 (description
20102 "@acronym{arcp, Archive and Package} provides functions for creating
20103 @code{arcp_} URIs, which can be used for identifying or parsing hypermedia files
20104 packaged in an archive or package, like a ZIP file. arcp URIs can be used to
20105 consume or reference hypermedia resources bundled inside a file archive or an
20106 application package, as well as to resolve URIs for archive resources within a
20107 programmatic framework. This URI scheme provides mechanisms to generate a
20108 unique base URI to represent the root of the archive, so that relative URI
20109 references in a bundled resource can be resolved within the archive without
20110 having to extract the archive content on the local file system. An arcp URI can
20111 be used for purposes of isolation (e.g. when consuming multiple archives),
20112 security constraints (avoiding \"climb out\" from the archive), or for
20113 externally identiyfing sub-resources referenced by hypermedia formats.")
20114 (license license:asl2.0)))
20115
20116 (define-public python-shellescape
20117 (package
20118 (name "python-shellescape")
20119 (version "3.8.1")
20120 (source
20121 (origin
20122 (method git-fetch)
20123 (uri (git-reference
20124 (url "https://github.com/chrissimpkins/shellescape")
20125 (commit (string-append "v" version))))
20126 (file-name (git-file-name name version))
20127 (sha256
20128 (base32
20129 "0wzccxk139qx1lb2g70f5b2yh9zq15nr2mgvqdbfabg5zm0vf1qw"))))
20130 (build-system python-build-system)
20131 (arguments
20132 '(#:phases
20133 (modify-phases %standard-phases
20134 (replace 'check
20135 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
20136 (when tests?
20137 (add-installed-pythonpath inputs outputs)
20138 (invoke "python" "tests/test_shellescape.py"))
20139 #t)))))
20140 (native-inputs
20141 (list python-pytest))
20142 (home-page "https://github.com/chrissimpkins/shellescape")
20143 (synopsis
20144 "Shell escape a string to safely use it as a token in a shell command")
20145 (description
20146 "The shellescape Python module defines the @code{shellescape.quote()}
20147 function that returns a shell-escaped version of a Python string. This is a
20148 backport of the @code{shlex.quote()} function from Python 3.8 that makes it
20149 accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
20150 (license license:expat)))
20151
20152 (define-public python-validators
20153 (package
20154 (name "python-validators")
20155 (version "0.18.2")
20156 (source (origin
20157 (method url-fetch)
20158 (uri (pypi-uri "validators" version))
20159 (sha256
20160 (base32
20161 "19lypf7hm7p203ay3v8zmckc5rv6889zkfdm16nki1972f99mk9p"))))
20162 (build-system python-build-system)
20163 (arguments
20164 '(#:phases (modify-phases %standard-phases
20165 (replace 'check
20166 (lambda _
20167 (invoke "pytest" "-vv"))))))
20168 (propagated-inputs
20169 (list python-decorator python-six))
20170 (native-inputs
20171 (list python-flake8 python-isort python-pytest))
20172 (home-page "https://github.com/kvesteri/validators")
20173 (synopsis "Data validation library")
20174 (description
20175 "This package contains validators for different things such as email
20176 addresses, IP addresses, URLs, hashes and more. It has been designed to
20177 be easy to use and not require defining a schema or form just to validate
20178 some input.")
20179 (license license:expat)))
20180
20181 (define-public python-validate-email
20182 (package
20183 (name "python-validate-email")
20184 (version "1.3")
20185 (source
20186 (origin
20187 (method url-fetch)
20188 (uri (pypi-uri "validate_email" version))
20189 (sha256
20190 (base32
20191 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
20192 (build-system python-build-system)
20193 (home-page "https://github.com/syrusakbary/validate_email")
20194 (synopsis "Verifies if an email address is valid and really exists")
20195 (description "@code{validate_email} can be used to verify if an email
20196 address is valid and really exists.")
20197 (license license:lgpl3+)))
20198
20199 (define-public python-flex
20200 (package
20201 (name "python-flex")
20202 (version "6.10.0")
20203 (source
20204 (origin
20205 (method url-fetch)
20206 (uri (pypi-uri "flex" version))
20207 (sha256
20208 (base32
20209 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
20210 (build-system python-build-system)
20211 (propagated-inputs
20212 (list python-click
20213 python-iso8601
20214 python-jsonpointer
20215 python-pyyaml
20216 python-requests
20217 python-rfc3987
20218 python-six
20219 python-validate-email))
20220 (home-page "https://github.com/pipermerriam/flex")
20221 (synopsis "Validates Swagger schemata")
20222 (description "@code{flex} can be used to validate Swagger schemata.")
20223 (license license:bsd-3)))
20224
20225 (define-public python-marshmallow
20226 (package
20227 (name "python-marshmallow")
20228 (version "3.9.1")
20229 (source
20230 (origin
20231 (method url-fetch)
20232 (uri (pypi-uri "marshmallow" version))
20233 (sha256
20234 (base32
20235 "0kizhh3mnhpa08wfnsv1gagy22bpxzxszgbiylkhpz1d8qvwrykk"))))
20236 (build-system python-build-system)
20237 (propagated-inputs
20238 (list python-dateutil python-simplejson))
20239 (native-inputs
20240 (list python-pytest python-pytz))
20241 (home-page "https://github.com/marshmallow-code/marshmallow")
20242 (synopsis "Convert complex datatypes to and from native
20243 Python datatypes")
20244 (description "@code{marshmallow} provides a library for converting
20245 complex datatypes to and from native Python datatypes.")
20246 (license license:expat)))
20247
20248 (define-public python-marshmallow-jsonapi
20249 (package
20250 (name "python-marshmallow-jsonapi")
20251 (version "0.24.0")
20252 (source
20253 (origin
20254 (method url-fetch)
20255 (uri (pypi-uri "marshmallow-jsonapi" version))
20256 (sha256
20257 (base32 "1d9pxcgmln4gls99vwj1h24qv0lz7fb2jqmqrsiv1pid1snc125x"))))
20258 (build-system python-build-system)
20259 (propagated-inputs
20260 (list python-marshmallow))
20261 (native-inputs
20262 (list python-faker
20263 python-flake8
20264 python-flake8-bugbear
20265 python-flask
20266 python-mock
20267 python-pre-commit
20268 python-pytest
20269 python-tox))
20270 (home-page "https://github.com/marshmallow-code/marshmallow-jsonapi")
20271 (synopsis "JSON:API 1.0 formatting with Marshmallow")
20272 (description
20273 "The marshmallow-jsonapi package provides a simple way to produce
20274 @uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web framework.
20275 It includes optional utilities to integrate with Flask.")
20276 (license license:expat)))
20277
20278 (define-public python-apispec
20279 (package
20280 (name "python-apispec")
20281 (version "4.0.0")
20282 (source
20283 (origin
20284 (method url-fetch)
20285 (uri (pypi-uri "apispec" version))
20286 (sha256
20287 (base32
20288 "12n4w5zkn4drcn8izq68vmixmqvz6abviqkdn4ip0kaax3jjh3in"))))
20289 (build-system python-build-system)
20290 (arguments
20291 '(#:phases (modify-phases %standard-phases
20292 (replace 'check
20293 (lambda _
20294 (invoke "pytest" "-vv"
20295 ;; Disable validation tests since they require
20296 ;; the optional 'prance' library which is not
20297 ;; yet in Guix.
20298 "-k" "not openapi_tools_validate"))))))
20299 (propagated-inputs
20300 (list python-pyyaml))
20301 (native-inputs
20302 (list python-pytest python-marshmallow))
20303 (home-page "https://github.com/marshmallow-code/apispec")
20304 (synopsis "Swagger/OpenAPI specification generator")
20305 (description "@code{python-apispec} is a pluggable API specification
20306 generator. It currently supports the OpenAPI specification, formerly known
20307 as Swagger.")
20308 (license license:expat)))
20309
20310 (define-public python-flasgger
20311 (package
20312 (name "python-flasgger")
20313 (version "0.6.3")
20314 (source
20315 (origin
20316 (method git-fetch)
20317 (uri (git-reference
20318 (url "https://github.com/rochacbruno/flasgger")
20319 (commit version)))
20320 (file-name (git-file-name name version))
20321 (sha256
20322 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
20323 (build-system python-build-system)
20324 (arguments
20325 `(#:phases
20326 (modify-phases %standard-phases
20327 (replace 'check
20328 (lambda* (#:key inputs outputs #:allow-other-keys)
20329 (substitute* "Makefile"
20330 (("flake8 flasgger --ignore=F403")
20331 "flake8 flasgger --ignore=E731,F403"))
20332 (invoke "py.test"))))))
20333 (propagated-inputs
20334 (list python-flask python-pyyaml python-jsonschema python-mistune
20335 python-six))
20336 (native-inputs
20337 (list python-decorator
20338 python-flake8
20339 python-flask-restful
20340 python-flex
20341 python-pytest
20342 python-pytest-cov
20343 python-marshmallow
20344 python-apispec))
20345 (home-page "https://github.com/rochacbruno/flasgger/")
20346 (synopsis "Extract Swagger specs from your Flask project")
20347 (description "@code{python-flasgger} allows extracting Swagger specs
20348 from your Flask project. It is a fork of Flask-Swagger.")
20349 (license license:expat)))
20350
20351 (define-public python-swagger-spec-validator
20352 (package
20353 (name "python-swagger-spec-validator")
20354 (version "2.4.3")
20355 (source
20356 (origin
20357 (method url-fetch)
20358 (uri (pypi-uri "swagger-spec-validator" version))
20359 (sha256
20360 (base32
20361 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
20362 (build-system python-build-system)
20363 (propagated-inputs
20364 (list python-jsonschema python-pyyaml python-six))
20365 (home-page
20366 "https://github.com/Yelp/swagger_spec_validator")
20367 (synopsis "Validation of Swagger specifications")
20368 (description "@code{swagger_spec_validator} provides a library for
20369 validating Swagger API specifications.")
20370 (license license:asl2.0)))
20371
20372 (define-public python-apache-libcloud
20373 (package
20374 (name "python-apache-libcloud")
20375 (version "3.1.0")
20376 (source
20377 (origin
20378 (method url-fetch)
20379 (uri (pypi-uri "apache-libcloud" version))
20380 (sha256
20381 (base32
20382 "1b28j265kvibgxrgxx0gwfm6cmv252c8ph1j2vb0cpms8ph5if5v"))))
20383 (build-system python-build-system)
20384 (arguments
20385 '(#:phases
20386 (modify-phases %standard-phases
20387 (add-after 'unpack 'patch-ssh
20388 (lambda* (#:key inputs #:allow-other-keys)
20389 (substitute* "libcloud/compute/ssh.py"
20390 (("'ssh'")
20391 (string-append "'" (search-input-file inputs "/bin/ssh")
20392 "'")))))
20393 (add-after 'unpack 'patch-tests
20394 (lambda _
20395 (substitute* "libcloud/test/compute/test_ssh_client.py"
20396 (("^class ShellOutSSHClientTests")
20397 "@unittest.skip(\"Guix container doesn't have ssh service\")
20398 class ShellOutSSHClientTests"))))
20399 (add-before 'check 'copy-secret
20400 (lambda _
20401 (copy-file "libcloud/test/secrets.py-dist"
20402 "libcloud/test/secrets.py"))))))
20403 (inputs
20404 (list openssh))
20405 (propagated-inputs
20406 (list python-paramiko python-requests))
20407 (native-inputs
20408 (list python-lockfile python-mock python-pytest python-pytest-runner
20409 python-requests-mock))
20410 (home-page "https://libcloud.apache.org/")
20411 (synopsis "Unified Cloud API")
20412 (description "@code{libcloud} is a Python library for interacting with
20413 many of the popular cloud service providers using a unified API.")
20414 (license license:asl2.0)))
20415
20416 (define-public python-smmap
20417 (package
20418 (name "python-smmap")
20419 (version "3.0.1")
20420 (source
20421 (origin
20422 (method url-fetch)
20423 (uri (pypi-uri "smmap" version))
20424 (sha256
20425 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
20426 (build-system python-build-system)
20427 (native-inputs
20428 (list python-nosexcover))
20429 (home-page "https://github.com/Byron/smmap")
20430 (synopsis "Python sliding window memory map manager")
20431 (description "@code{smmap} is a pure Python implementation of a sliding
20432 window memory map manager.")
20433 (license license:bsd-3)))
20434
20435 (define-public python-regex
20436 (package
20437 (name "python-regex")
20438 (version "2022.1.18")
20439 (source (origin
20440 (method url-fetch)
20441 (uri (pypi-uri "regex" version))
20442 (sha256
20443 (base32
20444 "05ir92d0cmv8wkafn3r05j5q47l6shg7cpdblp2a8m407b02vwwp"))))
20445 (build-system python-build-system)
20446 (arguments
20447 '(#:phases
20448 (modify-phases %standard-phases
20449 (replace 'check
20450 (lambda* (#:key inputs outputs #:allow-other-keys)
20451 (add-installed-pythonpath inputs outputs)
20452 (invoke "python" "-c"
20453 "from regex.test_regex import test_main ; test_main()"))))))
20454 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
20455 (synopsis "Alternative regular expression module")
20456 (description "This regular expression implementation is backwards-
20457 compatible with the standard @code{re} module, but offers additional
20458 functionality like full case-folding for case-insensitive matches in Unicode.")
20459 (license license:psfl)))
20460
20461 (define-public python-pyopengl
20462 (package
20463 (name "python-pyopengl")
20464 (version "3.1.5")
20465 (source
20466 (origin
20467 (method url-fetch)
20468 (uri (pypi-uri "PyOpenGL" version))
20469 (sha256
20470 (base32
20471 "091lp9bpqi8yf1nmyg19xmvw611lrzq2q94cl1k5gnlh0c6vl1s1"))))
20472 (build-system python-build-system)
20473 (inputs
20474 (list mesa freeglut glu))
20475 (arguments
20476 `(#:tests? #f ; Tests fail: AttributeError: 'GLXPlatform' object has no
20477 ;attribute 'OSMesa'
20478 #:phases
20479 (modify-phases %standard-phases
20480 (add-before 'build 'fix-paths
20481 (lambda* (#:key inputs outputs #:allow-other-keys)
20482 (substitute* '("OpenGL/platform/ctypesloader.py")
20483 (("filenames_to_try = \\[\\]") "filenames_to_try = [name]"))
20484 (substitute* '("OpenGL/platform/glx.py" "tests/check_glut_load.py")
20485 (("'GL'")
20486 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGL.so'"))
20487 (("'GLU'")
20488 (string-append "'" (assoc-ref inputs "glu") "/lib/libGLU.so'"))
20489 (("'glut',")
20490 (string-append "'" (assoc-ref inputs "freeglut") "/lib/libglut.so',"))
20491 (("'GLESv1_CM'")
20492 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv1_CM.so'"))
20493 (("'GLESv2'")
20494 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv2.so'")))
20495 ;; Not providing libgle. It seems to be very old.
20496 #t)))))
20497 (home-page "http://pyopengl.sourceforge.net")
20498 (synopsis "Standard OpenGL bindings for Python")
20499 (description
20500 "PyOpenGL is the most common cross platform Python binding to OpenGL and
20501 related APIs. The binding is created using the standard @code{ctypes}
20502 library.")
20503 (license license:bsd-3)))
20504
20505 (define-public python-pyopengl-accelerate
20506 (package
20507 (inherit python-pyopengl)
20508 (name "python-pyopengl-accelerate")
20509 (version "3.1.5")
20510 (source
20511 (origin
20512 (method url-fetch)
20513 (uri (pypi-uri "PyOpenGL-accelerate" version))
20514 (sha256
20515 (base32
20516 "01iggy5jwxv7lxnj51zbmlbhag9wcb7dvrbwgi97i90n0a5m3r8j"))))
20517 (inputs
20518 (list mesa python-numpy)) ; for cython module
20519 ; numpy_formathandler, thus not propagated
20520 (arguments
20521 `(#:tests? #f
20522 #:phases
20523 (modify-phases %standard-phases
20524 (delete 'fix-paths))))
20525 (synopsis "Acceleration code for PyOpenGL")
20526 (description
20527 "This is the Cython-coded accelerator module for PyOpenGL.")))
20528
20529 (define-public python-rencode
20530 (package
20531 (name "python-rencode")
20532 (version "1.0.5")
20533 (source
20534 (origin
20535 (method url-fetch)
20536 (uri (pypi-uri "rencode" version))
20537 (sha256
20538 (base32
20539 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
20540 (build-system python-build-system)
20541 (arguments
20542 `(#:phases
20543 (modify-phases %standard-phases
20544 (add-before 'check 'delete-bogus-test
20545 ;; This test requires /home/aresch/Downloads, which is not provided by
20546 ;; the build environment.
20547 (lambda _
20548 (delete-file "rencode/t.py")
20549 #t)))))
20550 (native-inputs (list pkg-config python-cython))
20551 (home-page "https://github.com/aresch/rencode")
20552 (synopsis "Serialization of heterogeneous data structures")
20553 (description
20554 "The @code{rencode} module is a data structure serialization library,
20555 similar to @code{bencode} from the BitTorrent project. For complex,
20556 heterogeneous data structures with many small elements, r-encoding stake up
20557 significantly less space than b-encodings. This version of rencode is a
20558 complete rewrite in Cython to attempt to increase the performance over the
20559 pure Python module.")
20560 (license license:bsd-3)))
20561
20562 (define-public python-pysocks
20563 (package
20564 (name "python-pysocks")
20565 (version "1.7.1")
20566 (source
20567 (origin
20568 (method url-fetch)
20569 (uri (pypi-uri "PySocks" version))
20570 (sha256
20571 (base32
20572 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
20573 (build-system python-build-system)
20574 (arguments `(#:tests? #f))
20575 (home-page "https://github.com/Anorov/PySocks")
20576 (synopsis "SOCKS client module")
20577 (description "@code{pysocks} is an updated and semi-actively maintained
20578 version of @code{SocksiPy} with bug fixes and extra features.")
20579 (license license:bsd-3)))
20580
20581 (define-public python-pydiff
20582 (package
20583 (name "python-pydiff")
20584 (version "0.2")
20585 (source
20586 (origin
20587 (method url-fetch)
20588 (uri (pypi-uri "pydiff" version))
20589 (sha256
20590 (base32
20591 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
20592 (build-system python-build-system)
20593 (home-page "https://github.com/myint/pydiff")
20594 (synopsis "Library to diff two Python files at the bytecode level")
20595 (description
20596 "@code{pydiff} makes it easy to look for actual code changes while
20597 ignoring formatting changes.")
20598 (license license:expat)))
20599
20600 (define-public python-pydub
20601 (package
20602 (name "python-pydub")
20603 (version "0.25.1")
20604 (source
20605 (origin
20606 (method url-fetch)
20607 (uri (pypi-uri "pydub" version))
20608 (sha256
20609 (base32
20610 "03ykn2kp6qglsrzqi5h79z5cp3kl9mknasv0d6jv5jj9k77362lq"))))
20611 (build-system python-build-system)
20612 (arguments
20613 `(#:phases
20614 (modify-phases %standard-phases
20615 (add-after 'unpack 'fix-ffmpeg-path
20616 (lambda* (#:key inputs #:allow-other-keys)
20617 (let ((ffmpeg (assoc-ref inputs "ffmpeg")))
20618 (substitute* '("pydub/utils.py")
20619 (("return \"ffmpeg\"")
20620 (string-append "return \"" ffmpeg "/bin/ffmpeg\""))
20621 (("return \"ffplay\"")
20622 (string-append "return \"" ffmpeg "/bin/ffplay\""))
20623 (("return \"ffprobe\"")
20624 (string-append "return \"" ffmpeg "/bin/ffprobe\""))
20625 (("warn\\(\"Couldn't find ff") "# warn\\(\"Couldn't find ff"))
20626 #t))))))
20627 (home-page "https://pydub.com")
20628 (inputs
20629 (list ffmpeg))
20630 (propagated-inputs
20631 (list python-scipy))
20632 (synopsis "Manipulate audio with a high level interface in Python")
20633 (description
20634 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
20635 @code{ffmpeg} to open various audio formats.")
20636 (license license:expat))) ; MIT license
20637
20638 (define-public python-tqdm
20639 (package
20640 (name "python-tqdm")
20641 (version "4.62.3")
20642 (source
20643 (origin
20644 (method url-fetch)
20645 (uri (pypi-uri "tqdm" version))
20646 (sha256
20647 (base32
20648 "03cjj8jl8iybvfjbpvdql5qfslzfv043g7w6nx8rhv2h2xrdwnfk"))))
20649 (build-system python-build-system)
20650 (arguments
20651 '(#:phases (modify-phases %standard-phases
20652 (replace 'check
20653 (lambda _
20654 (invoke "pytest" "-vv"
20655 "-o" "asyncio_mode=auto"
20656 "-k" "not perf"))))))
20657 (native-inputs
20658 (list python-pytest python-pytest-asyncio python-pytest-timeout
20659 python-setuptools-scm python-toml))
20660 (home-page "https://github.com/tqdm/tqdm")
20661 (synopsis "Fast, extensible progress meter")
20662 (description
20663 "Make loops show a progress bar on the console by just wrapping any
20664 iterable with @code{|tqdm(iterable)|}. Offers many options to define
20665 design and layout.")
20666 (license (list license:mpl2.0 license:expat))))
20667
20668 (define-public python-pkginfo
20669 (package
20670 (name "python-pkginfo")
20671 (version "1.8.3")
20672 (source
20673 (origin
20674 (method url-fetch)
20675 (uri (pypi-uri "pkginfo" version))
20676 (sha256
20677 (base32 "0z46w559hrl79gf7navgzimj21ma821wka27jh58fvyqilqs8kd8"))))
20678 (build-system python-build-system)
20679 (native-inputs
20680 (list python-wheel))
20681 (home-page "https://code.launchpad.net/~tseaver/pkginfo/trunk")
20682 (synopsis "Query metadatdata from sdists, bdists, and installed packages")
20683 (description
20684 "API to query the distutils metadata written in @file{PKG-INFO} inside a
20685 source distriubtion (an sdist) or a binary distribution (e.g., created by
20686 running bdist_egg). It can also query the EGG-INFO directory of an installed
20687 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
20688 created by running @code{python setup.py develop}).")
20689 (license license:expat)))
20690
20691 (define-public python-twine
20692 (package
20693 (name "python-twine")
20694 (version "1.15.0")
20695 (source
20696 (origin
20697 (method url-fetch)
20698 (uri (pypi-uri "twine" version))
20699 (sha256
20700 (base32 "11rpd653zcgzkq3sgwkzs3mpxl3r5rij59745ni84ikv8smjmlm3"))))
20701 (build-system python-build-system)
20702 (propagated-inputs
20703 (list python-tqdm
20704 python-packaging
20705 python-pkginfo
20706 python-readme-renderer
20707 python-requests
20708 python-requests-toolbelt))
20709 (home-page "https://github.com/pypa/twine")
20710 (synopsis "Collection of utilities for interacting with PyPI")
20711 (description
20712 "@code{twine} currently supports registering projects and uploading
20713 distributions. It authenticates the user over HTTPS, allows them to pre-sign
20714 their files and supports any packaging format (including wheels).")
20715 (license license:asl2.0)))
20716
20717 (define-public python-linecache2
20718 (package
20719 (name "python-linecache2")
20720 (version "1.0.0")
20721 (source
20722 (origin
20723 (method url-fetch)
20724 (uri (pypi-uri "linecache2" version))
20725 (sha256
20726 (base32
20727 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
20728 (build-system python-build-system)
20729 (arguments
20730 `(;; The tests depend on unittest2, and our version is a bit too old.
20731 #:tests? #f))
20732 (native-inputs
20733 `(("python-pbr" ,python-pbr-minimal)))
20734 (home-page
20735 "https://github.com/testing-cabal/linecache2")
20736 (synopsis "Backports of the linecache module")
20737 (description
20738 "The linecache module allows one to get any line from any file, while
20739 attempting to optimize internally, using a cache, the common case where many
20740 lines are read from a single file.")
20741 (license license:psfl)))
20742
20743 (define-public python-traceback2
20744 (package
20745 (name "python-traceback2")
20746 (version "1.4.0")
20747 (source
20748 (origin
20749 (method url-fetch)
20750 (uri (pypi-uri "traceback2" version))
20751 (sha256
20752 (base32
20753 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
20754 (build-system python-build-system)
20755 (arguments
20756 `(;; python-traceback2 and python-unittest2 depend on one another.
20757 #:tests? #f))
20758 (native-inputs
20759 `(("python-pbr" ,python-pbr-minimal)))
20760 (propagated-inputs
20761 (list python-linecache2 python-six))
20762 (home-page
20763 "https://github.com/testing-cabal/traceback2")
20764 (synopsis "Backports of the traceback module")
20765 (description
20766 "This module provides a standard interface to extract, format and print
20767 stack traces of Python programs. It exactly mimics the behavior of the Python
20768 interpreter when it prints a stack trace.")
20769 (license license:psfl)))
20770
20771 (define-public python-ratelimiter
20772 (package
20773 (name "python-ratelimiter")
20774 (version "1.2.0")
20775 (source
20776 (origin
20777 (method url-fetch)
20778 (uri (pypi-uri "ratelimiter" version))
20779 (sha256
20780 (base32
20781 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
20782 (build-system python-build-system)
20783 (arguments
20784 '(#:tests? #f)) ; There are no tests in the pypi archive.
20785 (home-page "https://github.com/RazerM/ratelimiter")
20786 (synopsis "Simple rate limiting object")
20787 (description
20788 "The @code{ratelimiter} module ensures that an operation will not be
20789 executed more than a given number of times during a given period.")
20790 (license license:asl2.0)))
20791
20792 (define-public python-jsonrpclib-pelix
20793 (package
20794 (name "python-jsonrpclib-pelix")
20795 (version "0.3.2")
20796 (source
20797 (origin
20798 (method url-fetch)
20799 (uri (pypi-uri "jsonrpclib-pelix" version))
20800 (sha256
20801 (base32
20802 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
20803 (build-system python-build-system)
20804 (arguments
20805 `(#:tests? #f)) ; no tests in PyPI tarball
20806 (home-page "https://github.com/tcalmant/jsonrpclib/")
20807 (synopsis "JSON-RPC 2.0 client library for Python")
20808 (description
20809 "This library implements the JSON-RPC v2.0
20810 specification (backwards-compatible) as a client library for Python. This
20811 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
20812 services.")
20813 (license license:asl2.0)))
20814
20815 (define-public python-setuptools-scm-git-archive
20816 (package
20817 (name "python-setuptools-scm-git-archive")
20818 (version "1.0")
20819 (source
20820 (origin
20821 (method url-fetch)
20822 (uri (pypi-uri "setuptools_scm_git_archive" version))
20823 (sha256
20824 (base32
20825 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
20826 (build-system python-build-system)
20827 (arguments
20828 '(#:phases (modify-phases %standard-phases
20829 (add-after 'unpack 'dont-install-defunct-egginfo
20830 (lambda _
20831 ;; When a ".git" directory is missing, the setup.py
20832 ;; script invokes setuptools.setup twice, once with
20833 ;; "0" as the version. Prevent that.
20834 (substitute* "setup.py"
20835 (("if not isdir\\('\\.git'\\):")
20836 "if False:")))))))
20837 (native-inputs
20838 (list python-pytest))
20839 (propagated-inputs
20840 (list python-setuptools-scm))
20841 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
20842 (synopsis "Setuptools_scm plugin for git archives")
20843 (description
20844 "The setuptools_scm_git_archive package is a plugin to
20845 setuptools_scm, which supports obtaining versions from git archives that
20846 belong to tagged versions.")
20847 (license license:expat)))
20848
20849 (define-public python-setuptools-git
20850 (package
20851 (name "python-setuptools-git")
20852 (version "1.2")
20853 (source
20854 (origin
20855 (method url-fetch)
20856 (uri (pypi-uri "setuptools-git" version))
20857 (sha256
20858 (base32
20859 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
20860 (build-system python-build-system)
20861 (arguments
20862 `(#:phases
20863 (modify-phases %standard-phases
20864 ;; This is needed for tests.
20865 (add-after 'unpack 'configure-git
20866 (lambda _
20867 (setenv "HOME" "/tmp")
20868 (invoke "git" "config" "--global" "user.email" "guix")
20869 (invoke "git" "config" "--global" "user.name" "guix")
20870 #t)))))
20871 (native-inputs
20872 `(("git" ,git-minimal)))
20873 (home-page "https://github.com/msabramo/setuptools-git")
20874 (synopsis "Setuptools revision control system plugin for Git")
20875 (description
20876 "This package provides a plugin for Setuptools for revision control with
20877 Git.")
20878 (license license:bsd-3)))
20879
20880 (define-public python-setuptools-rust
20881 (package
20882 (name "python-setuptools-rust")
20883 (version "1.1.2")
20884 (source
20885 (origin
20886 (method url-fetch)
20887 (uri (pypi-uri "setuptools-rust" version))
20888 (sha256
20889 (base32 "1lb57qx1azklgzmalflq960agvwci4bwddw0zvlc9zy00fsvkbd0"))))
20890 (build-system python-build-system)
20891 (arguments '(#:tests? #f)) ;no tests
20892 (native-inputs
20893 (list python-setuptools-scm))
20894 (propagated-inputs
20895 (list python-semantic-version python-typing-extensions))
20896 (home-page "https://github.com/PyO3/setuptools-rust")
20897 (synopsis "Setuptools plugin for Rust extensions")
20898 (description
20899 "@code{setuptools-rust} is a plugin for @code{setuptools} to build
20900 Rust Python extensions implemented with @code{PyO3} or @code{rust-cpython}.")
20901 (license license:expat)))
20902
20903 (define-public python-pyclipper
20904 (package
20905 (name "python-pyclipper")
20906 (version "1.3.0.post3")
20907 (source
20908 (origin
20909 (method url-fetch)
20910 (uri (pypi-uri "pyclipper" version))
20911 (sha256
20912 (base32 "0vqzbmq2di1jaj6230m5i1ld0mg6wdb1c6r6i5zli54varavr7v3"))
20913 (modules '((guix build utils)))
20914 (snippet
20915 '(begin
20916 ;; This file is generated by Cython.
20917 (delete-file "src/pyclipper/_pyclipper.cpp") #t))))
20918 (build-system python-build-system)
20919 (arguments
20920 `(#:phases
20921 (modify-phases %standard-phases
20922 (add-before 'build 'cythonize-sources
20923 (lambda _
20924 (with-directory-excursion "src/pyclipper"
20925 (invoke "cython" "--cplus" "_pyclipper.pyx")))))))
20926 (native-inputs
20927 (list python-cython python-setuptools-scm
20928 python-pytest python-pytest-runner))
20929 (home-page "https://github.com/greginvm/pyclipper")
20930 (synopsis "Wrapper for Angus Johnson's Clipper library")
20931 (description
20932 "Pyclipper is a Cython wrapper for the C++ translation of the
20933 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
20934 (license license:expat)))
20935
20936 (define-public python-tempdir
20937 (package
20938 (name "python-tempdir")
20939 (version "0.7.1")
20940 (source
20941 (origin
20942 (method url-fetch)
20943 (uri (pypi-uri "tempdir" version))
20944 (sha256
20945 (base32
20946 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
20947 (build-system python-build-system)
20948 (home-page "https://pypi.org/project/tempdir/")
20949 (arguments
20950 ;; the package has no tests
20951 '(#:tests? #f))
20952 (synopsis "Python library for managing temporary directories")
20953 (description
20954 "This library manages temporary directories that are automatically
20955 deleted with all their contents when they are no longer needed. It is
20956 particularly convenient for use in tests.")
20957 (license license:expat)))
20958
20959 (define-public python-tempora
20960 (package
20961 (name "python-tempora")
20962 (version "5.0.1")
20963 (source
20964 (origin
20965 (method url-fetch)
20966 (uri (pypi-uri "tempora" version))
20967 (sha256
20968 (base32 "09wirlk5vmxlhl9rnxp7g5qz2nsd6b0gnzk5fczbz0s8lsbz386b"))))
20969 (build-system python-build-system)
20970 (arguments
20971 (list
20972 #:phases
20973 #~(modify-phases %standard-phases
20974 ;; XXX: PEP 517 manual build copied from python-isort.
20975 (replace 'build
20976 (lambda _
20977 (setenv "SOURCE_DATE_EPOCH" "315532800")
20978 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
20979 (replace 'install
20980 (lambda _
20981 (let ((whl (car (find-files "dist" "\\.whl$"))))
20982 (invoke "pip" "--no-cache-dir" "--no-input"
20983 "install" "--no-deps" "--prefix" #$output whl))))
20984 (replace 'check
20985 (lambda* (#:key tests? #:allow-other-keys)
20986 (when tests?
20987 ;; Do not test the myproject.toml build as it tries to pull
20988 ;; dependencies from the Internet.
20989 (invoke "pytest" "-k" "not project")))))))
20990 (native-inputs
20991 (list python-pypa-build
20992 python-freezegun
20993 python-pytest
20994 python-pytest-black
20995 python-pytest-checkdocs
20996 python-pytest-cov
20997 python-pytest-enabler
20998 python-pytest-flake8
20999 python-pytest-freezegun
21000 python-pytest-mypy
21001 python-setuptools-scm
21002 python-types-freezegun
21003 python-types-pytz))
21004 (propagated-inputs (list python-jaraco-functools python-pytz))
21005 (home-page "https://github.com/jaraco/tempora")
21006 (synopsis "Python date and time objects and routines")
21007 (description "The @code{tempora} Python library contains miscellaneous
21008 date and time related utilities and constants, routines for measuring,
21009 profiling, and getting datetime-aware @acronym{UTC, Coordinated Universal
21010 Time} values as well as an event scheduler.")
21011 (license license:expat)))
21012
21013 (define-public python-activepapers
21014 (package
21015 (name "python-activepapers")
21016 (version "0.2.2")
21017 (source
21018 (origin
21019 (method url-fetch)
21020 (uri (pypi-uri "ActivePapers.Py" version))
21021 (sha256
21022 (base32
21023 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
21024 (build-system python-build-system)
21025 (arguments
21026 `(#:modules ((ice-9 ftw)
21027 (srfi srfi-1)
21028 (guix build utils)
21029 (guix build python-build-system))
21030
21031 #:phases
21032 (modify-phases %standard-phases
21033 (add-after 'unpack 'delete-python2-code
21034 (lambda _
21035 (for-each delete-file
21036 '("lib/activepapers/builtins2.py"
21037 "lib/activepapers/standardlib2.py"
21038 "lib/activepapers/utility2.py"))))
21039 (replace 'check
21040 (lambda _
21041 ;; Deactivate the test cases that download files
21042 (setenv "NO_NETWORK_ACCESS" "1")
21043 ;; For some strange reason, some tests fail if nosetests runs all
21044 ;; test modules in a single execution. They pass if each test
21045 ;; module is run individually.
21046 (for-each (lambda (filename)
21047 (invoke "nosetests"
21048 (string-append "tests/" filename)))
21049 (scandir "tests"
21050 (lambda (filename)
21051 (string-suffix? ".py" filename)))))))))
21052 (native-inputs
21053 (list python-tempdir python-nose))
21054 (propagated-inputs
21055 (list python-h5py))
21056 (home-page "https://www.activepapers.org/")
21057 (synopsis "Executable papers for scientific computing")
21058 (description
21059 "ActivePapers is a tool for working with executable papers, which
21060 combine data, code, and documentation in single-file packages,
21061 suitable for publication as supplementary material or on repositories
21062 such as figshare or Zenodo.")
21063 (license license:bsd-3)))
21064
21065 (define-public python-semver
21066 (package
21067 (name "python-semver")
21068 (version "2.9.0")
21069 (source
21070 (origin
21071 (method url-fetch)
21072 (uri (pypi-uri "semver" version))
21073 (sha256
21074 (base32
21075 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
21076 (build-system python-build-system)
21077 (arguments
21078 `(#:phases (modify-phases %standard-phases
21079 (replace 'check
21080 (lambda _
21081 (delete-file "setup.cfg")
21082 (invoke "py.test"))))))
21083 (native-inputs
21084 (list python-pytest))
21085 (home-page "https://github.com/k-bx/python-semver")
21086 (synopsis "Python helper for Semantic Versioning")
21087 (description "This package provides a Python library for
21088 @url{Semantic Versioning, http://semver.org/}.")
21089 (license license:bsd-3)))
21090
21091 (define-public python-pyro4
21092 (package
21093 (name "python-pyro4")
21094 (version "4.77")
21095 (source
21096 (origin
21097 (method url-fetch)
21098 (uri (pypi-uri "Pyro4" version))
21099 (sha256
21100 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
21101 (build-system python-build-system)
21102 (arguments
21103 '(#:tests? #f)) ;FIXME: Some tests require network access.
21104 (native-inputs
21105 (list python-cloudpickle python-dill python-msgpack))
21106 (propagated-inputs
21107 (list python-serpent))
21108 (home-page "https://pyro4.readthedocs.io")
21109 (synopsis "Distributed object middleware for Python")
21110 (description
21111 "Pyro enables you to build applications in which objects can talk to each
21112 other over the network. You can just use normal Python method calls to call
21113 objects on other machines, also known as remote procedure calls (RPC).")
21114 (license license:expat)))
21115
21116 (define-public python-phonenumbers
21117 (package
21118 (name "python-phonenumbers")
21119 (version "8.9.1")
21120 (source
21121 (origin
21122 (method url-fetch)
21123 (uri (pypi-uri "phonenumbers" version))
21124 (sha256
21125 (base32
21126 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
21127 (build-system python-build-system)
21128 (home-page
21129 "https://github.com/daviddrysdale/python-phonenumbers")
21130 (synopsis
21131 "Python library for dealing with international phone numbers")
21132 (description
21133 "This package provides a Python port of Google's libphonenumber library.")
21134 (license license:asl2.0)))
21135
21136 (define-public python-heapdict
21137 (package
21138 (name "python-heapdict")
21139 (version "1.0.1")
21140 (source
21141 (origin
21142 (method url-fetch)
21143 (uri (pypi-uri "HeapDict" version))
21144 (sha256
21145 (base32
21146 "1dnd7v9adqd21bf4ih2wzn9a7b41m0nccb0vbxny9n037rxzb5c4"))))
21147 (build-system python-build-system)
21148 (home-page "http://stutzbachenterprises.com/")
21149 (synopsis "Heap with decrease-key and increase-key operations")
21150 (description
21151 "heapdict implements the MutableMapping ABC, meaning it works pretty much
21152 like a regular Python @code{dict}. It’s designed to be used as a priority
21153 queue.")
21154 (license license:bsd-3)))
21155
21156 (define-public python-zict
21157 (package
21158 (name "python-zict")
21159 (version "2.0.0")
21160 (source
21161 (origin
21162 (method url-fetch)
21163 (uri (pypi-uri "zict" version))
21164 (sha256
21165 (base32
21166 "05pd1hyhqvpw87rnbvl3vdyf619snpyccbswaxisdj17frwnjacf"))))
21167 (build-system python-build-system)
21168 (propagated-inputs
21169 (list python-heapdict))
21170 (native-inputs
21171 (list python-pytest))
21172 (home-page "https://zict.readthedocs.io/en/latest/")
21173 (synopsis "Composable mutable mapping tools")
21174 (description "This package provides abstract @code{MutableMapping} classes
21175 that consume and build on other @code{MutableMappings}. Several of these can
21176 be composed with one another to form intuitive interfaces over complex storage
21177 systems policies.")
21178 (license license:bsd-3)))
21179
21180 (define-public python-send2trash
21181 (package
21182 (name "python-send2trash")
21183 (version "1.8.0")
21184 (source
21185 (origin (method git-fetch)
21186 ;; Source tarball on PyPI doesn't include tests.
21187 (uri (git-reference
21188 (url "https://github.com/arsenetar/send2trash")
21189 (commit version)))
21190 (file-name (git-file-name name version))
21191 (sha256
21192 (base32
21193 "1k7dfypaaq4f36fbciaasv72j6wgjihw8d88axmz9c329bz8v5qx"))))
21194 (build-system python-build-system)
21195 (arguments
21196 '(#:phases
21197 (modify-phases %standard-phases
21198 (add-before 'check 'pre-check
21199 (lambda _
21200 (setenv "HOME" "/tmp")))
21201 (replace 'check
21202 (lambda* (#:key tests? #:allow-other-keys)
21203 (when tests?
21204 (invoke "pytest" "-vv")))))))
21205 (native-inputs (list python-pytest))
21206 (home-page "https://github.com/arsenetar/send2trash")
21207 (synopsis "Send files to the user's @file{~/Trash} directory")
21208 (description "This package provides a Python library to send files to the
21209 user's @file{~/Trash} directory.")
21210 (license license:bsd-3)))
21211
21212 (define-public python-pyfavicon
21213 (package
21214 (name "python-pyfavicon")
21215 (version "0.1.1")
21216 (source
21217 (origin
21218 (method url-fetch)
21219 (uri (pypi-uri "pyfavicon" version))
21220 (sha256
21221 (base32 "15wfpa99hvcfsv8j0m8iprmydi2p4qkhm86qfx485244y0ia5mgx"))))
21222 (build-system python-build-system)
21223 (arguments
21224 ;; There are no tests in the PyPI tarball and the tests from the
21225 ;; repository require online data.
21226 '(#:tests? #f))
21227 (propagated-inputs
21228 (list python-aiohttp python-beautifulsoup4 python-pillow))
21229 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
21230 (synopsis "Async favicon fetcher")
21231 (description
21232 "@code{pyfavicon} is an async favicon fetcher.")
21233 (license license:expat)))
21234
21235 (define-public python-yamllint
21236 (package
21237 (name "python-yamllint")
21238 (version "1.26.1")
21239 (source
21240 (origin
21241 (method url-fetch)
21242 (uri (pypi-uri "yamllint" version))
21243 (sha256
21244 (base32 "090krlxj7az0d9yl8i20vjrqi66dfxx7y5xakjhxzsfp7qmldnc7"))))
21245 (build-system python-build-system)
21246 (propagated-inputs
21247 (list python-pathspec python-pyyaml python-setuptools))
21248 (home-page "https://github.com/adrienverge/yamllint")
21249 (synopsis "Linter for YAML files")
21250 (description
21251 "Yamllint is a linter for YAML files. yamllint does not only check for
21252 syntax validity, but for weirdnesses like key repetition and cosmetic problems
21253 such as lines length, trailing spaces, indentation, etc.")
21254 (license license:gpl3+)))
21255
21256 (define-public python-yapf
21257 (package
21258 (name "python-yapf")
21259 (version "0.29.0")
21260 (source
21261 (origin
21262 (method url-fetch)
21263 (uri (pypi-uri "yapf" version))
21264 (sha256
21265 (base32
21266 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
21267 (build-system python-build-system)
21268 (home-page "https://github.com/google/yapf")
21269 (synopsis "Formatter for Python code")
21270 (description "YAPF is a formatter for Python code. It's based off of
21271 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
21272 takes the code and reformats it to the best formatting that conforms to the
21273 style guide, even if the original code didn't violate the style guide.")
21274 (license license:asl2.0)))
21275
21276 (define-public python-yq
21277 (package
21278 (name "python-yq")
21279 (version "2.11.1")
21280 (source
21281 (origin
21282 (method url-fetch)
21283 (uri (pypi-uri "yq" version))
21284 (sha256
21285 (base32
21286 "1q4rky0a6n4izmq7slb91a54g8swry1xrbfqxwc8lkd3hhvlxxkl"))))
21287 (build-system python-build-system)
21288 (arguments
21289 '(#:phases
21290 (modify-phases %standard-phases
21291 (add-after 'unpack 'patch
21292 (lambda* (#:key inputs #:allow-other-keys)
21293 (substitute* "yq/__init__.py"
21294 (("Popen\\(\\[\"jq")
21295 (string-append
21296 "Popen([\""
21297 (assoc-ref inputs "jq")
21298 "/bin/jq")))
21299 #t)))))
21300 (inputs
21301 (list python-argcomplete python-pyyaml python-xmltodict jq))
21302 (native-inputs
21303 (list python-coverage python-flake8 python-wheel))
21304 (home-page "https://github.com/kislyuk/yq")
21305 (synopsis "Command-line YAML/XML processor")
21306 (description
21307 "This package provides @command{yq} and @command{xq} for processing YAML
21308 and XML respectively. The processing is done through @command{jq}, @command{jq}
21309 filters can be used to process the data as it passes through.")
21310 (license license:asl2.0)))
21311
21312 (define-public python-gyp
21313 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
21314 (revision "0"))
21315 (package
21316 (name "python-gyp")
21317 ;; Google does not release versions,
21318 ;; based on second most recent commit date.
21319 (version (git-version "0.0.0" revision commit))
21320 (source
21321 (origin
21322 ;; Google does not release tarballs,
21323 ;; git checkout is needed.
21324 (method git-fetch)
21325 (uri (git-reference
21326 (url "https://chromium.googlesource.com/external/gyp")
21327 (commit commit)))
21328 (file-name (git-file-name name version))
21329 (sha256
21330 (base32
21331 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
21332 (build-system python-build-system)
21333 (home-page "https://gyp.gsrc.io/")
21334 (synopsis "GYP is a Meta-Build system")
21335 (description
21336 "GYP builds build systems for large, cross platform applications.
21337 It can be used to generate XCode projects, Visual Studio projects, Ninja build
21338 files, and Makefiles.")
21339 (license license:bsd-3))))
21340
21341 (define-public python-whatever
21342 (package
21343 (name "python-whatever")
21344 (version "0.6")
21345 (source
21346 (origin
21347 (method git-fetch)
21348 (uri (git-reference
21349 (url "https://github.com/Suor/whatever")
21350 (commit version)))
21351 (file-name (git-file-name name version))
21352 (sha256
21353 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
21354 (build-system python-build-system)
21355 (arguments
21356 `(#:phases
21357 (modify-phases %standard-phases
21358 (replace 'check
21359 (lambda _
21360 (invoke "py.test"))))))
21361 (native-inputs
21362 (list python-pytest))
21363 (home-page "https://github.com/Suor/whatever")
21364 (synopsis "Make anonymous functions by partial application of operators")
21365 (description "@code{whatever} provides an easy way to make anonymous
21366 functions by partial application of operators.")
21367 (license license:bsd-3)))
21368
21369 (define-public python-funcy
21370 (package
21371 (name "python-funcy")
21372 (version "1.11")
21373 (source
21374 (origin
21375 (method git-fetch)
21376 (uri (git-reference
21377 (url "https://github.com/Suor/funcy")
21378 (commit version)))
21379 (sha256
21380 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
21381 (file-name (git-file-name name version))))
21382 (build-system python-build-system)
21383 (arguments
21384 `(#:phases
21385 (modify-phases %standard-phases
21386 (replace 'check
21387 (lambda _
21388 (invoke "py.test"))))))
21389 (native-inputs
21390 (list python-pytest python-whatever))
21391 (home-page "https://github.com/Suor/funcy")
21392 (synopsis "Functional tools")
21393 (description "@code{funcy} is a library that provides functional tools.
21394 Examples are:
21395 @enumerate
21396 @item merge - Merges collections of the same type
21397 @item walk - Type-preserving map
21398 @item select - Selects a part of a collection
21399 @item take - Takes the first n items of a collection
21400 @item first - Takes the first item of a collection
21401 @item remove - Predicated-removes items of a collection
21402 @item concat - Concatenates two collections
21403 @item flatten - Flattens a collection with subcollections
21404 @item distinct - Returns only distinct items
21405 @item split - Predicated-splits a collection
21406 @item split_at - Splits a collection at a given item
21407 @item group_by - Groups items by group
21408 @item pairwise - Pairs off adjacent items
21409 @item partial - Partially-applies a function
21410 @item curry - Curries a function
21411 @item compose - Composes functions
21412 @item complement - Complements a predicate
21413 @item all_fn - \"all\" with predicate
21414 @end enumerate")
21415 (license license:bsd-3)))
21416
21417 (define-public python-isoweek
21418 (package
21419 (name "python-isoweek")
21420 (version "1.3.3")
21421 (source
21422 (origin
21423 (method url-fetch)
21424 (uri (pypi-uri "isoweek" version))
21425 (sha256
21426 (base32
21427 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
21428 (build-system python-build-system)
21429 (home-page "https://github.com/gisle/isoweek")
21430 (synopsis "Objects representing a week")
21431 (description "The @code{isoweek} module provide the class Week that
21432 implements the week definition of ISO 8601. This standard also defines
21433 a notation for identifying weeks; yyyyWww (where the W is a literal).
21434 Week instances stringify to this form.")
21435 (license license:bsd-3)))
21436
21437 (define-public python-pyzbar
21438 (package
21439 (name "python-pyzbar")
21440 (version "0.1.8")
21441 (source
21442 (origin
21443 ;; There's no source tarball on PyPI.
21444 (method git-fetch)
21445 (uri (git-reference
21446 (url "https://github.com/NaturalHistoryMuseum/pyzbar")
21447 (commit (string-append "v" version))))
21448 (file-name (git-file-name name version))
21449 (sha256
21450 (base32 "1fqlfg5p2v9lzzzi0si2sz54lblprk6jjjhjw54b64lp58c1yhsl"))))
21451 (build-system python-build-system)
21452 (arguments
21453 `(#:phases
21454 (modify-phases %standard-phases
21455 (add-after 'unpack 'remove-failing-test
21456 (lambda _
21457 ;; This tests if find_library was called once, but we remove
21458 ;; the call in the stage below to make the library find libzbar.
21459 (delete-file "pyzbar/tests/test_zbar_library.py")
21460 #t))
21461 (add-before 'build 'set-library-file-name
21462 (lambda* (#:key inputs #:allow-other-keys)
21463 (let ((libzbar (assoc-ref inputs "zbar")))
21464 (substitute* "pyzbar/zbar_library.py"
21465 (("find_library\\('zbar'\\)")
21466 (string-append "'" libzbar "/lib/libzbar.so.0'")))
21467 #t))))))
21468 (native-inputs
21469 (list pkg-config python-numpy python-pillow))
21470 (inputs
21471 (list zbar))
21472 (home-page "https://github.com/NaturalHistoryMuseum/pyzbar/")
21473 (synopsis "Read one-dimensional barcodes and QR codes")
21474 (description
21475 "Read one-dimensional barcodes and QR codes using the zbar library.
21476
21477 Features:
21478
21479 @itemize
21480 @item Pure python
21481 @item Works with PIL / Pillow images, OpenCV / numpy ndarrays, and raw bytes
21482 @item Decodes locations of barcodes
21483 @item No dependencies, other than the zbar library itself
21484 @end itemize")
21485 (license license:expat)))
21486
21487 (define-public python-tokenize-rt
21488 (package
21489 (name "python-tokenize-rt")
21490 (version "2.0.1")
21491 (source
21492 (origin
21493 (method url-fetch)
21494 (uri (pypi-uri "tokenize-rt" version))
21495 (sha256
21496 (base32
21497 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
21498 (build-system python-build-system)
21499 (home-page "https://github.com/asottile/tokenize-rt")
21500 (synopsis "Wrapper around the stdlib tokenize which roundtrips")
21501 (description
21502 "This Python library is a wrapper around @code{tokenize} from the Python
21503 standard library. It provides two additional tokens @code{ESCAPED_NL} and
21504 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
21505 and @code{tokens_to_src} to roundtrip.")
21506 (license license:expat)))
21507
21508 (define-public python-future-fstrings
21509 (package
21510 (name "python-future-fstrings")
21511 (version "0.4.1")
21512 (source
21513 (origin
21514 (method url-fetch)
21515 (uri (pypi-uri "future_fstrings" version))
21516 (sha256
21517 (base32
21518 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
21519 (build-system python-build-system)
21520 (propagated-inputs
21521 (list python-tokenize-rt))
21522 (home-page "https://github.com/asottile/future-fstrings")
21523 (synopsis "Backport of fstrings to Python < 3.6")
21524 (description
21525 "This package provides a UTF-8 compatible encoding
21526 @code{future_fstrings}, which performs source manipulation. It decodes the
21527 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
21528 @code{f} strings.")
21529 (license license:expat)))
21530
21531 (define-public python-typed-ast
21532 (package
21533 (name "python-typed-ast")
21534 (version "1.5.1")
21535 (source
21536 (origin
21537 (method git-fetch)
21538 (uri (git-reference
21539 (url "https://github.com/python/typed_ast")
21540 (commit version)))
21541 (sha256
21542 (base32 "1xfcs5246c8v5600aaa8zs7ii4sxb62q6r3sb2fgazyjx97wrxd9"))
21543 (file-name (git-file-name name version))))
21544 (build-system python-build-system)
21545 (arguments
21546 `(#:phases
21547 (modify-phases %standard-phases
21548 (replace 'check
21549 (lambda _
21550 (invoke "pytest"))))))
21551 (native-inputs (list python-pytest))
21552 (home-page "https://github.com/python/typed_ast")
21553 (synopsis "Fork of Python @code{ast} modules with type comment support")
21554 (description "This package provides a parser similar to the standard
21555 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
21556 include PEP 484 type comments and are independent of the version of Python
21557 under which they are run. The @code{typed_ast} parsers produce the standard
21558 Python AST (plus type comments), and are both fast and correct, as they are
21559 based on the CPython 2.7 and 3.7 parsers.")
21560 ;; See the file "LICENSE" for the details.
21561 (license (list license:psfl
21562 license:asl2.0
21563 license:expat)))) ;ast27/Parser/spark.py
21564
21565 (define-public python-typer
21566 (package
21567 (name "python-typer")
21568 (version "0.6.1")
21569 (source
21570 (origin
21571 (method git-fetch)
21572 (uri (git-reference
21573 (url "https://github.com/tiangolo/typer")
21574 (commit version)))
21575 (file-name (git-file-name name version))
21576 (sha256
21577 (base32 "1knv353qhkl2imav3jfp6bgq47m8wkkqhq1dzmqg2sv8rsy7zgl7"))))
21578 (build-system python-build-system)
21579 (arguments
21580 `(#:phases
21581 ,#~(modify-phases %standard-phases
21582 ;; Unfortunately, this doesn't seem to be enough to fix these two
21583 ;; tests, but we'll patch this anyway.
21584 (add-after 'unpack 'patch-shell-reference
21585 (lambda _
21586 (substitute* "tests/test_completion/test_completion.py"
21587 (("\"bash\"") (string-append "\"" (which "bash") "\""))
21588 (("\"/bin/bash\"")
21589 (string-append "\"" (which "bash") "\"")))))
21590 (replace 'build
21591 (lambda _
21592 (invoke "flit" "build")))
21593 (replace 'install
21594 (lambda* (#:key inputs outputs #:allow-other-keys)
21595 (add-installed-pythonpath inputs outputs)
21596 (for-each
21597 (lambda (wheel)
21598 (format #true wheel)
21599 (invoke "python" "-m" "pip" "install"
21600 wheel (string-append "--prefix=" #$output)))
21601 (find-files "dist" "\\.whl$"))))
21602 (replace 'check
21603 (lambda* (#:key tests? #:allow-other-keys)
21604 (when tests?
21605 (setenv "HOME" "/tmp") ; some tests need it
21606
21607 ;; This is for completion tests
21608 (with-output-to-file "/tmp/.bashrc"
21609 (lambda _ (display "# dummy")))
21610
21611 (setenv "GUIX_PYTHONPATH"
21612 (string-append (getcwd) ":"
21613 (getenv "GUIX_PYTHONPATH")))
21614 (let ((disabled-tests (list "test_show_completion"
21615 "test_install_completion")))
21616 (invoke "python" "-m" "pytest" "tests/"
21617 "-k"
21618 (string-append "not "
21619 (string-join disabled-tests
21620 " and not "))))))))))
21621 (propagated-inputs
21622 (list python-click))
21623 (native-inputs
21624 (list python-coverage python-flit python-pytest python-rich
21625 python-shellingham))
21626 (home-page "https://github.com/tiangolo/typer")
21627 (synopsis
21628 "Typer builds CLI based on Python type hints")
21629 (description
21630 "Typer is a library for building CLI applications. It's based on
21631 Python 3.6+ type hints.")
21632 ;; MIT license
21633 (license license:expat)))
21634
21635 (define-public python-typeguard
21636 (package
21637 (name "python-typeguard")
21638 (version "2.13.3")
21639 (source
21640 (origin
21641 (method url-fetch)
21642 (uri (pypi-uri "typeguard" version))
21643 (sha256
21644 (base32 "1i5qzcyw2715h1g1hvj7fxykck2bkxyshpngjr3nfcx1lf6smv80"))))
21645 (build-system python-build-system)
21646 (arguments
21647 (list
21648 #:phases
21649 #~(modify-phases %standard-phases
21650 (replace 'check
21651 (lambda* (#:key tests? #:allow-other-keys)
21652 (when tests?
21653 (invoke "pytest" "-vv" "-k"
21654 ;; XXX: These fail when installed as a library:
21655 ;; https://github.com/agronholm/typeguard/issues/176
21656 "not usefixtures and not test_cached_module")))))))
21657 (native-inputs
21658 (list python-mypy python-pytest python-typing-extensions))
21659 (home-page "https://github.com/agronholm/typeguard")
21660 (synopsis "Run-time type checker for Python")
21661 (description
21662 "@code{typeguard} provides run-time type checking for functions defined
21663 with PEP 484 argument (and return) type annotations.")
21664 (license license:expat)))
21665
21666 (define-public python-typing-extensions
21667 (package
21668 (name "python-typing-extensions")
21669 (version "4.0.1")
21670 (source (origin
21671 ;; The test script is missing from the PyPI archive.
21672 (method git-fetch)
21673 (uri (git-reference
21674 (url "https://github.com/python/typing")
21675 (commit version)))
21676 (file-name (git-file-name name version))
21677 (sha256
21678 (base32
21679 "0a35fh5wk9s538x0w3dz95y0avnhd2srzyv9s1a372711n8hdl4p"))))
21680 (build-system python-build-system)
21681 (arguments
21682 (list
21683 #:tests? #f ;requires Python's test module, not available in Guix
21684 #:phases
21685 #~(modify-phases %standard-phases
21686 (add-after 'unpack 'enter-source-directory
21687 (lambda _
21688 (chdir "typing_extensions")))
21689 ;; XXX: PEP 517 manual build copied from python-isort.
21690 (replace 'build
21691 (lambda _
21692 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
21693 (replace 'check
21694 (lambda* (#:key tests? #:allow-other-keys)
21695 (when tests?
21696 (invoke "python" "src/test_typing_extensions.py"))))
21697 (replace 'install
21698 (lambda _
21699 (let ((whl (car (find-files "dist" "\\.whl$"))))
21700 (invoke "pip" "--no-cache-dir" "--no-input"
21701 "install" "--no-deps" "--prefix" #$output whl)))))))
21702 (native-inputs (list python-pypa-build python-flit-core))
21703 (home-page "https://github.com/python/typing/typing_extensions")
21704 (synopsis "Experimental type hints for Python")
21705 (description
21706 "The typing_extensions module contains additional @code{typing} hints not
21707 yet present in the of the @code{typing} standard library.
21708 Included are implementations of:
21709 @enumerate
21710 @item ClassVar
21711 @item ContextManager
21712 @item Counter
21713 @item DefaultDict
21714 @item Deque
21715 @item NewType
21716 @item NoReturn
21717 @item overload
21718 @item Protocol
21719 @item runtime
21720 @item Text
21721 @item Type
21722 @item TYPE_CHECKING
21723 @item AsyncGenerator
21724 @end enumerate\n")
21725 (license license:psfl)))
21726
21727 (define-public python-typing-extensions-next
21728 (package
21729 (inherit python-typing-extensions)
21730 (name "python-typing-extensions")
21731 (version "4.2.0")
21732 (source (origin
21733 (method git-fetch)
21734 (uri (git-reference
21735 (url "https://github.com/python/typing")
21736 (commit version)))
21737 (file-name (git-file-name name version))
21738 (sha256
21739 (base32
21740 "1bbry1rg7q5ppkgzdk4nwl7q1w8bbhajm4q68wb9dm6rf7hg1023"))))))
21741
21742 (define-public bpython
21743 (package
21744 (name "bpython")
21745 (version "0.21")
21746 (source
21747 (origin
21748 (method url-fetch)
21749 (uri (pypi-uri "bpython" version))
21750 (sha256
21751 (base32 "11wlf12nm6ggn9512y4yqs26s8gdgpx0h9ls94k7fsjgjy4rpal8"))))
21752 (build-system python-build-system)
21753 (arguments
21754 `(#:phases
21755 (modify-phases %standard-phases
21756 (add-after 'unpack 'remove-failing-test
21757 (lambda _
21758 ;; Remove failing test. FIXME: make it pass
21759 (delete-file "bpython/test/test_args.py")
21760 #t))
21761 (add-after 'wrap 'add-aliases
21762 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
21763 (lambda* (#:key outputs #:allow-other-keys)
21764 (let ((out (assoc-ref outputs "out")))
21765 (for-each
21766 (lambda (old new)
21767 (symlink old (string-append out "/bin/" new)))
21768 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
21769 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
21770 #t)))))
21771 (propagated-inputs
21772 (list python-pygments
21773 python-requests
21774 python-curtsies
21775 python-greenlet
21776 python-six
21777 python-cwcwidth
21778 python-pyxdg
21779 ;; optional dependencies
21780 python-urwid ; for bpython-urwid only
21781 python-watchdog
21782 python-jedi))
21783 (native-inputs
21784 (list python-sphinx python-mock python-tox python-wheel))
21785 (home-page "https://bpython-interpreter.org/")
21786 (synopsis "Fancy interface to the Python interpreter")
21787 (description "Bpython is a fancy interface to the Python
21788 interpreter. bpython's main features are
21789
21790 @enumerate
21791 @item in-line syntax highlighting,
21792 @item readline-like autocomplete with suggestions displayed as you type,
21793 @item expected parameter list for any Python function,
21794 @item \"rewind\" function to pop the last line of code from memory and
21795 re-evaluate,
21796 @item send the code you've entered off to a pastebin,
21797 @item save the code you've entered to a file, and
21798 @item auto-indentation.
21799 @end enumerate")
21800 (license license:expat)))
21801
21802 (define-public python-pyinotify
21803 (package
21804 (name "python-pyinotify")
21805 (version "0.9.6")
21806 (source (origin
21807 (method url-fetch)
21808 (uri (pypi-uri "pyinotify" version))
21809 (sha256
21810 (base32
21811 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
21812 (build-system python-build-system)
21813 (arguments `(#:tests? #f)) ;no tests
21814 (home-page "https://github.com/seb-m/pyinotify")
21815 (synopsis "Python library for monitoring inotify events")
21816 (description
21817 "@code{pyinotify} provides a Python interface for monitoring
21818 file system events on Linux.")
21819 (license license:expat)))
21820
21821
21822 (define-public python-more-itertools
21823 (package
21824 (name "python-more-itertools")
21825 (version "8.2.0")
21826 (source
21827 (origin
21828 (method url-fetch)
21829 (uri (pypi-uri "more-itertools" version))
21830 (sha256
21831 (base32
21832 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
21833 (build-system python-build-system)
21834 (home-page "https://github.com/erikrose/more-itertools")
21835 (synopsis "More routines for operating on iterables, beyond itertools")
21836 (description "Python's built-in @code{itertools} module implements a
21837 number of iterator building blocks inspired by constructs from APL, Haskell,
21838 and SML. @code{more-itertools} includes additional building blocks for
21839 working with iterables.")
21840 (license license:expat)))
21841
21842 (define-public python-latexcodec
21843 (package
21844 (name "python-latexcodec")
21845 (version "2.0.1")
21846 (source
21847 (origin
21848 (method url-fetch)
21849 (uri (pypi-uri "latexcodec" version))
21850 (sha256
21851 (base32 "16pynfnn8y8xp55yp06i721fccv5dlx9ba6k5bzcwq9j6wf5b8ia"))))
21852 (build-system python-build-system)
21853 (propagated-inputs
21854 (list python-six))
21855 (home-page "https://readthedocs.org/projects/latexcodec/")
21856 (synopsis "Work with LaTeX code in Python")
21857 (description "Lexer and codec to work with LaTeX code in Python.")
21858 (license license:expat)))
21859
21860 (define-public python-pybtex
21861 (package
21862 (name "python-pybtex")
21863 (version "0.24.0")
21864 (source
21865 (origin
21866 (method url-fetch)
21867 (uri (pypi-uri "pybtex" version))
21868 (sha256
21869 (base32 "0ma7sc10hk6caq5zghbk865vrlaynz7x5z630z0facqpnqssx3l1"))))
21870 (build-system python-build-system)
21871 (native-inputs
21872 (list python-pytest))
21873 (propagated-inputs
21874 (list python-latexcodec python-pyyaml python-six))
21875 (arguments
21876 (list
21877 #:phases #~(modify-phases %standard-phases
21878 (replace 'check
21879 (lambda* (#:key tests? #:allow-other-keys)
21880 (when tests?
21881 (invoke "pytest")))))))
21882 (home-page "https://pybtex.org/")
21883 (synopsis "BibTeX-compatible bibliography processor")
21884 (description "Pybtex is a BibTeX-compatible bibliography processor written
21885 in Python. You can simply type pybtex instead of bibtex.")
21886 (license license:expat)))
21887
21888 (define-public python-onetimepass
21889 (package
21890 (name "python-onetimepass")
21891 (version "1.0.1")
21892 (source
21893 (origin
21894 (method url-fetch)
21895 (uri (pypi-uri "onetimepass" version))
21896 (sha256
21897 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
21898 (build-system python-build-system)
21899 (propagated-inputs (list python-six))
21900 (home-page "https://github.com/tadeck/onetimepass/")
21901 (synopsis "One-time password library")
21902 (description "Python one-time password library for HMAC-based (HOTP) and
21903 time-based (TOTP) passwords.")
21904 (license license:expat)))
21905
21906 (define-public python-parso
21907 (package
21908 (name "python-parso")
21909 (version "0.8.3")
21910 (source
21911 (origin
21912 (method url-fetch)
21913 (uri (pypi-uri "parso" version))
21914 (sha256
21915 (base32 "185gkxq92kqiw2h5zp1cmyn04055x0lix4hmi5c077xm1clvw1wc"))))
21916 (native-inputs
21917 (list python-pytest))
21918 (build-system python-build-system)
21919 (arguments
21920 `(#:phases
21921 (modify-phases %standard-phases
21922 (replace 'check
21923 (lambda* (#:key tests? #:allow-other-keys)
21924 (when tests?
21925 (invoke "pytest" "-vv")))))))
21926 (home-page "https://github.com/davidhalter/parso")
21927 (synopsis "Python Parser")
21928 (description "Parso is a Python parser that supports error recovery and
21929 round-trip parsing for different Python versions (in multiple Python versions).
21930 Parso is also able to list multiple syntax errors in your Python file.")
21931 (license license:expat)))
21932
21933 (define-public python-async-generator
21934 (package
21935 (name "python-async-generator")
21936 (version "1.10")
21937 (source
21938 (origin
21939 (method url-fetch)
21940 (uri (pypi-uri "async_generator" version))
21941 (sha256
21942 (base32
21943 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
21944 (build-system python-build-system)
21945 (native-inputs
21946 (list python-pytest))
21947 (home-page "https://github.com/python-trio/async_generator")
21948 (synopsis "Async generators and context managers for Python 3.5+")
21949 (description "@code{async_generator} back-ports Python 3.6's native async
21950 generators and Python 3.7's context managers into Python 3.5.")
21951 ;; Dual licensed.
21952 (license (list license:expat license:asl2.0))))
21953
21954 (define-public python-async-timeout
21955 (package
21956 (name "python-async-timeout")
21957 (version "4.0.2")
21958 (source
21959 (origin
21960 (method url-fetch)
21961 (uri (pypi-uri "async-timeout" version))
21962 (sha256
21963 (base32
21964 "05bbjz16n1a7m1s3lmcwri2x5rc7hnh6f2hdr2lbflnv1mjf2qr1"))))
21965 (build-system python-build-system)
21966 (home-page "https://github.com/aio-libs/async-timeout")
21967 (synopsis "Timeout context manager for asyncio programs")
21968 (description "@code{async-timeout} provides a timeout timeout context
21969 manager compatible with @code{asyncio}.")
21970 (license license:asl2.0)))
21971
21972 (define-public python-glob2
21973 (package
21974 (name "python-glob2")
21975 (version "0.7")
21976 (source
21977 (origin
21978 (method git-fetch)
21979 (uri (git-reference
21980 (url "https://github.com/miracle2k/python-glob2")
21981 (commit (string-append "v" version))))
21982 (file-name (git-file-name name version))
21983 (sha256
21984 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
21985 (build-system python-build-system)
21986 (home-page "https://github.com/miracle2k/python-glob2/")
21987 (synopsis "Extended Version of the python buildin glob module")
21988 (description "This is an extended version of the Python
21989 @url{http://docs.python.org/library/glob.html, built-in glob module} which
21990 adds:
21991
21992 @itemize
21993 @item The ability to capture the text matched by glob patterns, and return
21994 those matches alongside the file names.
21995 @item A recursive @code{**} globbing syntax, akin for example to the
21996 @code{globstar} option of Bash.
21997 @item The ability to replace the file system functions used, in order to glob
21998 on virtual file systems.
21999 @item Compatible with Python 2 and Python 3 (tested with 3.3).
22000 @end itemize
22001
22002 Glob2 currently based on the glob code from Python 3.3.1.")
22003 (license license:bsd-2)))
22004
22005 (define-public python-gipc
22006 (package
22007 (name "python-gipc")
22008 (version "0.6.0")
22009 (source
22010 (origin
22011 (method url-fetch)
22012 (uri (pypi-uri "gipc" version ".zip"))
22013 (sha256
22014 (base32
22015 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
22016 (build-system python-build-system)
22017 (native-inputs
22018 (list unzip))
22019 (propagated-inputs
22020 (list python-gevent))
22021 (home-page "https://gehrcke.de/gipc/")
22022 (synopsis "Child process management in the context of gevent")
22023 (description "Usage of Python's multiprocessing package in a
22024 gevent-powered application may raise problems. With @code{gipc},
22025 process-based child processes can safely be created anywhere within a
22026 gevent-powered application.")
22027 (license license:expat)))
22028
22029 (define-public python-beautifultable
22030 (package
22031 (name "python-beautifultable")
22032 (version "1.0.0")
22033 (source
22034 (origin
22035 (method url-fetch)
22036 (uri (pypi-uri "beautifultable" version))
22037 (sha256
22038 (base32
22039 "0wwlbifcbpzy3wfv6yzsxncarsngzizmmxbn6cy5gazlcq7h4k5x"))))
22040 (build-system python-build-system)
22041 (propagated-inputs
22042 (list python-wcwidth))
22043 (arguments
22044 `(#:phases
22045 (modify-phases %standard-phases
22046 (add-after 'unpack 'patch-setup.py
22047 (lambda _
22048 (substitute* "setup.py"
22049 (("setup\\(")
22050 "setup(\n test_suite=\"test\",")))))))
22051 (home-page "https://github.com/pri22296/beautifultable")
22052 (synopsis "Print ASCII tables for terminals")
22053 (description "@code{python-beautifultable} provides a class for easily
22054 printing tabular data in a visually appealing ASCII format to a terminal.
22055
22056 Features include, but are not limited to:
22057 @itemize
22058 @item Full customization of the look and feel of the table
22059 @item Row and column accessors.
22060 @item Full support for colors using ANSI sequences or any library.
22061 @item Plenty of predefined styles and option to create custom ones.
22062 @item Support for Unicode characters.
22063 @item Supports streaming table when data is slow to retrieve.
22064 @end itemize")
22065 (license license:expat)))
22066
22067 (define-public python-globber
22068 (package
22069 (name "python-globber")
22070 (version "0.2.1")
22071 (source
22072 (origin
22073 (method git-fetch)
22074 (uri (git-reference
22075 (url "https://github.com/asharov/globber")
22076 (commit version)))
22077 (file-name (git-file-name name version))
22078 (sha256
22079 (base32
22080 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
22081 (build-system python-build-system)
22082 (home-page "https://github.com/asharov/globber")
22083 (synopsis "Library for string matching with glob patterns")
22084 (description
22085 "Globber is a Python library for matching file names against glob patterns.
22086 In contrast to other glob-matching libraries, it matches arbitrary strings and
22087 doesn't require the matched names to be existing files. In addition, it
22088 supports the globstar @code{**} operator to match an arbitrary number of
22089 path components.")
22090 (license license:asl2.0)))
22091
22092 (define-public python-git-hammer
22093 (package
22094 (name "python-git-hammer")
22095 (version "0.3.1")
22096 (source
22097 (origin
22098 (method git-fetch)
22099 (uri (git-reference
22100 (url "https://github.com/asharov/git-hammer")
22101 (commit version)))
22102 (file-name (git-file-name name version))
22103 (sha256
22104 (base32
22105 "0f9xlk86ijzpdj25hr1q4wcy8k72v3w470ngwm9mpdkfj8ng84wr"))))
22106 (build-system python-build-system)
22107 (arguments
22108 `(#:phases
22109 (modify-phases %standard-phases
22110 (add-after 'unpack 'patch-setup.py
22111 (lambda _
22112 (substitute* "setup.py"
22113 (("setup\\(")
22114 "setup(\n test_suite=\"test\",")))))))
22115 (propagated-inputs
22116 (list python-beautifultable
22117 python-dateutil
22118 python-gitpython
22119 python-globber
22120 python-matplotlib
22121 python-sqlalchemy
22122 python-sqlalchemy-utils))
22123 (home-page "https://github.com/asharov/git-hammer")
22124 (synopsis "Provide statistics for git repositories")
22125 (description
22126 "Git Hammer is a statistics tool for projects in git repositories.
22127 Its major feature is tracking the number of lines authored by each person for every
22128 commit, but it also includes some other useful statistics.")
22129 (license license:asl2.0)))
22130
22131 (define-public python-fusepy
22132 (package
22133 (name "python-fusepy")
22134 (version "2.0.4")
22135 (source
22136 (origin
22137 (method url-fetch)
22138 (uri (pypi-uri "fusepy" version))
22139 (sha256
22140 (base32
22141 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
22142 (build-system python-build-system)
22143 (arguments
22144 `(#:phases
22145 (modify-phases %standard-phases
22146 (add-before 'build 'set-library-file-name
22147 (lambda* (#:key inputs #:allow-other-keys)
22148 (let ((fuse (assoc-ref inputs "fuse")))
22149 (substitute* "fuse.py"
22150 (("find_library\\('fuse'\\)")
22151 (string-append "'" fuse "/lib/libfuse.so'")))
22152 #t))))))
22153 (propagated-inputs
22154 (list fuse))
22155 (home-page "https://github.com/fusepy/fusepy")
22156 (synopsis "Simple ctypes bindings for FUSE")
22157 (description "Python module that provides a simple interface to FUSE and
22158 MacFUSE. The binding is created using the standard @code{ctypes} library.")
22159 (license license:isc)))
22160
22161 (define-public python-fusepyng
22162 (package
22163 (name "python-fusepyng")
22164 (version "1.0.7")
22165 (source
22166 (origin
22167 (method url-fetch)
22168 (uri (pypi-uri "fusepyng" version))
22169 (sha256
22170 (base32
22171 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
22172 (build-system python-build-system)
22173 (arguments
22174 '(#:phases
22175 (modify-phases %standard-phases
22176 (add-after 'unpack 'set-libfuse-path
22177 (lambda* (#:key inputs #:allow-other-keys)
22178 (let ((fuse (assoc-ref inputs "fuse")))
22179 (substitute* "fusepyng.py"
22180 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
22181 (string-append "\"" fuse "/lib/libfuse.so\""))))
22182 #t)))))
22183 (inputs
22184 (list fuse))
22185 (propagated-inputs
22186 (list python-paramiko))
22187 (home-page "https://github.com/rianhunter/fusepyng")
22188 (synopsis "Simple ctypes bindings for FUSE")
22189 (description "@code{fusepyng} is a Python module that provides a simple
22190 interface to FUSE on various operating systems. It's just one file and is
22191 implemented using @code{ctypes}.")
22192 (license license:isc)))
22193
22194 (define-public python-update-checker
22195 (package
22196 (name "python-update-checker")
22197 (version "0.18.0")
22198 (source
22199 (origin
22200 (method url-fetch)
22201 (uri (pypi-uri "update-checker" version))
22202 (sha256
22203 (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
22204 (build-system python-build-system)
22205 (propagated-inputs (list python-requests))
22206 (native-inputs (list python-black python-flake8 python-pytest))
22207 (home-page "https://github.com/bboe/update_checker")
22208 (synopsis "Python module that will check for package updates")
22209 (description "This package provides a Python module that will check for
22210 package updates.")
22211 (license license:bsd-2)))
22212
22213 (define-public python-userspacefs
22214 (package
22215 (name "python-userspacefs")
22216 (version "2.0.5")
22217 (source
22218 (origin
22219 (method url-fetch)
22220 (uri (pypi-uri "userspacefs" version))
22221 (sha256
22222 (base32
22223 "0v0qkdwfc61s2yiq7d7amin93x5biypfmi9pfhf8yj1rdpx5yvsx"))))
22224 (build-system python-build-system)
22225 (propagated-inputs
22226 (list python-fusepyng))
22227 (home-page "https://github.com/rianhunter/userspacefs")
22228 (synopsis "User-space file systems for Python")
22229 (description
22230 "@code{userspacefs} is a library that allows you to easily write
22231 user-space file systems in Python.")
22232 (license license:gpl3+)))
22233
22234 (define-public python-stone
22235 (package
22236 (name "python-stone")
22237 (version "3.2.1")
22238 (source
22239 (origin
22240 (method url-fetch)
22241 (uri (pypi-uri "stone" version))
22242 (sha256
22243 (base32
22244 "0xby5mpsms7b2rv8j6mvxzmzz5i9ii01brb9ylxz6kiv2i08piwv"))))
22245 (build-system python-build-system)
22246 (arguments
22247 `(#:phases
22248 (modify-phases %standard-phases
22249 (add-after 'unpack 'change-version-requirements
22250 (lambda _
22251 ;; Match the requirement in test/requirements.txt
22252 (substitute* "setup.py"
22253 (("pytest < 5") "pytest < 7"))
22254 ;; We don't care about a coverage report.
22255 (substitute* "test/requirements.txt"
22256 (("coverage.*") "coverage\n"))))
22257 (replace 'check
22258 (lambda* (#:key tests? #:allow-other-keys)
22259 (when tests?
22260 ;; These tests don't import currectly.
22261 (delete-file "test/test_js_client.py")
22262 (delete-file "test/test_tsd_types.py")
22263 (delete-file "test/test_python_gen.py")
22264 (invoke "pytest")))))))
22265 (propagated-inputs
22266 (list python-ply python-six))
22267 (native-inputs
22268 (list python-coverage python-mock python-pytest python-pytest-runner))
22269 (home-page "https://github.com/dropbox/stone")
22270 (synopsis "Official Api Spec Language for Dropbox")
22271 (description
22272 "Stone is an interface description language (IDL) for APIs.")
22273 (license license:expat)))
22274
22275 (define-public pybind11
22276 (package
22277 (name "pybind11")
22278 (version "2.8.1")
22279 (source (origin
22280 (method git-fetch)
22281 (uri (git-reference
22282 (url "https://github.com/pybind/pybind11")
22283 (commit (string-append "v" version))))
22284 (sha256
22285 (base32
22286 "10hrkrh78sk7k0ydw1ghmp7gvpwmkby0l2s0kf2iaj9sz0vijkhs"))
22287 (file-name (git-file-name name version))))
22288 (build-system cmake-build-system)
22289 (native-inputs
22290 `(("python" ,python-wrapper)
22291
22292 ;; The following dependencies are used for tests.
22293 ("python-pytest" ,python-pytest)
22294 ("catch" ,catch-framework2-1)
22295 ("eigen" ,eigen)))
22296 (arguments
22297 `(#:configure-flags
22298 (list (string-append "-DCATCH_INCLUDE_DIR="
22299 (assoc-ref %build-inputs "catch")
22300 "/include/catch"))
22301
22302 #:phases (modify-phases %standard-phases
22303 (add-after 'install 'install-python
22304 (lambda* (#:key outputs #:allow-other-keys)
22305 (let ((out (assoc-ref outputs "out")))
22306 (with-directory-excursion "../source"
22307 (setenv "PYBIND11_USE_CMAKE" "yes")
22308 (invoke "python" "setup.py" "install"
22309 "--single-version-externally-managed"
22310 "--root=/"
22311 (string-append "--prefix=" out)))))))
22312
22313 #:test-target "check"))
22314 (home-page "https://github.com/pybind/pybind11/")
22315 (synopsis "Seamless operability between C++11 and Python")
22316 (description
22317 "@code{pybind11} is a lightweight header-only library that exposes C++
22318 types in Python and vice versa, mainly to create Python bindings of existing
22319 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
22320 library: to minimize boilerplate code in traditional extension modules by
22321 inferring type information using compile-time introspection.")
22322 (license license:bsd-3)))
22323
22324 (define-public python-pooch
22325 (package
22326 (name "python-pooch")
22327 (version "1.3.0")
22328 (source
22329 (origin
22330 (method url-fetch)
22331 (uri (pypi-uri "pooch" version))
22332 (sha256
22333 (base32 "1618adsg9r8fsv422sv35z1i723q3a1iir5v7dv2sklh4pl4im1h"))))
22334 (build-system python-build-system)
22335 (arguments
22336 `(#:tests? #f)) ;requires online data
22337 (propagated-inputs
22338 (list python-appdirs python-packaging python-requests))
22339 (home-page "https://github.com/fatiando/pooch")
22340 (synopsis "Manage your Python library's sample data files")
22341 (description
22342 "Pooch manages your Python library's sample data files: it automatically
22343 downloads and stores them in a local directory, with support for versioning
22344 and corruption checks.")
22345 (license license:bsd-3)))
22346
22347 (define-public python-fasteners
22348 (package
22349 (name "python-fasteners")
22350 (version "0.15")
22351 (source
22352 (origin
22353 (method url-fetch)
22354 (uri (pypi-uri "fasteners" version))
22355 (sha256
22356 (base32
22357 "1vzmz1xh38b84dv0f4hlp7arwmx8wjlih6lf964bpy8dnyk6s5rs"))))
22358 (build-system python-build-system)
22359 (propagated-inputs
22360 (list python-monotonic python-six))
22361 (native-inputs
22362 (list python-testtools))
22363 (home-page "https://github.com/harlowja/fasteners")
22364 (synopsis "Python package that provides useful locks")
22365 (description
22366 "This package provides a Python program that provides following locks:
22367
22368 @itemize
22369 @item Locking decorator
22370 @item Reader-writer locks
22371 @item Inter-process locks
22372 @item Generic helpers
22373 @end itemize\n")
22374 (license license:asl2.0)))
22375
22376 (define-public python-requests-file
22377 (package
22378 (name "python-requests-file")
22379 (version "1.5.1")
22380 (source
22381 (origin
22382 (method url-fetch)
22383 (uri (pypi-uri "requests-file" version))
22384 (sha256
22385 (base32 "13kx4k83i9zcv20h0fnmawwwdzhcmw1z97mqib1h379qsc445mq7"))))
22386 (build-system python-build-system)
22387 (arguments
22388 `(#:phases
22389 (modify-phases %standard-phases
22390 (replace 'check
22391 (lambda* (#:key tests? #:allow-other-keys)
22392 (when tests?
22393 (invoke "python" "tests/test_requests_file.py")))))))
22394 (propagated-inputs
22395 (list python-requests python-six))
22396 (home-page "https://github.com/dashea/requests-file")
22397 (synopsis "File transport adapter for Requests")
22398 (description
22399 "Requests-File is a transport adapter for use with the Requests Python
22400 library to allow local file system access via @code{file://} URLs.")
22401 (license license:asl2.0)))
22402
22403 (define-public python-identify
22404 (package
22405 (name "python-identify")
22406 (version "1.4.25")
22407 (source
22408 (origin
22409 ;; There are no tests in the PyPI tarball.
22410 (method git-fetch)
22411 (uri (git-reference
22412 (url "https://github.com/chriskuehl/identify")
22413 (commit (string-append "v" version))))
22414 (file-name (git-file-name name version))
22415 (sha256
22416 (base32 "1fqgci6skckcq0x5pnxh6k2qjzn1ndsrgha1j6wwv1ld4g9bd3hz"))))
22417 (build-system python-build-system)
22418 (arguments
22419 `(#:phases
22420 (modify-phases %standard-phases
22421 ;; system-error "utime" "~A" ("No such file or directory")
22422 (delete 'ensure-no-mtimes-pre-1980)
22423 (replace 'check
22424 (lambda* (#:key tests? #:allow-other-keys)
22425 (when tests?
22426 (invoke "pytest" "-vv")))))))
22427 (native-inputs
22428 (list python-coverage python-pytest))
22429 (propagated-inputs
22430 (list python-editdistance))
22431 (home-page "https://github.com/chriskuehl/identify")
22432 (synopsis "File identification library for Python")
22433 (description
22434 "@code{identify} is a file identification library for Python. Given
22435 a file (or some information about a file), return a set of standardized tags
22436 identifying what the file is.")
22437 (license license:expat)))
22438
22439 (define-public python-tldextract
22440 (package
22441 (name "python-tldextract")
22442 (version "3.3.0")
22443 (source
22444 (origin
22445 (method url-fetch)
22446 (uri (pypi-uri "tldextract" version))
22447 (sha256
22448 (base32
22449 "1wac4yvcpgqjvls770mfx165amvy7gr00nnd2w24bqqwyamj9kdd"))))
22450 (build-system python-build-system)
22451 (native-inputs
22452 (list python-pytest python-responses python-setuptools-scm))
22453 (propagated-inputs
22454 (list python-filelock python-idna python-requests python-requests-file))
22455 (home-page
22456 "https://github.com/john-kurkowski/tldextract")
22457 (synopsis
22458 "Separate the TLD from the registered domain and subdomains of a URL")
22459 (description
22460 "TLDExtract accurately separates the TLD from the registered domain and
22461 subdomains of a URL, using the Public Suffix List. By default, this includes
22462 the public ICANN TLDs and their exceptions. It can optionally support the
22463 Public Suffix List's private domains as well.")
22464 (license license:bsd-3)))
22465
22466 (define-public python-tldr
22467 (package
22468 (name "python-tldr")
22469 (version "3.1.0")
22470 (source
22471 (origin
22472 ;; There's no test in PyPI.
22473 (method git-fetch)
22474 (uri (git-reference
22475 (url "https://github.com/tldr-pages/tldr-python-client")
22476 (commit version)))
22477 (file-name (git-file-name name version))
22478 (sha256
22479 (base32 "1hxmprqg8c4cvs19n7f80f3y7jj74i8sc2dmq2gdjmsdrb54bbzc"))))
22480 (build-system python-build-system)
22481 (arguments
22482 (list #:phases
22483 #~(modify-phases %standard-phases
22484 (add-after 'build 'build-doc
22485 (lambda _
22486 (invoke "make" "-C" "docs")))
22487 (replace 'check
22488 (lambda* (#:key tests? #:allow-other-keys)
22489 (when tests?
22490 ;; This test fails. It tries to open a network socket.
22491 (invoke "pytest" "-vv" "-k" "not test_error_message")))))))
22492 (native-inputs
22493 (list python-pytest python-pytest-runner python-sphinx-argparse))
22494 (inputs
22495 (list python-argcomplete python-colorama python-termcolor python-shtab))
22496 (home-page "https://github.com/tldr-pages/tldr-python-client")
22497 (synopsis "Python command-line client for tldr pages")
22498 (description "This package provides the @code{tldr} command allowing users
22499 to view @code{tldr} pages from a shell. The @code{tldr} pages are a community
22500 effort to simplify the man pages with practical examples.")
22501 (license license:expat))) ; MIT license
22502
22503 (define-public python-nodeenv
22504 (package
22505 (name "python-nodeenv")
22506 (version "1.4.0")
22507 (source
22508 (origin
22509 ;; There's no tarball in PyPI.
22510 (method git-fetch)
22511 (uri (git-reference
22512 (url "https://github.com/ekalinin/nodeenv")
22513 (commit version)))
22514 (file-name (git-file-name name version))
22515 (sha256
22516 (base32 "0y443icx0w7jlzmxmmcm4q8dqfiwgafbb9cp8jpm68mbqxbz40a7"))))
22517 (build-system python-build-system)
22518 (arguments
22519 `(#:phases
22520 (modify-phases %standard-phases
22521 (replace 'check
22522 (lambda _
22523 ;; This test fails. It tries to open a network socket.
22524 (invoke "pytest" "-vv" "-k" "not test_smoke"))))))
22525 (native-inputs
22526 (list python-coverage python-mock python-pytest))
22527 (home-page "https://ekalinin.github.io/nodeenv/")
22528 (synopsis "Create isolated node.js environments")
22529 (description
22530 "Nodeenv (node.js virtual environment) is a tool to create isolated
22531 node.js environments. It creates an environment that has its own installation
22532 directories, that doesn't share libraries with other node.js virtual
22533 environments.")
22534 (license license:bsd-3)))
22535
22536 (define-public python-pynamecheap
22537 (package
22538 (name "python-pynamecheap")
22539 (version "0.0.3")
22540 (source
22541 (origin
22542 (method url-fetch)
22543 (uri (pypi-uri "PyNamecheap" version))
22544 (sha256
22545 (base32
22546 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
22547 (build-system python-build-system)
22548 (propagated-inputs
22549 (list python-requests))
22550 (home-page
22551 "https://github.com/Bemmu/PyNamecheap")
22552 (synopsis
22553 "Namecheap API client in Python")
22554 (description
22555 "PyNamecheap is a Namecheap API client in Python.")
22556 (license license:expat)))
22557
22558 (define-public python-dns-lexicon
22559 (package
22560 (name "python-dns-lexicon")
22561 (version "2.4.0")
22562 (source
22563 (origin
22564 (method url-fetch)
22565 (uri (pypi-uri "dns-lexicon" version))
22566 (sha256
22567 (base32
22568 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
22569 (build-system python-build-system)
22570 (arguments
22571 `(#:tests? #f)) ;requires internet access
22572 (propagated-inputs
22573 (list python-future python-pynamecheap python-requests
22574 python-tldextract python-urllib3))
22575 (home-page "https://github.com/AnalogJ/lexicon")
22576 (synopsis
22577 "Manipulate DNS records on various DNS providers")
22578 (description
22579 "Lexicon provides a way to manipulate DNS records on multiple DNS
22580 providers in a standardized way. It has a CLI but it can also be used as a
22581 Python library. It was designed to be used in automation, specifically with
22582 Let's Encrypt.")
22583 (license license:expat)))
22584
22585 (define-public python-cfgv
22586 (package
22587 (name "python-cfgv")
22588 (version "3.3.1")
22589 (source
22590 (origin
22591 ;; There are no tests in the PyPI tarball.
22592 (method git-fetch)
22593 (uri (git-reference
22594 (url "https://github.com/asottile/cfgv")
22595 (commit (string-append "v" version))))
22596 (file-name (git-file-name name version))
22597 (sha256
22598 (base32 "1pci97cmn3v45sfch9s3lshidrl0309ls9byidic0l8drkwnkwcj"))))
22599 (build-system python-build-system)
22600 (arguments
22601 `(#:phases
22602 (modify-phases %standard-phases
22603 (replace 'check
22604 (lambda* (#:key tests? #:allow-other-keys)
22605 (when tests?
22606 (invoke "pytest" "-vv")))))))
22607 (native-inputs
22608 (list python-pytest))
22609 (home-page "https://github.com/asottile/cfgv")
22610 (synopsis "Configuration validation library")
22611 (description
22612 "This library helps to validate configuration files and produce human
22613 readable error messages.")
22614 (license license:expat)))
22615
22616 (define-public python-commandlines
22617 (package
22618 (name "python-commandlines")
22619 (version "0.4.1")
22620 (source
22621 (origin
22622 (method url-fetch)
22623 (uri (pypi-uri "commandlines" version))
22624 (sha256
22625 (base32
22626 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
22627 (build-system python-build-system)
22628 (home-page "https://github.com/chrissimpkins/commandlines")
22629 (synopsis "Command line argument to object parsing library")
22630 (description
22631 "@code{Commandlines} is a Python library for command line application
22632 development that supports command line argument parsing, command string
22633 validation testing and application logic.")
22634 (license license:expat)))
22635
22636 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
22637 ;; python-numba. They have a very unflexible relationship.
22638 (define-public python-numba
22639 (package
22640 (name "python-numba")
22641 (version "0.55.1")
22642 (source
22643 (origin
22644 (method url-fetch)
22645 (uri (pypi-uri "numba" version))
22646 (sha256
22647 (base32
22648 "18rf8i32m1045zxglvicpgldvzmqdxqvs3dhjd7wilb64sd0ds83"))))
22649 (build-system python-build-system)
22650 (arguments
22651 `(#:phases
22652 (modify-phases %standard-phases
22653 (add-after 'unpack 'disable-proprietary-features
22654 (lambda _
22655 (setenv "NUMBA_DISABLE_HSA" "1")
22656 (setenv "NUMBA_DISABLE_CUDA" "1")))
22657 (add-after 'unpack 'disable-failing-tests
22658 (lambda _
22659 ;; This one test fails because a deprecation warning is printed.
22660 (substitute* "numba/tests/test_import.py"
22661 (("def test_no_accidental_warnings")
22662 "def disabled_test_no_accidental_warnings"))))
22663 (replace 'check
22664 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
22665 (when tests?
22666 (add-installed-pythonpath inputs outputs)
22667 ;; Something is wrong with the PYTHONPATH when running the
22668 ;; tests from the build directory, as it complains about not being
22669 ;; able to import certain modules.
22670 (with-directory-excursion "/tmp"
22671 (setenv "HOME" (getcwd))
22672 (invoke "python3" "-m" "numba.runtests" "-v" "-m"))))))))
22673 (propagated-inputs
22674 (list python-llvmlite python-numpy python-singledispatch))
22675 (native-inputs ;for tests
22676 (list python-jinja2 python-pygments))
22677 (home-page "https://numba.pydata.org")
22678 (synopsis "Compile Python code using LLVM")
22679 (description "Numba gives you the power to speed up your applications with
22680 high performance functions written directly in Python. With a few
22681 annotations, array-oriented and math-heavy Python code can be just-in-time
22682 compiled to native machine instructions, similar in performance to C, C++ and
22683 Fortran, without having to switch languages or Python interpreters.
22684
22685 Numba works by generating optimized machine code using the LLVM compiler
22686 infrastructure at import time, runtime, or statically (using the included pycc
22687 tool).")
22688 (license license:bsd-3)))
22689
22690 (define-public python-numcodecs
22691 (package
22692 (name "python-numcodecs")
22693 (version "0.6.4")
22694 (source
22695 (origin
22696 (method url-fetch)
22697 (uri (pypi-uri "numcodecs" version))
22698 (sha256
22699 (base32
22700 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))
22701 (modules '((guix build utils)))
22702 (snippet
22703 '(begin
22704 (delete-file-recursively "c-blosc")
22705 (for-each delete-file '("numcodecs/blosc.c"
22706 "numcodecs/compat_ext.c"
22707 "numcodecs/lz4.c"
22708 "numcodecs/vlen.c"
22709 "numcodecs/zstd.c"))))))
22710 (build-system python-build-system)
22711 (arguments
22712 `(#:tests? #false ; TODO: unclear why numcodecs.* are not found
22713 #:phases
22714 (modify-phases %standard-phases
22715 (add-after 'unpack 'disable-avx2
22716 (lambda _
22717 (setenv "DISABLE_NUMCODECS_AVX2" "1")))
22718 (add-after 'unpack 'unbundle
22719 (lambda _
22720 (substitute* "setup.py"
22721 (("sources=sources \\+ blosc_sources,")
22722 "sources=sources,")
22723 (("extra_compile_args=extra_compile_args")
22724 "extra_compile_args=list(base_compile_args)")
22725 (("'numcodecs.zstd',")
22726 "'numcodecs.zstd', libraries=['zstd'], ")
22727 (("'numcodecs.lz4',")
22728 "'numcodecs.lz4', libraries=['lz4'], ")
22729 (("'numcodecs.blosc',")
22730 "'numcodecs.blosc', libraries=['blosc'], "))))
22731 (replace 'check
22732 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
22733 (when tests?
22734 (add-installed-pythonpath inputs outputs)
22735 (invoke "pytest" "-vv")))))))
22736 (inputs
22737 (list c-blosc lz4 zlib
22738 `(,zstd "lib")))
22739 (propagated-inputs
22740 (list python-numpy python-msgpack))
22741 (native-inputs
22742 (list python-cython python-pytest python-setuptools-scm))
22743 (home-page "https://github.com/zarr-developers/numcodecs")
22744 (synopsis "Buffer compression and transformation codecs")
22745 (description
22746 "This Python package provides buffer compression and transformation
22747 codecs for use in data storage and communication applications.")
22748 (license license:expat)))
22749
22750 (define-public python-asciitree
22751 (package
22752 (name "python-asciitree")
22753 (version "0.3.3")
22754 (source
22755 (origin
22756 (method url-fetch)
22757 (uri (pypi-uri "asciitree" version))
22758 (sha256
22759 (base32
22760 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
22761 (build-system python-build-system)
22762 (home-page "https://github.com/mbr/asciitree")
22763 (synopsis "Draws ASCII trees")
22764 (description "This package draws tree structures using characters.")
22765 (license license:expat)))
22766
22767 (define-public python-zarr
22768 (package
22769 (name "python-zarr")
22770 (version "2.4.0")
22771 (source
22772 (origin
22773 (method url-fetch)
22774 (uri (pypi-uri "zarr" version))
22775 (sha256
22776 (base32
22777 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
22778 (build-system python-build-system)
22779 (arguments
22780 `(#:phases
22781 (modify-phases %standard-phases
22782 (add-after 'unpack 'disable-service-tests
22783 (lambda _
22784 (setenv "ZARR_TEST_ABS" "0")
22785 (setenv "ZARR_TEST_MONGO" "0")
22786 (setenv "ZARR_TEST_REDIS" "0")
22787 #t))
22788 (replace 'check
22789 (lambda _
22790 (invoke "pytest" "-vv" "-k" "not lmdb")
22791 #t)))))
22792 (propagated-inputs
22793 (list python-asciitree python-fasteners python-numcodecs
22794 python-numpy))
22795 (native-inputs
22796 (list python-pytest python-setuptools-scm))
22797 (home-page "https://github.com/zarr-developers/zarr-python")
22798 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
22799 (description
22800 "This package provides an implementation of chunked, compressed,
22801 N-dimensional arrays for Python.")
22802 (license license:expat)))
22803
22804 (define-public python-anndata
22805 (package
22806 (name "python-anndata")
22807 (version "0.8.0")
22808 (source
22809 (origin
22810 ;; The tarball from PyPi doesn't include tests.
22811 (method git-fetch)
22812 (uri (git-reference
22813 (url "https://github.com/theislab/anndata")
22814 (commit version)))
22815 (file-name (git-file-name name version))
22816 (sha256
22817 (base32
22818 "0v7npqrg1rdm8jzw22a45c0mqrmsv05r3k88i3lhzi0pzzxca1i1"))))
22819 (build-system python-build-system)
22820 (arguments
22821 `(#:phases
22822 (modify-phases %standard-phases
22823 (delete 'check)
22824 (replace 'build
22825 (lambda _
22826 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version)
22827 (substitute* "anndata/_metadata.py"
22828 (("__version__ =.*")
22829 (string-append "__version__ = \"" ,version "\"\n")))
22830 ;; ZIP does not support timestamps before 1980.
22831 (setenv "SOURCE_DATE_EPOCH" "315532800")
22832 (invoke "flit" "build")))
22833 (replace 'install
22834 (lambda* (#:key inputs outputs #:allow-other-keys)
22835 (add-installed-pythonpath inputs outputs)
22836 (let ((out (assoc-ref outputs "out")))
22837 (for-each (lambda (wheel)
22838 (format #true wheel)
22839 (invoke "python" "-m" "pip" "install"
22840 wheel (string-append "--prefix=" out)))
22841 (find-files "dist" "\\.whl$"))))))))
22842 (propagated-inputs
22843 (list python-h5py
22844 python-importlib-metadata
22845 python-natsort
22846 python-numcodecs
22847 python-packaging
22848 python-pandas
22849 python-scipy
22850 python-zarr))
22851 (native-inputs
22852 (list python-joblib python-pytest python-toml python-flit
22853 python-setuptools-scm))
22854 (home-page "https://github.com/theislab/anndata")
22855 (synopsis "Annotated data for data analysis pipelines")
22856 (description "Anndata is a package for simple (functional) high-level APIs
22857 for data analysis pipelines. In this context, it provides an efficient,
22858 scalable way of keeping track of data together with learned annotations and
22859 reduces the code overhead typically encountered when using a mostly
22860 object-oriented library such as @code{scikit-learn}.")
22861 (license license:bsd-3)))
22862
22863 (define-public python-dill
22864 (package
22865 (name "python-dill")
22866 (version "0.3.5.1")
22867 (source
22868 (origin
22869 (method url-fetch)
22870 (uri (pypi-uri "dill" version))
22871 (sha256
22872 (base32 "11lc40x37cx2i8qqbc5qklifm65dyjl6prrqsycybvpixzrl2pnp"))))
22873 (build-system python-build-system)
22874 (arguments
22875 `(#:phases
22876 (modify-phases %standard-phases
22877 (replace 'check
22878 (lambda _
22879 (with-directory-excursion "/tmp"
22880 (invoke "nosetests" "-v"))
22881 #t)))))
22882 (native-inputs
22883 (list python-nose))
22884 (home-page "https://pypi.org/project/dill/")
22885 (synopsis "Serialize all of Python")
22886 (description "Dill extends Python's @code{pickle} module for serializing
22887 and de-serializing Python objects to the majority of the built-in Python
22888 types. Dill provides the user the same interface as the @code{pickle} module,
22889 and also includes some additional features. In addition to pickling Python
22890 objects, @code{dill} provides the ability to save the state of an interpreter
22891 session in a single command. Hence, it would be feasible to save a
22892 interpreter session, close the interpreter, ship the pickled file to another
22893 computer, open a new interpreter, unpickle the session and thus continue from
22894 the saved state of the original interpreter session.")
22895 (license license:bsd-3)))
22896
22897 (define-public python-multiprocess
22898 (package
22899 (name "python-multiprocess")
22900 (version "0.70.9")
22901 (source
22902 (origin
22903 (method url-fetch)
22904 (uri (pypi-uri "multiprocess" version))
22905 (sha256
22906 (base32
22907 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
22908 (build-system python-build-system)
22909 (arguments
22910 `(#:phases
22911 (modify-phases %standard-phases
22912 (add-after 'unpack 'disable-broken-tests
22913 (lambda _
22914 ;; This test is broken as there is no keyboard interrupt.
22915 (substitute* "py3.7/multiprocess/tests/__init__.py"
22916 (("^(.*)def test_wait_result"
22917 line indent)
22918 (string-append indent
22919 "@unittest.skip(\"Disabled by Guix\")\n"
22920 line)))
22921 #t))
22922 ;; Tests must be run after installation.
22923 (delete 'check)
22924 (add-after 'install 'check
22925 (lambda* (#:key inputs outputs #:allow-other-keys)
22926 (add-installed-pythonpath inputs outputs)
22927 (invoke "python" "-m" "multiprocess.tests")
22928 #t)))))
22929 (propagated-inputs
22930 (list python-dill))
22931 (home-page "https://pypi.org/project/multiprocess/")
22932 (synopsis "Multiprocessing and multithreading in Python")
22933 (description
22934 "This package is a fork of the multiprocessing Python package, a package
22935 which supports the spawning of processes using the API of the standard
22936 library's @code{threading} module.")
22937 (license license:bsd-3)))
22938
22939 (define-public python-multiprocessing-on-dill
22940 (package
22941 (name "python-multiprocessing-on-dill")
22942 (version "3.5.0a4")
22943 (source (origin
22944 (method url-fetch)
22945 (uri (pypi-uri "multiprocessing_on_dill" version))
22946 (sha256
22947 (base32
22948 "1rs5a3hx1fcpfsxxkl5kx6g06c82wqjqgdqyny5l1ggl1wq0rmfn"))))
22949 (build-system python-build-system)
22950 (arguments
22951 (list
22952 #:phases
22953 #~(modify-phases %standard-phases
22954 (replace 'check
22955 (lambda* (#:key tests? #:allow-other-keys)
22956 (when tests?
22957 (invoke "pytest" "-vv")))))))
22958 (propagated-inputs (list python-dill))
22959 (native-inputs (list python-check-manifest python-pytest python-wheel))
22960 (home-page "https://github.com/sixty-north/multiprocessing_on_dill")
22961 (synopsis "Multiprocessing using dill instead of pickle")
22962 (description
22963 "This package provides a friendly fork of multiprocessing which uses dill
22964 instead of pickle.")
22965 (license license:psfl)))
22966
22967 (define-public python-toolrack
22968 (package
22969 (name "python-toolrack")
22970 (version "3.0.1")
22971 (source
22972 (origin
22973 (method git-fetch)
22974 (uri (git-reference
22975 (url "https://github.com/albertodonato/toolrack")
22976 (commit (string-append "v" version))))
22977 (file-name (git-file-name name version))
22978 (sha256
22979 (base32
22980 "0ych11b7nchnkhqgf7dgivbvn2lzafjsi7nhb1an5zjjyns39gpx"))))
22981 (build-system python-build-system)
22982 (arguments
22983 (list
22984 #:phases
22985 #~(modify-phases %standard-phases
22986 (add-after 'unpack 'patch-/bin/sh
22987 (lambda _
22988 (substitute* "toolrack/aio/tests/test_process.py"
22989 (("/bin/sh")
22990 (which "sh")))))
22991 (replace 'check
22992 (lambda* (#:key tests? #:allow-other-keys)
22993 (when tests?
22994 (invoke "pytest" "-vv" "--pyargs" "toolrack"
22995 "-k"
22996 (string-append
22997 ;; These tests fail for unknown reason comparing the
22998 ;; expected output of shell scripts.
22999 "not test_parse_stderr "
23000 "and not test_parse_no_ending_newline "
23001 "and not test_parse_stdout"))))))))
23002 (native-inputs (list python-pytest python-pytest-asyncio
23003 python-pytest-mock))
23004 (home-page "https://github.com/albertodonato/toolrack")
23005 (synopsis "Collection of Python utility functions and classes")
23006 (description "This package provides a collection of miscellaneous utility
23007 functions and classes.")
23008 (license license:lgpl3+)))
23009
23010 (define-public python-toolz
23011 (package
23012 (name "python-toolz")
23013 (version "0.11.2")
23014 (source
23015 (origin
23016 (method url-fetch)
23017 (uri (pypi-uri "toolz" version))
23018 (sha256
23019 (base32
23020 "0cxwlh8dz8gq0l0bzchjnqqwhdp261nfd958ppqm518k2mg2scbb"))))
23021 (build-system python-build-system)
23022 (arguments
23023 `(#:phases
23024 (modify-phases %standard-phases
23025 (replace 'check
23026 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
23027 (when tests?
23028 (add-installed-pythonpath inputs outputs)
23029 (invoke "python" "-m" "pytest" "--doctest-modules"
23030 "--pyargs" "toolz")))))))
23031 (native-inputs
23032 (list python-pytest))
23033 (home-page "https://github.com/pytoolz/toolz/")
23034 (synopsis "List processing tools and functional utilities")
23035 (description
23036 "This package provides a set of utility functions for iterators,
23037 functions, and dictionaries.")
23038 (license license:bsd-3)))
23039
23040 (define-public python-cytoolz
23041 (package
23042 (name "python-cytoolz")
23043 (version "0.11.2")
23044 (source
23045 (origin
23046 (method url-fetch)
23047 (uri (pypi-uri "cytoolz" version))
23048 (sha256
23049 (base32
23050 "1d12mgaippxxhn24w2hj0my3aqkx80fks5g4wzfdsvl0acqnc8za"))
23051 (modules '((guix build utils)))
23052 (snippet
23053 '(for-each delete-file (find-files "cytoolz" "\\.c$")))))
23054 (build-system python-build-system)
23055 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
23056 ;; 'exceptions'"
23057 (arguments '(#:tests? #f))
23058 (propagated-inputs
23059 (list python-toolz))
23060 (native-inputs
23061 (list python-cython))
23062 (home-page "https://github.com/pytoolz/cytoolz")
23063 (synopsis "High performance functional utilities")
23064 (description
23065 "The cytoolz package implements the same API as provided by toolz. The
23066 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
23067 that is accessible to other projects developed in Cython.")
23068 (license license:bsd-3)))
23069
23070 (define-public python-sortedcollections
23071 (package
23072 (name "python-sortedcollections")
23073 (version "2.1.0")
23074 (source
23075 (origin
23076 (method url-fetch)
23077 (uri (pypi-uri "sortedcollections" version))
23078 (sha256
23079 (base32
23080 "1kfabpnjyjm5ml2zspry9jy3xq49aybchgaa4ahic2jqdjfn1sfq"))))
23081 (build-system python-build-system)
23082 (propagated-inputs
23083 (list python-sortedcontainers))
23084 (arguments '(#:tests? #f)) ; Tests not included in release tarball.
23085 (home-page "http://www.grantjenks.com/docs/sortedcollections/")
23086 (synopsis "Python Sorted Collections")
23087 (description "Sorted Collections is a Python sorted collections library.")
23088 (license license:asl2.0)))
23089
23090 (define-public python-sortedcontainers
23091 (package
23092 (name "python-sortedcontainers")
23093 (version "2.1.0")
23094 (source
23095 (origin
23096 (method url-fetch)
23097 (uri (pypi-uri "sortedcontainers" version))
23098 (sha256
23099 (base32
23100 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
23101 (build-system python-build-system)
23102 (arguments
23103 ;; FIXME: Tests require many extra dependencies, and would introduce
23104 ;; a circular dependency on hypothesis, which uses this package.
23105 '(#:tests? #f))
23106 (propagated-inputs
23107 `(("python-appdirs" ,python-appdirs)
23108 ("python-distlib" ,python-distlib)
23109 ("python-filelock" ,python-filelock)
23110 ("python-six" ,python-six-bootstrap)))
23111 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
23112 (synopsis "Sorted List, Sorted Dict, Sorted Set")
23113 (description
23114 "This package provides a sorted collections library, written in
23115 pure-Python.")
23116 (license license:asl2.0)))
23117
23118 (define python-cloudpickle-testpkg
23119 (package
23120 (name "python-cloudpickle-testpkg")
23121 (version "1.6.0")
23122 (source
23123 (origin
23124 ;; Archive on pypi does not include test infrastructure.
23125 (method git-fetch)
23126 (uri (git-reference
23127 (url "https://github.com/cloudpipe/cloudpickle")
23128 (commit (string-append "v" version))))
23129 (file-name (git-file-name name version))
23130 (sha256
23131 (base32
23132 "1584d21d4rcpryn8yfz0pjnjprk4zm367m0razdcz8cjbsh0dxp6"))))
23133 (build-system python-build-system)
23134 (arguments
23135 '(#:phases
23136 (modify-phases %standard-phases
23137 (add-after 'unpack 'chdir
23138 (lambda _ (chdir "tests/cloudpickle_testpkg"))))))
23139 (home-page "https://github.com/cloudpipe/cloudpickle")
23140 (synopsis "Extended pickling support for Python objects")
23141 (description
23142 "Cloudpickle makes it possible to serialize Python constructs not
23143 supported by the default pickle module from the Python standard library. It
23144 is especially useful for cluster computing where Python expressions are
23145 shipped over the network to execute on remote hosts, possibly close to the
23146 data.")
23147 (license license:bsd-3)))
23148
23149 (define-public python-cloudpickle
23150 (package
23151 (inherit python-cloudpickle-testpkg)
23152 (name "python-cloudpickle")
23153 (build-system python-build-system)
23154 (arguments
23155 '(#:phases
23156 (modify-phases %standard-phases
23157 (replace 'check
23158 (lambda* (#:key tests? #:allow-other-keys)
23159 (if tests?
23160 (invoke "pytest" "-s" "-vv")
23161 (format #t "test suite not run~%")))))))
23162 (native-inputs
23163 (list ;; For tests.
23164 python-cloudpickle-testpkg python-psutil python-pytest
23165 python-tornado-6))
23166 (home-page "https://github.com/cloudpipe/cloudpickle")
23167 (synopsis "Extended pickling support for Python objects")
23168 (description
23169 "Cloudpickle makes it possible to serialize Python constructs not
23170 supported by the default pickle module from the Python standard library. It
23171 is especially useful for cluster computing where Python expressions are
23172 shipped over the network to execute on remote hosts, possibly close to the
23173 data.")
23174 (license license:bsd-3)))
23175
23176 (define-public python-locket
23177 (package
23178 (name "python-locket")
23179 (version "1.0.0")
23180 (source
23181 (origin
23182 (method url-fetch)
23183 (uri (pypi-uri "locket" version))
23184 (sha256
23185 (base32
23186 "0cm6290zm3ba62n2x2piy3s8d41hrmffda2nw18ggfwb582lq3aw"))))
23187 (build-system python-build-system)
23188 (home-page "https://github.com/mwilliamson/locket.py")
23189 (synopsis "File-based locks for Python")
23190 (description
23191 "Locket implements a lock that can be used by multiple processes provided
23192 they use the same path.")
23193 (license license:bsd-2)))
23194
23195 (define-public python-blosc
23196 (package
23197 (name "python-blosc")
23198 (version "1.5.1")
23199 (source
23200 (origin
23201 (method url-fetch)
23202 (uri (pypi-uri "blosc" version))
23203 (sha256
23204 (base32
23205 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
23206 (build-system python-build-system)
23207 ;; FIXME: all tests pass, but then this error is printed:
23208 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
23209 (arguments '(#:tests? #f))
23210 (propagated-inputs
23211 (list python-numpy))
23212 (home-page "https://github.com/blosc/python-blosc")
23213 (synopsis "Python wrapper for the Blosc data compressor library")
23214 (description "Blosc is a high performance compressor optimized for binary
23215 data. It has been designed to transmit data to the processor cache faster
23216 than the traditional, non-compressed, direct memory fetch approach via a
23217 @code{memcpy()} system call.
23218
23219 Blosc works well for compressing numerical arrays that contains data with
23220 relatively low entropy, like sparse data, time series, grids with
23221 regular-spaced values, etc.
23222
23223 This Python package wraps the Blosc library.")
23224 (license license:bsd-3)))
23225
23226 (define-public python-partd
23227 (package
23228 (name "python-partd")
23229 (version "1.2.0")
23230 (source
23231 (origin
23232 (method url-fetch)
23233 (uri (pypi-uri "partd" version))
23234 (sha256
23235 (base32
23236 "1sy3vdfyyx3bc5590zb7gwpsmimqz8m992x9hsydq8nmhixqjrxa"))))
23237 (build-system python-build-system)
23238 (propagated-inputs
23239 (list python-blosc
23240 python-locket
23241 python-numpy
23242 python-pandas
23243 python-pyzmq
23244 python-toolz))
23245 (home-page "https://github.com/dask/partd/")
23246 (synopsis "Appendable key-value storage")
23247 (description "Partd stores key-value pairs. Values are raw bytes. We
23248 append on old values. Partd excels at shuffling operations.")
23249 (license license:bsd-3)))
23250
23251 (define-public python-fsspec
23252 (package
23253 (name "python-fsspec")
23254 (version "2022.5.0")
23255 (source
23256 (origin
23257 (method url-fetch)
23258 (uri (pypi-uri "fsspec" version))
23259 (sha256
23260 (base32
23261 "1d43qiz8g395042a52yswz6j7q41gvrv3k53wvxn1rs4bk3mjm3s"))))
23262 (build-system python-build-system)
23263 (arguments '(#:tests? #f)) ; there are none
23264 (home-page "https://github.com/intake/filesystem_spec")
23265 (synopsis "File-system specification")
23266 (description "The purpose of this package is to produce a template or
23267 specification for a file-system interface, that specific implementations
23268 should follow, so that applications making use of them can rely on a common
23269 behavior and not have to worry about the specific internal implementation
23270 decisions with any given backend.")
23271 (license license:bsd-3)))
23272
23273 ;; Note: Remember to update python-distributed when updating dask.
23274 (define-public python-dask
23275 (package
23276 (name "python-dask")
23277 (version "2022.05.2")
23278 (source
23279 (origin
23280 (method git-fetch)
23281 (uri (git-reference
23282 (url "https://github.com/dask/dask/")
23283 (commit "8db1597c9745543df3129399bead5fbc95a54571")))
23284 (file-name (git-file-name name version))
23285 (sha256
23286 (base32 "1xfk3wml972z502w5ii5mn03ls3rg5p4hqgl0hkicgpmzlyz9kph"))
23287 (snippet
23288 ;; Delete generated copy of python-versioneer. We recreate it below.
23289 '(delete-file "versioneer.py"))))
23290 (build-system python-build-system)
23291 (arguments
23292 `(#:phases
23293 (modify-phases %standard-phases
23294 (add-after 'unpack 'versioneer
23295 (lambda _
23296 (invoke "versioneer" "install")))
23297 (replace 'check
23298 (lambda* (#:key tests? #:allow-other-keys)
23299 (when tests? (invoke "pytest" "-vv")))))))
23300 (propagated-inputs
23301 (list python-cloudpickle
23302 python-fsspec
23303 python-numpy
23304 python-packaging
23305 python-pandas
23306 python-partd
23307 python-toolz
23308 python-pyyaml))
23309 (native-inputs
23310 (list python-pytest python-pytest-runner python-pytest-rerunfailures
23311 python-versioneer))
23312 (home-page "https://github.com/dask/dask/")
23313 (synopsis "Parallel computing with task scheduling")
23314 (description
23315 "Dask is a flexible parallel computing library for analytics. It
23316 consists of two components: dynamic task scheduling optimized for computation,
23317 and large data collections like parallel arrays, dataframes, and lists that
23318 extend common interfaces like NumPy, Pandas, or Python iterators to
23319 larger-than-memory or distributed environments. These parallel collections
23320 run on top of the dynamic task schedulers.")
23321 (license license:bsd-3)))
23322
23323 (define-public python-ilinkedlist
23324 (package
23325 (name "python-ilinkedlist")
23326 (version "0.4.0")
23327 (source
23328 (origin
23329 (method url-fetch)
23330 (uri (pypi-uri "ilinkedlist" version))
23331 (sha256
23332 (base32
23333 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
23334 (build-system python-build-system)
23335 (native-inputs (list python-pytest))
23336 (inputs (list python))
23337 (home-page "https://github.com/luther9/ilinkedlist-py")
23338 (synopsis "Immutable linked list library")
23339 (description
23340 "This is a implementation of immutable linked lists for Python. It
23341 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
23342 Since a linked list is treated as immutable, it is hashable, and its length
23343 can be retrieved in constant time. Some of the terminology is inspired by
23344 LISP. It is possible to create an improper list by creating a @code{Pair}
23345 with a non-list @code{cdr}.")
23346 (license license:gpl3+)))
23347
23348 (define-public python-readlike
23349 (package
23350 (name "python-readlike")
23351 (version "0.1.3")
23352 (source
23353 (origin
23354 (method url-fetch)
23355 (uri (pypi-uri "readlike" version))
23356 (sha256
23357 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
23358 (build-system python-build-system)
23359 (home-page "https://github.com/jangler/readlike")
23360 (synopsis "GNU Readline-like line editing module")
23361 (description
23362 "This Python module provides line editing functions similar to the default
23363 Emacs-style ones of GNU Readline. Unlike the Python standard library's
23364 @code{readline} package, this one allows access to those capabilities in settings
23365 outside of a standard command-line interface. It is especially well-suited to
23366 interfacing with Urwid, due to a shared syntax for describing key inputs.
23367
23368 Currently, all stateless Readline commands are implemented. Yanking and history
23369 are not supported.")
23370 (license license:expat)))
23371
23372 (define-public python-reparser
23373 (package
23374 (name "python-reparser")
23375 (version "1.4.3")
23376 (source
23377 (origin
23378 (method url-fetch)
23379 (uri (pypi-uri "ReParser" version))
23380 (sha256
23381 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
23382 (build-system python-build-system)
23383 (home-page "https://github.com/xmikos/reparser")
23384 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
23385 (description
23386 "This Python library provides a simple lexer/parser for inline markup based
23387 on regular expressions.")
23388 (license license:expat)))
23389
23390 (define-public python-retrying
23391 (package
23392 (name "python-retrying")
23393 (version "1.3.3")
23394 (source
23395 (origin
23396 (method git-fetch)
23397 (uri (git-reference
23398 (url "https://github.com/rholder/retrying")
23399 (commit (string-append "v" version))))
23400 (file-name (git-file-name name version))
23401 (sha256
23402 (base32
23403 "1kqipkbdaw5s1xg0gi29awm03vp1x8dz24pjidgxagvkvrjpzhi7"))))
23404 (build-system python-build-system)
23405 (propagated-inputs
23406 (list python-six))
23407 (home-page "https://github.com/rholder/retrying")
23408 (synopsis "Library for adding retry behavior")
23409 (description "Retrying is a general-purpose retrying library to simplify
23410 the task of adding retry behavior to just about anything.
23411
23412 Features:
23413
23414 @itemize
23415 @item Generic Decorator API.
23416 @item Specify stop condition (i.e. limit by number of attempts).
23417 @item Specify wait condition (i.e. exponential backoff sleeping between attempts).
23418 @item Customize retrying on Exceptions.
23419 @item Customize retrying on expected returned result.
23420 @end itemize")
23421 (license license:asl2.0)))
23422
23423 (define-public python-pre-commit
23424 (package
23425 (name "python-pre-commit")
23426 (version "2.10.0")
23427 (source
23428 (origin
23429 (method url-fetch)
23430 (uri (pypi-uri "pre_commit" version))
23431 (sha256
23432 (base32 "1ycf6wpxrhxhdzz0vpryhbdxlwik5khgcvp3hxwvfr447a6k84zl"))))
23433 (build-system python-build-system)
23434 (arguments
23435 ;; Tests fail with "AttributeError: module 'pre_commit.resources' has no
23436 ;; attribute 'empty_template_setup'".
23437 `(#:tests? #false))
23438 (propagated-inputs
23439 (list python-cfgv
23440 python-identify
23441 python-importlib-metadata
23442 python-nodeenv
23443 python-pyyaml
23444 python-toml
23445 python-virtualenv))
23446 (home-page "https://github.com/pre-commit/pre-commit")
23447 (synopsis "Framework for managing multi-language pre-commit hooks")
23448 (description
23449 "This package provides a framework for managing and maintaining
23450 multi-language pre-commit hooks.")
23451 (license license:expat)))
23452
23453 (define-public python-precis-i18n
23454 (package
23455 (name "python-precis-i18n")
23456 (version "1.0.3")
23457 (source
23458 (origin
23459 (method url-fetch)
23460 (uri (pypi-uri "precis_i18n" version))
23461 (sha256
23462 (base32
23463 "1qfb78zpx565vqkg0xhx75pna9sc35m370vpcz82982c8ix3ypyz"))))
23464 (build-system python-build-system)
23465 (home-page "https://github.com/byllyfish/precis_i18n")
23466 (synopsis "Implementation of the PRECIS framework")
23467 (description
23468 "This module implements the PRECIS Framework as described in RFC 8264,
23469 RFC 8265 and RFC 8266.")
23470 (license license:expat)))
23471
23472 (define-public python-absl-py
23473 (package
23474 (name "python-absl-py")
23475 (version "0.6.1")
23476 (source
23477 (origin
23478 (method url-fetch)
23479 (uri (pypi-uri "absl-py" version))
23480 (sha256
23481 (base32
23482 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
23483 (build-system python-build-system)
23484 (propagated-inputs
23485 (list python-six))
23486 (home-page "https://github.com/abseil/abseil-py")
23487 (synopsis "Abseil Python common libraries")
23488 (description
23489 "This package provides the Abseil Python Common Libraries, a collection
23490 of Python libraries for building Python applications.")
23491 (license license:asl2.0)))
23492
23493 (define-public python-astor
23494 (package
23495 (name "python-astor")
23496 (version "0.8.1")
23497 (source
23498 (origin
23499 (method url-fetch)
23500 (uri (pypi-uri "astor" version))
23501 (sha256
23502 (base32
23503 "0ppscdzzvxpznclkmhhj53iz314x3pfv4yc7c6gwxqgljgdgyvka"))))
23504 (build-system python-build-system)
23505 ;; FIXME: There are two errors and two test failures.
23506 (arguments `(#:tests? #f))
23507 (home-page "https://github.com/berkerpeksag/astor")
23508 (synopsis "Read and write Python ASTs")
23509 (description "Astor is designed to allow easy manipulation of Python
23510 source via the Abstract Syntax Tree.")
23511 (license license:bsd-3)))
23512
23513 (define-public python-astunparse
23514 (package
23515 (name "python-astunparse")
23516 (version "1.6.2")
23517 (source
23518 (origin
23519 (method url-fetch)
23520 (uri (pypi-uri "astunparse" version))
23521 (sha256
23522 (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
23523 (build-system python-build-system)
23524 (arguments '(#:tests? #f)) ; there are none
23525 (propagated-inputs
23526 (list python-six python-wheel))
23527 (home-page "https://github.com/simonpercivall/astunparse")
23528 (synopsis "AST unparser for Python")
23529 (description "This package provides an AST unparser for Python. It is a
23530 factored out version of @code{unparse} found in the Python source
23531 distribution.")
23532 (license license:bsd-3)))
23533
23534 (define-public python-gast
23535 (package
23536 (name "python-gast")
23537 (version "0.5.2")
23538 (source
23539 (origin
23540 (method url-fetch)
23541 (uri (pypi-uri "gast" version))
23542 (sha256
23543 (base32 "1xv77kzghiqfm4fnvlv0p878ma152dvcfkly3jij89lqigxcw7zq"))))
23544 (build-system python-build-system)
23545 (propagated-inputs
23546 (list python-astunparse))
23547 (home-page "https://pypi.org/project/gast/")
23548 (synopsis "Generic Python AST that abstracts the underlying Python version")
23549 (description
23550 "GAST provides a compatibility layer between the AST of various Python
23551 versions, as produced by @code{ast.parse} from the standard @code{ast}
23552 module.")
23553 (license license:bsd-3)))
23554
23555 (define-public python-wikidata
23556 (package
23557 (name "python-wikidata")
23558 (version "0.6.1")
23559 (source
23560 (origin
23561 (method url-fetch)
23562 (uri (pypi-uri "Wikidata" version))
23563 (sha256
23564 (base32
23565 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
23566 (build-system python-build-system)
23567 (propagated-inputs
23568 (list python-babel))
23569 (home-page "https://github.com/dahlia/wikidata")
23570 (synopsis "Wikidata client library")
23571 (description
23572 "This package provides a Python interface to
23573 @url{https://www.wikidata.org/, Wikidata}.")
23574 (properties '((upstream-name . "Wikidata")))
23575 (license license:gpl3+)))
23576
23577 (define-public python-doctest-ignore-unicode
23578 (package
23579 (name "python-doctest-ignore-unicode")
23580 (version "0.1.2")
23581 (source
23582 (origin
23583 (method url-fetch)
23584 (uri (pypi-uri "doctest-ignore-unicode" version))
23585 (sha256
23586 (base32
23587 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
23588 (build-system python-build-system)
23589 (native-inputs
23590 (list python-nose))
23591 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
23592 (synopsis "Ignore Unicode literal prefixes in doctests")
23593 (description
23594 "This package adds support for a flag to ignore Unicode literal prefixes
23595 in doctests.")
23596 (license license:asl2.0)))
23597
23598 (define-public python-attr
23599 (package
23600 (name "python-attr")
23601 (version "0.3.1")
23602 (source
23603 (origin
23604 (method url-fetch)
23605 (uri (pypi-uri "attr" version))
23606 (sha256
23607 (base32
23608 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
23609 (build-system python-build-system)
23610 (home-page "https://github.com/denis-ryzhkov/attr")
23611 (synopsis "Decorator for attributes of target function or class")
23612 (description "Simple decorator to set attributes of target function or
23613 class in a @acronym{DRY, Don't Repeat Yourself} way.")
23614 (license license:expat)))
23615
23616 (define-public python-construct
23617 (package
23618 (name "python-construct")
23619 (version "2.10.56")
23620 (source
23621 (origin
23622 (method url-fetch)
23623 (uri (pypi-uri "construct" version))
23624 (sha256
23625 (base32
23626 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
23627 (build-system python-build-system)
23628 (arguments
23629 `(#:tests? #f)) ; No tests exist.
23630 (propagated-inputs
23631 (list python-extras python-arrow python-numpy python-ruamel.yaml))
23632 (home-page "https://construct.readthedocs.io")
23633 (synopsis "Declarative and symmetrical parser and builder for binary data")
23634 (description
23635 "This package provides both simple, atomic constructs (such as
23636 integers of various sizes), as well as composite ones which allow you
23637 form hierarchical and sequential structures of increasing complexity.
23638 It features bit and byte granularity, easy debugging and testing, an
23639 easy-to-extend subclass system, and lots of primitive constructs to
23640 make your work easier.")
23641 (license license:expat)))
23642
23643 (define-public python-outcome
23644 (package
23645 (name "python-outcome")
23646 (version "1.0.1")
23647 (source
23648 (origin
23649 (method url-fetch)
23650 (uri (pypi-uri "outcome" version))
23651 (sha256
23652 (base32 "0vxn04vspmlkkyijjkjnsc46f93ki8g62hr7ag10zpd7ic324y7w"))))
23653 (build-system python-build-system)
23654 (arguments
23655 `(#:phases
23656 (modify-phases %standard-phases
23657 (replace 'check
23658 (lambda* (#:key inputs outputs #:allow-other-keys)
23659 (add-installed-pythonpath inputs outputs)
23660 (invoke "pytest" "-vv"))))))
23661 (native-inputs
23662 (list python-pytest python-pytest-cov python-pytest-asyncio))
23663 (propagated-inputs
23664 (list python-async-generator python-attrs))
23665 (home-page "https://github.com/python-trio/outcome")
23666 (synopsis "Capture the outcome of Python function calls")
23667 (description
23668 "Capture the outcome of Python function calls. Extracted from the Trio
23669 project.")
23670 ;; Either license applies.
23671 (license (list license:expat license:asl2.0))))
23672
23673 (define-public python-trio
23674 (package
23675 (name "python-trio")
23676 (version "0.20.0")
23677 (source
23678 (origin
23679 (method url-fetch)
23680 (uri (pypi-uri "trio" version))
23681 (sha256
23682 (base32 "0w30cwmdwfa8zq2agqv3h62jzwwsk7ms8f683ag8f3jx279m42k7"))))
23683 (build-system python-build-system)
23684 (arguments
23685 `(#:phases
23686 (modify-phases %standard-phases
23687 (add-after 'unpack 'patch-sleep
23688 (lambda _
23689 (substitute* "trio/tests/test_subprocess.py"
23690 (("/bin/sleep")
23691 (which "sleep")))))
23692 (add-before 'check 'change-home
23693 (lambda _
23694 ;; Tests require a writable home.
23695 (setenv "HOME" "/tmp")))
23696 (replace 'check
23697 (lambda* (#:key tests? #:allow-other-keys)
23698 (when tests?
23699 (invoke "pytest" "-vv"
23700 "-n" (number->string (parallel-job-count))
23701 "-k"
23702 (string-append
23703 ;; This test times out.
23704 "not test_ki_protection_works"
23705 ;; Assertion errors.
23706 " and not test_guest_mode_ki"
23707 " and not test_run_in_trio_thread_ki"
23708 " and not test_simple_cancel_scope_usage_doesnt_create_cyclic_garbage"
23709 " and not test_nursery_cancel_doesnt_create_cyclic_garbage"
23710 " and not test_cancel_scope_exit_doesnt_create_cyclic_garbage"
23711 " and not test_locals_destroyed_promptly_on_cancel"
23712 " and not test_ipython_exc_handler"
23713 " and not test_for_leaking_fds"
23714 ;; These try to raise KeyboardInterrupt which does not work
23715 ;; in the build environment.
23716 " and not test_ki_self"
23717 " and not test_ki_wakes_us_up"
23718 ;; Failure in name resolution.
23719 " and not test_getnameinfo"
23720 " and not test_SocketType_resolve"
23721 ;; OSError: protocol not found.
23722 " and not test_getprotobyname"
23723 ;; EOFError: Ran out of input.
23724 " and not test_static_tool_sees_all_symbols"))))))))
23725 (native-inputs
23726 (list python-astor
23727 python-ipython
23728 python-jedi
23729 python-pylint
23730 python-pyopenssl
23731 python-pytest
23732 python-pytest-xdist
23733 python-pytest-cov
23734 python-trustme))
23735 (propagated-inputs
23736 (list python-async-generator
23737 python-attrs
23738 python-idna
23739 python-outcome
23740 python-sniffio
23741 python-sortedcontainers))
23742 (home-page "https://github.com/python-trio/trio")
23743 (synopsis "Friendly Python library for async concurrency and I/O")
23744 (description
23745 "Trio strives to be a production-quality, async/await-native I/O library
23746 for Python. Like all async libraries, its main purpose is to help you write
23747 programs that do multiple things at the same time with parallelized I/O.")
23748 ;; Either license applies.
23749 (license (list license:expat license:asl2.0))))
23750
23751 (define-public python-trio-typing
23752 (package
23753 (name "python-trio-typing")
23754 (version "0.5.0")
23755 (source
23756 (origin
23757 (method url-fetch)
23758 (uri (pypi-uri "trio-typing" version))
23759 (sha256
23760 (base32 "1yvlj4vf3wyvp16dw6vyfm4i2idm8lvdc3fvjhi6mhm62zv7s07j"))))
23761 (build-system python-build-system)
23762 (arguments
23763 `(#:phases
23764 (modify-phases %standard-phases
23765 (replace 'check
23766 (lambda _
23767 (invoke "pytest" "-vv"))))))
23768 (native-inputs
23769 (list python-attrs python-pytest))
23770 (propagated-inputs
23771 (list python-mypy python-mypy-extensions python-trio
23772 python-typing-extensions))
23773 (home-page "https://github.com/python-trio/trio-typing")
23774 (synopsis "Static type checking support for Trio and related projects")
23775 (description
23776 "This package provides:
23777
23778 @itemize
23779 @item PEP 561 typing stubs packages for the Trio project packages:
23780
23781 @itemize
23782 @item trio (@code{trio-stubs})
23783 @item outcome (@code{outcome-stubs})
23784 @item async_generator (@code{async_generator-stubs})
23785 @end itemize
23786
23787 @item A package @code{trio_typing} containing types that Trio programs often
23788 want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
23789 a mypy plugin that smooths over some limitations in the basic type hints.
23790 @end itemize")
23791 ;; Either license applies.
23792 (license (list license:expat license:asl2.0))))
23793
23794 (define-public python-trio-websocket
23795 (package
23796 (name "python-trio-websocket")
23797 (version "0.9.2")
23798 (source
23799 (origin
23800 (method git-fetch) ;no tests in pypi archive
23801 (uri (git-reference
23802 (url "https://github.com/HyperionGray/trio-websocket")
23803 (commit version)))
23804 (file-name (git-file-name name version))
23805 (sha256
23806 (base32 "1yk2ak991kbl30xg8ldpggack1lwkizd7s5cpr28ir34z8iyjnpi"))))
23807 (build-system python-build-system)
23808 (arguments
23809 `(#:phases
23810 (modify-phases %standard-phases
23811 (replace 'check
23812 (lambda* (#:key tests? #:allow-other-keys)
23813 (when tests? (invoke "pytest" "-vv")))))))
23814 (native-inputs (list python-pytest python-pytest-trio python-trustme))
23815 (propagated-inputs (list python-async-generator python-trio python-wsproto))
23816 (home-page "https://github.com/HyperionGray/trio-websocket")
23817 (synopsis "WebSocket library for Trio")
23818 (description "This library implements both server and client aspects of
23819 the @url{https://tools.ietf.org/html/rfc6455, the WebSocket protocol},
23820 striving for safety, correctness, and ergonomics. It is based on the
23821 @url{https://wsproto.readthedocs.io/en/latest/, wsproto project}, which is a
23822 @url{https://sans-io.readthedocs.io/, Sans-IO} state machine that implements
23823 the majority of the WebSocket protocol, including framing, codecs, and events.
23824 This library handles I/O using @url{https://trio.readthedocs.io/en/latest/,
23825 the Trio framework}.")
23826 (license license:expat)))
23827
23828 (define-public python-humanize
23829 (package
23830 (name "python-humanize")
23831 (version "0.5.1")
23832 (source
23833 (origin
23834 (method url-fetch)
23835 (uri (pypi-uri "humanize" version))
23836 (sha256
23837 (base32
23838 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
23839 (arguments
23840 '(#:tests? #f)) ; tests not in pypi archive
23841 (build-system python-build-system)
23842 (home-page "https://github.com/jmoiron/humanize")
23843 (synopsis "Print numerical information in a human-readable form")
23844 (description "This package provides a Python module that displays numbers
23845 and dates in \"human readable\" forms. For example, it would display
23846 \"12345591313\" as \"12.3 billion\".")
23847 (license license:expat)))
23848
23849 (define-public python-txaio
23850 (package
23851 (name "python-txaio")
23852 (version "18.8.1")
23853 (source
23854 (origin
23855 (method url-fetch)
23856 (uri (pypi-uri "txaio" version))
23857 (sha256
23858 (base32
23859 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
23860 (build-system python-build-system)
23861 (propagated-inputs
23862 (list python-twisted python-six))
23863 (home-page "https://github.com/crossbario/txaio")
23864 (synopsis "Compatibility layer between Python asyncio and Twisted")
23865 (description "Txaio provides a compatibility layer between the Python
23866 @code{asyncio} module and @code{Twisted}.")
23867 (license license:expat)))
23868
23869 (define-public python-toolshed
23870 (package
23871 (name "python-toolshed")
23872 (version "0.4.6")
23873 (source
23874 (origin
23875 (method url-fetch)
23876 (uri (pypi-uri "toolshed" version))
23877 (sha256
23878 (base32
23879 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
23880 (build-system python-build-system)
23881 (native-inputs
23882 (list python-nose))
23883 (home-page "https://github.com/brentp/toolshed/")
23884 (synopsis "Collection of modules and functions for working with data")
23885 (description "This is a collection of well-tested, simple modules and
23886 functions that aim to reduce boilerplate when working with data.")
23887 (license license:bsd-2)))
23888
23889 (define-public python-annoy
23890 (package
23891 (name "python-annoy")
23892 (version "1.15.1")
23893 (source
23894 (origin
23895 (method url-fetch)
23896 (uri (pypi-uri "annoy" version))
23897 (sha256
23898 (base32
23899 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
23900 (build-system python-build-system)
23901 (native-inputs
23902 (list python-nose))
23903 (home-page "https://github.com/spotify/annoy/")
23904 (synopsis "Approximate nearest neighbors library")
23905 (description
23906 "Annoy is a C++ library with Python bindings to search for points in
23907 space that are close to a given query point. It also creates large read-only
23908 file-based data structures that are @code{mmap}ped into memory so that many
23909 processes may share the same data.")
23910 (license license:asl2.0)))
23911
23912 (define-public python-croniter
23913 (package
23914 (name "python-croniter")
23915 (version "1.3.4")
23916 (source (origin
23917 (method url-fetch)
23918 (uri (pypi-uri "croniter" version))
23919 (sha256
23920 (base32
23921 "1whbm26m9kpn0klgr9dqiqpp83ki9nhpxifaq9afcjw32rckcs9i"))))
23922 (build-system python-build-system)
23923 (propagated-inputs (list python-dateutil))
23924 (home-page "https://github.com/kiorky/croniter")
23925 (synopsis "Iterate datetime objects with cron-like syntax")
23926 (description
23927 "@code{croniter} provides iteration for datetime object with cron-like
23928 format.")
23929 (license license:expat)))
23930
23931 (define-public python-crontab
23932 (package
23933 (name "python-crontab")
23934 (version "2.5.1")
23935 (source
23936 (origin
23937 (method url-fetch)
23938 (uri (pypi-uri name version))
23939 (sha256
23940 (base32 "0cccrqc10r8781ba81x8r2frs3pl2m4hkm599k5358ak0xr7xgjb"))))
23941 (build-system python-build-system)
23942 (arguments
23943 ;; Comptability tests fail so they are disabled.
23944 `(#:tests? #f))
23945 (inputs
23946 (list python-dateutil))
23947 (home-page "https://gitlab.com/doctormo/python-crontab/")
23948 (synopsis "Module for reading and writing crontab files")
23949 (description "This Python module can read, write crontab files, and
23950 access the system cron automatically and simply using a direct API.")
23951 (license license:lgpl3+)))
23952
23953 (define-public python-pylzma
23954 (package
23955 (name "python-pylzma")
23956 (version "0.5.0")
23957 (source
23958 (origin
23959 (method url-fetch)
23960 (uri (pypi-uri "pylzma" version))
23961 (sha256
23962 (base32
23963 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
23964 (build-system python-build-system)
23965 (home-page "https://www.joachim-bauch.de/projects/pylzma/")
23966 (synopsis "Python bindings for the LZMA library by Igor Pavlov")
23967 (description "This package provides Python bindings for the LZMA library
23968 by Igor Pavlov.")
23969 (license license:lgpl2.1+)))
23970
23971 (define-public python-ifaddr
23972 (package
23973 (name "python-ifaddr")
23974 (version "0.1.7")
23975 (source
23976 (origin
23977 (method url-fetch)
23978 (uri (pypi-uri "ifaddr" version))
23979 (sha256
23980 (base32
23981 "150sxdlicwrphmhnv03ykxplyd2jdrxz0mikgnivavgilrn8m7hz"))))
23982 (build-system python-build-system)
23983 (arguments
23984 `(#:phases
23985 (modify-phases %standard-phases
23986 (replace 'check
23987 (lambda _ (invoke "nosetests"))))))
23988 (native-inputs
23989 (list python-nose))
23990 (home-page "https://github.com/pydron/ifaddr")
23991 (synopsis "Network interface and IP address enumeration library")
23992 (description "This package provides a network interface and IP address
23993 enumeration library in Python.")
23994 (license license:expat)))
23995
23996 (define-public python-zeroconf
23997 (package
23998 (name "python-zeroconf")
23999 (version "0.38.1")
24000 (source
24001 (origin
24002 (method git-fetch) ; no tests in PyPI release
24003 (uri (git-reference
24004 (url "https://github.com/jstasiak/python-zeroconf")
24005 (commit version)))
24006 (file-name (git-file-name name version))
24007 (sha256
24008 (base32 "1p1a0ywlg5sq0ilcphmz9h4kayscz0q1lyfk57j7mwxyx4gl9cpi"))))
24009 (build-system python-build-system)
24010 (arguments
24011 `(#:phases
24012 (modify-phases %standard-phases
24013 (replace 'check
24014 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
24015 (when tests?
24016 (add-installed-pythonpath inputs outputs)
24017 (invoke "python" "-m" "pytest" "-k"
24018 (string-append
24019 ;; Networking isn't available for these tests.
24020 "not test_integration_with_listener_ipv6"
24021 " and not test_launch_and_close_v4_v6"
24022 " and not test_launch_and_close_context_manager"
24023 " and not test_launch_and_close"
24024 " and not test_close_multiple_times"))))))))
24025 (native-inputs
24026 (list python-pytest))
24027 (propagated-inputs
24028 (list python-ifaddr))
24029 (home-page "https://github.com/jstasiak/python-zeroconf")
24030 (synopsis "Pure Python mDNS service discovery")
24031 (description "Pure Python multicast DNS (mDNS) service discovery library
24032 (Bonjour/Avahi compatible).")
24033 (license license:lgpl2.1+)))
24034
24035 (define-public python-bsddb3
24036 (package
24037 (name "python-bsddb3")
24038 (version "6.2.9")
24039 (source
24040 (origin
24041 (method url-fetch)
24042 (uri (pypi-uri "bsddb3" version))
24043 (sha256
24044 (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h"))))
24045 (build-system python-build-system)
24046 (inputs
24047 (list bdb))
24048 (arguments
24049 '(#:phases
24050 (modify-phases %standard-phases
24051 (add-after 'unpack 'configure-locations
24052 (lambda* (#:key inputs #:allow-other-keys)
24053 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
24054 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
24055 #t))
24056 (replace 'check
24057 (lambda _
24058 (invoke "python3" "test3.py" "-v"))))))
24059 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
24060 (synopsis "Python bindings for Oracle Berkeley DB")
24061 (description
24062 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
24063 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
24064 Transaction objects, and each of these is exposed as a Python type in the
24065 bsddb3.db module. The database objects can use various access methods: btree,
24066 hash, recno, and queue. Complete support of Berkeley DB distributed
24067 transactions. Complete support for Berkeley DB Replication Manager.
24068 Complete support for Berkeley DB Base Replication. Support for RPC.")
24069 (license license:bsd-3)))
24070
24071 (define-public python-dbfread
24072 (package
24073 (name "python-dbfread")
24074 (version "2.0.7")
24075 (source (origin
24076 (method url-fetch)
24077 (uri (pypi-uri "dbfread" version))
24078 (sha256
24079 (base32
24080 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
24081 (build-system python-build-system)
24082 (native-inputs
24083 (list python-pytest))
24084 (home-page "https://dbfread.readthedocs.io")
24085 (synopsis "Read DBF Files with Python")
24086 (description
24087 "This library reads DBF files and returns the data as native Python data
24088 types for further processing. It is primarily intended for batch jobs and
24089 one-off scripts.")
24090 (license license:expat)))
24091
24092 (define-public python-cached-property
24093 (package
24094 (name "python-cached-property")
24095 (version "1.5.2")
24096 (source
24097 (origin
24098 (method url-fetch)
24099 (uri (pypi-uri "cached-property" version))
24100 (sha256
24101 (base32
24102 "0c51i6yzg6dlq6zhk4c6nv33mg8gv05kkan36k9b5jzf71c7b9cz"))))
24103 (build-system python-build-system)
24104 (arguments
24105 `(#:phases
24106 (modify-phases %standard-phases
24107 ;; https://github.com/pydanny/cached-property/issues/131
24108 ;; recent versions of freezegun break one test
24109 (add-after 'unpack 'disable-broken-test
24110 (lambda _
24111 (substitute* "tests/test_cached_property.py"
24112 (("def test_threads_ttl_expiry\\(self\\)" m)
24113 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
24114 " " m)))
24115 #t)))))
24116 (native-inputs
24117 (list python-freezegun))
24118 (home-page
24119 "https://github.com/pydanny/cached-property")
24120 (synopsis
24121 "Decorator for caching properties in classes")
24122 (description
24123 "This package provides a decorator which makes caching
24124 time-or-computationally-expensive properties quick and easy and works in Python
24125 2 or 3.")
24126 (license license:bsd-3)))
24127
24128 (define-public python-folium
24129 (package
24130 (name "python-folium")
24131 (version "0.12.1")
24132 (source
24133 (origin
24134 ;; PyPI has a ".whl" file but not a proper source release.
24135 ;; Thus, fetch code from Git.
24136 (method git-fetch)
24137 (uri (git-reference
24138 (url "https://github.com/python-visualization/folium")
24139 (commit (string-append "v" version))))
24140 (file-name (git-file-name name version))
24141 (sha256
24142 (base32 "1q05pzca3wfwgnbg03l3bagnhh348yx68w4aa91rg3g8zlviwjz1"))))
24143 (build-system python-build-system)
24144 (propagated-inputs
24145 (list python-branca python-jinja2 python-numpy python-requests))
24146 (native-inputs
24147 (list python-pytest))
24148 (home-page "https://github.com/python-visualization/folium")
24149 (synopsis "Make beautiful maps with Leaflet.js & Python")
24150 (description "@code{folium} makes it easy to visualize data that’s been
24151 manipulated in Python on an interactive leaflet map. It enables both the
24152 binding of data to a map for @code{choropleth} visualizations as well as
24153 passing rich vector/raster/HTML visualizations as markers on the map.
24154
24155 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
24156 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
24157 supports Image, Video, GeoJSON and TopoJSON overlays.")
24158 (license license:expat)))
24159
24160 (define-public python-mercantile
24161 (package
24162 (name "python-mercantile")
24163 (version "1.2.1")
24164 (source
24165 (origin
24166 (method url-fetch)
24167 (uri (pypi-uri "mercantile" version))
24168 (sha256
24169 (base32 "0sxmndhzzrvss5irsgzfrk51k6jihwcb7661992mizdgbnqnsg7s"))))
24170 (build-system python-build-system)
24171 (propagated-inputs (list python-click))
24172 (native-inputs
24173 (list python-check-manifest python-hypothesis python-pytest))
24174 (home-page "https://github.com/mapbox/mercantile")
24175 (synopsis "Web mercator XYZ tile utilities")
24176 (description "The mercantile module provides @code{ul(xtile, ytile, zoom)}
24177 and @code{bounds(xtile, ytile, zoom)} functions that respectively return the
24178 upper left corner and bounding longitudes and latitudes for XYZ tiles, a
24179 @code{xy(lng, lat)} function that returns spherical mercator x and y
24180 coordinates, a @code{tile(lng, lat, zoom)} function that returns the tile
24181 containing a given point, and quadkey conversion functions
24182 @code{quadkey(xtile, ytile, zoom)} and @code{quadkey_to_tile(quadkey)} for
24183 translating between quadkey and tile coordinates.")
24184 (license license:bsd-3)))
24185
24186 (define-public python-xyzservices
24187 (package
24188 (name "python-xyzservices")
24189 (version "2022.4.0")
24190 (source
24191 (origin
24192 (method url-fetch)
24193 (uri (pypi-uri "xyzservices" version))
24194 (sha256
24195 (base32 "1paxv4i0dws85md7csv7pf80jl3xh792mx8rxnsrk61ks3ivbsyg"))))
24196 (build-system python-build-system)
24197 (arguments
24198 '(#:phases
24199 (modify-phases %standard-phases
24200 (replace 'check
24201 (lambda* (#:key tests? #:allow-other-keys)
24202 (when tests?
24203 (invoke "pytest" "-vv")))))))
24204 (native-inputs
24205 (list python-pytest python-mercantile python-requests))
24206 (home-page "https://github.com/geopandas/xyzservices")
24207 (synopsis "Source of XYZ tiles providers")
24208 (description "@code{xyzservices} is a lightweight library providing a
24209 repository of available XYZ services offering raster basemap tiles. The
24210 repository is provided via Python API and as a compressed JSON file.")
24211 (license license:bsd-3)))
24212
24213 (define-public jube
24214 (package
24215 ;; This is a command-line tool, so no "python-" prefix.
24216 (name "jube")
24217 (version "2.2.2")
24218 (source (origin
24219 (method url-fetch)
24220 (uri (string-append
24221 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
24222 version))
24223 (sha256
24224 (base32
24225 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
24226 (file-name (string-append "jube-" version ".tar.gz"))))
24227 (build-system python-build-system)
24228 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
24229 (synopsis "Benchmarking environment")
24230 (description
24231 "JUBE helps perform and analyze benchmarks in a systematic way. For each
24232 benchmarked application, benchmark data is stored in a format that allows JUBE
24233 to deduct the desired information. This data can be parsed by automatic pre-
24234 and post-processing scripts that draw information and store it more densely
24235 for manual interpretation.")
24236 (license license:gpl3+)))
24237
24238 (define-public python-pyroutelib3
24239 (package
24240 (name "python-pyroutelib3")
24241 (version "1.3.post1")
24242 (source
24243 (origin
24244 (method url-fetch)
24245 (uri (pypi-uri "pyroutelib3" version))
24246 (sha256
24247 (base32
24248 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
24249 (build-system python-build-system)
24250 (propagated-inputs
24251 (list python-dateutil))
24252 (home-page "https://github.com/MKuranowski/pyroutelib3")
24253 (synopsis "Library for simple routing on OSM data")
24254 (description "Library for simple routing on OSM data")
24255 (license license:gpl3+)))
24256
24257 (define-public python-bibtexparser
24258 (package
24259 (name "python-bibtexparser")
24260 (version "1.1.0")
24261 (source
24262 (origin
24263 (method url-fetch)
24264 (uri (pypi-uri "bibtexparser" version))
24265 (sha256
24266 (base32
24267 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
24268 (build-system python-build-system)
24269 (propagated-inputs
24270 (list python-pyparsing))
24271 (native-inputs
24272 (list python-future))
24273 (home-page "https://github.com/sciunto-org/python-bibtexparser")
24274 (synopsis "Python library to parse BibTeX files")
24275 (description "BibtexParser is a Python library to parse BibTeX files.")
24276 (license (list license:bsd-3 license:lgpl3))))
24277
24278 (define-public python-distro
24279 (package
24280 (name "python-distro")
24281 (version "1.6.0")
24282 (source
24283 (origin
24284 (method url-fetch)
24285 (uri (pypi-uri "distro" version))
24286 (sha256
24287 (base32
24288 "09441261dd3c8b2gv15vhw1cryzg60lmgpkk07v6hpwwkyhfbxc3"))))
24289 (build-system python-build-system)
24290 (native-inputs
24291 (list python-pytest))
24292 (home-page "https://github.com/nir0s/distro")
24293 (synopsis
24294 "OS platform information API")
24295 (description
24296 "@code{distro} provides information about the OS distribution it runs on,
24297 such as a reliable machine-readable ID, or version information.
24298
24299 It is the recommended replacement for Python's original
24300 `platform.linux_distribution` function (which will be removed in Python 3.8).
24301 @code{distro} also provides a command-line interface to output the platform
24302 information in various formats.")
24303 (license license:asl2.0)))
24304
24305 (define-public python-cairosvg
24306 (package
24307 (name "python-cairosvg")
24308 (version "2.5.0")
24309 (source
24310 (origin
24311 (method url-fetch)
24312 (uri (pypi-uri "CairoSVG" version))
24313 (sha256
24314 (base32 "1ylsisha2cc4w0yydxwhy7idkfw1inl9fsipxsrm7vyby080vi9z"))))
24315 (build-system python-build-system)
24316 (arguments
24317 `(#:phases
24318 (modify-phases %standard-phases
24319 (replace 'check
24320 (lambda _ (invoke "pytest"))))))
24321 (propagated-inputs
24322 (list python-cairocffi python-cssselect2 python-defusedxml
24323 python-pillow python-tinycss2))
24324 (native-inputs
24325 (list python-pytest-flake8 python-pytest-isort python-pytest-runner))
24326 (home-page "https://cairosvg.org/")
24327 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
24328 (description "CairoSVG is a SVG converter based on Cairo. It can export
24329 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
24330 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
24331 parsed, the result is drawn to a Cairo surface that can be exported to
24332 qvarious formats: PDF, PostScript, PNG and even SVG.")
24333 (license license:lgpl3+)))
24334
24335 (define-public python-pyphen
24336 (package
24337 (name "python-pyphen")
24338 (version "0.10.0")
24339 (source
24340 (origin
24341 (method url-fetch)
24342 (uri (pypi-uri "Pyphen" version))
24343 (sha256
24344 (base32 "0a1iwrgs4hzwzz60q4i1813kbzimhm0i4q8grh8vqkxhnkgj36vi"))))
24345 (build-system python-build-system)
24346 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
24347 ;; embedded set provided by upstream - like Debian does.
24348 (home-page "https://github.com/Kozea/Pyphen")
24349 (synopsis "Pure Python module to hyphenate text")
24350 (description "Pyphen is a pure Python module to hyphenate text using
24351 existing Hunspell hyphenation dictionaries.")
24352 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
24353
24354 (define-public python-intelhex
24355 (package
24356 (name "python-intelhex")
24357 (version "2.3.0")
24358 (source
24359 (origin
24360 (method url-fetch)
24361 (uri (pypi-uri "intelhex" version))
24362 (sha256
24363 (base32
24364 "14q04p6qs47ab9w55232ylrdn4wm9rswz36s6x999x0rlxhp6aw9"))))
24365 (build-system python-build-system)
24366 (home-page "https://pypi.org/project/IntelHex/")
24367 (synopsis "Python library for Intel HEX files manipulations")
24368 (description "The Intel HEX file format is widely used in microprocessors
24369 and microcontrollers area (embedded systems etc.) as the de facto standard for
24370 representation of code to be programmed into microelectronic devices. This
24371 package provides an intelhex Python library to read, write, create from
24372 scratch and manipulate data from Intel HEX file format. It also includes
24373 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
24374 converters and more, those based on the library itself.")
24375 (license license:bsd-3)))
24376
24377 (define-public python-interlap
24378 (package
24379 (name "python-interlap")
24380 (version "0.2.7")
24381 (source (origin
24382 (method url-fetch)
24383 (uri (pypi-uri "interlap" version))
24384 (sha256
24385 (base32
24386 "1jbfh00bkrf0i5psa6n75rlgmqp5389xixa9j29w8rxhah6g7r1i"))))
24387 (build-system python-build-system)
24388 (home-page "https://brentp.github.io/interlap")
24389 (synopsis "Fast, simple interval overlap testing")
24390 (description "InterLap does fast interval overlap testing with a simple Python data
24391 structure.")
24392 (license license:expat)))
24393
24394 (define-public python-pykwalify
24395 (package
24396 (name "python-pykwalify")
24397 (version "1.7.0")
24398 (source
24399 (origin
24400 (method url-fetch)
24401 (uri (pypi-uri "pykwalify" version))
24402 (sha256
24403 (base32
24404 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
24405 (build-system python-build-system)
24406 (arguments '(#:tests? #f)) ;missing dependencies
24407 (propagated-inputs
24408 (list python-dateutil python-docopt python-pyyaml))
24409 (home-page "https://github.com/grokzen/pykwalify")
24410 (synopsis
24411 "Python lib/cli for JSON/YAML schema validation")
24412 (description
24413 "This package provides a parser, schema validator, and data binding tool
24414 for YAML and JSON.")
24415 (license license:expat)))
24416
24417 (define-public python-dbusmock
24418 (package
24419 (name "python-dbusmock")
24420 (version "0.25.0")
24421 (source
24422 (origin
24423 (method url-fetch)
24424 (uri (pypi-uri "python-dbusmock" version))
24425 (sha256
24426 (base32
24427 "1nwl0gzzds2g1w1gfxfzlgrkb5hr1rrdyn619ml25c6b1rjyfk3g"))))
24428 (build-system python-build-system)
24429 (arguments
24430 `(#:imported-modules (,@%python-build-system-modules
24431 (guix build syscalls))
24432 #:modules ((guix build python-build-system)
24433 (guix build syscalls)
24434 (guix build utils)
24435 (ice-9 match))
24436 #:phases
24437 (modify-phases %standard-phases
24438 (add-after 'unpack 'patch-paths
24439 (lambda* (#:key inputs #:allow-other-keys)
24440 (substitute* "tests/test_code.py"
24441 (("/bin/bash") (which "bash")))
24442 (substitute* "dbusmock/testcase.py"
24443 (("'dbus-daemon'")
24444 (string-append "'" (assoc-ref inputs "dbus")
24445 "/bin/dbus-daemon'")))))
24446 (replace 'check
24447 (lambda* (#:key tests? #:allow-other-keys)
24448 (when tests?
24449 (match (primitive-fork)
24450 (0 ;child process
24451 (set-child-subreaper!)
24452 ;; Use tini so that signals are properly handled and
24453 ;; doubly-forked processes get reaped; otherwise,
24454 ;; python-dbusmock would waste time polling for the dbus
24455 ;; processes it spawns to be reaped, in vain.
24456 (execlp "tini" "--" "pytest" "-vv"))
24457 (pid
24458 (match (waitpid pid)
24459 ((_ . status)
24460 (unless (zero? status)
24461 (error "`pytest' exited with status"
24462 status))))))))))))
24463 (native-inputs
24464 (list dbus python-pytest tini which))
24465 (inputs
24466 (list dbus))
24467 (propagated-inputs
24468 (list python-dbus python-pygobject))
24469 (home-page "https://github.com/martinpitt/python-dbusmock")
24470 (synopsis "Python library for mock D-Bus objects")
24471 (description "python-dbusmock allows for the easy creation of mock objects on
24472 D-Bus. This is useful for writing tests for software which talks to D-Bus
24473 services such as upower, systemd, logind, gnome-session or others, and it is
24474 hard (or impossible without root privileges) to set the state of the real
24475 services to what you expect in your tests.")
24476 (license license:lgpl3+)))
24477
24478 (define-public python-jsonplus
24479 (package
24480 (name "python-jsonplus")
24481 (version "0.8.0")
24482 (home-page "https://github.com/randomir/jsonplus")
24483 (source (origin
24484 (method url-fetch)
24485 (uri (pypi-uri "jsonplus" version))
24486 (sha256
24487 (base32
24488 "05yv3dw813zwas9snz124k2hki49y268b3mx0gj9w7v1nrjmglq1"))))
24489 (build-system python-build-system)
24490 ;; XXX: No tests on PyPI, and the repository has no tags.
24491 (arguments '(#:tests? #f))
24492 (propagated-inputs
24493 (list python-dateutil python-simplejson python-sortedcontainers))
24494 (synopsis "Serialize Python types to/from JSON")
24495 (description
24496 "This package provides functionality to serialize arbitrary data types
24497 to and from JSON. Common data types are implemented and it is easy to
24498 register custom encoders and decoders.")
24499 (license license:expat)))
24500
24501 (define-public python-ujson
24502 (package
24503 (name "python-ujson")
24504 (version "4.0.2")
24505 (source
24506 (origin
24507 (method url-fetch)
24508 (uri (pypi-uri "ujson" version))
24509 (sha256
24510 (base32
24511 "0k9w0kypy7vlskzzp2vsjswaw8lbqdrplzkbflxki9vqwglsj5f6"))
24512 (modules '((guix build utils)))
24513 (snippet
24514 '(begin (delete-file-recursively "deps") #t))))
24515 (build-system python-build-system)
24516 (arguments
24517 `(#:phases
24518 (modify-phases %standard-phases
24519 (add-after 'unpack 'link-to-system-double-conversion
24520 (lambda* (#:key inputs #:allow-other-keys)
24521 (let ((d-c (assoc-ref inputs "double-conversion")))
24522 (substitute* "setup.py"
24523 (("./deps/double-conversion/double-conversion\"")
24524 (string-append d-c "/include/double-conversion\""))
24525 (("-lstdc++" stdc)
24526 (string-append "-L" d-c "/lib\","
24527 " \"-ldouble-conversion\","
24528 " \"" stdc)))
24529 #t)))
24530 (replace 'check
24531 (lambda* (#:key inputs outputs #:allow-other-keys)
24532 (add-installed-pythonpath inputs outputs)
24533 (invoke "pytest"))))))
24534 (native-inputs
24535 (list double-conversion python-setuptools-scm python-pytest))
24536 (home-page "https://github.com/ultrajson/ultrajson")
24537 (synopsis "Ultra fast JSON encoder and decoder for Python")
24538 (description
24539 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
24540 bindings for Python 3.")
24541 (license license:bsd-3)))
24542
24543 (define-public python-iocapture
24544 ;; The latest release is more than a year older than this commit.
24545 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
24546 (revision "1"))
24547 (package
24548 (name "python-iocapture")
24549 (version "0.1.2")
24550 (source
24551 (origin
24552 (method git-fetch)
24553 (uri (git-reference
24554 (url "https://github.com/oinume/iocapture")
24555 (commit commit)))
24556 (file-name (git-file-name name version))
24557 (sha256
24558 (base32
24559 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
24560 (build-system python-build-system)
24561 (arguments
24562 `(#:phases
24563 (modify-phases %standard-phases
24564 (delete 'check)
24565 (add-after 'install 'check
24566 (lambda* (#:key inputs outputs #:allow-other-keys)
24567 (add-installed-pythonpath inputs outputs)
24568 (invoke "py.test" "-v" "tests")
24569 #t)))))
24570 (propagated-inputs
24571 (list python-flexmock python-pytest python-pytest-cov python-six))
24572 (home-page "https://github.com/oinume/iocapture")
24573 (synopsis "Python capturing tool for stdout and stderr")
24574 (description
24575 "This package helps you to capture the standard out (stdout) and the
24576 standard error channel (stderr) in your program.")
24577 (license license:expat))))
24578
24579 (define-public python-anyio
24580 (package
24581 (name "python-anyio")
24582 (version "3.5.0")
24583 (source
24584 (origin
24585 (method url-fetch)
24586 (uri (pypi-uri "anyio" version))
24587 (sha256
24588 (base32
24589 "19m58805wir4i2s45dd5ynwlzb7ky1218isbir53gpqzzgigzbm0"))))
24590 (build-system python-build-system)
24591 (arguments
24592 `(#:phases
24593 (modify-phases %standard-phases
24594 (replace 'check
24595 (lambda* (#:key tests? #:allow-other-keys)
24596 (when tests?
24597 (invoke
24598 "pytest" "-vv" "-p" "no:asyncio"
24599 "-m" "not network"
24600 "-k"
24601 (string-append
24602 "not test_is_block_device"
24603
24604 ;; These fail because of network (or specifically IPv6
24605 ;; network) access (see:
24606 ;; https://github.com/agronholm/anyio/issues/417).
24607 " and not test_accept"
24608 " and not test_accept_after_close"
24609 " and not test_close_during_receive"
24610 " and not test_close_from_other_task"
24611 " and not test_concurrent_receive"
24612 " and not test_concurrent_send"
24613 " and not test_connect_tcp_with_tls"
24614 " and not test_connect_tcp_with_tls_cert_check_fail"
24615 " and not test_connection_refused"
24616 " and not test_extra_attributes"
24617 " and not test_getaddrinfo"
24618 " and not test_getnameinfo"
24619 " and not test_happy_eyeballs"
24620 " and not test_iterate"
24621 " and not test_receive_after_close"
24622 " and not test_receive_timeout"
24623 " and not test_reuse_port"
24624 " and not test_run_process"
24625 " and not test_send_after_close"
24626 " and not test_send_after_eof"
24627 " and not test_send_after_peer_closed"
24628 " and not test_send_eof"
24629 " and not test_send_large_buffer"
24630 " and not test_send_receive"
24631 " and not test_socket_options"
24632 " and not test_unretrieved_future_exception_server_crash"))))))))
24633 (propagated-inputs
24634 (list python-contextvars
24635 python-dataclasses
24636 python-idna
24637 python-sniffio
24638 python-typing-extensions))
24639 (native-inputs
24640 (list python-contextlib2
24641 python-coverage
24642 python-hypothesis
24643 python-mock
24644 python-pytest
24645 python-pytest-mock
24646 python-setuptools-scm
24647 python-trio
24648 python-trustme
24649 python-uvloop))
24650 (home-page "https://github.com/agronholm/anyio")
24651 (synopsis "Compatibility layer for multiple asynchronous event loops")
24652 (description
24653 "AnyIO is an asynchronous networking and concurrency library that works
24654 on top of either asyncio or trio. It implements trio-like structured
24655 concurrency on top of asyncio, and works in harmony with the native SC of trio
24656 itself.")
24657 (license license:expat)))
24658
24659 (define-public python-argh
24660 ;; There are 21 commits since the latest release containing important
24661 ;; improvements.
24662 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
24663 (revision "1"))
24664 (package
24665 (name "python-argh")
24666 (version (git-version "0.26.2" revision commit))
24667 (source
24668 (origin
24669 (method git-fetch)
24670 (uri (git-reference
24671 (url "https://github.com/neithere/argh")
24672 (commit commit)))
24673 (file-name (git-file-name name version))
24674 (sha256
24675 (base32
24676 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
24677 (build-system python-build-system)
24678 (arguments
24679 '(#:phases
24680 (modify-phases %standard-phases
24681 (add-after 'unpack 'patch-tests
24682 (lambda _
24683 ;; Fix test failures on Python 3.9.9+.
24684 ;; Taken via <https://github.com/neithere/argh/issues/148>.
24685 (substitute* "test/test_integration.py"
24686 (("assert run\\(p, '(bar|orig-name|nest bar)', exit=True\\)\
24687 \\.startswith\\('invalid choice'\\)" _ name)
24688 (string-append "assert 'invalid choice' in \
24689 run(p, '" name "', exit=True)")))))
24690 (replace 'check
24691 (lambda* (#:key tests? #:allow-other-keys)
24692 (when tests?
24693 (invoke "pytest" "-vv")))))))
24694 (propagated-inputs
24695 (list python-iocapture python-mock python-pytest python-pytest-cov
24696 python-pytest-xdist))
24697 (home-page "https://github.com/neithere/argh/")
24698 (synopsis "Argparse wrapper with natural syntax")
24699 (description
24700 "python-argh is a small library that provides several layers of
24701 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
24702 always possible to declare a command with the highest possible (and least
24703 flexible) layer and then tune the behaviour with any of the lower layers
24704 including the native API of @code{python-argparse}.")
24705 (license license:lgpl3+))))
24706
24707 (define-public python-ppft
24708 (package
24709 (name "python-ppft")
24710 (version "1.6.6.1")
24711 (source
24712 (origin
24713 (method url-fetch)
24714 (uri (pypi-uri "ppft" version))
24715 (sha256
24716 (base32
24717 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
24718 (build-system python-build-system)
24719 (arguments '(#:tests? #f)) ; there are none
24720 (propagated-inputs
24721 (list python-six))
24722 (home-page "https://pypi.org/project/ppft/")
24723 (synopsis "Fork of Parallel Python")
24724 (description
24725 "This package is a fork of Parallel Python. The Parallel Python
24726 module (@code{pp}) provides an easy and efficient way to create
24727 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
24728 computers and clusters. It features cross-platform portability and dynamic
24729 load balancing.")
24730 (license license:bsd-3)))
24731
24732 (define-public python-pox
24733 (package
24734 (name "python-pox")
24735 (version "0.2.7")
24736 (source
24737 (origin
24738 (method url-fetch)
24739 (uri (pypi-uri "pox" version))
24740 (sha256
24741 (base32
24742 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
24743 (build-system python-build-system)
24744 (arguments
24745 `(#:phases
24746 (modify-phases %standard-phases
24747 (replace 'check
24748 (lambda _
24749 (mkdir-p "/tmp/guix")
24750 (setenv "SHELL" "bash")
24751 (setenv "USERNAME" "guix")
24752 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
24753 (invoke "py.test" "-vv")
24754 #t)))))
24755 (native-inputs
24756 (list python-pytest which))
24757 (home-page "https://pypi.org/project/pox/")
24758 (synopsis "Python utilities for file system exploration and automated builds")
24759 (description
24760 "Pox provides a collection of utilities for navigating and manipulating
24761 file systems. This module is designed to facilitate some of the low-level
24762 operating system interactions that are useful when exploring a file system on a
24763 remote host. Pox provides Python equivalents of several shell commands such
24764 as @command{which} and @command{find}. These commands allow automated
24765 discovery of what has been installed on an operating system, and where the
24766 essential tools are located.")
24767 (license license:bsd-3)))
24768
24769 (define-public python-pathos
24770 (package
24771 (name "python-pathos")
24772 (version "0.2.5")
24773 (source
24774 (origin
24775 (method url-fetch)
24776 (uri (pypi-uri "pathos" version))
24777 (sha256
24778 (base32
24779 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
24780 (build-system python-build-system)
24781 (arguments
24782 '(#:phases
24783 (modify-phases %standard-phases
24784 (replace 'check
24785 (lambda _
24786 (invoke "python" "./tests/__main__.py"))))))
24787 (propagated-inputs
24788 (list python-dill python-multiprocess python-pox python-ppft))
24789 (native-inputs
24790 (list python-pytest))
24791 (home-page "https://pypi.org/project/pathos/")
24792 (synopsis
24793 "Parallel graph management and execution in heterogeneous computing")
24794 (description
24795 "Python-pathos is a framework for heterogeneous computing. It provides a
24796 consistent high-level interface for configuring and launching parallel
24797 computations across heterogeneous resources. Python-pathos provides configurable
24798 launchers for parallel and distributed computing, where each launcher contains
24799 the syntactic logic to configure and launch jobs in an execution environment.")
24800 (license license:bsd-3)))
24801
24802 (define-public python-flit
24803 (package
24804 (name "python-flit")
24805 (version "3.5.1")
24806 (source
24807 (origin
24808 (method url-fetch)
24809 (uri (pypi-uri "flit" version))
24810 (sha256
24811 (base32 "04152qj46sqbnlrj7ch9p7svjrrlpzbk0qr39g2yr0s4f5vp6frf"))))
24812 (build-system python-build-system)
24813 (arguments
24814 (list
24815 #:phases
24816 #~(modify-phases %standard-phases
24817 ;; XXX: PEP 517 manual build copied from python-isort.
24818 (replace 'build
24819 (lambda _
24820 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
24821 (replace 'check
24822 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
24823 (when tests?
24824 (setenv "HOME" "/tmp")
24825 (setenv "FLIT_NO_NETWORK" "1"))))
24826 (replace 'install
24827 (lambda _
24828 (let ((whl (car (find-files "dist" "\\.whl$"))))
24829 (invoke "pip" "--no-cache-dir" "--no-input"
24830 "install" "--no-deps" "--prefix" #$output whl)))))))
24831 (propagated-inputs
24832 (list python-pypa-build
24833 python-tomli-w
24834 python-flit-core
24835 python-docutils
24836 python-requests))
24837 (native-inputs
24838 (list python-responses
24839 python-pygments-github-lexers
24840 python-pytest
24841 python-pytest-cov
24842 python-sphinx
24843 python-sphinxcontrib-github-alt
24844 python-testpath))
24845 (home-page "https://flit.readthedocs.io/")
24846 (synopsis "Simple packaging tool for simple packages")
24847 (description "Flit is a simple way to put Python packages and modules on
24848 PyPI. Flit packages a single importable module or package at a time, using
24849 the import name as the name on PyPI. All subpackages and data files within a
24850 package are included automatically.")
24851 (license license:bsd-3)))
24852
24853 (define-public python-pathtools
24854 (package
24855 (name "python-pathtools")
24856 (version "0.1.2")
24857 (source
24858 (origin
24859 (method url-fetch)
24860 (uri (pypi-uri "pathtools" version))
24861 (sha256
24862 (base32
24863 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
24864 (build-system python-build-system)
24865 (home-page
24866 "https://github.com/gorakhargosh/pathtools")
24867 (synopsis "Path utilities for Python")
24868 (description "Pattern matching and various utilities for file systems
24869 paths.")
24870 (license license:expat)))
24871
24872 (define-public python-fastentrypoints
24873 (package
24874 (name "python-fastentrypoints")
24875 (version "0.12")
24876 (source
24877 (origin
24878 (method url-fetch)
24879 (uri (pypi-uri "fastentrypoints" version))
24880 (sha256
24881 (base32
24882 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
24883 (build-system python-build-system)
24884 (home-page
24885 "https://github.com/ninjaaron/fast-entry_points")
24886 (synopsis
24887 "Makes entry_points specified in setup.py load more quickly")
24888 (description
24889 "Using entry_points in your setup.py makes scripts that start really
24890 slowly because it imports pkg_resources. This package allows such setup
24891 scripts to load entry points more quickly.")
24892 (license license:bsd-3)))
24893
24894 (define-public python-funcparserlib
24895 (package
24896 (name "python-funcparserlib")
24897 (version "1.0.0")
24898 (source
24899 (origin
24900 (method url-fetch)
24901 (uri (pypi-uri "funcparserlib" version))
24902 (sha256
24903 (base32 "0swbqf53x7lfnczvi566s1g3nkf5mfrxz7sbpyymricz57a3vlvx"))))
24904 (build-system python-build-system)
24905 (arguments
24906 `(#:tests? #f)) ; no tests in PyPI and no setup.py in GitHub
24907 (home-page "https://github.com/vlasovskikh/funcparserlib")
24908 (synopsis
24909 "Recursive descent parsing library based on functional combinators")
24910 (description
24911 "This package is a recursive descent parsing library for Python based on
24912 functional combinators. Parser combinators are just higher-order functions
24913 that take parsers as their arguments and return them as result values.")
24914 (license license:expat)))
24915
24916 (define-public python-speg
24917 (package
24918 (name "python-speg")
24919 (version "0.3")
24920 (source
24921 (origin
24922 (method url-fetch)
24923 (uri (pypi-uri "speg" version ".zip"))
24924 (sha256
24925 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
24926 (arguments
24927 `(#:tests? #f)) ;FIXME: tests fail, not sure why
24928 (native-inputs
24929 (list unzip))
24930 (build-system python-build-system)
24931 (home-page "https://github.com/avakar/speg")
24932 (synopsis "PEG-based parser interpreter with memoization")
24933 (description "This package is a PEG-based parser and interpreter with
24934 memoization.")
24935 (license license:expat)))
24936
24937 (define-public python-cson
24938 (package
24939 (name "python-cson")
24940 (version "0.8")
24941 (source
24942 (origin
24943 (method url-fetch)
24944 (uri (pypi-uri "cson" version))
24945 (sha256
24946 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
24947 (build-system python-build-system)
24948 (propagated-inputs
24949 (list python-speg))
24950 (home-page "https://github.com/avakar/pycson")
24951 (synopsis "Parser for Coffeescript Object Notation (CSON)")
24952 (description "This package is a parser for Coffeescript Object
24953 Notation (CSON).")
24954 (license license:expat)))
24955
24956 (define-public python-aionotify
24957 (package
24958 (name "python-aionotify")
24959 (version "0.2.0")
24960 (source
24961 (origin
24962 ;; Source tarball on PyPi lacks tests
24963 (method git-fetch)
24964 (uri (git-reference
24965 (url "https://github.com/rbarrois/aionotify")
24966 (commit (string-append "v" version))))
24967 (file-name (git-file-name name version))
24968 (sha256
24969 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))
24970 (patches (search-patches "python-aionotify-0.2.0-py3.8.patch"))))
24971 (build-system python-build-system)
24972 (home-page "https://github.com/rbarrois/aionotify")
24973 (synopsis "Asyncio-powered inotify library")
24974 (description
24975 "@code{aionotify} is a simple, asyncio-based inotify library.")
24976 (license license:bsd-3)))
24977
24978 (define-public python-forbiddenfruit
24979 (package
24980 (name "python-forbiddenfruit")
24981 (version "0.1.3")
24982 (source
24983 (origin
24984 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
24985 (method git-fetch)
24986 (uri (git-reference
24987 (url "https://github.com/clarete/forbiddenfruit")
24988 (commit version)))
24989 (file-name (git-file-name name version))
24990 (sha256
24991 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
24992 (build-system python-build-system)
24993 (arguments
24994 '(#:phases
24995 (modify-phases %standard-phases
24996 (replace 'check
24997 (lambda _
24998 (invoke "make" "SKIP_DEPS=1"))))))
24999 (native-inputs
25000 (list python-nose python-coverage))
25001 (home-page "https://github.com/clarete/forbiddenfruit")
25002 (synopsis "Patch python built-in objects")
25003 (description "This project allows Python code to extend built-in types.")
25004 (license (list license:gpl3+ license:expat))))
25005
25006 (define-public python-k5test
25007 (package
25008 (name "python-k5test")
25009 (version "0.9.2")
25010 (source
25011 (origin
25012 (method url-fetch)
25013 (uri (pypi-uri "k5test" version))
25014 (sha256
25015 (base32
25016 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
25017 (build-system python-build-system)
25018 (propagated-inputs
25019 (list python-six
25020 ;; `which`, `kadmin.local` binaries called inside library
25021 which mit-krb5))
25022 (native-inputs (list mit-krb5))
25023 (arguments
25024 '(#:phases
25025 (modify-phases %standard-phases
25026 (add-after 'unpack 'apply-upstream-fixes
25027 (lambda* _
25028 (substitute* "k5test/realm.py"
25029 ;; Upstream commit f6b302d94dbdce37a1b81cc3faeeac4dc637b0e9.
25030 (("'kadmin_local'") "'kadmin.local'")
25031 ;; Upstream commit 3aef84515cf3d1a171c66856c898d0a5cbbd03ea.
25032 (("\\.stop_daemon") "._stop_daemon")))))))
25033 (home-page "https://github.com/pythongssapi/k5test")
25034 (synopsis "Library for setting up self-contained Kerberos 5 environments")
25035 (description
25036 "@code{k5test} is a library for setting up self-contained Kerberos 5
25037 environments, and running Python unit tests inside those environments. It is
25038 based on the file of the same name found alongside the MIT Kerberos 5 unit
25039 tests.")
25040 (license license:isc)))
25041
25042 (define-public python-gssapi
25043 (package
25044 (name "python-gssapi")
25045 (version "1.6.12")
25046 (source
25047 (origin
25048 (method url-fetch)
25049 (uri (pypi-uri "gssapi" version))
25050 (sha256
25051 (base32
25052 "1j2idrbrbczykzlb56q1bn0ivc9c0rjjljpk4yz86xn3gxfkpv8n"))))
25053 (build-system python-build-system)
25054 (propagated-inputs
25055 (list python-decorator python-six))
25056 (inputs
25057 (list mit-krb5))
25058 ;; for tests
25059 (native-inputs
25060 (list python-parameterized python-k5test python-nose))
25061 (home-page "https://github.com/pythongssapi/python-gssapi")
25062 (synopsis "Python GSSAPI Wrapper")
25063 (description
25064 "Python-GSSAPI provides both low-level and high level wrappers around the
25065 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
25066 also be usable with other GSSAPI mechanisms.")
25067 (license license:isc)))
25068
25069 (define-public python-check-manifest
25070 (package
25071 (name "python-check-manifest")
25072 (version "0.37")
25073 (source
25074 (origin
25075 (method url-fetch)
25076 (uri (pypi-uri "check-manifest" version))
25077 (sha256
25078 (base32
25079 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
25080 (build-system python-build-system)
25081 (native-inputs
25082 (list python-mock git))
25083 (home-page "https://github.com/mgedmin/check-manifest")
25084 (synopsis "Check MANIFEST.in in a Python source package for completeness")
25085 (description "Python package can include a MANIFEST.in file to help with
25086 sending package files to the Python Package Index. This package checks that
25087 file to ensure it completely and accurately describes your project.")
25088 (license license:expat)))
25089
25090 (define-public python-android-stringslib
25091 (package
25092 (name "python-android-stringslib")
25093 (version "0.1.2")
25094 (source
25095 (origin
25096 (method git-fetch)
25097 (uri (git-reference
25098 (url "https://framagit.org/tyreunom/python-android-strings-lib")
25099 (commit (string-append "v" version))))
25100 (file-name (git-file-name name version))
25101 (sha256
25102 (base32
25103 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
25104 (build-system python-build-system)
25105 (arguments
25106 `(#:tests? #f))
25107 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
25108 (synopsis "Android strings.xml support")
25109 (description "Android Strings Lib provides support for android's strings.xml
25110 files. These files are used to translate strings in android apps.")
25111 (license license:expat)))
25112
25113 (define-public python-watchdog
25114 (package
25115 (name "python-watchdog")
25116 (version "2.1.6")
25117 (source
25118 (origin
25119 (method url-fetch)
25120 (uri (pypi-uri "watchdog" version))
25121 (sha256
25122 (base32 "1rx2nyl0cyj0v4ja795cl3gi26577c5wg48syr3byz3ndkgpavm3"))))
25123 (build-system python-build-system)
25124 (arguments
25125 `(#:phases
25126 (modify-phases %standard-phases
25127 (replace 'check
25128 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
25129 (when tests?
25130 (add-installed-pythonpath inputs outputs)
25131 (invoke "python" "-m" "pytest" "-k"
25132 ;; This test failed.
25133 "not test_kill_auto_restart")))))))
25134 (propagated-inputs
25135 (list python-pathtools python-pyyaml))
25136 (native-inputs
25137 (list python-pytest-cov python-pytest-timeout))
25138 (home-page "https://github.com/gorakhargosh/watchdog")
25139 (synopsis "File system events monitoring")
25140 (description "This package provides a way to monitor file system events
25141 such as a file modification and trigger an action. This is similar to inotify,
25142 but portable.")
25143 (license license:asl2.0)))
25144
25145 (define-public python-watchgod
25146 (package
25147 (name "python-watchgod")
25148 (version "0.7")
25149 (source
25150 (origin
25151 ;; There are no tests in the PyPI tarball.
25152 (method git-fetch)
25153 (uri (git-reference
25154 (url "https://github.com/samuelcolvin/watchgod")
25155 (commit (string-append "v" version))))
25156 (file-name (git-file-name name version))
25157 (sha256
25158 (base32 "1w2xsidwp9n4giqhja0bzw7rwrh01db0kdxf2n54mv3dkx545jpq"))))
25159 (build-system python-build-system)
25160 (arguments
25161 `(#:phases
25162 (modify-phases %standard-phases
25163 (replace 'check
25164 (lambda* (#:key tests? #:allow-other-keys)
25165 (when tests?
25166 (invoke "pytest" "-vv"
25167 "-o" "asyncio_mode=auto")))))))
25168 (native-inputs
25169 (list python-coverage
25170 python-pygments
25171 python-pytest
25172 python-pytest-asyncio
25173 python-pytest-cov
25174 python-pytest-mock
25175 python-pytest-sugar
25176 python-pytest-toolbox))
25177 (home-page "https://github.com/samuelcolvin/watchgod")
25178 (synopsis "Simple, modern file watching and code reload in Python")
25179 (description
25180 "Simple, modern file watching and code reload in Python inspired by
25181 @code{watchdog}. Among the differences are a unified approach for each
25182 operating systems and an elegant approach to concurrency using threading.")
25183 (license license:expat)))
25184
25185 (define-public python-wget
25186 (package
25187 (name "python-wget")
25188 (version "3.2")
25189 (source
25190 (origin
25191 (method url-fetch)
25192 (uri (pypi-uri "wget" version ".zip"))
25193 (sha256
25194 (base32
25195 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
25196 (build-system python-build-system)
25197 (native-inputs (list unzip))
25198 (home-page "https://bitbucket.org/techtonik/python-wget/")
25199 (synopsis "Pure Python download utility")
25200 (description "The python-wget library provides an API to download files
25201 with features similar to the @command{wget} utility.")
25202 (license license:unlicense)))
25203
25204 (define-public offlate
25205 (package
25206 (name "offlate")
25207 (version "0.6.1")
25208 (source
25209 (origin
25210 (method git-fetch)
25211 (uri (git-reference
25212 (url "https://framagit.org/tyreunom/offlate")
25213 (commit version)))
25214 (file-name (git-file-name name version))
25215 (sha256
25216 (base32
25217 "1sx5cv8pamyw1m089b6x8ykaxdkx26jk9cblhbzlf0m3ckz52jik"))))
25218 (build-system python-build-system)
25219 (arguments
25220 ;; No tests
25221 `(#:tests? #f
25222 #:phases
25223 (modify-phases %standard-phases
25224 (add-before 'build 'generate-fonts
25225 (lambda _
25226 (invoke "make" "fonts")))
25227 (add-before 'build 'generate-translations
25228 (lambda _
25229 (invoke "make" "update-langs"))))))
25230 (propagated-inputs
25231 (list python-android-stringslib
25232 python-dateutil
25233 python-gitlab
25234 python-lxml
25235 python-polib
25236 python-pycountry
25237 python-pyenchant
25238 python-pygit2
25239 python-pygithub
25240 python-pyqt
25241 python-requests
25242 python-ruamel.yaml
25243 python-translate-toolkit
25244 python-translation-finder
25245 python-watchdog))
25246 (native-inputs
25247 (list qttools-5 fontforge))
25248 (home-page "https://framagit.org/tyreunom/offlate")
25249 (synopsis "Offline translation interface for online translation tools")
25250 (description "Offlate offers a unified interface for different translation
25251 file formats, as well as many different online translation platforms. You can
25252 use it to get work from online platforms, specialized such as the Translation
25253 Project, or not such a gitlab instance when your upstream doesn't use any
25254 dedicated platform. The tool proposes a unified interface for any format and
25255 an upload option to send your work back to the platform.")
25256 (license license:gpl3+)))
25257
25258 (define-public python-titlecase
25259 (package
25260 (name "python-titlecase")
25261 (version "0.12.0")
25262 (source
25263 (origin
25264 (method url-fetch)
25265 (uri (pypi-uri "titlecase" version))
25266 (sha256
25267 (base32
25268 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
25269 (build-system python-build-system)
25270 (native-inputs
25271 (list python-nose))
25272 (home-page "https://github.com/ppannuto/python-titlecase")
25273 (synopsis "Capitalize strings similar to book titles")
25274 (description
25275 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
25276 It capitalizes (predominantly English) strings in a way that is similar to
25277 book titles, using the New York Times Manual of Style to leave certain words
25278 lowercase.")
25279 (license license:expat)))
25280
25281 (define-public python-pypng
25282 (package
25283 (name "python-pypng")
25284 (version "0.0.20")
25285 (source
25286 (origin
25287 (method url-fetch)
25288 (uri (pypi-uri "pypng" version))
25289 (sha256
25290 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
25291 (build-system python-build-system)
25292 (home-page "https://github.com/drj11/pypng")
25293 (synopsis "Pure Python PNG image encoder/decoder")
25294 (description
25295 "The PyPNG module implements support for PNG images. It reads and writes
25296 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
25297 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
25298 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
25299 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
25300 A number of optional chunks can be specified (when writing) and
25301 understood (when reading): tRNS, bKGD, gAMA.
25302
25303 PyPNG is not a high level toolkit for image processing (like PIL) and does not
25304 aim at being a replacement or competitor. Its strength lies in fine-grained
25305 extensive support of PNG features. It can also read and write Netpbm PAM
25306 files, with a focus on its use as an intermediate format for implementing
25307 custom PNG processing.")
25308 (license license:expat)))
25309
25310 (define-public python-fuzzywuzzy
25311 (package
25312 (name "python-fuzzywuzzy")
25313 (version "0.18.0")
25314 (source
25315 (origin
25316 (method url-fetch)
25317 (uri (pypi-uri "fuzzywuzzy" version))
25318 (sha256
25319 (base32
25320 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
25321 (build-system python-build-system)
25322 (native-inputs
25323 (list python-hypothesis python-pycodestyle python-pytest))
25324 (propagated-inputs
25325 (list python-levenshtein))
25326 (home-page "https://github.com/seatgeek/fuzzywuzzy")
25327 (synopsis "Fuzzy string matching in Python")
25328 (description "Approximate string matching using
25329 @emph{Levenshtein Distance} to calculate the differences between
25330 sequences.")
25331 (license license:gpl2)))
25332
25333 (define-public python-block-tracing
25334 (package
25335 (name "python-block-tracing")
25336 (version "1.0.1")
25337 (source
25338 (origin
25339 (method url-fetch)
25340 (uri (pypi-uri "block_tracing" version))
25341 (sha256
25342 (base32
25343 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
25344 (build-system python-build-system)
25345 (arguments '(#:tests? #f)) ; no tests
25346 (home-page "https://github.com/rianhunter/block_tracing")
25347 (synopsis "Protect process memory")
25348 (description
25349 "@code{block_tracing} is a tiny Python library that can be used to
25350 prevent debuggers and other applications from inspecting the memory within
25351 your process.")
25352 (license license:expat)))
25353
25354 (define-public python-gcovr
25355 (package
25356 (name "python-gcovr")
25357 (version "4.2")
25358 (source
25359 (origin
25360 (method url-fetch)
25361 (uri (pypi-uri "gcovr" version))
25362 (sha256
25363 (base32
25364 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
25365 (build-system python-build-system)
25366 (propagated-inputs
25367 (list python-lxml python-jinja2))
25368 (home-page "https://gcovr.com/")
25369 (synopsis "Utility for generating code coverage results")
25370 (description
25371 "Gcovr provides a utility for managing the use of the GNU gcov
25372 utility and generating summarized code coverage results. It is inspired
25373 by the Python coverage.py package, which provides a similar utility for
25374 Python.")
25375 (license license:bsd-3)))
25376
25377 (define-public python-owslib
25378 (package
25379 (name "python-owslib")
25380 (version "0.19.2")
25381 (source
25382 (origin
25383 (method url-fetch)
25384 (uri (pypi-uri "OWSLib" version))
25385 (sha256
25386 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
25387 (build-system python-build-system)
25388 (arguments
25389 ;; TODO: package dependencies required for tests.
25390 '(#:tests? #f
25391 #:phases (modify-phases %standard-phases
25392 (delete 'sanity-check))))
25393 (synopsis "Interface for Open Geospatial Consortium web service")
25394 (description
25395 "OWSLib is a Python package for client programming with Open Geospatial
25396 Consortium (OGC) web service (hence OWS) interface standards, and their related
25397 content models.")
25398 (home-page "https://geopython.github.io/OWSLib/")
25399 (license license:bsd-3)))
25400
25401 (define-public python-docusign-esign
25402 (package
25403 (name "python-docusign-esign")
25404 (version "3.1.0")
25405 (source (origin
25406 (method url-fetch)
25407 (uri (pypi-uri "docusign_esign" version))
25408 (sha256
25409 (base32
25410 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
25411 (build-system python-build-system)
25412 ;; Testing requires undocumented setup changes, and so testing is disabled here.
25413 (arguments `(#:tests? #f))
25414 (propagated-inputs
25415 (list python-certifi
25416 python-six
25417 python-dateutil
25418 python-urllib3
25419 python-pyjwt
25420 python-cryptography
25421 python-nose))
25422 (synopsis "DocuSign Python Client")
25423 (description "The Official DocuSign Python Client Library used to interact
25424 with the eSign REST API. Send, sign, and approve documents using this client.")
25425 (home-page "https://www.docusign.com/devcenter")
25426 (license license:expat)))
25427
25428 (define-public python-xattr
25429 (package
25430 (name "python-xattr")
25431 (version "0.9.9")
25432 (source
25433 (origin
25434 (method url-fetch)
25435 (uri (pypi-uri "xattr" version))
25436 (sha256
25437 (base32
25438 "0ipkfblyvp5hylahjkw9zss1ii9xnwjypr3b3ncv989szcg7xjq9"))))
25439 (build-system python-build-system)
25440 (propagated-inputs
25441 (list python-cffi))
25442 (home-page "https://github.com/xattr/xattr")
25443 (synopsis
25444 "Python wrapper for extended file system attributes")
25445 (description "This package provides a Python wrapper for using extended
25446 file system attributes. Extended attributes extend the basic attributes of files
25447 and directories in the file system. They are stored as name:data pairs
25448 associated with file system objects (files, directories, symlinks, etc).")
25449 (license license:expat)))
25450
25451 (define-public python-json-logger
25452 (package
25453 (name "python-json-logger")
25454 (version "0.1.11")
25455 (source
25456 (origin
25457 (method url-fetch)
25458 (uri (pypi-uri "python-json-logger" version))
25459 (sha256
25460 (base32
25461 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
25462 (build-system python-build-system)
25463 (home-page
25464 "https://github.com/madzak/python-json-logger")
25465 (synopsis "JSON log formatter in Python")
25466 (description "This library allows standard Python logging to output log data
25467 as JSON objects. With JSON we can make our logs more readable by machines and
25468 we can stop writing custom parsers for syslog-type records.")
25469 (license license:bsd-3)))
25470
25471 (define-public python-daiquiri
25472 (package
25473 (name "python-daiquiri")
25474 (version "2.1.1")
25475 (source
25476 (origin
25477 (method url-fetch)
25478 (uri (pypi-uri "daiquiri" version))
25479 (sha256
25480 (base32
25481 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
25482 (build-system python-build-system)
25483 (propagated-inputs
25484 (list python-json-logger))
25485 (native-inputs
25486 (list python-mock python-pytest python-setuptools-scm python-six))
25487 (home-page "https://github.com/jd/daiquiri")
25488 (synopsis
25489 "Library to configure Python logging easily")
25490 (description "The daiquiri library provides an easy way to configure
25491 logging in Python. It also provides some custom formatters and handlers.")
25492 (license license:asl2.0)))
25493
25494 (define-public python-pifpaf
25495 (package
25496 (name "python-pifpaf")
25497 (version "3.1.5")
25498 (source
25499 (origin
25500 (method url-fetch)
25501 (uri (pypi-uri "pifpaf" version))
25502 (sha256
25503 (base32
25504 "19bdmxldc2m570isl7hbqgbb20si4sin7pi5fw8sv9py8dyv2s4n"))))
25505 (build-system python-build-system)
25506 (arguments
25507 '(#:phases
25508 (modify-phases %standard-phases
25509 (replace 'check
25510 (lambda _
25511 (invoke "python" "setup.py" "testr" "--slowest"
25512 "--testr-args=until-failure"))))))
25513 (propagated-inputs
25514 (list python-click
25515 python-daiquiri
25516 python-fixtures
25517 python-jinja2
25518 python-pbr
25519 python-psutil
25520 python-xattr))
25521 (native-inputs
25522 (list python-mock python-os-testr python-requests
25523 python-testrepository python-testtools))
25524 (home-page "https://github.com/jd/pifpaf")
25525 (synopsis "Tools and fixtures to manage daemons for testing in Python")
25526 (description "Pifpaf is a suite of fixtures and a command-line tool that
25527 starts and stops daemons for a quick throw-away usage. This is typically
25528 useful when needing these daemons to run integration testing. It originally
25529 evolved from its precursor @code{overtest}.")
25530 (license license:asl2.0)))
25531
25532 (define-public python-pytest-check-links
25533 (package
25534 (name "python-pytest-check-links")
25535 (version "0.3.0")
25536 (source
25537 (origin
25538 (method url-fetch)
25539 ;; URI uses underscores
25540 (uri (pypi-uri "pytest_check_links" version))
25541 (sha256
25542 (base32
25543 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
25544 (build-system python-build-system)
25545 (propagated-inputs
25546 (list python-docutils
25547 python-html5lib
25548 python-nbconvert
25549 python-nbformat
25550 python-pytest
25551 python-six))
25552 (native-inputs
25553 (list python-pbr-minimal))
25554 (home-page "https://github.com/minrk/pytest-check-links")
25555 (synopsis "Check links in files")
25556 (description "This package provides a pytest plugin that checks URLs for
25557 HTML-containing files.")
25558 (license license:bsd-3)))
25559
25560 (define-public python-json5
25561 (package
25562 (name "python-json5")
25563 (version "0.8.5")
25564 (source
25565 (origin
25566 ;; sample.json5 is missing from PyPi source tarball
25567 (method git-fetch)
25568 (uri (git-reference
25569 (url "https://github.com/dpranke/pyjson5")
25570 (commit (string-append "v" version))))
25571 (file-name (git-file-name name version))
25572 (sha256
25573 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
25574 (build-system python-build-system)
25575 (home-page "https://github.com/dpranke/pyjson5")
25576 (synopsis
25577 "Python implementation of the JSON5 data format")
25578 (description
25579 "JSON5 extends the JSON data interchange format to make it slightly more
25580 usable as a configuration language. This Python package implements parsing and
25581 dumping of JSON5 data structures.")
25582 (license license:asl2.0)))
25583
25584 (define-public python-freetype-py
25585 (package
25586 (name "python-freetype-py")
25587 (version "2.3.0")
25588 (source
25589 (origin
25590 (method url-fetch)
25591 (uri (pypi-uri "freetype-py" version ".zip"))
25592 (sha256
25593 (base32 "1l55wzy21jmdayjna29ahzxrf2fp68580978rs6kap1a4zilrdpr"))))
25594 (build-system python-build-system)
25595 (native-inputs
25596 (list python-setuptools-scm
25597 unzip))
25598 (inputs (list freetype))
25599 (arguments
25600 `(#:phases
25601 ;; Note: the pypi archive does not contain tests, but running the check
25602 ;; phase will at least test whether the module loads correctly.
25603 (modify-phases %standard-phases
25604 (add-before 'build 'embed-library-reference
25605 (lambda* (#:key inputs #:allow-other-keys)
25606 (substitute* "freetype/raw.py"
25607 (("^(filename = ).*" _ >)
25608 (string-append > "\"" (search-input-file inputs "/lib/libfreetype.so")
25609 "\"\n"))))))))
25610 (home-page "https://github.com/rougier/freetype-py")
25611 (synopsis "Freetype python bindings")
25612 (description "Freetype Python provides bindings for the FreeType
25613 library. Only the high-level API is bound.")
25614 (license license:bsd-3)))
25615
25616 (define-public python-frozendict
25617 (package
25618 (name "python-frozendict")
25619 (version "1.2")
25620 (source
25621 (origin
25622 (method url-fetch)
25623 (uri (pypi-uri "frozendict" version))
25624 (sha256
25625 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
25626 (build-system python-build-system)
25627 (home-page "https://github.com/slezica/python-frozendict")
25628 (synopsis "Simple immutable mapping for Python")
25629 (description
25630 "@dfn{frozendict} is an immutable wrapper around dictionaries that
25631 implements the complete mapping interface. It can be used as a drop-in
25632 replacement for dictionaries where immutability is desired.")
25633 (license license:expat)))
25634
25635 (define-public python-unpaddedbase64
25636 (package
25637 (name "python-unpaddedbase64")
25638 (version "2.1.0")
25639 (source
25640 (origin
25641 (method url-fetch)
25642 (uri (pypi-uri "unpaddedbase64" version))
25643 (sha256
25644 (base32 "01ghlmw63fgslwj8j74vkpf1kqvr7a4agm6nyn89vqwx106ccwvj"))))
25645 (build-system python-build-system)
25646 (arguments
25647 `(#:phases
25648 (modify-phases %standard-phases
25649 (replace 'check
25650 (lambda* (#:key inputs tests? #:allow-other-keys)
25651 (when tests?
25652 (copy-recursively (string-append
25653 (assoc-ref inputs "tests") "/tests")
25654 "tests")
25655 (invoke "python" "-m" "pytest" "-vv")))))))
25656 (native-inputs
25657 `(("python-pytest" ,python-pytest)
25658 ("tests"
25659 ;; The release on pypi comes without tests. We can't build from this
25660 ;; checkout, though, because installation requires an invocation of
25661 ;; poetry.
25662 ,(origin
25663 (method git-fetch)
25664 (uri (git-reference
25665 (url "https://github.com/matrix-org/python-unpaddedbase64")
25666 (commit (string-append "v" version))))
25667 (file-name (git-file-name name version))
25668 (sha256
25669 (base32
25670 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))))
25671 (home-page "https://github.com/matrix-org/python-unpaddedbase64")
25672 (synopsis "Encode and decode Base64 without “=” padding")
25673 (description
25674 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
25675 using “=” characters. However this conveys no benefit so many protocols
25676 choose to use Base64 without the “=” padding.")
25677 (license license:asl2.0)))
25678
25679 (define-public python-py-cpuinfo
25680 ;; This is the first commit where riscv64-linux support is available.
25681 ;; We can move back to pypi releases with the next release.
25682 (let ((commit "4d6987e5c30f2ebacb20781892c01329042cce60")
25683 (revision "1"))
25684 (package
25685 (name "python-py-cpuinfo")
25686 (version (git-version "8.0.0" revision commit))
25687 (source
25688 (origin
25689 (method git-fetch)
25690 (uri (git-reference
25691 (url "https://github.com/workhorsy/py-cpuinfo")
25692 (commit commit)))
25693 (file-name (git-file-name name version))
25694 (sha256
25695 (base32
25696 "0h5wi1bfcqqr1x3j1pa7dmkx7siprsyksbsy80fl2sdrrgpji0b0"))))
25697 (build-system python-build-system)
25698 (home-page "https://github.com/workhorsy/py-cpuinfo")
25699 (synopsis "Get CPU info with Python")
25700 (description
25701 "This Python module returns the CPU info by using the best sources of
25702 information for your operating system.")
25703 (license license:expat))))
25704
25705 (define-public python-canonicaljson
25706 (package
25707 (name "python-canonicaljson")
25708 (version "1.4.0")
25709 (source
25710 (origin
25711 (method url-fetch)
25712 (uri (pypi-uri "canonicaljson" version))
25713 (sha256
25714 (base32 "0c86g0vvzdcg3nrcsqnbzlfhpprc2i894p8i14hska56yl27d6w9"))))
25715 (build-system python-build-system)
25716 (propagated-inputs
25717 (list python-six python-frozendict python-simplejson))
25718 (home-page "https://github.com/matrix-org/python-canonicaljson")
25719 (synopsis "Canonical JSON")
25720 (description
25721 "Deterministically encode JSON.
25722
25723 @itemize
25724 @item Encodes objects and arrays as RFC 7159 JSON.
25725 @item Sorts object keys so that you get the same result each time.
25726 @item Has no insignificant whitespace to make the output as small as possible.
25727 @item Escapes only the characters that must be escaped, U+0000 to
25728 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
25729 @item Uses the shortest escape sequence for each escaped character.
25730 @item Encodes the JSON as UTF-8.
25731 @item Can encode frozendict immutable dictionaries.
25732 @end itemize")
25733 (license license:asl2.0)))
25734
25735 (define-public python-signedjson
25736 (package
25737 (name "python-signedjson")
25738 (version "1.1.1")
25739 (source
25740 (origin
25741 (method url-fetch)
25742 (uri (pypi-uri "signedjson" version))
25743 (sha256
25744 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
25745 (build-system python-build-system)
25746 (propagated-inputs
25747 (list python-canonicaljson python-importlib-metadata python-pynacl
25748 python-typing-extensions python-unpaddedbase64))
25749 (native-inputs
25750 (list python-setuptools-scm))
25751 (home-page "https://github.com/matrix-org/python-signedjson")
25752 (synopsis "Sign JSON objects with ED25519 signatures")
25753 (description
25754 "Sign JSON objects with ED25519 signatures.
25755
25756 @itemize
25757 @item More than one entity can sign the same object.
25758 @item Each entity can sign the object with more than one key making it easier to
25759 rotate keys
25760 @item ED25519 can be replaced with a different algorithm.
25761 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
25762 key.
25763 @end itemize")
25764 (license license:asl2.0)))
25765
25766 (define-public python-daemonize
25767 (package
25768 (name "python-daemonize")
25769 (version "2.5.0")
25770 (source
25771 (origin
25772 (method url-fetch)
25773 (uri (pypi-uri "daemonize" version))
25774 (sha256
25775 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
25776 (build-system python-build-system)
25777 (home-page "https://github.com/thesharp/daemonize")
25778 (synopsis "Library for writing system daemons in Python")
25779 (description "Daemonize is a library for writing system daemons in Python.")
25780 (license license:expat)))
25781
25782 (define-public python-pymacaroons
25783 (package
25784 (name "python-pymacaroons")
25785 (version "0.13.0")
25786 (source
25787 (origin
25788 (method url-fetch)
25789 (uri (pypi-uri "pymacaroons" version))
25790 (sha256
25791 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
25792 (build-system python-build-system)
25793 (propagated-inputs
25794 (list python-six python-pynacl))
25795 (home-page "https://github.com/ecordell/pymacaroons")
25796 (synopsis "Python Macaroon Library")
25797 (description
25798 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
25799 tokens, macaroons embed caveats that define specific authorization
25800 requirements for the target service, the service that issued the root macaroon
25801 and which is capable of verifying the integrity of macaroons it receives.
25802
25803 Macaroons allow for delegation and attenuation of authorization. They are
25804 simple and fast to verify, and decouple authorization policy from the
25805 enforcement of that policy.")
25806 (license license:expat)))
25807
25808 (define-public python-ldap3
25809 (package
25810 (name "python-ldap3")
25811 (version "2.7")
25812 (home-page "https://github.com/cannatag/ldap3")
25813 (source
25814 (origin
25815 (method git-fetch)
25816 (uri (git-reference (url home-page)
25817 (commit (string-append "v" version))))
25818 (file-name (git-file-name name version))
25819 (sha256
25820 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
25821 (build-system python-build-system)
25822 (arguments
25823 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
25824 #:phases (modify-phases %standard-phases
25825 (replace 'check
25826 (lambda* (#:key tests? #:allow-other-keys)
25827 (when tests?
25828 (invoke "nosetests" "-s" "test"))
25829 #t)))))
25830 (native-inputs
25831 (list python-nose))
25832 (propagated-inputs
25833 (list python-gssapi python-pyasn1))
25834 (synopsis "Python LDAP client")
25835 (description
25836 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
25837 library.")
25838 (license license:lgpl3+)))
25839
25840 (define-public python-boltons
25841 (package
25842 (name "python-boltons")
25843 (version "20.0.0")
25844 (source
25845 (origin
25846 (method url-fetch)
25847 (uri (pypi-uri "boltons" version))
25848 (sha256
25849 (base32
25850 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
25851 (build-system python-build-system)
25852 (home-page "https://github.com/mahmoud/boltons")
25853 (synopsis "Extensions to the Python standard library")
25854 (description
25855 "Boltons is a set of over 230 pure-Python utilities in the same spirit
25856 as — and yet conspicuously missing from — the standard library, including:
25857
25858 @itemize
25859 @item Atomic file saving, bolted on with fileutils
25860 @item A highly-optimized OrderedMultiDict, in dictutils
25861 @item Two types of PriorityQueue, in queueutils
25862 @item Chunked and windowed iteration, in iterutils
25863 @item Recursive data structure iteration and merging, with iterutils.remap
25864 @item Exponential backoff functionality, including jitter, through
25865 iterutils.backoff
25866 @item A full-featured TracebackInfo type, for representing stack traces, in
25867 tbutils
25868 @end itemize")
25869 (license license:bsd-3)))
25870
25871 (define-public python-eliot
25872 (package
25873 (name "python-eliot")
25874 (version "1.13.0")
25875 (source
25876 (origin
25877 (method url-fetch)
25878 (uri (pypi-uri "eliot" version))
25879 (sha256
25880 (base32 "1xzzhsjrrw430dc84vamf683bwp9i0nr86xf2iav6yla615ijq2p"))))
25881 (build-system python-build-system)
25882 (arguments
25883 `(#:phases
25884 (modify-phases %standard-phases
25885 (add-after 'unpack 'remove-journald-support
25886 (lambda _
25887 (for-each delete-file
25888 '("eliot/tests/test_journald.py"
25889 "eliot/journald.py"))
25890 #t))
25891 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
25892 ;; remove command-line tool's tests. TODO eliot-prettyprint should
25893 ;; be installed and these tests should pass.
25894 (lambda _
25895 (delete-file "eliot/tests/test_prettyprint.py")
25896 #t))
25897 (add-after 'remove-eliot-prettyprint-tests 'remove-failing-tests
25898 (lambda _
25899 ;; These tests started to fail after updating python-pandas to
25900 ;; 1.3.3 and python-dask to 2021.9.1.
25901 (substitute* "eliot/tests/test_validation.py"
25902 (("test_omitLoggerFromActionType")
25903 "_test_omitLoggerFromActionType")
25904 (("test_logCallsDefaultLoggerWrite")
25905 "_test_logCallsDefaultLoggerWrite"))
25906 #t)))))
25907 (propagated-inputs
25908 (list python-boltons python-pyrsistent python-six
25909 python-zope-interface))
25910 (native-inputs
25911 (list python-black
25912 python-coverage
25913 python-dask
25914 python-flake8
25915 python-hypothesis
25916 python-pytest
25917 python-setuptools
25918 python-sphinx
25919 python-sphinx-rtd-theme
25920 python-testtools
25921 python-twine
25922 python-twisted))
25923 (home-page "https://github.com/itamarst/eliot/")
25924 (synopsis "Eliot: the logging system that tells you why it happened")
25925 (description
25926 "@dfn{eliot} is a Python logging system that outputs causal chains of
25927 actions: actions can spawn other actions, and eventually they either succeed
25928 or fail. The resulting logs tell you the story of what your software did: what
25929 happened, and what caused it.")
25930 (license license:asl2.0)))
25931
25932 (define-public python-pem
25933 (package
25934 (name "python-pem")
25935 (version "20.1.0")
25936 (source
25937 (origin
25938 (method url-fetch)
25939 (uri (pypi-uri "pem" version))
25940 (sha256
25941 (base32
25942 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
25943 (build-system python-build-system)
25944 (native-inputs
25945 (list python-certifi
25946 python-coverage
25947 python-pretend
25948 python-pyopenssl
25949 python-pytest
25950 python-sphinx
25951 python-twisted))
25952 (home-page "https://pem.readthedocs.io/")
25953 (synopsis "Easy PEM file parsing in Python")
25954 (description
25955 "This package provides a Python module for parsing and splitting PEM files.")
25956 (license license:expat)))
25957
25958 (define-public python-txsni
25959 ;; We need a few commits on top of 0.1.9 for compatibility with newer
25960 ;; Python and OpenSSL.
25961 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
25962 (revision "0"))
25963 (package
25964 (name "python-txsni")
25965 (version (git-version "0.1.9" revision commit))
25966 (home-page "https://github.com/glyph/txsni")
25967 (source
25968 (origin
25969 (method git-fetch)
25970 (uri (git-reference (url home-page) (commit commit)))
25971 (file-name (git-file-name name version))
25972 (sha256
25973 (base32
25974 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
25975 (build-system python-build-system)
25976 (propagated-inputs
25977 (list python-pyopenssl python-service-identity python-twisted))
25978 (synopsis "Run TLS servers with Twisted")
25979 (description
25980 "This package provides an easy-to-use SNI endpoint for use
25981 with the Twisted web framework.")
25982 (license license:expat))))
25983
25984 (define-public python-txacme
25985 (package
25986 (name "python-txacme")
25987 (version "0.9.2")
25988 (source
25989 (origin
25990 (method url-fetch)
25991 (uri (pypi-uri "txacme" version))
25992 (sha256
25993 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
25994 (build-system python-build-system)
25995 (propagated-inputs
25996 (list python-acme
25997 python-attrs
25998 python-eliot
25999 python-josepy
26000 python-pem
26001 python-treq
26002 python-twisted
26003 python-txsni))
26004 (native-inputs
26005 (list python-fixtures
26006 python-hypothesis
26007 python-mock
26008 python-service-identity
26009 python-testrepository
26010 python-testscenarios
26011 python-testtools))
26012 (home-page "https://github.com/twisted/txacme")
26013 (synopsis "Twisted implexmentation of the ACME protocol")
26014 (description
26015 "ACME is Automatic Certificate Management Environment, a protocol that
26016 allows clients and certificate authorities to automate verification and
26017 certificate issuance. The ACME protocol is used by the free Let's Encrypt
26018 Certificate Authority.
26019
26020 txacme is an implementation of the protocol for Twisted, the event-driven
26021 networking engine for Python.")
26022 (license license:expat)))
26023
26024 (define-public python-pysaml2
26025 (package
26026 (name "python-pysaml2")
26027 (version "6.5.1")
26028 (source
26029 (origin
26030 (method url-fetch)
26031 (uri (pypi-uri "pysaml2" version))
26032 (sha256
26033 (base32
26034 "1xk2x0slz1f8cqv7vn77qx99xfd1mshhswiwrljk9m72w2m9iivd"))))
26035 (build-system python-build-system)
26036 (propagated-inputs
26037 (list python-cryptography
26038 python-dateutil
26039 python-defusedxml
26040 python-importlib-resources
26041 python-pyopenssl
26042 python-pytz
26043 python-requests
26044 python-six
26045 python-xmlschema))
26046 (home-page "https://idpy.org")
26047 (synopsis "Python implementation of SAML Version 2 Standard")
26048 (description
26049 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
26050 It contains all necessary pieces for building a SAML2 service provider or
26051 an identity provider. The distribution contains examples of both.
26052
26053 This package was originally written to work in a WSGI environment, but
26054 there are extensions that allow you to use it with other frameworks.")
26055 (license license:asl2.0)))
26056
26057 (define-public python-click-plugins
26058 (package
26059 (name "python-click-plugins")
26060 (version "1.1.1")
26061 (source
26062 (origin
26063 (method url-fetch)
26064 (uri (pypi-uri "click-plugins" version))
26065 (sha256
26066 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
26067 (build-system python-build-system)
26068 (native-inputs
26069 (list python-pytest))
26070 (propagated-inputs
26071 (list python-click))
26072 (synopsis "Extension for Click to register external CLI commands")
26073 (description "This package provides n extension module for Click to
26074 register external CLI commands via setuptools entry-points.")
26075 (home-page "https://github.com/click-contrib/click-plugins")
26076 (license license:bsd-3)))
26077
26078 (define-public python-diceware
26079 (package
26080 (name "python-diceware")
26081 (version "0.9.6")
26082 (source
26083 (origin
26084 (method url-fetch)
26085 (uri (pypi-uri "diceware" version))
26086 (sha256
26087 (base32
26088 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
26089 (build-system python-build-system)
26090 (native-inputs
26091 (list python-coverage python-pytest python-pytest-runner))
26092 (home-page "https://github.com/ulif/diceware/")
26093 (synopsis "Generates memorable passphrases")
26094 (description "This package generates passphrases by concatenating words
26095 randomly picked from wordlists. It supports several sources of
26096 randomness (including real life dice) and different wordlists (including
26097 cryptographically signed ones).")
26098 (license license:gpl3+)))
26099
26100 (define-public python-dictdiffer
26101 (package
26102 (name "python-dictdiffer")
26103 (version "0.9.0")
26104 (source (origin
26105 (method url-fetch)
26106 (uri (pypi-uri "dictdiffer" version))
26107 (sha256
26108 (base32
26109 "0y3mk74qm2q9hsm37892i1wzn8bbdrvbs4nmnvqwq4z6pxgwzfhp"))))
26110 (build-system python-build-system)
26111 (arguments
26112 ;; XXX: The PyPI tarball lacks tests and the git repository
26113 ;; fails to determine version.
26114 '(#:tests? #f))
26115 (native-inputs
26116 (list python-pytest-runner python-setuptools-scm))
26117 (home-page "https://github.com/inveniosoftware/dictdiffer")
26118 (synopsis "Diff and patch Python dictionary objects")
26119 (description
26120 "Dictdiffer is a Python module that helps you to diff and patch
26121 dictionaries.")
26122 (license license:expat)))
26123
26124 (define-public python-dictpath
26125 (package
26126 (name "python-dictpath")
26127 (version "0.1.3")
26128 (source
26129 (origin
26130 (method url-fetch)
26131 (uri (pypi-uri "dictpath" version))
26132 (sha256
26133 (base32 "1n4hq4wbgaw59bbb16nhkgg5wk8sl4iw940vjrgx4xmifqxxw73m"))))
26134 (build-system python-build-system)
26135 (native-inputs (list python-pytest python-pytest-cov python-pytest-flake8))
26136 (home-page "https://github.com/p1c2u/pathable")
26137 (synopsis "Object-oriented path library for Python")
26138 (description "This object-oriented dictionary path Python library enables
26139 traversing resources like paths or accessing resources on demand with separate
26140 accessor layer.")
26141 (license license:asl2.0)))
26142
26143 (define-public pyzo
26144 (package
26145 (name "pyzo")
26146 (version "4.12.3")
26147 (source
26148 (origin
26149 (method git-fetch)
26150 (uri (git-reference
26151 (url "https://github.com/pyzo/pyzo.git")
26152 (commit (string-append "v" version))))
26153 (file-name (git-file-name name version))
26154 (sha256
26155 (base32
26156 "0v6rgp52bf9za2spxx9c1yc6wmskvlsj81iw0gipjy7y8vpypgn2"))))
26157 (build-system python-build-system)
26158 (arguments
26159 `(#:phases
26160 (modify-phases %standard-phases
26161 (add-before 'check 'fix-home-directory
26162 (lambda _
26163 ;; Tests fail with "Permission denied: '/homeless-shelter'".
26164 (setenv "HOME" "/tmp"))))
26165 ;; Tests fail with "Uncaught Python exception: python: undefined
26166 ;; symbol: objc_getClass".
26167 #:tests? #f))
26168 (propagated-inputs
26169 (list python-pyqt))
26170 (home-page "https://pyzo.org")
26171 (synopsis
26172 "Python IDE for scientific computing")
26173 (description
26174 "Pyzo is a Python IDE focused on interactivity and introspection,
26175 which makes it very suitable for scientific computing. Its practical
26176 design is aimed at simplicity and efficiency.
26177
26178 It consists of two main components, the editor and the shell, and uses
26179 a set of pluggable tools to help the programmer in various ways. Some
26180 example tools are source structure, project manager, interactive help,
26181 workspace...")
26182 (license license:bsd-2)))
26183
26184 (define-public python-osc
26185 (package
26186 (name "python-osc")
26187 (version "1.7.4")
26188 (source
26189 (origin
26190 (method url-fetch)
26191 (uri (pypi-uri "python-osc" version))
26192 (sha256
26193 (base32
26194 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
26195 (build-system python-build-system)
26196 (home-page "https://github.com/attwad/python-osc")
26197 (synopsis "Open Sound Control server and client implementations")
26198 (description
26199 "@code{python-osc} is a pure Python library with no external
26200 dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
26201 Open Sound Control 1.0} specification.")
26202 (license license:unlicense)))
26203
26204 (define-public python-voluptuous
26205 (package
26206 (name "python-voluptuous")
26207 (version "0.11.7")
26208 (source
26209 (origin
26210 (method url-fetch)
26211 (uri (pypi-uri "voluptuous" version))
26212 (sha256
26213 (base32
26214 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
26215 (build-system python-build-system)
26216 (native-inputs
26217 (list python-nose))
26218 (home-page "https://github.com/alecthomas/voluptuous")
26219 (synopsis "Python data validation library")
26220 (description
26221 "Voluptuous is a Python data validation library. It is primarily
26222 intended for validating data coming into Python as JSON, YAML, etc.")
26223 (license license:bsd-3)))
26224
26225 (define-public python-cmd2
26226 (package
26227 (name "python-cmd2")
26228 (version "2.3.3")
26229 (source
26230 (origin
26231 (method url-fetch)
26232 (uri (pypi-uri "cmd2" version))
26233 (sha256
26234 (base32
26235 "0h1naik558qh48gx2iyy0a0khvw5fz0in69y84mbrhsm9nq7w3bm"))))
26236 (build-system python-build-system)
26237 (arguments
26238 '(#:phases
26239 (modify-phases %standard-phases
26240 (replace 'check
26241 (lambda* (#:key tests? #:allow-other-keys)
26242 (if tests?
26243 (invoke "pytest" "-vv" "-k"
26244 ;; These tests fail because no EDITOR is in PATH.
26245 "not test_find_editor_not_specified \
26246 and not test_transcript")
26247 (format #t "test suite not run~%")))))))
26248 (propagated-inputs
26249 (list python-attrs python-colorama python-pyperclip python-wcwidth))
26250 (native-inputs
26251 (list python-invoke
26252 python-mock
26253 python-pytest
26254 python-pytest-cov
26255 python-pytest-mock
26256 python-setuptools-scm))
26257 (home-page "https://github.com/python-cmd2/cmd2")
26258 (synopsis "Tool for building interactive command line applications")
26259 (description
26260 "Cmd2 is a tool for building interactive command line applications in
26261 Python. Its goal is to make it quick and easy for developers to build
26262 feature-rich and user-friendly interactive command line applications. It
26263 provides a simple API which is an extension of Python's built-in @code{cmd}
26264 module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
26265 make your life easier and eliminates much of the boilerplate code which would
26266 be necessary when using @code{cmd}.")
26267 (license license:expat)))
26268
26269 (define-public python-pytidylib
26270 (package
26271 (name "python-pytidylib")
26272 (version "0.3.2")
26273 (source (origin
26274 (method url-fetch)
26275 (uri (pypi-uri "pytidylib" version))
26276 (sha256
26277 (base32
26278 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
26279 (build-system python-build-system)
26280 (arguments
26281 '(#:phases
26282 (modify-phases %standard-phases
26283 (add-before 'build 'qualify-libtidy
26284 (lambda* (#:key inputs #:allow-other-keys)
26285 (let ((libtidy (search-input-file inputs "/lib/libtidy.so")))
26286 (substitute* "tidylib/tidy.py"
26287 (("ctypes\\.util\\.find_library\\('tidy'\\)")
26288 (format #f "'~a'" libtidy)))
26289 #t))))))
26290 (inputs (list tidy))
26291 (home-page "https://github.com/countergram/pytidylib")
26292 (synopsis "Python wrapper for HTML Tidy library")
26293 (description
26294 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
26295 allows you, from Python code, to “fix” invalid (X)HTML markup.")
26296 (license license:expat)))
26297
26298 (define-public python-mujson
26299 (package
26300 (name "python-mujson")
26301 (version "1.4")
26302 (source
26303 (origin
26304 (method url-fetch)
26305 (uri (pypi-uri "mujson" version))
26306 (sha256
26307 (base32
26308 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
26309 (build-system python-build-system)
26310 (home-page "https://github.com/mattgiles/mujson")
26311 (synopsis "Use the fastest JSON functions available at import time")
26312 (description "This package selects the fastest JSON functions available
26313 at import time.")
26314 (license license:expat)))
26315
26316 (define-public python-bashlex
26317 (package
26318 (name "python-bashlex")
26319 (version "0.14")
26320 (source
26321 (origin
26322 (method url-fetch)
26323 (uri (pypi-uri "bashlex" version))
26324 (sha256
26325 (base32
26326 "1z9g96fgsfpdwawp4sb5x6hbdhmda7kgmcrqlf9xx4bs1f8f14js"))))
26327 (build-system python-build-system)
26328 (arguments
26329 `(#:phases
26330 (modify-phases %standard-phases
26331 (add-before 'build 'pregenerate-yacc-tables
26332 (lambda _
26333 ;; parser.py caches tables, which attempts to write to site lib
26334 ;; see https://github.com/idank/bashlex/issues/51
26335 (invoke "python" "-c" "import bashlex"))))))
26336 (home-page
26337 "https://github.com/idank/bashlex")
26338 (synopsis "Python parser for bash")
26339 (description "@code{bashlex} is a Python port of the parser used
26340 internally by GNU bash.
26341
26342 For the most part it's transliterated from C, the major differences are:
26343
26344 @itemize
26345 @item it does not execute anything
26346 @item it is reentrant
26347 @item it generates a complete AST
26348 @end itemize
26349 ")
26350 (license license:gpl3+)))
26351
26352 (define-public python-jinxed
26353 (package
26354 (name "python-jinxed")
26355 (version "1.0.0")
26356 (source
26357 (origin
26358 (method url-fetch)
26359 (uri (pypi-uri "jinxed" version))
26360 (sha256
26361 (base32
26362 "1n7vl03rhjd0xhjgbjlh8x9f8yfbhamcwkgvs4jg7g5qj8f0wk89"))))
26363 (build-system python-build-system)
26364 (arguments
26365 '(#:phases
26366 (modify-phases %standard-phases
26367 (add-before 'check 'set-environment-variables
26368 (lambda* (#:key inputs #:allow-other-keys)
26369 (let ((ncurses (assoc-ref inputs "ncurses")))
26370 (setenv "TERM" "LINUX")
26371 (setenv "TERMINFO" (string-append ncurses "/share/terminfo"))
26372 #t))))
26373 #:tests? #f)) ; _curses.error: setupterm: could not find terminal
26374 (native-inputs
26375 (list ncurses))
26376 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
26377 (synopsis "Jinxed Terminal Library")
26378 (description
26379 "Jinxed is an implementation of a subset of the Python curses library.")
26380 (license license:mpl2.0)))
26381
26382 (define-public python-svgutils
26383 (package
26384 (name "python-svgutils")
26385 (version "0.3.4")
26386 (source
26387 (origin
26388 (method url-fetch)
26389 (uri (pypi-uri "svgutils" version))
26390 (sha256
26391 (base32
26392 "0lz0w2ajdvwd269a7ppnzawmx8px0116j0nx8xvhlihxrd28zx4y"))))
26393 (build-system python-build-system)
26394 (propagated-inputs
26395 (list python-lxml))
26396 (home-page "https://svgutils.readthedocs.io")
26397 (synopsis "Python SVG editor")
26398 (description "This is an utility package that helps with editing and
26399 concatenating SVG files. It is especially directed at scientists preparing
26400 final figures for submission to journals. So far it supports arbitrary
26401 placement and scaling of SVG figures and adding markers, such as labels.")
26402 (license license:expat)))
26403
26404 (define-public python-blessed
26405 (package
26406 (name "python-blessed")
26407 (version "1.17.8")
26408 (source
26409 (origin
26410 (method url-fetch)
26411 (uri (pypi-uri "blessed" version))
26412 (sha256
26413 (base32
26414 "1wdj342sk22hfrg0n91x2qnqsbzbiyq9y009v3pxnvfzn9bx0wbn"))
26415 (modules '((guix build utils)))
26416 (snippet
26417 '(begin
26418 ;; Don't get hung up on Windows test failures.
26419 (delete-file "blessed/win_terminal.py") #t))))
26420 (build-system python-build-system)
26421 (propagated-inputs
26422 (list python-jinxed python-six python-wcwidth))
26423 (native-inputs
26424 (list python-mock python-pytest))
26425 (home-page "https://github.com/jquast/blessed")
26426 (synopsis "Wrapper around terminal capabilities")
26427 (description
26428 "Blessed is a thin, practical wrapper around terminal styling, screen
26429 positioning, and keyboard input.")
26430 (license license:expat)))
26431
26432 (define-public python-readme-renderer
26433 (package
26434 (name "python-readme-renderer")
26435 (version "34.0")
26436 (source
26437 (origin
26438 (method url-fetch)
26439 (uri (pypi-uri "readme_renderer" version))
26440 (sha256
26441 (base32
26442 "1c75h9znffc2lh4j56yg23l5ifj5l8fbdq3kfigi8vbh45zx3d6z"))))
26443 (build-system python-build-system)
26444 (arguments
26445 '(#:phases (modify-phases %standard-phases
26446 (add-after 'unpack 'loosen-cmarkgfm-dependency
26447 (lambda _
26448 ;; Permit newer versions of cmarkgfm.
26449 (substitute* "setup.py"
26450 (("cmarkgfm>=0\\.5\\.0,<0\\.7\\.0")
26451 "cmarkgfm>=0.5.0"))))
26452 (replace 'check
26453 (lambda* (#:key tests? #:allow-other-keys)
26454 (when tests?
26455 ;; The GFM tests fail due to slight differences in the
26456 ;; generated vs expected HTML due to using a more
26457 ;; recent bleach version (see:
26458 ;; https://github.com/pypa/readme_renderer/issues/234).
26459 (invoke "pytest" "-vv" "-k" "not GFM")))))))
26460 (propagated-inputs
26461 (list python-bleach python-docutils python-pygments
26462
26463 ;; Optional dependencies.
26464 python-cmarkgfm)) ;required by postorius
26465 (native-inputs
26466 (list python-mock python-pytest))
26467 (home-page "https://github.com/pypa/readme_renderer")
26468 (synopsis "Render README files in Warehouse")
26469 (description
26470 "Readme Renderer is a library that will safely render arbitrary README
26471 files into HTML. It is designed to be used in Warehouse to render the
26472 @code{long_description} for packages. It can handle Markdown, reStructuredText,
26473 and plain text.")
26474 (license license:asl2.0)))
26475
26476 (define-public python-lazr-delegates
26477 (package
26478 (name "python-lazr-delegates")
26479 (version "2.0.4")
26480 (source
26481 (origin
26482 (method url-fetch)
26483 (uri (pypi-uri "lazr.delegates" version))
26484 (sha256
26485 (base32
26486 "1rdnl85j9ayp8n85l0ciip621j9dcziz5qnmv2m7krgwgcn31vfx"))))
26487 (build-system python-build-system)
26488 (arguments
26489 '(#:phases
26490 (modify-phases %standard-phases
26491 (replace 'check
26492 (lambda* (#:key tests? #:allow-other-keys)
26493 (when tests? (invoke "nosetests")))))))
26494 (native-inputs
26495 (list python-nose))
26496 (propagated-inputs
26497 (list python-zope-interface))
26498 (home-page "https://launchpad.net/lazr.delegates")
26499 (synopsis "Easily write objects that delegate behavior")
26500 (description
26501 "The @code{lazr.delegates} package makes it easy to write objects that
26502 delegate behavior to another object. The new object adds some property or
26503 behavior on to the other object, while still providing the underlying interface,
26504 and delegating behavior.")
26505 (license license:lgpl3)))
26506
26507 (define-public python-lazr-config
26508 (package
26509 (name "python-lazr-config")
26510 (version "2.2.3")
26511 (source
26512 (origin
26513 (method url-fetch)
26514 (uri (pypi-uri "lazr.config" version))
26515 (sha256
26516 (base32
26517 "1qdbrzl61q7cjhbnxvw9y3frcr935y7diwy15xrwcv9ynvw76jmp"))))
26518 (build-system python-build-system)
26519 (arguments
26520 '(#:phases
26521 (modify-phases %standard-phases
26522 (replace 'check
26523 (lambda _
26524 (invoke "python" "-s" "-m" "nose" "-P" "lazr"))))))
26525 (native-inputs
26526 (list python-nose))
26527 (propagated-inputs
26528 (list python-lazr-delegates python-zope-interface))
26529 (home-page "https://launchpad.net/lazr.config")
26530 (synopsis "Create configuration schemas and process and validate configurations")
26531 (description
26532 "The LAZR config system is typically used to manage process configuration.
26533 Process configuration is for saying how things change when we run systems on
26534 different machines, or under different circumstances. This system uses ini-like
26535 file format of section, keys, and values. The config file supports inheritance
26536 to minimize duplication of information across files. The format supports schema
26537 validation.")
26538 (license license:lgpl3)))
26539
26540 (define-public python-flufl-bounce
26541 (package
26542 (name "python-flufl-bounce")
26543 (version "4.0")
26544 (source
26545 (origin
26546 (method url-fetch)
26547 (uri (pypi-uri "flufl.bounce" version))
26548 (sha256
26549 (base32
26550 "0c9qc2l47lyqnpwskp6vvi7m3jqh6hx42v6d35dgxh3fjzmlll15"))))
26551 (build-system python-build-system)
26552 (arguments
26553 (list #:phases
26554 #~(modify-phases %standard-phases
26555 (replace 'check
26556 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
26557 (when tests?
26558 (with-directory-excursion
26559 (string-append (site-packages inputs outputs) "/flufl")
26560 (invoke "python" "-m" "nose2" "-v"))))))))
26561 (propagated-inputs
26562 (list python-atpublic python-zope-interface))
26563 (native-inputs
26564 (list python-flufl-testing python-nose2))
26565 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
26566 (synopsis "Email bounce detectors")
26567 (description "The @code{flufl.bounce} library provides a set of heuristics
26568 and an API for detecting the original bouncing email addresses from a bounce
26569 message. Many formats found in the wild are supported, as are VERP and
26570 RFC 3464.")
26571 (license (list license:asl2.0
26572 license:lgpl3)))) ; only for setup_headers.py
26573
26574 (define-public python-flufl-i18n
26575 (package
26576 (name "python-flufl-i18n")
26577 (version "3.0")
26578 (source
26579 (origin
26580 (method url-fetch)
26581 (uri (pypi-uri "flufl.i18n" version))
26582 (sha256
26583 (base32
26584 "1flwpn1xhgc957zj3zxw92dhdjh0lsy0hdvzq32dzqpsajfsvq1r"))))
26585 (build-system python-build-system)
26586 (propagated-inputs
26587 (list python-atpublic))
26588 (home-page "https://flufli18n.readthedocs.io")
26589 (synopsis "API for Python internationalization")
26590 (description
26591 "This package provides a high-level, convenient API for managing
26592 internationalization/translation contexts in Python applications. There is a
26593 simple API for single-context applications, such as command line scripts which
26594 only need to translate into one language during the entire course of their
26595 execution. There is a more flexible, but still convenient API for multi-context
26596 applications, such as servers, which may need to switch language contexts for
26597 different tasks.")
26598 (license license:asl2.0)))
26599
26600 (define-public python-flufl-lock
26601 (package
26602 (name "python-flufl-lock")
26603 (version "4.0")
26604 (source
26605 (origin
26606 (method url-fetch)
26607 (uri (pypi-uri "flufl.lock" version))
26608 (sha256
26609 (base32
26610 "055941zyma3wfx25jhm8wcsghpv3jc3iwi1gdrdjhzcnfhn62lxq"))))
26611 (build-system python-build-system)
26612 (propagated-inputs
26613 (list python-atpublic python-psutil))
26614 (home-page "https://flufllock.readthedocs.io")
26615 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
26616 (description
26617 "The @dfn{flufl.lock} package provides NFS-safe file locking with
26618 timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
26619 @code{open} system call but uses a lockfile. Lock objects support lock-breaking
26620 and have a maximum lifetime built-in.")
26621 (license (list license:asl2.0
26622 license:lgpl3)))) ; only for setup_helpers.py
26623
26624 (define-public python-flufl-testing
26625 (package
26626 (name "python-flufl-testing")
26627 (version "0.8")
26628 (source
26629 (origin
26630 (method url-fetch)
26631 (uri (pypi-uri "flufl.testing" version))
26632 (sha256
26633 (base32
26634 "1nkm95mhcfhl4x5jgs6y97ikszaxsfh07nyawsih6cxxm6l62641"))))
26635 (build-system python-build-system)
26636 (arguments '(#:tests? #f)) ;no tests
26637 (home-page "https://gitlab.com/warsaw/flufl.testing")
26638 (synopsis "Collection of test tool plugins")
26639 (description
26640 "This package contains a small collection of test tool plugins for
26641 @code{nose2} and @code{flake8}.")
26642 (license license:asl2.0)))
26643
26644 (define-public python-devtools
26645 (package
26646 (name "python-devtools")
26647 (version "0.6")
26648 (source
26649 (origin
26650 (method git-fetch)
26651 (uri (git-reference
26652 (url "https://github.com/samuelcolvin/python-devtools")
26653 (commit (string-append "v" version))))
26654 (file-name (git-file-name name version))
26655 (sha256
26656 (base32 "15zczdcm90wl54c68f1qjb05nkd5bjsc9xjl3lk4frs7k7wkmrvp"))))
26657 (build-system python-build-system)
26658 (native-inputs
26659 (list python-pytest python-pytest-mock))
26660 (propagated-inputs
26661 (list python-pygments))
26662 (arguments
26663 `(#:phases (modify-phases %standard-phases
26664 (replace 'check
26665 (lambda _
26666 (invoke "pytest")
26667 #t)))))
26668 (home-page "https://github.com/samuelcolvin/python-devtools")
26669 (synopsis "Debug command and development tools")
26670 (description
26671 "This package provides a debug print command and other development tools.
26672 It adds a simple and readable way to print stuff during development.")
26673 (license license:expat)))
26674
26675 (define-public python-dateparser
26676 (package
26677 (name "python-dateparser")
26678 (version "0.7.6")
26679 (source
26680 (origin
26681 (method url-fetch)
26682 (uri (pypi-uri "dateparser" version))
26683 (sha256
26684 (base32
26685 "1ypbyqxlk7n6zibk90js3ybz37xmin3kk0i35g8c51bwqpcfyxg8"))))
26686 (build-system python-build-system)
26687 (propagated-inputs
26688 (list python-dateutil python-pytz python-regex python-ruamel.yaml
26689 python-tzlocal))
26690 (native-inputs
26691 (list python-mock python-parameterized tzdata-for-tests))
26692 (arguments
26693 `(;; TODO: Of 23320 tests, 6 fail and 53 error.
26694 #:tests? #f
26695 #:phases
26696 (modify-phases %standard-phases
26697 (add-before 'check 'set-check-environment
26698 (lambda* (#:key inputs #:allow-other-keys)
26699 (setenv "TZ" "UTC")
26700 (setenv "TZDIR"
26701 (search-input-directory inputs
26702 "share/zoneinfo")))))))
26703 (home-page "https://github.com/scrapinghub/dateparser")
26704 (synopsis
26705 "Date parsing library designed to parse dates from HTML pages")
26706 (description
26707 "@code{python-dateparser} provides modules to easily parse localized
26708 dates in almost any string formats commonly found on web pages.")
26709 (license license:bsd-3)))
26710
26711 (define-public python-dparse
26712 (package
26713 (name "python-dparse")
26714 (version "0.5.1")
26715 (source
26716 (origin
26717 (method url-fetch)
26718 (uri (pypi-uri "dparse" version))
26719 (sha256
26720 (base32
26721 "0rzkg3nymsbwdjc0ms2bsajkda02jipwyp3xk97qj71f21lz3dd1"))))
26722 (build-system python-build-system)
26723 (native-inputs
26724 (list python-pytest))
26725 (propagated-inputs
26726 (list python-packaging python-pyyaml python-toml))
26727 (home-page "https://github.com/pyupio/dparse")
26728 (synopsis "Parser for Python dependency files")
26729 (description "This package provides a parser for Python dependency files.")
26730 (license license:expat)))
26731
26732 (define-public python-dpath
26733 (package
26734 (name "python-dpath")
26735 (version "2.0.1")
26736 (source
26737 (origin
26738 (method url-fetch)
26739 (uri (pypi-uri "dpath" version))
26740 (sha256
26741 (base32
26742 "1ymi9ssk7i0mx3mviplf4csfvzibdd6wyj4qzj6s487n9xgnp85y"))))
26743 (build-system python-build-system)
26744 (native-inputs
26745 (list python-hypothesis python-mock python-nose))
26746 (arguments
26747 '(#:phases
26748 (modify-phases %standard-phases
26749 (replace 'check
26750 (lambda* (#:key inputs outputs #:allow-other-keys)
26751 (add-installed-pythonpath inputs outputs)
26752 ;; This invokation is taken from tox.ini.
26753 (invoke "nosetests" "-d" "-v" "tests/"))))))
26754 (home-page "https://github.com/akesterson/dpath-python")
26755 (synopsis "File-system-like pathing and searching for dictionaries")
26756 (description
26757 "@code{python-dpath} is a library for accessing and searching
26758 dictionaries via /slashed/paths ala xpath.
26759
26760 Basically it lets you glob over a dictionary as if it were a file system. It
26761 allows you to specify globs (ala the bash eglob syntax, through some advanced
26762 fnmatch.fnmatch magic) to access dictionary elements, and provides some
26763 facility for filtering those results.")
26764 (license license:expat)))
26765
26766 (define-public python-safety
26767 (package
26768 (name "python-safety")
26769 (version "1.9.0")
26770 (source
26771 (origin
26772 (method url-fetch)
26773 (uri (pypi-uri "safety" version))
26774 (sha256
26775 (base32
26776 "1j801xsxfzavjbzhhc934awvnk1b7jc0qsw3jp3ys0241mlj1gr3"))))
26777 (build-system python-build-system)
26778 (arguments
26779 `(#:phases
26780 (modify-phases %standard-phases
26781 (add-after 'unpack 'disable-tests
26782 (lambda _
26783 (substitute* "tests/test_safety.py"
26784 ;; requires network
26785 (("def test_check_live") "def _test_check_live"))
26786 #t)))))
26787 (propagated-inputs
26788 (list python-click python-dparse python-packaging python-requests))
26789 (home-page "https://github.com/pyupio/safety")
26790 (synopsis "Check installed dependencies for known vulnerabilities")
26791 (description "Safety checks installed dependencies for known vulnerabilities.
26792 By default it uses the open Python vulnerability database Safety DB.")
26793 (license license:expat)))
26794
26795 (define-public python-pypandoc
26796 (package
26797 (name "python-pypandoc")
26798 (version "1.6.4")
26799 (source
26800 (origin
26801 (method url-fetch)
26802 (uri (pypi-uri "pypandoc" version))
26803 (sha256
26804 (base32
26805 "149basv4pvzg9zm74cjz68x8s2n5fykyj7prgysb0qfmja73r83f"))))
26806 (build-system python-build-system)
26807 (inputs
26808 (list pandoc))
26809 (propagated-inputs
26810 `(("wheel" ,python-wheel)))
26811 (native-inputs
26812 `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts
26813 texlive-fonts-ec
26814 texlive-generic-iftex
26815 texlive-hyperref
26816 texlive-oberdiek
26817 texlive-lm
26818 texlive-xcolor)))))
26819 (arguments
26820 `(#:phases
26821 (modify-phases %standard-phases
26822 (add-before 'check 'disable-tests
26823 (lambda _
26824 ;; Disable test requiring network access
26825 (substitute* "tests.py"
26826 (("test_basic_conversion_from_http_url")
26827 "skip_test_basic_conversion_from_http_url"))
26828 #t)))))
26829 (home-page "https://github.com/bebraw/pypandoc")
26830 (synopsis "Python wrapper for pandoc")
26831 (description "pypandoc is a thin Python wrapper around pandoc
26832 and pandoc-citeproc.")
26833 (license license:expat)))
26834
26835 (define-public python-rnc2rng
26836 (package
26837 (name "python-rnc2rng")
26838 (version "2.6.4")
26839 (source
26840 (origin
26841 (method url-fetch)
26842 (uri (pypi-uri "rnc2rng" version))
26843 (sha256
26844 (base32
26845 "1kmp3iwxxyzjsd47j2sprd47ihhkwhb3yydih3af5bbfq0ibh1w8"))))
26846 (build-system python-build-system)
26847 (propagated-inputs
26848 (list python-rply))
26849 (arguments
26850 `(#:phases (modify-phases %standard-phases
26851 (replace 'check
26852 (lambda _
26853 (invoke "python" "test.py"))))))
26854 (home-page "https://github.com/djc/rnc2rng")
26855 (synopsis "Convert RELAX NG Compact to regular syntax")
26856 (description
26857 "This package provides the @command{rnc2rng} command-line tool as well as
26858 a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
26859 equivalent schemata in the XML-based default RELAX NG syntax.")
26860 (license license:expat)))
26861
26862 (define-public python-telethon
26863 (package
26864 (name "python-telethon")
26865 (version "1.17.5")
26866 (source
26867 (origin
26868 (method git-fetch)
26869 (uri (git-reference
26870 (url "https://github.com/LonamiWebs/Telethon")
26871 (commit (string-append "v" version))))
26872 (file-name (git-file-name name version))
26873 (sha256
26874 (base32 "0l9fhdrq576vllgi9aam45xzw5xi6jhgdv5zz8i4ygssdp7cm8jl"))))
26875 (build-system python-build-system)
26876 (arguments
26877 '(#:phases
26878 (modify-phases %standard-phases
26879 (replace 'check
26880 (lambda* (#:key tests? #:allow-other-keys)
26881 (when tests?
26882 (invoke "py.test" "-v"))
26883 #t)))))
26884 (propagated-inputs
26885 (list python-rsa python-pyaes))
26886 (native-inputs
26887 (list python-pytest python-pytest-asyncio python-pytest-trio))
26888 (home-page "https://docs.telethon.dev")
26889 (synopsis "Full-featured Telegram client library for Python 3")
26890 (description "This library is designed to make it easy to write Python
26891 programs that can interact with Telegram.")
26892 (license license:expat)))
26893
26894 (define-public python-citeproc-py
26895 (package
26896 (name "python-citeproc-py")
26897 (version "0.5.1")
26898 (source
26899 (origin
26900 (method url-fetch)
26901 (uri (pypi-uri "citeproc-py" version))
26902 (sha256
26903 (base32
26904 "00aaff50jy4j0nakdzq9258z1gzrac9baarli2ymgspj88jg5968"))))
26905 (build-system python-build-system)
26906 (propagated-inputs
26907 (list python-lxml python-rnc2rng))
26908 (home-page
26909 "https://github.com/brechtm/citeproc-py")
26910 (synopsis "Citations and bibliography formatter")
26911 (description
26912 "Citeproc-py is a CSL processor for Python. It aims to implement the
26913 CSL 1.0.1 specification. citeproc-py can output styled citations and
26914 bibliographies in a number of different output formats. Currently supported
26915 are plain text, reStructuredText and HTML.")
26916 (license license:bsd-2)))
26917
26918 (define-public python-inform
26919 (package
26920 (name "python-inform")
26921 (version "1.23.0")
26922 (source
26923 (origin
26924 (method url-fetch)
26925 (uri (pypi-uri "inform" version))
26926 (sha256
26927 (base32
26928 "0dvc5klbnbryrvspp45nmlg02g40j7xspcz7lqsm0c0dj0z29zdz"))))
26929 (build-system python-build-system)
26930 (arguments
26931 `(#:tests? #f)) ; PyPI tarball lacks tests
26932 (native-inputs
26933 (list python-hypothesis python-pytest-cov python-pytest-runner))
26934 (propagated-inputs
26935 (list python-arrow python-six))
26936 (home-page "https://inform.readthedocs.io")
26937 (synopsis "Print & logging utilities for communicating with user")
26938 (description
26939 "Inform is designed to display messages from programs that are typically run from
26940 a console. It provides a collection of ‘print’ functions that allow you to simply and
26941 cleanly print different types of messages.")
26942 (license license:gpl3+)))
26943
26944 (define-public python-nestedtext
26945 (package
26946 (name "python-nestedtext")
26947 (version "1.0.0")
26948 (source
26949 (origin
26950 (method url-fetch)
26951 (uri (pypi-uri "nestedtext" version))
26952 (sha256
26953 (base32
26954 "0xjx863n7yd1xmkwhy48lhmqrmlzgbx3civhk386hvrzyq4sx148"))))
26955 (build-system python-build-system)
26956 (arguments
26957 `(#:tests? #f)) ; PyPI tarball lacks tests
26958 (propagated-inputs
26959 (list python-inform))
26960 (home-page "https://nestedtext.org")
26961 (synopsis "Human readable and writable data interchange format")
26962 (description
26963 "NestedText is a file format for holding data that is to be entered, edited, or
26964 viewed by people. It allows data to be organized into a nested collection of
26965 dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
26966 without the complexity and risk of YAML and without the syntactic clutter of JSON.
26967 NestedText is both simple and natural. Only a small number of concepts and rules must
26968 be kept in mind when creating it. It is easily created, modified, or viewed with
26969 a text editor and easily understood and used by both programmers and non-programmers.")
26970 (license license:expat))) ; MIT license
26971
26972 (define-public python-nest-asyncio
26973 (package
26974 (name "python-nest-asyncio")
26975 (version "1.5.5")
26976 (source
26977 (origin
26978 (method url-fetch)
26979 (uri (pypi-uri "nest_asyncio" version))
26980 (sha256
26981 (base32
26982 "0rbdw7lry66yj13hh4w63yzflnapdal1ffl237k8nsa2v4f2jhp4"))))
26983 (build-system python-build-system)
26984 (home-page "https://github.com/erdewit/nest_asyncio")
26985 (synopsis "Patch asyncio to allow nested event loops")
26986 (description
26987 "By design @code{asyncio} does not allow its event loop to be nested.
26988 This presents a practical problem: when in an environment where the event loop
26989 is already running it's impossible to run tasks and wait for the result. This
26990 module patches @code{asyncio} to allow nested use of @code{asyncio.run} and
26991 @code{loop.run_until_complete}.")
26992 (license license:bsd-3)))
26993
26994 (define-public python-simpervisor
26995 (package
26996 (name "python-simpervisor")
26997 (version "0.4")
26998 (source
26999 (origin
27000 ;; Tests not included in release.
27001 (method git-fetch)
27002 (uri (git-reference
27003 (url "https://github.com/yuvipanda/simpervisor")
27004 (commit (string-append "v" version))))
27005 (file-name (git-file-name name version))
27006 (sha256
27007 (base32 "1brsisx7saf4ic0dih1n5y7rbdbwn1ywv9pl32bch3061r46prvv"))))
27008 (build-system python-build-system)
27009 (arguments
27010 `(#:tests? #f ; Test suite can't find aiohttp.
27011 #:phases
27012 (modify-phases %standard-phases
27013 (replace 'check
27014 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
27015 (when tests?
27016 (add-installed-pythonpath inputs outputs)
27017 (invoke "pytest" "--maxfail" "3" "--verbose"))
27018 #t)))))
27019 (native-inputs
27020 (list python-aiohttp python-pytest python-pytest-asyncio))
27021 (home-page "https://github.com/yuvipanda/simpervisor")
27022 (synopsis "Simple async process supervisor")
27023 (description
27024 "This package provides a simple async process supervisor in Python.")
27025 (license license:bsd-3)))
27026
27027 (define-public python-parallel
27028 (package
27029 (name "python-parallel")
27030 (version "1.6.4.4")
27031 (source
27032 (origin
27033 (method url-fetch)
27034 (uri (string-append
27035 "https://www.parallelpython.com/downloads/pp/pp-"
27036 version ".zip"))
27037 (sha256
27038 (base32
27039 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
27040 (native-inputs
27041 (list unzip))
27042 (build-system python-build-system)
27043 (arguments '(#:tests? #f)) ; No test suite.
27044 (home-page "https://www.parallelpython.com")
27045 (synopsis "Parallel and distributed programming for Python")
27046 (description "Parallel Python module (PP) provides an easy and efficient
27047 way to create parallel-enabled applications for SMP computers and clusters.
27048 PP module features cross-platform portability and dynamic load balancing.
27049 Thus applications written with PP will parallelize efficiently even on
27050 heterogeneous and multi-platform clusters (including clusters running other
27051 applications with variable CPU loads).")
27052 (license license:bsd-3)))
27053
27054 (define-public python-djvulibre
27055 (package
27056 (name "python-djvulibre")
27057 (version "0.8.6")
27058 (source
27059 (origin
27060 (method url-fetch)
27061 (uri (pypi-uri "python-djvulibre" version))
27062 (sha256
27063 (base32 "089smpq29ll0z37lnq26r2f72d31i33xm9fw9pc6hlcsm6nbjbiv"))))
27064 (build-system python-build-system)
27065 (native-inputs
27066 (list ghostscript pkg-config python-nose))
27067 (inputs
27068 (list djvulibre python-cython))
27069 (arguments
27070 `(#:phases
27071 (modify-phases %standard-phases
27072 (add-after 'unpack 'fix-tests
27073 (lambda _
27074 ;; Unit tests try to load the 'dllpath.py' and fail, because it
27075 ;; doesn't make sense on GNU/Linux.
27076 (delete-file "djvu/dllpath.py")
27077 #t)))))
27078 (synopsis "Python bindings for DjVuLibre")
27079 (description "This is a set of Python bindings for the DjVuLibre library.")
27080 (home-page "https://jwilk.net/software/python-djvulibre")
27081 (license license:gpl2)))
27082
27083 (define-public python-versioneer
27084 (package
27085 (name "python-versioneer")
27086 (version "0.21")
27087 (source
27088 (origin
27089 (method url-fetch)
27090 (uri (pypi-uri "versioneer" version))
27091 (sha256
27092 (base32
27093 "084fglxafbzvf1vbkzfajvs9qwnvjwwn8pxql9nrlpyipv5xpwk4"))
27094 (patches (search-patches "python-versioneer-guix-support.patch"))))
27095 (build-system python-build-system)
27096 (home-page
27097 "https://github.com/python-versioneer/python-versioneer")
27098 (synopsis
27099 "Version-string management for VCS-controlled trees")
27100 (description
27101 "@code{versioneer} is a tool for managing a recorded version number in
27102 distutils-based python projects. The goal is to remove the tedious and
27103 error-prone \"update the embedded version string\" step from your release
27104 process.")
27105 (license license:public-domain)))
27106
27107 (define-public python-gamera
27108 (package
27109 (name "python-gamera")
27110 (version "4.0.0")
27111 (source
27112 (origin
27113 (method url-fetch)
27114 (uri (string-append "https://gamera.informatik.hsnr.de/download/"
27115 "gamera-" version ".tar.gz"))
27116 (sha256
27117 (base32 "0fhlwbvpm3k54n4aa1y6qd348jqrb54ak9p0ic16drx7f07dsq05"))
27118 (modules '((guix build utils)))
27119 (snippet
27120 '(begin
27121 ;; Remove bundled libraries.
27122 (for-each delete-file-recursively
27123 '("src/libpng-1.2.5"
27124 "src/libtiff"
27125 "src/zlib-1.2.8"))))))
27126 (build-system python-build-system)
27127 (arguments
27128 `(#:phases
27129 (modify-phases %standard-phases
27130 (add-after 'unpack 'disable-wx-support
27131 (lambda _
27132 (substitute* "setup.py"
27133 (("no_wx = False")
27134 "no_wx = True"))))
27135 (replace 'check
27136 (lambda* (#:key tests? #:allow-other-keys)
27137 (when tests?
27138 ;; Some tests require a writable HOME directory and test
27139 ;; directory.
27140 (setenv "HOME" "/tmp")
27141 (mkdir "tests/tmp") ;the code assumes this directory exists
27142 ;; (for-each make-file-writable (find-files "tests"))
27143 (with-directory-excursion "tests"
27144 (invoke "pytest" "-vv"
27145 ;; This test causes gamera/gendoc.py to be loaded,
27146 ;; which fails due to the missing docutils, pygments
27147 ;; and silvercity (very old, unpackaged) libraries.
27148 "--ignore" "test_plugins.py"
27149 ;; This test triggers a segfault (see:
27150 ;; https://github.com/hsnr-gamera/gamera-4/issues/47).
27151 "--ignore" "test_rle.py"))))))))
27152 (native-inputs (list python-pytest))
27153 (inputs (list libpng libtiff zlib))
27154 (synopsis "Framework for building document analysis applications")
27155 (description
27156 "Gamera is a toolkit for building document image recognition systems.")
27157 (home-page "https://gamera.informatik.hsnr.de/")
27158 (license license:gpl2+)))
27159
27160 (define-public python-contextvars
27161 (package
27162 (name "python-contextvars")
27163 (version "2.4")
27164 (source
27165 (origin
27166 (method url-fetch)
27167 (uri (pypi-uri "contextvars" version))
27168 (sha256
27169 (base32
27170 "17n3w8c20kgkgc6khaafdhhlcdj4bzman4paxqsl7harma59137k"))))
27171 (build-system python-build-system)
27172 (propagated-inputs
27173 (list python-immutables))
27174 (home-page
27175 "https://github.com/MagicStack/contextvars")
27176 (synopsis "PEP 567 Backport")
27177 (description "This package implements a backport of Python 3.7
27178 @code{contextvars} module (see PEP 567) for Python 3.6.")
27179 (license license:asl2.0)))
27180
27181 (define-public python-aiofiles
27182 (package
27183 (name "python-aiofiles")
27184 (version "0.6.0")
27185 (source
27186 (origin
27187 (method url-fetch)
27188 (uri (pypi-uri "aiofiles" version))
27189 (sha256
27190 (base32
27191 "14m01kjxm2j7zyljjj6xlhlgygcsriymbx730gc5jp9xglaina70"))))
27192 (build-system python-build-system)
27193 (home-page "https://github.com/Tinche/aiofiles")
27194 (synopsis "File support for @code{asyncio}")
27195 (description "@code{python-aiofiles} is a library for handling local
27196 disk files in asyncio applications.")
27197 (license license:asl2.0)))
27198
27199 (define-public python-pyre-extensions
27200 (package
27201 (name "python-pyre-extensions")
27202 (version "0.0.18")
27203 (source
27204 (origin
27205 (method url-fetch)
27206 (uri (pypi-uri "pyre-extensions" version))
27207 (sha256
27208 (base32
27209 "0c5cbbqrfyjwakdh3kbwxis6mbrbwky1z1fqslgszgpcj4g43q30"))))
27210 (build-system python-build-system)
27211 (propagated-inputs
27212 (list python-typing-extensions python-typing-inspect))
27213 (home-page "https://pyre-check.org")
27214 (synopsis
27215 "Type system extensions for use with @code{python-pyre}")
27216 (description
27217 "@code{python-pyre-extensions} defines extensions to the standard
27218 @code{typing} module that are supported by the Pyre typechecker.")
27219 (license license:expat)))
27220
27221 (define-public python-dataclasses
27222 (package
27223 (name "python-dataclasses")
27224 (version "0.8")
27225 (source
27226 (origin
27227 (method url-fetch)
27228 (uri (pypi-uri "dataclasses" version))
27229 (sha256
27230 (base32
27231 "15sc12nrc7gxwb30vfa6frzdnpmbap9ibi1fr1yrbkra6izhcyc4"))))
27232 (build-system python-build-system)
27233 (home-page
27234 "https://github.com/ericvsmith/dataclasses")
27235 (synopsis
27236 "Backport of the @code{dataclasses} module for Python 3.6")
27237 (description
27238 "This is an implementation of PEP 557, Data Classes. It is a
27239 backport of the @code{dataclasses} module for Python 3.6.")
27240 (license license:asl2.0)))
27241
27242 (define-public python-pywatchman
27243 (package
27244 (name "python-pywatchman")
27245 (version "1.4.1")
27246 (source
27247 (origin
27248 (method url-fetch)
27249 (uri (pypi-uri "pywatchman" version))
27250 (sha256
27251 (base32
27252 "1yf2gm20wc3djpb5larxii3l55xxby0il2ns3q0v1byyfnr7w16h"))))
27253 (build-system python-build-system)
27254 (arguments
27255 `(#:tests? #f)) ;there are none
27256 (home-page
27257 "https://facebook.github.io/watchman/")
27258 (synopsis "Watchman client for python")
27259 (description "@code{python-pywatchman} is a library to connect and
27260 query Watchman to discover file changes.")
27261 (license license:bsd-3)))
27262
27263 (define-public python-roundrobin
27264 (package
27265 (name "python-roundrobin")
27266 (version "0.0.2")
27267 (source (origin
27268 (method url-fetch)
27269 (uri (pypi-uri "roundrobin" version))
27270 (sha256
27271 (base32 "1akwhvfyi0120zg2xkhfc6jwfkirz5x90yyvw06bndhaaxwcnc5c"))))
27272 (build-system python-build-system)
27273 (arguments '(#:tests? #f)) ;no tests on PyPI and no tags in repo
27274 (home-page "https://github.com/linnik/roundrobin")
27275 (synopsis "Collection of roundrobin utilities")
27276 (description
27277 "This package provides a collection of utilities for round-robin
27278 distribution in Python.")
27279 (license license:expat)))
27280
27281 (define-public python-helpdev
27282 (package
27283 (name "python-helpdev")
27284 (version "0.7.1")
27285 (source
27286 (origin
27287 (method url-fetch)
27288 (uri (pypi-uri "helpdev" version))
27289 (sha256
27290 (base32
27291 "0gfvj28i82va7c264jl2p4cdsl3lpf9fpb9cyjnis55crfdafqmv"))))
27292 (build-system python-build-system)
27293 (arguments
27294 `(#:phases
27295 (modify-phases %standard-phases
27296 (replace 'check
27297 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
27298 (when tests?
27299 (add-installed-pythonpath inputs outputs)
27300 (invoke "pytest" "tests"))
27301 #t)))))
27302 (propagated-inputs
27303 (list python-importlib-metadata))
27304 (native-inputs
27305 (list python-pytest))
27306 (home-page "https://gitlab.com/dpizetta/helpdev")
27307 (synopsis
27308 "Extract information about the Python environment easily")
27309 (description
27310 "Helpdev is a library to easily extract information about the Python
27311 environment.")
27312 (license license:expat)))
27313
27314 (define-public python-logutils
27315 (package
27316 (name "python-logutils")
27317 (version "0.3.5")
27318 (source
27319 (origin
27320 (method url-fetch)
27321 (uri (pypi-uri "logutils" version))
27322 (sha256
27323 (base32
27324 "10lsi5wv5ysnvf9ya4ncbix6mmipnv5067sf2cglc2f2sljql1dw"))))
27325 (build-system python-build-system)
27326 (home-page "https://bitbucket.org/vinay.sajip/logutils/")
27327 (synopsis "Logging utilities")
27328 (description "This package provides a set of handlers for the Python
27329 standard library logging package. Some of these handlers are out-of-scope
27330 for the standard library, and so they are packaged here. Others are updated
27331 versions which have appeared in recent Python releases, but are usable with
27332 older versions of Python and so are packaged here.")
27333 (license license:bsd-3)))
27334
27335 (define-public python-helper
27336 (package
27337 (name "python-helper")
27338 (version "2.5.0")
27339 (source (origin
27340 (method url-fetch)
27341 (uri (pypi-uri "helper" version))
27342 (sha256
27343 (base32
27344 "1d2j64wgbggzv5rhvil10zndp2w78wa5np5w0psj122ws9qr9wsa"))))
27345 (build-system python-build-system)
27346 (native-inputs
27347 (list python-mock))
27348 (propagated-inputs
27349 (list python-logutils python-pyyaml))
27350 (home-page "https://github.com/gmr/helper")
27351 (synopsis "Library for writing configurable applications and daemons")
27352 (description
27353 "This package provides procedures for quickly writing configurable
27354 applications and daemons.")
27355 (license license:bsd-3)))
27356
27357 (define-public python-qtsass
27358 (package
27359 (name "python-qtsass")
27360 (version "0.3.0")
27361 (source
27362 (origin
27363 ;; There are no tests in the PyPI tarball.
27364 (method git-fetch)
27365 (uri (git-reference
27366 (url "https://github.com/spyder-ide/qtsass/")
27367 (commit (string-append "v" version))))
27368 (file-name (git-file-name name version))
27369 (sha256
27370 (base32 "09s04aa14d8jqbh71clrb5y7vcmkxlp94mwmvzrkxahry3bk03cb"))))
27371 (build-system python-build-system)
27372 (arguments
27373 `(#:test-target "pytest"
27374 #:phases
27375 (modify-phases %standard-phases
27376 ;; Tests need to read and write files.
27377 (add-before 'check 'make-git-checkout-writable
27378 (lambda _
27379 (for-each make-file-writable (find-files "."))
27380 #t)))))
27381 (native-inputs
27382 (list python-pytest python-pytest-cov python-pytest-runner))
27383 (propagated-inputs
27384 (list python-libsass))
27385 (home-page "https://github.com/spyder-ide/qtsass")
27386 (synopsis "Compile SCSS files to valid Qt stylesheets")
27387 (description
27388 "Besides being used in web development, CSS is also the way to stylize
27389 Qt-based desktop applications. However, Qt's CSS has a few variations that
27390 prevent the direct use of SASS compiler.
27391
27392 The purpose of this tool is to fill the gap between SASS and Qt-CSS by
27393 handling those variations.")
27394 (license license:expat)))
27395
27396 (define-public python-qdarkstyle
27397 (package
27398 (name "python-qdarkstyle")
27399 (version "2.8.1")
27400 (source
27401 (origin
27402 (method url-fetch)
27403 (uri (pypi-uri "QDarkStyle" version))
27404 (sha256
27405 (base32
27406 "0883vzg35fzpyl1aiijzpfcdfvpq5vi325w0m7xkx7nxplh02fym"))))
27407 (build-system python-build-system)
27408 (arguments
27409 `(;; Fails unable to detect valid Qt bindings even when
27410 ;; added as native-inputs.
27411 #:tests? #f))
27412 (propagated-inputs
27413 (list python-helpdev python-qtpy))
27414 (home-page
27415 "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
27416 (synopsis
27417 "Complete dark stylesheet for Python and Qt applications")
27418 (description "QDarkStyle is the most complete dark stylesheet for Python and
27419 Qt applications.")
27420 (license license:expat)))
27421
27422 (define-public python-bitstring
27423 (package
27424 (name "python-bitstring")
27425 (version "3.1.7")
27426 (source
27427 (origin
27428 (method url-fetch)
27429 (uri (pypi-uri "bitstring" version))
27430 (sha256
27431 (base32
27432 "0jl6192dwrlm5ybkbh7ywmyaymrc3cmz9y07nm7qdli9n9rfpwzx"))))
27433 (build-system python-build-system)
27434 (arguments
27435 `(#:phases
27436 (modify-phases %standard-phases
27437 (replace 'check
27438 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
27439 (when tests?
27440 (add-installed-pythonpath inputs outputs)
27441 (with-directory-excursion "test"
27442 (invoke "pytest")))
27443 #t)))))
27444 (native-inputs
27445 (list python-pytest))
27446 (home-page "https://github.com/scott-griffiths/bitstring")
27447 (synopsis
27448 "Simple construction, analysis and modification of binary data")
27449 (description
27450 "Bitstring is a library for simple construction, analysis and modification
27451 of binary data.")
27452 (license license:expat)))
27453
27454 (define-public python-confuse
27455 (package
27456 (name "python-confuse")
27457 (version "1.5.0")
27458 (source
27459 (origin
27460 (method url-fetch)
27461 (uri (pypi-uri "confuse" version))
27462 (sha256
27463 (base32
27464 "0bh2kyj8wd7h9gg4nsvrbykl5ly0f70f0wi3fbm204b1f0fcmywj"))))
27465 (build-system python-build-system)
27466 (propagated-inputs
27467 (list python-pyyaml))
27468 (home-page "https://github.com/beetbox/confuse")
27469 (synopsis "Painless YAML configuration")
27470 (description "Confuse is a configuration library for Python that uses
27471 YAML. It takes care of defaults, overrides, type checking, command-line
27472 integration, human-readable errors, and standard OS-specific locations.")
27473 (license license:expat)))
27474
27475 (define-public python-reflink
27476 (package
27477 (name "python-reflink")
27478 (version "0.2.1")
27479 (source
27480 (origin
27481 (method url-fetch)
27482 (uri (pypi-uri "reflink" version))
27483 (sha256
27484 (base32
27485 "0fkf3sd958g9hvr3jwlhnhqqzrwxljrc3grsf3yknh94vf13a9f9"))))
27486 (build-system python-build-system)
27487 (arguments
27488 `(#:tests? #false)) ; almost all tests want to run mkfs.btrfs
27489 (propagated-inputs
27490 (list python-cffi))
27491 (native-inputs
27492 (list python-pytest python-pytest-runner))
27493 (home-page "https://gitlab.com/rubdos/pyreflink")
27494 (synopsis "Python wrapper around reflink system call")
27495 (description
27496 "Python reflink wraps around platform specific @code{reflink}
27497 implementations.")
27498 (license license:expat)))
27499
27500 (define-public python-retry
27501 (package
27502 (name "python-retry")
27503 (version "0.9.2")
27504 (source (origin
27505 (method url-fetch)
27506 (uri (pypi-uri "retry" version))
27507 (sha256
27508 (base32 "197v6qrh6858bhzzrjgk2zdqrybppymb1lsvdxnm1i39kfwsigzq"))))
27509 (build-system python-build-system)
27510 (arguments
27511 (list #:phases
27512 #~(modify-phases %standard-phases
27513 (replace 'check
27514 (lambda* (#:key tests? #:allow-other-keys)
27515 (when tests? (invoke "pytest" "-vv")))))))
27516 (native-inputs (list python-pbr python-pytest))
27517 (propagated-inputs (list python-decorator python-py))
27518 (home-page "https://github.com/invl/retry")
27519 (synopsis "Retry decorator")
27520 (description
27521 "@code{retry} is an easy to use retry decorator for Python. It can be
27522 used to retry a function a given number of times.")
27523 (license license:asl2.0)))
27524
27525 (define-public python-pivy
27526 (package
27527 (name "python-pivy")
27528 (version "0.6.5")
27529 (source
27530 (origin
27531 (method git-fetch)
27532 (uri (git-reference
27533 (url "https://github.com/coin3d/pivy")
27534 (commit version)))
27535 (file-name (git-file-name name version))
27536 (sha256
27537 (base32 "0vids7sxk8w5vr73xdnf8xdci71a7syl6cd35aiisppbqyyfmykx"))))
27538 (build-system python-build-system)
27539 (arguments
27540 `(;; The test suite fails due to an import cycle between 'pivy' and '_coin'
27541 #:tests? #f
27542 #:phases
27543 (modify-phases %standard-phases
27544 (add-after 'unpack 'patch-cmake-include-dirs
27545 (lambda _
27546 ;; Patch buildsystem to respect Coin3D include directory
27547 (substitute* "CMakeLists.txt"
27548 (("\\$\\{SoQt_INCLUDE_DIRS}")
27549 "${Coin_INCLUDE_DIR};${SoQt_INCLUDE_DIRS}"))
27550 #t)))))
27551 (native-inputs
27552 (list cmake swig))
27553 (inputs
27554 (list python-wrapper
27555 qtbase-5
27556 libxi
27557 libice
27558 soqt
27559 glew
27560 coin3D-4))
27561 (home-page "https://github.com/coin3d/pivy")
27562 (synopsis "Python bindings to Coin3D")
27563 (description
27564 "Pivy provides python bindings for Coin, a 3D graphics library with an
27565 Application Programming Interface based on the Open Inventor 2.1 API.")
27566 (license license:isc)))
27567
27568 (define-public python-crayons
27569 (package
27570 (name "python-crayons")
27571 (version "0.4.0")
27572 (source
27573 (origin
27574 (method url-fetch)
27575 (uri (pypi-uri "crayons" version))
27576 (sha256
27577 (base32
27578 "0gw106k4b6y8mw7pp52awxyplj2bwvwk315k4sywzwh0g1abfcxx"))))
27579 (build-system python-build-system)
27580 (propagated-inputs
27581 (list python-colorama))
27582 (home-page "https://github.com/MasterOdin/crayons")
27583 (synopsis "TextUI colors for Python")
27584 (description "This package gives you colored strings for the terminal.
27585 Crayons automatically wraps a given string in the foreground color and
27586 restores the original state after the string is printed.")
27587 (license license:expat)))
27588
27589 (define-public python-sane
27590 (package
27591 (name "python-sane")
27592 (version "2.9.1")
27593 (source
27594 (origin
27595 (method url-fetch)
27596 (uri (pypi-uri name version))
27597 (sha256
27598 (base32
27599 "1pi597z94n2mkd821ln52fq0g727n2jxfskf280ip3kf7jw8w294"))))
27600 (build-system python-build-system)
27601 (native-inputs
27602 (list python-pytest))
27603 (inputs
27604 (list sane-backends))
27605 (home-page "https://github.com/python-pillow/Sane")
27606 (synopsis "Python interface to the SANE scanner")
27607 (description "This package provides Python interface to the SANE scanner
27608 and frame grabber interface.")
27609 (license (license:non-copyleft
27610 ;; Yet another variant of the X/MIT license.
27611 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
27612
27613 (define-public python-scikit-build
27614 (package
27615 (name "python-scikit-build")
27616 (version "0.14.0")
27617 (source
27618 (origin
27619 (method url-fetch)
27620 (uri (pypi-uri "scikit-build" version))
27621 (sha256
27622 (base32 "1wx1m9vnxnnz59lyaisgyxldp313kciyd4af8lf112vb8vbjy9yk"))))
27623 (build-system python-build-system)
27624 (arguments
27625 (list
27626 #:phases
27627 #~(modify-phases %standard-phases
27628 (add-after 'unpack 'patch-cmake-executable
27629 (lambda* (#:key inputs #:allow-other-keys)
27630 (substitute* "skbuild/constants.py"
27631 (("^(CMAKE_DEFAULT_EXECUTABLE = ).*" _ head)
27632 (format #f "~a ~s~%" head
27633 (search-input-file inputs "bin/cmake"))))))
27634 ;; XXX: PEP 517 manual build copied from python-isort.
27635 (replace 'build
27636 (lambda _
27637 (setenv "SOURCE_DATE_EPOCH" "315532800")
27638 (invoke "python" "-m" "build" "--wheel" "--no-isolation" ".")))
27639 (replace 'check
27640 (lambda* (#:key tests? #:allow-other-keys)
27641 (when tests?
27642 ;; These tests attempt to pull dependencies from the Internet.
27643 (delete-file "tests/test_distribution.py")
27644 (delete-file "tests/test_pep518.py")
27645 (invoke "pytest" "-vv"
27646 "-n" (number->string (parallel-job-count))
27647 "-k" (string-append
27648 ;; These tests attempt to write to read-only
27649 ;; Python install directory.
27650 "not test_install_command "
27651 "and not test_test_command "
27652 "and not test_hello_develop "
27653 ;; These sdist-related tests fail for unknown
27654 ;; reasons (see:
27655 ;; https://github.com/scikit-build/scikit-build/issues/689).
27656 "and not test_hello_sdist_with_base "
27657 "and not test_manifest_in_sdist "
27658 "and not test_hello_sdist "
27659 "and not test_sdist_with_symlinks "
27660 ;; These are not parallel safe and fail
27661 ;; nondeterministically (see:
27662 ;; https://github.com/scikit-build/scikit-build/issues/711).
27663 "and not test_generator_cleanup "
27664 "and not test_generator_selection ")))))
27665 (replace 'install
27666 (lambda _
27667 (let ((whl (car (find-files "dist" "\\.whl$"))))
27668 (invoke "pip" "--no-cache-dir" "--no-input"
27669 "install" "--no-deps" "--prefix" #$output whl)))))))
27670 (native-inputs
27671 (list cmake-minimal
27672 gfortran
27673 git-minimal
27674 ninja
27675 python-coverage
27676 python-cython
27677 python-mock
27678 python-packaging
27679 python-path
27680 python-pypa-build
27681 python-pytest
27682 python-pytest-cov
27683 python-pytest-mock
27684 python-pytest-virtualenv
27685 python-pytest-xdist
27686 python-requests
27687 python-setuptools-scm
27688 python-wheel))
27689 (propagated-inputs
27690 (list python-distro python-packaging python-wheel))
27691 (home-page "https://github.com/scikit-build/scikit-build")
27692 (synopsis "Build system generator for Python C/C++/Fortran/Cython extensions")
27693 (description "Scikit-build is an improved build system generator for
27694 CPython C/C++/Fortran/Cython extensions. It has support for additional
27695 compilers, build systems, cross compilation, and locating dependencies and
27696 determining their build requirements. The scikit-build package is
27697 fundamentally just glue between the @code{setuptools} Python module and
27698 CMake.")
27699 (license license:expat)))
27700
27701 (define-public python-screenkey
27702 (package
27703 (name "python-screenkey")
27704 (version "1.4")
27705 (source
27706 (origin
27707 (method git-fetch)
27708 (uri (git-reference
27709 (url "https://gitlab.com/screenkey/screenkey")
27710 (commit (string-append "v" version))))
27711 (file-name (git-file-name name version))
27712 (sha256
27713 (base32
27714 "1rfngmkh01g5192pi04r1fm7vsz6hg9k3qd313sn9rl9xkjgp11l"))))
27715 (build-system python-build-system)
27716 (arguments
27717 `(#:phases
27718 (modify-phases %standard-phases
27719 (add-after 'unpack 'fix-dlopen-paths
27720 (lambda* (#:key inputs outputs #:allow-other-keys)
27721 (let* ((x11 (assoc-ref inputs "libx11"))
27722 (xtst (assoc-ref inputs "libxtst")))
27723 (substitute* "Screenkey/xlib.py"
27724 (("libX11.so.6")
27725 (string-append x11 "/lib/libX11.so.6")))
27726 (substitute* "Screenkey/xlib.py"
27727 (("libXtst.so.6")
27728 (string-append xtst "/lib/libXtst.so.6")))
27729 #t)))
27730 (add-after 'install 'wrap-screenkey
27731 (lambda* (#:key outputs #:allow-other-keys)
27732 (wrap-program
27733 (string-append (assoc-ref outputs "out") "/bin/screenkey")
27734 `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH")))
27735 `("GI_TYPELIB_PATH"
27736 ":" prefix (,(getenv "GI_TYPELIB_PATH")))))))))
27737 (inputs
27738 (list python-distutils-extra
27739 python-tokenize-rt
27740 libx11
27741 libxtst
27742 gtk+
27743 python-pygobject
27744 python-pycairo
27745 python-setuptools-git
27746 python-babel))
27747 (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
27748 (synopsis
27749 "Screencast tool to display pressed keys")
27750 (description
27751 "Screenkey is a screencast tool to display your keys inspired by
27752 Screenflick.")
27753 (license license:gpl3+)))
27754
27755 (define-public python-jinja2-cli
27756 (package
27757 (name "python-jinja2-cli")
27758 (version "0.7.0")
27759 (source
27760 (origin
27761 (method url-fetch)
27762 (uri (pypi-uri "jinja2-cli" version))
27763 (sha256
27764 (base32
27765 "0vikx7v6fbvww6kfrv0k5a24jyv3ak7nindg60906pdd1m9qvkcw"))))
27766 (build-system python-build-system)
27767 (propagated-inputs
27768 (list python-jinja2))
27769 (native-inputs
27770 (list python-flake8 python-jinja2 python-pytest))
27771 (home-page "https://github.com/mattrobenolt/jinja2-cli")
27772 (synopsis "Command-line interface to Jinja2")
27773 (description
27774 "This package provides a command-line interface (CLI) to the Jinja2
27775 template engine.")
27776 (license license:bsd-3)))
27777
27778 (define-public python-readability
27779 (package
27780 (name "python-readability")
27781 (version "0.3.1")
27782 (source
27783 (origin
27784 (method url-fetch)
27785 (uri (pypi-uri "readability" version))
27786 (sha256
27787 (base32
27788 "1b8gq3g2zwvx0aivvdg56cc0bn7xw6f2v6psmxdx9aiipkw0s0zr"))))
27789 (build-system python-build-system)
27790 (home-page
27791 "https://github.com/andreasvc/readability/")
27792 (synopsis
27793 "Measure the readability of a given text using surface
27794 characteristics")
27795 (description
27796 "This package provides a Python library that is an implementation of
27797 traditional readability measures based on simple surface
27798 characteristics. These measures are basically linear regressions based on the
27799 number of words, syllables, and sentences.")
27800 (license license:asl2.0)))
27801
27802 (define-public python-listparser
27803 (package
27804 (name "python-listparser")
27805 (version "0.18")
27806 (source
27807 (origin
27808 (method url-fetch)
27809 (uri (pypi-uri "listparser" version))
27810 (sha256
27811 (base32
27812 "0hdqs1mmayw1r8yla43hgb4d9y3zqs5483vgf8j9ygczkd2wrq2b"))))
27813 (build-system python-build-system)
27814 (home-page
27815 "https://github.com/kurtmckee/listparser")
27816 (synopsis
27817 "Parse subscription lists in Python")
27818 (description
27819 "This package provides a Python library that can parse OPML, FOAF, and
27820 iGoogle subscription lists.")
27821 (license license:expat)))
27822
27823 (define-public python-smartypants
27824 (package
27825 (name "python-smartypants")
27826 (version "2.0.1")
27827 (source
27828 (origin
27829 ;; There's no source tarball for 2.0.1 on PyPI.
27830 (method git-fetch)
27831 (uri (git-reference
27832 (url "https://github.com/leohemsted/smartypants.py")
27833 (commit (string-append "v" version))))
27834 (file-name (git-file-name name version))
27835 (sha256
27836 (base32 "00p1gnb9pzb3svdq3c5b9b332gsp50wrqqa39gj00m133zadanjp"))))
27837 (build-system python-build-system)
27838 (arguments
27839 '(#:phases
27840 (modify-phases %standard-phases
27841 (replace 'check
27842 ;; Its `setup.py test` doesn't report failure with exit status, so
27843 ;; we use `nose` instead.
27844 (lambda _
27845 (invoke "nosetests" "-v" "--exclude=^load_tests$"))))))
27846 (native-inputs
27847 ;; For tests.
27848 (list python-docutils python-nose python-pygments))
27849 (home-page "https://github.com/leohemsted/smartypants.py")
27850 (synopsis "Translate punctuation characters into smart quotes")
27851 (description
27852 "@command{smartpants} can perform the following transformations:
27853 @enumerate
27854 @item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
27855 @item Backticks-style quotes (``like this'') into \"curly\" quote HTML
27856 entities
27857 @item Dashes (-- and ---) into en- and em-dash entities
27858 @item Three consecutive dots (... or . . .) into an ellipsis entity
27859 @end enumerate")
27860 (license license:bsd-3)))
27861
27862 (define-public python-typogrify
27863 (package
27864 (name "python-typogrify")
27865 (version "2.0.7")
27866 (source (origin
27867 (method url-fetch)
27868 (uri (pypi-uri "typogrify" version))
27869 (sha256
27870 (base32
27871 "0f6b2gnnxjbx1fbmkcscc6qjr4hi78kwm1wx4b766ha3va66dr4b"))))
27872 (build-system python-build-system)
27873 (arguments
27874 '(#:phases
27875 (modify-phases %standard-phases
27876 (replace 'check
27877 (lambda _
27878 (invoke "nosetests" "-v"))))))
27879 (propagated-inputs
27880 (list python-smartypants))
27881 (native-inputs
27882 ;; For tests.
27883 (list python-nose))
27884 (home-page "https://github.com/mintchaos/typogrify")
27885 (synopsis "Filters to transform text into typographically-improved HTML")
27886 (description
27887 "@code{typogrify} provides a set of custom filters that automatically
27888 apply various transformations to plain text in order to yield
27889 typographically-improved HTML. While often used in conjunction with Jinja and
27890 Django template systems, the filters can be used in any environment.")
27891 (license license:bsd-3)))
27892
27893 (define-public python-ld
27894 (package
27895 (name "python-ld")
27896 (version "0.5.0")
27897 (source
27898 (origin
27899 (method url-fetch)
27900 (uri (pypi-uri "ld" version))
27901 (sha256
27902 (base32
27903 "1k4ydp5rgkv4985v459kcl06i1igjm1ywvh2vkbi9ck1zyyri1z5"))))
27904 (build-system python-build-system)
27905 (propagated-inputs
27906 (list python-six))
27907 (home-page "https://github.com/nir0s/ld")
27908 (synopsis "OS platform information API")
27909 (description
27910 "The ld package provides information about the GNU/Linux distribution it
27911 runs on, such as a reliable machine-readable ID, or version information.")
27912 (license license:asl2.0)))
27913
27914 (define-public python-quicktions
27915 (package
27916 (name "python-quicktions")
27917 (version "1.11")
27918 (source
27919 (origin
27920 (method url-fetch)
27921 (uri (pypi-uri "quicktions" version))
27922 (sha256
27923 (base32
27924 "1px21a6x527i1bsr2p6bbf3jziqpvd1vjkvvzh13gsy4iip0yvzn"))
27925 (modules '((guix build utils)))
27926 (snippet
27927 '(begin
27928 ;; This file is generated by Cython.
27929 (delete-file "src/quicktions.c") #t))))
27930 (build-system python-build-system)
27931 (arguments
27932 `(#:phases
27933 (modify-phases %standard-phases
27934 (add-before 'build 'cythonize-sources
27935 (lambda _
27936 (with-directory-excursion "src"
27937 (invoke "cython" "quicktions.pyx"))))
27938 (replace 'check
27939 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
27940 (when tests?
27941 (add-installed-pythonpath inputs outputs)
27942 (invoke "pytest"))
27943 #t)))))
27944 (native-inputs
27945 (list python-cython python-pytest))
27946 (home-page "https://github.com/scoder/quicktions")
27947 (synopsis "Fast fractions data type for rational numbers")
27948 (description
27949 "This package provides fast fractions data type for rational numbers. It
27950 is the cythonized version of @code{fractions.Fraction}.")
27951 (license license:psfl)))
27952
27953 (define-public python-pathvalidate
27954 (package
27955 (name "python-pathvalidate")
27956 (version "2.4.1")
27957 (source
27958 (origin
27959 (method url-fetch)
27960 (uri (pypi-uri "pathvalidate" version))
27961 (sha256
27962 (base32 "0s14ycjgb44lxr2wg8lrq3b7kybmmrbf7yqz47xrqgn2gr6dk6rw"))))
27963 (build-system python-build-system)
27964 (arguments
27965 '(#:tests? #f))
27966 ;; Tests disabled because of circular dependencies.
27967 ;; pathvalidate tests depend on pytest-md-report, which
27968 ;; depends on pathvalidate.
27969 (native-inputs
27970 (list python-allpairspy python-click python-faker python-pytest))
27971 (home-page "https://github.com/thombashi/pathvalidate")
27972 (synopsis "Sanitize strings representing paths")
27973 (description
27974 "@code{pathvalidate} is a Python library to sanitize/validate strings
27975 representing paths or filenames.")
27976 (license license:expat)))
27977
27978 (define-public python-escapism
27979 (package
27980 (name "python-escapism")
27981 (version "1.0.1")
27982 (source
27983 (origin
27984 (method url-fetch)
27985 (uri (pypi-uri "escapism" version))
27986 (sha256
27987 (base32
27988 "1v74243wifcwhj5zkdiispxc9kb1xvnfzilg8bq308pjnkgnn9bk"))))
27989 (build-system python-build-system)
27990 (home-page "https://github.com/minrk/escapism")
27991 (synopsis "Simple, generic library for escaping strings")
27992 (description
27993 "This Python library provides a programming interface to, given a set of
27994 safe characters and an escape character, escape safe strings and unescape the
27995 result.")
27996 (license license:expat)))
27997
27998 (define-public python-recommonmark
27999 (package
28000 (name "python-recommonmark")
28001 (version "0.7.1")
28002 (source
28003 (origin
28004 (method url-fetch)
28005 (uri (pypi-uri "recommonmark" version))
28006 (sha256
28007 (base32
28008 "0rvdd2ikdr0yg6cx6594fdzn53cmdc0g0i6qsbcdq8i2kxjdpd5x"))))
28009 (build-system python-build-system)
28010 (propagated-inputs
28011 (list python-commonmark python-docutils python-sphinx))
28012 (arguments
28013 '(#:phases (modify-phases %standard-phases
28014 (add-after 'unpack 'delete-test-sphinx
28015 (lambda* (#:key outputs #:allow-other-keys)
28016 (let* ((out (assoc-ref outputs "out")))
28017 (delete-file "tests/test_sphinx.py")))))))
28018 (home-page "https://github.com/readthedocs/recommonmark")
28019 (synopsis "Docutils-compatibility bridge to CommonMark")
28020 (description
28021 "This package provides a docutils-compatibility bridge to CommonMark that
28022 lets you write CommonMark inside of Docutils & Sphinx projects.")
28023 (license license:expat)))
28024
28025 (define-public python-pyhull
28026 (package
28027 (name "python-pyhull")
28028 (version "2015.2.1")
28029 (source
28030 (origin
28031 (method url-fetch)
28032 (uri (pypi-uri "pyhull" version))
28033 (sha256
28034 (base32
28035 "091sph52c4yk1jlm5w8xidxpzbia9r7s42bnb23q4m4b56ihmzyj"))))
28036 (build-system python-build-system)
28037 (propagated-inputs
28038 (list python-numpy))
28039 (home-page "https://github.com/materialsvirtuallab/pyhull")
28040 (synopsis "Python wrapper to Qhull")
28041 (description
28042 "This package provides a Python wrapper to @uref{http://www.qhull.org/,
28043 Qhull} for the computation of the convex hull, Delaunay triangulation, and
28044 Voronoi diagram.")
28045 (license license:expat)))
28046
28047 (define-public python-opcodes
28048 ;; There are no tags in this repo, but 'opcodes/__init__.py' specifies a
28049 ;; version number, which is what we use here.
28050 (let ((commit "0f7c7d63f5e13ce5a89d9acc3934f1b6e247ec1f"))
28051 (package
28052 (name "python-opcodes")
28053 (version "0.3.14") ;from 'opcodes/__init__.py'
28054 (home-page "https://github.com/Maratyszcza/Opcodes")
28055 (source (origin
28056 (method git-fetch)
28057 (uri (git-reference (url home-page) (commit commit)))
28058 (file-name (git-file-name name version))
28059 (sha256
28060 (base32
28061 "1fvxkr83gfl9f0ikd2wl2lzazzya2qz1hk4yn2a0pq742brbwpys"))))
28062 (build-system python-build-system)
28063 (synopsis "Database of processor instructions and opcodes")
28064 (description
28065 "This project documents instruction sets in a format convenient for
28066 tools development. An instruction set is represented by three files:
28067
28068 @itemize
28069 @item an XML file that describes instructions;
28070 @item an XSD file that describes the structure of the XML file;
28071 @item a Python module that reads the XML file and represents it as a set of
28072 Python objects;
28073 @end itemize
28074
28075 It currently provides descriptions for most user-mode x86, x86_64, and k1om
28076 instructions up to AVX-512 and SHA (including 3dnow!+, XOP, FMA3, FMA4, TBM
28077 and BMI2).")
28078 (license license:bsd-2))))
28079
28080 (define-public python-peachpy
28081 ;; There is no tag in this repo.
28082 (let ((commit "913d74c35a6b1d330e90bfc055208ce5b06b35a0")
28083 (version "0.2.0") ;from 'peachpy/__init__.py'
28084 (revision "2"))
28085 (package
28086 (name "python-peachpy")
28087 (version (git-version version revision commit))
28088 (home-page "https://github.com/Maratyszcza/PeachPy")
28089 (source (origin
28090 (method git-fetch)
28091 (uri (git-reference (url home-page) (commit commit)))
28092 (file-name (git-file-name name version))
28093 (sha256
28094 (base32
28095 "1wnqxspxsacw4556q0b9fbw11nhrkgn6gs8g43jdnpa35f3z9kb6"))
28096 (patches (search-patches "python-peachpy-determinism.patch"))))
28097 (build-system python-build-system)
28098 (arguments
28099 '(#:phases (modify-phases %standard-phases
28100 (replace 'check
28101 (lambda* (#:key tests? #:allow-other-keys)
28102 (when tests?
28103 (invoke "nosetests")))))))
28104 (native-inputs
28105 (list python-nose python-rednose python-setuptools))
28106 (propagated-inputs
28107 (list python-six python-opcodes))
28108 (synopsis "Efficient assembly code generation in Python")
28109 (description
28110 "PeachPy is a Python framework for writing high-performance assembly kernels.
28111 PeachPy aims to simplify writing optimized assembly kernels while preserving
28112 all optimization opportunities of traditional assembly.
28113
28114 PeachPy can generate ELF, MS-COFF, Mach-O object files, and assembly listings
28115 for the Go language tool chain; it adapts to different calling conventions and
28116 application binary interfaces (ABIs); it takes care of register allocation; it
28117 supports x86_64 instructions up to AVX-512 and SHA.")
28118 (license license:bsd-2))))
28119
28120 (define-public python-sgmllib3k
28121 (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d")
28122 (revision "1"))
28123 (package
28124 (name "python-sgmllib3k")
28125 (version
28126 (git-version "1.0.0" revision commit))
28127 (source
28128 (origin
28129 (method git-fetch)
28130 (uri (git-reference
28131 (url "https://github.com/hsoft/sgmllib")
28132 (commit commit)))
28133 (file-name (git-file-name name version))
28134 (sha256
28135 (base32
28136 "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr"))))
28137 (build-system python-build-system)
28138 (home-page "https://github.com/hsoft/sgmllib")
28139 (synopsis "Python 3 port of sgmllib")
28140 (description "This package provides an unmaintained port of sgmllib to
28141 Python 3. It is used to parse text files formatted in @acronym{SGML,Standard
28142 Generalized Mark-up Language}.")
28143 (license license:bsd-3))))
28144
28145 (define-public python-cwcwidth
28146 (package
28147 (name "python-cwcwidth")
28148 (version "0.1.4")
28149 (source
28150 (origin
28151 (method url-fetch)
28152 (uri (pypi-uri "cwcwidth" version))
28153 (sha256
28154 (base32
28155 "1azrphpkcyggg38xvkfb9dpc4xmmm90p02kf8dkqd4d6j5w96aj8"))))
28156 (build-system python-build-system)
28157 (native-inputs
28158 (list python-cython python-pytest python-setuptools-scm python-toml
28159 python-wheel))
28160 (home-page
28161 "https://github.com/sebastinas/cwcwidth")
28162 (synopsis "Python bindings for wc(s)width")
28163 (description "This package provides bindings for wcwidth and wcswidth
28164 functions defined in POSIX.1-2001 and POSIX.1-2008.")
28165 (license license:expat)))
28166
28167 (define-public python-pyan3
28168 (package
28169 (name "python-pyan3")
28170 (version "1.2.0")
28171 (source
28172 (origin
28173 ;; Source tarball on PyPI lacks tests.
28174 (method git-fetch)
28175 (uri (git-reference
28176 (url "https://github.com/Technologicat/pyan")
28177 (commit (string-append "v" version))))
28178 (file-name (git-file-name name version))
28179 (sha256
28180 (base32
28181 "1367x25rcy2y8f0x9c2dbxl2qgdln3arr7ddyzybz2c28g6jrv5z"))
28182 (patches (search-patches "python-pyan3-fix-positional-arguments.patch"
28183 "python-pyan3-fix-absolute-path-bug.patch"))))
28184 (build-system python-build-system)
28185 (arguments
28186 `(#:phases
28187 (modify-phases %standard-phases
28188 (replace 'check
28189 (lambda* (#:key tests? #:allow-other-keys)
28190 (when tests?
28191 ;; Extend PYTHONPATH so the built package will be found.
28192 (setenv "GUIX_PYTHONPATH"
28193 (string-append (getcwd) ":" (getenv "GUIX_PYTHONPATH")))
28194 (invoke "pytest")))))))
28195 (native-inputs
28196 (list python-pytest python-pytest-cov python-wheel))
28197 (propagated-inputs
28198 (list python-jinja2))
28199 (home-page "https://github.com/Technologicat/pyan")
28200 (synopsis "Offline call graph generator for Python 3")
28201 (description "Pyan takes one or more Python source files, performs
28202 a (rather superficial) static analysis, and constructs a directed graph of the
28203 objects in the combined source, and how they define or use each other. The
28204 graph can be output for rendering by GraphViz or yEd.")
28205 (license license:gpl2)))
28206
28207 (define-public python-multipledispatch
28208 (package
28209 (name "python-multipledispatch")
28210 (version "0.6.0")
28211 (source
28212 (origin
28213 (method url-fetch)
28214 (uri (pypi-uri "multipledispatch" version))
28215 (sha256
28216 (base32
28217 "1slblghfjg9fdi9zpd7gmrkvfbv20nrdgnrymcnbky8bzm8i9ax7"))))
28218 (build-system python-build-system)
28219 (propagated-inputs (list python-six))
28220 (home-page "https://github.com/mrocklin/multipledispatch/")
28221 (synopsis "Multiple dispatch for Python based on pattern matching")
28222 (description "This library provides an efficient mechanism for overloading
28223 function implementations based on the types of the arguments.")
28224 (license license:bsd-3)))
28225
28226 (define-public python-logical-unification
28227 (package
28228 (name "python-logical-unification")
28229 (version "0.4.3")
28230 (source
28231 (origin
28232 (method url-fetch)
28233 (uri (pypi-uri "logical-unification" version))
28234 (sha256
28235 (base32
28236 "0j57953hi7kg2rl0163vzjzsvzdyjimnklhx6idf5vaqqf1d3p1j"))))
28237 (build-system python-build-system)
28238 (propagated-inputs
28239 (list python-multipledispatch python-toolz))
28240 (home-page "https://github.com/pythological/unification/")
28241 (synopsis "Logical unification in Python for solving symbolic expressions")
28242 (description "This library provides algorithms and data types for solving
28243 symbolic expressions in pure Python using the technique of logical unification.")
28244 (license license:bsd-3)))
28245
28246 (define-public python-cons
28247 (package
28248 (name "python-cons")
28249 (version "0.4.2")
28250 (source
28251 (origin
28252 (method url-fetch)
28253 (uri (pypi-uri "cons" version))
28254 (sha256
28255 (base32
28256 "0w9giq196wps7mbm47c4shdzs5yvwvqajqzkim2p92i51sm5qgvm"))))
28257 (build-system python-build-system)
28258 (native-inputs
28259 (list python-pytest-6 python-toml))
28260 (propagated-inputs
28261 (list python-logical-unification))
28262 (home-page "https://github.com/pythological/python-cons")
28263 (synopsis "Cons cell data structures and related algorithms for Python")
28264 (description
28265 "This library implements algorithms and data structures for Lisp-style
28266 cons cells in Python.")
28267 (license license:lgpl3+)))
28268
28269 (define-public python-etuples
28270 (package
28271 (name "python-etuples")
28272 (version "0.3.3")
28273 (source
28274 (origin
28275 (method url-fetch)
28276 (uri (pypi-uri "etuples" version))
28277 (sha256
28278 (base32
28279 "0jhfyp177v37rl0i7wqfx7q6s5qkz027hl283d1x8d0vm3w0zqc8"))))
28280 (build-system python-build-system)
28281 (propagated-inputs
28282 (list python-cons python-multipledispatch))
28283 (home-page "https://github.com/pythological/etuples")
28284 (synopsis "S-expressions in Python")
28285 (description
28286 "This library implements eval'able S-expression in Python using tuple-like objects.")
28287 (license license:asl2.0)))
28288
28289 (define-public python-minikanren
28290 (package
28291 (name "python-minikanren")
28292 (version "1.0.1")
28293 (source
28294 (origin
28295 (method git-fetch)
28296 (uri (git-reference
28297 (url "https://github.com/pythological/kanren")
28298 (commit (string-append "v" version))))
28299 (file-name (git-file-name name version))
28300 (sha256
28301 (base32 "0g7wfj5hxalwz7k1301nsjqhjpzsif1bj6wjm2x2kavlm2ypv9jc"))))
28302 (build-system python-build-system)
28303 (arguments
28304 '(#:phases (modify-phases %standard-phases
28305 (replace 'check
28306 (lambda* (#:key tests? #:allow-other-keys)
28307 (when tests?
28308 (invoke "python" "-m" "pytest" "-v" "tests/" "kanren/"))
28309 #t)))))
28310 (native-inputs
28311 (list python-coveralls
28312 python-pydocstyle
28313 python-pytest
28314 python-pytest-cov
28315 python-pylint
28316 python-black
28317 python-sympy
28318 python-versioneer
28319 python-coverage
28320 python-pre-commit))
28321 (propagated-inputs
28322 (list python-toolz python-cons python-multipledispatch
28323 python-etuples python-logical-unification))
28324 (home-page "https://github.com/pythological/kanren")
28325 (synopsis "Relational logic programming in pure Python")
28326 (description
28327 "The minikanren library provides an algorithmic core for computer algebra
28328 systems in Python.")
28329 (license license:bsd-3)))
28330
28331 (define-public python-dotenv
28332 (package
28333 (name "python-dotenv")
28334 (version "0.20.0")
28335 (source
28336 (origin
28337 (method url-fetch)
28338 (uri (pypi-uri "python-dotenv" version))
28339 (sha256
28340 (base32 "13s9imfd0k4d7b1qy5wfqzw5vyj6rhmcrccsdz1l4g39b55b1qxp"))))
28341 (build-system python-build-system)
28342 (arguments
28343 `(#:phases
28344 (modify-phases %standard-phases
28345 (replace 'check
28346 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
28347 (when tests?
28348 (add-installed-pythonpath inputs outputs)
28349 (setenv "PATH" (string-append (getenv "PATH") ":"
28350 (assoc-ref outputs "out") "/bin"))
28351 ;; Skip the ipython tests.
28352 (delete-file "tests/test_ipython.py")
28353 (invoke "python" "-m" "pytest")))))))
28354 (propagated-inputs
28355 (list python-click))
28356 (native-inputs
28357 (list python-mock python-pytest python-sh))
28358 (home-page "https://saurabh-kumar.com/python-dotenv/")
28359 (synopsis "Setup environment variables according to .env files")
28360 (description
28361 "This package provides the @code{python-dotenv} Python module to read
28362 key-value pairs from a @code{.env} file and set them as environment variables.")
28363 (license license:bsd-3)))
28364
28365 (define-public python-dotenv-0.13.0
28366 (package (inherit python-dotenv)
28367 (name "python-dotenv")
28368 (version "0.13.0")
28369 (source
28370 (origin
28371 (method url-fetch)
28372 (uri (pypi-uri "python-dotenv" version))
28373 (sha256
28374 (base32
28375 "0x5dagmfn31phrbxlwacw3s4w5vibv8fxqc62nqcdvdhjsy0k69v"))))))
28376
28377 (define-public date2name
28378 (let ((commit "6c8f37277e8ec82aa50f90b8921422be30c4e798")
28379 (revision "1"))
28380 (package
28381 (name "date2name")
28382 (version (git-version "0.0" revision commit))
28383 (source
28384 (origin
28385 (method git-fetch)
28386 (uri (git-reference
28387 (url "https://github.com/novoid/date2name")
28388 (commit commit)))
28389 (file-name (git-file-name name version))
28390 (sha256
28391 (base32
28392 "1vq96b7n16d932nyfhnzwdwxff0zrqanidmwr4cxj2p67ad9y3w7"))))
28393 (build-system python-build-system)
28394 (arguments
28395 `(#:tests? #f ; no tests
28396 #:phases
28397 (modify-phases %standard-phases
28398 (delete 'build)
28399 (replace 'install
28400 (lambda* (#:key outputs #:allow-other-keys)
28401 (let* ((bindir (string-append (assoc-ref outputs "out") "/bin"))
28402 (binary (string-append bindir "/date2name")))
28403 (mkdir-p bindir)
28404 (copy-file "date2name/__init__.py" binary)
28405 (chmod binary #o555)))))))
28406 (synopsis "Handling time-stamps and date-stamps in file names")
28407 (description "By default, date2name gets the modification time of matching
28408 files and directories and adds a datestamp in standard ISO 8601+ format
28409 YYYY-MM-DD at the beginning of the file or directory name.")
28410 (home-page "https://github.com/novoid/date2name")
28411 (license license:gpl3+))))
28412
28413 (define-public python-braintree
28414 (package
28415 (name "python-braintree")
28416 (version "4.12.0")
28417 (source
28418 (origin
28419 (method url-fetch)
28420 (uri (pypi-uri "braintree" version))
28421 (sha256
28422 (base32 "19kli85q18p80nsn8fm4ql6axpr7bllfqg5chv2ywhr8zr8bssll"))))
28423 (build-system python-build-system)
28424 (propagated-inputs
28425 (list python-requests))
28426 (home-page
28427 "https://developers.braintreepayments.com/python/sdk/server/overview")
28428 (synopsis "Braintree Python Library")
28429 (description "The Braintree Python SDK provides integration access to the
28430 Braintree Gateway. Braintree is a US-based payments service provider.")
28431 (license license:expat)))
28432
28433 (define-public python-markuppy
28434 (package
28435 (name "python-markuppy")
28436 (version "1.14")
28437 (source
28438 (origin
28439 (method url-fetch)
28440 (uri (pypi-uri "MarkupPy" version))
28441 (sha256
28442 (base32 "0pqdmpxbr8iq22b4css2gz5z6s01ddpzyj25x27kgbs2lp0f5phs"))))
28443 (build-system python-build-system)
28444 (home-page "https://github.com/tylerbakke/MarkupPy")
28445 (synopsis "Pythonic HTML/XML generator")
28446 (description "This Python module attempts to make it easier to generate
28447 HTML/XML from a Python program in an intuitive, lightweight, customizable and
28448 pythonic way.")
28449 (license license:expat)))
28450
28451 (define-public python-tablib
28452 (package
28453 (name "python-tablib")
28454 (version "3.0.0")
28455 (source
28456 (origin
28457 (method url-fetch)
28458 (uri (pypi-uri "tablib" version))
28459 (sha256
28460 (base32 "03f1z6jq6rf67gwhbm9ma4rydm8h447a5nh5lcs5l8jg8l4aqg7q"))))
28461 (build-system python-build-system)
28462 (arguments
28463 '(#:phases
28464 (modify-phases %standard-phases
28465 (replace 'check
28466 (lambda* (#:key tests? #:allow-other-keys)
28467 (when tests?
28468 (setenv "GUIX_PYTHONPATH"
28469 (string-append (getcwd) "/build/lib:"
28470 (getenv "GUIX_PYTHONPATH")))
28471 (invoke "pytest")))))))
28472 (native-inputs
28473 (list python-pandas ;; required for test-suite
28474 python-pytest python-pytest-cov python-setuptools-scm))
28475 (propagated-inputs
28476 (list python-markuppy
28477 python-odfpy
28478 python-openpyxl
28479 python-pyyaml
28480 python-tabulate
28481 python-xlrd
28482 python-xlwt))
28483 (home-page "https://tablib.readthedocs.io")
28484 (synopsis "Format agnostic tabular data library")
28485 (description "@code{tablib} is a format-agnostic tabular dataset library,
28486 written in Python. Supported output formats are Excel (Sets + Books),
28487 JSON (Sets + Books), YAML (Sets + Books), HTML (Sets), Jira (Sets),
28488 TSV (Sets), ODS (Sets), CSV (Sets), and DBF (Sets).
28489
28490 @code{tablib} also supports Pandas DataFrames (Sets). Anyhow, since pandas is
28491 quite huge, this Guix package doesn't depend on pandas. In case, just also
28492 install @code{python-pandas}.")
28493 (license license:expat)))
28494
28495 (define-public python-csb43
28496 (package
28497 (name "python-csb43")
28498 (version "0.9.1")
28499 (source
28500 (origin
28501 (method url-fetch)
28502 (uri (pypi-uri "csb43" version))
28503 (sha256
28504 (base32 "0r0csl9npncnkfafg3rg6xr38d1qr0sxvq7wn7mg9bq41hvvh1si"))))
28505 (build-system python-build-system)
28506 (native-inputs
28507 (list python-lxml))
28508 (propagated-inputs
28509 (list python-pycountry python-pyyaml python-tablib))
28510 (home-page "https://bitbucket.org/wmj/csb43")
28511 (synopsis "Tools for converting from the Spanish banks' format CSB norm
28512 43 (CSB43)")
28513 (description "This package provides tools to convert files in the format
28514 used by multiple Spanish banks (standard 43 of the Spanish Banking Council
28515 [CSB43] / Spanish Banking Association [AEB43]) to other formats.
28516
28517 Supported output formats are: OFX, HomeBank CSV, HTML, JSON, ODS (OpenDocument
28518 spreadsheet), CSV, TSV, XLS, XLSX (Microsoft Excel spreadsheet), and YAML.")
28519 (license license:lgpl3)))
28520
28521 (define-public python-febelfin-coda
28522 (package
28523 (name "python-febelfin-coda")
28524 (version "0.2.0")
28525 (source
28526 (origin
28527 (method url-fetch)
28528 (uri (pypi-uri "febelfin-coda" version))
28529 (sha256
28530 (base32 "1isnf87gxlvfbmackv7b2c978vmnj7ij0v4svhyjl8pbb9hwjsvm"))))
28531 (build-system python-build-system)
28532 (home-page "https://coda.b2ck.com/")
28533 (synopsis "Module to parse Belgian CODA files")
28534 (description "This package provides a module to parse Coded statement of
28535 account (CODA) files as defined be the Belgian Febelfin bank standard.")
28536 (license license:bsd-3)))
28537
28538 (define-public python-ofxparse
28539 (package
28540 (name "python-ofxparse")
28541 (version "0.21")
28542 (source
28543 (origin
28544 (method url-fetch)
28545 (uri (pypi-uri "ofxparse" version))
28546 (sha256
28547 (base32 "19y4sp5l9jqiqzzlbqdfiab42qx7d84n4xm4s7jfq397666vcyh5"))))
28548 (build-system python-build-system)
28549 (arguments
28550 '(#:phases
28551 (modify-phases %standard-phases
28552 (replace 'check
28553 (lambda* (#:key tests? #:allow-other-keys)
28554 (when tests?
28555 (invoke "nosetests" "-v")))))))
28556 (native-inputs
28557 (list python-nose))
28558 (propagated-inputs
28559 (list python-beautifulsoup4 python-lxml python-six))
28560 (home-page "http://sites.google.com/site/ofxparse")
28561 (synopsis "Tools for working with the OFX (Open Financial Exchange) file
28562 format")
28563 (description "@code{ofxparse} is a parser for Open Financial
28564 Exchange (.ofx) format files. OFX files are available from almost any online
28565 banking site, so they work well if you want to pull together your finances
28566 from multiple sources. Online trading accounts also often provide account
28567 statements in OFX files.")
28568 (license license:expat)))
28569
28570 (define-public python-rfc3339-validator
28571 (package
28572 (name "python-rfc3339-validator")
28573 (version "0.1.4")
28574 (source
28575 (origin
28576 (method url-fetch)
28577 (uri (pypi-uri "rfc3339_validator" version))
28578 (sha256
28579 (base32 "0srg0b89aikzinw72s433994k5gv5lfyarq1adhas11kz6yjm2hk"))))
28580 (build-system python-build-system)
28581 (native-inputs (list python-hypothesis
28582 python-pytest
28583 python-pytest-runner
28584 python-strict-rfc3339))
28585 (propagated-inputs (list python-six))
28586 (home-page "https://github.com/naimetti/rfc3339-validator")
28587 (synopsis "Python RFC3339 validator")
28588 (description "This package provides a pure Python RFC3339 validator.")
28589 (license license:expat)))
28590
28591 (define-public python-strict-rfc3339
28592 (package
28593 (name "python-strict-rfc3339")
28594 (version "0.7")
28595 (source
28596 (origin
28597 (method git-fetch) ;no tests in pypi release
28598 (uri (git-reference
28599 (url "https://github.com/danielrichman/strict-rfc3339")
28600 (commit (string-append "version-" version))))
28601 (file-name (git-file-name name version))
28602 (sha256
28603 (base32
28604 "0b12bh9v9gwkm89kxbidxw2z81lg8fx1v5fzgs313v1wgx6qb09p"))))
28605 (build-system python-build-system)
28606 (arguments
28607 (list
28608 #:phases
28609 #~(modify-phases %standard-phases
28610 (replace 'check
28611 (lambda* (#:key tests? #:allow-other-keys)
28612 (when tests?
28613 (invoke "pytest" "-vv"
28614 ;; The timestamp to local offset tests fail due to
28615 ;; missing timezone data (see:
28616 ;; https://github.com/danielrichman/strict-rfc3339/issues/9).
28617 "-k" "not LocalOffset")))))))
28618 (native-inputs (list python-pytest))
28619 (home-page "https://github.com/danielrichman/strict-rfc3339")
28620 (synopsis "RFC3339 procedures library")
28621 (description "The @code{strict_rfc3339} Python module provides strict,
28622 simple, lightweight RFC3339 procedures. It enables or aims to:
28623 @itemize
28624 @item Convert UNIX timestamps to and from RFC3339.
28625 @item Produce RFC3339 strings with a UTC offset (Z) or with the offset that
28626 the C time module reports is the local timezone offset.
28627 @item Be simple with minimal dependencies/libraries.
28628 @item Avoid timezones as much as possible.
28629 @item Be very strict and follow RFC3339.
28630 @end itemize")
28631 (license license:gpl3+)))
28632
28633 (define-public python-stripe
28634 (package
28635 (name "python-stripe")
28636 (version "2.60.0")
28637 (source
28638 (origin
28639 (method url-fetch)
28640 (uri (pypi-uri "stripe" version))
28641 (sha256
28642 (base32 "0258lzh4qikhinfggnlfh5aklcvg7lrvl8giqrh0yf0l61wvfrl9"))))
28643 (build-system python-build-system)
28644 (arguments
28645 '(#:tests? #f)) ;; tests require network
28646 (propagated-inputs
28647 (list python-requests))
28648 (home-page "https://github.com/stripe/stripe-python")
28649 (synopsis "Python bindings for the Stripe financial services' API")
28650 (description "This package provides access to the Stripe financial
28651 services' API. It includes a pre-defined set of classes for API resources
28652 that initialize themselves dynamically from API responses which makes it
28653 compatible with a wide range of versions of the Stripe API.")
28654 (license license:expat)))
28655
28656 (define-public python-platformdirs
28657 (package
28658 (name "python-platformdirs")
28659 (version "2.4.1")
28660 (source
28661 (origin
28662 (method url-fetch)
28663 (uri (pypi-uri "platformdirs" version))
28664 (sha256
28665 (base32 "1njz0h4iky8iglrb85cd07hpa3lp1a2dfr934dj65hxwzvfk61j4"))))
28666 (build-system python-build-system)
28667 (arguments
28668 '(#:phases (modify-phases %standard-phases
28669 (replace 'check
28670 (lambda* (#:key tests? #:allow-other-keys)
28671 (when tests?
28672 (invoke "pytest" "-vv")))))))
28673 (native-inputs
28674 (list python-appdirs python-pytest python-pytest-mock
28675 python-setuptools-scm))
28676 (home-page "https://github.com/platformdirs/platformdirs")
28677 (synopsis "Determine the appropriate platform-specific directories")
28678 (description "When writing applications, finding the right location to
28679 store user data and configuration varies per platform. Even for
28680 single-platform apps, there may by plenty of nuances in figuring out the right
28681 location. This small Python module determines the appropriate
28682 platform-specific directories, e.g. the ``user data dir''.")
28683 (license license:expat)))
28684
28685 (define-public python-json2html
28686 (package
28687 (name "python-json2html")
28688 (version "1.3.0")
28689 (source
28690 ;; There are no tests in the PyPI tarball.
28691 (origin
28692 (method git-fetch)
28693 (uri (git-reference
28694 (url "https://github.com/softvar/json2html")
28695 (commit (string-append "v" version))))
28696 (file-name (git-file-name name version))
28697 (sha256
28698 (base32 "1ncypljnl5y8lsxy6ibcqy412kx3mzxl4ajg67568hvq98kv1sb3"))))
28699 (build-system python-build-system)
28700 (arguments
28701 '(#:phases
28702 (modify-phases %standard-phases
28703 (replace 'check
28704 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
28705 (when tests?
28706 (add-installed-pythonpath inputs outputs)
28707 (invoke "python" "test/run_tests.py")))))))
28708 (home-page "https://github.com/softvar/json2html")
28709 (synopsis "Convert JSON to HTML table")
28710 (description "@code{python-json2html} is a python module to convert JSON
28711 into a human readable HTML table representation.")
28712 (license license:expat)))
28713
28714 (define-public python-face
28715 (package
28716 (name "python-face")
28717 (version "20.1.1")
28718 (source
28719 (origin
28720 (method url-fetch)
28721 (uri (pypi-uri "face" version))
28722 (sha256
28723 (base32 "0gpd9f0rmbv3rd2szi2na37l29fabkwazikjrxc6wca1lddwlnbx"))))
28724 (build-system python-build-system)
28725 (arguments
28726 '(#:phases
28727 (modify-phases %standard-phases
28728 (replace 'check
28729 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
28730 (when tests?
28731 ;; Make installed package available for running the tests.
28732 (add-installed-pythonpath inputs outputs)
28733 (invoke "pytest" "-v")))))))
28734 (native-inputs
28735 (list python-pytest))
28736 (propagated-inputs
28737 (list python-boltons))
28738 (home-page "https://github.com/mahmoud/face")
28739 (synopsis "CLI parsing and dispatching microframework")
28740 (description "@code{python-face} is a Pythonic microframework for building
28741 command-line applications.
28742
28743 @itemize
28744 @item First-class subcommand support
28745 @item Powerful middleware architecture
28746 @item Separate parser layer
28747 @item Built-in flagfile support
28748 @item Handy testing utilities
28749 @item Themeable help display
28750 @end itemize")
28751 (license license:bsd-3)))
28752
28753 (define-public python-glom
28754 (package
28755 (name "python-glom")
28756 (version "20.11.0")
28757 (source
28758 (origin
28759 (method url-fetch)
28760 (uri (pypi-uri "glom" version))
28761 (sha256
28762 (base32 "04pba09vdr3qjvqvy14g60fscdsi35chbbyqpczdp76cpir101al"))))
28763 (build-system python-build-system)
28764 (arguments
28765 '(#:phases
28766 (modify-phases %standard-phases
28767 (replace 'check
28768 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
28769 (when tests?
28770 ;; Make installed executable available for running the tests.
28771 (setenv "PATH"
28772 (string-append (assoc-ref outputs "out") "/bin"
28773 ":" (getenv "PATH")))
28774 (invoke "pytest" "-v")))))))
28775 (native-inputs
28776 (list python-pytest python-pyyaml))
28777 (propagated-inputs
28778 (list python-attrs python-boltons python-face))
28779 (home-page "https://github.com/mahmoud/glom")
28780 (synopsis "Declaratively restructure data")
28781 (description "Real applications have real data, and real data
28782 nests---objects inside of objects inside of lists of objects. glom is a new
28783 and powerful way to handle real-world data, featuring:
28784
28785 @itemize
28786 @item Path-based access to nested data structures
28787 @item Readable, meaningful error messages
28788 @item Declarative data transformation, using lightweight, Pythonic specifications
28789 @item Built-in data exploration and debugging features
28790 @end itemize")
28791 (license license:bsd-3)))
28792
28793 (define-public python-box
28794 (package
28795 (name "python-box")
28796 (version "5.3.0")
28797 (source
28798 (origin
28799 (method url-fetch)
28800 (uri (pypi-uri "python-box" version))
28801 (sha256
28802 (base32
28803 "0jhrdif57khx2hsw1q6a9x42knwcvq8ijgqyq1jmll6y6ifyzm2f"))))
28804 (build-system python-build-system)
28805 (propagated-inputs
28806 (list python-msgpack python-ruamel.yaml python-toml))
28807 (home-page "https://github.com/cdgriffith/Box")
28808 (synopsis "Advanced Python dictionaries with dot notation access")
28809 (description
28810 "This package provides the @code{python-box} Python module.
28811 It implements advanced Python dictionaries with dot notation access.")
28812 (license license:expat)))
28813
28814 (define-public python-fields
28815 (package
28816 (name "python-fields")
28817 (version "5.0.0")
28818 (source
28819 (origin
28820 (method url-fetch)
28821 (uri (pypi-uri "fields" version))
28822 (sha256
28823 (base32 "09sppvhhkhkv9zc9g994m53z15v92csxwcf42ggkaknlv01smm1i"))))
28824 (build-system python-build-system)
28825 (home-page "https://python-fields.readthedocs.io/")
28826 (synopsis "Python container class boilerplate killer")
28827 (description "Avoid repetetive boilerplate code in Python classes.")
28828 (license license:bsd-3)))
28829
28830 (define-public python-aspectlib
28831 (package
28832 (name "python-aspectlib")
28833 (version "1.5.2")
28834 (source
28835 (origin
28836 (method url-fetch)
28837 (uri (pypi-uri "aspectlib" version))
28838 (sha256
28839 (base32 "1am4ycf292zbmgz791z393v63w7qrynf8q5p9db2wwf2qj1fqxfj"))))
28840 (build-system python-build-system)
28841 (propagated-inputs (list python-fields))
28842 (home-page "https://github.com/ionelmc/python-aspectlib")
28843 (synopsis
28844 "Python monkey-patching and decorators")
28845 (description
28846 "This package provides an aspect-oriented programming, monkey-patch
28847 and decorators library. It is useful when changing behavior in existing
28848 code is desired. It includes tools for debugging and testing:
28849 simple mock/record and a complete capture/replay framework.")
28850 (license license:bsd-2)))
28851
28852 (define-public python-ijson
28853 (package
28854 (name "python-ijson")
28855 (version "3.1.4")
28856 (source
28857 (origin
28858 (method url-fetch)
28859 (uri (pypi-uri "ijson" version))
28860 (sha256
28861 (base32 "1sp463ywj4jv5cp6hsv2qwiima30d09xsabxb2dyq5b17jp0640x"))))
28862 (arguments
28863 `(#:phases
28864 (modify-phases %standard-phases
28865 ;; the tests run by the default setup.py require yajl 1.x,
28866 ;; but we have 2.x. yajl 1.x support is going to be removed
28867 ;; anyway, so use pytest to avoid running the yajl1-related
28868 ;; tests. See: https://github.com/ICRAR/ijson/issues/55
28869 (replace 'check
28870 (lambda* (#:key tests? #:allow-other-keys)
28871 (when tests?
28872 (invoke "pytest" "-vv")))))))
28873 (inputs
28874 ;; libyajl is optional, but compiling with it makes faster
28875 ;; backends available to ijson:
28876 (list libyajl))
28877 (native-inputs
28878 (list python-pytest))
28879 (build-system python-build-system)
28880 (home-page "https://github.com/ICRAR/ijson")
28881 (synopsis "Iterative JSON parser with Python iterator interfaces")
28882 (description
28883 "Ijson is an iterative JSON parser with standard Python iterator
28884 interfaces.")
28885 (license license:bsd-3)))
28886
28887 (define-public python-ordered-set
28888 (package
28889 (name "python-ordered-set")
28890 (version "4.1.0")
28891 (source
28892 (origin
28893 (method url-fetch)
28894 (uri (pypi-uri "ordered-set" version))
28895 (sha256
28896 (base32 "1a34fg3r3480nfm6652kyqql3lwixf8jirzdja9camvnr128wjk9"))))
28897 (build-system python-build-system)
28898 (arguments
28899 (list #:phases
28900 #~(modify-phases %standard-phases
28901 (replace 'check
28902 (lambda* (#:key tests? #:allow-other-keys)
28903 (when tests?
28904 (invoke "pytest" "-vv")))))))
28905 (native-inputs (list python-cython python-pytest))
28906 (home-page "https://github.com/simonpercivall/orderedset")
28907 (synopsis "Ordered Set implementation in Cython")
28908 (description "This library provides an @code{OrderedSet} data type that
28909 works like a regular set, but remembers insertion order. It supports the full
28910 Python @code{set} interface.")
28911 (license license:asl2.0)))
28912
28913 (define-public python-orgparse
28914 (package
28915 (name "python-orgparse")
28916 (version "0.3.0")
28917 (source
28918 (origin
28919 (method url-fetch)
28920 (uri (pypi-uri "orgparse" version))
28921 (sha256
28922 (base32 "14iv4pg3rma9560plg0w943x04mr2cmrssda43y2d1x9acrd2n71"))))
28923 (build-system python-build-system)
28924 (arguments
28925 `(#:phases
28926 (modify-phases %standard-phases
28927 (replace 'check
28928 (lambda* (#:key tests? #:allow-other-keys)
28929 (when tests?
28930 (invoke "pytest" "-vv" "orgparse/tests")))))))
28931 (native-inputs
28932 (list python-pytest python-setuptools-scm))
28933 (home-page "https://github.com/karlicoss/orgparse")
28934 (synopsis "Emacs Org mode parser in Python")
28935 (description
28936 "This package is a Python module for reading Emacs Org mode files.")
28937 (license license:bsd-3)))
28938
28939 (define-public dynaconf
28940 (package
28941 (name "dynaconf")
28942 (version "3.1.7")
28943 (source
28944 (origin
28945 (method git-fetch)
28946 (uri
28947 (git-reference
28948 (url "https://github.com/rochacbruno/dynaconf")
28949 (commit version)))
28950 (file-name (git-file-name name version))
28951 (sha256
28952 (base32
28953 "0pjyjsdzairpn5vq8nzddhxwxmr18grn272nj31wcy2ipwdl3c3h"))
28954 (patches (search-patches "dynaconf-unvendor-deps.patch"))
28955 (modules '((guix build utils)))
28956 (snippet '(begin
28957 ;; Remove vendored dependencies
28958 (let ((unvendor '("click" "dotenv" "ruamel" "toml")))
28959 (with-directory-excursion "dynaconf/vendor"
28960 (for-each delete-file-recursively unvendor))
28961 (with-directory-excursion "dynaconf/vendor_src"
28962 (for-each delete-file-recursively unvendor)))))))
28963 (build-system python-build-system)
28964 (arguments
28965 `(#:phases
28966 (modify-phases %standard-phases
28967 (add-after 'unpack 'patch-for-click-8
28968 (lambda _
28969 (substitute* "dynaconf/cli.py"
28970 (("click.get_os_args\\()") ;deprecated from Click 8.1+
28971 "sys.argv[1:]"))))
28972 (replace 'check
28973 (lambda* (#:key tests? outputs #:allow-other-keys)
28974 (when tests?
28975 ;; These tests depend on hvac and a live Vault process.
28976 (delete-file "tests/test_vault.py")
28977 (invoke "make" "test_only")))))))
28978 (propagated-inputs
28979 (list python-click python-configobj python-dotenv-0.13.0
28980 python-ruamel.yaml python-toml))
28981 (native-inputs
28982 (list python-django python-flask python-pytest python-pytest-cov
28983 python-pytest-mock))
28984 (home-page "https://www.dynaconf.com/")
28985 (synopsis "The dynamic configurator for your Python project")
28986 (description
28987 "This package provides @code{dynaconf} the dynamic configurator manager for
28988 your Python project. It provides features such as:
28989
28990 @itemize
28991 @item Inspired by the @url{https://12factor.net/config, 12-factor application guide};
28992 @item Settings management (default values, validation, parsing, templating);
28993 @item Protection of sensitive information (passwords/tokens);
28994 @item Multiple file formats @code{toml|yaml|json|ini|py} and also customizable
28995 loaders;
28996 @item Full support for environment variables to override existing settings
28997 (dotenv support included);
28998 @item Optional layered system for multiple environments @code{[default,
28999 development, testing, production]};
29000 @item Built-in support for Hashicorp Vault and Redis as settings and secrets storage;
29001 @item Built-in extensions for Django and Flask web frameworks;
29002 @item CLI for common operations such as @code{init, list, write, validate, export}.
29003 @end itemize")
29004 (license license:expat)))
29005
29006 (define-public python-pudb
29007 (package
29008 (name "python-pudb")
29009 (version "2022.1.2")
29010 (source (origin
29011 (method url-fetch)
29012 (uri (pypi-uri "pudb" version))
29013 (sha256
29014 (base32
29015 "03a7zalgdxfd2z2k6050ng087gwqgqis544n2083gdfxbf0ap0vb"))))
29016 (build-system python-build-system)
29017 (arguments
29018 `(#:phases (modify-phases %standard-phases
29019 (add-before 'check 'fix-read-only-home
29020 (lambda _
29021 (setenv "HOME" "/tmp")))
29022 (replace 'check
29023 (lambda* (#:key tests? #:allow-other-keys)
29024 (when tests?
29025 (invoke "pytest" "-vv")))))))
29026 (native-inputs (list python-pytest python-pytest-mock))
29027 (propagated-inputs (list python-jedi python-pygments python-urwid
29028 python-urwid-readline))
29029 (home-page "https://documen.tician.de/pudb/")
29030 (synopsis "Console-based Python debugger")
29031 (description
29032 "@command{pudb} is a full-screen, console-based Python debugger providing
29033 all the niceties of modern GUI-based debuggers in a more lightweight and
29034 keyboard-friendly package.")
29035 (license license:expat)))
29036
29037 (define-public pudb
29038 (deprecated-package "pudb" python-pudb))
29039
29040 (define-public python-iwlib
29041 (package
29042 (name "python-iwlib")
29043 (version "1.7.0")
29044 (source
29045 (origin
29046 (method url-fetch)
29047 (uri (pypi-uri "iwlib" version))
29048 (sha256
29049 (base32 "18bd35wn7zclalpqbry42pf7bjrdggxkkw58mc0k1vkhg9czc1d8"))))
29050 (build-system python-build-system)
29051 (inputs
29052 (list wireless-tools))
29053 (propagated-inputs (list python-cffi))
29054 (home-page "https://github.com/nhoad/python-iwlib")
29055 (synopsis "Python module to interface with iwlib")
29056 (description
29057 "This package provides a Python interface to iw wireless tools.")
29058 (license license:gpl2)))
29059
29060 (define-public python-pdoc3
29061 (package
29062 (name "python-pdoc3")
29063 (version "0.10.0")
29064 (source
29065 (origin
29066 (method url-fetch)
29067 (uri (pypi-uri "pdoc3" version))
29068 (sha256
29069 (base32 "1dz4hw10ngidzg9cjvflc8nlrwrjbb3ijhmaw4w6f039p6yff8jz"))
29070 (patches
29071 (search-patches "python-pdoc3-tests.patch"))))
29072 (build-system python-build-system)
29073 (native-inputs
29074 (list python-setuptools-git python-setuptools-scm))
29075 (propagated-inputs (list python-mako python-markdown))
29076 (home-page "https://pdoc3.github.io/pdoc/")
29077 (synopsis "Auto-generate API documentation for Python projects")
29078 (description
29079 "This package auto-generates API documentation from Python projects
29080 already existing modules and objects docstrings.")
29081 (license license:agpl3+)))
29082
29083 (define-public python-piexif
29084 (package
29085 (name "python-piexif")
29086 (version "1.1.3")
29087 (source
29088 (origin
29089 (method url-fetch)
29090 (uri (pypi-uri "piexif" version ".zip"))
29091 (sha256
29092 (base32 "06sz58q4mrw472p8fbnq7wsj8zpi5js5r8phm2hiwfmz0v33bjw3"))
29093 (patches
29094 (search-patches "python-piexif-fix-tests-with-pillow-7.2.patch"))))
29095 (build-system python-build-system)
29096 (native-inputs
29097 (list unzip python-pillow))
29098 (home-page "https://github.com/hMatoba/Piexif")
29099 (synopsis "Simplify exif manipulations with Python")
29100 (description "Piexif simplifies interacting with EXIF data in
29101 Python. It includes the tools necessary for extracting, creating,
29102 manipulating, converting and writing EXIF data to JPEG, WebP and TIFF files.")
29103 (license license:expat)))
29104
29105 (define-public python-pyrss2gen
29106 (package
29107 (name "python-pyrss2gen")
29108 (version "1.1")
29109 (source
29110 (origin
29111 (method url-fetch)
29112 (uri (pypi-uri "PyRSS2Gen" version))
29113 (sha256
29114 (base32 "1rvf5jw9hknqz02rp1vg8abgb1lpa0bc65l7ylmlillqx7bswq3r"))))
29115 (build-system python-build-system)
29116 (home-page "http://dalkescientific.com/Python/PyRSS2Gen.html")
29117 (synopsis "Generate RSS 2.0 feeds using a Python data structure")
29118 (description "PyRSS2Gen is the interface to generate RSS 2.0 feeds.
29119 PyRSS2Gen builds the feed up by using a XML generator.")
29120 (license license:bsd-3)))
29121
29122 (define-public python-yapsy
29123 (package
29124 (name "python-yapsy")
29125 (version "1.12.2")
29126 (source
29127 (origin
29128 (method url-fetch)
29129 (uri (pypi-uri "Yapsy" version))
29130 (sha256
29131 (base32 "12rznbnswfw0w7qfbvmmffr9r317gl1rqg36nijwzsklkjgks4fq"))))
29132 (build-system python-build-system)
29133 (home-page "http://yapsy.sourceforge.net")
29134 (synopsis "Simple plugin system for Python applications")
29135 (description "Yapsy, or Yet Another Plugin SYstem, is a small library
29136 implementing the core mechanisms needed to build a plugin system into a wider
29137 application.
29138
29139 The main purpose is to depend only on Python's standard libraries and to
29140 implement only the basic functionalities needed to detect, load and keep track
29141 of several plugins.")
29142 (license license:bsd-3)))
29143
29144 (define-public python-doit
29145 (package
29146 (name "python-doit")
29147 (version "0.34.0")
29148 (source
29149 (origin
29150 (method url-fetch)
29151 (uri (pypi-uri "doit" version))
29152 (sha256
29153 (base32 "0bf0m9n0hyjvjpv051zd26725j8jr23gyvc37v3kkadwbh8dxwcf"))))
29154 (build-system python-build-system)
29155 (propagated-inputs
29156 (list python-cloudpickle python-pyinotify))
29157 (native-inputs
29158 (list python-pytest))
29159 (home-page "https://pydoit.org")
29160 (synopsis "Automation tool to execute any kind of task in a build-tools
29161 fashion")
29162 (description "doit is an automation tool that brings the power of
29163 build-tools to execute any kind of task.
29164
29165 A task describes some computation to be done (actions), and contains some
29166 extra meta-data. The actions can be external programs or Python functions. A
29167 single task may define more than one action.doit uses the task’s meta-data
29168 to:
29169
29170 @itemize
29171 @item cache task results
29172 @item correct execution order
29173 @item parallel execution
29174 @item powerful dependency system
29175 @end itemize")
29176 (license license:expat)))
29177
29178 (define-public python-phpserialize
29179 (package
29180 (name "python-phpserialize")
29181 (version "1.3")
29182 (source
29183 (origin
29184 (method url-fetch)
29185 (uri (pypi-uri "phpserialize" version))
29186 (sha256
29187 (base32 "19qgkb9z4zjbjxlpwh2w6pxkz2j3iymnydi69jl0jg905lqjsrxz"))))
29188 (build-system python-build-system)
29189 (arguments
29190 (list
29191 ;; tests missing in pypi archive, anhow they are quite simple and not worth any hassle
29192 #:tests? #f))
29193 (home-page "http://github.com/mitsuhiko/phpserialize")
29194 (synopsis "Python port of the serialize and unserialize functions of PHP")
29195 (description
29196 "This package provides a port of the serialize and unserialize functions of PHP for Python")
29197 (license license:bsd-3)))
29198
29199 (define-public nikola
29200 (package
29201 (name "nikola")
29202 (version "8.2.2")
29203 (source
29204 (origin
29205 (method url-fetch)
29206 (uri (pypi-uri "Nikola" version))
29207 (sha256
29208 (base32 "1h96y4sfypp2fbqxa8xrqch5f7r3srm2ly222k9w2n143h2spx4m"))))
29209 (build-system python-build-system)
29210 (propagated-inputs
29211 (list python-babel
29212 python-blinker
29213 python-dateutil
29214 python-docutils
29215 python-doit
29216 python-jinja2 ;; for themes
29217 python-lxml
29218 python-mako
29219 python-markdown
29220 python-natsort
29221 python-notebook ;; for ipynb
29222 python-phpserialize ;; for wordpress import
29223 python-piexif
29224 python-pillow
29225 python-pygments
29226 python-pyrss2gen
29227 python-requests
29228 python-ruamel.yaml ;; for YAML metadata
29229 python-unidecode
29230 python-yapsy))
29231 (native-inputs
29232 (list python-coverage
29233 python-flake8
29234 python-freezegun
29235 python-pytest
29236 python-pytest-cov))
29237 (arguments
29238 (list
29239 #:phases
29240 #~(modify-phases %standard-phases
29241 (replace 'check
29242 (lambda* (#:key tests? #:allow-other-keys)
29243 (when tests?
29244 (invoke "pytest" "tests" "--no-cov"
29245 "-k" "not test_compiling_markdown[hilite]")))))))
29246 (home-page "https://getnikola.com/")
29247 (synopsis "Modular, fast and simple static website and blog generator")
29248 (description "Nikola generates static websites and blogs. Out of the box,
29249 it supports reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML,
29250 and has plugins for many other formats.")
29251 (license license:expat)))
29252
29253 (define-public nbss-upload
29254 (package
29255 (name "nbss-upload")
29256 (version "0.1")
29257 (source
29258 (origin
29259 (method url-fetch)
29260 (uri (pypi-uri "nbss-upload" version))
29261 (sha256
29262 (base32 "0jhyfm7w2ssknmh9789fmpnf79xr7sxbdcjwak6hfha6qparvk38"))))
29263 (build-system python-build-system)
29264 (propagated-inputs
29265 (list python-requests))
29266 (arguments
29267 `(#:tests? #f)) ;no tests
29268 (home-page "https://github.com/notebook-sharing-space/nbss-upload")
29269 (synopsis "Upload notebooks to a notebooksharing.space instance")
29270 (description
29271 "Upload notebooks as @code{.ipynb}, @code{.rmd}, and @code{.html} to a
29272 notebooksharing.space instance.")
29273 (license license:bsd-3)))
29274
29275 (define-public python-reedsolo
29276 (package
29277 (name "python-reedsolo")
29278 (version "1.5.4")
29279 (source
29280 (origin
29281 (method url-fetch)
29282 (uri (pypi-uri "reedsolo" version))
29283 (sha256
29284 (base32 "09q15ji9iac3nmmxrcdvz8ynldvvqanqy3hs6q3cp327hgf5rcmq"))))
29285 (build-system python-build-system)
29286 (home-page "https://github.com/tomerfiliba/reedsolomon")
29287 (synopsis "Pure-Python Reed Solomon encoder/decoder")
29288 (description "A pure-python universal errors-and-erasures Reed-Solomon
29289 Codec, based on the tutorial at Wikiversity. This is a burst-type
29290 implementation, so that it supports any Galois field higher than 2^3,
29291 but not binary streams.")
29292 (license license:public-domain)))
29293
29294 (define-public python-esprima
29295 (package
29296 (name "python-esprima")
29297 (version "4.0.1")
29298 (source
29299 (origin
29300 (method url-fetch)
29301 (uri (pypi-uri "esprima" version))
29302 (sha256
29303 (base32 "1vi32g991lxcxzmncfiszh8m9bwkh4887szskkdi0a9wdn3imnq8"))))
29304 (build-system python-build-system)
29305 (home-page "https://github.com/Kronuz/esprima-python")
29306 (synopsis
29307 "ECMAScript parsing infrastructure for analysis in Python")
29308 (description
29309 "This package provides ECMAScript parsing infrastructure for
29310 multipurpose analysis in Python.")
29311 (license license:bsd-3)))
29312
29313 (define-public python-types-dataclasses
29314 (package
29315 (name "python-types-dataclasses")
29316 (version "0.6.1")
29317 (source (origin
29318 (method url-fetch)
29319 (uri (pypi-uri "types-dataclasses" version))
29320 (sha256
29321 (base32
29322 "1mq6qd365m8ml889zl5dxj9kncjv71iq1d1fvgj59y0ixlpm6s35"))))
29323 (build-system python-build-system)
29324 (home-page "https://github.com/python/typeshed")
29325 (synopsis "Typing stubs for dataclasses")
29326 (description
29327 "This package provides a collection of library stubs for Python, with
29328 static types.")
29329 (license license:asl2.0)))
29330
29331 (define-public python-types-docutils
29332 (package
29333 (name "python-types-docutils")
29334 (version "0.18.2")
29335 (source
29336 (origin
29337 (method url-fetch)
29338 (uri (pypi-uri "types-docutils" version))
29339 (sha256
29340 (base32 "14ypv0x6fk1pjw0bvvr1lkb2g6dvq2pwvbd5b5pzjl6182fhmaim"))))
29341 (build-system python-build-system)
29342 (home-page "https://github.com/python/typeshed")
29343 (synopsis "Typing stubs for docutils")
29344 (description "This package provides a collection of library stubs for
29345 Python, with static types.")
29346 (license license:asl2.0)))
29347
29348 (define-public python-psycopg2-binary
29349 (package
29350 (name "python-psycopg2-binary")
29351 (version "2.9.3")
29352 (source (origin
29353 (method url-fetch)
29354 (uri (pypi-uri "psycopg2-binary" version))
29355 (sha256
29356 (base32
29357 "0kpaxg3lg5wg5ww5kxmzi2z2d7arsx13ci915d8a2pf17lqza7bn"))))
29358 (build-system python-build-system)
29359 (inputs (list postgresql))
29360 (arguments
29361 ;; Tests are disable because they need a live instance of PostgreSQL.
29362 '(#:tests? #f))
29363 (home-page "https://psycopg.org/")
29364 (synopsis "PostgreSQL database adapter for Python")
29365 (description
29366 "Psycopg is a PostgreSQL database adapter for the Python programming
29367 language. Its main features are the complete implementation of the Python DB
29368 API 2.0 specification and the thread safety (several threads can share the
29369 same connection). It was designed for heavily multi-threaded applications
29370 that create and destroy lots of cursors and make a large number of concurrent
29371 @code{INSERT}s or @code{UPDATE}s.
29372
29373 Psycopg 2 is mostly implemented in C as a libpq wrapper, resulting in
29374 being both efficient and secure. It features client-side and
29375 server-side cursors, asynchronous communication and notifications,
29376 @code{COPY TO}/@code{COPY FROM} support. Many Python types are supported
29377 out-of-the-box and adapted to matching PostgreSQL data types;
29378 adaptation can be extended and customized thanks to a flexible objects
29379 adaptation system.
29380
29381 Psycopg 2 is both Unicode and Python 3 friendly.")
29382 (license license:lgpl3+)))
29383
29384 (define-public python-pyfuse3
29385 (package
29386 (name "python-pyfuse3")
29387 (version "3.2.1")
29388 (source
29389 (origin
29390 (method url-fetch)
29391 (uri (pypi-uri "pyfuse3" version))
29392 (sha256
29393 (base32 "0cvybynv9igssfa4l13q09gb6m7afmwk34wsbq8jk14sqpd4dl92"))))
29394 (build-system python-build-system)
29395 (native-inputs (list pkg-config))
29396 (inputs (list fuse-3))
29397 (propagated-inputs (list python-pytest-trio))
29398 (home-page "https://github.com/libfuse/pyfuse3")
29399 (synopsis "Python bindings FUSE 3")
29400 (description "This package provides Python 3 bindings for libfuse 3 with
29401 async I/O support.")
29402 (license license:gpl2+)))
29403
29404 (define-public python-ansicolors
29405 (package
29406 (name "python-ansicolors")
29407 (version "1.1.8")
29408 (source
29409 (origin
29410 (method url-fetch)
29411 (uri (pypi-uri "ansicolors" version ".zip"))
29412 (sha256
29413 (base32 "1q3jqglkq4z0f6nkkn8bswcwqg012i2grrc27kabr8286dg4zycr"))))
29414 (build-system python-build-system)
29415 (native-inputs
29416 (list python-tox
29417 python-pytest-cov
29418 unzip))
29419 (home-page "https://github.com/jonathaneunice/colors/")
29420 (synopsis "ANSI colors for Python")
29421 (description
29422 "This package adds ANSI colors and decorations to your strings.")
29423 (license license:isc)))
29424
29425 (define-public python-types-freezegun
29426 (package
29427 (name "python-types-freezegun")
29428 (version "1.1.8")
29429 (source
29430 (origin
29431 (method url-fetch)
29432 (uri (pypi-uri "types-freezegun" version))
29433 (sha256
29434 (base32 "08g926s8343zwq140zcfwly3qfgmahm7lp0vgb3ics549b2hifzl"))))
29435 (build-system python-build-system)
29436 (home-page "https://github.com/python/typeshed")
29437 (synopsis "Typing stubs for @code{freezegun}")
29438 (description "This package contains typing stubs for for @code{freezegun}, a
29439 very small subset the Python stubs contained in the complete @code{typeshed}
29440 collection.")
29441 (license license:asl2.0)))
29442
29443 (define-public python-types-protobuf
29444 (package
29445 (name "python-types-protobuf")
29446 (version "3.20.1")
29447 (source (origin
29448 (method url-fetch)
29449 (uri (pypi-uri "types-protobuf" version))
29450 (sha256
29451 (base32
29452 "000f8n6d4ilihiaf590k73rx3327jh8ima5q5dpxlwz3frj45qrn"))))
29453 (build-system python-build-system)
29454 (home-page "https://github.com/python/typeshed")
29455 (synopsis "Typing stubs for @code{protobuf}")
29456 (description "This package contains typing stubs for @code{protobuf}, a
29457 very small subset the Python stubs contained in the complete @code{typeshed}
29458 collection.")
29459 (license license:asl2.0)))
29460
29461 (define-public python-types-pytz
29462 (package
29463 (name "python-types-pytz")
29464 (version "2021.3.6")
29465 (source
29466 (origin
29467 (method url-fetch)
29468 (uri (pypi-uri "types-pytz" version))
29469 (sha256
29470 (base32 "14yr5hg2ww8s4a0mz2bkd549fv8qgm538fnzxvqv92ld1pcpym3l"))))
29471 (build-system python-build-system)
29472 (home-page "https://github.com/python/typeshed")
29473 (synopsis "Typing stubs for pytz")
29474 (description "This package contains typing stubs for @code{pytz}, a very
29475 small subset the Python stubs contained in the complete @code{typeshed}
29476 collection.")
29477 (license license:asl2.0)))
29478
29479 (define-public python-types-toml
29480 (package
29481 (name "python-types-toml")
29482 (version "0.10.5")
29483 (source
29484 (origin
29485 (method url-fetch)
29486 (uri (pypi-uri "types-toml" version))
29487 (sha256
29488 (base32 "10400bd3yv6rjfnq8galskkbpqz1sfx9sfgr5qwvw04270x4cjgr"))))
29489 (build-system python-build-system)
29490 (home-page "https://github.com/python/typeshed")
29491 (synopsis "Typing stubs for TOML")
29492 (description "This package contains typing stubs for TOML, a very small
29493 subset the Python stubs contained in the complete @code{typeshed}
29494 collection.")
29495 (license license:asl2.0)))
29496
29497 (define-public python-types-ujson
29498 (package
29499 (name "python-types-ujson")
29500 (version "4.2.1")
29501 (source (origin
29502 (method url-fetch)
29503 (uri (pypi-uri "types-ujson" version))
29504 (sha256
29505 (base32
29506 "0k9n9hsq4k2zaakdwbkcsvi7m8d3mv2y9yl6f171y58ld4qpcxcy"))))
29507 (build-system python-build-system)
29508 (home-page "https://github.com/python/typeshed")
29509 (synopsis "Typing stubs for ujson")
29510 (description
29511 "This is a PEP 561 type stub package for the ujson package. It can be
29512 used by type-checking tools like mypy, PyCharm, pytype etc. to check code that
29513 uses ujson.")
29514 (license license:asl2.0)))
29515
29516 (define-public python-stltools
29517 (package
29518 (name "python-stltools")
29519 (version "2022.01.20")
29520 (source (origin
29521 (method git-fetch)
29522 (uri (git-reference
29523 (url "https://github.com/rsmith-nl/stltools")
29524 (commit version)))
29525 (file-name (git-file-name name version))
29526 (sha256
29527 (base32
29528 "1k6dhszza4lpy46qffaqx5zr70ikfqqysbacy7zabnrvz09fd4rs"))))
29529 (build-system python-build-system)
29530 (arguments
29531 `(#:use-setuptools? #f
29532 #:phases
29533 (modify-phases %standard-phases
29534 (delete 'build)
29535 (replace 'install
29536 (lambda* (#:key inputs outputs #:allow-other-keys)
29537 (let ((moddir (string-append (site-packages inputs outputs) "/stltools"))
29538 (bindir (string-append (assoc-ref outputs "out") "/bin")))
29539 (copy-recursively "stltools" moddir)
29540 (mkdir-p bindir)
29541 (for-each
29542 (lambda (script)
29543 (let ((source (string-append script ".py"))
29544 (target (string-append bindir "/" script)))
29545 (copy-file source target)
29546 (chmod target #o555)))
29547 '("stl2pov" "stl2ps" "stl2pdf" "stlinfo")))))
29548 (replace 'check
29549 (lambda* (#:key tests? #:allow-other-keys)
29550 (when tests?
29551 (invoke "py.test" "-v")))))))
29552 (propagated-inputs (list python-pycairo))
29553 (native-inputs (list python-pytest))
29554 (home-page "https://github.com/rsmith-nl/stltools")
29555 (synopsis "Python modules and scripts for handling STL files")
29556 (description "This package consists of Python modules and scripts for
29557 manipulating stereolithography (STL) files. It can convert STL files into
29558 POV-ray meshes, PDF and PostScript. The Python modules allow for reading and
29559 writing STL files. It supports both the text and binary forms of STL.")
29560 (license license:expat)))
29561
29562 (define-public python-multipart
29563 (package
29564 (name "python-multipart")
29565 (version "0.0.5")
29566 (source (origin
29567 (method url-fetch)
29568 (uri (pypi-uri "python-multipart" version))
29569 (sha256
29570 (base32
29571 "0hzshd665rl1bkwvaj9va4j3gs8nmb478fbvligx20663xhmzfzp"))))
29572 (build-system python-build-system)
29573 (propagated-inputs (list python-six))
29574 (native-inputs (list python-pyyaml python-mock python-pytest-cov))
29575 (arguments
29576 `(#:phases (modify-phases %standard-phases
29577 ;; There is a bug in the test_suit specification.
29578 (add-after 'unpack 'patch-test-suite
29579 (lambda _
29580 ;; Make compatible with PyYAML 6.
29581 (substitute* "multipart/tests/test_multipart.py"
29582 (("yaml.load")
29583 "yaml.safe_load"))
29584 (substitute* "setup.py"
29585 (("test_suite = 'multipart.tests.suite'")
29586 "test_suite = 'multipart.tests.test_multipart.suite'"))
29587 ;; Needed by PyYAML 6.0.
29588 (substitute* "multipart/tests/test_multipart.py"
29589 (("yaml_data = yaml.load\\(f\\)")
29590 "yaml_data = yaml.load(f, Loader=yaml.SafeLoader)")))))))
29591 (home-page "https://github.com/andrew-d/python-multipart")
29592 (synopsis "Streaming multipart parser for Python")
29593 (description
29594 "This package provides a streaming multipart parser for Python.")
29595 (license license:asl2.0)))
29596
29597 (define-public python-aiopg
29598 (package
29599 (name "python-aiopg")
29600 (version "1.3.3")
29601 (source (origin
29602 (method url-fetch)
29603 (uri (pypi-uri "aiopg" version))
29604 (sha256
29605 (base32
29606 "1mwmypsfzh8adjbyvf7kqv9h3k1kf5ykhi1g3ahw4wqdxaj6nz2l"))))
29607 (build-system python-build-system)
29608 (native-inputs (list python-sqlalchemy))
29609 (propagated-inputs (list python-async-timeout python-psycopg2-binary))
29610 (home-page "https://aiopg.readthedocs.io")
29611 (synopsis "Postgres integration with asyncio")
29612 (description
29613 "aiopg is a library for accessing a PostgreSQL
29614 database from the asyncio (PEP-3156/tulip) framework. It wraps
29615 asynchronous features of the Psycopg database driver.")
29616 (license license:bsd-3)))
29617
29618 (define-public python-verspec
29619 (package
29620 (name "python-verspec")
29621 (version "0.1.0")
29622 (source (origin
29623 (method url-fetch)
29624 (uri (pypi-uri "verspec" version))
29625 (sha256
29626 (base32
29627 "07n06wv85fm4vl1ird2mja0823js3x322wgs9gdnq1djjyk4ql64"))))
29628 (build-system python-build-system)
29629 (native-inputs (list python-coverage python-flake8 python-mypy
29630 python-pretend python-pytest))
29631 (arguments
29632 `(#:phases (modify-phases %standard-phases
29633 (replace 'check
29634 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29635 (when tests?
29636 (add-installed-pythonpath inputs outputs)
29637 (invoke "touch" "test/__init__.py")
29638 (invoke "pytest")))))))
29639 (home-page "https://github.com/jimporter/verspec")
29640 (synopsis "Flexible version handling for Python")
29641 (description
29642 "This Python library handles software versions and specifiers. It is
29643 adapted from the @code{packaging} package.")
29644 (license (list license:bsd-2 license:asl2.0))))
29645
29646 (define-public python-shtab
29647 (package
29648 (name "python-shtab")
29649 (version "1.5.3")
29650 (source
29651 (origin
29652 (method url-fetch)
29653 (uri (pypi-uri "shtab" version))
29654 (sha256
29655 (base32 "127mymfm7r0hddk2vknqq34fj6dirj6ip990i3g4isx0lsd7pnsc"))))
29656 (build-system python-build-system)
29657 (native-inputs
29658 (list bash
29659 python-pytest
29660 python-pytest-cov
29661 python-pytest-timeout
29662 python-setuptools-scm
29663 python-wheel))
29664 (arguments
29665 `(#:phases
29666 (modify-phases %standard-phases
29667 (replace
29668 'check
29669 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
29670 (when tests?
29671 (add-installed-pythonpath inputs outputs)
29672 (invoke "pytest")))))))
29673 (home-page "https://github.com/iterative/shtab")
29674 (synopsis "Automagic shell tab completion for Python CLI applications")
29675 (description
29676 "This package automatically generates shell tab completion scripts for
29677 Python CLI apps.")
29678 (license license:asl2.0)))
29679
29680 (define-public python-style
29681 (package
29682 (name "python-style")
29683 (version "1.1.6")
29684 (source
29685 (origin
29686 (method url-fetch)
29687 (uri (pypi-uri "style" version))
29688 (sha256
29689 (base32 "1dcfb578v9mrwh92rgms87gql0gp4vgj6l9hpgyfg0wbd3rh3bfh"))))
29690 (build-system python-build-system)
29691 (home-page "https://github.com/lmittmann/style")
29692 (synopsis "Terminal string styling")
29693 (description
29694 "@code{python-style} is a simple terminal string styling package. Its API is
29695 a port of the chalk package for javascript.")
29696 (license license:expat)))
29697
29698 (define-public python-sre-yield
29699 (package
29700 (name "python-sre-yield")
29701 (version "1.2")
29702 (source
29703 (origin
29704 (method url-fetch)
29705 (uri (pypi-uri "sre_yield" version))
29706 (sha256
29707 (base32
29708 "12kv3mvdr22g2v9wfr5aabh1f58s817dbh8mrlfzxzxs7hm1lkz9"))))
29709 (build-system python-build-system)
29710 (native-inputs (list python-nose))
29711 (home-page "https://github.com/google/sre_yield")
29712 (synopsis "Expands a regular expression to its possible matches")
29713 (description
29714 "The goal of sre_yield is to efficiently generate all values that can
29715 match a given regular expression, or count possible matches efficiently. It
29716 uses the parsed regular expression, so you get a much more accurate result
29717 than trying to just split strings.")
29718 (license license:asl2.0)))
29719
29720 (define-public python-pyperf
29721 (package
29722 (name "python-pyperf")
29723 (version "2.3.1")
29724 (source
29725 (origin
29726 (method url-fetch)
29727 (uri (pypi-uri "pyperf" version))
29728 (sha256
29729 (base32 "189qf9wdbig0fk4n3bavx8acgdbay5lllfvw48jvbfaafb7y5hja"))))
29730 (build-system python-build-system)
29731 (arguments
29732 '(#:phases
29733 (modify-phases %standard-phases
29734 (add-after 'unpack 'fix-tests
29735 (lambda _
29736 ;; Some of these tests fail with:
29737 ;;
29738 ;; ModuleNotFoundError: No module named 'pyperf'
29739 ;;
29740 ;; even when calling ‘add-installed-pythonpath’ in the ‘check’
29741 ;; phase.
29742 (delete-file "pyperf/tests/test_examples.py")))
29743 (replace 'check
29744 (lambda* (#:key tests? #:allow-other-keys)
29745 (when tests?
29746 ;; From tox.ini's ‘testenv.commands’.
29747 (invoke "python" "-bb" "-Wd"
29748 "-m" "unittest" "discover"
29749 "-s" "pyperf/tests/" "-v")))))))
29750 (native-inputs
29751 (list python-psutil))
29752 (home-page "https://github.com/psf/pyperf")
29753 (synopsis "Toolkit for running Python benchmarks")
29754 (description "The Python @code{pyperf} module is a toolkit for writing,
29755 running and analyzing benchmarks. It features a simple API that can:
29756
29757 @itemize
29758 @item automatically calibrate a benchmark for a time budget;
29759 @item spawn multiple worker processes;
29760 @item compute the mean and standard deviation;
29761 @item detect if a benchmark result seems unstable;
29762 @item store benchmark results in JSON format;
29763 @item support multiple units: seconds, bytes and integer.
29764 @end itemize")
29765 (license license:expat)))
29766
29767 (define-public python-pydispatcher
29768 (package
29769 (name "python-pydispatcher")
29770 (version "2.0.5")
29771 (source
29772 (origin
29773 (method url-fetch)
29774 (uri (pypi-uri "PyDispatcher" version))
29775 (sha256
29776 (base32 "1bswbmhlbqdxlgbxlb6xrlm4k253sg8nvpl1whgsys8p3fg0cw2m"))))
29777 (build-system python-build-system)
29778 (arguments
29779 `(#:phases
29780 (modify-phases %standard-phases
29781 (replace 'check
29782 (lambda* (#:key tests? #:allow-other-keys)
29783 (when tests?
29784 (invoke "pytest")))))))
29785 (native-inputs (list python-pytest))
29786 (home-page "http://pydispatcher.sourceforge.net")
29787 (synopsis "Multi-producer-multi-consumer signal dispatching mechanism")
29788 (description "PyDispatcher is an enhanced version of Patrick K. O’Brien’s
29789 original @code{dispatcher.py} module. It provides the Python programmer with
29790 a robust mechanism for event routing within various application contexts.
29791
29792 Included in the package are the robustapply and saferef modules, which
29793 provide the ability to selectively apply arguments to callable objects
29794 and to reference instance methods using weak-references.")
29795 (license license:bsd-3)))
29796
29797 (define-public python-queuelib
29798 (package
29799 (name "python-queuelib")
29800 (version "1.6.2")
29801 (source
29802 (origin
29803 (method url-fetch)
29804 (uri (pypi-uri "queuelib" version))
29805 (sha256
29806 (base32 "1lpwq8wx3025i14y5h0hbald2ypbarf081pql6cqcak4y9kp482b"))))
29807 (build-system python-build-system)
29808 (native-inputs (list python-pytest))
29809 (home-page "https://github.com/scrapy/queuelib")
29810 (synopsis
29811 "Collection of persistent (disk-based) and non-persistent (memory-based) queues")
29812 (description "Queuelib is a Python library that implements object
29813 collections which are stored in memory or persisted to disk, provide a
29814 simple API, and run fast.
29815
29816 Queuelib provides collections for queues (FIFO), stacks (LIFO), queues
29817 sorted by priority and queues that are emptied in a round-robin
29818 fashion.")
29819 (license license:bsd-3)))
29820
29821 (define-public python-posix-ipc
29822 (package
29823 (name "python-posix-ipc")
29824 (version "1.0.5")
29825 (source
29826 (origin
29827 ;; The source distributed on PyPI is prebuild.
29828 (method git-fetch)
29829 (uri (git-reference
29830 (url "https://github.com/osvenskan/posix_ipc")
29831 (commit (string-append "rel" version))))
29832 (file-name (git-file-name name version))
29833 (sha256
29834 (base32 "17y4d0pmvp199c5hbs602ailhlh9f9zv89kmpbd8jhyl6rgaxsvs"))))
29835 (build-system python-build-system)
29836 (arguments
29837 (list #:phases
29838 #~(modify-phases %standard-phases
29839 (add-after 'unpack 'patch-cc-path
29840 (lambda _
29841 (substitute* "prober.py"
29842 (("cmd = .cc")
29843 (string-append "cmd = \"" #$(cc-for-target)))))))))
29844 (home-page "http://semanchuk.com/philip/posix_ipc/")
29845 (synopsis "POSIX IPC primitives for Python")
29846 (description
29847 "This package provides POSIX IPC primitives - semaphores, shared memory and
29848 message queues for Python.")
29849 (license license:bsd-3))) ; BSD like Copyright (c) 2018, Philip Semanchuk
29850
29851 (define-public python-itemadapter
29852 (package
29853 (name "python-itemadapter")
29854 (version "0.5.0")
29855 (source
29856 (origin
29857 (method url-fetch)
29858 (uri (pypi-uri "itemadapter" version))
29859 (sha256
29860 (base32 "083wp3h2brh8x19jbdr8rz3biqwp3jlqd0rfzcyrjyhssffsgdh5"))))
29861 (build-system python-build-system)
29862 (home-page "https://github.com/scrapy/itemadapter")
29863 (synopsis "Common interface for data container classes")
29864 (description "The ItemAdapter class is a wrapper for data container
29865 objects, providing a common interface to handle objects of different
29866 types in an uniform manner, regardless of their underlying implementation.
29867
29868 Currently supported types are:
29869 @itemize
29870 @item scrapy.item.Item
29871 @item dict
29872 @item dataclass-based classes
29873 @item attrs-based classes
29874 @item pydantic-based classes
29875 @end itemize
29876
29877 Additionally, interaction with arbitrary types is supported by
29878 implementing a pre-defined interface.")
29879 (license license:bsd-3)))
29880
29881 (define-public python-itemloaders
29882 (package
29883 (name "python-itemloaders")
29884 (version "1.0.4")
29885 (source
29886 (origin
29887 (method url-fetch)
29888 (uri (pypi-uri "itemloaders" version))
29889 (sha256
29890 (base32 "15hc78h90qhwass1bga1c3xar2dd6j8sxg61zg6jvh74lf6csxqj"))))
29891 (build-system python-build-system)
29892 (propagated-inputs
29893 (list python-itemadapter python-jmespath python-parsel python-w3lib))
29894 (home-page "https://github.com/scrapy/itemloaders")
29895 (synopsis "Base library for scrapy's ItemLoader")
29896 (description "Itemloaders is a library that helps you collect data
29897 from HTML and XML sources. It comes in handy to extract data from web
29898 pages, as it supports data extraction using CSS and XPath Selectors.
29899
29900 It’s specially useful when you need to standardize the data from many
29901 sources. For example, it allows you to have all your casting and
29902 parsing rules in a single place.")
29903 (license license:bsd-3)))
29904
29905 (define-public python-hypy-utils
29906 (package
29907 (name "python-hypy-utils")
29908 (version "1.0.6")
29909 (source (origin
29910 (method url-fetch)
29911 (uri (pypi-uri "hypy_utils" version))
29912 (sha256
29913 (base32
29914 "05csk0x8ivavq88x457cq5hwjcdirfbkzj7bbg5qgnpnf2dxxhiw"))))
29915 (build-system python-build-system)
29916 (home-page "https://github.com/hykilpikonna/HyPyUtils")
29917 (synopsis "Python utility functions for HyDEV")
29918 (description "This module provides Python utility functions for modifying
29919 and setting the color of terminal output, via HyDEV.")
29920 (license license:expat)))
29921
29922 (define-public python-mike
29923 (package
29924 (name "python-mike")
29925 (version "1.1.2")
29926 (source (origin
29927 (method url-fetch)
29928 (uri (pypi-uri "mike" version))
29929 (sha256
29930 (base32
29931 "0yxp816x7s948xsd0fifvq9shg01xdxlifd9rzf5y2rd9iwz3hsn"))))
29932 (build-system python-build-system)
29933 (native-inputs
29934 (list python-coverage python-flake8 python-shtab))
29935 (propagated-inputs
29936 (list python-jinja2 python-mkdocs python-pyyaml python-verspec))
29937 (home-page "https://github.com/jimporter/mike")
29938 (synopsis "Manage multiple versions of MkDocs-powered documentation")
29939 (description
29940 "This package provides a Python utility to easily deploy multiple
29941 versions of MkDocs-powered docs to a Git branch. It is suitable for deploying
29942 to Github via gh-pages.")
29943 (license license:bsd-3)))
29944
29945 (define-public python-arpeggio
29946 (package
29947 (name "python-arpeggio")
29948 (version "2.0.0")
29949 (source (origin
29950 (method url-fetch)
29951 (uri (pypi-uri "Arpeggio" version))
29952 (sha256
29953 (base32
29954 "0ggdsck1wpladd5bh9drhkmm86bblgk2wagrhn3sdf4v04wkic6n"))))
29955 (build-system python-build-system)
29956 (native-inputs (list python-coverage
29957 python-coveralls
29958 python-flake8
29959 python-mike
29960 python-mkdocs
29961 python-pytest
29962 python-pytest-runner
29963 python-twine
29964 python-wheel))
29965 (home-page "https://github.com/textX/Arpeggio")
29966 (synopsis "Packrat parser interpreter for Python")
29967 (description
29968 "This Python library provides a recursive descent parser with backtracking
29969 and memoization (a.k.a. packrat parser). Arpeggio grammars are based on PEG
29970 formalism. Arpeggio's main use is a foundation for a toolchain for DSL
29971 development but it can be used for all sorts of general purpose parsing.")
29972 (license license:expat)))
29973
29974 (define-public python-flatten-json
29975 (package
29976 (name "python-flatten-json")
29977 (version "0.1.13")
29978 (source
29979 (origin
29980 (method url-fetch)
29981 (uri (pypi-uri "flatten_json" version))
29982 (sha256
29983 (base32 "007m28gfs7pmz2rqqjxpial6skzw26hrfi8vrdy9agi9x0rj6dgf"))))
29984 (build-system python-build-system)
29985 (propagated-inputs (list python-six))
29986 (home-page "https://github.com/amirziai/flatten")
29987 (synopsis "Flatten JSON objects")
29988 (description
29989 "The @code{flatten_json} Python library flattens the hierarchy in your
29990 object, which can be useful if you want to force your objects into a table.")
29991 (license license:expat)))
29992
29993 (define-public python-deepmerge
29994 (package
29995 (name "python-deepmerge")
29996 (version "1.0.1")
29997 (source
29998 (origin
29999 (method url-fetch)
30000 (uri (pypi-uri "deepmerge" version))
30001 (sha256
30002 (base32 "06hagzg8ccmjzqvszdxb52jgx5il8a1jdz41n4dpkyyjsfg7fi2b"))))
30003 (build-system python-build-system)
30004 (arguments
30005 (list
30006 #:phases
30007 #~(modify-phases %standard-phases
30008 (add-before 'build 'set-version
30009 (lambda _
30010 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)
30011 ;; ZIP does not support timestamps before 1980.
30012 (setenv "SOURCE_DATE_EPOCH" "315532800")))
30013 (replace 'build
30014 (lambda _
30015 (invoke "python" "-m" "build" "--wheel"
30016 "--no-isolation" ".")))
30017 (replace 'check
30018 (lambda* (#:key tests? #:allow-other-keys)
30019 (when tests?
30020 (invoke "pytest"))))
30021 (replace 'install
30022 (lambda _
30023 (let ((whl (car (find-files "dist" "\\.whl$"))))
30024 (invoke "pip" "--no-cache-dir" "--no-input"
30025 "install" "--no-deps" "--prefix" #$output whl)))))))
30026 (native-inputs
30027 (list python-pypa-build
30028 python-setuptools-scm
30029 python-pytest
30030 python-wheel))
30031 (home-page "https://deepmerge.readthedocs.io/en/latest/")
30032 (synopsis "Merge nested data structures")
30033 (description
30034 "The @code{deep-merge} Python library provides a toolset to deeply merge
30035 nested data structures in Python like lists and dictionaries.")
30036 (license license:expat)))
30037
30038 (define-public python-murmurhash3
30039 (package
30040 (name "python-murmurhash3")
30041 (version "2.3.5")
30042 (source (origin
30043 (method url-fetch)
30044 (uri (pypi-uri "murmurhash3" version))
30045 (sha256
30046 (base32
30047 "1gdzys1212dx70byz07ipknbw1awbqskh6aznlkm85js8b8qfczm"))))
30048 (build-system python-build-system)
30049 (native-inputs (list python-cython python-pytest))
30050 (inputs (list python))
30051 (arguments
30052 (list #:modules
30053 '((ice-9 ftw) (ice-9 match)
30054 (guix build utils)
30055 (guix build python-build-system))
30056 #:phases
30057 #~(modify-phases %standard-phases
30058 (add-after 'unpack 'set-source-file-times-to-1980
30059 (lambda _
30060 (let ((circa-1980 (* 10 366 24 60 60)))
30061 (ftw "."
30062 (lambda (file stat flag)
30063 (utime file circa-1980 circa-1980) #t))))))))
30064 (home-page "https://github.com/veegee/mmh3")
30065 (synopsis "Python wrapper for MurmurHash (MurmurHash3)")
30066 (description
30067 "@code{murmurhash3} is a Python library for MurmurHash (MurmurHash3), a set
30068 of fast and robust hash functions. This library is a Python extension module
30069 written in C.")
30070 (license license:public-domain)))
30071
30072 (define-public python-murmurhash
30073 (package
30074 (name "python-murmurhash")
30075 (version "1.0.7")
30076 (source (origin
30077 (method url-fetch)
30078 (uri (pypi-uri "murmurhash" version))
30079 (sha256
30080 (base32
30081 "0vwkn98c703nvsigl2nz99rax2pafkx3djjfkgc49jiipmp3j2k3"))))
30082 (build-system python-build-system)
30083 (native-inputs (list python-cython python-pytest))
30084 (inputs (list python python-murmurhash3))
30085 (arguments
30086 (list #:modules
30087 '((ice-9 ftw) (ice-9 match)
30088 (guix build utils)
30089 (guix build python-build-system))
30090 #:phases
30091 #~(modify-phases %standard-phases
30092 (add-after 'unpack 'set-source-file-times-to-1980
30093 (lambda _
30094 (let ((circa-1980 (* 10 366 24 60 60)))
30095 (ftw "."
30096 (lambda (file stat flag)
30097 (utime file circa-1980 circa-1980) #t))))))))
30098 (home-page "https://github.com/explosion/murmurhash")
30099 (synopsis "Cython bindings for MurmurHash2")
30100 (description "This package provides Cython bindings for MurmurHash2.")
30101 (license license:expat)))
30102
30103 ;; Scooby requires for its test suite a ‘pyvips’ package that is missing its
30104 ;; VIPS dependency.
30105 (define python-pyvips-for-python-scooby
30106 (package
30107 (inherit python-pyvips)
30108 (name "python-pyvips-for-python-scooby")
30109 (arguments
30110 (substitute-keyword-arguments (package-arguments python-pyvips)
30111 ((#:phases phases)
30112 #~(modify-phases #$phases
30113 (delete 'fix-paths)
30114 ;; The checks won't succeed without VIPS.
30115 (delete 'check)
30116 (delete 'sanity-check)))))
30117 (inputs
30118 (modify-inputs (package-inputs python-pyvips)
30119 (delete "vips")))
30120 (synopsis "pyvips for Scooby's test suite")))
30121
30122 (define-public python-scooby
30123 (package
30124 (name "python-scooby")
30125 (version "0.5.12")
30126 (source
30127 ;; The PyPI tarball does not contain the tests.
30128 (origin
30129 (method git-fetch)
30130 (uri (git-reference
30131 (url "https://github.com/banesullivan/scooby")
30132 (commit (string-append "v" version))))
30133 (file-name (git-file-name name version))
30134 (sha256
30135 (base32 "1gkpmz8wl3jg8ylf1na35308sznw2g9wx33zqlyq5i2gpy2ml9mw"))))
30136 (build-system python-build-system)
30137 (native-inputs
30138 (list python-beautifulsoup4
30139 python-numpy
30140 python-pytest
30141 python-pytest-cov
30142 python-pyvips-for-python-scooby
30143 python-scipy))
30144 (propagated-inputs
30145 (list python-psutil))
30146 (arguments
30147 '(#:phases
30148 (modify-phases %standard-phases
30149 (add-after 'unpack 'fix-tests
30150 (lambda _
30151 (substitute* "tests/test_scooby.py"
30152 ;; The test suite uses the no-version PyPI package
30153 ;; (https://pypi.org/project/no-version/),
30154 ;; but it doesn't seem worth packaging in Guix just for this.
30155 (("scooby\\.report\\.VERSION_NOT_FOUND")
30156 "scooby.report.MODULE_NOT_FOUND")
30157 (("^ +import no_version # noqa.*") ""))))
30158 (replace 'check
30159 (lambda* (#:key tests? #:allow-other-keys)
30160 (when tests?
30161 (invoke "pytest")))))))
30162 (home-page "https://github.com/banesullivan/scooby")
30163 (synopsis "Report hardware information and Python package versions")
30164 (description
30165 "The Scooby package reports the following information about the currently
30166 running system:
30167
30168 @itemize
30169 @item operating system name;
30170 @item hardware information including machine type (e.g., @samp{i386},
30171 @samp{x86_64}, etc.), CPU count and total RAM;
30172 @item Python environment (e.g., Python, IPython, etc.);
30173 @item file system name;
30174 @item Python version;
30175 @item versions of specified Python packages.
30176 @end itemize
30177
30178 It can generate reports as HTML tables or plain text lists.
30179
30180 Scooby has no required dependencies, and only few optional dependencies.")
30181 (license license:expat)))
30182
30183 (define-public python-cymem
30184 (package
30185 (name "python-cymem")
30186 (version "2.0.6")
30187 (source (origin
30188 (method url-fetch)
30189 (uri (pypi-uri "cymem" version))
30190 (sha256
30191 (base32
30192 "0pkyy60zk9654sj991w111p1l0m8wvz36nslw96x6nb9h6sjb5qn"))))
30193 (build-system python-build-system)
30194 (native-inputs
30195 (list python-cython
30196 python-pytest))
30197 (inputs
30198 (list python))
30199 (arguments
30200 (list
30201 #:modules '((ice-9 ftw)
30202 (ice-9 match)
30203 (guix build utils)
30204 (guix build python-build-system))
30205 #:phases
30206 #~(modify-phases %standard-phases
30207 (add-after 'unpack 'set-source-file-times-to-1980
30208 ;; XXX One of the tests uses a ZIP library to pack up some of the
30209 ;; source tree, and fails with "ZIP does not support timestamps
30210 ;; before 1980". Work around this by setting the file times in the
30211 ;; source tree to sometime in early 1980.
30212 (lambda _
30213 (let ((circa-1980 (* 10 366 24 60 60)))
30214 (ftw "." (lambda (file stat flag)
30215 (utime file circa-1980 circa-1980)
30216 #t))))))))
30217 (home-page "https://github.com/explosion/cymem")
30218 (synopsis "Cython memory pool for RAII-style memory management")
30219 (description
30220 "Cymem provides two small memory-management helpers for Cython. They make it
30221 easy to tie memory to a Python object's life-cycle, so that the memory is freed
30222 when the object is garbage collected.")
30223 (license license:expat)))
30224
30225 (define-public python-preshed
30226 (package
30227 (name "python-preshed")
30228 (version "3.0.6")
30229 (source (origin
30230 (method url-fetch)
30231 (uri (pypi-uri "preshed" version))
30232 (sha256
30233 (base32
30234 "0akpydd23xqxx9d04drsnw9140rb3cv07r1zpzqz5wm0lf47afzv"))))
30235 (build-system python-build-system)
30236 (native-inputs (list python-cython python-cymem python-pytest))
30237 (inputs (list python python-cymem python-murmurhash))
30238 (arguments
30239 (list #:modules
30240 '((ice-9 ftw) (ice-9 match)
30241 (guix build utils)
30242 (guix build python-build-system))
30243 #:phases
30244 #~(modify-phases %standard-phases
30245 (add-after 'unpack 'set-source-file-times-to-1980
30246 (lambda _
30247 (let ((circa-1980 (* 10 366 24 60 60)))
30248 (ftw "."
30249 (lambda (file stat flag)
30250 (utime file circa-1980 circa-1980) #t))))))))
30251 (home-page "https://github.com/explosion/preshed")
30252 (synopsis "Cython hash tables that assume keys are pre-hashed")
30253 (description
30254 "Simple but high performance Cython hash table mapping pre-randomized keys
30255 to void* values.")
30256 (license license:expat)))
30257
30258 (define-public python-catalogue
30259 (package
30260 (name "python-catalogue")
30261 (version "2.0.7")
30262 (source (origin
30263 (method url-fetch)
30264 (uri (pypi-uri "catalogue" version))
30265 (sha256
30266 (base32
30267 "0srdxiil2xys8q1gpc1nvzhvis3a33d8a7amk2i1rlpbg6p36pak"))))
30268 (build-system python-build-system)
30269 (native-inputs (list python-pytest))
30270 (inputs (list python python-zipp python-typing-extensions python-mypy))
30271 (home-page "https://github.com/explosion/catalogue")
30272 (synopsis "Lightweight function registries for your library")
30273 (description
30274 "\"catalogue\" is a tiny, zero-dependencies library that
30275 makes it easy to add function (or object) registries to your code. Function
30276 registries are helpful when you have objects that need to be both easily
30277 serializable and fully customizable. Instead of passing a function into your
30278 object, you pass in an identifier name, which the object can use to lookup the
30279 function from the registry. This makes the object easy to serialize, because the
30280 name is a simple string. If you instead saved the function, you'd have to use
30281 Pickle for serialization, which has many drawbacks.")
30282 (license license:expat)))
30283
30284 (define-public python-wasabi
30285 (package
30286 (name "python-wasabi")
30287 (version "0.9.1")
30288 (source (origin
30289 (method url-fetch)
30290 (uri (pypi-uri "wasabi" version))
30291 (sha256
30292 (base32
30293 "1kwqfalq7qxs9f7xb2m055g01qpbznyzxl7sjnzjdvvhkczg39md"))))
30294 (build-system python-build-system)
30295 (native-inputs (list python-pytest))
30296 (home-page "https://github.com/ines/wasabi")
30297 (synopsis "Console printing and formatting toolkit")
30298 (description
30299 "This package provides a lightweight console printing and formatting
30300 toolkit for Python.")
30301 (license license:expat)))
30302
30303 (define-public python-srt
30304 (package
30305 (name "python-srt")
30306 (version "3.5.2")
30307 (source (origin
30308 (method url-fetch)
30309 (uri (pypi-uri "srt" version))
30310 (sha256
30311 (base32
30312 "0l24710spxarijmv3h7iicvx0lv6m3d4xg77nd9kyv8jwifav93s"))))
30313 (build-system python-build-system)
30314 (home-page "https://github.com/cdown/srt")
30315 (synopsis "SRT parsing library")
30316 (description
30317 "This package provides a Python library for parsing, modifying, and
30318 composing subtitles in the SRT file format.")
30319 (license license:expat)))
30320
30321 (define-public python-gatt
30322 (package
30323 (name "python-gatt")
30324 (version "0.2.7")
30325 (source (origin
30326 (method url-fetch)
30327 (uri (pypi-uri "gatt" version))
30328 (sha256
30329 (base32
30330 "0fjf066jixk30fr8xwfalwfnhqpr56yv0cccyypnx2qp9bi9svb2"))))
30331 (propagated-inputs (list python-dbus python-pygobject))
30332 (build-system python-build-system)
30333 (home-page "https://github.com/getsenic/gatt-python")
30334 (synopsis "Bluetooth GATT SDK for Python")
30335 (description "The Bluetooth @acronym{GATT, Generic ATTribute Profile}
30336 @acronym{SDK, Software Development Kit} for Python helps you implement and
30337 communicate with any Bluetooth Low Energy device that has a GATT
30338 profile. It supports:
30339
30340 @itemize @bullet
30341 @item Discovering nearby Bluetooth Low Energy devices
30342 @item Connecting and disconnecting devices
30343 @item Implementing your custom GATT profile
30344 @item Accessing all GATT services
30345 @item Accessing all GATT characteristics
30346 @item Reading characteristic values
30347 @item Writing characteristic values
30348 @item Subscribing for characteristic value change notifications
30349 @end itemize
30350
30351 Currently, Linux is the only platform supported by this library.")
30352 (license license:expat)))
30353
30354 (define-public python-clrprint
30355 (package
30356 (name "python-clrprint")
30357 (version "2.0.1")
30358 (source (origin
30359 (method url-fetch)
30360 (uri (pypi-uri "clrprint" version))
30361 (sha256
30362 (base32
30363 "0xfn8d1by2w7pjiji887qljk1avn4fylbnz1mj28gysm5g0zvy43"))))
30364 (build-system python-build-system)
30365 (arguments '(#:tests? #f)) ;there are no tests
30366 (propagated-inputs (list python-colorama python-termcolor))
30367 (home-page "https://github.com/AbhijithAJ/clrprint")
30368 (synopsis "Print colorful output in the terminal")
30369 (description "@code{clrprint} is developed to print colorful output in the
30370 terminal. It has red, blue, green, yellow, purple and black/white (default)
30371 colors.")
30372 (license license:expat)))
30373
30374 (define-public python-musical-scales
30375 (package
30376 (name "python-musical-scales")
30377 (version "1.0.1")
30378 (source (origin
30379 (method url-fetch)
30380 (uri (pypi-uri "musical-scales" version))
30381 (sha256
30382 (base32
30383 "1ckn8n37i7b65h0i385ycn0w8sg9na0iabz0kmhxxc1wj0hddkw9"))))
30384 (build-system python-build-system)
30385 (native-inputs (list python-wheel))
30386 (home-page "https://github.com/hmillerbakewell/musical-scale")
30387 (synopsis "Retrieve a scale based on a given mode and starting note")
30388 (description
30389 "Retrieve a scale based on a given mode and starting note.
30390 Information about these scales can be
30391 @url{https://en.wikipedia.org/wiki/List_of_musical_scales_and_modes, found on
30392 Wikipedia}.")
30393 (license license:expat)))
30394
30395 (define-public python-langcodes
30396 (package
30397 (name "python-langcodes")
30398 (version "3.3.0")
30399 (source (origin
30400 (method url-fetch)
30401 (uri (pypi-uri "langcodes" version))
30402 (sha256
30403 (base32
30404 "1xkyh3qdcigb18qiimbwl2669y22hhdmd89mqcd270c7lbahfkbr"))))
30405 (build-system python-build-system)
30406 (native-inputs (list python-pytest))
30407 (home-page "https://github.com/rspeer/langcodes")
30408 (synopsis "Python library for working with language codes")
30409 (description
30410 "This package provides a Python library for working with and comparing
30411 language codes.
30412
30413 @code{python-langcodes} implements @url{http://tools.ietf.org/html/bcp47, BCP
30414 47}, the IETF Best Current Practices on Tags for Identifying Languages. BCP
30415 47 is also known as RFC 5646. It subsumes ISO 639 and is backward compatible
30416 with it, and it also implements recommendations from the
30417 @url{http://cldr.unicode.org/, Unicode CLDR}.
30418
30419 @code{python-langcodes} can also refer to a database of language properties
30420 and names, built from Unicode CLDR and the IANA subtag registry, if you
30421 install @code{python-language-data}.")
30422 (license license:expat)))
30423
30424 (define-public python-geomet
30425 (package
30426 (name "python-geomet")
30427 (version "0.3.0")
30428 (source (origin
30429 (method url-fetch)
30430 (uri (pypi-uri "geomet" version))
30431 (sha256
30432 (base32
30433 "06rfvadx5dr5xrgsc5bsmqil9c9kff6i13xl988gy0gfg0cl2lnb"))))
30434 (build-system python-build-system)
30435 (propagated-inputs (list python-click python-six))
30436 (home-page "https://github.com/geomet/geomet")
30437 (synopsis "Convert GeoJSON to WKT/WKB (Well-Known Text/Binary) or
30438 GeoPackage Binary")
30439 (description "This package provides utilities and functions for converting
30440 GeoJSON to WKT/WKB (Well-Known Text/Binary) or GeoPackage Binary, and vice
30441 versa. Extended WKB/WKT are also supported.")
30442 (license license:asl2.0)))
30443
30444 (define-public python-bsdiff4
30445 (package
30446 (name "python-bsdiff4")
30447 (version "1.2.2")
30448 (home-page "https://github.com/ilanschnell/bsdiff4")
30449 (source (origin
30450 (method git-fetch)
30451 (uri (git-reference
30452 (url home-page)
30453 (commit version)))
30454 (file-name (git-file-name name version))
30455 (sha256
30456 (base32
30457 "1fa0vkmbr0a9xifq7i5gfcf7ifn739i1fdij8awynm299fsqvvhx"))))
30458 (build-system python-build-system)
30459 (synopsis "Binary diff and patch using the BSDIFF4 format")
30460 (description "This package provides a Python library for the @code{bsdiff}
30461 binary diff utility. It also provides two command-line tools, @code{bsdiff4}
30462 and @code{bspatch4}.")
30463 (license license:bsd-2)))
30464
30465 (define-public python-mpv
30466 (package
30467 (name "python-mpv")
30468 (version "1.0.1")
30469 (source
30470 (origin
30471 ;; python-mpv from pypi does not include the tests directory.
30472 (method git-fetch)
30473 (uri (git-reference
30474 (url "https://github.com/jaseg/python-mpv")
30475 (commit (string-append "v" version))))
30476 (file-name (git-file-name name version))
30477 (sha256
30478 (base32
30479 "10w6j3n62ap45sf6q487kz8z6g58sha37i14fa2hhng794z7a8jh"))
30480 (modules '((guix build utils)))
30481 (snippet
30482 #~(begin
30483 ;; One of the tests never completes, so neutering it using
30484 ;; early return allows other test to run without issue.
30485 (substitute* "tests/test_mpv.py"
30486 ;; Note the typo in "prooperty" - this was fixed later in
30487 ;; upstream but has no effect on whether the tests hangs or not.
30488 (("test_wait_for_prooperty_event_overflow.*" line)
30489 ;; The long whitespace between \n and return is to match the
30490 ;; identation level, which is significant in python.
30491 (string-append line "\n return\n")))))))
30492 (build-system python-build-system)
30493 (arguments
30494 (list #:phases
30495 #~(modify-phases %standard-phases
30496 (add-before 'build 'patch-reference-to-mpv
30497 (lambda* (#:key inputs #:allow-other-keys)
30498 ;; Without an absolute path it is not able find and
30499 ;; load the libmpv library.
30500 (substitute* "mpv.py"
30501 (("sofile = .*")
30502 (string-append "sofile = \""
30503 (search-input-file inputs "/lib/libmpv.so")
30504 "\"\n")))))
30505 (add-before 'check 'prepare-for-tests
30506 (lambda _
30507 ;; Fontconfig throws errors when it has no cache dir to use.
30508 (setenv "XDG_CACHE_HOME" (getcwd))
30509 ;; Some tests fail without a writable and readable HOME.
30510 (setenv "HOME" (getcwd)))))))
30511 (native-inputs
30512 (list python-xvfbwrapper)) ; needed for tests only
30513 (inputs (list mpv))
30514 (propagated-inputs (list python-pillow)) ; for raw screenshots
30515 (home-page "https://github.com/jaseg/python-mpv")
30516 (synopsis "Python interface to the mpv media player")
30517 (description
30518 "python-mpv is a ctypes-based python interface to the mpv media player.
30519 It gives you more or less full control of all features of the player, just
30520 as the lua interface does.")
30521 ;; From the project's README:
30522 ;; python-mpv inherits the underlying libmpv's license, which can be either
30523 ;; GPLv2 or later (default) or LGPLv2.1 or later. For details, see the mpv
30524 ;; copyright page.
30525 (license license:gpl2+)))
30526
30527 (define-public python-biblib
30528 (let ((upstream-version "0.1.0")
30529 (commit "ab0e857b9198fe425ec9b02fcc293b5d9fd0c406")
30530 (revision "1"))
30531 (package
30532 (name "python-biblib")
30533 (version (git-version upstream-version revision commit))
30534 (source
30535 (origin
30536 (method git-fetch)
30537 (uri (git-reference
30538 (url "https://github.com/aclements/biblib")
30539 (commit commit)))
30540 (sha256
30541 (base32 "1ym1gwxys9gl5a7fjs6xh5z9w50pnq4z3rs6fx7kpv78hlrbjlip"))
30542 (file-name (git-file-name name version))))
30543 (build-system python-build-system)
30544 (home-page "https://github.com/aclements/biblib")
30545 (synopsis "BibTeX parsing and transformation library")
30546 (description
30547 "Biblib provides a simple, standalone Python 3 package for parsing
30548 BibTeX bibliographic databases, as well as algorithms for manipulating BibTeX
30549 entries in BibTeX-y ways. Biblib's parser is derived directly from the WEB
30550 source code for BibTeX and hence (barring bugs in translation) should be fully
30551 compatible with BibTeX's own parser.")
30552 ;; N.B. It seems the parser was translated from WEB by hand: this
30553 ;; package does not contain any generated files.
30554 (license license:expat))))
30555
30556 (define-public python-i3ipc
30557 (package
30558 (name "python-i3ipc")
30559 (version "2.2.1")
30560 (source (origin
30561 (method git-fetch)
30562 (uri (git-reference
30563 (url "https://github.com/altdesktop/i3ipc-python")
30564 (commit (string-append "v" version))))
30565 (file-name (git-file-name name version))
30566 (sha256
30567 (base32
30568 "13bzs9dcv27czpnnbgz7a037lm8h991c8gk0qzzk5mq5yak24715"))))
30569 (build-system python-build-system)
30570 (arguments (list #:tests? #f)) ;FIXME: some tests are unable to run
30571 (propagated-inputs (list python-xlib))
30572 (home-page "https://github.com/altdesktop/i3ipc-python")
30573 (synopsis "Python library for controlling i3 and Sway")
30574 (description
30575 "This package provides a Python library for controlling the i3 and Sway
30576 window managers.")
30577 (license license:bsd-3)))
30578
30579 (define-public i3-autotiling
30580 (package
30581 (name "i3-autotiling")
30582 (version "1.6.1")
30583 (source (origin
30584 (method git-fetch)
30585 (uri (git-reference
30586 (url "https://github.com/nwg-piotr/autotiling")
30587 (commit (string-append "v" version))))
30588 (file-name (git-file-name name version))
30589 (sha256
30590 (base32
30591 "1m8k3g83n2n1xws89dh20f3sy6753wvip9dzf6bssv2cz9ll7406"))))
30592 (build-system python-build-system)
30593 (arguments (list #:tests? #f)) ;no tests
30594 (native-inputs (list python-wheel))
30595 (propagated-inputs (list python-i3ipc))
30596 (home-page "https://github.com/nwg-piotr/autotiling")
30597 (synopsis "Automatically tile windows in i3 and Sway")
30598 (description
30599 "Script for Sway and i3 to automatically switch the horizontal/vertical
30600 window split orientation.")
30601 (license license:gpl3)))
30602
30603 (define-public python-cyclic
30604 (package
30605 (name "python-cyclic")
30606 (version "1.0.0")
30607 (source (origin
30608 ;; Use git, as there are some test files missing from the PyPI
30609 ;; release, see https://github.com/neurobin/cyclic/issues/1
30610 (method git-fetch)
30611 (uri (git-reference
30612 (url "https://github.com/neurobin/cyclic")
30613 ;; Release is not tagged on github, see
30614 ;; https://github.com/neurobin/cyclic/issues/2
30615 (commit "bf616c47ea49a43500ea55a1e6f4890323be0679")))
30616 (file-name (git-file-name name version))
30617 (sha256
30618 (base32
30619 "0r8zzjdv70fpxssxps62rlgpii8fr9gh8gykdygqn6mkdnfjwgjc"))))
30620 (build-system python-build-system)
30621 (home-page "https://github.com/neurobin/cyclic")
30622 (synopsis "Handle cyclic relations")
30623 (description "This package handles cyclic relations compared by value.")
30624 (license license:bsd-3)))
30625
30626 (define-public python-rcslice
30627 (package
30628 (name "python-rcslice")
30629 (version "1.1.0")
30630 (source (origin
30631 ;; Use git, as there are some test files missing from the PyPI
30632 ;; release, see https://github.com/neurobin/rcslice/issues/1
30633 (method git-fetch)
30634 (uri (git-reference
30635 (url "https://github.com/neurobin/rcslice")
30636 ;; Releases are not tagged on github, see
30637 ;; https://github.com/neurobin/rcslice/issues/2
30638 (commit "1e1ef42cd262db76b67ded430630d5b499790f42")))
30639 (file-name (git-file-name name version))
30640 (sha256
30641 (base32
30642 "1lmhcgghh60kvdlx0cin1phhgfy9jivc6l0mb4ibnpa1x1md0zvv"))))
30643 (build-system python-build-system)
30644 (home-page "https://github.com/neurobin/rcslice")
30645 (synopsis "Slice a list of sliceables")
30646 (description "This package provides Python module to slice a list of
30647 sliceables (1 indexed, both start and end index are inclusive). Helps to
30648 slice file content line by line or column by column or a combination of
30649 both.")
30650 (license license:bsd-3)))
30651
30652 (define-public python-types-orjson
30653 (package
30654 (name "python-types-orjson")
30655 (version "3.6.2")
30656 (source (origin
30657 (method url-fetch)
30658 (uri (pypi-uri "types-orjson" version))
30659 (sha256
30660 (base32
30661 "0f66lf2qrl9d4vad42db3dmnzv89h4rr05r5zxx5qcl6kb3zr6ng"))))
30662 (build-system python-build-system)
30663 (home-page "https://github.com/python/typeshed")
30664 (synopsis "Typing stubs for orjson")
30665 (description "This is a PEP 561 type stub package for the @code{orjson}
30666 package. It can be used by type-checking tools like mypy, PyCharm, pytype
30667 etc. to check code that uses @code{orjson}.")
30668 (license license:asl2.0)))
30669
30670 (define-public python-nanoid
30671 ;; There are no tests on PyPi.
30672 (let ((commit "061f9a598f310b0e2e91b9ed6ce725a22770da64")
30673 (revision "0"))
30674 (package
30675 (name "python-nanoid")
30676 (version "2.0.0")
30677 (source
30678 (origin
30679 (method git-fetch)
30680 (uri
30681 (git-reference
30682 (url "https://github.com/puyuan/py-nanoid")
30683 (commit commit)))
30684 (file-name (git-file-name name commit))
30685 (sha256
30686 (base32 "0y1bcw0h27g8rkqq7cp33ywn0i0lp0q3rjixzkh4191y1dp9yf8s"))))
30687 (build-system python-build-system)
30688 (native-inputs (list python-pytest))
30689 (arguments
30690 '(#:phases
30691 (modify-phases %standard-phases
30692 (replace 'check
30693 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
30694 (when tests?
30695 (invoke "pytest")))))))
30696 (home-page "https://github.com/puyuan/py-nanoid")
30697 (synopsis "Unique string ID generator")
30698 (description
30699 "This package provides a tiny, secure, URL-friendly, unique string ID
30700 generator for Python.")
30701 (license license:expat))))
30702
30703 (define-public python-misskey
30704 (package
30705 (name "python-misskey")
30706 (version "4.1.0")
30707 (source (origin
30708 (method git-fetch)
30709 (uri (git-reference
30710 (url "https://github.com/YuzuRyo61/Misskey.py")
30711 (commit (string-append "v" version))))
30712 (file-name (git-file-name name version))
30713 (sha256
30714 (base32
30715 "0rma8pdsjsy00cg76q6q4qki4xpldykmz1m6dl3w2bjjxfhlbaz5"))))
30716 (build-system python-build-system)
30717 (arguments (list #:tests? #f)) ;needs network
30718 (propagated-inputs (list python-requests))
30719 (home-page "https://misskeypy.readthedocs.io")
30720 (synopsis "Python bindings for Misskey's API")
30721 (description
30722 "This package provides access to Misskey's API. Misskey is a SNS
30723 platform using the ActivityPub protocol.")
30724 (license license:expat)))
30725
30726 (define-public python-lief
30727 (package
30728 (name "python-lief")
30729 (version "0.12.1")
30730 (source (origin
30731 (method git-fetch)
30732 (uri (git-reference
30733 (url "https://github.com/lief-project/LIEF")
30734 (commit version)))
30735 (file-name (git-file-name name version))
30736 (sha256
30737 (base32
30738 "1xzbh3bxy4rw1yamnx68da1v5s56ay4g081cyamv67256g0qy2i1"))))
30739 (build-system python-build-system)
30740 (native-inputs (list cmake))
30741 (arguments
30742 (list
30743 #:tests? #f ;needs network
30744 #:phases #~(modify-phases %standard-phases
30745 (replace 'build
30746 (lambda _
30747 (invoke
30748 "python" "setup.py" "--sdk" "build"
30749 (string-append
30750 "-j" (number->string (parallel-job-count)))))))))
30751 (home-page "https://github.com/lief-project/LIEF")
30752 (synopsis "Library to instrument executable formats")
30753 (description
30754 "@code{python-lief} is a cross platform library which can parse, modify
30755 and abstract ELF, PE and MachO formats.")
30756 (license license:asl2.0)))
30757
30758 (define-public python-pymonad
30759 (package
30760 (name "python-pymonad")
30761 (version "2.4.0")
30762 ;; The tests are incomplete in the PyPI archive.
30763 (source (origin
30764 (method git-fetch)
30765 (uri (git-reference
30766 (url "https://github.com/jasondelaat/pymonad")
30767 (commit (string-append "v" version))))
30768 (file-name (git-file-name name version))
30769 (sha256
30770 (base32
30771 "0ci1mpydldiyg9qv6d19ljhfh7wxlrl2k4mlvqd9bm7dqvpdjsx7"))))
30772 (build-system python-build-system)
30773 (arguments
30774 `(#:phases
30775 (modify-phases %standard-phases
30776 (replace 'check
30777 (lambda* (#:key tests? #:allow-other-keys)
30778 (when tests?
30779 (invoke "./run_tests.sh")))))))
30780 (home-page "https://github.com/jasondelaat/pymonad")
30781 (synopsis "Monadic style functional programming for Python")
30782 (description "@code{python-pymonad} implements data structures typically
30783 available in purely functional or functional first programming languages such
30784 as Haskell and F#. Included are
30785
30786 @itemize
30787 @item Monad and Monoid data types with several common monads such as Maybe and
30788 State
30789 @item Useful tools such as the @code{@@curry} decorator for defining curried
30790 functions
30791 @item Type annotations to help ensure correct usage
30792 @end itemize")
30793 (license license:bsd-3)))