gnu: python-cython: Update to 0.29.22.
[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, 2014, 2015, 2016, 2017, 2018, 2019, 2020 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 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 Ricardo Wurmus <rekado@elephly.net>
11 ;;; Copyright © 2015, 2016, 2020 Christopher Allan 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 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 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 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, 2017, 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
30 ;;; Copyright © 2016, 2017, 2021 Stefan Reichör <stefan@xsteve.at>
31 ;;; Copyright © 2016, 2017, 2019 Alex Vong <alexvong1995@gmail.com>
32 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
33 ;;; Copyright © 2016, 2017, 2018, 2020, 2021 Julien Lepiller <julien@lepiller.eu>
34 ;;; Copyright © 2016–2021 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 Mathieu Othacehe <m.othacehe@gmail.com>
41 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
42 ;;; Copyright © 2017, 2020 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 Muriithi Frederick Muriuki <fredmanglis@gmail.com>
46 ;;; Copyright © 2017, 2019, 2021 Brendan Tildesley <mail@brendan.scot>
47 ;;; Copyright © 2018 Ethan R. Jones <ethanrjones97@gmail.com
48 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
49 ;;; Copyright © 2018 Vijayalakshmi Vedantham <vijimay12@gmail.com>
50 ;;; Copyright © 2018 Mathieu Lirzin <mthl@gnu.org>
51 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
52 ;;; Copyright © 2016, 2018 Tomáš Čech <sleep_walker@gnu.org>
53 ;;; Copyright © 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
54 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
55 ;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org>
56 ;;; Copyright © 2018, 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
57 ;;; Copyright © 2018 Luther Thompson <lutheroto@gmail.com>
58 ;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
59 ;;; Copyright © 2015, 2018 Pjotr Prins <pjotr.guix@thebird.nl>
60 ;;; Copyright © 2019, 2020 Brett Gilio <brettg@gnu.org>
61 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
62 ;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
63 ;;; Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
64 ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
65 ;;; Copyright © 2019, 2020 Pierre Langlois <pierre.langlois@gmx.com>
66 ;;; Copyright © 2019 Jacob MacDonald <jaccarmac@gmail.com>
67 ;;; Copyright © 2019, 2020 Giacomo Leidi <goodoldpaul@autistici.org>
68 ;;; Copyright © 2019 Wiktor Żelazny <wzelazny@vurv.cz>
69 ;;; Copyright © 2019, 2020 Tanguy Le Carrour <tanguy@bioneland.org>
70 ;;; Copyright © 2019 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
71 ;;; Copyright © 2020 Riku Viitanen <riku.viitanen@protonmail.com>
72 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
73 ;;; Copyright © 2020 sirgazil <sirgazil@zoho.com>
74 ;;; Copyright © 2020 Sebastian Schott <sschott@mailbox.org>
75 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
76 ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com>
77 ;;; Copyright © 2020, 2021 Alexandros Theodotou <alex@zrythm.org>
78 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
79 ;;; Copyright © 2020 Alex ter Weele <alex.ter.weele@gmail.com>
80 ;;; Copyright © 2020 Matthew Kraai <kraai@ftbfs.org>
81 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
82 ;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw>
83 ;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
84 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
85 ;;; Copyright © 2020, 2021 Vinicius Monego <monego@posteo.net>
86 ;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org>
87 ;;; Copyright © 2020 Hendursaga <hendursaga@yahoo.com>
88 ;;; Copyright © 2020 Malte Frank Gerdes <malte.f.gerdes@gmail.com>
89 ;;; Copyright © 2020 Joseph LaFreniere <joseph@lafreniere.xyz>
90 ;;; Copyright © 2020 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
91 ;;; Copyright © 2020 Bonface Munyoki Kilyungi <bonfacemunyoki@gmail.com>
92 ;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
93 ;;; Copyright © 2020 Diego N. Barbato <dnbarbato@posteo.de>
94 ;;; Copyright © 2020 Leo Prikler <leo.prikler@student.tugraz.at>
95 ;;; Copyright © 2019 Kristian Trandem <kristian@devup.no>
96 ;;; Copyright © 2020, 2021 Zheng Junjie <873216071@qq.com>
97 ;;; Copyright © 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
98 ;;; Copyright © 2020 EuAndreh <eu@euandre.org>
99 ;;; Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
100 ;;; Copyright © 2021 Ellis Kenyő <me@elken.dev>
101 ;;; Copyright © 2021 LibreMiami <packaging-guix@libremiami.org>
102 ;;;
103 ;;; This file is part of GNU Guix.
104 ;;;
105 ;;; GNU Guix is free software; you can redistribute it and/or modify it
106 ;;; under the terms of the GNU General Public License as published by
107 ;;; the Free Software Foundation; either version 3 of the License, or (at
108 ;;; your option) any later version.
109 ;;;
110 ;;; GNU Guix is distributed in the hope that it will be useful, but
111 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
112 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
113 ;;; GNU General Public License for more details.
114 ;;;
115 ;;; You should have received a copy of the GNU General Public License
116 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
117
118 (define-module (gnu packages python-xyz)
119 #:use-module ((guix licenses) #:prefix license:)
120 #:use-module (gnu packages)
121 #:use-module (gnu packages algebra)
122 #:use-module (gnu packages adns)
123 #:use-module (gnu packages aidc)
124 #:use-module (gnu packages attr)
125 #:use-module (gnu packages backup)
126 #:use-module (gnu packages bash)
127 #:use-module (gnu packages check)
128 #:use-module (gnu packages cmake)
129 #:use-module (gnu packages compression)
130 #:use-module (gnu packages crypto)
131 #:use-module (gnu packages databases)
132 #:use-module (gnu packages dbm)
133 #:use-module (gnu packages djvu)
134 #:use-module (gnu packages docker)
135 #:use-module (gnu packages enchant)
136 #:use-module (gnu packages file)
137 #:use-module (gnu packages fontutils)
138 #:use-module (gnu packages gcc)
139 #:use-module (gnu packages geo)
140 #:use-module (gnu packages ghostscript)
141 #:use-module (gnu packages gl)
142 #:use-module (gnu packages glib)
143 #:use-module (gnu packages gnome)
144 #:use-module (gnu packages gnupg)
145 #:use-module (gnu packages graphviz)
146 #:use-module (gnu packages graphics)
147 #:use-module (gnu packages gsasl)
148 #:use-module (gnu packages gstreamer)
149 #:use-module (gnu packages gtk)
150 #:use-module (gnu packages haskell-xyz)
151 #:use-module (gnu packages icu4c)
152 #:use-module (gnu packages image)
153 #:use-module (gnu packages imagemagick)
154 #:use-module (gnu packages kerberos)
155 #:use-module (gnu packages libevent)
156 #:use-module (gnu packages libffi)
157 #:use-module (gnu packages libidn)
158 #:use-module (gnu packages linux)
159 #:use-module (gnu packages llvm)
160 #:use-module (gnu packages man)
161 #:use-module (gnu packages markup)
162 #:use-module (gnu packages maths)
163 #:use-module (gnu packages monitoring)
164 #:use-module (gnu packages multiprecision)
165 #:use-module (gnu packages networking)
166 #:use-module (gnu packages ncurses)
167 #:use-module (gnu packages openstack)
168 #:use-module (gnu packages pcre)
169 #:use-module (gnu packages pdf)
170 #:use-module (gnu packages perl)
171 #:use-module (gnu packages photo)
172 #:use-module (gnu packages pkg-config)
173 #:use-module (gnu packages python)
174 #:use-module (gnu packages python-build)
175 #:use-module (gnu packages python-check)
176 #:use-module (gnu packages python-compression)
177 #:use-module (gnu packages python-crypto)
178 #:use-module (gnu packages python-science)
179 #:use-module (gnu packages python-web)
180 #:use-module (gnu packages qt)
181 #:use-module (gnu packages rdf)
182 #:use-module (gnu packages readline)
183 #:use-module (gnu packages sdl)
184 #:use-module (gnu packages search)
185 #:use-module (gnu packages scanner)
186 #:use-module (gnu packages shells)
187 #:use-module (gnu packages sphinx)
188 #:use-module (gnu packages ssh)
189 #:use-module (gnu packages swig)
190 #:use-module (gnu packages terminals)
191 #:use-module (gnu packages tex)
192 #:use-module (gnu packages texinfo)
193 #:use-module (gnu packages textutils)
194 #:use-module (gnu packages time)
195 #:use-module (gnu packages tls)
196 #:use-module (gnu packages version-control)
197 #:use-module (gnu packages video)
198 #:use-module (gnu packages web)
199 #:use-module (gnu packages wxwidgets)
200 #:use-module (gnu packages base)
201 #:use-module (gnu packages xml)
202 #:use-module (gnu packages xorg)
203 #:use-module (gnu packages xdisorg)
204 #:use-module (gnu packages tcl)
205 #:use-module (gnu packages bdw-gc)
206 #:use-module (gnu packages serialization)
207 #:use-module (guix packages)
208 #:use-module (guix download)
209 #:use-module (guix git-download)
210 #:use-module (guix hg-download)
211 #:use-module (guix utils)
212 #:use-module (guix build-system gnu)
213 #:use-module (guix build-system cmake)
214 #:use-module (guix build-system python)
215 #:use-module (guix build-system trivial)
216 #:use-module (srfi srfi-1)
217 #:use-module (srfi srfi-26))
218
219 (define-public python-slixmpp
220 (package
221 (name "python-slixmpp")
222 (version "1.5.2")
223 (source
224 (origin
225 (method git-fetch)
226 (uri
227 (git-reference
228 (url "https://lab.louiz.org/poezio/slixmpp.git")
229 (commit
230 (string-append "slix-" version))))
231 (file-name
232 (git-file-name name version))
233 (sha256
234 (base32 "15mqxcws14bjvh5jcfwl86zsvrymkdw3ya07vb44md7vfnsnclwx"))))
235 (build-system python-build-system)
236 (arguments
237 `(#:phases
238 (modify-phases %standard-phases
239 (add-after 'unpack 'patch
240 (lambda _
241 (substitute* "setup.py"
242 (("'CC', 'cc'")
243 "'CC', 'gcc'"))
244 #t)))))
245 (native-inputs
246 `(("cython" ,python-cython)
247 ("gnupg" ,gnupg)
248 ("pkg-config" ,pkg-config)))
249 (propagated-inputs
250 `(("python-aiodns" ,python-aiodns)
251 ("python-aiohttp" ,python-aiohttp)
252 ("python-pyasn1" ,python-pyasn1)
253 ("python-pyasn1-modules" ,python-pyasn1-modules)))
254 (inputs
255 `(("libidn" ,libidn)
256 ("python" ,python))) ; We are building a Python extension.
257 (synopsis "XMPP library without threads")
258 (description "Slixmpp is a XMPP library for Python 3.7+. It is a fork of
259 SleekXMPP. Its goal is to only rewrite the core of the library (the low level
260 socket handling, the timers, the events dispatching) in order to remove all
261 threads.")
262 (home-page "https://lab.louiz.org/poezio/slixmpp")
263 (license license:expat)))
264
265 (define-public python-tenacity
266 (package
267 (name "python-tenacity")
268 (version "6.1.0")
269 (source (origin
270 (method url-fetch)
271 (uri (pypi-uri "tenacity" version))
272 (sha256
273 (base32
274 "1j36v9fcpmmd4985ix0cwnvcq71rkrn5cjiiv0id9vkl4kpxh0gv"))))
275 (build-system python-build-system)
276 (native-inputs
277 `(("python-setuptools-scm" ,python-setuptools-scm)
278 ("python-sphinx" ,python-sphinx)
279 ("python-tornado" ,python-tornado)
280 ("python-pytest" ,python-pytest)))
281 (propagated-inputs
282 `(("python-six" ,python-six)))
283 (arguments
284 `(#:phases (modify-phases %standard-phases
285 (replace 'check
286 (lambda _
287 (invoke "pytest")
288 #t)))))
289 (home-page "https://github.com/jd/tenacity")
290 (synopsis "Retrying library for python")
291 (description "Tenacity is a general-purpose python library to simplify the
292 task of adding retry behavior to just about anything.")
293 (license license:asl2.0)))
294
295 (define-public python-pytelegrambotapi
296 (package
297 (name "python-pytelegrambotapi")
298 (version "3.7.4")
299 (source
300 (origin
301 (method git-fetch)
302 (uri (git-reference
303 (url "https://github.com/eternnoir/pyTelegramBotAPI")
304 (commit version)))
305 (file-name (git-file-name name version))
306 (sha256
307 (base32 "0r7g5zs0fk3g2dxvbpl0pi730x7r2kalrhn30fs0pvc15a59fmxz"))))
308 (build-system python-build-system)
309 (arguments
310 `(#:phases
311 (modify-phases %standard-phases
312 (replace 'check
313 (lambda* (#:key tests? #:allow-other-keys)
314 (when tests?
315 (with-directory-excursion "tests"
316 (invoke "py.test")))
317 #t)))))
318 (propagated-inputs
319 `(("python-requests" ,python-requests)))
320 (native-inputs
321 `(("python-pytest" ,python-pytest)))
322 (home-page "https://github.com/eternnoir/pyTelegramBotAPI")
323 (synopsis "Python Telegram bot api")
324 (description "This package provides a simple, but extensible Python
325 implementation for the Telegram Bot API.")
326 (license license:gpl2)))
327
328 (define-public python-colorlog
329 (package
330 (name "python-colorlog")
331 (version "4.1.0")
332 (source (origin
333 (method url-fetch)
334 (uri (pypi-uri "colorlog" version))
335 (sha256
336 (base32
337 "1lpk8zmfv8vz090h5d0hzb4n39wgasxdd3x3bpn3v1x1n9dfzaih"))))
338 (build-system python-build-system)
339 (native-inputs
340 `(("python-pytest" ,python-pytest)))
341 (arguments
342 `(#:phases (modify-phases %standard-phases
343 (replace 'check
344 (lambda _
345 ;; Extend PYTHONPATH so the built package will be found.
346 (setenv "PYTHONPATH"
347 (string-append (getcwd) "/build/lib:"
348 (getenv "PYTHONPATH")))
349 (invoke "pytest" "-p" "no:logging")
350 #t)))))
351 (home-page "https://github.com/borntyping/python-colorlog")
352 (synopsis "Log formatting with colors for python")
353 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
354 with Python's logging module that outputs records using terminal colors.")
355 (license license:expat)))
356
357 (define-public python-pyprind
358 (package
359 (name "python-pyprind")
360 (version "2.11.2")
361 (source (origin
362 (method url-fetch)
363 (uri (pypi-uri "PyPrind" version))
364 (sha256
365 (base32
366 "0xg6m5hr33h9bdlrr42kc58jm2m87a9zsagy7n2m4n407d2snv64"))))
367 (build-system python-build-system)
368 (propagated-inputs
369 `(("python-psutil" ,python-psutil)))
370 (home-page "https://github.com/rasbt/pyprind")
371 (synopsis "Python Progress Bar and Percent Indicator Utility")
372 (description "The PyPrind (Python Progress Indicator) module provides a
373 progress bar and a percentage indicator object that let you track the progress
374 of a loop structure or other iterative computation.")
375 (license license:bsd-3)))
376
377 (define-public python-gphoto2
378 (package
379 (name "python-gphoto2")
380 (version "2.2.1")
381 (source (origin
382 (method url-fetch)
383 (uri (pypi-uri "gphoto2" version))
384 (sha256
385 (base32
386 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
387 (build-system python-build-system)
388 (native-inputs
389 `(("pkg-config" ,pkg-config)))
390 (inputs
391 `(("libgphoto2" ,libgphoto2)))
392 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
393 (synopsis "Python interface to libgphoto2")
394 (description "@code{python-gphoto2} is a comprehensive Python interface
395 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
396 automatically generate the interface code.")
397 (license license:gpl3+)))
398
399 (define-public python-colour
400 (package
401 (name "python-colour")
402 (version "0.1.5")
403 (source (origin
404 (method url-fetch)
405 (uri (pypi-uri "colour" version))
406 (sha256
407 (base32
408 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
409 (build-system python-build-system)
410 (native-inputs
411 `(("python-d2to1" ,python-d2to1)))
412 (home-page "https://github.com/vaab/colour")
413 (synopsis "Convert and manipulate various color representations")
414 (description "Pythonic way to manipulate color representations (HSL, RVB,
415 web, X11, ...).")
416 (license license:expat)))
417
418 (define-public python-d2to1
419 (package
420 (name "python-d2to1")
421 (version "0.2.12.post1")
422 (source (origin
423 (method url-fetch)
424 (uri (pypi-uri "d2to1" version))
425 (sha256
426 (base32
427 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
428 (build-system python-build-system)
429 (native-inputs
430 `(("python-nose" ,python-nose)))
431 (home-page "https://github.com/embray/d2to1")
432 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
433 in python")
434 (description "The python package d2to1 (the d is for distutils) allows
435 using distutils2-like setup.cfg files for a package's metadata with a
436 distribute/setuptools setup.py script.")
437 (license license:bsd-2)))
438
439 (define-public python-rawkit
440 (package
441 (name "python-rawkit")
442 (version "0.6.0")
443 (source (origin
444 (method url-fetch)
445 (uri (pypi-uri "rawkit" version))
446 (sha256
447 (base32
448 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
449 (build-system python-build-system)
450 (native-inputs
451 `(("python-pytest" ,python-pytest)
452 ("python-mock" ,python-mock)))
453 (inputs
454 `(("libraw" ,libraw)))
455 (home-page "https://rawkit.readthedocs.io")
456 (synopsis "Ctypes-based LibRaw binding for Python")
457 (description "The rawkit package provides two modules: rawkit and libraw.
458 The rawkit module provides a high-level Pythonic interface for developing raw
459 photos, while the libraw module provides a CTypes based interface for
460 interacting with the low-level LibRaw C APIs.")
461 (license license:expat)))
462
463 (define-public python-easygui
464 (package
465 (name "python-easygui")
466 (version "0.98.1")
467 (source (origin
468 (method url-fetch)
469 (uri (pypi-uri "easygui" version))
470 (sha256
471 (base32
472 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
473 (build-system python-build-system)
474 (propagated-inputs
475 `(("python-tkinter" ,python "tk")))
476 (home-page "https://github.com/robertlugg/easygui")
477 (synopsis "GUI programming module for Python")
478 (description "EasyGUI is a module for very simple, very easy GUI
479 programming in Python. EasyGUI is different from other GUI generators in that
480 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
481 simple function calls.")
482 (license license:bsd-3)))
483
484 (define-public python-pymd4c
485 (package
486 (name "python-pymd4c")
487 (version "0.4.6.0b1")
488 (source
489 (origin
490 (method url-fetch)
491 (uri (pypi-uri "pymd4c" version))
492 (sha256
493 (base32 "07s3arn85ri92im6x3ipljdmrxmpik7irs06i6lm17j1x6j9841d"))))
494 (build-system python-build-system)
495 (inputs
496 `(("md4c" ,md4c)))
497 (native-inputs
498 `(("python-flake8" ,python-flake8)
499 ("python-pkgconfig" ,python-pkgconfig)
500 ("pkg-config" ,pkg-config)))
501 (home-page "https://github.com/dominickpastore/pymd4c")
502 (synopsis "Python bindings for MD4C")
503 (description
504 "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
505 to CommonMark.")
506 (license license:expat)))
507
508 (define-public python-pymediainfo
509 (package
510 (name "python-pymediainfo")
511 (version "4.1")
512 (source
513 (origin
514 (method url-fetch)
515 (uri (pypi-uri "pymediainfo" version))
516 (sha256
517 (base32
518 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
519 (build-system python-build-system)
520 (native-inputs
521 `(("python-setuptools-scm" ,python-setuptools-scm)
522 ("python-pytest" ,python-pytest)))
523 (inputs
524 `(("libmediainfo" ,libmediainfo)))
525 (arguments
526 `(#:phases
527 (modify-phases %standard-phases
528 (add-after 'unpack 'patch-libmediainfo
529 (lambda _
530 (substitute* "pymediainfo/__init__.py"
531 (("libmediainfo.so.0")
532 (string-append (assoc-ref %build-inputs "libmediainfo")
533 "/lib/libmediainfo.so.0")))
534 #t))
535 (replace 'check
536 (lambda _
537 ;; Extend PYTHONPATH so the built package will be found.
538 (setenv "PYTHONPATH"
539 (string-append (getcwd) "/build/lib:"
540 (getenv "PYTHONPATH")))
541 ;; Skip the only failing test "test_parse_url"
542 (invoke "pytest" "-vv" "-k" "not test_parse_url")
543 #t)))))
544 (home-page
545 "https://github.com/sbraz/pymediainfo")
546 (synopsis
547 "Python wrapper for the mediainfo library")
548 (description
549 "Python wrapper for the mediainfo library to access the technical and tag
550 data for video and audio files.")
551 (license license:expat)))
552
553 (define-public python-psutil
554 (package
555 (name "python-psutil")
556 (version "5.8.0")
557 (source
558 (origin
559 (method url-fetch)
560 (uri (pypi-uri "psutil" version))
561 (sha256
562 (base32 "1immnj532bnnrh1qmk5q3lsw3san8qfk9kxy1cpmy0knmfcwp70c"))))
563 (build-system python-build-system)
564 (arguments
565 ;; FIXME: some tests do not return and time out. Some tests fail because
566 ;; some processes survive kill().
567 '(#:tests? #f))
568 (home-page "https://github.com/giampaolo/psutil")
569 (synopsis "Library for retrieving information on running processes")
570 (description
571 "@code{psutil} (Python system and process utilities) is a library for
572 retrieving information on running processes and system utilization (CPU,
573 memory, disks, network) in Python. It is useful mainly for system monitoring,
574 profiling and limiting process resources and management of running processes.
575 It implements many functionalities offered by command line tools such as: ps,
576 top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat,
577 iotop, uptime, pidof, tty, taskset, pmap.")
578 (properties `((python2-variant . ,(delay python2-psutil))))
579 (license license:bsd-3)))
580
581 (define-public python2-psutil
582 (let ((base (package-with-python2 (strip-python2-variant python-psutil))))
583 (package/inherit base
584 (propagated-inputs
585 `(("python2-enum34" ,python2-enum34) ;optional
586 ,@(package-propagated-inputs base))))))
587
588 (define-public python-shapely
589 (package
590 (name "python-shapely")
591 (version "1.7.1")
592 (source
593 (origin
594 (method url-fetch)
595 (uri (pypi-uri "Shapely" version))
596 (sha256
597 (base32
598 "0adiz4jwmwxk7k1awqifb1a9bj5x4nx4gglb5dz9liam21674h8n"))
599 (modules '((guix build utils)))
600 (snippet
601 '(begin
602 (delete-file "shapely/speedups/_speedups.c")
603 (delete-file "shapely/vectorized/_vectorized.c")
604 #t))))
605 (build-system python-build-system)
606 (native-inputs
607 `(("python-cython" ,python-cython)
608 ("python-matplotlib" ,python-matplotlib)
609 ("python-pytest" ,python-pytest)
610 ("python-pytest-cov" ,python-pytest-cov)))
611 (inputs
612 `(("geos" ,geos)))
613 (propagated-inputs
614 `(("python-numpy" ,python-numpy)))
615 (arguments
616 `(#:phases
617 (modify-phases %standard-phases
618 (add-after 'unpack 'patch-geos-path
619 (lambda* (#:key inputs #:allow-other-keys)
620 (let ((geos (assoc-ref inputs "geos"))
621 (glibc (assoc-ref inputs ,(if (%current-target-system)
622 "cross-libc" "libc"))))
623 (substitute* '("shapely/geos.py" "shapely/_buildcfg.py")
624 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
625 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
626 geos "/lib/libgeos_c.so'])"))
627 (("free = load_dll\\('c'\\)\\.free")
628 (string-append "free = load_dll('c', fallbacks=['"
629 glibc "/lib/libc.so.6']).free"))
630 (("free = load_dll\\('c', fallbacks=.*\\)\\.free")
631 (string-append "free = load_dll('c', fallbacks=['"
632 glibc "/lib/libc.so.6']).free"))))
633 #t)))))
634 (home-page "https://github.com/Toblerity/Shapely")
635 (synopsis "Library for the manipulation and analysis of geometric objects")
636 (description "Shapely is a Python package for manipulation and analysis of
637 planar geometric objects. It is based on the @code{GEOS} library.")
638 (license license:bsd-3)))
639
640 (define-public python-shortuuid
641 (package
642 (name "python-shortuuid")
643 (version "0.5.0")
644 (source
645 (origin
646 (method url-fetch)
647 (uri (pypi-uri "shortuuid" version))
648 (sha256
649 (base32
650 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
651 (build-system python-build-system)
652 (native-inputs
653 `(("python-pep8" ,python-pep8)))
654 (home-page "https://github.com/skorokithakis/shortuuid")
655 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
656 (description
657 "@code{shortuuid} is a Python library for generating concise, unambiguous
658 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
659 module and then similar looking characters are removed.")
660 (license license:bsd-3)))
661
662 (define-public python-logwrap
663 (package
664 (name "python-logwrap")
665 (version "8.2.0.post0")
666 (source
667 (origin
668 (method url-fetch)
669 (uri (pypi-uri "logwrap" version))
670 (sha256
671 (base32
672 "1dv7gny3rfci5cal2ipr6d0pcz3yhka7af96dfsd3ir1mxy8p1j9"))))
673 (build-system python-build-system)
674 (arguments
675 `(#:tests? #f ; Tests not included in pypi release.
676 #:phases
677 (modify-phases %standard-phases
678 (replace 'check
679 (lambda* (#:key tests? #:allow-other-keys)
680 (when tests?
681 (invoke "pytest"))
682 #t)))))
683 (native-inputs
684 `(("python-cython" ,python-cython)
685 ("python-pytest" ,python-pytest)
686 ("python-setuptools-scm" ,python-setuptools-scm)
687 ("python-toml" ,python-toml)
688 ("python-wheel" ,python-wheel)))
689 (home-page "https://github.com/python-useful-helpers/logwrap")
690 (synopsis "Decorator for logging function arguments")
691 (description "This package provides a decorator to log function arguments
692 and function call return values in a human-readable way.")
693 (license license:asl2.0)))
694
695 (define-public python2-shapely
696 (package-with-python2 python-shapely))
697
698 (define-public python-clyent
699 (package
700 (name "python-clyent")
701 (version "1.2.1")
702 (source
703 (origin
704 (method url-fetch)
705 (uri (pypi-uri "clyent" version))
706 (sha256
707 (base32
708 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
709 (build-system python-build-system)
710 (native-inputs
711 `(("python-mock" ,python-mock)))
712 (home-page "https://github.com/Anaconda-Platform/clyent")
713 (synopsis "Command line client library")
714 (description "Clyent is a Python command line utility library. It is used
715 by @code{binstar}, @code{binstar-build}, and @code{chalmers}.")
716 (license license:bsd-3)))
717
718 (define-public python2-clyent
719 (package-with-python2 python-clyent))
720
721 (define-public python-babel
722 (package
723 (name "python-babel")
724 (version "2.9.0")
725 (source
726 (origin
727 (method url-fetch)
728 (uri (pypi-uri "Babel" version))
729 (sha256
730 (base32
731 "018yg7g2pa6vjixx1nx41cfispgfi0azzp0a1chlycbj8jsil0ys"))))
732 (build-system python-build-system)
733 (native-inputs
734 `(("python-freezegun" ,python-freezegun)
735 ("python-pytest" ,python-pytest)))
736 (propagated-inputs
737 `(("python-pytz" ,python-pytz)))
738 (arguments
739 `(#:phases (modify-phases %standard-phases
740 (replace 'check
741 (lambda _
742 (invoke "pytest" "-vv"))))))
743 (home-page "http://babel.pocoo.org/")
744 (synopsis
745 "Tools for internationalizing Python applications")
746 (description
747 "Babel is composed of two major parts:
748 - tools to build and work with gettext message catalogs
749 - a Python interface to the CLDR (Common Locale Data Repository), providing
750 access to various locale display names, localized number and date formatting,
751 etc. ")
752 (license license:bsd-3)))
753
754 (define-public python2-babel
755 (package-with-python2 python-babel))
756
757 (define-public python2-backport-ssl-match-hostname
758 (package
759 (name "python2-backport-ssl-match-hostname")
760 (version "3.5.0.1")
761 (source
762 (origin
763 (method url-fetch)
764 (uri (pypi-uri "backports.ssl_match_hostname" version))
765 (sha256
766 (base32
767 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
768 (build-system python-build-system)
769 (arguments
770 `(#:python ,python-2
771 #:tests? #f)) ; no test target
772 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
773 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
774 (description
775 "This backport brings the ssl.match_hostname() function to users of
776 earlier versions of Python. The function checks the hostname in the
777 certificate returned by the server to which a connection has been established,
778 and verifies that it matches the intended target hostname.")
779 (license license:psfl)))
780
781 (define-public python-bidict
782 (package
783 (name "python-bidict")
784 (version "0.21.2")
785 (source
786 (origin
787 (method url-fetch)
788 (uri (pypi-uri "bidict" version))
789 (sha256
790 (base32
791 "02dy0b1k7qlhn7ajyzkrvxhyhjj0hzcq6ws3zjml9hkdz5znz92g"))))
792 (build-system python-build-system)
793 (native-inputs
794 `(("python-coverage" ,python-coverage)
795 ("python-hypothesis" ,python-hypothesis-5.23) ; use_true_random=... from >=5.19.0
796 ("python-pre-commit" ,python-pre-commit)
797 ("python-py" ,python-py)
798 ("python-pytest" ,python-pytest)
799 ("python-pytest-benchmark" ,python-pytest-benchmark)
800 ("python-pytest-cov" ,python-pytest-cov)
801 ("python-setuptools-scm" ,python-setuptools-scm)
802 ("python-sortedcollections" ,python-sortedcollections)
803 ("python-sortedcontainers" ,python-sortedcontainers)
804 ("python-sphinx" ,python-sphinx)
805 ("python-sphinx-autodoc-typehints" ,python-sphinx-autodoc-typehints)
806 ("python-tox" ,python-tox)))
807 (arguments
808 `(#:phases (modify-phases %standard-phases
809 (add-after 'unpack 'relax-reqs
810 (lambda _
811 (substitute* "setup.py"
812 (("sortedcollections < 2") "sortedcollections"))
813 #t))
814 (replace 'check
815 (lambda _ (invoke "./run_tests.py"))))))
816 (home-page "https://bidict.readthedocs.io")
817 (synopsis "Bidirectional mapping library")
818 (description "The @code{bidict} library provides several data structures
819 for working with bidirectional mappings in Python.")
820 (license license:mpl2.0)))
821
822 (define-public python-bitarray
823 (package
824 (name "python-bitarray")
825 (version "1.4.0")
826 (source (origin
827 (method url-fetch)
828 (uri (pypi-uri "bitarray" version))
829 (sha256
830 (base32
831 "177fj6wbw5jln54wpp6plcqy2329wjkwqwvgz7022rrg3xfrq49g"))))
832 (build-system python-build-system)
833 (home-page "https://github.com/ilanschnell/bitarray")
834 (synopsis "Efficient arrays of booleans")
835 (description "This package provides an object type which efficiently
836 represents an array of booleans. Bitarrays are sequence types and behave very
837 much like usual lists. Eight bits are represented by one byte in a contiguous
838 block of memory. The user can select between two representations:
839 little-endian and big-endian. All of the functionality is implemented in C.
840 Methods for accessing the machine representation are provided. This can be
841 useful when bit level access to binary files is required, such as portable
842 bitmap image files. Also, when dealing with compressed data which uses
843 variable bit length encoding, you may find this module useful.")
844 (license license:psfl)))
845
846 (define-public python-boolean.py
847 (package
848 (name "python-boolean.py")
849 (version "3.6")
850 (source
851 (origin
852 ;; There's no source tarball on PyPI.
853 (method git-fetch)
854 (uri (git-reference
855 (url "https://github.com/bastikr/boolean.py")
856 (commit (string-append "v" version))))
857 (file-name (git-file-name name version))
858 (sha256
859 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
860 (build-system python-build-system)
861 (home-page "https://github.com/bastikr/boolean.py")
862 (synopsis "Boolean algebra in one Python module")
863 (description
864 "This is a small Python library that implements boolean algebra.
865 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
866 @code{Symbol} class that can take on one of these two values. Calculations
867 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
868 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
869 Expressions are constructed from parsed strings or directly in Python.")
870 (license license:bsd-2)))
871
872 (define-public python-hdf4
873 (package
874 (name "python-hdf4")
875 (version "0.9")
876 (source
877 (origin
878 (method url-fetch)
879 (uri (pypi-uri name version))
880 (sha256
881 (base32
882 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
883 (build-system python-build-system)
884 (native-inputs `(("nose" ,python-nose)))
885 (propagated-inputs `(("numpy" ,python-numpy)))
886 (inputs
887 `(("hdf4" ,hdf4)
888 ("libjpeg" ,libjpeg-turbo)
889 ("zlib" ,zlib)))
890 (arguments
891 `(#:phases
892 (modify-phases %standard-phases
893 (replace 'check
894 (lambda _
895 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
896 ;; on to import numpy. Somehow this works on their CI system.
897 ;; Let's just manage PYTHONPATH here instead.
898 (substitute* "runexamples.sh"
899 (("export PYTHONPATH=.*") ""))
900 (setenv "PYTHONPATH"
901 (string-append (getcwd) ":"
902 (getenv "PYTHONPATH")))
903 (invoke "./runexamples.sh")
904 (invoke "nosetests" "-v"))))))
905 (home-page "https://github.com/fhs/python-hdf4")
906 (synopsis "Python interface to the NCSA HDF4 library")
907 (description
908 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
909 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
910 NetCDF files can also be read and modified. Python-HDF4 is a fork of
911 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
912 (license license:expat)))
913
914 (define-public python2-hdf4
915 (package-with-python2 python-hdf4))
916
917 (define-public python-h5py
918 (package
919 (name "python-h5py")
920 (version "2.10.0")
921 (source
922 (origin
923 (method url-fetch)
924 (uri (pypi-uri "h5py" version))
925 (sha256
926 (base32
927 "0baipzv8n93m0dq0riyi8rfhzrjrfrfh8zqhszzp1j2xjac2fhc4"))))
928 (build-system python-build-system)
929 (arguments
930 `(#:tests? #f ; no test target
931 #:phases
932 (modify-phases %standard-phases
933 (add-after 'unpack 'fix-hdf5-paths
934 (lambda* (#:key inputs #:allow-other-keys)
935 (let ((prefix (assoc-ref inputs "hdf5")))
936 (substitute* "setup_build.py"
937 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
938 (string-append "['" prefix "/lib" "']"))
939 (("'/opt/local/include', '/usr/local/include'")
940 (string-append "'" prefix "/include" "'")))
941 (substitute* "setup_configure.py"
942 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
943 (string-append "['" prefix "/lib" "']")))
944 #t))))))
945 (propagated-inputs
946 `(("python-six" ,python-six)
947 ("python-numpy" ,python-numpy)))
948 (inputs
949 `(("hdf5" ,hdf5-1.10)))
950 (native-inputs
951 `(("python-cython" ,python-cython)
952 ("python-pkgconfig" ,python-pkgconfig)
953 ("pkg-config" ,pkg-config)))
954 (home-page "https://www.h5py.org/")
955 (synopsis "Read and write HDF5 files from Python")
956 (description
957 "The h5py package provides both a high- and low-level interface to the
958 HDF5 library from Python. The low-level interface is intended to be a
959 complete wrapping of the HDF5 API, while the high-level component supports
960 access to HDF5 files, datasets and groups using established Python and NumPy
961 concepts.")
962 (license license:bsd-3)))
963
964 (define-public python2-h5py
965 (package-with-python2 python-h5py))
966
967 (define-public python-sh
968 (package
969 (name "python-sh")
970 (version "1.12.14")
971 (source
972 (origin
973 (method url-fetch)
974 (uri (pypi-uri "sh" version))
975 (sha256
976 (base32
977 "1z2hx357xp3v4cv44xmqp7lli3frndqpyfmpbxf7n76h7s1zaaxm"))))
978 (build-system python-build-system)
979 (arguments
980 '(#:phases
981 (modify-phases %standard-phases
982 (replace 'check
983 (lambda _
984 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
985 (setenv "HOME" "/tmp")
986 (invoke "python" "sh.py" "test"))))))
987 (native-inputs
988 `(("python-coverage" ,python-coverage)))
989 (home-page "https://github.com/amoffat/sh")
990 (synopsis "Python subprocess replacement")
991 (description "This package provides a replacement for Python's
992 @code{subprocess} feature.")
993 (license license:expat)))
994
995 (define-public python-cftime
996 (package
997 (name "python-cftime")
998 (version "1.0.4.2")
999 (source
1000 (origin
1001 (method url-fetch)
1002 (uri (pypi-uri "cftime" version))
1003 (sha256
1004 (base32 "0w0gi6jnch38hiygl62j4xkcirv4y3dcwrvxl9p7bsk6j27lzihs"))))
1005 (build-system python-build-system)
1006 (propagated-inputs
1007 `(("python-numpy" ,python-numpy)))
1008 (native-inputs
1009 `(("python-coveralls" ,python-coveralls)
1010 ("python-cython" ,python-cython)
1011 ("python-pytest-cov" ,python-pytest-cov)))
1012 (home-page "https://github.com/Unidata/cftime")
1013 (synopsis "Library for time handling")
1014 (description
1015 "This package provides time-handling functionality that used to be part
1016 of the netcdf4 package before.")
1017 ;; This package claims to include code under the GPLv3 but is released
1018 ;; under ISC.
1019 (license (list license:isc license:gpl3+))))
1020
1021 (define-public python-netcdf4
1022 (package
1023 (name "python-netcdf4")
1024 (version "1.5.3")
1025 (source
1026 (origin
1027 (method url-fetch)
1028 (uri (pypi-uri "netCDF4" version))
1029 (sha256
1030 (base32
1031 "1gn35mb2yc263pci720aik8ymz41lrvxlrn3z83vyjwghiashg1a"))))
1032 (build-system python-build-system)
1033 (arguments
1034 '(#:phases
1035 (modify-phases %standard-phases
1036 (add-after 'unpack 'configure-locations
1037 (lambda* (#:key inputs #:allow-other-keys)
1038 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
1039 #t)))))
1040 (native-inputs
1041 `(("python-cython" ,python-cython)))
1042 (propagated-inputs
1043 `(("python-numpy" ,python-numpy)
1044 ("python-cftime" ,python-cftime)))
1045 (inputs
1046 `(("netcdf" ,netcdf)
1047 ("hdf4" ,hdf4)
1048 ("hdf5" ,hdf5)))
1049 (home-page "https://github.com/Unidata/netcdf4-python")
1050 (synopsis "Python/numpy interface to the netCDF library")
1051 (description "Netcdf4-python is a Python interface to the netCDF C
1052 library. netCDF version 4 has many features not found in earlier
1053 versions of the library and is implemented on top of HDF5. This module
1054 can read and write files in both the new netCDF 4 and the old netCDF 3
1055 format, and can create files that are readable by HDF5 clients. The
1056 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
1057 to users of that module.")
1058 ;; The software is mainly ISC, but includes some files covered
1059 ;; by the Expat license.
1060 (license (list license:isc license:expat))))
1061
1062 (define-public python-license-expression
1063 (package
1064 (name "python-license-expression")
1065 (version "1.2")
1066 (source
1067 (origin
1068 (method url-fetch)
1069 (uri (pypi-uri "license-expression" version))
1070 (sha256
1071 (base32 "1g0sgphss8hbi1rpl4avy1nmbixmy9v194xdbvkjgl90vzgy2q3r"))))
1072 (build-system python-build-system)
1073 (propagated-inputs
1074 `(("python-boolean.py" ,python-boolean.py)))
1075 (home-page "https://github.com/nexB/license-expression")
1076 (synopsis "Apply boolean logic to license expressions")
1077 (description
1078 "This Python module defines a tiny language to evaluate and compare
1079 license expressions using boolean logic. Logical combinations of licenses can
1080 be tested for equality, containment, and equivalence. They can be normalised
1081 and simplified. It supports SPDX license expressions as well as other naming
1082 conventions and aliases in the same expression.")
1083 (license license:gpl2+)))
1084
1085 (define-public python-lockfile
1086 (package
1087 (name "python-lockfile")
1088 (version "0.12.2")
1089 (source
1090 (origin
1091 (method url-fetch)
1092 (uri (pypi-uri "lockfile" version))
1093 (sha256
1094 (base32
1095 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
1096 (build-system python-build-system)
1097 (arguments '(#:test-target "check"))
1098 (native-inputs
1099 `(("python-pbr" ,python-pbr)))
1100 (home-page "https://launchpad.net/pylockfile")
1101 (synopsis "Platform-independent file locking module")
1102 (description
1103 "The lockfile package exports a LockFile class which provides a simple
1104 API for locking files.")
1105 (license license:expat)))
1106
1107 (define-public python-filelock
1108 (package
1109 (name "python-filelock")
1110 (version "3.0.12")
1111 (source
1112 (origin
1113 (method url-fetch)
1114 (uri (pypi-uri "filelock" version))
1115 (sha256
1116 (base32
1117 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
1118 (build-system python-build-system)
1119 (home-page
1120 "https://github.com/benediktschmitt/py-filelock")
1121 (synopsis "Platform independent file lock")
1122 (description "@code{filelock} contains a single module implementing
1123 a platform independent file lock in Python, which provides a simple way of
1124 inter-process communication.")
1125 (license license:unlicense)))
1126
1127 (define-public python-semantic-version
1128 (package
1129 (name "python-semantic-version")
1130 (version "2.8.5")
1131 (source
1132 (origin
1133 (method url-fetch)
1134 (uri (pypi-uri "semantic_version" version))
1135 (sha256
1136 (base32
1137 "0m4avx8zdkzc7qglv5zlr54g8yna5vl098drg5396ql7aph2vjyj"))))
1138 (build-system python-build-system)
1139 (home-page "https://github.com/rbarrois/python-semanticversion")
1140 (synopsis "Semantic versioning module for Python")
1141 (description
1142 "The @code{semantic_version} class is a small library for handling
1143 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
1144
1145 It can compare versions, generate a new version that represents a bump in one of
1146 the version levels, and check whether any given string is a proper semantic
1147 version identifier.")
1148 (license license:bsd-3)))
1149
1150 (define-public python2-semantic-version
1151 (package-with-python2 python-semantic-version))
1152
1153 (define-public python-serpent
1154 (package
1155 (name "python-serpent")
1156 (version "1.28")
1157 (source
1158 (origin
1159 (method url-fetch)
1160 (uri (pypi-uri "serpent" version))
1161 (sha256
1162 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
1163 (build-system python-build-system)
1164 (native-inputs
1165 `(("python-attrs" ,python-attrs)
1166 ("python-pytz" ,python-pytz)))
1167 (home-page "https://github.com/irmen/Serpent")
1168 (synopsis "Serializer for literal Python expressions")
1169 (description
1170 "Serpent provides @code{ast.literal_eval()}-compatible object tree
1171 serialization. It serializes an object tree into bytes (an utf-8 encoded
1172 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
1173 to rebuild the original object tree.
1174
1175 Because only safe literals are encoded, it is safe to send serpent data to
1176 other machines, such as over the network.")
1177 (properties `((python2-variant . ,(delay python2-serpent))))
1178 (license license:expat)))
1179
1180 (define-public python2-serpent
1181 (let ((base (package-with-python2 (strip-python2-variant python-serpent))))
1182 (package/inherit base
1183 (propagated-inputs
1184 `(("python-enum34" ,python2-enum34)
1185 ,@(package-propagated-inputs base))))))
1186
1187 (define-public python-setuptools
1188 (package
1189 (name "python-setuptools")
1190 (version "52.0.0")
1191 (source
1192 (origin
1193 (method url-fetch)
1194 (uri (pypi-uri "setuptools" version))
1195 (sha256
1196 (base32
1197 "15ibjdjhkwgj6qbmpsxikkqdfsb1550z46fly7dm15ah4bk1wfpv"))
1198 (modules '((guix build utils)))
1199 (snippet
1200 '(begin
1201 ;; Remove included binaries which are used to build self-extracting
1202 ;; installers for Windows.
1203 ;; TODO: Find some way to build them ourself so we can include them.
1204 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
1205 #t))))
1206 (build-system python-build-system)
1207 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1208 ;; One could bootstrap with an internal untested setuptools.
1209 (arguments
1210 `(#:tests? #f))
1211 (home-page "https://pypi.org/project/setuptools/")
1212 (synopsis
1213 "Library designed to facilitate packaging Python projects")
1214 (description
1215 "Setuptools is a fully-featured, stable library designed to facilitate
1216 packaging Python projects, where packaging includes:
1217 Python package and module definitions,
1218 distribution package metadata,
1219 test hooks,
1220 project installation,
1221 platform-specific details,
1222 Python 3 support.")
1223 ;; TODO: setuptools now bundles the following libraries:
1224 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1225 (license (list license:psfl ; setuptools itself
1226 license:expat ; six, appdirs, pyparsing
1227 license:asl2.0 ; packaging is dual ASL2/BSD-2
1228 license:bsd-2))
1229 (properties `((python2-variant . ,(delay python2-setuptools))))))
1230
1231 ;; Newer versions of setuptools no longer support Python 2.
1232 (define-public python2-setuptools
1233 (package
1234 (name "python2-setuptools")
1235 (version "41.0.1")
1236 (source
1237 (origin
1238 (method url-fetch)
1239 (uri (pypi-uri "setuptools" version ".zip"))
1240 (sha256
1241 (base32
1242 "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
1243 (modules '((guix build utils)))
1244 (snippet
1245 '(begin
1246 ;; Remove included binaries which are used to build self-extracting
1247 ;; installers for Windows.
1248 ;; TODO: Find some way to build them ourself so we can include them.
1249 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
1250 #t))))
1251 (build-system python-build-system)
1252 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1253 ;; One could bootstrap with an internal untested setuptools.
1254 (arguments
1255 `(#:tests? #f))
1256 (native-inputs
1257 `(("unzip" ,unzip)))
1258 (home-page "https://pypi.org/project/setuptools/")
1259 (synopsis
1260 "Library designed to facilitate packaging Python projects")
1261 (description
1262 "Setuptools is a fully-featured, stable library designed to facilitate
1263 packaging Python projects, where packaging includes:
1264 Python package and module definitions,
1265 distribution package metadata,
1266 test hooks,
1267 project installation,
1268 platform-specific details,
1269 Python 3 support.")
1270 ;; TODO: setuptools now bundles the following libraries:
1271 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1272 (license (list license:psfl ; setuptools itself
1273 license:expat ; six, appdirs, pyparsing
1274 license:asl2.0 ; packaging is dual ASL2/BSD-2
1275 license:bsd-2))))
1276
1277 ;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
1278 (define-public python-setuptools-for-tensorflow
1279 (hidden-package
1280 (package
1281 (inherit python-setuptools)
1282 (version "39.1.0")
1283 (source (origin
1284 (inherit (package-source python-setuptools))
1285 (uri (pypi-uri "setuptools" version ".zip"))
1286 (sha256
1287 (base32
1288 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65")))))))
1289
1290 (define-public python-uniseg
1291 (package
1292 (name "python-uniseg")
1293 (version "0.7.1")
1294 (source
1295 (origin
1296 (method url-fetch)
1297 (uri (pypi-uri "uniseg" version ".zip"))
1298 (sha256
1299 (base32
1300 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
1301 (build-system python-build-system)
1302 (arguments
1303 '(#:tests? #f)) ; The test suite requires network access.
1304 (native-inputs
1305 `(("unzip" ,unzip)))
1306 (home-page
1307 "https://bitbucket.org/emptypage/uniseg-python")
1308 (synopsis
1309 "Python library to determine Unicode text segmentations")
1310 (description
1311 "Uniseg is a Python package used to determine Unicode text segmentations.
1312 Supported segmentations include:
1313 @enumerate
1314 @item @dfn{Code point} (any value in the Unicode codespace)
1315 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
1316 multiple Unicode code points, e.g. \"G\" + acute-accent)
1317 @item Word break
1318 @item Sentence break
1319 @item Line break
1320 @end enumerate")
1321 (license license:expat)))
1322
1323 (define-public python2-uniseg
1324 (package-with-python2 python-uniseg))
1325
1326 (define-public python-humanfriendly
1327 (package
1328 (name "python-humanfriendly")
1329 (version "8.2")
1330 (source
1331 (origin
1332 (method url-fetch)
1333 (uri (pypi-uri "humanfriendly" version))
1334 (sha256
1335 (base32
1336 "04ixg8b7p6xc8x8lffhi7wfl77xhszakhd0s6j0cf6a84j8yqlmz"))))
1337 (build-system python-build-system)
1338 (arguments
1339 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
1340 #:tests? #f))
1341 (home-page "https://humanfriendly.readthedocs.io")
1342 (synopsis "Human-friendly input and output in Python")
1343 (description
1344 "The functions and classes in @code{humanfriendly} can be used to make
1345 text interfaces more user-friendly. It includes tools to parse and format
1346 numbers, file sizes, and timespans, timers for long-running operations, menus
1347 to allow the user to choose from a list of options, and terminal interaction
1348 helpers.")
1349 (properties `((python2-variant . ,(delay python2-humanfriendly))))
1350 (license license:expat)))
1351
1352 (define-public python2-humanfriendly
1353 (let ((base (package-with-python2
1354 (strip-python2-variant python-humanfriendly))))
1355 (package/inherit base
1356 (propagated-inputs
1357 `(("python2-monotonic" ,python2-monotonic)
1358 ,@(package-propagated-inputs base))))))
1359
1360 (define-public python-textparser
1361 (package
1362 (name "python-textparser")
1363 (version "0.23.0")
1364 (source
1365 (origin
1366 (method url-fetch)
1367 (uri (pypi-uri "textparser" version))
1368 (sha256
1369 (base32
1370 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
1371 (build-system python-build-system)
1372 (home-page "https://github.com/eerimoq/textparser")
1373 (synopsis "Fast text parser for Python")
1374 (description "This library provides a text parser written in the Python
1375 language. It aims to be fast.")
1376 (license license:expat)))
1377
1378 (define-public python-aenum
1379 (package
1380 (name "python-aenum")
1381 (version "2.2.4")
1382 (source
1383 (origin
1384 (method url-fetch)
1385 (uri (pypi-uri "aenum" version))
1386 (sha256
1387 (base32 "0r1812bjm72x73pl7y4yhffr4zbdjgxa08avsy4b3di0pqgqv0l1"))))
1388 (build-system python-build-system)
1389 (arguments
1390 `(#:phases (modify-phases %standard-phases
1391 (replace 'check
1392 (lambda _
1393 (format #t "current working dir ~s~%" (getcwd))
1394 (setenv "PYTHONPATH"
1395 (string-append ".:" (getenv "PYTHONPATH")))
1396 ;; We must run the test suite module directly, as it
1397 ;; fails to define the 'tempdir' variable in scope for
1398 ;; the tests otherwise
1399 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
1400 ;; issues/32/running-tests-with-python-setuppy-test).
1401 (invoke "python3" "aenum/test.py")
1402 ;; This one fails with "NameError: name
1403 ;; 'test_pickle_dump_load' is not defined" (see:
1404 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
1405 ;; /error-running-the-test_v3py-test-suite).
1406 ;; (invoke "python3" "aenum/test_v3.py")
1407 #t)))))
1408 (home-page "https://bitbucket.org/stoneleaf/aenum")
1409 (synopsis "Advanced enumerations, namedtuples and constants for Python")
1410 (description "The aenum library includes an @code{Enum} base class, a
1411 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
1412 class.")
1413 (license license:bsd-3)))
1414
1415 (define-public python-can
1416 (package
1417 (name "python-can")
1418 (version "3.3.3")
1419 (source
1420 (origin
1421 (method url-fetch)
1422 (uri (pypi-uri "python-can" version))
1423 (sha256
1424 (base32
1425 "123lz1bl6xf3d0fvxzr4bg4884yg4m9s21z6xd2m68zhnbv9rmpc"))))
1426 (build-system python-build-system)
1427 (arguments
1428 `(#:phases (modify-phases %standard-phases
1429 (add-after 'unpack 'relax-version-requirements
1430 (lambda _
1431 (substitute* "setup.py"
1432 (("mock~=2\\.0") "mock")
1433 (("coverage<5") "coverage")
1434 (("pytest~=4\\.3") "pytest")
1435 (("hypothesis~=4\\.56") "hypothesis"))
1436 #t))
1437 (add-after 'unpack 'fix-broken-tests
1438 ;; The tests try to run two scripts it expects should be
1439 ;; in PATH, but they aren't at this time (see:
1440 ;; https://github.com/hardbyte/python-can/issues/805).
1441 (lambda _
1442 (substitute* "test/test_scripts.py"
1443 (("\"can_logger\\.py --help\"") "")
1444 (("\"can_player\\.py --help\"") ""))
1445 #t)))))
1446 (propagated-inputs
1447 `(("python-aenum" ,python-aenum)
1448 ("python-wrapt" ,python-wrapt)))
1449 (native-inputs
1450 `(("python-codecov" ,python-codecov)
1451 ("python-coverage" ,python-coverage)
1452 ("python-future" ,python-future)
1453 ("python-hypothesis" ,python-hypothesis)
1454 ("python-mock" ,python-mock)
1455 ("python-pyserial" ,python-pyserial)
1456 ("python-pytest" ,python-pytest)
1457 ("python-pytest-cov" ,python-pytest-cov)
1458 ("python-pytest-runner" ,python-pytest-runner)
1459 ("python-pytest-timeout" ,python-pytest-timeout)))
1460 (home-page "https://github.com/hardbyte/python-can")
1461 (synopsis "Controller Area Network (CAN) interface module for Python")
1462 (description "This package defines the @code{can} module, which provides
1463 controller area network (CAN) support for Python developers; providing common
1464 abstractions to different hardware devices, and a suite of utilities for
1465 sending and receiving messages on a CAN bus.")
1466 (license license:lgpl3+)))
1467
1468 (define-public python-caniusepython3
1469 (package
1470 (name "python-caniusepython3")
1471 (version "7.2.0")
1472 (source
1473 (origin
1474 (method url-fetch)
1475 (uri (pypi-uri "caniusepython3" version))
1476 (sha256
1477 (base32
1478 "0a755444ln38j8d7xb3yw0wzpd0mjrzfn6zqvsh06nw1vdaq4l28"))))
1479 (build-system python-build-system)
1480 (arguments
1481 `(#:phases (modify-phases %standard-phases
1482 (add-after 'unpack 'relax-requirements
1483 (lambda _
1484 (substitute* "setup.py"
1485 ;; These are for compatibility with Python 2.
1486 ((".*'argparse', 'backports.functools_lru_cache',.*")
1487 ""))
1488 (substitute* "dev_requirements.txt"
1489 ((".*pylint.*") "")) ;not actually required
1490 #t))
1491 (replace 'check
1492 (lambda _
1493 (invoke "py.test" "-k" "not NetworkTests"))))))
1494 (propagated-inputs
1495 `(("python-distlib" ,python-distlib)
1496 ("python-packaging" ,python-packaging)
1497 ("python-requests" ,python-requests)))
1498 (native-inputs
1499 `(("python-mock" ,python-mock)
1500 ("python-pytest" ,python-pytest)))
1501 (home-page "https://github.com/brettcannon/caniusepython3")
1502 (synopsis "Check for Python 3-incompatible Python libraries")
1503 (description "The @command{caniusepython3} command scans your project and
1504 reports the Python 3-incompatible libraries it found. It can also be used as
1505 a library.")
1506 (license license:asl2.0)))
1507
1508 (define-public python-diskcache
1509 (package
1510 (name "python-diskcache")
1511 (version "4.1.0")
1512 (source
1513 (origin
1514 (method url-fetch)
1515 (uri (pypi-uri "diskcache" version))
1516 (sha256
1517 (base32
1518 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
1519 (build-system python-build-system)
1520 (arguments
1521 `(#:tests? #f)) ;test suite not included in the release
1522 (home-page "http://www.grantjenks.com/docs/diskcache/")
1523 (synopsis "Disk and file backed cache library")
1524 (description "DiskCache is a disk and file backed persistent cache.")
1525 (license license:asl2.0)))
1526
1527 (define-public python-bitstruct
1528 (package
1529 (name "python-bitstruct")
1530 (version "8.9.0")
1531 (source
1532 (origin
1533 (method url-fetch)
1534 (uri (pypi-uri "bitstruct" version))
1535 (sha256
1536 (base32
1537 "1fpc1qh1vss05ap29xvhjp200fm0q4pvgcjl0qpryh7ay6xgr5vx"))))
1538 (build-system python-build-system)
1539 (home-page "https://github.com/eerimoq/bitstruct")
1540 (synopsis "Python values to and C bit field structs converter")
1541 (description "This module performs conversions between Python values and C
1542 bit field structs represented as Python byte strings. It is intended to have
1543 a similar interface as the @code{struct} module from Python, but working on
1544 bits instead of primitive data types like @code{char}, @code{int}, etc.")
1545 (license license:expat)))
1546
1547 (define-public python-cantools
1548 (package
1549 (name "python-cantools")
1550 (version "33.1.1")
1551 (source
1552 (origin
1553 ;; We take the sources from the Git repository as the documentation is
1554 ;; not included with the PyPI archive.
1555 (method git-fetch)
1556 (uri (git-reference
1557 (url "https://github.com/eerimoq/cantools")
1558 (commit version)))
1559 (file-name (git-file-name name version))
1560 (sha256
1561 (base32
1562 "1aad137yd8b4jkfvlv812qsxmxcgra7g1p4wbxfsjy1cbf8fbq9q"))))
1563 (build-system python-build-system)
1564 (arguments
1565 `(#:phases
1566 (modify-phases %standard-phases
1567 (add-after 'build 'build-doc
1568 (lambda _
1569 ;; See: https://github.com/eerimoq/cantools/issues/190.
1570 (substitute* "README.rst"
1571 (("https://github.com/eerimoq/cantools/raw/master\
1572 /docs/monitor.png")
1573 "monitor.png"))
1574 (with-directory-excursion "docs"
1575 (invoke "make" "man" "info"))))
1576 (add-after 'install 'install-doc
1577 (lambda* (#:key outputs #:allow-other-keys)
1578 (let* ((out (assoc-ref outputs "out"))
1579 (info (string-append out "/share/info"))
1580 (man1 (string-append out "/share/man/man1")))
1581 (format #t "CWD: ~s~%" (getcwd))
1582 (install-file "docs/_build/texinfo/cantools.info" info)
1583 (install-file "docs/_build/man/cantools.1" man1)
1584 #t))))))
1585 (native-inputs
1586 `(("sphinx" ,python-sphinx)
1587 ("texinfo" ,texinfo)))
1588 (propagated-inputs
1589 `(("python-bitstruct" ,python-bitstruct)
1590 ("python-can" ,python-can)
1591 ("python-diskcache" ,python-diskcache)
1592 ("python-textparser" ,python-textparser)))
1593 (home-page "https://github.com/eerimoq/cantools")
1594 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
1595 (description "This package includes Controller Area Network (CAN) related
1596 tools that can be used to:
1597 @itemize
1598 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
1599 @item encode and decode CAN messages
1600 @item multiplex simple and extended signals
1601 @item diagnose DID encoding and decoding
1602 @item dump the CAN decoder output
1603 @item test CAN nodes
1604 @item generate C source code
1605 @item monitor the CAN bus
1606 @end itemize")
1607 (license license:expat)))
1608
1609 (define-public python-capturer
1610 (package
1611 (name "python-capturer")
1612 (version "2.4")
1613 (source
1614 (origin
1615 (method url-fetch)
1616 (uri (pypi-uri "capturer" version))
1617 (sha256
1618 (base32
1619 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
1620 (build-system python-build-system)
1621 (arguments
1622 `(#:tests? #f))
1623 (propagated-inputs
1624 `(("python-humanfriendly" ,python-humanfriendly)))
1625 (home-page "https://capturer.readthedocs.io")
1626 (synopsis "Capture stdout and stderr streams of the current process")
1627 (description
1628 "The capturer package makes it easy to capture the stdout and stderr
1629 streams of the current process and subprocesses. Output can be relayed
1630 to the terminal in real time but is also available to the Python program
1631 for additional processing.")
1632 (license license:expat)))
1633
1634 (define-public python2-capturer
1635 (package-with-python2 python-capturer))
1636
1637 (define-public python-case
1638 (package
1639 (name "python-case")
1640 (version "1.5.3")
1641 (source
1642 (origin
1643 (method url-fetch)
1644 (uri (pypi-uri "case" version))
1645 (sha256
1646 (base32
1647 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
1648 (build-system python-build-system)
1649 (propagated-inputs
1650 `(("python-mock" ,python-mock)
1651 ("python-nose" ,python-nose)
1652 ("python-six" ,python-six)
1653 ("python-unittest2" ,python-unittest2)))
1654 (native-inputs
1655 `(("python-coverage" ,python-coverage)))
1656 (home-page "https://github.com/celery/case")
1657 (synopsis "Unittest utilities and convenience methods")
1658 (description
1659 "The @code{case} package provides utilities on top of unittest, including
1660 some helpful Python 2 compatibility convenience methods.")
1661 (license license:bsd-3)))
1662
1663 (define-public python-verboselogs
1664 (package
1665 (name "python-verboselogs")
1666 (version "1.7")
1667 (source
1668 (origin
1669 (method url-fetch)
1670 (uri (pypi-uri "verboselogs" version))
1671 (sha256
1672 (base32
1673 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
1674 (build-system python-build-system)
1675 (arguments
1676 `(#:phases
1677 (modify-phases %standard-phases
1678 (replace 'check
1679 (lambda _
1680 ;; Do not run pylint plugin test, as astroid is an old
1681 ;; unsupported version.
1682 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
1683 "verboselogs/tests.py"))))))
1684 (native-inputs
1685 `(("python-mock" ,python-mock)
1686 ("python-pytest" ,python-pytest)))
1687 (home-page "https://verboselogs.readthedocs.io")
1688 (synopsis "Verbose logging level for Python's logging module")
1689 (description
1690 "The @code{verboselogs} package extends Python's @code{logging} module to
1691 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
1692 (license license:expat)))
1693
1694 (define-public python2-verboselogs
1695 (package-with-python2 python-verboselogs))
1696
1697 (define-public python-coloredlogs
1698 (package
1699 (name "python-coloredlogs")
1700 (version "10.0")
1701 (source
1702 (origin
1703 (method url-fetch)
1704 (uri (pypi-uri "coloredlogs" version))
1705 (sha256
1706 (base32
1707 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
1708 (build-system python-build-system)
1709 (arguments
1710 `(;Tests require some updated modules
1711 #:tests? #f))
1712 (propagated-inputs
1713 `(("python-capturer" ,python-capturer)))
1714 (home-page "https://coloredlogs.readthedocs.io")
1715 (synopsis "Colored stream handler for Python's logging module")
1716 (description
1717 "The @code{coloredlogs} package enables colored terminal output for
1718 Python's logging module. The @code{ColoredFormatter} class inherits from
1719 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
1720 messages in color.")
1721 (license license:expat)))
1722
1723 (define-public python2-coloredlogs
1724 (package-with-python2 python-coloredlogs))
1725
1726 (define-public python-editorconfig
1727 (package
1728 (name "python-editorconfig")
1729 (version "0.12.2")
1730 (source
1731 (origin
1732 (method url-fetch)
1733 (uri (pypi-uri "EditorConfig" version))
1734 (sha256
1735 (base32
1736 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
1737 (build-system python-build-system)
1738 (home-page "https://editorconfig.org/")
1739 (synopsis "EditorConfig bindings for python")
1740 (description "The EditorConfig project consists of a file format for
1741 defining coding styles and a collection of text editor plugins that enable
1742 editors to read the file format and adhere to defined styles. EditorConfig
1743 files are easily readable and they work nicely with version control systems.")
1744 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
1745 (license (list license:bsd-2 license:psfl))))
1746
1747 (define-public dosage
1748 (package
1749 (name "dosage")
1750 (version "2.17")
1751 (source
1752 (origin
1753 (method url-fetch)
1754 (uri (pypi-uri "dosage" version))
1755 (sha256
1756 (base32
1757 "0vmxgn9wd3j80hp4gr5iq06jrl4gryz5zgfdd2ah30d12sfcfig0"))))
1758 (build-system python-build-system)
1759 (propagated-inputs
1760 `(("python2-backports-functools-lru-cache"
1761 ,python2-backports-functools-lru-cache)
1762 ("python2-backports-shutil-get-terminal-size"
1763 ,python2-backports-shutil-get-terminal-size)
1764 ("python-cached-property" ,python-cached-property)
1765 ("python-colorama" ,python-colorama)
1766 ("python-imagesize" ,python-imagesize)
1767 ("python-importlib-metadata" ,python-importlib-metadata)
1768 ("python-lxml" ,python-lxml)
1769 ("python-requests" ,python-requests)
1770 ("python-six" ,python-six)))
1771 (native-inputs
1772 `(("python-pytest-cov" ,python-pytest-cov)
1773 ("python-pytest-xdist" ,python-pytest-xdist)
1774 ("python-responses" ,python-responses)
1775 ("python-setuptools-scm" ,python-setuptools-scm)))
1776 (home-page "https://github.com/webcomics/dosage")
1777 (synopsis "Comic strip downloader and archiver")
1778 (description "Dosage is designed to keep a local copy of specific webcomics and other
1779 picture-based content such as Picture of the Day sites. With the @command{dosage}
1780 command-line script you can get the latest strip of a webcomic, catch-up to the last strip
1781 downloaded, or download a strip for a particular date or index, if possible.")
1782 (license license:expat)))
1783
1784 (define-public python-et-xmlfile
1785 (package
1786 (name "python-et-xmlfile")
1787 (version "1.0.1")
1788 (source
1789 (origin
1790 (method url-fetch)
1791 (uri (pypi-uri "et_xmlfile" version))
1792 (sha256
1793 (base32
1794 "0nrkhcb6jdrlb6pwkvd4rycw34y3s931hjf409ij9xkjsli9fkb1"))))
1795 (build-system python-build-system)
1796 (arguments
1797 `(#:phases (modify-phases %standard-phases
1798 (replace 'check
1799 (lambda _
1800 (invoke "pytest"))))))
1801 (native-inputs
1802 `(("python-pytest" ,python-pytest)
1803 ("python-lxml" ,python-lxml))) ;used for the tests
1804 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
1805 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
1806 (description "This Python library is based upon the @code{xmlfile} module
1807 from @code{lxml}. It aims to provide a low memory, compatible implementation
1808 of @code{xmlfile}.")
1809 (license license:expat)))
1810
1811 (define-public python2-et-xmlfile
1812 (package-with-python2 python-et-xmlfile))
1813
1814 (define-public python-openpyxl
1815 (package
1816 (name "python-openpyxl")
1817 (version "3.0.5")
1818 (source
1819 (origin
1820 ;; We use the upstream repository, as the tests are not included in the
1821 ;; PyPI releases.
1822 (method hg-fetch)
1823 (uri (hg-reference
1824 (url "https://foss.heptapod.net/openpyxl/openpyxl")
1825 (changeset version)))
1826 (file-name (string-append name "-" version "-checkout"))
1827 (sha256
1828 (base32 "0s6fgwwkcfz1bnrp5gjd4g2lcbl4a76147ylkrmkbabi2nf4xlli"))))
1829 (build-system python-build-system)
1830 (arguments
1831 `(#:phases (modify-phases %standard-phases
1832 (replace 'check
1833 (lambda _
1834 (invoke "pytest"))))))
1835 (native-inputs
1836 ;; For the test suite.
1837 `(("python-lxml" ,python-lxml)
1838 ("python-pillow" ,python-pillow)
1839 ("python-pytest" ,python-pytest)))
1840 (propagated-inputs
1841 `(("python-et-xmlfile" ,python-et-xmlfile)
1842 ("python-jdcal" ,python-jdcal)))
1843 (home-page "https://openpyxl.readthedocs.io")
1844 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
1845 (description "This Python library allows reading and writing to the Excel XLSX, XLSM,
1846 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
1847 standard.")
1848 (properties `((python2-variant . ,(delay python2-openpyxl))))
1849 (license license:expat)))
1850
1851 (define-public python2-openpyxl
1852 (let ((base (package-with-python2
1853 (strip-python2-variant python-openpyxl))))
1854 (package
1855 (inherit base)
1856 ;; This is the latest version that has python2 support
1857 (version "2.6.4")
1858 (source
1859 (origin
1860 (method url-fetch)
1861 (uri (pypi-uri "openpyxl" version))
1862 (sha256
1863 (base32
1864 "1qzjj8nwj4dn0mhq1j64f136afiqqb81lvqiikipz3g1g0b80lqx"))))
1865 (arguments '(#:tests? #f))))) ; No test suite.
1866
1867 (define-public python-eventlet
1868 (package
1869 (name "python-eventlet")
1870 (version "0.25.1")
1871 (source
1872 (origin
1873 (method url-fetch)
1874 (uri (pypi-uri "eventlet" version))
1875 (sha256
1876 (base32
1877 "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
1878 (build-system python-build-system)
1879 (propagated-inputs
1880 `(("python-dnspython" ,python-dnspython)
1881 ("python-greenlet" ,python-greenlet)
1882 ("python-monotonic" ,python-monotonic)))
1883 (arguments
1884 ;; TODO: Requires unpackaged 'enum-compat'.
1885 '(#:tests? #f))
1886 (home-page "https://eventlet.net")
1887 (synopsis "Concurrent networking library for Python")
1888 (description
1889 "Eventlet is a concurrent networking library for Python that
1890 allows you to change how you run your code, not how you write it.
1891 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1892 Coroutines ensure that the developer uses a blocking style of programming
1893 that is similar to threading, but provide the benefits of non-blocking I/O.
1894 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1895 from the Python interpreter, or as a small part of a larger application.")
1896 (license license:expat)))
1897
1898 (define-public python-six
1899 (package
1900 (name "python-six")
1901 (version "1.14.0")
1902 (source
1903 (origin
1904 (method url-fetch)
1905 (uri (pypi-uri "six" version))
1906 (sha256
1907 (base32
1908 "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3"))))
1909 (build-system python-build-system)
1910 (arguments
1911 `(#:phases
1912 (modify-phases %standard-phases
1913 (replace 'check
1914 (lambda _
1915 (invoke "py.test" "-v"))))))
1916 (native-inputs
1917 `(("python-pytest" ,python-pytest-bootstrap)))
1918 (home-page "https://pypi.org/project/six/")
1919 (synopsis "Python 2 and 3 compatibility utilities")
1920 (description
1921 "Six is a Python 2 and 3 compatibility library. It provides utility
1922 functions for smoothing over the differences between the Python versions with
1923 the goal of writing Python code that is compatible on both Python versions.
1924 Six supports every Python version since 2.5. It is contained in only one
1925 Python file, so it can be easily copied into your project.")
1926 (license license:x11)))
1927
1928 (define-public python2-six
1929 (package-with-python2 python-six))
1930
1931 (define-public python-six-bootstrap
1932 (package
1933 (inherit python-six)
1934 (name "python-six-bootstrap")
1935 (native-inputs `())
1936 (arguments `(#:tests? #f))))
1937
1938 (define-public python2-six-bootstrap
1939 (package-with-python2 python-six-bootstrap))
1940
1941 (define-public python-schedule
1942 (package
1943 (name "python-schedule")
1944 (version "0.4.3")
1945 (source
1946 (origin
1947 (method url-fetch)
1948 (uri (pypi-uri "schedule" version))
1949 (sha256
1950 (base32
1951 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
1952 (build-system python-build-system)
1953 (native-inputs
1954 `(("python-pytest" ,python-pytest)
1955 ("python-mock" ,python-mock)))
1956 (home-page "https://github.com/dbader/schedule")
1957 (synopsis "Schedule periodic function calls in Python")
1958 (description
1959 "Schedule is an in-process scheduler for periodic jobs that uses the
1960 builder pattern for configuration. Schedule lets you run Python functions (or
1961 any other callable) periodically at pre-determined intervals using a simple,
1962 human-friendly syntax.")
1963 (license license:expat)))
1964
1965 (define-public python2-schedule
1966 (package-with-python2 python-schedule))
1967
1968 (define-public python-scour
1969 (package
1970 (name "python-scour")
1971 (version "038.1")
1972 (source
1973 (origin
1974 (method git-fetch)
1975 (uri
1976 (git-reference
1977 (url "https://github.com/scour-project/scour")
1978 (commit
1979 (string-append "v" version))))
1980 (file-name (git-file-name name version))
1981 (sha256
1982 (base32 "0rgiypb9ig8x4rl3hfzpy7kwnx1q3064nvlrv4fk0dnp84girn0v"))))
1983 (propagated-inputs
1984 `(("python-six" ,python-six)))
1985 (build-system python-build-system)
1986 (home-page "https://github.com/scour-project/scour")
1987 (synopsis "Scour is an SVG optimizer/cleaner written in Python")
1988 (description "The goal of Scour is to output a file that renders
1989 identically at a fraction of the size by removing a lot of redundant
1990 information created by most SVG editors. Optimization options are typically
1991 lossless but can be tweaked for more aggressive cleaning.")
1992 (license license:asl2.0)))
1993
1994 (define-public python-mechanize
1995 (package
1996 (name "python-mechanize")
1997 (version "0.4.5")
1998 (source
1999 (origin
2000 (method url-fetch)
2001 (uri (pypi-uri "mechanize" version))
2002 (sha256
2003 (base32
2004 "1z9kqcwb8gfq2l6i42z624kxpd8692a0c8gw2x5bbm7n848w2mb3"))))
2005 (build-system python-build-system)
2006 (propagated-inputs
2007 `(("python-html5lib" ,python-html5lib)))
2008 (home-page "https://github.com/python-mechanize/mechanize")
2009 (synopsis
2010 "Stateful programmatic web browsing in Python")
2011 (description
2012 "Mechanize implements stateful programmatic web browsing in Python,
2013 after Andy Lester’s Perl module WWW::Mechanize.")
2014 (license license:bsd-3)))
2015
2016 (define-public python2-mechanize
2017 (package-with-python2 python-mechanize))
2018
2019 (define-public python-simpleaudio
2020 (package
2021 (name "python-simpleaudio")
2022 (version "1.0.4")
2023 (source
2024 (origin
2025 (method url-fetch)
2026 (uri (pypi-uri "simpleaudio" version))
2027 (sha256
2028 (base32
2029 "07glihg0fpca0gvbbvqs9q815w8xhflzdvg72yvlsm23j9j8h739"))))
2030 (build-system python-build-system)
2031 (arguments
2032 `(#:tests? #f))
2033 (inputs
2034 `(("alsa-lib" ,alsa-lib)))
2035 (home-page
2036 "https://github.com/hamiltron/py-simple-audio")
2037 (synopsis "Simple, asynchronous audio playback for Python 3")
2038 (description
2039 "The @code{simplaudio} package provides cross-platform, dependency-free
2040 audio playback capability for Python 3 on OSX, Windows, and Linux.")
2041 (license license:expat))) ; MIT license
2042
2043 (define-public python-simplejson
2044 (package
2045 (name "python-simplejson")
2046 (version "3.17.0")
2047 (source
2048 (origin
2049 (method url-fetch)
2050 (uri (pypi-uri "simplejson" version))
2051 (sha256
2052 (base32
2053 "108yf3252fy4ndqab7h46raksxfhcn113bzy2yd8369vidrjnjrb"))))
2054 (build-system python-build-system)
2055 (home-page "http://simplejson.readthedocs.org/en/latest/")
2056 (synopsis
2057 "Json library for Python")
2058 (description
2059 "JSON (JavaScript Object Notation) is a subset of JavaScript
2060 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
2061 format.
2062
2063 Simplejson exposes an API familiar to users of the standard library marshal
2064 and pickle modules. It is the externally maintained version of the json
2065 library contained in Python 2.6, but maintains compatibility with Python 2.5
2066 and (currently) has significant performance advantages, even without using
2067 the optional C extension for speedups. Simplejson is also supported on
2068 Python 3.3+.")
2069 (license license:x11)))
2070
2071 (define-public python2-simplejson
2072 (package-with-python2 python-simplejson))
2073
2074
2075 (define-public python-pyicu
2076 (package
2077 (name "python-pyicu")
2078 (version "2.4.3")
2079 (source
2080 (origin
2081 (method url-fetch)
2082 (uri (pypi-uri "PyICU" version))
2083 (sha256
2084 (base32
2085 "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0"))))
2086 (build-system python-build-system)
2087 (inputs
2088 `(("icu4c" ,icu4c)))
2089 (native-inputs
2090 `(("python-pytest" ,python-pytest)
2091 ("python-six" ,python-six)))
2092 (home-page "https://github.com/ovalhub/pyicu")
2093 (synopsis "Python extension wrapping the ICU C++ API")
2094 (description
2095 "PyICU is a python extension wrapping the ICU C++ API.")
2096 (license license:x11)))
2097
2098 (define-public python2-pyicu
2099 (package-with-python2 python-pyicu))
2100
2101 (define-public python-dogtail
2102 (package
2103 (name "python-dogtail")
2104 (version "0.9.11")
2105 (source (origin
2106 (method url-fetch)
2107 (uri
2108 (string-append
2109 "https://gitlab.com/dogtail/dogtail/-/raw/released/"
2110 "dogtail-" version ".tar.gz"))
2111 (sha256
2112 (base32
2113 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
2114 (build-system python-build-system)
2115 (arguments
2116 `(#:tests? #f ; TODO Launching dbus for the tests
2117 ; fails
2118 #:phases
2119 (modify-phases %standard-phases
2120 (replace 'check
2121 (lambda* (#:key tests? #:allow-other-keys)
2122 (when tests?
2123 (system "Xvfb :1 &")
2124 (setenv "DISPLAY" ":1")
2125 (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
2126 #t)))))
2127 (propagated-inputs
2128 `(("python-pygobject" ,python-pygobject)
2129 ("python-pycairo" ,python-pycairo)
2130 ("python-pyatspi" ,python-pyatspi)))
2131 (native-inputs
2132 `(("python-nose" ,python-nose)
2133 ("gtk+" ,gtk+)
2134 ("xvfb" ,xorg-server)
2135 ("dbus" ,dbus)
2136 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
2137 ("gobject-introspection" ,gobject-introspection)))
2138 (home-page "https://gitlab.com/dogtail/dogtail/")
2139 (synopsis "GUI test tool and automation framework written in Python")
2140 (description
2141 "Dogtail is a GUI test tool and automation framework written in Python.
2142 It uses Accessibility (a11y) technologies to communicate with desktop
2143 applications. dogtail scripts are written in Python and executed like any
2144 other Python program.")
2145 (license license:gpl2+)))
2146
2147 (define-public python2-dogtail
2148 (package-with-python2 python-dogtail))
2149
2150 (define-public python-empy
2151 (package
2152 (name "python-empy")
2153 (version "3.3.3")
2154 (source (origin
2155 (method url-fetch)
2156 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
2157 version ".tar.gz"))
2158 (sha256
2159 (base32
2160 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
2161 (build-system python-build-system)
2162 (arguments
2163 `(#:tests? #f)) ; python2 only
2164 (home-page "http://www.alcyone.com/software/empy/")
2165 (synopsis "Templating system for Python")
2166 (description
2167 "EmPy is a system for embedding Python expressions and statements in
2168 template text; it takes an EmPy source file, processes it, and produces
2169 output. This is accomplished via expansions, which are special signals to the
2170 EmPy system and are set off by a special prefix (by default the at sign, @@).
2171 EmPy can expand arbitrary Python expressions and statements in this way, as
2172 well as a variety of special forms. Textual data not explicitly delimited in
2173 this way is sent unaffected to the output, allowing Python to be used in
2174 effect as a markup language. Also supported are callbacks via hooks,
2175 recording and playback via diversions, and dynamic, chainable filters. The
2176 system is highly configurable via command line options and embedded
2177 commands.")
2178 (license license:lgpl2.1+)))
2179
2180 (define-public python2-empy
2181 (let ((base (package-with-python2 (strip-python2-variant python-empy))))
2182 (package/inherit base
2183 (arguments `(,@(package-arguments base)
2184 #:tests? #t)))))
2185
2186 (define-public python2-element-tree
2187 (package
2188 (name "python2-element-tree")
2189 (version "1.2.6")
2190 (source (origin
2191 (method url-fetch)
2192 (uri (string-append
2193 "http://effbot.org/media/downloads/elementtree-"
2194 version "-20050316.tar.gz"))
2195 (sha256
2196 (base32
2197 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
2198 (build-system python-build-system)
2199 (arguments
2200 `(#:python ,python-2 ; seems to be part of Python 3
2201 #:tests? #f)) ; no 'test' sub-command
2202 (synopsis "Toolkit for XML processing in Python")
2203 (description
2204 "ElementTree is a Python library supporting lightweight XML processing.")
2205 (home-page "https://effbot.org/zone/element-index.htm")
2206 (license (license:x11-style
2207 "http://docs.python.org/2/license.html"
2208 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
2209
2210 (define-public python2-pybugz
2211 (package
2212 (name "python2-pybugz")
2213 (version "0.6.11")
2214 (source (origin
2215 (method url-fetch)
2216 (uri (string-append
2217 "http://bits.liquidx.net/projects/pybugz/pybugz-"
2218 version ".tar.gz"))
2219 (sha256
2220 (base32
2221 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
2222 (patches (search-patches "pybugz-stty.patch"
2223 "pybugz-encode-error.patch"))))
2224 (build-system python-build-system)
2225 (arguments
2226 `(#:python ,python-2 ; SyntaxError with Python 3
2227 #:tests? #f)) ; no 'test' sub-command
2228 (propagated-inputs
2229 `(("element-tree" ,python2-element-tree)))
2230 (synopsis "Python and command-line interface to Bugzilla")
2231 (description
2232 "PyBugz is a Python library and command-line tool to query the Bugzilla
2233 bug tracking system. It is meant as an aid to speed up interaction with the
2234 bug tracker.")
2235 (home-page "http://www.liquidx.net/pybugz/")
2236 (license license:gpl2)))
2237
2238 (define-public python2-enum
2239 (package
2240 (name "python2-enum")
2241 (version "0.4.6")
2242 (source (origin
2243 (method url-fetch)
2244 (uri (pypi-uri "enum" version))
2245 (sha256
2246 (base32
2247 "13lk3yrwj42vl30kw3c194f739nrfrdg64s6i0v2p636n4k8brsl"))))
2248 (build-system python-build-system)
2249 (arguments
2250 `(#:python ,python-2))
2251 (home-page "https://pypi.org/project/enum/")
2252 (synopsis "Robust enumerated type support in Python")
2253 (description
2254 "This provides a module for robust enumerations in Python. It has
2255 been superseded by the Python standard library and is provided only for
2256 compatibility.")
2257 ;; Choice of either license.
2258 (license (list license:gpl3+ license:psfl))))
2259
2260 (define-public python-enum34
2261 (package
2262 (name "python-enum34")
2263 (version "1.1.6")
2264 (source
2265 (origin
2266 (method url-fetch)
2267 (uri (pypi-uri "enum34" version))
2268 (sha256
2269 (base32
2270 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
2271 (build-system python-build-system)
2272 (home-page "https://pypi.org/project/enum34/")
2273 (synopsis "Backported Python 3.4 Enum")
2274 (description
2275 "Enum34 is the new Python stdlib enum module available in Python 3.4
2276 backported for previous versions of Python from 2.4 to 3.3.")
2277 (license license:bsd-3)))
2278
2279 (define-public python2-enum34
2280 (package-with-python2 python-enum34))
2281
2282 (define-public python-parse-type
2283 (package
2284 (name "python-parse-type")
2285 (version "0.4.2")
2286 (source
2287 (origin
2288 (method url-fetch)
2289 (uri (pypi-uri "parse_type" version))
2290 (sha256
2291 (base32
2292 "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
2293 (build-system python-build-system)
2294 (propagated-inputs
2295 `(("python-six" ,python-six)
2296 ("python-parse" ,python-parse)))
2297 (native-inputs
2298 `(("python-pytest" ,python-pytest)
2299 ("python-pytest-runner" ,python-pytest-runner)))
2300 (home-page "https://github.com/jenisys/parse_type")
2301 (synopsis "Extended parse module")
2302 (description
2303 "Parse_type extends the python parse module.")
2304 (properties
2305 `((python2-variant . ,(delay python2-parse-type))))
2306 (license license:bsd-3)))
2307
2308 (define-public python2-parse-type
2309 (let ((base (package-with-python2
2310 (strip-python2-variant python-parse-type))))
2311 (package/inherit base
2312 (propagated-inputs
2313 `(("python2-enum34" ,python2-enum34)
2314 ,@(package-propagated-inputs base))))))
2315
2316 (define-public python-parse
2317 (package
2318 (name "python-parse")
2319 (version "1.18.0")
2320 (source
2321 (origin
2322 (method url-fetch)
2323 (uri (pypi-uri "parse" version))
2324 (sha256
2325 (base32
2326 "19063x4xdjpaf7rfxai6jpgm2k4yvkq7wha8aa8cagbjsqr60rli"))))
2327 (build-system python-build-system)
2328 (arguments
2329 `(#:phases
2330 (modify-phases %standard-phases
2331 (replace 'check
2332 (lambda _ (invoke "python" "test_parse.py"))))))
2333 (home-page "https://github.com/r1chardj0n3s/parse")
2334 (synopsis "Parse strings")
2335 (description
2336 "Parse strings using a specification based on the Python @code{format()}
2337 syntax.")
2338 (license license:x11)))
2339
2340 (define-public python-polib
2341 (package
2342 (name "python-polib")
2343 (version "1.1.0")
2344 (source (origin
2345 (method url-fetch)
2346 (uri (pypi-uri "polib" version))
2347 (sha256
2348 (base32
2349 "0aikb8gcarhifn3sadrbbs5czagih9hjv250gsrgy9v1d49pvn7s"))))
2350 (build-system python-build-system)
2351 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
2352 (synopsis "Manipulate, create and modify gettext files")
2353 (description "Polib can manipulate any gettext format (po, pot and mo)
2354 files. It can be used to create po files from scratch or to modify
2355 existing ones.")
2356 (license license:expat)))
2357
2358 (define-public python2-polib
2359 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
2360 (package/inherit base
2361 (arguments `(,@(package-arguments base)
2362 ;; Tests don't work with python2.
2363 #:tests? #f)))))
2364
2365 (define-public python-poyo
2366 (package
2367 (name "python-poyo")
2368 (version "0.5.0")
2369 (source
2370 (origin
2371 (method url-fetch)
2372 (uri (pypi-uri "poyo" version))
2373 (sha256
2374 (base32
2375 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
2376 (build-system python-build-system)
2377 (home-page "https://github.com/hackebrot/poyo")
2378 (synopsis "Lightweight YAML Parser for Python")
2379 (description
2380 "This package provides a lightweight YAML Parser for Python. It supports
2381 only a chosen subset of the YAML format that is required to parse cookiecutter
2382 user configuration files. It does not have support for serializing into YAML
2383 and is not compatible with JSON.")
2384 (license license:expat)))
2385
2386 (define-public scons
2387 (package
2388 (name "scons")
2389 (version "3.0.4")
2390 (source (origin
2391 (method git-fetch)
2392 (uri (git-reference
2393 (url "https://github.com/SCons/scons")
2394 (commit version)))
2395 (file-name (git-file-name name version))
2396 (sha256
2397 (base32
2398 "1xy8jrwz87y589ihcld4hv7wn122sjbz914xn8h50ww77wbhk8hn"))))
2399 (build-system python-build-system)
2400 (arguments
2401 `(#:use-setuptools? #f ; still relies on distutils
2402 #:tests? #f ; no 'python setup.py test' command
2403 #:phases
2404 (modify-phases %standard-phases
2405 (add-before 'build 'bootstrap
2406 (lambda _
2407 (substitute* "src/engine/SCons/compat/__init__.py"
2408 (("sys.modules\\[new\\] = imp.load_module\\(old, \\*imp.find_module\\(old\\)\\)")
2409 "sys.modules[new] = __import__(old)"))
2410 (substitute* "src/engine/SCons/Platform/__init__.py"
2411 (("mod = imp.load_module\\(full_name, file, path, desc\\)")
2412 "mod = __import__(full_name)"))
2413 (invoke "python" "bootstrap.py" "build/scons" "DEVELOPER=guix")
2414 (chdir "build/scons")
2415 #t)))))
2416 (home-page "https://scons.org/")
2417 (synopsis "Software construction tool written in Python")
2418 (description
2419 "SCons is a software construction tool. Think of SCons as an improved,
2420 cross-platform substitute for the classic Make utility with integrated
2421 functionality similar to autoconf/automake and compiler caches such as ccache.
2422 In short, SCons is an easier, more reliable and faster way to build
2423 software.")
2424 (license license:x11)))
2425
2426 (define-public scons-python2
2427 (package
2428 (inherit (package-with-python2 scons))
2429 (name "scons-python2")))
2430
2431 (define-public python-extension-helpers
2432 (package
2433 (name "python-extension-helpers")
2434 (version "0.1")
2435 (source
2436 (origin
2437 (method url-fetch)
2438 (uri (pypi-uri "extension-helpers" version))
2439 (sha256
2440 (base32 "10iqjzmya2h4sk765dlm1pbqypwlqyh8rw59a5m9i63d3klnz2mc"))))
2441 (build-system python-build-system)
2442 (native-inputs
2443 `(("coverage" ,python-coverage)
2444 ("pytest" ,python-pytest-astropy)
2445 ("pytest-cov" ,python-pytest-cov)
2446 ("setuptools-scm" ,python-setuptools-scm)))
2447 (home-page "https://github.com/astropy/astropy-helpers")
2448 (synopsis
2449 "Utilities for building and installing packages in the Astropy ecosystem")
2450 (description
2451 "The extension-helpers package includes many build, installation, and
2452 documentation-related tools used by the Astropy project.")
2453 (license license:bsd-3)))
2454
2455 (define-public python-extras
2456 (package
2457 (name "python-extras")
2458 (version "1.0.0")
2459 (source
2460 (origin
2461 (method url-fetch)
2462 (uri (pypi-uri "extras" version))
2463 (sha256
2464 (base32
2465 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
2466 (build-system python-build-system)
2467 (arguments
2468 ;; FIXME: Circular dependency on testtools.
2469 '(#:tests? #f))
2470 (home-page "https://github.com/testing-cabal/extras")
2471 (synopsis "Useful extensions to the Python standard library")
2472 (description
2473 "Extras is a set of extensions to the Python standard library.")
2474 (license license:expat)))
2475
2476 (define-public python2-extras
2477 (package-with-python2 python-extras))
2478
2479 (define-public python-mimeparse
2480 (package
2481 (name "python-mimeparse")
2482 (version "1.6.0")
2483 (source
2484 (origin
2485 (method url-fetch)
2486 (uri (pypi-uri "python-mimeparse" version))
2487 (sha256
2488 (base32
2489 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
2490 (build-system python-build-system)
2491 (arguments
2492 '(#:phases
2493 (modify-phases %standard-phases
2494 (replace 'check
2495 (lambda _
2496 (invoke "./mimeparse_test.py"))))))
2497 (home-page
2498 "https://github.com/dbtsai/python-mimeparse")
2499 (synopsis "Python library for parsing MIME types")
2500 (description
2501 "Mimeparse provides basic functions for parsing MIME type names and
2502 matching them against a list of media-ranges.")
2503 (license license:expat)))
2504
2505 (define-public python2-mimeparse
2506 (package-with-python2 python-mimeparse))
2507
2508 (define-public python-miniboa
2509 (package
2510 (name "python-miniboa")
2511 (version "1.0.7")
2512 (source
2513 (origin
2514 (method url-fetch)
2515 (uri (pypi-uri "miniboa" version))
2516 (sha256
2517 (base32
2518 "09jh3pn4rh7kh7jayanf8jzy6gp03791b5a193w6148cf3i6k9m3"))))
2519 (build-system python-build-system)
2520 (home-page "https://github.com/shmup/miniboa")
2521 (synopsis "Simple, single-threaded Telnet server")
2522 (description
2523 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
2524 server.")
2525 (license license:asl2.0)))
2526
2527 (define-public python2-miniboa
2528 (package-with-python2 python-miniboa))
2529
2530 (define-public python-pafy
2531 (package
2532 (name "python-pafy")
2533 (version "0.5.3.1")
2534 (source
2535 (origin
2536 (method url-fetch)
2537 (uri (pypi-uri "pafy" version))
2538 (sha256
2539 (base32
2540 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
2541 (build-system python-build-system)
2542 (arguments
2543 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
2544 (propagated-inputs
2545 ;; Youtube-dl is a python package which is imported in the file
2546 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
2547 `(("youtube-dl" ,youtube-dl)))
2548 (home-page "https://np1.github.io/pafy/")
2549 (synopsis "Retrieve YouTube content and metadata")
2550 (description
2551 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
2552 (license license:lgpl3+)))
2553
2554 (define-public python2-funcsigs
2555 (package
2556 (name "python2-funcsigs")
2557 (version "1.0.2")
2558 (source (origin
2559 (method url-fetch)
2560 (uri (pypi-uri "funcsigs" version))
2561 (sha256
2562 (base32
2563 "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7"))))
2564 (build-system python-build-system)
2565 (arguments
2566 `(#:python ,python-2))
2567 (native-inputs
2568 `(("python2-unittest2" ,python2-unittest2)))
2569 (home-page "http://funcsigs.readthedocs.org")
2570 (synopsis "Python function signatures from PEP362")
2571 (description
2572 "Backport of @code{funcsigs} which was introduced in Python 3.3.")
2573 (license license:asl2.0)))
2574
2575 (define-public python2-funcsigs-bootstrap
2576 (package
2577 (inherit python2-funcsigs)
2578 (name "python2-funcsigs-bootstrap")
2579 (native-inputs `())
2580 (arguments
2581 `(#:tests? #f
2582 ,@(package-arguments python2-funcsigs)))))
2583
2584 (define-public python-py
2585 (package
2586 (name "python-py")
2587 (version "1.8.1")
2588 (source
2589 (origin
2590 (method url-fetch)
2591 (uri (pypi-uri "py" version))
2592 (sha256
2593 (base32
2594 "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy"))))
2595 (build-system python-build-system)
2596 (arguments
2597 ;; FIXME: "ImportError: 'test' module incorrectly imported from
2598 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
2599 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
2600 ;; Is this module globally installed?"
2601 '(#:tests? #f))
2602 (native-inputs
2603 `(("python-setuptools-scm" ,python-setuptools-scm)))
2604 (home-page "https://github.com/pytest-dev/py")
2605 (synopsis "Python library for parsing, I/O, instrospection, and logging")
2606 (description
2607 "Py is a Python library for file name parsing, .ini file parsing, I/O,
2608 code introspection, and logging.")
2609 (license license:expat)))
2610
2611 (define-public python-py-next
2612 (package
2613 (inherit python-py)
2614 (version "1.9.0")
2615 (source
2616 (origin
2617 (method url-fetch)
2618 (uri (pypi-uri "py" version))
2619 (sha256
2620 (base32
2621 "0hpk0gzd4v1pcnq7zinwg5n219czi23qghcswykqskkbwly8i9lw"))))))
2622
2623 (define-public python2-py
2624 (package-with-python2 python-py))
2625
2626 ;; Recent versions of python-fixtures and python-testrepository need
2627 ;; python-pbr for packaging, which itself needs these two packages for
2628 ;; testing.
2629 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2630 ;; same source, just without any test dependencies and with tests disabled.
2631 ;; python-pbr-minmal is then used to package python-fixtures and
2632 ;; python-testrepository.
2633 ;; Strictly speaking we currently could remove the test-requirements from the
2634 ;; normal python-pbr package (and save this package) since test are disabled
2635 ;; there anyway. But this may change in future.
2636 (define-public python-pbr-minimal
2637 (package
2638 (name "python-pbr-minimal")
2639 (version "3.0.1")
2640 (source
2641 (origin
2642 (method url-fetch)
2643 (uri (pypi-uri "pbr" version))
2644 (sha256
2645 (base32
2646 "14fs5acnalnb3h62s7q7av239j541fk0n0z0lawh4h09b1s93s6p"))))
2647 (build-system python-build-system)
2648 (arguments
2649 `(#:tests? #f))
2650 (home-page "https://docs.openstack.org/pbr/latest/")
2651 (synopsis "Minimal build of python-pbr used for bootstrapping")
2652 (description
2653 "Used only for bootstrapping python2-pbr, you should not need this.")
2654 (license license:asl2.0)))
2655
2656 (define-public python-pbr
2657 (package
2658 (inherit python-pbr-minimal)
2659 (name "python-pbr")
2660 (arguments
2661 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2662 (propagated-inputs
2663 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2664 (native-inputs
2665 `(("python-fixtures" ,python-fixtures-bootstrap)
2666 ;; discover, coverage, hacking, subunit
2667 ("python-mock" ,python-mock)
2668 ("python-six" ,python-six)
2669 ("python-sphinx" ,python-sphinx)
2670 ("python-testrepository" ,python-testrepository-bootstrap)
2671 ("python-testresources" ,python-testresources-bootstrap)
2672 ("python-testscenarios" ,python-testscenarios-bootstrap)
2673 ("python-testtools" ,python-testtools-bootstrap)
2674 ("python-virtualenv" ,python-virtualenv)))
2675 (synopsis "Enhance the default behavior of Python’s setuptools")
2676 (description
2677 "Python Build Reasonableness (PBR) is a library that injects some useful
2678 and sensible default behaviors into your setuptools run. It will set
2679 versions, process requirements files and generate AUTHORS and ChangeLog file
2680 from git information.
2681 ")))
2682
2683 (define-public python-pyrsistent
2684 (package
2685 (name "python-pyrsistent")
2686 (version "0.16.0")
2687 (home-page "https://github.com/tobgu/pyrsistent")
2688 (source (origin
2689 (method url-fetch)
2690 (uri (pypi-uri "pyrsistent" version))
2691 (sha256
2692 (base32
2693 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
2694 (build-system python-build-system)
2695 (arguments
2696 '(#:phases (modify-phases %standard-phases
2697 ;; The package works fine with newer Pytest and Hypothesis, but
2698 ;; has pinned older versions to stay compatible with Python 2.
2699 (add-before 'check 'loosen-pytest-requirement
2700 (lambda _
2701 (substitute* "setup.py"
2702 (("pytest<5") "pytest")
2703 (("hypothesis<5") "hypothesis"))
2704 #t)))))
2705 (native-inputs
2706 `(("python-hypothesis" ,python-hypothesis)
2707 ("python-pytest" ,python-pytest)
2708 ("python-pytest-runner" ,python-pytest-runner)))
2709 (propagated-inputs
2710 `(("python-six" ,python-six)))
2711 (synopsis "Persistent data structures for Python")
2712 (description
2713 "Pyrsistent is a number of persistent collections (by some referred to as
2714 functional data structures). Persistent in the sense that they are immutable.
2715
2716 All methods on a data structure that would normally mutate it instead return a
2717 new copy of the structure containing the requested updates. The original
2718 structure is left untouched.")
2719 (license license:expat)))
2720
2721 (define-public python2-pyrsistent
2722 (package-with-python2 python-pyrsistent))
2723
2724 (define-public python-exif-read
2725 (package
2726 (name "python-exif-read")
2727 (version "2.1.2")
2728 (source (origin
2729 (method url-fetch)
2730 (uri (pypi-uri "ExifRead" version))
2731 (sha256
2732 (base32
2733 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2734 (build-system python-build-system)
2735 (arguments `(#:tests? #f)) ; no tests
2736 (home-page "https://github.com/ianare/exif-py")
2737 (synopsis "Python library to extract EXIF data from image files")
2738 (description
2739 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2740 files.")
2741 (license license:bsd-3)))
2742
2743 (define-public python2-exif-read
2744 (package-with-python2 python-exif-read))
2745
2746 (define-public python-pyld
2747 (package
2748 (name "python-pyld")
2749 (version "1.0.5")
2750 (source (origin
2751 (method url-fetch)
2752 (uri (pypi-uri "PyLD" version))
2753 (sha256
2754 (base32
2755 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
2756 (build-system python-build-system)
2757 (home-page "https://github.com/digitalbazaar/pyld")
2758 (synopsis "Python implementation of the JSON-LD specification")
2759 (description
2760 "PyLD is an implementation of the JSON-LD specification.")
2761 (license license:bsd-3)))
2762
2763 (define-public python2-pyld
2764 (package-with-python2 python-pyld))
2765
2766 (define-public python-cli-helpers
2767 (package
2768 (name "python-cli-helpers")
2769 (version "2.0.1")
2770 (source
2771 (origin
2772 ;; There's no source tarball on PyPI.
2773 (method git-fetch)
2774 (uri (git-reference
2775 (url "https://github.com/dbcli/cli_helpers")
2776 (commit (string-append "v" version))))
2777 (file-name (git-file-name name version))
2778 (sha256
2779 (base32 "1bg2iw9l5dip0kbs00hajdk2v18wvhssbnq8hdf71278qf0wks5l"))))
2780 (build-system python-build-system)
2781 (native-inputs
2782 `(("python-pytest" ,python-pytest)))
2783 (propagated-inputs
2784 `(("python-wcwidth" ,python-wcwidth)
2785 ("python-configobj" ,python-configobj)
2786 ("python-tabulate" ,python-tabulate)
2787 ("python-terminaltables" ,python-terminaltables)))
2788 (home-page "https://github.com/dbcli/cli_helpers")
2789 (synopsis "Helpers for building command-line apps")
2790 (description
2791 "CLI Helpers is a Python package that makes it easy to perform common
2792 tasks when building command-line apps. It's a helper library for command-line
2793 interfaces.")
2794 (license license:bsd-3)))
2795
2796 (define-public python-click
2797 (package
2798 (name "python-click")
2799 (version "7.1.2")
2800 (source
2801 (origin
2802 (method url-fetch)
2803 (uri (pypi-uri "click" version))
2804 (sha256
2805 (base32
2806 "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj"))))
2807 (build-system python-build-system)
2808 (arguments
2809 `(#:phases
2810 (modify-phases %standard-phases
2811 (add-after 'unpack 'fix-paths
2812 (lambda* (#:key inputs #:allow-other-keys)
2813 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2814 "cross-libc" "libc"))))
2815 (substitute* "src/click/_unicodefun.py"
2816 (("'locale'")
2817 (string-append "'" glibc "/bin/locale'"))))
2818 #t))
2819 (replace 'check
2820 (lambda _
2821 (setenv "PYTHONPATH" (string-append "./src:" (getenv "PYTHONPATH")))
2822 (invoke "python" "-m" "pytest"))))))
2823 (native-inputs
2824 `(("python-pytest" ,python-pytest)))
2825 (home-page "https://palletsprojects.com/p/click/")
2826 (synopsis "Command line library for Python")
2827 (description
2828 "Click is a Python package for creating command line interfaces in a
2829 composable way with as little code as necessary. Its name stands for
2830 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2831 with sensible defaults out of the box.")
2832 (license license:bsd-3)))
2833
2834 (define-public python2-click
2835 (package-with-python2 python-click))
2836
2837 (define-public python-click-5
2838 (package (inherit python-click)
2839 (name "python-click")
2840 (version "5.1")
2841 (source
2842 (origin
2843 (method url-fetch)
2844 (uri (pypi-uri "click" version))
2845 (sha256
2846 (base32 "0njsm0wn31l21bi118g5825ma5sa3rwn7v2x4wjd7yiiahkri337"))))
2847 (arguments `())))
2848
2849 (define-public python-vcversioner
2850 (package
2851 (name "python-vcversioner")
2852 (version "2.16.0.0")
2853 (source
2854 (origin
2855 (method url-fetch)
2856 (uri (pypi-uri "vcversioner" version))
2857 (sha256
2858 (base32
2859 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2860 (build-system python-build-system)
2861 (synopsis "Python library for version number discovery")
2862 (description "Vcversioner is a Python library that inspects tagging
2863 information in a variety of version control systems in order to discover
2864 version numbers.")
2865 (home-page "https://github.com/habnabit/vcversioner")
2866 (license license:isc)))
2867
2868 (define-public python2-vcversioner
2869 (package-with-python2 python-vcversioner))
2870
2871 (define-public python-jdcal
2872 (package
2873 (name "python-jdcal")
2874 (version "1.4")
2875 (source
2876 (origin
2877 (method url-fetch)
2878 (uri (pypi-uri "jdcal" version))
2879 (sha256
2880 (base32
2881 "1ja6j2xq97bsl6rv09mhdx7n0xnrsfx0mj5xqza0mxghqmkm02pa"))))
2882 (build-system python-build-system)
2883 (arguments
2884 `(#:phases (modify-phases %standard-phases
2885 (replace 'check
2886 (lambda _
2887 (invoke "pytest"))))))
2888 (native-inputs
2889 `(("python-pytest" ,python-pytest)))
2890 (home-page "https://github.com/phn/jdcal")
2891 (synopsis "Functions to convert between Julian dates Gregorian dates")
2892 (description "This Python library provides functions for converting
2893 between Julian dates and Gregorian dates.")
2894 (license license:bsd-2)))
2895
2896 (define-public python2-jdcal
2897 (package-with-python2 python-jdcal))
2898
2899 (define-public python-jsondiff
2900 (package
2901 (name "python-jsondiff")
2902 (version "1.2.0")
2903 (source
2904 (origin
2905 (method url-fetch)
2906 (uri (pypi-uri "jsondiff" version))
2907 (sha256
2908 (base32
2909 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
2910 (build-system python-build-system)
2911 (native-inputs
2912 `(("python-nose" ,python-nose)
2913 ("python-nose-random" ,python-nose-random)))
2914 (home-page
2915 "https://github.com/fzumstein/jsondiff")
2916 (synopsis "Compare JSON and JSON-like structures in Python")
2917 (description "@code{jsondiff} is a Python library which lets you
2918 compare, diff, and patch JSON and JSON-like structures in Python.")
2919 (license license:expat)))
2920
2921 (define-public python-jsonschema
2922 (package
2923 (name "python-jsonschema")
2924 (version "3.2.0")
2925 (source (origin
2926 (method url-fetch)
2927 (uri (pypi-uri "jsonschema" version))
2928 (sha256
2929 (base32
2930 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
2931 (build-system python-build-system)
2932 (arguments
2933 '(#:phases
2934 (modify-phases %standard-phases
2935 (replace 'check
2936 (lambda* (#:key inputs outputs #:allow-other-keys)
2937 (add-installed-pythonpath inputs outputs)
2938 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
2939 (invoke "trial" "jsonschema"))))))
2940 (native-inputs
2941 `(("python-setuptools_scm" ,python-setuptools-scm)
2942 ("python-twisted" ,python-twisted)))
2943 (propagated-inputs
2944 `(("python-attrs" ,python-attrs)
2945 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
2946 ("python-pyrsistent" ,python-pyrsistent)
2947 ("python-six" ,python-six)))
2948 (home-page "https://github.com/Julian/jsonschema")
2949 (synopsis "Implementation of JSON Schema for Python")
2950 (description
2951 "Jsonschema is an implementation of JSON Schema for Python.")
2952 (license license:expat)
2953 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2954
2955 (define-public python2-jsonschema
2956 (let ((jsonschema (package-with-python2
2957 (strip-python2-variant python-jsonschema))))
2958 (package/inherit jsonschema
2959 (propagated-inputs
2960 `(("python2-functools32" ,python2-functools32)
2961 ,@(package-propagated-inputs jsonschema))))))
2962
2963 (define-public python-schema
2964 (package
2965 (name "python-schema")
2966 (version "0.6.6")
2967 (source
2968 (origin
2969 (method url-fetch)
2970 (uri (pypi-uri "schema" version))
2971 (sha256
2972 (base32
2973 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
2974 (build-system python-build-system)
2975 (native-inputs
2976 `(("python-pytest" ,python-pytest)))
2977 (home-page "https://github.com/keleshev/schema")
2978 (synopsis "Simple data validation library")
2979 (description
2980 "@code{python-schema} is a library for validating Python data
2981 structures, such as those obtained from config-files, forms, external
2982 services or command-line parsing, converted from JSON/YAML (or
2983 something else) to Python data-types.")
2984 (license license:psfl)))
2985
2986 (define-public python2-schema
2987 (package-with-python2 python-schema))
2988
2989 (define-public python-schema-0.5
2990 (package (inherit python-schema)
2991 (version "0.5.0")
2992 (source
2993 (origin
2994 (method url-fetch)
2995 (uri (pypi-uri "schema" version))
2996 (sha256
2997 (base32
2998 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
2999
3000 (define-public python2-schema-0.5
3001 (package-with-python2 python-schema-0.5))
3002
3003 (define-public python-kitchen
3004 (package
3005 (name "python-kitchen")
3006 (version "1.2.5")
3007 (source
3008 (origin
3009 (method url-fetch)
3010 (uri (pypi-uri "kitchen" version))
3011 (sha256
3012 (base32
3013 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
3014 (build-system python-build-system)
3015 (propagated-inputs
3016 `(("python-chardet" ,python-chardet)))
3017 (home-page "https://github.com/fedora-infra/kitchen")
3018 (synopsis "Python API for snippets")
3019 (description "@code{kitchen} module provides a python API for all sorts of
3020 little useful snippets of code that everybody ends up writing for their projects
3021 but never seem big enough to build an independent release. Use kitchen and stop
3022 cutting and pasting that code over and over.")
3023 (license (list license:lgpl2.1+
3024 ;; subprocess.py, test_subprocess.py,
3025 ;; kitchen/pycompat25/defaultdict.py:
3026 license:psfl))))
3027
3028 (define-public python2-kitchen
3029 (package-with-python2 python-kitchen))
3030
3031 (define-public python-unidecode
3032 (package
3033 (name "python-unidecode")
3034 (version "1.1.1")
3035 (source (origin
3036 (method url-fetch)
3037 (uri (pypi-uri "Unidecode" version))
3038 (sha256
3039 (base32
3040 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
3041 (build-system python-build-system)
3042 (home-page "https://pypi.org/project/Unidecode/")
3043 (synopsis "ASCII transliterations of Unicode text")
3044 (description
3045 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
3046 useful when integrating with legacy code that doesn't support Unicode, or for
3047 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
3048 machine identifiers from human-readable Unicode strings that should still be
3049 somewhat intelligible.")
3050 (license license:gpl2+)))
3051
3052 (define-public python2-unidecode
3053 (package-with-python2 python-unidecode))
3054
3055 (define-public python-text-unidecode
3056 (package
3057 (name "python-text-unidecode")
3058 (version "1.3")
3059 (source (origin
3060 (method url-fetch)
3061 (uri (pypi-uri "text-unidecode" version))
3062 (sha256
3063 (base32
3064 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
3065 (build-system python-build-system)
3066 (arguments
3067 '(#:phases (modify-phases %standard-phases
3068 (replace 'check
3069 (lambda _
3070 (setenv "PYTHONPATH"
3071 (string-append "./build/lib:"
3072 (getenv "PYTHONPATH")))
3073 (invoke "pytest" "-vv"))))))
3074 (native-inputs
3075 `(("python-pytest" ,python-pytest)))
3076 (home-page "https://github.com/kmike/text-unidecode/")
3077 (synopsis "Decode Unicode data")
3078 (description
3079 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
3080 Perl library. It can create ASCII representations of Unicode data. In general
3081 users should prefer the @code{python-unidecode} package which offers better
3082 memory usage and transliteration quality.")
3083 ;; The user can choose either license.
3084 (license (list license:clarified-artistic license:gpl2+))))
3085
3086 (define-public python2-text-unidecode
3087 (package-with-python2 python-text-unidecode))
3088
3089 (define-public python-pyjwt
3090 (package
3091 (name "python-pyjwt")
3092 (version "1.7.1")
3093 (source
3094 (origin
3095 (method url-fetch)
3096 (uri (pypi-uri "PyJWT" version))
3097 (sha256
3098 (base32
3099 "15hflax5qkw1v6nssk1r0wkj83jgghskcmn875m3wgvpzdvajncd"))
3100 (modules '((guix build utils)))
3101 (snippet
3102 '(begin
3103 (for-each delete-file-recursively
3104 (find-files "." "\\.pyc$"))
3105 #t))))
3106 (build-system python-build-system)
3107 (arguments
3108 '(#:phases (modify-phases %standard-phases
3109 (replace 'check
3110 (lambda _
3111 ;; Mimic upstream commit 3a20892442b34c7 to get
3112 ;; rid of dependency on pytest-runner < 5.0.
3113 ;; Remove substitution for PyJWT > 1.7.1.
3114 (substitute* "setup.py"
3115 ((".*pytest-runner.*")
3116 ""))
3117 (invoke "pytest" "-vv"))))))
3118 (native-inputs
3119 `(("python-pytest" ,python-pytest)
3120 ("python-pytest-cov" ,python-pytest-cov)))
3121 (home-page "https://github.com/progrium/pyjwt")
3122 (synopsis "JSON Web Token implementation in Python")
3123 (description
3124 "PyJWT is a JSON Web Token implementation written in Python.")
3125 (license license:expat)))
3126
3127 (define-public python2-pyjwt
3128 (package-with-python2 python-pyjwt))
3129
3130 (define-public python-pykka
3131 (package
3132 (name "python-pykka")
3133 (version "1.2.1")
3134 (source
3135 (origin
3136 (method url-fetch)
3137 (uri (pypi-uri "Pykka" version))
3138 (sha256
3139 (base32
3140 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
3141 (build-system python-build-system)
3142 (native-inputs
3143 `(("python-mock" ,python-mock)
3144 ("python-nose" ,python-nose)
3145 ("python-gevent" ,python-gevent)
3146 ("python-eventlet" ,python-eventlet)))
3147 (home-page "https://www.pykka.org/")
3148 (synopsis "Pykka is a Python implementation of the actor model")
3149 (description
3150 "Pykka is a Python implementation of the actor model.
3151 The actor model introduces some simple rules to control the sharing
3152 of state and cooperation between execution units, which makes it
3153 easier to build concurrent applications.")
3154 (license license:asl2.0)))
3155
3156 (define-public python-pymsgbox
3157 (package
3158 (name "python-pymsgbox")
3159 (version "1.0.6")
3160 (source
3161 (origin
3162 (method git-fetch)
3163 (uri (git-reference
3164 ;; LICENSE.txt is not present on pypi
3165 (url "https://github.com/asweigart/PyMsgBox")
3166 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
3167 (file-name (git-file-name name version))
3168 (sha256
3169 (base32
3170 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
3171 (arguments
3172 ;; Circular dependency to run tests:
3173 ;; Tests need pyautogui, which depends on pymsgbox.
3174 '(#:tests? #f))
3175 (build-system python-build-system)
3176 (home-page "https://github.com/asweigart/PyMsgBox")
3177 (synopsis "Python module for JavaScript-like message boxes")
3178 (description
3179 "PyMsgBox is a simple, cross-platform, pure Python module for
3180 JavaScript-like message boxes. Types of dialog boxes include:
3181 @enumerate
3182 @item alert
3183 @item confirm
3184 @item prompt
3185 @item password
3186 @end enumerate
3187 ")
3188 (license license:bsd-3)))
3189
3190 (define-public python-pympler
3191 (package
3192 (name "python-pympler")
3193 (home-page "https://pythonhosted.org/Pympler/")
3194 (version "0.8")
3195 (source (origin
3196 (method url-fetch)
3197 (uri (pypi-uri "Pympler" version))
3198 (sha256
3199 (base32
3200 "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
3201 (build-system python-build-system)
3202 (arguments
3203 `(#:phases (modify-phases %standard-phases
3204 (delete 'check)
3205 (add-after 'install 'check
3206 (lambda* (#:key inputs outputs #:allow-other-keys)
3207 (add-installed-pythonpath inputs outputs)
3208 (invoke "python" "setup.py" "test"))))))
3209 (synopsis "Measure, monitor and analyze memory behavior")
3210 (description
3211 "Pympler is a development tool to measure, monitor and analyze
3212 the memory behavior of Python objects in a running Python application.
3213
3214 By pympling a Python application, detailed insight in the size and the
3215 lifetime of Python objects can be obtained. Undesirable or unexpected
3216 runtime behavior like memory bloat and other @samp{pymples} can easily
3217 be identified.
3218
3219 A web profiling frontend exposes process statistics, garbage
3220 visualisation and class tracker statistics.")
3221 (license license:asl2.0)))
3222
3223 (define-public python2-pympler
3224 (package-with-python2 python-pympler))
3225
3226 (define-public python-itsdangerous
3227 (package
3228 (name "python-itsdangerous")
3229 (version "1.1.0")
3230 (source
3231 (origin
3232 (method url-fetch)
3233 (uri (pypi-uri "itsdangerous" version))
3234 (sha256
3235 (base32
3236 "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj"))))
3237 (build-system python-build-system)
3238 (home-page "https://palletsprojects.com/p/itsdangerous/")
3239 (synopsis "Python library for passing data to/from untrusted environments")
3240 (description
3241 "Itsdangerous provides various helpers to pass trusted data to untrusted
3242 environments and back.")
3243 (license license:bsd-3)))
3244
3245 (define-public python2-itsdangerous
3246 (package-with-python2 python-itsdangerous))
3247
3248 (define-public python-pyyaml
3249 (package
3250 (name "python-pyyaml")
3251 (version "5.3.1")
3252 (source
3253 (origin
3254 (method url-fetch)
3255 (uri (pypi-uri "PyYAML" version))
3256 (sha256
3257 (base32
3258 "0pb4zvkfxfijkpgd1b86xjsqql97ssf1knbd1v53wkg1qm9cgsmq"))))
3259 (build-system python-build-system)
3260 (inputs
3261 `(("libyaml" ,libyaml)))
3262 (home-page "https://pyyaml.org")
3263 (synopsis "YAML parser and emitter for Python")
3264 (description
3265 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
3266 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
3267 API, and sensible error messages. PyYAML supports standard YAML tags and
3268 provides Python-specific tags that represent an arbitrary Python object.")
3269 (license license:expat)))
3270
3271 (define-public python2-pyyaml
3272 (package-with-python2 python-pyyaml))
3273
3274 (define-public python-vine
3275 (package
3276 (name "python-vine")
3277 (version "1.1.4")
3278 (source
3279 (origin
3280 (method url-fetch)
3281 (uri (pypi-uri "vine" version))
3282 (sha256
3283 (base32
3284 "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
3285 (build-system python-build-system)
3286 (native-inputs
3287 `(("python-pytest" ,python-pytest)
3288 ("python-case" ,python-case)))
3289 (home-page "https://github.com/celery/vine")
3290 (synopsis "Promises for Python")
3291 (description
3292 "@code{vine} provides a special implementation of promises in that it can
3293 be used both for \"promise of a value\" and lazy evaluation. The biggest
3294 upside for this is that everything in a promise can also be a promise,
3295 e.g. filters, callbacks and errbacks can all be promises.")
3296 (license license:bsd-3)))
3297
3298 (define-public python-virtualenv
3299 (package
3300 (name "python-virtualenv")
3301 (version "20.2.1")
3302 (source
3303 (origin
3304 (method url-fetch)
3305 (uri (pypi-uri "virtualenv" version))
3306 (sha256
3307 (base32
3308 "1rd6wmymsgv0cdsn50jwybcvbbslzym3mzffcjbl42l8br9cgap0"))))
3309 (build-system python-build-system)
3310 (native-inputs
3311 `(("python-mock" ,python-mock)
3312 ("python-pytest" ,python-pytest)
3313 ;; NOTE: guix lint remarks that "python-setuptools should probably not
3314 ;; be an input at all". However, removing the input makes the build error:
3315 ;; File "setup.py", line 4, in <module>
3316 ;; raise RuntimeError("setuptools >= 41 required to build")
3317 ("python-setuptools" ,python-setuptools)
3318 ("python-setuptools-scm" ,python-setuptools-scm)))
3319 (propagated-inputs
3320 `(("python-appdirs" ,python-appdirs)
3321 ("python-distlib" ,python-distlib/next)
3322 ("python-filelock" ,python-filelock)
3323 ("python-six" ,python-six)
3324 ("python-importlib-metadata" ,python-importlib-metadata)))
3325 (home-page "https://virtualenv.pypa.io/")
3326 (synopsis "Virtual Python environment builder")
3327 (description
3328 "Virtualenv is a tool to create isolated Python environments.")
3329 (license license:expat)))
3330
3331 (define-public python-markupsafe
3332 (package
3333 (name "python-markupsafe")
3334 (version "1.1.1")
3335 (source
3336 (origin
3337 (method url-fetch)
3338 (uri (pypi-uri "MarkupSafe" version))
3339 (sha256
3340 (base32
3341 "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
3342 (build-system python-build-system)
3343 (arguments
3344 `(#:modules ((ice-9 ftw)
3345 (srfi srfi-1)
3346 (srfi srfi-26)
3347 (guix build utils)
3348 (guix build python-build-system))
3349 #:phases (modify-phases %standard-phases
3350 (replace 'check
3351 (lambda _
3352 (let ((cwd (getcwd))
3353 (libdir (find (cut string-prefix? "lib." <>)
3354 (scandir "build"))))
3355 (setenv "PYTHONPATH"
3356 (string-append cwd "/build/" libdir ":"
3357 (getenv "PYTHONPATH")))
3358 (invoke "pytest" "-vv")))))))
3359 (native-inputs
3360 `(("python-pytest" ,python-pytest)))
3361 (home-page "https://github.com/mitsuhiko/markupsafe")
3362 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
3363 (description
3364 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
3365 for Python.")
3366 (license license:bsd-3)))
3367
3368 (define-public python2-markupsafe
3369 (package-with-python2 python-markupsafe))
3370
3371 (define-public python-jinja2
3372 (package
3373 (name "python-jinja2")
3374 (version "2.11.2")
3375 (source
3376 (origin
3377 (method url-fetch)
3378 (uri (pypi-uri "Jinja2" version))
3379 (sha256
3380 (base32
3381 "1c1v3djnr0ymp5xpy1h3h60abcaqxdlm4wsqmls9rxby88av5al9"))))
3382 (build-system python-build-system)
3383 (arguments
3384 '(#:phases (modify-phases %standard-phases
3385 (replace 'check
3386 (lambda* (#:key tests? #:allow-other-keys)
3387 (if tests?
3388 (begin
3389 (setenv "PYTHONPATH"
3390 (string-append "./build/lib:"
3391 (getenv "PYTHONPATH")))
3392 (invoke "pytest" "-vv"))
3393 (format #t "test suite not run~%"))
3394 #t)))))
3395 (native-inputs
3396 `(("python-pytest" ,python-pytest)))
3397 (propagated-inputs
3398 `(("python-markupsafe" ,python-markupsafe)))
3399 (home-page "http://jinja.pocoo.org/")
3400 (synopsis "Python template engine")
3401 (description
3402 "Jinja2 is a small but fast and easy to use stand-alone template engine
3403 written in pure Python.")
3404 (license license:bsd-3)))
3405
3406 (define-public python2-jinja2
3407 (package-with-python2 python-jinja2))
3408
3409 (define-public python-jinja2-time
3410 (package
3411 (name "python-jinja2-time")
3412 (version "0.2.0")
3413 (source
3414 (origin
3415 (method url-fetch)
3416 (uri (pypi-uri "jinja2-time" version))
3417 (sha256
3418 (base32
3419 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
3420 (build-system python-build-system)
3421 (propagated-inputs
3422 `(("python-arrow" ,python-arrow)
3423 ("python-jinja2" ,python-jinja2)))
3424 (home-page
3425 "https://github.com/hackebrot/jinja2-time")
3426 (synopsis "Jinja2 Extension for Dates and Times")
3427 (description
3428 "This package provides an extension for the template engine Jinja2. It
3429 adds a 'now' tag providing a convenient access to the arrow.now() API from
3430 templates. A format string can be provided to control the output.")
3431 (license license:expat)))
3432
3433 (define-public python-pystache
3434 (package
3435 (name "python-pystache")
3436 (version "0.5.4")
3437 (source (origin
3438 (method url-fetch)
3439 (uri (pypi-uri "pystache" version))
3440 (sha256
3441 (base32
3442 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
3443 (build-system python-build-system)
3444 (arguments
3445 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
3446 (home-page "http://defunkt.io/pystache/")
3447 (synopsis "Python logic-less template engine")
3448 (description
3449 "Pystache is a Python implementation of the framework agnostic,
3450 logic-free templating system Mustache.")
3451 (license license:expat)
3452 (properties `((python2-variant . ,(delay python2-pystache))))))
3453
3454 (define-public python2-pystache
3455 (let ((base (package-with-python2
3456 (strip-python2-variant python-pystache))))
3457 (package/inherit base
3458 (arguments
3459 `(#:python ,python-2
3460 #:phases
3461 (modify-phases %standard-phases
3462 (replace 'check
3463 (lambda _
3464 (invoke "python" "test_pystache.py")))))))))
3465
3466 (define-public python-joblib
3467 (package
3468 (name "python-joblib")
3469 (version "0.14.1")
3470 (source (origin
3471 (method url-fetch)
3472 (uri (pypi-uri "joblib" version))
3473 (sha256
3474 (base32
3475 "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))
3476 (build-system python-build-system)
3477 (arguments
3478 `(#:phases
3479 (modify-phases %standard-phases
3480 (replace 'check
3481 (lambda _ (invoke "pytest" "-v" "joblib"))))))
3482 (native-inputs
3483 `(("python-pytest" ,python-pytest)))
3484 (home-page "https://joblib.readthedocs.io/")
3485 (synopsis "Using Python functions as pipeline jobs")
3486 (description
3487 "Joblib is a set of tools to provide lightweight pipelining in Python.
3488 In particular, joblib offers: transparent disk-caching of the output values
3489 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3490 logging and tracing of the execution.")
3491 (license license:bsd-3)))
3492
3493 (define-public python2-joblib
3494 (package-with-python2 python-joblib))
3495
3496 (define-public python-daemon
3497 (package
3498 (name "python-daemon")
3499 (version "2.2.3")
3500 (source
3501 (origin
3502 (method url-fetch)
3503 (uri (pypi-uri "python-daemon" version))
3504 (sha256
3505 (base32
3506 "09fcjdjzk9ywmpnrj62iyxqgcygzdafsz41qlrk2dknzbagcmzmg"))))
3507 (build-system python-build-system)
3508 (arguments
3509 `(#:phases
3510 (modify-phases %standard-phases
3511 (add-before 'check 'disable-tests
3512 (lambda _
3513 ;; FIXME: Determine why test fails
3514 (substitute* "test/test_daemon.py"
3515 (("test_detaches_process_context")
3516 "skip_test_detaches_process_context"))
3517 #t)))))
3518 (propagated-inputs
3519 `(("python-lockfile" ,python-lockfile)))
3520 (native-inputs
3521 `(("python-unittest2" ,python-unittest2)
3522 ("python-testtools" ,python-testtools)
3523 ("python-testscenarios" ,python-testscenarios)
3524 ("python-mock" ,python-mock)
3525 ("python-docutils" ,python-docutils)))
3526 (home-page "https://pagure.io/python-daemon/")
3527 (synopsis "Python library for making a Unix daemon process")
3528 (description "Python-daemon is a library that assists a Python program to
3529 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
3530
3531 This library provides a @code{DaemonContext} class that manages the following
3532 important tasks for becoming a daemon process:
3533 @enumerate
3534 @item Detach the process into its own process group.
3535 @item Set process environment appropriate for running inside a chroot.
3536 @item Renounce suid and sgid privileges.
3537 @item Close all open file descriptors.
3538 @item Change the working directory, uid, gid, and umask.
3539 @item Set appropriate signal handlers.
3540 @item Open new file descriptors for stdin, stdout, and stderr.
3541 @item Manage a specified PID lock file.
3542 @item Register cleanup functions for at-exit processing.
3543 @end enumerate")
3544 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
3545 (license (list license:asl2.0 license:gpl3+))))
3546
3547 (define-public python-anytree
3548 (package
3549 (name "python-anytree")
3550 (version "2.8.0")
3551 (source (origin
3552 (method url-fetch)
3553 (uri (pypi-uri "anytree" version))
3554 (sha256
3555 (base32
3556 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
3557 (build-system python-build-system)
3558 (propagated-inputs
3559 `(("python-six" ,python-six)))
3560 (native-inputs
3561 `(;; For tests.
3562 ("graphviz" ,graphviz) ;for 'dot'
3563 ("python-nose" ,python-nose)))
3564 (home-page "https://github.com/c0fec0de/anytree")
3565 (synopsis "Lightweight tree data library")
3566 (description
3567 "@code{anytree} is a simple, lightweight, and extensible tree data
3568 structure for Python.")
3569 (license license:asl2.0)))
3570
3571 (define-public python-docutils
3572 (package
3573 (name "python-docutils")
3574 (version "0.16")
3575 (source
3576 (origin
3577 (method url-fetch)
3578 (uri (pypi-uri "docutils" version))
3579 (sha256
3580 (base32
3581 "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
3582 (build-system python-build-system)
3583 (arguments
3584 '(#:phases (modify-phases %standard-phases
3585 (replace 'check
3586 (lambda* (#:key tests? #:allow-other-keys)
3587 (if tests?
3588 (invoke "python" "test/alltests.py")
3589 (format #t "test suite not run~%"))
3590 #t)))))
3591 (home-page "http://docutils.sourceforge.net/")
3592 (synopsis "Python Documentation Utilities")
3593 (description
3594 "Docutils is a modular system for processing documentation into useful
3595 formats, such as HTML, XML, and LaTeX. It uses @dfn{reStructuredText}, an
3596 easy to use markup language, for input.
3597
3598 This package provides tools for converting @file{.rst} files to other formats
3599 via commands such as @command{rst2man}, as well as supporting Python code.")
3600 ;; Most of the source code is public domain, but some source files are
3601 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3602 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3603
3604 (define-public python2-docutils
3605 (package-with-python2 python-docutils))
3606
3607 ;; python2-sphinx fails its test suite with newer versions.
3608 (define-public python2-docutils-0.14
3609 (package
3610 (inherit python2-docutils)
3611 (version "0.14")
3612 (source (origin
3613 (method url-fetch)
3614 (uri (pypi-uri "docutils" version))
3615 (sha256
3616 (base32
3617 "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"))))))
3618
3619 (define-public python-restructuredtext-lint
3620 (package
3621 (name "python-restructuredtext-lint")
3622 (version "1.3.0")
3623 (source
3624 (origin
3625 (method url-fetch)
3626 (uri (pypi-uri "restructuredtext-lint" version))
3627 (sha256
3628 (base32
3629 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
3630 (build-system python-build-system)
3631 (arguments
3632 `(#:phases
3633 (modify-phases %standard-phases
3634 (delete 'check)
3635 (add-after 'install 'check
3636 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3637 (when tests?
3638 (add-installed-pythonpath inputs outputs)
3639 (invoke "nosetests" "-v"))
3640 #t)))))
3641 (propagated-inputs
3642 `(("python-docutils" ,python-docutils)))
3643 (native-inputs
3644 `(("python-nose" ,python-nose)))
3645 (home-page "https://github.com/twolfson/restructuredtext-lint")
3646 (synopsis "reStructuredText linter")
3647 (description "This package provides a linter for the reStructuredText
3648 format.")
3649 (license license:unlicense)))
3650
3651 (define-public python-doc8
3652 (package
3653 (name "python-doc8")
3654 (version "0.8.0")
3655 (source
3656 (origin
3657 (method url-fetch)
3658 (uri (pypi-uri "doc8" version))
3659 (sha256
3660 (base32
3661 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
3662 (build-system python-build-system)
3663 (arguments
3664 `(#:phases
3665 (modify-phases %standard-phases
3666 (delete 'check)
3667 (add-after 'install 'check
3668 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3669 (when tests?
3670 (add-installed-pythonpath inputs outputs)
3671 (invoke "pytest" "-v"))
3672 #t)))))
3673 (propagated-inputs
3674 `(("python-chardet" ,python-chardet)
3675 ("python-docutils" ,python-docutils)
3676 ("python-restructuredtext-lint" ,python-restructuredtext-lint)
3677 ("python-six" ,python-six)
3678 ("python-stevedore" ,python-stevedore)))
3679 (native-inputs
3680 `(("python-testtools" ,python-testtools)
3681 ("python-pytest" ,python-pytest)))
3682 (home-page "https://launchpad.net/doc8")
3683 (synopsis
3684 "Style checker for Sphinx (or other) RST documentation")
3685 (description
3686 "Doc8 is an opinionated style checker for reStructured Text and plain
3687 text styles of documentation.")
3688 (license license:asl2.0)))
3689
3690 (define-public python-pygments
3691 (package
3692 (name "python-pygments")
3693 (version "2.7.3")
3694 (source
3695 (origin
3696 (method url-fetch)
3697 (uri (pypi-uri "Pygments" version))
3698 (sha256
3699 (base32
3700 "05mps9r966r3dpqw6zrs1nlwjdf5y4960hl9m7abwb3qyfnarwyc"))))
3701 (replacement python-pygments/fixed)
3702 (build-system python-build-system)
3703 (arguments
3704 ;; FIXME: Tests require sphinx, which depends on this.
3705 '(#:tests? #f))
3706 (home-page "https://pygments.org/")
3707 (synopsis "Syntax highlighting")
3708 (description
3709 "Pygments is a syntax highlighting package written in Python.")
3710 (license license:bsd-2)
3711 (properties `((python2-variant . ,(delay python2-pygments))))))
3712
3713 (define python-pygments/fixed
3714 (package/inherit python-pygments
3715 (version "2.7.4")
3716 (source
3717 (origin
3718 (method url-fetch)
3719 (uri (pypi-uri "Pygments" version))
3720 (sha256
3721 (base32
3722 "0dy35ry5qa8dpklk4fkj9kfpw2qb4mh5ha9866kw30wf96dx0jfz"))))))
3723
3724 ;; Pygments 2.6 and later does not support Python 2.
3725 (define-public python2-pygments
3726 (let ((base (package-with-python2 (strip-python2-variant python-pygments))))
3727 (package
3728 (inherit base)
3729 (version "2.5.2")
3730 (source (origin
3731 (method url-fetch)
3732 (uri (pypi-uri "Pygments" version))
3733 (sha256
3734 (base32
3735 "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q")))))))
3736
3737 (define-public python-bump2version
3738 (package
3739 (name "python-bump2version")
3740 (version "1.0.1")
3741 (source
3742 (origin
3743 (method url-fetch)
3744 (uri (pypi-uri "bump2version" version))
3745 (sha256
3746 (base32 "1rinm4gv1fyh7xjv3v6r1p3zh5kl4ry2qifz5f7frx31mnzv4b3n"))))
3747 (build-system python-build-system)
3748 (arguments
3749 ;; XXX: Tests fail with "bumpversion: error: the following arguments are
3750 ;; required: --new-version".
3751 `(#:tests? #false))
3752 (home-page "https://github.com/c4urself/bump2version")
3753 (synopsis "Version-bump your software with a single command!")
3754 (description
3755 "This package provides a small command line tool to simplify releasing
3756 software by updating all version strings in your source code by the correct
3757 increment. It also creates commits and tags.")
3758 (license license:expat)))
3759
3760 (define-public python-bumpversion
3761 (package
3762 (name "python-bumpversion")
3763 (version "0.5.3")
3764 (source
3765 (origin
3766 (method url-fetch)
3767 (uri (pypi-uri "bumpversion" version))
3768 (sha256
3769 (base32
3770 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
3771 (build-system python-build-system)
3772 (home-page "https://github.com/peritus/bumpversion")
3773 (synopsis "Tool to bump software version")
3774 (description "This tool provides a command-line interface (CLI) to bump a
3775 software version simply.")
3776 (license license:expat)))
3777
3778 (define-public python-deprecated
3779 (package
3780 (name "python-deprecated")
3781 (version "1.2.5")
3782 (source
3783 (origin
3784 (method git-fetch)
3785 (uri (git-reference
3786 (url "https://github.com/tantale/deprecated")
3787 (commit (string-append "v" version))))
3788 (file-name (git-file-name name version))
3789 (sha256
3790 (base32
3791 "14909glxxwwc4b9qpz2b9jdriwzi5n65ichw85xqppap5f79wcwz"))))
3792 (build-system python-build-system)
3793 (arguments
3794 `(#:phases (modify-phases %standard-phases
3795 (replace 'check
3796 (lambda _
3797 (invoke "pytest"))))))
3798 (propagated-inputs
3799 `(("python-wrapt" ,python-wrapt)))
3800 (native-inputs
3801 `(("python-bumpversion" ,python-bumpversion)
3802 ("python-pytest" ,python-pytest)
3803 ("python-pytest-cov" ,python-pytest-cov)
3804 ("python-sphinx" ,python-sphinx)
3805 ("python-tox" ,python-tox)))
3806 (home-page "https://github.com/tantale/deprecated")
3807 (synopsis "Python decorator to deprecate classes, functions or methods")
3808 (description "The @code{deprecated} decorator provides a convenient way to deprecate
3809 to deprecate classes, functions or methods.")
3810 (license license:expat)))
3811
3812 (define-public python-pygithub
3813 (package
3814 (name "python-pygithub")
3815 (version "1.54.1")
3816 (source
3817 ;; We fetch from the Git repo because there are no tests in the PyPI
3818 ;; archive.
3819 (origin
3820 (method git-fetch)
3821 (uri (git-reference
3822 (url "https://github.com/PyGithub/PyGithub")
3823 (commit (string-append "v" version))))
3824 (file-name (git-file-name name version))
3825 (sha256
3826 (base32 "1nl74bp5ikdnrc8xq0qr25ryl1mvarf0xi43k8w5jzlrllhq0nkq"))))
3827 (build-system python-build-system)
3828 (arguments
3829 `(#:phases
3830 (modify-phases %standard-phases
3831 (replace 'check
3832 (lambda* (#:key tests? #:allow-other-keys)
3833 (when tests?
3834 (invoke "pytest"))
3835 #t)))))
3836 (propagated-inputs
3837 `(("python-cryptography" ,python-cryptography)
3838 ("python-deprecated" ,python-deprecated)
3839 ("python-pyjwt" ,python-pyjwt)
3840 ("python-requests" ,python-requests)))
3841 (native-inputs
3842 `(("python-httpretty" ,python-httpretty)
3843 ("python-pytest" ,python-pytest)))
3844 (home-page "https://pygithub.readthedocs.io/en/latest/")
3845 (synopsis "Python library for the GitHub API")
3846 (description "This library allows managing GitHub resources such as
3847 repositories, user profiles, and organizations in your Python applications,
3848 using version 3 of the GitHub application programming interface (API).")
3849 (license license:lgpl3+)))
3850
3851 (define-public python-rellu
3852 (package
3853 (name "python-rellu")
3854 (version "0.7")
3855 (source
3856 (origin
3857 (method url-fetch)
3858 (uri (pypi-uri "rellu" version))
3859 (sha256
3860 (base32
3861 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
3862 (build-system python-build-system)
3863 (propagated-inputs
3864 `(("python-invoke" ,python-invoke)
3865 ("python-pygithub" ,python-pygithub)))
3866 (home-page "https://github.com/robotframework/rellu")
3867 (synopsis "Utilities to create PyPI releases")
3868 (description "This collection of utilities contains tooling and templates
3869 to assist in creating releases on GitHub and publishing them on PyPI. It is
3870 designed to be used by Robot Framework and tools and libraries in its
3871 ecosystem, but can naturally be used also by other projects.")
3872 (license license:asl2.0)))
3873
3874 (define-public python-robotframework
3875 (package
3876 (name "python-robotframework")
3877 (version "3.2.2")
3878 ;; There are no tests in the PyPI archive.
3879 (source
3880 (origin
3881 (method git-fetch)
3882 (uri (git-reference
3883 (url "https://github.com/robotframework/robotframework")
3884 (commit (string-append "v" version))))
3885 (file-name (git-file-name name version))
3886 (sha256
3887 (base32 "0if0h3myb9m3hgmn1phrhq8pfp89kfqsaq32vmfdjkyjdj7y59ds"))
3888 (patches (search-patches
3889 "python-robotframework-source-date-epoch.patch"))))
3890 (build-system python-build-system)
3891 (arguments
3892 `(#:phases (modify-phases %standard-phases
3893 (add-before 'build 'build-and-install-doc
3894 (lambda* (#:key outputs #:allow-other-keys)
3895 (let* ((doc-output (assoc-ref outputs "doc"))
3896 (doc (string-append doc-output "/share/"
3897 ,name "-" ,version "/")))
3898 (invoke "invoke" "library-docs" "all")
3899 (mkdir-p doc)
3900 (copy-recursively "doc/libraries"
3901 (string-append doc "/libraries"))
3902 #t)))
3903 (replace 'check
3904 (lambda* (#:key inputs #:allow-other-keys)
3905 ;; Some tests require timezone data. Otherwise, they
3906 ;; look up /etc/localtime, which doesn't exist, and fail
3907 ;; with:
3908 ;;
3909 ;; OverflowError: mktime argument out of range
3910 (setenv "TZDIR"
3911 (string-append (assoc-ref inputs "tzdata")
3912 "/share/zoneinfo"))
3913 (setenv "TZ" "Europe/Paris")
3914
3915 (invoke "python" "utest/run.py"))))))
3916 (native-inputs
3917 `(("python-invoke" ,python-invoke)
3918 ("python-rellu" ,python-rellu)
3919 ("python:tk" ,python "tk") ;used when building the HTML doc
3920 ("tzdata" ,tzdata-for-tests)))
3921 (outputs '("out" "doc"))
3922 (home-page "https://robotframework.org")
3923 (synopsis "Generic automation framework")
3924 (description "Robot Framework is a generic automation framework for
3925 acceptance testing, acceptance test driven development (ATDD), and robotic
3926 process automation (RPA).")
3927 (license license:asl2.0)))
3928
3929 (define-public python-robotframework-lint
3930 ;; There is no properly tagged release; the commit below seems to correspond
3931 ;; to the 0.9 stable release available from PyPI. The tests are not
3932 ;; included in the PyPI archive, so we fetch the sources from the upstream
3933 ;; Git repo.
3934 (let ((commit "b0619ac58a8b1be125f9c98856a664594614570f")
3935 (revision "0"))
3936 (package
3937 (name "python-robotframework-lint")
3938 (version (git-version "1.1" ;version taken from 'rflint/version.py'
3939 revision commit))
3940 (source
3941 (origin
3942 (method git-fetch)
3943 (uri (git-reference
3944 (url "https://github.com/boakley/robotframework-lint")
3945 (commit commit)))
3946 (file-name (git-file-name name version))
3947 (sha256
3948 (base32
3949 "180npmvzqync25b2scs878gv8q4y17dsinxyjcc10bw22msfap6b"))))
3950 (build-system python-build-system)
3951 (arguments
3952 `(#:phases
3953 (modify-phases %standard-phases
3954 (replace 'check
3955 (lambda _
3956 (invoke "python" "-m" "robot" "-A"
3957 "tests/conf/default.args" "tests"))))))
3958 (propagated-inputs
3959 `(("python-robotframework" ,python-robotframework)))
3960 (home-page "https://github.com/boakley/robotframework-lint/")
3961 (synopsis "Static analysis tool (linter) for Robot Framework")
3962 (description "This package provides the @code{rflint} command-line
3963 utility, a static analysis tool (linter) for Robot Framework source files.")
3964 (license license:asl2.0))))
3965
3966 (define-public python-robotframework-sshlibrary
3967 (package
3968 (name "python-robotframework-sshlibrary")
3969 (version "3.3.0")
3970 ;; There are no tests in the PyPI archive.
3971 (source
3972 (origin
3973 (method git-fetch)
3974 (uri (git-reference
3975 (url "https://github.com/robotframework/SSHLibrary")
3976 (commit (string-append "v" version))))
3977 (file-name (git-file-name name version))
3978 (sha256
3979 (base32
3980 "1mk6dz2jqqndbx4yji09012q6rmadnqdywi7czvj62b0s07dr3r2"))))
3981 (build-system python-build-system)
3982 (arguments
3983 `(#:phases
3984 (modify-phases %standard-phases
3985 (add-before 'build 'build-and-install-doc
3986 (lambda* (#:key outputs #:allow-other-keys)
3987 (let* ((doc-output (assoc-ref outputs "doc"))
3988 (doc (string-append doc-output "/share/"
3989 ,name "-" ,version "/")))
3990 (invoke "chmod" "-R" "+w" "docs")
3991 (invoke "invoke" "kw-docs" "project-docs")
3992 (mkdir-p doc)
3993 (for-each delete-file (find-files "docs" "\\.rst"))
3994 (copy-recursively "docs" doc)
3995 #t)))
3996 (replace 'check
3997 (lambda _
3998 ;; Some tests require an SSH server; we remove them.
3999 (delete-file "utest/test_client_api.py")
4000 (delete-file "utest/test_scp.py")
4001 (invoke "python" "utest/run.py"))))))
4002 (propagated-inputs
4003 `(("python-robotframework" ,python-robotframework)
4004 ("python-paramiko" ,python-paramiko)
4005 ("python-scp" ,python-scp)))
4006 (native-inputs
4007 `(("openssh" ,openssh)
4008 ("which" ,which)
4009 ;; To generate the documentation
4010 ("python-docutils" ,python-docutils)
4011 ("python-invoke" ,python-invoke)
4012 ("python-pygments" ,python-pygments)
4013 ("python-rellu" ,python-rellu)))
4014 (outputs '("out" "doc"))
4015 (home-page "https://github.com/robotframework/SSHLibrary")
4016 (synopsis "Robot Framework library for SSH and SFTP")
4017 (description "SSHLibrary is a Robot Framework library providing support
4018 for SSH and SFTP. It has the following main usages:
4019 @itemize @bullet
4020 @item Executing commands on the remote machine, either blocking or non-blocking.
4021 @item Writing and reading in an interactive shell.
4022 @item Transferring files and directories over SFTP.
4023 @item Ensuring that files and directories exist on the remote machine.
4024 @end itemize")
4025 (license license:asl2.0)))
4026
4027 (define-public python-rstr
4028 (package
4029 (name "python-rstr")
4030 (version "2.2.6")
4031 (source
4032 (origin
4033 (method url-fetch)
4034 (uri (pypi-uri "rstr" version))
4035 (sha256
4036 (base32
4037 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
4038 (build-system python-build-system)
4039 (home-page "https://github.com/leapfrogonline/rstr")
4040 (synopsis "Generate random strings in Python")
4041 (description "This package provides a python module for generating
4042 random strings of various types. It could be useful for fuzz testing,
4043 generating dummy data, or other applications. It has no dependencies
4044 outside the standard library.")
4045 (license license:bsd-3)))
4046
4047 (define-public python-scp
4048 (package
4049 (name "python-scp")
4050 (version "0.13.3")
4051 (source
4052 (origin
4053 (method url-fetch)
4054 (uri (pypi-uri "scp" version))
4055 (sha256
4056 (base32 "1m2v09m407p097cy3xy5rxicqfzrqjwf8v5rd4qhfqkk7lllimwb"))))
4057 (build-system python-build-system)
4058 (arguments
4059 '(#:tests? #f)) ;tests require an SSH server
4060 (propagated-inputs
4061 `(("python-paramiko" ,python-paramiko)))
4062 (home-page "https://github.com/jbardin/scp.py")
4063 (synopsis "SCP protocol module for Python and Paramiko")
4064 (description "The scp module extends the Paramiko library to send and
4065 receive files via the SCP1 protocol, as implemented by the OpenSSH
4066 @command{scp} program.")
4067 (license license:gpl2+)))
4068
4069 (define-public python-rst.linker
4070 (package
4071 (name "python-rst.linker")
4072 (version "1.11")
4073 (source
4074 (origin
4075 (method url-fetch)
4076 (uri (pypi-uri "rst.linker" version))
4077 (sha256
4078 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
4079 (build-system python-build-system)
4080 (propagated-inputs
4081 `(("python-dateutil" ,python-dateutil)
4082 ("python-six" ,python-six)))
4083 (native-inputs
4084 `(("python-setuptools-scm" ,python-setuptools-scm)))
4085 ;; Test would require path.py, which would introduce a cyclic dependence.
4086 (arguments `(#:tests? #f))
4087 ;; Note: As of version 1.7 the documentation is not worth building.
4088 (home-page "https://github.com/jaraco/rst.linker")
4089 (synopsis "Sphinx plugin to add links and timestamps")
4090 (description "rst.linker automatically replaces text by a
4091 reStructuredText external reference or timestamps. It's primary purpose is to
4092 augment the changelog, but it can be used for other documents, too.")
4093 (license license:expat)))
4094
4095 (define-public python2-rst.linker
4096 (package-with-python2 python-rst.linker))
4097
4098 (define-public python-sshpubkeys
4099 (package
4100 (name "python-sshpubkeys")
4101 (version "3.1.0")
4102 (home-page "https://github.com/ojarva/python-sshpubkeys")
4103 (source (origin
4104 (method git-fetch)
4105 (uri (git-reference
4106 (url home-page)
4107 (commit (string-append "v" version))))
4108 (file-name (git-file-name name version))
4109 (sha256
4110 (base32
4111 "1h4gwmcfn84kkqh83km1vfz8sc5kr2g4gzgzmr8gz704jmqiv7nq"))))
4112 (build-system python-build-system)
4113 (propagated-inputs
4114 `(("python-cryptography" ,python-cryptography)
4115 ("python-ecdsa" ,python-ecdsa)))
4116 (synopsis "OpenSSH public key parser")
4117 (description
4118 "This package provides a library for parsing and validating OpenSSH
4119 public key files.")
4120 (license license:bsd-3)))
4121
4122 (define-public python-feedgenerator
4123 (package
4124 (name "python-feedgenerator")
4125 (version "1.9")
4126 (source
4127 (origin
4128 (method url-fetch)
4129 (uri (pypi-uri "feedgenerator" version))
4130 (sha256
4131 (base32
4132 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
4133 (modules '((guix build utils)))
4134 (snippet
4135 '(begin
4136 ;; Remove pre-compiled .pyc files from source.
4137 (for-each delete-file-recursively
4138 (find-files "." "__pycache__" #:directories? #t))
4139 (for-each delete-file (find-files "." "\\.pyc$"))
4140 #t))))
4141 (build-system python-build-system)
4142 (propagated-inputs
4143 `(("python-pytz" ,python-pytz)
4144 ("python-six" ,python-six)))
4145 (home-page "https://github.com/getpelican/feedgenerator")
4146 (synopsis
4147 "Standalone version of Django's Atom/RSS feed generator")
4148 (description
4149 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
4150 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
4151 (license license:bsd-3)))
4152
4153 (define-public python2-feedgenerator
4154 (package-with-python2 python-feedgenerator))
4155
4156 (define-public python-jsonrpc-server
4157 (package
4158 (name "python-jsonrpc-server")
4159 (version "0.4.0")
4160 (source
4161 (origin
4162 (method url-fetch)
4163 (uri (pypi-uri "python-jsonrpc-server" version))
4164 (sha256
4165 (base32
4166 "1585ybn3djvx5r5zbxkzlhz2wb1d47y4wrfwaxdyq0gi87jl7ib2"))))
4167 (build-system python-build-system)
4168 (propagated-inputs
4169 `(("python-mock" ,python-mock)
4170 ("python-pytest" ,python-pytest)
4171 ("python-ujson" ,python-ujson)))
4172 (home-page
4173 "https://github.com/palantir/python-jsonrpc-server")
4174 (synopsis "JSON RPC 2.0 server library")
4175 (description
4176 "This package provides a JSON RPC 2.0 server library for Python.")
4177 (license license:expat)))
4178
4179 (define-public python-pydantic
4180 (package
4181 (name "python-pydantic")
4182 (version "1.6.1")
4183 (source
4184 (origin
4185 (method git-fetch)
4186 (uri (git-reference
4187 (url "https://github.com/samuelcolvin/pydantic")
4188 (commit (string-append "v" version))))
4189 (file-name (git-file-name name version))
4190 (sha256
4191 (base32 "1380s9k77g6q15by9fkxndczjk89q6xpz09jdrqip535xws2z3j8"))))
4192 (build-system python-build-system)
4193 (arguments
4194 '(#:phases
4195 (modify-phases %standard-phases
4196 ;; Reported upstream:
4197 ;; <https://github.com/samuelcolvin/pydantic/issues/1580>.
4198 ;; Disable the faulty test as the fix is unclear.
4199 (add-before 'check 'disable-test
4200 (lambda _
4201 (substitute* "tests/test_validators.py"
4202 (("test_assert_raises_validation_error")
4203 "_test_assert_raises_validation_error"))
4204 #t))
4205 (replace 'check
4206 (lambda _ (invoke "pytest" "-vv" "tests"))))))
4207 (native-inputs
4208 `(("python-pytest" ,python-pytest)))
4209 (home-page "https://github.com/samuelcolvin/pydantic")
4210 (synopsis "Python data validation and settings management")
4211 (description
4212 "Pydantic enforces type hints at runtime, and provides user friendly
4213 errors when data is invalid.")
4214 (license license:expat)))
4215
4216 (define-public python-pydocstyle
4217 (package
4218 (name "python-pydocstyle")
4219 (version "3.0.0")
4220 (source
4221 (origin
4222 (method url-fetch)
4223 (uri (pypi-uri "pydocstyle" version))
4224 (sha256
4225 (base32
4226 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
4227 (build-system python-build-system)
4228 (propagated-inputs
4229 `(("python-six" ,python-six)
4230 ("python-snowballstemmer" ,python-snowballstemmer)))
4231 (home-page
4232 "https://github.com/PyCQA/pydocstyle/")
4233 (synopsis "Python docstring style checker")
4234 (description
4235 "This package provides a style checker for the Python Language
4236 Server (PLS).")
4237 (license license:expat)))
4238
4239 (define-public python-language-server
4240 (package
4241 (name "python-language-server")
4242 (version "0.36.2")
4243 (source
4244 (origin
4245 (method url-fetch)
4246 (uri (pypi-uri "python-language-server" version))
4247 (sha256
4248 (base32
4249 "1c0pnk2aibfhfaanrs0a5gkabkvz81gj20z7r0152b7fcx5ci14r"))))
4250 (build-system python-build-system)
4251 (propagated-inputs
4252 `(("python-autopep8" ,python-autopep8)
4253 ("python-configparser" ,python-configparser)
4254 ("python-pydocstyle" ,python-pydocstyle)
4255 ("python-future" ,python-future)
4256 ("python-jedi" ,python-jedi)
4257 ("python-jsonrpc-server" ,python-jsonrpc-server)
4258 ("python-pluggy" ,python-pluggy)
4259 ("python-pycodestyle" ,python-pycodestyle)
4260 ("python-pyflakes" ,python-pyflakes)
4261 ("python-rope" ,python-rope)
4262 ("python-ujson" ,python-ujson)
4263 ("python-yapf" ,python-yapf)))
4264 (native-inputs
4265 `(("python-coverage" ,python-coverage)
4266 ("python-flaky" ,python-flaky)
4267 ("python-matplotlib" ,python-matplotlib)
4268 ("python-mock" ,python-mock)
4269 ("python-numpy" ,python-numpy)
4270 ("python-pandas" ,python-pandas)
4271 ("python-pylint" ,python-pylint)
4272 ("python-pytest" ,python-pytest)
4273 ("python-pytest-cov" ,python-pytest-cov)
4274 ("python-versioneer" ,python-versioneer)))
4275 (home-page "https://github.com/palantir/python-language-server")
4276 (synopsis "Python implementation of the Language Server Protocol")
4277 (description
4278 "The Python Language Server (pyls) is an implementation of the Python 3
4279 language specification for the Language Server Protocol (LSP). This tool is
4280 used in text editing environments to provide a complete and integrated
4281 feature-set for programming Python effectively.")
4282 (license license:expat)))
4283
4284 (define-public python-pathspec
4285 (package
4286 (name "python-pathspec")
4287 (version "0.7.0")
4288 (source
4289 (origin
4290 (method url-fetch)
4291 (uri (pypi-uri "pathspec" version))
4292 (sha256
4293 (base32
4294 "15lvs4awlg8xzl0l4gk9y53xx4yqmqvsv44pglv39m70y85afajn"))))
4295 (build-system python-build-system)
4296 (home-page "https://github.com/cpburnz/python-path-specification")
4297 (synopsis "Utility library for gitignore style pattern matching of file paths")
4298 (description
4299 "This package provides a utility library for gitignore style pattern
4300 matching of file paths.")
4301 (license license:mpl2.0)))
4302
4303 (define-public python-black
4304 (package
4305 (name "python-black")
4306 (version "20.8b1")
4307 (source
4308 (origin
4309 (method url-fetch)
4310 (uri (pypi-uri "black" version))
4311 (sha256
4312 (base32
4313 "1spv6sldp3mcxr740dh3ywp25lly9s8qlvs946fin44rl1x5a0hw"))))
4314 (build-system python-build-system)
4315 (arguments
4316 `(#:phases
4317 (modify-phases %standard-phases
4318 (add-after 'patch-source-shebangs 'patch-extra-shebangs
4319 (lambda _
4320 (let ((python3 (which "python3")))
4321 (substitute* '("tests/data/fmtonoff.py"
4322 "tests/data/string_prefixes.py"
4323 "tests/data/function.py"
4324 "tests/data/python37.py")
4325 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
4326 (string-append "#!" python3 (if (string? minor-version)
4327 minor-version
4328 "")))))
4329 #t))
4330 (add-after 'unpack 'disable-broken-tests
4331 (lambda* (#:key outputs inputs #:allow-other-keys)
4332 ;; Make installed package available for running the tests
4333 (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
4334 ":" (getenv "PATH")))
4335
4336 ;; These tests are supposed to be skipped when the blackd
4337 ;; dependencies are missing, but this doesn't quite work.
4338 (substitute* "tests/test_black.py"
4339 (("( *)class BlackDTestCase.*" match indent)
4340 (string-append indent "@unittest.skip(\"no blackd deps\")\n"
4341 indent "class BlackDTestCase(unittest.TestCase):\n"))
4342 (("web.Application") "False")
4343 (("@unittest_run_loop") ""))
4344
4345 ;; Patching the above file breaks the self test
4346 (substitute* "tests/test_black.py"
4347 (("( *)def test_self" match indent)
4348 (string-append indent "@unittest.skip(\"guix\")\n" match)))
4349
4350 (substitute* "tests/test_black.py"
4351 (("( *)def test_python38" match indent)
4352 (string-append indent "@unittest.skip(\"guix\")\n" match)))
4353 #t)))))
4354 (propagated-inputs
4355 `(("python-click" ,python-click)
4356 ("python-attrs" ,python-attrs)
4357 ("python-appdirs" ,python-appdirs)
4358 ("python-pathspec" ,python-pathspec)
4359 ("python-mypy-extensions" ,python-mypy-extensions)
4360 ("python-regex" ,python-regex)
4361 ("python-toml" ,python-toml)
4362 ("python-typed-ast" ,python-typed-ast)
4363 ("python-typing-extensions" ,python-typing-extensions)))
4364 (native-inputs
4365 `(("python-setuptools-scm" ,python-setuptools-scm)))
4366 (home-page "https://github.com/ambv/black")
4367 (synopsis "The uncompromising code formatter")
4368 (description "Black is the uncompromising Python code formatter.")
4369 (license license:expat)))
4370
4371 (define-public python-black-macchiato
4372 (package
4373 (name "python-black-macchiato")
4374 (version "1.3.0")
4375 (source
4376 (origin
4377 (method url-fetch)
4378 (uri (pypi-uri "black-macchiato" version))
4379 (sha256
4380 (base32
4381 "1drp5p697ni1xn5y2lbjpalgpkzy2i4cyxjj5pk4dxr0vk97dd7i"))))
4382 (build-system python-build-system)
4383 (propagated-inputs
4384 `(("python-black" ,python-black)))
4385 (home-page "https://github.com/wbolster/black-macchiato")
4386 (synopsis "Partial @code{python-black} formatting")
4387 (description
4388 "This package is built on top the @{python-black} code formatter to
4389 enable formatting of partial files.")
4390 (license license:bsd-3)))
4391
4392 (define-public python-blinker
4393 (package
4394 (name "python-blinker")
4395 (version "1.4")
4396 (source
4397 (origin
4398 (method url-fetch)
4399 (uri (pypi-uri "blinker" version))
4400 (sha256
4401 (base32
4402 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
4403 (build-system python-build-system)
4404 (home-page "https://pythonhosted.org/blinker/")
4405 (synopsis "Fast, simple object-to-object and broadcast signaling")
4406 (description
4407 "Blinker provides a fast dispatching system that allows any number of
4408 interested parties to subscribe to events, or \"signals\".")
4409 (license license:expat)))
4410
4411 (define-public python2-blinker
4412 (package-with-python2 python-blinker))
4413
4414 (define-public pelican
4415 (package
4416 (name "pelican")
4417 (version "4.2.0")
4418 (source
4419 (origin
4420 (method url-fetch)
4421 (uri (pypi-uri "pelican" version))
4422 (sha256
4423 (base32
4424 "0mp7hjyhs38ag1hyfcy882g400z0babqi72pnli46dqijfhajzmy"))))
4425 (build-system python-build-system)
4426 (propagated-inputs
4427 `(("python-blinker" ,python-blinker)
4428 ("python-dateutil" ,python-dateutil)
4429 ("python-docutils" ,python-docutils)
4430 ("python-feedgenerator" ,python-feedgenerator)
4431 ("python-jinja2" ,python-jinja2)
4432 ("python-markdown" ,python-markdown)
4433 ("python-pygments" ,python-pygments)
4434 ("python-pytz" ,python-pytz)
4435 ("python-six" ,python-six)
4436 ("python-unidecode" ,python-unidecode)))
4437 (home-page "https://getpelican.com/")
4438 (arguments
4439 `(;; XXX Requires a lot more packages to do unit tests :P
4440 #:tests? #f))
4441 (synopsis "Python-based static site publishing system")
4442 (description
4443 "Pelican is a tool to generate a static blog from reStructuredText,
4444 Markdown input files, and more. Pelican uses Jinja2 for templating
4445 and is very extensible.")
4446 (license license:agpl3+)))
4447
4448 (define-public mallard-ducktype
4449 (package
4450 (name "mallard-ducktype")
4451 (version "1.0.2")
4452 (source
4453 (origin
4454 (method git-fetch)
4455 ;; git-reference because tests are not included in pypi source tarball
4456 ;; https://issues.guix.gnu.org/issue/36755#2
4457 (uri (git-reference
4458 (url "https://github.com/projectmallard/mallard-ducktype")
4459 (commit version)))
4460 (file-name (git-file-name name version))
4461 (sha256
4462 (base32
4463 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
4464 (build-system python-build-system)
4465 (arguments
4466 '(#:phases
4467 (modify-phases %standard-phases
4468 (replace 'check
4469 (lambda _
4470 (with-directory-excursion "tests"
4471 (invoke "sh" "runtests")))))))
4472 (home-page "http://projectmallard.org")
4473 (synopsis "Convert Ducktype to Mallard documentation markup")
4474 (description
4475 "Ducktype is a lightweight syntax that can represent all the semantics
4476 of the Mallard XML documentation system. Ducktype files can be converted to
4477 Mallard using the @command{ducktype} tool. The yelp-tools package
4478 provides additional functionality on the produced Mallard documents.")
4479 (license license:expat)))
4480
4481 (define-public python-cython
4482 (package
4483 (name "python-cython")
4484 (version "0.29.22")
4485 (source
4486 (origin
4487 (method url-fetch)
4488 (uri (pypi-uri "Cython" version))
4489 (sha256
4490 (base32 "01jl3544qwsi8lp6anbl55566xqkjd53x452i7m6gnfilv3q6syz"))))
4491 (build-system python-build-system)
4492 ;; we need the full python package and not just the python-wrapper
4493 ;; because we need libpython3.3m.so
4494 (inputs
4495 `(("python" ,python)))
4496 (arguments
4497 `(#:phases
4498 (modify-phases %standard-phases
4499 (add-before 'check 'set-HOME
4500 ;; some tests require access to "$HOME/.cython"
4501 (lambda _ (setenv "HOME" "/tmp") #t))
4502 (replace 'check
4503 (lambda _
4504 ;; Disable compiler optimizations to greatly reduce the running
4505 ;; time of the test suite.
4506 (setenv "CFLAGS" "-O0")
4507
4508 (invoke "python" "runtests.py" "-vv"
4509 "-j" (number->string (parallel-job-count))
4510 ;; XXX: On 32-bit architectures, running the parallel tests
4511 ;; fails on many-core systems, see
4512 ;; <https://github.com/cython/cython/issues/2807>.
4513 ,@(if (not (target-64bit?))
4514 '("-x" "run.parallel")
4515 '())))))))
4516 (home-page "https://cython.org/")
4517 (synopsis "C extensions for Python")
4518 (description "Cython is an optimising static compiler for both the Python
4519 programming language and the extended Cython programming language. It makes
4520 writing C extensions for Python as easy as Python itself.")
4521 (license license:asl2.0)
4522 (properties `((python2-variant . ,(delay python2-cython))))))
4523
4524 (define-public python2-cython
4525 (let ((base (package-with-python2 (strip-python2-variant python-cython))))
4526 (package/inherit base
4527 (name "python2-cython")
4528 (inputs
4529 `(("python-2" ,python-2))) ;this is not automatically changed
4530 (arguments
4531 (substitute-keyword-arguments (package-arguments base)
4532 ((#:phases phases)
4533 `(modify-phases ,phases
4534 (add-before 'check 'adjust-test_embed
4535 (lambda _
4536 (substitute* "runtests.py"
4537 ;; test_embed goes great lengths to find the static libpythonX.Y.a
4538 ;; so it can give the right -L flag to GCC when embedding static
4539 ;; builds of Python. It is unaware that the Python "config"
4540 ;; directory (where the static library lives) was renamed in
4541 ;; Python 3, and falls back to sysconfig.get_config_var('LIBDIR'),
4542 ;; which works fine, because that is where the shared library is.
4543 ;;
4544 ;; It also appears to be unaware that the Makefile in Demos/embed
4545 ;; already unconditionally pass the static library location to GCC,
4546 ;; after checking sysconfig.get_config_var('LIBPL).
4547 ;;
4548 ;; The effect is that the linker is unable to resolve libexpat
4549 ;; symbols when building for Python 2, because neither the Python 2
4550 ;; shared library nor Expat is available. To fix it, we can either
4551 ;; add Expat as an input and make it visible to the linker, or just
4552 ;; prevent it from overriding the Python shared library location.
4553 ;; The end result is identical, so we take the easy route.
4554 ((" or libname not in os\\.listdir\\(libdir\\)")
4555 ""))
4556 #t)))))))))
4557
4558 ;; The RPython toolchain currently does not support Python 3.
4559 (define-public python2-rpython
4560 (package
4561 (name "python2-rpython")
4562 (version "0.2.1")
4563 (source
4564 (origin
4565 (method url-fetch)
4566 (uri (pypi-uri "rpython" version))
4567 (sha256
4568 (base32
4569 "02z9cvxf0y41dcvwnvf2zn0albhhw1drvjjbq27m6i1piw1k6fc0"))))
4570 (build-system python-build-system)
4571 (arguments `(#:python ,python-2))
4572 (native-inputs
4573 `(("python2-pytest" ,python2-pytest))) ; needed for running tests
4574 (home-page "https://rpython.readthedocs.org")
4575 (synopsis "Framework for implementing interpreters and virtual machines")
4576 (description "RPython is a translation and support framework for
4577 producing implementations of dynamic languages, emphasizing a clean separation
4578 between language specification and implementation aspects.")
4579 (license license:expat)))
4580
4581 ;; NOTE: when upgrading numpy please make sure that python-pandas and
4582 ;; python-scipy still build, as these three packages are often used together.
4583 (define-public python-numpy
4584 (package
4585 (name "python-numpy")
4586 (version "1.17.3")
4587 (source
4588 (origin
4589 (method url-fetch)
4590 (uri (string-append
4591 "https://github.com/numpy/numpy/releases/download/v"
4592 version "/numpy-" version ".tar.gz"))
4593 (sha256
4594 (base32
4595 "1ak9dmjja0q90a7fsxli51ypcwssh8c4pb6f8wkrsnf2xgdk6dy9"))))
4596 (build-system python-build-system)
4597 (inputs
4598 `(("openblas" ,openblas)
4599 ("lapack" ,lapack)))
4600 (native-inputs
4601 `(("python-cython" ,python-cython)
4602 ("python-pytest" ,python-pytest)
4603 ("gfortran" ,gfortran)))
4604 (arguments
4605 `(#:phases
4606 (modify-phases %standard-phases
4607 (add-before 'build 'configure-blas-lapack
4608 (lambda* (#:key inputs #:allow-other-keys)
4609 (call-with-output-file "site.cfg"
4610 (lambda (port)
4611 (format port
4612 "[openblas]
4613 libraries = openblas
4614 library_dirs = ~a/lib
4615 include_dirs = ~a/include
4616
4617 # backslash-n to make emacs happy
4618 \n[lapack]
4619 lapack_libs = lapack
4620 library_dirs = ~a/lib
4621 include_dirs = ~a/include
4622 "
4623 (assoc-ref inputs "openblas")
4624 (assoc-ref inputs "openblas")
4625 (assoc-ref inputs "lapack")
4626 (assoc-ref inputs "lapack"))))
4627 #t))
4628 (add-before 'build 'fix-executable-paths
4629 (lambda* (#:key inputs #:allow-other-keys)
4630 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
4631 ;; instead of /bin/sh.
4632 (substitute* "numpy/distutils/exec_command.py"
4633 (("(os.environ.get\\('SHELL', ')(/bin/sh'\\))" match match-start match-end)
4634 (string-append match-start (assoc-ref inputs "bash") match-end)))
4635 ;; Use "gcc" executable, not "cc".
4636 (substitute* "numpy/distutils/system_info.py"
4637 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
4638 "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
4639 #t))
4640 ;; Tests can only be run after the library has been installed and not
4641 ;; within the source directory.
4642 (delete 'check)
4643 (add-after 'install 'check
4644 (lambda* (#:key outputs inputs #:allow-other-keys)
4645 ;; Make installed package available for running the tests
4646 (add-installed-pythonpath inputs outputs)
4647 ;; Make sure "f2py" etc is found.
4648 (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
4649 ":" (getenv "PATH")))
4650 (with-directory-excursion "/tmp"
4651 (invoke "python" "-c"
4652 "import numpy; numpy.test(verbose=2)")))))))
4653 (home-page "https://numpy.org")
4654 (synopsis "Fundamental package for scientific computing with Python")
4655 (description "NumPy is the fundamental package for scientific computing
4656 with Python. It contains among other things: a powerful N-dimensional array
4657 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4658 and Fortran code, useful linear algebra, Fourier transform, and random number
4659 capabilities.")
4660 (properties `((python2-variant . ,(delay python2-numpy))))
4661 (license license:bsd-3)))
4662
4663 ;; Numpy 1.16.x are the last versions that support Python 2.
4664 (define-public python2-numpy
4665 (let ((numpy (package-with-python2
4666 (strip-python2-variant python-numpy))))
4667 (package/inherit
4668 numpy
4669 (version "1.16.5")
4670 (source (origin
4671 (method url-fetch)
4672 (uri (string-append
4673 "https://github.com/numpy/numpy/releases/download/v"
4674 version "/numpy-" version ".tar.gz"))
4675 (sha256
4676 (base32
4677 "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb")))))))
4678
4679 ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of
4680 ;; interest only for legacy code going back to NumPy's predecessor
4681 ;; Numeric.
4682 (define-public python2-numpy-1.8
4683 (package (inherit python2-numpy)
4684 (version "1.8.2")
4685 (source
4686 (origin
4687 (method git-fetch)
4688 (uri (git-reference
4689 (url "https://github.com/numpy/numpy")
4690 (commit (string-append "v" version))))
4691 (file-name (git-file-name "numpy" version))
4692 (sha256
4693 (base32
4694 "0ikgi15rsqwbkfsjjxrwh40lqyal2wvyp3923y6w6ch3dcr82sfk"))))
4695 (arguments
4696 (substitute-keyword-arguments (package-arguments python2-numpy)
4697 ((#:phases phases)
4698 `(modify-phases ,phases
4699 (replace 'configure-blas-lapack
4700 (lambda* (#:key inputs #:allow-other-keys)
4701 (call-with-output-file "site.cfg"
4702 (lambda (port)
4703 (format port
4704 "[openblas]
4705 libraries = openblas,lapack
4706 library_dirs = ~a/lib:~a/lib
4707 include_dirs = ~a/include:~a/include
4708 "
4709 (assoc-ref inputs "openblas")
4710 (assoc-ref inputs "lapack")
4711 (assoc-ref inputs "openblas")
4712 (assoc-ref inputs "lapack"))))
4713 #t))))))
4714 (native-inputs
4715 `(("python2-nose" ,python2-nose)))
4716 (description "NumPy is the fundamental package for scientific computing
4717 with Python. It contains among other things: a powerful N-dimensional array
4718 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4719 and Fortran code, useful linear algebra, Fourier transform, and random number
4720 capabilities. Version 1.8 is the last one to contain the numpy.oldnumeric API
4721 that includes the compatibility layer numpy.oldnumeric with NumPy's predecessor
4722 Numeric.")
4723 (license license:bsd-3)))
4724
4725 (define-public python-munch
4726 (package
4727 (name "python-munch")
4728 (version "2.0.4")
4729 (source
4730 (origin
4731 (method url-fetch)
4732 (uri (pypi-uri "munch" version))
4733 (sha256
4734 (base32
4735 "1cmqg91xnqx8gvnh4pmp0bfl1dfcm65d5p9mg73zz8pkjhx6h80l"))))
4736 (build-system python-build-system)
4737 (home-page "https://github.com/Infinidat/munch")
4738 (synopsis "Dot-accessible dictionary")
4739 (description "Munch is a dot-accessible dictionary similar to JavaScript
4740 objects.")
4741 (license license:expat)))
4742
4743 (define-public python2-munch
4744 (package-with-python2 python-munch))
4745
4746 (define-public python-colormath
4747 (package
4748 (name "python-colormath")
4749 (version "3.0.0")
4750 (source
4751 (origin
4752 (method url-fetch)
4753 (uri (pypi-uri "colormath" version))
4754 (sha256
4755 (base32
4756 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
4757 (build-system python-build-system)
4758 (propagated-inputs
4759 `(("python-networkx" ,python-networkx)
4760 ("python-numpy" ,python-numpy)))
4761 (home-page "https://github.com/gtaylor/python-colormath")
4762 (synopsis "Color math and conversion library")
4763 (description
4764 "This is a Python library for color math and conversions.")
4765 (license license:bsd-3)))
4766
4767 (define-public python2-colormath
4768 (package-with-python2 python-colormath))
4769
4770 (define-public python-spectra
4771 (package
4772 (name "python-spectra")
4773 (version "0.0.11")
4774 (source
4775 (origin
4776 (method url-fetch)
4777 (uri (pypi-uri "spectra" version))
4778 (sha256
4779 (base32
4780 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
4781 (build-system python-build-system)
4782 (arguments
4783 `(#:phases
4784 (modify-phases %standard-phases
4785 (replace 'check
4786 (lambda _ (invoke "nosetests" "-v"))))))
4787 (propagated-inputs
4788 `(("python-colormath" ,python-colormath)))
4789 (native-inputs
4790 `(("python-nose" ,python-nose)))
4791 (home-page "https://github.com/jsvine/spectra")
4792 (synopsis "Color scales and color conversion")
4793 (description
4794 "This package provides a Python library intended to make color math,
4795 color scales, and color space conversion easy. It has support for:
4796
4797 @enumerate
4798 @item Color scales
4799 @item Color ranges
4800 @item Color blending
4801 @item Brightening/darkening colors
4802 @item Saturating/desaturating colors
4803 @item Conversion to/from multiple color spaces.
4804 @end enumerate\n")
4805 (license license:expat)))
4806
4807 (define-public python2-spectra
4808 (package-with-python2 python-spectra))
4809
4810 (define-public python-numpy-documentation
4811 (package
4812 (name "python-numpy-documentation")
4813 (version (package-version python-numpy))
4814 (source (package-source python-numpy))
4815 (build-system python-build-system)
4816 (native-inputs
4817 `(("python-matplotlib" ,python-matplotlib)
4818 ("python-numpy" ,python-numpy)
4819 ("pkg-config" ,pkg-config)
4820 ("python-sphinx" ,python-sphinx)
4821 ("python-numpydoc" ,python-numpydoc)
4822 ("texlive" ,(texlive-union (list texlive-fonts-cm-super
4823 texlive-fonts-ec
4824 texlive-generic-ifxetex
4825 texlive-generic-pdftex
4826 texlive-amsfonts
4827 texlive-latex-capt-of
4828 texlive-latex-cmap
4829 texlive-latex-environ
4830 texlive-latex-eqparbox
4831 texlive-latex-etoolbox
4832 texlive-latex-expdlist
4833 texlive-latex-fancyhdr
4834 texlive-latex-fancyvrb
4835 texlive-latex-fncychap
4836 texlive-latex-float
4837 texlive-latex-framed
4838 texlive-latex-geometry
4839 texlive-latex-graphics
4840 texlive-latex-hyperref
4841 texlive-latex-mdwtools
4842 texlive-latex-multirow
4843 texlive-latex-needspace
4844 texlive-latex-oberdiek
4845 texlive-latex-parskip
4846 texlive-latex-preview
4847 texlive-latex-tabulary
4848 texlive-latex-threeparttable
4849 texlive-latex-titlesec
4850 texlive-latex-trimspaces
4851 texlive-latex-ucs
4852 texlive-latex-upquote
4853 texlive-latex-url
4854 texlive-latex-varwidth
4855 texlive-latex-wrapfig)))
4856 ("texinfo" ,texinfo)
4857 ("perl" ,perl)
4858 ("scipy-sphinx-theme"
4859 ,(let ((commit "c466764e2231ba132c09826b5b138fffa1cfcec3"))
4860 (origin ;the build script expects scipy-sphinx-theme as a git submodule
4861 (method git-fetch)
4862 (uri (git-reference
4863 (url "https://github.com/scipy/scipy-sphinx-theme")
4864 (commit commit)))
4865 (file-name (git-file-name "python-scipy-sphinx-theme"
4866 (string-take commit 7)))
4867 (sha256
4868 (base32
4869 "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl")))))
4870 ,@(package-native-inputs python-numpy)))
4871 (arguments
4872 `(#:tests? #f ; we're only generating the documentation
4873 #:phases
4874 (modify-phases %standard-phases
4875 (delete 'build)
4876 (replace 'install
4877 (lambda* (#:key inputs outputs #:allow-other-keys)
4878 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4879 (doc (string-append
4880 data "/doc/" ,name "-"
4881 ,(package-version python-numpy)))
4882 (info-reader (string-append data "/info"))
4883 (html (string-append doc "/html"))
4884 (scipy-sphinx-theme "scipy-sphinx-theme")
4885 (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
4886 (pyver ,(string-append "PYVER=")))
4887
4888 ;; FIXME: this is needed to for texlive-union to generate
4889 ;; fonts, which are not found.
4890 (setenv "HOME" "/tmp")
4891
4892 (with-directory-excursion "doc"
4893 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
4894 (mkdir-p html)
4895 (invoke "make" "html" pyver)
4896 (invoke "make" "latex" "PAPER=a4" pyver)
4897 (invoke "make" "-C" "build/latex"
4898 "all-pdf" "PAPER=a4" pyver)
4899 ;; FIXME: Generation of the info file fails.
4900 ;; (invoke "make" "info" pyver)
4901 ;; (mkdir-p info)
4902 ;; (copy-file "build/texinfo/numpy.info"
4903 ;; (string-append info "/numpy.info"))
4904 (for-each (lambda (file)
4905 (copy-file (string-append "build/latex" file)
4906 (string-append doc file)))
4907 '("/numpy-ref.pdf" "/numpy-user.pdf"))
4908 (with-directory-excursion "build/html"
4909 (for-each (lambda (file)
4910 (let* ((dir (dirname file))
4911 (tgt-dir (string-append html "/" dir)))
4912 (unless (equal? "." dir)
4913 (mkdir-p tgt-dir))
4914 (install-file file html)))
4915 (find-files "." ".*")))))
4916 #t)))))
4917 (home-page (package-home-page python-numpy))
4918 (synopsis "Documentation for the python-numpy package")
4919 (description (package-description python-numpy))
4920 (license (package-license python-numpy))))
4921
4922 (define-public python2-numpy-documentation
4923 (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
4924 (package
4925 (inherit numpy-documentation)
4926 (native-inputs `(("python2-functools32" ,python2-functools32)
4927 ,@(package-native-inputs numpy-documentation))))))
4928
4929 (define-public python-pygit2
4930 (package
4931 (name "python-pygit2")
4932 (version "1.4.0")
4933 (source
4934 (origin
4935 (method url-fetch)
4936 (uri (pypi-uri "pygit2" version))
4937 (sha256
4938 (base32 "1j71iskvirkm8jzfmwdm79v69878m9iix8a8cn4xidgr3nmkisyb"))))
4939 (build-system python-build-system)
4940 (arguments
4941 '(#:tests? #f)) ; tests don't run correctly in our environment
4942 (propagated-inputs
4943 `(("python-cached-property" ,python-cached-property)
4944 ("python-cffi" ,python-cffi)
4945 ("libgit2" ,libgit2)))
4946 (native-inputs
4947 `(("python-pytest" ,python-pytest)))
4948 (home-page "https://github.com/libgit2/pygit2")
4949 (synopsis "Python bindings for libgit2")
4950 (description "Pygit2 is a set of Python bindings to the libgit2 shared
4951 library, libgit2 implements Git plumbing.")
4952 ;; GPL2.0 only, with linking exception.
4953 (license license:gpl2)))
4954
4955 (define-public python-patiencediff
4956 (package
4957 (name "python-patiencediff")
4958 (version "0.2.0")
4959 (source
4960 (origin
4961 (method url-fetch)
4962 (uri (pypi-uri "patiencediff" version))
4963 (sha256
4964 (base32
4965 "0yjk50lsd4gnllxls925xbcdxwvmda37w2a1shk0p1nvl3fcha6q"))))
4966 (build-system python-build-system)
4967 (home-page "https://www.breezy-vcs.org/")
4968 (synopsis "Python implementation of the patiencediff algorithm")
4969 (description
4970 "This package contains a Python implementation of the @code{patiencediff}
4971 algorithm. Patiencediff provides a good balance of performance, nice output for
4972 humans, and implementation simplicity.")
4973 (license license:gpl2)))
4974
4975 (define-public python-pdftotext
4976 (package
4977 (name "python-pdftotext")
4978 (version "2.1.5")
4979 (source
4980 (origin
4981 (method url-fetch)
4982 (uri (pypi-uri "pdftotext" version))
4983 (sha256
4984 (base32
4985 "19la1cw1hmkcr8big04gm2dd5fw0y0z97g930aiy29s1gaqbiblq"))))
4986 (build-system python-build-system)
4987 (inputs
4988 `(("poppler" ,poppler)))
4989 (home-page "https://github.com/jalan/pdftotext")
4990 (synopsis "Simple PDF text extraction")
4991 (description "Pdftotext is a Python library of PDF text extraction.")
4992 (license license:expat)))
4993
4994 (define-public python-pyparsing
4995 (package
4996 (name "python-pyparsing")
4997 (version "2.4.6")
4998 (source
4999 (origin
5000 (method url-fetch)
5001 (uri (pypi-uri "pyparsing" version))
5002 (sha256
5003 (base32 "17wn5zlijc9m9zj26gy3f541y7smpj8rfhl51d025c2gm210b0sc"))))
5004 (build-system python-build-system)
5005 (outputs '("out" "doc"))
5006 (arguments
5007 `(#:tests? #f ; no test target
5008 #:phases
5009 (modify-phases %standard-phases
5010 (add-after 'install 'install-doc
5011 (lambda* (#:key outputs #:allow-other-keys)
5012 (let* ((doc (string-append (assoc-ref outputs "doc")
5013 "/share/doc/" ,name "-" ,version))
5014 (html-doc (string-append doc "/html"))
5015 (examples (string-append doc "/examples")))
5016 (mkdir-p html-doc)
5017 (mkdir-p examples)
5018 (for-each
5019 (lambda (dir tgt)
5020 (map (lambda (file)
5021 (install-file file tgt))
5022 (find-files dir ".*")))
5023 (list "docs" "htmldoc" "examples")
5024 (list doc html-doc examples))
5025 #t))))))
5026 (home-page "https://github.com/pyparsing/pyparsing")
5027 (synopsis "Python parsing class library")
5028 (description
5029 "The pyparsing module is an alternative approach to creating and
5030 executing simple grammars, vs. the traditional lex/yacc approach, or the use
5031 of regular expressions. The pyparsing module provides a library of classes
5032 that client code uses to construct the grammar directly in Python code.")
5033 (license license:expat)))
5034
5035 (define-public python2-pyparsing
5036 (package-with-python2 python-pyparsing))
5037
5038 (define-public python-pyparsing-2.4.7
5039 (package
5040 (inherit python-pyparsing)
5041 (version "2.4.7")
5042 (source
5043 (origin
5044 (method url-fetch)
5045 (uri (pypi-uri "pyparsing" version))
5046 (sha256
5047 (base32 "1hgc8qrbq1ymxbwfbjghv01fm3fbpjwpjwi0bcailxxzhf3yq0y2"))))))
5048
5049 (define-public python-numpydoc
5050 (package
5051 (name "python-numpydoc")
5052 (version "0.8.0")
5053 (source
5054 (origin
5055 (method url-fetch)
5056 (uri (pypi-uri "numpydoc" version))
5057 (sha256
5058 (base32
5059 "1zazxg3m8j4fksv3f7v7vpf4bj9qb1vj3r326am0vdip141vzx31"))))
5060 (build-system python-build-system)
5061 (propagated-inputs
5062 `(("python-sphinx" ,python-sphinx)))
5063 (native-inputs
5064 `(("python-nose" ,python-nose)))
5065 (home-page "https://pypi.org/project/numpydoc/")
5066 (synopsis
5067 "Numpy's Sphinx extensions")
5068 (description
5069 "Sphinx extension to support docstrings in Numpy format.")
5070 (license license:bsd-2)
5071 (properties `((python2-variant . ,(delay python2-numpydoc))))))
5072
5073 (define-public python2-numpydoc
5074 (let ((base (package-with-python2
5075 (strip-python2-variant python-numpydoc))))
5076 (package/inherit base
5077 (propagated-inputs
5078 `(("python2-jinja2" ,python2-jinja2)
5079 ,@(package-propagated-inputs base))))))
5080
5081 (define-public python-numexpr
5082 (package
5083 (name "python-numexpr")
5084 (version "2.6.5")
5085 (source
5086 (origin
5087 (method url-fetch)
5088 (uri (pypi-uri "numexpr" version))
5089 (sha256
5090 (base32
5091 "1frnbcwmsi312154x274xl28xazr1k8vjby83fwyla2n10a81bgq"))))
5092 (build-system python-build-system)
5093 (arguments `(#:tests? #f)) ; no tests included
5094 (propagated-inputs
5095 `(("python-numpy" ,python-numpy)))
5096 (home-page "https://github.com/pydata/numexpr")
5097 (synopsis "Fast numerical expression evaluator for NumPy")
5098 (description
5099 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
5100 expressions that operate on arrays are accelerated and use less memory than
5101 doing the same calculation in Python. In addition, its multi-threaded
5102 capabilities can make use of all your cores, which may accelerate
5103 computations, most specially if they are not memory-bounded (e.g. those using
5104 transcendental functions).")
5105 (license license:expat)))
5106
5107 (define-public python2-numexpr
5108 (package-with-python2 python-numexpr))
5109
5110 (define-public python-cycler
5111 (package
5112 (name "python-cycler")
5113 (version "0.10.0")
5114 (source (origin
5115 (method url-fetch)
5116 (uri (pypi-uri "cycler" version))
5117 (sha256
5118 (base32
5119 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
5120 (build-system python-build-system)
5121 (arguments
5122 ;; XXX: The current version requires 'coveralls' which we don't have.
5123 ;; Enable this for the next release which uses 'python-pytest'.
5124 '(#:tests? #f))
5125 (propagated-inputs
5126 `(("python-six" ,python-six)))
5127 (home-page "https://matplotlib.org/cycler/")
5128 (synopsis "Composable keyword argument iterator")
5129 (description
5130 "When using @code{matplotlib} and plotting more than one line, it is
5131 common to want to be able to want to be able to cycle over one or more artist
5132 styles; but the plotting logic can quickly become involved.
5133 To address this and enable easy cycling over arbitrary @code{kwargs}, the
5134 @code{Cycler} class was developed.")
5135 (license license:bsd-3)))
5136
5137 (define-public python2-cycler
5138 (package-with-python2 python-cycler))
5139
5140 (define-public python-colorspacious
5141 (package
5142 (name "python-colorspacious")
5143 (version "1.1.2")
5144 (source
5145 (origin
5146 (method git-fetch)
5147 (uri (git-reference
5148 (url "https://github.com/njsmith/colorspacious")
5149 (commit (string-append "v" version))))
5150 (file-name (git-file-name name version))
5151 (sha256
5152 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
5153 (build-system python-build-system)
5154 (propagated-inputs
5155 `(("python-numpy" ,python-numpy)))
5156 (native-inputs
5157 `(("python-nose" ,python-nose)))
5158 (arguments
5159 `(#:phases
5160 (modify-phases %standard-phases
5161 (replace 'check
5162 (lambda _
5163 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
5164 (home-page "https://github.com/njsmith/colorspacious")
5165 (synopsis "Python library for colorspace conversions")
5166 (description "@code{colorspacious} is a Python library that lets you
5167 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
5168 (license license:expat)))
5169
5170 (define-public python2-colorspacious
5171 (package-with-python2 python-colorspacious))
5172
5173 (define-public python-matplotlib
5174 (package
5175 (name "python-matplotlib")
5176 (version "3.1.2")
5177 (source
5178 (origin
5179 (method url-fetch)
5180 (uri (pypi-uri "matplotlib" version))
5181 (sha256
5182 (base32 "1nmshfqh7wyg15i16hx1yiylcvzkws29ivn66n3i0wyqwcpjr3lf"))
5183 (patches
5184 (search-patches "python-matplotlib-run-under-wayland-gtk3.patch"))))
5185 (build-system python-build-system)
5186 (propagated-inputs ; the following packages are all needed at run time
5187 `(("python-cycler" ,python-cycler)
5188 ("python-kiwisolver" ,python-kiwisolver)
5189 ("python-pyparsing" ,python-pyparsing)
5190 ("python-pygobject" ,python-pygobject)
5191 ("gobject-introspection" ,gobject-introspection)
5192 ("python-tkinter" ,python "tk")
5193 ("python-dateutil" ,python-dateutil)
5194 ("python-numpy" ,python-numpy)
5195 ("python-pillow" ,python-pillow)
5196 ("python-pytz" ,python-pytz)
5197 ("python-six" ,python-six)
5198 ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
5199 ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
5200 ;; object. For this reason we need to import both libraries.
5201 ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
5202 ("python-pycairo" ,python-pycairo)
5203 ("python-cairocffi" ,python-cairocffi)))
5204 (inputs
5205 `(("libpng" ,libpng)
5206 ("freetype" ,freetype)
5207 ("cairo" ,cairo)
5208 ("glib" ,glib)
5209 ;; FIXME: Add backends when available.
5210 ;("python-wxpython" ,python-wxpython)
5211 ("tcl" ,tcl)
5212 ("tk" ,tk)))
5213 (native-inputs
5214 `(("pkg-config" ,pkg-config)
5215 ("python-pytest" ,python-pytest)
5216 ("python-mock" ,python-mock)
5217 ("unzip" ,unzip)
5218 ("jquery-ui"
5219 ,(origin
5220 (method url-fetch)
5221 (uri "https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip")
5222 (sha256
5223 (base32
5224 "0kb21xf38diqgxcdi1z3s9ssq36pldvyqxy56hn6pcva6rs3c8zq"))))))
5225 (arguments
5226 `(#:phases
5227 (modify-phases %standard-phases
5228 ;; XXX We disable all image comparison tests because we're using a
5229 ;; newer version of FreeType than matplotlib expects. This leads to
5230 ;; minor differences throughout the tests.
5231 (add-after 'unpack 'fix-and-disable-failing-tests
5232 (lambda _
5233 (substitute* (append (find-files "lib/matplotlib/tests/"
5234 "test_.*\\.py$")
5235 (find-files "lib/mpl_toolkits/tests"
5236 "test_.*\\.py$"))
5237 (("^from matplotlib" match)
5238 (string-append "import pytest\n" match))
5239 (("( *)@image_comparison" match indent)
5240 (string-append indent
5241 "@pytest.mark.skip(reason=\"unknown minor image differences\")\n"
5242 match)))
5243 (substitute* "lib/matplotlib/tests/test_animation.py"
5244 (("/bin/sh") (which "sh")))
5245 (for-each delete-file
5246 ;; test_normal_axes, test_get_tightbbox_polar
5247 '("lib/matplotlib/tests/test_axes.py"
5248 ;; We don't use the webagg backend and this test forces it.
5249 "lib/matplotlib/tests/test_backend_webagg.py"
5250 ;; test_outward_ticks
5251 "lib/matplotlib/tests/test_tightlayout.py"
5252 ;; test_hidden_axes fails with minor extent
5253 ;; differences, possibly due to the use of a
5254 ;; different version of FreeType.
5255 "lib/matplotlib/tests/test_constrainedlayout.py"
5256 ;; Fontconfig returns no fonts.
5257 "lib/matplotlib/tests/test_font_manager.py"))
5258 #t))
5259 (add-before 'install 'install-jquery-ui
5260 (lambda* (#:key outputs inputs #:allow-other-keys)
5261 (let ((dir (string-append (assoc-ref outputs "out")
5262 "/lib/python3.7/site-packages/matplotlib/backends/web_backend/")))
5263 (mkdir-p dir)
5264 (invoke "unzip"
5265 (assoc-ref inputs "jquery-ui")
5266 "-d" dir))
5267 #t))
5268 (replace 'check
5269 (lambda* (#:key outputs inputs #:allow-other-keys)
5270 (add-installed-pythonpath inputs outputs)
5271 (invoke "python" "tests.py" "-v"
5272 "-m" "not network and not webagg")))
5273 (add-before 'build 'configure-environment
5274 (lambda* (#:key outputs inputs #:allow-other-keys)
5275 (let ((cairo (assoc-ref inputs "cairo")))
5276 ;; Setting this directory in the 'basedirlist' of 'setup.cfg'
5277 ;; has not effect.
5278 (setenv "LD_LIBRARY_PATH" (string-append cairo "/lib"))
5279 (setenv "HOME" (getcwd))
5280 ;; Fix rounding errors when using the x87 FPU.
5281 (when (string-prefix? "i686" ,(%current-system))
5282 (setenv "CFLAGS" "-ffloat-store"))
5283 (call-with-output-file "setup.cfg"
5284 (lambda (port)
5285 (format port "[directories]~%
5286 basedirlist = ~a,~a~%
5287 [packages]~%
5288 tests = True~%"
5289 (assoc-ref inputs "tcl")
5290 (assoc-ref inputs "tk")))))
5291 #t)))))
5292 (home-page "https://matplotlib.org/")
5293 (synopsis "2D plotting library for Python")
5294 (description
5295 "Matplotlib is a Python 2D plotting library which produces publication
5296 quality figures in a variety of hardcopy formats and interactive environments
5297 across platforms. Matplotlib can be used in Python scripts, the python and
5298 ipython shell, web application servers, and six graphical user interface
5299 toolkits.")
5300 (license license:psfl)
5301 (properties `((python2-variant . ,(delay python2-matplotlib))))))
5302
5303 (define-public python2-matplotlib
5304 (let ((matplotlib (package-with-python2
5305 (strip-python2-variant python-matplotlib))))
5306 (package (inherit matplotlib)
5307 (version "2.2.4")
5308 (source
5309 (origin
5310 (method url-fetch)
5311 (uri (pypi-uri "matplotlib" version))
5312 (sha256
5313 (base32
5314 "09i1gnrra1590brc1f8d5rh2zvnknmfgzp613ab0462qkrwj15h2"))))
5315 (arguments
5316 (substitute-keyword-arguments (package-arguments matplotlib)
5317 ((#:phases phases)
5318 `(modify-phases ,phases
5319 (replace 'install-jquery-ui
5320 (lambda* (#:key outputs inputs #:allow-other-keys)
5321 (let ((dir (string-append (assoc-ref outputs "out")
5322 "/lib/python2.7/site-packages/"
5323 "matplotlib/backends/web_backend/")))
5324 (mkdir-p dir)
5325 (invoke "unzip"
5326 (assoc-ref inputs "jquery-ui")
5327 "-d" dir))
5328 #t))
5329 (delete 'fix-and-disable-failing-tests)
5330 (delete 'check))))) ; These tests weren't run the the past.
5331 ;; Make sure to use special packages for Python 2 instead
5332 ;; of those automatically rewritten by package-with-python2.
5333 (propagated-inputs
5334 `(("python2-pycairo" ,python2-pycairo)
5335 ("python2-backports-functools-lru-cache"
5336 ,python2-backports-functools-lru-cache)
5337 ("python2-functools32" ,python2-functools32)
5338 ("python2-pygobject-2" ,python2-pygobject-2)
5339 ("python2-subprocess32" ,python2-subprocess32)
5340 ("python2-tkinter" ,python-2 "tk")
5341 ,@(fold alist-delete (package-propagated-inputs matplotlib)
5342 '("python-cairocffi"
5343 "python-pycairo"
5344 "python-pygobject"
5345 "python-tkinter")))))))
5346
5347 (define-public python-matplotlib-documentation
5348 (package
5349 (name "python-matplotlib-documentation")
5350 (version (package-version python-matplotlib))
5351 (source (package-source python-matplotlib))
5352 (build-system python-build-system)
5353 (native-inputs
5354 `(("python-matplotlib" ,python-matplotlib)
5355 ("python-colorspacious" ,python-colorspacious)
5356 ("python-sphinx" ,python-sphinx)
5357 ("python-sphinx-copybutton" ,python-sphinx-copybutton)
5358 ("python-sphinx-gallery" ,python-sphinx-gallery)
5359 ("python-numpydoc" ,python-numpydoc)
5360 ("python-ipython" ,python-ipython)
5361 ("python-ipykernel" ,python-ipykernel)
5362 ("python-mock" ,python-mock)
5363 ("graphviz" ,graphviz)
5364 ("texlive" ,(texlive-union (list texlive-amsfonts
5365 texlive-latex-amsmath
5366 texlive-latex-enumitem
5367 texlive-latex-expdlist
5368 texlive-latex-geometry
5369 texlive-latex-preview
5370 texlive-latex-type1cm
5371 texlive-latex-ucs
5372
5373 texlive-generic-pdftex
5374
5375 texlive-fonts-ec
5376 texlive-fonts-adobe-times
5377 texlive-fonts-txfonts)))
5378 ("texinfo" ,texinfo)
5379 ,@(package-native-inputs python-matplotlib)))
5380 (arguments
5381 `(#:tests? #f ; we're only generating documentation
5382 #:phases
5383 (modify-phases %standard-phases
5384 ;; The tests in python-matplotlib are run after the install phase, so
5385 ;; we need to delete the extra phase here.
5386 (delete 'check)
5387 (replace 'build
5388 (lambda _
5389 (chdir "doc")
5390 (setenv "PYTHONPATH"
5391 (string-append (getenv "PYTHONPATH")
5392 ":" (getcwd) "/../examples/units"))
5393 (substitute* "conf.py"
5394 ;; Don't use git.
5395 (("^SHA = check_output.*")
5396 (string-append "SHA = \"" ,version "\"\n"))
5397 ;; Don't fetch intersphinx files from the Internet
5398 (("^explicit_order_folders" m)
5399 (string-append "intersphinx_mapping = {}\n" m))
5400 (("'sphinx.ext.intersphinx',") "")
5401 ;; Disable URL embedding which requires internet access.
5402 (("'https://docs.scipy.org/doc/numpy'") "None")
5403 (("'https://docs.scipy.org/doc/scipy/reference'") "None"))
5404 (invoke "make"
5405 "SPHINXBUILD=sphinx-build"
5406 "SPHINXOPTS=" ; don't abort on warnings
5407 "html" "texinfo")))
5408 (replace 'install
5409 (lambda* (#:key inputs outputs #:allow-other-keys)
5410 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
5411 (doc (string-append data "/doc/python-matplotlib-" ,version))
5412 (info (string-append data "/info"))
5413 (html (string-append doc "/html")))
5414 (mkdir-p html)
5415 (mkdir-p info)
5416 (copy-recursively "build/html" html)
5417 (symlink (string-append html "/_images")
5418 (string-append info "/matplotlib-figures"))
5419 (with-directory-excursion "build/texinfo"
5420 (substitute* "matplotlib.texi"
5421 (("@image\\{([^,]*)" all file)
5422 (string-append "@image{matplotlib-figures/" file)))
5423 (symlink (string-append html "/_images")
5424 "./matplotlib-figures")
5425 (invoke "makeinfo" "--no-split"
5426 "-o" "matplotlib.info" "matplotlib.texi"))
5427 (install-file "build/texinfo/matplotlib.info" info))
5428 #t)))))
5429 (home-page (package-home-page python-matplotlib))
5430 (synopsis "Documentation for the python-matplotlib package")
5431 (description (package-description python-matplotlib))
5432 (license (package-license python-matplotlib))))
5433
5434 (define-public python2-matplotlib-documentation
5435 (let ((parent (package-with-python2 python-matplotlib-documentation)))
5436 (package
5437 (inherit parent)
5438 (native-inputs
5439 (alist-delete "python-sphinx-copybutton"
5440 (package-native-inputs parent))))))
5441
5442 (define-public python-matplotlib-venn
5443 (package
5444 (name "python-matplotlib-venn")
5445 (version "0.11.5")
5446 (source
5447 (origin
5448 (method url-fetch)
5449 (uri (pypi-uri "matplotlib-venn" version ".zip"))
5450 (sha256
5451 (base32
5452 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
5453 (build-system python-build-system)
5454 (arguments '(#:tests? #f)) ; tests are not included
5455 (propagated-inputs
5456 `(("python-matplotlib" ,python-matplotlib)
5457 ("python-numpy" ,python-numpy)
5458 ("python-scipy" ,python-scipy)))
5459 (native-inputs
5460 `(("unzip" ,unzip)))
5461 (home-page "https://github.com/konstantint/matplotlib-venn")
5462 (synopsis "Plot area-proportional Venn diagrams")
5463 (description
5464 "This package provides tools for plotting area-proportional two- and
5465 three-way Venn diagrams in @code{matplotlib}.")
5466 (license license:expat)))
5467
5468 (define-public python-pysnptools
5469 (package
5470 (name "python-pysnptools")
5471 (version "0.4.11")
5472 (source
5473 (origin
5474 (method url-fetch)
5475 (uri (pypi-uri "pysnptools" version))
5476 (sha256
5477 (base32
5478 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
5479 (build-system python-build-system)
5480 (arguments
5481 `(#:tests? #f ; no test data are included
5482 #:phases
5483 (modify-phases %standard-phases
5484 (replace 'check
5485 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
5486 (if tests?
5487 (begin
5488 (add-installed-pythonpath inputs outputs)
5489 (invoke "python3" "pysnptools/test.py"))
5490 #t))))))
5491 (propagated-inputs
5492 `(("python-dill" ,python-dill)
5493 ("python-h5py" ,python-h5py)
5494 ("python-numpy" ,python-numpy)
5495 ("python-pandas" ,python-pandas)
5496 ("python-psutil" ,python-psutil)
5497 ("python-scipy" ,python-scipy)))
5498 (native-inputs
5499 `(("python-cython" ,python-cython)))
5500 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
5501 (synopsis "Library for reading and manipulating genetic data")
5502 (description
5503 "PySnpTools is a library for reading and manipulating genetic data. It
5504 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
5505 those files. It can also efficiently manipulate ranges of integers using set
5506 operators such as union, intersection, and difference.")
5507 (license license:asl2.0)))
5508
5509 (define-public python2-pysnptools
5510 (package-with-python2 python-pysnptools))
5511
5512 (define-public python-wurlitzer
5513 (package
5514 (name "python-wurlitzer")
5515 (version "2.0.1")
5516 (source
5517 (origin
5518 (method url-fetch)
5519 (uri (pypi-uri "wurlitzer" version))
5520 (sha256
5521 (base32 "0hvmbc41kdwrjns8z1s4a59a4azdvzb8q3vs7nn1li4qm4l0g3yh"))))
5522 (build-system python-build-system)
5523 (arguments
5524 '(#:phases
5525 (modify-phases %standard-phases
5526 (replace 'check
5527 (lambda _
5528 (invoke "pytest" "-vv" "test.py"))))))
5529 (native-inputs
5530 `(("python-mock" ,python-mock)
5531 ("python-pytest" ,python-pytest)))
5532 (home-page "https://github.com/minrk/wurlitzer")
5533 (synopsis "Capture C-level output in context managers")
5534 (description
5535 "This library helps to redirect @code{sys.stdout} to a stream or a file
5536 while executing some piece of code, including C code running within a Python
5537 process.")
5538 (license license:expat)))
5539
5540 (define-public python-socksipy-branch
5541 (package
5542 (name "python-socksipy-branch")
5543 (version "1.01")
5544 (source
5545 (origin
5546 (method url-fetch)
5547 (uri (pypi-uri "SocksiPy-branch" version))
5548 (sha256
5549 (base32
5550 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
5551 (build-system python-build-system)
5552 (arguments
5553 `(#:tests? #f)) ; There are no tests
5554 (home-page "https://code.google.com/archive/p/socksipy-branch/")
5555 (synopsis "Python SOCKS module")
5556 (description
5557 "SocksiPy - A Python SOCKS client module. It provides a
5558 socket-like interface that supports connections to any TCP
5559 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
5560 The original version was developed by Dan Haim, this is a
5561 branch created by Mario Vilas to address some open issues,
5562 as the original project seems to have been abandoned circa 2007.")
5563 (license license:bsd-3)))
5564
5565 (define-public python2-socksipy-branch
5566 (package-with-python2 python-socksipy-branch))
5567
5568 (define-public python-socksipychain
5569 (package
5570 (name "python-socksipychain")
5571 (version "2.1.2")
5572 (source
5573 (origin
5574 (method git-fetch)
5575 (uri (git-reference
5576 (url "https://github.com/pagekite/PySocksipyChain")
5577 (commit (string-append "v" version))))
5578 (file-name (git-file-name name version))
5579 (sha256
5580 (base32
5581 "02pp994qmiivkdx4y6az5q80l6rzy8g6d2ipvp7kns7lsxvmc2y7"))))
5582 (build-system python-build-system)
5583 (arguments
5584 `(#:tests? #f)) ; Tests try to access the network.
5585 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
5586 (synopsis "Python SOCKS module with chained proxies support")
5587 (description
5588 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
5589 adds support for arbitrary chaining of proxy servers and various modes of
5590 TLS/SSL encryption. It was developed for use in PageKite, and also includes
5591 a simple netcat replacement with chaining support.")
5592 (license license:bsd-3)))
5593
5594 (define-public python-pycodestyle
5595 (package
5596 (name "python-pycodestyle")
5597 (version "2.7.0")
5598 (source
5599 (origin
5600 (method url-fetch)
5601 (uri (pypi-uri "pycodestyle" version))
5602 (sha256
5603 (base32
5604 "1vqwmzmjdv331kmfq3q9j3as2x7r2r49lf83r9w4147pdg8c32f3"))))
5605 (build-system python-build-system)
5606 (arguments
5607 `(#:phases
5608 (modify-phases %standard-phases
5609 (replace 'check
5610 (lambda _
5611 (invoke "pytest" "-vv"))))))
5612 (native-inputs
5613 `(("python-pytest" ,python-pytest)))
5614 (home-page "https://pycodestyle.readthedocs.io/")
5615 (synopsis "Python style guide checker")
5616 (description "@code{pycodestyle} (formerly pep8) is a tool to check
5617 Python code against some of the style conventions in
5618 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
5619 (license license:expat)))
5620
5621 (define-public python2-pycodestyle
5622 (package-with-python2 python-pycodestyle))
5623
5624 (define-public python-multidict
5625 (package
5626 (name "python-multidict")
5627 (version "4.7.5")
5628 (source
5629 (origin
5630 (method url-fetch)
5631 (uri (pypi-uri "multidict" version))
5632 (sha256
5633 (base32
5634 "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf"))))
5635 (build-system python-build-system)
5636 (arguments
5637 '(#:modules ((ice-9 ftw)
5638 (srfi srfi-1)
5639 (srfi srfi-26)
5640 (guix build utils)
5641 (guix build python-build-system))
5642 #:phases (modify-phases %standard-phases
5643 (replace 'check
5644 (lambda* (#:key tests? #:allow-other-keys)
5645 (if tests?
5646 (begin
5647 (let ((libdir (find (cut string-prefix? "lib." <>)
5648 (scandir "build"))))
5649 (setenv "PYTHONPATH"
5650 (string-append "./build/" libdir ":"
5651 (getenv "PYTHONPATH")))
5652 (invoke "pytest" "-vv")))
5653 (format #t "test suite not run~%"))
5654 #t)))))
5655 (native-inputs
5656 `(("python-pytest" ,python-pytest)
5657 ("python-pytest-cov" ,python-pytest-cov)))
5658 (home-page "https://github.com/aio-libs/multidict/")
5659 (synopsis "Multidict implementation")
5660 (description "Multidict is dict-like collection of key-value pairs
5661 where key might be occurred more than once in the container.")
5662 (license license:asl2.0)))
5663
5664 (define-public python-orderedmultidict
5665 (package
5666 (name "python-orderedmultidict")
5667 (version "1.0")
5668 (source
5669 (origin
5670 (method url-fetch)
5671 (uri (pypi-uri "orderedmultidict" version))
5672 (sha256
5673 (base32
5674 "1idjbl933avgaadscrjw1np3xkvnz3phq0l8vw5qs0rqcjx9b65q"))))
5675 (build-system python-build-system)
5676 (arguments
5677 `(#:phases
5678 (modify-phases %standard-phases
5679 (add-after 'unpack 'fix-tests
5680 (lambda _
5681 ;; The package uses nosetest for running the tests.
5682 ;; Adding this initfile allows to run the test suite
5683 ;; without requiring nosetest.
5684 (with-output-to-file "tests/__init__.py" newline)
5685 #t)))))
5686 (propagated-inputs
5687 `(("python-six" ,python-six)))
5688 (native-inputs
5689 `(("python-pycodestyle" ,python-pycodestyle)))
5690 (home-page "https://github.com/gruns/orderedmultidict")
5691 (synopsis "Python Ordered Multivalue Dictionary - omdict")
5692 (description "This package contains a library for ordered multivalue
5693 dictionaries. A multivalue dictionary is a dictionary that can store
5694 multiple values for the same key. An ordered multivalue dictionary is a
5695 multivalue dictionary that retains the order of insertions and deletions.")
5696 (license license:unlicense)))
5697
5698 (define-public python2-orderedmultidict
5699 (package-with-python2 python-orderedmultidict))
5700
5701 (define-public python-autopep8
5702 (package
5703 (name "python-autopep8")
5704 (version "1.5.3")
5705 (source
5706 (origin
5707 (method url-fetch)
5708 (uri (pypi-uri "autopep8" version))
5709 (sha256
5710 (base32
5711 "1w6vh627vrmgfbvrdcxrc3k4gxcldrb2lpgxv9irkdds851qrzb0"))))
5712 (build-system python-build-system)
5713 (propagated-inputs
5714 `(("python-pycodestyle" ,python-pycodestyle)
5715 ("python-toml" ,python-toml)))
5716 (home-page "https://github.com/hhatto/autopep8")
5717 (synopsis "Format Python code according to the PEP 8 style guide")
5718 (description
5719 "@code{autopep8} automatically formats Python code to conform to
5720 the PEP 8 style guide. It uses the pycodestyle utility to determine
5721 what parts of the code needs to be formatted. @code{autopep8} is
5722 capable of fixing most of the formatting issues that can be reported
5723 by pycodestyle.")
5724 (license (license:non-copyleft
5725 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
5726
5727 (define-public python2-autopep8
5728 (package-with-python2 python-autopep8))
5729
5730 (define-public python-distlib
5731 (package
5732 (name "python-distlib")
5733 (version "0.3.0")
5734 (source
5735 (origin
5736 (method url-fetch)
5737 (uri (pypi-uri "distlib" version ".zip"))
5738 (sha256
5739 (base32
5740 "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if"))))
5741 (build-system python-build-system)
5742 (arguments
5743 `(#:phases
5744 (modify-phases %standard-phases
5745 (add-before 'build 'no-/bin/sh
5746 (lambda _
5747 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
5748 (("/bin/sh") (which "sh")))
5749 #t))
5750 (add-before 'check 'prepare-test-env
5751 (lambda _
5752 (setenv "HOME" "/tmp")
5753 ;; NOTE: Any value works, the variable just has to be present.
5754 (setenv "SKIP_ONLINE" "1")
5755 #t)))))
5756 (native-inputs `(("unzip" ,unzip)))
5757 (home-page "https://bitbucket.org/pypa/distlib")
5758 (synopsis "Distribution utilities")
5759 (description "Distlib is a library which implements low-level functions that
5760 relate to packaging and distribution of Python software. It is intended to be
5761 used as the basis for third-party packaging tools.")
5762 (license license:psfl)))
5763
5764 ;; TODO: Merge with 'python-distlib' on the next rebuild cycle.
5765 (define-public python-distlib/next
5766 (package
5767 (inherit python-distlib)
5768 (version "0.3.1")
5769 (source
5770 (origin
5771 (method url-fetch)
5772 (uri (pypi-uri "distlib" version ".zip"))
5773 (sha256
5774 (base32
5775 "1wdzv7fsjhrkhh1wfkarlhcwa8m00mgcpdsvknmf2qy8f9l13xpd"))))))
5776
5777 (define-public python-distutils-extra
5778 (package
5779 (name "python-distutils-extra")
5780 (version "2.38")
5781 (source
5782 (origin
5783 (method url-fetch)
5784 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
5785 version "/+download/python-distutils-extra-"
5786 version ".tar.gz"))
5787 (sha256
5788 (base32
5789 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
5790 (build-system python-build-system)
5791 (home-page "https://launchpad.net/python-distutils-extra/")
5792 (synopsis "Enhancements to Python's distutils")
5793 (description
5794 "The python-distutils-extra module enables you to easily integrate
5795 gettext support, themed icons, and scrollkeeper-based documentation into
5796 Python's distutils.")
5797 (license license:gpl2)))
5798
5799 (define-public python2-distutils-extra
5800 (package-with-python2 python-distutils-extra))
5801
5802 (define-public python2-elib.intl
5803 (package
5804 (name "python2-elib.intl")
5805 (version "0.0.3")
5806 (source
5807 (origin
5808 ;; This project doesn't tag releases or publish tarballs, so we take
5809 ;; source from a (semi-arbitrary, i.e. latest as of now) git commit.
5810 (method git-fetch)
5811 (uri (git-reference
5812 (url "https://github.com/dieterv/elib.intl")
5813 (commit "d09997cfef")))
5814 (file-name (string-append name "-" version "-checkout"))
5815 (sha256
5816 (base32
5817 "0y7vzff9xgbnaay7m0va1arl6g68ncwrvbgwl7jqlclsahzzb09d"))))
5818 (build-system python-build-system)
5819 (arguments
5820 ;; incompatible with Python 3 (exception syntax)
5821 `(#:python ,python-2
5822 #:tests? #f))
5823 (home-page "https://github.com/dieterv/elib.intl")
5824 (synopsis "Enhanced internationalization for Python")
5825 (description
5826 "The elib.intl module provides enhanced internationalization (I18N)
5827 services for your Python modules and applications.")
5828 (license license:lgpl3+)))
5829
5830 (define-public python-olefile
5831 (package
5832 (name "python-olefile")
5833 (version "0.46")
5834 (source
5835 (origin
5836 (method url-fetch)
5837 (uri (string-append "https://github.com/decalage2/olefile/releases/"
5838 "download/v" version "/olefile-" version ".tar.gz"))
5839 (file-name (string-append name "-" version ".tar.gz"))
5840 (sha256
5841 (base32
5842 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
5843 (build-system python-build-system)
5844 (home-page "https://www.decalage.info/python/olefileio")
5845 (synopsis "Read and write Microsoft OLE2 files.")
5846 (description
5847 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
5848 Storage or Compound Document, Microsoft Office). It is an improved version of
5849 the OleFileIO module from PIL, the Python Image Library.")
5850 (license license:bsd-3)))
5851
5852 (define-public python2-olefile
5853 (package-with-python2 python-olefile))
5854
5855 (define-public python-pikepdf
5856 (package
5857 (name "python-pikepdf")
5858 (version "2.10.0")
5859 (source
5860 (origin
5861 (method url-fetch)
5862 (uri (pypi-uri "pikepdf" version))
5863 (sha256
5864 (base32 "09wfj1hjvj3r9gv7ywrqd7h3d0bz64bvils8sm3ghj90jhalb03s"))))
5865 (build-system python-build-system)
5866 (arguments
5867 `(#:tests? #false)) ;require python-xmp-toolkit
5868 (native-inputs
5869 `(("pybind11" ,pybind11)
5870 ("python-setuptools" ,python-setuptools)
5871 ("python-setuptools-scm" ,python-setuptools-scm/next)
5872 ("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)
5873 ("python-toml" ,python-toml)
5874 ("python-wheel" ,python-wheel)))
5875 (inputs
5876 `(("qpdf" ,qpdf)))
5877 (propagated-inputs
5878 `(("python-lxml" ,python-lxml)
5879 ("python-pillow" ,python-pillow)))
5880 (home-page "https://github.com/pikepdf/pikepdf")
5881 (synopsis "Read and write PDFs with Python")
5882 (description
5883 "pikepdf is a Python library for reading and writing PDF files.")
5884 (license license:mpl2.0)))
5885
5886 (define-public python-pillow
5887 (package
5888 (name "python-pillow")
5889 (version "8.1.1")
5890 (source
5891 (origin
5892 (method url-fetch)
5893 (uri (pypi-uri "Pillow" version))
5894 (sha256
5895 (base32
5896 "086g7nhv52wclrwnzbzs2x3nvyzs2hfq1bvgivsrp5f7r7wiiz7n"))))
5897 (build-system python-build-system)
5898 (native-inputs
5899 `(("python-pytest" ,python-pytest)))
5900 (inputs
5901 `(("freetype" ,freetype)
5902 ("lcms" ,lcms)
5903 ("libjpeg" ,libjpeg-turbo)
5904 ("libtiff" ,libtiff)
5905 ("libwebp" ,libwebp)
5906 ("openjpeg" ,openjpeg)
5907 ("zlib" ,zlib)))
5908 (propagated-inputs
5909 `(("python-olefile" ,python-olefile)))
5910 (arguments
5911 `(#:phases
5912 (modify-phases %standard-phases
5913 (add-after 'unpack 'patch-ldconfig
5914 (lambda _
5915 (substitute* "setup.py"
5916 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
5917 (replace 'check
5918 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5919 (if tests?
5920 (begin
5921 (setenv "HOME" (getcwd))
5922 ;; Make installed package available for running the tests.
5923 (add-installed-pythonpath inputs outputs)
5924 (invoke "python" "selftest.py" "--installed")
5925 (invoke "python" "-m" "pytest" "-vv"))
5926 #t))))))
5927 (home-page "https://python-pillow.org")
5928 (synopsis "Fork of the Python Imaging Library")
5929 (description
5930 "The Python Imaging Library adds image processing capabilities to your
5931 Python interpreter. This library provides extensive file format support, an
5932 efficient internal representation, and fairly powerful image processing
5933 capabilities. The core image library is designed for fast access to data
5934 stored in a few basic pixel formats. It should provide a solid foundation for
5935 a general image processing tool.")
5936 (properties `((python2-variant . ,(delay python2-pillow))))
5937 (license (license:x11-style
5938 "http://www.pythonware.com/products/pil/license.htm"
5939 "The PIL Software License"))))
5940
5941 (define-public python2-pillow
5942 (package-with-python2
5943 (package
5944 (inherit (strip-python2-variant python-pillow))
5945 ;; Version 6 is the last series with Python 2 support.
5946 (version "6.2.2")
5947 (source
5948 (origin
5949 (method url-fetch)
5950 (uri (pypi-uri "Pillow" version))
5951 (sha256
5952 (base32
5953 "0l5rv8jkdrb5q846v60v03mcq64yrhklidjkgwv6s1pda71g17yv")))))))
5954
5955 (define-public python-pillow-2.9
5956 (package
5957 (inherit python-pillow)
5958 (version "2.9.0")
5959 (source
5960 (origin
5961 (method url-fetch)
5962 (uri (pypi-uri "Pillow" version))
5963 (sha256
5964 (base32
5965 "0ada7lf3lmbdsqm3b7ja920p1pllyfhmqndr85ikpj77fmz9s5qg"))))
5966 (arguments
5967 (substitute-keyword-arguments (package-arguments python-pillow)
5968 ((#:tests? _ #f) #f)))
5969 (properties '((hidden? #t)))))
5970
5971 (define-public python-pillow-simd
5972 (package
5973 (inherit python-pillow)
5974 (name "python-pillow-simd")
5975 (version "7.1.2")
5976 ;; The PyPI tarball does not include test files.
5977 (source
5978 (origin
5979 (method git-fetch)
5980 (uri (git-reference
5981 (url "https://github.com/uploadcare/pillow-simd")
5982 (commit version)))
5983 (file-name (git-file-name name version))
5984 (sha256
5985 (base32 "0w11np4cybamry3jsg70x747c79zwjzfq0xiprfp6c186rd6nzp9"))))
5986 (arguments
5987 (substitute-keyword-arguments
5988 (package-arguments python-pillow)
5989 ((#:phases phases)
5990 `(modify-phases ,phases
5991 (add-after 'unpack 'make-tests-writable
5992 (lambda _
5993 (for-each make-file-writable (find-files "Tests"))
5994 #t))))))
5995 (inputs
5996 `(("libraqm" ,libraqm)
5997 ("libimagequant" ,libimagequant)
5998 ,@(package-inputs python-pillow)))
5999 (home-page "https://github.com/uploadcare/pillow-simd")
6000 (synopsis "Fork of the Python Imaging Library (Pillow)")
6001 (description "This package is a fork of Pillow which adds support for SIMD
6002 parallelism.")))
6003
6004 (define-public python-roifile
6005 (package
6006 (name "python-roifile")
6007 (version "2020.5.28")
6008 (source
6009 (origin
6010 (method url-fetch)
6011 (uri (pypi-uri "roifile" version))
6012 (sha256
6013 (base32
6014 "1vwbwfsw745gyqymff6dllc5zqjsgqmxaw245sw4an6yw9rcbzc0"))))
6015 (build-system python-build-system)
6016 (arguments `(#:tests? #f)) ; there are none
6017 (propagated-inputs
6018 `(("python-numpy" ,python-numpy)))
6019 (home-page "https://www.lfd.uci.edu/~gohlke/")
6020 (synopsis "Read and write ImageJ ROI format")
6021 (description "Roifile is a Python library to read, write, create, and plot
6022 ImageJ ROIs, an undocumented and ImageJ application specific format to store
6023 regions of interest, geometric shapes, paths, text, etc for image overlays.")
6024 (license license:bsd-3)))
6025
6026 (define-public python-tifffile
6027 (package
6028 (name "python-tifffile")
6029 (version "2020.6.3")
6030 (source
6031 (origin
6032 (method url-fetch)
6033 (uri (pypi-uri "tifffile" version))
6034 (sha256
6035 (base32
6036 "0xv3ynkbrsibqvx7250075idb7wm3canjd6lx2nzf3cbp6l07577"))))
6037 (build-system python-build-system)
6038 ;; Tests require lfdfiles, which depends on tifffile
6039 (arguments `(#:tests? #f))
6040 (propagated-inputs
6041 `(("python-numpy" ,python-numpy)
6042 ;;("python-lfdfiles" ,python-lfdfiles)
6043 ("python-roifile" ,python-roifile)))
6044 (home-page "https://www.lfd.uci.edu/~gohlke/")
6045 (synopsis "Read and write TIFF(r) files")
6046 (description "This package lets you read image and metadata from many
6047 bio-scientific formats such as plain TIFF, BigTIFF, OME-TIFF, STK, LSM, SGI,
6048 NIH, ImageJ, MicroManager, MD GEL, and FluoView files. It also lets you write
6049 numpy arrays to TIFF, BigTIFF, and ImageJ hyperstack compatible files.")
6050 (license license:bsd-3)))
6051
6052 (define-public python-lfdfiles
6053 (package
6054 (name "python-lfdfiles")
6055 (version "2020.1.1")
6056 (source
6057 (origin
6058 (method url-fetch)
6059 (uri (pypi-uri "lfdfiles" version))
6060 (sha256
6061 (base32
6062 "1n9bkfn4vxl0lbhzd0m35lq86ayx5fwcj3ghpfl2vbjbsnfp3h47"))))
6063 (build-system python-build-system)
6064 (propagated-inputs
6065 `(("python-click" ,python-click)
6066 ("python-numpy" ,python-numpy)
6067 ("python-tifffile" ,python-tifffile)))
6068 (home-page "https://www.lfd.uci.edu/~gohlke/")
6069 (synopsis "Work with LFD data files")
6070 (description
6071 "Lfdfiles is a Python library and console script for reading, writing,
6072 converting, and viewing many of the proprietary file formats used to store
6073 experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
6074 (license license:bsd-3)))
6075
6076 (define-public python-imageio
6077 (package
6078 (name "python-imageio")
6079 (version "2.8.0")
6080 (source
6081 (origin
6082 (method url-fetch)
6083 (uri (pypi-uri "imageio" version))
6084 (sha256
6085 (base32
6086 "1ksjl523fm0fikrd85llxfba35rc1qsgwadgr6mbn9kis79xcpzv"))))
6087 (build-system python-build-system)
6088 (arguments
6089 `(#:tests? #f ; many tests require online data
6090 #:phases
6091 (modify-phases %standard-phases
6092 (replace 'check
6093 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
6094 (if tests?
6095 (begin
6096 ;; Make installed package available for running the tests.
6097 (add-installed-pythonpath inputs outputs)
6098 (invoke "pytest" "-vv"))
6099 #t))))))
6100 (propagated-inputs
6101 `(("python-numpy" ,python-numpy)
6102 ("python-pillow" ,python-pillow)
6103 ("python-psutil" ,python-psutil)))
6104 (native-inputs
6105 `(("python-pytest" ,python-pytest)))
6106 (home-page "https://imageio.github.io/")
6107 (synopsis "Library for reading and writing a wide range of image data")
6108 (description
6109 "Imageio is a Python library that provides an easy interface to read and
6110 write a wide range of image data, including animated images, video, volumetric
6111 data, and scientific formats.")
6112 (license license:bsd-2)))
6113
6114 (define-public python-pycparser
6115 (package
6116 (name "python-pycparser")
6117 (version "2.20")
6118 (source
6119 (origin
6120 (method url-fetch)
6121 (uri (pypi-uri "pycparser" version))
6122 (sha256
6123 (base32
6124 "1w0m3xvlrzq4lkbvd1ngfm8mdw64r1yxy6n7djlw6qj5d0km6ird"))))
6125 (outputs '("out" "doc"))
6126 (build-system python-build-system)
6127 (native-inputs
6128 `(("pkg-config" ,pkg-config)))
6129 (arguments
6130 `(#:phases
6131 (modify-phases %standard-phases
6132 (replace 'check
6133 (lambda _
6134 (with-directory-excursion "tests"
6135 (invoke "python" "all_tests.py"))
6136 #t))
6137 (add-after 'install 'install-doc
6138 (lambda* (#:key outputs #:allow-other-keys)
6139 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
6140 (doc (string-append data "/doc/" ,name "-" ,version))
6141 (examples (string-append doc "/examples")))
6142 (mkdir-p examples)
6143 (for-each (lambda (file)
6144 (copy-file (string-append "." file)
6145 (string-append doc file)))
6146 '("/README.rst" "/CHANGES" "/LICENSE"))
6147 (copy-recursively "examples" examples)
6148 #t))))))
6149 (home-page "https://github.com/eliben/pycparser")
6150 (synopsis "C parser in Python")
6151 (description
6152 "Pycparser is a complete parser of the C language, written in pure Python
6153 using the PLY parsing library. It parses C code into an AST and can serve as
6154 a front-end for C compilers or analysis tools.")
6155 (license license:bsd-3)))
6156
6157 (define-public python2-pycparser
6158 (package-with-python2 python-pycparser))
6159
6160 (define-public python-xlsxwriter
6161 (package
6162 (name "python-xlsxwriter")
6163 (version "1.3.7")
6164 (source
6165 (origin
6166 ;; There are no tests in the PyPI tarball.
6167 (method git-fetch)
6168 (uri (git-reference
6169 (url "https://github.com/jmcnamara/XlsxWriter")
6170 (commit (string-append "RELEASE_" version))))
6171 (file-name (git-file-name name version))
6172 (sha256
6173 (base32 "1qg40r2mwrqfmhaxnary1cfgi0dwwazp5qga7c9p2cdji2v0x5rm"))))
6174 (build-system python-build-system)
6175 (home-page "https://github.com/jmcnamara/XlsxWriter")
6176 (synopsis "Python module for creating Excel XLSX files")
6177 (description
6178 "XlsxWriter is a Python module that can be used to write text, numbers,
6179 formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.")
6180 (license license:bsd-2)))
6181
6182 (define-public python-pywavelets
6183 (package
6184 (name "python-pywavelets")
6185 (version "1.1.1")
6186 (home-page "https://github.com/PyWavelets/pywt")
6187 (source (origin
6188 (method url-fetch)
6189 (uri (pypi-uri "PyWavelets" version))
6190 (sha256
6191 (base32
6192 "1j88c0r4j1d4mb3f8qhz6nalyx21qrzmsm70rjngnkybd87v8r0s"))))
6193 (build-system python-build-system)
6194 (arguments
6195 '(#:modules ((ice-9 ftw)
6196 (srfi srfi-1)
6197 (srfi srfi-26)
6198 (guix build utils)
6199 (guix build python-build-system))
6200 #:phases
6201 (modify-phases %standard-phases
6202 (replace 'check
6203 (lambda _
6204 (let ((cwd (getcwd))
6205 (libdir (find (cut string-prefix? "lib." <>)
6206 (scandir "build"))))
6207 (with-directory-excursion (string-append cwd "/build/" libdir)
6208 (invoke "pytest" "-vv"))))))))
6209 (native-inputs
6210 `(("python-matplotlib" ,python-matplotlib) ;for tests
6211 ("python-pytest" ,python-pytest)))
6212 (propagated-inputs
6213 `(("python-numpy" ,python-numpy)))
6214 (synopsis "Wavelet transforms in Python")
6215 (description
6216 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
6217 mathematical basis functions that are localized in both time and frequency.
6218 Wavelet transforms are time-frequency transforms employing wavelets. They are
6219 similar to Fourier transforms, the difference being that Fourier transforms are
6220 localized only in frequency instead of in time and frequency.")
6221 (license license:expat)))
6222
6223 (define-public python-pywal
6224 (package
6225 (name "python-pywal")
6226 (version "3.3.0")
6227 (source
6228 (origin
6229 (method git-fetch)
6230 (uri (git-reference
6231 (url "https://github.com/dylanaraps/pywal")
6232 (commit version)))
6233 (file-name (git-file-name name version))
6234 (sha256
6235 (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
6236 (build-system python-build-system)
6237 (arguments
6238 `(#:phases
6239 (modify-phases %standard-phases
6240 (add-before 'check 'fix-home-directory
6241 (lambda _
6242 ;; Tests fail with "Permission denied: '/homeless-shelter'".
6243 (setenv "HOME" "/tmp")
6244 #t)))))
6245 (inputs
6246 `(("imagemagick" ,imagemagick)))
6247 (home-page "https://github.com/dylanaraps/pywal")
6248 (synopsis "Color palette generator and applicator")
6249 (description
6250 "Pywal is a tool that generates a color palette from the dominant colors
6251 in an image. It then applies the colors system-wide and on-the-fly in all of
6252 your favourite programs.")
6253 (license license:expat)))
6254
6255 (define-public python-pywinrm
6256 (package
6257 (name "python-pywinrm")
6258 (version "0.4.1")
6259 (source
6260 (origin
6261 (method url-fetch)
6262 (uri (pypi-uri "pywinrm" version))
6263 (sha256
6264 (base32
6265 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
6266 (build-system python-build-system)
6267 (propagated-inputs
6268 `(("python-six" ,python-six)
6269 ("python-requests_ntlm" ,python-requests_ntlm)
6270 ("python-xmltodict" ,python-xmltodict)
6271 ("python-kerberos" ,python-kerberos)))
6272 (native-inputs
6273 `(("python-mock" ,python-mock)
6274 ("python-pytest" ,python-pytest)))
6275 (home-page "https://github.com/diyan/pywinrm/")
6276 (synopsis
6277 "Python library for Windows Remote Management (WinRM)")
6278 (description
6279 "pywinrm is a Python client for the Windows Remote Management (WinRM)
6280 service. It allows you to invoke commands on target Windows machines from
6281 any machine that can run Python.")
6282 (license license:expat)))
6283
6284 (define-public python-xcffib
6285 (package
6286 (name "python-xcffib")
6287 (version "0.6.0")
6288 (source
6289 (origin
6290 (method url-fetch)
6291 (uri (pypi-uri "xcffib" version))
6292 (sha256
6293 (base32
6294 "04k91yxyb3pgc5lvxmivh8w71yjrap2g57yk3s73x4rm4nvjq51n"))))
6295 (build-system python-build-system)
6296 (inputs
6297 `(("libxcb" ,libxcb)))
6298 (propagated-inputs
6299 `(("python-cffi" ,python-cffi) ; used at run time
6300 ("python-six" ,python-six)))
6301 (arguments
6302 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
6303 #:tests? #f
6304 #:phases
6305 (modify-phases %standard-phases
6306 (add-after 'unpack 'fix-libxcb-path
6307 (lambda* (#:key inputs #:allow-other-keys)
6308 (let ((libxcb (assoc-ref inputs "libxcb")))
6309 (substitute* '("xcffib/__init__.py")
6310 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
6311 #t)))
6312 (add-after 'install 'install-doc
6313 (lambda* (#:key outputs #:allow-other-keys)
6314 (let ((doc (string-append (assoc-ref outputs "out") "/share"
6315 "/doc/" ,name "-" ,version)))
6316 (mkdir-p doc)
6317 (copy-file "README.md"
6318 (string-append doc "/README.md"))
6319 #t))))))
6320 (home-page "https://github.com/tych0/xcffib")
6321 (synopsis "XCB Python bindings")
6322 (description
6323 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
6324 support for Python 3 and PyPy. It is based on cffi.")
6325 (license license:expat)))
6326
6327 (define-public python2-xcffib
6328 (package-with-python2 python-xcffib))
6329
6330 (define-public python-cairocffi
6331 (package
6332 (name "python-cairocffi")
6333 (version "1.2.0")
6334 (source
6335 (origin
6336 ;; The PyPI archive does not include the documentation, so use Git.
6337 (method git-fetch)
6338 (uri (git-reference
6339 (url "https://github.com/Kozea/cairocffi")
6340 (commit (string-append "v" version))))
6341 (file-name (git-file-name name version))
6342 (sha256
6343 (base32
6344 "1ypw0c2lr43acn57hbmckk183zq4h477j7p4ig2zjvw0mcpvia50"))))
6345 (build-system python-build-system)
6346 (outputs '("out" "doc"))
6347 (inputs
6348 `(("glib" ,glib)
6349 ("gtk+" ,gtk+)
6350 ("gdk-pixbuf" ,gdk-pixbuf)
6351 ("cairo" ,cairo)))
6352 (native-inputs
6353 `(("python-numpy" ,python-numpy)
6354 ("python-pytest" ,python-pytest)
6355 ("python-pytest-cov" ,python-pytest-cov)
6356 ("python-pytest-runner" ,python-pytest-runner)
6357 ("python-sphinx" ,python-sphinx)
6358 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)))
6359 (propagated-inputs
6360 `(("python-xcffib" ,python-xcffib))) ; used at run time
6361 (arguments
6362 `(#:phases
6363 (modify-phases %standard-phases
6364 (add-after 'unpack 'patch-paths
6365 (lambda* (#:key inputs #:allow-other-keys)
6366 (substitute* "cairocffi/__init__.py"
6367 ;; Hack the dynamic library loading mechanism.
6368 (("find_library\\(library_name\\)")
6369 "\"found\"")
6370 (("filenames = \\(library_filename,\\) \\+ filenames")
6371 "pass")
6372 (("libcairo.so.2")
6373 (string-append (assoc-ref inputs "cairo")
6374 "/lib/libcairo.so.2")))
6375 (substitute* "cairocffi/pixbuf.py"
6376 (("libgdk_pixbuf-2.0.so.0")
6377 (string-append (assoc-ref inputs "gdk-pixbuf")
6378 "/lib/libgdk_pixbuf-2.0.so.0"))
6379 (("libgobject-2.0.so.0")
6380 (string-append (assoc-ref inputs "glib")
6381 "/lib/libgobject-2.0.so.0"))
6382 (("libglib-2.0.so.0")
6383 (string-append (assoc-ref inputs "glib")
6384 "/lib/libglib-2.0.so.0"))
6385 (("libgdk-3.so.0")
6386 (string-append (assoc-ref inputs "gtk+")
6387 "/lib/libgdk-3.so.0")))
6388 #t))
6389 (add-after 'unpack 'disable-linters
6390 ;; Their check fails; none of our business.
6391 (lambda _
6392 (substitute* "setup.cfg"
6393 ((".*pytest-flake8.*") "")
6394 ((".*pytest-isort.*") "")
6395 (("--flake8") "")
6396 (("--isort") ""))
6397 #t))
6398 (add-after 'install 'install-doc
6399 (lambda* (#:key inputs outputs #:allow-other-keys)
6400 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
6401 (doc (string-append data "/doc/" ,name "-" ,version))
6402 (html (string-append doc "/html")))
6403 (setenv "LD_LIBRARY_PATH"
6404 (string-append (assoc-ref inputs "cairo") "/lib" ":"
6405 (assoc-ref inputs "gdk-pixbuf") "/lib"))
6406 (setenv "LANG" "en_US.UTF-8")
6407 (mkdir-p html)
6408 (for-each (lambda (file)
6409 (copy-file (string-append "." file)
6410 (string-append doc file)))
6411 '("/README.rst" "/NEWS.rst"))
6412 (system* "python" "setup.py" "build_sphinx")
6413 (copy-recursively "docs/_build/html" html)
6414 #t))))))
6415 (home-page "https://github.com/Kozea/cairocffi")
6416 (synopsis "Python bindings and object-oriented API for Cairo")
6417 (description
6418 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
6419 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
6420 graphics library with support for multiple backends including image buffers,
6421 PNG, PostScript, PDF, and SVG file output.")
6422 (license license:bsd-3)))
6423
6424 (define-public python-decorator
6425 (package
6426 (name "python-decorator")
6427 (version "4.3.0")
6428 (source
6429 (origin
6430 (method url-fetch)
6431 (uri (pypi-uri "decorator" version))
6432 (sha256
6433 (base32 "0308djallnh00v112y5b7nadl657ysmkp6vc8xn51d6yzc9zm7n3"))))
6434 (build-system python-build-system)
6435 (home-page "https://pypi.org/project/decorator/")
6436 (synopsis "Python module to simplify usage of decorators")
6437 (description
6438 "The aim of the decorator module is to simplify the usage of decorators
6439 for the average programmer, and to popularize decorators usage giving examples
6440 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
6441 etc. The core of this module is a decorator factory.")
6442 (license license:expat)))
6443
6444 (define-public python2-decorator
6445 (package-with-python2 python-decorator))
6446
6447 (define-public python-drmaa
6448 (package
6449 (name "python-drmaa")
6450 (version "0.7.7")
6451 (source
6452 (origin
6453 (method url-fetch)
6454 (uri (pypi-uri "drmaa" version))
6455 (sha256
6456 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
6457 (build-system python-build-system)
6458 ;; The test suite requires libdrmaa which is provided by the cluster
6459 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
6460 ;; should be set to the path of the libdrmaa library.
6461 (arguments '(#:tests? #f))
6462 (native-inputs
6463 `(("python-nose" ,python-nose)))
6464 (home-page "https://pypi.org/project/drmaa/")
6465 (synopsis "Python bindings for the DRMAA library")
6466 (description
6467 "A Python package for Distributed Resource Management (DRM) job
6468 submission and control. This package is an implementation of the DRMAA 1.0
6469 Python language binding specification.")
6470 (license license:bsd-3)))
6471
6472 (define-public python2-drmaa
6473 (package-with-python2 python-drmaa))
6474
6475 (define-public python-grako
6476 (package
6477 (name "python-grako")
6478 (version "3.99.9")
6479 (source
6480 (origin
6481 (method url-fetch)
6482 (uri
6483 (pypi-uri "grako" version ".zip"))
6484 (sha256
6485 (base32
6486 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
6487 (build-system python-build-system)
6488 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
6489 (native-inputs
6490 `(("unzip" ,unzip)
6491 ("python-pytest" ,python-pytest)
6492 ("python-pytest-runner" ,python-pytest-runner)))
6493 (home-page "https://bitbucket.org/neogeny/grako")
6494 (synopsis "EBNF parser generator")
6495 (description
6496 "Grako takes a grammar in a variation of EBNF as input, and outputs a
6497 memoizing PEG/Packrat parser in Python.")
6498 (license license:bsd-3)))
6499
6500 (define-public python2-grako
6501 (package-with-python2 python-grako))
6502
6503 (define-public python-grandalf
6504 (package
6505 (name "python-grandalf")
6506 (version "0.7")
6507 (source
6508 (origin
6509 ;; There's no source tarball on PyPI.
6510 (method git-fetch)
6511 (uri (git-reference
6512 (url "https://github.com/bdcht/grandalf")
6513 (commit (string-append "v" version))))
6514 (file-name (git-file-name name version))
6515 (sha256
6516 (base32
6517 "03p8w8ljpb87qbyldm3s6b7qi30hfcn43h33iwlgqcf31fjsyr4g"))))
6518 (build-system python-build-system)
6519 (arguments
6520 '(#:phases
6521 (modify-phases %standard-phases
6522 (replace 'check
6523 (lambda _
6524 (invoke "python" "setup.py" "pytest"))))))
6525 (native-inputs
6526 `(("python-pytest" ,python-pytest)
6527 ("python-pytest-runner" ,python-pytest-runner)))
6528 (propagated-inputs
6529 `(("python-numpy" ,python-numpy)
6530 ("python-ply" ,python-ply)))
6531 (home-page "https://github.com/bdcht/grandalf")
6532 (synopsis "Graph and drawing algorithms framework")
6533 (description
6534 "Grandalf is a Python package made for experimentations with graphs
6535 drawing algorithms. It is written in pure Python, and currently implements
6536 two layouts: the Sugiyama hierarchical layout and the force-driven or energy
6537 minimization approach. While not as fast or featured as graphviz or other
6538 libraries like OGDF (C++), it provides a way to walk and draw graphs no larger
6539 than thousands of nodes, while keeping the source code simple enough to tweak
6540 and hack any part of it for experimental purpose. With a total of about 1500
6541 lines of Python, the code involved in drawing the Sugiyama (dot) layout fits
6542 in less than 600 lines. The energy minimization approach is comprised of only
6543 250 lines!
6544
6545 Grandalf does only 2 not-so-simple things:
6546 @itemize
6547 @item computing the nodes (x,y) coordinates (based on provided nodes
6548 dimensions, and a chosen layout)
6549 @item routing the edges with lines or nurbs
6550 @end itemize
6551
6552 It doesn’t depend on any GTK/Qt/whatever graphics toolkit. This means that it
6553 will help you find where to draw things like nodes and edges, but it’s up to
6554 you to actually draw things with your favorite toolkit.")
6555 ;; The user can choose either license.
6556 (license (list license:gpl2 license:epl1.0))))
6557
6558 (define-public python-gridmap
6559 (package
6560 (name "python-gridmap")
6561 (version "0.14.0")
6562 (source
6563 (origin
6564 (method git-fetch)
6565 (uri (git-reference
6566 (url "https://github.com/pygridtools/gridmap")
6567 (commit (string-append "v" version))))
6568 (file-name (git-file-name name version))
6569 (sha256
6570 (base32 "0v0sgpg6pz8h61f9aqjf5xk0ipr512bbz8dxzjjylksj135qr19l"))))
6571 (build-system python-build-system)
6572 (arguments
6573 '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
6574 (propagated-inputs
6575 `(("python-psutil" ,python-psutil)
6576 ("python-drmaa" ,python-drmaa)
6577 ("python-pyzmq" ,python-pyzmq)))
6578 (home-page "https://github.com/pygridtools/gridmap")
6579 (synopsis "Create jobs on a cluster directly from Python")
6580 (description
6581 "Gridmap is a Python package to allow you to easily create jobs on the
6582 cluster directly from Python. You can directly map Python functions onto the
6583 cluster without needing to write any wrapper code yourself.")
6584 (license license:gpl3+)))
6585
6586 (define-public python2-gridmap
6587 (package-with-python2 python-gridmap))
6588
6589 (define-public python-honcho
6590 (package
6591 (name "python-honcho")
6592 (version "1.0.1")
6593 (source
6594 (origin
6595 (method git-fetch)
6596 (uri (git-reference
6597 (url "https://github.com/nickstenning/honcho")
6598 (commit (string-append "v" version))))
6599 (file-name (git-file-name name version))
6600 (sha256
6601 (base32 "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b"))))
6602 (build-system python-build-system)
6603 (native-inputs
6604 `(("python-pytest" ,python-pytest)
6605 ("python-mock" ,python-mock)
6606 ("python-tox" ,python-tox)
6607 ("which" ,which))) ;for tests
6608 (propagated-inputs
6609 `(("python-jinja2" ,python-jinja2)))
6610 (arguments
6611 `(#:phases
6612 (modify-phases %standard-phases
6613 (delete 'check)
6614 (add-after 'install 'check
6615 (lambda* (#:key outputs inputs #:allow-other-keys)
6616 ;; fix honcho path in testsuite
6617 (substitute* "tests/conftest.py"
6618 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
6619 "/bin/honcho" "'")))
6620 ;; It's easier to run tests after install.
6621 ;; Make installed package available for running the tests
6622 (add-installed-pythonpath inputs outputs)
6623 (invoke "py.test" "-v"))))))
6624 (home-page "https://github.com/nickstenning/honcho")
6625 (synopsis "Manage Procfile-based applications")
6626 (description
6627 "A Procfile is a file which describes how to run an application
6628 consisting of several processes. honcho starts all listed processes.
6629 The output of all running processes is collected by honcho and
6630 displayed.")
6631 (license license:expat)))
6632
6633 (define-public python-pexpect
6634 (package
6635 (name "python-pexpect")
6636 (version "4.8.0")
6637 (source
6638 (origin
6639 (method url-fetch)
6640 (uri (pypi-uri "pexpect" version))
6641 (sha256
6642 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
6643 (build-system python-build-system)
6644 (arguments
6645 `(#:phases
6646 (modify-phases %standard-phases
6647 (add-before 'check 'prepare-tests
6648 (lambda _
6649 (substitute* (find-files "tests")
6650 (("/bin/ls") (which "ls"))
6651 (("/bin/echo") (which "echo"))
6652 (("/bin/which") (which "which"))
6653 ;; Many tests try to use the /bin directory which
6654 ;; is not present in the build environment.
6655 ;; Use one that's non-empty and unlikely to change.
6656 (("/bin'") "/dev'")
6657 ;; Disable failing test. See upstream bug report
6658 ;; https://github.com/pexpect/pexpect/issues/568
6659 (("def test_bash") "def _test_bash"))
6660 ;; XXX: Socket connection test gets "Connection reset by peer".
6661 ;; Why does it not work? Delete for now.
6662 (delete-file "tests/test_socket.py")
6663 #t))
6664 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
6665 (native-inputs
6666 `(("python-nose" ,python-nose)
6667 ("python-pytest" ,python-pytest)
6668 ("man-db" ,man-db)
6669 ("which" ,which)
6670 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
6671 (propagated-inputs
6672 `(("python-ptyprocess" ,python-ptyprocess)))
6673 (home-page "http://pexpect.readthedocs.org/")
6674 (synopsis "Controlling interactive console applications")
6675 (description
6676 "Pexpect is a pure Python module for spawning child applications;
6677 controlling them; and responding to expected patterns in their output.
6678 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
6679 child application and control it as if a human were typing commands.")
6680 (license license:isc)))
6681
6682 (define-public python2-pexpect
6683 (package-with-python2 python-pexpect))
6684
6685 (define-public python-setuptools-scm
6686 (package
6687 (name "python-setuptools-scm")
6688 (version "3.4.3")
6689 (source (origin
6690 (method url-fetch)
6691 (uri (pypi-uri "setuptools_scm" version))
6692 (sha256
6693 (base32
6694 "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16"))))
6695 (build-system python-build-system)
6696 (home-page "https://github.com/pypa/setuptools_scm/")
6697 (synopsis "Manage Python package versions in SCM metadata")
6698 (description
6699 "Setuptools_scm handles managing your Python package versions in
6700 @dfn{software configuration management} (SCM) metadata instead of declaring
6701 them as the version argument or in a SCM managed file.")
6702 (license license:expat)))
6703
6704 ;; TODO: Merge with 'python-setuptools-scm' on the next rebuild cycle.
6705 (define-public python-setuptools-scm/next
6706 (package
6707 (inherit python-setuptools-scm)
6708 (version "5.0.1")
6709 (source
6710 (origin
6711 (method url-fetch)
6712 (uri (pypi-uri "setuptools_scm" version))
6713 (sha256
6714 (base32 "0ahlrxxkx2xhmxskx57gc96w3bdndflxx30304ihvm7ds136nny8"))))))
6715
6716 (define-public python2-setuptools-scm
6717 (package-with-python2 python-setuptools-scm))
6718
6719 (define-public python-sexpdata
6720 (package
6721 (name "python-sexpdata")
6722 (version "0.0.3")
6723 (source
6724 (origin
6725 (method url-fetch)
6726 (uri (pypi-uri "sexpdata" version))
6727 (sha256
6728 (base32
6729 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
6730 (build-system python-build-system)
6731 (home-page "https://github.com/jd-boyd/sexpdata")
6732 (synopsis "S-expression parser for Python")
6733 (description
6734 "Sexpdata is an S-expression parser/serializer. It has load and dump
6735 functions like pickle, json or PyYAML module.")
6736 (license license:bsd-3)))
6737
6738 (define-public python-pathlib2
6739 (package
6740 (name "python-pathlib2")
6741 (version "2.3.3")
6742 (source
6743 (origin
6744 (method url-fetch)
6745 (uri (pypi-uri "pathlib2" version))
6746 (sha256
6747 (base32
6748 "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
6749 (build-system python-build-system)
6750 (propagated-inputs
6751 `(("python-scandir" ,python-scandir)
6752 ("python-six" ,python-six)))
6753 (home-page "https://pypi.org/project/pathlib2/")
6754 (synopsis "Object-oriented file system paths")
6755 (description "The goal of pathlib2 is to provide a backport of the
6756 standard @code{pathlib} module which tracks the standard library module, so
6757 all the newest features of the standard @code{pathlib} can be used also on
6758 older Python versions.")
6759 (license license:expat)))
6760
6761 (define-public python-importlib-resources
6762 (package
6763 (name "python-importlib-resources")
6764 (version "3.0.0")
6765 (source
6766 (origin
6767 (method url-fetch)
6768 (uri (pypi-uri "importlib_resources" version))
6769 (sha256
6770 (base32
6771 "1hq626mx5jl9zfl0wdrjkxsnh8qd98fqv322n68b9251xjk4bxqr"))))
6772 (build-system python-build-system)
6773 (native-inputs
6774 `(("python-setuptools-scm" ,python-setuptools-scm)
6775 ("python-toml" ,python-toml)))
6776 (home-page "http://importlib-resources.readthedocs.io/")
6777 (synopsis "Read resources from Python packages")
6778 (description
6779 "@code{importlib_resources} is a backport of Python 3's standard library
6780 @code{importlib.resources} module for Python 2.7, and Python 3.")
6781 (properties `((python2-variant . ,(delay python2-importlib-resources))))
6782 (license license:asl2.0)))
6783
6784 (define-public python2-importlib-resources
6785 (package
6786 (name "python2-importlib-resources")
6787 (version "1.0.2")
6788 (source (origin
6789 (method url-fetch)
6790 (uri (pypi-uri "importlib_resources" version))
6791 (sha256
6792 (base32
6793 "0y3hg12iby1qyaspnbisz4s4vxax7syikk3skznwqizqyv89y9yk"))))
6794 (build-system python-build-system)
6795 (arguments
6796 `(#:python ,python-2
6797 #:phases (modify-phases %standard-phases
6798 ;; The build system tests for python-wheel, but it is
6799 ;; not required for Guix nor the test suite. Just drop
6800 ;; it to make bootstrapping pytest easier.
6801 (add-after 'unpack 'drop-wheel-dependency
6802 (lambda _
6803 (substitute* "setup.cfg"
6804 (("^[[:blank:]]+wheel")
6805 ""))
6806 #t)))))
6807 (propagated-inputs
6808 `(("python-pathlib2" ,python2-pathlib2)
6809 ("python-typing" ,python2-typing)))
6810 (home-page "https://gitlab.com/python-devs/importlib_resources")
6811 (synopsis "Backport of @code{importlib.resources} from Python 3.7")
6812 (description
6813 "This package provides an implementation of @code{importlib.resources}
6814 for older versions of Python.")
6815 (license license:asl2.0)))
6816
6817 ;; For importlib-metadata-bootstrap below.
6818 (define-public python2-importlib-resources-bootstrap
6819 (hidden-package
6820 (package/inherit
6821 python2-importlib-resources
6822 (name "python2-importlib-resources-bootstrap")
6823 (propagated-inputs
6824 `(("python-pathlib2-bootstrap" ,python2-pathlib2-bootstrap)
6825 ("python-typing" ,python2-typing))))))
6826
6827 (define-public python-importlib-metadata
6828 (package
6829 (name "python-importlib-metadata")
6830 (version "1.5.0")
6831 (source
6832 (origin
6833 (method url-fetch)
6834 (uri (pypi-uri "importlib_metadata" version))
6835 (sha256
6836 (base32
6837 "00ikdj4gjhankdljnz7g5ggak4k9lql2926x0x117ir9j2lv7x86"))))
6838 (build-system python-build-system)
6839 (propagated-inputs
6840 `(("python-zipp" ,python-zipp)))
6841 (native-inputs
6842 `(("python-setuptools-scm" ,python-setuptools-scm)
6843 ("python-pyfakefs" ,python-pyfakefs)
6844 ("python-packaging" ,python-packaging)))
6845 (home-page "https://importlib-metadata.readthedocs.io/")
6846 (synopsis "Read metadata from Python packages")
6847 (description
6848 "@code{importlib_metadata} is a library which provides an API for
6849 accessing an installed Python package's metadata, such as its entry points or
6850 its top-level name. This functionality intends to replace most uses of
6851 @code{pkg_resources} entry point API and metadata API. Along with
6852 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
6853 need to use the older and less efficient @code{pkg_resources} package.")
6854 (properties `((python2-variant . ,(delay python2-importlib-metadata))))
6855 (license license:asl2.0)))
6856
6857 (define-public python2-importlib-metadata
6858 (let ((base (package-with-python2 (strip-python2-variant
6859 python-importlib-metadata))))
6860 (package/inherit
6861 base
6862 (name "python2-importlib-metadata")
6863 (native-inputs
6864 `(("python-setuptools-scm" ,python2-setuptools-scm)
6865 ("python-pyfakefs" ,python2-pyfakefs-bootstrap)
6866 ("python-packaging" ,python2-packaging-bootstrap)))
6867 (propagated-inputs
6868 `(("python-configparser" ,python2-configparser)
6869 ("python-contextlib2" ,python2-contextlib2)
6870 ("python-importlib-resources" ,python2-importlib-resources)
6871 ("python-pathlib2" ,python2-pathlib2)
6872 ,@(package-propagated-inputs base))))))
6873
6874 ;; This package is used by python2-pytest, and thus must not depend on it.
6875 (define-public python2-importlib-metadata-bootstrap
6876 (hidden-package
6877 (package/inherit
6878 python2-importlib-metadata
6879 (name "python2-importlib-metadata-bootstrap")
6880 (arguments
6881 `(#:tests? #f
6882 ,@(package-arguments python2-importlib-metadata)))
6883 (propagated-inputs
6884 `(("python-zipp" ,python2-zipp-bootstrap)
6885 ("python-pathlib2" ,python2-pathlib2-bootstrap)
6886 ("python-configparser" ,python2-configparser)
6887 ("python-contextlib2" ,python2-contextlib2-bootstrap)
6888 ("python-importlib-resources" ,python2-importlib-resources-bootstrap))))))
6889
6890 (define-public python-importmagic
6891 (package
6892 (name "python-importmagic")
6893 (version "0.1.7")
6894 (source
6895 (origin
6896 (method url-fetch)
6897 (uri (pypi-uri "importmagic" version))
6898 (sha256
6899 (base32
6900 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
6901 (build-system python-build-system)
6902 (home-page "https://github.com/alecthomas/importmagic")
6903 (synopsis "Library for adding, removing and managing Python imports")
6904 (description
6905 "Importmagic is a Python library for automatically managing imports by
6906 finding unresolved symbols in Python code and their corresponding imports.")
6907 (license license:bsd-3)))
6908
6909 (define-public python-inotify-simple
6910 (package
6911 (name "python-inotify-simple")
6912 (version "1.3.5")
6913 (source
6914 (origin
6915 (method git-fetch)
6916 (uri (git-reference
6917 (url "https://github.com/chrisjbillington/inotify_simple")
6918 (commit version)))
6919 (file-name (git-file-name name version))
6920 (sha256
6921 (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
6922 (build-system python-build-system)
6923 (home-page
6924 "https://github.com/chrisjbillington/inotify_simple")
6925 (synopsis "Simple wrapper around inotify library")
6926 (description
6927 "@code{inotify-simple} is a simple wrapper around inotify library.")
6928 (license license:bsd-3)))
6929
6930 (define-public python-jaraco-packaging
6931 (package
6932 (name "python-jaraco-packaging")
6933 (version "6.1")
6934 (source
6935 (origin
6936 (method url-fetch)
6937 (uri (pypi-uri "jaraco.packaging" version))
6938 (sha256
6939 (base32
6940 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
6941 (build-system python-build-system)
6942 (propagated-inputs
6943 `(("python-pytest" ,python-pytest)
6944 ("python-pytest-checkdocs" ,python-pytest-checkdocs)
6945 ("python-pytest-flake8" ,python-pytest-flake8)
6946 ("python-rst.linker" ,python-rst.linker)
6947 ("python-setuptools" ,python-setuptools)
6948 ("python-setuptools-scm" ,python-setuptools-scm)
6949 ("python-six" ,python-six)
6950 ("python-sphinx" ,python-sphinx)))
6951 (home-page "https://github.com/jaraco/jaraco.packaging")
6952 (synopsis "Tools to supplement packaging Python releases")
6953 (description
6954 "This package provides various tools to supplement packaging Python
6955 releases.")
6956 (license license:expat)))
6957
6958 (define-public python-pathpy
6959 (package
6960 (name "python-pathpy")
6961 (version "11.5.1")
6962 (source
6963 (origin
6964 (method url-fetch)
6965 (uri (pypi-uri "path.py" version))
6966 (sha256
6967 (base32 "0ir9j1haq2jbi7aip6k2fa9l7q1l03k4hp1awxhjhcwzsnwp3ll8"))))
6968 (outputs '("out" "doc"))
6969 (build-system python-build-system)
6970 (propagated-inputs
6971 `(("python-appdirs" ,python-appdirs)
6972 ("python-importlib-metadata" ,python-importlib-metadata)))
6973 (native-inputs
6974 `(("python-setuptools-scm" ,python-setuptools-scm)
6975 ("python-sphinx" ,python-sphinx)
6976 ("python-rst.linker" ,python-rst.linker)
6977 ("python-pytest" ,python-pytest)
6978 ("python-pytest-runner" ,python-pytest-runner)
6979 ("python-jaraco-packaging" ,python-jaraco-packaging)))
6980 (arguments
6981 `(#:phases
6982 (modify-phases %standard-phases
6983 (add-after 'build 'build-doc
6984 (lambda _
6985 (setenv "LANG" "en_US.UTF-8")
6986 (invoke "python" "setup.py" "build_sphinx")))
6987 (add-after 'install 'install-doc
6988 (lambda* (#:key outputs #:allow-other-keys)
6989 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
6990 (doc (string-append data "/doc/" ,name "-" ,version))
6991 (html (string-append doc "/html")))
6992 (mkdir-p html)
6993 (for-each (lambda (file)
6994 (copy-file file (string-append doc "/" file)))
6995 '("README.rst" "CHANGES.rst"))
6996 (copy-recursively "build/sphinx/html" html)
6997 #t)))
6998 (replace 'check
6999 (lambda _
7000 ;; The import time test aborts if an import takes longer than
7001 ;; 100ms. It may very well take a little longer than that.
7002 (invoke "pytest" "-v" "-k" "not test_import_time"))))))
7003 (home-page "https://github.com/jaraco/path.py")
7004 (synopsis "Python module wrapper for built-in os.path")
7005 (description
7006 "@code{path.py} implements path objects as first-class entities, allowing
7007 common operations on files to be invoked on those path objects directly.")
7008 (license license:expat)))
7009
7010 (define-public python-simplegeneric
7011 (package
7012 (name "python-simplegeneric")
7013 (version "0.8.1")
7014 (source
7015 (origin
7016 (method url-fetch)
7017 (uri (pypi-uri "simplegeneric" version ".zip"))
7018 (sha256
7019 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
7020 (build-system python-build-system)
7021 (native-inputs
7022 `(("unzip" ,unzip)))
7023 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
7024 (synopsis "Python module for simple generic functions")
7025 (description
7026 "The simplegeneric module lets you define simple single-dispatch generic
7027 functions, akin to Python’s built-in generic functions like @code{len()},
7028 @code{iter()} and so on. However, instead of using specially-named methods,
7029 these generic functions use simple lookup tables, akin to those used by
7030 e.g. @code{pickle.dump()} and other generic functions found in the Python
7031 standard library.")
7032 (license license:zpl2.1)))
7033
7034 (define-public python2-simplegeneric
7035 (package-with-python2 python-simplegeneric))
7036
7037 (define-public python-ipython-genutils
7038 ;; TODO: This package is retired, check if can be removed, see description.
7039 (package
7040 (name "python-ipython-genutils")
7041 (version "0.1.0")
7042 (source
7043 (origin
7044 (method url-fetch)
7045 (uri (pypi-uri "ipython_genutils" version))
7046 (sha256
7047 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
7048 (build-system python-build-system)
7049 (arguments `(#:tests? #f)) ; no tests
7050 (home-page "https://ipython.org")
7051 (synopsis "Vestigial utilities from IPython")
7052 (description
7053 "This package provides retired utilities from IPython. No packages
7054 outside IPython/Jupyter should depend on it.
7055
7056 This package shouldn't exist. It contains some common utilities shared by
7057 Jupyter and IPython projects during The Big Split. As soon as possible, those
7058 packages will remove their dependency on this, and this package will go
7059 away.")
7060 (license license:bsd-3)))
7061
7062 (define-public python2-ipython-genutils
7063 (package-with-python2 python-ipython-genutils))
7064
7065 (define-public python-ipyparallel
7066 (package
7067 (name "python-ipyparallel")
7068 (version "6.2.4")
7069 (source
7070 (origin
7071 (method url-fetch)
7072 (uri (pypi-uri "ipyparallel" version))
7073 (sha256
7074 (base32
7075 "0rf0dbpxf5z82bw8lsjj45r3wdd4wc74anz4wiiaf2rbjqlb1ivn"))))
7076 (build-system python-build-system)
7077 (arguments
7078 `(#:tests? #f ; RuntimeError: IO Loop failed to start
7079 #:phases
7080 (modify-phases %standard-phases
7081 (add-before 'check 'prepare-for-tests
7082 (lambda _
7083 (setenv "HOME" (getcwd))
7084 #t)))))
7085 (propagated-inputs
7086 `(("python-dateutil" ,python-dateutil)
7087 ("python-decorator" ,python-decorator)
7088 ("python-ipykernel" ,python-ipykernel)
7089 ("python-ipython" ,python-ipython)
7090 ("python-ipython-genutils" ,python-ipython-genutils)
7091 ("python-jupyter-client" ,python-jupyter-client)
7092 ("python-pyzmq" ,python-pyzmq)
7093 ("python-tornado" ,python-tornado)
7094 ("python-traitlets" ,python-traitlets)))
7095 (native-inputs
7096 `(("python-ipython" ,python-ipython)
7097 ("python-mock" ,python-mock)
7098 ("python-nose" ,python-nose)
7099 ("python-pytest" ,python-pytest)
7100 ("python-pytest-cov" ,python-pytest-cov)
7101 ("python-testpath" ,python-testpath)))
7102 (home-page "https://ipython.org/")
7103 (synopsis "Interactive Parallel Computing with IPython")
7104 (description
7105 "@code{ipyparallel} is a Python package and collection of CLI scripts for
7106 controlling clusters for Jupyter. @code{ipyparallel} contains the following
7107 CLI scripts:
7108 @enumerate
7109 @item ipcluster - start/stop a cluster
7110 @item ipcontroller - start a scheduler
7111 @item ipengine - start an engine
7112 @end enumerate")
7113 (license license:bsd-3)))
7114
7115 (define-public python2-ipyparallel
7116 (let ((ipyparallel (package-with-python2 python-ipyparallel)))
7117 (package/inherit ipyparallel
7118 (propagated-inputs
7119 `(("python2-futures" ,python2-futures)
7120 ,@(package-propagated-inputs ipyparallel))))))
7121
7122 (define-public python-ipython-cluster-helper
7123 (package
7124 (name "python-ipython-cluster-helper")
7125 (version "0.6.4")
7126 (source
7127 (origin
7128 (method url-fetch)
7129 (uri (pypi-uri "ipython-cluster-helper" version))
7130 (sha256
7131 (base32
7132 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
7133 (modules '((guix build utils)))
7134 (snippet
7135 '(begin (substitute* "requirements.txt"
7136 (("ipython.*") "ipython\n"))
7137 #t))))
7138 (build-system python-build-system)
7139 (arguments
7140 `(#:tests? #f ; Test suite can't find IPython.
7141 #:phases
7142 (modify-phases %standard-phases
7143 (replace 'check
7144 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
7145 (if tests?
7146 (begin
7147 (setenv "HOME" (getcwd))
7148 (add-installed-pythonpath inputs outputs)
7149 (invoke "python" "example/example.py" "--local"))
7150 #t))))))
7151 (propagated-inputs
7152 `(("python-ipyparallel" ,python-ipyparallel)
7153 ("python-ipython" ,python-ipython)
7154 ("python-netifaces" ,python-netifaces)
7155 ("python-pyzmq" ,python-pyzmq)
7156 ("python-setuptools" ,python-setuptools)
7157 ("python-six" ,python-six)))
7158 (home-page "https://github.com/roryk/ipython-cluster-helper")
7159 (synopsis
7160 "Simplify IPython cluster start up and use for multiple schedulers")
7161 (description
7162 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
7163 profile, launches a cluster and returns a view. On program exit it shuts the
7164 cluster down and deletes the throwaway profile.")
7165 (license license:expat)))
7166
7167 (define-public python2-ipython-cluster-helper
7168 (package-with-python2 python-ipython-cluster-helper))
7169
7170 (define-public python-traitlets
7171 (package
7172 (name "python-traitlets")
7173 (version "4.3.3")
7174 (source
7175 (origin
7176 (method url-fetch)
7177 (uri (pypi-uri "traitlets" version))
7178 (sha256
7179 (base32
7180 "1xsrwgivpkxlbr4dfndfsi098s29yqgswgjc1qqn69yxklvfw8yh"))))
7181 (build-system python-build-system)
7182 (arguments
7183 `(#:phases
7184 (modify-phases %standard-phases
7185 (replace 'check (lambda _ (invoke "pytest" "-vv" "traitlets"))))))
7186 (propagated-inputs
7187 `(("python-ipython-genutils" ,python-ipython-genutils)
7188 ("python-decorator" ,python-decorator)))
7189 (native-inputs
7190 `(("python-pytest" ,python-pytest)))
7191 (properties `((python2-variant . ,(delay python2-traitlets))))
7192 (home-page "https://ipython.org")
7193 (synopsis "Configuration system for Python applications")
7194 (description
7195 "Traitlets is a framework that lets Python classes have attributes with
7196 type checking, dynamically calculated default values, and ‘on change’
7197 callbacks. The package also includes a mechanism to use traitlets for
7198 configuration, loading values from files or from command line arguments. This
7199 is a distinct layer on top of traitlets, so you can use traitlets in your code
7200 without using the configuration machinery.")
7201 (license license:bsd-3)))
7202
7203 (define-public python2-traitlets
7204 (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets))))
7205 (package/inherit traitlets
7206 (propagated-inputs
7207 `(("python2-enum34" ,python2-enum34)
7208 ,@(package-propagated-inputs traitlets))))))
7209
7210 (define-public python-jupyter-core
7211 (package
7212 (name "python-jupyter-core")
7213 (version "4.4.0")
7214 (source
7215 (origin
7216 (method url-fetch)
7217 (uri (string-append (pypi-uri "jupyter_core" version)))
7218 (sha256
7219 (base32
7220 "1dy083rarba8prn9f9srxq3c7n7vyql02ycrqq306c40lr57aw5s"))))
7221 (build-system python-build-system)
7222 ;; FIXME: not sure how to run the tests
7223 (arguments `(#:tests? #f))
7224 (propagated-inputs
7225 `(("python-traitlets" ,python-traitlets)))
7226 (home-page "https://jupyter.org/")
7227 (synopsis "Jupyter base package")
7228 (description
7229 "Jupyter core is the base package on which Jupyter projects rely.")
7230 (license license:bsd-3)))
7231
7232 (define-public python2-jupyter-core
7233 (package-with-python2 python-jupyter-core))
7234
7235 (define-public python-jupyter-client
7236 (package
7237 (name "python-jupyter-client")
7238 (version "5.2.4")
7239 (source
7240 (origin
7241 (method url-fetch)
7242 (uri (pypi-uri "jupyter_client" version))
7243 (sha256
7244 (base32
7245 "0l9mh7ccrpl3lppym3dnky8n1nk7xarzzdcxf4q2s7aw203cpydm"))))
7246 (build-system python-build-system)
7247 ;; Tests fail because of missing native python kernel which I assume is
7248 ;; provided by the ipython package, which we cannot use because it would
7249 ;; cause a dependency cycle.
7250 (arguments
7251 `(#:tests? #f
7252
7253 #:phases (modify-phases %standard-phases
7254 (add-after 'unpack 'set-tool-file-names
7255 (lambda* (#:key inputs #:allow-other-keys)
7256 (let ((iproute (assoc-ref inputs "iproute")))
7257 (substitute* "jupyter_client/localinterfaces.py"
7258 (("'ip'")
7259 (string-append "'" iproute "/sbin/ip'")))
7260 #t))))))
7261 (inputs
7262 `(("iproute" ,iproute)))
7263 (propagated-inputs
7264 `(("python-pyzmq" ,python-pyzmq)
7265 ("python-traitlets" ,python-traitlets)
7266 ("python-jupyter-core" ,python-jupyter-core)))
7267 (home-page "https://jupyter.org/")
7268 (synopsis "Jupyter protocol implementation and client libraries")
7269 (description
7270 "The @code{jupyter_client} package contains the reference implementation
7271 of the Jupyter protocol. It also provides client and kernel management APIs
7272 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
7273 installing @code{kernelspec}s for use with Jupyter frontends.")
7274 (license license:bsd-3)))
7275
7276 (define-public python2-jupyter-client
7277 (package-with-python2 python-jupyter-client))
7278
7279 (define-public python-ipykernel
7280 (package
7281 (name "python-ipykernel")
7282 (version "5.1.3")
7283 (source
7284 (origin
7285 (method url-fetch)
7286 (uri (pypi-uri "ipykernel" version))
7287 (sha256
7288 (base32 "1a08y677lpn80qzvv7z0smgggmr5m5ayf0bs6vds47xpxl9sss5k"))))
7289 (build-system python-build-system)
7290 (arguments
7291 `(#:phases
7292 (modify-phases %standard-phases
7293 (replace 'check
7294 (lambda _
7295 (setenv "HOME" "/tmp")
7296 (invoke "pytest" "-v")
7297 #t))
7298 (add-after 'install 'set-python-file-name
7299 (lambda* (#:key outputs #:allow-other-keys)
7300 ;; Record the absolute file name of the 'python' executable in
7301 ;; 'kernel.json'.
7302 (let ((out (assoc-ref outputs "out")))
7303 (substitute* (string-append out "/share/jupyter"
7304 "/kernels/python3/kernel.json")
7305 (("\"python\"")
7306 (string-append "\"" (which "python") "\"")))
7307 #t))))))
7308 (propagated-inputs
7309 `(("python-ipython" ,python-ipython)
7310 ;; imported at runtime during connect
7311 ("python-jupyter-client" ,python-jupyter-client)))
7312 (native-inputs
7313 `(("python-flaky" ,python-flaky)
7314 ("python-nose" ,python-nose)
7315 ("python-pytest" ,python-pytest)))
7316 (home-page "https://ipython.org")
7317 (synopsis "IPython Kernel for Jupyter")
7318 (description
7319 "This package provides the IPython kernel for Jupyter.")
7320 (properties `((python2-variant . ,(delay python2-ipykernel))))
7321 (license license:bsd-3)))
7322
7323 ;; Version 5.x and above no longer support Python 2.
7324 (define-public python2-ipykernel
7325 (package
7326 (name "python2-ipykernel")
7327 (version "4.10.1")
7328 (source
7329 (origin
7330 (method url-fetch)
7331 (uri (pypi-uri "ipykernel" version))
7332 (sha256
7333 (base32 "1yzmdiy1djsszqp54jzd8ym8h4hpl67zjq83j2kxbkp0rwmlpdzf"))))
7334 (build-system python-build-system)
7335 (arguments
7336 `(#:python ,python-2))
7337 (propagated-inputs
7338 `(("python2-ipython" ,python2-ipython)
7339 ;; imported at runtime during connect
7340 ("python2-jupyter-client" ,python2-jupyter-client)
7341 ("python2-tornado" ,python2-tornado)
7342 ("python2-traitlets" ,python2-traitlets)))
7343 (native-inputs
7344 `(("python2-mock" ,python2-mock)
7345 ("python2-nose" ,python2-nose)
7346 ("python2-pytest" ,python2-pytest)
7347 ("python2-pytest-cov" ,python2-pytest-cov)))
7348 (home-page "https://ipython.org")
7349 (synopsis "IPython Kernel for Jupyter")
7350 (description
7351 "This package provides the IPython kernel for Jupyter.")
7352 (license license:bsd-3)))
7353
7354 (define-public python-pari-jupyter
7355 (package
7356 (name "python-pari-jupyter")
7357 (version "1.3.2")
7358 (source
7359 (origin
7360 (method url-fetch)
7361 (uri (pypi-uri "pari_jupyter" version))
7362 (sha256
7363 (base32
7364 "1yash0p422nnin7z58b99d0p23nx79f5m0mainc9hsjg72jhdhr6"))))
7365 (build-system python-build-system)
7366 (propagated-inputs
7367 `(("python-ipykernel" ,python-ipykernel)))
7368 (inputs
7369 `(("pari-gp" ,pari-gp)
7370 ("readline" ,readline)))
7371 (arguments
7372 `(#:tests? #f)) ; no test suite
7373 (home-page
7374 "https://github.com/jdemeyer/pari_jupyter")
7375 (synopsis "A Jupyter kernel for PARI/GP")
7376 (description "The package provides a PARI/GP kernel for Jupyter.")
7377 (license license:gpl3+)))
7378
7379 (define-public python-backcall
7380 (package
7381 (name "python-backcall")
7382 (version "0.2.0")
7383 (source
7384 (origin
7385 (method url-fetch)
7386 (uri (pypi-uri "backcall" version))
7387 (sha256
7388 (base32
7389 "07jy4562lvnhkk6kfr3cphmizy88anlhmbwb8kdzlz2ypqkvzgaw"))))
7390 (build-system python-build-system)
7391 (home-page "https://github.com/takluyver/backcall/")
7392 (synopsis "Specifications for callback functions passed in to an API")
7393 (description
7394 "If your code lets other people supply callback functions, it's important
7395 to specify the function signature you expect, and check that functions support
7396 that. Adding extra parameters later would break other peoples code unless
7397 you're careful. The @code{backcall} package provides a way of specifying the
7398 callback signature using a prototype function.")
7399 (license license:bsd-3)))
7400
7401 (define-public python-ipython
7402 (package
7403 (name "python-ipython")
7404 (version "7.9.0")
7405 (source
7406 (origin
7407 (method url-fetch)
7408 (uri (pypi-uri "ipython" version ".tar.gz"))
7409 (sha256
7410 (base32 "103jkw18z7fnwdal1mdbijjxi1fndzn31g887lmj7ddpf2r07lyz"))))
7411 (build-system python-build-system)
7412 (propagated-inputs
7413 `(("python-backcall" ,python-backcall)
7414 ("python-pyzmq" ,python-pyzmq)
7415 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
7416 ("python-terminado" ,python-terminado)
7417 ("python-matplotlib" ,python-matplotlib)
7418 ("python-numpy" ,python-numpy)
7419 ("python-numpydoc" ,python-numpydoc)
7420 ("python-jedi" ,python-jedi)
7421 ("python-jinja2" ,python-jinja2)
7422 ("python-mistune" ,python-mistune)
7423 ("python-pexpect" ,python-pexpect)
7424 ("python-pickleshare" ,python-pickleshare)
7425 ("python-simplegeneric" ,python-simplegeneric)
7426 ("python-jsonschema" ,python-jsonschema)
7427 ("python-traitlets" ,python-traitlets)
7428 ("python-nbformat" ,python-nbformat)
7429 ("python-pygments" ,python-pygments)))
7430 (inputs
7431 `(("readline" ,readline)
7432 ("which" ,which)))
7433 (native-inputs
7434 `(("graphviz" ,graphviz)
7435 ("pkg-config" ,pkg-config)
7436 ("python-requests" ,python-requests) ;; for tests
7437 ("python-testpath" ,python-testpath)
7438 ("python-nose" ,python-nose)))
7439 (arguments
7440 `(#:phases
7441 (modify-phases %standard-phases
7442 (add-after 'unpack 'make-docs-reproducible
7443 (lambda _
7444 (substitute* "IPython/sphinxext/ipython_directive.py"
7445 ((".*import datetime") "")
7446 ((".*datetime.datetime.now\\(\\)") "")
7447 (("%timeit") "# %timeit"))
7448 #t))
7449 ;; Tests can only be run after the library has been installed and not
7450 ;; within the source directory.
7451 (delete 'check)
7452 (add-after 'install 'check
7453 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
7454 (if tests?
7455 (begin
7456 ;; Make installed package available for running the tests
7457 (add-installed-pythonpath inputs outputs)
7458 (setenv "HOME" "/tmp/") ;; required by a test
7459 ;; We only test the core because one of the other tests
7460 ;; tries to import ipykernel.
7461 (invoke "python" "IPython/testing/iptest.py"
7462 "-v" "IPython/core/tests"))
7463 #t)))
7464 (add-before 'check 'fix-tests
7465 (lambda* (#:key inputs #:allow-other-keys)
7466 (substitute* "./IPython/utils/_process_posix.py"
7467 (("/usr/bin/env', 'which") (which "which")))
7468 (substitute* "./IPython/core/tests/test_inputtransformer.py"
7469 (("#!/usr/bin/env python")
7470 (string-append "#!" (which "python"))))
7471 ;; This test introduces a circular dependency on ipykernel
7472 ;; (which depends on ipython).
7473 (delete-file "IPython/core/tests/test_display.py")
7474 ;; AttributeError: module 'IPython.core' has no attribute 'formatters'
7475 (delete-file "IPython/core/tests/test_interactiveshell.py")
7476 #t)))))
7477 (home-page "https://ipython.org")
7478 (synopsis "IPython is a tool for interactive computing in Python")
7479 (description
7480 "IPython provides a rich architecture for interactive computing with:
7481 Powerful interactive shells, a browser-based notebook, support for interactive
7482 data visualization, embeddable interpreters and tools for parallel
7483 computing.")
7484 (properties `((python2-variant . ,(delay python2-ipython))))
7485 (license license:bsd-3)))
7486
7487 ;; This is the latest release of the LTS version of ipython with support for
7488 ;; Python 2.7 and Python 3.x. Later non-LTS versions starting from 6.0 have
7489 ;; dropped support for Python 2.7.
7490 (define-public python2-ipython
7491 (package
7492 (name "python2-ipython")
7493 (version "5.8.0")
7494 (source
7495 (origin
7496 (method url-fetch)
7497 (uri (pypi-uri "ipython" version ".tar.gz"))
7498 (sha256
7499 (base32 "01l93i4hspf0lvhmycvc8j378bslm9rw30mwfspsl6v1ayc69b2b"))))
7500 (build-system python-build-system)
7501 (propagated-inputs
7502 `(("python2-backports-shutil-get-terminal-size"
7503 ,python2-backports-shutil-get-terminal-size)
7504 ("python2-pathlib2" ,python2-pathlib2)
7505 ("python2-pyzmq" ,python2-pyzmq)
7506 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
7507 ("python2-terminado" ,python2-terminado)
7508 ("python2-matplotlib" ,python2-matplotlib)
7509 ("python2-numpy" ,python2-numpy)
7510 ("python2-numpydoc" ,python2-numpydoc)
7511 ("python2-jinja2" ,python2-jinja2)
7512 ("python2-mistune" ,python2-mistune)
7513 ("python2-pexpect" ,python2-pexpect)
7514 ("python2-pickleshare" ,python2-pickleshare)
7515 ("python2-simplegeneric" ,python2-simplegeneric)
7516 ("python2-jsonschema" ,python2-jsonschema)
7517 ("python2-traitlets" ,python2-traitlets)
7518 ("python2-nbformat" ,python2-nbformat)
7519 ("python2-pygments" ,python2-pygments)))
7520 (inputs
7521 `(("readline" ,readline)
7522 ("which" ,which)))
7523 (native-inputs
7524 `(("graphviz" ,graphviz)
7525 ("pkg-config" ,pkg-config)
7526 ("python2-requests" ,python2-requests) ;; for tests
7527 ("python2-testpath" ,python2-testpath)
7528 ("python2-mock" ,python2-mock)
7529 ("python2-nose" ,python2-nose)))
7530 (arguments
7531 `(#:python ,python-2
7532 #:phases
7533 (modify-phases %standard-phases
7534 (add-before 'check 'delete-broken-tests
7535 (lambda* (#:key inputs #:allow-other-keys)
7536 ;; These tests throw errors for unknown reasons.
7537 (delete-file "IPython/core/tests/test_displayhook.py")
7538 (delete-file "IPython/core/tests/test_magic_terminal.py")
7539 (delete-file "IPython/core/tests/test_profile.py")
7540 #t)))))
7541 (home-page "https://ipython.org")
7542 (synopsis "IPython is a tool for interactive computing in Python")
7543 (description
7544 "IPython provides a rich architecture for interactive computing with:
7545 Powerful interactive shells, a browser-based notebook, support for interactive
7546 data visualization, embeddable interpreters and tools for parallel
7547 computing.")
7548 (license license:bsd-3)))
7549
7550 (define-public python-ipython-documentation
7551 (package
7552 (inherit python-ipython)
7553 (name "python-ipython-documentation")
7554 (version (package-version python-ipython))
7555 (arguments
7556 `(#:phases
7557 (modify-phases %standard-phases
7558 (delete 'build)
7559 (delete 'check)
7560 (replace 'install
7561 (lambda* (#:key outputs #:allow-other-keys)
7562 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
7563 (doc (string-append data "/doc/" ,name "-" ,version))
7564 (html (string-append doc "/html"))
7565 (man1 (string-append data "/man/man1"))
7566 (info (string-append data "/info"))
7567 (examples (string-append doc "/examples"))
7568 (python-arg (string-append "PYTHON=" (which "python"))))
7569 (setenv "LANG" "en_US.utf8")
7570 (with-directory-excursion "docs"
7571 ;; FIXME: pdf fails to build
7572 ;;(system* "make" "pdf" "PAPER=a4")
7573 (system* "make" python-arg "html")
7574 ;; FIXME: the generated texi file contains ^@^@, which trips
7575 ;; up the parser.
7576 ;; (system* "make" python-arg "info")
7577 )
7578 (copy-recursively "docs/man" man1)
7579 (copy-recursively "examples" examples)
7580 (copy-recursively "docs/build/html" html)
7581 ;; (copy-file "docs/build/latex/ipython.pdf"
7582 ;; (string-append doc "/ipython.pdf"))
7583 (mkdir-p info)
7584 ;; (copy-file "docs/build/texinfo/ipython.info"
7585 ;; (string-append info "/ipython.info"))
7586 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))
7587 #t)))))
7588 (inputs
7589 `(("python-ipython" ,python-ipython)
7590 ("python-ipykernel" ,python-ipykernel)))
7591 (native-inputs
7592 `(("python-sphinx" ,python-sphinx)
7593 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
7594 ;; FIXME: It's possible that a smaller union would work just as well.
7595 ("texlive" ,(texlive-union (list texlive-amsfonts
7596 texlive-fonts-ec
7597 texlive-generic-ifxetex
7598 texlive-generic-pdftex
7599 texlive-latex-capt-of
7600 texlive-latex-cmap
7601 texlive-latex-environ
7602 texlive-latex-eqparbox
7603 texlive-latex-etoolbox
7604 texlive-latex-expdlist
7605 texlive-latex-fancyhdr
7606 texlive-latex-fancyvrb
7607 texlive-latex-fncychap
7608 texlive-latex-float
7609 texlive-latex-framed
7610 texlive-latex-geometry
7611 texlive-latex-graphics
7612 texlive-latex-hyperref
7613 texlive-latex-mdwtools
7614 texlive-latex-multirow
7615 texlive-latex-needspace
7616 texlive-latex-oberdiek
7617 texlive-latex-parskip
7618 texlive-latex-preview
7619 texlive-latex-tabulary
7620 texlive-latex-threeparttable
7621 texlive-latex-titlesec
7622 texlive-latex-trimspaces
7623 texlive-latex-ucs
7624 texlive-latex-upquote
7625 texlive-latex-url
7626 texlive-latex-varwidth
7627 texlive-latex-wrapfig)))
7628 ("texinfo" ,texinfo)))))
7629
7630 (define-public python-urwid
7631 (package
7632 (name "python-urwid")
7633 (version "2.1.2")
7634 (source
7635 (origin
7636 (method url-fetch)
7637 (uri (pypi-uri "urwid" version))
7638 (sha256
7639 (base32
7640 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
7641 (build-system python-build-system)
7642 (home-page "http://urwid.org")
7643 (synopsis "Console user interface library for Python")
7644 (description
7645 "Urwid is a curses-based UI/widget library for Python. It includes many
7646 features useful for text console applications.")
7647 (properties `((python2-variant . ,(delay python2-urwid))))
7648 (license license:lgpl2.1+)))
7649
7650 (define-public python2-urwid
7651 (let ((base (package-with-python2
7652 (strip-python2-variant python-urwid))))
7653 (package/inherit base
7654 (version "2.1.0")
7655 (source
7656 (origin
7657 (method url-fetch)
7658 (uri (pypi-uri "urwid" version))
7659 (sha256
7660 (base32
7661 "11ndnhxd41m13darf5s0c6bafdpkzq1l6mfb04wbzdmyc1hg75h8")))))))
7662
7663 (define-public python-urwid-readline
7664 (package
7665 (name "python-urwid-readline")
7666 (version "0.12")
7667 (source
7668 (origin
7669 (method git-fetch)
7670 (uri (git-reference
7671 (url "https://github.com/rr-/urwid_readline")
7672 (commit version)))
7673 (file-name (git-file-name name version))
7674 (sha256
7675 (base32
7676 "0sq5qgxj7gcfww3ww7idr87isnmp0hi36n241b3q395x1zafdv22"))))
7677 (build-system python-build-system)
7678 (arguments
7679 `(#:phases
7680 (modify-phases %standard-phases
7681 (replace 'check
7682 (lambda* (#:key tests? #:allow-other-keys)
7683 (when tests?
7684 (invoke "python" "-m" "pytest"))
7685 #t)))))
7686 (propagated-inputs
7687 `(("python-urwid" ,python-urwid)))
7688 (native-inputs
7689 `(("python-pytest" ,python-pytest)))
7690 (home-page "https://github.com/rr-/urwid_readline")
7691 (synopsis "Text input widget for urwid that supports readline shortcuts")
7692 (description
7693 "This package provides a textbox edit widget for @code{python-urwid} that
7694 supports @code{readline} shortcuts.")
7695 (license license:expat)))
7696
7697 (define-public python-urwidtrees
7698 (package
7699 (name "python-urwidtrees")
7700 (version "1.0.2")
7701 (source
7702 (origin
7703 (method git-fetch)
7704 ;; package author intends on distributing via github rather than pypi:
7705 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
7706 (uri (git-reference
7707 (url "https://github.com/pazz/urwidtrees")
7708 (commit version)))
7709 (file-name (git-file-name name version))
7710 (sha256
7711 (base32
7712 "1n1kpidvkdnsqyb82vlvk78gmly96kh8351lqxn2pzgwwns6fml2"))))
7713 (build-system python-build-system)
7714 (arguments
7715 '(#:use-setuptools? #f
7716 #:tests? #f)) ; no tests
7717 (propagated-inputs `(("python-urwid" ,python-urwid)))
7718 (home-page "https://github.com/pazz/urwidtrees")
7719 (synopsis "Tree widgets for urwid")
7720 (description "Urwidtrees is a Widget Container API for the @code{urwid}
7721 toolkit. Use it to build trees of widgets.")
7722 (license license:gpl3+)))
7723
7724 (define-public python2-urwidtrees
7725 (package-with-python2 python-urwidtrees))
7726
7727 (define-public python-ua-parser
7728 (package
7729 (name "python-ua-parser")
7730 (version "0.8.0")
7731 (source
7732 (origin
7733 (method url-fetch)
7734 (uri (pypi-uri "ua-parser" version))
7735 (sha256
7736 (base32
7737 "1jwdf58rhchjzzrad405pviv0iq24xa2xmmmdgcm2c8s6b4wzfwp"))))
7738 (build-system python-build-system)
7739 (arguments
7740 `(#:tests? #f)) ;no test suite in release
7741 (native-inputs
7742 `(("python-pyyaml" ,python-pyyaml)))
7743 (home-page "https://github.com/ua-parser/uap-python")
7744 (synopsis "User agent parser")
7745 (description
7746 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
7747 (license license:asl2.0)))
7748
7749 (define-public python2-ua-parser
7750 (package-with-python2 python-ua-parser))
7751
7752 (define-public python-user-agents
7753 (package
7754 (name "python-user-agents")
7755 (version "1.1.0")
7756 (source
7757 (origin
7758 (method url-fetch)
7759 (uri (pypi-uri "user-agents" version))
7760 (sha256
7761 (base32
7762 "0fc00cd3j8dahq1zzn8pkgfgd7lq37bp2scmdma2n1c049vicgb4"))))
7763 (build-system python-build-system)
7764 (arguments
7765 `(#:tests? #f)) ;missing devices.json test file in release
7766 (propagated-inputs
7767 `(("python-ua-parser" ,python-ua-parser)))
7768 (home-page "https://github.com/selwin/python-user-agents")
7769 (synopsis "User Agent strings parsing library")
7770 (description
7771 "A library to identify devices (phones, tablets) and their capabilities by
7772 parsing (browser/HTTP) user agent strings.")
7773 (license license:expat)))
7774
7775 (define-public python2-user-agents
7776 (package-with-python2 python-user-agents))
7777
7778 (define-public python-dbus
7779 (package
7780 (name "python-dbus")
7781 (version "1.2.16")
7782 (source
7783 (origin
7784 (method url-fetch)
7785 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
7786 "dbus-python-" version ".tar.gz"))
7787 (sha256
7788 (base32 "196m5rk3qzw5nkmgzjl7wmq0v7vpwfhh8bz2sapdi5f9hqfqy8qi"))))
7789 (build-system gnu-build-system)
7790 (native-inputs
7791 `(("pkg-config" ,pkg-config)))
7792 (inputs
7793 `(("python" ,python-wrapper)
7794 ("dbus-glib" ,dbus-glib)))
7795 (synopsis "Python bindings for D-bus")
7796 (description "python-dbus provides bindings for libdbus, the reference
7797 implementation of D-Bus.")
7798 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
7799 (license license:expat)))
7800
7801 (define-public python2-dbus
7802 (package/inherit python-dbus
7803 (name "python2-dbus")
7804 (inputs `(("python" ,python-2)
7805 ,@(alist-delete "python"
7806 (package-inputs python-dbus)
7807 equal?)))))
7808
7809 (define-public python-notify2
7810 (package
7811 (name "python-notify2")
7812 (version "0.3.1")
7813 (source
7814 (origin
7815 (method url-fetch)
7816 (uri (pypi-uri "notify2" version))
7817 (sha256
7818 (base32
7819 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
7820 (build-system python-build-system)
7821 (arguments `(#:tests? #f)) ; tests depend on system state
7822 (native-inputs
7823 `(("python-dbus" ,python-dbus)))
7824 (home-page "https://bitbucket.org/takluyver/pynotify2")
7825 (synopsis "Python interface to D-Bus notifications")
7826 (description
7827 "Pynotify2 provides a Python interface for sending D-Bus notifications.
7828 It is a reimplementation of pynotify in pure Python, and an alternative to
7829 the GObject Introspection bindings to libnotify for non-GTK applications.")
7830 (license (list license:bsd-2
7831 license:lgpl2.1+))))
7832
7833 (define-public python2-notify2
7834 (package-with-python2 python-notify2))
7835
7836 ;; beautifulsoup4 has a totally different namespace than 3.x,
7837 ;; and pypi seems to put it under its own name, so I guess we should too
7838 (define-public python-beautifulsoup4
7839 (package
7840 (name "python-beautifulsoup4")
7841 (version "4.9.3")
7842 (source
7843 (origin
7844 (method url-fetch)
7845 (uri (pypi-uri "beautifulsoup4" version))
7846 (sha256
7847 (base32
7848 "09gbd49mwz86k572r1231x2rdp82p42zlnw0bz9b9mfi58r9wwl4"))))
7849 (build-system python-build-system)
7850 (arguments
7851 `(#:phases
7852 (modify-phases %standard-phases
7853 ;; The Python 2 source is the definitive source of beautifulsoup4. We
7854 ;; must use this conversion script when building with Python 3. The
7855 ;; conversion script also runs the tests.
7856 ;; For more information, see the file 'convert-py3k' in the source
7857 ;; distribution.
7858 (replace 'check
7859 (lambda _ (invoke "./convert-py3k"))))))
7860 (propagated-inputs
7861 `(("python-soupsieve" ,python-soupsieve)))
7862 (home-page
7863 "https://www.crummy.com/software/BeautifulSoup/bs4/")
7864 (synopsis
7865 "Python screen-scraping library")
7866 (description
7867 "Beautiful Soup is a Python library designed for rapidly setting up
7868 screen-scraping projects. It offers Pythonic idioms for navigating,
7869 searching, and modifying a parse tree, providing a toolkit for
7870 dissecting a document and extracting what you need. It automatically
7871 converts incoming documents to Unicode and outgoing documents to UTF-8.")
7872 (license license:expat)
7873 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
7874
7875 (define-public python2-beautifulsoup4
7876 (let ((base (package-with-python2
7877 (strip-python2-variant python-beautifulsoup4))))
7878 (package/inherit base
7879 (arguments `(#:python ,python-2)))))
7880
7881 (define-public python-soupsieve
7882 (package
7883 (name "python-soupsieve")
7884 (version "2.2.1")
7885 (source
7886 (origin
7887 (method url-fetch)
7888 (uri (pypi-uri "soupsieve" version))
7889 (sha256
7890 (base32
7891 "1k70gpn2d3vgdyxbdy536dgm4kchcraxz6lmgsfg3324iy2789q5"))))
7892 (build-system python-build-system)
7893 (arguments `(#:tests? #f))
7894 ;;XXX: 2 tests fail currently despite claming they were to be
7895 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
7896 ;;don't want to create a circular dependency.
7897 (home-page "https://github.com/facelessuser/soupsieve")
7898 (synopsis "CSS selector library")
7899 (description
7900 "Soup Sieve is a CSS selector library designed to be used with Beautiful
7901 Soup 4. It aims to provide selecting, matching, and filtering using modern
7902 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
7903 specifications up through the latest CSS level 4 drafts and beyond (though
7904 some are not yet implemented).")
7905 (properties `((python2-variant . ,(delay python2-soupsieve))))
7906 (license license:expat)))
7907
7908 ;; This is the last version that supports python-2
7909 (define-public python2-soupsieve
7910 (let ((base (package-with-python2 (strip-python2-variant python-soupsieve))))
7911 (package
7912 (inherit base)
7913 (version "1.9.6")
7914 (source
7915 (origin
7916 (method url-fetch)
7917 (uri (pypi-uri "soupsieve" version))
7918 (sha256
7919 (base32
7920 "1apgqxngi1216h1cyvrvj9gy3wf45mh1lz4n76j26jf3k36bm1br"))))
7921 (propagated-inputs
7922 `(("python2-backports-functools-lru-cache"
7923 ,python2-backports-functools-lru-cache)
7924 ,@(package-propagated-inputs base))))))
7925
7926 (define-public python-netifaces
7927 (package
7928 (name "python-netifaces")
7929 (version "0.10.9")
7930 (source
7931 (origin
7932 (method url-fetch)
7933 (uri (pypi-uri "netifaces" version))
7934 (sha256
7935 (base32
7936 "1wxby874kcr3pp4ygzk5aiarbzhg1yi093d56s1qg4k2s7yrzvid"))))
7937 (build-system python-build-system)
7938 (home-page "https://github.com/al45tair/netifaces")
7939 (synopsis
7940 "Python module for portable network interface information")
7941 (description
7942 "Netifaces is a Python module providing information on network
7943 interfaces in an easy and portable manner.")
7944 (license license:expat)))
7945
7946 (define-public python2-netifaces
7947 (package-with-python2 python-netifaces))
7948
7949 (define-public python-networkx
7950 (package
7951 (name "python-networkx")
7952 (version "2.5")
7953 (source
7954 (origin
7955 (method url-fetch)
7956 (uri (pypi-uri "networkx" version))
7957 (sha256
7958 (base32 "00hnii2lplig2s324k1hvi29pyfab6z7i22922f67jgv4da9ay3r"))))
7959 (build-system python-build-system)
7960 (arguments
7961 '(#:phases (modify-phases %standard-phases
7962 (replace 'check
7963 (lambda* (#:key tests? #:allow-other-keys)
7964 (if tests?
7965 (invoke "pytest" "-vv" "--pyargs" "networkx")
7966 (format #t "test suite not run~%"))
7967 #t)))))
7968 ;; python-decorator is needed at runtime.
7969 (propagated-inputs
7970 `(("python-decorator" ,python-decorator)))
7971 (native-inputs
7972 `(("python-pytest" ,python-pytest)))
7973 (home-page "https://networkx.github.io/")
7974 (synopsis "Python module for creating and manipulating graphs and networks")
7975 (description
7976 "NetworkX is a Python package for the creation, manipulation, and study
7977 of the structure, dynamics, and functions of complex networks.")
7978 (properties `((python2-variant . ,(delay python2-networkx))))
7979 (license license:bsd-3)))
7980
7981 ;; NetworkX 2.2 is the last version with support for Python 2.
7982 (define-public python2-networkx
7983 (let ((base (package-with-python2 (strip-python2-variant python-networkx))))
7984 (package
7985 (inherit base)
7986 (version "2.2")
7987 (source (origin
7988 (method url-fetch)
7989 (uri (pypi-uri "networkx" version ".zip"))
7990 (sha256
7991 (base32
7992 "12swxb15299v9vqjsq4z8rgh5sdhvpx497xwnhpnb0gynrx6zra5"))))
7993 (arguments
7994 `(#:python ,python-2))
7995 (native-inputs
7996 `(("python-nose" ,python2-nose)
7997 ("unzip" ,unzip))))))
7998
7999 (define-public python-datrie
8000 (package
8001 (name "python-datrie")
8002 (version "0.8.2")
8003 (source
8004 (origin
8005 (method url-fetch)
8006 (uri (pypi-uri "datrie" version))
8007 (sha256
8008 (base32
8009 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
8010 (build-system python-build-system)
8011 (native-inputs
8012 `(("python-cython" ,python-cython)
8013 ("python-hypothesis" ,python-hypothesis)
8014 ("python-pytest" ,python-pytest)
8015 ("python-pytest-runner" ,python-pytest-runner)))
8016 (home-page "https://github.com/kmike/datrie")
8017 (synopsis "Fast, efficiently stored trie for Python")
8018 (description
8019 "This package provides a fast, efficiently stored trie implementation for
8020 Python.")
8021 (license license:lgpl2.1+)))
8022
8023 (define-public python-amply
8024 (package
8025 (name "python-amply")
8026 (version "0.1.4")
8027 (source
8028 (origin
8029 (method url-fetch)
8030 (uri (pypi-uri "amply" version))
8031 (sha256
8032 (base32
8033 "0f1db9zp0rsfzxvaz55xwh8h5rfdgr9a2a715g06ic8nknsdq4nb"))))
8034 (build-system python-build-system)
8035 (propagated-inputs
8036 `(("python-docutils" ,python-docutils)
8037 ("python-pyparsing" ,python-pyparsing)))
8038 (native-inputs
8039 `(("python-setuptools-scm" ,python-setuptools-scm)))
8040 (home-page "https://github.com/willu47/amply")
8041 (synopsis "Load and manipulate AMPL/GLPK data as Python data structures")
8042 (description
8043 "Amply allows you to load and manipulate AMPL/GLPK data as Python data
8044 structures.")
8045 (license license:epl1.0)))
8046
8047 (define-public python-pulp
8048 (package
8049 (name "python-pulp")
8050 (version "2.4")
8051 (source
8052 (origin
8053 (method url-fetch)
8054 (uri (pypi-uri "PuLP" version))
8055 (sha256
8056 (base32
8057 "1dammrg0f1v0r028i3rpxbf2bsyxmjq0q6ihb4x2wsdki44z3bxj"))))
8058 (build-system python-build-system)
8059 (propagated-inputs
8060 `(("python-amply" ,python-amply)))
8061 (home-page "https://github.com/coin-or/pulp")
8062 (synopsis "Linear Programming modeler")
8063 (description
8064 "PuLP is a Linear Programming modeler written in Python. PuLP can
8065 generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX, and GUROBI to
8066 solve linear problems.")
8067 (license license:expat)))
8068
8069 (define-public python-toposort
8070 (package
8071 (name "python-toposort")
8072 (version "1.6")
8073 (source
8074 (origin
8075 (method url-fetch)
8076 (uri (pypi-uri "toposort" version))
8077 (sha256
8078 (base32
8079 "1b2hppzjg3p006qya3yfdnp76dwq8frl97lypdam0kw4xxb8yhm7"))))
8080 (build-system python-build-system)
8081 (home-page "https://gitlab.com/ericvsmith/toposort")
8082 (synopsis "Topological sort algorithm")
8083 (description
8084 "This package provides an implementation of a topological sort
8085 algorithm.")
8086 (license license:asl2.0)))
8087
8088 (define-public snakemake
8089 (package
8090 (name "snakemake")
8091 (version "5.32.2")
8092 (source
8093 (origin
8094 (method url-fetch)
8095 (uri (pypi-uri "snakemake" version))
8096 (sha256
8097 (base32 "13013gdavwvyj1qr9xfi9fpwhb3km8c3z53bja5b7ic3sb2z6dgz"))))
8098 (build-system python-build-system)
8099 (arguments
8100 ;; TODO: Package missing test dependencies.
8101 '(#:tests? #f
8102 #:phases
8103 (modify-phases %standard-phases
8104 ;; For cluster execution Snakemake will call Python. Since there is
8105 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
8106 ;; this by calling the snakemake wrapper instead.
8107 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
8108 (lambda* (#:key outputs #:allow-other-keys)
8109 (substitute* "snakemake/executors/__init__.py"
8110 (("\\{sys.executable\\} -m snakemake")
8111 (string-append (assoc-ref outputs "out")
8112 "/bin/snakemake")))
8113 #t)))))
8114 (propagated-inputs
8115 `(("python-appdirs" ,python-appdirs)
8116 ("python-configargparse" ,python-configargparse)
8117 ("python-datrie" ,python-datrie)
8118 ("python-docutils" ,python-docutils)
8119 ("python-gitpython" ,python-gitpython)
8120 ("python-jinja2" ,python-jinja2)
8121 ("python-jsonschema" ,python-jsonschema)
8122 ("python-nbformat" ,python-nbformat)
8123 ("python-networkx" ,python-networkx)
8124 ("python-psutil" ,python-psutil)
8125 ("python-pulp" ,python-pulp)
8126 ("python-pyyaml" ,python-pyyaml)
8127 ("python-ratelimiter" ,python-ratelimiter)
8128 ("python-requests" ,python-requests)
8129 ("python-toposort" ,python-toposort)
8130 ("python-wrapt" ,python-wrapt)))
8131 (home-page "https://snakemake.readthedocs.io")
8132 (synopsis "Python-based execution environment for make-like workflows")
8133 (description
8134 "Snakemake aims to reduce the complexity of creating workflows by
8135 providing a clean and modern domain specific specification language (DSL) in
8136 Python style, together with a fast and comfortable execution environment.")
8137 (license license:expat)))
8138
8139 (define-public python-pyqrcode
8140 (package
8141 (name "python-pyqrcode")
8142 (version "1.2.1")
8143 (source
8144 (origin
8145 (method url-fetch)
8146 (uri (pypi-uri "PyQRCode" version))
8147 (sha256
8148 (base32
8149 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
8150 (build-system python-build-system)
8151 (home-page
8152 "https://github.com/mnooner256/pyqrcode")
8153 (synopsis "QR code generator")
8154 (description
8155 "Pyqrcode is a QR code generator written purely in Python with
8156 SVG, EPS, PNG and terminal output.")
8157 (license license:bsd-3)))
8158
8159 (define-public python-seaborn
8160 (package
8161 (name "python-seaborn")
8162 (version "0.10.0")
8163 (source
8164 (origin
8165 (method url-fetch)
8166 (uri (pypi-uri "seaborn" version))
8167 (sha256
8168 (base32 "1ffbms4kllihfycf6j57dziq4imgdjw03sqgifh5wzcd2d743zjr"))))
8169 (build-system python-build-system)
8170 (arguments
8171 `(#:phases
8172 (modify-phases %standard-phases
8173 (add-before 'check 'start-xserver
8174 (lambda* (#:key inputs #:allow-other-keys)
8175 (let ((xorg-server (assoc-ref inputs "xorg-server")))
8176 ;; There must be a running X server and make check doesn't
8177 ;; start one. Therefore we must do it.
8178 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
8179 (setenv "DISPLAY" ":1")
8180 #t)))
8181 (replace 'check (lambda _ (invoke "pytest" "seaborn") #t)))))
8182 (propagated-inputs
8183 `(("python-pandas" ,python-pandas)
8184 ("python-matplotlib" ,python-matplotlib)
8185 ("python-numpy" ,python-numpy)
8186 ("python-scipy" ,python-scipy)))
8187 (native-inputs
8188 `(("python-pytest" ,python-pytest)
8189 ("xorg-server" ,xorg-server-for-tests)))
8190 (home-page "https://seaborn.pydata.org/")
8191 (synopsis "Statistical data visualization")
8192 (description
8193 "Seaborn is a library for making attractive and informative statistical
8194 graphics in Python. It is built on top of matplotlib and tightly integrated
8195 with the PyData stack, including support for numpy and pandas data structures
8196 and statistical routines from scipy and statsmodels.")
8197 (properties `((python2-variant . ,(delay python2-seaborn))))
8198 (license license:bsd-3)))
8199
8200 ;; 0.9.1 is the last release with support for Python 2.
8201 (define-public python2-seaborn
8202 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
8203 (package
8204 (inherit base)
8205 (version "0.9.1")
8206 (source (origin
8207 (method url-fetch)
8208 (uri (pypi-uri "seaborn" version))
8209 (sha256
8210 (base32
8211 "1bjnshjz4d6z3vrwfwall1a3yh8h3a1h47c3fg7458x9426alcys")))))))
8212
8213 (define-public python-mpmath
8214 (package
8215 (name "python-mpmath")
8216 (version "1.1.0")
8217 (source (origin
8218 (method url-fetch)
8219 (uri (pypi-uri "mpmath" version))
8220 (file-name (git-file-name name version))
8221 (sha256
8222 (base32
8223 "1xlrcja213jpfhw25q1jl5pl10w1a2cc68x1c4mkicxsbzhan5zw"))))
8224 (build-system python-build-system)
8225 (native-inputs
8226 `(("python-pytest" ,python-pytest)))
8227 (arguments
8228 '(#:phases
8229 (modify-phases %standard-phases
8230 (replace 'check
8231 (lambda _
8232 (invoke "python" "mpmath/tests/runtests.py" "-local"))))))
8233 (home-page "https://mpmath.org")
8234 (synopsis "Arbitrary-precision floating-point arithmetic in python")
8235 (description
8236 "@code{mpmath} can be used as an arbitrary-precision substitute for
8237 Python's float/complex types and math/cmath modules, but also does much
8238 more advanced mathematics.")
8239 (license license:bsd-3)))
8240
8241 (define-public python2-mpmath
8242 (package-with-python2 python-mpmath))
8243
8244 (define-public python-bigfloat
8245 (package
8246 (name "python-bigfloat")
8247 (version "0.3.0")
8248 (source
8249 (origin
8250 (method url-fetch)
8251 (uri (pypi-uri "bigfloat" version))
8252 (sha256
8253 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
8254 (build-system python-build-system)
8255 (inputs
8256 `(("mpfr" ,mpfr)))
8257 (home-page "https://github.com/mdickinson/bigfloat")
8258 (synopsis "Arbitrary precision floating-point arithmetic for Python")
8259 (description
8260 "This package provides a Python interface to the MPFR library for
8261 multiprecision arithmetic.")
8262 (license license:lgpl3+)))
8263
8264 (define-public python2-bigfloat
8265 (package-with-python2 python-bigfloat))
8266
8267 (define-public python-sympy
8268 (package
8269 (name "python-sympy")
8270 (version "1.7.1")
8271 (source
8272 (origin
8273 (method url-fetch)
8274 (uri (pypi-uri "sympy" version))
8275 (sha256
8276 (base32 "0bkb4jf24yv5i4kjpsmg1xjjccfhqyi0syv0p0xvhdbmx5hr5pm3"))))
8277 (build-system python-build-system)
8278 (arguments
8279 `(#:phases
8280 (modify-phases %standard-phases
8281 (replace 'check
8282 (lambda* (#:key outputs #:allow-other-keys)
8283 (invoke
8284 (or (which "python3") (which "python"))
8285 "-c" "import sympy; sympy.test(\"/core\")"))))))
8286 (propagated-inputs
8287 `(("python-mpmath" ,python-mpmath)))
8288 (home-page "https://www.sympy.org/")
8289 (synopsis "Python library for symbolic mathematics")
8290 (description
8291 "SymPy is a Python library for symbolic mathematics. It aims to become a
8292 full-featured computer algebra system (CAS) while keeping the code as simple
8293 as possible in order to be comprehensible and easily extensible.")
8294 (license license:bsd-3)))
8295
8296 (define-public python2-sympy
8297 (package
8298 (inherit (package-with-python2 python-sympy))
8299 (version "1.5.1") ; last release for python2
8300 (source
8301 (origin
8302 (method url-fetch)
8303 (uri (pypi-uri "sympy" version))
8304 (sha256
8305 (base32 "0zjfbxlkazzh9z22gf62azrkipb2xw7mpzjz3wl1az9893bh2yfp"))))))
8306
8307 (define-public python-q
8308 (package
8309 (name "python-q")
8310 (version "2.6")
8311 (source
8312 (origin
8313 (method url-fetch)
8314 (uri (pypi-uri "q" version))
8315 (sha256
8316 (base32
8317 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
8318 (build-system python-build-system)
8319 (home-page "https://github.com/zestyping/q")
8320 (synopsis "Quick-and-dirty debugging output for tired programmers")
8321 (description
8322 "q is a Python module for \"print\" style of debugging Python code. It
8323 provides convenient short API for print out of values, tracebacks, and
8324 falling into the Python interpreter.")
8325 (license license:asl2.0)))
8326
8327 (define-public python2-q
8328 (package-with-python2 python-q))
8329
8330 (define-public python-xlib
8331 (package
8332 (name "python-xlib")
8333 (version "0.29")
8334 (source
8335 (origin
8336 (method git-fetch)
8337 (uri (git-reference
8338 (url "https://github.com/python-xlib/python-xlib")
8339 (commit version)))
8340 (file-name (git-file-name name version))
8341 (sha256
8342 (base32 "17cwd2knqm2vwrii3kqii9abwsnydhpg4byqx1vy7rjs6i1vbqfc"))))
8343 (build-system python-build-system)
8344 (arguments
8345 `(#:phases
8346 (modify-phases %standard-phases
8347 (add-before 'check 'start-xserver
8348 (lambda* (#:key inputs #:allow-other-keys)
8349 (let ((xorg-server (assoc-ref inputs "xorg-server")))
8350 ;; There must be a running X server and make check doesn't
8351 ;; start one. Therefore we must do it.
8352 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
8353 (setenv "DISPLAY" ":1")
8354 #t))))))
8355 (native-inputs
8356 `(("python-mock" ,python-mock)
8357 ("python-setuptools-scm" ,python-setuptools-scm)
8358 ("xorg-server" ,xorg-server)))
8359 (propagated-inputs
8360 `(("python-six" ,python-six)))
8361 (home-page "https://github.com/python-xlib/python-xlib")
8362 (synopsis "Python X11 client library")
8363 (description
8364 "The Python X Library is intended to be a fully functional
8365 X client library for Python programs. It is useful to implement
8366 low-level X clients. It is written entirely in Python.")
8367 (license license:gpl2+)))
8368
8369 (define-public python2-xlib
8370 (package-with-python2 python-xlib))
8371
8372 (define-public python-singledispatch
8373 (package
8374 (name "python-singledispatch")
8375 (version "3.4.0.3")
8376 (source
8377 (origin
8378 (method url-fetch)
8379 (uri (pypi-uri "singledispatch" version))
8380 (sha256
8381 (base32
8382 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
8383 (build-system python-build-system)
8384 (native-inputs
8385 `(("python-six" ,python-six))) ; required for conversion, not at run-time
8386 (home-page
8387 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
8388 (synopsis "Backport of singledispatch feature from Python 3.4")
8389 (description
8390 "This library brings functools.singledispatch from Python 3.4 to Python
8391 2.6-3.3.")
8392 (license license:expat)))
8393
8394 (define-public python2-singledispatch
8395 (package-with-python2 python-singledispatch))
8396
8397 ;; the python- version can be removed with python-3.5
8398 (define-public python-backports-abc
8399 (package
8400 (name "python-backports-abc")
8401 (version "0.5")
8402 (source
8403 (origin
8404 (method url-fetch)
8405 (uri (pypi-uri "backports_abc" version))
8406 (sha256
8407 (base32
8408 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
8409 (build-system python-build-system)
8410 (home-page "https://github.com/cython/backports_abc")
8411 (synopsis "Backport of additions to the 'collections.abc' module")
8412 (description
8413 "Python-backports-abc provides a backport of additions to the
8414 @code{collections.abc} module in Python-3.5.")
8415 (license license:psfl)))
8416
8417 (define-public python2-backports-abc
8418 (package-with-python2 python-backports-abc))
8419
8420 (define-public python-backports-csv
8421 (package
8422 (name "python-backports-csv")
8423 (version "1.0.7")
8424 (source
8425 (origin
8426 (method url-fetch)
8427 (uri (pypi-uri "backports.csv" version))
8428 (sha256
8429 (base32 "0vdx5jlhs91iizc8j8l8811nqprwvdx39pgkdc82w2qkfgzxyxqj"))))
8430 (build-system python-build-system)
8431 (home-page "https://github.com/ryanhiebert/backports.csv")
8432 (synopsis "Backport of Python 3's csv module for Python 2")
8433 (description
8434 "Provides a backport of Python 3's @code{csv} module for parsing
8435 comma separated values. The API of the @code{csv} module in Python 2
8436 is drastically different from the @code{csv} module in Python 3.
8437 This is due, for the most part, to the difference between str in
8438 Python 2 and Python 3.")
8439 (license license:psfl)))
8440
8441 (define-public python2-backports-csv
8442 (package-with-python2 python-backports-csv))
8443
8444 (define-public python2-backports-shutil-get-terminal-size
8445 (package
8446 (name "python2-backports-shutil-get-terminal-size")
8447 (version "1.0.0")
8448 (source
8449 (origin
8450 (method url-fetch)
8451 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
8452 (sha256
8453 (base32
8454 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
8455 (build-system python-build-system)
8456 (arguments
8457 `(#:python ,python-2
8458 #:phases
8459 (modify-phases %standard-phases
8460 (replace 'check
8461 (lambda _
8462 (setenv "PYTHONPATH" (string-append "./build/lib:"
8463 (getenv "PYTHONPATH")))
8464 (invoke "py.test" "-v"))))))
8465 (native-inputs
8466 `(("python2-pytest" ,python2-pytest)))
8467 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
8468 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
8469 (description
8470 "This package provides a backport of the @code{get_terminal_size
8471 function} from Python 3.3's @code{shutil}.
8472 Unlike the original version it is written in pure Python rather than C,
8473 so it might be a tiny bit slower.")
8474 (license license:expat)))
8475
8476 (define-public python-waf
8477 (package
8478 (name "python-waf")
8479 (version "2.0.19")
8480 (source (origin
8481 (method url-fetch)
8482 (uri (string-append "https://waf.io/"
8483 "waf-" version ".tar.bz2"))
8484 (sha256
8485 (base32
8486 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
8487 (build-system python-build-system)
8488 (arguments
8489 '(#:phases
8490 (modify-phases %standard-phases
8491 (replace 'build
8492 (lambda _
8493 ;; XXX: Find a way to add all extra tools.
8494 (let ((tools '("gccdeps"
8495 "clang_compilation_database")))
8496 (invoke "python" "waf-light" "configure" "build"
8497 (string-append "--tools="
8498 (string-join tools ","))))))
8499 (replace 'check
8500 (lambda _
8501 (invoke "python" "waf" "--version")))
8502 (replace 'install
8503 (lambda* (#:key outputs #:allow-other-keys)
8504 (let ((out (assoc-ref outputs "out")))
8505 (install-file "waf" (string-append out "/bin")))
8506 #t))
8507 ;; waf breaks when it is wrapped.
8508 (delete 'wrap))))
8509 (home-page "https://waf.io/")
8510 (synopsis "Python-based build system")
8511 (description
8512 "Waf is a Python-based framework for configuring, compiling and installing
8513 applications.")
8514 (license license:bsd-3)))
8515
8516 (define-public python2-waf
8517 (package-with-python2 python-waf))
8518
8519 (define-public python-pyzmq
8520 (package
8521 (name "python-pyzmq")
8522 (version "22.0.3")
8523 (source
8524 (origin
8525 (method url-fetch)
8526 (uri (pypi-uri "pyzmq" version))
8527 (sha256
8528 (base32 "0bgrn65cxfz1c1sjrgyq5dy1mkhppxxbizd5wvrl03cq4zhkrxpp"))))
8529 (build-system python-build-system)
8530 (arguments
8531 `(#:configure-flags
8532 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
8533 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
8534 ;; --inplace' for 'python setup.py test' to work.
8535 #:tests? #f))
8536 (inputs
8537 `(("zeromq" ,zeromq)))
8538 (native-inputs
8539 `(("pkg-config" ,pkg-config)
8540 ("python-nose" ,python-nose)))
8541 (home-page "https://github.com/zeromq/pyzmq")
8542 (synopsis "Python bindings for 0MQ")
8543 (description
8544 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
8545 (license license:bsd-4)))
8546
8547 (define-public python2-pyzmq
8548 (package-with-python2 python-pyzmq))
8549
8550 (define-public python-pep8
8551 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
8552 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
8553 ;; some dependents' test suites, and nothing more.
8554 (package
8555 (name "python-pep8")
8556 (version "1.7.0")
8557 (source
8558 (origin
8559 (method url-fetch)
8560 (uri (pypi-uri "pep8" version))
8561 (sha256
8562 (base32
8563 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
8564 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
8565 (build-system python-build-system)
8566 (home-page "https://pep8.readthedocs.org/")
8567 (synopsis "Python style guide checker")
8568 (description
8569 "This tools checks Python code against some of the style conventions in
8570 PEP 8.")
8571 (license license:expat)))
8572
8573 (define-public python2-pep8
8574 (package-with-python2 python-pep8))
8575
8576 (define-public python-pep517
8577 (package
8578 (inherit python-pep517-bootstrap)
8579 (name "python-pep517")
8580 (arguments
8581 '(#:phases
8582 (modify-phases %standard-phases
8583 (replace 'check
8584 (lambda* (#:key tests? #:allow-other-keys)
8585 (delete-file "pytest.ini")
8586 ;; This test tries to connect to the internet
8587 (delete-file "tests/test_meta.py")
8588 (if tests?
8589 (invoke "pytest")
8590 #t))))))
8591 (native-inputs
8592 `(("python-mock" ,python-mock)
8593 ("python-pytest" ,python-pytest)
8594 ("python-testpath" ,python-testpath)))
8595 (properties `((python2-variant . ,(delay python2-pep517))))))
8596
8597 ;; Skip the tests so we don't create a cyclical dependency with pytest.
8598 (define-public python2-pep517
8599 (let ((base (package-with-python2
8600 (strip-python2-variant python-pep517))))
8601 (package/inherit base
8602 (name "python2-pep517")
8603 (arguments
8604 `(#:tests? #f
8605 ,@(package-arguments base)))
8606 (native-inputs `()))))
8607
8608 (define-public python-pyflakes
8609 (package
8610 (name "python-pyflakes")
8611 (version "2.3.1")
8612 (source
8613 (origin
8614 (method url-fetch)
8615 (uri (pypi-uri "pyflakes" version))
8616 (sha256
8617 (base32
8618 "1ny10364ciqh4ripasj4zzv4145l21l3s85m3qlrvfq5pk58xg7m"))))
8619 (build-system python-build-system)
8620 (home-page
8621 "https://github.com/pyflakes/pyflakes")
8622 (synopsis "Passive checker of Python programs")
8623 (description
8624 "Pyflakes statically checks Python source code for common errors.")
8625 (license license:expat)))
8626
8627 (define-public python2-pyflakes
8628 (package-with-python2 python-pyflakes))
8629
8630 (define-public python-mccabe
8631 (package
8632 (name "python-mccabe")
8633 (version "0.6.1")
8634 (source
8635 (origin
8636 (method url-fetch)
8637 (uri (pypi-uri "mccabe" version))
8638 (sha256
8639 (base32
8640 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
8641 (build-system python-build-system)
8642 (native-inputs
8643 `(("python-pytest" ,python-pytest-bootstrap)
8644 ("python-pytest-runner" ,python-pytest-runner)))
8645 (home-page "https://github.com/flintwork/mccabe")
8646 (synopsis "McCabe checker, plugin for flake8")
8647 (description
8648 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
8649 complexity of Python source code.")
8650 (license license:expat)))
8651
8652 (define-public python2-mccabe
8653 (package-with-python2 python-mccabe))
8654
8655 (define-public python-flake8
8656 (package
8657 (name "python-flake8")
8658 (version "3.9.0")
8659 (source (origin
8660 (method url-fetch)
8661 (uri (pypi-uri "flake8" version))
8662 (sha256
8663 (base32
8664 "1w65iyjnrwipv4dbcqxh725ri7mdx01d6pjyggd97c0j5cvkx1vq"))))
8665 (build-system python-build-system)
8666 (arguments
8667 `(#:phases
8668 (modify-phases %standard-phases
8669 (delete 'check)
8670 (add-after 'install 'check
8671 (lambda* (#:key inputs outputs #:allow-other-keys)
8672 (add-installed-pythonpath inputs outputs)
8673 (invoke "pytest" "-v")
8674 #t)))))
8675 (propagated-inputs
8676 `(("python-pycodestyle" ,python-pycodestyle)
8677 ("python-entrypoints" ,python-entrypoints)
8678 ("python-pyflakes" ,python-pyflakes)
8679 ("python-mccabe" ,python-mccabe)))
8680 (native-inputs
8681 `(("python-mock" ,python-mock)
8682 ("python-pytest" ,python-pytest-bootstrap)))
8683 (home-page "https://gitlab.com/pycqa/flake8")
8684 (synopsis
8685 "The modular source code checker: pep8, pyflakes and co")
8686 (description
8687 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
8688 (properties `((python2-variant . ,(delay python2-flake8))))
8689 (license license:expat)))
8690
8691 (define-public python2-flake8
8692 (let ((base (package-with-python2 (strip-python2-variant python-flake8))))
8693 (package/inherit base
8694 (propagated-inputs
8695 `(("python2-configparser" ,python2-configparser)
8696 ("python2-enum34" ,python2-enum34)
8697 ("python2-functools32" ,python2-functools32)
8698 ("python2-typing" ,python2-typing)
8699 ,@(package-propagated-inputs base))))))
8700
8701 (define-public python-flake8-bugbear
8702 (package
8703 (name "python-flake8-bugbear")
8704 (version "20.1.4")
8705 (source
8706 (origin
8707 (method url-fetch)
8708 (uri (pypi-uri "flake8-bugbear" version))
8709 (sha256
8710 (base32
8711 "0qiihb242fygzyrfynq913ak7cdmx8mcac9c0zk3y5gv16qf80mx"))))
8712 (build-system python-build-system)
8713 (arguments
8714 '(#:phases
8715 (modify-phases %standard-phases
8716 (add-before 'check 'disable-test
8717 (lambda _
8718 ;; This test fails on slow computers.
8719 (substitute* "tests/test_bugbear.py"
8720 (("def test_does_not_crash_on_any_valid_code")
8721 "def _test_does_not_crash_on_any_valid_code")))))))
8722 (native-inputs
8723 `(("python-hypothesis" ,python-hypothesis)
8724 ("python-hypothesmith" ,python-hypothesmith)))
8725 (propagated-inputs
8726 `(("python-attrs" ,python-attrs)
8727 ("python-flake8" ,python-flake8)))
8728 (home-page "https://github.com/PyCQA/flake8-bugbear")
8729 (synopsis
8730 "Flake8 plugin for finding likely bugs and design problems in your program")
8731 (description
8732 "This package contains a plugin for Flake8 finding likely bugs and
8733 design problems in your program. It contains warnings that don't belong
8734 in pyflakes and pycodestyle.")
8735 (license license:expat)))
8736
8737 (define-public python-flake8-continuation
8738 (package
8739 (name "python-flake8-continuation")
8740 (version "1.0.5")
8741 (source
8742 (origin
8743 (method url-fetch)
8744 (uri (pypi-uri "flake8-continuation" version))
8745 (sha256
8746 (base32
8747 "0dzaw8jr7yhlabxhrblnrizxx17xa9ngjnbr1kidg5lapq6b9q1y"))))
8748 (build-system python-build-system)
8749 (propagated-inputs
8750 `(("python-flake8" ,python-flake8)
8751 ("python-pycodestyle" ,python-pycodestyle)
8752 ("python-six" ,python-six)))
8753 (home-page "https://github.com/planetlabs/flake8-continuation")
8754 (synopsis "Flake8 Line Continuation Plugin")
8755 (description "A Flake8 plugin that checks for the line continuation
8756 style to be in the preferred method according to PEP-8, specifically:
8757 @quotation
8758 The preferred way of wrapping long lines is by using Python's implied
8759 line continuation inside parentheses, brackets and braces. Long lines
8760 can be broken over multiple lines by wrapping expressions in parentheses.
8761 These should be used in preference to using a backslash for line continuation.
8762 @end quotation")
8763 (license license:asl2.0)))
8764
8765 (define-public python-flake8-implicit-str-concat
8766 (package
8767 (name "python-flake8-implicit-str-concat")
8768 (version "0.2.0")
8769 (source
8770 (origin
8771 (method url-fetch)
8772 (uri (pypi-uri "flake8_implicit_str_concat" version))
8773 (sha256
8774 (base32 "1v0y29xlmbr2q12a4nnpm1dm9aw1mjiys1x8jif4z8c90d63cqm6"))))
8775 (build-system python-build-system)
8776 (propagated-inputs
8777 `(("python-attrs" ,python-attrs)
8778 ("python-more-itertools" ,python-more-itertools)))
8779 (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
8780 (synopsis "Flake8 plugin to encourage correct string literal concatenation")
8781 (description
8782 "This is a plugin for the Python code checking tool Flake8 to encourage
8783 correct string literal concatenation.
8784
8785 It looks for style problems like implicitly concatenated string literals on
8786 the same line (which can be introduced by the code formating tool Black), or
8787 unnecessary plus operators for explicit string literal concatenation.")
8788 (license license:expat)))
8789
8790 (define-public python-flake8-polyfill
8791 (package
8792 (name "python-flake8-polyfill")
8793 (version "1.0.2")
8794 (source
8795 (origin
8796 (method url-fetch)
8797 (uri (pypi-uri "flake8-polyfill" version))
8798 (sha256
8799 (base32
8800 "1nlf1mkqw856vi6782qcglqhaacb23khk9wkcgn55npnjxshhjz4"))))
8801 (build-system python-build-system)
8802 (arguments
8803 '(#:phases
8804 (modify-phases %standard-phases
8805 (replace 'check
8806 (lambda _
8807 ;; Be compatible with Pytest 4:
8808 ;; https://gitlab.com/pycqa/flake8-polyfill/merge_requests/7
8809 (substitute* "setup.cfg"
8810 (("\\[pytest\\]")
8811 "[tool:pytest]"))
8812
8813 (setenv "PYTHONPATH"
8814 (string-append (getcwd) "/build/lib:"
8815 (getenv "PYTHONPATH")))
8816 (invoke "py.test" "-v"))))))
8817 (native-inputs
8818 `(("python-flake8" ,python-flake8)
8819 ("python-mock" ,python-mock)
8820 ("python-pep8" ,python-pep8)
8821 ("python-pycodestyle" ,python-pycodestyle)
8822 ("python-pytest" ,python-pytest)))
8823 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
8824 (synopsis "Polyfill package for Flake8 plugins")
8825 (description
8826 "This package that provides some compatibility helpers for Flake8
8827 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
8828 (license license:expat)))
8829
8830 (define-public python2-flake8-polyfill
8831 (package-with-python2 python-flake8-polyfill))
8832
8833 (define-public python-flake8-print
8834 (package
8835 (name "python-flake8-print")
8836 (version "4.0.0")
8837 (source
8838 (origin
8839 (method url-fetch)
8840 (uri (pypi-uri "flake8-print" version))
8841 (sha256
8842 (base32 "05k5kkvyk6fdmvnacxfzypk74vbl3pmva13dqg1aljfwnxsc7yjs"))))
8843 (build-system python-build-system)
8844 (propagated-inputs
8845 `(("python-flake8" ,python-flake8)
8846 ("python-pycodestyle" ,python-pycodestyle)
8847 ("python-six" ,python-six)))
8848 (home-page "https://github.com/jbkahn/flake8-print")
8849 (synopsis "Print statement checker plugin for Flake8")
8850 (description
8851 "This plugin for Flake8 checks for @code{print} statements in Python
8852 files.")
8853 (license license:expat)))
8854
8855 (define-public python-flake8-pyi
8856 (package
8857 (name "python-flake8-pyi")
8858 (version "20.5.0")
8859 (source
8860 (origin
8861 (method url-fetch)
8862 (uri (pypi-uri "flake8-pyi" version))
8863 (sha256
8864 (base32
8865 "1zpq4s9kp8w95pccmhhyyx1ff2zhnidcf1zb3xs46lzcx9plvnzk"))))
8866 (build-system python-build-system)
8867 (propagated-inputs
8868 `(("python-attrs" ,python-attrs)
8869 ("python-flake8" ,python-flake8)
8870 ("python-pyflakes" ,python-pyflakes)))
8871 (home-page "https://github.com/ambv/flake8-pyi")
8872 (synopsis
8873 "Flake8 plugin that provides specializations for type hinting stub files")
8874 (description
8875 "This package contains a plugin that provides specializations for
8876 type hinting stub files, especially interesting for linting typeshed. It
8877 adds the @file{.pyi} extension to the default value of the @code{--filename}
8878 command-line argument to Flake8. This means stubs are linted by default with
8879 this plugin enabled, without needing to explicitly list every file. It
8880 modifies PyFlakes runs for @file{.pyi} files to defer checking type annotation
8881 expressions after the entire file has been read. This enables support for
8882 first-class forward references that stub files use.")
8883 (license license:expat)))
8884
8885 (define-public python-flake8-pie
8886 (package
8887 (name "python-flake8-pie")
8888 (version "0.5.0")
8889 (source
8890 (origin
8891 (method url-fetch)
8892 (uri (pypi-uri "flake8-pie" version))
8893 (sha256
8894 (base32 "0kgipl5gljlp7aa7ykx15pswpzkd0d0qiznihb2z0d9a73181dyd"))))
8895 (build-system python-build-system)
8896 (home-page "https://github.com/sbdchd/flake8-pie")
8897 (synopsis "Flake8 extension that implements lints")
8898 (description
8899 "This package provides a flake8 extension that implements miscellaneous
8900 lints.")
8901 (license license:bsd-2)))
8902
8903 (define-public python-flake8-quotes
8904 (package
8905 (name "python-flake8-quotes")
8906 (version "3.2.0")
8907 (source
8908 (origin
8909 (method url-fetch)
8910 (uri (pypi-uri "flake8-quotes" version))
8911 (sha256
8912 (base32
8913 "0ph5s6lxgpzz4an0ax6s5xjqypqmngwr5b1i0h9pqhzghplic49z"))))
8914 (build-system python-build-system)
8915 (propagated-inputs
8916 `(("python-flake8" ,python-flake8)))
8917 (home-page "https://github.com/zheller/flake8-quotes/")
8918 (synopsis "Flake8 lint for quotes")
8919 (description "This package provides a Flake8 lint for quotes.")
8920 (license license:expat)))
8921
8922 (define-public python-autoflake
8923 (package
8924 (name "python-autoflake")
8925 (version "1.3.1")
8926 (source
8927 (origin
8928 (method url-fetch)
8929 (uri (pypi-uri "autoflake" version))
8930 (sha256
8931 (base32 "0nzr057dbmgprp4a52ymafdkdd5zp2wcqf42913xc7hhvvdbj338"))))
8932 (build-system python-build-system)
8933 (propagated-inputs
8934 `(("python-pyflakes" ,python-pyflakes)))
8935 (home-page "https://github.com/myint/autoflake")
8936 (synopsis "Removes unused imports and unused variables")
8937 (description
8938 "@code{autoflake} removes unused imports and unused variables from Python
8939 code as reported by @code{pyflakes}.
8940
8941 By default, it only removes unused imports for modules that are part of the
8942 standard library. Removal of unused variables is also disabled by default.
8943 It also removes useless @code{pass} statements.")
8944 (license license:expat)))
8945
8946 (define-public python-mistune
8947 (package
8948 (name "python-mistune")
8949 (version "0.8.4")
8950 (source
8951 (origin
8952 (method url-fetch)
8953 (uri (pypi-uri "mistune" version))
8954 (sha256
8955 (base32
8956 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
8957 (build-system python-build-system)
8958 (native-inputs
8959 `(("python-nose" ,python-nose)
8960 ("python-cython" ,python-cython)))
8961 (home-page "https://github.com/lepture/mistune")
8962 (synopsis "Markdown parser in pure Python")
8963 (description "This package provides a fast markdown parser in pure
8964 Python.")
8965 (license license:bsd-3)))
8966
8967 (define-public python2-mistune
8968 (package-with-python2 python-mistune))
8969
8970 (define-public python-markdown
8971 (package
8972 (name "python-markdown")
8973 (version "3.3.4")
8974 (source
8975 (origin
8976 (method url-fetch)
8977 (uri (pypi-uri "Markdown" version))
8978 (sha256
8979 (base32
8980 "0jbs73nincha8fkfxx267sfxac6pl0ckszjbqbb8gk4dhs8v9d9i"))))
8981 (build-system python-build-system)
8982 (native-inputs
8983 `(("python-nose" ,python-nose)
8984 ("python-pyyaml" ,python-pyyaml)))
8985 (home-page "https://python-markdown.github.io/")
8986 (synopsis "Python implementation of Markdown")
8987 (description
8988 "This package provides a Python implementation of John Gruber's
8989 Markdown. The library features international input, various Markdown
8990 extensions, and several HTML output formats. A command line wrapper
8991 markdown_py is also provided to convert Markdown files to HTML.")
8992 (properties `((python2-variant . ,(delay python2-markdown))))
8993 (license license:bsd-3)))
8994
8995 ;; Markdown 3.2 dropped support for Python 2.
8996 (define-public python2-markdown
8997 (let ((base (package-with-python2 (strip-python2-variant python-markdown))))
8998 (package/inherit
8999 base
9000 (version "3.1.1")
9001 (source (origin
9002 (method url-fetch)
9003 (uri (pypi-uri "Markdown" version))
9004 (sha256
9005 (base32
9006 "0yhylk4ffqqs7x086fav4pnfsl1021v7lghznzkififprmmqfl1f")))))))
9007
9008 (define-public python-ptyprocess
9009 (package
9010 (name "python-ptyprocess")
9011 (version "0.5.2")
9012 (source
9013 (origin
9014 (method url-fetch)
9015 (uri (pypi-uri "ptyprocess" version))
9016 (sha256
9017 (base32
9018 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
9019 (build-system python-build-system)
9020 (native-inputs
9021 `(("python-nose" ,python-nose)))
9022 (arguments
9023 `(#:phases
9024 (modify-phases %standard-phases
9025 (replace 'check
9026 (lambda _ (invoke "nosetests"))))))
9027 (home-page "https://github.com/pexpect/ptyprocess")
9028 (synopsis "Run a subprocess in a pseudo terminal")
9029 (description
9030 "This package provides a Python library used to launch a subprocess in a
9031 pseudo terminal (pty), and interact with both the process and its pty.")
9032 (license license:isc)))
9033
9034 (define-public python2-ptyprocess
9035 (package-with-python2 python-ptyprocess))
9036
9037 (define-public python-cram
9038 (package
9039 (name "python-cram")
9040 (version "0.7")
9041 (home-page "https://bitheap.org/cram/")
9042 (source (origin
9043 (method url-fetch)
9044 (uri (list (string-append home-page "cram-"
9045 version ".tar.gz")
9046 (pypi-uri "cram" version)))
9047 (sha256
9048 (base32
9049 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
9050 (arguments
9051 '(#:phases
9052 (modify-phases %standard-phases
9053 (add-after 'unpack 'patch-source
9054 (lambda _
9055 (substitute* (find-files "cram" ".*\\.py$")
9056 ;; Replace default shell path.
9057 (("/bin/sh") (which "sh")))
9058 (substitute* (find-files "tests" ".*\\.t$")
9059 (("md5") "md5sum")
9060 (("/bin/bash") (which "bash"))
9061 (("/bin/sh") (which "sh")))
9062 (substitute* "cram/_test.py"
9063 ;; This hack works around a bug triggered by substituting
9064 ;; the /bin/sh paths. "tests/usage.t" compares the output of
9065 ;; "cram -h", which breaks the output at 80 characters. This
9066 ;; causes the line showing the default shell to break into two
9067 ;; lines, but the test expects a single line...
9068 (("env\\['COLUMNS'\\] = '80'")
9069 "env['COLUMNS'] = '160'"))
9070
9071 (substitute* "Makefile"
9072 ;; Recent versions of python-coverage have caused the test
9073 ;; coverage to decrease (as of version 0.7). Allow that.
9074 (("--fail-under=100")
9075 "--fail-under=90"))
9076
9077 #t))
9078 (replace 'check
9079 ;; The test phase uses the built library and executable.
9080 (lambda* (#:key inputs outputs #:allow-other-keys)
9081 (add-installed-pythonpath inputs outputs)
9082 (setenv "PATH" (string-append (getenv "PATH") ":"
9083 (assoc-ref outputs "out") "/bin"))
9084 (invoke "make" "test"))))))
9085 (build-system python-build-system)
9086 (native-inputs
9087 `(("python-coverage" ,python-coverage)
9088 ("which" ,which)))
9089 (synopsis "Simple testing framework for command line applications")
9090 (description
9091 "Cram is a functional testing framework for command line applications.
9092 Cram tests look like snippets of interactive shell sessions. Cram runs each
9093 command and compares the command output in the test with the command’s actual
9094 output.")
9095 (license license:gpl2+)))
9096
9097 (define-public python2-cram
9098 (package-with-python2 python-cram))
9099
9100 (define-public python-crashtest
9101 (package
9102 (name "python-crashtest")
9103 (version "0.3.1")
9104 (source
9105 (origin
9106 (method url-fetch)
9107 (uri (pypi-uri "crashtest" version))
9108 (sha256
9109 (base32 "1p9p7mn8x2j9psc4jxab98897v4i9s4fliyfw8rp8v4bx1n7pjj2"))))
9110 (build-system python-build-system)
9111 (home-page "https://github.com/sdispater/crashtest")
9112 (synopsis "Manage Python errors with ease")
9113 (description
9114 "Python library that makes exceptions handling and inspection easier.")
9115 (license license:expat)))
9116
9117 (define-public python-straight-plugin
9118 (package
9119 (name "python-straight-plugin")
9120 (version "1.4.1")
9121 (source
9122 (origin
9123 (method url-fetch)
9124 (uri (pypi-uri "straight.plugin" version))
9125 (sha256
9126 (base32
9127 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
9128 (build-system python-build-system)
9129 (home-page "https://github.com/ironfroggy/straight.plugin")
9130 (synopsis "Simple namespaced plugin facility")
9131 (description "Straight Plugin provides a type of plugin you can create from
9132 almost any existing Python modules, and an easy way for outside developers to
9133 add functionality and customization to your projects with their own plugins.")
9134 (license license:expat)))
9135
9136 (define-public python2-straight-plugin
9137 (package-with-python2 python-straight-plugin))
9138
9139 (define-public python-fonttools
9140 (package
9141 (name "python-fonttools")
9142 (version "4.6.0")
9143 (source (origin
9144 (method url-fetch)
9145 (uri (pypi-uri "fonttools" version ".zip"))
9146 (sha256
9147 (base32
9148 "1mq9kdzhcsp96bhv7smnrpdg1s4z5wh70bsl99c0jmcrahqdisqq"))))
9149 (build-system python-build-system)
9150 (native-inputs
9151 `(("unzip" ,unzip)
9152 ("python-pytest" ,python-pytest)
9153 ("python-pytest-runner" ,python-pytest-runner)))
9154 (home-page "https://github.com/fonttools/fonttools")
9155 (synopsis "Tools to manipulate font files")
9156 (description
9157 "FontTools/TTX is a library to manipulate font files from Python. It
9158 supports reading and writing of TrueType/OpenType fonts, reading and writing
9159 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
9160 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
9161 from an XML-based format.")
9162 (license license:expat)))
9163
9164 ;; Fonttools 4.x dropped support for Python 2, so stick with 3.x here.
9165 (define-public python2-fonttools
9166 (let ((base (package-with-python2 (strip-python2-variant python-fonttools))))
9167 (package/inherit
9168 base
9169 (version "3.44.0")
9170 (source (origin
9171 (method url-fetch)
9172 (uri (pypi-uri "fonttools" version ".zip"))
9173 (sha256
9174 (base32
9175 "0v6399g755f2hn1ry62i5b6gdinf2fpx2966v3bxh6bjw1accb5p")))))))
9176
9177 (define-public python-ly
9178 (package
9179 (name "python-ly")
9180 (version "0.9.5")
9181 (source
9182 (origin
9183 (method url-fetch)
9184 (uri (pypi-uri name version))
9185 (sha256
9186 (base32
9187 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
9188 (build-system python-build-system)
9189 (arguments
9190 ;; FIXME: Some tests need network access.
9191 '(#:tests? #f))
9192 (synopsis "Tool and library for manipulating LilyPond files")
9193 (description "This package provides a Python library to parse, manipulate
9194 or create documents in LilyPond format. A command line program ly is also
9195 provided that can be used to do various manipulations with LilyPond files.")
9196 (home-page "https://pypi.org/project/python-ly/")
9197 (license license:gpl2+)))
9198
9199 (define-public python-appdirs
9200 (package
9201 (name "python-appdirs")
9202 (version "1.4.3")
9203 (source
9204 (origin
9205 (method url-fetch)
9206 (uri (pypi-uri "appdirs" version))
9207 (sha256
9208 (base32
9209 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
9210 (build-system python-build-system)
9211 (home-page "https://github.com/ActiveState/appdirs")
9212 (synopsis
9213 "Determine platform-specific dirs, e.g. a \"user data dir\"")
9214 (description
9215 "This module provides a portable way of finding out where user data
9216 should be stored on various operating systems.")
9217 (license license:expat)))
9218
9219 (define-public python2-appdirs
9220 (package-with-python2 python-appdirs))
9221
9222 (define-public python-gorilla
9223 (package
9224 (name "python-gorilla")
9225 (version "0.3.0")
9226 (source (origin
9227 (method url-fetch)
9228 (uri (pypi-uri "gorilla" version))
9229 (sha256
9230 (base32
9231 "0b40blcp6fih4nvqbilra4qw1dfccv1ahjmr41ac4d9rjadqkcpy"))))
9232 (build-system python-build-system)
9233 (home-page "https://github.com/christophercrouzet/gorilla")
9234 (synopsis "Convenient monkey patching with Python")
9235 (description
9236 "Gorilla is a Python library that provides a convenient approach to
9237 monkey patching. Monkey patching is the process of modifying module and
9238 class attributes at runtime with the purpose of replacing or extending
9239 third-party code.")
9240 (license license:expat)))
9241
9242 (define-public python-llfuse
9243 (package
9244 (name "python-llfuse")
9245 (version "1.3.8")
9246 (source (origin
9247 (method url-fetch)
9248 (uri (pypi-uri "llfuse" version))
9249 (sha256
9250 (base32
9251 "1g2cdhdqrb6m7655qp61pn61pwj1ql61cdzhr2jvl3w4i8877ddr"))))
9252 (build-system python-build-system)
9253 (inputs
9254 `(("fuse" ,fuse)
9255 ("attr" ,attr)))
9256 (native-inputs
9257 `(("pkg-config" ,pkg-config)))
9258 (synopsis "Python bindings for FUSE")
9259 (description
9260 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
9261 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
9262 (license license:lgpl2.0+)
9263 (properties `((python2-variant . ,(delay python2-llfuse))))))
9264
9265 (define-public python2-llfuse
9266 (let ((base (package-with-python2
9267 (strip-python2-variant python-llfuse))))
9268 (package/inherit base
9269 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2))))))
9270
9271 (define-public python-msgpack
9272 (package
9273 (name "python-msgpack")
9274 (version "1.0.0")
9275 (source (origin
9276 (method url-fetch)
9277 (uri (pypi-uri "msgpack" version))
9278 (sha256
9279 (base32
9280 "1h5mxh84rcw04dvxy1qbfn2hisavfqgilh9k09rgyjhd936dad4m"))))
9281 (build-system python-build-system)
9282 (arguments
9283 `(#:modules ((guix build utils)
9284 (guix build python-build-system)
9285 (ice-9 ftw)
9286 (srfi srfi-1)
9287 (srfi srfi-26))
9288 #:phases
9289 (modify-phases %standard-phases
9290 (replace 'check
9291 (lambda _
9292 (let ((cwd (getcwd)))
9293 (setenv "PYTHONPATH"
9294 (string-append cwd "/build/"
9295 (find (cut string-prefix? "lib" <>)
9296 (scandir (string-append cwd "/build")))
9297 ":"
9298 (getenv "PYTHONPATH")))
9299 (invoke "pytest" "-v" "test")))))))
9300 (native-inputs
9301 `(("python-pytest" ,python-pytest)))
9302 (synopsis "MessagePack (de)serializer")
9303 (description "MessagePack is a fast, compact binary serialization format,
9304 suitable for similar data to JSON. This package provides CPython bindings for
9305 reading and writing MessagePack data.")
9306 (home-page "https://pypi.org/project/msgpack/")
9307 (license license:asl2.0)))
9308
9309 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
9310 ;; release 0.5. Some packages like borg still call it by the old name for now.
9311 ;; <https://bugs.gnu.org/30662>
9312 (define-public python-msgpack-transitional
9313 (package
9314 (inherit python-msgpack)
9315 (name "python-msgpack-transitional")
9316 (version "0.5.6")
9317 (source (origin
9318 (method url-fetch)
9319 (uri (pypi-uri "msgpack" version))
9320 (sha256
9321 (base32
9322 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
9323 (arguments
9324 (substitute-keyword-arguments (package-arguments python-msgpack)
9325 ((#:phases phases)
9326 `(modify-phases ,phases
9327 (add-after 'unpack 'configure-transitional
9328 (lambda _
9329 ;; Keep using the old name.
9330 (substitute* "setup.py"
9331 (("TRANSITIONAL = False")
9332 "TRANSITIONAL = 1"))
9333 #t))))))))
9334
9335 (define-public python2-msgpack
9336 (package-with-python2 python-msgpack))
9337
9338 (define-public python-netaddr
9339 (package
9340 (name "python-netaddr")
9341 (version "0.7.19")
9342 (source
9343 (origin
9344 (method url-fetch)
9345 (uri (pypi-uri "netaddr" version))
9346 (sha256
9347 (base32
9348 "1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
9349 (build-system python-build-system)
9350 (arguments `(#:tests? #f)) ;; No tests.
9351 (home-page "https://github.com/drkjam/netaddr/")
9352 (synopsis "Pythonic manipulation of network addresses")
9353 (description
9354 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
9355 and MAC network addresses.")
9356 (license license:bsd-3)))
9357
9358 (define-public python2-netaddr
9359 (package-with-python2 python-netaddr))
9360
9361 (define-public python2-pyroute2
9362 (package
9363 (name "python2-pyroute2")
9364 (version "0.5.6")
9365 (source
9366 (origin
9367 (method url-fetch)
9368 (uri (pypi-uri "pyroute2" version))
9369 (sha256
9370 (base32
9371 "1gmz4r1w0yzj6fjjypnalmfyy0lnfznydyn62gi3wk50j5hhxbny"))))
9372 (build-system python-build-system)
9373 (arguments
9374 `(#:python ,python-2)) ;Python 3.x is not supported
9375 (home-page "https://github.com/svinota/pyroute2")
9376 (synopsis "Python netlink library")
9377 (description
9378 "Pyroute2 is a pure Python netlink library with minimal dependencies.
9379 Supported netlink families and protocols include:
9380 @itemize
9381 @item rtnl, network settings - addresses, routes, traffic controls
9382 @item nfnetlink - netfilter API: ipset, nftables, ...
9383 @item ipq - simplest userspace packet filtering, iptables QUEUE target
9384 @item devlink - manage and monitor devlink-enabled hardware
9385 @item generic - generic netlink families
9386 @itemize
9387 @item nl80211 - wireless functions API (basic support)
9388 @item taskstats - extended process statistics
9389 @item acpi_events - ACPI events monitoring
9390 @item thermal_events - thermal events monitoring
9391 @item VFS_DQUOT - disk quota events monitoring
9392 @end itemize
9393 @end itemize")
9394 (license license:gpl2+)))
9395
9396 (define-public python-wrapt
9397 (package
9398 (name "python-wrapt")
9399 (version "1.11.2")
9400 (source
9401 (origin
9402 (method url-fetch)
9403 (uri (pypi-uri "wrapt" version))
9404 (sha256
9405 (base32
9406 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
9407 (build-system python-build-system)
9408 (arguments
9409 ;; Tests are not included in the tarball, they are only available in the
9410 ;; git repository.
9411 `(#:tests? #f))
9412 (home-page "https://github.com/GrahamDumpleton/wrapt")
9413 (synopsis "Module for decorators, wrappers and monkey patching")
9414 (description
9415 "The aim of the wrapt module is to provide a transparent object proxy for
9416 Python, which can be used as the basis for the construction of function
9417 wrappers and decorator functions.")
9418 (license license:bsd-2)))
9419
9420 (define-public python2-wrapt
9421 (package-with-python2 python-wrapt))
9422
9423 (define-public python-commonmark
9424 (package
9425 (name "python-commonmark")
9426 (version "0.9.1")
9427 (source
9428 (origin
9429 (method url-fetch)
9430 (uri (pypi-uri "commonmark" version))
9431 (sha256
9432 (base32 "0q7d39lm8kcingpmykk5r959hrwwj6v2icyw3mihczxyb749sbs5"))))
9433 (build-system python-build-system)
9434 (arguments
9435 `(#:phases
9436 (modify-phases %standard-phases
9437 (replace 'check
9438 (lambda* (#:key inputs outputs #:allow-other-keys)
9439 (add-installed-pythonpath inputs outputs)
9440 (invoke "python" "setup.py" "test"))))))
9441 (home-page "https://github.com/readthedocs/commonmark.py")
9442 (synopsis "Python parser for the CommonMark Markdown spec")
9443 (description
9444 "This module is a pure Python port of jgm's @code{commonmark.js}, a
9445 Markdown parser and renderer for the CommonMark specification, using only
9446 native modules.")
9447 (license license:bsd-3)))
9448
9449 (define-public python-xlrd
9450 (package
9451 (name "python-xlrd")
9452 (version "1.2.0")
9453 (source (origin
9454 (method url-fetch)
9455 (uri (pypi-uri "xlrd" version))
9456 (sha256
9457 (base32
9458 "1ci93fda4n67qhdvfl16zasyxrpygzk53hs6m8z0rd4dxrnb6vjl"))))
9459 (build-system python-build-system)
9460 (arguments
9461 `(#:phases
9462 (modify-phases %standard-phases
9463 ;; Some tests depend on writing a temporary file to the user's home
9464 ;; directory.
9465 (add-after 'unpack 'fix-tests
9466 (lambda _
9467 (delete-file "tests/test_open_workbook.py")
9468 #t)))))
9469 (home-page "http://www.python-excel.org/")
9470 (synopsis "Library for extracting data from Excel files")
9471 (description "This package provides a library to extract data from
9472 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
9473 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
9474 Unicode-aware. It is not intended as an end-user tool.")
9475 (license license:bsd-3)))
9476
9477 (define-public python2-xlrd
9478 (package-with-python2 python-xlrd))
9479
9480 (define-public python-immutables
9481 (package
9482 (name "python-immutables")
9483 (version "0.14")
9484 (source
9485 (origin
9486 (method url-fetch)
9487 (uri (pypi-uri "immutables" version))
9488 (sha256
9489 (base32 "0y0aqw29g525frdnmv9paljzacpp4s21sadfbca5b137iciwr8d0"))))
9490 (build-system python-build-system)
9491 (home-page "https://github.com/MagicStack/immutables")
9492 (synopsis "High-performance immutable mapping type for Python")
9493 (description
9494 "An immutable mapping type for Python. The underlying datastructure is a
9495 Hash Array Mapped Trie (HAMT) used in Clojure, Scala, Haskell, and other
9496 functional languages.")
9497 (license license:asl2.0)))
9498
9499 (define-public python-prettytable
9500 (package
9501 (name "python-prettytable")
9502 (version "0.7.2")
9503 (source
9504 (origin
9505 (method url-fetch)
9506 (uri (pypi-uri "prettytable" version ".tar.bz2"))
9507 (sha256
9508 (base32
9509 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
9510 (build-system python-build-system)
9511 (home-page "https://code.google.com/archive/p/prettytable/")
9512 (synopsis "Display tabular data in an ASCII table format")
9513 (description
9514 "A library designed to represent tabular data in visually appealing ASCII
9515 tables. PrettyTable allows for selection of which columns are to be printed,
9516 independent alignment of columns (left or right justified or centred) and
9517 printing of sub-tables by specifying a row range.")
9518 (license license:bsd-3)))
9519
9520 (define-public python2-prettytable
9521 (package-with-python2 python-prettytable))
9522
9523 (define-public python-curio
9524 (package
9525 (name "python-curio")
9526 (version "1.2")
9527 (source
9528 (origin
9529 (method url-fetch)
9530 (uri (pypi-uri "curio" version))
9531 (sha256
9532 (base32 "16wkww6kh511b9bzsfhpvrv0766cc6ssgbzz4lgpjnrzzgx21wwh"))))
9533 (build-system python-build-system)
9534 (arguments
9535 `(#:phases
9536 (modify-phases %standard-phases
9537 (replace 'check
9538 (lambda* (#:key inputs outputs #:allow-other-keys)
9539 (add-installed-pythonpath inputs outputs)
9540 (invoke "pytest" "-vv" "-k"
9541 ;; Tries to open an outgoing connection.
9542 "not test_ssl_outgoing"))))))
9543 (native-inputs
9544 `(("python-pytest" ,python-pytest)))
9545 (home-page "https://github.com/dabeaz/curio")
9546 (synopsis "Coroutine-based library for concurrent Python")
9547 (description
9548 "Curio is a coroutine-based library for concurrent Python systems
9549 programming. It provides standard programming abstractions such as as
9550 tasks, sockets, files, locks, and queues.")
9551 (license license:bsd-3)))
9552
9553 (define-public python-tables
9554 (package
9555 (name "python-tables")
9556 (version "3.6.1")
9557 (source
9558 (origin
9559 (method url-fetch)
9560 (uri (pypi-uri "tables" version))
9561 (sha256
9562 (base32
9563 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
9564 (modules '((guix build utils)))
9565 (snippet
9566 '(begin
9567 ;; Remove pre-compiled .pyc files from source.
9568 (for-each delete-file-recursively
9569 (find-files "." "__pycache__" #:directories? #t))
9570 (for-each delete-file (find-files "." "\\.pyc$"))
9571 #t))))
9572 (build-system python-build-system)
9573 (arguments
9574 `(;; FIXME: python-build-system does not pass configure-flags to "build"
9575 ;; or "check", so we must override the build and check phases.
9576 #:phases
9577 (modify-phases %standard-phases
9578 (add-after 'unpack 'use-gcc
9579 (lambda _
9580 (substitute* "setup.py"
9581 (("^( +)compiler = new_compiler\\(\\)" line indent)
9582 (string-append line
9583 "\n"
9584 indent
9585 "compiler.set_executables(compiler='gcc',"
9586 "compiler_so='gcc',"
9587 "linker_exe='gcc',"
9588 "linker_so='gcc -shared')")))
9589 #t))
9590 (add-after 'unpack 'disable-tuning
9591 (lambda _
9592 (substitute* "setup.py"
9593 (("cpu_flags = .*")
9594 "cpu_flags = ['sse2']\n"))
9595 #t))
9596 (replace 'build
9597 (lambda* (#:key inputs #:allow-other-keys)
9598 (invoke "python" "setup.py" "build"
9599 (string-append "--hdf5="
9600 (assoc-ref inputs "hdf5")))))
9601 (replace 'check
9602 (lambda* (#:key inputs #:allow-other-keys)
9603 (invoke "python" "setup.py" "check"
9604 (string-append "--hdf5="
9605 (assoc-ref inputs "hdf5"))))))))
9606 (propagated-inputs
9607 `(("python-numexpr" ,python-numexpr)
9608 ("python-numpy" ,python-numpy)))
9609 (native-inputs
9610 `(("python-cython" ,python-cython)
9611 ("pkg-config" ,pkg-config)))
9612 (inputs
9613 `(("hdf5" ,hdf5-1.10)
9614 ("bzip2" ,bzip2)
9615 ("zlib" ,zlib)))
9616 (home-page "https://www.pytables.org/")
9617 (synopsis "Hierarchical datasets for Python")
9618 (description "PyTables is a package for managing hierarchical datasets and
9619 designed to efficiently cope with extremely large amounts of data.")
9620 (license license:bsd-3)))
9621
9622 (define-public python-sniffio
9623 (package
9624 (name "python-sniffio")
9625 (version "1.1.0")
9626 (source
9627 (origin
9628 (method url-fetch)
9629 (uri (pypi-uri "sniffio" version))
9630 (sha256
9631 (base32 "08bsp2pp2dxzn9yzcafwzw8jlm0jf50as0ix8vfhxzk91w810f4f"))))
9632 (build-system python-build-system)
9633 (arguments
9634 `(#:phases
9635 (modify-phases %standard-phases
9636 (replace 'check
9637 (lambda _
9638 (invoke "pytest" "-vv"))))))
9639 (native-inputs
9640 `(("python-curio" ,python-curio)
9641 ("python-pytest" ,python-pytest)
9642 ("python-pytest-cov" ,python-pytest-cov)))
9643 (home-page "https://github.com/python-trio/sniffio")
9644 (synopsis "Detect which async library a program is running under")
9645 (description "This package detects which async library a program is
9646 running under. It supports multiple async I/O packages, like Trio, and
9647 asyncio.")
9648 ;; Either license applies.
9649 (license (list license:expat license:asl2.0))))
9650
9651 (define-public python-pytest-black
9652 (package
9653 (name "python-pytest-black")
9654 (version "0.3.8")
9655 (source
9656 (origin
9657 (method url-fetch)
9658 (uri (pypi-uri "pytest-black" version))
9659 (sha256
9660 (base32
9661 "04lppqydxm0f3f3x0l8hj7v0j6d8syj34jc37yzqwqcyqsnaga81"))))
9662 (build-system python-build-system)
9663 (propagated-inputs
9664 `(("python-pytest" ,python-pytest)
9665 ("python-black" ,python-black)
9666 ("python-toml" ,python-toml)))
9667 (native-inputs
9668 `(("python-setuptools-scm" ,python-setuptools-scm)))
9669 (home-page "https://github.com/shopkeep/pytest-black")
9670 (synopsis "Pytest plugin to enable format checking with black")
9671 (description
9672 "This package provides a pytest plugin to enable format checking with the
9673 Python code formatter \"black\".")
9674 (license license:expat)))
9675
9676 (define-public python-get-version
9677 (package
9678 (name "python-get-version")
9679 (version "2.1")
9680 (source
9681 (origin
9682 (method url-fetch)
9683 (uri (pypi-uri "get_version" version))
9684 (sha256
9685 (base32
9686 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
9687 (build-system python-build-system)
9688 (propagated-inputs
9689 `(("python-pygments" ,python-pygments)
9690 ("python-pytest" ,python-pytest)
9691 ("python-pytest-black" ,python-pytest-black)
9692 ("python-pytest-cov" ,python-pytest-cov)
9693 ("python-setuptools" ,python-setuptools)
9694 ("python-testpath" ,python-testpath)))
9695 (home-page "https://github.com/flying-sheep/get_version")
9696 (synopsis "Version helper in the spirit of versioneer")
9697 (description
9698 "This package provides a version helper that lets you automatically use
9699 the latest @code{vX.X.X} Git tag as the version in your Python package. It
9700 also supports getting the version from Python source distributions or, once
9701 your package is installed, via @code{pkg_resources} (part of
9702 @code{setuptools}).")
9703 (license license:gpl3+)))
9704
9705 (define-public python-legacy-api-wrap
9706 (package
9707 (name "python-legacy-api-wrap")
9708 (version "1.2")
9709 (source
9710 (origin
9711 (method url-fetch)
9712 (uri (pypi-uri "legacy-api-wrap" version))
9713 (sha256
9714 (base32
9715 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
9716 (build-system python-build-system)
9717 (propagated-inputs
9718 `(("python-get-version" ,python-get-version)
9719 ("python-pytest" ,python-pytest)
9720 ("python-pytest-black" ,python-pytest-black)
9721 ("python-pytest-cov" ,python-pytest-cov)
9722 ("python-setuptools" ,python-setuptools)))
9723 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
9724 (synopsis "Legacy API wrapper")
9725 (description "This module defines a decorator to wrap legacy APIs. The
9726 primary use case is APIs defined before keyword-only parameters existed.")
9727 (license license:gpl3+)))
9728
9729 (define-public python-pyasn1
9730 (package
9731 (name "python-pyasn1")
9732 (version "0.4.8")
9733 (source
9734 (origin
9735 (method url-fetch)
9736 (uri (pypi-uri "pyasn1" version))
9737 (sha256
9738 (base32
9739 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
9740 (build-system python-build-system)
9741 (home-page "http://pyasn1.sourceforge.net/")
9742 (synopsis "ASN.1 types and codecs")
9743 (description
9744 "This is an implementation of ASN.1 types and codecs in Python. It is
9745 suitable for a wide range of protocols based on the ASN.1 specification.")
9746 (license license:bsd-2)))
9747
9748 (define-public python2-pyasn1
9749 (package-with-python2 python-pyasn1))
9750
9751 (define-public python-pyasn1-modules
9752 (package
9753 (name "python-pyasn1-modules")
9754 (version "0.2.2")
9755 (source
9756 (origin
9757 (method url-fetch)
9758 (uri (pypi-uri "pyasn1-modules" version))
9759 (sha256
9760 (base32
9761 "0ivm850yi7ajjbi8j115qpsj95bgxdsx48nbjzg0zip788c3xkx0"))))
9762 (build-system python-build-system)
9763 (propagated-inputs
9764 `(("python-pyasn1" ,python-pyasn1)))
9765 (home-page "https://sourceforge.net/projects/pyasn1/")
9766 (synopsis "ASN.1 codec implementations")
9767 (description
9768 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
9769 implementations of ASN.1-based codecs and protocols.")
9770 (license license:bsd-3)))
9771
9772 (define-public python2-pyasn1-modules
9773 (package-with-python2 python-pyasn1-modules))
9774
9775 (define-public python-ipaddress
9776 (package
9777 (name "python-ipaddress")
9778 (version "1.0.23")
9779 (source (origin
9780 (method url-fetch)
9781 (uri (pypi-uri "ipaddress" version))
9782 (sha256
9783 (base32
9784 "1qp743h30s04m3cg3yk3fycad930jv17q7dsslj4mfw0jlvf1y5p"))))
9785 (build-system python-build-system)
9786 (home-page "https://github.com/phihag/ipaddress")
9787 (synopsis "IP address manipulation library")
9788 (description
9789 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
9790 in Python. This library is used to create, poke at, and manipulate IPv4 and
9791 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
9792 module to older versions of Python.")
9793 (license license:psfl)))
9794
9795 (define-public python2-ipaddress
9796 (package-with-python2 python-ipaddress))
9797
9798 (define-public python2-ipaddr
9799 (package
9800 (name "python2-ipaddr")
9801 (version "2.1.11")
9802 (source
9803 (origin
9804 (method url-fetch)
9805 (uri (pypi-uri "ipaddr" version))
9806 (sha256
9807 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
9808 (build-system python-build-system)
9809 (arguments
9810 `(#:python ,python-2 ;version 2 only
9811 #:phases
9812 (modify-phases %standard-phases
9813 (replace 'check
9814 (lambda _ (invoke "python" "ipaddr_test.py"))))))
9815 (home-page "https://github.com/google/ipaddr-py")
9816 (synopsis "IP address manipulation library")
9817 (description
9818 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
9819 IPv6 addresses and networks.
9820
9821 For new implementations you may prefer to use the standard module
9822 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
9823 versions of Python.")
9824 (license license:asl2.0)))
9825
9826 (define-public python-idna
9827 (package
9828 (name "python-idna")
9829 (version "2.10")
9830 (source
9831 (origin
9832 (method url-fetch)
9833 (uri (pypi-uri "idna" version))
9834 (sha256
9835 (base32
9836 "1xmk3s92d2vq42684p61wixfmh3qpr2mw762w0n6662vhlpqf1xk"))))
9837 (build-system python-build-system)
9838 (home-page "https://github.com/kjd/idna")
9839 (synopsis "Internationalized domain names in applications")
9840 (description
9841 "This is a library to support the Internationalised Domain Names in
9842 Applications (IDNA) protocol as specified in RFC 5891. This version of the
9843 protocol is often referred to as “IDNA2008” and can produce different results
9844 from the earlier standard from 2003. The library is also intended to act as a
9845 suitable drop-in replacement for the “encodings.idna” module that comes with
9846 the Python standard library but currently only supports the older 2003
9847 specification.")
9848 (license license:bsd-4)))
9849
9850 (define-public python-idna-2.7
9851 (package (inherit python-idna)
9852 (version "2.7")
9853 (source (origin
9854 (method url-fetch)
9855 (uri (pypi-uri "idna" version))
9856 (sha256
9857 (base32
9858 "05jam7d31767dr12x0rbvvs8lxnpb1mhdb2zdlfxgh83z6k3hjk8"))))))
9859
9860
9861 (define-public python2-idna
9862 (package-with-python2 python-idna))
9863
9864 (define-public python-libsass
9865 (package
9866 (name "python-libsass")
9867 (version "0.20.1")
9868 (source
9869 (origin
9870 ;; PyPI tarball is missing some test files.
9871 (method git-fetch)
9872 (uri (git-reference
9873 (url "https://github.com/sass/libsass-python")
9874 (commit version)))
9875 (file-name (git-file-name name version))
9876 (sha256
9877 (base32 "1r0kgl7i6nnhgjl44sjw57k08gh2qr7l8slqih550dyxbf1akbxh"))))
9878 (build-system python-build-system)
9879 (arguments
9880 `(#:phases
9881 (modify-phases %standard-phases
9882 ;; Use Guix package of libsass instead of compiling from a checkout.
9883 (add-before 'build 'set-libsass
9884 (lambda _
9885 (setenv "SYSTEM_SASS" (assoc-ref %build-inputs "libsass"))
9886 #t))
9887 (replace 'check
9888 (lambda* (#:key inputs outputs #:allow-other-keys)
9889 (add-installed-pythonpath inputs outputs)
9890 (invoke "pytest" "sasstests.py"))))))
9891 (native-inputs
9892 `(("python-pytest" ,python-pytest)
9893 ("python-werkzeug" ,python-werkzeug)))
9894 (inputs
9895 `(("libsass" ,libsass)))
9896 (propagated-inputs
9897 `(("python-six" ,python-six)))
9898 (home-page "https://sass.github.io/libsass-python/")
9899 (synopsis "Straightforward binding of libsass for Python")
9900 (description
9901 "This package provides a simple Python extension module @code{sass} which
9902 is binding LibSass.")
9903 (license license:expat)))
9904
9905 (define-public python-idna-ssl
9906 (package
9907 (name "python-idna-ssl")
9908 (version "1.0.1")
9909 (source
9910 (origin
9911 (method url-fetch)
9912 (uri (pypi-uri "idna-ssl" version))
9913 (sha256
9914 (base32
9915 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
9916 (build-system python-build-system)
9917 (arguments
9918 `(#:tests? #f)) ;circular dependency with python-aiohttp
9919 (home-page "https://github.com/aio-libs/idna-ssl")
9920 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
9921 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
9922 domains support.")
9923 (license license:expat)))
9924
9925 (define-public python-pretend
9926 (package
9927 (name "python-pretend")
9928 (version "1.0.9")
9929 (source
9930 (origin
9931 (method url-fetch)
9932 (uri (pypi-uri "pretend" version))
9933 (sha256
9934 (base32
9935 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
9936 (build-system python-build-system)
9937 (home-page "https://github.com/alex/pretend")
9938 (synopsis "Library for stubbing in Python")
9939 (description
9940 "Pretend is a library to make stubbing with Python easier. Stubbing is a
9941 technique for writing tests. You may hear the term mixed up with mocks,
9942 fakes, or doubles. Basically, a stub is an object that returns pre-canned
9943 responses, rather than doing any computation.")
9944 (license license:bsd-3)))
9945
9946 (define-public python2-pretend
9947 (package-with-python2 python-pretend))
9948
9949 (define-public python-pip
9950 (package
9951 (name "python-pip")
9952 (version "20.2.4")
9953 (source
9954 (origin
9955 (method url-fetch)
9956 (uri (pypi-uri "pip" version))
9957 (sha256
9958 (base32
9959 "18b4qcijwivvkj1g0hs4w8zjbks0bjzdjcrqybnhmyx0gs2rmjc5"))))
9960 (build-system python-build-system)
9961 (arguments
9962 '(#:tests? #f)) ; there are no tests in the pypi archive.
9963 (home-page "https://pip.pypa.io/")
9964 (synopsis "Package manager for Python software")
9965 (description
9966 "Pip is a package manager for Python software, that finds packages on the
9967 Python Package Index (PyPI).")
9968 (license license:expat)))
9969
9970 (define-public python2-pip
9971 (package-with-python2 python-pip))
9972
9973 (define-public python-tlsh
9974 (package
9975 (name "python-tlsh")
9976 (version "3.4.5")
9977 (home-page "https://github.com/trendmicro/tlsh")
9978 (source
9979 (origin
9980 (method git-fetch)
9981 (uri (git-reference
9982 (url "https://github.com/trendmicro/tlsh")
9983 (commit (string-append "v" version))))
9984 (file-name (git-file-name name version))
9985 (sha256
9986 (base32 "1ydliir308xn4ywy705mmsh7863ldlixdvpqwdhbipzq9vfpmvll"))))
9987 (build-system cmake-build-system)
9988 (arguments
9989 '(#:out-of-source? #f
9990 #:phases (modify-phases %standard-phases
9991 (replace
9992 'install
9993 (lambda* (#:key outputs #:allow-other-keys)
9994 ;; Build and install the Python bindings. The underlying
9995 ;; C++ library is apparently not meant to be installed.
9996 (let ((out (assoc-ref outputs "out")))
9997 (with-directory-excursion "py_ext"
9998 (and (system* "python" "setup.py" "build")
9999 (system* "python" "setup.py" "install"
10000 (string-append "--prefix=" out))))))))))
10001 (inputs `(("python" ,python-wrapper))) ;for the bindings
10002 (synopsis "Fuzzy matching library for Python")
10003 (description
10004 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
10005 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
10006 value which can be used for similarity comparisons. Similar objects have
10007 similar hash values, which allows for the detection of similar objects by
10008 comparing their hash values. The byte stream should have a sufficient amount
10009 of complexity; for example, a byte stream of identical bytes will not generate
10010 a hash value.")
10011 (license license:asl2.0)))
10012
10013 (define-public python2-tlsh
10014 (package/inherit python-tlsh
10015 (name "python2-tlsh")
10016 (inputs `(("python" ,python-2)))))
10017
10018 (define-public python-termcolor
10019 (package
10020 (name "python-termcolor")
10021 (version "1.1.0")
10022 (source
10023 (origin
10024 (method url-fetch)
10025 (uri (pypi-uri "termcolor" version))
10026 (sha256
10027 (base32
10028 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
10029 (build-system python-build-system)
10030 (arguments
10031 ;; There are no tests.
10032 `(#:tests? #f))
10033 (home-page "https://pypi.org/project/termcolor/")
10034 (synopsis "ANSII Color formatting for terminal output")
10035 (description
10036 "This package provides ANSII Color formatting for output in terminals.")
10037 (license license:expat)))
10038
10039 (define-public python2-termcolor
10040 (package-with-python2 python-termcolor))
10041
10042 (define-public python-terminaltables
10043 (package
10044 (name "python-terminaltables")
10045 (version "3.1.0")
10046 (source
10047 (origin
10048 (method url-fetch)
10049 (uri (pypi-uri "terminaltables" version))
10050 (sha256
10051 (base32
10052 "109vhldk6nv1z3hzp4dyqf6rjvlhl0y2k5k7qcm9fcrq5swhxszk"))))
10053 (build-system python-build-system)
10054 (home-page "https://github.com/Robpol86/terminaltables")
10055 (synopsis
10056 "Generate simple tables in terminals from a nested list of strings")
10057 (description
10058 "This package makes it easy to draw tables in terminal/console
10059 applications from a list of lists of strings. It supports multi-line rows.")
10060 (license license:expat)))
10061
10062 (define-public python-libarchive-c
10063 (package
10064 (name "python-libarchive-c")
10065 (version "2.9")
10066 (source (origin
10067 (method url-fetch)
10068 (uri (pypi-uri "libarchive-c" version))
10069 (sha256
10070 (base32
10071 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
10072 (build-system python-build-system)
10073 (arguments
10074 '(#:phases (modify-phases %standard-phases
10075 (add-before
10076 'build 'reference-libarchive
10077 (lambda* (#:key inputs #:allow-other-keys)
10078 ;; Retain the absolute file name of libarchive.so.
10079 (let ((libarchive (assoc-ref inputs "libarchive")))
10080 (substitute* "libarchive/ffi.py"
10081 (("find_library\\('archive'\\)")
10082 (string-append "'" libarchive
10083 "/lib/libarchive.so'"))))))
10084 (replace 'check
10085 (lambda _ (invoke "pytest" "-vv"))))))
10086 (native-inputs
10087 `(("python-mock" ,python-mock)
10088 ("python-pytest" ,python-pytest)))
10089 (inputs
10090 `(("libarchive" ,libarchive)))
10091 (home-page "https://github.com/Changaco/python-libarchive-c")
10092 (synopsis "Python interface to libarchive")
10093 (description
10094 "This package provides Python bindings to libarchive, a C library to
10095 access possibly compressed archives in many different formats. It uses
10096 Python's @code{ctypes} foreign function interface (FFI).")
10097 (license license:lgpl2.0+)))
10098
10099 (define-public python2-libarchive-c
10100 (package-with-python2 python-libarchive-c))
10101
10102 (define-public python-file
10103 (package/inherit file
10104 (name "python-file")
10105 (build-system python-build-system)
10106 (arguments
10107 '(#:tests? #f ;no tests
10108 #:configure-flags '("--single-version-externally-managed" "--root=/")
10109 #:phases (modify-phases %standard-phases
10110 (add-before 'build 'change-directory
10111 (lambda _
10112 (chdir "python")
10113 #t))
10114 (add-before 'build 'set-library-file-name
10115 (lambda* (#:key inputs #:allow-other-keys)
10116 (let ((file (assoc-ref inputs "file")))
10117 (substitute* "magic.py"
10118 (("find_library\\('magic'\\)")
10119 (string-append "'" file "/lib/libmagic.so'")))
10120 #t))))))
10121 (inputs `(("file" ,file)))
10122 (native-inputs (if (%current-target-system)
10123 `(("self" ,this-package))
10124 '()))
10125 (synopsis "Python bindings to the libmagic file type guesser")
10126 (description "This package provides Python bindings to the libmagic file
10127 type guesser.
10128
10129 Note that this module and the @code{python-magic} module both provide a
10130 @file{magic.py} file; these two modules, which are different and were
10131 developed separately, both serve the same purpose: provide Python bindings for
10132 libmagic.")))
10133
10134 (define-public python2-file
10135 (package-with-python2 python-file))
10136
10137 (define-public python-debian
10138 (package
10139 (name "python-debian")
10140 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
10141 (version "0.1.36")
10142 (source
10143 (origin
10144 ;; Use git-fetch, as pypi doesn't include test suite.
10145 (method git-fetch)
10146 (uri (git-reference
10147 (url home-page)
10148 (commit version)))
10149 (file-name (git-file-name name version))
10150 (sha256
10151 (base32
10152 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
10153 (build-system python-build-system)
10154 (arguments
10155 `(#:phases (modify-phases %standard-phases
10156 (add-after 'unpack 'remove-debian-specific-tests
10157 ;; python-apt, apt and dpkg are not yet available in guix,
10158 ;; and these tests heavily depend on them.
10159 (lambda _
10160 (delete-file "lib/debian/tests/test_deb822.py")
10161 (delete-file "lib/debian/tests/test_debfile.py")
10162 #t)))))
10163 (propagated-inputs
10164 `(("python-six" ,python-six)
10165 ("python-chardet" ,python-chardet)))
10166 (synopsis "Debian package related modules")
10167 (description
10168 ;; XXX: Use @enumerate instead of @itemize to work around
10169 ;; <http://bugs.gnu.org/21772>.
10170 "This package provides Python modules that abstract many formats of
10171 Debian-related files, such as:
10172
10173 @enumerate
10174 @item Debtags information;
10175 @item @file{debian/changelog} files;
10176 @item packages files, pdiffs;
10177 @item control files of single or multiple RFC822-style paragraphs---e.g.
10178 @file{debian/control}, @file{.changes}, @file{.dsc};
10179 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
10180 contained files and meta-information.
10181 @end enumerate\n")
10182
10183 ;; Modules are either GPLv2+ or GPLv3+.
10184 (license license:gpl3+)))
10185
10186 (define-public python-nbformat
10187 (package
10188 (name "python-nbformat")
10189 (version "4.4.0")
10190 (source
10191 (origin
10192 (method url-fetch)
10193 (uri (pypi-uri "nbformat" version))
10194 (sha256
10195 (base32
10196 "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp"))))
10197 (build-system python-build-system)
10198 (arguments `(#:tests? #f)) ; no test target
10199 (propagated-inputs
10200 `(("python-ipython-genutils" ,python-ipython-genutils)
10201 ("python-jsonschema" ,python-jsonschema)
10202 ("python-jupyter-core" ,python-jupyter-core)
10203 ("python-traitlets" ,python-traitlets)))
10204 (home-page "https://jupyter.org")
10205 (synopsis "Jupyter Notebook format")
10206 (description "This package provides the reference implementation of the
10207 Jupyter Notebook format and Python APIs for working with notebooks.")
10208 (license license:bsd-3)))
10209
10210 (define-public python2-nbformat
10211 (package-with-python2 python-nbformat))
10212
10213 (define-public python-bleach
10214 (package
10215 (name "python-bleach")
10216 (version "3.1.5")
10217 (source
10218 (origin
10219 (method url-fetch)
10220 (uri (pypi-uri "bleach" version))
10221 (sha256
10222 (base32 "0jqa8f1ni10cyf4h7sjpf8mbqlcbkyvmsnli77qrxdcxvc7m4k1w"))))
10223 (build-system python-build-system)
10224 (propagated-inputs
10225 `(("python-webencodings" ,python-webencodings)
10226 ("python-six" ,python-six)))
10227 (native-inputs
10228 `(("python-datrie" ,python-datrie)
10229 ("python-genshi" ,python-genshi)
10230 ("python-lxml" ,python-lxml)
10231 ("python-pytest" ,python-pytest)))
10232 (home-page "https://github.com/mozilla/bleach")
10233 (synopsis "Whitelist-based HTML-sanitizing tool")
10234 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
10235 (license license:asl2.0)))
10236
10237 (define-public python2-bleach
10238 (package-with-python2 python-bleach))
10239
10240 (define-public python-entrypoints
10241 (package
10242 (name "python-entrypoints")
10243 (version "0.3")
10244 (source
10245 (origin
10246 (method url-fetch)
10247 (uri (pypi-uri "entrypoints" version))
10248 (sha256
10249 (base32
10250 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
10251 (build-system python-build-system)
10252 ;; The package does not come with a setup.py file, so we have to generate
10253 ;; one ourselves.
10254 (arguments
10255 `(#:tests? #f
10256 #:phases
10257 (modify-phases %standard-phases
10258 (add-after 'unpack 'create-setup.py
10259 (lambda _
10260 (call-with-output-file "setup.py"
10261 (lambda (port)
10262 (format port "\
10263 from setuptools import setup
10264 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
10265 " ,version))))))))
10266 (home-page "https://github.com/takluyver/entrypoints")
10267 (synopsis "Discover and load entry points from installed Python packages")
10268 (description "Entry points are a way for Python packages to advertise
10269 objects with some common interface. The most common examples are
10270 @code{console_scripts} entry points, which define shell commands by
10271 identifying a Python function to run. The @code{entrypoints} module contains
10272 functions to find and load entry points.")
10273 (license license:expat)))
10274
10275 (define-public python2-entrypoints
10276 (package-with-python2 python-entrypoints))
10277
10278 (define-public python-epc
10279 (package
10280 (name "python-epc")
10281 (version "0.0.5")
10282 (source
10283 (origin
10284 (method url-fetch)
10285 (uri (pypi-uri "epc" version))
10286 (sha256
10287 (base32
10288 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
10289 (build-system python-build-system)
10290 (propagated-inputs
10291 `(("python-sexpdata" ,python-sexpdata)))
10292 (native-inputs
10293 `(("python-nose" ,python-nose)))
10294 (home-page "https://github.com/tkf/python-epc")
10295 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
10296 (description
10297 "Python-EPC can call elisp functions from Python and Python functions
10298 from elisp.")
10299 (license license:gpl3)))
10300
10301 (define-public python-forex-python
10302 (package
10303 (name "python-forex-python")
10304 (version "1.5")
10305 (source
10306 (origin
10307 (method url-fetch)
10308 (uri (pypi-uri "forex-python" version))
10309 (sha256
10310 (base32 "1ma8cl1i2dh8aa99pifnlilyy4d1gd1s07fj0yd17wcbpsh532cj"))))
10311 (build-system python-build-system)
10312 (arguments
10313 ;; Tests are not included in the PyPI tarball. Also, the tests in the
10314 ;; repository require online data.
10315 `(#:tests? #f))
10316 (propagated-inputs
10317 `(("python-requests" ,python-requests)
10318 ("python-simplejson" ,python-simplejson)))
10319 (home-page "https://github.com/MicroPyramid/forex-python")
10320 (synopsis "Foreign exchange rates and currency conversion")
10321 (description
10322 "@code{python-forex-python} can be used to manipulate foreign
10323 exchange rates and to operate currency conversions.
10324
10325 Features:
10326 @itemize
10327 @item List all currency rates.
10328 @item BitCoin price for all currencies.
10329 @item Converting amount to BitCoins.
10330 @item Get historical rates for any day since 1999.
10331 @item Conversion rate for one currency(ex; USD to INR).
10332 @item Convert amount from one currency to other.('USD 10$' to INR).
10333 @item Currency symbols.
10334 @item Currency names.
10335 @end itemize")
10336 (license license:expat)))
10337
10338 (define-public python-simpleeval
10339 (package
10340 (name "python-simpleeval")
10341 (version "0.9.10")
10342 (source
10343 (origin
10344 (method url-fetch)
10345 (uri (pypi-uri "simpleeval" version))
10346 (sha256
10347 (base32 "1skvl467kj83rzkhk01i0wm8m5vmh6j5znrfdizn6r18ii45a839"))))
10348 (build-system python-build-system)
10349 (home-page "https://github.com/danthedeckie/simpleeval")
10350 (synopsis "Simple, safe single expression evaluator library")
10351 (description
10352 "This package provides a quick single file library for easily adding
10353 evaluatable expressions into python projects. Say you want to allow a user
10354 to set an alarm volume, which could depend on the time of day, alarm level,
10355 how many previous alarms had gone off, and if there is music playing at the
10356 time.")
10357 (license license:expat)))
10358
10359 (define-public python-nbconvert
10360 (package
10361 (name "python-nbconvert")
10362 (version "5.0.0b1")
10363 (source
10364 (origin
10365 (method url-fetch)
10366 (uri (pypi-uri "nbconvert" version))
10367 (sha256
10368 (base32
10369 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
10370 (build-system python-build-system)
10371 (arguments
10372 `(;; The "bdist_egg" target is disabled by default, causing the installation
10373 ;; to fail.
10374 #:configure-flags (list "bdist_egg")
10375 ;; FIXME: 5 failures, 40 errors.
10376 #:tests? #f))
10377 ;; #:phases
10378 ;; (modify-phases %standard-phases
10379 ;; (replace 'check
10380 ;; (lambda _
10381 ;; (zero? (system* "py.test" "-v")))))
10382 (native-inputs
10383 `(("python-pytest" ,python-pytest)))
10384 (propagated-inputs
10385 `(("python-bleach" ,python-bleach)
10386 ("python-entrypoints" ,python-entrypoints)
10387 ("python-jinja2" ,python-jinja2)
10388 ("python-jupyter-core" ,python-jupyter-core)
10389 ("python-mistune" ,python-mistune)
10390 ("python-nbformat" ,python-nbformat)
10391 ("python-pygments" ,python-pygments)
10392 ("python-traitlets" ,python-traitlets)))
10393 (home-page "https://jupyter.org")
10394 (synopsis "Converting Jupyter Notebooks")
10395 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
10396 notebooks to various other formats via Jinja templates. It allows you to
10397 convert an @code{.ipynb} notebook file into various static formats including:
10398
10399 @enumerate
10400 @item HTML
10401 @item LaTeX
10402 @item PDF
10403 @item Reveal JS
10404 @item Markdown (md)
10405 @item ReStructured Text (rst)
10406 @item executable script
10407 @end enumerate\n")
10408 (license license:bsd-3)))
10409
10410 (define-public python2-nbconvert
10411 (package-with-python2 python-nbconvert))
10412
10413 (define-public python-notebook
10414 (package
10415 (name "python-notebook")
10416 (version "5.7.4")
10417 (source (origin
10418 (method url-fetch)
10419 (uri (pypi-uri "notebook" version))
10420 (sha256
10421 (base32
10422 "0jm7324mbxljmn9hgapj66q7swyz5ai92blmr0jpcy0h80x6f26r"))))
10423 (build-system python-build-system)
10424 (arguments
10425 `(#:phases
10426 (modify-phases %standard-phases
10427 (replace 'check
10428 (lambda _
10429 ;; These tests require a browser
10430 (delete-file-recursively "notebook/tests/selenium")
10431 ;; Some tests need HOME
10432 (setenv "HOME" "/tmp")
10433 ;; This file contains "warningfilters", which are not supported
10434 ;; by this version of nose.
10435 (delete-file "setup.cfg")
10436 (with-directory-excursion "/tmp"
10437 (invoke "nosetests" "-v"))
10438 #t)))))
10439 (propagated-inputs
10440 `(("python-jupyter-core" ,python-jupyter-core)
10441 ("python-nbformat" ,python-nbformat)
10442 ("python-nbconvert" ,python-nbconvert)
10443 ("python-prometheus-client" ,python-prometheus-client)
10444 ("python-send2trash" ,python-send2trash)
10445 ("python-terminado" ,python-terminado)))
10446 (native-inputs
10447 `(("python-nose" ,python-nose)
10448 ("python-sphinx" ,python-sphinx)
10449 ("python-requests" ,python-requests)))
10450 (home-page "https://jupyter.org/")
10451 (synopsis "Web-based notebook environment for interactive computing")
10452 (description
10453 "The Jupyter HTML notebook is a web-based notebook environment for
10454 interactive computing.")
10455 (properties `((python2-variant . ,(delay python2-notebook))))
10456 (license license:bsd-3)))
10457
10458 (define-public python2-notebook
10459 (let ((base (package-with-python2
10460 (strip-python2-variant python-notebook))))
10461 (package/inherit base
10462 (native-inputs
10463 `(("python2-mock" ,python2-mock)
10464 ,@(package-native-inputs base)))
10465 (arguments
10466 (substitute-keyword-arguments (package-arguments base)
10467 ((#:phases phases)
10468 `(modify-phases ,phases
10469 (add-before 'check 'disable-test-case
10470 ;; The test requires network access to localhost. Curiously it
10471 ;; fails with Python 2 only. Simply make the test-case return
10472 ;; immediately.
10473 (lambda _
10474 (substitute*
10475 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
10476 (("formats = self.nbconvert_api") "return #")))))))))))
10477
10478 (define-public python-widgetsnbextension
10479 (package
10480 (name "python-widgetsnbextension")
10481 (version "3.5.1")
10482 (source
10483 (origin
10484 (method url-fetch)
10485 (uri (pypi-uri "widgetsnbextension" version))
10486 (sha256
10487 (base32
10488 "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
10489 (build-system python-build-system)
10490 (propagated-inputs
10491 `(("python-ipykernel" ,python-ipykernel)
10492 ("python-notebook" ,python-notebook)))
10493 (native-inputs
10494 `(("python-certifi" ,python-certifi)
10495 ("python-nose" ,python-nose)))
10496 (home-page "https://ipython.org")
10497 (synopsis "IPython HTML widgets for Jupyter")
10498 (description "This package provides interactive HTML widgets for Jupyter
10499 notebooks.")
10500 (license license:bsd-3)))
10501
10502 (define-public python-ipywidgets
10503 (package
10504 (name "python-ipywidgets")
10505 (version "7.5.1")
10506 (source
10507 (origin
10508 (method url-fetch)
10509 (uri (pypi-uri "ipywidgets" version))
10510 (sha256
10511 (base32
10512 "15sww2mvnkqlvx55gwa82v05062a8j1xpncnqna4k9sl53hgcig9"))))
10513 (build-system python-build-system)
10514 (propagated-inputs
10515 `(("python-ipython" ,python-ipython)
10516 ("python-traitlets" ,python-traitlets)
10517 ("python-widgetsnbextension" ,python-widgetsnbextension)))
10518 (native-inputs
10519 `(("python-nose" ,python-nose)
10520 ("python-pytest" ,python-pytest)))
10521 (home-page "https://ipython.org")
10522 (synopsis "IPython HTML widgets for Jupyter")
10523 (description "Ipywidgets are interactive HTML widgets for Jupyter
10524 notebooks and the IPython kernel. Notebooks come alive when interactive
10525 widgets are used. Users gain control of their data and can visualize changes
10526 in the data.")
10527 (license license:bsd-3)))
10528
10529 (define-public python-jupyter-console
10530 (package
10531 (name "python-jupyter-console")
10532 (version "6.1.0")
10533 (source
10534 (origin
10535 (method url-fetch)
10536 (uri (pypi-uri "jupyter_console" version))
10537 (sha256
10538 (base32
10539 "06s3kr5vx0l1y1b7fxb04dmrppscl7q69sl9yyfr0d057d1ssvkg"))))
10540 (build-system python-build-system)
10541 (propagated-inputs
10542 `(("python-ipykernel" ,python-ipykernel)
10543 ("python-jupyter-client" ,python-jupyter-client)
10544 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
10545 ("python-pygments" ,python-pygments)))
10546 (native-inputs
10547 `(("python-nose" ,python-nose)))
10548 (home-page "https://jupyter.org")
10549 (synopsis "Jupyter terminal console")
10550 (description "This package provides a terminal-based console frontend for
10551 Jupyter kernels. It also allows for console-based interaction with non-Python
10552 Jupyter kernels such as IJulia and IRKernel.")
10553 (properties `((python2-variant . ,(delay python2-jupyter-console))))
10554 (license license:bsd-3)))
10555
10556 (define-public python2-jupyter-console
10557 (package
10558 (name "python2-jupyter-console")
10559 (version "5.2.0")
10560 (source
10561 (origin
10562 (method url-fetch)
10563 (uri (pypi-uri "jupyter_console" version))
10564 (sha256
10565 (base32
10566 "1kam1qzgwr7srhm5r6aj90di5sws4bq0jmiw15452ddamb9yspal"))))
10567 (build-system python-build-system)
10568 (arguments
10569 `(#:python ,python-2
10570 #:tests? #f)) ; Tests only run in a TTY.
10571 (propagated-inputs
10572 `(("python2-ipykernel" ,python2-ipykernel)
10573 ("python2-jupyter-client" ,python2-jupyter-client)
10574 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
10575 ("python2-pygments" ,python2-pygments)))
10576 (native-inputs
10577 `(("python2-nose" ,python2-nose)))
10578 (home-page "https://jupyter.org")
10579 (synopsis "Jupyter terminal console")
10580 (description "This package provides a terminal-based console frontend for
10581 Jupyter kernels. It also allows for console-based interaction with non-Python
10582 Jupyter kernels such as IJulia and IRKernel.")
10583 (license license:bsd-3)))
10584
10585 ;; The python-ipython and python-jupyter-console require each other. To get
10586 ;; the functionality in both packages working, strip down the
10587 ;; python-jupyter-console package when using it as an input to python-ipython.
10588 (define python-jupyter-console-minimal
10589 (package/inherit python-jupyter-console
10590 (name "python-jupyter-console-minimal")
10591 (arguments
10592 (substitute-keyword-arguments
10593 (package-arguments python-jupyter-console)
10594 ((#:phases phases)
10595 `(modify-phases ,phases
10596 (add-after 'install 'delete-bin
10597 (lambda* (#:key outputs #:allow-other-keys)
10598 ;; Delete the bin files, to avoid conflicts in profiles
10599 ;; where python-ipython and python-jupyter-console are
10600 ;; both present.
10601 (delete-file-recursively
10602 (string-append
10603 (assoc-ref outputs "out") "/bin"))))))))
10604 ;; Remove the python-ipython propagated input, to avoid the cycle
10605 (propagated-inputs
10606 (alist-delete
10607 "python-ipython"
10608 (package-propagated-inputs python-jupyter-console)))))
10609
10610 (define-public python-qtconsole
10611 (package
10612 (name "python-qtconsole")
10613 (version "4.4.3")
10614 (source
10615 (origin
10616 (method url-fetch)
10617 (uri (pypi-uri "qtconsole" version))
10618 (sha256
10619 (base32
10620 "1b03n1ixzscm0jw97l4dq5iy4fslnqxq5bb8287xb7n2a1gs26xw"))))
10621 (build-system python-build-system)
10622 (arguments
10623 ;; XXX: Tests are disabled, because this package needs python-ipython 7,
10624 ;; but we only have the LTS version 5.x. This means that there might be
10625 ;; runtime errors, but since this is a dependency of the Jupyter package,
10626 ;; and Jupyter can be used without the qtconsole we can overlook this for
10627 ;; now.
10628 `(#:tests? #f
10629 #:phases
10630 (modify-phases %standard-phases
10631 (add-before 'check 'pre-check
10632 (lambda _
10633 (setenv "QT_QPA_PLATFORM" "offscreen")
10634 #t)))))
10635 (propagated-inputs
10636 `(("python-ipykernel" ,python-ipykernel)
10637 ("python-ipython" ,python-ipython)))
10638 (native-inputs
10639 `(("python-pytest" ,python-pytest)))
10640 (home-page "https://jupyter.org")
10641 (synopsis "Jupyter Qt console")
10642 (description "This package provides a Qt-based console for Jupyter with
10643 support for rich media output.")
10644 (license license:bsd-3)))
10645
10646 (define-public python-jsbeautifier
10647 (package
10648 (name "python-jsbeautifier")
10649 (version "1.10.2")
10650 (home-page "https://github.com/beautify-web/js-beautify")
10651 (source (origin
10652 (method git-fetch)
10653 (uri (git-reference
10654 (url home-page)
10655 (commit (string-append "v" version))))
10656 (file-name (git-file-name name version))
10657 (sha256
10658 (base32
10659 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
10660 (build-system python-build-system)
10661 (arguments
10662 `(#:phases (modify-phases %standard-phases
10663 (add-after 'unpack 'chdir
10664 (lambda _
10665 ;; The upstream Git repository contains all the code,
10666 ;; but this package only builds the python code.
10667 (chdir "python")
10668 #t))
10669 (add-after 'unpack 'patch-python-six-requirements
10670 (lambda _
10671 (substitute* "python/setup.py"
10672 (("six>=1.12.0")
10673 "six>=1.11.0"))
10674 #t)))))
10675 (propagated-inputs
10676 `(("python-editorconfig" ,python-editorconfig)
10677 ("python-six" ,python-six)))
10678 (native-inputs
10679 `(("python-pytest" ,python-pytest)))
10680 (synopsis "JavaScript unobfuscator and beautifier")
10681 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
10682 popular online obfuscators.")
10683 (license license:expat)))
10684
10685 (define-public jupyter
10686 (package
10687 (name "jupyter")
10688 (version "1.0.0")
10689 (source
10690 (origin
10691 (method url-fetch)
10692 (uri (pypi-uri "jupyter" version))
10693 (sha256
10694 (base32
10695 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
10696 (build-system python-build-system)
10697 (arguments '(#:tests? #f)) ; there are none.
10698 (propagated-inputs
10699 `(("python-ipykernel" ,python-ipykernel)
10700 ("python-ipywidgets" ,python-ipywidgets)
10701 ("python-jupyter-console" ,python-jupyter-console)
10702 ("python-nbconvert" ,python-nbconvert)
10703 ("python-notebook" ,python-notebook)
10704 ("python-qtconsole" ,python-qtconsole)))
10705 (native-search-paths
10706 (list (search-path-specification
10707 (variable "JUPYTER_PATH")
10708 (files '("share/jupyter")))))
10709 (home-page "https://jupyter.org")
10710 (synopsis "Web application for interactive documents")
10711 (description
10712 "The Jupyter Notebook is a web application that allows you to create and
10713 share documents that contain live code, equations, visualizations and
10714 explanatory text. Uses include: data cleaning and transformation, numerical
10715 simulation, statistical modeling, machine learning and much more.")
10716 (license license:bsd-3)))
10717
10718 (define-public python-chardet
10719 (package
10720 (name "python-chardet")
10721 (version "3.0.4")
10722 (source
10723 (origin
10724 (method url-fetch)
10725 (uri (pypi-uri "chardet" version))
10726 (sha256
10727 (base32
10728 "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"))))
10729 (native-inputs
10730 `(("python-hypothesis" ,python-hypothesis)
10731 ("python-pytest" ,python-pytest)
10732 ("python-pytest-runner" ,python-pytest-runner)))
10733 (build-system python-build-system)
10734 ;; XXX: Incompatible with Pytest 4: <https://github.com/chardet/chardet/issues/173>.
10735 (arguments `(#:tests? #f))
10736 (home-page "https://github.com/chardet/chardet")
10737 (synopsis "Universal encoding detector for Python 2 and 3")
10738 (description
10739 "This package provides @code{chardet}, a Python module that can
10740 automatically detect a wide range of file encodings.")
10741 (license license:lgpl2.1+)))
10742
10743 (define-public python2-chardet
10744 (package-with-python2 python-chardet))
10745
10746 (define-public python-docopt
10747 (package
10748 (name "python-docopt")
10749 (version "0.6.2")
10750 (source
10751 (origin
10752 (method git-fetch)
10753 ;; The release on PyPI does not include tests.
10754 (uri (git-reference
10755 (url "https://github.com/docopt/docopt")
10756 (commit version)))
10757 (file-name (git-file-name name version))
10758 (sha256
10759 (base32
10760 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
10761 (build-system python-build-system)
10762 (native-inputs
10763 `(("python-pytest" ,python-pytest)))
10764 (arguments
10765 `(#:phases
10766 (modify-phases %standard-phases
10767 (replace 'check
10768 (lambda _ (invoke "py.test"))))))
10769 (home-page "http://docopt.org")
10770 (synopsis "Command-line interface description language for Python")
10771 (description "This library allows the user to define a command-line
10772 interface from a program's help message rather than specifying it
10773 programmatically with command-line parsers like @code{getopt} and
10774 @code{argparse}.")
10775 (license license:expat)))
10776
10777 (define-public python2-docopt
10778 (package-with-python2 python-docopt))
10779
10780 (define-public python-pythondialog
10781 (package
10782 (name "python-pythondialog")
10783 (version "3.4.0")
10784 (source
10785 (origin
10786 (method url-fetch)
10787 (uri (pypi-uri "pythondialog" version))
10788 (sha256
10789 (base32
10790 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
10791 (build-system python-build-system)
10792 (arguments
10793 `(#:phases
10794 (modify-phases %standard-phases
10795 (add-after 'unpack 'patch-path
10796 (lambda* (#:key inputs #:allow-other-keys)
10797 (let* ((dialog (assoc-ref inputs "dialog")))
10798 ;; Since this library really wants to grovel the search path, we
10799 ;; must hardcode dialog's store path into it.
10800 (substitute* "dialog.py"
10801 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
10802 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
10803 #t))))
10804 #:tests? #f)) ; no test suite
10805 (propagated-inputs
10806 `(("dialog" ,dialog)))
10807 (home-page "http://pythondialog.sourceforge.net/")
10808 (synopsis "Python interface to the UNIX dialog utility")
10809 (description "A Python wrapper for the dialog utility. Its purpose is to
10810 provide an easy to use, pythonic and comprehensive Python interface to dialog.
10811 This allows one to make simple text-mode user interfaces on Unix-like systems")
10812 (license license:lgpl2.1)
10813 (properties `((python2-variant . ,(delay python2-pythondialog))))))
10814
10815 (define-public python2-pythondialog
10816 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
10817 (package
10818 (inherit base)
10819 (version (package-version python-pythondialog))
10820 (source (origin
10821 (method url-fetch)
10822 (uri (pypi-uri "python2-pythondialog" version))
10823 (sha256
10824 (base32
10825 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
10826
10827 (define-public python-configobj
10828 (package
10829 (name "python-configobj")
10830 (version "5.0.6")
10831 (source (origin
10832 (method url-fetch)
10833 (uri (pypi-uri "configobj" version))
10834 (sha256
10835 (base32
10836 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
10837 ;; Patch setup.py so it looks for python-setuptools, which is
10838 ;; required to parse the keyword 'install_requires' in setup.py.
10839 (patches (search-patches "python-configobj-setuptools.patch"))))
10840 (build-system python-build-system)
10841 (propagated-inputs
10842 `(("python-six" ,python-six)))
10843 (synopsis "Config file reading, writing and validation")
10844 (description "ConfigObj is a simple but powerful config file reader and
10845 writer: an ini file round tripper. Its main feature is that it is very easy to
10846 use, with a straightforward programmer’s interface and a simple syntax for
10847 config files.")
10848 (home-page "https://github.com/DiffSK/configobj")
10849 (license license:bsd-3)))
10850
10851 (define-public python2-configobj
10852 (package-with-python2 python-configobj))
10853
10854 (define-public python-configargparse
10855 (package
10856 (name "python-configargparse")
10857 (version "1.2.3")
10858 (source (origin
10859 (method url-fetch)
10860 (uri (pypi-uri "ConfigArgParse" version))
10861 (sha256
10862 (base32
10863 "1p1pzpf5qpf80bfxsx1mbw9blyhhypjvhl3i60pbmhfmhvlpplgd"))))
10864 (build-system python-build-system)
10865 (native-inputs
10866 `(("python-pyyaml" ,python-pyyaml)))
10867 (arguments
10868 `(#:phases
10869 (modify-phases %standard-phases
10870 (replace 'check
10871 (lambda _
10872 ;; Bypass setuptools-shim because one test relies on "setup.py"
10873 ;; being the first argument passed to the python call.
10874 ;;
10875 ;; NOTE: Many tests do not run because they rely on Python's
10876 ;; built-in test.test_argparse, but we remove the unit tests from
10877 ;; our Python installation.
10878 (invoke "python" "setup.py" "test"))))))
10879 (synopsis "Replacement for argparse")
10880 (description "A drop-in replacement for argparse that allows options to also
10881 be set via config files and/or environment variables.")
10882 (home-page "https://github.com/bw2/ConfigArgParse")
10883 (license license:expat)))
10884
10885 (define-public python-argparse-manpage
10886 (package
10887 (name "python-argparse-manpage")
10888 (version "1.1")
10889 (source
10890 (origin
10891 (method url-fetch)
10892 (uri (pypi-uri "argparse-manpage" version))
10893 (sha256
10894 (base32
10895 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
10896 (build-system python-build-system)
10897 (home-page "https://github.com/praiskup/argparse-manpage")
10898 (synopsis "Build manual page from Python's ArgumentParser object")
10899 (description
10900 "This package provides tools to build manual pages from Python's
10901 @code{ArgumentParser} object.")
10902 (license license:asl2.0)))
10903
10904 (define-public python-contextlib2
10905 (package
10906 (name "python-contextlib2")
10907 (version "0.6.0.post1")
10908 (source
10909 (origin
10910 (method url-fetch)
10911 (uri (pypi-uri "contextlib2" version))
10912 (sha256
10913 (base32
10914 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
10915 (build-system python-build-system)
10916 (home-page "https://contextlib2.readthedocs.org/")
10917 (synopsis "Tools for decorators and context managers")
10918 (description "This module is primarily a backport of the Python
10919 3.2 contextlib to earlier Python versions. Like contextlib, it
10920 provides utilities for common tasks involving decorators and context
10921 managers. It also contains additional features that are not part of
10922 the standard library.")
10923 (properties `((python2-variant . ,(delay python2-contextlib2))))
10924 (license license:psfl)))
10925
10926 (define-public python2-contextlib2
10927 (let ((base (package-with-python2
10928 (strip-python2-variant python-contextlib2))))
10929 (package/inherit base
10930 (arguments
10931 (substitute-keyword-arguments (package-arguments base)
10932 ((#:phases phases)
10933 `(modify-phases ,phases
10934 (replace 'check
10935 (lambda _ (invoke "python" "test_contextlib2.py" "-v")))))))
10936 (native-inputs
10937 `(("python2-unittest2" ,python2-unittest2))))))
10938
10939 ;; This package is used by python2-pytest via python2-importlib-metadata,
10940 ;; and thus can not depend on python-unittest2 (which depends on pytest).
10941 (define-public python2-contextlib2-bootstrap
10942 (hidden-package
10943 (package/inherit
10944 python2-contextlib2
10945 (name "python2-contextlib2-bootstrap")
10946 (arguments
10947 `(#:tests? #f
10948 ,@(package-arguments python2-contextlib2)))
10949 (native-inputs '()))))
10950
10951 (define-public python-texttable
10952 (package
10953 (name "python-texttable")
10954 (version "1.6.2")
10955 (source
10956 (origin
10957 (method url-fetch)
10958 (uri (pypi-uri "texttable" version))
10959 (sha256
10960 (base32
10961 "1x5l77akfc20x52jma9573qp8l8r07q103pm4l0pbizvh4vp1wzg"))))
10962 (build-system python-build-system)
10963 (arguments
10964 `(#:phases
10965 (modify-phases %standard-phases
10966 (replace 'check
10967 (lambda _ (invoke "pytest" "tests.py"))))))
10968 (native-inputs
10969 `(("python-pytest" ,python-pytest)))
10970 (home-page "https://github.com/foutaise/texttable/")
10971 (synopsis "Python module for creating simple ASCII tables")
10972 (description "Texttable is a Python module for creating simple ASCII
10973 tables.")
10974 (license license:expat)))
10975
10976 (define-public python2-texttable
10977 (package-with-python2 python-texttable))
10978
10979 (define-public python-atomicwrites
10980 (package
10981 (name "python-atomicwrites")
10982 (version "1.3.0")
10983 (source (origin
10984 (method url-fetch)
10985 (uri (pypi-uri "atomicwrites" version))
10986 (sha256
10987 (base32
10988 "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
10989 (build-system python-build-system)
10990 (synopsis "Atomic file writes in Python")
10991 (description "Library for atomic file writes using platform dependent tools
10992 for atomic file system operations.")
10993 (home-page "https://github.com/untitaker/python-atomicwrites")
10994 (license license:expat)))
10995
10996 (define-public python2-atomicwrites
10997 (package-with-python2 python-atomicwrites))
10998
10999 (define-public python-click-threading
11000 (package
11001 (name "python-click-threading")
11002 (version "0.4.4")
11003 (source (origin
11004 (method url-fetch)
11005 (uri (pypi-uri "click-threading" version))
11006 (sha256
11007 (base32
11008 "1rsxc2fbkxlhwhlmxsdjzq3spn284l6rvjfcz9mbb17ibgdgmc5j"))))
11009 (build-system python-build-system)
11010 (propagated-inputs
11011 `(("python-click" ,python-click)))
11012 (synopsis "Utilities for multithreading in Click")
11013 (description "This package provides utilities for multithreading in Click
11014 applications.")
11015 (home-page "https://github.com/click-contrib/click-threading")
11016 (license license:expat)))
11017
11018 (define-public python-click-log
11019 (package
11020 (name "python-click-log")
11021 (version "0.3.2")
11022 (source (origin
11023 (method url-fetch)
11024 (uri (pypi-uri "click-log" version))
11025 (sha256
11026 (base32
11027 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
11028 (build-system python-build-system)
11029 (propagated-inputs
11030 `(("python-click" ,python-click)))
11031 (synopsis "Logging for click applications")
11032 (description "This package provides a Python library for logging Click
11033 applications.")
11034 (home-page "https://github.com/click-contrib/click-log")
11035 (license license:expat)))
11036
11037 (define-public python-click-default-group
11038 (package
11039 (name "python-click-default-group")
11040 (version "1.2.2")
11041 (source (origin
11042 (method url-fetch)
11043 (uri (pypi-uri "click-default-group" version))
11044 (sha256
11045 (base32
11046 "015r78jk8gznfw0dphpwaqcx5mhg5822b55w5xbb6i7sin70wmnr"))))
11047 (build-system python-build-system)
11048 (arguments
11049 `(#:tests? #f)) ; no target
11050 (propagated-inputs
11051 `(("python-click" ,python-click)))
11052 (synopsis "Extends click.Group")
11053 (description "This package extends click.Group to invoke a command without
11054 explicit subcommand name.")
11055 (home-page "https://github.com/click-contrib/click-default-group")
11056 (license license:bsd-3)))
11057
11058 (define-public python-structlog
11059 (package
11060 (name "python-structlog")
11061 (version "20.2.0")
11062 (source
11063 (origin
11064 (method url-fetch)
11065 (uri (pypi-uri "structlog" version))
11066 (sha256
11067 (base32
11068 "0x1i21vn3xjfa3j9ijbblia5z0jlzc9aqvpqc26sy16i8yjxyydg"))))
11069 (build-system python-build-system)
11070 (arguments
11071 `(#:phases
11072 (modify-phases %standard-phases
11073 (replace 'check
11074 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
11075 (when tests?
11076 (add-installed-pythonpath inputs outputs)
11077 (invoke "pytest"))
11078 #t)))))
11079 (native-inputs
11080 `(("python-coverage" ,python-coverage)
11081 ("python-freezegun" ,python-freezegun)
11082 ("python-pretend" ,python-pretend)
11083 ("python-pytest" ,python-pytest)
11084 ("python-pytest-asyncio" ,python-pytest-asyncio)
11085 ("python-simplejson" ,python-simplejson)
11086 ("python-twisted" ,python-twisted)))
11087 (home-page "https://www.structlog.org/")
11088 (synopsis "Structured Logging for Python")
11089 (description "@code{structlog} changes logging in Python by adding structure
11090 to your log entries.")
11091 (license (list license:asl2.0 license:expat))))
11092
11093 (define-public python-apipkg
11094 (package
11095 (name "python-apipkg")
11096 (version "1.5")
11097 (source (origin
11098 (method url-fetch)
11099 (uri (pypi-uri "apipkg" version))
11100 (sha256
11101 (base32
11102 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
11103 (build-system python-build-system)
11104 (native-inputs
11105 `(("python-pytest" ,python-pytest)
11106 ("python-setuptools-scm" ,python-setuptools-scm)))
11107 (synopsis "Namespace control and lazy-import mechanism")
11108 (description "With apipkg you can control the exported namespace of a Python
11109 package and greatly reduce the number of imports for your users. It is a small
11110 pure Python module that works on virtually all Python versions.")
11111 (home-page "https://github.com/pytest-dev/apipkg")
11112 (license license:expat)))
11113
11114 (define-public python-execnet
11115 (package
11116 (name "python-execnet")
11117 (version "1.4.1")
11118 (source (origin
11119 (method url-fetch)
11120 (uri (pypi-uri "execnet" version))
11121 (sha256
11122 (base32
11123 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
11124 (build-system python-build-system)
11125 (arguments
11126 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
11127 ;; The two test failures are caused by the lack of an `ssh` executable.
11128 ;; The test suite can be run with pytest after the 'install' phase.
11129 #:tests? #f))
11130 (native-inputs
11131 `(("python-pytest" ,python-pytest)
11132 ("python-setuptools-scm" ,python-setuptools-scm)))
11133 (propagated-inputs
11134 `(("python-apipkg" ,python-apipkg)))
11135 (synopsis "Rapid multi-Python deployment")
11136 (description "Execnet provides a share-nothing model with
11137 channel-send/receive communication for distributing execution across many
11138 Python interpreters across version, platform and network barriers. It has a
11139 minimal and fast API targeting the following uses:
11140 @enumerate
11141 @item distribute tasks to (many) local or remote CPUs
11142 @item write and deploy hybrid multi-process applications
11143 @item write scripts to administer multiple environments
11144 @end enumerate")
11145 (home-page "https://codespeak.net/execnet/")
11146 (license license:expat)))
11147
11148 (define-public python2-execnet
11149 (package-with-python2 python-execnet))
11150
11151 (define-public python-icalendar
11152 (package
11153 (name "python-icalendar")
11154 (version "4.0.7")
11155 (source (origin
11156 (method url-fetch)
11157 (uri (pypi-uri "icalendar" version))
11158 (sha256
11159 (base32
11160 "19574j3jwssm2dkqykih4568xqfgjsa3hcd79yl5s2vfys3qvh8g"))))
11161 (build-system python-build-system)
11162 (propagated-inputs
11163 `(("python-dateutil" ,python-dateutil)
11164 ("python-pytz" ,python-pytz)))
11165 (synopsis "Python library for parsing iCalendar files")
11166 (description "The icalendar package is a parser/generator of iCalendar
11167 files for use with Python.")
11168 (home-page "https://github.com/collective/icalendar")
11169 (license license:bsd-2)))
11170
11171 (define-public python-args
11172 (package
11173 (name "python-args")
11174 (version "0.1.0")
11175 (source (origin
11176 (method url-fetch)
11177 (uri (pypi-uri "args" version))
11178 (sha256
11179 (base32
11180 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
11181 (build-system python-build-system)
11182 (home-page "https://github.com/kennethreitz/args")
11183 (synopsis "Command-line argument parser")
11184 (description
11185 "This library provides a Python module to parse command-line arguments.")
11186 (license license:bsd-3)))
11187
11188 (define-public python2-args
11189 (package-with-python2 python-args))
11190
11191 (define-public python-clint
11192 (package
11193 (name "python-clint")
11194 (version "0.5.1")
11195 (source (origin
11196 (method url-fetch)
11197 (uri (pypi-uri "clint" version))
11198 (sha256
11199 (base32
11200 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
11201 (build-system python-build-system)
11202 (arguments
11203 '(#:phases
11204 (modify-phases %standard-phases
11205 (replace 'check
11206 (lambda _ (invoke "py.test" "-v"))))))
11207 (native-inputs
11208 `(("python-pytest" ,python-pytest)))
11209 (propagated-inputs
11210 `(("python-args" ,python-args)))
11211 (home-page "https://github.com/kennethreitz/clint")
11212 (synopsis "Command-line interface tools")
11213 (description
11214 "Clint is a Python module filled with a set of tools for developing
11215 command-line applications, including tools for colored and indented
11216 output, progress bar display, and pipes.")
11217 (license license:isc)))
11218
11219 (define-public python2-clint
11220 (package-with-python2 python-clint))
11221
11222 (define-public python-rply
11223 (package
11224 (name "python-rply")
11225 (version "0.7.5")
11226 (source (origin
11227 (method url-fetch)
11228 (uri (pypi-uri "rply" version))
11229 (sha256
11230 (base32
11231 "0lv428895zxsz43968qx0q9bimwqnfykndz4dpjbq515w2gvzhjh"))))
11232 (build-system python-build-system)
11233 (propagated-inputs
11234 `(("python-appdirs" ,python-appdirs)))
11235 (home-page "https://github.com/alex/rply")
11236 (synopsis "Parser generator for Python")
11237 (description
11238 "This package provides a pure Python based parser generator, that also
11239 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
11240 with a new public API, and RPython support.")
11241 (license license:bsd-3)))
11242
11243 (define-public python2-rply
11244 (package-with-python2 python-rply))
11245
11246 (define-public python-hy
11247 (package
11248 (name "python-hy")
11249 (version "0.18.0")
11250 (source (origin
11251 (method url-fetch)
11252 (uri (pypi-uri "hy" version))
11253 (sha256
11254 (base32
11255 "04dfwm336gw61fmgwikvh0cnxk682p19b4w555wl5d7mlym4rwj2"))))
11256 (build-system python-build-system)
11257 (arguments
11258 '(#:phases
11259 (modify-phases %standard-phases
11260 (add-before 'install 'set-HOME
11261 (lambda _
11262 (setenv "HOME" "/tmp") #t))
11263 (replace 'check
11264 (lambda _
11265 ;; Tests require write access to HOME.
11266 (setenv "HOME" "/tmp")
11267 (invoke "nosetests"))))))
11268 (native-inputs
11269 `(("python-coverage" ,python-coverage)
11270 ("python-nose" ,python-nose)))
11271 (propagated-inputs
11272 `(("python-astor" ,python-astor)
11273 ("python-colorama" ,python-colorama)
11274 ("python-rply" ,python-rply)
11275 ("python-funcparserlib"
11276 ,python-funcparserlib)))
11277 (home-page "http://hylang.org/")
11278 (synopsis "Lisp frontend to Python")
11279 (description
11280 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
11281 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
11282 Python at your fingertips, in Lisp form.")
11283 (license license:expat)))
11284
11285 (define-public python2-functools32
11286 (package
11287 (name "python2-functools32")
11288 (version "3.2.3-2")
11289 (source
11290 (origin
11291 (method url-fetch)
11292 (uri (pypi-uri "functools32" version))
11293 (sha256
11294 (base32
11295 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
11296 (build-system python-build-system)
11297 (arguments
11298 `(#:python ,python-2
11299 #:tests? #f)) ; no test target
11300 (home-page "https://github.com/MiCHiLU/python-functools32")
11301 (synopsis
11302 "Backport of the functools module from Python 3.2.3")
11303 (description
11304 "This package is a backport of the @code{functools} module from Python
11305 3.2.3 for use with older versions of Python and PyPy.")
11306 (license license:expat)))
11307
11308 (define-public python2-subprocess32
11309 (package
11310 (name "python2-subprocess32")
11311 (version "3.2.7")
11312 (source (origin
11313 (method url-fetch)
11314 (uri (pypi-uri "subprocess32" version))
11315 (sha256
11316 (base32
11317 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
11318 (patches
11319 (search-patches "python2-subprocess32-disable-input-test.patch"))))
11320 (build-system python-build-system)
11321 (arguments
11322 `(#:python ,python-2
11323 ;; The test suite fails with Python > 2.7.13:
11324 ;; import test.support
11325 ;; ImportError: No module named support
11326 #:tests? #f
11327 #:phases
11328 (modify-phases %standard-phases
11329 (add-after 'unpack 'patch-/bin/sh
11330 (lambda _
11331 (substitute* '("subprocess32.py"
11332 "test_subprocess32.py")
11333 (("/bin/sh") (which "sh")))
11334 #t)))))
11335 (home-page "https://github.com/google/python-subprocess32")
11336 (synopsis "Backport of the subprocess module from Python 3.2")
11337 (description
11338 "This is a backport of the @code{subprocess} standard library module
11339 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
11340 new features. On POSIX systems it is guaranteed to be reliable when used
11341 in threaded applications. It includes timeout support from Python 3.3 but
11342 otherwise matches 3.2’s API.")
11343 (license license:psfl)))
11344
11345 (define-public python2-futures
11346 (package
11347 (name "python2-futures")
11348 (version "3.2.0")
11349 (source
11350 (origin
11351 (method url-fetch)
11352 (uri (pypi-uri "futures" version))
11353 (sha256
11354 (base32
11355 "0rdjmmsab550kxsssdq49jcniz77zlkpw4pvi9hvib3lsskjmh4y"))))
11356 (build-system python-build-system)
11357 (arguments
11358 `(#:python ,python-2
11359 #:phases
11360 (modify-phases %standard-phases
11361 (replace 'check
11362 (lambda _
11363 (invoke "python" "test_futures.py")
11364 #t)))))
11365 (home-page "https://github.com/agronholm/pythonfutures")
11366 (synopsis
11367 "Backport of the concurrent.futures package from Python 3.2")
11368 (description
11369 "The concurrent.futures module provides a high-level interface for
11370 asynchronously executing callables. This package backports the
11371 concurrent.futures package from Python 3.2")
11372 (license license:bsd-3)))
11373
11374 (define-public python-promise
11375 (package
11376 (name "python-promise")
11377 (version "0.4.2")
11378 (source
11379 (origin
11380 (method url-fetch)
11381 (uri (pypi-uri "promise" version))
11382 (sha256
11383 (base32
11384 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
11385 (build-system python-build-system)
11386 ;; Tests wants python-futures, which is a python2 only program, and
11387 ;; can't be found by python-promise at test time.
11388 (arguments `(#:tests? #f))
11389 (home-page "https://github.com/syrusakbary/promise")
11390 (synopsis "Promises/A+ implementation for Python")
11391 (description
11392 "Promises/A+ implementation for Python")
11393 (properties `((python2-variant . ,(delay python2-promise))))
11394 (license license:expat)))
11395
11396 (define-public python2-promise
11397 (let ((promise (package-with-python2
11398 (strip-python2-variant python-promise))))
11399 (package/inherit promise
11400 (arguments (substitute-keyword-arguments (package-arguments promise)
11401 ((#:tests? _) #t)))
11402 (native-inputs
11403 `(("python2-futures" ,python2-futures)
11404 ("python2-pytest" ,python2-pytest)
11405 ,@(package-native-inputs promise))))))
11406
11407 (define-public python-progressbar2
11408 (package
11409 (name "python-progressbar2")
11410 (version "3.51.3")
11411 (source
11412 (origin
11413 (method url-fetch)
11414 (uri (pypi-uri "progressbar2" version))
11415 (sha256
11416 (base32
11417 "0b2v3mim90rmfvixkaniz2qrs650sk230rzgd5zhcjfldmlqgxpc"))))
11418 (build-system python-build-system)
11419 (propagated-inputs
11420 `(("python-six" ,python-six)
11421 ("python-utils" ,python-utils)))
11422 (native-inputs
11423 `(("python-flake8" ,python-flake8)
11424 ("python-freezegun" ,python-freezegun)
11425 ("python-pycodestyle" ,python-pycodestyle)
11426 ("python-pytest" ,python-pytest)
11427 ("python-pytest-cache" ,python-pytest-cache)
11428 ("python-pytest-cov" ,python-pytest-cov)
11429 ("python-pytest-flakes" ,python-pytest-flakes)
11430 ("python-pytest-pep8" ,python-pytest-pep8)
11431 ("python-sphinx" ,python-sphinx)))
11432 (home-page "https://github.com/WoLpH/python-progressbar")
11433 (synopsis "Text progress bar library for Python")
11434 (description
11435 "This package provides a Python progressbar library to provide
11436 visual (yet text based) progress to long running operations.")
11437 (license license:bsd-3)))
11438
11439 (define-public python-progressbar33
11440 (package
11441 (name "python-progressbar33")
11442 (version "2.4")
11443 (source
11444 (origin
11445 (method url-fetch)
11446 (uri (pypi-uri "progressbar33" version))
11447 (sha256
11448 (base32
11449 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
11450 (build-system python-build-system)
11451 (home-page "https://github.com/germangh/python-progressbar")
11452 (synopsis "Text progress bar library for Python")
11453 (description
11454 "This package provides a text progress bar library for Python. This
11455 version only differs from the original @code{progressbar} package in that it
11456 uses relative package imports instead of absolute imports, which is necessary
11457 for the module to work under Python 3.3.")
11458 ;; Either or both of these licenses may be selected.
11459 (license (list license:lgpl2.1+ license:bsd-3))))
11460
11461 (define-public python-colorama
11462 (package
11463 (name "python-colorama")
11464 (version "0.4.4")
11465 (source
11466 (origin
11467 (method url-fetch)
11468 (uri (pypi-uri "colorama" version))
11469 (sha256
11470 (base32 "16w62sm95hmh55rqxn4zwdz0bkh3fqm1qnz9cwi3s510iasb4har"))))
11471 (build-system python-build-system)
11472 (synopsis "Colored terminal text rendering for Python")
11473 (description "Colorama is a Python library for rendering colored terminal
11474 text.")
11475 (home-page "https://pypi.org/project/colorama/")
11476 (license license:bsd-3)))
11477
11478 (define-public python2-colorama
11479 (package-with-python2 python-colorama))
11480
11481 (define-public python-moto
11482 (package
11483 (name "python-moto")
11484 ;; XXX: Use a pre-release for compatibility with latest botocore & friends.
11485 (version "1.3.16.dev134")
11486 (source (origin
11487 (method url-fetch)
11488 (uri (pypi-uri "moto" version))
11489 (sha256
11490 (base32
11491 "1pix0c7zszjwzfy88n1rpih9vkdm25nqcvz93z850xvgwb4v81bd"))))
11492 (build-system python-build-system)
11493 (arguments
11494 `(#:phases (modify-phases %standard-phases
11495 (add-after 'unpack 'patch-hardcoded-executable-names
11496 (lambda _
11497 (substitute* "moto/batch/models.py"
11498 (("/bin/sh")
11499 (which "sh")))
11500 (substitute* (find-files "tests" "\\.py$")
11501 (("#!/bin/bash")
11502 (string-append "#!" (which "bash"))))
11503 #t))
11504 (replace 'check
11505 (lambda _
11506 (setenv "PYTHONPATH" (string-append "./build/lib:"
11507 (getenv "PYTHONPATH")))
11508 (invoke "pytest" "-vv" "-m" "not network"
11509 ;; These tests require Docker.
11510 "-k" "not test_terminate_job \
11511 and not test_invoke_function_from_sqs_exception"))))))
11512 (native-inputs
11513 `(("python-flask" ,python-flask)
11514 ("python-flask-cors" ,python-flask-cors)
11515 ("python-freezegun" ,python-freezegun)
11516 ("python-parameterized" ,python-parameterized)
11517 ("python-pytest" ,python-pytest)
11518 ("python-sure" ,python-sure)))
11519 (propagated-inputs
11520 `(("python-aws-xray-sdk" ,python-aws-xray-sdk)
11521 ("python-boto" ,python-boto)
11522 ("python-boto3" ,python-boto3)
11523 ("python-botocore" ,python-botocore)
11524 ("python-cfn-lint" ,python-cfn-lint)
11525 ("python-cryptography" ,python-cryptography)
11526 ("python-dateutil" ,python-dateutil)
11527 ("python-docker" ,python-docker)
11528 ("python-idna" ,python-idna)
11529 ("python-jinja2" ,python-jinja2)
11530 ("python-jose" ,python-jose)
11531 ("python-jsondiff" ,python-jsondiff)
11532 ("python-mock" ,python-mock)
11533 ("python-pytz" ,python-pytz)
11534 ("python-pyyaml" ,python-pyyaml)
11535 ("python-requests" ,python-requests)
11536 ("python-responses" ,python-responses)
11537 ("python-six" ,python-six)
11538 ("python-sshpubkeys" ,python-sshpubkeys)
11539 ("python-werkzeug" ,python-werkzeug)
11540 ("python-xmltodict" ,python-xmltodict)))
11541 (home-page "https://github.com/spulec/moto")
11542 (synopsis "Mock out the boto library")
11543 (description
11544 "@code{moto} is a library designed to easily mock out the
11545 @code{boto} library.")
11546 (license license:asl2.0)))
11547
11548 (define-public python-rsa
11549 (package
11550 (name "python-rsa")
11551 (version "3.4.2")
11552 (source
11553 (origin
11554 (method url-fetch)
11555 (uri (pypi-uri "rsa" version))
11556 (sha256
11557 (base32
11558 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
11559 (build-system python-build-system)
11560 (propagated-inputs
11561 `(("python-pyasn1" ,python-pyasn1)))
11562 (synopsis "Pure-Python RSA implementation")
11563 (description "Python-RSA is a pure-Python RSA implementation. It supports
11564 encryption and decryption, signing and verifying signatures, and key
11565 generation according to PKCS#1 version 1.5. It can be used as a Python
11566 library as well as on the command line.")
11567 (home-page "https://stuvel.eu/rsa")
11568 (license license:asl2.0)))
11569
11570 (define-public python2-rsa
11571 (package-with-python2 python-rsa))
11572
11573 (define-public python-pluggy
11574 (package
11575 (name "python-pluggy")
11576 (version "0.13.1")
11577 (source
11578 (origin
11579 (method url-fetch)
11580 (uri (pypi-uri "pluggy" version))
11581 (sha256
11582 (base32
11583 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
11584 (build-system python-build-system)
11585 (native-inputs
11586 `(("python-setuptools-scm" ,python-setuptools-scm)))
11587 (synopsis "Plugin and hook calling mechanism for Python")
11588 (description "Pluggy is an extraction of the plugin manager as used by
11589 Pytest but stripped of Pytest specific details.")
11590 (home-page "https://pypi.org/project/pluggy/")
11591 (properties `((python2-variant . ,(delay python2-pluggy))))
11592 (license license:expat)))
11593
11594 (define-public python2-pluggy
11595 (let ((base (package-with-python2 (strip-python2-variant
11596 python-pluggy))))
11597 (package/inherit
11598 base
11599 (propagated-inputs
11600 `(("python-importlib-metadata" ,python2-importlib-metadata))))))
11601
11602 ;; This package requires python2-importlib-metadata, but that package
11603 ;; ends up needing python2-pluggy via python2-pytest, so we need this
11604 ;; variant to solve the circular dependency.
11605 (define-public python2-pluggy-bootstrap
11606 (hidden-package
11607 (package/inherit
11608 python2-pluggy
11609 (name "python2-pluggy-bootstrap")
11610 (arguments
11611 `(#:tests? #f
11612 ,@(package-arguments python2-pluggy)))
11613 (propagated-inputs
11614 `(("python-importlib-metadata" ,python2-importlib-metadata-bootstrap))))))
11615
11616 (define-public python-plumbum
11617 (package
11618 (name "python-plumbum")
11619 (version "1.7.0")
11620 (source
11621 (origin
11622 (method url-fetch)
11623 (uri (pypi-uri "plumbum" version))
11624 (sha256
11625 (base32 "1kidj821k79dw064rlxh84xamb9h79ychg3pgj81jlvm5hs48xri"))))
11626 (build-system python-build-system)
11627 (arguments
11628 `(#:tests? #f)) ;no tests
11629 (native-inputs
11630 ;; XXX: Not actually used since there are no tests but required for
11631 ;; build.
11632 `(("python-pytest" ,python-pytest)))
11633 (home-page "https://plumbum.readthedocs.io")
11634 (synopsis "Python shell combinators library")
11635 (description
11636 "Plumbum is a library of tools for replacing shell scripts with Python
11637 code.")
11638 (license license:expat)))
11639
11640 (define-public python-tox
11641 (package
11642 (name "python-tox")
11643 (version "3.20.0")
11644 (source
11645 (origin
11646 (method url-fetch)
11647 (uri (pypi-uri "tox" version))
11648 (sha256
11649 (base32
11650 "0nk0nyzhzamcrvn0qqzzy54isxxqwdi28swml7a2ym78c3f9sqpb"))))
11651 (build-system python-build-system)
11652 (arguments
11653 ;; FIXME: Tests require pytest-timeout, which itself requires
11654 ;; pytest>=2.8.0 for installation.
11655 '(#:tests? #f))
11656 (propagated-inputs
11657 `(("python-filelock" ,python-filelock)
11658 ("python-packaging" ,python-packaging)
11659 ("python-pluggy" ,python-pluggy)
11660 ("python-py" ,python-py)
11661 ("python-six" ,python-six)
11662 ("python-toml" ,python-toml)
11663 ("python-virtualenv" ,python-virtualenv)))
11664 (native-inputs
11665 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
11666 ("python-pytest" ,python-pytest) ; >= 2.3.5
11667 ("python-setuptools-scm" ,python-setuptools-scm)))
11668 (home-page "https://tox.readthedocs.io")
11669 (synopsis "Virtualenv-based automation of test activities")
11670 (description "Tox is a generic virtualenv management and test command line
11671 tool. It can be used to check that a package installs correctly with
11672 different Python versions and interpreters, or run tests in each type of
11673 supported environment, or act as a frontend to continuous integration
11674 servers.")
11675 (license license:expat)))
11676
11677 (define-public python-jmespath
11678 (package
11679 (name "python-jmespath")
11680 (version "0.9.4")
11681 (source
11682 (origin
11683 (method url-fetch)
11684 (uri (pypi-uri "jmespath" version))
11685 (sha256
11686 (base32
11687 "0k0765x1mybcrzajh3hiqkl8sy9hs0bmn4900frxy0j3ykvaxqmx"))))
11688 (build-system python-build-system)
11689 (native-inputs
11690 `(("python-nose" ,python-nose)))
11691 (synopsis "JSON Matching Expressions")
11692 (description "JMESPath (pronounced “james path”) is a Python library that
11693 allows one to declaratively specify how to extract elements from a JSON
11694 document.")
11695 (home-page "https://github.com/jmespath/jmespath.py")
11696 (license license:expat)))
11697
11698 (define-public python2-jmespath
11699 (package-with-python2 python-jmespath))
11700
11701 (define-public python-symengine
11702 (package
11703 (name "python-symengine")
11704 (version "0.6.1")
11705 (source
11706 (origin
11707 (method url-fetch)
11708 (uri (pypi-uri "symengine" version))
11709 (sha256
11710 (base32 "1kn1w4dp9mrsq6kzmhf4pjmx3wicxc3dw1mwa924q8g48g77lr4c"))))
11711 (build-system python-build-system)
11712 (native-inputs
11713 `(("cmake" ,cmake)
11714 ("python-cython" ,python-cython)))
11715 (inputs
11716 `(("symengine" ,symengine)))
11717 (home-page "https://github.com/symengine/symengine.py")
11718 (synopsis "Python library providing wrappers to SymEngine")
11719 (description
11720 "This library provides a Python wrapper to SymEngine, a fast C++ symbolic
11721 manipulation library.")
11722 (license license:expat)))
11723
11724 (define-public python-uncertainties
11725 (package
11726 (name "python-uncertainties")
11727 (version "3.1.5")
11728 (source
11729 (origin
11730 (method url-fetch)
11731 (uri (pypi-uri "uncertainties" version))
11732 (sha256
11733 (base32
11734 "00z9xl40czmqk0vmxjvmjvwb41r893l4dad7nj1nh6blw3kw28li"))))
11735 (build-system python-build-system)
11736 ;; While there are test files, there is no "tests" directory, so the tests
11737 ;; fail.
11738 (arguments '(#:tests? #false))
11739 (propagated-inputs
11740 `(("python-future" ,python-future)))
11741 (native-inputs
11742 `(("python-nose" ,python-nose)
11743 ("python-numpy" ,python-numpy)))
11744 (home-page "https://uncertainties-python-package.readthedocs.io/")
11745 (synopsis "Calculations with uncertainties")
11746 (description
11747 "The uncertainties package transparently handles calculations with
11748 numbers with uncertainties. It can also yield the derivatives of any
11749 expression.")
11750 (license license:bsd-3)))
11751
11752 (define-public python-asteval
11753 (package
11754 (name "python-asteval")
11755 (version "0.9.23")
11756 (source
11757 (origin
11758 (method url-fetch)
11759 (uri (pypi-uri "asteval" version))
11760 (sha256
11761 (base32
11762 "0f54sd4w1a72ij1bcxs2x7dk9xf8bzclawijf1z18bqx9f96l2gm"))))
11763 (build-system python-build-system)
11764 (native-inputs
11765 `(("python-pytest" ,python-pytest)))
11766 (home-page "https://github.com/newville/asteval")
11767 (synopsis "Minimalistic evaluator of Python expressions")
11768 (description
11769 "This package provides a minimalistic evaluator of Python expression
11770 using the @code{ast} module")
11771 (license license:expat)))
11772
11773 (define-public python-lmfit
11774 (package
11775 (name "python-lmfit")
11776 (version "1.0.2")
11777 (source
11778 (origin
11779 (method url-fetch)
11780 (uri (pypi-uri "lmfit" version))
11781 (sha256
11782 (base32
11783 "0iab33jjb60f8kn0k0cqb0vjp1mdskks2n3kpn97zkw5cvjhq2b7"))))
11784 (build-system python-build-system)
11785 (propagated-inputs
11786 `(("python-asteval" ,python-asteval)
11787 ("python-numpy" ,python-numpy)
11788 ("python-scipy" ,python-scipy)
11789 ("python-uncertainties" ,python-uncertainties)))
11790 (native-inputs
11791 `(("python-pytest" ,python-pytest)))
11792 (home-page "https://lmfit.github.io/lmfit-py/")
11793 (synopsis "Least-Squares minimization with bounds and constraints")
11794 (description
11795 "Lmfit provides a high-level interface to non-linear optimization and
11796 curve fitting problems for Python. It builds on and extends many of the
11797 optimization methods of @code{scipy.optimize}. Initially inspired by (and
11798 named for) extending the Levenberg-Marquardt method from
11799 @code{scipy.optimize.leastsq}, lmfit now provides a number of useful
11800 enhancements to optimization and data fitting problems.")
11801 (license license:bsd-3)))
11802
11803 (define-public python-boto
11804 (package
11805 (name "python-boto")
11806 (version "2.49.0")
11807 (source (origin
11808 (method url-fetch)
11809 (uri (pypi-uri "boto" version))
11810 (sha256
11811 (base32
11812 "0njy09c4wjx7ipxhwi6vv404nflyiasl78vwwxxpclnql903n3ga"))))
11813 (build-system python-build-system)
11814 (arguments
11815 ;; XXX: This package is unmaintained and has problems with newer versions
11816 ;; of Python 3 as well as test libraries. 'python-moto' still uses a
11817 ;; subset of this library, so keep it around for now, but disable tests.
11818 '(#:tests? #f))
11819 (propagated-inputs
11820 `(("python-paramiko" ,python-paramiko)
11821 ("python-requests" ,python-requests)))
11822 (home-page "https://github.com/boto/boto")
11823 (synopsis "Python interfaces for Amazon Web Services")
11824 (description
11825 "This package provides various facilities for interacting with Amazon
11826 Web Services through Python.
11827
11828 This software is unmaintained, and new projects should use @code{boto3} instead.")
11829 (license license:expat)))
11830
11831 (define-public python-botocore
11832 ;; Note: When updating botocore, also make sure that boto3 and awscli
11833 ;; are compatible.
11834 (package
11835 (name "python-botocore")
11836 (version "1.19.22")
11837 (source
11838 (origin
11839 (method url-fetch)
11840 (uri (pypi-uri "botocore" version))
11841 (sha256
11842 (base32
11843 "0iim86x7c6hqmvd61ygz6x6x9glnsfbnyzv2y67qjdcdx8jpkmw7"))))
11844 (build-system python-build-system)
11845 (arguments
11846 ;; FIXME: Many tests are failing.
11847 '(#:tests? #f))
11848 (propagated-inputs
11849 `(("python-dateutil" ,python-dateutil)
11850 ("python-jmespath" ,python-jmespath)
11851 ("python-urllib3" ,python-urllib3)))
11852 (home-page "https://github.com/boto/botocore")
11853 (synopsis "Low-level interface to AWS")
11854 (description "Botocore is a Python library that provides a low-level
11855 interface to the Amazon Web Services (AWS) API.")
11856 (license license:asl2.0)))
11857
11858 (define-public python2-botocore
11859 (package-with-python2 python-botocore))
11860
11861 (define-public python-boto3
11862 (package
11863 (name "python-boto3")
11864 (version "1.16.22")
11865 (home-page "https://github.com/boto/boto3")
11866 (source (origin
11867 (method git-fetch)
11868 (uri (git-reference (url home-page) (commit version)))
11869 (file-name (git-file-name name version))
11870 (sha256
11871 (base32
11872 "0h20hgl4yfl58g75qhb6ibrdmzn47md3srgar7hask14cjmfhfy3"))))
11873 (arguments
11874 `(#:phases
11875 (modify-phases %standard-phases
11876 (add-after 'unpack 'delete-network-tests
11877 ;; Deleting integration tests because they are trying to connect to AWS.
11878 (lambda _
11879 (delete-file-recursively "tests/integration")
11880 #t)))))
11881 (build-system python-build-system)
11882 (native-inputs
11883 `(("python-nose" ,python-nose)
11884 ("python-mock" ,python-mock)))
11885 (propagated-inputs
11886 `(("python-botocore" ,python-botocore)
11887 ("python-jmespath" ,python-jmespath)
11888 ("python-s3transfer" ,python-s3transfer)))
11889 (synopsis "AWS SDK for Python")
11890 (description
11891 "Boto3 is a Python library for writing programs that interact with
11892 @acronym{AWS,Amazon Web Services}.")
11893 (license license:asl2.0)))
11894
11895 (define-public python-pyfiglet
11896 (package
11897 (name "python-pyfiglet")
11898 (version "0.8.post1")
11899 (source
11900 (origin
11901 (method url-fetch)
11902 (uri (pypi-uri "pyfiglet" version))
11903 (sha256
11904 (base32
11905 "0f9n2076ga2ccsg174k2d7n0z4d44ml96yzc72s6g4nhalbk5hn6"))))
11906 (build-system python-build-system)
11907 (home-page "https://github.com/pwaller/pyfiglet")
11908 (synopsis "Draw ASCII art big letters in Python")
11909 (description "This module lets you draw large letter from ordinary characters
11910 in pure Python.")
11911 (license license:expat)))
11912
11913 (define-public python-xdo
11914 (package
11915 (name "python-xdo")
11916 (version "0.3")
11917 (source (origin
11918 (method url-fetch)
11919 (uri (string-append
11920 "http://http.debian.net/debian/pool/main/p/python-xdo/"
11921 "python-xdo_" version ".orig.tar.gz"))
11922 (sha256
11923 (base32
11924 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
11925 (build-system python-build-system)
11926 (arguments
11927 '(#:phases
11928 (modify-phases %standard-phases
11929 (add-before 'install 'patch-libxdo-path
11930 ;; Hardcode the path of dynamically loaded libxdo library.
11931 (lambda* (#:key inputs #:allow-other-keys)
11932 (let ((libxdo (string-append
11933 (assoc-ref inputs "xdotool")
11934 "/lib/libxdo.so")))
11935 (substitute* "xdo/_xdo.py"
11936 (("find_library\\(\"xdo\"\\)")
11937 (simple-format #f "\"~a\"" libxdo)))
11938 #t))))
11939 #:tests? #f)) ; no tests provided
11940 (propagated-inputs
11941 `(("python-six" ,python-six)))
11942 (inputs
11943 `(("xdotool" ,xdotool)
11944 ("libX11" ,libx11)))
11945 (home-page "https://tracker.debian.org/pkg/python-xdo")
11946 (synopsis "Python library for simulating X11 keyboard/mouse input")
11947 (description "Provides bindings to libxdo for manipulating X11 via simulated
11948 input. (Note that this is mostly a legacy library; you may wish to look at
11949 python-xdo for newer bindings.)")
11950 (license license:bsd-3)))
11951
11952 (define-public python2-xdo
11953 (package-with-python2 python-xdo))
11954
11955 (define-public python-mako
11956 (package
11957 (name "python-mako")
11958 (version "1.1.3")
11959 (source
11960 (origin
11961 (method url-fetch)
11962 (uri (pypi-uri "Mako" version))
11963 (sha256
11964 (base32
11965 "09ywrmhr6gdyfx6d5727wwjnz73i6rklqcb4c14m7sqc830wi5c1"))))
11966 (build-system python-build-system)
11967 (arguments
11968 `(#:phases (modify-phases %standard-phases
11969 (replace 'check
11970 (lambda* (#:key tests? #:allow-other-keys)
11971 (if tests?
11972 (invoke "nosetests" "-v")
11973 (format #t "test suite not run~%"))
11974 #t)))))
11975 (propagated-inputs
11976 `(("python-markupsafe" ,python-markupsafe)))
11977 (native-inputs
11978 `(("python-mock" ,python-mock)
11979 ("python-nose" ,python-nose)))
11980 (home-page "https://www.makotemplates.org/")
11981 (synopsis "Templating language for Python")
11982 (description "Mako is a templating language for Python that compiles
11983 templates into Python modules.")
11984 (license license:expat)))
11985
11986 (define-public python2-mako
11987 (package-with-python2 python-mako))
11988
11989 (define-public python-waitress
11990 (package
11991 (name "python-waitress")
11992 (version "1.1.0")
11993 (source
11994 (origin
11995 (method url-fetch)
11996 (uri (pypi-uri "waitress" version))
11997 (patches (search-patches "python-waitress-fix-tests.patch"))
11998 (sha256
11999 (base32
12000 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
12001 (build-system python-build-system)
12002 (home-page "https://github.com/Pylons/waitress")
12003 (synopsis "Waitress WSGI server")
12004 (description "Waitress is meant to be a production-quality pure-Python WSGI
12005 server with very acceptable performance.")
12006 (license license:zpl2.1)))
12007
12008 (define-public python2-waitress
12009 (package-with-python2 python-waitress))
12010
12011 (define-public python-whichcraft
12012 (package
12013 (name "python-whichcraft")
12014 (version "0.6.1")
12015 (source
12016 (origin
12017 (method url-fetch)
12018 (uri (pypi-uri "whichcraft" version))
12019 (sha256
12020 (base32
12021 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
12022 (build-system python-build-system)
12023 (native-inputs
12024 `(("python-pytest" ,python-pytest)))
12025 (home-page "https://github.com/pydanny/whichcraft")
12026 (synopsis "Cross-platform cross-python shutil.which functionality")
12027 (description
12028 "This package provides a shim of the shutil.which function that's
12029 designed to work across multiple versions of Python.")
12030 (license license:bsd-3)))
12031
12032 (define-public python-cookiecutter
12033 (package
12034 (name "python-cookiecutter")
12035 (version "1.7.2")
12036 (source
12037 (origin
12038 (method url-fetch)
12039 (uri (pypi-uri "cookiecutter" version))
12040 (sha256
12041 (base32
12042 "1b2xa5dypk1vf8aq599fd8zw4y0pwvq3hgl7ia8aiv8gg3ab5dpg"))))
12043 (build-system python-build-system)
12044 (native-inputs
12045 `(("python-freezegun" ,python-freezegun)
12046 ("python-pytest" ,python-pytest)
12047 ("python-pytest-catchlog" ,python-pytest-catchlog)
12048 ("python-pytest-cov" ,python-pytest-cov)
12049 ("python-pytest-mock" ,python-pytest-mock)))
12050 (propagated-inputs
12051 `(("python-binaryornot" ,python-binaryornot)
12052 ("python-click" ,python-click)
12053 ("python-future" ,python-future)
12054 ("python-jinja2" ,python-jinja2)
12055 ("python-jinja2-time" ,python-jinja2-time)
12056 ("python-poyo" ,python-poyo)
12057 ("python-requests" ,python-requests)
12058 ("python-slugify" ,python-slugify)
12059 ("python-text-unidecode" ,python-text-unidecode)
12060 ("python-whichcraft" ,python-whichcraft)))
12061 (home-page "https://github.com/cookiecutter/cookiecutter")
12062 (synopsis
12063 "Command-line utility that creates projects from project templates")
12064 (description
12065 "This package provides a command-line utility that creates projects from
12066 project templates, e.g. creating a Python package project from a Python package
12067 project template.")
12068 (license license:bsd-3)))
12069
12070 (define-public python-pyquery
12071 (package
12072 (name "python-pyquery")
12073 (version "1.2.17")
12074 (source
12075 (origin
12076 (method url-fetch)
12077 (uri (pypi-uri "pyquery" version))
12078 (sha256
12079 (base32
12080 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
12081 (build-system python-build-system)
12082 (native-inputs
12083 `(("python-webob" ,python-webob)
12084 ("python-webtest" ,python-webtest)))
12085 (propagated-inputs
12086 `(("python-lxml" ,python-lxml)
12087 ("python-cssselect" ,python-cssselect)))
12088 (home-page "https://github.com/gawel/pyquery")
12089 (synopsis "Make jQuery-like queries on xml documents")
12090 (description "pyquery allows you to make jQuery queries on xml documents.
12091 The API is as much as possible the similar to jQuery. pyquery uses lxml for
12092 fast xml and html manipulation.")
12093 (license license:bsd-3)))
12094
12095 (define-public python-anyjson
12096 (package
12097 (name "python-anyjson")
12098 (version "0.3.3")
12099 (source
12100 (origin
12101 (method url-fetch)
12102 (uri (pypi-uri "anyjson" version))
12103 (sha256
12104 (base32
12105 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
12106 (build-system python-build-system)
12107 (arguments
12108 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
12109 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
12110 ;; whatever) so this transformation needs to be done before the tests
12111 ;; can be run. Maybe we could add a build step to transform beforehand
12112 ;; but it could be annoying/difficult.
12113 ;; We can enable tests for the Python 2 version, though, and do below.
12114 #:tests? #f))
12115 (home-page "https://bitbucket.org/runeh/anyjson/")
12116 (synopsis
12117 "Wraps best available JSON implementation in a common interface")
12118 (description
12119 "Anyjson loads whichever is the fastest JSON module installed
12120 and provides a uniform API regardless of which JSON implementation is used.")
12121 (license license:bsd-3)
12122 (properties `((python2-variant . ,(delay python2-anyjson))))))
12123
12124 (define-public python2-anyjson
12125 (let ((anyjson (package-with-python2
12126 (strip-python2-variant python-anyjson))))
12127 (package/inherit anyjson
12128 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
12129 #:tests? #t
12130 ,@(package-arguments anyjson)))
12131 (native-inputs `(("python2-nose" ,python2-nose))))))
12132
12133 (define-public python-amqp
12134 (package
12135 (name "python-amqp")
12136 (version "2.3.2")
12137 (source
12138 (origin
12139 (method url-fetch)
12140 (uri (pypi-uri "amqp" version))
12141 (sha256
12142 (base32
12143 "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
12144 (build-system python-build-system)
12145 (native-inputs
12146 `(("python-case" ,python-case)
12147 ("python-pytest-sugar" ,python-pytest-sugar)
12148 ("python-mock" ,python-mock)))
12149 (propagated-inputs
12150 `(("python-vine" ,python-vine)))
12151 (home-page "https://github.com/celery/py-amqp")
12152 (synopsis
12153 "Low-level AMQP client for Python (fork of amqplib)")
12154 (description
12155 "This is a fork of amqplib which was originally written by Barry Pederson.
12156 It is maintained by the Celery project, and used by kombu as a pure python
12157 alternative when librabbitmq is not available.")
12158 (license license:lgpl2.1+)
12159 (properties `((python2-variant . ,(delay python2-amqp))))))
12160
12161 (define-public python2-amqp
12162 (let ((amqp (package-with-python2
12163 (strip-python2-variant python-amqp))))
12164 (package/inherit amqp
12165 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
12166 ;; unmaintained. Weirdly, does not do this on the python 3
12167 ;; version?
12168 #:tests? #f
12169 ,@(package-arguments amqp))))))
12170
12171 (define-public python-txamqp
12172 (package
12173 (name "python-txamqp")
12174 (version "0.8.2")
12175 (source
12176 (origin
12177 (method url-fetch)
12178 (uri (pypi-uri "txAMQP" version))
12179 (sha256
12180 (base32
12181 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
12182 (build-system python-build-system)
12183 (propagated-inputs
12184 `(("python-six" ,python-six)
12185 ("python-twisted" ,python-twisted)))
12186 (home-page "https://github.com/txamqp/txamqp")
12187 (synopsis "Communicate with AMQP peers and brokers using Twisted")
12188 (description
12189 "This package provides a Python library for communicating with AMQP peers
12190 and brokers using the asynchronous networking framework Twisted. It contains
12191 all the necessary code to connect, send and receive messages to/from an
12192 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
12193 also includes support for using Thrift RPC over AMQP in Twisted
12194 applications.")
12195 (license license:asl2.0)))
12196
12197 (define-public python2-txamqp
12198 (package-with-python2 python-txamqp))
12199
12200 (define-public python-kombu
12201 (package
12202 (name "python-kombu")
12203 (version "4.2.2")
12204 (source
12205 (origin
12206 (method url-fetch)
12207 (uri (pypi-uri "kombu" version))
12208 (sha256
12209 (base32
12210 "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
12211 (build-system python-build-system)
12212 (native-inputs
12213 `(("python-mock" ,python-mock)
12214 ("python-case" ,python-case)
12215 ("python-pyro4" ,python-pyro4)
12216 ("python-pytest-sugar" ,python-pytest-sugar)
12217 ("python-pytz" ,python-pytz)))
12218 (propagated-inputs
12219 `(("python-anyjson" ,python-anyjson)
12220 ("python-amqp" ,python-amqp)
12221 ("python-redis" ,python-redis)))
12222 (home-page "https://kombu.readthedocs.io")
12223 (synopsis "Message passing library for Python")
12224 (description "The aim of Kombu is to make messaging in Python as easy as
12225 possible by providing an idiomatic high-level interface for the AMQ protocol,
12226 and also provide proven and tested solutions to common messaging problems.
12227 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
12228 message orientation, queuing, routing, reliability and security, for which the
12229 RabbitMQ messaging server is the most popular implementation.")
12230 (license license:bsd-3)
12231 (properties `((python2-variant . ,(delay python2-kombu))))))
12232
12233 (define-public python2-kombu
12234 (let ((kombu (package-with-python2
12235 (strip-python2-variant python-kombu))))
12236 (package/inherit kombu
12237 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
12238 ;; It works fine on the python3 variant.
12239 #:tests? #f
12240 ,@(package-arguments kombu)))
12241 (native-inputs `(("python2-unittest2" ,python2-unittest2)
12242 ,@(package-native-inputs kombu))))))
12243
12244 (define-public python-billiard
12245 (package
12246 (name "python-billiard")
12247 (version "3.5.0.5")
12248 (source
12249 (origin
12250 (method url-fetch)
12251 (uri (pypi-uri "billiard" version))
12252 (sha256
12253 (base32
12254 "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
12255 (build-system python-build-system)
12256 (native-inputs
12257 `(("python-case" ,python-case)
12258 ("python-pytest" ,python-pytest)))
12259 (home-page "https://github.com/celery/billiard")
12260 (synopsis
12261 "Python multiprocessing fork with improvements and bugfixes")
12262 (description
12263 "Billiard is a fork of the Python 2.7 multiprocessing package. The
12264 multiprocessing package itself is a renamed and updated version of R Oudkerk's
12265 pyprocessing package. This standalone variant is intended to be compatible with
12266 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
12267 (license license:bsd-3)
12268 (properties `((python2-variant . ,(delay python2-billiard))))))
12269
12270 (define-public python2-billiard
12271 (let ((billiard (package-with-python2
12272 (strip-python2-variant python-billiard))))
12273 (package/inherit billiard
12274 (native-inputs `(("python2-unittest2" ,python2-unittest2)
12275 ("python2-mock" ,python2-mock)
12276 ,@(package-native-inputs billiard))))))
12277
12278 (define-public python-celery
12279 (package
12280 (name "python-celery")
12281 (version "4.2.1")
12282 (source
12283 (origin
12284 (method url-fetch)
12285 (uri (pypi-uri "celery" version))
12286 (sha256
12287 (base32
12288 "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp"))))
12289 (build-system python-build-system)
12290 (arguments
12291 '(;; TODO The tests fail with Python 3.7
12292 ;; https://github.com/celery/celery/issues/4849
12293 #:tests? #f
12294 #:phases
12295 (modify-phases %standard-phases
12296 (add-after 'unpack 'patch-requirements
12297 (lambda _
12298 (substitute* "requirements/test.txt"
12299 (("pytest>=3\\.0,<3\\.3")
12300 "pytest>=3.0"))
12301 #t)))))
12302 (native-inputs
12303 `(("python-case" ,python-case)
12304 ("python-pytest" ,python-pytest)))
12305 (propagated-inputs
12306 `(("python-pytz" ,python-pytz)
12307 ("python-billiard" ,python-billiard)
12308 ("python-kombu" ,python-kombu)))
12309 (home-page "https://celeryproject.org")
12310 (synopsis "Distributed Task Queue")
12311 (description "Celery is an asynchronous task queue/job queue based on
12312 distributed message passing. It is focused on real-time operation, but
12313 supports scheduling as well. The execution units, called tasks, are executed
12314 concurrently on a single or more worker servers using multiprocessing,
12315 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
12316 synchronously (wait until ready).")
12317 (license license:bsd-3)
12318 (properties `((python2-variant . ,(delay python2-celery))))))
12319
12320 (define-public python2-celery
12321 (let ((celery (package-with-python2
12322 (strip-python2-variant python-celery))))
12323 (package/inherit celery
12324 (native-inputs `(("python2-unittest2" ,python2-unittest2)
12325 ("python2-mock" ,python2-mock)
12326 ,@(package-native-inputs celery))))))
12327
12328 (define-public python-translitcodec
12329 (package
12330 (name "python-translitcodec")
12331 (version "0.4.0")
12332 (source
12333 (origin
12334 (method url-fetch)
12335 (uri (pypi-uri "translitcodec" version))
12336 (sha256
12337 (base32
12338 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
12339 (build-system python-build-system)
12340 (arguments
12341 `(#:tests? #f)) ; no tests provided
12342 (home-page
12343 "https://github.com/claudep/translitcodec")
12344 (synopsis
12345 "Unicode to 8-bit charset transliteration codec")
12346 (description
12347 "This package contains codecs for transliterating ISO 10646 texts into
12348 best-effort representations using smaller coded character sets (ASCII,
12349 ISO 8859, etc.).")
12350 (license license:expat)))
12351
12352 (define-public python2-translitcodec
12353 (package-with-python2 python-translitcodec))
12354
12355 (define-public python-editor
12356 (package
12357 (name "python-editor")
12358 (version "1.0.4")
12359 (source
12360 (origin
12361 (method url-fetch)
12362 (uri (pypi-uri "python-editor" version))
12363 (sha256
12364 (base32
12365 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
12366 (build-system python-build-system)
12367 (arguments
12368 '(#:tests? #f)) ;XXX: needs a TTY and an editor
12369 (home-page "https://github.com/fmoo/python-editor")
12370 (synopsis "Programmatically open an editor, capture the result")
12371 (description
12372 "python-editor is a library that provides the editor module for
12373 programmatically interfacing with your system's $EDITOR.")
12374 (license license:asl2.0)))
12375
12376 (define-public python2-editor
12377 (package-with-python2 python-editor))
12378
12379 (define-public python-multiprocessing-logging
12380 (package
12381 (name "python-multiprocessing-logging")
12382 (version "0.3.1")
12383 (home-page "https://github.com/jruere/multiprocessing-logging")
12384 (source (origin
12385 (method git-fetch)
12386 (uri (git-reference
12387 (url home-page)
12388 (commit (string-append "v" version))))
12389 (file-name (git-file-name name version))
12390 (sha256
12391 (base32
12392 "1625wy3djlr3b2fpd3vi822f8gw6b75mnls5a4318dbi9za5pf0y"))))
12393 (build-system python-build-system)
12394 (synopsis "Manage logs from multiple processes")
12395 (description
12396 "This Python module implements a multiprocessing-aware @code{Handler}
12397 that, when set on the root @code{Logger}, will tunnel log records to the
12398 main process so that they are handled correctly.")
12399 (license license:lgpl3+)))
12400
12401 (define-public python-vobject
12402 (package
12403 (name "python-vobject")
12404 (version "0.9.6.1")
12405 (source (origin
12406 (method url-fetch)
12407 (uri (pypi-uri "vobject" version))
12408 (sha256
12409 (base32
12410 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
12411 (build-system python-build-system)
12412 (arguments
12413 '(;; The test suite relies on some non-portable Windows interfaces.
12414 #:tests? #f))
12415 (propagated-inputs
12416 `(("python-dateutil" ,python-dateutil)
12417 ("python-pyicu" ,python-pyicu)))
12418 (synopsis "Parse and generate vCard and vCalendar files")
12419 (description "Vobject is intended to be a full featured Python package for
12420 parsing and generating vCard and vCalendar files. Currently, iCalendar files
12421 are supported and well tested. vCard 3.0 files are supported, and all data
12422 should be imported, but only a few components are understood in a sophisticated
12423 way.")
12424 (home-page "https://eventable.github.io/vobject/")
12425 (license license:asl2.0)))
12426
12427 (define-public python2-vobject
12428 (package-with-python2 python-vobject))
12429
12430 (define-public python-munkres
12431 (package
12432 (name "python-munkres")
12433 (version "1.0.8")
12434 (source (origin
12435 (method url-fetch)
12436 (uri (pypi-uri "munkres" version))
12437 (sha256
12438 (base32
12439 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
12440 (build-system python-build-system)
12441 (arguments
12442 '(#:tests? #f)) ; no test suite
12443 (home-page "https://software.clapper.org/munkres/")
12444 (synopsis "Implementation of the Munkres algorithm")
12445 (description "The Munkres module provides an implementation of the Munkres
12446 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
12447 useful for solving the Assignment Problem.")
12448 (license license:bsd-3)))
12449
12450 (define-public python2-munkres
12451 (package-with-python2 python-munkres))
12452
12453 (define-public python-whoosh
12454 (package
12455 (name "python-whoosh")
12456 (version "2.7.4")
12457 (source
12458 (origin
12459 (method url-fetch)
12460 (uri (pypi-uri "Whoosh" version))
12461 (sha256
12462 (base32
12463 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
12464 (build-system python-build-system)
12465 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
12466 (native-inputs
12467 `(("python-pytest" ,python-pytest)))
12468 (home-page "https://bitbucket.org/mchaput/whoosh")
12469 (synopsis "Full text indexing, search, and spell checking library")
12470 (description
12471 "Whoosh is a fast, pure-Python full text indexing, search, and spell
12472 checking library.")
12473 (license license:bsd-2)))
12474
12475 (define-public python2-whoosh
12476 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
12477 (package/inherit whoosh
12478 (propagated-inputs
12479 `(("python2-backport-ssl-match-hostname"
12480 ,python2-backport-ssl-match-hostname)
12481 ,@(package-propagated-inputs whoosh))))))
12482
12483 (define-public python-pathlib
12484 (package
12485 (name "python-pathlib")
12486 (version "1.0.1")
12487 (source (origin
12488 (method url-fetch)
12489 (uri (pypi-uri "pathlib" version))
12490 (sha256
12491 (base32
12492 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
12493 (build-system python-build-system)
12494 ;; The tests depend on the internal "test" module, which does not provide
12495 ;; a stable interface.
12496 (arguments `(#:tests? #f))
12497 (home-page "https://pathlib.readthedocs.org/")
12498 (synopsis "Object-oriented file system paths")
12499 (description "Pathlib offers a set of classes to handle file system paths.
12500 It offers the following advantages over using string objects:
12501
12502 @enumerate
12503 @item No more cumbersome use of os and os.path functions. Everything can
12504 be done easily through operators, attribute accesses, and method calls.
12505 @item Embodies the semantics of different path types. For example,
12506 comparing Windows paths ignores casing.
12507 @item Well-defined semantics, eliminating any inconsistencies or
12508 ambiguities (forward vs. backward slashes, etc.).
12509 @end enumerate
12510
12511 Note: In Python 3.4, pathlib is now part of the standard library. For other
12512 Python versions please consider python-pathlib2 instead, which tracks the
12513 standard library module. This module (python-pathlib) isn't maintained
12514 anymore.")
12515 (license license:expat)))
12516
12517 (define-public python2-pathlib
12518 (package-with-python2 python-pathlib))
12519
12520 (define-public python2-pathlib2
12521 (package
12522 (name "python2-pathlib2")
12523 (version "2.3.5")
12524 (source (origin
12525 (method url-fetch)
12526 (uri (pypi-uri "pathlib2" version))
12527 (sha256
12528 (base32
12529 "0s4qa8c082fdkb17izh4mfgwrjd1n5pya18wvrbwqdvvb5xs9nbc"))))
12530 (build-system python-build-system)
12531 ;; We only need the the Python 2 variant, since for Python 3 our minimum
12532 ;; version is 3.4 which already includes this package as part of the
12533 ;; standard library.
12534 (arguments
12535 `(#:python ,python-2))
12536 (propagated-inputs
12537 `(("python2-scandir" ,python2-scandir)
12538 ("python2-six" ,python2-six)))
12539 (home-page "https://pypi.org/project/pathlib2/")
12540 (synopsis "Object-oriented file system paths - backport of standard
12541 pathlib module")
12542 (description "The goal of pathlib2 is to provide a backport of standard
12543 pathlib module which tracks the standard library module, so all the newest
12544 features of the standard pathlib can be used also on older Python versions.
12545
12546 Pathlib offers a set of classes to handle file system paths. It offers the
12547 following advantages over using string objects:
12548
12549 @enumerate
12550 @item No more cumbersome use of os and os.path functions. Everything can
12551 be done easily through operators, attribute accesses, and method calls.
12552 @item Embodies the semantics of different path types. For example,
12553 comparing Windows paths ignores casing.
12554 @item Well-defined semantics, eliminating any inconsistencies or
12555 ambiguities (forward vs. backward slashes, etc.).
12556 @end enumerate")
12557 (license license:expat)))
12558
12559 (define-public python2-pathlib2-bootstrap
12560 (hidden-package
12561 (package
12562 (inherit python2-pathlib2)
12563 (name "python2-pathlib2-bootstrap")
12564 (propagated-inputs
12565 `(("python2-scandir" ,python2-scandir)
12566 ("python2-six" ,python2-six-bootstrap))))))
12567
12568 (define-public python-jellyfish
12569 (package
12570 (name "python-jellyfish")
12571 (version "0.5.6")
12572 (source (origin
12573 (method url-fetch)
12574 (uri (pypi-uri "jellyfish" version))
12575 (sha256
12576 (base32
12577 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
12578 (build-system python-build-system)
12579 (native-inputs
12580 `(("python-pytest" ,python-pytest)))
12581 (home-page "https://github.com/jamesturk/jellyfish")
12582 (synopsis "Approximate and phonetic matching of strings")
12583 (description "Jellyfish uses a variety of string comparison and phonetic
12584 encoding algorithms to do fuzzy string matching.")
12585 (license license:bsd-2)
12586 (properties `((python2-variant . ,(delay python2-jellyfish))))))
12587
12588 (define-public python2-jellyfish
12589 (let ((jellyfish (package-with-python2
12590 (strip-python2-variant python-jellyfish))))
12591 (package/inherit jellyfish
12592 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
12593 ,@(package-native-inputs jellyfish))))))
12594
12595 (define-public python2-unicodecsv
12596 (package
12597 (name "python2-unicodecsv")
12598 (version "0.14.1")
12599 (source (origin
12600 (method git-fetch)
12601 ;; The test suite is not included in the PyPi release.
12602 ;; https://github.com/jdunck/python-unicodecsv/issues/19
12603 (uri (git-reference
12604 (url "https://github.com/jdunck/python-unicodecsv")
12605 (commit version)))
12606 (file-name (git-file-name name version))
12607 (sha256
12608 (base32
12609 "15hx2k41a2lpv4hcml9zp4cvlx1171mnb5s4s13xc1pxkq3vgdjy"))))
12610 (build-system python-build-system)
12611 (arguments
12612 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
12613 #:python ,python-2))
12614 (native-inputs
12615 `(("python2-unittest2" ,python2-unittest2)))
12616 (home-page "https://github.com/jdunck/python-unicodecsv")
12617 (synopsis "Unicode CSV module for Python 2")
12618 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
12619 module, adding support for Unicode strings.")
12620 (license license:bsd-2)))
12621
12622 (define-public python-pdfminer-six
12623 (package
12624 (name "python-pdfminer-six")
12625 (version "20201018")
12626 ;; There are no tests in the PyPI tarball.
12627 (source
12628 (origin
12629 (method git-fetch)
12630 (uri (git-reference
12631 (url "https://github.com/pdfminer/pdfminer.six")
12632 (commit version)))
12633 (file-name (git-file-name name version))
12634 (sha256
12635 (base32 "1a2fxxnnjqbx344znpvx7cnv1881dk6585ibw01inhfq3w6yj2lr"))))
12636 (build-system python-build-system)
12637 (arguments
12638 `(#:phases
12639 (modify-phases %standard-phases
12640 ;; Tests write to the source tree.
12641 (add-after 'unpack 'make-git-checkout-writable
12642 (lambda _
12643 (for-each make-file-writable (find-files "."))
12644 #t))
12645 (replace 'check
12646 (lambda _
12647 (invoke "make" "test")))
12648 (add-before 'reset-gzip-timestamps 'make-files-writable
12649 (lambda* (#:key outputs #:allow-other-keys)
12650 (let ((out (assoc-ref outputs "out")))
12651 (for-each make-file-writable
12652 (find-files out "\\.gz$"))
12653 #t))))))
12654 (propagated-inputs
12655 `(("python-chardet" ,python-chardet)
12656 ("python-cryptography" ,python-cryptography)
12657 ("python-sortedcontainers" ,python-sortedcontainers)))
12658 (native-inputs
12659 `(("python-nose" ,python-nose)
12660 ("python-tox" ,python-tox)))
12661 (home-page "https://github.com/pdfminer/pdfminer.six")
12662 (synopsis "PDF parser and analyzer")
12663 (description "@code{pdfminer.six} is a community maintained fork of
12664 the original PDFMiner. It is a tool for extracting information from PDF
12665 documents. It focuses on getting and analyzing text data. Pdfminer.six
12666 extracts the text from a page directly from the sourcecode of the PDF. It
12667 can also be used to get the exact location, font or color of the text.")
12668 (license license:expat)))
12669
12670 (define-public python-rarfile
12671 (package
12672 (name "python-rarfile")
12673 (version "2.8")
12674 (source (origin
12675 (method url-fetch)
12676 (uri (pypi-uri "rarfile" version))
12677 (sha256
12678 (base32
12679 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
12680 (build-system python-build-system)
12681 (arguments
12682 '(#:phases
12683 (modify-phases %standard-phases
12684 (replace 'check
12685 ;; Many tests fail, but the installation proceeds.
12686 (lambda _ (invoke "make" "-C" "test" "test"))))))
12687 (native-inputs
12688 `(("which" ,which))) ; required for tests
12689 (propagated-inputs
12690 `(("libarchive" ,libarchive)))
12691 (home-page "https://github.com/markokr/rarfile")
12692 (synopsis "RAR archive reader for Python")
12693 (description "This is Python module for RAR archive reading. The interface
12694 is made as zipfile like as possible.")
12695 (license license:isc)))
12696
12697 (define-public python2-rarfile
12698 (package-with-python2 python-rarfile))
12699
12700 (define-public python-magic
12701 (package
12702 (name "python-magic")
12703 (version "0.4.15")
12704 (source
12705 (origin
12706 (method url-fetch)
12707 (uri (pypi-uri "python-magic" version))
12708 (sha256
12709 (base32
12710 "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
12711 (file-name (string-append name "-" version "-checkout"))))
12712 (build-system python-build-system)
12713 (arguments
12714 ;; The tests are unreliable, so don't run them. The tests fail
12715 ;; under Python3 because they were written for Python2 and
12716 ;; contain import statements that do not work in Python3. One of
12717 ;; the tests fails under Python2 because its assertions are
12718 ;; overly stringent; it relies on comparing output strings which
12719 ;; are brittle and can change depending on the version of
12720 ;; libmagic being used and the system on which the test is
12721 ;; running. In my case, under GuixSD 0.10.0, only one test
12722 ;; failed, and it seems to have failed only because the version
12723 ;; of libmagic that is packaged in Guix outputs a slightly
12724 ;; different (but not wrong) string than the one that the test
12725 ;; expected.
12726 '(#:tests? #f
12727 #:phases (modify-phases %standard-phases
12728 ;; Replace a specific method call with a hard-coded
12729 ;; path to the necessary libmagic.so file in the
12730 ;; store. If we don't do this, then the method call
12731 ;; will fail to find the libmagic.so file, which in
12732 ;; turn will cause any application using
12733 ;; python-magic to fail.
12734 (add-before 'build 'hard-code-path-to-libmagic
12735 (lambda* (#:key inputs #:allow-other-keys)
12736 (let ((file (assoc-ref inputs "file")))
12737 (substitute* "magic.py"
12738 (("ctypes.util.find_library\\('magic'\\)")
12739 (string-append "'" file "/lib/libmagic.so'")))
12740 #t)))
12741 (add-before 'install 'disable-egg-compression
12742 (lambda _
12743 (let ((port (open-file "setup.cfg" "a")))
12744 (display "\n[easy_install]\nzip_ok = 0\n"
12745 port)
12746 (close-port port)
12747 #t))))))
12748 (inputs
12749 ;; python-magic needs to be able to find libmagic.so.
12750 `(("file" ,file)))
12751 (home-page
12752 "https://github.com/ahupp/python-magic")
12753 (synopsis
12754 "File type identification using libmagic")
12755 (description
12756 "This module uses ctypes to access the libmagic file type
12757 identification library. It makes use of the local magic database and
12758 supports both textual and MIME-type output. Note that this module and
12759 the python-file module both provide a \"magic.py\" file; these two
12760 modules, which are different and were developed separately, both serve
12761 the same purpose: to provide Python bindings for libmagic.")
12762 (license license:expat)))
12763
12764 (define-public python2-magic
12765 (package-with-python2 python-magic))
12766
12767 (define-public python2-s3cmd
12768 (package
12769 (name "python2-s3cmd")
12770 (version "1.6.1")
12771 (source
12772 (origin
12773 (method url-fetch)
12774 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
12775 "s3cmd-" version ".tar.gz"))
12776 (sha256
12777 (base32
12778 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
12779 (build-system python-build-system)
12780 (arguments
12781 ;; s3cmd is written for python2 only and contains no tests.
12782 `(#:python ,python-2
12783 #:tests? #f))
12784 (propagated-inputs
12785 `(("python2-dateutil" ,python2-dateutil)
12786 ;; The python-file package also provides a magic.py module.
12787 ;; This is an unfortunate state of affairs; however, s3cmd
12788 ;; fails to install if it cannot find specifically the
12789 ;; python-magic package. Thus we include it, instead of using
12790 ;; python-file. Ironically, s3cmd sometimes works better
12791 ;; without libmagic bindings at all:
12792 ;; https://github.com/s3tools/s3cmd/issues/198
12793 ("python2-magic" ,python2-magic)))
12794 (home-page "https://s3tools.org/s3cmd")
12795 (synopsis "Command line tool for S3-compatible storage services")
12796 (description
12797 "S3cmd is a command line tool for uploading, retrieving and managing data
12798 in storage services that are compatible with the Amazon Simple Storage
12799 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
12800 GnuPG encryption, and more. It also supports management of Amazon's
12801 CloudFront content delivery network.")
12802 (license license:gpl2+)))
12803
12804 (define-public python-pkgconfig
12805 (package
12806 (name "python-pkgconfig")
12807 (version "1.3.1")
12808 (source
12809 (origin
12810 (method url-fetch)
12811 (uri (pypi-uri "pkgconfig" version))
12812 (sha256
12813 (base32
12814 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
12815 (build-system python-build-system)
12816 (native-inputs
12817 `(("python-nose" ,python-nose)))
12818 (inputs
12819 `(("pkg-config" ,pkg-config)))
12820 (arguments
12821 `(#:phases
12822 (modify-phases %standard-phases
12823 (add-before 'build 'patch
12824 ;; Hard-code the path to pkg-config.
12825 (lambda _
12826 (substitute* "pkgconfig/pkgconfig.py"
12827 (("cmd = 'pkg-config")
12828 (string-append "cmd = '" (which "pkg-config"))))
12829 #t))
12830 (replace 'check
12831 (lambda _
12832 (invoke "nosetests" "test.py"))))))
12833 (home-page "https://github.com/matze/pkgconfig")
12834 (synopsis "Python interface for pkg-config")
12835 (description "This module provides a Python interface to pkg-config. It
12836 can be used to find all pkg-config packages, check if a package exists,
12837 check if a package meets certain version requirements, query CFLAGS and
12838 LDFLAGS and parse the output to build extensions with setup.py.")
12839 (license license:expat)))
12840
12841 (define-public python2-pkgconfig
12842 (package-with-python2 python-pkgconfig))
12843
12844 (define-public python-bz2file
12845 (package
12846 (name "python-bz2file")
12847 (version "0.98")
12848 (source
12849 (origin
12850 (method url-fetch)
12851 (uri (pypi-uri "bz2file" version))
12852 (sha256
12853 (base32
12854 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
12855 (build-system python-build-system)
12856 (arguments
12857 `(#:tests? #f)) ; Tests use deprecated python modules.
12858 (home-page "https://github.com/nvawda/bz2file")
12859 (synopsis "Read and write bzip2-compressed files")
12860 (description
12861 "Bz2file is a Python library for reading and writing bzip2-compressed
12862 files. It contains a drop-in replacement for the I/O interface in the
12863 standard library's @code{bz2} module, including features from the latest
12864 development version of CPython that are not available in older releases.")
12865 (license license:asl2.0)))
12866
12867 (define-public python2-bz2file
12868 (package-with-python2 python-bz2file))
12869
12870 (define-public python-future
12871 (package
12872 (name "python-future")
12873 (version "0.17.1")
12874 (source
12875 (origin
12876 (method url-fetch)
12877 (uri (pypi-uri "future" version))
12878 (sha256
12879 (base32
12880 "1f2rlqn9rh7adgir52dlbqz69gsab44x0mlm8gf1cs7xvhv54137"))))
12881 (build-system python-build-system)
12882 ;; Many tests connect to the network or are otherwise flawed.
12883 ;; https://github.com/PythonCharmers/python-future/issues/210
12884 (arguments
12885 `(#:tests? #f))
12886 (home-page "https://python-future.org")
12887 (synopsis "Single-source support for Python 3 and 2")
12888 (description
12889 "@code{python-future} is the missing compatibility layer between Python 2 and
12890 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
12891 to support both Python 2 and Python 3 with minimal overhead.")
12892 (license license:expat)))
12893
12894 (define-public python2-future
12895 (package-with-python2 python-future))
12896
12897 (define-public python-cysignals
12898 (package
12899 (name "python-cysignals")
12900 (version "1.9.0")
12901 (source
12902 (origin
12903 (method url-fetch)
12904 (uri (pypi-uri "cysignals" version))
12905 (sha256
12906 (base32
12907 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
12908 (build-system python-build-system)
12909 (native-inputs
12910 `(("python-cython" ,python-cython)
12911 ("python-sphinx" ,python-sphinx)))
12912 (inputs
12913 `(("pari-gp" ,pari-gp)))
12914 (arguments
12915 `(#:modules ((guix build python-build-system)
12916 ((guix build gnu-build-system) #:prefix gnu:)
12917 (guix build utils))
12918 ;; FIXME: Tests are executed after installation and currently fail
12919 ;; when not installing into standard locations; the author is working
12920 ;; on a fix.
12921 #:tests? #f
12922 #:phases
12923 (modify-phases %standard-phases
12924 (add-before
12925 'build 'configure
12926 (assoc-ref gnu:%standard-phases 'configure)))))
12927 (home-page
12928 "https://github.com/sagemath/cysignals")
12929 (synopsis
12930 "Handling of interrupts and signals for Cython")
12931 (description
12932 "The cysignals package provides mechanisms to handle interrupts (and
12933 other signals and errors) in Cython code, using two related approaches,
12934 for mixed Cython/Python code or external C libraries and pure Cython code,
12935 respectively.")
12936 (license license:lgpl3+)))
12937
12938 (define-public python2-cysignals
12939 (package-with-python2 python-cysignals))
12940
12941 (define-public python2-shedskin
12942 (package
12943 (name "python2-shedskin")
12944 (version "0.9.4")
12945 (source
12946 (origin
12947 (method url-fetch)
12948 (uri (string-append "https://github.com/shedskin/shedskin/"
12949 "releases/download/v" version
12950 "/shedskin-" version ".tgz"))
12951 (sha256
12952 (base32
12953 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
12954 (build-system python-build-system)
12955 (arguments
12956 `(#:python ,python-2
12957 #:phases (modify-phases %standard-phases
12958 (add-after 'unpack 'fix-resulting-include-libs
12959 (lambda* (#:key inputs #:allow-other-keys)
12960 (let ((libgc (assoc-ref inputs "libgc"))
12961 (pcre (assoc-ref inputs "pcre")))
12962 (substitute* "shedskin/makefile.py"
12963 (("variable == 'CCFLAGS':[ ]*")
12964 (string-append "variable == 'CCFLAGS':\n"
12965 " line += ' -I " pcre "/include"
12966 " -I " libgc "/include'"))
12967 (("variable == 'LFLAGS':[ ]*")
12968 (string-append "variable == 'LFLAGS':\n"
12969 " line += ' -L" pcre "/lib"
12970 " -L " libgc "/lib'")))
12971 #t))))))
12972 (inputs `(("pcre" ,pcre)
12973 ("libgc" ,libgc)))
12974 (home-page "https://shedskin.github.io/")
12975 (synopsis "Experimental Python-2 to C++ Compiler")
12976 (description (string-append "This is an experimental compiler for a subset of
12977 Python. It generates C++ code and a Makefile."))
12978 (license (list license:gpl3 license:bsd-3 license:expat))))
12979
12980 (define-public python2-rope
12981 (package
12982 (name "python2-rope")
12983 (version "0.11.0")
12984 (source
12985 (origin
12986 (method url-fetch)
12987 (uri (pypi-uri "rope" version))
12988 (sha256
12989 (base32
12990 "1cppm0pa9aqgsbkq130lskrzmrvjs5vpiavjjbhpz2fdw52w8251"))))
12991 (arguments
12992 ;; Rope has only partial python3 support, see `python-rope'
12993 `(#:python ,python-2))
12994 (build-system python-build-system)
12995 (native-inputs
12996 `(("python2-unittest2" ,python2-unittest2)))
12997 (home-page "https://github.com/python-rope/rope")
12998 (synopsis "Refactoring library for Python")
12999 (description "Rope is a refactoring library for Python. It facilitates
13000 the renaming, moving and extracting of attributes, functions, modules, fields
13001 and parameters in Python 2 source code. These refactorings can also be applied
13002 to occurrences in strings and comments.")
13003 (license license:gpl2)))
13004
13005 (define-public python-rope
13006 (package/inherit python2-rope
13007 (name "python-rope")
13008 (arguments `(#:python ,python-wrapper
13009 ;; XXX: Only partial python3 support, results in some failing
13010 ;; tests: <https://github.com/python-rope/rope/issues/247>.
13011 #:tests? #f))
13012 (properties `((python2-variant . ,(delay python2-rope))))))
13013
13014 (define-public python-py3status
13015 (package
13016 (name "python-py3status")
13017 (version "3.21")
13018 (source
13019 (origin
13020 (method url-fetch)
13021 (uri (pypi-uri "py3status" version))
13022 (sha256
13023 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
13024 (build-system python-build-system)
13025 (inputs
13026 `(("file" ,file)))
13027 (arguments
13028 '(#:phases
13029 (modify-phases %standard-phases
13030 ;; 'file' is used for detection of configuration file encoding
13031 ;; let's make link the dependency to particular input
13032 (add-before 'build 'patch-file-path
13033 (lambda* (#:key inputs #:allow-other-keys)
13034 (let ((file-path (assoc-ref inputs "file")))
13035 (substitute* "py3status/parse_config.py"
13036 (("\\[\"file\", \"-b\"")
13037 (string-append "['" file-path "/bin/file', '-b'")))
13038 #t))))
13039 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
13040 (home-page "https://github.com/ultrabug/py3status")
13041 (synopsis "Extensible i3status wrapper written in Python")
13042 (description "py3status is an i3status wrapper which extends i3status
13043 functionality in a modular way, allowing you to extend your panel with your
13044 own code, responding to click events and updating clock every second.")
13045 (license license:bsd-3)))
13046
13047 (define-public python2-selectors2
13048 (package
13049 (name "python2-selectors2")
13050 (version "2.0.1")
13051 (source (origin
13052 (method url-fetch)
13053 (uri (pypi-uri "selectors2" version))
13054 (sha256
13055 (base32
13056 "110qr00b9axz1f1jm12b495jkvrz80smknxvssqlhwk0dx67rdw1"))))
13057 (build-system python-build-system)
13058 (arguments
13059 `(#:python ,python-2))
13060 (native-inputs
13061 `(("python2-mock" ,python2-mock)
13062 ("python2-psutil" ,python2-psutil)))
13063 (home-page "https://www.github.com/SethMichaelLarson/selectors2")
13064 (synopsis "Backport of the selectors module from Python 3.5+")
13065 (description
13066 "This package provides a drop-in replacement for the @code{selectors}
13067 module in Python 3.5 and later.")
13068 (license license:expat)))
13069
13070 (define-public python-tblib
13071 (package
13072 (name "python-tblib")
13073 (version "1.6.0")
13074 (source (origin
13075 (method url-fetch)
13076 (uri (pypi-uri "tblib" version))
13077 (sha256
13078 (base32
13079 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
13080 (build-system python-build-system)
13081 (arguments
13082 `(#:phases
13083 (modify-phases %standard-phases
13084 (replace 'check
13085 (lambda _
13086 ;; Upstream runs tests after installation and the package itself
13087 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
13088 ;; found.
13089 (setenv "PYTHONPATH"
13090 (string-append (getcwd) "/build/lib:"
13091 (getenv "PYTHONPATH")))
13092 (invoke "py.test" "-vv" "tests" "README.rst"))))))
13093 (native-inputs
13094 `(("python-pytest" ,python-pytest)
13095 ("python-six" ,python-six)))
13096 (home-page "https://github.com/ionelmc/python-tblib")
13097 (synopsis "Traceback serialization library")
13098 (description
13099 "Traceback serialization allows you to:
13100
13101 @enumerate
13102 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
13103 different processes. This allows better error handling when running code over
13104 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
13105
13106 @item Parse traceback strings and raise with the parsed tracebacks.
13107 @end enumerate\n")
13108 (license license:bsd-3)))
13109
13110 (define-public python2-tblib
13111 (package-with-python2 python-tblib))
13112
13113 (define-public python-greenlet
13114 (package
13115 (name "python-greenlet")
13116 (version "1.0.0")
13117 (source (origin
13118 (method url-fetch)
13119 (uri (pypi-uri "greenlet" version))
13120 (sha256
13121 (base32
13122 "1y6wbg9yhm9dw6m768n4yslp56h85pnxkk3drz6icn15g6f1d7ki"))))
13123 (build-system python-build-system)
13124 (home-page "https://greenlet.readthedocs.io/")
13125 (synopsis "Lightweight in-process concurrent programming")
13126 (description
13127 "Greenlet package is a spin-off of Stackless, a version of CPython
13128 that supports micro-threads called \"tasklets\". Tasklets run
13129 pseudo-concurrently (typically in a single or a few OS-level threads) and
13130 are synchronized with data exchanges on \"channels\".")
13131 (license (list license:psfl license:expat))))
13132
13133 (define-public python-objgraph
13134 (package
13135 (name "python-objgraph")
13136 (version "3.4.1")
13137 (source
13138 (origin
13139 (method url-fetch)
13140 (uri (pypi-uri "objgraph" version))
13141 (sha256
13142 (base32
13143 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
13144 (build-system python-build-system)
13145 (propagated-inputs
13146 `(("python-graphviz" ,python-graphviz)))
13147 (native-inputs
13148 `(("python-mock" ,python-mock)
13149 ("graphviz" ,graphviz)))
13150 (home-page "https://mg.pov.lt/objgraph/")
13151 (synopsis "Draw Python object reference graphs with graphviz")
13152 (description
13153 "This package provides tools to draw Python object reference graphs with
13154 graphviz.")
13155 (license license:expat)))
13156
13157 (define-public python2-objgraph
13158 (package-with-python2 python-objgraph))
13159
13160 (define-public python-gevent
13161 (package
13162 (name "python-gevent")
13163 (version "21.1.2")
13164 (source (origin
13165 (method url-fetch)
13166 (uri (pypi-uri "gevent" version))
13167 (sha256
13168 (base32
13169 "10f9y899y9nmq51pv4r1zb51b4w5yxx00sz5whvg9vm956hc432j"))
13170 (modules '((guix build utils)))
13171 (snippet
13172 '(begin
13173 ;; unbunding libev and c-ares
13174 (delete-file-recursively "deps")))))
13175 (build-system python-build-system)
13176 (arguments
13177 `(#:modules ((ice-9 ftw)
13178 (ice-9 match)
13179 (srfi srfi-26)
13180 (guix build utils)
13181 (guix build python-build-system))
13182 #:phases (modify-phases %standard-phases
13183 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
13184 (lambda _
13185 (substitute* "src/gevent/subprocess.py"
13186 (("/bin/sh") (which "sh")))
13187 (for-each (lambda (file)
13188 (substitute* file
13189 (("/bin/sh") (which "sh"))
13190 (("/bin/true") (which "true"))))
13191 (find-files "src/greentest" "\\.py$"))))
13192 (add-before 'build 'do-not-use-bundled-sources
13193 (lambda _
13194 (setenv "GEVENTSETUP_EMBED" "0")
13195
13196 ;; Prevent building bundled libev.
13197 (substitute* "setup.py"
13198 (("run_make=_BUILDING")
13199 "run_make=False"))))
13200 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
13201 (lambda* (#:key inputs #:allow-other-keys)
13202 (let ((greenlet (string-append
13203 (assoc-ref inputs "python-greenlet")
13204 "/include")))
13205 (match (scandir greenlet
13206 (lambda (item)
13207 (string-prefix? "python" item)))
13208 ((python)
13209 (setenv "C_INCLUDE_PATH"
13210 (string-append greenlet "/" python ":"
13211 (or (getenv "C_INCLUDE_PATH")
13212 ""))))))))
13213 (add-before 'check 'pretend-to-be-CI
13214 (lambda _
13215 ;; A few tests are skipped due to network constraints or
13216 ;; get longer timeouts when running in a CI environment.
13217 ;; Piggy-back on that, as we need the same adjustments.
13218 (setenv "TRAVIS" "1")
13219 (setenv "APPVEYOR" "1")))
13220 (add-before 'check 'adjust-tests
13221 (lambda _
13222 (let ((disabled-tests
13223 '(;; These tests relies on networking which is
13224 ;; not available in the build container.
13225 "test__getaddrinfo_import.py"
13226 "test__server_pywsgi.py"
13227 ;; XXX: These tests borrow functionality from the
13228 ;; Python builtin 'test' module, but it is not
13229 ;; installed with the Guix Python distribution.
13230 "test_smtpd.py"
13231 "test_wsgiref.py"
13232 "test_urllib2.py"
13233 "test_thread.py"
13234 "test_threading.py"
13235 "test__threading_2.py"
13236 ;; These tests rely on KeyboardInterrupts which do not
13237 ;; work inside the build container for some reason
13238 ;; (lack of controlling terminal?).
13239 "test_subprocess.py"
13240 "test__issues461_471.py"
13241 ;; TODO: Patch out the tests that use getprotobyname, etc
13242 ;; instead of disabling all the tests from these files.
13243 "test__resolver_dnspython.py"
13244 "test__doctests.py"
13245 "test__all__.py"
13246 "test___config.py"
13247 "test__execmodules.py")))
13248 (call-with-output-file "skipped_tests.txt"
13249 (lambda (port)
13250 (format port "~a~%"
13251 (string-join disabled-tests "\n")))))))
13252 (replace 'check
13253 (lambda _
13254 ;; Make sure the build directory is on PYTHONPATH.
13255 (setenv "PYTHONPATH"
13256 (string-append
13257 (getenv "PYTHONPATH") ":"
13258 (getcwd) "/build/"
13259 (car (scandir "build" (cut string-prefix? "lib." <>)))))
13260
13261 ;; Use the build daemons configured number of workers.
13262 (setenv "NWORKERS" (number->string (parallel-job-count)))
13263
13264 (invoke "python" "-m" "gevent.tests" "-unone" "--config"
13265 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
13266 (propagated-inputs
13267 `(("python-greenlet" ,python-greenlet)
13268 ("python-objgraph" ,python-objgraph)
13269 ("python-zope.event" ,python-zope-event)
13270 ("python-zope.interface" ,python-zope-interface)))
13271 (native-inputs
13272 `(("python-six" ,python-six)
13273
13274 ;; For tests.
13275 ("python-dnspython" ,python-dnspython)
13276 ("python-psutil" ,python-psutil)))
13277 (inputs
13278 `(("c-ares" ,c-ares)
13279 ("libev" ,libev)))
13280 (home-page "https://www.gevent.org/")
13281 (synopsis "Coroutine-based network library")
13282 (description
13283 "@code{gevent} is a coroutine-based Python networking library that uses
13284 @code{greenlet} to provide a high-level synchronous API on top of the
13285 @code{libev} event loop.")
13286 (license license:expat)))
13287
13288 (define-public python-fastimport
13289 (package
13290 (name "python-fastimport")
13291 (version "0.9.9")
13292 (source
13293 (origin
13294 (method url-fetch)
13295 (uri (pypi-uri "fastimport" version))
13296 (sha256
13297 (base32 "06gk14qgm9dxx3pzjn0ckdbywc8ial2bjfzddqwlr4bn1nnqkbll"))))
13298 (build-system python-build-system)
13299 (home-page "https://github.com/jelmer/python-fastimport")
13300 (synopsis "VCS fastimport parser and generator in Python")
13301 (description "This package provides a parser for and generator of the Git
13302 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
13303 format.")
13304 (license license:gpl2+)))
13305
13306 (define-public python2-fastimport
13307 (package-with-python2 python-fastimport))
13308
13309 (define-public python-twisted
13310 (package
13311 (name "python-twisted")
13312 (version "19.7.0")
13313 (source (origin
13314 (method url-fetch)
13315 (uri (pypi-uri "Twisted" version ".tar.bz2"))
13316 (sha256
13317 (base32
13318 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
13319 (build-system python-build-system)
13320 (arguments
13321 '(#:tests? #f)) ; FIXME: some tests fail
13322 (propagated-inputs
13323 `(("python-zope-interface" ,python-zope-interface)
13324 ("python-pyhamcrest" ,python-pyhamcrest)
13325 ("python-incremental" ,python-incremental)
13326 ("python-hyperlink" ,python-hyperlink)
13327 ("python-constantly" ,python-constantly)
13328 ("python-automat" ,python-automat)))
13329 (home-page "https://twistedmatrix.com/")
13330 (synopsis "Asynchronous networking framework written in Python")
13331 (description
13332 "Twisted is an extensible framework for Python programming, with special
13333 focus on event-based network programming and multiprotocol integration.")
13334 (license license:expat)))
13335
13336 (define-public python2-twisted
13337 (package-with-python2 python-twisted))
13338
13339 (define-public python-pika
13340 (package
13341 (name "python-pika")
13342 (version "0.12.0")
13343 (source
13344 (origin
13345 (method url-fetch)
13346 (uri (pypi-uri "pika" version))
13347 (sha256
13348 (base32
13349 "0ld7akgm93s8pfa4dsx9qlzlhj76zspbr5m9ms0ns09yd2w4aq9h"))))
13350 (build-system python-build-system)
13351 (native-inputs
13352 `(("python-pyev" ,python-pyev)
13353 ("python-tornado" ,python-tornado)
13354 ("python-twisted" ,python-twisted)))
13355 (home-page "https://pika.readthedocs.org")
13356 (synopsis "Pure Python AMQP Client Library")
13357 (description
13358 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
13359 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
13360 network support library.")
13361 (license license:bsd-3)))
13362
13363 (define-public python2-pika
13364 (package-with-python2 python-pika))
13365
13366 (define-public python-ply
13367 (package
13368 (name "python-ply")
13369 (version "3.11")
13370 (source
13371 (origin
13372 (method url-fetch)
13373 (uri (pypi-uri "ply" version))
13374 (sha256
13375 (base32
13376 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
13377 (build-system python-build-system)
13378 (home-page "http://www.dabeaz.com/ply/")
13379 (synopsis "Python Lex & Yacc")
13380 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
13381 It uses LR parsing and does extensive error checking.")
13382 (license license:bsd-3)))
13383
13384 (define-public python-tabulate
13385 (package
13386 (name "python-tabulate")
13387 (version "0.8.9")
13388 (source (origin
13389 (method url-fetch)
13390 (uri (pypi-uri "tabulate" version))
13391 (sha256
13392 (base32
13393 "19qkdz8xwk5jxa5xn53mnk76qnh4ysm81vzj664jw1b0azr167gb"))))
13394 (build-system python-build-system)
13395 (arguments
13396 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
13397 ;; and the latest release is not tagged in the upstream repository.
13398 '(#:tests? #f))
13399 (home-page "https://bitbucket.org/astanin/python-tabulate")
13400 (synopsis "Pretty-print tabular data")
13401 (description
13402 "Tabulate is a library and command-line utility to pretty-print tabular
13403 data in Python.")
13404 (license license:expat)))
13405
13406 (define-public python2-tabulate
13407 (package-with-python2 python-tabulate))
13408
13409 (define-public python-kazoo
13410 (package
13411 (name "python-kazoo")
13412 (version "2.4.0")
13413 (source
13414 (origin
13415 (method url-fetch)
13416 (uri (pypi-uri "kazoo" version))
13417 (sha256
13418 (base32
13419 "16y213k7r8shyn2zw1k6lkzjgcrvm441pqv8scvcjixhvpbx3hm7"))))
13420 (build-system python-build-system)
13421 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
13422 (propagated-inputs
13423 `(("python-six" ,python-six)))
13424 (home-page "https://kazoo.readthedocs.org")
13425 (synopsis "High-level Zookeeper client library")
13426 (description
13427 "Kazoo is a Python client library for the Apache Zookeeper distributed
13428 application service. It is designed to be easy to use and to avoid common
13429 programming errors.")
13430 (license license:asl2.0)))
13431
13432 (define-public python2-kazoo
13433 (package-with-python2 python-kazoo))
13434
13435 (define-public python-pykafka
13436 (package
13437 (name "python-pykafka")
13438 (version "2.4.0")
13439 (source (origin
13440 (method url-fetch)
13441 (uri (pypi-uri "pykafka" version))
13442 (sha256
13443 (base32
13444 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
13445 (build-system python-build-system)
13446 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
13447 (propagated-inputs
13448 `(("python-gevent" ,python-gevent)
13449 ("python-kazoo" ,python-kazoo)
13450 ("python-tabulate" ,python-tabulate)))
13451 (inputs
13452 `(("librdkafka" ,librdkafka)))
13453 (home-page "https://pykafka.readthedocs.io/")
13454 (synopsis "Apache Kafka client for Python")
13455 (description
13456 "PyKafka is a client for the Apache Kafka distributed messaging system.
13457 It includes Python implementations of Kafka producers and consumers, which
13458 are optionally backed by a C extension built on librdkafka.")
13459 (license license:asl2.0)))
13460
13461 (define-public python-wcwidth
13462 (package
13463 (name "python-wcwidth")
13464 (version "0.1.8")
13465 (source (origin
13466 (method url-fetch)
13467 (uri (pypi-uri "wcwidth" version))
13468 (sha256
13469 (base32
13470 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
13471 (build-system python-build-system)
13472 (home-page "https://github.com/jquast/wcwidth")
13473 (synopsis "Measure number of terminal column cells of wide-character codes")
13474 (description "Wcwidth measures the number of terminal column cells of
13475 wide-character codes. It is useful for those implementing a terminal emulator,
13476 or programs that carefully produce output to be interpreted by one. It is a
13477 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
13478 specified in POSIX.1-2001 and POSIX.1-2008.")
13479 (license license:expat)))
13480
13481 (define-public python2-wcwidth
13482 (package-with-python2 python-wcwidth))
13483
13484 (define-public python2-jsonrpclib
13485 (package
13486 (name "python2-jsonrpclib")
13487 (version "0.1.7")
13488 (source (origin
13489 (method url-fetch)
13490 (uri (pypi-uri "jsonrpclib" version))
13491 (sha256
13492 (base32
13493 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
13494 (build-system python-build-system)
13495 (arguments
13496 `(#:tests? #f
13497 #:python ,python-2))
13498 (home-page "https://github.com/joshmarshall/jsonrpclib/")
13499 (synopsis "Implementation of JSON-RPC specification for Python")
13500 (description
13501 "This library is an implementation of the JSON-RPC specification.
13502 It supports both the original 1.0 specification, as well as the
13503 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
13504 etc.")
13505 (license license:asl2.0)))
13506
13507 (define-public python-chai
13508 (package
13509 (name "python-chai")
13510 (version "1.1.2")
13511 (source (origin
13512 (method url-fetch)
13513 (uri (pypi-uri "chai" version))
13514 (sha256
13515 (base32
13516 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))))
13517 (build-system python-build-system)
13518 (home-page "https://github.com/agoragames/chai")
13519 (synopsis "Mocking framework for Python")
13520 (description
13521 "Chai provides an api for mocking, stubbing and spying your python
13522 objects, patterned after the Mocha library for Ruby.")
13523 (license license:bsd-3)))
13524
13525 (define-public python2-chai
13526 (package-with-python2 python-chai))
13527
13528 (define-public python-inflection
13529 (package
13530 (name "python-inflection")
13531 (version "0.3.1")
13532 (source
13533 (origin (method url-fetch)
13534 (uri (pypi-uri "inflection" version))
13535 (sha256
13536 (base32
13537 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
13538 (build-system python-build-system)
13539 (native-inputs
13540 `(("python-pytest" ,python-pytest)))
13541 (home-page "https://github.com/jpvanhal/inflection")
13542 (synopsis "Python string transformation library")
13543 (description
13544 "Inflection is a string transformation library. It singularizes
13545 and pluralizes English words, and transforms strings from CamelCase to
13546 underscored string.")
13547 (license license:expat)))
13548
13549 (define-public python2-inflection
13550 (package-with-python2 python-inflection))
13551
13552 (define-public python-pylev
13553 (package
13554 (name "python-pylev")
13555 (version "1.3.0")
13556 (source (origin
13557 (method url-fetch)
13558 (uri (pypi-uri "pylev" version))
13559 (sha256
13560 (base32
13561 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
13562 (build-system python-build-system)
13563 (home-page "https://github.com/toastdriven/pylev")
13564 (synopsis "Levenshtein distance implementation in Python")
13565 (description "Pure Python Levenshtein implementation, based off the
13566 Wikipedia code samples at
13567 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
13568 (license license:bsd-3)))
13569
13570 (define-public python2-pylev
13571 (package-with-python2 python-pylev))
13572
13573 (define-public python-cleo
13574 (package
13575 (name "python-cleo")
13576 (version "0.8.1")
13577 (source (origin
13578 (method url-fetch)
13579 (uri (pypi-uri "cleo" version))
13580 (sha256
13581 (base32
13582 "17q6wi3q280kxmxzb2iwnnqih2xbljn18v0bjx2ip18p079j43ix"))))
13583 (build-system python-build-system)
13584 (native-inputs
13585 `( ;; For testing
13586 ("python-mock" ,python-mock)
13587 ("python-pytest-mock" ,python-pytest-mock)
13588 ("python-pytest" ,python-pytest)))
13589 (propagated-inputs
13590 `(("python-backpack" ,python-backpack)
13591 ("python-clikit" ,python-clikit)
13592 ("python-pastel" ,python-pastel)
13593 ("python-pylev" ,python-pylev)))
13594 (home-page "https://github.com/sdispater/cleo")
13595 (synopsis "Command-line arguments library for Python")
13596 (description
13597 "Cleo allows you to create command-line commands with signature in
13598 docstring and colored output.")
13599 (license license:expat)))
13600
13601 (define-public python2-cleo
13602 (package-with-python2 python-cleo))
13603
13604 (define-public python-tomlkit
13605 (package
13606 (name "python-tomlkit")
13607 (version "0.7.0")
13608 (source
13609 (origin
13610 (method url-fetch)
13611 (uri (pypi-uri "tomlkit" version))
13612 (sha256
13613 (base32 "062n694sfv24ylda6nh8228y2q9hrvy554kqx84y7czsjfbg4mxc"))))
13614 (build-system python-build-system)
13615 (native-inputs
13616 `(("python-pytest" ,python-pytest)
13617 ("python-pyyaml" ,python-pyyaml)))
13618 (home-page "https://github.com/sdispater/tomlkit")
13619 (synopsis "Style-preserving TOML library")
13620 (description
13621 "TOML Kit is a 1.0.0rc1-compliant TOML library. It includes a parser that
13622 preserves all comments, indentations, whitespace and internal element ordering,
13623 and makes them accessible and editable via an intuitive API. It can also
13624 create new TOML documents from scratch using the provided helpers. Part of the
13625 implementation has been adapted, improved, and fixed from Molten.")
13626 (license license:expat)))
13627
13628 (define-public python-shellingham
13629 (package
13630 (name "python-shellingham")
13631 (version "1.3.2")
13632 (source
13633 (origin
13634 (method url-fetch)
13635 (uri (pypi-uri "shellingham" version))
13636 (sha256
13637 (base32 "07kmia2hvd2q7wik89m82hig9mqr2faynvy38vxq5fm0ps11jv2p"))))
13638 (build-system python-build-system)
13639 (arguments
13640 `(#:phases
13641 (modify-phases %standard-phases
13642 (add-after 'unpack 'restore-setup.py
13643 ;; setup.py will return in the next release.
13644 ;; <https://github.com/sarugaku/shellingham/issues/33>
13645 (lambda _
13646 (with-output-to-file "setup.py"
13647 (lambda _
13648 (display "from setuptools import setup\nsetup()\n")))
13649 #t)))))
13650 (home-page "https://github.com/sarugaku/shellingham")
13651 (synopsis "Tool to detect surrounding shell")
13652 (description
13653 "Shellingham detects what shell the current Python executable is
13654 running in.")
13655 (license license:isc)))
13656
13657 (define-public python-memcached
13658 (package
13659 (name "python-memcached")
13660 (version "1.59")
13661 (source
13662 (origin
13663 (method url-fetch)
13664 (uri (pypi-uri "python-memcached" version))
13665 (sha256
13666 (base32
13667 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))
13668 (patches (search-patches "python-memcached-syntax-warnings.patch"))))
13669 (build-system python-build-system)
13670 (propagated-inputs `(("python-six" ,python-six)))
13671 (home-page
13672 "https://github.com/linsomniac/python-memcached")
13673 (synopsis "Pure python memcached client")
13674 (description
13675 "This software is a pure Python interface to the memcached memory cache
13676 daemon. It is the client side software which allows storing values in one or
13677 more, possibly remote, memcached servers.")
13678 (license license:psfl)))
13679
13680 (define-public python-clikit
13681 (package
13682 (name "python-clikit")
13683 (version "0.6.2")
13684 (source
13685 (origin
13686 (method url-fetch)
13687 (uri (pypi-uri "clikit" version))
13688 (sha256
13689 (base32
13690 "0ngdkmb73gkp5y00q7r9k1cdlfn0wyzws2wrqlshc4hlkbdyabj4"))))
13691 (build-system python-build-system)
13692 (arguments '(#:tests? #f)) ; no test in the PyPI tarball
13693 (propagated-inputs
13694 `(("python-crashtest" ,python-crashtest)
13695 ("python-pastel" ,python-pastel)
13696 ("python-pylev" ,python-pylev)))
13697 (home-page "https://github.com/sdispater/clikit")
13698 (synopsis "Group of utilities to build command line interfaces")
13699 (description
13700 "CliKit is a group of utilities to build testable command line
13701 interfaces.")
13702 (properties `((python2-variant . ,(delay python2-clikit))))
13703 (license license:expat)))
13704
13705 (define-public python2-clikit
13706 (let ((base (package-with-python2 (strip-python2-variant python-clikit))))
13707 (package/inherit
13708 base
13709 (propagated-inputs
13710 `(("python-enum34" ,python2-enum34)
13711 ("python-typing" ,python2-typing)
13712 ,@(package-propagated-inputs base))))))
13713
13714 (define-public python-msgpack-python
13715 (package
13716 (name "python-msgpack-python")
13717 (version "0.5.6")
13718 (source
13719 (origin
13720 (method url-fetch)
13721 (uri (pypi-uri "msgpack-python" version))
13722 (sha256
13723 (base32
13724 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
13725 (build-system python-build-system)
13726 (home-page "https://msgpack.org/")
13727 (synopsis "Package to deserialize messages in MessagePack binary format")
13728 (description
13729 "MessagePack is an efficient binary serialization format. It lets you
13730 exchange data among multiple languages like JSON. But it's faster and
13731 smaller. Small integers are encoded into a single byte, and typical short
13732 strings require only one extra byte in addition to the strings themselves.")
13733 (license license:asl2.0)))
13734
13735 (define-public python-cachy
13736 (package
13737 (name "python-cachy")
13738 (version "0.3.0")
13739 (source
13740 (origin
13741 (method url-fetch)
13742 (uri (pypi-uri "cachy" version))
13743 (sha256
13744 (base32
13745 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
13746 (build-system python-build-system)
13747 (arguments
13748 '(#:phases
13749 (modify-phases %standard-phases
13750 (replace 'check
13751 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
13752 "pytest"))))))
13753 (native-inputs
13754 `(("memcached" ,memcached)
13755 ("python-fakeredis" ,python-fakeredis)
13756 ("python-flexmock" ,python-flexmock)
13757 ("python-pifpaf" ,python-pifpaf)
13758 ("python-pytest" ,python-pytest)))
13759 (propagated-inputs
13760 `(("python-memcached" ,python-memcached)
13761 ("python-msgpack-python" ,python-msgpack-python)
13762 ("python-redis" ,python-redis)))
13763 (home-page "https://github.com/sdispater/cachy")
13764 (synopsis "Simple yet effective caching library")
13765 (description
13766 "Cachy provides a simple yet effective caching library. A simple but
13767 powerful API: thread-safety; decorator syntax; support for memcached, redis,
13768 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
13769 (license license:expat)))
13770
13771 (define-public poetry
13772 (package
13773 (name "poetry")
13774 (version "1.1.5")
13775 ;; Poetry can only be built from source with Poetry.
13776 (source
13777 (origin
13778 (method url-fetch)
13779 (uri (pypi-uri "poetry" version))
13780 (sha256
13781 (base32
13782 "1dvx08ksv5wnsj45db23921rj136akmcnxa0kmlsddf3wbh6wcka"))))
13783 (build-system python-build-system)
13784 (arguments
13785 `(#:tests? #f ;; Pypi does not have tests.
13786 #:phases
13787 (modify-phases %standard-phases
13788 (add-before 'build 'patch-setup-py
13789 (lambda _
13790 (substitute* "setup.py"
13791 ;; Allow newer versions of python-keyring.
13792 (("(keyring>=21.2.0),<22.0.0" _ keyring) keyring)
13793 ;; TODO: remove after the next release cycle,
13794 ;; when packaging has been updated.
13795 (("packaging>=20.4,<21.0") "packaging>=20.0,<21.0"))
13796 #t)))))
13797 (propagated-inputs
13798 `(("python-cachecontrol" ,python-cachecontrol)
13799 ("python-cachy" ,python-cachy)
13800 ("python-cleo" ,python-cleo)
13801 ("python-clikit" ,python-clikit)
13802 ("python-html5lib" ,python-html5lib)
13803 ("python-keyring" ,python-keyring)
13804 ("python-msgpack-transitional" ,python-msgpack-transitional)
13805 ("python-packaging" ,python-packaging)
13806 ("python-pexpect" ,python-pexpect)
13807 ("python-pip" ,python-pip)
13808 ("python-pkginfo" ,python-pkginfo)
13809 ("python-poetry-core" ,python-poetry-core)
13810 ("python-requests" ,python-requests)
13811 ("python-requests-toolbelt" ,python-requests-toolbelt-0.9.1)
13812 ("python-shellingham" ,python-shellingham)
13813 ("python-tomlkit" ,python-tomlkit)
13814 ("python-virtualenv" ,python-virtualenv)))
13815 (home-page "https://python-poetry.org")
13816 (synopsis "Python dependency management and packaging made easy")
13817 (description "Poetry is a tool for dependency management and packaging
13818 in Python. It allows you to declare the libraries your project depends on and
13819 it will manage (install/update) them for you.")
13820 (license license:expat)))
13821
13822 (define-public python-lark-parser
13823 (package
13824 (name "python-lark-parser")
13825 (version "0.9.0")
13826 (source (origin
13827 (method url-fetch)
13828 (uri (pypi-uri "lark-parser" version))
13829 (sha256
13830 (base32
13831 "1kd61asrb3h9spgsj4bslfbgp8q4271sw3hblk6f2vbbblv8jxcy"))))
13832 (build-system python-build-system)
13833 (home-page "https://github.com/lark-parser/lark")
13834 (synopsis "Multi-language parser for Python")
13835 (description
13836 "Lark is a parser built with a focus on ergonomics, performance and
13837 resilience. Lark can parse all context-free languages. That means it is
13838 capable of parsing almost any programming language out there, and to
13839 some degree most natural languages too.")
13840 (license license:expat)))
13841
13842 (define-public python-libcst
13843 (package
13844 (name "python-libcst")
13845 (version "0.3.8")
13846 (source (origin
13847 (method url-fetch)
13848 (uri (pypi-uri "libcst" version))
13849 (sha256
13850 (base32
13851 "05zsc61gsd2pyb6wiyh58zczndxi6rm4d2jl94rpf5cv1fzw6ks8"))))
13852 (build-system python-build-system)
13853 (arguments
13854 `(#:phases
13855 (modify-phases %standard-phases
13856 (add-after 'unpack 'remove-failing-tests
13857 (lambda _
13858 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/346>.
13859 (delete-file "libcst/tests/test_fuzz.py")
13860 ;; Reported upstream: <https://github.com/Instagram/LibCST/issues/347>.
13861 (delete-file "libcst/tests/test_pyre_integration.py")
13862 (delete-file "libcst/codemod/tests/test_codemod_cli.py")
13863 (delete-file "libcst/metadata/tests/test_full_repo_manager.py")
13864 (delete-file "libcst/metadata/tests/test_type_inference_provider.py")
13865 #t))
13866 (add-before 'check 'generate-test-data
13867 (lambda _
13868 (setenv "PYTHONPATH" (string-append (getcwd) ":" (getenv "PYTHONPATH")))
13869 (invoke "python" "-m" "libcst.codegen.generate" "visitors")
13870 (invoke "python" "-m" "libcst.codegen.generate" "return_types")))
13871 (replace 'check
13872 (lambda _
13873 (invoke "python" "-m" "unittest")
13874 #t)))))
13875 (native-inputs
13876 `(("python-black" ,python-black)
13877 ("python-isort" ,python-isort)))
13878 (propagated-inputs
13879 `(("python-typing-extensions" ,python-typing-extensions)
13880 ("python-typing-inspect" ,python-typing-inspect)
13881 ("python-pyyaml" ,python-pyyaml)))
13882 (home-page "https://github.com/Instagram/LibCST")
13883 (synopsis "Concrete Syntax Tree (CST) parser and serializer library for Python")
13884 (description
13885 "LibCST parses Python source code as a CST tree that keeps all
13886 formatting details (comments, whitespaces, parentheses, etc). It's useful
13887 for building automated refactoring (codemod) applications and linters.
13888 LibCST creates a compromise between an Abstract Syntax Tree (AST) and
13889 a traditional Concrete Syntax Tree (CST). By carefully reorganizing and
13890 naming node types and fields, LibCST creates a lossless CST that looks and
13891 feels like an AST.")
13892 (license (list license:expat
13893 ;; Some files unde libcst/_parser/ are under Python Software
13894 ;; Foundation license (see LICENSE file for details)
13895 license:psfl
13896 ;; libcst/_add_slots.py
13897 license:asl2.0))))
13898
13899 (define-public python-typing-inspect
13900 (package
13901 (name "python-typing-inspect")
13902 (version "0.6.0")
13903 (source (origin
13904 (method url-fetch)
13905 (uri (pypi-uri "typing_inspect" version))
13906 (sha256
13907 (base32
13908 "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg"))))
13909 (build-system python-build-system)
13910 (propagated-inputs
13911 `(("python-mypy-extensions" ,python-mypy-extensions)
13912 ("python-typing-extensions" ,python-typing-extensions)))
13913 (home-page "https://github.com/ilevkivskyi/typing_inspect")
13914 (synopsis "API for inspection of types in the Python @code{typing} module")
13915 (description
13916 "The @code{typing_inspect} module defines experimental API for runtime
13917 inspection of types defined in the Python standard typing module.")
13918 (license license:expat)))
13919
13920 (define-public python-lazy-object-proxy
13921 (package
13922 (name "python-lazy-object-proxy")
13923 (version "1.5.1")
13924 (source (origin
13925 (method url-fetch)
13926 (uri (pypi-uri "lazy-object-proxy" version))
13927 (sha256
13928 (base32
13929 "0hwh29m9wa582ramj30p4pysckdrmki1z1b8iaaxk6mpfx2kc8wp"))))
13930 (native-inputs
13931 `(("python-setuptools-scm" ,python-setuptools-scm)))
13932 (build-system python-build-system)
13933 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
13934 (synopsis "Lazy object proxy for python")
13935 (description
13936 "Lazy object proxy is an object that wraps a callable but defers the call
13937 until the object is actually required, and caches the result of said call.")
13938 (license license:bsd-2)))
13939
13940 (define-public python2-lazy-object-proxy
13941 (package-with-python2 python-lazy-object-proxy))
13942
13943 (define-public python-dnspython
13944 (package
13945 (name "python-dnspython")
13946 (version "2.0.0")
13947 (source (origin
13948 (method url-fetch)
13949 (uri (pypi-uri "dnspython" version ".zip"))
13950 (sha256
13951 (base32
13952 "1dyip5ygqqhrgcaiy7qzjpndl9xciip186paxqwkm726fj9z0jh4"))))
13953 (build-system python-build-system)
13954 (native-inputs `(("unzip" ,unzip)))
13955 (arguments '(#:tests? #f)) ; XXX: requires internet access
13956 (home-page "https://www.dnspython.org")
13957 (synopsis "DNS toolkit for Python")
13958 (description
13959 "dnspython is a DNS toolkit for Python. It supports almost all record
13960 types. It can be used for queries, zone transfers, and dynamic updates.
13961 It supports TSIG authenticated messages and EDNS0.")
13962 (license license:expat)))
13963
13964 (define-public python-dnspython-1.16
13965 (package
13966 (inherit python-dnspython)
13967 (version "1.16.0")
13968 (source (origin
13969 (method url-fetch)
13970 (uri (string-append "http://www.dnspython.org/kits/"
13971 version "/dnspython-" version ".tar.gz"))
13972 (sha256
13973 (base32
13974 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
13975 (native-inputs '())))
13976
13977 (define-public python2-dnspython-1.16
13978 (package-with-python2 python-dnspython-1.16))
13979
13980 (define-public python-py3dns
13981 (package
13982 (name "python-py3dns")
13983 (version "3.2.1")
13984 (source
13985 (origin
13986 (method url-fetch)
13987 (uri (pypi-uri "py3dns" version))
13988 (sha256
13989 (base32
13990 "1r25f0ys5p37bhld7m7n4gb0lrysaym3w318w2f8bncq7r3d81qz"))))
13991 (build-system python-build-system)
13992 ;; This package wants to read /etc/resolv.conf. We can't patch it without
13993 ;; removing functionality so we copy from Nix and "just don't build it".
13994 (arguments
13995 `(#:phases
13996 (modify-phases %standard-phases
13997 (add-after 'unpack 'patch-source
13998 (lambda _
13999 (substitute* "setup.py"
14000 (("import DNS") "")
14001 (("DNS.__version__") (string-append "\"" ,version "\"")))
14002 #t)))
14003 #:tests? #f)) ; Also skip the tests.
14004 (home-page "https://launchpad.net/py3dns")
14005 (synopsis "Python 3 DNS library")
14006 (description "This Python 3 module provides a DNS API for looking up DNS
14007 entries from within Python 3 modules and applications. This module is a
14008 simple, lightweight implementation.")
14009 (license license:psfl)))
14010
14011 (define-public python-email-validator
14012 (package
14013 (name "python-email-validator")
14014 (version "1.0.2")
14015 (source
14016 (origin (method url-fetch)
14017 (uri (pypi-uri "email_validator" version))
14018 (sha256
14019 (base32
14020 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
14021 (build-system python-build-system)
14022 (arguments
14023 '(#:phases
14024 (modify-phases %standard-phases
14025 (add-before 'build 'use-dnspython
14026 (lambda _
14027 (substitute* "setup.py"
14028 (("dnspython3") "dnspython"))
14029 #t)))))
14030 (propagated-inputs
14031 `(("python-dnspython" ,python-dnspython)
14032 ("python-idna" ,python-idna)))
14033 (home-page "https://github.com/JoshData/python-email-validator")
14034 (synopsis "Email address validation library for Python")
14035 (description
14036 "This library validates email address syntax and deliverability.")
14037 (license license:cc0)))
14038
14039 (define-public python2-email-validator
14040 (package-with-python2 python-email-validator))
14041
14042 (define-public python-ukpostcodeparser
14043 (package
14044 (name "python-ukpostcodeparser")
14045 (version "1.0.3")
14046 (source (origin
14047 (method url-fetch)
14048 (uri (pypi-uri "UkPostcodeParser" version))
14049 (sha256
14050 (base32
14051 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
14052 (build-system python-build-system)
14053 (home-page "https://github.com/hamstah/ukpostcodeparser")
14054 (synopsis "UK Postcode parser for Python")
14055 (description
14056 "This library provides the @code{parse_uk_postcode} function for
14057 parsing UK postcodes.")
14058 (license license:expat)))
14059
14060 (define-public python2-ukpostcodeparser
14061 (package-with-python2 python-ukpostcodeparser))
14062
14063 (define-public python-faker
14064 (package
14065 (name "python-faker")
14066 (version "4.0.2")
14067 (source (origin
14068 (method url-fetch)
14069 (uri (pypi-uri "Faker" version))
14070 (sha256
14071 (base32
14072 "13qq485ydxmdnqn3xbfv1xfyqbf9qfnfw33v1vw5l6jyy9p8cgrd"))))
14073 (build-system python-build-system)
14074 (arguments
14075 '(#:phases
14076 (modify-phases %standard-phases
14077 (replace 'check
14078 (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
14079 (native-inputs
14080 `(;; For testing
14081 ("python-freezegun" ,python-freezegun)
14082 ("python-pytest" ,python-pytest)
14083 ("python-random2" ,python-random2)
14084 ("python-ukpostcodeparser" ,python-ukpostcodeparser)
14085 ("python-validators" ,python-validators)))
14086 (propagated-inputs
14087 `(("python-dateutil" ,python-dateutil)
14088 ("python-text-unidecode" ,python-text-unidecode)))
14089 (home-page "https://github.com/joke2k/faker")
14090 (synopsis "Python package that generates fake data")
14091 (description
14092 "Faker is a Python package that generates fake data such as names,
14093 addresses, and phone numbers.")
14094 (license license:expat)
14095 (properties `((python2-variant . ,(delay python2-faker))))))
14096
14097 ;; Faker 4.0 dropped Python 2 support, so we stick with this older version here.
14098 (define-public python2-faker
14099 (let ((base (package-with-python2 (strip-python2-variant
14100 python-faker))))
14101 (package
14102 (inherit base)
14103 (version "3.0.1")
14104 (source (origin
14105 (method url-fetch)
14106 (uri (pypi-uri "Faker" version))
14107 (sha256
14108 (base32
14109 "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7"))))
14110 (native-inputs
14111 `(("python-mock" ,python2-mock)
14112 ,@(package-native-inputs base)))
14113 (propagated-inputs
14114 `(("python2-ipaddress" ,python2-ipaddress)
14115 ("python2-six" ,python2-six)
14116 ,@(package-propagated-inputs base))))))
14117
14118 (define-public python-pyaml
14119 (package
14120 (name "python-pyaml")
14121 (version "18.11.0")
14122 (source (origin
14123 (method url-fetch)
14124 (uri (pypi-uri "pyaml" version))
14125 (sha256
14126 (base32
14127 "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr"))))
14128 (build-system python-build-system)
14129 (native-inputs
14130 `(("python-unidecode" ,python-unidecode)))
14131 (propagated-inputs
14132 `(("python-pyyaml" ,python-pyyaml)))
14133 (home-page "https://github.com/mk-fg/pretty-yaml")
14134 (synopsis "YAML pretty-print library for Python")
14135 (description
14136 "pyaml is a PyYAML based python module to produce pretty and readable
14137 YAML-serialized data.")
14138 (license license:wtfpl2)))
14139
14140 (define-public python2-pyaml
14141 (package-with-python2 python-pyaml))
14142
14143 (define-public python-backpack
14144 (package
14145 (name "python-backpack")
14146 (version "0.1")
14147 (source
14148 (origin
14149 (method url-fetch)
14150 (uri (pypi-uri "backpack" version))
14151 (sha256
14152 (base32
14153 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
14154 (build-system python-build-system)
14155 (native-inputs
14156 `(("python-pytest" ,python-pytest)
14157 ("python-nose" ,python-nose)))
14158 (propagated-inputs
14159 `(("python-simplejson" ,python-simplejson)))
14160 (home-page "https://github.com/sdispater/backpack")
14161 (synopsis "Utilities for working with Python collections")
14162 (description "Backpack provides some useful utilities for working with
14163 collections of data.")
14164 (license license:expat)))
14165
14166 (define-public python2-backpack
14167 (package-with-python2 python-backpack))
14168
14169 (define-public python-prompt-toolkit
14170 (package
14171 (name "python-prompt-toolkit")
14172 (version "3.0.9")
14173 (source
14174 (origin
14175 (method url-fetch)
14176 (uri (pypi-uri "prompt_toolkit" version))
14177 (sha256
14178 (base32 "0bvjp62cs6aj9lrh7njzxdjgg8pjfw3qgmr551243d9ivmcapvn5"))))
14179 (build-system python-build-system)
14180 (arguments
14181 `(#:phases
14182 (modify-phases %standard-phases
14183 (delete 'check)
14184 (add-after 'install 'post-install-check
14185 (lambda* (#:key inputs outputs #:allow-other-keys)
14186 ;; HOME is needed for the test
14187 ;; "test_pathcompleter_can_expanduser".
14188 (setenv "HOME" "/tmp")
14189 (add-installed-pythonpath inputs outputs)
14190 (invoke "py.test"))))))
14191 (propagated-inputs
14192 `(("python-wcwidth" ,python-wcwidth)))
14193 (native-inputs
14194 `(("python-pytest" ,python-pytest)))
14195 (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
14196 (synopsis "Library for building command line interfaces in Python")
14197 (description
14198 "Prompt-Toolkit is a library for building interactive command line
14199 interfaces in Python. It's like GNU Readline but it also features syntax
14200 highlighting while typing, out-of-the-box multi-line input editing, advanced
14201 code completion, incremental search, support for Chinese double-width
14202 characters, mouse support, and auto suggestions.")
14203 (license license:bsd-3)
14204 (properties `((python2-variant . ,(delay python-prompt-toolkit-2))))))
14205
14206 (define-public python-prompt-toolkit-2
14207 (package (inherit python-prompt-toolkit)
14208 (name "python-prompt-toolkit")
14209 (version "2.0.7")
14210 (source
14211 (origin
14212 (method url-fetch)
14213 (uri (pypi-uri "prompt_toolkit" version))
14214 (sha256
14215 (base32
14216 "0fgacqk73w7s932vy46pan2yp8rvjmlkag20xvaydh9mhf6h85zx"))))
14217 (propagated-inputs
14218 `(("python-wcwidth" ,python-wcwidth)
14219 ("python-six" ,python-six)
14220 ("python-pygments" ,python-pygments)))
14221 (properties '())))
14222
14223 (define-public python2-prompt-toolkit
14224 (package-with-python2 python-prompt-toolkit-2))
14225
14226 (define-public python-prompt-toolkit-1
14227 (package (inherit python-prompt-toolkit-2)
14228 (version "1.0.15")
14229 (source
14230 (origin
14231 (method url-fetch)
14232 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
14233 (sha256
14234 (base32
14235 "05v9h5nydljwpj5nm8n804ms0glajwfy1zagrzqrg91wk3qqi1c5"))))))
14236
14237 (define-public python2-prompt-toolkit-1
14238 (package-with-python2 python-prompt-toolkit-1))
14239
14240 (define-public python-jedi
14241 (package
14242 (name "python-jedi")
14243 (version "0.17.2")
14244 (source
14245 (origin
14246 (method url-fetch)
14247 (uri (pypi-uri "jedi" version))
14248 (sha256
14249 (base32 "080xyf97ifabdz7jp8clg00b8zv5g33fva1fb2xf80q6fndpvvc6"))))
14250 (build-system python-build-system)
14251 (arguments
14252 `(#:phases
14253 (modify-phases %standard-phases
14254 (replace 'check
14255 (lambda* (#:key tests? #:allow-other-keys)
14256 (when tests?
14257 (setenv "HOME" "/tmp")
14258 (invoke "python" "-m" "pytest" "-vv"))
14259 #t)))))
14260 (native-inputs
14261 `(("python-pytest" ,python-pytest)
14262 ("python-docopt" ,python-docopt)))
14263 (propagated-inputs
14264 `(("python-parso" ,python-parso)))
14265 (home-page "https://github.com/davidhalter/jedi")
14266 (synopsis "Autocompletion and static analysis library for Python")
14267 (description
14268 "Jedi is a static analysis tool for Python that can be used in Integrated
14269 Development Environments (@dfn{IDE}s) and text editors. It understands Python
14270 on a deeper level than many other static analysis frameworks for Python.
14271
14272 Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
14273 well.")
14274 (license license:expat)))
14275
14276 (define-public python2-jedi
14277 (package-with-python2 python-jedi))
14278
14279 (define-public ptpython
14280 (package
14281 (name "ptpython")
14282 (version "3.0.5")
14283 (source (origin
14284 (method url-fetch)
14285 (uri (pypi-uri "ptpython" version))
14286 (sha256
14287 (base32
14288 "0c2ry5gwi2v99slna62j8r2bwq0hpzmvgdryqg9m6x57vbjfg52h"))))
14289 (build-system python-build-system)
14290 (arguments
14291 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
14292 (propagated-inputs
14293 `(("python-appdirs" ,python-appdirs)
14294 ("python-jedi" ,python-jedi)
14295 ("python-prompt-toolkit" ,python-prompt-toolkit)
14296 ("python-pygments" ,python-pygments)))
14297 (home-page "https://github.com/jonathanslenders/ptpython")
14298 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
14299 (description
14300 "ptpython is a Python read-eval-print loop with IDE-like features.
14301 It supports syntax highlighting, multiline editing, autocompletion, mouse,
14302 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
14303 etc.")
14304 (license license:bsd-3)
14305 (properties `((python2-variant . ,(delay ptpython-2))))))
14306
14307 (define-public ptpython-2
14308 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
14309 (package/inherit base
14310 (name "ptpython2"))))
14311
14312 (define-public python-stem
14313 (package
14314 (name "python-stem")
14315 (version "1.8.0")
14316 (source
14317 (origin
14318 (method url-fetch)
14319 (uri (pypi-uri "stem" version))
14320 (sha256
14321 (base32
14322 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
14323 (build-system python-build-system)
14324 (arguments
14325 `(#:phases
14326 (modify-phases %standard-phases
14327 (replace 'check
14328 (lambda _
14329 (invoke "./run_tests.py" "--unit")
14330 #t)))))
14331 (native-inputs
14332 `(("python-mock" ,python-mock)
14333 ("python-pycodestyle" ,python-pycodestyle)
14334 ("python-pyflakes" ,python-pyflakes)))
14335 (home-page "https://stem.torproject.org/")
14336 (synopsis
14337 "Python controller library that allows applications to interact with Tor")
14338 (description
14339 "Stem is a Python controller library for Tor. With it you can use Tor's
14340 control protocol to script against the Tor process and read descriptor data
14341 relays publish about themselves.")
14342 (license license:lgpl3)))
14343
14344 (define-public python-pyserial
14345 (package
14346 (name "python-pyserial")
14347 (version "3.5")
14348 (source
14349 (origin
14350 (method url-fetch)
14351 (uri (pypi-uri "pyserial" version))
14352 (sha256
14353 (base32
14354 "1nyd4m4mnrz8scbfqn4zpq8gnbl4x42w5zz62vcgpzqd2waf0xrw"))))
14355 (build-system python-build-system)
14356 (arguments
14357 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
14358 ;; #:phases
14359 ;; (modify-phases %standard-phases
14360 ;; (replace 'check
14361 ;; (lambda _
14362 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
14363 (home-page
14364 "https://github.com/pyserial/pyserial")
14365 (synopsis "Python Serial Port Bindings")
14366 (description "@code{pyserial} provide serial port bindings for Python. It
14367 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
14368 and/or Xon/Xoff. The port is accessed in RAW mode.")
14369 (license license:bsd-3)))
14370
14371 (define-public python2-pyserial
14372 (package-with-python2 python-pyserial))
14373
14374 (define-public python-kivy
14375 (package
14376 (name "python-kivy")
14377 (version "1.10.1")
14378 (source
14379 (origin
14380 (method url-fetch)
14381 (uri (pypi-uri "Kivy" version))
14382 (file-name (string-append name "-" version ".tar.gz"))
14383 (sha256
14384 (base32
14385 "1zzxjdp78hfjjiklzr82l4zwibwcq4j6kgicspqs6iyyfn5yisbw"))))
14386 (build-system python-build-system)
14387 (arguments
14388 `(#:tests? #f ; Tests require many optional packages
14389 #:phases
14390 (modify-phases %standard-phases
14391 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
14392 (lambda* (#:key inputs #:allow-other-keys)
14393 (setenv "KIVY_SDL2_PATH"
14394 (string-append (assoc-ref inputs "sdl-union")
14395 "/include/SDL2"))
14396 #t)))))
14397 (native-inputs
14398 `(("pkg-config" ,pkg-config)
14399 ("python-cython" ,python-cython)))
14400 (inputs
14401 `(("gstreamer" ,gstreamer)
14402 ("mesa" ,mesa)
14403 ("sdl-union"
14404 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
14405 (home-page "https://kivy.org")
14406 (synopsis
14407 "Multitouch application framework")
14408 (description
14409 "A software library for rapid development of
14410 hardware-accelerated multitouch applications.")
14411 (license license:expat)))
14412
14413 (define-public python2-kivy
14414 (package-with-python2 python-kivy))
14415
14416 (define-public python-binaryornot
14417 (package
14418 (name "python-binaryornot")
14419 (version "0.4.4")
14420 (source (origin
14421 (method url-fetch)
14422 (uri (pypi-uri "binaryornot" version))
14423 (sha256
14424 (base32
14425 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
14426 (build-system python-build-system)
14427 (arguments
14428 `(#:phases
14429 (modify-phases %standard-phases
14430 (add-after 'unpack 'patch-tests
14431 (lambda _
14432 ;; TypeError: binary() got an unexpected keyword argument
14433 ;; 'average_size'.
14434 (substitute* "tests/test_check.py"
14435 (("average_size=512") ""))
14436 #t)))))
14437 (propagated-inputs
14438 `(("python-chardet" ,python-chardet)
14439 ("python-hypothesis" ,python-hypothesis)))
14440 (home-page "https://github.com/audreyr/binaryornot")
14441 (synopsis "Package to check if a file is binary or text")
14442 (description "Ultra-lightweight pure Python package to check if a file is
14443 binary or text.")
14444 (license license:bsd-3)
14445 (properties `((python2-variant . ,(delay python2-binaryornot))))))
14446
14447 (define-public python2-binaryornot
14448 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
14449 (package/inherit base
14450 (propagated-inputs
14451 `(("python2-enum34" ,python2-enum34)
14452 ,@(package-propagated-inputs base))))))
14453
14454 (define-public python-binwalk
14455 (package
14456 (name "python-binwalk")
14457 (version "2.2.0")
14458 (source
14459 (origin
14460 (method git-fetch)
14461 (uri (git-reference
14462 (url "https://github.com/ReFirmLabs/binwalk")
14463 (commit (string-append "v" version))))
14464 (file-name (git-file-name name version))
14465 (sha256
14466 (base32
14467 "1bxgj569fzwv6jhcbl864nmlsi9x1k1r20aywjxc8b9b1zgqrlvc"))))
14468 (build-system python-build-system)
14469 (arguments
14470 `(#:phases
14471 (modify-phases %standard-phases
14472 (add-before 'check 'set-pythonpath
14473 (lambda _
14474 (setenv "PYTHONPATH"
14475 (string-append
14476 (getcwd) "/src/"
14477 ":" (getenv "PYTHONPATH")))
14478 (setenv "HOME" "")
14479 #t)))))
14480 (native-inputs
14481 `(("python-coverage" ,python-coverage)
14482 ("python-nose" ,python-nose)))
14483 (home-page "https://github.com/ReFirmLabs/binwalk")
14484 (synopsis "Firmware analysis tool")
14485 (description "Binwalk is a tool for analyzing, reverse engineering, and
14486 extracting firmware images")
14487 (license license:expat)))
14488
14489 (define-public python-nltk
14490 (package
14491 (name "python-nltk")
14492 (version "3.2.1")
14493 (source (origin
14494 (method url-fetch)
14495 (uri (pypi-uri "nltk" version))
14496 (sha256
14497 (base32
14498 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
14499 (build-system python-build-system)
14500 (arguments
14501 '(;; The tests require some extra resources to be downloaded.
14502 ;; TODO Try packaging these resources.
14503 #:tests? #f))
14504 (home-page "http://nltk.org/")
14505 (synopsis "Natural Language Toolkit")
14506 (description "It provides interfaces to over 50 corpora and lexical
14507 resources such as WordNet, along with a suite of text processing libraries
14508 for classification, tokenization, stemming, tagging, parsing, and semantic
14509 reasoning, wrappers for natural language processing libraries.")
14510 (license license:asl2.0)))
14511
14512 (define-public python2-nltk
14513 (package-with-python2 python-nltk))
14514
14515 (define-public python-pymongo
14516 (package
14517 (name "python-pymongo")
14518 (version "3.7.2")
14519 (source (origin
14520 (method url-fetch)
14521 (uri (pypi-uri "pymongo" version))
14522 (sha256
14523 (base32
14524 "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
14525 (build-system python-build-system)
14526 (propagated-inputs
14527 `(("python-certifi" ,python-certifi)))
14528 (home-page "https://github.com/mongodb/mongo-python-driver")
14529 (synopsis "Python driver for MongoDB")
14530 (description "Python driver for MongoDB.")
14531 (license license:asl2.0)))
14532
14533 (define-public python2-pymongo
14534 (package-with-python2 python-pymongo))
14535
14536 (define-public python-consul
14537 (package
14538 (name "python-consul")
14539 (version "0.6.1")
14540 (source
14541 (origin
14542 (method url-fetch)
14543 (uri (pypi-uri "python-consul" version))
14544 (sha256
14545 (base32
14546 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
14547 (build-system python-build-system)
14548 (arguments
14549 '(#:tests? #f)) ; The tests are not distributed
14550 (propagated-inputs
14551 `(("python-requests" ,python-requests)
14552 ("python-six" ,python-six)))
14553 (home-page "https://github.com/cablehead/python-consul")
14554 (synopsis "Python client for Consul")
14555 (description
14556 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
14557 discovery, monitoring and configuration.")
14558 (license license:expat)))
14559
14560 (define-public python2-consul
14561 (package-with-python2 python-consul))
14562
14563 (define-public python-schematics
14564 (package
14565 (name "python-schematics")
14566 (version "1.1.1")
14567 (source
14568 (origin
14569 (method git-fetch)
14570 (uri (git-reference
14571 (url "https://github.com/schematics/schematics")
14572 (commit (string-append "v" version))))
14573 (file-name (git-file-name name version))
14574 (sha256
14575 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
14576 (build-system python-build-system)
14577 (propagated-inputs
14578 `(("python-six" ,python-six)))
14579 (arguments
14580 ;; The tests require a bunch of not very nice packages with fixed
14581 ;; version requirements (e.g. python-coveralls).
14582 `(#:tests? #f))
14583 (home-page "https://github.com/schematics/schematics")
14584 (synopsis "Python Data Structures for Humans")
14585 (description "Python Data Structures for Humans.")
14586 (license license:bsd-3)))
14587
14588 (define-public python2-schematics
14589 (package-with-python2 python-schematics))
14590
14591 (define-public python-odfpy
14592 (package
14593 (name "python-odfpy")
14594 (version "1.4.1")
14595 (source (origin
14596 (method url-fetch)
14597 (uri (pypi-uri "odfpy" version))
14598 (sha256
14599 (base32
14600 "1v1qqk9p12qla85yscq2g413l3qasn6yr4ncyc934465b5p6lxnv"))))
14601 (arguments
14602 `(#:phases
14603 (modify-phases %standard-phases
14604 (replace 'check
14605 (lambda _
14606 (setenv "PYTHONPATH" (string-append "./build/lib:"
14607 (getenv "PYTHONPATH")))
14608 (invoke "pytest" "-vv"))))))
14609 (build-system python-build-system)
14610 (native-inputs
14611 `(("python-pytest" ,python-pytest)))
14612 (propagated-inputs
14613 `(("python-defusedxml" ,python-defusedxml)))
14614 (home-page "https://github.com/eea/odfpy")
14615 (synopsis "Python API and tools to manipulate OpenDocument files")
14616 (description "Collection of libraries and utility programs written in
14617 Python to manipulate OpenDocument 1.2 files.")
14618 (license
14619 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
14620 ;; number of files with other licenses.
14621 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
14622
14623 (define-public python2-odfpy
14624 (package-with-python2 python-odfpy))
14625
14626 (define-public python-natsort
14627 (package
14628 (name "python-natsort")
14629 (version "7.0.1")
14630 (source (origin
14631 (method url-fetch)
14632 (uri (pypi-uri "natsort" version))
14633 (sha256
14634 (base32
14635 "1ksqfai72dbcfbwx43pxl658j59mx2rvqypjy1fk0ax2qd6lccx6"))))
14636 (build-system python-build-system)
14637 (arguments
14638 `(#:modules ((guix build utils)
14639 (guix build python-build-system)
14640 (srfi srfi-1)
14641 (srfi srfi-26)
14642 (ice-9 ftw))
14643 #:phases
14644 (modify-phases %standard-phases
14645 (add-before 'check 'set-cachedir
14646 ;; Tests require write access to $HOME by default
14647 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t))
14648 (replace 'check
14649 (lambda _
14650 (let ((cwd (getcwd)))
14651 (setenv "PYTHONPATH"
14652 (string-append
14653 cwd "/build/"
14654 (find (cut string-prefix? "lib" <>)
14655 (scandir (string-append cwd "/build")))
14656 ":"
14657 (getenv "PYTHONPATH")))
14658 (invoke "pytest" "-v")))))))
14659 (native-inputs
14660 `(("python-hypothesis" ,python-hypothesis)
14661 ("python-pytest-cov" ,python-pytest-cov)
14662 ("python-pytest-mock" ,python-pytest-mock)
14663 ("python-pytest" ,python-pytest)))
14664 (propagated-inputs ; TODO: Add python-fastnumbers.
14665 `(("python-pyicu" ,python-pyicu)))
14666 (home-page "https://github.com/SethMMorton/natsort")
14667 (synopsis "Natural sorting for python and shell")
14668 (description
14669 "Natsort lets you apply natural sorting on lists instead of
14670 lexicographical. If you use the built-in @code{sorted} method in python
14671 on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
14672 @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
14673 @code{a4}, @code{a9}]}. Natsort provides a function @code{natsorted} that
14674 identifies numbers and sorts them separately from strings. It can also sort
14675 version numbers, real numbers, mixed types and more, and comes with a shell
14676 command @command{natsort} that exposes this functionality in the command line.")
14677 (license license:expat)
14678 (properties `((python2-variant . ,(delay python2-natsort))))))
14679
14680 ;; Natsort 6.x are the last versions with support for Python 2.
14681 (define-public python2-natsort
14682 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
14683 (package (inherit base)
14684 (version "6.2.1")
14685 (source (origin
14686 (method url-fetch)
14687 (uri (pypi-uri "natsort" version))
14688 (sha256
14689 (base32
14690 "1mc9hbh6fv76xyz13frm7dgi05cf74f9j5wvcyjiy5234gylz565"))))
14691 (native-inputs
14692 `(("python2-pathlib" ,python2-pathlib)
14693 ,@(package-native-inputs base))))))
14694
14695 (define-public glances
14696 (package
14697 (name "glances")
14698 (version "3.1.6")
14699 (source
14700 (origin
14701 (method url-fetch)
14702 (uri (pypi-uri "Glances" version))
14703 (sha256
14704 (base32 "11xbm8jgcxha191ly7q76nab1ilabiz14mqf6i3y6aw5xvgg017c"))
14705 (modules '((guix build utils)))
14706 (snippet
14707 '(begin
14708 ;; Glances phones PyPI for weekly update checks by default.
14709 ;; Disable these. The user can re-enable them if desired.
14710 (substitute* "glances/outdated.py"
14711 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
14712 (string-append indentation
14713 "self.args.disable_check_update = True\n"
14714 line)))
14715 #t))))
14716 (build-system python-build-system)
14717 (propagated-inputs
14718 `(("python-future" ,python-future)
14719 ("python-psutil" ,python-psutil)))
14720 (home-page "https://github.com/nicolargo/glances")
14721 (synopsis "Cross-platform curses-based monitoring tool")
14722 (description
14723 "Glances is a curses-based monitoring tool for a wide variety of platforms.
14724 Glances uses the PsUtil library to get information from your system. It
14725 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
14726 (license license:lgpl3+)))
14727
14728 (define-public python-glances
14729 (deprecated-package "python-glances" glances))
14730
14731 (define-public python-graphql-core
14732 (package
14733 (name "python-graphql-core")
14734 (version "3.1.2")
14735 (source
14736 (origin
14737 (method url-fetch)
14738 (uri (pypi-uri "graphql-core" version))
14739 (sha256
14740 (base32
14741 "0fjv5w2wvgdr8gb27v241bavliipyir9fdz48rsgc3xapm644mn0"))))
14742 (build-system python-build-system)
14743 (arguments
14744 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
14745 #:phases
14746 (modify-phases %standard-phases
14747 (add-after 'unpack 'patch-hardcoded-version
14748 (lambda _ (substitute*
14749 "setup.py"
14750 (("'gevent==1.1rc1'") "'gevent'"))
14751 #t)))))
14752 (native-inputs
14753 `(("python-gevent" ,python-gevent)
14754 ("python-mock" ,python-mock)
14755 ("python-pytest-mock" ,python-pytest-mock)))
14756 (propagated-inputs
14757 `(("python-promise" ,python-promise)
14758 ("python-six" ,python-six)))
14759 (home-page "https://github.com/graphql-python/graphql-core")
14760 (synopsis "GraphQL implementation for Python")
14761 (description
14762 "GraphQL implementation for Python. GraphQL is a data query language and
14763 runtime designed and used to request and deliver data to mobile and web apps.
14764 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
14765 to Python.")
14766 (license license:expat)))
14767
14768 (define-public python-graphql-relay
14769 (package
14770 (name "python-graphql-relay")
14771 (version "0.4.5")
14772 (source
14773 (origin
14774 (method url-fetch)
14775 (uri (pypi-uri "graphql-relay" version))
14776 (sha256
14777 (base32
14778 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
14779 (build-system python-build-system)
14780 (arguments
14781 '(#:tests? #f)) ; The tests are not distributed
14782 (propagated-inputs
14783 `(("python-graphql-core" ,python-graphql-core)
14784 ("python-promise" ,python-promise)
14785 ("python-six" ,python-six)))
14786 (home-page "https://github.com/graphql-python/graphql-relay-py")
14787 (synopsis "Relay implementation for Python")
14788 (description
14789 "This is a library to allow the easy creation of Relay-compliant servers
14790 using the GraphQL Python reference implementation of a GraphQL server. It
14791 should be noted that the code is a exact port of the original
14792 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
14793 from Facebook.")
14794 (license license:expat)))
14795
14796 (define-public python-graphene
14797 (package
14798 (name "python-graphene")
14799 (version "0.10.2")
14800 (source
14801 (origin
14802 (method url-fetch)
14803 (uri (pypi-uri "graphene" version))
14804 (sha256
14805 (base32
14806 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
14807 (build-system python-build-system)
14808 (propagated-inputs
14809 `(("python-graphql-core" ,python-graphql-core)
14810 ("python-graphql-relay" ,python-graphql-relay)
14811 ("python-iso8601" ,python-iso8601)
14812 ("python-promise" ,python-promise)
14813 ("python-six" ,python-six)))
14814 (arguments
14815 `(#:tests? #f)) ; no tests/ in the PyPI tarball
14816 (home-page "https://graphene-python.org/")
14817 (synopsis "GraphQL Framework for Python")
14818 (description
14819 "Graphene is a Python library for building GraphQL schemas/types.
14820 A GraphQL schema describes your data model, and provides a GraphQL server
14821 with an associated set of resolve methods that know how to fetch data.")
14822 (license license:expat)))
14823
14824 (define-public python-nautilus
14825 (package
14826 (name "python-nautilus")
14827 (version "0.4.9")
14828 (source
14829 (origin
14830 (method url-fetch)
14831 (uri (pypi-uri "nautilus" version))
14832 (sha256
14833 (base32
14834 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
14835 (build-system python-build-system)
14836 (arguments `(#:tests? #f)) ; fails to import test modules
14837 (propagated-inputs
14838 `(("python-bcrypt" ,python-bcrypt)
14839 ("python-click" ,python-click)
14840 ("python-consul" ,python-consul)
14841 ("python-graphene" ,python-graphene)
14842 ("python-jinja2" ,python-jinja2)
14843 ("python-peewee" ,python-peewee)
14844 ("python-pika" ,python-pika)
14845 ("python-tornado" ,python-tornado)
14846 ("python-wtforms" ,python-wtforms)))
14847 (native-inputs
14848 `(("python-nose2" ,python-nose2)))
14849 (home-page "https://github.com/AlecAivazis/nautilus")
14850 (synopsis "Library for creating microservice applications")
14851 (description
14852 "Nautilus is a framework for flux based microservices that looks to
14853 provide extendible implementations of common aspects of a cloud so that you can
14854 focus on building massively scalable web applications.")
14855 (license license:expat)))
14856
14857 (define-public python-random2
14858 (package
14859 (name "python-random2")
14860 (version "1.0.1")
14861 (source (origin
14862 (method url-fetch)
14863 (uri (pypi-uri "random2" version ".zip"))
14864 (sha256
14865 (base32
14866 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))))
14867 (build-system python-build-system)
14868 (native-inputs `(("unzip" ,unzip)))
14869 (home-page "http://pypi.python.org/pypi/random2")
14870 (synopsis "Python 3 version of the Python 2 @code{random} module")
14871 (description
14872 "This package provides a Python 3 ported version of Python 2.7’s
14873 @code{random} module. It has also been back-ported to work in Python 2.6.
14874
14875 In Python 3, the implementation of @code{randrange()} was changed, so that
14876 even with the same seed you get different sequences in Python 2 and 3.
14877
14878 This package closes that gap, allowing stable random number generation
14879 between the different Python versions.")
14880 (license license:psfl)))
14881
14882 (define-public python2-random2
14883 (package-with-python2 python-random2))
14884
14885 (define-public python-snowballstemmer
14886 (package
14887 (name "python-snowballstemmer")
14888 (version "2.0.0")
14889 (source (origin
14890 (method url-fetch)
14891 (uri (pypi-uri "snowballstemmer" version))
14892 (sha256
14893 (base32
14894 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
14895 (build-system python-build-system)
14896 (arguments
14897 `(;; No tests exist
14898 #:tests? #f))
14899 (home-page "https://github.com/shibukawa/snowball_py")
14900 (synopsis "Snowball stemming library collection for Python")
14901 (description "This package provides 16 word stemmer algorithms generated
14902 from Snowball algorithms. It includes the 15 original ones plus the Poerter
14903 English stemmer.")
14904 (license license:bsd-3)))
14905
14906 (define-public python2-snowballstemmer
14907 (package-with-python2 python-snowballstemmer))
14908
14909 (define-public python-setproctitle
14910 (package
14911 (name "python-setproctitle")
14912 (version "1.1.10")
14913 (source
14914 (origin
14915 (method url-fetch)
14916 (uri (pypi-uri "setproctitle" version))
14917 (sha256
14918 (base32
14919 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
14920 (build-system python-build-system)
14921 (arguments
14922 '(#:phases
14923 (modify-phases %standard-phases
14924 (add-before 'check 'patch-Makefile
14925 ;; Stricly this is only required for the python2 variant.
14926 ;; But adding a phase in an inherited package seems to be
14927 ;; cumbersum. So we patch even for python3.
14928 (lambda _
14929 (let ((nose (assoc-ref %build-inputs "python2-nose")))
14930 (when nose
14931 (substitute* "Makefile"
14932 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
14933 (string-append nose "/bin/nosetests "))))
14934 #t)))
14935 (replace 'check
14936 (lambda _
14937 (setenv "PYTHON" (or (which "python3") (which "python")))
14938 (setenv "PYCONFIG" (if (which "python3-config")
14939 "python3-config --embed"
14940 "python-config"))
14941 (setenv "CC" "gcc")
14942 ;; No need to extend PYTHONPATH to find the built package, since
14943 ;; the Makefile will build anyway
14944 (invoke "make" "check"))))))
14945 (native-inputs
14946 `(("procps" ,procps))) ; required for tests
14947 (home-page "https://github.com/dvarrazzo/py-setproctitle")
14948 (synopsis
14949 "Setproctitle implementation for Python to customize the process title")
14950 (description "The library allows a process to change its title (as displayed
14951 by system tools such as ps and top).
14952
14953 Changing the title is mostly useful in multi-process systems, for
14954 example when a master process is forked: changing the children's title
14955 allows identifying the task each process is busy with. The technique
14956 is used by PostgreSQL and the OpenSSH Server for example.")
14957 (license license:bsd-3)
14958 (properties `((python2-variant . ,(delay python2-setproctitle))))))
14959
14960 (define-public python2-setproctitle
14961 (let ((base (package-with-python2
14962 (strip-python2-variant python-setproctitle))))
14963 (package/inherit base
14964 (native-inputs `(("python2-nose" ,python2-nose)
14965 ,@(package-native-inputs base))))))
14966
14967 (define-public python-validictory
14968 (package
14969 (name "python-validictory")
14970 (version "1.0.1")
14971 (source
14972 (origin
14973 (method url-fetch)
14974 (uri (pypi-uri "validictory" version))
14975 (sha256
14976 (base32
14977 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
14978 (build-system python-build-system)
14979 (arguments
14980 '(#:phases
14981 (modify-phases %standard-phases
14982 (add-after 'unpack 'bootstrap
14983 ;; Move the tests out of the package directory to avoid
14984 ;; packaging them.
14985 (lambda* _
14986 (rename-file "validictory/tests" "tests")
14987 (delete-file "tests/__init__.py")))
14988 (replace 'check
14989 (lambda _
14990 ;; Extend PYTHONPATH so the built package will be found.
14991 (setenv "PYTHONPATH"
14992 (string-append (getcwd) "/build/lib:"
14993 (getenv "PYTHONPATH")))
14994 (invoke "py.test" "-vv" ))))))
14995 (native-inputs
14996 `(("python-pytest" ,python-pytest)))
14997 (home-page
14998 "https://github.com/jamesturk/validictory")
14999 (synopsis "General purpose Python data validator")
15000 (description "It allows validation of arbitrary Python data structures.
15001
15002 The schema format is based on the JSON Schema
15003 proposal (http://json-schema.org), so combined with json the library is also
15004 useful as a validator for JSON data.")
15005 (license license:expat)))
15006
15007 (define-public python2-validictory
15008 (package-with-python2 python-validictory))
15009
15010 (define-public python-pyelftools
15011 (package
15012 (name "python-pyelftools")
15013 (version "0.25")
15014 (source
15015 (origin
15016 (method url-fetch)
15017 (uri (pypi-uri "pyelftools" version))
15018 (sha256
15019 (base32
15020 "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
15021 (build-system python-build-system)
15022 (arguments
15023 `(#:phases
15024 (modify-phases %standard-phases
15025 (add-before 'check 'set-pythonpath
15026 (lambda _
15027 (setenv "PYTHONPATH"
15028 (string-append
15029 (getcwd) "/test/"
15030 ":" (getenv "PYTHONPATH")))
15031 #t)))))
15032 (home-page
15033 "https://github.com/eliben/pyelftools")
15034 (synopsis
15035 "Analyze binary and library file information")
15036 (description "This Python library provides interfaces for parsing and
15037 analyzing two binary and library file formats; the Executable and Linking
15038 Format (ELF), and debugging information in the Debugging With Attributed
15039 Record Format (DWARF).")
15040 (license license:public-domain)))
15041
15042 (define-public python-pyev
15043 (package
15044 (name "python-pyev")
15045 (version "0.9.0")
15046 (source
15047 (origin
15048 (method url-fetch)
15049 (uri (pypi-uri "pyev" version))
15050 (sha256
15051 (base32
15052 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
15053 (build-system python-build-system)
15054 (arguments
15055 `(#:tests? #f ; no test suite
15056 #:phases
15057 (modify-phases %standard-phases
15058 (add-after 'unpack 'patch
15059 (lambda* (#:key inputs #:allow-other-keys)
15060 (let ((libev (string-append (assoc-ref inputs "libev")
15061 "/lib/libev.so.4")))
15062 (substitute* "setup.py"
15063 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
15064 (string-append "libev_dll_name = \"" libev "\"")))))))))
15065 (inputs
15066 `(("libev" ,libev)))
15067 (home-page "https://github.com/gabrielfalcao/pyev")
15068 (synopsis "Python libev interface")
15069 (description "Pyev provides a Python interface to libev.")
15070 (license license:gpl3)))
15071
15072 (define-public python2-pyev
15073 (package-with-python2 python-pyev))
15074
15075 (define-public python-imagesize
15076 (package
15077 (name "python-imagesize")
15078 (version "1.2.0")
15079 (source
15080 (origin
15081 (method url-fetch)
15082 (uri (pypi-uri "imagesize" version))
15083 (sha256
15084 (base32
15085 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
15086 (build-system python-build-system)
15087 (home-page "https://github.com/shibukawa/imagesize_py")
15088 (synopsis "Gets image size of files in various formats in Python")
15089 (description
15090 "This package allows determination of image size from
15091 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
15092 (license license:expat)))
15093
15094 (define-public python2-imagesize
15095 (package-with-python2 python-imagesize))
15096
15097 (define-public python-termstyle
15098 (package
15099 (name "python-termstyle")
15100 (version "0.1.11")
15101 (source
15102 (origin
15103 (method url-fetch)
15104 (uri (pypi-uri "termstyle" version))
15105 (sha256
15106 (base32
15107 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
15108 (build-system python-build-system)
15109 (arguments
15110 '(#:phases
15111 (modify-phases %standard-phases
15112 (replace 'check
15113 (lambda _
15114 (invoke "python" "test3.py"))))))
15115 (home-page "https://github.com/gfxmonk/termstyle")
15116 (synopsis "Console text coloring for Python")
15117 (description "This package provides console text coloring for Python.")
15118 (license license:bsd-3)))
15119
15120 (define-public python-argcomplete
15121 (package
15122 (name "python-argcomplete")
15123 (version "1.11.1")
15124 (source
15125 (origin
15126 (method url-fetch)
15127 (uri (pypi-uri "argcomplete" version))
15128 (sha256
15129 (base32
15130 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
15131 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
15132 (build-system python-build-system)
15133 (native-inputs
15134 `(("python-coverage" ,python-coverage)
15135 ("python-flake8" ,python-flake8)
15136 ("python-pexpect" ,python-pexpect)
15137 ("python-wheel" ,python-wheel)
15138 ("tcsh" ,tcsh)
15139 ("fish" ,fish)
15140 ("bash-full" ,bash))) ;full Bash for 'test_file_completion'
15141 (home-page "https://github.com/kislyuk/argcomplete")
15142 (synopsis "Shell tab completion for Python argparse")
15143 (description "argcomplete provides extensible command line tab completion
15144 of arguments and options for Python scripts using @code{argparse}. It's
15145 particularly useful for programs with many options or sub-parsers that can
15146 dynamically suggest completions; for example, when browsing resources over the
15147 network.")
15148 (license license:asl2.0)
15149 (properties `((python2-variant . ,(delay python2-argcomplete))))))
15150
15151 (define-public python2-argcomplete
15152 (let ((variant (package-with-python2
15153 (strip-python2-variant python-argcomplete))))
15154 (package/inherit variant
15155 (arguments
15156 (substitute-keyword-arguments (package-arguments variant)
15157 ((#:phases phases '%standard-phases)
15158 `(modify-phases ,phases
15159 (add-after 'unpack 'set-my-HOME
15160 (lambda _ (setenv "HOME" "/tmp")))))))
15161 (native-inputs
15162 `(("python2-importlib-metadata" ,python2-importlib-metadata)
15163 ,@(package-native-inputs variant))))))
15164
15165 (define-public python-csscompressor
15166 (package
15167 (name "python-csscompressor")
15168 (version "0.9.5")
15169 (source
15170 (origin
15171 (method url-fetch)
15172 (uri (pypi-uri "csscompressor" version))
15173 (sha256
15174 (base32
15175 "018ssffvlpnc1salmnpyl52c11glzzwj4k9f757hl4pkpjnjp8mg"))))
15176 (build-system python-build-system)
15177 (arguments
15178 '(#:phases
15179 (modify-phases %standard-phases
15180 (replace 'check
15181 (lambda _
15182 (invoke "py.test"))))))
15183 (native-inputs
15184 `(("python-pytest" ,python-pytest)))
15185 (home-page "https://github.com/sprymix/csscompressor")
15186 (synopsis "Python port of YUI CSS Compressor")
15187 (description
15188 "This package provides a python port of YUI CSS Compressor.")
15189 (license license:bsd-3)))
15190
15191 (define-public python-rcssmin
15192 (package
15193 (name "python-rcssmin")
15194 (version "1.0.6")
15195 (source
15196 (origin
15197 (method url-fetch)
15198 (uri (pypi-uri "rcssmin" version))
15199 (sha256
15200 (base32
15201 "0w42l4dhxghcz7pj3q7hkxp015mvb8z2cq9sfxbl31npsfavd1ya"))))
15202 (build-system python-build-system)
15203 (arguments
15204 '(#:phases
15205 (modify-phases %standard-phases
15206 (replace 'check
15207 (lambda _
15208 (invoke "python" "run_tests.py" "tests"))))))
15209 (home-page "http://opensource.perlig.de/rcssmin/")
15210 (synopsis "CSS Minifier")
15211 (description "The minifier is based on the semantics of the YUI compressor,
15212 which itself is based on the rule list by Isaac Schlueter.")
15213 (license license:asl2.0)))
15214
15215 (define-public python-rjsmin
15216 (package
15217 (name "python-rjsmin")
15218 (version "1.1.0")
15219 (source
15220 (origin
15221 (method url-fetch)
15222 (uri (pypi-uri "rjsmin" version))
15223 (sha256
15224 (base32
15225 "0cmc72rlkvzz8fl89bc83czkx0pcvhzj7yn7m29r8pgnf5fcfpdi"))
15226 (modules '((guix build utils)))
15227 (snippet
15228 '(begin
15229 (for-each delete-file (find-files "bench" "\\.js$"))
15230 #t))))
15231 (build-system python-build-system)
15232 (arguments
15233 '(#:tests? #f ; Not all test files included.
15234 #:phases
15235 (modify-phases %standard-phases
15236 (replace 'check
15237 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
15238 (add-installed-pythonpath inputs outputs)
15239 (if tests?
15240 (invoke "py.test" "-vv" "tests")
15241 #t))))))
15242 (native-inputs
15243 `(("python-pytest" ,python-pytest)))
15244 (home-page "http://opensource.perlig.de/rjsmin/")
15245 (synopsis "Javascript Minifier")
15246 (description "@code{rJSmin} is a javascript minifier written in Python. The
15247 minifier is based on the semantics of jsmin.c by Douglas Crockford. The module
15248 is a re-implementation aiming for speed, so it can be used at runtime (rather
15249 than during a preprocessing step).")
15250 (license license:asl2.0)))
15251
15252 (define-public python-xopen
15253 (package
15254 (name "python-xopen")
15255 (version "0.5.0")
15256 (source
15257 (origin
15258 (method url-fetch)
15259 (uri (pypi-uri "xopen" version))
15260 (sha256
15261 (base32
15262 "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh"))))
15263 (build-system python-build-system)
15264 (propagated-inputs
15265 `(("python-setuptools-scm" ,python-setuptools-scm)))
15266 (home-page "https://github.com/marcelm/xopen/")
15267 (synopsis "Open compressed files transparently")
15268 (description "This module provides an @code{xopen} function that works like
15269 Python's built-in @code{open} function, but can also deal with compressed files.
15270 Supported compression formats are gzip, bzip2 and, xz, and are automatically
15271 recognized by their file extensions. The focus is on being as efficient as
15272 possible on all supported Python versions.")
15273 (license license:expat)))
15274
15275 (define-public python2-xopen
15276 (let ((base (package-with-python2
15277 (strip-python2-variant python-xopen))))
15278 (package/inherit base
15279 (propagated-inputs `(("python2-bz2file" ,python2-bz2file)
15280 ,@(package-propagated-inputs base))))))
15281
15282 (define-public python-cheetah
15283 (package
15284 (name "python-cheetah")
15285 (version "3.2.4")
15286 (source
15287 (origin
15288 (method url-fetch)
15289 (uri (pypi-uri "Cheetah3" version))
15290 (sha256
15291 (base32
15292 "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
15293 (build-system python-build-system)
15294 (arguments
15295 `(#:modules ((guix build utils)
15296 (guix build python-build-system)
15297 (ice-9 ftw)
15298 (srfi srfi-1)
15299 (srfi srfi-26))
15300 #:phases (modify-phases %standard-phases
15301 (add-after 'unpack 'use-absolute-python
15302 (lambda _
15303 (substitute* "Cheetah/CheetahWrapper.py"
15304 (("#!/usr/bin/env python")
15305 (string-append "#!" (which "python"))))
15306 #t))
15307 (add-after 'unpack 'fix-tests
15308 (lambda _
15309 (substitute* "Cheetah/Tests/ImportHooks.py"
15310 (("os.path.dirname\\(__file__\\)")
15311 (string-append "'" (getcwd) "/Cheetah/Tests'")))
15312 #t))
15313 (replace 'check
15314 (lambda _
15315 (let ((cwd (getcwd)))
15316 (setenv "PYTHONPATH"
15317 (string-append
15318 cwd "/build/"
15319 (find (cut string-prefix? "lib" <>)
15320 (scandir (string-append cwd "/build")))
15321 ":" (getenv "PYTHONPATH")))
15322 (setenv "PATH"
15323 (string-append (getenv "PATH")
15324 ":" cwd "/bin"))
15325 (setenv "TMPDIR" "/tmp")
15326
15327 (substitute* "Cheetah/Tests/Test.py"
15328 (("unittest.TextTestRunner\\(\\)")
15329 "unittest.TextTestRunner(verbosity=2)"))
15330
15331 (invoke "python" "Cheetah/Tests/Test.py")))))))
15332 (propagated-inputs
15333 `(("python-markdown" ,python-markdown))) ;optional
15334 (home-page "https://cheetahtemplate.org/")
15335 (synopsis "Template engine")
15336 (description "Cheetah is a text-based template engine and Python code
15337 generator.
15338
15339 Cheetah can be used as a standalone templating utility or referenced as
15340 a library from other Python applications. It has many potential uses,
15341 but web developers looking for a viable alternative to ASP, JSP, PHP and
15342 PSP are expected to be its principle user group.
15343
15344 Features:
15345 @enumerate
15346 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
15347 text-based format.
15348 @item Cleanly separates content, graphic design, and program code.
15349 @item Blends the power and flexibility of Python with a simple template language
15350 that non-programmers can understand.
15351 @item Gives template writers full access to any Python data structure, module,
15352 function, object, or method in their templates.
15353 @item Makes code reuse easy by providing an object-orientated interface to
15354 templates that is accessible from Python code or other Cheetah templates.
15355 One template can subclass another and selectively reimplement sections of it.
15356 @item Provides a simple, yet powerful, caching mechanism that can dramatically
15357 improve the performance of a dynamic website.
15358 @item Compiles templates into optimized, yet readable, Python code.
15359 @end enumerate")
15360 (license (license:x11-style "file://LICENSE"))))
15361
15362 (define-public python2-cheetah
15363 (package-with-python2 python-cheetah))
15364
15365 (define-public python-dulwich
15366 (package
15367 (name "python-dulwich")
15368 (version "0.19.16")
15369 (source
15370 (origin
15371 (method url-fetch)
15372 (uri (list (string-append "https://www.dulwich.io/releases/"
15373 "dulwich-" version ".tar.gz")
15374 (pypi-uri "dulwich" version)))
15375 (sha256
15376 (base32
15377 "0l589jl0lxx59yq0p6vmgw0q0hmfh48iqwyy0x6g1dmz93262igp"))))
15378 (build-system python-build-system)
15379 (arguments
15380 `(#:phases
15381 (modify-phases %standard-phases
15382 (add-before 'check 'fix-tests
15383 (lambda* (#:key inputs #:allow-other-keys)
15384 ;; The tests use Popen with a custom environment which doesn't
15385 ;; include PATH.
15386 (substitute* "dulwich/tests/compat/utils.py"
15387 (("'git'") (string-append "'"
15388 (which "git")
15389 "'")))
15390 (substitute* '("dulwich/tests/test_repository.py"
15391 "dulwich/tests/test_hooks.py")
15392 (("#!/bin/sh") (string-append "#!" (which "sh"))))
15393 (setenv "TEST_RUNNER" "unittest")
15394 (setenv "PYTHONHASHSEED" "random")
15395 #t)))))
15396 (propagated-inputs
15397 `(("python-fastimport" ,python-fastimport)
15398 ("python-urllib3" ,python-urllib3)))
15399 (native-inputs
15400 `(("python-mock" ,python-mock)
15401 ("python-geventhttpclient" ,python-geventhttpclient)
15402 ("git" ,git)))
15403 (home-page "https://www.dulwich.io/")
15404 (synopsis "Git implementation in Python")
15405 (description "Dulwich is an implementation of the Git file formats and
15406 protocols written in pure Python.")
15407 ;; Can be used with either license.
15408 (license (list license:asl2.0 license:gpl2+))))
15409
15410 (define-public python-pbkdf2
15411 (package
15412 (name "python-pbkdf2")
15413 (version "1.3")
15414 (source
15415 (origin
15416 (method url-fetch)
15417 (uri (pypi-uri "pbkdf2" version))
15418 (sha256
15419 (base32
15420 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
15421 (build-system python-build-system)
15422 (arguments
15423 '(#:phases
15424 (modify-phases %standard-phases
15425 (replace 'check
15426 (lambda _
15427 (setenv "PYTHONPATH"
15428 (string-append (getcwd) "/build/lib:"
15429 (getenv "PYTHONPATH")))
15430 (invoke "python" "test/test_pbkdf2.py"))))))
15431 (propagated-inputs
15432 `(("python-pycrypto" ,python-pycrypto))) ; optional
15433 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
15434 (synopsis "Password-based key derivation")
15435 (description "This module implements the password-based key derivation
15436 function, PBKDF2, specified in RSA PKCS#5 v2.0.
15437
15438 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
15439 is part of the RSA Public Key Cryptography Standards series. The provided
15440 implementation takes a password or a passphrase and a salt value (and
15441 optionally a iteration count, a digest module, and a MAC module) and provides
15442 a file-like object from which an arbitrarily-sized key can be read.")
15443 (license license:expat)))
15444
15445 (define-public python2-pbkdf2
15446 (package-with-python2 python-pbkdf2))
15447
15448 (define-public python-qrcode
15449 (package
15450 (name "python-qrcode")
15451 (version "6.1")
15452 (source
15453 (origin
15454 (method url-fetch)
15455 (uri (pypi-uri "qrcode" version))
15456 (sha256
15457 (base32 "0sa3n298b9jpz6zn0birnjii3mg9sihjq28n9nzjlzv09y2m6ljh"))))
15458 (build-system python-build-system)
15459 (arguments
15460 ;; FIXME: Tests require packaging 'pymaging'.
15461 '(#:tests? #f))
15462 (propagated-inputs
15463 `(("python-lxml" ,python-lxml) ; for SVG output
15464 ("python-pillow" ,python-pillow) ; for PNG output
15465 ("python-six" ,python-six)))
15466 (home-page "https://github.com/lincolnloop/python-qrcode")
15467 (synopsis "QR Code image generator")
15468 (description "This package provides a pure Python QR Code generator
15469 module. It uses the Python Imaging Library (PIL) to allow for the generation
15470 of QR Codes.
15471
15472 In addition this package provides a command line tool to generate QR codes and
15473 either write these QR codes to a file or do the output as ascii art at the
15474 console.")
15475 (license license:bsd-3)))
15476
15477 (define-public python2-qrcode
15478 (package-with-python2 python-qrcode))
15479
15480 (define-public python-rst2ansi
15481 (package
15482 (name "python-rst2ansi")
15483 (version "0.1.5")
15484 (source
15485 (origin
15486 (method url-fetch)
15487 (uri (pypi-uri "rst2ansi" version))
15488 (sha256
15489 (base32
15490 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
15491 (build-system python-build-system)
15492 (propagated-inputs
15493 `(("python-docutils" ,python-docutils)))
15494 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
15495 (synopsis "Convert RST to ANSI-decorated console output")
15496 (description
15497 "Python module dedicated to rendering RST (reStructuredText) documents
15498 to ansi-escaped strings suitable for display in a terminal.")
15499 (license license:expat)))
15500
15501 (define-public python-ansi2html
15502 (package
15503 (name "python-ansi2html")
15504 (version "1.2.0")
15505 (source
15506 (origin
15507 (method url-fetch)
15508 (uri (pypi-uri "ansi2html" version))
15509 (sha256
15510 (base32
15511 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
15512 (build-system python-build-system)
15513 (native-inputs
15514 `(("python-mock" ,python-mock)
15515 ("python-nose" ,python-nose)))
15516 (propagated-inputs
15517 `(("python-six" ,python-six)))
15518 (home-page "https://github.com/ralphbean/ansi2html")
15519 (synopsis "Convert ANSI-decorated console output to HTML")
15520 (description
15521 "@command{ansi2html} is a Python library and command line utility for
15522 converting text with ANSI color codes to HTML or LaTeX.")
15523 (license license:gpl3+)))
15524
15525 (define-public python2-ansi2html
15526 (package-with-python2 python-ansi2html))
15527
15528 (define-public python-ddt
15529 (package
15530 (name "python-ddt")
15531 (version "1.4.1")
15532 (source
15533 (origin
15534 (method url-fetch)
15535 (uri (pypi-uri "ddt" version))
15536 (sha256
15537 (base32
15538 "1niqpzc26sxdbyi46r07n4pma5fjx6crww2539vpfmsf0w6yg585"))))
15539 (build-system python-build-system)
15540 (native-inputs
15541 `(("python-pytest" ,python-pytest)))
15542 (propagated-inputs
15543 `(("python-pyyaml" ,python-pyyaml)))
15544 (home-page "https://github.com/datadriventests/ddt")
15545 (synopsis "Data-Driven Tests")
15546 (description
15547 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
15548 running it with different test data, and make it appear as multiple test
15549 cases.")
15550 (license license:expat)))
15551
15552 (define-public python-pycountry
15553 (package
15554 (name "python-pycountry")
15555 (version "18.5.26")
15556 (source
15557 (origin
15558 (method url-fetch)
15559 (uri (pypi-uri "pycountry" version))
15560 (sha256
15561 (base32
15562 "15q9j047s3yc9cfcxq1ch8b71f81na44cr6dydd5gxk0ki9a4akz"))))
15563 (build-system python-build-system)
15564 (home-page "https://bitbucket.org/flyingcircus/pycountry")
15565 (synopsis "ISO databases for languages, countries, currencies, etc.")
15566 (description
15567 "@code{pycountry} provides the ISO databases for the standards:
15568 @enumerate
15569 @item 639-3 (Languages)
15570 @item 3166 (Countries)
15571 @item 3166-3 (Deleted Countries)
15572 @item 3166-2 (Subdivisions of countries)
15573 @item 4217 (Currencies)
15574 @item 15924 (Scripts)
15575 @end enumerate
15576 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
15577 through a Python API.")
15578 (license license:lgpl2.1+)))
15579
15580 (define-public python2-pycountry
15581 (package-with-python2 python-pycountry))
15582
15583 (define-public python-pycosat
15584 (package
15585 (name "python-pycosat")
15586 (version "0.6.3")
15587 (source
15588 (origin
15589 (method url-fetch)
15590 (uri (pypi-uri "pycosat" version ".zip"))
15591 (sha256
15592 (base32
15593 "1vg0f2fwcybpdqv92z0hwdl603n2safh3fqvjjxkksd78r4qg6ac"))))
15594 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
15595 (build-system python-build-system)
15596 (native-inputs
15597 `(("unzip" ,unzip)))
15598 (home-page "https://github.com/ContinuumIO/pycosat")
15599 (synopsis "Bindings to picosat (a SAT solver)")
15600 (description
15601 "This package provides efficient Python bindings to @code{picosat} on
15602 the C level. When importing pycosat, the @code{picosat} solver becomes part
15603 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
15604 Problem} (SAT) solver.")
15605 (license license:expat)))
15606
15607 (define-public python2-pycosat
15608 (package-with-python2 python-pycosat))
15609
15610 (define-public python2-ruamel.ordereddict
15611 (package
15612 (name "python2-ruamel.ordereddict")
15613 (version "0.4.9")
15614 (source
15615 (origin
15616 (method url-fetch)
15617 (uri (pypi-uri "ruamel.ordereddict" version))
15618 (sha256
15619 (base32
15620 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
15621 (build-system python-build-system)
15622 (arguments
15623 `(#:python ,python-2
15624 #:phases
15625 (modify-phases %standard-phases
15626 (delete 'check)
15627 (add-after 'install 'check
15628 (lambda* (#:key inputs outputs #:allow-other-keys)
15629 (add-installed-pythonpath inputs outputs)
15630 (invoke "python" "test/testordereddict.py"))))))
15631 (home-page "https://bitbucket.org/ruamel/ordereddict")
15632 (synopsis "Version of dict that keeps keys in insertion order")
15633 (description
15634 "This is an implementation of an ordered dictionary with @dfn{Key
15635 Insertion Order} (KIO: updates of values do not affect the position of the
15636 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
15637 removed and put at the back). The standard library module @code{OrderedDict},
15638 implemented later, implements a subset of @code{ordereddict} functionality.
15639 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
15640 Order} (KSO, no sorting function can be specified, but a transform can be
15641 specified to apply on the key before comparison (e.g. @code{string.lower})).")
15642 (license license:expat)))
15643
15644 (define-public python-pypeg2
15645 (package
15646 (name "python-pypeg2")
15647 (version "2.15.2")
15648 (source
15649 (origin
15650 (method url-fetch)
15651 (uri (pypi-uri "pyPEG2" version))
15652 (sha256
15653 (base32
15654 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
15655 (build-system python-build-system)
15656 (propagated-inputs `(("python-lxml" ,python-lxml)))
15657 (arguments
15658 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
15659 '(#:tests? #f))
15660 (home-page "https://fdik.org/pyPEG/")
15661 (synopsis "Parsing Expression Grammars in Python")
15662 (description "PyPEG is an intrinsic parser interpreter framework for
15663 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
15664 parse many formal languages.")
15665 (license license:gpl2)))
15666
15667 (define-public python-incremental
15668 (package
15669 (name "python-incremental")
15670 (version "17.5.0")
15671 (source
15672 (origin
15673 (method url-fetch)
15674 (uri (pypi-uri "incremental" version))
15675 (sha256
15676 (base32
15677 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
15678 (build-system python-build-system)
15679 (home-page "https://github.com/hawkowl/incremental")
15680 (synopsis "Library for versioning Python projects")
15681 (description "Incremental is a small library that versions your Python
15682 projects.")
15683 (license license:expat)))
15684
15685 (define-public python2-incremental
15686 (package-with-python2 python-incremental))
15687
15688 (define-public python-invoke
15689 (package
15690 (name "python-invoke")
15691 (home-page "https://www.pyinvoke.org/")
15692 (version "1.5.0")
15693 (source (origin
15694 (method url-fetch)
15695 (uri (pypi-uri "invoke" version))
15696 (sha256
15697 (base32
15698 "0l16v7zcbgi36z6pvmdrs5q4ks8lalcafi5d9nhrpcjzbc3n1igh"))))
15699 (build-system python-build-system)
15700 (arguments
15701 ;; XXX: Requires many dependencies that are not yet in Guix.
15702 `(#:tests? #f
15703 #:phases
15704 (modify-phases %standard-phases
15705 (add-after 'unpack 'fix-bash-path
15706 (lambda* (#:key inputs #:allow-other-keys)
15707 (let ((bash (assoc-ref inputs "bash")))
15708 (substitute* "invoke/config.py"
15709 (("shell = \"/bin/bash\"")
15710 (string-append "shell = \"" bash "/bin/bash\""))
15711 )
15712 #t))))))
15713 (inputs
15714 `(("bash" ,bash-minimal)))
15715 (synopsis "Pythonic task execution")
15716 (description
15717 "Invoke is a Python task execution tool and library, drawing inspiration
15718 from various sources to arrive at a powerful and clean feature set. It is
15719 evolved from the Fabric project, but focuses on local and abstract concerns
15720 instead of servers and network commands.")
15721 (license license:bsd-3)))
15722
15723 (define-public python2-invoke
15724 (package-with-python2 python-invoke))
15725
15726 (define-public python-automat
15727 (package
15728 (name "python-automat")
15729 (version "20.2.0")
15730 (source (origin
15731 (method url-fetch)
15732 (uri (pypi-uri "Automat" version))
15733 (sha256
15734 (base32
15735 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
15736 (build-system python-build-system)
15737 ;; We disable the tests because they require python-twisted, while
15738 ;; python-twisted depends on python-automat. Twisted is optional, but the
15739 ;; tests fail if it is not available. Also see
15740 ;; <https://github.com/glyph/automat/issues/71>.
15741 (arguments '(#:tests? #f))
15742 (native-inputs
15743 `(("python-m2r" ,python-m2r)
15744 ("python-setuptools-scm" ,python-setuptools-scm)
15745 ("python-graphviz" ,python-graphviz)))
15746 (propagated-inputs
15747 `(("python-six" ,python-six)
15748 ("python-attrs" ,python-attrs)))
15749 (home-page "https://github.com/glyph/Automat")
15750 (synopsis "Self-service finite-state machines")
15751 (description "Automat is a library for concise, idiomatic Python
15752 expression of finite-state automata (particularly deterministic finite-state
15753 transducers).")
15754 (license license:expat)))
15755
15756 (define-public python2-automat
15757 (package-with-python2 python-automat))
15758
15759 (define-public python-m2r
15760 (package
15761 (name "python-m2r")
15762 (version "0.2.1")
15763 (source (origin
15764 (method url-fetch)
15765 (uri (pypi-uri "m2r" version))
15766 (sha256
15767 (base32
15768 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))))
15769 (build-system python-build-system)
15770 (propagated-inputs
15771 `(("python-docutils" ,python-docutils)
15772 ("python-mistune" ,python-mistune)))
15773 (native-inputs
15774 `(("python-pygments" ,python-pygments)
15775 ("python-mock" ,python-mock)))
15776 (home-page "https://github.com/miyakogi/m2r")
15777 (synopsis "Markdown to reStructuredText converter")
15778 (description "M2R converts a markdown file including reST markups to valid
15779 reST format.")
15780 (license license:expat)))
15781
15782 (define-public python2-m2r
15783 (package-with-python2 python-m2r))
15784
15785 (define-public python-constantly
15786 (package
15787 (name "python-constantly")
15788 (version "15.1.0")
15789 (source (origin
15790 (method url-fetch)
15791 (uri (pypi-uri "constantly" version))
15792 (sha256
15793 (base32
15794 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
15795 (build-system python-build-system)
15796 (home-page "https://github.com/twisted/constantly")
15797 (synopsis "Symbolic constants in Python")
15798 (description "Constantly is a Python library that provides symbolic
15799 constant support. It includes collections and constants with text, numeric,
15800 and bit flag values.")
15801 (license license:expat)))
15802
15803 (define-public python2-constantly
15804 (package-with-python2 python-constantly))
15805
15806 (define-public python-attrs
15807 (package
15808 (name "python-attrs")
15809 (version "19.3.0")
15810 (source (origin
15811 (method url-fetch)
15812 (uri (pypi-uri "attrs" version))
15813 (sha256
15814 (base32
15815 "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp"))))
15816 (build-system python-build-system)
15817 (arguments
15818 `(#:modules ((guix build utils)
15819 (guix build python-build-system)
15820 (ice-9 ftw)
15821 (srfi srfi-1)
15822 (srfi srfi-26))
15823 #:phases (modify-phases %standard-phases
15824 (replace 'check
15825 (lambda _
15826 (let ((cwd (getcwd)))
15827 (setenv "PYTHONPATH"
15828 (string-append
15829 cwd "/build/"
15830 (find (cut string-prefix? "lib" <>)
15831 (scandir (string-append cwd "/build")))
15832 ":"
15833 (getenv "PYTHONPATH")))
15834 (invoke "python" "-m" "pytest")))))))
15835 (native-inputs
15836 `(("python-coverage" ,python-coverage)
15837 ("python-hypothesis" ,python-hypothesis)
15838 ("python-pympler" ,python-pympler)
15839 ("python-pytest" ,python-pytest)
15840 ("python-six" ,python-six)
15841 ("python-sphinx" ,python-sphinx)
15842 ("python-zope-interface" ,python-zope-interface)))
15843 (home-page "https://github.com/python-attrs/attrs/")
15844 (synopsis "Attributes without boilerplate")
15845 (description "@code{attrs} is a Python package with class decorators that
15846 ease the chores of implementing the most common attribute-related object
15847 protocols.")
15848 (license license:expat)))
15849
15850 (define-public python2-attrs
15851 (package-with-python2 python-attrs))
15852
15853 (define-public python-attrs-bootstrap
15854 (package
15855 (inherit python-attrs)
15856 (name "python-attrs-bootstrap")
15857 (native-inputs `())
15858 (arguments `(#:tests? #f))))
15859
15860 (define-public python2-attrs-bootstrap
15861 (package-with-python2 python-attrs-bootstrap))
15862
15863 (define-public python2-cliapp
15864 (package
15865 (name "python2-cliapp")
15866 (version "1.20180812.1")
15867 (source
15868 (origin
15869 (method url-fetch)
15870 (uri (string-append
15871 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
15872 version ".tar.gz"))
15873 (sha256
15874 (base32
15875 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
15876 (build-system python-build-system)
15877 (arguments
15878 `(#:python ,python-2
15879 #:phases
15880 (modify-phases %standard-phases
15881 ;; check phase needs to be run before the build phase. If not,
15882 ;; coverage-test-runner looks for tests for the built source files,
15883 ;; and fails.
15884 (delete 'check)
15885 (add-before 'build 'check
15886 (lambda _
15887 ;; Disable python3 tests
15888 (substitute* "check"
15889 (("python3") "# python3"))
15890 (invoke "./check"))))))
15891 (native-inputs
15892 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
15893 ("python2-pep8" ,python2-pep8)))
15894 (propagated-inputs
15895 `(("python2-pyaml" ,python2-pyaml)))
15896 (home-page "https://liw.fi/cliapp/")
15897 (synopsis "Python framework for command line programs")
15898 (description "@code{python2-cliapp} is a python framework for
15899 command line programs. It contains the typical stuff such programs
15900 need to do, such as parsing the command line for options, and
15901 iterating over input files.")
15902 (license license:gpl2+)))
15903
15904 (define-public python2-ttystatus
15905 (package
15906 (name "python2-ttystatus")
15907 (version "0.38")
15908 (source
15909 (origin
15910 (method git-fetch)
15911 (uri (git-reference
15912 (url "http://git.liw.fi/ttystatus")
15913 ;; There are no tags after ttystatus-0.36.
15914 (commit "e9fc573326c5d1348f5fe56263b4f7a8c32f58c9")))
15915 (sha256
15916 (base32 "0v49q839nrwdm19c83wfmj6n2kw80xslwq9k0n5509r2h7wzjiqj"))
15917 (file-name (git-file-name name version))))
15918 (build-system python-build-system)
15919 (native-inputs
15920 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
15921 ("python2-pep8" ,python2-pep8)))
15922 (arguments
15923 `(#:python ,python-2
15924 #:phases
15925 (modify-phases %standard-phases
15926 ;; check phase needs to be run before the build phase. If not,
15927 ;; coverage-test-runner looks for tests for the built source files,
15928 ;; and fails.
15929 (delete 'check)
15930 (add-before 'build 'check
15931 (lambda _ (invoke "make" "check"))))))
15932 (home-page "https://liw.fi/ttystatus/")
15933 (synopsis "Python library for showing progress reporting and
15934 status updates on terminals")
15935 (description "@code{python2-ttystatus} is a python library for
15936 showing progress reporting and status updates on terminals, for
15937 command line programs. Output is automatically adapted to the width
15938 of the terminal: truncated if it does not fit, and resized if the
15939 terminal size changes.")
15940 (license license:gpl3+)))
15941
15942 (define-public python2-tracing
15943 (package
15944 (name "python2-tracing")
15945 (version "0.10")
15946 (source
15947 (origin
15948 (method url-fetch)
15949 (uri (string-append
15950 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
15951 version ".tar.gz"))
15952 (sha256
15953 (base32
15954 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
15955 (build-system python-build-system)
15956 (arguments
15957 `(#:python ,python-2))
15958 (home-page "https://liw.fi/tracing/")
15959 (synopsis "Python debug logging helper")
15960 (description "@code{python2-tracing} is a python library for
15961 logging debug messages. It provides a way to turn debugging messages
15962 on and off, based on the filename they occur in. It is much faster
15963 than using @code{logging.Filter} to accomplish the same thing, which
15964 matters when code is run in production mode. The actual logging still
15965 happens using the @code{logging} library.")
15966 (license license:gpl3+)))
15967
15968 (define-public python2-larch
15969 (package
15970 (name "python2-larch")
15971 (version "1.20151025")
15972 (source
15973 (origin
15974 (method url-fetch)
15975 (uri (string-append
15976 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
15977 version ".tar.gz"))
15978 (patches (search-patches
15979 "python2-larch-coverage-4.0a6-compatibility.patch"))
15980 (sha256
15981 (base32
15982 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
15983 (build-system python-build-system)
15984 (arguments
15985 `(#:python ,python-2
15986 #:phases
15987 (modify-phases %standard-phases
15988 ;; check phase needs to be run before the build phase. If not,
15989 ;; coverage-test-runner looks for tests for the built source files,
15990 ;; and fails.
15991 (delete 'check)
15992 (add-before 'build 'check
15993 (lambda _ (invoke "make" "check"))))))
15994 (native-inputs
15995 `(("cmdtest" ,cmdtest)
15996 ("python2-coverage-test-runner" ,python2-coverage-test-runner)))
15997 (propagated-inputs
15998 `(("python2-tracing" ,python2-tracing)))
15999 (home-page "https://liw.fi/larch/")
16000 (synopsis "Python copy-on-write B-tree library")
16001 (description "@code{python2-larch} is an implementation of
16002 particular kind of B-tree, based on research by Ohad Rodeh. See
16003 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
16004 on the data structure.
16005
16006 The distinctive feature of this B-tree is that a node is never
16007 (conceptually) modified. Instead, all updates are done by
16008 copy-on-write. This makes it easy to clone a tree, and modify only the
16009 clone, while other processes access the original tree.")
16010 (license license:gpl3+)))
16011
16012 (define-public python-astroid
16013 (package
16014 (name "python-astroid")
16015 (version "2.4.2")
16016 (source
16017 (origin
16018 (method url-fetch)
16019 (uri (pypi-uri "astroid" version))
16020 (sha256
16021 (base32 "00xp5gqxidxvgg1bwd91myqzdf2fpb9cjwbdl3p7gwqvlk17hh1g"))
16022 (modules '((guix build utils)))
16023 (snippet
16024 '(begin
16025 ;; Check to see if the version pinning has been removed.
16026 (substitute* "astroid/__pkginfo__.py"
16027 (("==1\\.4\\.\\*") ">=1.4.0"))
16028 #t))))
16029 (build-system python-build-system)
16030 (propagated-inputs
16031 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
16032 ("python-six" ,python-six)
16033 ("python-wrapt" ,python-wrapt)))
16034 (native-inputs
16035 `(("python-dateutil" ,python-dateutil)
16036 ("python-pytest" ,python-pytest)
16037 ("python-pytest-runner" ,python-pytest-runner)))
16038 (home-page "https://github.com/PyCQA/astroid")
16039 (synopsis "Common base representation of python source code for pylint and
16040 other projects")
16041 (description "@code{python-astroid} provides a common base representation
16042 of python source code for projects such as pychecker, pyreverse, pylint, etc.
16043
16044 It provides a compatible representation which comes from the _ast module. It
16045 rebuilds the tree generated by the builtin _ast module by recursively walking
16046 down the AST and building an extended ast. The new node classes have
16047 additional methods and attributes for different usages. They include some
16048 support for static inference and local name scopes. Furthermore, astroid
16049 builds partial trees by inspecting living objects.")
16050 (license license:lgpl2.1+)
16051 (properties `((python2-variant . ,(delay python2-astroid))))))
16052
16053 (define-public python2-astroid
16054 (let ((base (package-with-python2
16055 (strip-python2-variant python-astroid))))
16056 (package (inherit base)
16057 ;; Version 2.x removes python2 support.
16058 (version "1.6.5")
16059 (source
16060 (origin
16061 (method url-fetch)
16062 (uri (pypi-uri "astroid" version))
16063 (sha256
16064 (base32
16065 "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
16066 (arguments
16067 (substitute-keyword-arguments (package-arguments base)
16068 ((#:phases phases)
16069 `(modify-phases ,phases
16070 (add-after 'unpack 'remove-spurious-test
16071 (lambda _
16072 ;; https://github.com/PyCQA/astroid/issues/276
16073 (delete-file "astroid/tests/unittest_brain.py")
16074 #t))
16075 (replace 'check
16076 (lambda _
16077 (invoke"python" "-m" "unittest" "discover"
16078 "-p" "unittest*.py")))))))
16079 (native-inputs `())
16080 (propagated-inputs
16081 `(("python2-backports-functools-lru-cache"
16082 ,python2-backports-functools-lru-cache)
16083 ("python2-enum34" ,python2-enum34)
16084 ("python2-singledispatch" ,python2-singledispatch)
16085 ,@(alist-delete "python-typed-ast"
16086 (package-propagated-inputs base)))))))
16087
16088 (define-public python-isbnlib
16089 (package
16090 (name "python-isbnlib")
16091 (version "3.10.4")
16092 (source
16093 (origin
16094 (method url-fetch)
16095 (uri (pypi-uri "isbnlib" version))
16096 (sha256
16097 (base32
16098 "0iin0x2xqwyphyyzd0mzrq5v5xm7b6dlbb294k4dywra5qvbrgzm"))))
16099 (build-system python-build-system)
16100 (arguments '(#:tests? #f)) ; No test
16101 (home-page "https://github.com/xlcnd/isbnlib")
16102 (synopsis "Python library to work with ISBN strings")
16103 (description "@code{python-isbnlib} is a (pure) python library that provides
16104 several useful methods and functions to validate, clean, transform, hyphenate and
16105 get metadata for ISBN strings. Its origin was as the core of isbntools. This short
16106 version, is suitable to be include as a dependency in other projects.")
16107 (license license:lgpl3+)))
16108
16109 (define-public python-isort
16110 (package
16111 (name "python-isort")
16112 (version "4.3.4")
16113 (source
16114 (origin
16115 (method git-fetch)
16116 (uri (git-reference
16117 ;; Tests pass only from the Github sources
16118 (url "https://github.com/timothycrosley/isort")
16119 (commit version)))
16120 (file-name (git-file-name name version))
16121 (sha256
16122 (base32
16123 "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
16124 (build-system python-build-system)
16125 (native-inputs
16126 `(("python-mock" ,python-mock)
16127 ("python-pytest" ,python-pytest)))
16128 (home-page "https://github.com/timothycrosley/isort")
16129 (synopsis "Python utility/library to sort python imports")
16130 (description "@code{python-isort} is a python utility/library to sort
16131 imports alphabetically, and automatically separated into sections. It
16132 provides a command line utility, a python library and plugins for various
16133 editors.")
16134 (license license:expat)
16135 (properties `((python2-variant . ,(delay python2-isort))))))
16136
16137 (define-public python2-isort
16138 (let ((base (package-with-python2
16139 (strip-python2-variant python-isort))))
16140 (package/inherit base
16141 (native-inputs
16142 `(("python2-futures" ,python2-futures)
16143 ,@(package-native-inputs base))))))
16144
16145 (define-public python2-backports-functools-lru-cache
16146 (package
16147 (name "python2-backports-functools-lru-cache")
16148 (version "1.6.1")
16149 (source
16150 (origin
16151 (method url-fetch)
16152 ;; only the pypi tarballs contain the necessary metadata
16153 (uri (pypi-uri "backports.functools_lru_cache" version))
16154 (sha256
16155 (base32
16156 "0jidrkk2w6bhjm197plxiaxrav64mgcrign0bfyr7md2ilc5zplg"))))
16157 (build-system python-build-system)
16158 (native-inputs
16159 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
16160 (arguments
16161 `(#:python ,python-2))
16162 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
16163 (synopsis "Backport of functools.lru_cache from Python 3.3")
16164 (description "@code{python2-backports-functools-lru-cache} is a backport
16165 of @code{functools.lru_cache} from python 3.3.")
16166 (license license:expat)))
16167
16168 (define-public python-configparser
16169 (package
16170 (name "python-configparser")
16171 (version "4.0.2")
16172 (source
16173 (origin
16174 (method url-fetch)
16175 (uri (pypi-uri "configparser" version))
16176 (sha256
16177 (base32
16178 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
16179 (native-inputs
16180 `(("python-setuptools_scm" ,python-setuptools-scm)))
16181 (build-system python-build-system)
16182 (home-page "https://github.com/jaraco/configparser/")
16183 (synopsis "Backport of configparser from python 3.5")
16184 (description "@code{python-configparser} is a backport of
16185 @code{configparser} from Python 3.5 so that it can be used directly
16186 in other versions.")
16187 (license license:expat)))
16188
16189 (define-public python2-configparser
16190 (package-with-python2 python-configparser))
16191
16192 (define-public python-iniconfig
16193 (package
16194 (name "python-iniconfig")
16195 (version "1.1.1")
16196 (source
16197 (origin
16198 (method url-fetch)
16199 (uri (pypi-uri "iniconfig" version))
16200 (sha256
16201 (base32
16202 "0ckzngs3scaa1mcfmsi1w40a1l8cxxnncscrxzjjwjyisx8z0fmw"))))
16203 (build-system python-build-system)
16204 (home-page "https://github.com/RonnyPfannschmidt/iniconfig")
16205 (synopsis "Simple INI-file parser")
16206 (description "The @code{iniconfig} package provides a small and simple
16207 INI-file parser module having a unique set of features; @code{iniconfig}
16208 @itemize
16209 @item maintains the order of sections and entries;
16210 @item supports multi-line values with or without line-continuations;
16211 @item supports \"#\" comments everywhere;
16212 @item raises errors with proper line-numbers;
16213 @item raises an error when two sections have the same name.
16214 @end itemize")
16215 (license license:expat)))
16216
16217 (define-public python-mamba
16218 (package
16219 (name "python-mamba")
16220 (version "0.11.2")
16221 (source (origin
16222 (method url-fetch)
16223 (uri (pypi-uri "mamba" version))
16224 (sha256
16225 (base32
16226 "15m4dpnpv9m60pdaygvwgi43fwqaivs3qxfxhspwrp47sbgwdkvm"))))
16227 (build-system python-build-system)
16228 (arguments `(#:tests? #f)) ; No test
16229 (propagated-inputs
16230 `(("python-clint" ,python-clint)
16231 ("python-coverage" ,python-coverage)))
16232 (home-page "https://nestorsalceda.com/mamba/")
16233 (synopsis "Test runner for Python")
16234 (description
16235 "Mamba is a Behaviour-Driven Development tool for Python developers.
16236 Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.")
16237 (license license:expat)))
16238
16239 (define-public python-mando
16240 (package
16241 (name "python-mando")
16242 (version "0.6.4")
16243 (source (origin
16244 (method url-fetch)
16245 (uri (pypi-uri "mando" version))
16246 (sha256
16247 (base32
16248 "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr"))))
16249 (build-system python-build-system)
16250 (propagated-inputs
16251 `(("python-rst2ansi" ,python-rst2ansi)
16252 ("python-six" ,python-six)))
16253 (native-inputs
16254 `(("python-pytest" ,python-pytest)))
16255 (home-page "https://mando.readthedocs.org/")
16256 (synopsis
16257 "Wrapper around argparse, allowing creation of complete CLI applications")
16258 (description
16259 "This package is a wrapper around argparse, allowing you to write complete CLI
16260 applications in seconds while maintaining all the flexibility.")
16261 (license license:expat)))
16262
16263 (define-public python2-mando
16264 (package-with-python2 python-mando))
16265
16266 (define-public python2-argparse
16267 (package
16268 (name "python2-argparse")
16269 (version "1.4.0")
16270 (source
16271 (origin
16272 (method url-fetch)
16273 (uri (pypi-uri "argparse" version))
16274 (sha256
16275 (base32
16276 "1r6nznp64j68ih1k537wms7h57nvppq0szmwsaf99n71bfjqkc32"))))
16277 (build-system python-build-system)
16278 (arguments
16279 `(#:python ,python-2))
16280 (home-page "https://github.com/ThomasWaldmann/argparse/")
16281 (synopsis "Python command-line parsing library")
16282 (description
16283 "This package is mostly for people who want to have @code{argparse} on
16284 older Pythons because it was not part of the standard library back then.")
16285 (license license:psfl)))
16286
16287 (define-public python-fudge
16288 (package
16289 (name "python-fudge")
16290 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
16291 ;; package, which is currently the only use of this package.
16292 (version "0.9.6")
16293 (source
16294 (origin
16295 (method url-fetch)
16296 (uri (pypi-uri "fudge" version))
16297 (sha256
16298 (base32
16299 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
16300 (build-system python-build-system)
16301 (arguments
16302 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
16303 (home-page "https://github.com/fudge-py/fudge")
16304 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
16305 (description
16306 "Fudge is a Python module for using fake objects (mocks and stubs) to
16307 test real ones.
16308
16309 In readable Python code, you declare the methods available on your fake object
16310 and how they should be called. Then you inject that into your application and
16311 start testing. This declarative approach means you don’t have to record and
16312 playback actions and you don’t have to inspect your fakes after running code.
16313 If the fake object was used incorrectly then you’ll see an informative
16314 exception message with a traceback that points to the culprit.")
16315 (license license:expat)))
16316
16317 (define-public python2-fudge
16318 (package-with-python2 python-fudge))
16319
16320 (define-public python-mwclient
16321 (package
16322 (name "python-mwclient")
16323 (version "0.10.1")
16324 (source
16325 (origin
16326 (method git-fetch)
16327 ;; The PyPI version wouldn't contain tests.
16328 (uri (git-reference
16329 (url "https://github.com/mwclient/mwclient")
16330 (commit (string-append "v" version))))
16331 (file-name (git-file-name name version))
16332 (sha256
16333 (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
16334 (build-system python-build-system)
16335 (propagated-inputs
16336 `(("python-requests-oauthlib" ,python-requests-oauthlib)
16337 ("python-six" ,python-six)))
16338 (native-inputs
16339 `(("python-mock" ,python-mock)
16340 ("python-pytest" ,python-pytest)
16341 ("python-pytest-cov" ,python-pytest-cov)
16342 ("python-pytest-runner" ,python-pytest-runner)
16343 ("python-responses" ,python-responses)))
16344 (home-page "https://github.com/btongminh/mwclient")
16345 (synopsis "MediaWiki API client")
16346 (description "This package provides a MediaWiki API client.")
16347 (license license:expat)))
16348
16349 (define-public python-utils
16350 (package
16351 (name "python-utils")
16352 (version "2.4.0")
16353 (source (origin
16354 (method url-fetch)
16355 (uri (pypi-uri "python-utils" version))
16356 (sha256
16357 (base32
16358 "12c0glzkm81ljgf6pwh0d4rmdm1r7vvgg3ifzp8yp9cfyngw07zj"))))
16359 (build-system python-build-system)
16360 (arguments
16361 `(#:phases
16362 (modify-phases %standard-phases
16363 (replace 'check
16364 (lambda* (#:key inputs outputs #:allow-other-keys)
16365 (add-installed-pythonpath inputs outputs)
16366 (delete-file "pytest.ini")
16367 (invoke "pytest" "-vv"))))))
16368 (native-inputs
16369 `(("pytest-runner" ,python-pytest-runner)
16370 ("pytest" ,python-pytest)
16371 ("six" ,python-six)))
16372 (home-page "https://github.com/WoLpH/python-utils")
16373 (synopsis "Convenient utilities not included with the standard Python install")
16374 (description
16375 "Python Utils is a collection of small Python functions and classes which
16376 make common patterns shorter and easier.")
16377 (license license:bsd-2)))
16378
16379 (define-public python-diff-match-patch
16380 (package
16381 (name "python-diff-match-patch")
16382 (version "20121119")
16383 (source
16384 (origin
16385 (method url-fetch)
16386 (uri (pypi-uri "diff-match-patch" version))
16387 (sha256
16388 (base32
16389 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
16390 (build-system python-build-system)
16391 (home-page "https://code.google.com/p/google-diff-match-patch")
16392 (synopsis "Synchronize plain text")
16393 (description "Diff Match and Patch libraries offer robust algorithms to
16394 perform the operations required for synchronizing plain text.")
16395 (license license:asl2.0)))
16396
16397 (define-public python2-diff-match-patch
16398 (package-with-python2 python-diff-match-patch))
16399
16400 (define-public python-dirsync
16401 (package
16402 (name "python-dirsync")
16403 (version "2.2.5")
16404 (source
16405 (origin
16406 (method url-fetch)
16407 (uri (pypi-uri "dirsync" version))
16408 (sha256
16409 (base32
16410 "1gm82jddm1lkazdi8lfsl1b3vi1z0252ng60mzjym8irnv94qfhy"))))
16411 (build-system python-build-system)
16412 (propagated-inputs
16413 `(("six" ,python-six)))
16414 (home-page "https://github.com/tkhyn/dirsync")
16415 (synopsis "Advanced directory tree synchronisation tool")
16416 (description "Advanced directory tree synchronisation tool.")
16417 (license license:expat)))
16418
16419 (define-public python2-dirsync
16420 (package-with-python2 python-dirsync))
16421
16422 (define-public python-levenshtein
16423 (package
16424 (name "python-levenshtein")
16425 (version "0.12.0")
16426 (source
16427 (origin
16428 (method url-fetch)
16429 (uri (pypi-uri "python-Levenshtein" version))
16430 (sha256
16431 (base32
16432 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
16433 (build-system python-build-system)
16434 (home-page "https://github.com/ztane/python-Levenshtein")
16435 (synopsis "Fast computation of Levenshtein distance and string similarity")
16436 (description
16437 "The Levenshtein Python C extension module contains functions for fast computation of
16438 @enumerate
16439 @item Levenshtein (edit) distance, and edit operations
16440 @item string similarity
16441 @item approximate median strings, and generally string averaging
16442 @item string sequence and set similarity
16443 @end enumerate
16444 It supports both normal and Unicode strings.")
16445 (license license:gpl2+)))
16446
16447 (define-public python2-levenshtein
16448 (package-with-python2 python-levenshtein))
16449
16450 (define-public python-scandir
16451 (package
16452 (name "python-scandir")
16453 (version "1.10.0")
16454 (source
16455 (origin
16456 (method url-fetch)
16457 (uri (pypi-uri "scandir" version))
16458 (sha256
16459 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
16460 (build-system python-build-system)
16461 (arguments
16462 `(#:phases (modify-phases %standard-phases
16463 (replace 'check
16464 (lambda _
16465 (invoke "python" "test/run_tests.py"))))))
16466 (home-page "https://github.com/benhoyt/scandir")
16467 (synopsis "Directory iteration function")
16468 (description
16469 "Directory iteration function like os.listdir(), except that instead of
16470 returning a list of bare filenames, it yields DirEntry objects that include
16471 file type and stat information along with the name. Using scandir() increases
16472 the speed of os.walk() by 2-20 times (depending on the platform and file
16473 system) by avoiding unnecessary calls to os.stat() in most cases.
16474
16475 This package is part of the Python standard library since version 3.5.")
16476 (license license:bsd-3)))
16477
16478 (define-public python2-scandir
16479 (package-with-python2 python-scandir))
16480
16481 (define-public python2-stemming
16482 (package
16483 (name "python2-stemming")
16484 (version "1.0.1")
16485 (source
16486 (origin
16487 (method url-fetch)
16488 (uri (pypi-uri "stemming" version))
16489 (sha256
16490 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
16491 (build-system python-build-system)
16492 (arguments
16493 `(#:python ,python-2))
16494 (home-page "https://bitbucket.org/mchaput/stemming/overview")
16495 (synopsis "Python implementations of various stemming algorithms")
16496 (description
16497 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
16498 stemming algorithms for English. These implementations are straightforward and
16499 efficient, unlike some Python versions of the same algorithms available on the
16500 Web. This package is an extraction of the stemming code included in the Whoosh
16501 search engine.")
16502 (license license:public-domain)))
16503
16504 (define-public python-factory-boy
16505 (package
16506 (name "python-factory-boy")
16507 (version "2.8.1")
16508 (source
16509 (origin
16510 (method url-fetch)
16511 (uri (pypi-uri "factory_boy" version))
16512 (sha256
16513 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
16514 (build-system python-build-system)
16515 (arguments
16516 ;; Tests are not included in the tarball.
16517 `(#:tests? #f))
16518 (propagated-inputs
16519 `(("faker" ,python-faker)))
16520 (home-page "https://github.com/benhoyt/scandir")
16521 (synopsis "Versatile test fixtures replacement")
16522 (description
16523 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
16524
16525 As a fixtures replacement tool, it aims to replace static, hard to maintain
16526 fixtures with easy-to-use factories for complex object.
16527
16528 Instead of building an exhaustive test setup with every possible combination
16529 of corner cases, factory_boy allows you to use objects customized for the
16530 current test, while only declaring the test-specific fields")
16531 (license license:expat)))
16532
16533 (define-public python2-factory-boy
16534 (package-with-python2 python-factory-boy))
16535
16536 (define-public python-translate-toolkit
16537 (package
16538 (name "python-translate-toolkit")
16539 (version "2.1.0")
16540 (source
16541 (origin
16542 (method url-fetch)
16543 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
16544 (sha256
16545 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
16546 (build-system python-build-system)
16547 (native-inputs
16548 `(("python-pytest" ,python-pytest)
16549 ("python-sphinx" ,python-sphinx)))
16550 (propagated-inputs
16551 `(("python-babel" ,python-babel)
16552 ("python-beautifulsoup4" ,python-beautifulsoup4)
16553 ("python-chardet" ,python-chardet)
16554 ("python-diff-match-patch" ,python-diff-match-patch)
16555 ("python-levenshtein" ,python-levenshtein)
16556 ("python-lxml" ,python-lxml)
16557 ("python-six" ,python-six)
16558 ("python-vobject" ,python-vobject)
16559 ("python-pyyaml" ,python-pyyaml)))
16560 (arguments
16561 ;; TODO: tests are not run, because they end with
16562 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
16563 ;; 'parse_funcs'
16564 ;; during test setup.
16565 `(#:tests? #f))
16566 (home-page "https://toolkit.translatehouse.org")
16567 (synopsis "Tools and API for translation and localization engineering")
16568 (description
16569 "Tools and API for translation and localization engineering. It contains
16570 several utilities, as well as an API for building localization tools.")
16571 (license license:gpl2+)))
16572
16573 (define-public python2-translate-toolkit
16574 (package-with-python2 python-translate-toolkit))
16575
16576 (define-public python-packaging
16577 (package
16578 (name "python-packaging")
16579 (version "20.0")
16580 (source
16581 (origin
16582 (method url-fetch)
16583 (uri (pypi-uri "packaging" version))
16584 ;; XXX: The URL in the patch file is wrong, it should be
16585 ;; <https://github.com/pypa/packaging/pull/256>.
16586 (patches (search-patches "python-packaging-test-arch.patch"))
16587 (sha256
16588 (base32
16589 "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
16590 (build-system python-build-system)
16591 (arguments
16592 `(#:phases (modify-phases %standard-phases
16593 (replace 'check
16594 (lambda* (#:key tests? #:allow-other-keys)
16595 (if tests?
16596 (invoke "py.test" "-vv")
16597 (format #t "test suite not run~%"))
16598 #t)))))
16599 (native-inputs
16600 `(("python-pretend" ,python-pretend)
16601 ("python-pytest" ,python-pytest)))
16602 (propagated-inputs
16603 `(("python-pyparsing" ,python-pyparsing)
16604 ("python-six" ,python-six)))
16605 (home-page "https://github.com/pypa/packaging")
16606 (synopsis "Core utilities for Python packages")
16607 (description "Packaging is a Python module for dealing with Python packages.
16608 It offers an interface for working with package versions, names, and dependency
16609 information.")
16610 ;; From 'LICENSE': This software is made available under the terms of
16611 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
16612 ;; Contributions to this software is made under the terms of *both* these
16613 ;; licenses.
16614 (license (list license:asl2.0 license:bsd-2))))
16615
16616 (define-public python2-packaging
16617 (package-with-python2 python-packaging))
16618
16619 ;; Variants with minimal dependencies, for bootstrapping Pytest.
16620 (define-public python-packaging-bootstrap
16621 (hidden-package
16622 (package/inherit
16623 python-packaging
16624 (name "python-packaging-bootstrap")
16625 (native-inputs '())
16626 (propagated-inputs
16627 `(("python-pyparsing" ,python-pyparsing)))
16628 (arguments '(#:tests? #f)))))
16629
16630 (define-public python2-packaging-bootstrap
16631 (hidden-package
16632 (package/inherit
16633 python2-packaging
16634 (name "python2-packaging-bootstrap")
16635 (native-inputs '())
16636 (propagated-inputs
16637 `(("python-pyparsing" ,python2-pyparsing)))
16638 (arguments
16639 `(#:tests? #f
16640 ,@(package-arguments python2-packaging))))))
16641
16642 (define-public python-relatorio
16643 (package
16644 (name "python-relatorio")
16645 (version "0.8.0")
16646 (source
16647 (origin
16648 (method url-fetch)
16649 (uri (pypi-uri "relatorio" version))
16650 (sha256
16651 (base32
16652 "1na6hlhz1awi1hbjg1gyclq0khz42iz90wvdjw7mmj655788bpxx"))))
16653 (build-system python-build-system)
16654 (propagated-inputs
16655 `(("python-lxml" ,python-lxml)
16656 ("python-genshi" ,python-genshi)))
16657 (native-inputs
16658 `(("python-magic" ,python-magic)))
16659 (home-page "https://relatorio.tryton.org/")
16660 (synopsis "Templating library able to output ODT and PDF files")
16661 (description "Relatorio is a templating library which provides a way to
16662 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
16663 for more filetypes can be easily added by creating plugins for them.")
16664 (license license:gpl3+)))
16665
16666 (define-public python2-relatorio
16667 (package-with-python2 python-relatorio))
16668
16669 (define-public python-radon
16670 (package
16671 (name "python-radon")
16672 (version "4.1.0")
16673 (source
16674 (origin
16675 (method url-fetch)
16676 (uri (pypi-uri "radon" version))
16677 (sha256
16678 (base32
16679 "0vfxxzbnz5lxfvp0yxp35g6c8qqnnbhi4dm7shkm1d3d4192q22n"))))
16680 (build-system python-build-system)
16681 (arguments
16682 `(#:phases (modify-phases %standard-phases
16683 (replace 'check
16684 (lambda _
16685 (invoke "python" "radon/tests/run.py"))))))
16686 (propagated-inputs
16687 `(("python-colorama" ,python-colorama)
16688 ("python-flake8-polyfill" ,python-flake8-polyfill)
16689 ("python-mando" ,python-mando)))
16690 (native-inputs
16691 `(("python-pytest" ,python-pytest)
16692 ("python-pytest-mock" ,python-pytest-mock)))
16693 (home-page "https://radon.readthedocs.org/")
16694 (synopsis "Code Metrics in Python")
16695 (description "Radon is a Python tool which computes various code metrics.
16696 Supported metrics are:
16697 @itemize @bullet
16698 @item raw metrics: SLOC, comment lines, blank lines, &c.
16699 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
16700 @item Halstead metrics (all of them)
16701 @item the Maintainability Index (a Visual Studio metric)
16702 @end itemize")
16703 (properties `((python2-variant . ,(delay python2-radon))))
16704 (license license:expat)))
16705
16706 (define-public python2-radon
16707 (let ((base (package-with-python2 (strip-python2-variant python-radon))))
16708 (package/inherit base
16709 (propagated-inputs
16710 `(("python-configparser" ,python2-configparser)
16711 ("python-future" ,python2-future)
16712 ,@(package-propagated-inputs base))))))
16713
16714 (define-public python-sure
16715 (package
16716 (name "python-sure")
16717 (version "1.4.11")
16718 (source
16719 (origin
16720 (method url-fetch)
16721 (uri (pypi-uri "sure" version))
16722 (sha256
16723 (base32
16724 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
16725 (build-system python-build-system)
16726 (propagated-inputs
16727 `(("python-mock" ,python-mock)
16728 ("python-six" ,python-six)))
16729 (native-inputs
16730 `(("python-nose" ,python-nose)))
16731 (home-page "https://github.com/gabrielfalcao/sure")
16732 (synopsis "Automated testing library in python for python")
16733 (description
16734 "Sure is a python library that leverages a DSL for writing assertions.
16735 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
16736 (license license:gpl3+)))
16737
16738 (define-public python2-sure
16739 (package-with-python2 python-sure))
16740
16741 (define-public python2-couleur
16742 ;; This package does not seem to support python3 at all, hence,
16743 ;; only the python2 variant definition is provided.
16744 (package
16745 (name "python2-couleur")
16746 (version "0.6.2")
16747 (source
16748 (origin
16749 (method url-fetch)
16750 (uri (pypi-uri "couleur" version))
16751 (sha256
16752 (base32
16753 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
16754 (build-system python-build-system)
16755 (arguments
16756 `(#:python ,python-2))
16757 (home-page "https://github.com/gabrielfalcao/couleur")
16758 (synopsis
16759 "ANSI terminal tool for python, colored shell and other handy fancy features")
16760 (description
16761 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
16762 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
16763 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
16764 ;; https://github.com/gabrielfalcao/couleur/issues/11
16765 (license license:lgpl3+)))
16766
16767 (define-public python-misaka
16768 (package
16769 (name "python-misaka")
16770 (version "2.1.1")
16771 (source
16772 (origin
16773 (method url-fetch)
16774 (uri (pypi-uri "misaka" version))
16775 (sha256
16776 (base32
16777 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
16778 (build-system python-build-system)
16779 (arguments
16780 `(;; Line 37 of setup.py calls self.run_command('develop')
16781 ;; in the 'check' phase. This command seems to be trying
16782 ;; to write to
16783 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
16784 ;; for which it does not have the permission to write.
16785 #:tests? #f))
16786 (propagated-inputs
16787 `(("python-cffi" ,python-cffi)))
16788 (home-page "https://github.com/FSX/misaka")
16789 (synopsis "Python binding for Hoedown")
16790 (description
16791 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
16792 library written in C. It features a fast HTML renderer and functionality to make custom
16793 renderers (e.g. man pages or LaTeX).")
16794 (license license:expat)))
16795
16796 (define-public python2-misaka
16797 (package-with-python2 python-misaka))
16798
16799 (define-public python2-steadymark
16800 ;; This is forced into being a python2 only variant
16801 ;; due to its dependence on couleur that has no support
16802 ;; for python3
16803 (package
16804 (name "python2-steadymark")
16805 (version "0.7.3")
16806 (source
16807 (origin
16808 (method url-fetch)
16809 (uri (pypi-uri "steadymark" version))
16810 (sha256
16811 (base32
16812 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
16813 (build-system python-build-system)
16814 (native-inputs
16815 `(("python-couleur" ,python2-couleur)
16816 ("python-sure" ,python2-sure)
16817 ("python-misaka" ,python2-misaka)))
16818 (arguments
16819 `(#:python ,python-2
16820 #:phases
16821 (modify-phases %standard-phases
16822 (add-before 'build 'patch-setup-py
16823 (lambda _
16824 ;; Update requirements from dependency==version
16825 ;; to dependency>=version
16826 (substitute* "setup.py"
16827 (("==") ">="))
16828 #t)))))
16829 (home-page "https://github.com/gabrielfalcao/steadymark")
16830 (synopsis "Markdown-based test runner for python")
16831 (description
16832 "@code{Steadymark} allows documentation to be written in github-flavoured
16833 markdown. The documentation may contain snippets of code surrounded by python
16834 code blocks and @code{Steadymark} will find these snippets and run them, making
16835 sure that there are no old malfunctional examples in the documentation examples.")
16836 (license license:expat)))
16837
16838 (define-public python-jsonpointer
16839 (package
16840 (name "python-jsonpointer")
16841 (version "1.10")
16842 (source
16843 (origin
16844 (method url-fetch)
16845 (uri (pypi-uri "jsonpointer" version))
16846 (sha256
16847 (base32
16848 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
16849 (build-system python-build-system)
16850 (home-page "https://github.com/stefankoegl/python-json-pointer")
16851 (synopsis "Identify specific nodes in a JSON document")
16852 (description "@code{jsonpointer} allows you to access specific nodes
16853 by path in a JSON document (see RFC 6901).")
16854 (license license:bsd-3)))
16855
16856 (define-public python2-jsonpointer
16857 (package-with-python2 python-jsonpointer))
16858
16859 (define-public python-jsonpatch
16860 (package
16861 (name "python-jsonpatch")
16862 (version "1.16")
16863 (source
16864 (origin
16865 (method git-fetch)
16866 ;; pypi version lacks tests.js
16867 (uri (git-reference
16868 (url "https://github.com/stefankoegl/python-json-patch")
16869 (commit (string-append "v" version))))
16870 (file-name (git-file-name name version))
16871 (sha256
16872 (base32
16873 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
16874 (build-system python-build-system)
16875 (propagated-inputs
16876 `(("python-jsonpointer" ,python-jsonpointer)))
16877 (home-page "https://github.com/stefankoegl/python-json-patch")
16878 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
16879 (description "@code{jsonpatch} is a library and program that allows
16880 applying JSON Patches according to RFC 6902.")
16881 (license license:bsd-3)))
16882
16883 (define-public python2-jsonpatch
16884 (package-with-python2 python-jsonpatch))
16885
16886 (define-public python-jsonpatch-0.4
16887 (package (inherit python-jsonpatch)
16888 (name "python-jsonpatch")
16889 (version "0.4")
16890 (source
16891 (origin
16892 (method git-fetch)
16893 (uri (git-reference
16894 (url "https://github.com/stefankoegl/python-json-patch")
16895 (commit (string-append "v" version))))
16896 (file-name (git-file-name name version))
16897 (sha256
16898 (base32
16899 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
16900
16901 (define-public python2-jsonpatch-0.4
16902 (package-with-python2 python-jsonpatch-0.4))
16903
16904 (define-public python-rfc3986
16905 (package
16906 (name "python-rfc3986")
16907 (version "1.4.0")
16908 (source (origin
16909 (method url-fetch)
16910 (uri (pypi-uri "rfc3986" version))
16911 (sha256
16912 (base32
16913 "17dvx15m3r49bmif5zlli8kzjd6bys6psixzbp14sd5367d9h8qi"))))
16914 (build-system python-build-system)
16915 (arguments
16916 `(#:modules ((guix build utils)
16917 (guix build python-build-system)
16918 (ice-9 ftw)
16919 (srfi srfi-1)
16920 (srfi srfi-26))
16921 #:phases
16922 (modify-phases %standard-phases
16923 (replace 'check
16924 (lambda _
16925 (let ((cwd (getcwd)))
16926 (setenv "PYTHONPATH"
16927 (string-append cwd "/build/"
16928 (find (cut string-prefix? "lib" <>)
16929 (scandir (string-append cwd "/build")))
16930 ":"
16931 (getenv "PYTHONPATH")))
16932 (invoke "pytest" "-v")))))))
16933 (native-inputs
16934 `(("python-pytest" ,python-pytest)))
16935 (home-page "https://rfc3986.readthedocs.io/")
16936 (synopsis "Parse and validate URI references")
16937 (description
16938 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
16939 validation and authority parsing. This module also supports RFC@tie{}6874
16940 which adds support for zone identifiers to IPv6 addresses.")
16941 (license license:asl2.0)))
16942
16943 (define-public python2-rfc3986
16944 (package-with-python2 python-rfc3986))
16945
16946 (define-public python-rfc3987
16947 (package
16948 (name "python-rfc3987")
16949 (version "1.3.7")
16950 (source
16951 (origin
16952 (method url-fetch)
16953 (uri (pypi-uri "rfc3987" version))
16954 (sha256
16955 (base32
16956 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
16957 (build-system python-build-system)
16958 (home-page "https://pypi.org/project/rfc3987/")
16959 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
16960 (description "@code{rfc3987} provides routines for parsing and
16961 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
16962 (license license:gpl3+)))
16963
16964 (define-public python2-rfc3987
16965 (package-with-python2 python-rfc3987))
16966
16967 ;; The latest commit contains fixes for building with both python3 and python2.
16968 (define-public python-rfc6555
16969 (let ((commit "1a181b432312731f6742a5eb558dae4761d32361")
16970 (revision "1"))
16971 (package
16972 (name "python-rfc6555")
16973 (version (git-version "0.0.0" revision commit))
16974 (source (origin
16975 (method git-fetch)
16976 (uri (git-reference
16977 (url "https://github.com/sethmlarson/rfc6555")
16978 (commit commit)))
16979 (file-name (git-file-name name version))
16980 (sha256
16981 (base32
16982 "1bxl17j9vs69cshcqnlwamr03hnykxqnwz3mdgi6x3s2k4q18npp"))))
16983 (build-system python-build-system)
16984 (arguments
16985 '(#:phases
16986 (modify-phases %standard-phases
16987 (replace 'check
16988 (lambda* (#:key tests? #:allow-other-keys)
16989 (if tests?
16990 ;; Other tests require network access.
16991 (invoke "pytest" "tests/test_ipv6.py")
16992 #t))))))
16993 (native-inputs
16994 `(("python-pytest" ,python-pytest)))
16995 (home-page "https://pypi.org/project/rfc6555/")
16996 (synopsis "Python implementation of RFC 6555")
16997 (description
16998 "Python implementation of the Happy Eyeballs Algorithm described in RFC
16999 6555. Provided with a single file and dead-simple API to allow easy vendoring
17000 and integration into other projects.")
17001 (properties `((python2-variant . ,(delay python2-rfc6555))))
17002 (license license:asl2.0))))
17003
17004 (define-public python2-rfc6555
17005 (let ((base (package-with-python2
17006 (strip-python2-variant python-rfc6555))))
17007 (package/inherit base
17008 (propagated-inputs
17009 `(("python2-selectors2" ,python2-selectors2))))))
17010
17011 (define-public python-bagit
17012 (package
17013 (name "python-bagit")
17014 (version "1.7.0")
17015 (source
17016 (origin
17017 (method url-fetch)
17018 (uri (pypi-uri "bagit" version))
17019 (sha256
17020 (base32
17021 "1m6y04qmig0b5hzb35lnaw3d2yfydb7alyr1579yblvgs3da6j7j"))))
17022 (build-system python-build-system)
17023 (native-inputs
17024 `(("python-setuptools-scm" ,python-setuptools-scm)
17025 ("python-coverage" ,python-coverage)
17026 ("python-mock" ,python-mock)))
17027 (home-page "https://libraryofcongress.github.io/bagit-python/")
17028 (synopsis "Create and validate BagIt packages")
17029 (description "Bagit is a Python library and command line utility for working
17030 with BagIt style packages. BagIt is a minimalist packaging format for digital
17031 preservation.")
17032 (license license:cc0)))
17033
17034 (define-public python-prov
17035 (package
17036 (name "python-prov")
17037 (version "2.0.0")
17038 (source
17039 (origin
17040 (method url-fetch)
17041 (uri (pypi-uri "prov" version))
17042 (sha256
17043 (base32
17044 "1vi2fj31vygfcqrkimdmk52q2ldw08g9fn4v4zlgdfgcjlhqyhxn"))))
17045 (build-system python-build-system)
17046 (propagated-inputs
17047 `(("python-dateutil" ,python-dateutil)
17048 ("python-lxml" ,python-lxml)
17049 ("python-networkx" ,python-networkx)
17050 ("python-rdflib" ,python-rdflib)))
17051 (native-inputs
17052 `(("graphviz" ,graphviz)
17053 ("python-pydot" ,python-pydot)))
17054 (home-page "https://github.com/trungdong/prov")
17055 (synopsis
17056 "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)")
17057 (description
17058 "This package provides a library for W3C Provenance Data Model supporting
17059 PROV-O (RDF), PROV-XML, PROV-JSON import/export.")
17060 (license license:expat)))
17061
17062 (define-public python-arcp
17063 (package
17064 (name "python-arcp")
17065 (version "0.2.1")
17066 (source
17067 (origin
17068 (method url-fetch)
17069 (uri (pypi-uri "arcp" version))
17070 (sha256
17071 (base32
17072 "1p8mfyjssa6pbn5dp6pyzv9yy6kwm2rz5jn2kjbq5vy9f9wsq5sw"))))
17073 (build-system python-build-system)
17074 (native-inputs
17075 `(("python-pytest" ,python-pytest)))
17076 (home-page "http://arcp.readthedocs.io/")
17077 (synopsis
17078 "Archive and Package URI parser and generator")
17079 (description
17080 "@acronym{arcp, Archive and Package} provides functions for creating
17081 @code{arcp_} URIs, which can be used for identifying or parsing hypermedia files
17082 packaged in an archive or package, like a ZIP file. arcp URIs can be used to
17083 consume or reference hypermedia resources bundled inside a file archive or an
17084 application package, as well as to resolve URIs for archive resources within a
17085 programmatic framework. This URI scheme provides mechanisms to generate a
17086 unique base URI to represent the root of the archive, so that relative URI
17087 references in a bundled resource can be resolved within the archive without
17088 having to extract the archive content on the local file system. An arcp URI can
17089 be used for purposes of isolation (e.g. when consuming multiple archives),
17090 security constraints (avoiding \"climb out\" from the archive), or for
17091 externally identiyfing sub-resources referenced by hypermedia formats.")
17092 (license license:asl2.0)))
17093
17094 (define-public python-shellescape
17095 (package
17096 (name "python-shellescape")
17097 (version "3.8.1")
17098 (source
17099 (origin
17100 (method git-fetch)
17101 (uri (git-reference
17102 (url "https://github.com/chrissimpkins/shellescape")
17103 (commit (string-append "v" version))))
17104 (file-name (git-file-name name version))
17105 (sha256
17106 (base32
17107 "0wzccxk139qx1lb2g70f5b2yh9zq15nr2mgvqdbfabg5zm0vf1qw"))))
17108 (build-system python-build-system)
17109 (arguments
17110 '(#:phases
17111 (modify-phases %standard-phases
17112 (replace 'check
17113 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
17114 (when tests?
17115 (add-installed-pythonpath inputs outputs)
17116 (invoke "python" "tests/test_shellescape.py"))
17117 #t)))))
17118 (native-inputs
17119 `(("python-pytest" ,python-pytest)))
17120 (home-page "https://github.com/chrissimpkins/shellescape")
17121 (synopsis
17122 "Shell escape a string to safely use it as a token in a shell command")
17123 (description
17124 "The shellescape Python module defines the @code{shellescape.quote()}
17125 function that returns a shell-escaped version of a Python string. This is a
17126 backport of the @code{shlex.quote()} function from Python 3.8 that makes it
17127 accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.")
17128 (license license:expat)))
17129
17130 (define-public python-validators
17131 (package
17132 (name "python-validators")
17133 (version "0.14.2")
17134 (source (origin
17135 (method url-fetch)
17136 (uri (pypi-uri "validators" version))
17137 (sha256
17138 (base32
17139 "024m15j33szd0v8k5l4ccish6n0b4knq81gmb4fq25ynwyyyd4mi"))))
17140 (build-system python-build-system)
17141 (arguments
17142 '(#:phases (modify-phases %standard-phases
17143 (replace 'check
17144 (lambda _
17145 (invoke "pytest" "-vv"))))))
17146 (propagated-inputs
17147 `(("python-decorator" ,python-decorator)
17148 ("python-six" ,python-six)))
17149 (native-inputs
17150 `(("python-flake8" ,python-flake8)
17151 ("python-isort" ,python-isort)
17152 ("python-pytest" ,python-pytest)))
17153 (home-page "https://github.com/kvesteri/validators")
17154 (synopsis "Data validation library")
17155 (description
17156 "This package contains validators for different things such as email
17157 addresses, IP addresses, URLs, hashes and more. It has been designed to
17158 be easy to use and not require defining a schema or form just to validate
17159 some input.")
17160 (license license:expat)))
17161
17162 (define-public python2-validators
17163 (package-with-python2 python-validators))
17164
17165 (define-public python-validate-email
17166 (package
17167 (name "python-validate-email")
17168 (version "1.3")
17169 (source
17170 (origin
17171 (method url-fetch)
17172 (uri (pypi-uri "validate_email" version))
17173 (sha256
17174 (base32
17175 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
17176 (build-system python-build-system)
17177 (home-page "https://github.com/syrusakbary/validate_email")
17178 (synopsis "Verifies if an email address is valid and really exists")
17179 (description "@code{validate_email} can be used to verify if an email
17180 address is valid and really exists.")
17181 (license license:lgpl3+)))
17182
17183 (define-public python2-validate-email
17184 (package-with-python2 python-validate-email))
17185
17186 (define-public python-flex
17187 (package
17188 (name "python-flex")
17189 (version "6.10.0")
17190 (source
17191 (origin
17192 (method url-fetch)
17193 (uri (pypi-uri "flex" version))
17194 (sha256
17195 (base32
17196 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
17197 (build-system python-build-system)
17198 (propagated-inputs
17199 `(("python-click" ,python-click)
17200 ("python-iso8601" ,python-iso8601)
17201 ("python-jsonpointer" ,python-jsonpointer)
17202 ("python-pyyaml" ,python-pyyaml)
17203 ("python-requests" ,python-requests)
17204 ("python-rfc3987" ,python-rfc3987)
17205 ("python-six" ,python-six)
17206 ("python-validate-email" ,python-validate-email)))
17207 (home-page "https://github.com/pipermerriam/flex")
17208 (synopsis "Validates Swagger schemata")
17209 (description "@code{flex} can be used to validate Swagger schemata.")
17210 (license license:bsd-3)))
17211
17212 (define-public python2-flex
17213 (package-with-python2 python-flex))
17214
17215 (define-public python-marshmallow
17216 (package
17217 (name "python-marshmallow")
17218 (version "3.9.1")
17219 (source
17220 (origin
17221 (method url-fetch)
17222 (uri (pypi-uri "marshmallow" version))
17223 (sha256
17224 (base32
17225 "0kizhh3mnhpa08wfnsv1gagy22bpxzxszgbiylkhpz1d8qvwrykk"))))
17226 (build-system python-build-system)
17227 (propagated-inputs
17228 `(("python-dateutil" ,python-dateutil)
17229 ("python-simplejson" ,python-simplejson)))
17230 (native-inputs
17231 `(("python-pytest" ,python-pytest)
17232 ("python-pytz" ,python-pytz)))
17233 (home-page "https://github.com/marshmallow-code/marshmallow")
17234 (synopsis "Convert complex datatypes to and from native
17235 Python datatypes.")
17236 (description "@code{marshmallow} provides a library for converting
17237 complex datatypes to and from native Python datatypes.")
17238 (license license:expat)))
17239
17240 (define-public python-apispec
17241 (package
17242 (name "python-apispec")
17243 (version "4.0.0")
17244 (source
17245 (origin
17246 (method url-fetch)
17247 (uri (pypi-uri "apispec" version))
17248 (sha256
17249 (base32
17250 "12n4w5zkn4drcn8izq68vmixmqvz6abviqkdn4ip0kaax3jjh3in"))))
17251 (build-system python-build-system)
17252 (arguments
17253 '(#:phases (modify-phases %standard-phases
17254 (add-after 'unpack 'disable-prance-tests
17255 (lambda _
17256 ;; Disable validation tests since they require the
17257 ;; optional 'prance' library which is not yet in Guix.
17258 (substitute* "tests/test_ext_marshmallow_openapi.py"
17259 (("def test_openapi_tools_validate.*" all)
17260 (string-append "@pytest.mark.xfail\n" all)))))
17261 (replace 'check
17262 (lambda _
17263 (setenv "PYTHONPATH"
17264 (string-append "./build/lib:"
17265 (getenv "PYTHONPATH")))
17266 (invoke "pytest" "-vv"))))))
17267 (propagated-inputs
17268 `(("python-pyyaml" ,python-pyyaml)))
17269 (native-inputs
17270 `(("python-pytest" ,python-pytest)
17271 ("python-marshmallow" ,python-marshmallow)))
17272 (home-page "https://github.com/marshmallow-code/apispec")
17273 (synopsis "Swagger/OpenAPI specification generator")
17274 (description "@code{python-apispec} is a pluggable API specification
17275 generator. It currently supports the OpenAPI specification, formerly known
17276 as Swagger.")
17277 (license license:expat)))
17278
17279 (define-public python-flasgger
17280 (package
17281 (name "python-flasgger")
17282 (version "0.6.3")
17283 (source
17284 (origin
17285 (method git-fetch)
17286 (uri (git-reference
17287 (url "https://github.com/rochacbruno/flasgger")
17288 (commit version)))
17289 (file-name (git-file-name name version))
17290 (sha256
17291 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
17292 (build-system python-build-system)
17293 (arguments
17294 `(#:phases
17295 (modify-phases %standard-phases
17296 (replace 'check
17297 (lambda* (#:key inputs outputs #:allow-other-keys)
17298 (substitute* "Makefile"
17299 (("flake8 flasgger --ignore=F403")
17300 "flake8 flasgger --ignore=E731,F403"))
17301 (setenv "PYTHONPATH" (string-append (getcwd)
17302 ":"
17303 (getenv "PYTHONPATH")))
17304 (invoke "py.test"))))))
17305 (propagated-inputs
17306 `(("python-flask" ,python-flask)
17307 ("python-pyyaml" ,python-pyyaml)
17308 ("python-jsonschema" ,python-jsonschema)
17309 ("python-mistune" ,python-mistune)
17310 ("python-six" ,python-six)))
17311 (native-inputs
17312 `(("python-decorator" ,python-decorator)
17313 ("python-flake8" ,python-flake8)
17314 ("python-flask-restful" ,python-flask-restful)
17315 ("python-flex" ,python-flex)
17316 ("python-pytest" ,python-pytest)
17317 ("python-pytest-cov" ,python-pytest-cov)
17318 ("python-marshmallow" ,python-marshmallow)
17319 ("python-apispec" ,python-apispec)))
17320 (home-page "https://github.com/rochacbruno/flasgger/")
17321 (synopsis "Extract Swagger specs from your Flask project")
17322 (description "@code{python-flasgger} allows extracting Swagger specs
17323 from your Flask project. It is a fork of Flask-Swagger.")
17324 (license license:expat)))
17325
17326 (define-public python-swagger-spec-validator
17327 (package
17328 (name "python-swagger-spec-validator")
17329 (version "2.4.3")
17330 (source
17331 (origin
17332 (method url-fetch)
17333 (uri (pypi-uri "swagger-spec-validator" version))
17334 (sha256
17335 (base32
17336 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
17337 (build-system python-build-system)
17338 (propagated-inputs
17339 `(("python-jsonschema" ,python-jsonschema)
17340 ("python-pyyaml" ,python-pyyaml)
17341 ("python-six" ,python-six)))
17342 (home-page
17343 "https://github.com/Yelp/swagger_spec_validator")
17344 (synopsis "Validation of Swagger specifications")
17345 (description "@code{swagger_spec_validator} provides a library for
17346 validating Swagger API specifications.")
17347 (license license:asl2.0)))
17348
17349 (define-public python2-swagger-spec-validator
17350 (package-with-python2 python-swagger-spec-validator))
17351
17352 (define-public python-apache-libcloud
17353 (package
17354 (name "python-apache-libcloud")
17355 (version "3.1.0")
17356 (source
17357 (origin
17358 (method url-fetch)
17359 (uri (pypi-uri "apache-libcloud" version))
17360 (sha256
17361 (base32
17362 "1b28j265kvibgxrgxx0gwfm6cmv252c8ph1j2vb0cpms8ph5if5v"))))
17363 (build-system python-build-system)
17364 (arguments
17365 `(#:phases
17366 (modify-phases %standard-phases
17367 (add-after 'unpack 'patch-ssh
17368 (lambda* (#:key inputs #:allow-other-keys)
17369 (substitute* "libcloud/compute/ssh.py"
17370 (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
17371 "/bin/ssh" "'")))
17372 #t))
17373 (add-after 'unpack 'patch-tests
17374 (lambda _
17375 (substitute* "libcloud/test/compute/test_ssh_client.py"
17376 (("class ShellOutSSHClientTests")
17377 "@unittest.skip(\"Guix container doesn't have ssh service\")
17378 class ShellOutSSHClientTests"))
17379 #t))
17380 (add-before 'check 'copy-secret
17381 (lambda _
17382 (copy-file "libcloud/test/secrets.py-dist"
17383 "libcloud/test/secrets.py")
17384 #t)))))
17385 (inputs
17386 `(("openssh" ,openssh)))
17387 (propagated-inputs
17388 `(("python-paramiko" ,python-paramiko)
17389 ("python-requests" ,python-requests)))
17390 (native-inputs
17391 `(("python-lockfile" ,python-lockfile)
17392 ("python-mock" ,python-mock)
17393 ("python-pytest" ,python-pytest)
17394 ("python-pytest-runner" ,python-pytest-runner)
17395 ("python-requests-mock" ,python-requests-mock)))
17396 (home-page "https://libcloud.apache.org/")
17397 (synopsis "Unified Cloud API")
17398 (description "@code{libcloud} is a Python library for interacting with
17399 many of the popular cloud service providers using a unified API.")
17400 (license license:asl2.0)))
17401
17402 (define-public python-smmap
17403 (package
17404 (name "python-smmap")
17405 (version "3.0.1")
17406 (source
17407 (origin
17408 (method url-fetch)
17409 (uri (pypi-uri "smmap" version))
17410 (sha256
17411 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
17412 (build-system python-build-system)
17413 (native-inputs
17414 `(("python-nosexcover" ,python-nosexcover)))
17415 (home-page "https://github.com/Byron/smmap")
17416 (synopsis "Python sliding window memory map manager")
17417 (description "@code{smmap} is a pure Python implementation of a sliding
17418 window memory map manager.")
17419 (license license:bsd-3)))
17420
17421 (define-public python-smmap2
17422 (deprecated-package "python-smmap2" python-smmap))
17423
17424 (define-public python2-smmap
17425 (package-with-python2 python-smmap))
17426
17427 (define-public python2-smmap2
17428 (deprecated-package "python2-smmap2" python2-smmap))
17429
17430 (define-public python-regex
17431 (package
17432 (name "python-regex")
17433 (version "2020.6.8")
17434 (source (origin
17435 (method url-fetch)
17436 (uri (pypi-uri "regex" version))
17437 (sha256
17438 (base32
17439 "1b3k0zi1pd99q5mk7ri7vcx2y1mq5inm9hk8dryqyhrpkmh4xdp9"))))
17440 (build-system python-build-system)
17441 (arguments
17442 '(#:phases
17443 (modify-phases %standard-phases
17444 (replace 'check
17445 (lambda* (#:key inputs outputs #:allow-other-keys)
17446 (add-installed-pythonpath inputs outputs)
17447 (invoke "python" "-c"
17448 "from regex.test_regex import test_main; test_main()"))))))
17449 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
17450 (synopsis "Alternative regular expression module")
17451 (description "This regular expression implementation is backwards-
17452 compatible with the standard @code{re} module, but offers additional
17453 functionality like full case-folding for case-insensitive matches in Unicode.")
17454 (license license:psfl)))
17455
17456 (define-public python2-regex
17457 (package-with-python2 python-regex))
17458
17459 (define-public python-pyopengl
17460 (package
17461 (name "python-pyopengl")
17462 (version "3.1.5")
17463 (source
17464 (origin
17465 (method url-fetch)
17466 (uri (pypi-uri "PyOpenGL" version))
17467 (sha256
17468 (base32
17469 "091lp9bpqi8yf1nmyg19xmvw611lrzq2q94cl1k5gnlh0c6vl1s1"))))
17470 (build-system python-build-system)
17471 (inputs
17472 `(("mesa" ,mesa)
17473 ("freeglut" ,freeglut)
17474 ("glu" ,glu)))
17475 (arguments
17476 `(#:tests? #f ; Tests fail: AttributeError: 'GLXPlatform' object has no
17477 ;attribute 'OSMesa'
17478 #:phases
17479 (modify-phases %standard-phases
17480 (add-before 'build 'fix-paths
17481 (lambda* (#:key inputs outputs #:allow-other-keys)
17482 (substitute* '("OpenGL/platform/ctypesloader.py")
17483 (("filenames_to_try = \\[\\]") "filenames_to_try = [name]"))
17484 (substitute* '("OpenGL/platform/glx.py" "tests/check_glut_load.py")
17485 (("'GL'")
17486 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGL.so'"))
17487 (("'GLU'")
17488 (string-append "'" (assoc-ref inputs "glu") "/lib/libGLU.so'"))
17489 (("'glut',")
17490 (string-append "'" (assoc-ref inputs "freeglut") "/lib/libglut.so',"))
17491 (("'GLESv1_CM'")
17492 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv1_CM.so'"))
17493 (("'GLESv2'")
17494 (string-append "'" (assoc-ref inputs "mesa") "/lib/libGLESv2.so'")))
17495 ;; Not providing libgle. It seems to be very old.
17496 #t)))))
17497 (home-page "http://pyopengl.sourceforge.net")
17498 (synopsis "Standard OpenGL bindings for Python")
17499 (description
17500 "PyOpenGL is the most common cross platform Python binding to OpenGL and
17501 related APIs. The binding is created using the standard @code{ctypes}
17502 library.")
17503 (license license:bsd-3)))
17504
17505 (define-public python-pyopengl-accelerate
17506 (package
17507 (inherit python-pyopengl)
17508 (name "python-pyopengl-accelerate")
17509 (version "3.1.5")
17510 (source
17511 (origin
17512 (method url-fetch)
17513 (uri (pypi-uri "PyOpenGL-accelerate" version))
17514 (sha256
17515 (base32
17516 "01iggy5jwxv7lxnj51zbmlbhag9wcb7dvrbwgi97i90n0a5m3r8j"))))
17517 (inputs
17518 `(("mesa" ,mesa)
17519 ("python-numpy" ,python-numpy))) ; for cython module
17520 ; numpy_formathandler, thus not propagated
17521 (arguments
17522 `(#:tests? #f
17523 #:phases
17524 (modify-phases %standard-phases
17525 (delete 'fix-paths))))
17526 (synopsis "Acceleration code for PyOpenGL")
17527 (description
17528 "This is the Cython-coded accelerator module for PyOpenGL.")))
17529
17530 (define-public python-rencode
17531 (package
17532 (name "python-rencode")
17533 (version "1.0.5")
17534 (source
17535 (origin
17536 (method url-fetch)
17537 (uri (pypi-uri "rencode" version))
17538 (sha256
17539 (base32
17540 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
17541 (build-system python-build-system)
17542 (arguments
17543 `(#:phases
17544 (modify-phases %standard-phases
17545 (add-before 'check 'delete-bogus-test
17546 ;; This test requires /home/aresch/Downloads, which is not provided by
17547 ;; the build environment.
17548 (lambda _
17549 (delete-file "rencode/t.py")
17550 #t)))))
17551 (native-inputs `(("pkg-config" ,pkg-config)
17552 ("python-cython" ,python-cython)))
17553 (home-page "https://github.com/aresch/rencode")
17554 (synopsis "Serialization of heterogeneous data structures")
17555 (description
17556 "The @code{rencode} module is a data structure serialization library,
17557 similar to @code{bencode} from the BitTorrent project. For complex,
17558 heterogeneous data structures with many small elements, r-encoding stake up
17559 significantly less space than b-encodings. This version of rencode is a
17560 complete rewrite in Cython to attempt to increase the performance over the
17561 pure Python module.")
17562 (license license:bsd-3)))
17563
17564 (define-public python2-rencode
17565 (package-with-python2 python-rencode))
17566
17567 (define-public python-xenon
17568 (package
17569 (name "python-xenon")
17570 (version "0.7.0")
17571 (source
17572 (origin
17573 (method url-fetch)
17574 (uri (pypi-uri "xenon" version))
17575 (sha256
17576 (base32
17577 "0nv207ql2wmh9q62503np056c4vf1c1hlsi5cvv5p5kx574k6r2y"))))
17578 (build-system python-build-system)
17579 (native-inputs
17580 `(("python-pyyaml" ,python-pyyaml)
17581 ("python-radon" ,python-radon)
17582 ("python-requests" ,python-requests)
17583 ("python-flake8" ,python-flake8)
17584 ("python-tox" ,python-tox)))
17585 (arguments
17586 `(#:tests? #f ;test suite not shipped with the PyPI archive
17587 #:phases
17588 (modify-phases %standard-phases
17589 (add-before 'build 'patch-test-requirements
17590 (lambda _
17591 ;; Remove httpretty dependency for tests.
17592 (substitute* "setup.py"
17593 (("httpretty") ""))
17594 #t)))))
17595 (home-page "https://xenon.readthedocs.org/")
17596 (synopsis "Monitor code metrics for Python on your CI server")
17597 (description
17598 "Xenon is a monitoring tool based on Radon. It monitors code complexity.
17599 Ideally, @code{xenon} is run every time code is committed. Through command
17600 line options, various thresholds can be set for the complexity of code. It
17601 will fail (i.e. it will exit with a non-zero exit code) when any of these
17602 requirements is not met.")
17603 (license license:expat)))
17604
17605 (define-public python-pysocks
17606 (package
17607 (name "python-pysocks")
17608 (version "1.7.1")
17609 (source
17610 (origin
17611 (method url-fetch)
17612 (uri (pypi-uri "PySocks" version))
17613 (sha256
17614 (base32
17615 "184sg65mbmih6ljblfsxcmq5js5l7dj3gpn618w9q5dy3rbh921z"))))
17616 (build-system python-build-system)
17617 (arguments `(#:tests? #f))
17618 (home-page "https://github.com/Anorov/PySocks")
17619 (synopsis "SOCKS client module")
17620 (description "@code{pysocks} is an updated and semi-actively maintained
17621 version of @code{SocksiPy} with bug fixes and extra features.")
17622 (license license:bsd-3)))
17623
17624 (define-public python2-pysocks
17625 (package-with-python2 python-pysocks))
17626
17627 (define-public python-pydiff
17628 (package
17629 (name "python-pydiff")
17630 (version "0.2")
17631 (source
17632 (origin
17633 (method url-fetch)
17634 (uri (pypi-uri "pydiff" version))
17635 (sha256
17636 (base32
17637 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
17638 (build-system python-build-system)
17639 (home-page "https://github.com/myint/pydiff")
17640 (synopsis "Library to diff two Python files at the bytecode level")
17641 (description
17642 "@code{pydiff} makes it easy to look for actual code changes while
17643 ignoring formatting changes.")
17644 (license license:expat)))
17645
17646 (define-public python2-pydiff
17647 (package-with-python2 python-pydiff))
17648
17649 (define-public python-pydub
17650 (package
17651 (name "python-pydub")
17652 (version "0.24.1")
17653 (source
17654 (origin
17655 (method url-fetch)
17656 (uri (pypi-uri "pydub" version))
17657 (sha256
17658 (base32
17659 "0sfwfq7yjv4bl3yqbmizszscafvwf4zr40hzbsy7rclvzyznh333"))))
17660 (build-system python-build-system)
17661 (arguments
17662 `(#:phases
17663 (modify-phases %standard-phases
17664 (add-after 'unpack 'fix-ffmpeg-path
17665 (lambda* (#:key inputs #:allow-other-keys)
17666 (let ((ffmpeg (assoc-ref inputs "ffmpeg")))
17667 (substitute* '("pydub/utils.py")
17668 (("return \"ffmpeg\"")
17669 (string-append "return \"" ffmpeg "/bin/ffmpeg\""))
17670 (("return \"ffplay\"")
17671 (string-append "return \"" ffmpeg "/bin/ffplay\""))
17672 (("return \"ffprobe\"")
17673 (string-append "return \"" ffmpeg "/bin/ffprobe\""))
17674 (("warn\\(\"Couldn't find ff") "# warn\\(\"Couldn't find ff"))
17675 #t))))))
17676 (home-page "https://pydub.com")
17677 (inputs
17678 `(("ffmpeg" ,ffmpeg)))
17679 (propagated-inputs
17680 `(("python-scipy" ,python-scipy)))
17681 (synopsis "Manipulate audio with a high level interface in Python")
17682 (description
17683 "@code{pydub} makes it easy to manipulate audio in Python. It relies on
17684 @code{ffmpeg} to open various audio formats.")
17685 (license license:expat))) ; MIT license
17686
17687 (define-public python-tqdm
17688 (package
17689 (name "python-tqdm")
17690 (version "4.43.0")
17691 (source
17692 (origin
17693 (method url-fetch)
17694 (uri (pypi-uri "tqdm" version))
17695 (sha256
17696 (base32
17697 "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
17698 (build-system python-build-system)
17699 (arguments
17700 '(#:phases (modify-phases %standard-phases
17701 (replace 'check
17702 (lambda* (#:key inputs outputs #:allow-other-keys)
17703 (add-installed-pythonpath inputs outputs)
17704 ;; This invokation is taken from tox.ini.
17705 (invoke "nosetests" "--ignore-files=\"test_perf.py\""
17706 "-d" "-v" "tqdm/"))))))
17707 (native-inputs
17708 `(("python-nose" ,python-nose)))
17709 (home-page "https://github.com/tqdm/tqdm")
17710 (synopsis "Fast, extensible progress meter")
17711 (description
17712 "Make loops show a progress bar on the console by just wrapping any
17713 iterable with @code{|tqdm(iterable)|}. Offers many options to define
17714 design and layout.")
17715 (license (list license:mpl2.0 license:expat))))
17716
17717 (define-public python2-tqdm
17718 (package-with-python2 python-tqdm))
17719
17720 (define-public python-pkginfo
17721 (package
17722 (name "python-pkginfo")
17723 (version "1.7.0")
17724 (source
17725 (origin
17726 (method url-fetch)
17727 (uri (pypi-uri "pkginfo" version))
17728 (sha256
17729 (base32
17730 "1d1xn1xmfvz0jr3pj8irdwnwby3r13g0r2gwklr1q5y68p5p16h2"))))
17731 (build-system python-build-system)
17732 (arguments
17733 `(#:phases
17734 (modify-phases %standard-phases
17735 (add-before 'check 'patch-tests
17736 (lambda _
17737 (substitute* "pkginfo/tests/test_installed.py"
17738 (("test_ctor_w_package_no_PKG_INFO")
17739 "_test_ctor_w_package_no_PKG_INFO"))
17740 #t)))))
17741 (home-page
17742 "https://code.launchpad.net/~tseaver/pkginfo/trunk")
17743 (synopsis
17744 "Query metadatdata from sdists, bdists, and installed packages")
17745 (description
17746 "API to query the distutils metadata written in @file{PKG-INFO} inside a
17747 source distriubtion (an sdist) or a binary distribution (e.g., created by
17748 running bdist_egg). It can also query the EGG-INFO directory of an installed
17749 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
17750 created by running @code{python setup.py develop}).")
17751 (license license:expat)))
17752
17753 (define-public python2-pkginfo
17754 (package-with-python2 python-pkginfo))
17755
17756 (define-public python-twine
17757 (package
17758 (name "python-twine")
17759 (version "1.15.0")
17760 (source
17761 (origin
17762 (method url-fetch)
17763 (uri (pypi-uri "twine" version))
17764 (sha256
17765 (base32 "11rpd653zcgzkq3sgwkzs3mpxl3r5rij59745ni84ikv8smjmlm3"))))
17766 (build-system python-build-system)
17767 (propagated-inputs
17768 `(("python-tqdm" ,python-tqdm)
17769 ("python-packaging" ,python-packaging)
17770 ("python-pkginfo" ,python-pkginfo)
17771 ("python-readme-renderer" ,python-readme-renderer)
17772 ("python-requests" ,python-requests)
17773 ("python-requests-toolbelt" ,python-requests-toolbelt)))
17774 (home-page "https://github.com/pypa/twine")
17775 (synopsis "Collection of utilities for interacting with PyPI")
17776 (description
17777 "@code{twine} currently supports registering projects and uploading
17778 distributions. It authenticates the user over HTTPS, allows them to pre-sign
17779 their files and supports any packaging format (including wheels).")
17780 (license license:asl2.0)))
17781
17782 (define-public python2-twine
17783 (package-with-python2 python-twine))
17784
17785 (define-public python-linecache2
17786 (package
17787 (name "python-linecache2")
17788 (version "1.0.0")
17789 (source
17790 (origin
17791 (method url-fetch)
17792 (uri (pypi-uri "linecache2" version))
17793 (sha256
17794 (base32
17795 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
17796 (build-system python-build-system)
17797 (arguments
17798 `(;; The tests depend on unittest2, and our version is a bit too old.
17799 #:tests? #f))
17800 (native-inputs
17801 `(("python-pbr" ,python-pbr-minimal)))
17802 (home-page
17803 "https://github.com/testing-cabal/linecache2")
17804 (synopsis "Backports of the linecache module")
17805 (description
17806 "The linecache module allows one to get any line from any file, while
17807 attempting to optimize internally, using a cache, the common case where many
17808 lines are read from a single file.")
17809 (license license:psfl)))
17810
17811 (define-public python2-linecache2
17812 (package-with-python2 python-linecache2))
17813
17814 (define-public python-traceback2
17815 (package
17816 (name "python-traceback2")
17817 (version "1.4.0")
17818 (source
17819 (origin
17820 (method url-fetch)
17821 (uri (pypi-uri "traceback2" version))
17822 (sha256
17823 (base32
17824 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
17825 (build-system python-build-system)
17826 (arguments
17827 `(;; python-traceback2 and python-unittest2 depend on one another.
17828 #:tests? #f))
17829 (native-inputs
17830 `(("python-pbr" ,python-pbr-minimal)))
17831 (propagated-inputs
17832 `(("python-linecache2" ,python-linecache2)))
17833 (home-page
17834 "https://github.com/testing-cabal/traceback2")
17835 (synopsis "Backports of the traceback module")
17836 (description
17837 "This module provides a standard interface to extract, format and print
17838 stack traces of Python programs. It exactly mimics the behavior of the Python
17839 interpreter when it prints a stack trace.")
17840 (license license:psfl)))
17841
17842 (define-public python2-traceback2
17843 (package-with-python2 python-traceback2))
17844
17845 (define-public python-ratelimiter
17846 (package
17847 (name "python-ratelimiter")
17848 (version "1.2.0")
17849 (source
17850 (origin
17851 (method url-fetch)
17852 (uri (pypi-uri "ratelimiter" version))
17853 (sha256
17854 (base32
17855 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
17856 (build-system python-build-system)
17857 (arguments
17858 '(#:tests? #f)) ; There are no tests in the pypi archive.
17859 (home-page "https://github.com/RazerM/ratelimiter")
17860 (synopsis "Simple rate limiting object")
17861 (description
17862 "The @code{ratelimiter} module ensures that an operation will not be
17863 executed more than a given number of times during a given period.")
17864 (license license:asl2.0)))
17865
17866 (define-public python2-ratelimiter
17867 (package-with-python2 python-ratelimiter))
17868
17869 (define-public python-dukpy
17870 (package
17871 (name "python-dukpy")
17872 (version "0.3")
17873 (source
17874 (origin
17875 (method git-fetch)
17876 (uri (git-reference
17877 (url "https://github.com/kovidgoyal/dukpy")
17878 (commit (string-append "v" version))))
17879 (file-name (git-file-name name version))
17880 (sha256
17881 (base32 "13h21nqzasv4zj32xs61brmc106pr2cx243672crcmwxxnjgaxls"))))
17882 (build-system python-build-system)
17883 (home-page "https://github.com/kovidgoyal/dukpy")
17884 (synopsis "Run JavaScript in python")
17885 (description
17886 "dukpy is a JavaScript runtime environment for Python using the duktape
17887 embeddable JavaScript engine.")
17888 ;; Dukpy is licensed under MIT like the embedded duktape library,
17889 ;; with 'errors.c' as GPL3.
17890 (license (list license:expat license:gpl3))))
17891
17892 (define-public python2-dukpy
17893 (package-with-python2 python-dukpy))
17894
17895 (define-public python-jsonrpclib-pelix
17896 (package
17897 (name "python-jsonrpclib-pelix")
17898 (version "0.3.2")
17899 (source
17900 (origin
17901 (method url-fetch)
17902 (uri (pypi-uri "jsonrpclib-pelix" version))
17903 (sha256
17904 (base32
17905 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
17906 (build-system python-build-system)
17907 (arguments
17908 `(#:tests? #f)) ; no tests in PyPI tarball
17909 (home-page "https://github.com/tcalmant/jsonrpclib/")
17910 (synopsis "JSON-RPC 2.0 client library for Python")
17911 (description
17912 "This library implements the JSON-RPC v2.0
17913 specification (backwards-compatible) as a client library for Python. This
17914 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
17915 services.")
17916 (license license:asl2.0)))
17917
17918 (define-public python2-jsonrpclib-pelix
17919 (package-with-python2 python-jsonrpclib-pelix))
17920
17921 (define-public python-setuptools-scm-git-archive
17922 (package
17923 (name "python-setuptools-scm-git-archive")
17924 (version "1.0")
17925 (source
17926 (origin
17927 (method url-fetch)
17928 (uri (pypi-uri "setuptools_scm_git_archive" version))
17929 (sha256
17930 (base32
17931 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
17932 (build-system python-build-system)
17933 (native-inputs
17934 `(("python-pytest" ,python-pytest)))
17935 (propagated-inputs
17936 `(("python-setuptools-scm" ,python-setuptools-scm)))
17937 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
17938 (synopsis "Setuptools_scm plugin for git archives")
17939 (description
17940 "The setuptools_scm_git_archive package is a plugin to
17941 setuptools_scm, which supports obtaining versions from git archives that
17942 belong to tagged versions.")
17943 (license license:expat)))
17944
17945 (define-public python2-setuptools-scm-git-archive
17946 (package-with-python2 python-setuptools-scm-git-archive))
17947
17948 (define-public python-setuptools-git
17949 (package
17950 (name "python-setuptools-git")
17951 (version "1.2")
17952 (source
17953 (origin
17954 (method url-fetch)
17955 (uri (pypi-uri "setuptools-git" version))
17956 (sha256
17957 (base32
17958 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
17959 (build-system python-build-system)
17960 (arguments
17961 `(#:phases
17962 (modify-phases %standard-phases
17963 ;; This is needed for tests.
17964 (add-after 'unpack 'configure-git
17965 (lambda _
17966 (setenv "HOME" "/tmp")
17967 (invoke "git" "config" "--global" "user.email" "guix")
17968 (invoke "git" "config" "--global" "user.name" "guix")
17969 #t)))))
17970 (native-inputs
17971 `(("git" ,git-minimal)))
17972 (home-page "https://github.com/msabramo/setuptools-git")
17973 (synopsis "Setuptools revision control system plugin for Git")
17974 (description
17975 "This package provides a plugin for Setuptools for revision control with
17976 Git.")
17977 (license license:bsd-3)))
17978
17979 (define-public python-pyclipper
17980 (package
17981 (name "python-pyclipper")
17982 (version "1.1.0.post3")
17983 (source
17984 (origin
17985 (method url-fetch)
17986 (uri (pypi-uri "pyclipper" version ".zip"))
17987 (sha256
17988 (base32 "164yksvqwqvwzh8f8lq92asg87hd8rvcy2xb5vm4y4ccvd5xgb7i"))
17989 (modules '((guix build utils)))
17990 (snippet
17991 '(begin
17992 ;; This file is generated by Cython.
17993 (delete-file "pyclipper/pyclipper.cpp") #t))))
17994 (build-system python-build-system)
17995 (arguments
17996 `(#:phases
17997 (modify-phases %standard-phases
17998 (add-before 'build 'cythonize-sources
17999 (lambda _
18000 (with-directory-excursion "pyclipper"
18001 (invoke "cython" "--cplus" "pyclipper.pyx")))))))
18002 (propagated-inputs
18003 `(("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
18004 (native-inputs
18005 `(("python-cython" ,python-cython)
18006 ("python-pytest" ,python-pytest)
18007 ("python-pytest-runner" ,python-pytest-runner)
18008 ("python-unittest2" ,python-unittest2)
18009 ("unzip" ,unzip)))
18010 (home-page "https://github.com/greginvm/pyclipper")
18011 (synopsis "Wrapper for Angus Johnson's Clipper library")
18012 (description
18013 "Pyclipper is a Cython wrapper for the C++ translation of the
18014 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
18015 (license license:expat)))
18016
18017 (define-public python2-pyclipper
18018 (package-with-python2 python-pyclipper))
18019
18020 (define-public python2-booleanoperations
18021 (package
18022 (name "python2-booleanoperations")
18023 (version "0.7.1")
18024 (source
18025 (origin
18026 (method url-fetch)
18027 (uri (pypi-uri "booleanOperations" version ".zip"))
18028 (sha256
18029 (base32
18030 "1hw42fazdpvsn77glx96hwsj9l17mvx37sc5707s08y5w6fx16mn"))))
18031 (build-system python-build-system)
18032 (arguments
18033 `(#:python ,python-2))
18034 (native-inputs
18035 `(("unzip" ,unzip)
18036 ("python2-pytest" ,python2-pytest)
18037 ("python2-pytest-runner" ,python2-pytest-runner)))
18038 (propagated-inputs
18039 `(("python-fonttools" ,python2-fonttools)
18040 ("python-pyclipper" ,python2-pyclipper)
18041 ("python-ufolib" ,python2-ufolib)))
18042 (home-page "https://github.com/typemytype/booleanOperations")
18043 (synopsis "Boolean operations on paths")
18044 (description
18045 "BooleanOperations provides a Python library that enables
18046 boolean operations on paths.")
18047 (license license:expat)))
18048
18049 (define-public python-tempdir
18050 (package
18051 (name "python-tempdir")
18052 (version "0.7.1")
18053 (source
18054 (origin
18055 (method url-fetch)
18056 (uri (pypi-uri "tempdir" version))
18057 (sha256
18058 (base32
18059 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
18060 (build-system python-build-system)
18061 (home-page "https://pypi.org/project/tempdir/")
18062 (arguments
18063 ;; the package has no tests
18064 '(#:tests? #f))
18065 (synopsis "Python library for managing temporary directories")
18066 (description
18067 "This library manages temporary directories that are automatically
18068 deleted with all their contents when they are no longer needed. It is
18069 particularly convenient for use in tests.")
18070 (license license:expat)))
18071
18072 (define-public python2-tempdir
18073 (package-with-python2 python-tempdir))
18074
18075 (define-public python-activepapers
18076 (package
18077 (name "python-activepapers")
18078 (version "0.2.2")
18079 (source
18080 (origin
18081 (method url-fetch)
18082 (uri (pypi-uri "ActivePapers.Py" version))
18083 (sha256
18084 (base32
18085 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
18086 (build-system python-build-system)
18087 (arguments
18088 `(#:modules ((ice-9 ftw)
18089 (srfi srfi-1)
18090 (guix build utils)
18091 (guix build python-build-system))
18092
18093 #:phases
18094 (modify-phases %standard-phases
18095 (add-after 'unpack 'delete-python2-code
18096 (lambda _
18097 (for-each delete-file
18098 '("lib/activepapers/builtins2.py"
18099 "lib/activepapers/standardlib2.py"
18100 "lib/activepapers/utility2.py"))))
18101 (replace 'check
18102 (lambda _
18103 ;; Deactivate the test cases that download files
18104 (setenv "NO_NETWORK_ACCESS" "1")
18105 ;; For some strange reason, some tests fail if nosetests runs all
18106 ;; test modules in a single execution. They pass if each test
18107 ;; module is run individually.
18108 (for-each (lambda (filename)
18109 (invoke "nosetests"
18110 (string-append "tests/" filename)))
18111 (scandir "tests"
18112 (lambda (filename)
18113 (string-suffix? ".py" filename)))))))))
18114 (native-inputs
18115 `(("python-tempdir" ,python-tempdir)
18116 ("python-nose" ,python-nose)))
18117 (propagated-inputs
18118 `(("python-h5py" ,python-h5py)))
18119 (home-page "https://www.activepapers.org/")
18120 (synopsis "Executable papers for scientific computing")
18121 (description
18122 "ActivePapers is a tool for working with executable papers, which
18123 combine data, code, and documentation in single-file packages,
18124 suitable for publication as supplementary material or on repositories
18125 such as figshare or Zenodo.")
18126 (properties `((python2-variant . ,(delay python2-activepapers))))
18127 (license license:bsd-3)))
18128
18129 (define-public python2-activepapers
18130 (let ((base (package-with-python2
18131 (strip-python2-variant python-activepapers))))
18132 (package/inherit base
18133 (arguments
18134 (substitute-keyword-arguments (package-arguments base)
18135 ((#:phases phases)
18136 `(modify-phases ,phases
18137 (delete 'delete-python2-code)
18138 (add-after 'unpack 'delete-python3-code
18139 (lambda _
18140 (for-each delete-file
18141 '("lib/activepapers/builtins3.py"
18142 "lib/activepapers/standardlib3.py"
18143 "lib/activepapers/utility3.py")))))))))))
18144
18145 (define-public python-semver
18146 (package
18147 (name "python-semver")
18148 (version "2.9.0")
18149 (source
18150 (origin
18151 (method url-fetch)
18152 (uri (pypi-uri "semver" version))
18153 (sha256
18154 (base32
18155 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
18156 (build-system python-build-system)
18157 (arguments
18158 `(#:phases (modify-phases %standard-phases
18159 (replace 'check
18160 (lambda _
18161 (delete-file "setup.cfg")
18162 (invoke "py.test"))))))
18163 (native-inputs
18164 `(("python-pytest" ,python-pytest)))
18165 (home-page "https://github.com/k-bx/python-semver")
18166 (synopsis "Python helper for Semantic Versioning")
18167 (description "This package provides a Python library for
18168 @url{Semantic Versioning, http://semver.org/}.")
18169 (license license:bsd-3)))
18170
18171 (define-public python2-semver
18172 (package-with-python2 python-semver))
18173
18174 (define-public python-pyro4
18175 (package
18176 (name "python-pyro4")
18177 (version "4.77")
18178 (source
18179 (origin
18180 (method url-fetch)
18181 (uri (pypi-uri "Pyro4" version))
18182 (sha256
18183 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
18184 (build-system python-build-system)
18185 (arguments
18186 '(#:tests? #f)) ;FIXME: Some tests require network access.
18187 (native-inputs
18188 `(("python-cloudpickle" ,python-cloudpickle)
18189 ("python-dill" ,python-dill)
18190 ("python-msgpack" ,python-msgpack)))
18191 (propagated-inputs
18192 `(("python-serpent" ,python-serpent)))
18193 (home-page "https://pyro4.readthedocs.io")
18194 (synopsis "Distributed object middleware for Python")
18195 (description
18196 "Pyro enables you to build applications in which objects can talk to each
18197 other over the network. You can just use normal Python method calls to call
18198 objects on other machines, also known as remote procedure calls (RPC).")
18199 (license license:expat)))
18200
18201 (define-public python2-pyro
18202 (package
18203 (name "python2-pyro")
18204 (version "3.16")
18205 (source
18206 (origin
18207 (method url-fetch)
18208 (uri (pypi-uri "Pyro" version))
18209 (file-name (string-append "Pyro-" version ".tar.gz"))
18210 (sha256
18211 (base32
18212 "0y75wzdqbjy565rpxaxscav4j8xg060sa90lnmb7aypgaf251v8v"))))
18213 (build-system python-build-system)
18214 (arguments
18215 ;; Pyro is not compatible with Python 3
18216 `(#:python ,python-2
18217 ;; Pyro has no test cases for automatic execution
18218 #:tests? #f))
18219 (home-page "https://pythonhosted.org/Pyro/")
18220 (synopsis "Distributed object manager for Python")
18221 (description "Pyro is a Distributed Object Technology system
18222 written in Python that is designed to be easy to use. It resembles
18223 Java's Remote Method Invocation (RMI). It has less similarity to CORBA,
18224 which is a system and language independent Distributed Object Technology
18225 and has much more to offer than Pyro or RMI. Pyro 3.x is no
18226 longer maintained. New projects should use Pyro4 instead, which
18227 is the new Pyro version that is actively developed.")
18228 (license license:expat)))
18229
18230 (define-public python2-scientific
18231 (package
18232 (name "python2-scientific")
18233 (version "2.9.4")
18234 (source
18235 (origin
18236 (method git-fetch)
18237 (uri (git-reference
18238 (url "https://github.com/khinsen/ScientificPython")
18239 (commit (string-append "rel" version))))
18240 (file-name (git-file-name name version))
18241 (sha256
18242 (base32
18243 "16l48aj9fps9r7jyk8gpxppwrv0fqvlc13sayxskz28r5s6sjwbl"))))
18244 (build-system python-build-system)
18245 (inputs
18246 `(("netcdf" ,netcdf)))
18247 (propagated-inputs
18248 `(("python-numpy" ,python2-numpy-1.8)
18249 ("python-pyro" ,python2-pyro)))
18250 (arguments
18251 ;; ScientificPython is not compatible with Python 3
18252 `(#:python ,python-2
18253 #:tests? #f ; No test suite
18254 #:phases
18255 (modify-phases %standard-phases
18256 (replace 'build
18257 (lambda* (#:key inputs #:allow-other-keys)
18258 (invoke "python" "setup.py" "build"
18259 (string-append "--netcdf_prefix="
18260 (assoc-ref inputs "netcdf"))))))))
18261 (home-page "http://dirac.cnrs-orleans.fr/ScientificPython")
18262 (synopsis "Python modules for scientific computing")
18263 (description "ScientificPython is a collection of Python modules that are
18264 useful for scientific computing. Most modules are rather general (Geometry,
18265 physical units, automatic derivatives, ...) whereas others are more
18266 domain-specific (e.g. netCDF and PDB support). The library is currently
18267 not actively maintained and works only with Python 2 and NumPy < 1.9.")
18268 (license license:cecill-c)))
18269
18270 (define-public python2-mmtk
18271 (package
18272 (name "python2-mmtk")
18273 (version "2.7.12")
18274 (source
18275 (origin
18276 (method git-fetch)
18277 (uri (git-reference
18278 (url "https://github.com/khinsen/MMTK")
18279 (commit (string-append "rel" version))))
18280 (file-name (git-file-name name version))
18281 (sha256
18282 (base32
18283 "1fqwh3ba9jd42nigvn5shndgwb1zy7kh9520ncvqci7n8ffjr6p1"))))
18284 (build-system python-build-system)
18285 (native-inputs
18286 `(("netcdf" ,netcdf)))
18287 (propagated-inputs
18288 `(("python-scientific" ,python2-scientific)
18289 ("python-tkinter" ,python-2 "tk")))
18290 (arguments
18291 `(#:python ,python-2
18292 #:tests? #f
18293 #:phases
18294 (modify-phases %standard-phases
18295 (add-before 'build 'includes-from-scientific
18296 (lambda* (#:key inputs #:allow-other-keys)
18297 (mkdir-p "Include/Scientific")
18298 (copy-recursively
18299 (string-append
18300 (assoc-ref inputs "python-scientific")
18301 "/include/python2.7/Scientific")
18302 "Include/Scientific"))))))
18303 (home-page "http://dirac.cnrs-orleans.fr/MMTK")
18304 (synopsis "Python library for molecular simulation")
18305 (description "MMTK is a library for molecular simulations with an emphasis
18306 on biomolecules. It provides widely used methods such as Molecular Dynamics
18307 and normal mode analysis, but also basic routines for implementing new methods
18308 for simulation and analysis. The library is currently not actively maintained
18309 and works only with Python 2 and NumPy < 1.9.")
18310 (license license:cecill-c)))
18311
18312 (define-public python-phonenumbers
18313 (package
18314 (name "python-phonenumbers")
18315 (version "8.9.1")
18316 (source
18317 (origin
18318 (method url-fetch)
18319 (uri (pypi-uri "phonenumbers" version))
18320 (sha256
18321 (base32
18322 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
18323 (build-system python-build-system)
18324 (home-page
18325 "https://github.com/daviddrysdale/python-phonenumbers")
18326 (synopsis
18327 "Python library for dealing with international phone numbers")
18328 (description
18329 "This package provides a Python port of Google's libphonenumber library.")
18330 (license license:asl2.0)))
18331
18332 (define-public python2-phonenumbers
18333 (package-with-python2 python-phonenumbers))
18334
18335 (define-public python-send2trash
18336 (package
18337 (name "python-send2trash")
18338 (version "1.5.0")
18339 (source
18340 (origin (method git-fetch)
18341 ;; Source tarball on PyPI doesn't include tests.
18342 (uri (git-reference
18343 (url "https://github.com/hsoft/send2trash")
18344 (commit version)))
18345 (file-name (git-file-name name version))
18346 (sha256
18347 (base32
18348 "1c76zldhw2ay7q7r00nnzcampjz9lkqfcbzqpm0iqp5i6bmmv30v"))))
18349 (build-system python-build-system)
18350 (arguments
18351 '(#:phases
18352 (modify-phases %standard-phases
18353 (add-before 'check 'pre-check
18354 (lambda _
18355 (mkdir-p "/tmp/foo")
18356 (setenv "HOME" "/tmp/foo")
18357 #t)))))
18358 (home-page "https://github.com/hsoft/send2trash")
18359 (synopsis "Send files to the user's @file{~/Trash} directory")
18360 (description "This package provides a Python library to send files to the
18361 user's @file{~/Trash} directory.")
18362 (properties `((python2-variant . ,(delay python2-send2trash))))
18363 (license license:bsd-3)))
18364
18365 (define-public python2-send2trash
18366 (let ((base (package-with-python2
18367 (strip-python2-variant python-send2trash))))
18368 (package/inherit base
18369 (arguments
18370 (substitute-keyword-arguments (package-arguments python-send2trash)
18371 ((#:phases phases)
18372 `(modify-phases ,phases
18373 (add-before 'check 'setenv
18374 (lambda _
18375 (setenv "PYTHONPATH"
18376 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
18377 #t)))))))))
18378
18379 (define-public python-pyfavicon
18380 (package
18381 (name "python-pyfavicon")
18382 (version "0.1.1")
18383 (source
18384 (origin
18385 (method url-fetch)
18386 (uri (pypi-uri "pyfavicon" version))
18387 (sha256
18388 (base32 "15wfpa99hvcfsv8j0m8iprmydi2p4qkhm86qfx485244y0ia5mgx"))))
18389 (build-system python-build-system)
18390 (arguments
18391 ;; There are no tests in the PyPI tarball and the tests from the
18392 ;; repository require online data.
18393 '(#:tests? #f))
18394 (propagated-inputs
18395 `(("python-aiohttp" ,python-aiohttp)
18396 ("python-beautifulsoup4" ,python-beautifulsoup4)
18397 ("python-pillow" ,python-pillow)))
18398 (home-page "https://github.com/bilelmoussaoui/pyfavicon")
18399 (synopsis "Async favicon fetcher")
18400 (description
18401 "@code{pyfavicon} is an async favicon fetcher.")
18402 (license license:expat)))
18403
18404 (define-public python-yamllint
18405 (package
18406 (name "python-yamllint")
18407 (version "1.26.1")
18408 (source
18409 (origin
18410 (method url-fetch)
18411 (uri (pypi-uri "yamllint" version))
18412 (sha256
18413 (base32 "090krlxj7az0d9yl8i20vjrqi66dfxx7y5xakjhxzsfp7qmldnc7"))))
18414 (build-system python-build-system)
18415 (propagated-inputs
18416 `(("python-pathspec" ,python-pathspec)
18417 ("python-pyyaml" ,python-pyyaml)
18418 ("python-setuptools" ,python-setuptools)))
18419 (home-page "https://github.com/adrienverge/yamllint")
18420 (synopsis "Linter for YAML files")
18421 (description
18422 "Yamllint is a linter for YAML files. yamllint does not only check for
18423 syntax validity, but for weirdnesses like key repetition and cosmetic problems
18424 such as lines length, trailing spaces, indentation, etc.")
18425 (license license:gpl3+)))
18426
18427 (define-public python-yapf
18428 (package
18429 (name "python-yapf")
18430 (version "0.29.0")
18431 (source
18432 (origin
18433 (method url-fetch)
18434 (uri (pypi-uri "yapf" version))
18435 (sha256
18436 (base32
18437 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
18438 (build-system python-build-system)
18439 (home-page "https://github.com/google/yapf")
18440 (synopsis "Formatter for Python code")
18441 (description "YAPF is a formatter for Python code. It's based off of
18442 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
18443 takes the code and reformats it to the best formatting that conforms to the
18444 style guide, even if the original code didn't violate the style guide.")
18445 (license license:asl2.0)))
18446
18447 (define-public python2-yapf
18448 (package-with-python2 python-yapf))
18449
18450 (define-public python-yq
18451 (package
18452 (name "python-yq")
18453 (version "2.11.1")
18454 (source
18455 (origin
18456 (method url-fetch)
18457 (uri (pypi-uri "yq" version))
18458 (sha256
18459 (base32
18460 "1q4rky0a6n4izmq7slb91a54g8swry1xrbfqxwc8lkd3hhvlxxkl"))))
18461 (build-system python-build-system)
18462 (arguments
18463 '(#:phases
18464 (modify-phases %standard-phases
18465 (add-after 'unpack 'patch
18466 (lambda* (#:key inputs #:allow-other-keys)
18467 (substitute* "yq/__init__.py"
18468 (("Popen\\(\\[\"jq")
18469 (string-append
18470 "Popen([\""
18471 (assoc-ref inputs "jq")
18472 "/bin/jq")))
18473 #t)))))
18474 (inputs
18475 `(("python-argcomplete" ,python-argcomplete)
18476 ("python-pyyaml" ,python-pyyaml)
18477 ("python-xmltodict" ,python-xmltodict)
18478 ("jq" ,jq)))
18479 (native-inputs
18480 `(("python-coverage" ,python-coverage)
18481 ("python-flake8" ,python-flake8)
18482 ("python-wheel" ,python-wheel)))
18483 (home-page "https://github.com/kislyuk/yq")
18484 (synopsis "Command-line YAML/XML processor")
18485 (description
18486 "This package provides @command{yq} and @command{xq} for processing YAML
18487 and XML respectively. The processing is done through @command{jq}, @command{jq}
18488 filters can be used to process the data as it passes through.")
18489 (license license:asl2.0)))
18490
18491 (define-public python-gyp
18492 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
18493 (revision "0"))
18494 (package
18495 (name "python-gyp")
18496 ;; Google does not release versions,
18497 ;; based on second most recent commit date.
18498 (version (git-version "0.0.0" revision commit))
18499 (source
18500 (origin
18501 ;; Google does not release tarballs,
18502 ;; git checkout is needed.
18503 (method git-fetch)
18504 (uri (git-reference
18505 (url "https://chromium.googlesource.com/external/gyp")
18506 (commit commit)))
18507 (file-name (git-file-name name version))
18508 (sha256
18509 (base32
18510 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
18511 (build-system python-build-system)
18512 (home-page "https://gyp.gsrc.io/")
18513 (synopsis "GYP is a Meta-Build system")
18514 (description
18515 "GYP builds build systems for large, cross platform applications.
18516 It can be used to generate XCode projects, Visual Studio projects, Ninja build
18517 files, and Makefiles.")
18518 (license license:bsd-3))))
18519
18520 (define-public python2-gyp
18521 (package-with-python2 python-gyp))
18522
18523 (define-public python-whatever
18524 (package
18525 (name "python-whatever")
18526 (version "0.6")
18527 (source
18528 (origin
18529 (method git-fetch)
18530 (uri (git-reference
18531 (url "https://github.com/Suor/whatever")
18532 (commit version)))
18533 (file-name (git-file-name name version))
18534 (sha256
18535 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
18536 (build-system python-build-system)
18537 (arguments
18538 `(#:phases
18539 (modify-phases %standard-phases
18540 (replace 'check
18541 (lambda _
18542 (invoke "py.test"))))))
18543 (native-inputs
18544 `(("python-pytest" ,python-pytest)))
18545 (home-page "https://github.com/Suor/whatever")
18546 (synopsis "Make anonymous functions by partial application of operators")
18547 (description "@code{whatever} provides an easy way to make anonymous
18548 functions by partial application of operators.")
18549 (license license:bsd-3)))
18550
18551 (define-public python2-whatever
18552 (package-with-python2 python-whatever))
18553
18554 (define-public python-funcy
18555 (package
18556 (name "python-funcy")
18557 (version "1.11")
18558 (source
18559 (origin
18560 (method git-fetch)
18561 (uri (git-reference
18562 (url "https://github.com/Suor/funcy")
18563 (commit version)))
18564 (sha256
18565 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
18566 (file-name (git-file-name name version))))
18567 (build-system python-build-system)
18568 (arguments
18569 `(#:phases
18570 (modify-phases %standard-phases
18571 (replace 'check
18572 (lambda _
18573 (invoke "py.test"))))))
18574 (native-inputs
18575 `(("python-pytest" ,python-pytest)
18576 ("python-whatever" ,python-whatever)))
18577 (home-page "https://github.com/Suor/funcy")
18578 (synopsis "Functional tools")
18579 (description "@code{funcy} is a library that provides functional tools.
18580 Examples are:
18581 @enumerate
18582 @item merge - Merges collections of the same type
18583 @item walk - Type-preserving map
18584 @item select - Selects a part of a collection
18585 @item take - Takes the first n items of a collection
18586 @item first - Takes the first item of a collection
18587 @item remove - Predicated-removes items of a collection
18588 @item concat - Concatenates two collections
18589 @item flatten - Flattens a collection with subcollections
18590 @item distinct - Returns only distinct items
18591 @item split - Predicated-splits a collection
18592 @item split_at - Splits a collection at a given item
18593 @item group_by - Groups items by group
18594 @item pairwise - Pairs off adjacent items
18595 @item partial - Partially-applies a function
18596 @item curry - Curries a function
18597 @item compose - Composes functions
18598 @item complement - Complements a predicate
18599 @item all_fn - \"all\" with predicate
18600 @end enumerate")
18601 (license license:bsd-3)))
18602
18603 (define-public python2-funcy
18604 (package-with-python2 python-funcy))
18605
18606 (define-public python-isoweek
18607 (package
18608 (name "python-isoweek")
18609 (version "1.3.3")
18610 (source
18611 (origin
18612 (method url-fetch)
18613 (uri (pypi-uri "isoweek" version))
18614 (sha256
18615 (base32
18616 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
18617 (build-system python-build-system)
18618 (home-page "https://github.com/gisle/isoweek")
18619 (synopsis "Objects representing a week")
18620 (description "The @code{isoweek} module provide the class Week that
18621 implements the week definition of ISO 8601. This standard also defines
18622 a notation for identifying weeks; yyyyWww (where the W is a literal).
18623 Week instances stringify to this form.")
18624 (license license:bsd-3)))
18625
18626 (define-public python2-isoweek
18627 (package-with-python2 python-isoweek))
18628
18629 (define-public python-pyzbar
18630 (package
18631 (name "python-pyzbar")
18632 (version "0.1.8")
18633 (source
18634 (origin
18635 ;; There's no source tarball on PyPI.
18636 (method git-fetch)
18637 (uri (git-reference
18638 (url "https://github.com/NaturalHistoryMuseum/pyzbar")
18639 (commit (string-append "v" version))))
18640 (file-name (git-file-name name version))
18641 (sha256
18642 (base32 "1fqlfg5p2v9lzzzi0si2sz54lblprk6jjjhjw54b64lp58c1yhsl"))))
18643 (build-system python-build-system)
18644 (arguments
18645 `(#:phases
18646 (modify-phases %standard-phases
18647 (add-after 'unpack 'remove-failing-test
18648 (lambda _
18649 ;; This tests if find_library was called once, but we remove
18650 ;; the call in the stage below to make the library find libzbar.
18651 (delete-file "pyzbar/tests/test_zbar_library.py")
18652 #t))
18653 (add-before 'build 'set-library-file-name
18654 (lambda* (#:key inputs #:allow-other-keys)
18655 (let ((libzbar (assoc-ref inputs "zbar")))
18656 (substitute* "pyzbar/zbar_library.py"
18657 (("find_library\\('zbar'\\)")
18658 (string-append "'" libzbar "/lib/libzbar.so.0'")))
18659 #t))))))
18660 (native-inputs
18661 `(("pkg-config" ,pkg-config)
18662 ("python-numpy" ,python-numpy)
18663 ("python-pillow" ,python-pillow)))
18664 (inputs
18665 `(("zbar" ,zbar)))
18666 (home-page "https://github.com/NaturalHistoryMuseum/pyzbar/")
18667 (synopsis "Read one-dimensional barcodes and QR codes")
18668 (description
18669 "Read one-dimensional barcodes and QR codes using the zbar library.
18670
18671 Features:
18672
18673 @itemize
18674 @item Pure python
18675 @item Works with PIL / Pillow images, OpenCV / numpy ndarrays, and raw bytes
18676 @item Decodes locations of barcodes
18677 @item No dependencies, other than the zbar library itself
18678 @end itemize")
18679 (license license:expat)))
18680
18681 (define-public python-tokenize-rt
18682 (package
18683 (name "python-tokenize-rt")
18684 (version "2.0.1")
18685 (source
18686 (origin
18687 (method url-fetch)
18688 (uri (pypi-uri "tokenize-rt" version))
18689 (sha256
18690 (base32
18691 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
18692 (build-system python-build-system)
18693 (home-page "https://github.com/asottile/tokenize-rt")
18694 (synopsis "Wrapper around the stdlib tokenize which roundtrips.")
18695 (description
18696 "This Python library is a wrapper around @code{tokenize} from the Python
18697 standard library. It provides two additional tokens @code{ESCAPED_NL} and
18698 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
18699 and @code{tokens_to_src} to roundtrip.")
18700 (license license:expat)))
18701
18702 (define-public python-future-fstrings
18703 (package
18704 (name "python-future-fstrings")
18705 (version "0.4.1")
18706 (source
18707 (origin
18708 (method url-fetch)
18709 (uri (pypi-uri "future_fstrings" version))
18710 (sha256
18711 (base32
18712 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
18713 (build-system python-build-system)
18714 (propagated-inputs
18715 `(("python-tokenize-rt" ,python-tokenize-rt)))
18716 (home-page "https://github.com/asottile/future-fstrings")
18717 (synopsis "Backport of fstrings to Python < 3.6")
18718 (description
18719 "This package provides a UTF-8 compatible encoding
18720 @code{future_fstrings}, which performs source manipulation. It decodes the
18721 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
18722 @code{f} strings.")
18723 (license license:expat)))
18724
18725 (define-public python-typed-ast
18726 (package
18727 (name "python-typed-ast")
18728 (version "1.4.0")
18729 (source
18730 (origin
18731 (method git-fetch)
18732 (uri (git-reference
18733 (url "https://github.com/python/typed_ast")
18734 (commit version)))
18735 (sha256
18736 (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
18737 (file-name (git-file-name name version))))
18738 (build-system python-build-system)
18739 (arguments
18740 `(#:modules ((guix build utils)
18741 (guix build python-build-system)
18742 (ice-9 ftw)
18743 (srfi srfi-1)
18744 (srfi srfi-26))
18745 #:phases
18746 (modify-phases %standard-phases
18747 (replace 'check
18748 (lambda _
18749 (let ((cwd (getcwd)))
18750 (setenv "PYTHONPATH"
18751 (string-append cwd "/build/"
18752 (find (cut string-prefix? "lib" <>)
18753 (scandir (string-append cwd "/build")))
18754 ":"
18755 (getenv "PYTHONPATH"))))
18756 (invoke "pytest")
18757 #t)))))
18758 (native-inputs `(("python-pytest" ,python-pytest)))
18759 (home-page "https://github.com/python/typed_ast")
18760 (synopsis "Fork of Python @code{ast} modules with type comment support")
18761 (description "This package provides a parser similar to the standard
18762 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
18763 include PEP 484 type comments and are independent of the version of Python
18764 under which they are run. The @code{typed_ast} parsers produce the standard
18765 Python AST (plus type comments), and are both fast and correct, as they are
18766 based on the CPython 2.7 and 3.7 parsers.")
18767 ;; See the file "LICENSE" for the details.
18768 (license (list license:psfl
18769 license:asl2.0
18770 license:expat)))) ;ast27/Parser/spark.py
18771
18772 (define-public python-typer
18773 (package
18774 (name "python-typer")
18775 (version "0.3.2")
18776 (source
18777 (origin
18778 ;; Building `python-typer` from the git repository requires the `flit-core`
18779 ;; Python package that is not installed by `python-flit`.
18780 (method url-fetch)
18781 (uri (pypi-uri "typer" version))
18782 (sha256
18783 (base32 "00v3h63dq8yxahp9vg3yb9r27l2niwv8gv0dbds9dzrc298dfmal"))))
18784 (build-system python-build-system)
18785 (arguments
18786 `(#:phases
18787 (modify-phases %standard-phases
18788 (add-before 'check 'disable-failing-tests
18789 (lambda _
18790 (substitute* "tests/test_completion/test_completion.py"
18791 (("def test_show_completion")
18792 "def _test_show_completion")
18793 (("def test_install_completion")
18794 "def _test_install_completion"))
18795 (substitute* "tests/test_completion/test_completion_install.py"
18796 (("def test_completion_install_bash")
18797 "def _test_completion_install_bash")
18798 (("def test_completion_install_zsh")
18799 "def _test_completion_install_zsh")
18800 (("def test_completion_install_fish")
18801 "def _test_completion_install_fish")
18802 (("def test_completion_install_powershell")
18803 "def _test_completion_install_powershell"))
18804 #t))
18805 (replace 'check
18806 (lambda _
18807 (setenv "PYTHONPATH"
18808 (string-append (getcwd) ":"
18809 (getenv "PYTHONPATH")))
18810 (invoke "python" "-m" "pytest" "tests/")
18811 #t)))))
18812 (propagated-inputs
18813 `(("python-click" ,python-click)))
18814 (native-inputs
18815 `(("python-coverage" ,python-coverage)
18816 ("python-pytest" ,python-pytest)
18817 ("python-shellingham" ,python-shellingham)))
18818 (home-page "https://github.com/tiangolo/typer")
18819 (synopsis
18820 "Typer builds CLI based on Python type hints")
18821 (description
18822 "Typer is a library for building CLI applications. It's based on
18823 Python 3.6+ type hints.")
18824 ;; MIT license
18825 (license license:expat)))
18826
18827 (define-public python-typing
18828 (package
18829 (name "python-typing")
18830 (version "3.7.4.3")
18831 (source
18832 (origin
18833 (method url-fetch)
18834 (uri (pypi-uri "typing" version))
18835 (sha256
18836 (base32 "1j8wnz8c9s049w9xbf7ssr1dmgg4rz7vdfq7m880srzxhafgp1qi"))))
18837 (build-system python-build-system)
18838 (home-page "https://docs.python.org/3/library/typing.html")
18839 (synopsis "Type hints for Python")
18840 (description "This is a backport of the standard library @code{typing}
18841 module to Python versions older than 3.5. Typing defines a standard notation
18842 for Python function and variable type annotations. The notation can be used
18843 for documenting code in a concise, standard format, and it has been designed
18844 to also be used by static and runtime type checkers, static analyzers, IDEs
18845 and other tools.")
18846 (license license:psfl)))
18847
18848 (define-public python2-typing
18849 (package-with-python2 python-typing))
18850
18851 (define-public python-typing-extensions
18852 (package
18853 (name "python-typing-extensions")
18854 (version "3.7.4.3")
18855 (source
18856 (origin
18857 (method url-fetch)
18858 (uri (pypi-uri "typing_extensions" version))
18859 (sha256
18860 (base32
18861 "0356ljrrplm917dqgpn8wjkw6j3mpp916gwxas7jhc3xc4xhgm4r"))))
18862 (build-system python-build-system)
18863 (home-page
18864 "https://github.com/python/typing/blob/master/typing_extensions/README.rst")
18865 (synopsis "Experimental type hints for Python")
18866 (description
18867 "The typing_extensions module contains additional @code{typing} hints not
18868 yet present in the of the @code{typing} standard library.
18869 Included are implementations of:
18870 @enumerate
18871 @item ClassVar
18872 @item ContextManager
18873 @item Counter
18874 @item DefaultDict
18875 @item Deque
18876 @item NewType
18877 @item NoReturn
18878 @item overload
18879 @item Protocol
18880 @item runtime
18881 @item Text
18882 @item Type
18883 @item TYPE_CHECKING
18884 @item AsyncGenerator
18885 @end enumerate\n")
18886 (license license:psfl)))
18887
18888 (define-public bpython
18889 (package
18890 (name "bpython")
18891 (version "0.20.1")
18892 (source
18893 (origin
18894 (method url-fetch)
18895 (uri (pypi-uri "bpython" version))
18896 (sha256
18897 (base32 "00vmkkc79mlnkyvwww1cr7bpwmf4p61704dhayz6kd0kc203hxvf"))))
18898 (build-system python-build-system)
18899 (arguments
18900 `(#:phases
18901 (modify-phases %standard-phases
18902 (add-after 'unpack 'remove-failing-test
18903 (lambda _
18904 ;; Remove failing test. FIXME: make it pass
18905 (delete-file "bpython/test/test_args.py")
18906 #t))
18907 (add-after 'wrap 'add-aliases
18908 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
18909 (lambda* (#:key outputs #:allow-other-keys)
18910 (let ((out (assoc-ref outputs "out")))
18911 (for-each
18912 (lambda (old new)
18913 (symlink old (string-append out "/bin/" new)))
18914 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
18915 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
18916 #t)))))
18917 (propagated-inputs
18918 `(("python-pygments" ,python-pygments)
18919 ("python-requests" ,python-requests)
18920 ("python-curtsies" ,python-curtsies)
18921 ("python-greenlet" ,python-greenlet)
18922 ("python-six" ,python-six)
18923 ("python-wcwidth" ,python-wcwidth)
18924 ;; optional dependencies
18925 ("python-urwid" ,python-urwid) ; for bpython-urwid only
18926 ("python-watchdog" ,python-watchdog)
18927 ("python-jedi" ,python-jedi)))
18928 (native-inputs
18929 `(("python-sphinx" ,python-sphinx)
18930 ("python-mock" ,python-mock)))
18931 (home-page "https://bpython-interpreter.org/")
18932 (synopsis "Fancy interface to the Python interpreter")
18933 (description "Bpython is a fancy interface to the Python
18934 interpreter. bpython's main features are
18935
18936 @enumerate
18937 @item in-line syntax highlighting,
18938 @item readline-like autocomplete with suggestions displayed as you type,
18939 @item expected parameter list for any Python function,
18940 @item \"rewind\" function to pop the last line of code from memory and
18941 re-evaluate,
18942 @item send the code you've entered off to a pastebin,
18943 @item save the code you've entered to a file, and
18944 @item auto-indentation.
18945 @end enumerate")
18946 (license license:expat)))
18947
18948 (define-public python-pyinotify
18949 (package
18950 (name "python-pyinotify")
18951 (version "0.9.6")
18952 (source (origin
18953 (method url-fetch)
18954 (uri (pypi-uri "pyinotify" version))
18955 (sha256
18956 (base32
18957 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
18958 (build-system python-build-system)
18959 (arguments `(#:tests? #f)) ;no tests
18960 (home-page "https://github.com/seb-m/pyinotify")
18961 (synopsis "Python library for monitoring inotify events")
18962 (description
18963 "@code{pyinotify} provides a Python interface for monitoring
18964 file system events on Linux.")
18965 (license license:expat)))
18966
18967 (define-public python2-pyinotify
18968 (package-with-python2 python-pyinotify))
18969
18970 ;; Ada parser uses this version.
18971 (define-public python2-quex-0.67.3
18972 (package
18973 (name "python2-quex")
18974 (version "0.67.3")
18975 (source
18976 (origin
18977 (method url-fetch)
18978 (uri (string-append "mirror://sourceforge/quex/HISTORY/"
18979 (version-major+minor version)
18980 "/quex-" version ".zip"))
18981 (sha256
18982 (base32
18983 "14gv8ll3ipqv4kyc2xiy891nrmjl4ic823zfyx8hassagyclyppw"))))
18984 (build-system python-build-system)
18985 (native-inputs
18986 `(("unzip" ,unzip)))
18987 (arguments
18988 `(#:python ,python-2
18989 #:tests? #f
18990 #:phases
18991 (modify-phases %standard-phases
18992 (delete 'configure)
18993 (delete 'build)
18994 (replace 'install
18995 (lambda* (#:key outputs #:allow-other-keys)
18996 (let* ((out (assoc-ref outputs "out"))
18997 (share/quex (string-append out "/share/quex"))
18998 (bin (string-append out "/bin")))
18999 (copy-recursively "." share/quex)
19000 (mkdir-p bin)
19001 (symlink (string-append share/quex "/quex-exe.py")
19002 (string-append bin "/quex"))
19003 #t))))))
19004 (native-search-paths
19005 (list (search-path-specification
19006 (variable "QUEX_PATH")
19007 (files '("share/quex")))))
19008 (home-page "http://quex.sourceforge.net/")
19009 (synopsis "Lexical analyzer generator in Python")
19010 (description "@code{quex} is a lexical analyzer generator in Python.")
19011 (license license:lgpl2.1+))) ; Non-military
19012
19013 (define-public python2-quex
19014 (package (inherit python2-quex-0.67.3)
19015 (name "python2-quex")
19016 (version "0.68.1")
19017 (source
19018 (origin
19019 (method url-fetch)
19020 (uri (string-append "mirror://sourceforge/quex/DOWNLOAD/quex-" version ".tar.gz"))
19021 (sha256
19022 (base32
19023 "0svc9nla3b9145d6b7fb9dizx412l3difzqw0ilh9lz52nsixw8j"))
19024 (file-name (string-append name "-" version ".tar.gz"))))))
19025
19026 (define-public python-more-itertools
19027 (package
19028 (name "python-more-itertools")
19029 (version "8.2.0")
19030 (source
19031 (origin
19032 (method url-fetch)
19033 (uri (pypi-uri "more-itertools" version))
19034 (sha256
19035 (base32
19036 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
19037 (build-system python-build-system)
19038 (home-page "https://github.com/erikrose/more-itertools")
19039 (synopsis "More routines for operating on iterables, beyond itertools")
19040 (description "Python's built-in @code{itertools} module implements a
19041 number of iterator building blocks inspired by constructs from APL, Haskell,
19042 and SML. @code{more-itertools} includes additional building blocks for
19043 working with iterables.")
19044 (properties `((python2-variant . ,(delay python2-more-itertools))))
19045 (license license:expat)))
19046
19047 ;; The 5.x series are the last versions supporting Python 2.7.
19048 (define-public python2-more-itertools
19049 (package
19050 (inherit python-more-itertools)
19051 (name "python2-more-itertools")
19052 (version "5.0.0")
19053 (source (origin
19054 (method url-fetch)
19055 (uri (pypi-uri "more-itertools" version))
19056 (sha256
19057 (base32
19058 "1r12cm6mcdwdzz7d47a6g4l437xsvapdlgyhqay3i2nrlv03da9q"))))
19059 (arguments
19060 `(#:python ,python-2))
19061 (propagated-inputs
19062 `(("python2-six" ,python2-six-bootstrap)))))
19063
19064 (define-public python-latexcodec
19065 (package
19066 (name "python-latexcodec")
19067 (version "1.0.7")
19068 (source
19069 (origin
19070 (method url-fetch)
19071 (uri (pypi-uri "latexcodec" version))
19072 (sha256
19073 (base32 "0wnp3yqcgx0rpy8dz51vh75lbp2qif67da19zi7m3ca98n887hgb"))))
19074 (build-system python-build-system)
19075 (inputs
19076 `(("python-six" ,python-six)))
19077 (home-page "https://readthedocs.org/projects/latexcodec/")
19078 (synopsis "Work with LaTeX code in Python")
19079 (description "Lexer and codec to work with LaTeX code in Python.")
19080 (license license:expat)))
19081
19082 (define-public python-pybtex
19083 (package
19084 (name "python-pybtex")
19085 (version "0.22.2")
19086 (source
19087 (origin
19088 (method url-fetch)
19089 (uri (pypi-uri "pybtex" version))
19090 (sha256
19091 (base32 "070wfcmxrd7xg1si421mi9150gmx2qwx431nwf69sq3hhmgnx080"))))
19092 (build-system python-build-system)
19093 (native-inputs
19094 `(("python-nose" ,python-nose)))
19095 (inputs
19096 `(("python-latexcodec" ,python-latexcodec)
19097 ("python-pyyaml" ,python-pyyaml)
19098 ("python-six" ,python-six)))
19099 (arguments
19100 `(#:test-target "nosetests"))
19101 (home-page "https://pybtex.org/")
19102 (synopsis "BibTeX-compatible bibliography processor")
19103 (description "Pybtex is a BibTeX-compatible bibliography processor written
19104 in Python. You can simply type pybtex instead of bibtex.")
19105 (license license:expat)))
19106
19107 (define-public python-onetimepass
19108 (package
19109 (name "python-onetimepass")
19110 (version "1.0.1")
19111 (source
19112 (origin
19113 (method url-fetch)
19114 (uri (pypi-uri "onetimepass" version))
19115 (sha256
19116 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
19117 (build-system python-build-system)
19118 (propagated-inputs `(("python-six" ,python-six)))
19119 (home-page "https://github.com/tadeck/onetimepass/")
19120 (synopsis "One-time password library")
19121 (description "Python one-time password library for HMAC-based (HOTP) and
19122 time-based (TOTP) passwords.")
19123 (license license:expat)))
19124
19125 (define-public python-parso
19126 (package
19127 (name "python-parso")
19128 (version "0.7.1")
19129 (source
19130 (origin
19131 (method url-fetch)
19132 (uri (pypi-uri "parso" version))
19133 (sha256
19134 (base32 "1f9fc99mjx0h2ad4mgsid728nnmw58hvnq3411g8ljlr9dr49fna"))))
19135 (native-inputs
19136 `(("python-pytest" ,python-pytest)))
19137 (build-system python-build-system)
19138 (arguments
19139 `(#:phases (modify-phases %standard-phases
19140 (replace 'check
19141 (lambda _ (invoke "pytest" "-vv"))))))
19142 (home-page "https://github.com/davidhalter/parso")
19143 (synopsis "Python Parser")
19144 (description "Parso is a Python parser that supports error recovery and
19145 round-trip parsing for different Python versions (in multiple Python versions).
19146 Parso is also able to list multiple syntax errors in your Python file.")
19147 (license license:expat)))
19148
19149 (define-public python2-parso
19150 (package-with-python2 python-parso))
19151
19152 (define-public python-async-generator
19153 (package
19154 (name "python-async-generator")
19155 (version "1.10")
19156 (source
19157 (origin
19158 (method url-fetch)
19159 (uri (pypi-uri "async_generator" version))
19160 (sha256
19161 (base32
19162 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
19163 (build-system python-build-system)
19164 (native-inputs
19165 `(("python-pytest" ,python-pytest)))
19166 (home-page "https://github.com/python-trio/async_generator")
19167 (synopsis "Async generators and context managers for Python 3.5+")
19168 (description "@code{async_generator} back-ports Python 3.6's native async
19169 generators and Python 3.7's context managers into Python 3.5.")
19170 ;; Dual licensed.
19171 (license (list license:expat license:asl2.0))))
19172
19173 (define-public python-async-timeout
19174 (package
19175 (name "python-async-timeout")
19176 (version "3.0.1")
19177 (source
19178 (origin
19179 (method url-fetch)
19180 (uri (pypi-uri "async-timeout" version))
19181 (sha256
19182 (base32
19183 "0pscbyr840m7fyfc3r8zv9kgkwdcn9f78p7zsrczciwd09m82g0c"))))
19184 (build-system python-build-system)
19185 (home-page "https://github.com/aio-libs/async_timeout/")
19186 (synopsis "Timeout context manager for asyncio programs")
19187 (description "@code{async-timeout} provides a timeout timeout context
19188 manager compatible with @code{asyncio}.")
19189 (license license:asl2.0)))
19190
19191 (define-public python-glob2
19192 (package
19193 (name "python-glob2")
19194 (version "0.7")
19195 (source
19196 (origin
19197 (method git-fetch)
19198 (uri (git-reference
19199 (url "https://github.com/miracle2k/python-glob2")
19200 (commit (string-append "v" version))))
19201 (file-name (git-file-name name version))
19202 (sha256
19203 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
19204 (build-system python-build-system)
19205 (home-page "https://github.com/miracle2k/python-glob2/")
19206 (synopsis "Extended Version of the python buildin glob module")
19207 (description "This is an extended version of the Python
19208 @url{http://docs.python.org/library/glob.html, built-in glob module} which
19209 adds:
19210
19211 @itemize
19212 @item The ability to capture the text matched by glob patterns, and return
19213 those matches alongside the file names.
19214 @item A recursive @code{**} globbing syntax, akin for example to the
19215 @code{globstar} option of Bash.
19216 @item The ability to replace the file system functions used, in order to glob
19217 on virtual file systems.
19218 @item Compatible with Python 2 and Python 3 (tested with 3.3).
19219 @end itemize
19220
19221 Glob2 currently based on the glob code from Python 3.3.1.")
19222 (license license:bsd-2)))
19223
19224 (define-public python2-glob2
19225 (package-with-python2 python-glob2))
19226
19227 (define-public python-gipc
19228 (package
19229 (name "python-gipc")
19230 (version "0.6.0")
19231 (source
19232 (origin
19233 (method url-fetch)
19234 (uri (pypi-uri "gipc" version ".zip"))
19235 (sha256
19236 (base32
19237 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
19238 (build-system python-build-system)
19239 (native-inputs
19240 `(("unzip" ,unzip)))
19241 (propagated-inputs
19242 `(("python-gevent" ,python-gevent)))
19243 (home-page "https://gehrcke.de/gipc/")
19244 (synopsis "Child process management in the context of gevent")
19245 (description "Usage of Python's multiprocessing package in a
19246 gevent-powered application may raise problems. With @code{gipc},
19247 process-based child processes can safely be created anywhere within a
19248 gevent-powered application.")
19249 (license license:expat)))
19250
19251 (define-public python-beautifultable
19252 (package
19253 (name "python-beautifultable")
19254 (version "1.0.0")
19255 (source
19256 (origin
19257 (method url-fetch)
19258 (uri (pypi-uri "beautifultable" version))
19259 (sha256
19260 (base32
19261 "0wwlbifcbpzy3wfv6yzsxncarsngzizmmxbn6cy5gazlcq7h4k5x"))))
19262 (build-system python-build-system)
19263 (propagated-inputs
19264 `(("python-wcwidth" ,python-wcwidth)))
19265 (arguments
19266 `(#:phases
19267 (modify-phases %standard-phases
19268 (add-after 'unpack 'patch-setup.py
19269 (lambda _
19270 (substitute* "setup.py"
19271 (("setup\\(")
19272 "setup(\n test_suite=\"test\",")))))))
19273 (home-page "https://github.com/pri22296/beautifultable")
19274 (synopsis "Print ASCII tables for terminals")
19275 (description "@code{python-beautifultable} provides a class for easily
19276 printing tabular data in a visually appealing ASCII format to a terminal.
19277
19278 Features include, but are not limited to:
19279 @itemize
19280 @item Full customization of the look and feel of the table
19281 @item Row and column accessors.
19282 @item Full support for colors using ANSI sequences or any library.
19283 @item Plenty of predefined styles and option to create custom ones.
19284 @item Support for Unicode characters.
19285 @item Supports streaming table when data is slow to retrieve.
19286 @end itemize")
19287 (license license:expat)))
19288
19289 (define-public python-globber
19290 (package
19291 (name "python-globber")
19292 (version "0.2.1")
19293 (source
19294 (origin
19295 (method git-fetch)
19296 (uri (git-reference
19297 (url "https://github.com/asharov/globber")
19298 (commit version)))
19299 (file-name (git-file-name name version))
19300 (sha256
19301 (base32
19302 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk"))))
19303 (build-system python-build-system)
19304 (home-page "https://github.com/asharov/globber")
19305 (synopsis "Library for string matching with glob patterns")
19306 (description
19307 "Globber is a Python library for matching file names against glob patterns.
19308 In contrast to other glob-matching libraries, it matches arbitrary strings and
19309 doesn't require the matched names to be existing files. In addition, it
19310 supports the globstar @code{**} operator to match an arbitrary number of
19311 path components.")
19312 (license license:asl2.0)))
19313
19314 (define-public python-git-hammer
19315 (package
19316 (name "python-git-hammer")
19317 (version "0.3.1")
19318 (source
19319 (origin
19320 (method git-fetch)
19321 (uri (git-reference
19322 (url "https://github.com/asharov/git-hammer")
19323 (commit version)))
19324 (file-name (git-file-name name version))
19325 (sha256
19326 (base32
19327 "0f9xlk86ijzpdj25hr1q4wcy8k72v3w470ngwm9mpdkfj8ng84wr"))))
19328 (build-system python-build-system)
19329 (arguments
19330 `(#:phases
19331 (modify-phases %standard-phases
19332 (add-after 'unpack 'patch-setup.py
19333 (lambda _
19334 (substitute* "setup.py"
19335 (("setup\\(")
19336 "setup(\n test_suite=\"test\",")))))))
19337 (propagated-inputs
19338 `(("python-beautifultable" ,python-beautifultable)
19339 ("python-dateutil" ,python-dateutil)
19340 ("python-gitpython" ,python-gitpython)
19341 ("python-globber" ,python-globber)
19342 ("python-matplotlib" ,python-matplotlib)
19343 ("python-sqlalchemy" ,python-sqlalchemy)
19344 ("python-sqlalchemy-utils"
19345 ,python-sqlalchemy-utils)))
19346 (home-page "https://github.com/asharov/git-hammer")
19347 (synopsis "Provide statistics for git repositories")
19348 (description
19349 "Git Hammer is a statistics tool for projects in git repositories.
19350 Its major feature is tracking the number of lines authored by each person for every
19351 commit, but it also includes some other useful statistics.")
19352 (license license:asl2.0)))
19353
19354 (define-public python-fusepy
19355 (package
19356 (name "python-fusepy")
19357 (version "2.0.4")
19358 (source
19359 (origin
19360 (method url-fetch)
19361 (uri (pypi-uri "fusepy" version))
19362 (sha256
19363 (base32
19364 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
19365 (build-system python-build-system)
19366 (arguments
19367 `(#:phases
19368 (modify-phases %standard-phases
19369 (add-before 'build 'set-library-file-name
19370 (lambda* (#:key inputs #:allow-other-keys)
19371 (let ((fuse (assoc-ref inputs "fuse")))
19372 (substitute* "fuse.py"
19373 (("find_library\\('fuse'\\)")
19374 (string-append "'" fuse "/lib/libfuse.so'")))
19375 #t))))))
19376 (propagated-inputs
19377 `(("fuse" ,fuse)))
19378 (home-page "https://github.com/fusepy/fusepy")
19379 (synopsis "Simple ctypes bindings for FUSE")
19380 (description "Python module that provides a simple interface to FUSE and
19381 MacFUSE. The binding is created using the standard @code{ctypes} library.")
19382 (license license:isc)))
19383
19384 (define-public python2-fusepy
19385 (package-with-python2 python-fusepy))
19386
19387 (define-public python-fusepyng
19388 (package
19389 (name "python-fusepyng")
19390 (version "1.0.7")
19391 (source
19392 (origin
19393 (method url-fetch)
19394 (uri (pypi-uri "fusepyng" version))
19395 (sha256
19396 (base32
19397 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
19398 (build-system python-build-system)
19399 (arguments
19400 '(#:phases
19401 (modify-phases %standard-phases
19402 (add-after 'unpack 'set-libfuse-path
19403 (lambda* (#:key inputs #:allow-other-keys)
19404 (let ((fuse (assoc-ref inputs "fuse")))
19405 (substitute* "fusepyng.py"
19406 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
19407 (string-append "\"" fuse "/lib/libfuse.so\""))))
19408 #t)))))
19409 (inputs
19410 `(("fuse" ,fuse)))
19411 (propagated-inputs
19412 `(("python-paramiko" ,python-paramiko)))
19413 (home-page "https://github.com/rianhunter/fusepyng")
19414 (synopsis "Simple ctypes bindings for FUSE")
19415 (description "@code{fusepyng} is a Python module that provides a simple
19416 interface to FUSE on various operating systems. It's just one file and is
19417 implemented using @code{ctypes}.")
19418 (license license:isc)))
19419
19420 (define-public python-userspacefs
19421 (package
19422 (name "python-userspacefs")
19423 (version "2.0.3")
19424 (source
19425 (origin
19426 (method url-fetch)
19427 (uri (pypi-uri "userspacefs" version))
19428 (sha256
19429 (base32
19430 "1v6saf62ml3j63adalvlkj4iavxjbsbapl20b21mn73p7kvn4ayf"))))
19431 (build-system python-build-system)
19432 (propagated-inputs
19433 `(("python-fusepyng" ,python-fusepyng)))
19434 (home-page "https://github.com/rianhunter/userspacefs")
19435 (synopsis "User-space file systems for Python")
19436 (description
19437 "@code{userspacefs} is a library that allows you to easily write
19438 user-space file systems in Python.")
19439 (license license:gpl3+)))
19440
19441 (define-public python-stone
19442 (package
19443 (name "python-stone")
19444 (version "3.2.1")
19445 (source
19446 (origin
19447 (method url-fetch)
19448 (uri (pypi-uri "stone" version))
19449 (sha256
19450 (base32
19451 "0xby5mpsms7b2rv8j6mvxzmzz5i9ii01brb9ylxz6kiv2i08piwv"))))
19452 (build-system python-build-system)
19453 (arguments
19454 `(#:phases
19455 (modify-phases %standard-phases
19456 (add-after 'unpack 'change-version-requirements
19457 (lambda _
19458 ;; Match the requirement in test/requirements.txt
19459 (substitute* "setup.py"
19460 (("pytest < 5") "pytest < 7"))
19461 ;; We don't care about a coverage report.
19462 (substitute* "test/requirements.txt"
19463 (("coverage.*") "coverage\n"))
19464 #t))
19465 (replace 'check
19466 (lambda* (#:key tests? #:allow-other-keys)
19467 (when tests?
19468 ;; These tests don't import currectly.
19469 (delete-file "test/test_js_client.py")
19470 (delete-file "test/test_tsd_types.py")
19471 (delete-file "test/test_python_gen.py")
19472 (setenv "PYTHONPATH"
19473 (string-append (getcwd) ":"
19474 (getenv "PYTHONPATH")))
19475 (invoke "pytest"))
19476 #t)))))
19477 (propagated-inputs
19478 `(("python-ply" ,python-ply)
19479 ("python-six" ,python-six)))
19480 (native-inputs
19481 `(("python-coverage" ,python-coverage)
19482 ("python-mock" ,python-mock)
19483 ("python-pytest" ,python-pytest)
19484 ("python-pytest-runner" ,python-pytest-runner)))
19485 (home-page "https://github.com/dropbox/stone")
19486 (synopsis "Official Api Spec Language for Dropbox")
19487 (description
19488 "Stone is an interface description language (IDL) for APIs.")
19489 (license license:expat)))
19490
19491 (define-public pybind11
19492 (package
19493 (name "pybind11")
19494 (version "2.6.1")
19495 (source (origin
19496 (method git-fetch)
19497 (uri (git-reference
19498 (url "https://github.com/pybind/pybind11")
19499 (commit (string-append "v" version))))
19500 (sha256
19501 (base32
19502 "1wh5b1xnywzxwxkyac2wvyqwzmy1qxs341jjk820r7b825wn6yad"))
19503 (file-name (git-file-name name version))))
19504 (build-system cmake-build-system)
19505 (native-inputs
19506 `(("python" ,python-wrapper)
19507
19508 ;; The following dependencies are used for tests.
19509 ("python-pytest" ,python-pytest)
19510 ("catch" ,catch-framework2-1)
19511 ("eigen" ,eigen)))
19512 (arguments
19513 `(#:configure-flags
19514 (list (string-append "-DCATCH_INCLUDE_DIR="
19515 (assoc-ref %build-inputs "catch")
19516 "/include/catch"))
19517
19518 #:phases (modify-phases %standard-phases
19519 (add-after 'install 'install-python
19520 (lambda* (#:key outputs #:allow-other-keys)
19521 (let ((out (assoc-ref outputs "out")))
19522 (with-directory-excursion "../source"
19523 (setenv "PYBIND11_USE_CMAKE" "yes")
19524 (invoke "python" "setup.py" "install"
19525 "--single-version-externally-managed"
19526 "--root=/"
19527 (string-append "--prefix=" out)))))))
19528
19529 #:test-target "check"))
19530 (home-page "https://github.com/pybind/pybind11/")
19531 (synopsis "Seamless operability between C++11 and Python")
19532 (description
19533 "@code{pybind11} is a lightweight header-only library that exposes C++
19534 types in Python and vice versa, mainly to create Python bindings of existing
19535 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
19536 library: to minimize boilerplate code in traditional extension modules by
19537 inferring type information using compile-time introspection.")
19538 (license license:bsd-3)))
19539
19540 (define-public python-pooch
19541 (package
19542 (name "python-pooch")
19543 (version "1.3.0")
19544 (source
19545 (origin
19546 (method url-fetch)
19547 (uri (pypi-uri "pooch" version))
19548 (sha256
19549 (base32 "1618adsg9r8fsv422sv35z1i723q3a1iir5v7dv2sklh4pl4im1h"))))
19550 (build-system python-build-system)
19551 (arguments
19552 `(#:tests? #f)) ;requires online data
19553 (propagated-inputs
19554 `(("python-appdirs" ,python-appdirs)
19555 ("python-packaging" ,python-packaging)
19556 ("python-requests" ,python-requests)))
19557 (home-page "https://github.com/fatiando/pooch")
19558 (synopsis "Manage your Python library's sample data files")
19559 (description
19560 "Pooch manages your Python library's sample data files: it automatically
19561 downloads and stores them in a local directory, with support for versioning
19562 and corruption checks.")
19563 (license license:bsd-3)))
19564
19565 (define-public python-fasteners
19566 (package
19567 (name "python-fasteners")
19568 (version "0.15")
19569 (source
19570 (origin
19571 (method url-fetch)
19572 (uri (pypi-uri "fasteners" version))
19573 (sha256
19574 (base32
19575 "1vzmz1xh38b84dv0f4hlp7arwmx8wjlih6lf964bpy8dnyk6s5rs"))))
19576 (build-system python-build-system)
19577 (propagated-inputs
19578 `(("python-monotonic" ,python-monotonic)
19579 ("python-six" ,python-six)))
19580 (native-inputs
19581 `(("python-testtools" ,python-testtools)))
19582 (home-page "https://github.com/harlowja/fasteners")
19583 (synopsis "Python package that provides useful locks")
19584 (description
19585 "This package provides a Python program that provides following locks:
19586
19587 @itemize
19588 @item Locking decorator
19589 @item Reader-writer locks
19590 @item Inter-process locks
19591 @item Generic helpers
19592 @end itemize\n")
19593 (license license:asl2.0)))
19594
19595 (define-public python-requests-file
19596 (package
19597 (name "python-requests-file")
19598 (version "1.4.3")
19599 (source
19600 (origin
19601 (method url-fetch)
19602 (uri (pypi-uri "requests-file" version))
19603 (sha256
19604 (base32
19605 "1yp2jaxg3v86pia0q512dg3hz6s9y5vzdivsgrba1kds05ial14g"))))
19606 (build-system python-build-system)
19607 (propagated-inputs
19608 `(("python-requests" ,python-requests)
19609 ("python-six" ,python-six)))
19610 (home-page
19611 "https://github.com/dashea/requests-file")
19612 (synopsis "File transport adapter for Requests")
19613 (description
19614 "Requests-File is a transport adapter for use with the Requests Python
19615 library to allow local file system access via @code{file://} URLs.")
19616 (license license:asl2.0)))
19617
19618 (define-public python2-requests-file
19619 (package-with-python2 python-requests-file))
19620
19621 (define-public python-identify
19622 (package
19623 (name "python-identify")
19624 (version "1.4.25")
19625 (source
19626 (origin
19627 ;; There are no tests in the PyPI tarball.
19628 (method git-fetch)
19629 (uri (git-reference
19630 (url "https://github.com/chriskuehl/identify")
19631 (commit (string-append "v" version))))
19632 (file-name (git-file-name name version))
19633 (sha256
19634 (base32 "1fqgci6skckcq0x5pnxh6k2qjzn1ndsrgha1j6wwv1ld4g9bd3hz"))))
19635 (build-system python-build-system)
19636 (arguments
19637 `(#:phases
19638 (modify-phases %standard-phases
19639 (replace 'check
19640 (lambda _
19641 (invoke "pytest" "-vv"))))))
19642 (native-inputs
19643 `(("python-coverage" ,python-coverage)
19644 ("python-pytest" ,python-pytest)))
19645 (propagated-inputs
19646 `(("python-editdistance" ,python-editdistance)))
19647 (home-page "https://github.com/chriskuehl/identify")
19648 (synopsis "File identification library for Python")
19649 (description
19650 "@code{identify} is a file identification library for Python. Given
19651 a file (or some information about a file), return a set of standardized tags
19652 identifying what the file is.")
19653 (license license:expat)))
19654
19655 (define-public python-tldextract
19656 (package
19657 (name "python-tldextract")
19658 (version "2.2.0")
19659 (source
19660 (origin
19661 (method url-fetch)
19662 (uri (pypi-uri "tldextract" version))
19663 (sha256
19664 (base32
19665 "1d5s8v6kpsgazyahflhji1cfdcf89rv7l7z55v774bhzvcjp2y99"))))
19666 (build-system python-build-system)
19667 (native-inputs
19668 `(("python-pytest" ,python-pytest)
19669 ("python-responses" ,python-responses)))
19670 (propagated-inputs
19671 `(("python-idna" ,python-idna)
19672 ("python-requests" ,python-requests)
19673 ("python-requests-file" ,python-requests-file)))
19674 (home-page
19675 "https://github.com/john-kurkowski/tldextract")
19676 (synopsis
19677 "Separate the TLD from the registered domain and subdomains of a URL")
19678 (description
19679 "TLDExtract accurately separates the TLD from the registered domain and
19680 subdomains of a URL, using the Public Suffix List. By default, this includes
19681 the public ICANN TLDs and their exceptions. It can optionally support the
19682 Public Suffix List's private domains as well.")
19683 (license license:bsd-3)))
19684
19685 (define-public python2-tldextract
19686 (package-with-python2 python-tldextract))
19687
19688 (define-public python-nodeenv
19689 (package
19690 (name "python-nodeenv")
19691 (version "1.4.0")
19692 (source
19693 (origin
19694 ;; There's no tarball in PyPI.
19695 (method git-fetch)
19696 (uri (git-reference
19697 (url "https://github.com/ekalinin/nodeenv")
19698 (commit version)))
19699 (file-name (git-file-name name version))
19700 (sha256
19701 (base32 "0y443icx0w7jlzmxmmcm4q8dqfiwgafbb9cp8jpm68mbqxbz40a7"))))
19702 (build-system python-build-system)
19703 (arguments
19704 `(#:phases
19705 (modify-phases %standard-phases
19706 (replace 'check
19707 (lambda _
19708 ;; This test fails. It tries to open a network socket.
19709 (invoke "pytest" "-vv" "-k" "not test_smoke"))))))
19710 (native-inputs
19711 `(("python-coverage" ,python-coverage)
19712 ("python-mock" ,python-mock)
19713 ("python-pytest" ,python-pytest)))
19714 (home-page "https://ekalinin.github.io/nodeenv/")
19715 (synopsis "Create isolated node.js environments")
19716 (description
19717 "Nodeenv (node.js virtual environment) is a tool to create isolated
19718 node.js environments. It creates an environment that has its own installation
19719 directories, that doesn't share libraries with other node.js virtual
19720 environments.")
19721 (license license:bsd-3)))
19722
19723 (define-public python-pynamecheap
19724 (package
19725 (name "python-pynamecheap")
19726 (version "0.0.3")
19727 (source
19728 (origin
19729 (method url-fetch)
19730 (uri (pypi-uri "PyNamecheap" version))
19731 (sha256
19732 (base32
19733 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
19734 (build-system python-build-system)
19735 (propagated-inputs
19736 `(("python-requests" ,python-requests)))
19737 (home-page
19738 "https://github.com/Bemmu/PyNamecheap")
19739 (synopsis
19740 "Namecheap API client in Python")
19741 (description
19742 "PyNamecheap is a Namecheap API client in Python.")
19743 (license license:expat)))
19744
19745 (define-public python2-pynamecheap
19746 (package-with-python2 python-pynamecheap))
19747
19748 (define-public python-dns-lexicon
19749 (package
19750 (name "python-dns-lexicon")
19751 (version "2.4.0")
19752 (source
19753 (origin
19754 (method url-fetch)
19755 (uri (pypi-uri "dns-lexicon" version))
19756 (sha256
19757 (base32
19758 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
19759 (build-system python-build-system)
19760 (arguments
19761 `(#:tests? #f)) ;requires internet access
19762 (propagated-inputs
19763 `(("python-future" ,python-future)
19764 ("python-pynamecheap" ,python-pynamecheap)
19765 ("python-requests" ,python-requests)
19766 ("python-tldextract" ,python-tldextract)
19767 ("python-urllib3" ,python-urllib3)))
19768 (home-page "https://github.com/AnalogJ/lexicon")
19769 (synopsis
19770 "Manipulate DNS records on various DNS providers")
19771 (description
19772 "Lexicon provides a way to manipulate DNS records on multiple DNS
19773 providers in a standardized way. It has a CLI but it can also be used as a
19774 Python library. It was designed to be used in automation, specifically with
19775 Let's Encrypt.")
19776 (license license:expat)))
19777
19778 (define-public python2-dns-lexicon
19779 (package-with-python2 python-dns-lexicon))
19780
19781 (define-public python-cfgv
19782 (package
19783 (name "python-cfgv")
19784 (version "3.1.0")
19785 (source
19786 (origin
19787 ;; There are no tests in the PyPI tarball.
19788 (method git-fetch)
19789 (uri (git-reference
19790 (url "https://github.com/asottile/cfgv")
19791 (commit (string-append "v" version))))
19792 (file-name (git-file-name name version))
19793 (sha256
19794 (base32 "1vvkkqw92sak4b28bpscpppq483amy52ch2yqy1i2m23q7xjkabx"))))
19795 (build-system python-build-system)
19796 (arguments
19797 `(#:phases
19798 (modify-phases %standard-phases
19799 (replace 'check
19800 (lambda _
19801 (invoke "pytest" "-vv"))))))
19802 (native-inputs
19803 `(("python-covdefaults" ,python-covdefaults)
19804 ("python-coverage" ,python-coverage)
19805 ("python-pytest" ,python-pytest)))
19806 (home-page "https://github.com/asottile/cfgv")
19807 (synopsis "Configuration validation library")
19808 (description
19809 "This library helps to validate configuration files and produce human
19810 readable error messages.")
19811 (license license:expat)))
19812
19813 (define-public python-commandlines
19814 (package
19815 (name "python-commandlines")
19816 (version "0.4.1")
19817 (source
19818 (origin
19819 (method url-fetch)
19820 (uri (pypi-uri "commandlines" version))
19821 (sha256
19822 (base32
19823 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
19824 (build-system python-build-system)
19825 (home-page "https://github.com/chrissimpkins/commandlines")
19826 (synopsis "Command line argument to object parsing library")
19827 (description
19828 "@code{Commandlines} is a Python library for command line application
19829 development that supports command line argument parsing, command string
19830 validation testing and application logic.")
19831 (license license:expat)))
19832
19833 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
19834 ;; python-numba. They have a very unflexible relationship.
19835 (define-public python-numba
19836 (package
19837 (name "python-numba")
19838 (version "0.51.2")
19839 (source
19840 (origin
19841 (method url-fetch)
19842 (uri (pypi-uri "numba" version))
19843 (sha256
19844 (base32
19845 "0s0777m8kq4l96i88zj78np7283v1n4878qfc1gvzb8l45bmkg8n"))))
19846 (build-system python-build-system)
19847 (arguments
19848 `(#:phases
19849 (modify-phases %standard-phases
19850 (add-after 'unpack 'disable-proprietary-features
19851 (lambda _
19852 (setenv "NUMBA_DISABLE_HSA" "1")
19853 (setenv "NUMBA_DISABLE_CUDA" "1")
19854 #t))
19855 (replace 'check
19856 (lambda* (#:key inputs outputs #:allow-other-keys)
19857 (add-installed-pythonpath inputs outputs)
19858 ;; Something is wrong with the PYTHONPATH when running the
19859 ;; tests from the build directory, as it complains about not being
19860 ;; able to import certain modules.
19861 (with-directory-excursion "/tmp"
19862 (setenv "HOME" (getcwd))
19863 (invoke "python3" "-m" "numba.runtests" "-v" "-m")))))))
19864 (propagated-inputs
19865 `(("python-llvmlite" ,python-llvmlite)
19866 ("python-numpy" ,python-numpy)
19867 ("python-singledispatch" ,python-singledispatch)))
19868 (native-inputs ;for tests
19869 `(("python-jinja2" ,python-jinja2)
19870 ("python-pygments" ,python-pygments)))
19871 (home-page "https://numba.pydata.org")
19872 (synopsis "Compile Python code using LLVM")
19873 (description "Numba gives you the power to speed up your applications with
19874 high performance functions written directly in Python. With a few
19875 annotations, array-oriented and math-heavy Python code can be just-in-time
19876 compiled to native machine instructions, similar in performance to C, C++ and
19877 Fortran, without having to switch languages or Python interpreters.
19878
19879 Numba works by generating optimized machine code using the LLVM compiler
19880 infrastructure at import time, runtime, or statically (using the included pycc
19881 tool).")
19882 (license license:bsd-3)))
19883
19884 (define-public python-numcodecs
19885 (package
19886 (name "python-numcodecs")
19887 (version "0.6.4")
19888 (source
19889 (origin
19890 (method url-fetch)
19891 (uri (pypi-uri "numcodecs" version))
19892 (sha256
19893 (base32
19894 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))))
19895 (build-system python-build-system)
19896 (propagated-inputs
19897 `(("python-numpy" ,python-numpy)
19898 ("python-msgpack" ,python-msgpack)))
19899 (native-inputs
19900 `(("python-pytest" ,python-pytest)
19901 ("python-setuptools-scm" ,python-setuptools-scm)))
19902 (home-page "https://github.com/zarr-developers/numcodecs")
19903 (synopsis "Buffer compression and transformation codecs")
19904 (description
19905 "This Python package provides buffer compression and transformation
19906 codecs for use in data storage and communication applications.")
19907 (license license:expat)))
19908
19909 (define-public python-asciitree
19910 (package
19911 (name "python-asciitree")
19912 (version "0.3.3")
19913 (source
19914 (origin
19915 (method url-fetch)
19916 (uri (pypi-uri "asciitree" version))
19917 (sha256
19918 (base32
19919 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
19920 (build-system python-build-system)
19921 (home-page "https://github.com/mbr/asciitree")
19922 (synopsis "Draws ASCII trees")
19923 (description "This package draws tree structures using characters.")
19924 (license license:expat)))
19925
19926 (define-public python-zarr
19927 (package
19928 (name "python-zarr")
19929 (version "2.4.0")
19930 (source
19931 (origin
19932 (method url-fetch)
19933 (uri (pypi-uri "zarr" version))
19934 (sha256
19935 (base32
19936 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
19937 (build-system python-build-system)
19938 (arguments
19939 `(#:phases
19940 (modify-phases %standard-phases
19941 (add-after 'unpack 'disable-service-tests
19942 (lambda _
19943 (setenv "ZARR_TEST_ABS" "0")
19944 (setenv "ZARR_TEST_MONGO" "0")
19945 (setenv "ZARR_TEST_REDIS" "0")
19946 #t))
19947 (replace 'check
19948 (lambda _
19949 (invoke "pytest" "-vv" "-k" "not lmdb")
19950 #t)))))
19951 (propagated-inputs
19952 `(("python-asciitree" ,python-asciitree)
19953 ("python-fasteners" ,python-fasteners)
19954 ("python-numcodecs" ,python-numcodecs)
19955 ("python-numpy" ,python-numpy)))
19956 (native-inputs
19957 `(("python-pytest" ,python-pytest)
19958 ("python-setuptools-scm" ,python-setuptools-scm)))
19959 (home-page "https://github.com/zarr-developers/zarr-python")
19960 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
19961 (description
19962 "This package provides an implementation of chunked, compressed,
19963 N-dimensional arrays for Python.")
19964 (license license:expat)))
19965
19966 (define-public python-anndata
19967 (package
19968 (name "python-anndata")
19969 (version "0.7.1")
19970 (source
19971 (origin
19972 (method url-fetch)
19973 (uri (pypi-uri "anndata" version))
19974 (sha256
19975 (base32
19976 "0rnfbpr55j1a1bi2kd4mz444741hrn74kz90h5rnjr59jmpfnh09"))))
19977 (build-system python-build-system)
19978 (arguments
19979 `(#:phases
19980 (modify-phases %standard-phases
19981 (add-after 'unpack 'delete-inconvenient-tests
19982 (lambda _
19983 ;; This test depends on python-scikit-learn.
19984 (delete-file "anndata/tests/test_inplace_subset.py")
19985 #t))
19986 (delete 'check)
19987 (add-after 'install 'check
19988 (lambda* (#:key inputs outputs #:allow-other-keys)
19989 (add-installed-pythonpath inputs outputs)
19990 (invoke "pytest" "-vv"))))))
19991 (propagated-inputs
19992 `(("python-h5py" ,python-h5py)
19993 ("python-importlib-metadata" ,python-importlib-metadata)
19994 ("python-natsort" ,python-natsort)
19995 ("python-numcodecs" ,python-numcodecs)
19996 ("python-packaging" ,python-packaging)
19997 ("python-pandas" ,python-pandas)
19998 ("python-scipy" ,python-scipy)
19999 ("python-zarr" ,python-zarr)))
20000 (native-inputs
20001 `(("python-joblib" ,python-joblib)
20002 ("python-pytest" ,python-pytest)
20003 ("python-setuptools-scm" ,python-setuptools-scm)))
20004 (home-page "https://github.com/theislab/anndata")
20005 (synopsis "Annotated data for data analysis pipelines")
20006 (description "Anndata is a package for simple (functional) high-level APIs
20007 for data analysis pipelines. In this context, it provides an efficient,
20008 scalable way of keeping track of data together with learned annotations and
20009 reduces the code overhead typically encountered when using a mostly
20010 object-oriented library such as @code{scikit-learn}.")
20011 (license license:bsd-3)))
20012
20013 (define-public python-dill
20014 (package
20015 (name "python-dill")
20016 (version "0.3.1.1")
20017 (source
20018 (origin
20019 (method url-fetch)
20020 (uri (pypi-uri "dill" version))
20021 (sha256
20022 (base32 "1704g8z70d210ksgbccs2v545v9w0wc6lx15m296alb7jf0yzn22"))))
20023 (build-system python-build-system)
20024 (arguments
20025 `(#:phases
20026 (modify-phases %standard-phases
20027 (replace 'check
20028 (lambda _
20029 (with-directory-excursion "/tmp"
20030 (invoke "nosetests" "-v"))
20031 #t)))))
20032 (native-inputs
20033 `(("python-nose" ,python-nose)))
20034 (home-page "https://pypi.org/project/dill/")
20035 (synopsis "Serialize all of Python")
20036 (description "Dill extends Python's @code{pickle} module for serializing
20037 and de-serializing Python objects to the majority of the built-in Python
20038 types. Dill provides the user the same interface as the @code{pickle} module,
20039 and also includes some additional features. In addition to pickling Python
20040 objects, @code{dill} provides the ability to save the state of an interpreter
20041 session in a single command. Hence, it would be feasible to save a
20042 interpreter session, close the interpreter, ship the pickled file to another
20043 computer, open a new interpreter, unpickle the session and thus continue from
20044 the saved state of the original interpreter session.")
20045 (license license:bsd-3)))
20046
20047 (define-public python-multiprocess
20048 (package
20049 (name "python-multiprocess")
20050 (version "0.70.9")
20051 (source
20052 (origin
20053 (method url-fetch)
20054 (uri (pypi-uri "multiprocess" version))
20055 (sha256
20056 (base32
20057 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
20058 (build-system python-build-system)
20059 (arguments
20060 `(#:phases
20061 (modify-phases %standard-phases
20062 (add-after 'unpack 'disable-broken-tests
20063 (lambda _
20064 ;; This test is broken as there is no keyboard interrupt.
20065 (substitute* "py3.7/multiprocess/tests/__init__.py"
20066 (("^(.*)def test_wait_result"
20067 line indent)
20068 (string-append indent
20069 "@unittest.skip(\"Disabled by Guix\")\n"
20070 line)))
20071 #t))
20072 ;; Tests must be run after installation.
20073 (delete 'check)
20074 (add-after 'install 'check
20075 (lambda* (#:key inputs outputs #:allow-other-keys)
20076 (add-installed-pythonpath inputs outputs)
20077 (invoke "python" "-m" "multiprocess.tests")
20078 #t)))))
20079 (propagated-inputs
20080 `(("python-dill" ,python-dill)))
20081 (home-page "https://pypi.org/project/multiprocess/")
20082 (synopsis "Multiprocessing and multithreading in Python")
20083 (description
20084 "This package is a fork of the multiprocessing Python package, a package
20085 which supports the spawning of processes using the API of the standard
20086 library's @code{threading} module.")
20087 (license license:bsd-3)))
20088
20089 (define-public python-toolz
20090 (package
20091 (name "python-toolz")
20092 (version "0.9.0")
20093 (source
20094 (origin
20095 (method url-fetch)
20096 (uri (pypi-uri "toolz" version))
20097 (sha256
20098 (base32
20099 "1j9i7fdjnx9dz35fdj5gvgxx6585ja9sxgaiv65if77nlxz0m7wj"))))
20100 (build-system python-build-system)
20101 ;; FIXME: tests cannot be computed: "Can't perform this operation for
20102 ;; unregistered loader type"
20103 (arguments '(#:tests? #f))
20104 (home-page "https://github.com/pytoolz/toolz/")
20105 (synopsis "List processing tools and functional utilities")
20106 (description
20107 "This package provides a set of utility functions for iterators,
20108 functions, and dictionaries.")
20109 (license license:bsd-3)))
20110
20111 (define-public python2-toolz
20112 (package-with-python2 python-toolz))
20113
20114 (define-public python-cytoolz
20115 (package
20116 (name "python-cytoolz")
20117 (version "0.9.0.1")
20118 (source
20119 (origin
20120 (method url-fetch)
20121 (uri (pypi-uri "cytoolz" version))
20122 (sha256
20123 (base32
20124 "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
20125 (build-system python-build-system)
20126 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
20127 ;; 'exceptions'"
20128 (arguments '(#:tests? #f))
20129 (propagated-inputs
20130 `(("python-toolz" ,python-toolz)))
20131 (native-inputs
20132 `(("python-cython" ,python-cython)))
20133 (home-page "https://github.com/pytoolz/cytoolz")
20134 (synopsis "High performance functional utilities")
20135 (description
20136 "The cytoolz package implements the same API as provided by toolz. The
20137 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
20138 that is accessible to other projects developed in Cython.")
20139 (license license:bsd-3)))
20140
20141 (define-public python-sortedcollections
20142 (package
20143 (name "python-sortedcollections")
20144 (version "2.1.0")
20145 (source
20146 (origin
20147 (method url-fetch)
20148 (uri (pypi-uri "sortedcollections" version))
20149 (sha256
20150 (base32
20151 "1kfabpnjyjm5ml2zspry9jy3xq49aybchgaa4ahic2jqdjfn1sfq"))))
20152 (build-system python-build-system)
20153 (propagated-inputs
20154 `(("python-sortedcontainers" ,python-sortedcontainers)))
20155 (arguments '(#:tests? #f)) ; Tests not included in release tarball.
20156 (home-page "http://www.grantjenks.com/docs/sortedcollections/")
20157 (synopsis "Python Sorted Collections")
20158 (description "Sorted Collections is a Python sorted collections library.")
20159 (license license:asl2.0)))
20160
20161 (define-public python-sortedcontainers
20162 (package
20163 (name "python-sortedcontainers")
20164 (version "2.1.0")
20165 (source
20166 (origin
20167 (method url-fetch)
20168 (uri (pypi-uri "sortedcontainers" version))
20169 (sha256
20170 (base32
20171 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
20172 (build-system python-build-system)
20173 (arguments
20174 ;; FIXME: Tests require many extra dependencies, and would introduce
20175 ;; a circular dependency on hypothesis, which uses this package.
20176 '(#:tests? #f))
20177 (propagated-inputs
20178 `(("python-appdirs" ,python-appdirs)
20179 ("python-distlib" ,python-distlib)
20180 ("python-filelock" ,python-filelock)
20181 ("python-six" ,python-six-bootstrap)))
20182 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
20183 (synopsis "Sorted List, Sorted Dict, Sorted Set")
20184 (description
20185 "This package provides a sorted collections library, written in
20186 pure-Python.")
20187 (license license:asl2.0)))
20188
20189 (define-public python2-sortedcontainers
20190 (package-with-python2 python-sortedcontainers))
20191
20192 (define-public python-cloudpickle
20193 (package
20194 (name "python-cloudpickle")
20195 (version "1.3.0")
20196 (source
20197 (origin
20198 (method url-fetch)
20199 (uri (pypi-uri "cloudpickle" version))
20200 (sha256
20201 (base32
20202 "0lx7gy9clp427qwcm7b23zdsldpr03gy3vxxhyi8fpbhwz859brq"))))
20203 (build-system python-build-system)
20204 (arguments
20205 '(#:phases (modify-phases %standard-phases
20206 (add-before 'check 'do-not-override-PYTHONPATH
20207 (lambda _
20208 ;; Append to PYTHONPATH instead of overriding it so
20209 ;; that dependencies from Guix can be found.
20210 (substitute* "tests/testutils.py"
20211 (("env\\['PYTHONPATH'\\] = pythonpath")
20212 "env['PYTHONPATH'] += os.pathsep + pythonpath"))
20213 #t))
20214 (replace 'check
20215 (lambda* (#:key tests? #:allow-other-keys)
20216 (if tests?
20217 (invoke "pytest" "-s" "-vv")
20218 (format #t "test suite not run~%"))
20219 #t)))))
20220 (native-inputs
20221 `(;; For tests.
20222 ("python-psutil" ,python-psutil)
20223 ("python-pytest" ,python-pytest)
20224 ("python-tornado" ,python-tornado)))
20225 (home-page "https://github.com/cloudpipe/cloudpickle")
20226 (synopsis "Extended pickling support for Python objects")
20227 (description
20228 "Cloudpickle makes it possible to serialize Python constructs not
20229 supported by the default pickle module from the Python standard library. It
20230 is especially useful for cluster computing where Python expressions are
20231 shipped over the network to execute on remote hosts, possibly close to the
20232 data.")
20233 (properties `((python2-variant . ,(delay python2-cloudpickle))))
20234 (license license:bsd-3)))
20235
20236 (define-public python2-cloudpickle
20237 (let ((base (package-with-python2 (strip-python2-variant python-cloudpickle))))
20238 (package/inherit base
20239 (native-inputs
20240 `(("python-mock" ,python2-mock)
20241 ,@(package-native-inputs base)))
20242 (propagated-inputs
20243 `(("python-futures" ,python2-futures)
20244 ,@(package-propagated-inputs base))))))
20245
20246 (define-public python-locket
20247 (package
20248 (name "python-locket")
20249 (version "0.2.0")
20250 (source
20251 (origin
20252 (method url-fetch)
20253 (uri (pypi-uri "locket" version))
20254 (sha256
20255 (base32
20256 "1d4z2zngrpqkrfhnd4yhysh66kjn4mblys2l06sh5dix2p0n7vhz"))))
20257 (build-system python-build-system)
20258 (home-page "https://github.com/mwilliamson/locket.py")
20259 (synopsis "File-based locks for Python")
20260 (description
20261 "Locket implements a lock that can be used by multiple processes provided
20262 they use the same path.")
20263 (license license:bsd-2)))
20264
20265 (define-public python2-locket
20266 (package-with-python2 python-locket))
20267
20268 (define-public python-blosc
20269 (package
20270 (name "python-blosc")
20271 (version "1.5.1")
20272 (source
20273 (origin
20274 (method url-fetch)
20275 (uri (pypi-uri "blosc" version))
20276 (sha256
20277 (base32
20278 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
20279 (build-system python-build-system)
20280 ;; FIXME: all tests pass, but then this error is printed:
20281 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
20282 (arguments '(#:tests? #f))
20283 (propagated-inputs
20284 `(("python-numpy" ,python-numpy)))
20285 (home-page "https://github.com/blosc/python-blosc")
20286 (synopsis "Python wrapper for the Blosc data compressor library")
20287 (description "Blosc is a high performance compressor optimized for binary
20288 data. It has been designed to transmit data to the processor cache faster
20289 than the traditional, non-compressed, direct memory fetch approach via a
20290 @code{memcpy()} system call.
20291
20292 Blosc works well for compressing numerical arrays that contains data with
20293 relatively low entropy, like sparse data, time series, grids with
20294 regular-spaced values, etc.
20295
20296 This Python package wraps the Blosc library.")
20297 (license license:bsd-3)))
20298
20299 (define-public python2-blosc
20300 (package-with-python2 python-blosc))
20301
20302 (define-public python-partd
20303 (package
20304 (name "python-partd")
20305 (version "0.3.9")
20306 (source
20307 (origin
20308 (method url-fetch)
20309 (uri (pypi-uri "partd" version))
20310 (sha256
20311 (base32
20312 "0sz6rwlnl4fqq220pyz863cnv0gjdxl4m7lscl71ishl5z0xkmhz"))))
20313 (build-system python-build-system)
20314 (propagated-inputs
20315 `(("python-blosc" ,python-blosc)
20316 ("python-locket" ,python-locket)
20317 ("python-numpy" ,python-numpy)
20318 ("python-pandas" ,python-pandas)
20319 ("python-pyzmq" ,python-pyzmq)
20320 ("python-toolz" ,python-toolz)))
20321 (home-page "https://github.com/dask/partd/")
20322 (synopsis "Appendable key-value storage")
20323 (description "Partd stores key-value pairs. Values are raw bytes. We
20324 append on old values. Partd excels at shuffling operations.")
20325 (license license:bsd-3)))
20326
20327 (define-public python2-partd
20328 (package-with-python2 python-partd))
20329
20330 (define-public python-fsspec
20331 (package
20332 (name "python-fsspec")
20333 (version "0.6.1")
20334 (source
20335 (origin
20336 (method url-fetch)
20337 (uri (pypi-uri "fsspec" version))
20338 (sha256
20339 (base32
20340 "1g9ba8v04s1nrh7pvzfm2md7ivl2mrz3hcq3y9d1a44gd62h17zj"))))
20341 (build-system python-build-system)
20342 (arguments '(#:tests? #f)) ; there are none
20343 (home-page "https://github.com/intake/filesystem_spec")
20344 (synopsis "File-system specification")
20345 (description "The purpose of this package is to produce a template or
20346 specification for a file-system interface, that specific implementations
20347 should follow, so that applications making use of them can rely on a common
20348 behavior and not have to worry about the specific internal implementation
20349 decisions with any given backend.")
20350 (license license:bsd-3)))
20351
20352 (define-public python-dask
20353 (package
20354 (name "python-dask")
20355 (version "2.14.0")
20356 (source
20357 (origin
20358 (method url-fetch)
20359 (uri (pypi-uri "dask" version))
20360 (sha256
20361 (base32 "031j0j26s0675v0isyps2dphm03330n7dy8ifdy70jgvf78d119q"))))
20362 (build-system python-build-system)
20363 (arguments
20364 `(#:phases
20365 (modify-phases %standard-phases
20366 (add-after 'unpack 'disable-broken-tests
20367 (lambda _
20368 ;; This test is marked as xfail when pytest-xdist is used.
20369 (substitute* "dask/tests/test_threaded.py"
20370 (("def test_interrupt\\(\\)" m)
20371 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
20372 m)))
20373 ;; This one fails with a type error:
20374 ;; TypeError: Already tz-aware, use tz_convert to convert.
20375 (substitute* "dask/dataframe/tests/test_shuffle.py"
20376 (("def test_set_index_timestamp\\(\\)" m)
20377 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
20378 m)))
20379 #t))
20380 (replace 'check
20381 (lambda _ (invoke "pytest" "-vv"))))))
20382 (propagated-inputs
20383 `(("python-cloudpickle" ,python-cloudpickle)
20384 ("python-fsspec" ,python-fsspec)
20385 ("python-numpy" ,python-numpy)
20386 ("python-packaging" ,python-packaging)
20387 ("python-pandas" ,python-pandas)
20388 ("python-partd" ,python-partd)
20389 ("python-toolz" ,python-toolz)
20390 ("python-pyyaml" ,python-pyyaml)))
20391 (native-inputs
20392 `(("python-pytest" ,python-pytest)
20393 ("python-pytest-runner" ,python-pytest-runner)))
20394 (home-page "https://github.com/dask/dask/")
20395 (synopsis "Parallel computing with task scheduling")
20396 (description
20397 "Dask is a flexible parallel computing library for analytics. It
20398 consists of two components: dynamic task scheduling optimized for computation,
20399 and large data collections like parallel arrays, dataframes, and lists that
20400 extend common interfaces like NumPy, Pandas, or Python iterators to
20401 larger-than-memory or distributed environments. These parallel collections
20402 run on top of the dynamic task schedulers. ")
20403 (license license:bsd-3)))
20404
20405 (define-public python-ilinkedlist
20406 (package
20407 (name "python-ilinkedlist")
20408 (version "0.4.0")
20409 (source
20410 (origin
20411 (method url-fetch)
20412 (uri (pypi-uri "ilinkedlist" version))
20413 (sha256
20414 (base32
20415 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
20416 (build-system python-build-system)
20417 (native-inputs `(("python-pytest" ,python-pytest)))
20418 (inputs `(("python" ,python)))
20419 (home-page "https://github.com/luther9/ilinkedlist-py")
20420 (synopsis "Immutable linked list library")
20421 (description
20422 "This is a implementation of immutable linked lists for Python. It
20423 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
20424 Since a linked list is treated as immutable, it is hashable, and its length
20425 can be retrieved in constant time. Some of the terminology is inspired by
20426 LISP. It is possible to create an improper list by creating a @code{Pair}
20427 with a non-list @code{cdr}.")
20428 (license license:gpl3+)))
20429
20430 (define-public python-readlike
20431 (package
20432 (name "python-readlike")
20433 (version "0.1.3")
20434 (source
20435 (origin
20436 (method url-fetch)
20437 (uri (pypi-uri "readlike" version))
20438 (sha256
20439 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
20440 (build-system python-build-system)
20441 (home-page "https://github.com/jangler/readlike")
20442 (synopsis "GNU Readline-like line editing module")
20443 (description
20444 "This Python module provides line editing functions similar to the default
20445 Emacs-style ones of GNU Readline. Unlike the Python standard library's
20446 @code{readline} package, this one allows access to those capabilities in settings
20447 outside of a standard command-line interface. It is especially well-suited to
20448 interfacing with Urwid, due to a shared syntax for describing key inputs.
20449
20450 Currently, all stateless Readline commands are implemented. Yanking and history
20451 are not supported.")
20452 (license license:expat)))
20453
20454 (define-public python2-readlike
20455 (package-with-python2 python-readlike))
20456
20457 (define-public python-reparser
20458 (package
20459 (name "python-reparser")
20460 (version "1.4.3")
20461 (source
20462 (origin
20463 (method url-fetch)
20464 (uri (pypi-uri "ReParser" version))
20465 (sha256
20466 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
20467 (build-system python-build-system)
20468 (home-page "https://github.com/xmikos/reparser")
20469 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
20470 (description
20471 "This Python library provides a simple lexer/parser for inline markup based
20472 on regular expressions.")
20473 (license license:expat)))
20474
20475 (define-public python2-reparser
20476 (let ((reparser (package-with-python2
20477 (strip-python2-variant python-reparser))))
20478 (package/inherit reparser
20479 (propagated-inputs
20480 `(("python2-enum34" ,python2-enum34)
20481 ,@(package-propagated-inputs reparser))))))
20482
20483 (define-public python-retrying
20484 (package
20485 (name "python-retrying")
20486 (version "1.3.3")
20487 (source
20488 (origin
20489 (method git-fetch)
20490 (uri (git-reference
20491 (url "https://github.com/rholder/retrying")
20492 (commit (string-append "v" version))))
20493 (file-name (git-file-name name version))
20494 (sha256
20495 (base32
20496 "1kqipkbdaw5s1xg0gi29awm03vp1x8dz24pjidgxagvkvrjpzhi7"))))
20497 (build-system python-build-system)
20498 (propagated-inputs
20499 `(("python-six" ,python-six)))
20500 (home-page "https://github.com/rholder/retrying")
20501 (synopsis "Library for adding retry behavior")
20502 (description "Retrying is a general-purpose retrying library to simplify
20503 the task of adding retry behavior to just about anything.
20504
20505 Features:
20506
20507 @itemize
20508 @item Generic Decorator API.
20509 @item Specify stop condition (i.e. limit by number of attempts).
20510 @item Specify wait condition (i.e. exponential backoff sleeping between attempts).
20511 @item Customize retrying on Exceptions.
20512 @item Customize retrying on expected returned result.
20513 @end itemize")
20514 (license license:asl2.0)))
20515
20516 (define-public python-pre-commit
20517 (package
20518 (name "python-pre-commit")
20519 (version "2.10.0")
20520 (source
20521 (origin
20522 (method url-fetch)
20523 (uri (pypi-uri "pre_commit" version))
20524 (sha256
20525 (base32 "1ycf6wpxrhxhdzz0vpryhbdxlwik5khgcvp3hxwvfr447a6k84zl"))))
20526 (build-system python-build-system)
20527 (arguments
20528 ;; Tests fail with "AttributeError: module 'pre_commit.resources' has no
20529 ;; attribute 'empty_template_setup'".
20530 `(#:tests? #false))
20531 (propagated-inputs
20532 `(("python-cfgv" ,python-cfgv)
20533 ("python-identify" ,python-identify)
20534 ("python-importlib-metadata" ,python-importlib-metadata)
20535 ("python-importlib-resources" ,python-importlib-resources)
20536 ("python-nodeenv" ,python-nodeenv)
20537 ("python-pyyaml" ,python-pyyaml)
20538 ("python-toml" ,python-toml)
20539 ("python-virtualenv" ,python-virtualenv)))
20540 (home-page "https://github.com/pre-commit/pre-commit")
20541 (synopsis "Framework for managing multi-language pre-commit hooks")
20542 (description
20543 "This package provides a framework for managing and maintaining
20544 multi-language pre-commit hooks.")
20545 (license license:expat)))
20546
20547 (define-public python-precis-i18n
20548 (package
20549 (name "python-precis-i18n")
20550 (version "1.0.0")
20551 (source
20552 (origin
20553 (method url-fetch)
20554 (uri (pypi-uri "precis_i18n" version))
20555 (sha256
20556 (base32
20557 "0gjhvwd8aifx94rl1ag08vlmndyx2q3fkyqb0c4i46x3p2bc2yi2"))))
20558 (build-system python-build-system)
20559 (home-page "https://github.com/byllyfish/precis_i18n")
20560 (synopsis "Implementation of the PRECIS framework")
20561 (description
20562 "This module implements the PRECIS Framework as described in RFC 8264,
20563 RFC 8265 and RFC 8266.")
20564 (license license:expat)))
20565
20566 (define-public python-absl-py
20567 (package
20568 (name "python-absl-py")
20569 (version "0.6.1")
20570 (source
20571 (origin
20572 (method url-fetch)
20573 (uri (pypi-uri "absl-py" version))
20574 (sha256
20575 (base32
20576 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
20577 (build-system python-build-system)
20578 (propagated-inputs
20579 `(("python-six" ,python-six)))
20580 (home-page "https://github.com/abseil/abseil-py")
20581 (synopsis "Abseil Python common libraries")
20582 (description
20583 "This package provides the Abseil Python Common Libraries, a collection
20584 of Python libraries for building Python applications.")
20585 (license license:asl2.0)))
20586
20587 (define-public python-astor
20588 (package
20589 (name "python-astor")
20590 (version "0.8.1")
20591 (source
20592 (origin
20593 (method url-fetch)
20594 (uri (pypi-uri "astor" version))
20595 (sha256
20596 (base32
20597 "0ppscdzzvxpznclkmhhj53iz314x3pfv4yc7c6gwxqgljgdgyvka"))))
20598 (build-system python-build-system)
20599 ;; FIXME: There are two errors and two test failures.
20600 (arguments `(#:tests? #f))
20601 (home-page "https://github.com/berkerpeksag/astor")
20602 (synopsis "Read and write Python ASTs")
20603 (description "Astor is designed to allow easy manipulation of Python
20604 source via the Abstract Syntax Tree.")
20605 (license license:bsd-3)))
20606
20607 (define-public python2-astor
20608 (package-with-python2 python-astor))
20609
20610 (define-public python-astunparse
20611 (package
20612 (name "python-astunparse")
20613 (version "1.6.2")
20614 (source
20615 (origin
20616 (method url-fetch)
20617 (uri (pypi-uri "astunparse" version))
20618 (sha256
20619 (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
20620 (build-system python-build-system)
20621 (arguments '(#:tests? #f)) ; there are none
20622 (propagated-inputs
20623 `(("python-six" ,python-six)
20624 ("python-wheel" ,python-wheel)))
20625 (home-page "https://github.com/simonpercivall/astunparse")
20626 (synopsis "AST unparser for Python")
20627 (description "This package provides an AST unparser for Python. It is a
20628 factored out version of @code{unparse} found in the Python source
20629 distribution.")
20630 (license license:bsd-3)))
20631
20632 (define-public python-gast
20633 (package
20634 (name "python-gast")
20635 (version "0.3.3")
20636 (source
20637 (origin
20638 (method url-fetch)
20639 (uri (pypi-uri "gast" version))
20640 (sha256
20641 (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq"))))
20642 (build-system python-build-system)
20643 (propagated-inputs
20644 `(("python-astunparse" ,python-astunparse)))
20645 (home-page "https://pypi.org/project/gast/")
20646 (synopsis "Generic Python AST that abstracts the underlying Python version")
20647 (description
20648 "GAST provides a compatibility layer between the AST of various Python
20649 versions, as produced by @code{ast.parse} from the standard @code{ast}
20650 module.")
20651 (license license:bsd-3)))
20652
20653 (define-public python-wikidata
20654 (package
20655 (name "python-wikidata")
20656 (version "0.6.1")
20657 (source
20658 (origin
20659 (method url-fetch)
20660 (uri (pypi-uri "Wikidata" version))
20661 (sha256
20662 (base32
20663 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
20664 (build-system python-build-system)
20665 (propagated-inputs
20666 `(("python-babel" ,python-babel)))
20667 (home-page "https://github.com/dahlia/wikidata")
20668 (synopsis "Wikidata client library")
20669 (description
20670 "This package provides a Python interface to
20671 @url{https://www.wikidata.org/, Wikidata}.")
20672 (properties '((upstream-name . "Wikidata")))
20673 (license license:gpl3+)))
20674
20675 (define-public python-doctest-ignore-unicode
20676 (package
20677 (name "python-doctest-ignore-unicode")
20678 (version "0.1.2")
20679 (source
20680 (origin
20681 (method url-fetch)
20682 (uri (pypi-uri "doctest-ignore-unicode" version))
20683 (sha256
20684 (base32
20685 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
20686 (build-system python-build-system)
20687 (native-inputs
20688 `(("python-nose" ,python-nose)))
20689 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
20690 (synopsis "Ignore Unicode literal prefixes in doctests")
20691 (description
20692 "This package adds support for a flag to ignore Unicode literal prefixes
20693 in doctests.")
20694 (license license:asl2.0)))
20695
20696 (define-public python-attr
20697 (package
20698 (name "python-attr")
20699 (version "0.3.1")
20700 (source
20701 (origin
20702 (method url-fetch)
20703 (uri (pypi-uri "attr" version))
20704 (sha256
20705 (base32
20706 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
20707 (build-system python-build-system)
20708 (home-page "https://github.com/denis-ryzhkov/attr")
20709 (synopsis "Decorator for attributes of target function or class")
20710 (description "Simple decorator to set attributes of target function or
20711 class in a @acronym{DRY, Don't Repeat Yourself} way.")
20712 (license license:expat)))
20713
20714 (define-public python-construct
20715 (package
20716 (name "python-construct")
20717 (version "2.10.56")
20718 (source
20719 (origin
20720 (method url-fetch)
20721 (uri (pypi-uri "construct" version))
20722 (sha256
20723 (base32
20724 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
20725 (build-system python-build-system)
20726 (arguments
20727 `(#:tests? #f)) ; No tests exist.
20728 (propagated-inputs
20729 `(("python-extras" ,python-extras)
20730 ("python-arrow" ,python-arrow)
20731 ("python-numpy" ,python-numpy)
20732 ("python-ruamel.yaml" ,python-ruamel.yaml)))
20733 (home-page "https://construct.readthedocs.io")
20734 (synopsis "Declarative and symmetrical parser and builder for binary data")
20735 (description
20736 "This package provides both simple, atomic constructs (such as
20737 integers of various sizes), as well as composite ones which allow you
20738 form hierarchical and sequential structures of increasing complexity.
20739 It features bit and byte granularity, easy debugging and testing, an
20740 easy-to-extend subclass system, and lots of primitive constructs to
20741 make your work easier.")
20742 (license license:expat)))
20743
20744 (define-public python-outcome
20745 (package
20746 (name "python-outcome")
20747 (version "1.0.1")
20748 (source
20749 (origin
20750 (method url-fetch)
20751 (uri (pypi-uri "outcome" version))
20752 (sha256
20753 (base32 "0vxn04vspmlkkyijjkjnsc46f93ki8g62hr7ag10zpd7ic324y7w"))))
20754 (build-system python-build-system)
20755 (arguments
20756 `(#:phases
20757 (modify-phases %standard-phases
20758 (replace 'check
20759 (lambda* (#:key inputs outputs #:allow-other-keys)
20760 (add-installed-pythonpath inputs outputs)
20761 (invoke "pytest" "-vv"))))))
20762 (native-inputs
20763 `(("python-pytest" ,python-pytest)
20764 ("python-pytest-cov" ,python-pytest-cov)
20765 ("python-pytest-asyncio" ,python-pytest-asyncio)))
20766 (propagated-inputs
20767 `(("python-async-generator" ,python-async-generator)
20768 ("python-attrs" ,python-attrs)))
20769 (home-page "https://github.com/python-trio/outcome")
20770 (synopsis "Capture the outcome of Python function calls")
20771 (description
20772 "Capture the outcome of Python function calls. Extracted from the Trio
20773 project.")
20774 ;; Either license applies.
20775 (license (list license:expat license:asl2.0))))
20776
20777 (define-public python-trio
20778 (package
20779 (name "python-trio")
20780 (version "0.17.0")
20781 (source
20782 (origin
20783 (method url-fetch)
20784 (uri (pypi-uri "trio" version))
20785 (sha256
20786 (base32 "0zcxirpdvvl54pbfkgw7vz984879xwvdygqfpggnam24is2zjp78"))))
20787 (build-system python-build-system)
20788 (arguments
20789 `(#:phases
20790 (modify-phases %standard-phases
20791 (add-before 'check 'change-home
20792 (lambda _
20793 ;; Tests require a writable home.
20794 (setenv "HOME" "/tmp")
20795 #t))
20796 (replace 'check
20797 (lambda _
20798 (invoke "pytest" "-vv" "-k"
20799 (string-append
20800 ;; This test times out.
20801 "not test_ki_protection_works"
20802 ;; Assertion errors.
20803 " and not test_guest_mode_ki"
20804 " and not test_run_in_trio_thread_ki"
20805 ;; These try to raise KeyboardInterrupt which does not work
20806 ;; in the build environment.
20807 " and not test_ki_self"
20808 " and not test_ki_wakes_us_up"
20809 ;; Failure in name resolution.
20810 " and not test_getnameinfo"
20811 " and not test_SocketType_resolve"
20812 ;; OSError: protocol not found.
20813 " and not test_getprotobyname")))))))
20814 (native-inputs
20815 `(("python-astor" ,python-astor)
20816 ("python-ipython" ,python-ipython)
20817 ("python-jedi" ,python-jedi)
20818 ("python-pylint" ,python-pylint)
20819 ("python-pyopenssl" ,python-pyopenssl)
20820 ("python-pytest" ,python-pytest)
20821 ("python-pytest-cov" ,python-pytest-cov)
20822 ("python-trustme" ,python-trustme)))
20823 (propagated-inputs
20824 `(("python-attrs" ,python-attrs)
20825 ("python-idna" ,python-idna)
20826 ("python-outcome" ,python-outcome)
20827 ("python-sniffio" ,python-sniffio)
20828 ("python-sortedcontainers"
20829 ,python-sortedcontainers)))
20830 (home-page "https://github.com/python-trio/trio")
20831 (synopsis "Friendly Python library for async concurrency and I/O")
20832 (description
20833 "Trio strives to be a production-quality, async/await-native I/O library
20834 for Python. Like all async libraries, its main purpose is to help you write
20835 programs that do multiple things at the same time with parallelized I/O.")
20836 ;; Either license applies.
20837 (license (list license:expat license:asl2.0))))
20838
20839 (define-public python-trio-typing
20840 (package
20841 (name "python-trio-typing")
20842 (version "0.5.0")
20843 (source
20844 (origin
20845 (method url-fetch)
20846 (uri (pypi-uri "trio-typing" version))
20847 (sha256
20848 (base32 "1yvlj4vf3wyvp16dw6vyfm4i2idm8lvdc3fvjhi6mhm62zv7s07j"))))
20849 (build-system python-build-system)
20850 (arguments
20851 `(#:phases
20852 (modify-phases %standard-phases
20853 (replace 'check
20854 (lambda _
20855 (invoke "pytest" "-vv"))))))
20856 (native-inputs
20857 `(("python-attrs" ,python-attrs)
20858 ("python-pytest" ,python-pytest)))
20859 (propagated-inputs
20860 `(("python-mypy" ,python-mypy)
20861 ("python-mypy-extensions"
20862 ,python-mypy-extensions)
20863 ("python-trio" ,python-trio)
20864 ("python-typing-extensions"
20865 ,python-typing-extensions)))
20866 (home-page "https://github.com/python-trio/trio-typing")
20867 (synopsis "Static type checking support for Trio and related projects")
20868 (description
20869 "This package provides:
20870
20871 @itemize
20872 @item PEP 561 typing stubs packages for the Trio project packages:
20873
20874 @itemize
20875 @item trio (@code{trio-stubs})
20876 @item outcome (@code{outcome-stubs})
20877 @item async_generator (@code{async_generator-stubs})
20878 @end itemize
20879
20880 @item A package @code{trio_typing} containing types that Trio programs often
20881 want to refer to (@code{AsyncGenerator[Y, S]} and @code{TaskStatus[T])} and
20882 a mypy plugin that smooths over some limitations in the basic type hints.
20883 @end itemize")
20884 ;; Either license applies.
20885 (license (list license:expat license:asl2.0))))
20886
20887 (define-public python-humanize
20888 (package
20889 (name "python-humanize")
20890 (version "0.5.1")
20891 (source
20892 (origin
20893 (method url-fetch)
20894 (uri (pypi-uri "humanize" version))
20895 (sha256
20896 (base32
20897 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
20898 (arguments
20899 '(#:tests? #f)) ; tests not in pypi archive
20900 (build-system python-build-system)
20901 (home-page "https://github.com/jmoiron/humanize")
20902 (synopsis "Print numerical information in a human-readable form")
20903 (description "This package provides a Python module that displays numbers
20904 and dates in \"human readable\" forms. For example, it would display
20905 \"12345591313\" as \"12.3 billion\".")
20906 (license license:expat)))
20907
20908 (define-public python-txaio
20909 (package
20910 (name "python-txaio")
20911 (version "18.8.1")
20912 (source
20913 (origin
20914 (method url-fetch)
20915 (uri (pypi-uri "txaio" version))
20916 (sha256
20917 (base32
20918 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
20919 (build-system python-build-system)
20920 (propagated-inputs
20921 `(("python-twisted" ,python-twisted)
20922 ("python-six" ,python-six)))
20923 (home-page "https://github.com/crossbario/txaio")
20924 (synopsis "Compatibility layer between Python asyncio and Twisted")
20925 (description "Txaio provides a compatibility layer between the Python
20926 @code{asyncio} module and @code{Twisted}.")
20927 (license license:expat)))
20928
20929 (define-public python-toolshed
20930 (package
20931 (name "python-toolshed")
20932 (version "0.4.6")
20933 (source
20934 (origin
20935 (method url-fetch)
20936 (uri (pypi-uri "toolshed" version))
20937 (sha256
20938 (base32
20939 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
20940 (build-system python-build-system)
20941 (native-inputs
20942 `(("python-nose" ,python-nose)))
20943 (home-page "https://github.com/brentp/toolshed/")
20944 (synopsis "Collection of modules and functions for working with data")
20945 (description "This is a collection of well-tested, simple modules and
20946 functions that aim to reduce boilerplate when working with data.")
20947 (license license:bsd-2)))
20948
20949 (define-public python-annoy
20950 (package
20951 (name "python-annoy")
20952 (version "1.15.1")
20953 (source
20954 (origin
20955 (method url-fetch)
20956 (uri (pypi-uri "annoy" version))
20957 (sha256
20958 (base32
20959 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
20960 (build-system python-build-system)
20961 (native-inputs
20962 `(("python-nose" ,python-nose)))
20963 (home-page "https://github.com/spotify/annoy/")
20964 (synopsis "Approximate nearest neighbors library")
20965 (description
20966 "Annoy is a C++ library with Python bindings to search for points in
20967 space that are close to a given query point. It also creates large read-only
20968 file-based data structures that are @code{mmap}ped into memory so that many
20969 processes may share the same data.")
20970 (license license:asl2.0)))
20971
20972 (define-public python-croniter
20973 (package
20974 (name "python-croniter")
20975 (version "0.3.34")
20976 (source (origin
20977 (method url-fetch)
20978 (uri (pypi-uri "croniter" version))
20979 (sha256
20980 (base32
20981 "0r79cx4v2dw4hzr0annkkxxis46c8hivq61sr39z6p7lcjsbk1ki"))))
20982 (build-system python-build-system)
20983 (propagated-inputs
20984 `(("python-dateutil" ,python-dateutil)
20985 ("python-natsort" ,python-natsort)))
20986 (home-page "https://github.com/kiorky/croniter")
20987 (synopsis "Iterate datetime objects with cron-like syntax")
20988 (description
20989 "@code{croniter} provides iteration for datetime object with cron-like
20990 format.")
20991 (license license:expat)))
20992
20993 (define-public python-pylzma
20994 (package
20995 (name "python-pylzma")
20996 (version "0.5.0")
20997 (source
20998 (origin
20999 (method url-fetch)
21000 (uri (pypi-uri "pylzma" version))
21001 (sha256
21002 (base32
21003 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
21004 (build-system python-build-system)
21005 (home-page "https://www.joachim-bauch.de/projects/pylzma/")
21006 (synopsis "Python bindings for the LZMA library by Igor Pavlov.")
21007 (description "This package provides Python bindings for the LZMA library
21008 by Igor Pavlov.")
21009 (license license:lgpl2.1+)))
21010
21011 (define-public python2-pylzma
21012 (package-with-python2 python-pylzma))
21013
21014 (define-public python-ifaddr
21015 (package
21016 (name "python-ifaddr")
21017 (version "0.1.7")
21018 (source
21019 (origin
21020 (method url-fetch)
21021 (uri (pypi-uri "ifaddr" version))
21022 (sha256
21023 (base32
21024 "150sxdlicwrphmhnv03ykxplyd2jdrxz0mikgnivavgilrn8m7hz"))))
21025 (build-system python-build-system)
21026 (arguments
21027 `(#:phases
21028 (modify-phases %standard-phases
21029 (replace 'check
21030 (lambda _ (invoke "nosetests"))))))
21031 (native-inputs
21032 `(("python-nose" ,python-nose)))
21033 (home-page "https://github.com/pydron/ifaddr")
21034 (synopsis "Network interface and IP address enumeration library")
21035 (description "This package provides a network interface and IP address
21036 enumeration library in Python.")
21037 (license license:expat)))
21038
21039 (define-public python-zeroconf
21040 (package
21041 (name "python-zeroconf")
21042 (version "0.28.8")
21043 (source
21044 (origin
21045 (method url-fetch)
21046 (uri (pypi-uri "zeroconf" version))
21047 (sha256
21048 (base32
21049 "0narq8haa3b375vfblbyil77n8bw0wxqnanl91pl0wwwm884mqjb"))))
21050 (build-system python-build-system)
21051 (native-inputs
21052 `(("python-nose" ,python-nose)))
21053 (propagated-inputs
21054 `(("python-ifaddr" ,python-ifaddr)))
21055 (arguments
21056 `(#:phases
21057 (modify-phases %standard-phases
21058 (replace 'check
21059 (lambda _ ;; Networking isn't available for these tests.
21060 (invoke "nosetests" "-v"
21061 "--exclude" "test_integration_with_listener_ipv6"
21062 "--exclude" "test_launch_and_close_v6_only"
21063 "--exclude" "test_launch_and_close_v4_v6"
21064 "--exclude" "test_launch_and_close"))))))
21065 (home-page "https://github.com/jstasiak/python-zeroconf")
21066 (synopsis "Pure Python mDNS service discovery")
21067 (description
21068 "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
21069 compatible).")
21070 (license license:lgpl2.1+)))
21071
21072 (define-public python2-zeroconf
21073 (package
21074 (name "python2-zeroconf")
21075
21076 ;; This is the last version that supports Python 2.x.
21077 (version "0.19.1")
21078 (source
21079 (origin
21080 (method url-fetch)
21081 (uri (pypi-uri "zeroconf" version))
21082 (sha256
21083 (base32
21084 "0ykzg730n915qbrq9bn5pn06bv6rb5zawal4sqjyfnjjm66snkj3"))))
21085 (build-system python-build-system)
21086 (arguments
21087 `(#:python ,python-2
21088 #:phases
21089 (modify-phases %standard-phases
21090 (add-after 'unpack 'patch-requires
21091 (lambda* (#:key inputs #:allow-other-keys)
21092 (substitute* "setup.py"
21093 (("enum-compat")
21094 "enum34"))
21095 #t)))))
21096 (native-inputs
21097 `(("python2-six" ,python2-six)
21098 ("python2-enum32" ,python2-enum34)
21099 ("python2-netifaces" ,python2-netifaces)
21100 ("python2-typing" ,python2-typing)))
21101 (home-page "https://github.com/jstasiak/python-zeroconf")
21102 (synopsis "Pure Python mDNS service discovery")
21103 (description
21104 "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
21105 compatible).")
21106 (license license:lgpl2.1+)))
21107
21108 (define-public python-bsddb3
21109 (package
21110 (name "python-bsddb3")
21111 (version "6.2.6")
21112 (source
21113 (origin
21114 (method url-fetch)
21115 (uri (pypi-uri "bsddb3" version))
21116 (sha256
21117 (base32
21118 "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
21119 (build-system python-build-system)
21120 (inputs
21121 `(("bdb" ,bdb)))
21122 (arguments
21123 '(#:phases
21124 (modify-phases %standard-phases
21125 (add-after 'unpack 'configure-locations
21126 (lambda* (#:key inputs #:allow-other-keys)
21127 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
21128 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
21129 #t))
21130 (replace 'check
21131 (lambda _
21132 (invoke "python3" "test3.py" "-v"))))))
21133 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
21134 (synopsis "Python bindings for Oracle Berkeley DB")
21135 (description
21136 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
21137 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
21138 Transaction objects, and each of these is exposed as a Python type in the
21139 bsddb3.db module. The database objects can use various access methods: btree,
21140 hash, recno, and queue. Complete support of Berkeley DB distributed
21141 transactions. Complete support for Berkeley DB Replication Manager.
21142 Complete support for Berkeley DB Base Replication. Support for RPC.")
21143 (license license:bsd-3)))
21144
21145 (define-public python-dbfread
21146 (package
21147 (name "python-dbfread")
21148 (version "2.0.7")
21149 (source (origin
21150 (method url-fetch)
21151 (uri (pypi-uri "dbfread" version))
21152 (sha256
21153 (base32
21154 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
21155 (build-system python-build-system)
21156 (native-inputs
21157 `(("python-pytest" ,python-pytest)))
21158 (home-page "https://dbfread.readthedocs.io")
21159 (synopsis "Read DBF Files with Python")
21160 (description
21161 "This library reads DBF files and returns the data as native Python data
21162 types for further processing. It is primarily intended for batch jobs and
21163 one-off scripts.")
21164 (license license:expat)))
21165
21166 (define-public python-cached-property
21167 (package
21168 (name "python-cached-property")
21169 (version "1.5.1")
21170 (source
21171 (origin
21172 (method url-fetch)
21173 (uri (pypi-uri "cached-property" version))
21174 (sha256
21175 (base32
21176 "010m1bl380l2r3vwq24r5v14l6gwvgm9v0mqqjkjss552jgsa5wj"))))
21177 (build-system python-build-system)
21178 (arguments
21179 `(#:phases
21180 (modify-phases %standard-phases
21181 ;; https://github.com/pydanny/cached-property/issues/131
21182 ;; recent versions of freezegun break one test
21183 (add-after 'unpack 'disable-broken-test
21184 (lambda _
21185 (substitute* "tests/test_cached_property.py"
21186 (("def test_threads_ttl_expiry\\(self\\)" m)
21187 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
21188 " " m)))
21189 #t)))))
21190 (native-inputs
21191 `(("python-freezegun" ,python-freezegun)))
21192 (home-page
21193 "https://github.com/pydanny/cached-property")
21194 (synopsis
21195 "Decorator for caching properties in classes")
21196 (description
21197 "This package provides a decorator which makes caching
21198 time-or-computationally-expensive properties quick and easy and works in Python
21199 2 or 3.")
21200 (license license:bsd-3)))
21201
21202 (define-public python-folium
21203 (package
21204 (name "python-folium")
21205 (version "0.12.1")
21206 (source
21207 (origin
21208 ;; PyPI has a ".whl" file but not a proper source release.
21209 ;; Thus, fetch code from Git.
21210 (method git-fetch)
21211 (uri (git-reference
21212 (url "https://github.com/python-visualization/folium")
21213 (commit (string-append "v" version))))
21214 (file-name (git-file-name name version))
21215 (sha256
21216 (base32 "0yi5y9pfpbc4bc4ibr8cblif8ls1wf3k0zawyx86r2qwxxkkyd6k"))))
21217 (build-system python-build-system)
21218 (propagated-inputs
21219 `(("python-branca" ,python-branca)
21220 ("python-jinja2" ,python-jinja2)
21221 ("python-numpy" ,python-numpy)
21222 ("python-requests" ,python-requests)))
21223 (native-inputs
21224 `(("python-pytest" ,python-pytest)))
21225 (home-page "https://github.com/python-visualization/folium")
21226 (synopsis "Make beautiful maps with Leaflet.js & Python")
21227 (description "@code{folium} makes it easy to visualize data that’s been
21228 manipulated in Python on an interactive leaflet map. It enables both the
21229 binding of data to a map for @code{choropleth} visualizations as well as
21230 passing rich vector/raster/HTML visualizations as markers on the map.
21231
21232 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
21233 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
21234 supports Image, Video, GeoJSON and TopoJSON overlays.")
21235 (license license:expat)))
21236
21237 (define-public jube
21238 (package
21239 ;; This is a command-line tool, so no "python-" prefix.
21240 (name "jube")
21241 (version "2.2.2")
21242 (source (origin
21243 (method url-fetch)
21244 (uri (string-append
21245 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
21246 version))
21247 (sha256
21248 (base32
21249 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
21250 (file-name (string-append "jube-" version ".tar.gz"))))
21251 (build-system python-build-system)
21252 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
21253 (synopsis "Benchmarking environment")
21254 (description
21255 "JUBE helps perform and analyze benchmarks in a systematic way. For each
21256 benchmarked application, benchmark data is stored in a format that allows JUBE
21257 to deduct the desired information. This data can be parsed by automatic pre-
21258 and post-processing scripts that draw information and store it more densely
21259 for manual interpretation.")
21260 (license license:gpl3+)))
21261
21262 (define-public python-pyroutelib3
21263 (package
21264 (name "python-pyroutelib3")
21265 (version "1.3.post1")
21266 (source
21267 (origin
21268 (method url-fetch)
21269 (uri (pypi-uri "pyroutelib3" version))
21270 (sha256
21271 (base32
21272 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
21273 (build-system python-build-system)
21274 (propagated-inputs
21275 `(("python-dateutil" ,python-dateutil)))
21276 (home-page "https://github.com/MKuranowski/pyroutelib3")
21277 (synopsis "Library for simple routing on OSM data")
21278 (description "Library for simple routing on OSM data")
21279 (license license:gpl3+)))
21280
21281 (define-public python-bibtexparser
21282 (package
21283 (name "python-bibtexparser")
21284 (version "1.1.0")
21285 (source
21286 (origin
21287 (method url-fetch)
21288 (uri (pypi-uri "bibtexparser" version))
21289 (sha256
21290 (base32
21291 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
21292 (build-system python-build-system)
21293 (propagated-inputs
21294 `(("python-pyparsing" ,python-pyparsing)))
21295 (native-inputs
21296 `(("python-future" ,python-future)))
21297 (home-page "https://github.com/sciunto-org/python-bibtexparser")
21298 (synopsis "Python library to parse BibTeX files")
21299 (description "BibtexParser is a Python library to parse BibTeX files.")
21300 (license (list license:bsd-3 license:lgpl3))))
21301
21302 (define-public python-distro
21303 (package
21304 (name "python-distro")
21305 (version "1.4.0")
21306 (source
21307 (origin
21308 (method url-fetch)
21309 (uri (pypi-uri "distro" version))
21310 (sha256
21311 (base32
21312 "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
21313 (build-system python-build-system)
21314 (native-inputs
21315 `(("python-pytest" ,python-pytest)))
21316 (home-page "https://github.com/nir0s/distro")
21317 (synopsis
21318 "OS platform information API")
21319 (description
21320 "@code{distro} provides information about the OS distribution it runs on,
21321 such as a reliable machine-readable ID, or version information.
21322
21323 It is the recommended replacement for Python's original
21324 `platform.linux_distribution` function (which will be removed in Python 3.8).
21325 @code{distro} also provides a command-line interface to output the platform
21326 information in various formats.")
21327 (license license:asl2.0)))
21328
21329 (define-public python-cairosvg
21330 (package
21331 (name "python-cairosvg")
21332 (version "2.5.0")
21333 (source
21334 (origin
21335 (method url-fetch)
21336 (uri (pypi-uri "CairoSVG" version))
21337 (sha256
21338 (base32 "1ylsisha2cc4w0yydxwhy7idkfw1inl9fsipxsrm7vyby080vi9z"))))
21339 (build-system python-build-system)
21340 (arguments
21341 `(#:phases
21342 (modify-phases %standard-phases
21343 (replace 'check
21344 (lambda _ (invoke "pytest"))))))
21345 (propagated-inputs
21346 `(("python-cairocffi" ,python-cairocffi)
21347 ("python-cssselect2" ,python-cssselect2)
21348 ("python-defusedxml" ,python-defusedxml)
21349 ("python-pillow" ,python-pillow)
21350 ("python-tinycss2" ,python-tinycss2)))
21351 (native-inputs
21352 `(("python-pytest-flake8" ,python-pytest-flake8)
21353 ("python-pytest-isort" ,python-pytest-isort)
21354 ("python-pytest-runner" ,python-pytest-runner)))
21355 (home-page "https://cairosvg.org/")
21356 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
21357 (description "CairoSVG is a SVG converter based on Cairo. It can export
21358 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
21359 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
21360 parsed, the result is drawn to a Cairo surface that can be exported to
21361 qvarious formats: PDF, PostScript, PNG and even SVG.")
21362 (license license:lgpl3+)))
21363
21364 (define-public python-pyphen
21365 (package
21366 (name "python-pyphen")
21367 (version "0.10.0")
21368 (source
21369 (origin
21370 (method url-fetch)
21371 (uri (pypi-uri "Pyphen" version))
21372 (sha256
21373 (base32 "0a1iwrgs4hzwzz60q4i1813kbzimhm0i4q8grh8vqkxhnkgj36vi"))))
21374 (build-system python-build-system)
21375 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
21376 ;; embedded set provided by upstream - like Debian does.
21377 (home-page "https://github.com/Kozea/Pyphen")
21378 (synopsis "Pure Python module to hyphenate text")
21379 (description "Pyphen is a pure Python module to hyphenate text using
21380 existing Hunspell hyphenation dictionaries.")
21381 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
21382
21383 (define-public python-intelhex
21384 (package
21385 (name "python-intelhex")
21386 (version "2.2.1")
21387 (source
21388 (origin
21389 (method url-fetch)
21390 (uri (pypi-uri "intelhex" version))
21391 (sha256
21392 (base32
21393 "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780"))))
21394 (build-system python-build-system)
21395 (arguments '(#:tests? #f)) ;issue with version
21396 (home-page "https://pypi.org/project/IntelHex/")
21397 (synopsis "Python library for Intel HEX files manipulations")
21398 (description "The Intel HEX file format is widely used in microprocessors
21399 and microcontrollers area (embedded systems etc.) as the de facto standard for
21400 representation of code to be programmed into microelectronic devices. This
21401 package provides an intelhex Python library to read, write, create from
21402 scratch and manipulate data from Intel HEX file format. It also includes
21403 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
21404 converters and more, those based on the library itself.")
21405 (license license:bsd-3)))
21406
21407 (define-public python-pykwalify
21408 (package
21409 (name "python-pykwalify")
21410 (version "1.7.0")
21411 (source
21412 (origin
21413 (method url-fetch)
21414 (uri (pypi-uri "pykwalify" version))
21415 (sha256
21416 (base32
21417 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
21418 (build-system python-build-system)
21419 (arguments '(#:tests? #f)) ;missing dependencies
21420 (propagated-inputs
21421 `(("python-dateutil" ,python-dateutil)
21422 ("python-docopt" ,python-docopt)
21423 ("python-pyyaml" ,python-pyyaml)))
21424 (home-page "https://github.com/grokzen/pykwalify")
21425 (synopsis
21426 "Python lib/cli for JSON/YAML schema validation")
21427 (description
21428 "This package provides a parser, schema validator, and data binding tool
21429 for YAML and JSON.")
21430 (license license:expat)))
21431
21432 (define-public python-dbusmock
21433 (package
21434 (name "python-dbusmock")
21435 (version "0.18.3")
21436 (source
21437 (origin
21438 (method url-fetch)
21439 (uri (pypi-uri "python-dbusmock" version))
21440 (sha256
21441 (base32
21442 "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
21443 (build-system python-build-system)
21444 (arguments
21445 '(#:phases
21446 (modify-phases %standard-phases
21447 (add-after 'unpack 'patch-shell-path
21448 (lambda _
21449 (substitute* "tests/test_code.py"
21450 (("/bin/bash") (which "bash")))
21451 #t)))))
21452 (native-inputs
21453 `(;; For tests.
21454 ("dbus" ,dbus) ; for dbus-daemon
21455 ("python-nose" ,python-nose)
21456 ("which" ,which)))
21457 (propagated-inputs
21458 `(("python-dbus" ,python-dbus)
21459 ("python-pygobject" ,python-pygobject)))
21460 (home-page "https://github.com/martinpitt/python-dbusmock")
21461 (synopsis "Python library for mock D-Bus objects")
21462 (description "python-dbusmock allows for the easy creation of mock objects on
21463 D-Bus. This is useful for writing tests for software which talks to D-Bus
21464 services such as upower, systemd, logind, gnome-session or others, and it is
21465 hard (or impossible without root privileges) to set the state of the real
21466 services to what you expect in your tests.")
21467 (license license:lgpl3+)))
21468
21469 (define-public python-jsonplus
21470 (package
21471 (name "python-jsonplus")
21472 (version "0.8.0")
21473 (home-page "https://github.com/randomir/jsonplus")
21474 (source (origin
21475 (method url-fetch)
21476 (uri (pypi-uri "jsonplus" version))
21477 (sha256
21478 (base32
21479 "05yv3dw813zwas9snz124k2hki49y268b3mx0gj9w7v1nrjmglq1"))))
21480 (build-system python-build-system)
21481 ;; XXX: No tests on PyPI, and the repository has no tags.
21482 (arguments '(#:tests? #f))
21483 (propagated-inputs
21484 `(("python-dateutil" ,python-dateutil)
21485 ("python-simplejson" ,python-simplejson)
21486 ("python-sortedcontainers" ,python-sortedcontainers)))
21487 (synopsis "Serialize Python types to/from JSON")
21488 (description
21489 "This package provides functionality to serialize arbitrary data types
21490 to and from JSON. Common data types are implemented and it is easy to
21491 register custom encoders and decoders.")
21492 (license license:expat)))
21493
21494 (define-public python-ujson
21495 (package
21496 (name "python-ujson")
21497 (version "4.0.2")
21498 (source
21499 (origin
21500 (method url-fetch)
21501 (uri (pypi-uri "ujson" version))
21502 (sha256
21503 (base32
21504 "0k9w0kypy7vlskzzp2vsjswaw8lbqdrplzkbflxki9vqwglsj5f6"))
21505 (modules '((guix build utils)))
21506 (snippet
21507 '(begin (delete-file-recursively "deps") #t))))
21508 (build-system python-build-system)
21509 (arguments
21510 `(#:phases
21511 (modify-phases %standard-phases
21512 (add-after 'unpack 'link-to-system-double-conversion
21513 (lambda* (#:key inputs #:allow-other-keys)
21514 (let ((d-c (assoc-ref inputs "double-conversion")))
21515 (substitute* "setup.py"
21516 (("./deps/double-conversion/double-conversion\"")
21517 (string-append d-c "/include/double-conversion\""))
21518 (("-lstdc++" stdc)
21519 (string-append "-L" d-c "/lib\","
21520 " \"-ldouble-conversion\","
21521 " \"" stdc)))
21522 #t)))
21523 (replace 'check
21524 (lambda* (#:key inputs outputs #:allow-other-keys)
21525 (add-installed-pythonpath inputs outputs)
21526 (invoke "pytest"))))))
21527 (native-inputs
21528 `(("double-conversion" ,double-conversion)
21529 ("python-setuptools-scm" ,python-setuptools-scm)
21530 ("python-pytest" ,python-pytest)))
21531 (home-page "https://github.com/ultrajson/ultrajson")
21532 (synopsis "Ultra fast JSON encoder and decoder for Python")
21533 (description
21534 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
21535 bindings for Python 3.")
21536 (license license:bsd-3)))
21537
21538 (define-public python-iocapture
21539 ;; The latest release is more than a year older than this commit.
21540 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
21541 (revision "1"))
21542 (package
21543 (name "python-iocapture")
21544 (version "0.1.2")
21545 (source
21546 (origin
21547 (method git-fetch)
21548 (uri (git-reference
21549 (url "https://github.com/oinume/iocapture")
21550 (commit commit)))
21551 (file-name (git-file-name name version))
21552 (sha256
21553 (base32
21554 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
21555 (build-system python-build-system)
21556 (arguments
21557 `(#:phases
21558 (modify-phases %standard-phases
21559 (delete 'check)
21560 (add-after 'install 'check
21561 (lambda* (#:key inputs outputs #:allow-other-keys)
21562 (add-installed-pythonpath inputs outputs)
21563 (invoke "py.test" "-v" "tests")
21564 #t)))))
21565 (propagated-inputs
21566 `(("python-flexmock" ,python-flexmock)
21567 ("python-pytest" ,python-pytest)
21568 ("python-pytest-cov" ,python-pytest-cov)
21569 ("python-six" ,python-six)))
21570 (home-page "https://github.com/oinume/iocapture")
21571 (synopsis "Python capturing tool for stdout and stderr")
21572 (description
21573 "This package helps you to capture the standard out (stdout) and the
21574 standard error channel (stderr) in your program.")
21575 (license license:expat))))
21576
21577 (define-public python-argh
21578 ;; There are 21 commits since the latest release containing important
21579 ;; improvements.
21580 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
21581 (revision "1"))
21582 (package
21583 (name "python-argh")
21584 (version (git-version "0.26.2" revision commit))
21585 (source
21586 (origin
21587 (method git-fetch)
21588 (uri (git-reference
21589 (url "https://github.com/neithere/argh")
21590 (commit commit)))
21591 (file-name (git-file-name name version))
21592 (sha256
21593 (base32
21594 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
21595 (build-system python-build-system)
21596 (propagated-inputs
21597 `(("python-iocapture" ,python-iocapture)
21598 ("python-mock" ,python-mock)
21599 ("python-pytest" ,python-pytest)
21600 ("python-pytest-cov" ,python-pytest-cov)
21601 ("python-pytest-xdist" ,python-pytest-xdist)
21602 ("python-tox" ,python-tox)))
21603 (home-page "https://github.com/neithere/argh/")
21604 (synopsis "Argparse wrapper with natural syntax")
21605 (description
21606 "python-argh is a small library that provides several layers of
21607 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
21608 always possible to declare a command with the highest possible (and least
21609 flexible) layer and then tune the behaviour with any of the lower layers
21610 including the native API of @code{python-argparse}.")
21611 (license license:lgpl3+))))
21612
21613 (define-public python-ppft
21614 (package
21615 (name "python-ppft")
21616 (version "1.6.6.1")
21617 (source
21618 (origin
21619 (method url-fetch)
21620 (uri (pypi-uri "ppft" version))
21621 (sha256
21622 (base32
21623 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
21624 (build-system python-build-system)
21625 (arguments '(#:tests? #f)) ; there are none
21626 (propagated-inputs
21627 `(("python-six" ,python-six)))
21628 (home-page "https://pypi.org/project/ppft/")
21629 (synopsis "Fork of Parallel Python")
21630 (description
21631 "This package is a fork of Parallel Python. The Parallel Python
21632 module (@code{pp}) provides an easy and efficient way to create
21633 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
21634 computers and clusters. It features cross-platform portability and dynamic
21635 load balancing.")
21636 (license license:bsd-3)))
21637
21638 (define-public python-pox
21639 (package
21640 (name "python-pox")
21641 (version "0.2.7")
21642 (source
21643 (origin
21644 (method url-fetch)
21645 (uri (pypi-uri "pox" version))
21646 (sha256
21647 (base32
21648 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
21649 (build-system python-build-system)
21650 (arguments
21651 `(#:phases
21652 (modify-phases %standard-phases
21653 (replace 'check
21654 (lambda _
21655 (mkdir-p "/tmp/guix")
21656 (setenv "SHELL" "bash")
21657 (setenv "USERNAME" "guix")
21658 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
21659 (invoke "py.test" "-vv")
21660 #t)))))
21661 (native-inputs
21662 `(("python-pytest" ,python-pytest)
21663 ("which" ,which)))
21664 (home-page "https://pypi.org/project/pox/")
21665 (synopsis "Python utilities for file system exploration and automated builds")
21666 (description
21667 "Pox provides a collection of utilities for navigating and manipulating
21668 file systems. This module is designed to facilitate some of the low-level
21669 operating system interactions that are useful when exploring a file system on a
21670 remote host. Pox provides Python equivalents of several shell commands such
21671 as @command{which} and @command{find}. These commands allow automated
21672 discovery of what has been installed on an operating system, and where the
21673 essential tools are located.")
21674 (license license:bsd-3)))
21675
21676 (define-public python-pathos
21677 (package
21678 (name "python-pathos")
21679 (version "0.2.5")
21680 (source
21681 (origin
21682 (method url-fetch)
21683 (uri (pypi-uri "pathos" version))
21684 (sha256
21685 (base32
21686 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
21687 (build-system python-build-system)
21688 (arguments
21689 '(#:phases
21690 (modify-phases %standard-phases
21691 (replace 'check
21692 (lambda _
21693 (setenv "PYTHONPATH"
21694 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
21695 (invoke "python" "./tests/__main__.py"))))))
21696 (propagated-inputs
21697 `(("python-dill" ,python-dill)
21698 ("python-multiprocess" ,python-multiprocess)
21699 ("python-pox" ,python-pox)
21700 ("python-ppft" ,python-ppft)))
21701 (native-inputs
21702 `(("python-pytest" ,python-pytest)))
21703 (home-page "https://pypi.org/project/pathos/")
21704 (synopsis
21705 "Parallel graph management and execution in heterogeneous computing")
21706 (description
21707 "Python-pathos is a framework for heterogeneous computing. It provides a
21708 consistent high-level interface for configuring and launching parallel
21709 computations across heterogeneous resources. Python-pathos provides configurable
21710 launchers for parallel and distributed computing, where each launcher contains
21711 the syntactic logic to configure and launch jobs in an execution environment.")
21712 (license license:bsd-3)))
21713
21714 (define-public python-flit
21715 (package
21716 (name "python-flit")
21717 (version "3.0.0")
21718 (source
21719 (origin
21720 (method url-fetch)
21721 (uri (pypi-uri "flit" version))
21722 (sha256
21723 (base32
21724 "14q8qa48bli2mniznc8b54qkwvhbik4kw99y01fi5gzzl620zzml"))))
21725 (build-system python-build-system)
21726 (arguments
21727 `(#:tests? #f)) ; XXX: Check requires network access.
21728 (home-page "https://flit.readthedocs.io/")
21729 (synopsis
21730 "Simple packaging tool for simple packages")
21731 (description
21732 "Flit is a simple way to put Python packages and modules on PyPI. Flit
21733 packages a single importable module or package at a time, using the import
21734 name as the name on PyPI. All subpackages and data files within a package
21735 are included automatically.")
21736 (license license:bsd-3)))
21737
21738 (define-public python-pathtools
21739 (package
21740 (name "python-pathtools")
21741 (version "0.1.2")
21742 (source
21743 (origin
21744 (method url-fetch)
21745 (uri (pypi-uri "pathtools" version))
21746 (sha256
21747 (base32
21748 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
21749 (build-system python-build-system)
21750 (home-page
21751 "https://github.com/gorakhargosh/pathtools")
21752 (synopsis "Path utilities for Python")
21753 (description "Pattern matching and various utilities for file systems
21754 paths.")
21755 (license license:expat)))
21756
21757 (define-public python-fastentrypoints
21758 (package
21759 (name "python-fastentrypoints")
21760 (version "0.12")
21761 (source
21762 (origin
21763 (method url-fetch)
21764 (uri (pypi-uri "fastentrypoints" version))
21765 (sha256
21766 (base32
21767 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
21768 (build-system python-build-system)
21769 (home-page
21770 "https://github.com/ninjaaron/fast-entry_points")
21771 (synopsis
21772 "Makes entry_points specified in setup.py load more quickly")
21773 (description
21774 "Using entry_points in your setup.py makes scripts that start really
21775 slowly because it imports pkg_resources. This package allows such setup
21776 scripts to load entry points more quickly.")
21777 (license license:bsd-3)))
21778
21779 (define-public python-funcparserlib
21780 (package
21781 (name "python-funcparserlib")
21782 (version "0.3.6")
21783 (source
21784 (origin
21785 (method url-fetch)
21786 (uri (pypi-uri "funcparserlib" version))
21787 (sha256
21788 (base32
21789 "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
21790 (native-inputs
21791 `(("python-tox" ,python-tox)))
21792 (arguments
21793 `(#:phases
21794 (modify-phases %standard-phases
21795 (replace 'check
21796 (lambda _
21797 (invoke "tox"))))))
21798 (build-system python-build-system)
21799 (home-page
21800 "https://github.com/vlasovskikh/funcparserlib")
21801 (synopsis
21802 "Recursive descent parsing library based on functional combinators")
21803 (description
21804 "This package is a recursive descent parsing library for Python based on
21805 functional combinators. Parser combinators are just higher-order functions
21806 that take parsers as their arguments and return them as result values.")
21807 (license license:expat)))
21808
21809 (define-public python-speg
21810 (package
21811 (name "python-speg")
21812 (version "0.3")
21813 (source
21814 (origin
21815 (method url-fetch)
21816 (uri (pypi-uri "speg" version ".zip"))
21817 (sha256
21818 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
21819 (arguments
21820 `(#:tests? #f)) ;FIXME: tests fail, not sure why
21821 (native-inputs
21822 `(("unzip" ,unzip)))
21823 (build-system python-build-system)
21824 (home-page "https://github.com/avakar/speg")
21825 (synopsis "PEG-based parser interpreter with memoization")
21826 (description "This package is a PEG-based parser and interpreter with
21827 memoization.")
21828 (license license:expat)))
21829
21830 (define-public python-cson
21831 (package
21832 (name "python-cson")
21833 (version "0.8")
21834 (source
21835 (origin
21836 (method url-fetch)
21837 (uri (pypi-uri "cson" version))
21838 (sha256
21839 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
21840 (build-system python-build-system)
21841 (propagated-inputs
21842 `(("python-speg" ,python-speg)))
21843 (home-page "https://github.com/avakar/pycson")
21844 (synopsis "Parser for Coffeescript Object Notation (CSON)")
21845 (description "This package is a parser for Coffeescript Object
21846 Notation (CSON).")
21847 (license license:expat)))
21848
21849 (define-public python-asynctest
21850 (package
21851 (name "python-asynctest")
21852 (version "0.13.0")
21853 (source
21854 (origin
21855 (method url-fetch)
21856 (uri (pypi-uri "asynctest" version))
21857 (sha256
21858 (base32
21859 "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
21860 (build-system python-build-system)
21861 (arguments
21862 '(#:phases
21863 (modify-phases %standard-phases
21864 (replace 'check
21865 (lambda _
21866 (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test")))
21867 (add-after 'unpack 'disable-tests
21868 (lambda* _
21869 ;; XXX: 7 tests fail out of 220. Disable them for now.
21870 (substitute* (list "test/test_selector.py"
21871 "test/test_mock.py")
21872 (("def test_events_watched_outside_test_are_ignored")
21873 "@unittest.skip('disabled by guix')
21874 def test_events_watched_outside_test_are_ignored")
21875 (("def test_awaited_from_autospec_mock.*" line)
21876 (string-append line " return True\n"))
21877 (("def test_create_autospec_on_coroutine_and_using_assert_methods.*" line)
21878 (string-append line " return True\n"))
21879 (("def test_patch_coroutine_with_multiple_scopes.*" line)
21880 (string-append line " return True\n"))
21881 (("def test_multiple_patches_on_coroutine.*" line)
21882 (string-append line " return True\n"))
21883 (("def test_patch_coroutine_only_when_running.*" line)
21884 (string-append line " return True\n")))
21885 #t)))))
21886 (home-page "https://github.com/Martiusweb/asynctest")
21887 (synopsis "Extension of unittest for testing asyncio libraries")
21888 (description
21889 "The package asynctest is built on top of the standard unittest module
21890 and cuts down boilerplate code when testing libraries for asyncio.")
21891 (license license:asl2.0)))
21892
21893 (define-public python-aionotify
21894 (package
21895 (name "python-aionotify")
21896 (version "0.2.0")
21897 (source
21898 (origin
21899 ;; Source tarball on PyPi lacks tests
21900 (method git-fetch)
21901 (uri (git-reference
21902 (url "https://github.com/rbarrois/aionotify")
21903 (commit (string-append "v" version))))
21904 (file-name (git-file-name name version))
21905 (sha256
21906 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))
21907 (patches (search-patches "python-aionotify-0.2.0-py3.8.patch"))))
21908 (build-system python-build-system)
21909 (home-page "https://github.com/rbarrois/aionotify")
21910 (synopsis "Asyncio-powered inotify library")
21911 (description
21912 "@code{aionotify} is a simple, asyncio-based inotify library.")
21913 (license license:bsd-3)))
21914
21915 (define-public python-forbiddenfruit
21916 (package
21917 (name "python-forbiddenfruit")
21918 (version "0.1.3")
21919 (source
21920 (origin
21921 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
21922 (method git-fetch)
21923 (uri (git-reference
21924 (url "https://github.com/clarete/forbiddenfruit")
21925 (commit version)))
21926 (file-name (git-file-name name version))
21927 (sha256
21928 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
21929 (build-system python-build-system)
21930 (arguments
21931 '(#:phases
21932 (modify-phases %standard-phases
21933 (replace 'check
21934 (lambda _
21935 (invoke "make" "SKIP_DEPS=1"))))))
21936 (native-inputs
21937 `(("python-nose" ,python-nose)
21938 ("python-coverage" ,python-coverage)))
21939 (home-page "https://github.com/clarete/forbiddenfruit")
21940 (synopsis "Patch python built-in objects")
21941 (description "This project allows Python code to extend built-in types.")
21942 (license (list license:gpl3+ license:expat))))
21943
21944 (define-public python-k5test
21945 (package
21946 (name "python-k5test")
21947 (version "0.9.2")
21948 (source
21949 (origin
21950 (method url-fetch)
21951 (uri (pypi-uri "k5test" version))
21952 (sha256
21953 (base32
21954 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
21955 (build-system python-build-system)
21956 (propagated-inputs
21957 `(("python-six" ,python-six)
21958 ;; `which`, `kadmin.local` binaries called inside library
21959 ("which" ,which)
21960 ("mit-krb5" ,mit-krb5)))
21961 (native-inputs `(("mit-krb5" ,mit-krb5)))
21962 (arguments
21963 '(#:phases
21964 (modify-phases %standard-phases
21965 (add-after 'unpack 'patch-paths
21966 (lambda* _
21967 (substitute* "k5test/realm.py"
21968 (("'kadmin_local'") "'kadmin.local'")))))))
21969 (home-page "https://github.com/pythongssapi/k5test")
21970 (synopsis "Library for setting up self-contained Kerberos 5 environments")
21971 (description
21972 "@code{k5test} is a library for setting up self-contained Kerberos 5
21973 environments, and running Python unit tests inside those environments. It is
21974 based on the file of the same name found alongside the MIT Kerberos 5 unit
21975 tests.")
21976 (license license:isc)))
21977
21978 (define-public python-gssapi
21979 (package
21980 (name "python-gssapi")
21981 (version "1.6.12")
21982 (source
21983 (origin
21984 (method url-fetch)
21985 (uri (pypi-uri "gssapi" version))
21986 (sha256
21987 (base32
21988 "1j2idrbrbczykzlb56q1bn0ivc9c0rjjljpk4yz86xn3gxfkpv8n"))))
21989 (build-system python-build-system)
21990 (propagated-inputs
21991 `(("python-decorator" ,python-decorator)
21992 ("python-six" ,python-six)))
21993 (inputs
21994 `(("mit-krb5" ,mit-krb5)))
21995 ;; for tests
21996 (native-inputs
21997 `(("python-parameterized" ,python-parameterized)
21998 ("python-k5test" ,python-k5test)
21999 ("python-nose" ,python-nose)))
22000 (home-page "https://github.com/pythongssapi/python-gssapi")
22001 (synopsis "Python GSSAPI Wrapper")
22002 (description
22003 "Python-GSSAPI provides both low-level and high level wrappers around the
22004 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
22005 also be usable with other GSSAPI mechanisms.")
22006 (license license:isc)))
22007
22008 (define-public python-check-manifest
22009 (package
22010 (name "python-check-manifest")
22011 (version "0.37")
22012 (source
22013 (origin
22014 (method url-fetch)
22015 (uri (pypi-uri "check-manifest" version))
22016 (sha256
22017 (base32
22018 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
22019 (build-system python-build-system)
22020 (native-inputs
22021 `(("python-mock" ,python-mock)
22022 ("git" ,git)))
22023 (home-page "https://github.com/mgedmin/check-manifest")
22024 (synopsis "Check MANIFEST.in in a Python source package for completeness")
22025 (description "Python package can include a MANIFEST.in file to help with
22026 sending package files to the Python Package Index. This package checks that
22027 file to ensure it completely and accurately describes your project.")
22028 (license license:expat)))
22029
22030 (define-public python-android-stringslib
22031 (package
22032 (name "python-android-stringslib")
22033 (version "0.1.2")
22034 (source
22035 (origin
22036 (method git-fetch)
22037 (uri (git-reference
22038 (url "https://framagit.org/tyreunom/python-android-strings-lib")
22039 (commit (string-append "v" version))))
22040 (file-name (git-file-name name version))
22041 (sha256
22042 (base32
22043 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
22044 (build-system python-build-system)
22045 (arguments
22046 `(#:tests? #f))
22047 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
22048 (synopsis "Android strings.xml support")
22049 (description "Android Strings Lib provides support for android's strings.xml
22050 files. These files are used to translate strings in android apps.")
22051 (license license:expat)))
22052
22053 (define-public python-watchdog
22054 (package
22055 (name "python-watchdog")
22056 (version "0.9.0")
22057 (source
22058 (origin
22059 (method url-fetch)
22060 (uri (pypi-uri "watchdog" version))
22061 (sha256
22062 (base32
22063 "07cnvvlpif7a6cg4rav39zq8fxa5pfqawchr46433pij0y6napwn"))))
22064 (build-system python-build-system)
22065 (arguments
22066 `(#:phases
22067 (modify-phases %standard-phases
22068 (add-before 'check 'remove-failing
22069 (lambda _
22070 (delete-file "tests/test_inotify_buffer.py")
22071 (delete-file "tests/test_snapshot_diff.py")
22072 #t)))))
22073 (propagated-inputs
22074 `(("python-argh" ,python-argh)
22075 ("python-pathtools" ,python-pathtools)
22076 ("python-pyyaml" ,python-pyyaml)))
22077 (native-inputs
22078 `(("python-pytest-cov" ,python-pytest-cov)
22079 ("python-pytest-timeout" ,python-pytest-timeout)))
22080 (home-page "https://github.com/gorakhargosh/watchdog")
22081 (synopsis "File system events monitoring")
22082 (description "This package provides a way to monitor file system events
22083 such as a file modification and trigger an action. This is similar to inotify,
22084 but portable.")
22085 (license license:asl2.0)))
22086
22087 (define-public python-watchgod
22088 (package
22089 (name "python-watchgod")
22090 (version "0.6")
22091 (source
22092 (origin
22093 ;; There are no tests in the PyPI tarball.
22094 (method git-fetch)
22095 (uri (git-reference
22096 (url "https://github.com/samuelcolvin/watchgod")
22097 (commit (string-append "v" version))))
22098 (file-name (git-file-name name version))
22099 (sha256
22100 (base32 "1lqx44wkryakgpyqj3m0hsz61bqr07vc7smgzh188374hwvscp66"))))
22101 (build-system python-build-system)
22102 (arguments
22103 `(#:phases
22104 (modify-phases %standard-phases
22105 (replace 'check
22106 (lambda _
22107 (invoke "pytest" "-vv"))))))
22108 (native-inputs
22109 `(("python-coverage" ,python-coverage)
22110 ("python-docutils" ,python-docutils)
22111 ("python-flake8" ,python-flake8)
22112 ("python-isort" ,python-isort)
22113 ("python-pycodestyle" ,python-pycodestyle)
22114 ("python-pyflakes" ,python-pyflakes)
22115 ("python-pygments" ,python-pygments)
22116 ("python-pytest" ,python-pytest)
22117 ("python-pytest-cov" ,python-pytest-cov)
22118 ("python-pytest-aiohttp" ,python-pytest-aiohttp)
22119 ("python-pytest-mock" ,python-pytest-mock)
22120 ("python-pytest-sugar" ,python-pytest-sugar)
22121 ("python-pytest-toolbox" ,python-pytest-toolbox)))
22122 (home-page "https://github.com/samuelcolvin/watchgod")
22123 (synopsis "Simple, modern file watching and code reload in Python")
22124 (description
22125 "Simple, modern file watching and code reload in Python inspired by
22126 @code{watchdog}. Among the differences are a unified approach for each
22127 operating systems and an elegant approach to concurrency using threading.")
22128 (license license:expat)))
22129
22130 (define-public python-wget
22131 (package
22132 (name "python-wget")
22133 (version "3.2")
22134 (source
22135 (origin
22136 (method url-fetch)
22137 (uri (pypi-uri "wget" version ".zip"))
22138 (sha256
22139 (base32
22140 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
22141 (build-system python-build-system)
22142 (native-inputs `(("unzip" ,unzip)))
22143 (home-page "https://bitbucket.org/techtonik/python-wget/")
22144 (synopsis "Pure Python download utility")
22145 (description "The python-wget library provides an API to download files
22146 with features similar to the @command{wget} utility.")
22147 (license license:unlicense)))
22148
22149 (define-public offlate
22150 (package
22151 (name "offlate")
22152 (version "0.5")
22153 (source
22154 (origin
22155 (method git-fetch)
22156 (uri (git-reference
22157 (url "https://framagit.org/tyreunom/offlate")
22158 (commit version)))
22159 (file-name (git-file-name name version))
22160 (sha256
22161 (base32
22162 "13pqnbl05wcyldfvl75fp89vjgwsvxyc69vhnb17kkha2rc2k1h7"))))
22163 (build-system python-build-system)
22164 (arguments
22165 ;; No tests
22166 `(#:tests? #f))
22167 (propagated-inputs
22168 `(("python-android-stringslib" ,python-android-stringslib)
22169 ("python-dateutil" ,python-dateutil)
22170 ("python-gitlab" ,python-gitlab)
22171 ("python-lxml" ,python-lxml)
22172 ("python-polib" ,python-polib)
22173 ("python-pyenchant" ,python-pyenchant)
22174 ("python-pygit2" ,python-pygit2)
22175 ("python-pygithub" ,python-pygithub)
22176 ("python-pyqt" ,python-pyqt)
22177 ("python-requests" ,python-requests)
22178 ("python-ruamel.yaml" ,python-ruamel.yaml)
22179 ("python-translation-finder" ,python-translation-finder)
22180 ("python-watchdog" ,python-watchdog)))
22181 (native-inputs
22182 `(("qttools" ,qttools)))
22183 (home-page "https://framagit.org/tyreunom/offlate")
22184 (synopsis "Offline translation interface for online translation tools")
22185 (description "Offlate offers a unified interface for different translation
22186 file formats, as well as many different online translation platforms. You can
22187 use it to get work from online platforms, specialized such as the Translation
22188 Project, or not such a gitlab instance when your upstream doesn't use any
22189 dedicated platform. The tool proposes a unified interface for any format and
22190 an upload option to send your work back to the platform.")
22191 (license license:gpl3+)))
22192
22193 (define-public python-titlecase
22194 (package
22195 (name "python-titlecase")
22196 (version "0.12.0")
22197 (source
22198 (origin
22199 (method url-fetch)
22200 (uri (pypi-uri "titlecase" version))
22201 (sha256
22202 (base32
22203 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
22204 (build-system python-build-system)
22205 (native-inputs
22206 `(("python-nose" ,python-nose)))
22207 (home-page "https://github.com/ppannuto/python-titlecase")
22208 (synopsis "Capitalize strings similar to book titles")
22209 (description
22210 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
22211 It capitalizes (predominantly English) strings in a way that is similar to
22212 book titles, using the New York Times Manual of Style to leave certain words
22213 lowercase.")
22214 (license license:expat)))
22215
22216 (define-public python-pypng
22217 (package
22218 (name "python-pypng")
22219 (version "0.0.20")
22220 (source
22221 (origin
22222 (method url-fetch)
22223 (uri (pypi-uri "pypng" version))
22224 (sha256
22225 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
22226 (build-system python-build-system)
22227 (home-page "https://github.com/drj11/pypng")
22228 (synopsis "Pure Python PNG image encoder/decoder")
22229 (description
22230 "The PyPNG module implements support for PNG images. It reads and writes
22231 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
22232 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
22233 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
22234 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
22235 A number of optional chunks can be specified (when writing) and
22236 understood (when reading): tRNS, bKGD, gAMA.
22237
22238 PyPNG is not a high level toolkit for image processing (like PIL) and does not
22239 aim at being a replacement or competitor. Its strength lies in fine-grained
22240 extensive support of PNG features. It can also read and write Netpbm PAM
22241 files, with a focus on its use as an intermediate format for implementing
22242 custom PNG processing.")
22243 (license license:expat)))
22244
22245 (define-public python-fuzzywuzzy
22246 (package
22247 (name "python-fuzzywuzzy")
22248 (version "0.18.0")
22249 (source
22250 (origin
22251 (method url-fetch)
22252 (uri (pypi-uri "fuzzywuzzy" version))
22253 (sha256
22254 (base32
22255 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
22256 (build-system python-build-system)
22257 (native-inputs
22258 `(("python-hypothesis" ,python-hypothesis)
22259 ("python-pycodestyle" ,python-pycodestyle)
22260 ("python-pytest" ,python-pytest)))
22261 (propagated-inputs
22262 `(("python-levenshtein" ,python-levenshtein)))
22263 (home-page "https://github.com/seatgeek/fuzzywuzzy")
22264 (synopsis "Fuzzy string matching in Python")
22265 (description "Approximate string matching using
22266 @emph{Levenshtein Distance} to calculate the differences between
22267 sequences.")
22268 (license license:gpl2)))
22269
22270 (define-public python2-fuzzywuzzy
22271 (package-with-python2 python-fuzzywuzzy))
22272
22273 (define-public python-block-tracing
22274 (package
22275 (name "python-block-tracing")
22276 (version "1.0.1")
22277 (source
22278 (origin
22279 (method url-fetch)
22280 (uri (pypi-uri "block_tracing" version))
22281 (sha256
22282 (base32
22283 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
22284 (build-system python-build-system)
22285 (arguments '(#:tests? #f)) ; no tests
22286 (home-page "https://github.com/rianhunter/block_tracing")
22287 (synopsis "Protect process memory")
22288 (description
22289 "@code{block_tracing} is a tiny Python library that can be used to
22290 prevent debuggers and other applications from inspecting the memory within
22291 your process.")
22292 (license license:expat)))
22293
22294 (define-public python-gcovr
22295 (package
22296 (name "python-gcovr")
22297 (version "4.2")
22298 (source
22299 (origin
22300 (method url-fetch)
22301 (uri (pypi-uri "gcovr" version))
22302 (sha256
22303 (base32
22304 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
22305 (build-system python-build-system)
22306 (propagated-inputs
22307 `(("python-lxml" ,python-lxml)
22308 ("python-jinja2" ,python-jinja2)))
22309 (home-page "https://gcovr.com/")
22310 (synopsis "Utility for generating code coverage results")
22311 (description
22312 "Gcovr provides a utility for managing the use of the GNU gcov
22313 utility and generating summarized code coverage results. It is inspired
22314 by the Python coverage.py package, which provides a similar utility for
22315 Python.")
22316 (license license:bsd-3)))
22317
22318 (define-public python-owslib
22319 (package
22320 (name "python-owslib")
22321 (version "0.19.2")
22322 (source
22323 (origin
22324 (method url-fetch)
22325 (uri (pypi-uri "OWSLib" version))
22326 (sha256
22327 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
22328 (build-system python-build-system)
22329 (arguments
22330 '(#:tests? #f)) ; TODO: package dependencies required for tests.
22331 (synopsis "Interface for Open Geospatial Consortium web service")
22332 (description
22333 "OWSLib is a Python package for client programming with Open Geospatial
22334 Consortium (OGC) web service (hence OWS) interface standards, and their related
22335 content models.")
22336 (home-page "https://geopython.github.io/OWSLib/")
22337 (license license:bsd-3)))
22338
22339 (define-public python-docusign-esign
22340 (package
22341 (name "python-docusign-esign")
22342 (version "3.1.0")
22343 (source (origin
22344 (method url-fetch)
22345 (uri (pypi-uri "docusign_esign" version))
22346 (sha256
22347 (base32
22348 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
22349 (build-system python-build-system)
22350 ;; Testing requires undocumented setup changes, and so testing is disabled here.
22351 (arguments `(#:tests? #f))
22352 (propagated-inputs
22353 `(("python-certifi" ,python-certifi)
22354 ("python-six" ,python-six)
22355 ("python-dateutil" ,python-dateutil)
22356 ("python-urllib3" ,python-urllib3)
22357 ("python-pyjwt" ,python-pyjwt)
22358 ("python-cryptography" ,python-cryptography)
22359 ("python-nose" ,python-nose)))
22360 (synopsis "DocuSign Python Client")
22361 (description "The Official DocuSign Python Client Library used to interact
22362 with the eSign REST API. Send, sign, and approve documents using this client.")
22363 (home-page "https://www.docusign.com/devcenter")
22364 (license license:expat)))
22365
22366 (define-public python-xattr
22367 (package
22368 (name "python-xattr")
22369 (version "0.9.7")
22370 (source
22371 (origin
22372 (method url-fetch)
22373 (uri (pypi-uri "xattr" version))
22374 (sha256
22375 (base32
22376 "0i4xyiqbhjz2g16zbim17zjdbjkw79xsw8k59942vvq4is1cmfxh"))))
22377 (build-system python-build-system)
22378 (propagated-inputs
22379 `(("python-cffi" ,python-cffi)))
22380 (home-page "https://github.com/xattr/xattr")
22381 (synopsis
22382 "Python wrapper for extended file system attributes")
22383 (description "This package provides a Python wrapper for using extended
22384 file system attributes. Extended attributes extend the basic attributes of files
22385 and directories in the file system. They are stored as name:data pairs
22386 associated with file system objects (files, directories, symlinks, etc).")
22387 (license license:expat)))
22388
22389 (define-public python-json-logger
22390 (package
22391 (name "python-json-logger")
22392 (version "0.1.11")
22393 (source
22394 (origin
22395 (method url-fetch)
22396 (uri (pypi-uri "python-json-logger" version))
22397 (sha256
22398 (base32
22399 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
22400 (build-system python-build-system)
22401 (home-page
22402 "https://github.com/madzak/python-json-logger")
22403 (synopsis "JSON log formatter in Python")
22404 (description "This library allows standard Python logging to output log data
22405 as JSON objects. With JSON we can make our logs more readable by machines and
22406 we can stop writing custom parsers for syslog-type records.")
22407 (license license:bsd-3)))
22408
22409 (define-public python-daiquiri
22410 (package
22411 (name "python-daiquiri")
22412 (version "2.1.1")
22413 (source
22414 (origin
22415 (method url-fetch)
22416 (uri (pypi-uri "daiquiri" version))
22417 (sha256
22418 (base32
22419 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
22420 (build-system python-build-system)
22421 (propagated-inputs
22422 `(("python-json-logger" ,python-json-logger)))
22423 (native-inputs
22424 `(("python-mock" ,python-mock)
22425 ("python-pytest" ,python-pytest)
22426 ("python-setuptools-scm" ,python-setuptools-scm)
22427 ("python-six" ,python-six)))
22428 (home-page "https://github.com/jd/daiquiri")
22429 (synopsis
22430 "Library to configure Python logging easily")
22431 (description "The daiquiri library provides an easy way to configure
22432 logging in Python. It also provides some custom formatters and handlers.")
22433 (license license:asl2.0)))
22434
22435 (define-public python-pifpaf
22436 (package
22437 (name "python-pifpaf")
22438 (version "2.5.0")
22439 (source
22440 (origin
22441 (method url-fetch)
22442 (uri (pypi-uri "pifpaf" version))
22443 (sha256
22444 (base32
22445 "1gy9p4nqf70fh38wn4icyfm7i9wrvx22wnjpg71g89wxbz27igaa"))))
22446 (build-system python-build-system)
22447 (arguments
22448 '(#:phases
22449 (modify-phases %standard-phases
22450 (replace 'check
22451 (lambda _
22452 (invoke "python" "setup.py" "testr" "--slowest"
22453 "--testr-args=until-failure"))))))
22454 (propagated-inputs
22455 `(("python-click" ,python-click)
22456 ("python-daiquiri" ,python-daiquiri)
22457 ("python-fixtures" ,python-fixtures)
22458 ("python-jinja2" ,python-jinja2)
22459 ("python-pbr" ,python-pbr)
22460 ("python-psutil" ,python-psutil)
22461 ("python-six" ,python-six)
22462 ("python-xattr" ,python-xattr)))
22463 (native-inputs
22464 `(("python-mock" ,python-mock)
22465 ("python-os-testr" ,python-os-testr)
22466 ("python-requests" ,python-requests)
22467 ("python-testrepository" ,python-testrepository)
22468 ("python-testtools" ,python-testtools)))
22469 (home-page "https://github.com/jd/pifpaf")
22470 (synopsis "Tools and fixtures to manage daemons for testing in Python")
22471 (description "Pifpaf is a suite of fixtures and a command-line tool that
22472 starts and stops daemons for a quick throw-away usage. This is typically
22473 useful when needing these daemons to run integration testing. It originally
22474 evolved from its precursor @code{overtest}.")
22475 (license license:asl2.0)))
22476
22477 (define-public python-pytest-check-links
22478 (package
22479 (name "python-pytest-check-links")
22480 (version "0.3.0")
22481 (source
22482 (origin
22483 (method url-fetch)
22484 ;; URI uses underscores
22485 (uri (pypi-uri "pytest_check_links" version))
22486 (sha256
22487 (base32
22488 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
22489 (build-system python-build-system)
22490 (propagated-inputs
22491 `(("python-docutils" ,python-docutils)
22492 ("python-html5lib" ,python-html5lib)
22493 ("python-nbconvert" ,python-nbconvert)
22494 ("python-nbformat" ,python-nbformat)
22495 ("python-pytest" ,python-pytest)
22496 ("python-six" ,python-six)))
22497 (native-inputs
22498 `(("python-pbr-minimal" ,python-pbr-minimal)))
22499 (home-page "https://github.com/minrk/pytest-check-links")
22500 (synopsis "Check links in files")
22501 (description "This package provides a pytest plugin that checks URLs for
22502 HTML-containing files.")
22503 (license license:bsd-3)))
22504
22505 (define-public python-json5
22506 (package
22507 (name "python-json5")
22508 (version "0.8.5")
22509 (source
22510 (origin
22511 ;; sample.json5 is missing from PyPi source tarball
22512 (method git-fetch)
22513 (uri (git-reference
22514 (url "https://github.com/dpranke/pyjson5")
22515 (commit (string-append "v" version))))
22516 (file-name (git-file-name name version))
22517 (sha256
22518 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
22519 (build-system python-build-system)
22520 (home-page "https://github.com/dpranke/pyjson5")
22521 (synopsis
22522 "Python implementation of the JSON5 data format")
22523 (description
22524 "JSON5 extends the JSON data interchange format to make it slightly more
22525 usable as a configuration language. This Python package implements parsing and
22526 dumping of JSON5 data structures.")
22527 (license license:asl2.0)))
22528
22529 (define-public python-frozendict
22530 (package
22531 (name "python-frozendict")
22532 (version "1.2")
22533 (source
22534 (origin
22535 (method url-fetch)
22536 (uri (pypi-uri "frozendict" version))
22537 (sha256
22538 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
22539 (build-system python-build-system)
22540 (home-page "https://github.com/slezica/python-frozendict")
22541 (synopsis "Simple immutable mapping for Python")
22542 (description
22543 "@dfn{frozendict} is an immutable wrapper around dictionaries that
22544 implements the complete mapping interface. It can be used as a drop-in
22545 replacement for dictionaries where immutability is desired.")
22546 (license license:expat)))
22547
22548 (define-public python-unpaddedbase64
22549 (package
22550 (name "python-unpaddedbase64")
22551 (version "1.1.0")
22552 (source
22553 (origin
22554 (method git-fetch)
22555 (uri (git-reference
22556 (url "https://github.com/matrix-org/python-unpaddedbase64")
22557 (commit (string-append "v" version))))
22558 (file-name (git-file-name name version))
22559 (sha256
22560 (base32
22561 "0if3fjfxga0bwdq47v77fs9hrcqpmwdxry2i2a7pdqsp95258nxd"))))
22562 (build-system python-build-system)
22563 (home-page "https://pypi.org/project/unpaddedbase64/")
22564 (synopsis "Encode and decode Base64 without “=” padding")
22565 (description
22566 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
22567 using “=” characters. However this conveys no benefit so many protocols
22568 choose to use Base64 without the “=” padding.")
22569 (license license:asl2.0)))
22570
22571 (define-public python-py-cpuinfo
22572 (package
22573 (name "python-py-cpuinfo")
22574 (version "5.0.0")
22575 (source
22576 (origin
22577 (method url-fetch)
22578 (uri (pypi-uri "py-cpuinfo" version))
22579 (sha256
22580 (base32
22581 "0045y6832gqjg63jmw0qj2jwyypgjwr7sfdq3lfv49b6fxpl5xic"))))
22582 (build-system python-build-system)
22583 (home-page "https://github.com/workhorsy/py-cpuinfo")
22584 (synopsis "Get CPU info with Python")
22585 (description
22586 "This Python module returns the CPU info by using the best sources of
22587 information for your operating system.")
22588 (license license:expat)))
22589
22590 (define-public python-canonicaljson
22591 (package
22592 (name "python-canonicaljson")
22593 (version "1.4.0")
22594 (source
22595 (origin
22596 (method url-fetch)
22597 (uri (pypi-uri "canonicaljson" version))
22598 (sha256
22599 (base32 "0c86g0vvzdcg3nrcsqnbzlfhpprc2i894p8i14hska56yl27d6w9"))))
22600 (build-system python-build-system)
22601 (propagated-inputs
22602 `(("python-six" ,python-six)
22603 ("python-frozendict" ,python-frozendict)
22604 ("python-simplejson" ,python-simplejson)))
22605 (home-page "https://github.com/matrix-org/python-canonicaljson")
22606 (synopsis "Canonical JSON")
22607 (description
22608 "Deterministically encode JSON.
22609
22610 @itemize
22611 @item Encodes objects and arrays as RFC 7159 JSON.
22612 @item Sorts object keys so that you get the same result each time.
22613 @item Has no insignificant whitespace to make the output as small as possible.
22614 @item Escapes only the characters that must be escaped, U+0000 to
22615 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
22616 @item Uses the shortest escape sequence for each escaped character.
22617 @item Encodes the JSON as UTF-8.
22618 @item Can encode frozendict immutable dictionaries.
22619 @end itemize")
22620 (license license:asl2.0)))
22621
22622 (define-public python-signedjson
22623 (package
22624 (name "python-signedjson")
22625 (version "1.1.1")
22626 (source
22627 (origin
22628 (method url-fetch)
22629 (uri (pypi-uri "signedjson" version))
22630 (sha256
22631 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
22632 (build-system python-build-system)
22633 (propagated-inputs
22634 `(("python-canonicaljson" ,python-canonicaljson)
22635 ("python-importlib-metadata" ,python-importlib-metadata)
22636 ("python-pynacl" ,python-pynacl)
22637 ("python-typing-extensions" ,python-typing-extensions)
22638 ("python-unpaddedbase64" ,python-unpaddedbase64)))
22639 (native-inputs
22640 `(("python-setuptools-scm" ,python-setuptools-scm)))
22641 (home-page "https://github.com/matrix-org/python-signedjson")
22642 (synopsis "Sign JSON objects with ED25519 signatures")
22643 (description
22644 "Sign JSON objects with ED25519 signatures.
22645
22646 @itemize
22647 @item More than one entity can sign the same object.
22648 @item Each entity can sign the object with more than one key making it easier to
22649 rotate keys
22650 @item ED25519 can be replaced with a different algorithm.
22651 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
22652 key.
22653 @end itemize")
22654 (license license:asl2.0)))
22655
22656 (define-public python-daemonize
22657 (package
22658 (name "python-daemonize")
22659 (version "2.5.0")
22660 (source
22661 (origin
22662 (method url-fetch)
22663 (uri (pypi-uri "daemonize" version))
22664 (sha256
22665 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
22666 (build-system python-build-system)
22667 (home-page "https://github.com/thesharp/daemonize")
22668 (synopsis "Library for writing system daemons in Python")
22669 (description "Daemonize is a library for writing system daemons in Python.")
22670 (license license:expat)))
22671
22672 (define-public python-pymacaroons
22673 (package
22674 (name "python-pymacaroons")
22675 (version "0.13.0")
22676 (source
22677 (origin
22678 (method url-fetch)
22679 (uri (pypi-uri "pymacaroons" version))
22680 (sha256
22681 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
22682 (build-system python-build-system)
22683 (propagated-inputs
22684 `(("python-six" ,python-six)
22685 ("python-pynacl" ,python-pynacl)))
22686 (home-page "https://github.com/ecordell/pymacaroons")
22687 (synopsis "Python Macaroon Library")
22688 (description
22689 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
22690 tokens, macaroons embed caveats that define specific authorization
22691 requirements for the target service, the service that issued the root macaroon
22692 and which is capable of verifying the integrity of macaroons it receives.
22693
22694 Macaroons allow for delegation and attenuation of authorization. They are
22695 simple and fast to verify, and decouple authorization policy from the
22696 enforcement of that policy.")
22697 (license license:expat)))
22698
22699 (define-public python-ldap3
22700 (package
22701 (name "python-ldap3")
22702 (version "2.7")
22703 (home-page "https://github.com/cannatag/ldap3")
22704 (source
22705 (origin
22706 (method git-fetch)
22707 (uri (git-reference (url home-page)
22708 (commit (string-append "v" version))))
22709 (file-name (git-file-name name version))
22710 (sha256
22711 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
22712 (build-system python-build-system)
22713 (arguments
22714 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
22715 #:phases (modify-phases %standard-phases
22716 (replace 'check
22717 (lambda* (#:key tests? #:allow-other-keys)
22718 (when tests?
22719 (invoke "nosetests" "-s" "test"))
22720 #t)))))
22721 (native-inputs
22722 `(("python-nose" ,python-nose)))
22723 (propagated-inputs
22724 `(("python-gssapi" ,python-gssapi)
22725 ("python-pyasn1" ,python-pyasn1)))
22726 (synopsis "Python LDAP client")
22727 (description
22728 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
22729 library.")
22730 (license license:lgpl3+)))
22731
22732 (define-public python-boltons
22733 (package
22734 (name "python-boltons")
22735 (version "20.0.0")
22736 (source
22737 (origin
22738 (method url-fetch)
22739 (uri (pypi-uri "boltons" version))
22740 (sha256
22741 (base32
22742 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
22743 (build-system python-build-system)
22744 (home-page "https://github.com/mahmoud/boltons")
22745 (synopsis "Extensions to the Python standard library")
22746 (description
22747 "Boltons is a set of over 230 pure-Python utilities in the same spirit
22748 as — and yet conspicuously missing from — the standard library, including:
22749
22750 @itemize
22751 @item Atomic file saving, bolted on with fileutils
22752 @item A highly-optimized OrderedMultiDict, in dictutils
22753 @item Two types of PriorityQueue, in queueutils
22754 @item Chunked and windowed iteration, in iterutils
22755 @item Recursive data structure iteration and merging, with iterutils.remap
22756 @item Exponential backoff functionality, including jitter, through
22757 iterutils.backoff
22758 @item A full-featured TracebackInfo type, for representing stack traces, in
22759 tbutils
22760 @end itemize")
22761 (license license:bsd-3)))
22762
22763 (define-public python-eliot
22764 (package
22765 (name "python-eliot")
22766 (version "1.12.0")
22767 (source
22768 (origin
22769 (method url-fetch)
22770 (uri (pypi-uri "eliot" version))
22771 (sha256
22772 (base32 "0wabv7hk63l12881f4zw02mmj06583qsx2im0yywdjlj8f56vqdn"))))
22773 (build-system python-build-system)
22774 (arguments
22775 `(#:phases
22776 (modify-phases %standard-phases
22777 (add-after 'unpack 'remove-journald-support
22778 (lambda _
22779 (for-each delete-file
22780 '("eliot/tests/test_journald.py"
22781 "eliot/journald.py"))
22782 #t))
22783 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
22784 ;; remove command-line tool's tests. TODO eliot-prettyprint should
22785 ;; be installed and these tests should pass.
22786 (lambda _
22787 (delete-file "eliot/tests/test_prettyprint.py")
22788 #t)))))
22789 (propagated-inputs
22790 `(("python-boltons" ,python-boltons)
22791 ("python-pyrsistent" ,python-pyrsistent)
22792 ("python-six" ,python-six)
22793 ("python-zope-interface" ,python-zope-interface)))
22794 (native-inputs
22795 `(("python-black" ,python-black)
22796 ("python-coverage" ,python-coverage)
22797 ("python-dask" ,python-dask)
22798 ("python-flake8" ,python-flake8)
22799 ("python-hypothesis" ,python-hypothesis)
22800 ("python-pytest" ,python-pytest)
22801 ("python-setuptools" ,python-setuptools)
22802 ("python-sphinx" ,python-sphinx)
22803 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
22804 ("python-testtools" ,python-testtools)
22805 ("python-twine" ,python-twine)
22806 ("python-twisted" ,python-twisted)))
22807 (home-page "https://github.com/itamarst/eliot/")
22808 (synopsis "Eliot: the logging system that tells you why it happened")
22809 (description
22810 "@dfn{eliot} is a Python logging system that outputs causal chains of
22811 actions: actions can spawn other actions, and eventually they either succeed
22812 or fail. The resulting logs tell you the story of what your software did: what
22813 happened, and what caused it.")
22814 (license license:asl2.0)))
22815
22816 (define-public python-pem
22817 (package
22818 (name "python-pem")
22819 (version "20.1.0")
22820 (source
22821 (origin
22822 (method url-fetch)
22823 (uri (pypi-uri "pem" version))
22824 (sha256
22825 (base32
22826 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
22827 (build-system python-build-system)
22828 (native-inputs
22829 `(("python-certifi" ,python-certifi)
22830 ("python-coverage" ,python-coverage)
22831 ("python-pretend" ,python-pretend)
22832 ("python-pyopenssl" ,python-pyopenssl)
22833 ("python-pytest" ,python-pytest)
22834 ("python-sphinx" ,python-sphinx)
22835 ("python-twisted" ,python-twisted)))
22836 (home-page "https://pem.readthedocs.io/")
22837 (synopsis "Easy PEM file parsing in Python")
22838 (description
22839 "This package provides a Python module for parsing and splitting PEM files.")
22840 (license license:expat)))
22841
22842 (define-public python-txsni
22843 ;; We need a few commits on top of 0.1.9 for compatibility with newer
22844 ;; Python and OpenSSL.
22845 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
22846 (revision "0"))
22847 (package
22848 (name "python-txsni")
22849 (version (git-version "0.1.9" revision commit))
22850 (home-page "https://github.com/glyph/txsni")
22851 (source
22852 (origin
22853 (method git-fetch)
22854 (uri (git-reference (url home-page) (commit commit)))
22855 (file-name (git-file-name name version))
22856 (sha256
22857 (base32
22858 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
22859 (build-system python-build-system)
22860 (propagated-inputs
22861 `(("python-pyopenssl" ,python-pyopenssl)
22862 ("python-service-identity" ,python-service-identity)
22863 ("python-twisted" ,python-twisted)))
22864 (synopsis "Run TLS servers with Twisted")
22865 (description
22866 "This package provides an easy-to-use SNI endpoint for use
22867 with the Twisted web framework.")
22868 (license license:expat))))
22869
22870 (define-public python-txacme
22871 (package
22872 (name "python-txacme")
22873 (version "0.9.2")
22874 (source
22875 (origin
22876 (method url-fetch)
22877 (uri (pypi-uri "txacme" version))
22878 (sha256
22879 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
22880 (build-system python-build-system)
22881 (propagated-inputs
22882 `(("python-acme" ,python-acme)
22883 ("python-attrs" ,python-attrs)
22884 ("python-eliot" ,python-eliot)
22885 ("python-josepy" ,python-josepy)
22886 ("python-pem" ,python-pem)
22887 ("python-treq" ,python-treq)
22888 ("python-twisted" ,python-twisted)
22889 ("python-txsni" ,python-txsni)))
22890 (native-inputs
22891 `(("python-fixtures" ,python-fixtures)
22892 ("python-hypothesis" ,python-hypothesis)
22893 ("python-mock" ,python-mock)
22894 ("python-service-identity"
22895 ,python-service-identity)
22896 ("python-testrepository" ,python-testrepository)
22897 ("python-testscenarios" ,python-testscenarios)
22898 ("python-testtools" ,python-testtools)))
22899 (home-page "https://github.com/twisted/txacme")
22900 (synopsis "Twisted implexmentation of the ACME protocol")
22901 (description
22902 "ACME is Automatic Certificate Management Environment, a protocol that
22903 allows clients and certificate authorities to automate verification and
22904 certificate issuance. The ACME protocol is used by the free Let's Encrypt
22905 Certificate Authority.
22906
22907 txacme is an implementation of the protocol for Twisted, the event-driven
22908 networking engine for Python.")
22909 (license license:expat)))
22910
22911 (define-public python-pysaml2
22912 (package
22913 (name "python-pysaml2")
22914 (version "6.5.1")
22915 (source
22916 (origin
22917 (method url-fetch)
22918 (uri (pypi-uri "pysaml2" version))
22919 (sha256
22920 (base32
22921 "1xk2x0slz1f8cqv7vn77qx99xfd1mshhswiwrljk9m72w2m9iivd"))))
22922 (build-system python-build-system)
22923 (propagated-inputs
22924 `(("python-cryptography" ,python-cryptography)
22925 ("python-dateutil" ,python-dateutil)
22926 ("python-defusedxml" ,python-defusedxml)
22927 ("python-importlib-resources"
22928 ,python-importlib-resources)
22929 ("python-pyopenssl" ,python-pyopenssl)
22930 ("python-pytz" ,python-pytz)
22931 ("python-requests" ,python-requests)
22932 ("python-six" ,python-six)
22933 ("python-xmlschema" ,python-xmlschema)))
22934 (home-page "https://idpy.org")
22935 (synopsis "Python implementation of SAML Version 2 Standard")
22936 (description
22937 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
22938 It contains all necessary pieces for building a SAML2 service provider or
22939 an identity provider. The distribution contains examples of both.
22940
22941 This package was originally written to work in a WSGI environment, but
22942 there are extensions that allow you to use it with other frameworks.")
22943 (license license:asl2.0)))
22944
22945 (define-public python-click-plugins
22946 (package
22947 (name "python-click-plugins")
22948 (version "1.1.1")
22949 (source
22950 (origin
22951 (method url-fetch)
22952 (uri (pypi-uri "click-plugins" version))
22953 (sha256
22954 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
22955 (build-system python-build-system)
22956 (native-inputs
22957 `(("python-pytest" ,python-pytest)))
22958 (propagated-inputs
22959 `(("python-click" ,python-click)))
22960 (synopsis "Extension for Click to register external CLI commands")
22961 (description "This package provides n extension module for Click to
22962 register external CLI commands via setuptools entry-points.")
22963 (home-page "https://github.com/click-contrib/click-plugins")
22964 (license license:bsd-3)))
22965
22966 (define-public python-diceware
22967 (package
22968 (name "python-diceware")
22969 (version "0.9.6")
22970 (source
22971 (origin
22972 (method url-fetch)
22973 (uri (pypi-uri "diceware" version))
22974 (sha256
22975 (base32
22976 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
22977 (build-system python-build-system)
22978 (native-inputs
22979 `(("python-coverage" ,python-coverage)
22980 ("python-pytest" ,python-pytest)
22981 ("python-pytest-runner" ,python-pytest-runner)))
22982 (home-page "https://github.com/ulif/diceware/")
22983 (synopsis "Generates memorable passphrases")
22984 (description "This package generates passphrases by concatenating words
22985 randomly picked from wordlists. It supports several sources of
22986 randomness (including real life dice) and different wordlists (including
22987 cryptographically signed ones).")
22988 (license license:gpl3+)))
22989
22990 (define-public python-dictdiffer
22991 (package
22992 (name "python-dictdiffer")
22993 (version "0.8.1")
22994 (source (origin
22995 (method url-fetch)
22996 (uri (pypi-uri "dictdiffer" version))
22997 (sha256
22998 (base32
22999 "1lk3qmy1hkaphk4n7ayfk0wl6m2yvd6r7qkam6yncqfzgkbc1phs"))))
23000 (build-system python-build-system)
23001 (native-inputs
23002 `(("python-check-manifest" ,python-check-manifest)
23003 ("python-coverage" ,python-coverage)
23004 ("python-isort" ,python-isort)
23005 ("python-mock" ,python-mock)
23006 ("python-pydoctstyle" ,python-pydocstyle)
23007 ("python-pytest-cache" ,python-pytest-cache)
23008 ("python-pytest-cov" ,python-pytest-cov)
23009 ("python-pytest-pep8" ,python-pytest-pep8)
23010 ("python-pytest-runner" ,python-pytest-runner)
23011 ("python-pytest" ,python-pytest)
23012 ("python-setuptools-scm" ,python-setuptools-scm)
23013 ("python-tox" ,python-tox)))
23014 (home-page "https://github.com/inveniosoftware/dictdiffer")
23015 (synopsis "Diff and patch Python dictionary objects")
23016 (description
23017 "Dictdiffer is a Python module that helps you to diff and patch
23018 dictionaries.")
23019 (license license:expat)))
23020
23021 (define-public pyzo
23022 (package
23023 (name "pyzo")
23024 (version "4.11.2")
23025 (source
23026 (origin
23027 (method url-fetch)
23028 (uri (pypi-uri "pyzo" version))
23029 (sha256
23030 (base32 "1jk5f79lj09vnsdk9h01w21p9h49z2hhf8xhkx8471pjbg9vrlzr"))))
23031 (build-system python-build-system)
23032 (arguments
23033 `(#:phases
23034 (modify-phases %standard-phases
23035 (add-before 'check 'fix-home-directory
23036 (lambda _
23037 ;; Tests fail with "Permission denied: '/homeless-shelter'".
23038 (setenv "HOME" "/tmp")
23039 #t)))
23040 ;; Tests fail with "Uncaught Python exception: python: undefined
23041 ;; symbol: objc_getClass".
23042 #:tests? #f))
23043 (propagated-inputs
23044 `(("python-pyqt" ,python-pyqt)))
23045 (home-page "https://pyzo.org")
23046 (synopsis
23047 "Python IDE for scientific computing")
23048 (description
23049 "Pyzo is a Python IDE focused on interactivity and introspection,
23050 which makes it very suitable for scientific computing. Its practical
23051 design is aimed at simplicity and efficiency.
23052
23053 It consists of two main components, the editor and the shell, and uses
23054 a set of pluggable tools to help the programmer in various ways. Some
23055 example tools are source structure, project manager, interactive help,
23056 workspace...")
23057 (license license:bsd-2)))
23058
23059 (define-public python-osc
23060 (package
23061 (name "python-osc")
23062 (version "1.7.4")
23063 (source
23064 (origin
23065 (method url-fetch)
23066 (uri (pypi-uri "python-osc" version))
23067 (sha256
23068 (base32
23069 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
23070 (build-system python-build-system)
23071 (home-page "https://github.com/attwad/python-osc")
23072 (synopsis "Open Sound Control server and client implementations")
23073 (description
23074 "@code{python-osc} is a pure Python library with no external
23075 dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
23076 Open Sound Control 1.0} specification.")
23077 (license license:unlicense)))
23078
23079 (define-public python-voluptuous
23080 (package
23081 (name "python-voluptuous")
23082 (version "0.11.7")
23083 (source
23084 (origin
23085 (method url-fetch)
23086 (uri (pypi-uri "voluptuous" version))
23087 (sha256
23088 (base32
23089 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
23090 (build-system python-build-system)
23091 (native-inputs
23092 `(("python-nose" ,python-nose)))
23093 (home-page "https://github.com/alecthomas/voluptuous")
23094 (synopsis "Python data validation library")
23095 (description
23096 "Voluptuous is a Python data validation library. It is primarily
23097 intended for validating data coming into Python as JSON, YAML, etc.")
23098 (license license:bsd-3)))
23099
23100 (define-public python-cmd2
23101 (package
23102 (name "python-cmd2")
23103 (version "1.0.2")
23104 (source
23105 (origin
23106 (method url-fetch)
23107 (uri (pypi-uri "cmd2" version))
23108 (sha256
23109 (base32
23110 "1f18plbc9yyvhn0js3d2bii9yld8zfl775gxsaw9jza5pmlg9ss2"))))
23111 (build-system python-build-system)
23112 (propagated-inputs
23113 `(("python-attrs" ,python-attrs)
23114 ("python-colorama" ,python-colorama)
23115 ("python-pyperclip" ,python-pyperclip)
23116 ("python-wcwidth" ,python-wcwidth)))
23117 (native-inputs
23118 `(("python-codecov" ,python-codecov)
23119 ("python-coverage" ,python-coverage)
23120 ("python-doc8" ,python-doc8)
23121 ("python-flake8" ,python-flake8)
23122 ("python-invoke" ,python-invoke)
23123 ("python-mock" ,python-mock)
23124 ("python-pytest" ,python-pytest)
23125 ("python-pytest-cov" ,python-pytest-cov)
23126 ("python-pytest-mock" ,python-pytest-mock)
23127 ("python-setuptools-scm" ,python-setuptools-scm)
23128 ("python-sphinx" ,python-sphinx)
23129 ("python-sphinx-autobuild" ,python-sphinx-autobuild)
23130 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
23131 ("python-tox" ,python-tox)
23132 ("python-twine" ,python-twine)
23133 ("which" ,which)))
23134 (home-page "https://github.com/python-cmd2/cmd2")
23135 (synopsis "Tool for building interactive command line applications")
23136 (description
23137 "Cmd2 is a tool for building interactive command line applications in
23138 Python. Its goal is to make it quick and easy for developers to build
23139 feature-rich and user-friendly interactive command line applications. It
23140 provides a simple API which is an extension of Python's built-in @code{cmd}
23141 module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
23142 make your life easier and eliminates much of the boilerplate code which would
23143 be necessary when using @code{cmd}.")
23144 (license license:expat)))
23145
23146 (define-public python-pytidylib
23147 (package
23148 (name "python-pytidylib")
23149 (version "0.3.2")
23150 (source (origin
23151 (method url-fetch)
23152 (uri (pypi-uri "pytidylib" version))
23153 (sha256
23154 (base32
23155 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
23156 (build-system python-build-system)
23157 (arguments
23158 '(#:phases
23159 (modify-phases %standard-phases
23160 (add-before 'build 'qualify-libtidy
23161 (lambda* (#:key inputs #:allow-other-keys)
23162 (let ((libtidy (string-append (assoc-ref inputs "tidy")
23163 "/lib/libtidy.so")))
23164 (substitute* "tidylib/tidy.py"
23165 (("ctypes\\.util\\.find_library\\('tidy'\\)")
23166 (format #f "'~a'" libtidy)))
23167 #t))))))
23168 (inputs `(("tidy" ,tidy)))
23169 (home-page "https://github.com/countergram/pytidylib")
23170 (synopsis "Python wrapper for HTML Tidy library")
23171 (description
23172 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
23173 allows you, from Python code, to “fix” invalid (X)HTML markup.")
23174 (license license:expat)))
23175
23176 (define-public python2-pytidylib
23177 (package-with-python2 python-pytidylib))
23178
23179 (define-public python-mujson
23180 (package
23181 (name "python-mujson")
23182 (version "1.4")
23183 (source
23184 (origin
23185 (method url-fetch)
23186 (uri (pypi-uri "mujson" version))
23187 (sha256
23188 (base32
23189 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
23190 (build-system python-build-system)
23191 (home-page "https://github.com/mattgiles/mujson")
23192 (synopsis "Use the fastest JSON functions available at import time")
23193 (description "This package selects the fastest JSON functions available
23194 at import time.")
23195 (license license:expat)))
23196
23197 (define-public python-bashlex
23198 (package
23199 (name "python-bashlex")
23200 (version "0.14")
23201 (source
23202 (origin
23203 (method url-fetch)
23204 (uri (pypi-uri "bashlex" version))
23205 (sha256
23206 (base32
23207 "1z9g96fgsfpdwawp4sb5x6hbdhmda7kgmcrqlf9xx4bs1f8f14js"))))
23208 (build-system python-build-system)
23209 (arguments
23210 `(#:phases
23211 (modify-phases %standard-phases
23212 (add-before 'build 'pregenerate-yacc-tables
23213 (lambda _
23214 ;; parser.py caches tables, which attempts to write to site lib
23215 ;; see https://github.com/idank/bashlex/issues/51
23216 (invoke "python" "-c" "import bashlex"))))))
23217 (home-page
23218 "https://github.com/idank/bashlex")
23219 (synopsis "Python parser for bash")
23220 (description "@code{bashlex} is a Python port of the parser used
23221 internally by GNU bash.
23222
23223 For the most part it's transliterated from C, the major differences are:
23224
23225 @itemize
23226 @item it does not execute anything
23227 @item it is reentrant
23228 @item it generates a complete AST
23229 @end itemize
23230 ")
23231 (license license:gpl3+)))
23232
23233 (define-public python-jinxed
23234 (package
23235 (name "python-jinxed")
23236 (version "1.0.0")
23237 (source
23238 (origin
23239 (method url-fetch)
23240 (uri (pypi-uri "jinxed" version))
23241 (sha256
23242 (base32
23243 "1n7vl03rhjd0xhjgbjlh8x9f8yfbhamcwkgvs4jg7g5qj8f0wk89"))))
23244 (build-system python-build-system)
23245 (arguments
23246 '(#:phases
23247 (modify-phases %standard-phases
23248 (add-before 'check 'set-environment-variables
23249 (lambda* (#:key inputs #:allow-other-keys)
23250 (let ((ncurses (assoc-ref inputs "ncurses")))
23251 (setenv "TERM" "LINUX")
23252 (setenv "TERMINFO" (string-append ncurses "/share/terminfo"))
23253 #t))))
23254 #:tests? #f)) ; _curses.error: setupterm: could not find terminal
23255 (native-inputs
23256 `(("ncurses" ,ncurses)))
23257 (home-page "https://github.com/Rockhopper-Technologies/jinxed")
23258 (synopsis "Jinxed Terminal Library")
23259 (description
23260 "Jinxed is an implementation of a subset of the Python curses library.")
23261 (license license:mpl2.0)))
23262
23263 (define-public python-blessed
23264 (package
23265 (name "python-blessed")
23266 (version "1.17.8")
23267 (source
23268 (origin
23269 (method url-fetch)
23270 (uri (pypi-uri "blessed" version))
23271 (sha256
23272 (base32
23273 "1wdj342sk22hfrg0n91x2qnqsbzbiyq9y009v3pxnvfzn9bx0wbn"))
23274 (modules '((guix build utils)))
23275 (snippet
23276 '(begin
23277 ;; Don't get hung up on Windows test failures.
23278 (delete-file "blessed/win_terminal.py") #t))))
23279 (build-system python-build-system)
23280 (propagated-inputs
23281 `(("python-jinxed" ,python-jinxed)
23282 ("python-six" ,python-six)
23283 ("python-wcwidth" ,python-wcwidth)))
23284 (native-inputs
23285 `(("python-mock" ,python-mock)
23286 ("python-pytest" ,python-pytest)))
23287 (home-page "https://github.com/jquast/blessed")
23288 (synopsis "Wrapper around terminal capabilities")
23289 (description
23290 "Blessed is a thin, practical wrapper around terminal styling, screen
23291 positioning, and keyboard input.")
23292 (license license:expat)))
23293
23294 (define-public python-readme-renderer
23295 (package
23296 (name "python-readme-renderer")
23297 (version "26.0")
23298 (source
23299 (origin
23300 (method url-fetch)
23301 (uri (pypi-uri "readme_renderer" version))
23302 (sha256
23303 (base32
23304 "13fnrv7z3y0yfafzcjbl55cqxncvbxadr72ql4l29pgyvrqxpsfb"))))
23305 (build-system python-build-system)
23306 (propagated-inputs
23307 `(("python-bleach" ,python-bleach)
23308 ("python-docutils" ,python-docutils)
23309 ("python-pygments" ,python-pygments)
23310 ("python-six" ,python-six)))
23311 (native-inputs
23312 `(("python-mock" ,python-mock)
23313 ("python-pytest" ,python-pytest)))
23314 (home-page "https://github.com/pypa/readme_renderer")
23315 (synopsis "Render README files in Warehouse")
23316 (description
23317 "Readme Renderer is a library that will safely render arbitrary README
23318 files into HTML. It is designed to be used in Warehouse to render the
23319 @code{long_description} for packages. It can handle Markdown, reStructuredText,
23320 and plain text.")
23321 (license license:asl2.0)))
23322
23323 (define-public python-lazr-delegates
23324 (package
23325 (name "python-lazr-delegates")
23326 (version "2.0.4")
23327 (source
23328 (origin
23329 (method url-fetch)
23330 (uri (pypi-uri "lazr.delegates" version))
23331 (sha256
23332 (base32
23333 "1rdnl85j9ayp8n85l0ciip621j9dcziz5qnmv2m7krgwgcn31vfx"))))
23334 (build-system python-build-system)
23335 (arguments
23336 '(#:phases
23337 (modify-phases %standard-phases
23338 (replace 'check
23339 (lambda _
23340 (invoke "python" "setup.py" "nosetests"))))))
23341 (native-inputs
23342 `(("python-nose" ,python-nose)))
23343 (propagated-inputs
23344 `(("python-zope-interface" ,python-zope-interface)))
23345 (home-page "https://launchpad.net/lazr.delegates")
23346 (synopsis "Easily write objects that delegate behavior")
23347 (description
23348 "The @code{lazr.delegates} package makes it easy to write objects that
23349 delegate behavior to another object. The new object adds some property or
23350 behavior on to the other object, while still providing the underlying interface,
23351 and delegating behavior.")
23352 (license license:lgpl3)))
23353
23354 (define-public python-lazr-config
23355 (package
23356 (name "python-lazr-config")
23357 (version "2.2.2")
23358 (source
23359 (origin
23360 (method url-fetch)
23361 (uri (pypi-uri "lazr.config" version))
23362 (sha256
23363 (base32
23364 "11xpddgyhyj7sf27wbmrq5lnqk21wnprx3ajycgwlxjamh6sgffd"))))
23365 (build-system python-build-system)
23366 (arguments
23367 '(#:phases
23368 (modify-phases %standard-phases
23369 (replace 'check
23370 (lambda _
23371 (invoke "python" "-s" "-m" "nose" "-P" "lazr"))))))
23372 (native-inputs
23373 `(("python-nose" ,python-nose)))
23374 (propagated-inputs
23375 `(("python-lazr-delegates" ,python-lazr-delegates)
23376 ("python-zope-interface" ,python-zope-interface)))
23377 (home-page "https://launchpad.net/lazr.config")
23378 (synopsis "Create configuration schemas and process and validate configurations")
23379 (description
23380 "The LAZR config system is typically used to manage process configuration.
23381 Process configuration is for saying how things change when we run systems on
23382 different machines, or under different circumstances. This system uses ini-like
23383 file format of section, keys, and values. The config file supports inheritance
23384 to minimize duplication of information across files. The format supports schema
23385 validation.")
23386 (license license:lgpl3)))
23387
23388 (define-public python-flufl-bounce
23389 (package
23390 (name "python-flufl-bounce")
23391 (version "3.0.1")
23392 (source
23393 (origin
23394 (method url-fetch)
23395 (uri (pypi-uri "flufl.bounce" version))
23396 (sha256
23397 (base32
23398 "01lg1b0jpf8605mzaz9miq3nray6s7a7gc8n4wzg5nsxl8fglcp4"))))
23399 (build-system python-build-system)
23400 (propagated-inputs
23401 `(("python-atpublic" ,python-atpublic)
23402 ("python-zope-interface" ,python-zope-interface)))
23403 (native-inputs
23404 `(("python-nose2" ,python-nose2)))
23405 (home-page "https://fluflbounce.readthedocs.io/en/latest/")
23406 (synopsis "Email bounce detectors")
23407 (description "The @code{flufl.bounce} library provides a set of heuristics
23408 and an API for detecting the original bouncing email addresses from a bounce
23409 message. Many formats found in the wild are supported, as are VERP and
23410 RFC 3464.")
23411 (license (list license:asl2.0
23412 license:lgpl3)))) ; only for setup_headers.py
23413
23414 (define-public python-flufl-i18n
23415 (package
23416 (name "python-flufl-i18n")
23417 (version "3.0")
23418 (source
23419 (origin
23420 (method url-fetch)
23421 (uri (pypi-uri "flufl.i18n" version))
23422 (sha256
23423 (base32
23424 "1flwpn1xhgc957zj3zxw92dhdjh0lsy0hdvzq32dzqpsajfsvq1r"))))
23425 (build-system python-build-system)
23426 (propagated-inputs
23427 `(("python-atpublic" ,python-atpublic)))
23428 (home-page "https://flufli18n.readthedocs.io")
23429 (synopsis "API for Python internationalization")
23430 (description
23431 "This package provides a high-level, convenient API for managing
23432 internationalization/translation contexts in Python applications. There is a
23433 simple API for single-context applications, such as command line scripts which
23434 only need to translate into one language during the entire course of their
23435 execution. There is a more flexible, but still convenient API for multi-context
23436 applications, such as servers, which may need to switch language contexts for
23437 different tasks.")
23438 (license license:asl2.0)))
23439
23440 (define-public python-flufl-lock
23441 (package
23442 (name "python-flufl-lock")
23443 (version "4.0")
23444 (source
23445 (origin
23446 (method url-fetch)
23447 (uri (pypi-uri "flufl.lock" version))
23448 (sha256
23449 (base32
23450 "055941zyma3wfx25jhm8wcsghpv3jc3iwi1gdrdjhzcnfhn62lxq"))))
23451 (build-system python-build-system)
23452 (propagated-inputs
23453 `(("python-atpublic" ,python-atpublic)
23454 ("python-psutil" ,python-psutil)))
23455 (home-page "https://flufllock.readthedocs.io")
23456 (synopsis "NFS-safe file locking with timeouts for POSIX systems")
23457 (description
23458 "The @dfn{flufl.lock} package provides NFS-safe file locking with
23459 timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the
23460 @code{open} system call but uses a lockfile. Lock objects support lock-breaking
23461 and have a maximum lifetime built-in.")
23462 (license (list license:asl2.0
23463 license:lgpl3)))) ; only for setup_helpers.py
23464
23465 (define-public python-flufl-testing
23466 (package
23467 (name "python-flufl-testing")
23468 (version "0.8")
23469 (source
23470 (origin
23471 (method url-fetch)
23472 (uri (pypi-uri "flufl.testing" version))
23473 (sha256
23474 (base32
23475 "1nkm95mhcfhl4x5jgs6y97ikszaxsfh07nyawsih6cxxm6l62641"))))
23476 (build-system python-build-system)
23477 (native-inputs
23478 `(("python-nose2" ,python-nose2)))
23479 (home-page "https://gitlab.com/warsaw/flufl.testing")
23480 (synopsis "Collection of test tool plugins")
23481 (description
23482 "This package contains a small collection of test tool plugins for
23483 @code{nose2} and @code{flake8}.")
23484 (license license:asl2.0)))
23485
23486 (define-public python-devtools
23487 (package
23488 (name "python-devtools")
23489 (version "0.6")
23490 (source
23491 (origin
23492 (method git-fetch)
23493 (uri (git-reference
23494 (url "https://github.com/samuelcolvin/python-devtools")
23495 (commit (string-append "v" version))))
23496 (file-name (git-file-name name version))
23497 (sha256
23498 (base32 "15zczdcm90wl54c68f1qjb05nkd5bjsc9xjl3lk4frs7k7wkmrvp"))))
23499 (build-system python-build-system)
23500 (native-inputs
23501 `(("python-pytest" ,python-pytest)
23502 ("python-pytest-mock" ,python-pytest-mock)))
23503 (propagated-inputs
23504 `(("python-pygments" ,python-pygments)))
23505 (arguments
23506 `(#:phases (modify-phases %standard-phases
23507 (replace 'check
23508 (lambda _
23509 (invoke "pytest")
23510 #t)))))
23511 (home-page "https://github.com/samuelcolvin/python-devtools")
23512 (synopsis "Debug command and development tools")
23513 (description
23514 "This package provides a debug print command and other development tools.
23515 It adds a simple and readable way to print stuff during development.")
23516 (license license:expat)))
23517
23518 (define-public python-dateparser
23519 (package
23520 (name "python-dateparser")
23521 (version "0.7.6")
23522 (source
23523 (origin
23524 (method url-fetch)
23525 (uri (pypi-uri "dateparser" version))
23526 (sha256
23527 (base32
23528 "1ypbyqxlk7n6zibk90js3ybz37xmin3kk0i35g8c51bwqpcfyxg8"))))
23529 (build-system python-build-system)
23530 (propagated-inputs
23531 `(("python-dateutil" ,python-dateutil)
23532 ("python-pytz" ,python-pytz)
23533 ("python-regex" ,python-regex)
23534 ("python-ruamel.yaml" ,python-ruamel.yaml)
23535 ("python-tzlocal" ,python-tzlocal)))
23536 (native-inputs
23537 `(("python-mock" ,python-mock)
23538 ("python-parameterized" ,python-parameterized)
23539 ("tzdata" ,tzdata-for-tests)))
23540 (arguments
23541 `(;; TODO: Of 23320 tests, 6 fail and 53 error.
23542 #:tests? #f
23543 #:phases
23544 (modify-phases %standard-phases
23545 (add-before 'check 'set-check-environment
23546 (lambda* (#:key inputs #:allow-other-keys)
23547 (setenv "TZ" "UTC")
23548 (setenv "TZDIR"
23549 (string-append (assoc-ref inputs "tzdata")
23550 "/share/zoneinfo"))
23551 #t)))))
23552 (home-page "https://github.com/scrapinghub/dateparser")
23553 (synopsis
23554 "Date parsing library designed to parse dates from HTML pages")
23555 (description
23556 "@code{python-dateparser} provides modules to easily parse localized
23557 dates in almost any string formats commonly found on web pages.")
23558 (license license:bsd-3)))
23559
23560 (define-public python-dparse
23561 (package
23562 (name "python-dparse")
23563 (version "0.5.1")
23564 (source
23565 (origin
23566 (method url-fetch)
23567 (uri (pypi-uri "dparse" version))
23568 (sha256
23569 (base32
23570 "0rzkg3nymsbwdjc0ms2bsajkda02jipwyp3xk97qj71f21lz3dd1"))))
23571 (build-system python-build-system)
23572 (native-inputs
23573 `(("python-pytest" ,python-pytest)))
23574 (propagated-inputs
23575 `(("python-packaging" ,python-packaging)
23576 ("python-pyyaml" ,python-pyyaml)
23577 ("python-toml" ,python-toml)))
23578 (home-page "https://github.com/pyupio/dparse")
23579 (synopsis "Parser for Python dependency files")
23580 (description "This package provides a parser for Python dependency files.")
23581 (license license:expat)))
23582
23583 (define-public python-dpath
23584 (package
23585 (name "python-dpath")
23586 (version "2.0.1")
23587 (source
23588 (origin
23589 (method url-fetch)
23590 (uri (pypi-uri "dpath" version))
23591 (sha256
23592 (base32
23593 "1ymi9ssk7i0mx3mviplf4csfvzibdd6wyj4qzj6s487n9xgnp85y"))))
23594 (build-system python-build-system)
23595 (native-inputs
23596 `(("python-hypothesis" ,python-hypothesis)
23597 ("python-mock" ,python-mock)
23598 ("python-nose" ,python-nose)))
23599 (arguments
23600 '(#:phases
23601 (modify-phases %standard-phases
23602 (replace 'check
23603 (lambda* (#:key inputs outputs #:allow-other-keys)
23604 (add-installed-pythonpath inputs outputs)
23605 ;; This invokation is taken from tox.ini.
23606 (invoke "nosetests" "-d" "-v" "tests/"))))))
23607 (home-page "https://github.com/akesterson/dpath-python")
23608 (synopsis "File-system-like pathing and searching for dictionaries")
23609 (description
23610 "@code{python-dpath} is a library for accessing and searching
23611 dictionaries via /slashed/paths ala xpath.
23612
23613 Basically it lets you glob over a dictionary as if it were a file system. It
23614 allows you to specify globs (ala the bash eglob syntax, through some advanced
23615 fnmatch.fnmatch magic) to access dictionary elements, and provides some
23616 facility for filtering those results.")
23617 (license license:expat)))
23618
23619 (define-public python-safety
23620 (package
23621 (name "python-safety")
23622 (version "1.9.0")
23623 (source
23624 (origin
23625 (method url-fetch)
23626 (uri (pypi-uri "safety" version))
23627 (sha256
23628 (base32
23629 "1j801xsxfzavjbzhhc934awvnk1b7jc0qsw3jp3ys0241mlj1gr3"))))
23630 (build-system python-build-system)
23631 (arguments
23632 `(#:phases
23633 (modify-phases %standard-phases
23634 (add-after 'unpack 'disable-tests
23635 (lambda _
23636 (substitute* "tests/test_safety.py"
23637 ;; requires network
23638 (("def test_check_live") "def _test_check_live"))
23639 #t)))))
23640 (propagated-inputs
23641 `(("python-click" ,python-click)
23642 ("python-dparse" ,python-dparse)
23643 ("python-packaging" ,python-packaging)
23644 ("python-requests" ,python-requests)))
23645 (home-page "https://github.com/pyupio/safety")
23646 (synopsis "Check installed dependencies for known vulnerabilities")
23647 (description "Safety checks installed dependencies for known vulnerabilities.
23648 By default it uses the open Python vulnerability database Safety DB.")
23649 (license license:expat)))
23650
23651 (define-public python-pypandoc
23652 (package
23653 (name "python-pypandoc")
23654 (version "1.5")
23655 (source
23656 (origin
23657 (method url-fetch)
23658 (uri (pypi-uri "pypandoc" version))
23659 (sha256
23660 (base32
23661 "1zvn9764cf7kkjkmr9gw6wc8adpk06qxr1rhxwa9pg0zmdvrk90l"))))
23662 (build-system python-build-system)
23663 (inputs
23664 `(("pandoc" ,pandoc)
23665 ("pandoc-citeproc" ,pandoc-citeproc)))
23666 (propagated-inputs
23667 `(("wheel" ,python-wheel)))
23668 (native-inputs
23669 `(("texlive" ,(texlive-union (list texlive-amsfonts
23670 texlive-fonts-ec
23671 texlive-latex-hyperref
23672 texlive-latex-oberdiek
23673 texlive-lm
23674 texlive-xcolor)))))
23675 (arguments
23676 `(#:phases
23677 (modify-phases %standard-phases
23678 (add-before 'check 'disable-tests
23679 (lambda _
23680 ;; Disable test requiring network access
23681 (substitute* "tests.py"
23682 (("test_basic_conversion_from_http_url")
23683 "skip_test_basic_conversion_from_http_url"))
23684 ;; Needed by texlive-union to generate fonts
23685 (setenv "HOME" "/tmp")
23686 #t)))))
23687 (home-page "https://github.com/bebraw/pypandoc")
23688 (synopsis "Python wrapper for pandoc")
23689 (description "pypandoc is a thin Python wrapper around pandoc
23690 and pandoc-citeproc.")
23691 (license license:expat)))
23692
23693 (define-public python-rnc2rng
23694 (package
23695 (name "python-rnc2rng")
23696 (version "2.6.4")
23697 (source
23698 (origin
23699 (method url-fetch)
23700 (uri (pypi-uri "rnc2rng" version))
23701 (sha256
23702 (base32
23703 "1kmp3iwxxyzjsd47j2sprd47ihhkwhb3yydih3af5bbfq0ibh1w8"))))
23704 (build-system python-build-system)
23705 (propagated-inputs
23706 `(("python-rply" ,python-rply)))
23707 (arguments
23708 `(#:phases (modify-phases %standard-phases
23709 (replace 'check
23710 (lambda _
23711 (invoke "python" "test.py"))))))
23712 (home-page "https://github.com/djc/rnc2rng")
23713 (synopsis "Convert RELAX NG Compact to regular syntax")
23714 (description
23715 "This package provides the @command{rnc2rng} command-line tool as well as
23716 a Python library to convert RELAX NG schemata in Compact syntax (rnc) to
23717 equivalent schemata in the XML-based default RELAX NG syntax.")
23718 (license license:expat)))
23719
23720 (define-public python-telethon
23721 (package
23722 (name "python-telethon")
23723 (version "1.17.5")
23724 (source
23725 (origin
23726 (method git-fetch)
23727 (uri (git-reference
23728 (url "https://github.com/LonamiWebs/Telethon")
23729 (commit (string-append "v" version))))
23730 (file-name (git-file-name name version))
23731 (sha256
23732 (base32 "0l9fhdrq576vllgi9aam45xzw5xi6jhgdv5zz8i4ygssdp7cm8jl"))))
23733 (build-system python-build-system)
23734 (arguments
23735 '(#:phases
23736 (modify-phases %standard-phases
23737 (replace 'check
23738 (lambda* (#:key tests? #:allow-other-keys)
23739 (when tests?
23740 (invoke "py.test" "-v"))
23741 #t)))))
23742 (propagated-inputs
23743 `(("python-rsa" ,python-rsa)
23744 ("python-pyaes" ,python-pyaes)))
23745 (native-inputs
23746 `(("python-pytest" ,python-pytest)
23747 ("python-pytest-asyncio" ,python-pytest-asyncio)
23748 ("python-pytest-trio" ,python-pytest-trio)))
23749 (home-page "https://docs.telethon.dev")
23750 (synopsis "Full-featured Telegram client library for Python 3")
23751 (description "This library is designed to make it easy to write Python
23752 programs that can interact with Telegram.")
23753 (license license:expat)))
23754
23755 (define-public python-citeproc-py
23756 (package
23757 (name "python-citeproc-py")
23758 (version "0.5.1")
23759 (source
23760 (origin
23761 (method url-fetch)
23762 (uri (pypi-uri "citeproc-py" version))
23763 (sha256
23764 (base32
23765 "00aaff50jy4j0nakdzq9258z1gzrac9baarli2ymgspj88jg5968"))))
23766 (build-system python-build-system)
23767 (propagated-inputs
23768 `(("python-lxml" ,python-lxml)
23769 ("python-rnc2rng" ,python-rnc2rng)))
23770 (home-page
23771 "https://github.com/brechtm/citeproc-py")
23772 (synopsis "Citations and bibliography formatter")
23773 (description
23774 "Citeproc-py is a CSL processor for Python. It aims to implement the
23775 CSL 1.0.1 specification. citeproc-py can output styled citations and
23776 bibliographies in a number of different output formats. Currently supported
23777 are plain text, reStructuredText and HTML.")
23778 (license license:bsd-2)))
23779
23780 (define-public python-inform
23781 (package
23782 (name "python-inform")
23783 (version "1.23.0")
23784 (source
23785 (origin
23786 (method url-fetch)
23787 (uri (pypi-uri "inform" version))
23788 (sha256
23789 (base32
23790 "0dvc5klbnbryrvspp45nmlg02g40j7xspcz7lqsm0c0dj0z29zdz"))))
23791 (build-system python-build-system)
23792 (arguments
23793 `(#:tests? #f)) ; PyPI tarball lacks tests
23794 (native-inputs
23795 `(("python-hypothesis" ,python-hypothesis)
23796 ("python-pytest-cov" ,python-pytest-cov)
23797 ("python-pytest-runner" ,python-pytest-runner)))
23798 (propagated-inputs
23799 `(("python-arrow" ,python-arrow)
23800 ("python-six" ,python-six)))
23801 (home-page "https://inform.readthedocs.io")
23802 (synopsis "Print & logging utilities for communicating with user")
23803 (description
23804 "Inform is designed to display messages from programs that are typically run from
23805 a console. It provides a collection of ‘print’ functions that allow you to simply and
23806 cleanly print different types of messages.")
23807 (license license:gpl3+)))
23808
23809 (define-public python-nestedtext
23810 (package
23811 (name "python-nestedtext")
23812 (version "1.0.0")
23813 (source
23814 (origin
23815 (method url-fetch)
23816 (uri (pypi-uri "nestedtext" version))
23817 (sha256
23818 (base32
23819 "0xjx863n7yd1xmkwhy48lhmqrmlzgbx3civhk386hvrzyq4sx148"))))
23820 (build-system python-build-system)
23821 (arguments
23822 `(#:tests? #f)) ; PyPI tarball lacks tests
23823 (propagated-inputs
23824 `(("python-inform" ,python-inform)))
23825 (home-page "https://nestedtext.org")
23826 (synopsis "Human readable and writable data interchange format")
23827 (description
23828 "NestedText is a file format for holding data that is to be entered, edited, or
23829 viewed by people. It allows data to be organized into a nested collection of
23830 dictionaries, lists, and strings. In this way it is similar to JSON and YAML, but
23831 without the complexity and risk of YAML and without the syntactic clutter of JSON.
23832 NestedText is both simple and natural. Only a small number of concepts and rules must
23833 be kept in mind when creating it. It is easily created, modified, or viewed with
23834 a text editor and easily understood and used by both programmers and non-programmers.")
23835 (license license:expat))) ; MIT license
23836
23837 (define-public python-parallel
23838 (package
23839 (name "python-parallel")
23840 (version "1.6.4.4")
23841 (source
23842 (origin
23843 (method url-fetch)
23844 (uri (string-append
23845 "https://www.parallelpython.com/downloads/pp/pp-"
23846 version ".zip"))
23847 (sha256
23848 (base32
23849 "1mzk4yabxj6r149fswhis18hd8dnag5sj8i4wb06450zq3pi8dh7"))))
23850 (native-inputs
23851 `(("unzip" ,unzip)))
23852 (build-system python-build-system)
23853 (arguments '(#:tests? #f)) ; No test suite.
23854 (home-page "https://www.parallelpython.com")
23855 (synopsis "Parallel and distributed programming for Python")
23856 (description "Parallel Python module (PP) provides an easy and efficient
23857 way to create parallel-enabled applications for SMP computers and clusters.
23858 PP module features cross-platform portability and dynamic load balancing.
23859 Thus applications written with PP will parallelize efficiently even on
23860 heterogeneous and multi-platform clusters (including clusters running other
23861 applications with variable CPU loads).")
23862 (license license:bsd-3)))
23863
23864 (define-public python2-parallel
23865 (package-with-python2 python-parallel))
23866
23867 (define-public python-djvulibre
23868 (package
23869 (name "python-djvulibre")
23870 (version "0.8.5")
23871 (source
23872 (origin
23873 (method url-fetch)
23874 (uri (pypi-uri "python-djvulibre" version))
23875 (sha256
23876 (base32 "1c0lvpg7j2525cv52s3q5sg7hfnakkb8rmghg0jc02gshsxmrj4f"))))
23877 (build-system python-build-system)
23878 (native-inputs
23879 `(("ghostscript" ,ghostscript)
23880 ("pkg-config" ,pkg-config)
23881 ("python-nose" ,python-nose)))
23882 (inputs
23883 `(("djvulibre" ,djvulibre)
23884 ("python-cython" ,python-cython)))
23885 (arguments
23886 `(#:phases
23887 (modify-phases %standard-phases
23888 (add-after 'unpack 'fix-tests
23889 (lambda _
23890 ;; Unit tests try to load the 'dllpath.py' and fail, because it
23891 ;; doesn't make sense on GNU/Linux.
23892 (delete-file "djvu/dllpath.py")
23893 #t)))))
23894 (synopsis "Python bindings for DjVuLibre")
23895 (description "This is a set of Python bindings for the DjVuLibre library.")
23896 (home-page "https://jwilk.net/software/python-djvulibre")
23897 (license license:gpl2)))
23898
23899 (define-public python2-djvulibre
23900 (package-with-python2 python-djvulibre))
23901
23902 (define-public python-versioneer
23903 (package
23904 (name "python-versioneer")
23905 (version "0.19")
23906 (source
23907 (origin
23908 (method url-fetch)
23909 (uri (pypi-uri "versioneer" version))
23910 (sha256
23911 (base32
23912 "1bmg8y78am371rd9b4clf11b8g1h7xvq8q58z03jvgdwpsdx7zm4"))))
23913 (build-system python-build-system)
23914 (home-page
23915 "https://github.com/python-versioneer/python-versioneer")
23916 (synopsis
23917 "Version-string management for VCS-controlled trees")
23918 (description
23919 "@code{versioneer} is a tool for managing a recorded version number in
23920 distutils-based python projects. The goal is to remove the tedious and
23921 error-prone \"update the embedded version string\" step from your release
23922 process.")
23923 (license license:public-domain)))
23924
23925 (define-public python2-gamera
23926 (package
23927 (name "python2-gamera")
23928 (version "3.4.4")
23929 (source
23930 (origin
23931 (method url-fetch)
23932 (uri (string-append "https://gamera.informatik.hsnr.de/download/"
23933 "gamera-" version ".tar.gz"))
23934 (sha256
23935 (base32 "1g4y1kxk1hmxfsiz682hbxvwryqilnb21ci509m559yp7hcliiyy"))
23936 (modules '((guix build utils)))
23937 (snippet
23938 '(begin
23939 ;; Remove bundled libraries.
23940 (for-each delete-file-recursively
23941 '("src/libpng-1.2.5"
23942 "src/libtiff"
23943 "src/zlib-1.2.8"))))))
23944 (build-system python-build-system)
23945 (inputs
23946 `(("libpng" ,libpng)
23947 ("libtiff" ,libtiff)
23948 ("python2-wxpython" ,python2-wxpython)
23949 ("zlib" ,zlib)))
23950 (arguments
23951 `(#:python ,python-2))
23952 (synopsis "Framework for building document analysis applications")
23953 (description
23954 "Gamera is a toolkit for building document image recognition systems.")
23955 (home-page "https://gamera.informatik.hsnr.de/")
23956 (license license:gpl2+)))
23957
23958 (define-public python-contextvars
23959 (package
23960 (name "python-contextvars")
23961 (version "2.4")
23962 (source
23963 (origin
23964 (method url-fetch)
23965 (uri (pypi-uri "contextvars" version))
23966 (sha256
23967 (base32
23968 "17n3w8c20kgkgc6khaafdhhlcdj4bzman4paxqsl7harma59137k"))))
23969 (build-system python-build-system)
23970 (propagated-inputs
23971 `(("python-immutables" ,python-immutables)))
23972 (home-page
23973 "https://github.com/MagicStack/contextvars")
23974 (synopsis "PEP 567 Backport")
23975 (description "This package implements a backport of Python 3.7
23976 @code{contextvars} module (see PEP 567) for Python 3.6.")
23977 (license license:asl2.0)))
23978
23979 (define-public python-aiofiles
23980 (package
23981 (name "python-aiofiles")
23982 (version "0.6.0")
23983 (source
23984 (origin
23985 (method url-fetch)
23986 (uri (pypi-uri "aiofiles" version))
23987 (sha256
23988 (base32
23989 "14m01kjxm2j7zyljjj6xlhlgygcsriymbx730gc5jp9xglaina70"))))
23990 (build-system python-build-system)
23991 (home-page "https://github.com/Tinche/aiofiles")
23992 (synopsis "File support for @code{asyncio}")
23993 (description "@code{python-aiofiles} is a library for handling local
23994 disk files in asyncio applications.")
23995 (license license:asl2.0)))
23996
23997 (define-public python-pyre-extensions
23998 (package
23999 (name "python-pyre-extensions")
24000 (version "0.0.18")
24001 (source
24002 (origin
24003 (method url-fetch)
24004 (uri (pypi-uri "pyre-extensions" version))
24005 (sha256
24006 (base32
24007 "0c5cbbqrfyjwakdh3kbwxis6mbrbwky1z1fqslgszgpcj4g43q30"))))
24008 (build-system python-build-system)
24009 (propagated-inputs
24010 `(("python-typing-extensions"
24011 ,python-typing-extensions)
24012 ("python-typing-inspect" ,python-typing-inspect)))
24013 (home-page "https://pyre-check.org")
24014 (synopsis
24015 "Type system extensions for use with @code{python-pyre}")
24016 (description
24017 "@code{python-pyre-extensions} defines extensions to the standard
24018 @code{typing} module that are supported by the Pyre typechecker.")
24019 (license license:expat)))
24020
24021 (define-public python-dataclasses
24022 (package
24023 (name "python-dataclasses")
24024 (version "0.7")
24025 (source
24026 (origin
24027 (method url-fetch)
24028 (uri (pypi-uri "dataclasses" version))
24029 (sha256
24030 (base32
24031 "1rh8111fbws2vxyf2qy2zw3x6p6cq1jfz8pf904gig5qwg56sjj9"))))
24032 (build-system python-build-system)
24033 (home-page
24034 "https://github.com/ericvsmith/dataclasses")
24035 (synopsis
24036 "Backport of the @code{dataclasses} module for Python 3.6")
24037 (description
24038 "This is an implementation of PEP 557, Data Classes. It is a
24039 backport of the @code{dataclasses} module for Python 3.6.")
24040 (license license:asl2.0)))
24041
24042 (define-public python-pywatchman
24043 (package
24044 (name "python-pywatchman")
24045 (version "1.4.1")
24046 (source
24047 (origin
24048 (method url-fetch)
24049 (uri (pypi-uri "pywatchman" version))
24050 (sha256
24051 (base32
24052 "1yf2gm20wc3djpb5larxii3l55xxby0il2ns3q0v1byyfnr7w16h"))))
24053 (build-system python-build-system)
24054 (arguments
24055 `(#:tests? #f)) ;there are none
24056 (home-page
24057 "https://facebook.github.io/watchman/")
24058 (synopsis "Watchman client for python")
24059 (description "@code{python-pywatchman} is a library to connect and
24060 query Watchman to discover file changes.")
24061 (license license:bsd-3)))
24062
24063 (define-public python-helpdev
24064 (package
24065 (name "python-helpdev")
24066 (version "0.7.1")
24067 (source
24068 (origin
24069 (method url-fetch)
24070 (uri (pypi-uri "helpdev" version))
24071 (sha256
24072 (base32
24073 "0gfvj28i82va7c264jl2p4cdsl3lpf9fpb9cyjnis55crfdafqmv"))))
24074 (build-system python-build-system)
24075 (arguments
24076 `(#:phases
24077 (modify-phases %standard-phases
24078 (replace 'check
24079 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
24080 (when tests?
24081 (add-installed-pythonpath inputs outputs)
24082 (invoke "pytest" "tests"))
24083 #t)))))
24084 (propagated-inputs
24085 `(("python-importlib-metadata" ,python-importlib-metadata)))
24086 (native-inputs
24087 `(("python-pytest" ,python-pytest)))
24088 (home-page "https://gitlab.com/dpizetta/helpdev")
24089 (synopsis
24090 "Extract information about the Python environment easily")
24091 (description
24092 "Helpdev is a library to easily extract information about the Python
24093 environment.")
24094 (license license:expat)))
24095
24096 (define-public python-qdarkstyle
24097 (package
24098 (name "python-qdarkstyle")
24099 (version "2.8.1")
24100 (source
24101 (origin
24102 (method url-fetch)
24103 (uri (pypi-uri "QDarkStyle" version))
24104 (sha256
24105 (base32
24106 "0883vzg35fzpyl1aiijzpfcdfvpq5vi325w0m7xkx7nxplh02fym"))))
24107 (build-system python-build-system)
24108 (arguments
24109 `(;; Fails unable to detect valid Qt bindings even when
24110 ;; added as native-inputs.
24111 #:tests? #f))
24112 (propagated-inputs
24113 `(("python-helpdev" ,python-helpdev)
24114 ("python-qtpy" ,python-qtpy)))
24115 (home-page
24116 "https://github.com/ColinDuquesnoy/QDarkStyleSheet")
24117 (synopsis
24118 "Complete dark stylesheet for Python and Qt applications")
24119 (description "QDarkStyle is the most complete dark stylesheet for Python and
24120 Qt applications.")
24121 (license license:expat)))
24122
24123 (define-public python-bitstring
24124 (package
24125 (name "python-bitstring")
24126 (version "3.1.7")
24127 (source
24128 (origin
24129 (method url-fetch)
24130 (uri (pypi-uri "bitstring" version))
24131 (sha256
24132 (base32
24133 "0jl6192dwrlm5ybkbh7ywmyaymrc3cmz9y07nm7qdli9n9rfpwzx"))))
24134 (build-system python-build-system)
24135 (arguments
24136 `(#:phases
24137 (modify-phases %standard-phases
24138 (replace 'check
24139 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
24140 (when tests?
24141 (add-installed-pythonpath inputs outputs)
24142 (with-directory-excursion "test"
24143 (invoke "pytest")))
24144 #t)))))
24145 (native-inputs
24146 `(("python-pytest" ,python-pytest)))
24147 (home-page "https://github.com/scott-griffiths/bitstring")
24148 (synopsis
24149 "Simple construction, analysis and modification of binary data")
24150 (description
24151 "Bitstring is a library for simple construction, analysis and modification
24152 of binary data.")
24153 (license license:expat)))
24154
24155 (define-public python-confuse
24156 (package
24157 (name "python-confuse")
24158 (version "1.4.0")
24159 (source
24160 (origin
24161 (method url-fetch)
24162 (uri (pypi-uri "confuse" version))
24163 (sha256
24164 (base32
24165 "0r74djc8r6lfx6ldsqnhpvfsn256gsfzbl33qcm77hp2qr8h9z4j"))))
24166 (build-system python-build-system)
24167 (propagated-inputs
24168 `(("python-pathlib" ,python-pathlib)
24169 ("python-pyyaml" ,python-pyyaml)))
24170 (home-page "https://github.com/beetbox/confuse")
24171 (synopsis "Painless YAML configuration.")
24172 (description "Confuse is a configuration library for Python that uses
24173 YAML. It takes care of defaults, overrides, type checking, command-line
24174 integration, human-readable errors, and standard OS-specific locations.")
24175 (license license:expat)))
24176
24177 (define-public python-reflink
24178 (package
24179 (name "python-reflink")
24180 (version "0.2.1")
24181 (source
24182 (origin
24183 (method url-fetch)
24184 (uri (pypi-uri "reflink" version))
24185 (sha256
24186 (base32
24187 "0fkf3sd958g9hvr3jwlhnhqqzrwxljrc3grsf3yknh94vf13a9f9"))))
24188 (build-system python-build-system)
24189 (arguments
24190 `(#:tests? #false)) ; almost all tests want to run mkfs.btrfs
24191 (propagated-inputs
24192 `(("python-cffi" ,python-cffi)))
24193 (native-inputs
24194 `(("python-pytest" ,python-pytest)
24195 ("python-pytest-runner" ,python-pytest-runner)))
24196 (home-page "https://gitlab.com/rubdos/pyreflink")
24197 (synopsis "Python wrapper around reflink system call")
24198 (description
24199 "Python reflink wraps around platform specific @code{reflink}
24200 implementations.")
24201 (license license:expat)))
24202
24203 (define-public python-pivy
24204 (package
24205 (name "python-pivy")
24206 (version "0.6.5")
24207 (source
24208 (origin
24209 (method git-fetch)
24210 (uri (git-reference
24211 (url "https://github.com/coin3d/pivy")
24212 (commit version)))
24213 (file-name (git-file-name name version))
24214 (sha256
24215 (base32 "0vids7sxk8w5vr73xdnf8xdci71a7syl6cd35aiisppbqyyfmykx"))))
24216 (build-system python-build-system)
24217 (arguments
24218 `(;; The test suite fails due to an import cycle between 'pivy' and '_coin'
24219 #:tests? #f
24220 #:phases
24221 (modify-phases %standard-phases
24222 (add-after 'unpack 'patch-cmake-include-dirs
24223 (lambda _
24224 ;; Patch buildsystem to respect Coin3D include directory
24225 (substitute* "CMakeLists.txt"
24226 (("\\$\\{SoQt_INCLUDE_DIRS}")
24227 "${Coin_INCLUDE_DIR};${SoQt_INCLUDE_DIRS}"))
24228 #t)))))
24229 (native-inputs
24230 `(("cmake" ,cmake)
24231 ("swig" ,swig)))
24232 (inputs
24233 `(("python-wrapper" ,python-wrapper)
24234 ("qtbase" ,qtbase)
24235 ("libxi" ,libxi)
24236 ("libice" ,libice)
24237 ("soqt" ,soqt)
24238 ("glew" ,glew)
24239 ("coin3D" ,coin3D-4)))
24240 (home-page "https://github.com/coin3d/pivy")
24241 (synopsis "Python bindings to Coin3D")
24242 (description
24243 "Pivy provides python bindings for Coin, a 3D graphics library with an
24244 Application Programming Interface based on the Open Inventor 2.1 API.")
24245 (license license:isc)))
24246
24247 (define-public python-crayons
24248 (package
24249 (name "python-crayons")
24250 (version "0.4.0")
24251 (source
24252 (origin
24253 (method url-fetch)
24254 (uri (pypi-uri "crayons" version))
24255 (sha256
24256 (base32
24257 "0gw106k4b6y8mw7pp52awxyplj2bwvwk315k4sywzwh0g1abfcxx"))))
24258 (build-system python-build-system)
24259 (propagated-inputs
24260 `(("python-colorama" ,python-colorama)))
24261 (home-page "https://github.com/MasterOdin/crayons")
24262 (synopsis "TextUI colors for Python")
24263 (description "This package gives you colored strings for the terminal.
24264 Crayons automatically wraps a given string in the foreground color and
24265 restores the original state after the string is printed.")
24266 (license license:expat)))
24267
24268 (define-public python-sane
24269 (package
24270 (name "python-sane")
24271 (version "2.9.1")
24272 (source
24273 (origin
24274 (method url-fetch)
24275 (uri (pypi-uri name version))
24276 (sha256
24277 (base32
24278 "1pi597z94n2mkd821ln52fq0g727n2jxfskf280ip3kf7jw8w294"))))
24279 (build-system python-build-system)
24280 (native-inputs
24281 `(("python-pytest" ,python-pytest)))
24282 (inputs
24283 `(("sane-backends" ,sane-backends)))
24284 (home-page "https://github.com/python-pillow/Sane")
24285 (synopsis "Python interface to the SANE scanner")
24286 (description "This package provides Python interface to the SANE scanner
24287 and frame grabber interface.")
24288 (license (license:non-copyleft
24289 ;; Yet another variant of the X/MIT license.
24290 "https://github.com/python-pillow/Sane/blob/master/COPYING"))))
24291
24292 (define-public python-screenkey
24293 (package
24294 (name "python-screenkey")
24295 (version "1.4")
24296 (source
24297 (origin
24298 (method git-fetch)
24299 (uri (git-reference
24300 (url "https://gitlab.com/screenkey/screenkey")
24301 (commit (string-append "v" version))))
24302 (file-name (git-file-name name version))
24303 (sha256
24304 (base32
24305 "1rfngmkh01g5192pi04r1fm7vsz6hg9k3qd313sn9rl9xkjgp11l"))))
24306 (build-system python-build-system)
24307 (arguments
24308 `(#:phases
24309 (modify-phases %standard-phases
24310 (add-after 'unpack 'fix-dlopen-paths
24311 (lambda* (#:key inputs outputs #:allow-other-keys)
24312 (let* ((x11 (assoc-ref inputs "libx11"))
24313 (xtst (assoc-ref inputs "libxtst")))
24314 (substitute* "Screenkey/xlib.py"
24315 (("libX11.so.6")
24316 (string-append x11 "/lib/libX11.so.6")))
24317 (substitute* "Screenkey/xlib.py"
24318 (("libXtst.so.6")
24319 (string-append xtst "/lib/libXtst.so.6")))
24320 #t)))
24321 (add-after 'install 'wrap-screenkey
24322 (lambda* (#:key outputs #:allow-other-keys)
24323 (wrap-program
24324 (string-append (assoc-ref outputs "out") "/bin/screenkey")
24325 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
24326 `("GI_TYPELIB_PATH"
24327 ":" prefix (,(getenv "GI_TYPELIB_PATH"))))
24328 #t)))))
24329 (inputs
24330 `(("python-distutils-extra" ,python-distutils-extra)
24331 ("python-tokenize-rt" ,python-tokenize-rt)
24332 ("libx11" ,libx11)
24333 ("libxtst" ,libxtst)
24334 ("gtk+" ,gtk+)
24335 ("python-pygobject" ,python-pygobject)
24336 ("python-pycairo" ,python-pycairo)
24337 ("python-setuptools-git" ,python-setuptools-git)
24338 ("python-babel" ,python-babel)))
24339 (home-page "https://www.thregr.org/~wavexx/software/screenkey/")
24340 (synopsis
24341 "Screencast tool to display pressed keys")
24342 (description
24343 "A screencast tool to display your keys inspired by Screenflick.")
24344 (license license:gpl3+)))
24345
24346 (define-public python-jinja2-cli
24347 (package
24348 (name "python-jinja2-cli")
24349 (version "0.7.0")
24350 (source
24351 (origin
24352 (method url-fetch)
24353 (uri (pypi-uri "jinja2-cli" version))
24354 (sha256
24355 (base32
24356 "0vikx7v6fbvww6kfrv0k5a24jyv3ak7nindg60906pdd1m9qvkcw"))))
24357 (build-system python-build-system)
24358 (propagated-inputs
24359 `(("python-jinja2" ,python-jinja2)))
24360 (native-inputs
24361 `(("python-flake8" ,python-flake8)
24362 ("python-jinja2" ,python-jinja2)
24363 ("python-pytest" ,python-pytest)))
24364 (home-page "https://github.com/mattrobenolt/jinja2-cli")
24365 (synopsis "Command-line interface to Jinja2")
24366 (description
24367 "This package provides a command-line interface (CLI) to the Jinja2
24368 template engine.")
24369 (license license:bsd-3)))
24370
24371 (define-public python-readability
24372 (package
24373 (name "python-readability")
24374 (version "0.3.1")
24375 (source
24376 (origin
24377 (method url-fetch)
24378 (uri (pypi-uri "readability" version))
24379 (sha256
24380 (base32
24381 "1b8gq3g2zwvx0aivvdg56cc0bn7xw6f2v6psmxdx9aiipkw0s0zr"))))
24382 (build-system python-build-system)
24383 (home-page
24384 "https://github.com/andreasvc/readability/")
24385 (synopsis
24386 "Measure the readability of a given text using surface
24387 characteristics")
24388 (description
24389 "This package provides a Python library that is an implementation of
24390 traditional readability measures based on simple surface
24391 characteristics. These measures are basically linear regressions based on the
24392 number of words, syllables, and sentences.")
24393 (license license:asl2.0)))
24394
24395 (define-public python-listparser
24396 (package
24397 (name "python-listparser")
24398 (version "0.18")
24399 (source
24400 (origin
24401 (method url-fetch)
24402 (uri (pypi-uri "listparser" version))
24403 (sha256
24404 (base32
24405 "0hdqs1mmayw1r8yla43hgb4d9y3zqs5483vgf8j9ygczkd2wrq2b"))))
24406 (build-system python-build-system)
24407 (home-page
24408 "https://github.com/kurtmckee/listparser")
24409 (synopsis
24410 "Parse subscription lists in Python")
24411 (description
24412 "This package provides a Python library that can parse OPML, FOAF, and
24413 iGoogle subscription lists.")
24414 (license license:expat)))
24415
24416 (define-public python-smartypants
24417 (package
24418 (name "python-smartypants")
24419 (version "2.0.1")
24420 (source
24421 (origin
24422 ;; There's no source tarball for 2.0.1 on PyPI.
24423 (method git-fetch)
24424 (uri (git-reference
24425 (url "https://github.com/leohemsted/smartypants.py")
24426 (commit (string-append "v" version))))
24427 (file-name (git-file-name name version))
24428 (sha256
24429 (base32 "00p1gnb9pzb3svdq3c5b9b332gsp50wrqqa39gj00m133zadanjp"))))
24430 (build-system python-build-system)
24431 (arguments
24432 '(#:phases
24433 (modify-phases %standard-phases
24434 (replace 'check
24435 ;; Its `setup.py test` doesn't report failure with exit status, so
24436 ;; we use `nose` instead.
24437 (lambda _
24438 (invoke "nosetests" "-v" "--exclude=^load_tests$"))))))
24439 (native-inputs
24440 ;; For tests.
24441 `(("python-docutils" ,python-docutils)
24442 ("python-nose" ,python-nose)
24443 ("python-pygments" ,python-pygments)))
24444 (home-page "https://github.com/leohemsted/smartypants.py")
24445 (synopsis "Translate punctuation characters into smart quotes")
24446 (description
24447 "@command{smartpants} can perform the following transformations:
24448 @enumerate
24449 @item Straight quotes ( \" and ' ) into \"curly\" quote HTML entities
24450 @item Backticks-style quotes (``like this'') into \"curly\" quote HTML
24451 entities
24452 @item Dashes (-- and ---) into en- and em-dash entities
24453 @item Three consecutive dots (... or . . .) into an ellipsis entity
24454 @end enumerate")
24455 (license license:bsd-3)))
24456
24457 (define-public python-typogrify
24458 (package
24459 (name "python-typogrify")
24460 (version "2.0.7")
24461 (source (origin
24462 (method url-fetch)
24463 (uri (pypi-uri "typogrify" version))
24464 (sha256
24465 (base32
24466 "0f6b2gnnxjbx1fbmkcscc6qjr4hi78kwm1wx4b766ha3va66dr4b"))))
24467 (build-system python-build-system)
24468 (arguments
24469 '(#:phases
24470 (modify-phases %standard-phases
24471 (replace 'check
24472 (lambda _
24473 (invoke "nosetests" "-v"))))))
24474 (propagated-inputs
24475 `(("python-smartypants" ,python-smartypants)))
24476 (native-inputs
24477 ;; For tests.
24478 `(("python-nose" ,python-nose)))
24479 (home-page "https://github.com/mintchaos/typogrify")
24480 (synopsis "Filters to transform text into typographically-improved HTML")
24481 (description
24482 "@code{typogrify} provides a set of custom filters that automatically
24483 apply various transformations to plain text in order to yield
24484 typographically-improved HTML. While often used in conjunction with Jinja and
24485 Django template systems, the filters can be used in any environment.")
24486 (license license:bsd-3)))