gnu: python-pyflakes: Update to 2.2.0.
[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 Eric Bavier <bavier@member.fsf.org>
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 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 Efraim Flashner <efraim@flashner.co.il>
18 ;;; Copyright © 2015, 2017 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 Marius Bakke <mbakke@fastmail.com>
30 ;;; Copyright © 2016, 2017 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 Julien Lepiller <julien@lepiller.eu>
34 ;;; Copyright © 2016, 2017, 2018, 2019, 2020 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 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 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 © 2019, 2020 Brett Gilio <brettg@gnu.org>
60 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
61 ;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
62 ;;; Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
63 ;;; Copyright © 2019, 2020 Alex Griffin <a@ajgrf.com>
64 ;;; Copyright © 2019, 2020 Pierre Langlois <pierre.langlois@gmx.com>
65 ;;; Copyright © 2019 Jacob MacDonald <jaccarmac@gmail.com>
66 ;;; Copyright © 2019, 2020 Giacomo Leidi <goodoldpaul@autistici.org>
67 ;;; Copyright © 2019 Wiktor Żelazny <wzelazny@vurv.cz>
68 ;;; Copyright © 2019, 2020 Tanguy Le Carrour <tanguy@bioneland.org>
69 ;;; Copyright © 2019 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
70 ;;; Copyright © 2020 Riku Viitanen <riku.viitanen@protonmail.com>
71 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
72 ;;; Copyright © 2020 sirgazil <sirgazil@zoho.com>
73 ;;; Copyright © 2020 Sebastian Schott <sschott@mailbox.org>
74 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
75 ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com>
76 ;;; Copyright © 2020 Alexandros Theodotou <alex@zrythm.org>
77 ;;; Copyright © 2020 Lars-Dominik Braun <ldb@leibniz-psychology.org>
78 ;;; Copyright © 2020 Alex ter Weele <alex.ter.weele@gmail.com>
79 ;;; Copyright © 2020 Matthew Kraai <kraai@ftbfs.org>
80 ;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
81 ;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw>
82 ;;; Copyright © 2020 Yuval Kogman <nothingmuch@woobling.org>
83 ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
84 ;;;
85 ;;; This file is part of GNU Guix.
86 ;;;
87 ;;; GNU Guix is free software; you can redistribute it and/or modify it
88 ;;; under the terms of the GNU General Public License as published by
89 ;;; the Free Software Foundation; either version 3 of the License, or (at
90 ;;; your option) any later version.
91 ;;;
92 ;;; GNU Guix is distributed in the hope that it will be useful, but
93 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
94 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
95 ;;; GNU General Public License for more details.
96 ;;;
97 ;;; You should have received a copy of the GNU General Public License
98 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
99
100 (define-module (gnu packages python-xyz)
101 #:use-module ((guix licenses) #:prefix license:)
102 #:use-module (gnu packages)
103 #:use-module (gnu packages algebra)
104 #:use-module (gnu packages adns)
105 #:use-module (gnu packages attr)
106 #:use-module (gnu packages backup)
107 #:use-module (gnu packages bash)
108 #:use-module (gnu packages check)
109 #:use-module (gnu packages compression)
110 #:use-module (gnu packages crypto)
111 #:use-module (gnu packages databases)
112 #:use-module (gnu packages dbm)
113 #:use-module (gnu packages enchant)
114 #:use-module (gnu packages file)
115 #:use-module (gnu packages fontutils)
116 #:use-module (gnu packages gcc)
117 #:use-module (gnu packages geo)
118 #:use-module (gnu packages ghostscript)
119 #:use-module (gnu packages gl)
120 #:use-module (gnu packages glib)
121 #:use-module (gnu packages gnome)
122 #:use-module (gnu packages graphviz)
123 #:use-module (gnu packages graphics)
124 #:use-module (gnu packages gsasl)
125 #:use-module (gnu packages gstreamer)
126 #:use-module (gnu packages gtk)
127 #:use-module (gnu packages icu4c)
128 #:use-module (gnu packages image)
129 #:use-module (gnu packages imagemagick)
130 #:use-module (gnu packages kerberos)
131 #:use-module (gnu packages libevent)
132 #:use-module (gnu packages libffi)
133 #:use-module (gnu packages linux)
134 #:use-module (gnu packages llvm)
135 #:use-module (gnu packages man)
136 #:use-module (gnu packages maths)
137 #:use-module (gnu packages monitoring)
138 #:use-module (gnu packages multiprecision)
139 #:use-module (gnu packages networking)
140 #:use-module (gnu packages ncurses)
141 #:use-module (gnu packages openstack)
142 #:use-module (gnu packages pcre)
143 #:use-module (gnu packages perl)
144 #:use-module (gnu packages photo)
145 #:use-module (gnu packages pkg-config)
146 #:use-module (gnu packages python)
147 #:use-module (gnu packages python-check)
148 #:use-module (gnu packages python-compression)
149 #:use-module (gnu packages python-crypto)
150 #:use-module (gnu packages python-science)
151 #:use-module (gnu packages python-web)
152 #:use-module (gnu packages qt)
153 #:use-module (gnu packages readline)
154 #:use-module (gnu packages sdl)
155 #:use-module (gnu packages search)
156 #:use-module (gnu packages shells)
157 #:use-module (gnu packages sphinx)
158 #:use-module (gnu packages ssh)
159 #:use-module (gnu packages terminals)
160 #:use-module (gnu packages tex)
161 #:use-module (gnu packages texinfo)
162 #:use-module (gnu packages time)
163 #:use-module (gnu packages tls)
164 #:use-module (gnu packages version-control)
165 #:use-module (gnu packages video)
166 #:use-module (gnu packages web)
167 #:use-module (gnu packages base)
168 #:use-module (gnu packages xml)
169 #:use-module (gnu packages xorg)
170 #:use-module (gnu packages xdisorg)
171 #:use-module (gnu packages tcl)
172 #:use-module (gnu packages bdw-gc)
173 #:use-module (gnu packages serialization)
174 #:use-module (guix packages)
175 #:use-module (guix download)
176 #:use-module (guix git-download)
177 #:use-module (guix hg-download)
178 #:use-module (guix utils)
179 #:use-module (guix build-system gnu)
180 #:use-module (guix build-system cmake)
181 #:use-module (guix build-system python)
182 #:use-module (guix build-system trivial)
183 #:use-module (srfi srfi-1)
184 #:use-module (srfi srfi-26))
185
186 (define-public python-tenacity
187 (package
188 (name "python-tenacity")
189 (version "6.1.0")
190 (source (origin
191 (method url-fetch)
192 (uri (pypi-uri "tenacity" version))
193 (sha256
194 (base32
195 "1j36v9fcpmmd4985ix0cwnvcq71rkrn5cjiiv0id9vkl4kpxh0gv"))))
196 (build-system python-build-system)
197 (native-inputs
198 `(("python-setuptools-scm" ,python-setuptools-scm)
199 ("python-sphinx" ,python-sphinx)
200 ("python-tornado" ,python-tornado)
201 ("python-pytest" ,python-pytest)))
202 (propagated-inputs
203 `(("python-six" ,python-six)))
204 (arguments
205 `(#:phases (modify-phases %standard-phases
206 (replace 'check
207 (lambda _
208 (invoke "pytest")
209 #t)))))
210 (home-page "https://github.com/jd/tenacity")
211 (synopsis "Retrying library for python")
212 (description "Tenacity is a general-purpose python library to simplify the
213 task of adding retry behavior to just about anything.")
214 (license license:asl2.0)))
215
216 (define-public python-colorlog
217 (package
218 (name "python-colorlog")
219 (version "4.1.0")
220 (source (origin
221 (method url-fetch)
222 (uri (pypi-uri "colorlog" version))
223 (sha256
224 (base32
225 "1lpk8zmfv8vz090h5d0hzb4n39wgasxdd3x3bpn3v1x1n9dfzaih"))))
226 (build-system python-build-system)
227 (native-inputs
228 `(("python-pytest" ,python-pytest)))
229 (arguments
230 `(#:phases (modify-phases %standard-phases
231 (replace 'check
232 (lambda _
233 ;; Extend PYTHONPATH so the built package will be found.
234 (setenv "PYTHONPATH"
235 (string-append (getcwd) "/build/lib:"
236 (getenv "PYTHONPATH")))
237 (invoke "pytest" "-p" "no:logging")
238 #t)))))
239 (home-page "https://github.com/borntyping/python-colorlog")
240 (synopsis "Log formatting with colors for python")
241 (description "The @code{colorlog.ColoredFormatter} is a formatter for use
242 with Python's logging module that outputs records using terminal colors.")
243 (license license:expat)))
244
245 (define-public python-pyprind
246 (package
247 (name "python-pyprind")
248 (version "2.11.2")
249 (source (origin
250 (method url-fetch)
251 (uri (pypi-uri "PyPrind" version))
252 (sha256
253 (base32
254 "0xg6m5hr33h9bdlrr42kc58jm2m87a9zsagy7n2m4n407d2snv64"))))
255 (build-system python-build-system)
256 (propagated-inputs
257 `(("python-psutil" ,python-psutil)))
258 (home-page "https://github.com/rasbt/pyprind")
259 (synopsis "Python Progress Bar and Percent Indicator Utility")
260 (description "The PyPrind (Python Progress Indicator) module provides a
261 progress bar and a percentage indicator object that let you track the progress
262 of a loop structure or other iterative computation.")
263 (license license:bsd-3)))
264
265 (define-public python-gphoto2
266 (package
267 (name "python-gphoto2")
268 (version "2.2.1")
269 (source (origin
270 (method url-fetch)
271 (uri (pypi-uri "gphoto2" version))
272 (sha256
273 (base32
274 "118zm25c8mlajfl0pzssnwz4b8lamj9dgymla9rn4nla7l244a0r"))))
275 (build-system python-build-system)
276 (native-inputs
277 `(("pkg-config" ,pkg-config)))
278 (inputs
279 `(("libgphoto2" ,libgphoto2)))
280 (home-page "https://github.com/jim-easterbrook/python-gphoto2")
281 (synopsis "Python interface to libgphoto2")
282 (description "@code{python-gphoto2} is a comprehensive Python interface
283 (or binding) to @code{libgphoto2}. It is built using @code{SWIG} to
284 automatically generate the interface code.")
285 (license license:gpl3+)))
286
287 (define-public python-colour
288 (package
289 (name "python-colour")
290 (version "0.1.5")
291 (source (origin
292 (method url-fetch)
293 (uri (pypi-uri "colour" version))
294 (sha256
295 (base32
296 "1visbisfini5j14bdzgs95yssw6sm4pfzyq1n3lfvbyjxw7i485g"))))
297 (build-system python-build-system)
298 (native-inputs
299 `(("python-d2to1" ,python-d2to1)))
300 (home-page "https://github.com/vaab/colour")
301 (synopsis "Convert and manipulate various color representations")
302 (description "Pythonic way to manipulate color representations (HSL, RVB,
303 web, X11, ...).")
304 (license license:expat)))
305
306 (define-public python-d2to1
307 (package
308 (name "python-d2to1")
309 (version "0.2.12.post1")
310 (source (origin
311 (method url-fetch)
312 (uri (pypi-uri "d2to1" version))
313 (sha256
314 (base32
315 "09fq7pq1z8d006xh5z75rm2lk61v6yn2xhy53z4gsgibhqb2vvs9"))))
316 (build-system python-build-system)
317 (native-inputs
318 `(("python-nose" ,python-nose)))
319 (home-page "https://github.com/embray/d2to1")
320 (synopsis "Allows for distutils2-like setup.cfg files as package metadata
321 in python")
322 (description "The python package d2to1 (the d is for distutils) allows
323 using distutils2-like setup.cfg files for a package's metadata with a
324 distribute/setuptools setup.py script.")
325 (license license:bsd-2)))
326
327 (define-public python-rawkit
328 (package
329 (name "python-rawkit")
330 (version "0.6.0")
331 (source (origin
332 (method url-fetch)
333 (uri (pypi-uri "rawkit" version))
334 (sha256
335 (base32
336 "0vrhrpr70i61y5q5ysk341x1539ff1q1k82g59zq69lv16s0f76s"))))
337 (build-system python-build-system)
338 (native-inputs
339 `(("python-pytest" ,python-pytest)
340 ("python-mock" ,python-mock)))
341 (inputs
342 `(("libraw" ,libraw)))
343 (home-page "https://rawkit.readthedocs.io")
344 (synopsis "Ctypes-based LibRaw binding for Python")
345 (description "The rawkit package provides two modules: rawkit and libraw.
346 The rawkit module provides a high-level Pythonic interface for developing raw
347 photos, while the libraw module provides a CTypes based interface for
348 interacting with the low-level LibRaw C APIs.")
349 (license license:expat)))
350
351 (define-public python-easygui
352 (package
353 (name "python-easygui")
354 (version "0.98.1")
355 (source (origin
356 (method url-fetch)
357 (uri (pypi-uri "easygui" version))
358 (sha256
359 (base32
360 "1zmvmwgxyzvm83818skhn8b4wrci4kmnixaax8q3ia5cn7xrmj6v"))))
361 (build-system python-build-system)
362 (propagated-inputs
363 `(("python-tkinter" ,python "tk")))
364 (home-page "https://github.com/robertlugg/easygui")
365 (synopsis "GUI programming module for Python")
366 (description "EasyGUI is a module for very simple, very easy GUI
367 programming in Python. EasyGUI is different from other GUI generators in that
368 EasyGUI is NOT event-driven. Instead, all GUI interactions are invoked by
369 simple function calls.")
370 (license license:bsd-3)))
371
372 (define-public python-pymediainfo
373 (package
374 (name "python-pymediainfo")
375 (version "4.1")
376 (source
377 (origin
378 (method url-fetch)
379 (uri (pypi-uri "pymediainfo" version))
380 (sha256
381 (base32
382 "0mhpxs7vlqx8w75z93dy7nnvx89kwfdjkla03l19an15rlyqyspd"))))
383 (build-system python-build-system)
384 (native-inputs
385 `(("python-setuptools-scm" ,python-setuptools-scm)
386 ("python-pytest" ,python-pytest)))
387 (inputs
388 `(("libmediainfo" ,libmediainfo)))
389 (arguments
390 `(#:phases
391 (modify-phases %standard-phases
392 (add-after 'unpack 'patch-libmediainfo
393 (lambda _
394 (substitute* "pymediainfo/__init__.py"
395 (("libmediainfo.so.0")
396 (string-append (assoc-ref %build-inputs "libmediainfo")
397 "/lib/libmediainfo.so.0")))
398 #t))
399 (replace 'check
400 (lambda _
401 ;; Extend PYTHONPATH so the built package will be found.
402 (setenv "PYTHONPATH"
403 (string-append (getcwd) "/build/lib:"
404 (getenv "PYTHONPATH")))
405 ;; Skip the only failing test "test_parse_url"
406 (invoke "pytest" "-vv" "-k" "not test_parse_url")
407 #t)))))
408 (home-page
409 "https://github.com/sbraz/pymediainfo")
410 (synopsis
411 "Python wrapper for the mediainfo library")
412 (description
413 "Python wrapper for the mediainfo library to access the technical and tag
414 data for video and audio files.")
415 (license license:expat)))
416
417 (define-public python-psutil
418 (package
419 (name "python-psutil")
420 (version "5.7.0")
421 (source
422 (origin
423 (method url-fetch)
424 (uri (pypi-uri "psutil" version))
425 (sha256
426 (base32 "03jykdi3dgf1cdal9bv4fq9zjvzj9l9bs99gi5ar81sdl5nc2pk8"))))
427 (build-system python-build-system)
428 (arguments
429 ;; FIXME: some tests do not return and time out. Some tests fail because
430 ;; some processes survive kill().
431 '(#:tests? #f))
432 (home-page "https://www.github.com/giampaolo/psutil")
433 (synopsis "Library for retrieving information on running processes")
434 (description
435 "psutil (Python system and process utilities) is a library for retrieving
436 information on running processes and system utilization (CPU, memory, disks,
437 network) in Python. It is useful mainly for system monitoring, profiling and
438 limiting process resources and management of running processes. It implements
439 many functionalities offered by command line tools such as: ps, top, lsof,
440 netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime,
441 pidof, tty, taskset, pmap.")
442 (properties `((python2-variant . ,(delay python2-psutil))))
443 (license license:bsd-3)))
444
445 (define-public python2-psutil
446 (let ((base (package-with-python2 (strip-python2-variant python-psutil))))
447 (package
448 (inherit base)
449 (propagated-inputs
450 `(("python2-enum34" ,python2-enum34) ;optional
451 ,@(package-propagated-inputs base))))))
452
453 (define-public python-shapely
454 (package
455 (name "python-shapely")
456 (version "1.6.4.post2")
457 (source
458 (origin
459 (method url-fetch)
460 (uri (pypi-uri "Shapely" version))
461 (sha256
462 (base32
463 "03r42fmd9alp6r3q95ad6rldq2f7n1wimrw53zy5kpn33yv7pf64"))))
464 (build-system python-build-system)
465 (native-inputs
466 `(("python-cython" ,python-cython)
467 ("python-matplotlib" ,python-matplotlib)
468 ("python-pytest" ,python-pytest)
469 ("python-pytest-cov" ,python-pytest-cov)))
470 (inputs
471 `(("geos" ,geos)))
472 (propagated-inputs
473 `(("python-numpy" ,python-numpy)))
474 (arguments
475 `(#:phases
476 (modify-phases %standard-phases
477 (add-after 'unpack 'patch-geos-path
478 (lambda* (#:key inputs #:allow-other-keys)
479 (let ((geos (assoc-ref inputs "geos"))
480 (glibc (assoc-ref inputs ,(if (%current-target-system)
481 "cross-libc" "libc"))))
482 (substitute* "shapely/geos.py"
483 (("_lgeos = load_dll\\('geos_c', fallbacks=.*\\)")
484 (string-append "_lgeos = load_dll('geos_c', fallbacks=['"
485 geos "/lib/libgeos_c.so'])"))
486 (("free = load_dll\\('c'\\)\\.free")
487 (string-append "free = load_dll('c', fallbacks=['"
488 glibc "/lib/libc.so.6']).free"))))
489 #t)))))
490 (home-page "https://github.com/Toblerity/Shapely")
491 (synopsis "Library for the manipulation and analysis of geometric objects")
492 (description "Shapely is a Python package for manipulation and analysis of
493 planar geometric objects. It is based on the @code{GEOS} library.")
494 (license license:bsd-3)))
495
496 (define-public python-shortuuid
497 (package
498 (name "python-shortuuid")
499 (version "0.5.0")
500 (source
501 (origin
502 (method url-fetch)
503 (uri (pypi-uri "shortuuid" version))
504 (sha256
505 (base32
506 "1f8i4zwj5vmpzbz6b17bljy4399gx5aq7vsyw63sz2qgyjcd73yh"))))
507 (build-system python-build-system)
508 (native-inputs
509 `(("python-pep8" ,python-pep8)))
510 (home-page "https://github.com/skorokithakis/shortuuid")
511 (synopsis "Generator library for concise, unambiguous and URL-safe UUIDs")
512 (description
513 "@code{shortuuid} is a Python library for generating concise, unambiguous
514 and URL-safe UUIDs. UUIDs are generated using the built-in Python @code{uuid}
515 module and then similar looking characters are removed.")
516 (license license:bsd-3)))
517
518 (define-public python-logwrap
519 (package
520 (name "python-logwrap")
521 (version "3.2.1")
522 (source
523 (origin
524 (method url-fetch)
525 (uri (pypi-uri "logwrap" version ".zip"))
526 (sha256
527 (base32
528 "1d2k0hvpbi51vl410y8fbs5m0nxnlh2k7gr2nrh3k81ibhzscsra"))))
529 (build-system python-build-system)
530 (propagated-inputs
531 `(("python-six" ,python-six)
532 ("python-typing" ,python-typing)))
533 (native-inputs
534 `(("unzip" ,unzip)
535 ("python-cython" ,python-cython)
536 ("python-pytest" ,python-pytest)
537 ("python-pytest-cov" ,python-pytest-cov)
538 ("python-pytest-runner" ,python-pytest-runner)))
539 (home-page "https://github.com/penguinolog/logwrap")
540 (synopsis "Decorator for logging function arguments")
541 (description "This package provides a decorator to log function arguments
542 and function call return values in a human-readable way.")
543 (license license:asl2.0)))
544
545 (define-public python2-shapely
546 (package-with-python2 python-shapely))
547
548 (define-public python-clyent
549 (package
550 (name "python-clyent")
551 (version "1.2.1")
552 (source
553 (origin
554 (method url-fetch)
555 (uri (pypi-uri "clyent" version))
556 (sha256
557 (base32
558 "1r9987qmy1pz3hq54160bapqsywpq14waw4w9x3ly8hmq7kpgfbj"))))
559 (build-system python-build-system)
560 (native-inputs
561 `(("python-mock" ,python-mock)))
562 (home-page "https://github.com/binstar/clyent")
563 (synopsis "Command line client library")
564 (description "Clyent is a Python command line utiliy library. It is used
565 by @code{binstar}, @code{binstar-build} and @code{chalmers}.")
566 (license license:bsd-3)))
567
568 (define-public python2-clyent
569 (package-with-python2 python-clyent))
570
571 (define-public python-babel
572 (package
573 (name "python-babel")
574 (version "2.8.0")
575 (source
576 (origin
577 (method url-fetch)
578 (uri (pypi-uri "Babel" version))
579 (sha256
580 (base32
581 "0f0f2vvs1mpdpz2c0mg1mnc3sih8bizmc1h9m67kdsnqs3i2mb0s"))))
582 (build-system python-build-system)
583 (native-inputs
584 `(("python-freezegun" ,python-freezegun)
585 ("python-pytest" ,python-pytest)))
586 (propagated-inputs
587 `(("python-pytz" ,python-pytz)))
588 (arguments
589 `(#:phases (modify-phases %standard-phases
590 (replace 'check
591 (lambda _
592 (invoke "pytest" "-vv" "-k"
593 (string-append
594 ;; XXX: These tests fail when using Pytest 4.x and
595 ;; Babel 2.6.0. Try removing this for later versions.
596 "not test_no_inherit_metazone_marker_never_in_output"
597 " and not test_smoke_dates"
598 " and not test_smoke_numbers")))))))
599 (home-page "http://babel.pocoo.org/")
600 (synopsis
601 "Tools for internationalizing Python applications")
602 (description
603 "Babel is composed of two major parts:
604 - tools to build and work with gettext message catalogs
605 - a Python interface to the CLDR (Common Locale Data Repository), providing
606 access to various locale display names, localized number and date formatting,
607 etc. ")
608 (license license:bsd-3)))
609
610 (define-public python2-babel
611 (package-with-python2 python-babel))
612
613 ;; Sphinx < 2.0 requires this version. Remove once no longer needed.
614 (define-public python2-babel-2.6
615 (package
616 (inherit python2-babel)
617 (version "2.6.0")
618 (source (origin
619 (method url-fetch)
620 (uri (pypi-uri "Babel" version))
621 (sha256
622 (base32
623 "08rxmbx2s4irp0w0gmn498vns5xy0fagm0fg33xa772jiks51flc"))))))
624
625 (define-public python2-backport-ssl-match-hostname
626 (package
627 (name "python2-backport-ssl-match-hostname")
628 (version "3.5.0.1")
629 (source
630 (origin
631 (method url-fetch)
632 (uri (pypi-uri "backports.ssl_match_hostname" version))
633 (sha256
634 (base32
635 "1wndipik52cyqy0677zdgp90i435pmvwd89cz98lm7ri0y3xjajh"))))
636 (build-system python-build-system)
637 (arguments
638 `(#:python ,python-2
639 #:tests? #f)) ; no test target
640 (home-page "https://bitbucket.org/brandon/backports.ssl_match_hostname")
641 (synopsis "Backport of ssl.match_hostname() function from Python 3.5")
642 (description
643 "This backport brings the ssl.match_hostname() function to users of
644 earlier versions of Python. The function checks the hostname in the
645 certificate returned by the server to which a connection has been established,
646 and verifies that it matches the intended target hostname.")
647 (license license:psfl)))
648
649 (define-public python-bitarray
650 (package
651 (name "python-bitarray")
652 (version "1.2.1")
653 (source (origin
654 (method url-fetch)
655 (uri (pypi-uri "bitarray" version))
656 (sha256
657 (base32
658 "1kxrlxfj9nrx512sfwifwl9z4v6ky3qschl0zmk3s3dvc3s7bmif"))))
659 (build-system python-build-system)
660 (home-page "https://github.com/ilanschnell/bitarray")
661 (synopsis "Efficient arrays of booleans")
662 (description "This package provides an object type which efficiently
663 represents an array of booleans. Bitarrays are sequence types and behave very
664 much like usual lists. Eight bits are represented by one byte in a contiguous
665 block of memory. The user can select between two representations:
666 little-endian and big-endian. All of the functionality is implemented in C.
667 Methods for accessing the machine representation are provided. This can be
668 useful when bit level access to binary files is required, such as portable
669 bitmap image files. Also, when dealing with compressed data which uses
670 variable bit length encoding, you may find this module useful.")
671 (license license:psfl)))
672
673 (define-public python-boolean.py
674 (package
675 (name "python-boolean.py")
676 (version "3.6")
677 (source
678 (origin
679 ;; There's no source tarball on PyPI.
680 (method git-fetch)
681 (uri (git-reference
682 (url "https://github.com/bastikr/boolean.py")
683 (commit (string-append "v" version))))
684 (file-name (git-file-name name version))
685 (sha256
686 (base32 "1wc89y73va58cj7dsx6c199zpxsy9q53dsffsdj6zmc90inqz6qs"))))
687 (build-system python-build-system)
688 (home-page "https://github.com/bastikr/boolean.py")
689 (synopsis "Boolean algebra in one Python module")
690 (description
691 "This is a small Python library that implements boolean algebra.
692 It defines two base elements, @code{TRUE} and @code{FALSE}, and a
693 @code{Symbol} class that can take on one of these two values. Calculations
694 are done only in terms of @code{AND}, @code{OR}, and @code{NOT}---other
695 compositions like @code{XOR} and @code{NAND} are emulated on top of them.
696 Expressions are constructed from parsed strings or directly in Python.")
697 (license license:bsd-2)))
698
699 (define-public python-hdf4
700 (package
701 (name "python-hdf4")
702 (version "0.9")
703 (source
704 (origin
705 (method url-fetch)
706 (uri (pypi-uri name version))
707 (sha256
708 (base32
709 "1hjiyrxvxk9817qyqky3nar4y3fs4z8wxz0n884zzb5wi6skrjks"))))
710 (build-system python-build-system)
711 (native-inputs `(("nose" ,python-nose)))
712 (propagated-inputs `(("numpy" ,python-numpy)))
713 (inputs
714 `(("hdf4" ,hdf4)
715 ("libjpeg" ,libjpeg-turbo)
716 ("zlib" ,zlib)))
717 (arguments
718 `(#:phases
719 (modify-phases %standard-phases
720 (replace 'check
721 (lambda _
722 ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes
723 ;; on to import numpy. Somehow this works on their CI system.
724 ;; Let's just manage PYTHONPATH here instead.
725 (substitute* "runexamples.sh"
726 (("export PYTHONPATH=.*") ""))
727 (setenv "PYTHONPATH"
728 (string-append (getcwd) ":"
729 (getenv "PYTHONPATH")))
730 (invoke "./runexamples.sh")
731 (invoke "nosetests" "-v"))))))
732 (home-page "https://github.com/fhs/python-hdf4")
733 (synopsis "Python interface to the NCSA HDF4 library")
734 (description
735 "Python-HDF4 is a python wrapper around the NCSA HDF version 4 library,
736 which implements the SD (Scientific Dataset), VS (Vdata) and V (Vgroup) API’s.
737 NetCDF files can also be read and modified. Python-HDF4 is a fork of
738 @url{http://hdfeos.org/software/pyhdf.php,pyhdf}.")
739 (license license:expat)))
740
741 (define-public python2-hdf4
742 (package-with-python2 python-hdf4))
743
744 (define-public python-h5py
745 (package
746 (name "python-h5py")
747 (version "2.10.0")
748 (source
749 (origin
750 (method url-fetch)
751 (uri (pypi-uri "h5py" version))
752 (sha256
753 (base32
754 "0baipzv8n93m0dq0riyi8rfhzrjrfrfh8zqhszzp1j2xjac2fhc4"))))
755 (build-system python-build-system)
756 (arguments
757 `(#:tests? #f ; no test target
758 #:phases
759 (modify-phases %standard-phases
760 (add-after 'unpack 'fix-hdf5-paths
761 (lambda* (#:key inputs #:allow-other-keys)
762 (let ((prefix (assoc-ref inputs "hdf5")))
763 (substitute* "setup_build.py"
764 (("\\['/opt/local/lib', '/usr/local/lib'\\]")
765 (string-append "['" prefix "/lib" "']"))
766 (("'/opt/local/include', '/usr/local/include'")
767 (string-append "'" prefix "/include" "'")))
768 (substitute* "setup_configure.py"
769 (("\\['/usr/local/lib', '/opt/local/lib'\\]")
770 (string-append "['" prefix "/lib" "']")))
771 #t))))))
772 (propagated-inputs
773 `(("python-six" ,python-six)
774 ("python-numpy" ,python-numpy)))
775 (inputs
776 `(("hdf5" ,hdf5-1.10)))
777 (native-inputs
778 `(("python-cython" ,python-cython)
779 ("python-pkgconfig" ,python-pkgconfig)
780 ("pkg-config" ,pkg-config)))
781 (home-page "https://www.h5py.org/")
782 (synopsis "Read and write HDF5 files from Python")
783 (description
784 "The h5py package provides both a high- and low-level interface to the
785 HDF5 library from Python. The low-level interface is intended to be a
786 complete wrapping of the HDF5 API, while the high-level component supports
787 access to HDF5 files, datasets and groups using established Python and NumPy
788 concepts.")
789 (license license:bsd-3)))
790
791 (define-public python2-h5py
792 (package-with-python2 python-h5py))
793
794 (define-public python-sh
795 (package
796 (name "python-sh")
797 (version "1.12.14")
798 (source
799 (origin
800 (method url-fetch)
801 (uri (pypi-uri "sh" version))
802 (sha256
803 (base32
804 "1z2hx357xp3v4cv44xmqp7lli3frndqpyfmpbxf7n76h7s1zaaxm"))))
805 (build-system python-build-system)
806 (arguments
807 '(#:phases
808 (modify-phases %standard-phases
809 (replace 'check
810 (lambda _
811 ;; XXX: A Python 2 test fails when HOME=/homeless-shelter.
812 (setenv "HOME" "/tmp")
813 (invoke "python" "sh.py" "test"))))))
814 (native-inputs
815 `(("python-coverage" ,python-coverage)))
816 (home-page "https://github.com/amoffat/sh")
817 (synopsis "Python subprocess replacement")
818 (description "This package provides a replacement for Python's
819 @code{subprocess} feature.")
820 (license license:expat)))
821
822 (define-public python2-sh
823 (package-with-python2 python-sh))
824
825 (define-public python-cftime
826 (package
827 (name "python-cftime")
828 (version "1.0.4.2")
829 (source
830 (origin
831 (method url-fetch)
832 (uri (pypi-uri "cftime" version))
833 (sha256
834 (base32 "0w0gi6jnch38hiygl62j4xkcirv4y3dcwrvxl9p7bsk6j27lzihs"))))
835 (build-system python-build-system)
836 (propagated-inputs
837 `(("python-numpy" ,python-numpy)))
838 (native-inputs
839 `(("python-coveralls" ,python-coveralls)
840 ("python-cython" ,python-cython)
841 ("python-pytest-cov" ,python-pytest-cov)))
842 (home-page "https://github.com/Unidata/cftime")
843 (synopsis "Library for time handling")
844 (description
845 "This package provides time-handling functionality that used to be part
846 of the netcdf4 package before.")
847 ;; This package claims to include code under the GPLv3 but is released
848 ;; under ISC.
849 (license (list license:isc license:gpl3+))))
850
851 (define-public python-netcdf4
852 (package
853 (name "python-netcdf4")
854 (version "1.5.3")
855 (source
856 (origin
857 (method url-fetch)
858 (uri (pypi-uri "netCDF4" version))
859 (sha256
860 (base32
861 "1gn35mb2yc263pci720aik8ymz41lrvxlrn3z83vyjwghiashg1a"))))
862 (build-system python-build-system)
863 (arguments
864 '(#:phases
865 (modify-phases %standard-phases
866 (add-after 'unpack 'configure-locations
867 (lambda* (#:key inputs #:allow-other-keys)
868 (setenv "HDF5_DIR" (assoc-ref inputs "hdf5"))
869 #t)))))
870 (native-inputs
871 `(("python-cython" ,python-cython)))
872 (propagated-inputs
873 `(("python-numpy" ,python-numpy)
874 ("python-cftime" ,python-cftime)))
875 (inputs
876 `(("netcdf" ,netcdf)
877 ("hdf4" ,hdf4)
878 ("hdf5" ,hdf5)))
879 (home-page "https://github.com/Unidata/netcdf4-python")
880 (synopsis "Python/numpy interface to the netCDF library")
881 (description "Netcdf4-python is a Python interface to the netCDF C
882 library. netCDF version 4 has many features not found in earlier
883 versions of the library and is implemented on top of HDF5. This module
884 can read and write files in both the new netCDF 4 and the old netCDF 3
885 format, and can create files that are readable by HDF5 clients. The
886 API is modelled after @code{Scientific.IO.NetCDF}, and should be familiar
887 to users of that module.")
888 ;; The software is mainly ISC, but includes some files covered
889 ;; by the Expat license.
890 (license (list license:isc license:expat))))
891
892 (define-public python2-netcdf4
893 (package-with-python2 python-netcdf4))
894
895 (define-public python-license-expression
896 (package
897 (name "python-license-expression")
898 (version "0.999")
899 (source
900 (origin
901 (method url-fetch)
902 (uri (pypi-uri "license-expression" version))
903 (sha256
904 (base32 "08ppb0bxbrsxazy88sgpl9yffvdsabw6dkk1nc332wcz2mphwwyf"))))
905 (build-system python-build-system)
906 (propagated-inputs
907 `(("python-boolean.py" ,python-boolean.py)))
908 (home-page "https://github.com/nexB/license-expression")
909 (synopsis "Apply boolean logic to license expressions")
910 (description
911 "This Python module defines a tiny language to evaluate and compare
912 license expressions using boolean logic. Logical combinations of licenses can
913 be tested for equality, containment, and equivalence. They can be normalised
914 and simplified. It supports SPDX license expressions as well as other naming
915 conventions and aliases in the same expression.")
916 (license license:gpl2+)))
917
918 (define-public python-lockfile
919 (package
920 (name "python-lockfile")
921 (version "0.12.2")
922 (source
923 (origin
924 (method url-fetch)
925 (uri (pypi-uri "lockfile" version))
926 (sha256
927 (base32
928 "16gpx5hm73ah5n1079ng0vy381hl802v606npkx4x8nb0gg05vba"))))
929 (build-system python-build-system)
930 (arguments '(#:test-target "check"))
931 (native-inputs
932 `(("python-pbr" ,python-pbr)))
933 (home-page "https://launchpad.net/pylockfile")
934 (synopsis "Platform-independent file locking module")
935 (description
936 "The lockfile package exports a LockFile class which provides a simple
937 API for locking files.")
938 (license license:expat)))
939
940 (define-public python2-lockfile
941 (package-with-python2 python-lockfile))
942
943 (define-public python-filelock
944 (package
945 (name "python-filelock")
946 (version "3.0.12")
947 (source
948 (origin
949 (method url-fetch)
950 (uri (pypi-uri "filelock" version))
951 (sha256
952 (base32
953 "0ngzlvb5j8gqs2nxlp2b0jhzii792h66wsn694qm8kqixr225n0q"))))
954 (build-system python-build-system)
955 (home-page
956 "https://github.com/benediktschmitt/py-filelock")
957 (synopsis "Platform independent file lock")
958 (description "@code{filelock} contains a single module implementing
959 a platform independent file lock in Python, which provides a simple way of
960 inter-process communication.")
961 (license license:unlicense)))
962
963 (define-public python-semantic-version
964 (package
965 (name "python-semantic-version")
966 (version "2.6.0")
967 (source
968 (origin
969 (method url-fetch)
970 (uri (pypi-uri "semantic_version" version))
971 (sha256
972 (base32
973 "1h2l9xyg1zzsda6kjcmfcgycbvrafwci283vcr1v5sbk01l2hhra"))))
974 (build-system python-build-system)
975 (arguments
976 `(#:tests? #f)) ; PyPI tarball lacks tests
977 (home-page "https://github.com/rbarrois/python-semanticversion")
978 (synopsis "Semantic versioning module for Python")
979 (description
980 "The @code{semantic_version} class is a small library for handling
981 @uref{https://semver.org/, semantic versioning} (@dfn{SemVer}) in Python.
982
983 It can compare versions, generate a new version that represents a bump in one of
984 the version levels, and check whether any given string is a proper semantic
985 version identifier.")
986 (license license:bsd-3)))
987
988 (define-public python2-semantic-version
989 (package-with-python2 python-semantic-version))
990
991 (define-public python-serpent
992 (package
993 (name "python-serpent")
994 (version "1.28")
995 (source
996 (origin
997 (method url-fetch)
998 (uri (pypi-uri "serpent" version))
999 (sha256
1000 (base32 "1arnckykpkvv2qrp49l1k7q5mr5pisswl0rvdx98x8wsl1n361pk"))))
1001 (build-system python-build-system)
1002 (native-inputs
1003 `(("python-attrs" ,python-attrs)
1004 ("python-pytz" ,python-pytz)))
1005 (home-page "https://github.com/irmen/Serpent")
1006 (synopsis "Serializer for literal Python expressions")
1007 (description
1008 "Serpent provides @code{ast.literal_eval()}-compatible object tree
1009 serialization. It serializes an object tree into bytes (an utf-8 encoded
1010 string) that can be decoded and then passed as-is to @code{ast.literal_eval()}
1011 to rebuild the original object tree.
1012
1013 Because only safe literals are encoded, it is safe to send serpent data to
1014 other machines, such as over the network.")
1015 (properties `((python2-variant . ,(delay python2-serpent))))
1016 (license license:expat)))
1017
1018 (define-public python2-serpent
1019 (let ((base (package-with-python2 (strip-python2-variant python-serpent))))
1020 (package
1021 (inherit base)
1022 (propagated-inputs
1023 `(("python-enum34" ,python2-enum34)
1024 ,@(package-propagated-inputs base))))))
1025
1026 (define-public python-setuptools
1027 (package
1028 (name "python-setuptools")
1029 (version "41.0.1")
1030 (source
1031 (origin
1032 (method url-fetch)
1033 (uri (pypi-uri "setuptools" version ".zip"))
1034 (sha256
1035 (base32
1036 "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
1037 (modules '((guix build utils)))
1038 (snippet
1039 '(begin
1040 ;; Remove included binaries which are used to build self-extracting
1041 ;; installers for Windows.
1042 ;; TODO: Find some way to build them ourself so we can include them.
1043 (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
1044 #t))))
1045 (build-system python-build-system)
1046 ;; FIXME: Tests require pytest, which itself relies on setuptools.
1047 ;; One could bootstrap with an internal untested setuptools.
1048 (arguments
1049 `(#:tests? #f))
1050 (home-page "https://pypi.org/project/setuptools/")
1051 (synopsis
1052 "Library designed to facilitate packaging Python projects")
1053 (description
1054 "Setuptools is a fully-featured, stable library designed to facilitate
1055 packaging Python projects, where packaging includes:
1056 Python package and module definitions,
1057 distribution package metadata,
1058 test hooks,
1059 project installation,
1060 platform-specific details,
1061 Python 3 support.")
1062 ;; TODO: setuptools now bundles the following libraries:
1063 ;; packaging, pyparsing, six and appdirs. How to unbundle?
1064 (license (list license:psfl ; setuptools itself
1065 license:expat ; six, appdirs, pyparsing
1066 license:asl2.0 ; packaging is dual ASL2/BSD-2
1067 license:bsd-2))))
1068
1069 (define-public python2-setuptools
1070 (package-with-python2 python-setuptools))
1071
1072 ;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
1073 (define-public python-setuptools-for-tensorflow
1074 (hidden-package
1075 (package
1076 (inherit python-setuptools)
1077 (version "39.1.0")
1078 (source (origin
1079 (inherit (package-source python-setuptools))
1080 (uri (pypi-uri "setuptools" version ".zip"))
1081 (sha256
1082 (base32
1083 "1mzdhvfhnv4lggxa8rjl0dzqxvfx377gg5sqs57v89wrp09lwj65")))))))
1084
1085 (define-public python-uniseg
1086 (package
1087 (name "python-uniseg")
1088 (version "0.7.1")
1089 (source
1090 (origin
1091 (method url-fetch)
1092 (uri (pypi-uri "uniseg" version ".zip"))
1093 (sha256
1094 (base32
1095 "05jsazvz6nbmh6l3v1rph5ydkqn1hzx1pyggdyvgp2qgmgrnmiz2"))))
1096 (build-system python-build-system)
1097 (arguments
1098 '(#:tests? #f)) ; The test suite requires network access.
1099 (native-inputs
1100 `(("unzip" ,unzip)))
1101 (home-page
1102 "https://bitbucket.org/emptypage/uniseg-python")
1103 (synopsis
1104 "Python library to determine Unicode text segmentations")
1105 (description
1106 "Uniseg is a Python package used to determine Unicode text segmentations.
1107 Supported segmentations include:
1108 @enumerate
1109 @item @dfn{Code point} (any value in the Unicode codespace)
1110 @item @dfn{Grapheme cluster} (user-perceived character made of a single or
1111 multiple Unicode code points, e.g. \"G\" + acute-accent)
1112 @item Word break
1113 @item Sentence break
1114 @item Line break
1115 @end enumerate")
1116 (license license:expat)))
1117
1118 (define-public python2-uniseg
1119 (package-with-python2 python-uniseg))
1120
1121 (define-public python-humanfriendly
1122 (package
1123 (name "python-humanfriendly")
1124 (version "4.4.1")
1125 (source
1126 (origin
1127 (method url-fetch)
1128 (uri (pypi-uri "humanfriendly" version))
1129 (sha256
1130 (base32
1131 "0pisgizjql86785jchfjv217g0lsgk114g2lja5j4y3lsc3b9szi"))))
1132 (build-system python-build-system)
1133 (arguments
1134 `(;; XXX: Tests depend on coloredlogs, which in turn depends on humanfriendly.
1135 #:tests? #f))
1136 (propagated-inputs
1137 `(("python-monotonic" ,python-monotonic)))
1138 (home-page "https://humanfriendly.readthedocs.io")
1139 (synopsis "Human-friendly input and output in Python")
1140 (description
1141 "The functions and classes in @code{humanfriendly} can be used to make
1142 text interfaces more user-friendly. It includes tools to parse and format
1143 numbers, file sizes, and timespans, timers for long-running operations, menus
1144 to allow the user to choose from a list of options, and terminal interaction
1145 helpers.")
1146 (license license:expat)))
1147
1148 (define-public python2-humanfriendly
1149 (package-with-python2 python-humanfriendly))
1150
1151 (define-public python-textparser
1152 (package
1153 (name "python-textparser")
1154 (version "0.23.0")
1155 (source
1156 (origin
1157 (method url-fetch)
1158 (uri (pypi-uri "textparser" version))
1159 (sha256
1160 (base32
1161 "0w5lyhrsvzs5a9q1l3sjgxgljrvd3ybf796w93kc39wayzvd02gh"))))
1162 (build-system python-build-system)
1163 (home-page "https://github.com/eerimoq/textparser")
1164 (synopsis "Fast text parser for Python")
1165 (description "This library provides a text parser written in the Python
1166 language. It aims to be fast.")
1167 (license license:expat)))
1168
1169 (define-public python-aenum
1170 (package
1171 (name "python-aenum")
1172 (version "2.2.3")
1173 (source
1174 (origin
1175 (method url-fetch)
1176 (uri (pypi-uri "aenum" version))
1177 (sha256
1178 (base32
1179 "1s3008rklv4n1kvmq6xdbdfyrpl0gf1rhqasmd27s5kwyjmlqcx4"))))
1180 (build-system python-build-system)
1181 (arguments
1182 `(#:phases (modify-phases %standard-phases
1183 (replace 'check
1184 (lambda _
1185 (format #t "current working dir ~s~%" (getcwd))
1186 (setenv "PYTHONPATH"
1187 (string-append ".:" (getenv "PYTHONPATH")))
1188 ;; We must run the test suite module directly, as it
1189 ;; fails to define the 'tempdir' variable in scope for
1190 ;; the tests otherwise
1191 ;; (see:https://bitbucket.org/stoneleaf/aenum/\
1192 ;; issues/32/running-tests-with-python-setuppy-test).
1193 (invoke "python3" "aenum/test.py")
1194 ;; This one fails with "NameError: name
1195 ;; 'test_pickle_dump_load' is not defined" (see:
1196 ;; https://bitbucket.org/stoneleaf/aenum/issues/33
1197 ;; /error-running-the-test_v3py-test-suite).
1198 ;; (invoke "python3" "aenum/test_v3.py")
1199 #t)))))
1200 (home-page "https://bitbucket.org/stoneleaf/aenum")
1201 (synopsis "Advanced enumerations, namedtuples and constants for Python")
1202 (description "The aenum library includes an @code{Enum} base class, a
1203 metaclass-based @code{NamedTuple} implementation and a @code{NamedConstant}
1204 class.")
1205 (license license:bsd-3)))
1206
1207 (define-public python-can
1208 (package
1209 (name "python-can")
1210 (version "3.3.3")
1211 (source
1212 (origin
1213 (method url-fetch)
1214 (uri (pypi-uri "python-can" version))
1215 (sha256
1216 (base32
1217 "123lz1bl6xf3d0fvxzr4bg4884yg4m9s21z6xd2m68zhnbv9rmpc"))))
1218 (build-system python-build-system)
1219 (arguments
1220 `(#:phases (modify-phases %standard-phases
1221 (add-after 'unpack 'relax-version-requirements
1222 (lambda _
1223 (substitute* "setup.py"
1224 (("mock~=2\\.0") "mock")
1225 (("coverage<5") "coverage")
1226 (("pytest~=4\\.3") "pytest")
1227 (("hypothesis~=4\\.56") "hypothesis"))
1228 #t))
1229 (add-after 'unpack 'fix-broken-tests
1230 ;; The tests try to run two scripts it expects should be
1231 ;; in PATH, but they aren't at this time (see:
1232 ;; https://github.com/hardbyte/python-can/issues/805).
1233 (lambda _
1234 (substitute* "test/test_scripts.py"
1235 (("\"can_logger\\.py --help\"") "")
1236 (("\"can_player\\.py --help\"") ""))
1237 #t)))))
1238 (propagated-inputs
1239 `(("python-aenum" ,python-aenum)
1240 ("python-wrapt" ,python-wrapt)))
1241 (native-inputs
1242 `(("python-codecov" ,python-codecov)
1243 ("python-coverage" ,python-coverage)
1244 ("python-future" ,python-future)
1245 ("python-hypothesis" ,python-hypothesis)
1246 ("python-mock" ,python-mock)
1247 ("python-pyserial" ,python-pyserial)
1248 ("python-pytest" ,python-pytest)
1249 ("python-pytest-cov" ,python-pytest-cov)
1250 ("python-pytest-runner" ,python-pytest-runner)
1251 ("python-pytest-timeout" ,python-pytest-timeout)))
1252 (home-page "https://github.com/hardbyte/python-can")
1253 (synopsis "Controller Area Network (CAN) interface module for Python")
1254 (description "This package defines the @code{can} module, which provides
1255 controller area network (CAN) support for Python developers; providing common
1256 abstractions to different hardware devices, and a suite of utilities for
1257 sending and receiving messages on a CAN bus.")
1258 (license license:lgpl3+)))
1259
1260 (define-public python-diskcache
1261 (package
1262 (name "python-diskcache")
1263 (version "4.1.0")
1264 (source
1265 (origin
1266 (method url-fetch)
1267 (uri (pypi-uri "diskcache" version))
1268 (sha256
1269 (base32
1270 "1q2wz5sj16zgyy1zpq516qgbnfwsavk1pl2qks0f4r62z5cmmvmw"))))
1271 (build-system python-build-system)
1272 (arguments
1273 `(#:tests? #f)) ;test suite not included in the release
1274 (home-page "http://www.grantjenks.com/docs/diskcache/")
1275 (synopsis "Disk and file backed cache library")
1276 (description "DiskCache is a disk and file backed persistent cache.")
1277 (license license:asl2.0)))
1278
1279 (define-public python-bitstruct
1280 (package
1281 (name "python-bitstruct")
1282 (version "8.9.0")
1283 (source
1284 (origin
1285 (method url-fetch)
1286 (uri (pypi-uri "bitstruct" version))
1287 (sha256
1288 (base32
1289 "1fpc1qh1vss05ap29xvhjp200fm0q4pvgcjl0qpryh7ay6xgr5vx"))))
1290 (build-system python-build-system)
1291 (home-page "https://github.com/eerimoq/bitstruct")
1292 (synopsis "Python values to and C bit field structs converter")
1293 (description "This module performs conversions between Python values and C
1294 bit field structs represented as Python byte strings. It is intended to have
1295 a similar interface as the @code{struct} module from Python, but working on
1296 bits instead of primitive data types like @code{char}, @code{int}, etc.")
1297 (license license:expat)))
1298
1299 (define-public python-cantools
1300 (package
1301 (name "python-cantools")
1302 (version "33.1.1")
1303 (source
1304 (origin
1305 ;; We take the sources from the Git repository as the documentation is
1306 ;; not included with the PyPI archive.
1307 (method git-fetch)
1308 (uri (git-reference
1309 (url "https://github.com/eerimoq/cantools.git")
1310 (commit version)))
1311 (file-name (git-file-name name version))
1312 (sha256
1313 (base32
1314 "1aad137yd8b4jkfvlv812qsxmxcgra7g1p4wbxfsjy1cbf8fbq9q"))))
1315 (build-system python-build-system)
1316 (arguments
1317 `(#:phases
1318 (modify-phases %standard-phases
1319 (add-after 'build 'build-doc
1320 (lambda _
1321 ;; See: https://github.com/eerimoq/cantools/issues/190.
1322 (substitute* "README.rst"
1323 (("https://github.com/eerimoq/cantools/raw/master\
1324 /docs/monitor.png")
1325 "monitor.png"))
1326 (with-directory-excursion "docs"
1327 (invoke "make" "man" "info"))))
1328 (add-after 'install 'install-doc
1329 (lambda* (#:key outputs #:allow-other-keys)
1330 (let* ((out (assoc-ref outputs "out"))
1331 (info (string-append out "/share/info"))
1332 (man1 (string-append out "/share/man/man1")))
1333 (format #t "CWD: ~s~%" (getcwd))
1334 (install-file "docs/_build/texinfo/cantools.info" info)
1335 (install-file "docs/_build/man/cantools.1" man1)
1336 #t))))))
1337 (native-inputs
1338 `(("sphinx" ,python-sphinx)
1339 ("texinfo" ,texinfo)))
1340 (propagated-inputs
1341 `(("python-bitstruct" ,python-bitstruct)
1342 ("python-can" ,python-can)
1343 ("python-diskcache" ,python-diskcache)
1344 ("python-textparser" ,python-textparser)))
1345 (home-page "https://github.com/eerimoq/cantools")
1346 (synopsis "Tools for the Controller Area Network (CAN) bus protocol")
1347 (description "This package includes Controller Area Network (CAN) related
1348 tools that can be used to:
1349 @itemize
1350 @item parse DBC, KCD, SYM, ARXML 4 and CDD files
1351 @item encode and decode CAN messages
1352 @item multiplex simple and extended signals
1353 @item diagnose DID encoding and decoding
1354 @item dump the CAN decoder output
1355 @item test CAN nodes
1356 @item generate C source code
1357 @item monitor the CAN bus
1358 @end itemize")
1359 (license license:expat)))
1360
1361 (define-public python-capturer
1362 (package
1363 (name "python-capturer")
1364 (version "2.4")
1365 (source
1366 (origin
1367 (method url-fetch)
1368 (uri (pypi-uri "capturer" version))
1369 (sha256
1370 (base32
1371 "05d6ji4j8ipiq0br7bwam38qc6hd9l1djmfxlzrxx19ziyjl4089"))))
1372 (build-system python-build-system)
1373 (arguments
1374 `(#:tests? #f))
1375 (propagated-inputs
1376 `(("python-humanfriendly" ,python-humanfriendly)))
1377 (home-page "https://capturer.readthedocs.io")
1378 (synopsis "Capture stdout and stderr streams of the current process")
1379 (description
1380 "The capturer package makes it easy to capture the stdout and stderr
1381 streams of the current process and subprocesses. Output can be relayed
1382 to the terminal in real time but is also available to the Python program
1383 for additional processing.")
1384 (license license:expat)))
1385
1386 (define-public python2-capturer
1387 (package-with-python2 python-capturer))
1388
1389 (define-public python-case
1390 (package
1391 (name "python-case")
1392 (version "1.5.3")
1393 (source
1394 (origin
1395 (method url-fetch)
1396 (uri (pypi-uri "case" version))
1397 (sha256
1398 (base32
1399 "1cagg06vfph864s6l5jb0zqliwxh647bki8j6lf4a4qrv40jnhs8"))))
1400 (build-system python-build-system)
1401 (propagated-inputs
1402 `(("python-mock" ,python-mock)
1403 ("python-nose" ,python-nose)
1404 ("python-six" ,python-six)
1405 ("python-unittest2" ,python-unittest2)))
1406 (native-inputs
1407 `(("python-coverage" ,python-coverage)))
1408 (home-page "https://github.com/celery/case")
1409 (synopsis "Unittest utilities and convenience methods")
1410 (description
1411 "The @code{case} package provides utilities on top of unittest, including
1412 some helpful Python 2 compatibility convenience methods.")
1413 (license license:bsd-3)))
1414
1415 (define-public python-verboselogs
1416 (package
1417 (name "python-verboselogs")
1418 (version "1.7")
1419 (source
1420 (origin
1421 (method url-fetch)
1422 (uri (pypi-uri "verboselogs" version))
1423 (sha256
1424 (base32
1425 "09z4d1jiasn7k1hs5af2ckmnrd0i1d1m04bhfjhv7z6svzfdwgg3"))))
1426 (build-system python-build-system)
1427 (arguments
1428 `(#:phases
1429 (modify-phases %standard-phases
1430 (replace 'check
1431 (lambda _
1432 ;; Do not run pylint plugin test, as astroid is an old
1433 ;; unsupported version.
1434 (invoke "pytest" "-v" "-k" "not test_pylint_plugin"
1435 "verboselogs/tests.py"))))))
1436 (native-inputs
1437 `(("python-mock" ,python-mock)
1438 ("python-pytest" ,python-pytest)))
1439 (home-page "https://verboselogs.readthedocs.io")
1440 (synopsis "Verbose logging level for Python's logging module")
1441 (description
1442 "The @code{verboselogs} package extends Python's @code{logging} module to
1443 add the log levels NOTICE, SPAM, SUCCESS and VERBOSE.")
1444 (license license:expat)))
1445
1446 (define-public python2-verboselogs
1447 (package-with-python2 python-verboselogs))
1448
1449 (define-public python-coloredlogs
1450 (package
1451 (name "python-coloredlogs")
1452 (version "10.0")
1453 (source
1454 (origin
1455 (method url-fetch)
1456 (uri (pypi-uri "coloredlogs" version))
1457 (sha256
1458 (base32
1459 "0dkw6xp0r1dwgz4s2f58npx5nxfq51wf4l6qkm5ib27slgfs4sdq"))))
1460 (build-system python-build-system)
1461 (arguments
1462 `(;Tests require some updated modules
1463 #:tests? #f))
1464 (propagated-inputs
1465 `(("python-capturer" ,python-capturer)))
1466 (home-page "https://coloredlogs.readthedocs.io")
1467 (synopsis "Colored stream handler for Python's logging module")
1468 (description
1469 "The @code{coloredlogs} package enables colored terminal output for
1470 Python's logging module. The @code{ColoredFormatter} class inherits from
1471 @code{logging.Formatter} and uses ANSI escape sequences to render your logging
1472 messages in color.")
1473 (license license:expat)))
1474
1475 (define-public python2-coloredlogs
1476 (package-with-python2 python-coloredlogs))
1477
1478 (define-public python-editorconfig
1479 (package
1480 (name "python-editorconfig")
1481 (version "0.12.2")
1482 (source
1483 (origin
1484 (method url-fetch)
1485 (uri (pypi-uri "EditorConfig" version))
1486 (sha256
1487 (base32
1488 "0v55z351p9qkyp3bbspwywwn28sbcknhirngjbj779n3z52z63hv"))))
1489 (build-system python-build-system)
1490 (home-page "https://editorconfig.org/")
1491 (synopsis "EditorConfig bindings for python")
1492 (description "The EditorConfig project consists of a file format for
1493 defining coding styles and a collection of text editor plugins that enable
1494 editors to read the file format and adhere to defined styles. EditorConfig
1495 files are easily readable and they work nicely with version control systems.")
1496 ;; "fnmatch.py" and "ini.py" are licensed under psfl, the rest is bsd-2.
1497 (license (list license:bsd-2 license:psfl))))
1498
1499 (define-public python-et-xmlfile
1500 (package
1501 (name "python-et-xmlfile")
1502 (version "1.0.1")
1503 (source
1504 (origin
1505 (method url-fetch)
1506 (uri (pypi-uri "et_xmlfile" version))
1507 (sha256
1508 (base32
1509 "0nrkhcb6jdrlb6pwkvd4rycw34y3s931hjf409ij9xkjsli9fkb1"))))
1510 (build-system python-build-system)
1511 (arguments
1512 `(#:phases (modify-phases %standard-phases
1513 (replace 'check
1514 (lambda _
1515 (invoke "pytest"))))))
1516 (native-inputs
1517 `(("python-pytest" ,python-pytest)
1518 ("python-lxml" ,python-lxml))) ;used for the tests
1519 (home-page "https://bitbucket.org/openpyxl/et_xmlfile")
1520 (synopsis "Low memory implementation of @code{lxml.xmlfile}")
1521 (description "This Python library is based upon the @code{xmlfile} module
1522 from @code{lxml}. It aims to provide a low memory, compatible implementation
1523 of @code{xmlfile}.")
1524 (license license:expat)))
1525
1526 (define-public python2-et-xmlfile
1527 (package-with-python2 python-et-xmlfile))
1528
1529 (define-public python-openpyxl
1530 (package
1531 (name "python-openpyxl")
1532 (version "2.6.2")
1533 (source
1534 (origin
1535 ;; We use the upstream repository, as the tests are not included in the
1536 ;; PyPI releases.
1537 (method hg-fetch)
1538 (uri (hg-reference
1539 (url "https://bitbucket.org/openpyxl/openpyxl")
1540 (changeset version)))
1541 (file-name (string-append name "-" version "-checkout"))
1542 (sha256
1543 (base32 "1qhij6kcvdxqjy4g6193nsv4q7fy8n4fwyd3c2z047idlm6s3j4w"))))
1544 (build-system python-build-system)
1545 (arguments
1546 `(#:phases (modify-phases %standard-phases
1547 (replace 'check
1548 (lambda _
1549 (invoke "pytest"))))))
1550 (native-inputs
1551 ;; For the test suite.
1552 `(("python-lxml" ,python-lxml)
1553 ("python-pillow" ,python-pillow)
1554 ("python-pytest" ,python-pytest)))
1555 (propagated-inputs
1556 `(("python-et-xmlfile" ,python-et-xmlfile)
1557 ("python-jdcal" ,python-jdcal)))
1558 (home-page "https://openpyxl.readthedocs.io")
1559 (synopsis "Python library to read/write Excel 2010 XLSX/XLSM files")
1560 (description "This Python library allows reading and writing to the Excel XLSX, XLSM,
1561 XLTX and XLTM file formats that are defined by the Office Open XML (OOXML)
1562 standard.")
1563 (license license:expat)))
1564
1565 (define-public python-eventlet
1566 (package
1567 (name "python-eventlet")
1568 (version "0.25.1")
1569 (source
1570 (origin
1571 (method url-fetch)
1572 (uri (pypi-uri "eventlet" version))
1573 (sha256
1574 (base32
1575 "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c"))))
1576 (build-system python-build-system)
1577 (propagated-inputs
1578 `(("python-greenlet" ,python-greenlet)))
1579 (arguments
1580 ;; TODO: Requires unpackaged 'enum-compat'.
1581 '(#:tests? #f))
1582 (home-page "https://eventlet.net")
1583 (synopsis "Concurrent networking library for Python")
1584 (description
1585 "Eventlet is a concurrent networking library for Python that
1586 allows you to change how you run your code, not how you write it.
1587 It uses @code{epoll} or @code{libevent} for highly scalable non-blocking I/O.
1588 Coroutines ensure that the developer uses a blocking style of programming
1589 that is similar to threading, but provide the benefits of non-blocking I/O.
1590 The event dispatch is implicit, which means you can easily use @code{Eventlet}
1591 from the Python interpreter, or as a small part of a larger application.")
1592 (license license:expat)))
1593
1594 (define-public python2-eventlet
1595 (let ((base (package-with-python2
1596 (strip-python2-variant python-eventlet))))
1597 (package (inherit base)
1598 (propagated-inputs
1599 `(("python2-enum34" ,python2-enum34)
1600 ,@(package-propagated-inputs base))))))
1601
1602 (define-public python-six
1603 (package
1604 (name "python-six")
1605 (version "1.14.0")
1606 (source
1607 (origin
1608 (method url-fetch)
1609 (uri (pypi-uri "six" version))
1610 (sha256
1611 (base32
1612 "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3"))))
1613 (build-system python-build-system)
1614 (arguments
1615 `(#:phases
1616 (modify-phases %standard-phases
1617 (replace 'check
1618 (lambda _
1619 (invoke "py.test" "-v"))))))
1620 (native-inputs
1621 `(("python-pytest" ,python-pytest-bootstrap)))
1622 (home-page "https://pypi.org/project/six/")
1623 (synopsis "Python 2 and 3 compatibility utilities")
1624 (description
1625 "Six is a Python 2 and 3 compatibility library. It provides utility
1626 functions for smoothing over the differences between the Python versions with
1627 the goal of writing Python code that is compatible on both Python versions.
1628 Six supports every Python version since 2.5. It is contained in only one
1629 Python file, so it can be easily copied into your project.")
1630 (license license:x11)))
1631
1632 (define-public python2-six
1633 (package-with-python2 python-six))
1634
1635 (define-public python-six-bootstrap
1636 (package
1637 (inherit python-six)
1638 (name "python-six-bootstrap")
1639 (native-inputs `())
1640 (arguments `(#:tests? #f))))
1641
1642 (define-public python2-six-bootstrap
1643 (package-with-python2 python-six-bootstrap))
1644
1645 (define-public python-schedule
1646 (package
1647 (name "python-schedule")
1648 (version "0.4.3")
1649 (source
1650 (origin
1651 (method url-fetch)
1652 (uri (pypi-uri "schedule" version))
1653 (sha256
1654 (base32
1655 "0vplyjcbfrq50sphlwya749z8p2pcyi2nycw3518i0qpd9a6189i"))))
1656 (build-system python-build-system)
1657 (native-inputs
1658 `(("python-pytest" ,python-pytest)
1659 ("python-mock" ,python-mock)))
1660 (home-page "https://github.com/dbader/schedule")
1661 (synopsis "Schedule periodic function calls in Python")
1662 (description
1663 "Schedule is an in-process scheduler for periodic jobs that uses the
1664 builder pattern for configuration. Schedule lets you run Python functions (or
1665 any other callable) periodically at pre-determined intervals using a simple,
1666 human-friendly syntax.")
1667 (license license:expat)))
1668
1669 (define-public python2-schedule
1670 (package-with-python2 python-schedule))
1671
1672 (define-public python-mechanize
1673 (package
1674 (name "python-mechanize")
1675 (version "0.4.5")
1676 (source
1677 (origin
1678 (method url-fetch)
1679 (uri (pypi-uri "mechanize" version))
1680 (sha256
1681 (base32
1682 "1z9kqcwb8gfq2l6i42z624kxpd8692a0c8gw2x5bbm7n848w2mb3"))))
1683 (build-system python-build-system)
1684 (propagated-inputs
1685 `(("python-html5lib" ,python-html5lib)))
1686 (home-page "https://github.com/python-mechanize/mechanize")
1687 (synopsis
1688 "Stateful programmatic web browsing in Python")
1689 (description
1690 "Mechanize implements stateful programmatic web browsing in Python,
1691 after Andy Lester’s Perl module WWW::Mechanize.")
1692 (license license:bsd-3)))
1693
1694 (define-public python2-mechanize
1695 (package-with-python2 python-mechanize))
1696
1697 (define-public python-simplejson
1698 (package
1699 (name "python-simplejson")
1700 (version "3.14.0")
1701 (source
1702 (origin
1703 (method url-fetch)
1704 (uri (pypi-uri "simplejson" version))
1705 (sha256
1706 (base32
1707 "1lkv3xlf7ryzi69zqfdbkvpxdfy1rg1rq2yzcnxgf4km5m6difqy"))))
1708 (build-system python-build-system)
1709 (home-page "http://simplejson.readthedocs.org/en/latest/")
1710 (synopsis
1711 "Json library for Python")
1712 (description
1713 "JSON (JavaScript Object Notation) is a subset of JavaScript
1714 syntax (ECMA-262 3rd edition) used as a lightweight data interchange
1715 format.
1716
1717 Simplejson exposes an API familiar to users of the standard library marshal
1718 and pickle modules. It is the externally maintained version of the json
1719 library contained in Python 2.6, but maintains compatibility with Python 2.5
1720 and (currently) has significant performance advantages, even without using
1721 the optional C extension for speedups. Simplejson is also supported on
1722 Python 3.3+.")
1723 (license license:x11)))
1724
1725 (define-public python2-simplejson
1726 (package-with-python2 python-simplejson))
1727
1728
1729 (define-public python-pyicu
1730 (package
1731 (name "python-pyicu")
1732 (version "2.4.3")
1733 (source
1734 (origin
1735 (method url-fetch)
1736 (uri (pypi-uri "PyICU" version))
1737 (sha256
1738 (base32
1739 "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0"))))
1740 (build-system python-build-system)
1741 (inputs
1742 `(("icu4c" ,icu4c)))
1743 (native-inputs
1744 `(("python-pytest" ,python-pytest)
1745 ("python-six" ,python-six)))
1746 (home-page "https://github.com/ovalhub/pyicu")
1747 (synopsis "Python extension wrapping the ICU C++ API")
1748 (description
1749 "PyICU is a python extension wrapping the ICU C++ API.")
1750 (license license:x11)))
1751
1752 (define-public python2-pyicu
1753 (package-with-python2 python-pyicu))
1754
1755 (define-public python-dogtail
1756 (package
1757 (name "python-dogtail")
1758 (version "0.9.11")
1759 (source (origin
1760 (method url-fetch)
1761 (uri
1762 (string-append
1763 "https://gitlab.com/dogtail/dogtail/-/raw/released/"
1764 "dogtail-" version ".tar.gz"))
1765 (sha256
1766 (base32
1767 "0sr38z7b2n12bvfd4xw4b5dnnhkn5zl3h0ymmnnzavcihfqia6l0"))))
1768 (build-system python-build-system)
1769 (arguments
1770 `(#:tests? #f ; TODO Launching dbus for the tests
1771 ; fails
1772 #:phases
1773 (modify-phases %standard-phases
1774 (replace 'check
1775 (lambda* (#:key tests? #:allow-other-keys)
1776 (when tests?
1777 (system "Xvfb :1 &")
1778 (setenv "DISPLAY" ":1")
1779 (invoke "dbus-run-session" "--" "nosetests" "-v" "tests/"))
1780 #t)))))
1781 (propagated-inputs
1782 `(("python-pygobject" ,python-pygobject)
1783 ("python-pycairo" ,python-pycairo)
1784 ("python-pyatspi" ,python-pyatspi)))
1785 (native-inputs
1786 `(("python-nose" ,python-nose)
1787 ("gtk+" ,gtk+)
1788 ("xvfb" ,xorg-server)
1789 ("dbus" ,dbus)
1790 ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
1791 ("gobject-introspection" ,gobject-introspection)))
1792 (home-page "https://gitlab.com/dogtail/dogtail/")
1793 (synopsis "GUI test tool and automation framework written in Python")
1794 (description
1795 "Dogtail is a GUI test tool and automation framework written in Python.
1796 It uses Accessibility (a11y) technologies to communicate with desktop
1797 applications. dogtail scripts are written in Python and executed like any
1798 other Python program.")
1799 (license license:gpl2+)))
1800
1801 (define-public python2-dogtail
1802 (package-with-python2 python-dogtail))
1803
1804 (define-public python-empy
1805 (package
1806 (name "python-empy")
1807 (version "3.3.3")
1808 (source (origin
1809 (method url-fetch)
1810 (uri (string-append "http://www.alcyone.com/software/empy/empy-"
1811 version ".tar.gz"))
1812 (sha256
1813 (base32
1814 "1mxfy5mgp473ga1pgz2nvm8ds6z4g3hdky8523z6jzvcs9ny6hcq"))))
1815 (build-system python-build-system)
1816 (arguments
1817 `(#:tests? #f)) ; python2 only
1818 (home-page "http://www.alcyone.com/software/empy/")
1819 (synopsis "Templating system for Python")
1820 (description
1821 "EmPy is a system for embedding Python expressions and statements in
1822 template text; it takes an EmPy source file, processes it, and produces
1823 output. This is accomplished via expansions, which are special signals to the
1824 EmPy system and are set off by a special prefix (by default the at sign, @@).
1825 EmPy can expand arbitrary Python expressions and statements in this way, as
1826 well as a variety of special forms. Textual data not explicitly delimited in
1827 this way is sent unaffected to the output, allowing Python to be used in
1828 effect as a markup language. Also supported are callbacks via hooks,
1829 recording and playback via diversions, and dynamic, chainable filters. The
1830 system is highly configurable via command line options and embedded
1831 commands.")
1832 (license license:lgpl2.1+)))
1833
1834 (define-public python2-empy
1835 (let ((base (package-with-python2 (strip-python2-variant python-empy))))
1836 (package
1837 (inherit base)
1838 (arguments `(,@(package-arguments base)
1839 #:tests? #t)))))
1840
1841 (define-public python2-element-tree
1842 (package
1843 (name "python2-element-tree")
1844 (version "1.2.6")
1845 (source (origin
1846 (method url-fetch)
1847 (uri (string-append
1848 "http://effbot.org/media/downloads/elementtree-"
1849 version "-20050316.tar.gz"))
1850 (sha256
1851 (base32
1852 "016bphqnlg0l4vslahhw4r0aanw95bpypy65r1i1acyb2wj5z7dj"))))
1853 (build-system python-build-system)
1854 (arguments
1855 `(#:python ,python-2 ; seems to be part of Python 3
1856 #:tests? #f)) ; no 'test' sub-command
1857 (synopsis "Toolkit for XML processing in Python")
1858 (description
1859 "ElementTree is a Python library supporting lightweight XML processing.")
1860 (home-page "https://effbot.org/zone/element-index.htm")
1861 (license (license:x11-style
1862 "http://docs.python.org/2/license.html"
1863 "Like \"CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\"."))))
1864
1865 (define-public python2-pybugz
1866 (package
1867 (name "python2-pybugz")
1868 (version "0.6.11")
1869 (source (origin
1870 (method url-fetch)
1871 (uri (string-append
1872 "http://bits.liquidx.net/projects/pybugz/pybugz-"
1873 version ".tar.gz"))
1874 (sha256
1875 (base32
1876 "17ni00p08gp5lkxlrrcnvi3x09fmajnlbz4da03qcgl9q21ym4jd"))
1877 (patches (search-patches "pybugz-stty.patch"
1878 "pybugz-encode-error.patch"))))
1879 (build-system python-build-system)
1880 (arguments
1881 `(#:python ,python-2 ; SyntaxError with Python 3
1882 #:tests? #f)) ; no 'test' sub-command
1883 (propagated-inputs
1884 `(("element-tree" ,python2-element-tree)))
1885 (synopsis "Python and command-line interface to Bugzilla")
1886 (description
1887 "PyBugz is a Python library and command-line tool to query the Bugzilla
1888 bug tracking system. It is meant as an aid to speed up interaction with the
1889 bug tracker.")
1890 (home-page "http://www.liquidx.net/pybugz/")
1891 (license license:gpl2)))
1892
1893 (define-public python2-enum
1894 (package
1895 (name "python2-enum")
1896 (version "0.4.6")
1897 (source (origin
1898 (method url-fetch)
1899 (uri (pypi-uri "enum" version))
1900 (sha256
1901 (base32
1902 "13lk3yrwj42vl30kw3c194f739nrfrdg64s6i0v2p636n4k8brsl"))))
1903 (build-system python-build-system)
1904 (arguments
1905 `(#:python ,python-2))
1906 (home-page "https://pypi.org/project/enum/")
1907 (synopsis "Robust enumerated type support in Python")
1908 (description
1909 "This provides a module for robust enumerations in Python. It has
1910 been superseded by the Python standard library and is provided only for
1911 compatibility.")
1912 ;; Choice of either license.
1913 (license (list license:gpl3+ license:psfl))))
1914
1915 (define-public python-enum34
1916 (package
1917 (name "python-enum34")
1918 (version "1.1.6")
1919 (source
1920 (origin
1921 (method url-fetch)
1922 (uri (pypi-uri "enum34" version))
1923 (sha256
1924 (base32
1925 "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))
1926 (build-system python-build-system)
1927 (home-page "https://pypi.org/project/enum34/")
1928 (synopsis "Backported Python 3.4 Enum")
1929 (description
1930 "Enum34 is the new Python stdlib enum module available in Python 3.4
1931 backported for previous versions of Python from 2.4 to 3.3.")
1932 (license license:bsd-3)))
1933
1934 (define-public python2-enum34
1935 (package-with-python2 python-enum34))
1936
1937 (define-public python-parse-type
1938 (package
1939 (name "python-parse-type")
1940 (version "0.4.2")
1941 (source
1942 (origin
1943 (method url-fetch)
1944 (uri (pypi-uri "parse_type" version))
1945 (sha256
1946 (base32
1947 "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
1948 (build-system python-build-system)
1949 (propagated-inputs
1950 `(("python-six" ,python-six)
1951 ("python-parse" ,python-parse)))
1952 (native-inputs
1953 `(("python-pytest" ,python-pytest)
1954 ("python-pytest-runner" ,python-pytest-runner)))
1955 (home-page "https://github.com/jenisys/parse_type")
1956 (synopsis "Extended parse module")
1957 (description
1958 "Parse_type extends the python parse module.")
1959 (properties
1960 `((python2-variant . ,(delay python2-parse-type))))
1961 (license license:bsd-3)))
1962
1963 (define-public python2-parse-type
1964 (let ((base (package-with-python2
1965 (strip-python2-variant python-parse-type))))
1966 (package (inherit base)
1967 (propagated-inputs
1968 `(("python2-enum34" ,python2-enum34)
1969 ,@(package-propagated-inputs base))))))
1970
1971 (define-public python-parse
1972 (package
1973 (name "python-parse")
1974 (version "1.8.4")
1975 (source
1976 (origin
1977 (method url-fetch)
1978 (uri (pypi-uri "parse" version))
1979 (sha256
1980 (base32
1981 "0f8997xr8nq2nq35iiviq8ningd1zvy59fg503xfpbi2dwhgdkf3"))))
1982 (build-system python-build-system)
1983 (arguments
1984 `(#:phases
1985 (modify-phases %standard-phases
1986 (replace 'check
1987 (lambda _ (invoke "python" "test_parse.py"))))))
1988 (home-page "https://github.com/r1chardj0n3s/parse")
1989 (synopsis "Parse strings")
1990 (description
1991 "Parse strings using a specification based on the Python @code{format()}
1992 syntax.")
1993 (license license:x11)))
1994
1995 (define-public python-polib
1996 (package
1997 (name "python-polib")
1998 (version "1.0.8")
1999 (source (origin
2000 (method url-fetch)
2001 (uri (pypi-uri "polib" version))
2002 (sha256
2003 (base32
2004 "1pq2hbm3m2q0cjdszk8mc4qa1vl3wcblh5nfyirlfnzb2pcy7zss"))))
2005 (build-system python-build-system)
2006 (home-page "https://bitbucket.org/izi/polib/wiki/Home")
2007 (synopsis "Manipulate, create and modify gettext files")
2008 (description "Polib can manipulate any gettext format (po, pot and mo)
2009 files. It can be used to create po files from scratch or to modify
2010 existing ones.")
2011 (license license:expat)))
2012
2013 (define-public python2-polib
2014 (let ((base (package-with-python2 (strip-python2-variant python-polib))))
2015 (package
2016 (inherit base)
2017 (arguments `(,@(package-arguments base)
2018 ;; Tests don't work with python2.
2019 #:tests? #f)))))
2020
2021 (define-public python-poyo
2022 (package
2023 (name "python-poyo")
2024 (version "0.5.0")
2025 (source
2026 (origin
2027 (method url-fetch)
2028 (uri (pypi-uri "poyo" version))
2029 (sha256
2030 (base32
2031 "1pflivs6j22frz0v3dqxnvc8yb8fb52g11lqr88z0i8cg2m5csg2"))))
2032 (build-system python-build-system)
2033 (home-page "https://github.com/hackebrot/poyo")
2034 (synopsis "Lightweight YAML Parser for Python")
2035 (description
2036 "This package provides a lightweight YAML Parser for Python. It supports
2037 only a chosen subset of the YAML format that is required to parse cookiecutter
2038 user configuration files. It does not have support for serializing into YAML
2039 and is not compatible with JSON.")
2040 (license license:expat)))
2041
2042 (define-public scons
2043 (package
2044 (name "scons")
2045 (version "3.0.4")
2046 (source (origin
2047 (method git-fetch)
2048 (uri (git-reference
2049 (url "https://github.com/SCons/scons.git")
2050 (commit version)))
2051 (file-name (git-file-name name version))
2052 (sha256
2053 (base32
2054 "1xy8jrwz87y589ihcld4hv7wn122sjbz914xn8h50ww77wbhk8hn"))))
2055 (build-system python-build-system)
2056 (arguments
2057 `(#:use-setuptools? #f ; still relies on distutils
2058 #:tests? #f ; no 'python setup.py test' command
2059 #:phases
2060 (modify-phases %standard-phases
2061 (add-before 'build 'bootstrap
2062 (lambda _
2063 (substitute* "src/engine/SCons/compat/__init__.py"
2064 (("sys.modules\\[new\\] = imp.load_module\\(old, \\*imp.find_module\\(old\\)\\)")
2065 "sys.modules[new] = __import__(old)"))
2066 (substitute* "src/engine/SCons/Platform/__init__.py"
2067 (("mod = imp.load_module\\(full_name, file, path, desc\\)")
2068 "mod = __import__(full_name)"))
2069 (invoke "python" "bootstrap.py" "build/scons" "DEVELOPER=guix")
2070 (chdir "build/scons")
2071 #t)))))
2072 (home-page "https://scons.org/")
2073 (synopsis "Software construction tool written in Python")
2074 (description
2075 "SCons is a software construction tool. Think of SCons as an improved,
2076 cross-platform substitute for the classic Make utility with integrated
2077 functionality similar to autoconf/automake and compiler caches such as ccache.
2078 In short, SCons is an easier, more reliable and faster way to build
2079 software.")
2080 (license license:x11)))
2081
2082 (define-public scons-python2
2083 (package
2084 (inherit (package-with-python2 scons))
2085 (name "scons-python2")))
2086
2087 (define-public python-extras
2088 (package
2089 (name "python-extras")
2090 (version "1.0.0")
2091 (source
2092 (origin
2093 (method url-fetch)
2094 (uri (pypi-uri "extras" version))
2095 (sha256
2096 (base32
2097 "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
2098 (build-system python-build-system)
2099 (arguments
2100 ;; FIXME: Circular dependency on testtools.
2101 '(#:tests? #f))
2102 (home-page "https://github.com/testing-cabal/extras")
2103 (synopsis "Useful extensions to the Python standard library")
2104 (description
2105 "Extras is a set of extensions to the Python standard library.")
2106 (license license:expat)))
2107
2108 (define-public python2-extras
2109 (package-with-python2 python-extras))
2110
2111 (define-public python-mimeparse
2112 (package
2113 (name "python-mimeparse")
2114 (version "1.6.0")
2115 (source
2116 (origin
2117 (method url-fetch)
2118 (uri (pypi-uri "python-mimeparse" version))
2119 (sha256
2120 (base32
2121 "0y2g6cl660bpz11srgqyvvm8gmywpgyx8g0xfvbiyr0af0yv1r3n"))))
2122 (build-system python-build-system)
2123 (arguments
2124 '(#:phases
2125 (modify-phases %standard-phases
2126 (replace 'check
2127 (lambda _
2128 (invoke "./mimeparse_test.py"))))))
2129 (home-page
2130 "https://github.com/dbtsai/python-mimeparse")
2131 (synopsis "Python library for parsing MIME types")
2132 (description
2133 "Mimeparse provides basic functions for parsing MIME type names and
2134 matching them against a list of media-ranges.")
2135 (license license:expat)))
2136
2137 (define-public python2-mimeparse
2138 (package-with-python2 python-mimeparse))
2139
2140 (define-public python-miniboa
2141 (package
2142 (name "python-miniboa")
2143 (version "1.0.7")
2144 (source
2145 (origin
2146 (method url-fetch)
2147 (uri (pypi-uri "miniboa" version))
2148 (sha256
2149 (base32
2150 "09jh3pn4rh7kh7jayanf8jzy6gp03791b5a193w6148cf3i6k9m3"))))
2151 (build-system python-build-system)
2152 (home-page "https://github.com/shmup/miniboa")
2153 (synopsis "Simple, single-threaded Telnet server")
2154 (description
2155 "Miniboa is a simple, asynchronous, single-threaded, poll-based Telnet
2156 server.")
2157 (license license:asl2.0)))
2158
2159 (define-public python2-miniboa
2160 (package-with-python2 python-miniboa))
2161
2162 (define-public python-pafy
2163 (package
2164 (name "python-pafy")
2165 (version "0.5.3.1")
2166 (source
2167 (origin
2168 (method url-fetch)
2169 (uri (pypi-uri "pafy" version))
2170 (sha256
2171 (base32
2172 "1a7dxi95m1043rxx1r5x3ngb66nwlq6aqcasyqqjzmmmjps4zrim"))))
2173 (build-system python-build-system)
2174 (arguments
2175 `(#:tests? #f)) ; Currently pafy can not find itself in the tests
2176 (propagated-inputs
2177 ;; Youtube-dl is a python package which is imported in the file
2178 ;; "backend_youtube_dl.py", therefore it needs to be propagated.
2179 `(("youtube-dl" ,youtube-dl)))
2180 (home-page "https://np1.github.io/pafy/")
2181 (synopsis "Retrieve YouTube content and metadata")
2182 (description
2183 "@code{pafy} is a python library to retrieve YouTube content and metadata.")
2184 (license license:lgpl3+)))
2185
2186 (define-public python2-funcsigs
2187 (package
2188 (name "python2-funcsigs")
2189 (version "1.0.2")
2190 (source (origin
2191 (method url-fetch)
2192 (uri (pypi-uri "funcsigs" version))
2193 (sha256
2194 (base32
2195 "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7"))))
2196 (build-system python-build-system)
2197 (arguments
2198 `(#:python ,python-2))
2199 (native-inputs
2200 `(("python2-unittest2" ,python2-unittest2)))
2201 (home-page "http://funcsigs.readthedocs.org")
2202 (synopsis "Python function signatures from PEP362")
2203 (description
2204 "Backport of @code{funcsigs} which was introduced in Python 3.3.")
2205 (license license:asl2.0)))
2206
2207 (define-public python2-funcsigs-bootstrap
2208 (package
2209 (inherit python2-funcsigs)
2210 (name "python2-funcsigs-bootstrap")
2211 (native-inputs `())
2212 (arguments
2213 `(#:tests? #f
2214 ,@(package-arguments python2-funcsigs)))))
2215
2216 (define-public python-py
2217 (package
2218 (name "python-py")
2219 (version "1.8.1")
2220 (source
2221 (origin
2222 (method url-fetch)
2223 (uri (pypi-uri "py" version))
2224 (sha256
2225 (base32
2226 "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy"))))
2227 (build-system python-build-system)
2228 (arguments
2229 ;; FIXME: "ImportError: 'test' module incorrectly imported from
2230 ;; '/gnu/store/...-python-pytest-mimimal-3.0.5/lib/python3.5/site-packages'.
2231 ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
2232 ;; Is this module globally installed?"
2233 '(#:tests? #f))
2234 (native-inputs
2235 `(("python-setuptools-scm" ,python-setuptools-scm)))
2236 (home-page "https://github.com/pytest-dev/py")
2237 (synopsis "Python library for parsing, I/O, instrospection, and logging")
2238 (description
2239 "Py is a Python library for file name parsing, .ini file parsing, I/O,
2240 code introspection, and logging.")
2241 (license license:expat)))
2242
2243 (define-public python2-py
2244 (package-with-python2 python-py))
2245
2246 ;; Recent versions of python-fixtures and python-testrepository need
2247 ;; python-pbr for packaging, which itself needs these two packages for
2248 ;; testing.
2249 ;; To fix this circular dependency, we use a build of python-pbr, based on the
2250 ;; same source, just without any test dependencies and with tests disabled.
2251 ;; python-pbr-minmal is then used to package python-fixtures and
2252 ;; python-testrepository.
2253 ;; Strictly speaking we currently could remove the test-requirements from the
2254 ;; normal python-pbr package (and save this package) since test are disabled
2255 ;; there anyway. But this may change in future.
2256 (define-public python-pbr-minimal
2257 (package
2258 (name "python-pbr-minimal")
2259 (version "3.0.1")
2260 (source
2261 (origin
2262 (method url-fetch)
2263 (uri (pypi-uri "pbr" version))
2264 (sha256
2265 (base32
2266 "14fs5acnalnb3h62s7q7av239j541fk0n0z0lawh4h09b1s93s6p"))))
2267 (build-system python-build-system)
2268 (arguments
2269 `(#:tests? #f))
2270 (home-page "https://docs.openstack.org/pbr/latest/")
2271 (synopsis "Minimal build of python-pbr used for bootstrapping")
2272 (description
2273 "Used only for bootstrapping python2-pbr, you should not need this.")
2274 (license license:asl2.0)))
2275
2276 (define-public python2-pbr-minimal
2277 (package-with-python2 python-pbr-minimal))
2278
2279 (define-public python-pbr
2280 (package
2281 (inherit python-pbr-minimal)
2282 (name "python-pbr")
2283 (arguments
2284 `(#:tests? #f)) ;; Most tests seem to use the Internet.
2285 (propagated-inputs
2286 `(("git" ,git))) ;; pbr actually uses the "git" binary.
2287 (native-inputs
2288 `(("python-fixtures" ,python-fixtures-bootstrap)
2289 ;; discover, coverage, hacking, subunit
2290 ("python-mock" ,python-mock)
2291 ("python-six" ,python-six)
2292 ("python-sphinx" ,python-sphinx)
2293 ("python-testrepository" ,python-testrepository-bootstrap)
2294 ("python-testresources" ,python-testresources-bootstrap)
2295 ("python-testscenarios" ,python-testscenarios-bootstrap)
2296 ("python-testtools" ,python-testtools-bootstrap)
2297 ("python-virtualenv" ,python-virtualenv)))
2298 (synopsis "Enhance the default behavior of Python’s setuptools")
2299 (description
2300 "Python Build Reasonableness (PBR) is a library that injects some useful
2301 and sensible default behaviors into your setuptools run. It will set
2302 versions, process requirements files and generate AUTHORS and ChangeLog file
2303 from git information.
2304 ")))
2305
2306 (define-public python2-pbr
2307 (package-with-python2 python-pbr))
2308
2309 (define-public python-pyrsistent
2310 (package
2311 (name "python-pyrsistent")
2312 (version "0.16.0")
2313 (home-page "https://github.com/tobgu/pyrsistent")
2314 (source (origin
2315 (method url-fetch)
2316 (uri (pypi-uri "pyrsistent" version))
2317 (sha256
2318 (base32
2319 "1lrsjgblnapfimd0alsi1as5nz2lfqv97131l7d6anbjzq2rjri8"))))
2320 (build-system python-build-system)
2321 (arguments
2322 '(#:phases (modify-phases %standard-phases
2323 ;; The package works fine with newer Pytest and Hypothesis, but
2324 ;; has pinned older versions to stay compatible with Python 2.
2325 (add-before 'check 'loosen-pytest-requirement
2326 (lambda _
2327 (substitute* "setup.py"
2328 (("pytest<5") "pytest")
2329 (("hypothesis<5") "hypothesis"))
2330 #t)))))
2331 (native-inputs
2332 `(("python-hypothesis" ,python-hypothesis)
2333 ("python-pytest" ,python-pytest)
2334 ("python-pytest-runner" ,python-pytest-runner)))
2335 (propagated-inputs
2336 `(("python-six" ,python-six)))
2337 (synopsis "Persistent data structures for Python")
2338 (description
2339 "Pyrsistent is a number of persistent collections (by some referred to as
2340 functional data structures). Persistent in the sense that they are immutable.
2341
2342 All methods on a data structure that would normally mutate it instead return a
2343 new copy of the structure containing the requested updates. The original
2344 structure is left untouched.")
2345 (license license:expat)))
2346
2347 (define-public python2-pyrsistent
2348 (package-with-python2 python-pyrsistent))
2349
2350 (define-public python-exif-read
2351 (package
2352 (name "python-exif-read")
2353 (version "2.1.2")
2354 (source (origin
2355 (method url-fetch)
2356 (uri (pypi-uri "ExifRead" version))
2357 (sha256
2358 (base32
2359 "1b90jf6m9vxh9nanhpyvqdq7hmfx5iggw1l8kq10jrs6xgr49qkr"))))
2360 (build-system python-build-system)
2361 (arguments `(#:tests? #f)) ; no tests
2362 (home-page "https://github.com/ianare/exif-py")
2363 (synopsis "Python library to extract EXIF data from image files")
2364 (description
2365 "ExifRead is a Python library to extract EXIF data from tiff and jpeg
2366 files.")
2367 (license license:bsd-3)))
2368
2369 (define-public python2-exif-read
2370 (package-with-python2 python-exif-read))
2371
2372 (define-public python-pyld
2373 (package
2374 (name "python-pyld")
2375 (version "1.0.5")
2376 (source (origin
2377 (method url-fetch)
2378 (uri (pypi-uri "PyLD" version))
2379 (sha256
2380 (base32
2381 "1ywbdbsrkg533qh8xn9ifjh2mvam6v5msrjyqq73jfpvcp89qvff"))))
2382 (build-system python-build-system)
2383 (home-page "https://github.com/digitalbazaar/pyld")
2384 (synopsis "Python implementation of the JSON-LD specification")
2385 (description
2386 "PyLD is an implementation of the JSON-LD specification.")
2387 (license license:bsd-3)))
2388
2389 (define-public python2-pyld
2390 (package-with-python2 python-pyld))
2391
2392 (define-public python-click
2393 (package
2394 (name "python-click")
2395 (version "7.0")
2396 (source
2397 (origin
2398 (method url-fetch)
2399 (uri (pypi-uri "click" version))
2400 (sha256
2401 (base32
2402 "1mzjixd4vjbjvzb6vylki9w1556a9qmdh35kzmq6cign46av952v"))))
2403 (build-system python-build-system)
2404 (arguments
2405 `(#:phases
2406 (modify-phases %standard-phases
2407 (add-after 'unpack 'fix-paths
2408 (lambda* (#:key inputs #:allow-other-keys)
2409 (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
2410 "cross-libc" "libc"))))
2411 (substitute* "click/_unicodefun.py"
2412 (("'locale'")
2413 (string-append "'" glibc "/bin/locale'"))))
2414 #t))
2415 (replace 'check
2416 (lambda _
2417 (invoke "python" "-m" "pytest"))))))
2418 (native-inputs
2419 `(("python-pytest" ,python-pytest)))
2420 (home-page "https://palletsprojects.com/p/click/")
2421 (synopsis "Command line library for Python")
2422 (description
2423 "Click is a Python package for creating command line interfaces in a
2424 composable way with as little code as necessary. Its name stands for
2425 \"Command Line Interface Creation Kit\". It's highly configurable but comes
2426 with sensible defaults out of the box.")
2427 (license license:bsd-3)))
2428
2429 (define-public python2-click
2430 (package-with-python2 python-click))
2431
2432 (define-public python-wheel
2433 (package
2434 (name "python-wheel")
2435 (version "0.33.6")
2436 (source
2437 (origin
2438 (method url-fetch)
2439 (uri (pypi-uri "wheel" version))
2440 (sha256
2441 (base32
2442 "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
2443 (build-system python-build-system)
2444 (arguments
2445 ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
2446 ;; fails to find the newly-built bdist_wheel library, even though it is
2447 ;; available on PYTHONPATH. What search path is consulted by setup.py?
2448 '(#:tests? #f))
2449 (home-page "https://bitbucket.org/pypa/wheel/")
2450 (synopsis "Format for built Python packages")
2451 (description
2452 "A wheel is a ZIP-format archive with a specially formatted filename and
2453 the @code{.whl} extension. It is designed to contain all the files for a PEP
2454 376 compatible install in a way that is very close to the on-disk format. Many
2455 packages will be properly installed with only the @code{Unpack} step and the
2456 unpacked archive preserves enough information to @code{Spread} (copy data and
2457 scripts to their final locations) at any later time. Wheel files can be
2458 installed with a newer @code{pip} or with wheel's own command line utility.")
2459 (license license:expat)))
2460
2461 (define-public python2-wheel
2462 (package-with-python2 python-wheel))
2463
2464 (define-public python-vcversioner
2465 (package
2466 (name "python-vcversioner")
2467 (version "2.16.0.0")
2468 (source
2469 (origin
2470 (method url-fetch)
2471 (uri (pypi-uri "vcversioner" version))
2472 (sha256
2473 (base32
2474 "16z10sm78jd7ca3jbkgc3q5i8a8q7y1h21q1li21yy3rlhbhrrns"))))
2475 (build-system python-build-system)
2476 (synopsis "Python library for version number discovery")
2477 (description "Vcversioner is a Python library that inspects tagging
2478 information in a variety of version control systems in order to discover
2479 version numbers.")
2480 (home-page "https://github.com/habnabit/vcversioner")
2481 (license license:isc)))
2482
2483 (define-public python2-vcversioner
2484 (package-with-python2 python-vcversioner))
2485
2486 (define-public python-jdcal
2487 (package
2488 (name "python-jdcal")
2489 (version "1.4")
2490 (source
2491 (origin
2492 (method url-fetch)
2493 (uri (pypi-uri "jdcal" version))
2494 (sha256
2495 (base32
2496 "1ja6j2xq97bsl6rv09mhdx7n0xnrsfx0mj5xqza0mxghqmkm02pa"))))
2497 (build-system python-build-system)
2498 (arguments
2499 `(#:phases (modify-phases %standard-phases
2500 (replace 'check
2501 (lambda _
2502 (invoke "pytest"))))))
2503 (native-inputs
2504 `(("python-pytest" ,python-pytest)))
2505 (home-page "https://github.com/phn/jdcal")
2506 (synopsis "Functions to convert between Julian dates Gregorian dates")
2507 (description "This Python library provides functions for converting
2508 between Julian dates and Gregorian dates.")
2509 (license license:bsd-2)))
2510
2511 (define-public python2-jdcal
2512 (package-with-python2 python-jdcal))
2513
2514 (define-public python-jsondiff
2515 (package
2516 (name "python-jsondiff")
2517 (version "1.2.0")
2518 (source
2519 (origin
2520 (method url-fetch)
2521 (uri (pypi-uri "jsondiff" version))
2522 (sha256
2523 (base32
2524 "00v3689175aqzdscrxpffm712ylp8jvcpqdg51ca22ni6721p51l"))))
2525 (build-system python-build-system)
2526 (native-inputs
2527 `(("python-nose" ,python-nose)
2528 ("python-nose-random" ,python-nose-random)))
2529 (home-page
2530 "https://github.com/fzumstein/jsondiff")
2531 (synopsis "Compare JSON and JSON-like structures in Python")
2532 (description "@code{jsondiff} is a Python library which lets you
2533 compare, diff, and patch JSON and JSON-like structures in Python.")
2534 (license license:expat)))
2535
2536 (define-public python-jsonschema
2537 (package
2538 (name "python-jsonschema")
2539 (version "3.2.0")
2540 (source (origin
2541 (method url-fetch)
2542 (uri (pypi-uri "jsonschema" version))
2543 (sha256
2544 (base32
2545 "0ykr61yiiizgvm3bzipa3l73rvj49wmrybbfwhvpgk3pscl5pa68"))))
2546 (build-system python-build-system)
2547 (arguments
2548 '(#:phases
2549 (modify-phases %standard-phases
2550 (replace 'check
2551 (lambda* (#:key inputs outputs #:allow-other-keys)
2552 (add-installed-pythonpath inputs outputs)
2553 (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH")))
2554 (invoke "trial" "jsonschema"))))))
2555 (native-inputs
2556 `(("python-setuptools_scm" ,python-setuptools-scm)
2557 ("python-twisted" ,python-twisted)))
2558 (propagated-inputs
2559 `(("python-attrs" ,python-attrs)
2560 ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8
2561 ("python-pyrsistent" ,python-pyrsistent)
2562 ("python-six" ,python-six)))
2563 (home-page "https://github.com/Julian/jsonschema")
2564 (synopsis "Implementation of JSON Schema for Python")
2565 (description
2566 "Jsonschema is an implementation of JSON Schema for Python.")
2567 (license license:expat)
2568 (properties `((python2-variant . ,(delay python2-jsonschema))))))
2569
2570 (define-public python2-jsonschema
2571 (let ((jsonschema (package-with-python2
2572 (strip-python2-variant python-jsonschema))))
2573 (package (inherit jsonschema)
2574 (propagated-inputs
2575 `(("python2-functools32" ,python2-functools32)
2576 ,@(package-propagated-inputs jsonschema))))))
2577
2578 (define-public python-schema
2579 (package
2580 (name "python-schema")
2581 (version "0.6.6")
2582 (source
2583 (origin
2584 (method url-fetch)
2585 (uri (pypi-uri "schema" version))
2586 (sha256
2587 (base32
2588 "1lw28j9w9vxyigg7vkfkvi6ic9lgjkdnfvnxdr7pklslqvzmk2vm"))))
2589 (build-system python-build-system)
2590 (native-inputs
2591 `(("python-pytest" ,python-pytest)))
2592 (home-page "https://github.com/keleshev/schema")
2593 (synopsis "Simple data validation library")
2594 (description
2595 "@code{python-schema} is a library for validating Python data
2596 structures, such as those obtained from config-files, forms, external
2597 services or command-line parsing, converted from JSON/YAML (or
2598 something else) to Python data-types.")
2599 (license license:psfl)))
2600
2601 (define-public python2-schema
2602 (package-with-python2 python-schema))
2603
2604 (define-public python-schema-0.5
2605 (package (inherit python-schema)
2606 (version "0.5.0")
2607 (source
2608 (origin
2609 (method url-fetch)
2610 (uri (pypi-uri "schema" version))
2611 (sha256
2612 (base32
2613 "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s"))))))
2614
2615 (define-public python2-schema-0.5
2616 (package-with-python2 python-schema-0.5))
2617
2618 (define-public python-kitchen
2619 (package
2620 (name "python-kitchen")
2621 (version "1.2.5")
2622 (source
2623 (origin
2624 (method url-fetch)
2625 (uri (pypi-uri "kitchen" version))
2626 (sha256
2627 (base32
2628 "1zakh6l0yjvwic9p0nkvmbidpnkygkxbigh2skmb5gccyrhbp7xg"))))
2629 (build-system python-build-system)
2630 (propagated-inputs
2631 `(("python-chardet" ,python-chardet)))
2632 (home-page "https://github.com/fedora-infra/kitchen")
2633 (synopsis "Python API for snippets")
2634 (description "@code{kitchen} module provides a python API for all sorts of
2635 little useful snippets of code that everybody ends up writing for their projects
2636 but never seem big enough to build an independent release. Use kitchen and stop
2637 cutting and pasting that code over and over.")
2638 (license (list license:lgpl2.1+
2639 ;; subprocess.py, test_subprocess.py,
2640 ;; kitchen/pycompat25/defaultdict.py:
2641 license:psfl))))
2642
2643 (define-public python2-kitchen
2644 (package-with-python2 python-kitchen))
2645
2646 (define-public python-unidecode
2647 (package
2648 (name "python-unidecode")
2649 (version "1.1.1")
2650 (source (origin
2651 (method url-fetch)
2652 (uri (pypi-uri "Unidecode" version))
2653 (sha256
2654 (base32
2655 "1s6cp2lv4m0f00hjckjz8p6m7d3n3v16jvg353llf5ia1iqsnsib"))))
2656 (build-system python-build-system)
2657 (home-page "https://pypi.org/project/Unidecode/")
2658 (synopsis "ASCII transliterations of Unicode text")
2659 (description
2660 "Unidecode provides ASCII transliterations of Unicode text. Unidecode is
2661 useful when integrating with legacy code that doesn't support Unicode, or for
2662 ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
2663 machine identifiers from human-readable Unicode strings that should still be
2664 somewhat intelligible.")
2665 (license license:gpl2+)))
2666
2667 (define-public python2-unidecode
2668 (package-with-python2 python-unidecode))
2669
2670 (define-public python-text-unidecode
2671 (package
2672 (name "python-text-unidecode")
2673 (version "1.3")
2674 (source (origin
2675 (method url-fetch)
2676 (uri (pypi-uri "text-unidecode" version))
2677 (sha256
2678 (base32
2679 "14xb99fdv52j21dsljgsbmbaqv10ps4b453p229r29sdn4xn1mms"))))
2680 (build-system python-build-system)
2681 (arguments
2682 '(#:phases (modify-phases %standard-phases
2683 (replace 'check
2684 (lambda _
2685 (setenv "PYTHONPATH"
2686 (string-append "./build/lib:"
2687 (getenv "PYTHONPATH")))
2688 (invoke "pytest" "-vv"))))))
2689 (native-inputs
2690 `(("python-pytest" ,python-pytest)))
2691 (home-page "https://github.com/kmike/text-unidecode/")
2692 (synopsis "Decode Unicode data")
2693 (description
2694 "@code{text-unidecode} is a basic Python port of the @code{Text::Unidecode}
2695 Perl library. It can create ASCII representations of Unicode data. In general
2696 users should prefer the @code{python-unidecode} package which offers better
2697 memory usage and transliteration quality.")
2698 ;; The user can choose either license.
2699 (license (list license:clarified-artistic license:gpl2+))))
2700
2701 (define-public python2-text-unidecode
2702 (package-with-python2 python-text-unidecode))
2703
2704 (define-public python-pyjwt
2705 (package
2706 (name "python-pyjwt")
2707 (version "1.7.1")
2708 (source
2709 (origin
2710 (method url-fetch)
2711 (uri (pypi-uri "PyJWT" version))
2712 (sha256
2713 (base32
2714 "15hflax5qkw1v6nssk1r0wkj83jgghskcmn875m3wgvpzdvajncd"))
2715 (modules '((guix build utils)))
2716 (snippet
2717 '(begin
2718 (for-each delete-file-recursively
2719 (find-files "." "\\.pyc$"))
2720 #t))))
2721 (build-system python-build-system)
2722 (arguments
2723 '(#:phases (modify-phases %standard-phases
2724 (replace 'check
2725 (lambda _
2726 ;; Mimic upstream commit 3a20892442b34c7 to get
2727 ;; rid of dependency on pytest-runner < 5.0.
2728 ;; Remove substitution for PyJWT > 1.7.1.
2729 (substitute* "setup.py"
2730 ((".*pytest-runner.*")
2731 ""))
2732 (invoke "pytest" "-vv"))))))
2733 (native-inputs
2734 `(("python-pytest" ,python-pytest)
2735 ("python-pytest-cov" ,python-pytest-cov)))
2736 (home-page "https://github.com/progrium/pyjwt")
2737 (synopsis "JSON Web Token implementation in Python")
2738 (description
2739 "PyJWT is a JSON Web Token implementation written in Python.")
2740 (license license:expat)))
2741
2742 (define-public python2-pyjwt
2743 (package-with-python2 python-pyjwt))
2744
2745 (define-public python-pykka
2746 (package
2747 (name "python-pykka")
2748 (version "1.2.1")
2749 (source
2750 (origin
2751 (method url-fetch)
2752 (uri (pypi-uri "Pykka" version))
2753 (sha256
2754 (base32
2755 "049w3r0mdnnw7xv19jiq7rvls9k7xs73x05b4qs5d6z4vvmgyiz8"))))
2756 (build-system python-build-system)
2757 (native-inputs
2758 `(("python-mock" ,python-mock)
2759 ("python-nose" ,python-nose)
2760 ("python-gevent" ,python-gevent)
2761 ("python-eventlet" ,python-eventlet)))
2762 (home-page "https://www.pykka.org/")
2763 (synopsis "Pykka is a Python implementation of the actor model")
2764 (description
2765 "Pykka is a Python implementation of the actor model.
2766 The actor model introduces some simple rules to control the sharing
2767 of state and cooperation between execution units, which makes it
2768 easier to build concurrent applications.")
2769 (license license:asl2.0)))
2770
2771 (define-public python2-pykka
2772 (package-with-python2 python-pykka))
2773
2774 (define-public python-pymsgbox
2775 (package
2776 (name "python-pymsgbox")
2777 (version "1.0.6")
2778 (source
2779 (origin
2780 (method git-fetch)
2781 (uri (git-reference
2782 ;; LICENSE.txt is not present on pypi
2783 (url "https://github.com/asweigart/PyMsgBox")
2784 (commit "55926b55f46caa969c5ddb87990ebea2737bd66f")))
2785 (file-name (git-file-name name version))
2786 (sha256
2787 (base32
2788 "0zy7rjfpwlrd8b64j7jk2lb8m2npc21rnpwakpfvwgl4nxdy80rg"))))
2789 (arguments
2790 ;; Circular dependency to run tests:
2791 ;; Tests need pyautogui, which depends on pymsgbox.
2792 '(#:tests? #f))
2793 (build-system python-build-system)
2794 (home-page "https://github.com/asweigart/PyMsgBox")
2795 (synopsis "Python module for JavaScript-like message boxes")
2796 (description
2797 "PyMsgBox is a simple, cross-platform, pure Python module for
2798 JavaScript-like message boxes. Types of dialog boxes include:
2799 @enumerate
2800 @item alert
2801 @item confirm
2802 @item prompt
2803 @item password
2804 @end enumerate
2805 ")
2806 (license license:bsd-3)))
2807
2808 (define-public python-pympler
2809 (package
2810 (name "python-pympler")
2811 (home-page "https://pythonhosted.org/Pympler/")
2812 (version "0.8")
2813 (source (origin
2814 (method url-fetch)
2815 (uri (pypi-uri "Pympler" version))
2816 (sha256
2817 (base32
2818 "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p"))))
2819 (build-system python-build-system)
2820 (arguments
2821 `(#:phases (modify-phases %standard-phases
2822 (delete 'check)
2823 (add-after 'install 'check
2824 (lambda* (#:key inputs outputs #:allow-other-keys)
2825 (add-installed-pythonpath inputs outputs)
2826 (invoke "python" "setup.py" "test"))))))
2827 (synopsis "Measure, monitor and analyze memory behavior")
2828 (description
2829 "Pympler is a development tool to measure, monitor and analyze
2830 the memory behavior of Python objects in a running Python application.
2831
2832 By pympling a Python application, detailed insight in the size and the
2833 lifetime of Python objects can be obtained. Undesirable or unexpected
2834 runtime behavior like memory bloat and other @samp{pymples} can easily
2835 be identified.
2836
2837 A web profiling frontend exposes process statistics, garbage
2838 visualisation and class tracker statistics.")
2839 (license license:asl2.0)))
2840
2841 (define-public python2-pympler
2842 (package-with-python2 python-pympler))
2843
2844 (define-public python-itsdangerous
2845 (package
2846 (name "python-itsdangerous")
2847 (version "1.1.0")
2848 (source
2849 (origin
2850 (method url-fetch)
2851 (uri (pypi-uri "itsdangerous" version))
2852 (sha256
2853 (base32
2854 "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj"))))
2855 (build-system python-build-system)
2856 (home-page "https://palletsprojects.com/p/itsdangerous/")
2857 (synopsis "Python library for passing data to/from untrusted environments")
2858 (description
2859 "Itsdangerous provides various helpers to pass trusted data to untrusted
2860 environments and back.")
2861 (license license:bsd-3)))
2862
2863 (define-public python2-itsdangerous
2864 (package-with-python2 python-itsdangerous))
2865
2866 (define-public python-pyyaml
2867 (package
2868 (name "python-pyyaml")
2869 (version "5.3.1")
2870 (source
2871 (origin
2872 (method url-fetch)
2873 (uri (pypi-uri "PyYAML" version))
2874 (sha256
2875 (base32
2876 "0pb4zvkfxfijkpgd1b86xjsqql97ssf1knbd1v53wkg1qm9cgsmq"))))
2877 (build-system python-build-system)
2878 (inputs
2879 `(("libyaml" ,libyaml)))
2880 (home-page "https://pyyaml.org")
2881 (synopsis "YAML parser and emitter for Python")
2882 (description
2883 "PyYAML is a YAML parser and emitter for Python. PyYAML features a
2884 complete YAML 1.1 parser, Unicode support, pickle support, capable extension
2885 API, and sensible error messages. PyYAML supports standard YAML tags and
2886 provides Python-specific tags that represent an arbitrary Python object.")
2887 (license license:expat)))
2888
2889 (define-public python2-pyyaml
2890 (package-with-python2 python-pyyaml))
2891
2892 (define-public python-vine
2893 (package
2894 (name "python-vine")
2895 (version "1.1.4")
2896 (source
2897 (origin
2898 (method url-fetch)
2899 (uri (pypi-uri "vine" version))
2900 (sha256
2901 (base32
2902 "0wkskb2hb494v9gixqnf4bl972p4ibcmxdykzpwjlfa5picns4aj"))))
2903 (build-system python-build-system)
2904 (native-inputs
2905 `(("python-pytest" ,python-pytest)
2906 ("python-case" ,python-case)))
2907 (home-page "https://github.com/celery/vine")
2908 (synopsis "Promises for Python")
2909 (description
2910 "@code{vine} provides a special implementation of promises in that it can
2911 be used both for \"promise of a value\" and lazy evaluation. The biggest
2912 upside for this is that everything in a promise can also be a promise,
2913 e.g. filters, callbacks and errbacks can all be promises.")
2914 (license license:bsd-3)))
2915
2916 (define-public python-virtualenv
2917 (package
2918 (name "python-virtualenv")
2919 (version "20.0.10")
2920 (source
2921 (origin
2922 (method url-fetch)
2923 (uri (pypi-uri "virtualenv" version))
2924 (sha256
2925 (base32
2926 "0y6x41l3ja891993i4adylbbyly0r4m52n2d0a0y9y4h3lzyh4l5"))))
2927 (build-system python-build-system)
2928 (native-inputs
2929 `(("python-mock" ,python-mock)
2930 ("python-pytest" ,python-pytest)
2931 ;; NOTE: guix lint remarks that "python-setuptools should probably not
2932 ;; be an input at all". However, removing the input makes the build error:
2933 ;; File "setup.py", line 4, in <module>
2934 ;; raise RuntimeError("setuptools >= 41 required to build")
2935 ("python-setuptools" ,python-setuptools)
2936 ("python-setuptools-scm" ,python-setuptools-scm)))
2937 (propagated-inputs
2938 `(("python-appdirs" ,python-appdirs)
2939 ("python-distlib" ,python-distlib)
2940 ("python-filelock" ,python-filelock)
2941 ("python-six" ,python-six)
2942 ("python-importlib-metadata" ,python-importlib-metadata)))
2943 (home-page "https://virtualenv.pypa.io/")
2944 (synopsis "Virtual Python environment builder")
2945 (description
2946 "Virtualenv is a tool to create isolated Python environments.")
2947 (properties `((python2-variant . ,(delay python2-virtualenv))))
2948 (license license:expat)))
2949
2950 (define-public python2-virtualenv
2951 (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
2952 (package
2953 (inherit base)
2954 (arguments
2955 `(#:python ,python-2
2956 #:phases
2957 (modify-phases %standard-phases
2958 (add-after 'set-paths 'adjust-PYTHONPATH
2959 (lambda* (#:key inputs #:allow-other-keys)
2960 (let* ((python (assoc-ref inputs "python"))
2961 (python-sitedir (string-append python "/lib/python2.7"
2962 "/site-packages")))
2963 ;; XXX: 'python2' always comes first on PYTHONPATH
2964 ;; and shadows the 'setuptools' input. Move python2
2965 ;; last: this should be fixed in python-build-system
2966 ;; in a future rebuild cycle.
2967 (setenv "PYTHONPATH"
2968 (string-append (string-join (delete python-sitedir
2969 (string-split
2970 (getenv "PYTHONPATH")
2971 #\:))
2972 ":")
2973 ":" python-sitedir))
2974 (format #t "environment variable `PYTHONPATH' changed to `~a'~%"
2975 (getenv "PYTHONPATH"))
2976 #t))))))
2977 (propagated-inputs
2978 `(("python-contextlib2" ,python2-contextlib2)
2979 ,@(package-propagated-inputs base))))))
2980
2981 (define-public python-markupsafe
2982 (package
2983 (name "python-markupsafe")
2984 (version "1.1.1")
2985 (source
2986 (origin
2987 (method url-fetch)
2988 (uri (pypi-uri "MarkupSafe" version))
2989 (sha256
2990 (base32
2991 "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9"))))
2992 (build-system python-build-system)
2993 (arguments
2994 `(#:modules ((ice-9 ftw)
2995 (srfi srfi-1)
2996 (srfi srfi-26)
2997 (guix build utils)
2998 (guix build python-build-system))
2999 #:phases (modify-phases %standard-phases
3000 (replace 'check
3001 (lambda _
3002 (let ((cwd (getcwd))
3003 (libdir (find (cut string-prefix? "lib." <>)
3004 (scandir "build"))))
3005 (setenv "PYTHONPATH"
3006 (string-append cwd "/build/" libdir ":"
3007 (getenv "PYTHONPATH")))
3008 (invoke "pytest" "-vv")))))))
3009 (native-inputs
3010 `(("python-pytest" ,python-pytest)))
3011 (home-page "https://github.com/mitsuhiko/markupsafe")
3012 (synopsis "XML/HTML/XHTML markup safe string implementation for Python")
3013 (description
3014 "Markupsafe provides an XML/HTML/XHTML markup safe string implementation
3015 for Python.")
3016 (license license:bsd-3)))
3017
3018 (define-public python2-markupsafe
3019 (package-with-python2 python-markupsafe))
3020
3021 (define-public python-jinja2
3022 (package
3023 (name "python-jinja2")
3024 (version "2.11.2")
3025 (source
3026 (origin
3027 (method url-fetch)
3028 (uri (pypi-uri "Jinja2" version))
3029 (sha256
3030 (base32
3031 "1c1v3djnr0ymp5xpy1h3h60abcaqxdlm4wsqmls9rxby88av5al9"))))
3032 (build-system python-build-system)
3033 (arguments
3034 '(#:phases (modify-phases %standard-phases
3035 (replace 'check
3036 (lambda* (#:key tests? #:allow-other-keys)
3037 (if tests?
3038 (begin
3039 (setenv "PYTHONPATH"
3040 (string-append "./build/lib:"
3041 (getenv "PYTHONPATH")))
3042 (invoke "pytest" "-vv"))
3043 (format #t "test suite not run~%"))
3044 #t)))))
3045 (native-inputs
3046 `(("python-pytest" ,python-pytest)))
3047 (propagated-inputs
3048 `(("python-markupsafe" ,python-markupsafe)))
3049 (home-page "http://jinja.pocoo.org/")
3050 (synopsis "Python template engine")
3051 (description
3052 "Jinja2 is a small but fast and easy to use stand-alone template engine
3053 written in pure Python.")
3054 (license license:bsd-3)))
3055
3056 (define-public python2-jinja2
3057 (package-with-python2 python-jinja2))
3058
3059 (define-public python-jinja2-time
3060 (package
3061 (name "python-jinja2-time")
3062 (version "0.2.0")
3063 (source
3064 (origin
3065 (method url-fetch)
3066 (uri (pypi-uri "jinja2-time" version))
3067 (sha256
3068 (base32
3069 "0h0dr7cfpjnjj8bgl2vk9063a53649pn37wnlkd8hxjy656slkni"))))
3070 (build-system python-build-system)
3071 (propagated-inputs
3072 `(("python-arrow" ,python-arrow)
3073 ("python-jinja2" ,python-jinja2)))
3074 (home-page
3075 "https://github.com/hackebrot/jinja2-time")
3076 (synopsis "Jinja2 Extension for Dates and Times")
3077 (description
3078 "This package provides an extension for the template engine Jinja2. It
3079 adds a 'now' tag providing a convenient access to the arrow.now() API from
3080 templates. A format string can be provided to control the output.")
3081 (license license:expat)))
3082
3083 (define-public python-pystache
3084 (package
3085 (name "python-pystache")
3086 (version "0.5.4")
3087 (source (origin
3088 (method url-fetch)
3089 (uri (pypi-uri "pystache" version))
3090 (sha256
3091 (base32
3092 "0nmqsfmiw4arjxqkmf9z66ml950pcdjk6aq4gin4sywmzdjw5fzp"))))
3093 (build-system python-build-system)
3094 (arguments
3095 '(#:tests? #f)) ; FIXME: Python 3 tests are failing.
3096 (home-page "http://defunkt.io/pystache/")
3097 (synopsis "Python logic-less template engine")
3098 (description
3099 "Pystache is a Python implementation of the framework agnostic,
3100 logic-free templating system Mustache.")
3101 (license license:expat)
3102 (properties `((python2-variant . ,(delay python2-pystache))))))
3103
3104 (define-public python2-pystache
3105 (package (inherit (package-with-python2
3106 (strip-python2-variant python-pystache)))
3107 (arguments
3108 `(#:python ,python-2
3109 #:phases
3110 (modify-phases %standard-phases
3111 (replace 'check
3112 (lambda _
3113 (invoke "python" "test_pystache.py"))))))))
3114
3115 (define-public python-joblib
3116 (package
3117 (name "python-joblib")
3118 (version "0.14.1")
3119 (source (origin
3120 (method url-fetch)
3121 (uri (pypi-uri "joblib" version))
3122 (sha256
3123 (base32
3124 "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06"))))
3125 (build-system python-build-system)
3126 (arguments
3127 `(#:phases
3128 (modify-phases %standard-phases
3129 (replace 'check
3130 (lambda _ (invoke "pytest" "-v" "joblib"))))))
3131 (native-inputs
3132 `(("python-pytest" ,python-pytest)))
3133 (home-page "https://joblib.readthedocs.io/")
3134 (synopsis "Using Python functions as pipeline jobs")
3135 (description
3136 "Joblib is a set of tools to provide lightweight pipelining in Python.
3137 In particular, joblib offers: transparent disk-caching of the output values
3138 and lazy re-evaluation (memoize pattern), easy simple parallel computing
3139 logging and tracing of the execution.")
3140 (license license:bsd-3)))
3141
3142 (define-public python2-joblib
3143 (package-with-python2 python-joblib))
3144
3145 (define-public python-daemon
3146 (package
3147 (name "python-daemon")
3148 (version "2.2.3")
3149 (source
3150 (origin
3151 (method url-fetch)
3152 (uri (pypi-uri "python-daemon" version))
3153 (sha256
3154 (base32
3155 "09fcjdjzk9ywmpnrj62iyxqgcygzdafsz41qlrk2dknzbagcmzmg"))))
3156 (build-system python-build-system)
3157 (arguments
3158 `(#:phases
3159 (modify-phases %standard-phases
3160 (add-before 'check 'disable-tests
3161 (lambda _
3162 ;; FIXME: Determine why test fails
3163 (substitute* "test/test_daemon.py"
3164 (("test_detaches_process_context")
3165 "skip_test_detaches_process_context"))
3166 #t)))))
3167 (propagated-inputs
3168 `(("python-lockfile" ,python-lockfile)))
3169 (native-inputs
3170 `(("python-unittest2" ,python-unittest2)
3171 ("python-testtools" ,python-testtools)
3172 ("python-testscenarios" ,python-testscenarios)
3173 ("python-mock" ,python-mock)
3174 ("python-docutils" ,python-docutils)))
3175 (home-page "https://pagure.io/python-daemon/")
3176 (synopsis "Python library for making a Unix daemon process")
3177 (description "Python-daemon is a library that assists a Python program to
3178 turn itself into a well-behaved Unix daemon process, as specified in PEP 3143.
3179
3180 This library provides a @code{DaemonContext} class that manages the following
3181 important tasks for becoming a daemon process:
3182 @enumerate
3183 @item Detach the process into its own process group.
3184 @item Set process environment appropriate for running inside a chroot.
3185 @item Renounce suid and sgid privileges.
3186 @item Close all open file descriptors.
3187 @item Change the working directory, uid, gid, and umask.
3188 @item Set appropriate signal handlers.
3189 @item Open new file descriptors for stdin, stdout, and stderr.
3190 @item Manage a specified PID lock file.
3191 @item Register cleanup functions for at-exit processing.
3192 @end enumerate")
3193 ;; Only setup.py is gpl3+, everything else is apache 2.0 licensed.
3194 (license (list license:asl2.0 license:gpl3+))))
3195
3196 (define-public python-anytree
3197 (package
3198 (name "python-anytree")
3199 (version "2.8.0")
3200 (source (origin
3201 (method url-fetch)
3202 (uri (pypi-uri "anytree" version))
3203 (sha256
3204 (base32
3205 "1aycpc387wqz7h9w2p53qxn43qsh3m6by6ak4kkc66x9aprr63rz"))))
3206 (build-system python-build-system)
3207 (propagated-inputs
3208 `(("python-six" ,python-six)))
3209 (native-inputs
3210 `(;; For tests.
3211 ("graphviz" ,graphviz) ;for 'dot'
3212 ("python-nose" ,python-nose)))
3213 (home-page "https://github.com/c0fec0de/anytree")
3214 (synopsis "Lightweight tree data library")
3215 (description
3216 "@code{anytree} is a simple, lightweight, and extensible tree data
3217 structure for Python.")
3218 (license license:asl2.0)))
3219
3220 (define-public python-docutils
3221 (package
3222 (name "python-docutils")
3223 (version "0.16")
3224 (source
3225 (origin
3226 (method url-fetch)
3227 (uri (pypi-uri "docutils" version))
3228 (sha256
3229 (base32
3230 "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2"))))
3231 (build-system python-build-system)
3232 (arguments
3233 '(#:phases (modify-phases %standard-phases
3234 (replace 'check
3235 (lambda* (#:key tests? #:allow-other-keys)
3236 (if tests?
3237 (invoke "python" "test/alltests.py")
3238 (format #t "test suite not run~%"))
3239 #t)))))
3240 (home-page "http://docutils.sourceforge.net/")
3241 (synopsis "Python Documentation Utilities")
3242 (description
3243 "Docutils is a modular system for processing documentation into useful
3244 formats, such as HTML, XML, and LaTeX. For input Docutils supports
3245 reStructuredText.")
3246 ;; Most of the source code is public domain, but some source files are
3247 ;; licensed under the PFSL, BSD 2-clause, and GPLv3+ licenses.
3248 (license (list license:public-domain license:psfl license:bsd-2 license:gpl3+))))
3249
3250 (define-public python2-docutils
3251 (package-with-python2 python-docutils))
3252
3253 ;; python2-sphinx fails its test suite with newer versions.
3254 (define-public python2-docutils-0.14
3255 (package
3256 (inherit python2-docutils)
3257 (version "0.14")
3258 (source (origin
3259 (method url-fetch)
3260 (uri (pypi-uri "docutils" version))
3261 (sha256
3262 (base32
3263 "0x22fs3pdmr42kvz6c654756wja305qv6cx1zbhwlagvxgr4xrji"))))))
3264
3265 (define-public python-restructuredtext-lint
3266 (package
3267 (name "python-restructuredtext-lint")
3268 (version "1.3.0")
3269 (source
3270 (origin
3271 (method url-fetch)
3272 (uri (pypi-uri "restructuredtext-lint" version))
3273 (sha256
3274 (base32
3275 "026rdy5h82ng4vqxk8fnprii9d6qxf7hkygiv0a8afjvdlsxmcwp"))))
3276 (build-system python-build-system)
3277 (arguments
3278 `(#:phases
3279 (modify-phases %standard-phases
3280 (delete 'check)
3281 (add-after 'install 'check
3282 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3283 (when tests?
3284 (add-installed-pythonpath inputs outputs)
3285 (invoke "nosetests" "-v"))
3286 #t)))))
3287 (propagated-inputs
3288 `(("python-docutils" ,python-docutils)))
3289 (native-inputs
3290 `(("python-nose" ,python-nose)))
3291 (home-page "https://github.com/twolfson/restructuredtext-lint")
3292 (synopsis "reStructuredText linter")
3293 (description "This package provides a linter for the reStructuredText
3294 format.")
3295 (license license:unlicense)))
3296
3297 (define-public python-doc8
3298 (package
3299 (name "python-doc8")
3300 (version "0.8.0")
3301 (source
3302 (origin
3303 (method url-fetch)
3304 (uri (pypi-uri "doc8" version))
3305 (sha256
3306 (base32
3307 "0hw5w8mpgsp51qg8nnq28p7y1jiksvz7a0axnn5bkgss3af9zy1d"))))
3308 (build-system python-build-system)
3309 (arguments
3310 `(#:phases
3311 (modify-phases %standard-phases
3312 (delete 'check)
3313 (add-after 'install 'check
3314 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
3315 (when tests?
3316 (add-installed-pythonpath inputs outputs)
3317 (invoke "pytest" "-v"))
3318 #t)))))
3319 (propagated-inputs
3320 `(("python-chardet" ,python-chardet)
3321 ("python-docutils" ,python-docutils)
3322 ("python-restructuredtext-lint" ,python-restructuredtext-lint)
3323 ("python-six" ,python-six)
3324 ("python-stevedore" ,python-stevedore)))
3325 (native-inputs
3326 `(("python-testtools" ,python-testtools)
3327 ("python-pytest" ,python-pytest)))
3328 (home-page "https://launchpad.net/doc8")
3329 (synopsis
3330 "Style checker for Sphinx (or other) RST documentation")
3331 (description
3332 "Doc8 is an opinionated style checker for reStructured Text and plain
3333 text styles of documentation.")
3334 (license license:asl2.0)))
3335
3336 (define-public python-pygments
3337 (package
3338 (name "python-pygments")
3339 (version "2.5.2")
3340 (source
3341 (origin
3342 (method url-fetch)
3343 (uri (pypi-uri "Pygments" version))
3344 (sha256
3345 (base32
3346 "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q"))))
3347 (build-system python-build-system)
3348 (arguments
3349 ;; FIXME: Tests require sphinx, which depends on this.
3350 '(#:tests? #f))
3351 (home-page "https://pygments.org/")
3352 (synopsis "Syntax highlighting")
3353 (description
3354 "Pygments is a syntax highlighting package written in Python.")
3355 (license license:bsd-2)))
3356
3357 (define-public python2-pygments
3358 (package-with-python2 python-pygments))
3359
3360 (define-public python-bumpversion
3361 (package
3362 (name "python-bumpversion")
3363 (version "0.5.3")
3364 (source
3365 (origin
3366 (method url-fetch)
3367 (uri (pypi-uri "bumpversion" version))
3368 (sha256
3369 (base32
3370 "0zn7694yfipxg35ikkfh7kvgl2fissha3dnqad2c5bvsvmrwhi37"))))
3371 (build-system python-build-system)
3372 (home-page "https://github.com/peritus/bumpversion")
3373 (synopsis "Tool to bump software version")
3374 (description "This tool provides a command-line interface (CLI) to bump a
3375 software version simply.")
3376 (license license:expat)))
3377
3378 (define-public python-deprecated
3379 (package
3380 (name "python-deprecated")
3381 (version "1.2.5")
3382 (source
3383 (origin
3384 (method git-fetch)
3385 (uri (git-reference
3386 (url "https://github.com/tantale/deprecated.git")
3387 (commit (string-append "v" version))))
3388 (file-name (git-file-name name version))
3389 (sha256
3390 (base32
3391 "14909glxxwwc4b9qpz2b9jdriwzi5n65ichw85xqppap5f79wcwz"))))
3392 (build-system python-build-system)
3393 (arguments
3394 `(#:phases (modify-phases %standard-phases
3395 (replace 'check
3396 (lambda _
3397 (invoke "pytest"))))))
3398 (propagated-inputs
3399 `(("python-wrapt" ,python-wrapt)))
3400 (native-inputs
3401 `(("python-bumpversion" ,python-bumpversion)
3402 ("python-pytest" ,python-pytest)
3403 ("python-pytest-cov" ,python-pytest-cov)
3404 ("python-sphinx" ,python-sphinx)
3405 ("python-tox" ,python-tox)))
3406 (home-page "https://github.com/tantale/deprecated")
3407 (synopsis "Python decorator to deprecate classes, functions or methods")
3408 (description "The @code{deprecated} decorator provides a convenient way to deprecate
3409 to deprecate classes, functions or methods.")
3410 (license license:expat)))
3411
3412 (define-public python-pygithub
3413 (package
3414 (name "python-pygithub")
3415 (version "1.43.8")
3416 (source
3417 ;; We fetch from the Git repo because there are no tests in the PyPI
3418 ;; archive.
3419 (origin
3420 (method git-fetch)
3421 (uri (git-reference
3422 (url "https://github.com/PyGithub/PyGithub.git")
3423 (commit (string-append "v" version))))
3424 (file-name (git-file-name name version))
3425 (sha256
3426 (base32 "1625v558xga5mwhl9jqmibywy5qafmg1vqrirqz6zfq1la1d22mw"))))
3427 (build-system python-build-system)
3428 (arguments
3429 `(#:phases (modify-phases %standard-phases
3430 ;; Some tests rely on the network.
3431 (add-after 'unpack 'disable-failing-tests
3432 (lambda _
3433 (substitute* "tests/Issue142.py"
3434 (("testDecodeJson") "disabled_testDecodeJson"))
3435 #t))
3436 (add-before 'check 'prepare-for-tests
3437 (lambda _
3438 (for-each (lambda (f)
3439 (chmod f #o666))
3440 (find-files "./tests"))
3441 (system* "python" "-m" "lib2to3" "-w" "-n" "tests")
3442 (setenv "PYTHONPATH"
3443 (string-append "./tests:" (getenv "PYTHONPATH")))
3444 #t)))))
3445 (propagated-inputs
3446 `(("python-deprecated" ,python-deprecated)
3447 ("python-pyjwt" ,python-pyjwt)
3448 ("python-requests" ,python-requests)))
3449 (native-inputs `(("python-httpretty" ,python-httpretty)))
3450 (home-page "https://pygithub.readthedocs.io/en/latest/")
3451 (synopsis "Python library for the GitHub API")
3452 (description "This library allows managing GitHub resources such as
3453 repositories, user profiles, and organizations in your Python applications,
3454 using version 3 of the GitHub application programming interface (API).")
3455 (license license:lgpl3+)))
3456
3457 (define-public python-rellu
3458 (package
3459 (name "python-rellu")
3460 (version "0.7")
3461 (source
3462 (origin
3463 (method url-fetch)
3464 (uri (pypi-uri "rellu" version))
3465 (sha256
3466 (base32
3467 "1w0arpj1sm7vh29nrbnca4pnp8sx42l07r17inwqcjjf9bhng66x"))))
3468 (build-system python-build-system)
3469 (propagated-inputs
3470 `(("python-invoke" ,python-invoke)
3471 ("python-pygithub" ,python-pygithub)))
3472 (home-page "https://github.com/robotframework/rellu")
3473 (synopsis "Utilities to create PyPI releases")
3474 (description "This collection of utilities contains tooling and templates
3475 to assist in creating releases on GitHub and publishing them on PyPI. It is
3476 designed to be used by Robot Framework and tools and libraries in its
3477 ecosystem, but can naturally be used also by other projects.")
3478 (license license:asl2.0)))
3479
3480 (define-public python-robotframework
3481 (package
3482 (name "python-robotframework")
3483 (version "3.1.2")
3484 ;; There are no tests in the PyPI archive.
3485 (source
3486 (origin
3487 (method git-fetch)
3488 (uri (git-reference
3489 (url "https://github.com/robotframework/robotframework.git")
3490 (commit (string-append "v" version))))
3491 (file-name (git-file-name name version))
3492 (sha256
3493 (base32 "16gnxy0qinh8fhs0qvhff5z2xh49c3cqgm0d7bfjw120df6x7fym"))
3494 (patches (search-patches
3495 "python-robotframework-honor-source-date-epoch.patch"))))
3496 (build-system python-build-system)
3497 (arguments
3498 `(#:phases (modify-phases %standard-phases
3499 (add-before 'build 'build-and-install-doc
3500 (lambda* (#:key outputs #:allow-other-keys)
3501 (let* ((doc-output (assoc-ref outputs "doc"))
3502 (doc (string-append doc-output "/share/"
3503 ,name "-" ,version "/")))
3504 (invoke "invoke" "library-docs" "all")
3505 (mkdir-p doc)
3506 (copy-recursively "doc/libraries"
3507 (string-append doc "/libraries"))
3508 #t)))
3509 (replace 'check
3510 (lambda _
3511 (invoke "python" "utest/run.py"))))))
3512 (native-inputs
3513 `(("python-invoke" ,python-invoke)
3514 ("python-rellu" ,python-rellu)
3515 ("python:tk" ,python "tk"))) ;used when building the HTML doc
3516 (outputs '("out" "doc"))
3517 (home-page "https://robotframework.org")
3518 (synopsis "Generic automation framework")
3519 (description "Robot Framework is a generic automation framework for
3520 acceptance testing, acceptance test driven development (ATDD), and robotic
3521 process automation (RPA).")
3522 (license license:asl2.0)))
3523
3524 (define-public python-robotframework-lint
3525 ;; There is no properly tagged release; the commit below seems to correspond
3526 ;; to the 0.9 stable release available from PyPI. The tests are not
3527 ;; included in the PyPI archive, so we fetch the sources from the upstream
3528 ;; Git repo.
3529 (let ((commit "e851879bab1f63e4e53b34a4dc8a67ed95102830")
3530 (revision "1"))
3531 (package
3532 (name "python-robotframework-lint")
3533 (version (git-version "0.9.0" revision commit))
3534 (source
3535 (origin
3536 (method git-fetch)
3537 (uri (git-reference
3538 (url "https://github.com/boakley/robotframework-lint.git")
3539 (commit commit)))
3540 (file-name (git-file-name name version))
3541 (sha256
3542 (base32
3543 "1p6fknqg5sb9qz5857ji4a877657vgfjm5v3zn45994parx6ml1m"))))
3544 (build-system python-build-system)
3545 (arguments
3546 `(#:phases
3547 (modify-phases %standard-phases
3548 (replace 'check
3549 (lambda _
3550 (invoke "python" "-m" "robot" "-A"
3551 "tests/conf/default.args" "tests"))))))
3552 (propagated-inputs
3553 `(("python-robotframework" ,python-robotframework)))
3554 (home-page "https://github.com/boakley/robotframework-lint/")
3555 (synopsis "Static analysis tool (linter) for Robot Framework")
3556 (description "This package provides the @code{rflint} command-line
3557 utility, a static analysis tool (linter) for Robot Framework source files.")
3558 (license license:asl2.0))))
3559
3560 (define-public python-robotframework-sshlibrary
3561 (package
3562 (name "python-robotframework-sshlibrary")
3563 (version "3.3.0")
3564 ;; There are no tests in the PyPI archive.
3565 (source
3566 (origin
3567 (method git-fetch)
3568 (uri (git-reference
3569 (url "https://github.com/robotframework/SSHLibrary.git")
3570 (commit (string-append "v" version))))
3571 (file-name (git-file-name name version))
3572 (sha256
3573 (base32
3574 "1mk6dz2jqqndbx4yji09012q6rmadnqdywi7czvj62b0s07dr3r2"))))
3575 (build-system python-build-system)
3576 (arguments
3577 `(#:phases
3578 (modify-phases %standard-phases
3579 (add-before 'build 'build-and-install-doc
3580 (lambda* (#:key outputs #:allow-other-keys)
3581 (let* ((doc-output (assoc-ref outputs "doc"))
3582 (doc (string-append doc-output "/share/"
3583 ,name "-" ,version "/")))
3584 (invoke "chmod" "-R" "+w" "docs")
3585 (invoke "invoke" "kw-docs" "project-docs")
3586 (mkdir-p doc)
3587 (for-each delete-file (find-files "docs" "\\.rst"))
3588 (copy-recursively "docs" doc)
3589 #t)))
3590 (replace 'check
3591 (lambda _
3592 ;; Some tests require an SSH server; we remove them.
3593 (delete-file "utest/test_client_api.py")
3594 (delete-file "utest/test_scp.py")
3595 (invoke "python" "utest/run.py"))))))
3596 (propagated-inputs
3597 `(("python-robotframework" ,python-robotframework)
3598 ("python-paramiko" ,python-paramiko)
3599 ("python-scp" ,python-scp)))
3600 (native-inputs
3601 `(("openssh" ,openssh)
3602 ("which" ,which)
3603 ;; To generate the documentation
3604 ("python-docutils" ,python-docutils)
3605 ("python-invoke" ,python-invoke)
3606 ("python-pygments" ,python-pygments)
3607 ("python-rellu" ,python-rellu)))
3608 (outputs '("out" "doc"))
3609 (home-page "https://github.com/robotframework/SSHLibrary")
3610 (synopsis "Robot Framework library for SSH and SFTP")
3611 (description "SSHLibrary is a Robot Framework library providing support
3612 for SSH and SFTP. It has the following main usages:
3613 @itemize @bullet
3614 @item Executing commands on the remote machine, either blocking or non-blocking.
3615 @item Writing and reading in an interactive shell.
3616 @item Transferring files and directories over SFTP.
3617 @item Ensuring that files and directories exist on the remote machine.
3618 @end itemize")
3619 (license license:asl2.0)))
3620
3621 (define-public python-rstr
3622 (package
3623 (name "python-rstr")
3624 (version "2.2.6")
3625 (source
3626 (origin
3627 (method url-fetch)
3628 (uri (pypi-uri "rstr" version))
3629 (sha256
3630 (base32
3631 "197dw8mbq0pjjz1l6h1ksi62vgn7x55d373ch74y06744qiq5sjx"))))
3632 (build-system python-build-system)
3633 (home-page
3634 "http://bitbucket.org/leapfrogdevelopment/rstr/overview")
3635 (synopsis "Generate random strings in Python")
3636 (description "This package provides a python module for generating
3637 random strings of various types. It could be useful for fuzz testing,
3638 generating dummy data, or other applications. It has no dependencies
3639 outside the standard library.")
3640 (license license:bsd-3)))
3641
3642 (define-public python-scp
3643 (package
3644 (name "python-scp")
3645 (version "0.13.2")
3646 (source
3647 (origin
3648 (method url-fetch)
3649 (uri (pypi-uri "scp" version))
3650 (sha256
3651 (base32
3652 "1crlpw9lnn58fs1c1rmh7s7s9y5gkgpgjsqlvg9qa51kq1knx7gg"))))
3653 (build-system python-build-system)
3654 (arguments
3655 '(#:tests? #f)) ;tests require an SSH server
3656 (propagated-inputs
3657 `(("python-paramiko" ,python-paramiko)))
3658 (home-page "https://github.com/jbardin/scp.py")
3659 (synopsis "SCP protocol module for Python and Paramiko")
3660 (description "The scp module extends the Paramiko library to send and
3661 receive files via the SCP1 protocol, as implemented by the OpenSSH
3662 @command{scp} program.")
3663 (license license:gpl2+)))
3664
3665 (define-public python-rst.linker
3666 (package
3667 (name "python-rst.linker")
3668 (version "1.11")
3669 (source
3670 (origin
3671 (method url-fetch)
3672 (uri (pypi-uri "rst.linker" version))
3673 (sha256
3674 (base32 "0pqsfqqx8h0pq21k8l3k62kznrgaj2ala93c64s4d9rpbr4mgkd2"))))
3675 (build-system python-build-system)
3676 (propagated-inputs
3677 `(("python-dateutil" ,python-dateutil)
3678 ("python-six" ,python-six)))
3679 (native-inputs
3680 `(("python-setuptools-scm" ,python-setuptools-scm)))
3681 ;; Test would require path.py, which would introduce a cyclic dependence.
3682 (arguments `(#:tests? #f))
3683 ;; Note: As of version 1.7 the documentation is not worth building.
3684 (home-page "https://github.com/jaraco/rst.linker")
3685 (synopsis "Sphinx plugin to add links and timestamps")
3686 (description "rst.linker automatically replaces text by a
3687 reStructuredText external reference or timestamps. It's primary purpose is to
3688 augment the changelog, but it can be used for other documents, too.")
3689 (license license:expat)))
3690
3691 (define-public python2-rst.linker
3692 (package-with-python2 python-rst.linker))
3693
3694 (define-public python-feedgenerator
3695 (package
3696 (name "python-feedgenerator")
3697 (version "1.9")
3698 (source
3699 (origin
3700 (method url-fetch)
3701 (uri (pypi-uri "feedgenerator" version))
3702 (sha256
3703 (base32
3704 "01mirwkm7xfx539hmvj7g9da1j51gw5lsx74dr0glizskjm5vq2s"))
3705 (modules '((guix build utils)))
3706 (snippet
3707 '(begin
3708 ;; Remove pre-compiled .pyc files from source.
3709 (for-each delete-file-recursively
3710 (find-files "." "__pycache__" #:directories? #t))
3711 (for-each delete-file (find-files "." "\\.pyc$"))
3712 #t))))
3713 (build-system python-build-system)
3714 (propagated-inputs
3715 `(("python-pytz" ,python-pytz)
3716 ("python-six" ,python-six)))
3717 (home-page "https://github.com/getpelican/feedgenerator")
3718 (synopsis
3719 "Standalone version of Django's Atom/RSS feed generator")
3720 (description
3721 "Feedgenerator-py3k is a standalone version of Django's feedgenerator,
3722 which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
3723 (license license:bsd-3)))
3724
3725 (define-public python2-feedgenerator
3726 (package-with-python2 python-feedgenerator))
3727
3728 (define-public python-toml
3729 (package
3730 (name "python-toml")
3731 (version "0.10.1")
3732 (source
3733 (origin
3734 (method url-fetch)
3735 (uri (pypi-uri "toml" version))
3736 (sha256
3737 (base32
3738 "03wbqm5cn685cwx2664hjdpz370njl7lf0yal8s0dkp5w4mn2swj"))))
3739 (build-system python-build-system)
3740 (arguments
3741 `(#:tests? #f)) ;no tests suite in release
3742 (home-page "https://github.com/uiri/toml")
3743 (synopsis "Library for TOML")
3744 (description
3745 "@code{toml} is a library for parsing and creating Tom's Obvious, Minimal
3746 Language (TOML) configuration files.")
3747 (license license:expat)))
3748
3749 (define-public python-jsonrpc-server
3750 (package
3751 (name "python-jsonrpc-server")
3752 (version "0.3.4")
3753 (source
3754 (origin
3755 (method url-fetch)
3756 (uri (pypi-uri "python-jsonrpc-server" version))
3757 (sha256
3758 (base32
3759 "0dzya99nbi4mw7q85vmyw1wfgbx5dpmysnvm0bwx5m4xbi4zafy7"))))
3760 (build-system python-build-system)
3761 (propagated-inputs
3762 `(("python-mock" ,python-mock)
3763 ("python-pytest" ,python-pytest)
3764 ("python-ujson" ,python-ujson-1)))
3765 (home-page
3766 "https://github.com/palantir/python-jsonrpc-server")
3767 (synopsis "JSON RPC 2.0 server library")
3768 (description
3769 "This package provides a JSON RPC 2.0 server library for Python.")
3770 (license license:expat)))
3771
3772 (define-public python-pydocstyle
3773 (package
3774 (name "python-pydocstyle")
3775 (version "3.0.0")
3776 (source
3777 (origin
3778 (method url-fetch)
3779 (uri (pypi-uri "pydocstyle" version))
3780 (sha256
3781 (base32
3782 "1m1xv9clkg9lgzyza6dnj359z04vh5g0h49nhzghv7lg81gchhap"))))
3783 (build-system python-build-system)
3784 (propagated-inputs
3785 `(("python-six" ,python-six)
3786 ("python-snowballstemmer" ,python-snowballstemmer)))
3787 (home-page
3788 "https://github.com/PyCQA/pydocstyle/")
3789 (synopsis "Python docstring style checker")
3790 (description
3791 "This package provides a style checker for the Python Language
3792 Server (PLS).")
3793 (license license:expat)))
3794
3795 (define-public python-language-server
3796 (package
3797 (name "python-language-server")
3798 (version "0.32.0")
3799 (source
3800 (origin
3801 (method url-fetch)
3802 (uri (pypi-uri "python-language-server" version))
3803 (sha256
3804 (base32
3805 "0j5swacmjps9sas1gfwg0xi84rmjhfhz20cwg3k4058d20rs20ip"))))
3806 (build-system python-build-system)
3807 (propagated-inputs
3808 `(("python-pluggy" ,python-pluggy)
3809 ("python-jsonrpc-server" ,python-jsonrpc-server)
3810 ;; Note: Remove the special versions of Jedi and Parso when updating
3811 ;; this package.
3812 ("python-jedi" ,python-jedi)
3813 ("python-yapf" ,python-yapf)
3814 ("python-pyflakes" ,python-pyflakes)
3815 ("python-pydocstyle" ,python-pydocstyle)
3816 ("python-pycodestyle" ,python-pycodestyle)
3817 ("python-mccabe" ,python-mccabe)
3818 ("python-rope" ,python-rope)
3819 ("python-autopep8" ,python-autopep8)
3820 ("python-flake8" ,python-flake8)
3821 ("python-pylint" ,python-pylint)))
3822 (home-page "https://github.com/palantir/python-language-server")
3823 (synopsis "Python implementation of the Language Server Protocol")
3824 (description
3825 "The Python Language Server (pyls) is an implementation of the Python 3
3826 language specification for the Language Server Protocol (LSP). This tool is
3827 used in text editing environments to provide a complete and integrated
3828 feature-set for programming Python effectively.")
3829 (license license:expat)))
3830
3831 (define-public python-pathspec
3832 (package
3833 (name "python-pathspec")
3834 (version "0.7.0")
3835 (source
3836 (origin
3837 (method url-fetch)
3838 (uri (pypi-uri "pathspec" version))
3839 (sha256
3840 (base32
3841 "15lvs4awlg8xzl0l4gk9y53xx4yqmqvsv44pglv39m70y85afajn"))))
3842 (build-system python-build-system)
3843 (home-page "https://github.com/cpburnz/python-path-specification")
3844 (synopsis "Utility library for gitignore style pattern matching of file paths")
3845 (description
3846 "This package provides a utility library for gitignore style pattern
3847 matching of file paths.")
3848 (license license:mpl2.0)))
3849
3850 (define-public python-black
3851 (package
3852 (name "python-black")
3853 (version "19.10b0")
3854 (source
3855 (origin
3856 (method url-fetch)
3857 (uri (pypi-uri "black" version))
3858 (sha256
3859 (base32
3860 "0f8mr0yzj78q1dx7v6ggbgfir2wv0n5z2shfbbvfdq7910xbgvf2"))))
3861 (build-system python-build-system)
3862 (arguments
3863 `(#:phases
3864 (modify-phases %standard-phases
3865 (add-after 'patch-source-shebangs 'patch-extra-shebangs
3866 (lambda _
3867 (let ((python3 (which "python3")))
3868 (substitute* '("tests/data/fmtonoff.py"
3869 "tests/data/string_prefixes.py"
3870 "tests/data/function.py"
3871 "tests/data/python37.py")
3872 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
3873 (string-append "#!" python3 (if (string? minor-version)
3874 minor-version
3875 "")))))
3876 #t))
3877 (add-after 'unpack 'disable-broken-tests
3878 (lambda _
3879 ;; These tests are supposed to be skipped when the blackd
3880 ;; dependencies are missing, but this doesn't quite work.
3881 (substitute* "tests/test_black.py"
3882 (("( *)class BlackDTestCase.*" match indent)
3883 (string-append indent "@unittest.skip(\"no blackd deps\")\n"
3884 indent "class BlackDTestCase(unittest.TestCase):\n"))
3885 (("web.Application") "False")
3886 (("@unittest_run_loop") ""))
3887
3888 ;; Patching the above file breaks the self test
3889 (substitute* "tests/test_black.py"
3890 (("( *)def test_self" match indent)
3891 (string-append indent "@unittest.skip(\"guix\")\n" match)))
3892 #t)))))
3893 (propagated-inputs
3894 `(("python-click" ,python-click)
3895 ("python-attrs" ,python-attrs)
3896 ("python-appdirs" ,python-appdirs)
3897 ("python-pathspec" ,python-pathspec)
3898 ("python-regex" ,python-regex)
3899 ("python-toml" ,python-toml)
3900 ("python-typed-ast" ,python-typed-ast)))
3901 (native-inputs
3902 `(("python-setuptools-scm" ,python-setuptools-scm)))
3903 (home-page "https://github.com/ambv/black")
3904 (synopsis "The uncompromising code formatter")
3905 (description "Black is the uncompromising Python code formatter.")
3906 (license license:expat)))
3907
3908 (define-public python-blinker
3909 (package
3910 (name "python-blinker")
3911 (version "1.4")
3912 (source
3913 (origin
3914 (method url-fetch)
3915 (uri (pypi-uri "blinker" version))
3916 (sha256
3917 (base32
3918 "1dpq0vb01p36jjwbhhd08ylvrnyvcc82yxx3mwjx6awrycjyw6j7"))))
3919 (build-system python-build-system)
3920 (home-page "https://pythonhosted.org/blinker/")
3921 (synopsis "Fast, simple object-to-object and broadcast signaling")
3922 (description
3923 "Blinker provides a fast dispatching system that allows any number of
3924 interested parties to subscribe to events, or \"signals\".")
3925 (license license:expat)))
3926
3927 (define-public python2-blinker
3928 (package-with-python2 python-blinker))
3929
3930 (define-public pelican
3931 (package
3932 (name "pelican")
3933 (version "4.2.0")
3934 (source
3935 (origin
3936 (method url-fetch)
3937 (uri (pypi-uri "pelican" version))
3938 (sha256
3939 (base32
3940 "0mp7hjyhs38ag1hyfcy882g400z0babqi72pnli46dqijfhajzmy"))))
3941 (build-system python-build-system)
3942 (propagated-inputs
3943 `(("python-blinker" ,python-blinker)
3944 ("python-dateutil" ,python-dateutil)
3945 ("python-docutils" ,python-docutils)
3946 ("python-feedgenerator" ,python-feedgenerator)
3947 ("python-jinja2" ,python-jinja2)
3948 ("python-markdown" ,python-markdown)
3949 ("python-pygments" ,python-pygments)
3950 ("python-pytz" ,python-pytz)
3951 ("python-six" ,python-six)
3952 ("python-unidecode" ,python-unidecode)))
3953 (home-page "https://getpelican.com/")
3954 (arguments
3955 `(;; XXX Requires a lot more packages to do unit tests :P
3956 #:tests? #f))
3957 (synopsis "Python-based static site publishing system")
3958 (description
3959 "Pelican is a tool to generate a static blog from reStructuredText,
3960 Markdown input files, and more. Pelican uses Jinja2 for templating
3961 and is very extensible.")
3962 (license license:agpl3+)))
3963
3964 (define-public mallard-ducktype
3965 (package
3966 (name "mallard-ducktype")
3967 (version "1.0.2")
3968 (source
3969 (origin
3970 (method git-fetch)
3971 ;; git-reference because tests are not included in pypi source tarball
3972 ;; https://issues.guix.gnu.org/issue/36755#2
3973 (uri (git-reference
3974 (url "https://github.com/projectmallard/mallard-ducktype.git")
3975 (commit version)))
3976 (file-name (git-file-name name version))
3977 (sha256
3978 (base32
3979 "1jk9bfz7g04ip78s03b0xak6d54rj4h9zpgadkziy1ji216g6y4c"))))
3980 (build-system python-build-system)
3981 (arguments
3982 '(#:phases
3983 (modify-phases %standard-phases
3984 (replace 'check
3985 (lambda _
3986 (with-directory-excursion "tests"
3987 (invoke "sh" "runtests")))))))
3988 (home-page "http://projectmallard.org")
3989 (synopsis "Convert Ducktype to Mallard documentation markup")
3990 (description
3991 "Ducktype is a lightweight syntax that can represent all the semantics
3992 of the Mallard XML documentation system. Ducktype files can be converted to
3993 Mallard using the @command{ducktype} tool. The yelp-tools package
3994 provides additional functionality on the produced Mallard documents.")
3995 (license license:expat)))
3996
3997 (define-public python-cython
3998 (package
3999 (name "python-cython")
4000 (version "0.29.17")
4001 (source
4002 (origin
4003 (method url-fetch)
4004 (uri (pypi-uri "Cython" version))
4005 (sha256
4006 (base32
4007 "1wnaz40hdw4mg5acz5gqb6bhjhn4cvfxg0xdzfy7aa6qn665hqb3"))))
4008 (build-system python-build-system)
4009 ;; we need the full python package and not just the python-wrapper
4010 ;; because we need libpython3.3m.so
4011 (inputs
4012 `(("python" ,python)))
4013 (arguments
4014 `(#:phases
4015 (modify-phases %standard-phases
4016 (add-before 'check 'set-HOME
4017 ;; some tests require access to "$HOME/.cython"
4018 (lambda _ (setenv "HOME" "/tmp") #t))
4019 (replace 'check
4020 (lambda _
4021 ;; Disable compiler optimizations to greatly reduce the running
4022 ;; time of the test suite.
4023 (setenv "CFLAGS" "-O0")
4024
4025 (invoke "python" "runtests.py" "-vv"
4026 "-j" (number->string (parallel-job-count))
4027 ;; XXX: On 32-bit architectures, running the parallel tests
4028 ;; fails on many-core systems, see
4029 ;; <https://github.com/cython/cython/issues/2807>.
4030 ,@(if (not (target-64bit?))
4031 '("-x" "run.parallel")
4032 '())))))))
4033 (home-page "https://cython.org/")
4034 (synopsis "C extensions for Python")
4035 (description "Cython is an optimising static compiler for both the Python
4036 programming language and the extended Cython programming language. It makes
4037 writing C extensions for Python as easy as Python itself.")
4038 (license license:asl2.0)
4039 (properties `((python2-variant . ,(delay python2-cython))))))
4040
4041 (define-public python2-cython
4042 (let ((base (package-with-python2 (strip-python2-variant python-cython))))
4043 (package
4044 (inherit base)
4045 (name "python2-cython")
4046 (inputs
4047 `(("python-2" ,python-2))) ;this is not automatically changed
4048 (arguments
4049 (substitute-keyword-arguments (package-arguments base)
4050 ((#:phases phases)
4051 `(modify-phases ,phases
4052 (add-before 'check 'adjust-test_embed
4053 (lambda _
4054 (substitute* "runtests.py"
4055 ;; test_embed goes great lengths to find the static libpythonX.Y.a
4056 ;; so it can give the right -L flag to GCC when embedding static
4057 ;; builds of Python. It is unaware that the Python "config"
4058 ;; directory (where the static library lives) was renamed in
4059 ;; Python 3, and falls back to sysconfig.get_config_var('LIBDIR'),
4060 ;; which works fine, because that is where the shared library is.
4061 ;;
4062 ;; It also appears to be unaware that the Makefile in Demos/embed
4063 ;; already unconditionally pass the static library location to GCC,
4064 ;; after checking sysconfig.get_config_var('LIBPL).
4065 ;;
4066 ;; The effect is that the linker is unable to resolve libexpat
4067 ;; symbols when building for Python 2, because neither the Python 2
4068 ;; shared library nor Expat is available. To fix it, we can either
4069 ;; add Expat as an input and make it visible to the linker, or just
4070 ;; prevent it from overriding the Python shared library location.
4071 ;; The end result is identical, so we take the easy route.
4072 ((" or libname not in os\\.listdir\\(libdir\\)")
4073 ""))
4074 #t)))))))))
4075
4076 ;; The RPython toolchain currently does not support Python 3.
4077 (define-public python2-rpython
4078 (package
4079 (name "python2-rpython")
4080 (version "0.2.1")
4081 (source
4082 (origin
4083 (method url-fetch)
4084 (uri (pypi-uri "rpython" version))
4085 (sha256
4086 (base32
4087 "02z9cvxf0y41dcvwnvf2zn0albhhw1drvjjbq27m6i1piw1k6fc0"))))
4088 (build-system python-build-system)
4089 (arguments `(#:python ,python-2))
4090 (native-inputs
4091 `(("python2-pytest" ,python2-pytest))) ; needed for running tests
4092 (home-page "https://rpython.readthedocs.org")
4093 (synopsis "Framework for implementing interpreters and virtual machines")
4094 (description "RPython is a translation and support framework for
4095 producing implementations of dynamic languages, emphasizing a clean separation
4096 between language specification and implementation aspects.")
4097 (license license:expat)))
4098
4099 ;; NOTE: when upgrading numpy please make sure that python-pandas and
4100 ;; python-scipy still build, as these three packages are often used together.
4101 (define-public python-numpy
4102 (package
4103 (name "python-numpy")
4104 (version "1.17.3")
4105 (source
4106 (origin
4107 (method url-fetch)
4108 (uri (string-append
4109 "https://github.com/numpy/numpy/releases/download/v"
4110 version "/numpy-" version ".tar.gz"))
4111 (sha256
4112 (base32
4113 "1ak9dmjja0q90a7fsxli51ypcwssh8c4pb6f8wkrsnf2xgdk6dy9"))))
4114 (build-system python-build-system)
4115 (inputs
4116 `(("openblas" ,openblas)
4117 ("lapack" ,lapack)))
4118 (native-inputs
4119 `(("python-cython" ,python-cython)
4120 ("python-pytest" ,python-pytest)
4121 ("gfortran" ,gfortran)))
4122 (arguments
4123 `(#:phases
4124 (modify-phases %standard-phases
4125 (add-before 'build 'configure-blas-lapack
4126 (lambda* (#:key inputs #:allow-other-keys)
4127 (call-with-output-file "site.cfg"
4128 (lambda (port)
4129 (format port
4130 "[openblas]
4131 libraries = openblas
4132 library_dirs = ~a/lib
4133 include_dirs = ~a/include
4134
4135 # backslash-n to make emacs happy
4136 \n[lapack]
4137 lapack_libs = lapack
4138 library_dirs = ~a/lib
4139 include_dirs = ~a/include
4140 "
4141 (assoc-ref inputs "openblas")
4142 (assoc-ref inputs "openblas")
4143 (assoc-ref inputs "lapack")
4144 (assoc-ref inputs "lapack"))))
4145 #t))
4146 (add-before 'build 'fix-executable-paths
4147 (lambda* (#:key inputs #:allow-other-keys)
4148 ;; Make /gnu/store/...-bash-.../bin/sh the default shell,
4149 ;; instead of /bin/sh.
4150 (substitute* "numpy/distutils/exec_command.py"
4151 (("(os.environ.get\\('SHELL', ')(/bin/sh'\\))" match match-start match-end)
4152 (string-append match-start (assoc-ref inputs "bash") match-end)))
4153 ;; Use "gcc" executable, not "cc".
4154 (substitute* "numpy/distutils/system_info.py"
4155 (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
4156 "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')"))
4157 #t))
4158 ;; Tests can only be run after the library has been installed and not
4159 ;; within the source directory.
4160 (delete 'check)
4161 (add-after 'install 'check
4162 (lambda* (#:key outputs inputs #:allow-other-keys)
4163 ;; Make installed package available for running the tests
4164 (add-installed-pythonpath inputs outputs)
4165 ;; Make sure "f2py" etc is found.
4166 (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin"
4167 ":" (getenv "PATH")))
4168 (with-directory-excursion "/tmp"
4169 (invoke "python" "-c"
4170 "import numpy; numpy.test(verbose=2)")))))))
4171 (home-page "https://numpy.org")
4172 (synopsis "Fundamental package for scientific computing with Python")
4173 (description "NumPy is the fundamental package for scientific computing
4174 with Python. It contains among other things: a powerful N-dimensional array
4175 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4176 and Fortran code, useful linear algebra, Fourier transform, and random number
4177 capabilities.")
4178 (properties `((python2-variant . ,(delay python2-numpy))))
4179 (license license:bsd-3)))
4180
4181 ;; Numpy 1.16.x are the last versions that support Python 2.
4182 (define-public python2-numpy
4183 (let ((numpy (package-with-python2
4184 (strip-python2-variant python-numpy))))
4185 (package/inherit
4186 numpy
4187 (version "1.16.5")
4188 (source (origin
4189 (method url-fetch)
4190 (uri (string-append
4191 "https://github.com/numpy/numpy/releases/download/v"
4192 version "/numpy-" version ".tar.gz"))
4193 (sha256
4194 (base32
4195 "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb")))))))
4196
4197 ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of
4198 ;; interest only for legacy code going back to NumPy's predecessor
4199 ;; Numeric.
4200 (define-public python2-numpy-1.8
4201 (package (inherit python2-numpy)
4202 (version "1.8.2")
4203 (source
4204 (origin
4205 (method git-fetch)
4206 (uri (git-reference
4207 (url "https://github.com/numpy/numpy")
4208 (commit (string-append "v" version))))
4209 (file-name (git-file-name "numpy" version))
4210 (sha256
4211 (base32
4212 "0ikgi15rsqwbkfsjjxrwh40lqyal2wvyp3923y6w6ch3dcr82sfk"))))
4213 (arguments
4214 (substitute-keyword-arguments (package-arguments python2-numpy)
4215 ((#:phases phases)
4216 `(modify-phases ,phases
4217 (replace 'configure-blas-lapack
4218 (lambda* (#:key inputs #:allow-other-keys)
4219 (call-with-output-file "site.cfg"
4220 (lambda (port)
4221 (format port
4222 "[openblas]
4223 libraries = openblas,lapack
4224 library_dirs = ~a/lib:~a/lib
4225 include_dirs = ~a/include:~a/include
4226 "
4227 (assoc-ref inputs "openblas")
4228 (assoc-ref inputs "lapack")
4229 (assoc-ref inputs "openblas")
4230 (assoc-ref inputs "lapack"))))
4231 #t))))))
4232 (native-inputs
4233 `(("python2-nose" ,python2-nose)))
4234 (description "NumPy is the fundamental package for scientific computing
4235 with Python. It contains among other things: a powerful N-dimensional array
4236 object, sophisticated (broadcasting) functions, tools for integrating C/C++
4237 and Fortran code, useful linear algebra, Fourier transform, and random number
4238 capabilities. Version 1.8 is the last one to contain the numpy.oldnumeric API
4239 that includes the compatibility layer numpy.oldnumeric with NumPy's predecessor
4240 Numeric.")
4241 (license license:bsd-3)))
4242
4243 (define-public python-munch
4244 (package
4245 (name "python-munch")
4246 (version "2.0.4")
4247 (source
4248 (origin
4249 (method url-fetch)
4250 (uri (pypi-uri "munch" version))
4251 (sha256
4252 (base32
4253 "1cmqg91xnqx8gvnh4pmp0bfl1dfcm65d5p9mg73zz8pkjhx6h80l"))))
4254 (build-system python-build-system)
4255 (home-page "https://github.com/Infinidat/munch")
4256 (synopsis "Dot-accessible dictionary")
4257 (description "Munch is a dot-accessible dictionary similar to JavaScript
4258 objects.")
4259 (license license:expat)))
4260
4261 (define-public python2-munch
4262 (package-with-python2 python-munch))
4263
4264 (define-public python-colormath
4265 (package
4266 (name "python-colormath")
4267 (version "3.0.0")
4268 (source
4269 (origin
4270 (method url-fetch)
4271 (uri (pypi-uri "colormath" version))
4272 (sha256
4273 (base32
4274 "05qjycgxp3p2f9n6lmic68sxmsyvgnnlyl4z9w7dl9s56jphaiix"))))
4275 (build-system python-build-system)
4276 (propagated-inputs
4277 `(("python-networkx" ,python-networkx)
4278 ("python-numpy" ,python-numpy)))
4279 (home-page "https://github.com/gtaylor/python-colormath")
4280 (synopsis "Color math and conversion library")
4281 (description
4282 "This is a Python library for color math and conversions.")
4283 (license license:bsd-3)))
4284
4285 (define-public python2-colormath
4286 (package-with-python2 python-colormath))
4287
4288 (define-public python-spectra
4289 (package
4290 (name "python-spectra")
4291 (version "0.0.11")
4292 (source
4293 (origin
4294 (method url-fetch)
4295 (uri (pypi-uri "spectra" version))
4296 (sha256
4297 (base32
4298 "1f322x914bhkg6r5gv1vmnir3iy0k5kih0fd2gp3rdkw32jn5cwf"))))
4299 (build-system python-build-system)
4300 (arguments
4301 `(#:phases
4302 (modify-phases %standard-phases
4303 (replace 'check
4304 (lambda _ (invoke "nosetests" "-v"))))))
4305 (propagated-inputs
4306 `(("python-colormath" ,python-colormath)))
4307 (native-inputs
4308 `(("python-nose" ,python-nose)))
4309 (home-page "https://github.com/jsvine/spectra")
4310 (synopsis "Color scales and color conversion")
4311 (description
4312 "This package provides a Python library intended to make color math,
4313 color scales, and color space conversion easy. It has support for:
4314
4315 @enumerate
4316 @item Color scales
4317 @item Color ranges
4318 @item Color blending
4319 @item Brightening/darkening colors
4320 @item Saturating/desaturating colors
4321 @item Conversion to/from multiple color spaces.
4322 @end enumerate\n")
4323 (license license:expat)))
4324
4325 (define-public python2-spectra
4326 (package-with-python2 python-spectra))
4327
4328 (define-public python-numpy-documentation
4329 (package
4330 (name "python-numpy-documentation")
4331 (version (package-version python-numpy))
4332 (source (package-source python-numpy))
4333 (build-system python-build-system)
4334 (native-inputs
4335 `(("python-matplotlib" ,python-matplotlib)
4336 ("python-numpy" ,python-numpy)
4337 ("pkg-config" ,pkg-config)
4338 ("python-sphinx" ,python-sphinx)
4339 ("python-numpydoc" ,python-numpydoc)
4340 ("texlive" ,(texlive-union (list texlive-fonts-cm-super
4341 texlive-fonts-ec
4342 texlive-generic-ifxetex
4343 texlive-generic-pdftex
4344 texlive-amsfonts
4345 texlive-latex-capt-of
4346 texlive-latex-cmap
4347 texlive-latex-environ
4348 texlive-latex-eqparbox
4349 texlive-latex-etoolbox
4350 texlive-latex-expdlist
4351 texlive-latex-fancyhdr
4352 texlive-latex-fancyvrb
4353 texlive-latex-fncychap
4354 texlive-latex-float
4355 texlive-latex-framed
4356 texlive-latex-geometry
4357 texlive-latex-graphics
4358 texlive-latex-hyperref
4359 texlive-latex-mdwtools
4360 texlive-latex-multirow
4361 texlive-latex-needspace
4362 texlive-latex-oberdiek
4363 texlive-latex-parskip
4364 texlive-latex-preview
4365 texlive-latex-tabulary
4366 texlive-latex-threeparttable
4367 texlive-latex-titlesec
4368 texlive-latex-trimspaces
4369 texlive-latex-ucs
4370 texlive-latex-upquote
4371 texlive-latex-url
4372 texlive-latex-varwidth
4373 texlive-latex-wrapfig)))
4374 ("texinfo" ,texinfo)
4375 ("perl" ,perl)
4376 ("scipy-sphinx-theme"
4377 ,(origin ; The build script expects scipy-sphinx-theme as a git submodule
4378 (method git-fetch)
4379 (uri (git-reference
4380 (url "https://github.com/scipy/scipy-sphinx-theme.git")
4381 (commit "c466764e2231ba132c09826b5b138fffa1cfcec3")))
4382 (sha256
4383 (base32
4384 "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))
4385 ,@(package-native-inputs python-numpy)))
4386 (arguments
4387 `(#:tests? #f ; we're only generating the documentation
4388 #:phases
4389 (modify-phases %standard-phases
4390 (delete 'build)
4391 (replace 'install
4392 (lambda* (#:key inputs outputs #:allow-other-keys)
4393 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4394 (doc (string-append
4395 data "/doc/" ,name "-"
4396 ,(package-version python-numpy)))
4397 (info-reader (string-append data "/info"))
4398 (html (string-append doc "/html"))
4399 (scipy-sphinx-theme "scipy-sphinx-theme")
4400 (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
4401 (pyver ,(string-append "PYVER=")))
4402
4403 ;; FIXME: this is needed to for texlive-union to generate
4404 ;; fonts, which are not found.
4405 (setenv "HOME" "/tmp")
4406
4407 (with-directory-excursion "doc"
4408 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
4409 (mkdir-p html)
4410 (invoke "make" "html" pyver)
4411 (invoke "make" "latex" "PAPER=a4" pyver)
4412 (invoke "make" "-C" "build/latex"
4413 "all-pdf" "PAPER=a4" pyver)
4414 ;; FIXME: Generation of the info file fails.
4415 ;; (invoke "make" "info" pyver)
4416 ;; (mkdir-p info)
4417 ;; (copy-file "build/texinfo/numpy.info"
4418 ;; (string-append info "/numpy.info"))
4419 (for-each (lambda (file)
4420 (copy-file (string-append "build/latex" file)
4421 (string-append doc file)))
4422 '("/numpy-ref.pdf" "/numpy-user.pdf"))
4423 (with-directory-excursion "build/html"
4424 (for-each (lambda (file)
4425 (let* ((dir (dirname file))
4426 (tgt-dir (string-append html "/" dir)))
4427 (unless (equal? "." dir)
4428 (mkdir-p tgt-dir))
4429 (install-file file html)))
4430 (find-files "." ".*")))))
4431 #t)))))
4432 (home-page (package-home-page python-numpy))
4433 (synopsis "Documentation for the python-numpy package")
4434 (description (package-description python-numpy))
4435 (license (package-license python-numpy))))
4436
4437 (define-public python2-numpy-documentation
4438 (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
4439 (package
4440 (inherit numpy-documentation)
4441 (native-inputs `(("python2-functools32" ,python2-functools32)
4442 ,@(package-native-inputs numpy-documentation))))))
4443
4444 (define-public python-pygit2
4445 (package
4446 (name "python-pygit2")
4447 (version "1.1.0")
4448 (source
4449 (origin
4450 (method url-fetch)
4451 (uri (pypi-uri "pygit2" version))
4452 (sha256
4453 (base32 "1hs0pqqzn1yjxqk86nq7p0lvsklwnlyi5xwyzr7d5nrs19dmsjbg"))))
4454 (build-system python-build-system)
4455 (arguments
4456 '(#:tests? #f)) ; tests don't run correctly in our environment
4457 (propagated-inputs
4458 `(("python-cached-property" ,python-cached-property)
4459 ("python-cffi" ,python-cffi)
4460 ("libgit2" ,libgit2)))
4461 (native-inputs
4462 `(("python-pytest" ,python-pytest)))
4463 (home-page "https://github.com/libgit2/pygit2")
4464 (synopsis "Python bindings for libgit2")
4465 (description "Pygit2 is a set of Python bindings to the libgit2 shared
4466 library, libgit2 implements Git plumbing.")
4467 ;; GPL2.0 only, with linking exception.
4468 (license license:gpl2)))
4469
4470 (define-public python-pyparsing
4471 (package
4472 (name "python-pyparsing")
4473 (version "2.4.6")
4474 (source
4475 (origin
4476 (method url-fetch)
4477 (uri (pypi-uri "pyparsing" version))
4478 (sha256
4479 (base32 "17wn5zlijc9m9zj26gy3f541y7smpj8rfhl51d025c2gm210b0sc"))))
4480 (build-system python-build-system)
4481 (outputs '("out" "doc"))
4482 (arguments
4483 `(#:tests? #f ; no test target
4484 #:phases
4485 (modify-phases %standard-phases
4486 (add-after 'install 'install-doc
4487 (lambda* (#:key outputs #:allow-other-keys)
4488 (let* ((doc (string-append (assoc-ref outputs "doc")
4489 "/share/doc/" ,name "-" ,version))
4490 (html-doc (string-append doc "/html"))
4491 (examples (string-append doc "/examples")))
4492 (mkdir-p html-doc)
4493 (mkdir-p examples)
4494 (for-each
4495 (lambda (dir tgt)
4496 (map (lambda (file)
4497 (install-file file tgt))
4498 (find-files dir ".*")))
4499 (list "docs" "htmldoc" "examples")
4500 (list doc html-doc examples))
4501 #t))))))
4502 (home-page "https://github.com/pyparsing/pyparsing")
4503 (synopsis "Python parsing class library")
4504 (description
4505 "The pyparsing module is an alternative approach to creating and
4506 executing simple grammars, vs. the traditional lex/yacc approach, or the use
4507 of regular expressions. The pyparsing module provides a library of classes
4508 that client code uses to construct the grammar directly in Python code.")
4509 (license license:expat)))
4510
4511 (define-public python2-pyparsing
4512 (package-with-python2 python-pyparsing))
4513
4514 (define-public python-numpydoc
4515 (package
4516 (name "python-numpydoc")
4517 (version "0.8.0")
4518 (source
4519 (origin
4520 (method url-fetch)
4521 (uri (pypi-uri "numpydoc" version))
4522 (sha256
4523 (base32
4524 "1zazxg3m8j4fksv3f7v7vpf4bj9qb1vj3r326am0vdip141vzx31"))))
4525 (build-system python-build-system)
4526 (propagated-inputs
4527 `(("python-sphinx" ,python-sphinx)))
4528 (native-inputs
4529 `(("python-nose" ,python-nose)))
4530 (home-page "https://pypi.org/project/numpydoc/")
4531 (synopsis
4532 "Numpy's Sphinx extensions")
4533 (description
4534 "Sphinx extension to support docstrings in Numpy format.")
4535 (license license:bsd-2)))
4536
4537 (define-public python2-numpydoc
4538 (package-with-python2 python-numpydoc))
4539
4540 (define-public python-numexpr
4541 (package
4542 (name "python-numexpr")
4543 (version "2.6.5")
4544 (source
4545 (origin
4546 (method url-fetch)
4547 (uri (pypi-uri "numexpr" version))
4548 (sha256
4549 (base32
4550 "1frnbcwmsi312154x274xl28xazr1k8vjby83fwyla2n10a81bgq"))))
4551 (build-system python-build-system)
4552 (arguments `(#:tests? #f)) ; no tests included
4553 (propagated-inputs
4554 `(("python-numpy" ,python-numpy)))
4555 (home-page "https://github.com/pydata/numexpr")
4556 (synopsis "Fast numerical expression evaluator for NumPy")
4557 (description
4558 "Numexpr is a fast numerical expression evaluator for NumPy. With it,
4559 expressions that operate on arrays are accelerated and use less memory than
4560 doing the same calculation in Python. In addition, its multi-threaded
4561 capabilities can make use of all your cores, which may accelerate
4562 computations, most specially if they are not memory-bounded (e.g. those using
4563 transcendental functions).")
4564 (license license:expat)))
4565
4566 (define-public python2-numexpr
4567 (package-with-python2 python-numexpr))
4568
4569 (define-public python-cycler
4570 (package
4571 (name "python-cycler")
4572 (version "0.10.0")
4573 (source (origin
4574 (method url-fetch)
4575 (uri (pypi-uri "cycler" version))
4576 (sha256
4577 (base32
4578 "1n69n23fak1gjxlrbhqisi2b9pv3ckrfj98llx3p53953082syyd"))))
4579 (build-system python-build-system)
4580 (arguments
4581 ;; XXX: The current version requires 'coveralls' which we don't have.
4582 ;; Enable this for the next release which uses 'python-pytest'.
4583 '(#:tests? #f))
4584 (propagated-inputs
4585 `(("python-six" ,python-six)))
4586 (home-page "http://matplotlib.org/cycler/")
4587 (synopsis "Composable keyword argument iterator")
4588 (description
4589 "When using @code{matplotlib} and plotting more than one line, it is
4590 common to want to be able to want to be able to cycle over one or more artist
4591 styles; but the plotting logic can quickly become involved.
4592 To address this and enable easy cycling over arbitrary @code{kwargs}, the
4593 @code{Cycler} class was developed.")
4594 (license license:bsd-3)))
4595
4596 (define-public python2-cycler
4597 (package-with-python2 python-cycler))
4598
4599 (define-public python-colorspacious
4600 (package
4601 (name "python-colorspacious")
4602 (version "1.1.2")
4603 (source
4604 (origin
4605 (method git-fetch)
4606 (uri (git-reference
4607 (url "https://github.com/njsmith/colorspacious.git")
4608 (commit (string-append "v" version))))
4609 (file-name (git-file-name name version))
4610 (sha256
4611 (base32 "0x7nkphr6g5ql5fvgss8l56rgiyjgh6fm8zzs73i94ci9wzlm63w"))))
4612 (build-system python-build-system)
4613 (propagated-inputs
4614 `(("python-numpy" ,python-numpy)))
4615 (native-inputs
4616 `(("python-nose" ,python-nose)))
4617 (arguments
4618 `(#:phases
4619 (modify-phases %standard-phases
4620 (replace 'check
4621 (lambda _
4622 (invoke "nosetests" "--all-modules" "-v" "colorspacious"))))))
4623 (home-page "https://github.com/njsmith/colorspacious")
4624 (synopsis "Python library for colorspace conversions")
4625 (description "@code{colorspacious} is a Python library that lets you
4626 convert between colorspaces like sRGB, XYZ, CIEL*a*b*, CIECAM02, CAM02-UCS, etc.")
4627 (license license:expat)))
4628
4629 (define-public python2-colorspacious
4630 (package-with-python2 python-colorspacious))
4631
4632 (define-public python-matplotlib
4633 (package
4634 (name "python-matplotlib")
4635 (version "3.1.2")
4636 (source
4637 (origin
4638 (method url-fetch)
4639 (uri (pypi-uri "matplotlib" version))
4640 (sha256
4641 (base32
4642 "1nmshfqh7wyg15i16hx1yiylcvzkws29ivn66n3i0wyqwcpjr3lf"))))
4643 (build-system python-build-system)
4644 (propagated-inputs ; the following packages are all needed at run time
4645 `(("python-cycler" ,python-cycler)
4646 ("python-kiwisolver" ,python-kiwisolver)
4647 ("python-pyparsing" ,python-pyparsing)
4648 ("python-pygobject" ,python-pygobject)
4649 ("gobject-introspection" ,gobject-introspection)
4650 ("python-tkinter" ,python "tk")
4651 ("python-dateutil" ,python-dateutil)
4652 ("python-numpy" ,python-numpy)
4653 ("python-pillow" ,python-pillow)
4654 ("python-pytz" ,python-pytz)
4655 ("python-six" ,python-six)
4656 ;; From version 1.4.0 'matplotlib' makes use of 'cairocffi' instead of
4657 ;; 'pycairo'. However, 'pygobject' makes use of a 'pycairo' 'context'
4658 ;; object. For this reason we need to import both libraries.
4659 ;; https://cairocffi.readthedocs.io/en/stable/cffi_api.html#converting-pycairo-wrappers-to-cairocffi
4660 ("python-pycairo" ,python-pycairo)
4661 ("python-cairocffi" ,python-cairocffi)))
4662 (inputs
4663 `(("libpng" ,libpng)
4664 ("imagemagick" ,imagemagick)
4665 ("freetype" ,freetype)
4666 ("cairo" ,cairo)
4667 ("glib" ,glib)
4668 ;; FIXME: Add backends when available.
4669 ;("python-wxpython" ,python-wxpython)
4670 ("tcl" ,tcl)
4671 ("tk" ,tk)))
4672 (native-inputs
4673 `(("pkg-config" ,pkg-config)
4674 ("python-pytest" ,python-pytest)
4675 ("python-mock" ,python-mock)
4676 ("unzip" ,unzip)
4677 ("jquery-ui"
4678 ,(origin
4679 (method url-fetch)
4680 (uri "https://jqueryui.com/resources/download/jquery-ui-1.12.1.zip")
4681 (sha256
4682 (base32
4683 "0kb21xf38diqgxcdi1z3s9ssq36pldvyqxy56hn6pcva6rs3c8zq"))))))
4684 (arguments
4685 `(#:phases
4686 (modify-phases %standard-phases
4687 ;; XXX We disable all image comparison tests because we're using a
4688 ;; newer version of FreeType than matplotlib expects. This leads to
4689 ;; minor differences throughout the tests.
4690 (add-after 'unpack 'fix-and-disable-failing-tests
4691 (lambda _
4692 (substitute* (append (find-files "lib/matplotlib/tests/"
4693 "test_.*\\.py$")
4694 (find-files "lib/mpl_toolkits/tests"
4695 "test_.*\\.py$"))
4696 (("^from matplotlib" match)
4697 (string-append "import pytest\n" match))
4698 (("( *)@image_comparison" match indent)
4699 (string-append indent
4700 "@pytest.mark.skip(reason=\"unknown minor image differences\")\n"
4701 match)))
4702 (substitute* "lib/matplotlib/tests/test_animation.py"
4703 (("/bin/sh") (which "sh")))
4704 (for-each delete-file
4705 ;; test_normal_axes, test_get_tightbbox_polar
4706 '("lib/matplotlib/tests/test_axes.py"
4707 ;; We don't use the webagg backend and this test forces it.
4708 "lib/matplotlib/tests/test_backend_webagg.py"
4709 ;; test_outward_ticks
4710 "lib/matplotlib/tests/test_tightlayout.py"
4711 ;; test_hidden_axes fails with minor extent
4712 ;; differences, possibly due to the use of a
4713 ;; different version of FreeType.
4714 "lib/matplotlib/tests/test_constrainedlayout.py"
4715 ;; Fontconfig returns no fonts.
4716 "lib/matplotlib/tests/test_font_manager.py"))
4717 #t))
4718 (add-before 'install 'install-jquery-ui
4719 (lambda* (#:key outputs inputs #:allow-other-keys)
4720 (let ((dir (string-append (assoc-ref outputs "out")
4721 "/lib/python3.7/site-packages/matplotlib/backends/web_backend/")))
4722 (mkdir-p dir)
4723 (invoke "unzip"
4724 (assoc-ref inputs "jquery-ui")
4725 "-d" dir))
4726 #t))
4727 (replace 'check
4728 (lambda* (#:key outputs inputs #:allow-other-keys)
4729 (add-installed-pythonpath inputs outputs)
4730 (invoke "python" "tests.py" "-v"
4731 "-m" "not network and not webagg")))
4732 (add-before 'build 'configure-environment
4733 (lambda* (#:key outputs inputs #:allow-other-keys)
4734 (let ((cairo (assoc-ref inputs "cairo")))
4735 ;; Setting this directory in the 'basedirlist' of 'setup.cfg'
4736 ;; has not effect.
4737 (setenv "LD_LIBRARY_PATH" (string-append cairo "/lib"))
4738 (setenv "HOME" (getcwd))
4739 (call-with-output-file "setup.cfg"
4740 (lambda (port)
4741 (format port "[directories]~%
4742 basedirlist = ~a,~a~%
4743 [packages]~%
4744 tests = True~%"
4745 (assoc-ref inputs "tcl")
4746 (assoc-ref inputs "tk")))))
4747 #t)))))
4748 (home-page "https://matplotlib.org/")
4749 (synopsis "2D plotting library for Python")
4750 (description
4751 "Matplotlib is a Python 2D plotting library which produces publication
4752 quality figures in a variety of hardcopy formats and interactive environments
4753 across platforms. Matplotlib can be used in Python scripts, the python and
4754 ipython shell, web application servers, and six graphical user interface
4755 toolkits.")
4756 (license license:psfl)
4757 (properties `((python2-variant . ,(delay python2-matplotlib))))))
4758
4759 (define-public python2-matplotlib
4760 (let ((matplotlib (package-with-python2
4761 (strip-python2-variant python-matplotlib))))
4762 (package (inherit matplotlib)
4763 (version "2.2.4")
4764 (source
4765 (origin
4766 (method url-fetch)
4767 (uri (pypi-uri "matplotlib" version))
4768 (sha256
4769 (base32
4770 "09i1gnrra1590brc1f8d5rh2zvnknmfgzp613ab0462qkrwj15h2"))))
4771 (arguments
4772 (substitute-keyword-arguments (package-arguments matplotlib)
4773 ((#:phases phases)
4774 `(modify-phases ,phases
4775 (replace 'install-jquery-ui
4776 (lambda* (#:key outputs inputs #:allow-other-keys)
4777 (let ((dir (string-append (assoc-ref outputs "out")
4778 "/lib/python2.7/site-packages/"
4779 "matplotlib/backends/web_backend/")))
4780 (mkdir-p dir)
4781 (invoke "unzip"
4782 (assoc-ref inputs "jquery-ui")
4783 "-d" dir))
4784 #t))
4785 (delete 'fix-and-disable-failing-tests)
4786 (delete 'check))))) ; These tests weren't run the the past.
4787 ;; Make sure to use special packages for Python 2 instead
4788 ;; of those automatically rewritten by package-with-python2.
4789 (propagated-inputs
4790 `(("python2-pycairo" ,python2-pycairo)
4791 ("python2-backports-functools-lru-cache"
4792 ,python2-backports-functools-lru-cache)
4793 ("python2-functools32" ,python2-functools32)
4794 ("python2-pygobject-2" ,python2-pygobject-2)
4795 ("python2-subprocess32" ,python2-subprocess32)
4796 ("python2-tkinter" ,python-2 "tk")
4797 ,@(fold alist-delete (package-propagated-inputs matplotlib)
4798 '("python-pycairo" "python-pygobject" "python-tkinter")))))))
4799
4800 (define-public python-matplotlib-documentation
4801 (package
4802 (name "python-matplotlib-documentation")
4803 (version (package-version python-matplotlib))
4804 (source (package-source python-matplotlib))
4805 (build-system python-build-system)
4806 (native-inputs
4807 `(("python-matplotlib" ,python-matplotlib)
4808 ("python-colorspacious" ,python-colorspacious)
4809 ("python-sphinx" ,python-sphinx)
4810 ("python-sphinx-copybutton" ,python-sphinx-copybutton)
4811 ("python-sphinx-gallery" ,python-sphinx-gallery)
4812 ("python-numpydoc" ,python-numpydoc)
4813 ("python-ipython" ,python-ipython)
4814 ("python-ipykernel" ,python-ipykernel)
4815 ("python-mock" ,python-mock)
4816 ("graphviz" ,graphviz)
4817 ("texlive" ,(texlive-union (list texlive-amsfonts
4818 texlive-latex-amsmath
4819 texlive-latex-enumitem
4820 texlive-latex-expdlist
4821 texlive-latex-geometry
4822 texlive-latex-preview
4823 texlive-latex-type1cm
4824 texlive-latex-ucs
4825
4826 texlive-generic-pdftex
4827
4828 texlive-fonts-ec
4829 texlive-fonts-adobe-times
4830 texlive-fonts-txfonts)))
4831 ("texinfo" ,texinfo)
4832 ,@(package-native-inputs python-matplotlib)))
4833 (arguments
4834 `(#:tests? #f ; we're only generating documentation
4835 #:phases
4836 (modify-phases %standard-phases
4837 ;; The tests in python-matplotlib are run after the install phase, so
4838 ;; we need to delete the extra phase here.
4839 (delete 'check)
4840 (replace 'build
4841 (lambda _
4842 (chdir "doc")
4843 (setenv "PYTHONPATH"
4844 (string-append (getenv "PYTHONPATH")
4845 ":" (getcwd) "/../examples/units"))
4846 (substitute* "conf.py"
4847 ;; Don't use git.
4848 (("^SHA = check_output.*")
4849 (string-append "SHA = \"" ,version "\"\n"))
4850 ;; Don't fetch intersphinx files from the Internet
4851 (("^explicit_order_folders" m)
4852 (string-append "intersphinx_mapping = {}\n" m))
4853 (("'sphinx.ext.intersphinx',") "")
4854 ;; Disable URL embedding which requires internet access.
4855 (("'https://docs.scipy.org/doc/numpy'") "None")
4856 (("'https://docs.scipy.org/doc/scipy/reference'") "None"))
4857 (invoke "make"
4858 "SPHINXBUILD=sphinx-build"
4859 "SPHINXOPTS=" ; don't abort on warnings
4860 "html" "texinfo")))
4861 (replace 'install
4862 (lambda* (#:key inputs outputs #:allow-other-keys)
4863 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
4864 (doc (string-append data "/doc/python-matplotlib-" ,version))
4865 (info (string-append data "/info"))
4866 (html (string-append doc "/html")))
4867 (mkdir-p html)
4868 (mkdir-p info)
4869 (copy-recursively "build/html" html)
4870 (symlink (string-append html "/_images")
4871 (string-append info "/matplotlib-figures"))
4872 (with-directory-excursion "build/texinfo"
4873 (substitute* "matplotlib.texi"
4874 (("@image\\{([^,]*)" all file)
4875 (string-append "@image{matplotlib-figures/" file)))
4876 (symlink (string-append html "/_images")
4877 "./matplotlib-figures")
4878 (invoke "makeinfo" "--no-split"
4879 "-o" "matplotlib.info" "matplotlib.texi"))
4880 (install-file "build/texinfo/matplotlib.info" info))
4881 #t)))))
4882 (home-page (package-home-page python-matplotlib))
4883 (synopsis "Documentation for the python-matplotlib package")
4884 (description (package-description python-matplotlib))
4885 (license (package-license python-matplotlib))))
4886
4887 (define-public python2-matplotlib-documentation
4888 (let ((parent (package-with-python2 python-matplotlib-documentation)))
4889 (package
4890 (inherit parent)
4891 (native-inputs
4892 (alist-delete "python-sphinx-copybutton"
4893 (package-native-inputs parent))))))
4894
4895 (define-public python-matplotlib-venn
4896 (package
4897 (name "python-matplotlib-venn")
4898 (version "0.11.5")
4899 (source
4900 (origin
4901 (method url-fetch)
4902 (uri (pypi-uri "matplotlib-venn" version ".zip"))
4903 (sha256
4904 (base32
4905 "13w3i1wih0mij08hrgppzg0g9z50y54rc28l6gdi1r5w45l7l0dy"))))
4906 (build-system python-build-system)
4907 (arguments '(#:tests? #f)) ; tests are not included
4908 (propagated-inputs
4909 `(("python-matplotlib" ,python-matplotlib)
4910 ("python-numpy" ,python-numpy)
4911 ("python-scipy" ,python-scipy)))
4912 (native-inputs
4913 `(("unzip" ,unzip)))
4914 (home-page "https://github.com/konstantint/matplotlib-venn")
4915 (synopsis "Plot area-proportional Venn diagrams")
4916 (description
4917 "This package provides tools for plotting area-proportional two- and
4918 three-way Venn diagrams in @code{matplotlib}.")
4919 (license license:expat)))
4920
4921 (define-public python-pysnptools
4922 (package
4923 (name "python-pysnptools")
4924 (version "0.4.11")
4925 (source
4926 (origin
4927 (method url-fetch)
4928 (uri (pypi-uri "pysnptools" version))
4929 (sha256
4930 (base32
4931 "0gxr0bjix307wvk0qh7vkafbxbzfpdmq0wlswpxyyaymy0fwcypv"))))
4932 (build-system python-build-system)
4933 (arguments
4934 `(#:tests? #f ; no test data are included
4935 #:phases
4936 (modify-phases %standard-phases
4937 (replace 'check
4938 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
4939 (if tests?
4940 (begin
4941 (add-installed-pythonpath inputs outputs)
4942 (invoke "python3" "pysnptools/test.py"))
4943 #t))))))
4944 (propagated-inputs
4945 `(("python-dill" ,python-dill)
4946 ("python-h5py" ,python-h5py)
4947 ("python-numpy" ,python-numpy)
4948 ("python-pandas" ,python-pandas)
4949 ("python-psutil" ,python-psutil)
4950 ("python-scipy" ,python-scipy)))
4951 (native-inputs
4952 `(("python-cython" ,python-cython)))
4953 (home-page "http://microsoftgenomics.github.io/PySnpTools/")
4954 (synopsis "Library for reading and manipulating genetic data")
4955 (description
4956 "PySnpTools is a library for reading and manipulating genetic data. It
4957 can, for example, efficiently read whole PLINK *.bed/bim/fam files or parts of
4958 those files. It can also efficiently manipulate ranges of integers using set
4959 operators such as union, intersection, and difference.")
4960 (license license:asl2.0)))
4961
4962 (define-public python2-pysnptools
4963 (package-with-python2 python-pysnptools))
4964
4965 (define-public python-socksipy-branch
4966 (package
4967 (name "python-socksipy-branch")
4968 (version "1.01")
4969 (source
4970 (origin
4971 (method url-fetch)
4972 (uri (pypi-uri "SocksiPy-branch" version))
4973 (sha256
4974 (base32
4975 "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
4976 (build-system python-build-system)
4977 (arguments
4978 `(#:tests? #f)) ; There are no tests
4979 (home-page "https://code.google.com/archive/p/socksipy-branch/")
4980 (synopsis "Python SOCKS module")
4981 (description
4982 "SocksiPy - A Python SOCKS client module. It provides a
4983 socket-like interface that supports connections to any TCP
4984 service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
4985 The original version was developed by Dan Haim, this is a
4986 branch created by Mario Vilas to address some open issues,
4987 as the original project seems to have been abandoned circa 2007.")
4988 (license license:bsd-3)))
4989
4990 (define-public python2-socksipy-branch
4991 (package-with-python2 python-socksipy-branch))
4992
4993 (define-public python-socksipychain
4994 (package
4995 (name "python-socksipychain")
4996 (version "2.1.2")
4997 (source
4998 (origin
4999 (method git-fetch)
5000 (uri (git-reference
5001 (url "https://github.com/pagekite/PySocksipyChain.git")
5002 (commit (string-append "v" version))))
5003 (file-name (git-file-name name version))
5004 (sha256
5005 (base32
5006 "02pp994qmiivkdx4y6az5q80l6rzy8g6d2ipvp7kns7lsxvmc2y7"))))
5007 (build-system python-build-system)
5008 (arguments
5009 `(#:tests? #f)) ; Tests try to access the network.
5010 (home-page "http://pagekite.net/wiki/Floss/PySocksipyChain/")
5011 (synopsis "Python SOCKS module with chained proxies support")
5012 (description
5013 "SocksiPyChain is a modified version of the SocksiPy SOCKS module, which
5014 adds support for arbitrary chaining of proxy servers and various modes of
5015 TLS/SSL encryption. It was developed for use in PageKite, and also includes
5016 a simple netcat replacement with chaining support.")
5017 (license license:bsd-3)))
5018
5019 (define-public python-pycodestyle
5020 (package
5021 (name "python-pycodestyle")
5022 (version "2.5.0")
5023 (source
5024 (origin
5025 (method url-fetch)
5026 (uri (pypi-uri "pycodestyle" version))
5027 (sha256
5028 (base32
5029 "0v4prb05n21bm8650v0a01k1nyqjdmkrsm3zycfxh2j5k9n962p4"))))
5030 (build-system python-build-system)
5031 (home-page "https://pycodestyle.readthedocs.io/")
5032 (synopsis "Python style guide checker")
5033 (description "@code{pycodestyle} (formerly pep8) is a tool to check
5034 Python code against some of the style conventions in
5035 @url{http://www.python.org/dev/peps/pep-0008/,PEP 8}.")
5036 (license license:expat)))
5037
5038 (define-public python2-pycodestyle
5039 (package-with-python2 python-pycodestyle))
5040
5041 (define-public python-multidict
5042 (package
5043 (name "python-multidict")
5044 (version "4.7.5")
5045 (source
5046 (origin
5047 (method url-fetch)
5048 (uri (pypi-uri "multidict" version))
5049 (sha256
5050 (base32
5051 "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf"))))
5052 (build-system python-build-system)
5053 (arguments
5054 '(#:modules ((ice-9 ftw)
5055 (srfi srfi-1)
5056 (srfi srfi-26)
5057 (guix build utils)
5058 (guix build python-build-system))
5059 #:phases (modify-phases %standard-phases
5060 (replace 'check
5061 (lambda* (#:key tests? #:allow-other-keys)
5062 (if tests?
5063 (begin
5064 (let ((libdir (find (cut string-prefix? "lib." <>)
5065 (scandir "build"))))
5066 (setenv "PYTHONPATH"
5067 (string-append "./build/" libdir ":"
5068 (getenv "PYTHONPATH")))
5069 (invoke "pytest" "-vv")))
5070 (format #t "test suite not run~%"))
5071 #t)))))
5072 (native-inputs
5073 `(("python-pytest" ,python-pytest)
5074 ("python-pytest-cov" ,python-pytest-cov)))
5075 (home-page "https://github.com/aio-libs/multidict/")
5076 (synopsis "Multidict implementation")
5077 (description "Multidict is dict-like collection of key-value pairs
5078 where key might be occurred more than once in the container.")
5079 (license license:asl2.0)))
5080
5081 (define-public python-orderedmultidict
5082 (package
5083 (name "python-orderedmultidict")
5084 (version "1.0")
5085 (source
5086 (origin
5087 (method url-fetch)
5088 (uri (pypi-uri "orderedmultidict" version))
5089 (sha256
5090 (base32
5091 "1idjbl933avgaadscrjw1np3xkvnz3phq0l8vw5qs0rqcjx9b65q"))))
5092 (build-system python-build-system)
5093 (arguments
5094 `(#:phases
5095 (modify-phases %standard-phases
5096 (add-after 'unpack 'fix-tests
5097 (lambda _
5098 ;; The package uses nosetest for running the tests.
5099 ;; Adding this initfile allows to run the test suite
5100 ;; without requiring nosetest.
5101 (with-output-to-file "tests/__init__.py" newline)
5102 #t)))))
5103 (propagated-inputs
5104 `(("python-six" ,python-six)))
5105 (native-inputs
5106 `(("python-pycodestyle" ,python-pycodestyle)))
5107 (home-page "https://github.com/gruns/orderedmultidict")
5108 (synopsis "Python Ordered Multivalue Dictionary - omdict")
5109 (description "This package contains a library for ordered multivalue
5110 dictionaries. A multivalue dictionary is a dictionary that can store
5111 multiple values for the same key. An ordered multivalue dictionary is a
5112 multivalue dictionary that retains the order of insertions and deletions.")
5113 (license license:unlicense)))
5114
5115 (define-public python2-orderedmultidict
5116 (package-with-python2 python-orderedmultidict))
5117
5118 (define-public python-autopep8
5119 (package
5120 (name "python-autopep8")
5121 (version "1.3.5")
5122 (source
5123 (origin
5124 (method url-fetch)
5125 (uri (pypi-uri "autopep8" version))
5126 (sha256
5127 (base32
5128 "192bvhzi4d0claqxgzymvv7k3qnj627742bc8sgxpzjj42pd9112"))))
5129 (build-system python-build-system)
5130 (propagated-inputs
5131 `(("python-pycodestyle" ,python-pycodestyle)))
5132 (home-page "https://github.com/hhatto/autopep8")
5133 (synopsis "Format Python code according to the PEP 8 style guide")
5134 (description
5135 "@code{autopep8} automatically formats Python code to conform to
5136 the PEP 8 style guide. It uses the pycodestyle utility to determine
5137 what parts of the code needs to be formatted. @code{autopep8} is
5138 capable of fixing most of the formatting issues that can be reported
5139 by pycodestyle.")
5140 (license (license:non-copyleft
5141 "https://github.com/hhatto/autopep8/blob/master/LICENSE"))))
5142
5143 (define-public python2-autopep8
5144 (package-with-python2 python-autopep8))
5145
5146 (define-public python-distlib
5147 (package
5148 (name "python-distlib")
5149 (version "0.3.0")
5150 (source
5151 (origin
5152 (method url-fetch)
5153 (uri (pypi-uri "distlib" version ".zip"))
5154 (sha256
5155 (base32
5156 "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if"))))
5157 (build-system python-build-system)
5158 (arguments
5159 `(#:phases
5160 (modify-phases %standard-phases
5161 (add-before 'build 'no-/bin/sh
5162 (lambda _
5163 (substitute* '("distlib/scripts.py" "tests/test_scripts.py")
5164 (("/bin/sh") (which "sh")))
5165 #t))
5166 (add-before 'check 'prepare-test-env
5167 (lambda _
5168 (setenv "HOME" "/tmp")
5169 ;; NOTE: Any value works, the variable just has to be present.
5170 (setenv "SKIP_ONLINE" "1")
5171 #t)))))
5172 (native-inputs `(("unzip" ,unzip)))
5173 (home-page "https://bitbucket.org/pypa/distlib")
5174 (synopsis "Distribution utilities")
5175 (description "Distlib is a library which implements low-level functions that
5176 relate to packaging and distribution of Python software. It is intended to be
5177 used as the basis for third-party packaging tools.")
5178 (license license:psfl)))
5179
5180 (define-public python-distutils-extra
5181 (package
5182 (name "python-distutils-extra")
5183 (version "2.38")
5184 (source
5185 (origin
5186 (method url-fetch)
5187 (uri (string-append "https://launchpad.net/python-distutils-extra/trunk/"
5188 version "/+download/python-distutils-extra-"
5189 version ".tar.gz"))
5190 (sha256
5191 (base32
5192 "0lx15kcbby9zisx33p2h5hgakgwh2bvh0ibag8z0px4j6ifhs41x"))))
5193 (build-system python-build-system)
5194 (home-page "https://launchpad.net/python-distutils-extra/")
5195 (synopsis "Enhancements to Python's distutils")
5196 (description
5197 "The python-distutils-extra module enables you to easily integrate
5198 gettext support, themed icons, and scrollkeeper-based documentation into
5199 Python's distutils.")
5200 (license license:gpl2)))
5201
5202 (define-public python2-distutils-extra
5203 (package-with-python2 python-distutils-extra))
5204
5205 (define-public python2-elib.intl
5206 (package
5207 (name "python2-elib.intl")
5208 (version "0.0.3")
5209 (source
5210 (origin
5211 ;; This project doesn't tag releases or publish tarballs, so we take
5212 ;; source from a (semi-arbitrary, i.e. latest as of now) git commit.
5213 (method git-fetch)
5214 (uri (git-reference
5215 (url "https://github.com/dieterv/elib.intl.git")
5216 (commit "d09997cfef")))
5217 (file-name (string-append name "-" version "-checkout"))
5218 (sha256
5219 (base32
5220 "0y7vzff9xgbnaay7m0va1arl6g68ncwrvbgwl7jqlclsahzzb09d"))))
5221 (build-system python-build-system)
5222 (arguments
5223 ;; incompatible with Python 3 (exception syntax)
5224 `(#:python ,python-2
5225 #:tests? #f))
5226 (home-page "https://github.com/dieterv/elib.intl")
5227 (synopsis "Enhanced internationalization for Python")
5228 (description
5229 "The elib.intl module provides enhanced internationalization (I18N)
5230 services for your Python modules and applications.")
5231 (license license:lgpl3+)))
5232
5233 (define-public python-olefile
5234 (package
5235 (name "python-olefile")
5236 (version "0.46")
5237 (source
5238 (origin
5239 (method url-fetch)
5240 (uri (string-append "https://github.com/decalage2/olefile/releases/"
5241 "download/v" version "/olefile-" version ".tar.gz"))
5242 (file-name (string-append name "-" version ".tar.gz"))
5243 (sha256
5244 (base32
5245 "1kjxh4gr651hpqkjfv89cfzr40hyvf3vjlda7mifiail83j7j07m"))))
5246 (build-system python-build-system)
5247 (home-page "https://www.decalage.info/python/olefileio")
5248 (synopsis "Read and write Microsoft OLE2 files.")
5249 (description
5250 "@code{olefile} can parse, read and write Microsoft OLE2 files (Structured
5251 Storage or Compound Document, Microsoft Office). It is an improved version of
5252 the OleFileIO module from PIL, the Python Image Library.")
5253 (license license:bsd-3)))
5254
5255 (define-public python2-olefile
5256 (package-with-python2 python-olefile))
5257
5258 (define-public python-pillow
5259 (package
5260 (name "python-pillow")
5261 (version "6.2.1")
5262 (source
5263 (origin
5264 (method url-fetch)
5265 (uri (pypi-uri "Pillow" version))
5266 (sha256
5267 (base32
5268 "1c8wkzc58f5wdh006jvmwdk3wxld1xgagcbdvj7iv17qi0m9fkmz"))))
5269 (build-system python-build-system)
5270 (native-inputs
5271 `(("python-pytest" ,python-pytest)))
5272 (inputs
5273 `(("freetype" ,freetype)
5274 ("lcms" ,lcms)
5275 ("libjpeg" ,libjpeg-turbo)
5276 ("libtiff" ,libtiff)
5277 ("libwebp" ,libwebp)
5278 ("openjpeg" ,openjpeg)
5279 ("zlib" ,zlib)))
5280 (propagated-inputs
5281 `(("python-olefile" ,python-olefile)))
5282 (arguments
5283 `(#:phases
5284 (modify-phases %standard-phases
5285 (add-after 'unpack 'patch-ldconfig
5286 (lambda _
5287 (substitute* "setup.py"
5288 (("\\['/sbin/ldconfig', '-p'\\]") "['true']"))))
5289 (replace 'check
5290 (lambda* (#:key outputs inputs tests? #:allow-other-keys)
5291 (if tests?
5292 (begin
5293 (setenv "HOME" (getcwd))
5294 ;; Make installed package available for running the tests.
5295 (add-installed-pythonpath inputs outputs)
5296 (invoke "python" "selftest.py" "--installed")
5297 (invoke "python" "-m" "pytest" "-vv"))
5298 #t))))))
5299 (home-page "https://python-pillow.org")
5300 (synopsis "Fork of the Python Imaging Library")
5301 (description
5302 "The Python Imaging Library adds image processing capabilities to your
5303 Python interpreter. This library provides extensive file format support, an
5304 efficient internal representation, and fairly powerful image processing
5305 capabilities. The core image library is designed for fast access to data
5306 stored in a few basic pixel formats. It should provide a solid foundation for
5307 a general image processing tool.")
5308 (license (license:x11-style
5309 "http://www.pythonware.com/products/pil/license.htm"
5310 "The PIL Software License"))))
5311
5312 (define-public python2-pillow
5313 (package-with-python2 python-pillow))
5314
5315 (define-public python-pycparser
5316 (package
5317 (name "python-pycparser")
5318 (version "2.20")
5319 (source
5320 (origin
5321 (method url-fetch)
5322 (uri (pypi-uri "pycparser" version))
5323 (sha256
5324 (base32
5325 "1w0m3xvlrzq4lkbvd1ngfm8mdw64r1yxy6n7djlw6qj5d0km6ird"))))
5326 (outputs '("out" "doc"))
5327 (build-system python-build-system)
5328 (native-inputs
5329 `(("pkg-config" ,pkg-config)))
5330 (arguments
5331 `(#:phases
5332 (modify-phases %standard-phases
5333 (replace 'check
5334 (lambda _
5335 (with-directory-excursion "tests"
5336 (invoke "python" "all_tests.py"))
5337 #t))
5338 (add-after 'install 'install-doc
5339 (lambda* (#:key outputs #:allow-other-keys)
5340 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5341 (doc (string-append data "/doc/" ,name "-" ,version))
5342 (examples (string-append doc "/examples")))
5343 (mkdir-p examples)
5344 (for-each (lambda (file)
5345 (copy-file (string-append "." file)
5346 (string-append doc file)))
5347 '("/README.rst" "/CHANGES" "/LICENSE"))
5348 (copy-recursively "examples" examples)
5349 #t))))))
5350 (home-page "https://github.com/eliben/pycparser")
5351 (synopsis "C parser in Python")
5352 (description
5353 "Pycparser is a complete parser of the C language, written in pure Python
5354 using the PLY parsing library. It parses C code into an AST and can serve as
5355 a front-end for C compilers or analysis tools.")
5356 (license license:bsd-3)))
5357
5358 (define-public python2-pycparser
5359 (package-with-python2 python-pycparser))
5360
5361 (define-public python-pywavelets
5362 (package
5363 (name "python-pywavelets")
5364 (version "1.0.1")
5365 (home-page "https://github.com/PyWavelets/pywt")
5366 (source (origin
5367 (method url-fetch)
5368 (uri (pypi-uri "PyWavelets" version))
5369 (sha256
5370 (base32
5371 "1p3qv2v66ghnqrb1f98wyyhp9dz71jwcd6kfpsax65sfdpiyqp1w"))))
5372 (build-system python-build-system)
5373 (arguments
5374 '(#:modules ((ice-9 ftw)
5375 (srfi srfi-1)
5376 (srfi srfi-26)
5377 (guix build utils)
5378 (guix build python-build-system))
5379 #:phases (modify-phases %standard-phases
5380 (replace 'check
5381 (lambda _
5382 (let ((cwd (getcwd))
5383 (libdir (find (cut string-prefix? "lib." <>)
5384 (scandir "build"))))
5385 (with-directory-excursion (string-append cwd "/build/" libdir)
5386 (invoke "nosetests" "-v" "."))))))))
5387 (native-inputs
5388 `(("python-matplotlib" ,python-matplotlib) ;for tests
5389 ("python-nose" ,python-nose)))
5390 (propagated-inputs
5391 `(("python-numpy" ,python-numpy)))
5392 (synopsis "Wavelet transforms in Python")
5393 (description
5394 "PyWavelets is a library for wavelet transforms in Python. Wavelets are
5395 mathematical basis functions that are localized in both time and frequency.
5396 Wavelet transforms are time-frequency transforms employing wavelets. They are
5397 similar to Fourier transforms, the difference being that Fourier transforms are
5398 localized only in frequency instead of in time and frequency.")
5399 (license license:expat)))
5400
5401 (define-public python2-pywavelets
5402 (package-with-python2 python-pywavelets))
5403
5404 (define-public python-pywinrm
5405 (package
5406 (name "python-pywinrm")
5407 (version "0.4.1")
5408 (source
5409 (origin
5410 (method url-fetch)
5411 (uri (pypi-uri "pywinrm" version))
5412 (sha256
5413 (base32
5414 "10gabhhg3rgacd5ahmi2r128z99fzbrbx6mz1nnq0dxmhmn5rpjf"))))
5415 (build-system python-build-system)
5416 (propagated-inputs
5417 `(("python-six" ,python-six)
5418 ("python-requests_ntlm" ,python-requests_ntlm)
5419 ("python-xmltodict" ,python-xmltodict)
5420 ("python-kerberos" ,python-kerberos)))
5421 (native-inputs
5422 `(("python-mock" ,python-mock)
5423 ("python-pytest" ,python-pytest)))
5424 (home-page "https://github.com/diyan/pywinrm/")
5425 (synopsis
5426 "Python library for Windows Remote Management (WinRM)")
5427 (description
5428 "pywinrm is a Python client for the Windows Remote Management (WinRM)
5429 service. It allows you to invoke commands on target Windows machines from
5430 any machine that can run Python.")
5431 (license license:expat)))
5432
5433 (define-public python-xcffib
5434 (package
5435 (name "python-xcffib")
5436 (version "0.6.0")
5437 (source
5438 (origin
5439 (method url-fetch)
5440 (uri (pypi-uri "xcffib" version))
5441 (sha256
5442 (base32
5443 "04k91yxyb3pgc5lvxmivh8w71yjrap2g57yk3s73x4rm4nvjq51n"))))
5444 (build-system python-build-system)
5445 (inputs
5446 `(("libxcb" ,libxcb)))
5447 (propagated-inputs
5448 `(("python-cffi" ,python-cffi) ; used at run time
5449 ("python-six" ,python-six)))
5450 (arguments
5451 `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
5452 #:tests? #f
5453 #:phases
5454 (modify-phases %standard-phases
5455 (add-after 'unpack 'fix-libxcb-path
5456 (lambda* (#:key inputs #:allow-other-keys)
5457 (let ((libxcb (assoc-ref inputs "libxcb")))
5458 (substitute* '("xcffib/__init__.py")
5459 (("^soname = \"") (string-append "soname = \"" libxcb "/lib/")))
5460 #t)))
5461 (add-after 'install 'install-doc
5462 (lambda* (#:key outputs #:allow-other-keys)
5463 (let ((doc (string-append (assoc-ref outputs "out") "/share"
5464 "/doc/" ,name "-" ,version)))
5465 (mkdir-p doc)
5466 (copy-file "README.md"
5467 (string-append doc "/README.md"))
5468 #t))))))
5469 (home-page "https://github.com/tych0/xcffib")
5470 (synopsis "XCB Python bindings")
5471 (description
5472 "Xcffib is a replacement for xpyb, an XCB Python bindings. It adds
5473 support for Python 3 and PyPy. It is based on cffi.")
5474 (license license:expat)))
5475
5476 (define-public python2-xcffib
5477 (package-with-python2 python-xcffib))
5478
5479 (define-public python-cairocffi
5480 (package
5481 (name "python-cairocffi")
5482 (version "0.9.0")
5483 (source
5484 (origin
5485 (method url-fetch)
5486 (uri (pypi-uri "cairocffi" version))
5487 (sha256
5488 (base32
5489 "0dq3k4zhqd8cwsf3nyjqvjqm8wkvrjn1wjf44rl3v0h8kqx6qf0m"))
5490 (patches (search-patches "python-cairocffi-dlopen-path.patch"))))
5491 (build-system python-build-system)
5492 (outputs '("out" "doc"))
5493 (inputs
5494 `(("glib" ,glib)
5495 ("gtk+" ,gtk+)
5496 ("gdk-pixbuf" ,gdk-pixbuf)
5497 ("cairo" ,cairo)
5498 ("pango" ,pango)))
5499 (native-inputs
5500 `(("pkg-config" ,pkg-config)
5501 ("python-pytest" ,python-pytest)
5502 ("python-pytest-cov" ,python-pytest-cov)
5503 ("python-pytest-runner" ,python-pytest-runner)
5504 ("python-sphinx" ,python-sphinx)
5505 ("python-docutils" ,python-docutils)))
5506 (propagated-inputs
5507 `(("python-xcffib" ,python-xcffib))) ; used at run time
5508 (arguments
5509 `(#:phases
5510 (modify-phases %standard-phases
5511 (add-after 'unpack 'patch-paths
5512 (lambda* (#:key inputs outputs #:allow-other-keys)
5513 (substitute* (find-files "." "\\.py$")
5514 (("dlopen\\(ffi, 'cairo'")
5515 (string-append "dlopen(ffi, '" (assoc-ref inputs "cairo")
5516 "/lib/libcairo.so.2'"))
5517 (("dlopen\\(ffi, 'gdk-3'")
5518 (string-append "dlopen(ffi, '" (assoc-ref inputs "gtk+")
5519 "/lib/libgtk-3.so.0'"))
5520 (("dlopen\\(ffi, 'gdk_pixbuf-2.0'")
5521 (string-append "dlopen(ffi, '" (assoc-ref inputs "gdk-pixbuf")
5522 "/lib/libgdk_pixbuf-2.0.so.0'"))
5523 (("dlopen\\(ffi, 'glib-2.0'")
5524 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5525 "/lib/libglib-2.0.so.0'"))
5526 (("dlopen\\(ffi, 'gobject-2.0'")
5527 (string-append "dlopen(ffi, '" (assoc-ref inputs "glib")
5528 "/lib/libgobject-2.0.so.0'"))
5529 (("dlopen\\(ffi, 'pangocairo-1.0'")
5530 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5531 "/lib/libpangocairo-1.0.so.0'"))
5532 (("dlopen\\(ffi, 'pango-1.0'")
5533 (string-append "dlopen(ffi, '" (assoc-ref inputs "pango")
5534 "/lib/libpango-1.0.so.0'")))
5535 #t))
5536 (add-after 'install 'install-doc
5537 (lambda* (#:key inputs outputs #:allow-other-keys)
5538 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
5539 (doc (string-append data "/doc/" ,name "-" ,version))
5540 (html (string-append doc "/html")))
5541 (setenv "LD_LIBRARY_PATH"
5542 (string-append (assoc-ref inputs "cairo") "/lib" ":"
5543 (assoc-ref inputs "gdk-pixbuf") "/lib"))
5544 (setenv "LANG" "en_US.UTF-8")
5545 (mkdir-p html)
5546 (for-each (lambda (file)
5547 (copy-file (string-append "." file)
5548 (string-append doc file)))
5549 '("/README.rst" "/CHANGES" "/LICENSE"))
5550 (system* "python" "setup.py" "build_sphinx")
5551 (copy-recursively "docs/_build/html" html)
5552 #t))))))
5553 (home-page "https://github.com/Kozea/cairocffi")
5554 (synopsis "Python bindings and object-oriented API for Cairo")
5555 (description
5556 "Cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of
5557 Python bindings and object-oriented API for cairo. Cairo is a 2D vector
5558 graphics library with support for multiple backends including image buffers,
5559 PNG, PostScript, PDF, and SVG file output.")
5560 (license license:bsd-3)))
5561
5562 (define-public python2-cairocffi
5563 (package-with-python2 python-cairocffi))
5564
5565 (define-public python-decorator
5566 (package
5567 (name "python-decorator")
5568 (version "4.3.0")
5569 (source
5570 (origin
5571 (method url-fetch)
5572 (uri (pypi-uri "decorator" version))
5573 (sha256
5574 (base32 "0308djallnh00v112y5b7nadl657ysmkp6vc8xn51d6yzc9zm7n3"))))
5575 (build-system python-build-system)
5576 (home-page "https://pypi.org/project/decorator/")
5577 (synopsis "Python module to simplify usage of decorators")
5578 (description
5579 "The aim of the decorator module is to simplify the usage of decorators
5580 for the average programmer, and to popularize decorators usage giving examples
5581 of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
5582 etc. The core of this module is a decorator factory.")
5583 (license license:expat)))
5584
5585 (define-public python2-decorator
5586 (package-with-python2 python-decorator))
5587
5588 (define-public python-drmaa
5589 (package
5590 (name "python-drmaa")
5591 (version "0.7.7")
5592 (source
5593 (origin
5594 (method url-fetch)
5595 (uri (pypi-uri "drmaa" version))
5596 (sha256
5597 (base32 "0xzqriqyvk5b8hszbavsyxd29wm3sxirm8zvvdm73rs2iq7w4hkx"))))
5598 (build-system python-build-system)
5599 ;; The test suite requires libdrmaa which is provided by the cluster
5600 ;; environment. At runtime the environment variable DRMAA_LIBRARY_PATH
5601 ;; should be set to the path of the libdrmaa library.
5602 (arguments '(#:tests? #f))
5603 (native-inputs
5604 `(("python-nose" ,python-nose)))
5605 (home-page "https://pypi.org/project/drmaa/")
5606 (synopsis "Python bindings for the DRMAA library")
5607 (description
5608 "A Python package for Distributed Resource Management (DRM) job
5609 submission and control. This package is an implementation of the DRMAA 1.0
5610 Python language binding specification.")
5611 (license license:bsd-3)))
5612
5613 (define-public python2-drmaa
5614 (package-with-python2 python-drmaa))
5615
5616 (define-public python-grako
5617 (package
5618 (name "python-grako")
5619 (version "3.99.9")
5620 (source
5621 (origin
5622 (method url-fetch)
5623 (uri
5624 (pypi-uri "grako" version ".zip"))
5625 (sha256
5626 (base32
5627 "0r63i68wcnv63rfjkasq1ah81frz61a6mzbcnaxhrkdpx84p7hzw"))))
5628 (build-system python-build-system)
5629 (arguments '(#:tests? #f)) ; Test file 'grako.ebnf' is missing from archive.
5630 (native-inputs
5631 `(("unzip" ,unzip)
5632 ("python-pytest" ,python-pytest)
5633 ("python-pytest-runner" ,python-pytest-runner)))
5634 (home-page "https://bitbucket.org/neogeny/grako")
5635 (synopsis "EBNF parser generator")
5636 (description
5637 "Grako takes a grammar in a variation of EBNF as input, and outputs a
5638 memoizing PEG/Packrat parser in Python.")
5639 (license license:bsd-3)))
5640
5641 (define-public python2-grako
5642 (package-with-python2 python-grako))
5643
5644 (define-public python-gridmap
5645 (package
5646 (name "python-gridmap")
5647 (version "0.13.0")
5648 (source
5649 (origin
5650 (method git-fetch)
5651 (uri (git-reference
5652 (url "https://github.com/pygridtools/gridmap.git")
5653 (commit (string-append "v" version))))
5654 (file-name (git-file-name name version))
5655 (sha256
5656 (base32 "1478lbwsr1w24cii2x01m2910fvh8r43ghnb78nc972a96hqiknm"))))
5657 (build-system python-build-system)
5658 (arguments
5659 '(#:tests? #f)) ; FIXME: Requires python-cherrypy.
5660 (propagated-inputs
5661 `(("python-psutil" ,python-psutil)
5662 ("python-drmaa" ,python-drmaa)
5663 ("python-pyzmq" ,python-pyzmq)))
5664 (home-page "https://github.com/pygridtools/gridmap")
5665 (synopsis "Create jobs on a cluster directly from Python")
5666 (description
5667 "Gridmap is a Python package to allow you to easily create jobs on the
5668 cluster directly from Python. You can directly map Python functions onto the
5669 cluster without needing to write any wrapper code yourself.")
5670 (license license:gpl3+)))
5671
5672 (define-public python2-gridmap
5673 (package-with-python2 python-gridmap))
5674
5675 (define-public python-honcho
5676 (package
5677 (name "python-honcho")
5678 (version "1.0.1")
5679 (source
5680 (origin
5681 (method git-fetch)
5682 (uri (git-reference
5683 (url "https://github.com/nickstenning/honcho.git")
5684 (commit (string-append "v" version))))
5685 (file-name (git-file-name name version))
5686 (sha256
5687 (base32 "11bd87474qpif20xdcn0ra1idj5k16ka51i658wfpxwc6nzsn92b"))))
5688 (build-system python-build-system)
5689 (native-inputs
5690 `(("python-pytest" ,python-pytest)
5691 ("python-mock" ,python-mock)
5692 ("python-tox" ,python-tox)
5693 ("which" ,which))) ;for tests
5694 (propagated-inputs
5695 `(("python-jinja2" ,python-jinja2)))
5696 (arguments
5697 `(#:phases
5698 (modify-phases %standard-phases
5699 (delete 'check)
5700 (add-after 'install 'check
5701 (lambda* (#:key outputs inputs #:allow-other-keys)
5702 ;; fix honcho path in testsuite
5703 (substitute* "tests/conftest.py"
5704 (("'honcho'") (string-append "'" (assoc-ref outputs "out")
5705 "/bin/honcho" "'")))
5706 ;; It's easier to run tests after install.
5707 ;; Make installed package available for running the tests
5708 (add-installed-pythonpath inputs outputs)
5709 (invoke "py.test" "-v"))))))
5710 (home-page "https://github.com/nickstenning/honcho")
5711 (synopsis "Manage Procfile-based applications")
5712 (description
5713 "A Procfile is a file which describes how to run an application
5714 consisting of several processes. honcho starts all listed processes.
5715 The output of all running processes is collected by honcho and
5716 displayed.")
5717 (license license:expat)))
5718
5719 (define-public python2-honcho
5720 (package-with-python2 python-honcho))
5721
5722 (define-public python-pexpect
5723 (package
5724 (name "python-pexpect")
5725 (version "4.8.0")
5726 (source
5727 (origin
5728 (method url-fetch)
5729 (uri (pypi-uri "pexpect" version))
5730 (sha256
5731 (base32 "032cg337h8awydgypz6f4wx848lw8dyrj4zy988x0lyib4ws8rgw"))))
5732 (build-system python-build-system)
5733 (arguments
5734 `(#:phases
5735 (modify-phases %standard-phases
5736 (add-before 'check 'prepare-tests
5737 (lambda _
5738 (substitute* (find-files "tests")
5739 (("/bin/ls") (which "ls"))
5740 (("/bin/echo") (which "echo"))
5741 (("/bin/which") (which "which"))
5742 ;; Many tests try to use the /bin directory which
5743 ;; is not present in the build environment.
5744 ;; Use one that's non-empty and unlikely to change.
5745 (("/bin'") "/dev'")
5746 ;; Disable failing test. See upstream bug report
5747 ;; https://github.com/pexpect/pexpect/issues/568
5748 (("def test_bash") "def _test_bash"))
5749 ;; XXX: Socket connection test gets "Connection reset by peer".
5750 ;; Why does it not work? Delete for now.
5751 (delete-file "tests/test_socket.py")
5752 #t))
5753 (replace 'check (lambda _ (invoke "nosetests" "-v"))))))
5754 (native-inputs
5755 `(("python-nose" ,python-nose)
5756 ("python-pytest" ,python-pytest)
5757 ("man-db" ,man-db)
5758 ("which" ,which)
5759 ("bash-full" ,bash))) ;full Bash for 'test_replwrap.py'
5760 (propagated-inputs
5761 `(("python-ptyprocess" ,python-ptyprocess)))
5762 (home-page "http://pexpect.readthedocs.org/")
5763 (synopsis "Controlling interactive console applications")
5764 (description
5765 "Pexpect is a pure Python module for spawning child applications;
5766 controlling them; and responding to expected patterns in their output.
5767 Pexpect works like Don Libes’ Expect. Pexpect allows your script to spawn a
5768 child application and control it as if a human were typing commands.")
5769 (license license:isc)))
5770
5771 (define-public python2-pexpect
5772 (package-with-python2 python-pexpect))
5773
5774 (define-public python-setuptools-scm
5775 (package
5776 (name "python-setuptools-scm")
5777 (version "3.4.3")
5778 (source (origin
5779 (method url-fetch)
5780 (uri (pypi-uri "setuptools_scm" version))
5781 (sha256
5782 (base32
5783 "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16"))))
5784 (build-system python-build-system)
5785 (home-page "https://github.com/pypa/setuptools_scm/")
5786 (synopsis "Manage Python package versions in SCM metadata")
5787 (description
5788 "Setuptools_scm handles managing your Python package versions in
5789 @dfn{software configuration management} (SCM) metadata instead of declaring
5790 them as the version argument or in a SCM managed file.")
5791 (license license:expat)))
5792
5793 (define-public python2-setuptools-scm
5794 (package-with-python2 python-setuptools-scm))
5795
5796 (define-public python-sexpdata
5797 (package
5798 (name "python-sexpdata")
5799 (version "0.0.3")
5800 (source
5801 (origin
5802 (method url-fetch)
5803 (uri (pypi-uri "sexpdata" version))
5804 (sha256
5805 (base32
5806 "1q4lsjyzzqrdv64l0pv4ij9nd8gqhvxqcrpxc2xpxs652sk2gj0s"))))
5807 (build-system python-build-system)
5808 (home-page "https://github.com/jd-boyd/sexpdata")
5809 (synopsis "S-expression parser for Python")
5810 (description
5811 "Sexpdata is an S-expression parser/serializer. It has load and dump
5812 functions like pickle, json or PyYAML module.")
5813 (license license:bsd-3)))
5814
5815 (define-public python-pathlib2
5816 (package
5817 (name "python-pathlib2")
5818 (version "2.3.3")
5819 (source
5820 (origin
5821 (method url-fetch)
5822 (uri (pypi-uri "pathlib2" version))
5823 (sha256
5824 (base32
5825 "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
5826 (build-system python-build-system)
5827 (propagated-inputs
5828 `(("python-scandir" ,python-scandir)
5829 ("python-six" ,python-six)))
5830 (home-page "https://pypi.org/project/pathlib2/")
5831 (synopsis "Object-oriented file system paths")
5832 (description "The goal of pathlib2 is to provide a backport of the
5833 standard @code{pathlib} module which tracks the standard library module, so
5834 all the newest features of the standard @code{pathlib} can be used also on
5835 older Python versions.")
5836 (license license:expat)))
5837
5838 (define-public python2-importlib-resources
5839 (package
5840 (name "python2-importlib-resources")
5841 (version "1.0.2")
5842 (source (origin
5843 (method url-fetch)
5844 (uri (pypi-uri "importlib_resources" version))
5845 (sha256
5846 (base32
5847 "0y3hg12iby1qyaspnbisz4s4vxax7syikk3skznwqizqyv89y9yk"))))
5848 (build-system python-build-system)
5849 (arguments
5850 `(#:python ,python-2
5851 #:phases (modify-phases %standard-phases
5852 ;; The build system tests for python-wheel, but it is
5853 ;; not required for Guix nor the test suite. Just drop
5854 ;; it to make bootstrapping pytest easier.
5855 (add-after 'unpack 'drop-wheel-dependency
5856 (lambda _
5857 (substitute* "setup.cfg"
5858 (("^[[:blank:]]+wheel")
5859 ""))
5860 #t)))))
5861 (propagated-inputs
5862 `(("python-pathlib2" ,python2-pathlib2)
5863 ("python-typing" ,python2-typing)))
5864 (home-page "https://gitlab.com/python-devs/importlib_resources")
5865 (synopsis "Backport of @code{importlib.resources} from Python 3.7")
5866 (description
5867 "This package provides an implementation of @code{importlib.resources}
5868 for older versions of Python.")
5869 (license license:asl2.0)))
5870
5871 ;; For importlib-metadata-bootstrap below.
5872 (define-public python2-importlib-resources-bootstrap
5873 (hidden-package
5874 (package/inherit
5875 python2-importlib-resources
5876 (name "python2-importlib-resources-bootstrap")
5877 (propagated-inputs
5878 `(("python-pathlib2-bootstrap" ,python2-pathlib2-bootstrap)
5879 ("python-typing" ,python2-typing))))))
5880
5881 (define-public python-importlib-metadata
5882 (package
5883 (name "python-importlib-metadata")
5884 (version "1.5.0")
5885 (source
5886 (origin
5887 (method url-fetch)
5888 (uri (pypi-uri "importlib_metadata" version))
5889 (sha256
5890 (base32
5891 "00ikdj4gjhankdljnz7g5ggak4k9lql2926x0x117ir9j2lv7x86"))))
5892 (build-system python-build-system)
5893 (propagated-inputs
5894 `(("python-zipp" ,python-zipp)))
5895 (native-inputs
5896 `(("python-setuptools-scm" ,python-setuptools-scm)
5897 ("python-pyfakefs" ,python-pyfakefs)
5898 ("python-packaging" ,python-packaging)))
5899 (home-page "https://importlib-metadata.readthedocs.io/")
5900 (synopsis "Read metadata from Python packages")
5901 (description
5902 "@code{importlib_metadata} is a library which provides an API for
5903 accessing an installed Python package's metadata, such as its entry points or
5904 its top-level name. This functionality intends to replace most uses of
5905 @code{pkg_resources} entry point API and metadata API. Along with
5906 @code{importlib.resources} in Python 3.7 and newer, this can eliminate the
5907 need to use the older and less efficient @code{pkg_resources} package.")
5908 (properties `((python2-variant . ,(delay python2-importlib-metadata))))
5909 (license license:asl2.0)))
5910
5911 (define-public python2-importlib-metadata
5912 (let ((base (package-with-python2 (strip-python2-variant
5913 python-importlib-metadata))))
5914 (package/inherit
5915 base
5916 (name "python2-importlib-metadata")
5917 (native-inputs
5918 `(("python-setuptools-scm" ,python2-setuptools-scm)
5919 ("python-pyfakefs" ,python2-pyfakefs-bootstrap)
5920 ("python-packaging" ,python2-packaging-bootstrap)))
5921 (propagated-inputs
5922 `(("python-configparser" ,python2-configparser)
5923 ("python-contextlib2" ,python2-contextlib2)
5924 ("python-importlib-resources" ,python2-importlib-resources)
5925 ("python-pathlib2" ,python2-pathlib2)
5926 ,@(package-propagated-inputs base))))))
5927
5928 ;; This package is used by python2-pytest, and thus must not depend on it.
5929 (define-public python2-importlib-metadata-bootstrap
5930 (hidden-package
5931 (package/inherit
5932 python2-importlib-metadata
5933 (name "python2-importlib-metadata-bootstrap")
5934 (arguments
5935 `(#:tests? #f
5936 ,@(package-arguments python2-importlib-metadata)))
5937 (propagated-inputs
5938 `(("python-zipp" ,python2-zipp-bootstrap)
5939 ("python-pathlib2" ,python2-pathlib2-bootstrap)
5940 ("python-configparser" ,python2-configparser)
5941 ("python-contextlib2" ,python2-contextlib2-bootstrap)
5942 ("python-importlib-resources" ,python2-importlib-resources-bootstrap))))))
5943
5944 (define-public python-importmagic
5945 (package
5946 (name "python-importmagic")
5947 (version "0.1.7")
5948 (source
5949 (origin
5950 (method url-fetch)
5951 (uri (pypi-uri "importmagic" version))
5952 (sha256
5953 (base32
5954 "1n7qxa1snj06aw45mcfz7bxc46zp7fxj687140g2k6jcnyjmfxrz"))))
5955 (build-system python-build-system)
5956 (home-page "https://github.com/alecthomas/importmagic")
5957 (synopsis "Library for adding, removing and managing Python imports")
5958 (description
5959 "Importmagic is a Python library for automatically managing imports by
5960 finding unresolved symbols in Python code and their corresponding imports.")
5961 (license license:bsd-3)))
5962
5963 (define-public python-jaraco-packaging
5964 (package
5965 (name "python-jaraco-packaging")
5966 (version "6.1")
5967 (source
5968 (origin
5969 (method url-fetch)
5970 (uri (pypi-uri "jaraco.packaging" version))
5971 (sha256
5972 (base32
5973 "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
5974 (build-system python-build-system)
5975 (propagated-inputs
5976 `(("python-pytest" ,python-pytest)
5977 ("python-pytest-checkdocs" ,python-pytest-checkdocs)
5978 ("python-pytest-flake8" ,python-pytest-flake8)
5979 ("python-rst.linker" ,python-rst.linker)
5980 ("python-setuptools" ,python-setuptools)
5981 ("python-setuptools-scm" ,python-setuptools-scm)
5982 ("python-six" ,python-six)
5983 ("python-sphinx" ,python-sphinx)))
5984 (home-page "https://github.com/jaraco/jaraco.packaging")
5985 (synopsis "Tools to supplement packaging Python releases")
5986 (description
5987 "This package provides various tools to supplement packaging Python
5988 releases.")
5989 (license license:expat)))
5990
5991 (define-public python-pathpy
5992 (package
5993 (name "python-pathpy")
5994 (version "11.5.1")
5995 (source
5996 (origin
5997 (method url-fetch)
5998 (uri (pypi-uri "path.py" version))
5999 (sha256
6000 (base32 "0ir9j1haq2jbi7aip6k2fa9l7q1l03k4hp1awxhjhcwzsnwp3ll8"))))
6001 (outputs '("out" "doc"))
6002 (build-system python-build-system)
6003 (propagated-inputs
6004 `(("python-appdirs" ,python-appdirs)
6005 ("python-importlib-metadata" ,python-importlib-metadata)))
6006 (native-inputs
6007 `(("python-setuptools-scm" ,python-setuptools-scm)
6008 ("python-sphinx" ,python-sphinx)
6009 ("python-rst.linker" ,python-rst.linker)
6010 ("python-pytest" ,python-pytest)
6011 ("python-pytest-runner" ,python-pytest-runner)
6012 ("python-jaraco-packaging" ,python-jaraco-packaging)))
6013 (arguments
6014 `(#:phases
6015 (modify-phases %standard-phases
6016 (add-after 'build 'build-doc
6017 (lambda _
6018 (setenv "LANG" "en_US.UTF-8")
6019 (invoke "python" "setup.py" "build_sphinx")))
6020 (add-after 'install 'install-doc
6021 (lambda* (#:key outputs #:allow-other-keys)
6022 (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
6023 (doc (string-append data "/doc/" ,name "-" ,version))
6024 (html (string-append doc "/html")))
6025 (mkdir-p html)
6026 (for-each (lambda (file)
6027 (copy-file file (string-append doc "/" file)))
6028 '("README.rst" "CHANGES.rst"))
6029 (copy-recursively "build/sphinx/html" html)
6030 #t)))
6031 (replace 'check
6032 (lambda _
6033 ;; The import time test aborts if an import takes longer than
6034 ;; 100ms. It may very well take a little longer than that.
6035 (invoke "pytest" "-v" "-k" "not test_import_time"))))))
6036 (home-page "https://github.com/jaraco/path.py")
6037 (synopsis "Python module wrapper for built-in os.path")
6038 (description
6039 "@code{path.py} implements path objects as first-class entities, allowing
6040 common operations on files to be invoked on those path objects directly.")
6041 (license license:expat)))
6042
6043 (define-public python2-pathpy
6044 (package-with-python2 python-pathpy))
6045
6046 (define-public python-simplegeneric
6047 (package
6048 (name "python-simplegeneric")
6049 (version "0.8.1")
6050 (source
6051 (origin
6052 (method url-fetch)
6053 (uri (pypi-uri "simplegeneric" version ".zip"))
6054 (sha256
6055 (base32 "0wwi1c6md4vkbcsfsf8dklf3vr4mcdj4mpxkanwgb6jb1432x5yw"))))
6056 (build-system python-build-system)
6057 (native-inputs
6058 `(("unzip" ,unzip)))
6059 (home-page "http://cheeseshop.python.org/pypi/simplegeneric")
6060 (synopsis "Python module for simple generic functions")
6061 (description
6062 "The simplegeneric module lets you define simple single-dispatch generic
6063 functions, akin to Python’s built-in generic functions like @code{len()},
6064 @code{iter()} and so on. However, instead of using specially-named methods,
6065 these generic functions use simple lookup tables, akin to those used by
6066 e.g. @code{pickle.dump()} and other generic functions found in the Python
6067 standard library.")
6068 (license license:zpl2.1)))
6069
6070 (define-public python2-simplegeneric
6071 (package-with-python2 python-simplegeneric))
6072
6073 (define-public python-ipython-genutils
6074 ;; TODO: This package is retired, check if can be removed, see description.
6075 (package
6076 (name "python-ipython-genutils")
6077 (version "0.1.0")
6078 (source
6079 (origin
6080 (method url-fetch)
6081 (uri (pypi-uri "ipython_genutils" version))
6082 (sha256
6083 (base32 "19l2pp1c64ansr89l3cqh19jdi2ixhssdzx0vz4n6r52a6i281is"))))
6084 (build-system python-build-system)
6085 (arguments `(#:tests? #f)) ; no tests
6086 (home-page "https://ipython.org")
6087 (synopsis "Vestigial utilities from IPython")
6088 (description
6089 "This package provides retired utilities from IPython. No packages
6090 outside IPython/Jupyter should depend on it.
6091
6092 This package shouldn't exist. It contains some common utilities shared by
6093 Jupyter and IPython projects during The Big Split. As soon as possible, those
6094 packages will remove their dependency on this, and this package will go
6095 away.")
6096 (license license:bsd-3)))
6097
6098 (define-public python2-ipython-genutils
6099 (package-with-python2 python-ipython-genutils))
6100
6101 (define-public python-ipyparallel
6102 (package
6103 (name "python-ipyparallel")
6104 (version "6.2.4")
6105 (source
6106 (origin
6107 (method url-fetch)
6108 (uri (pypi-uri "ipyparallel" version))
6109 (sha256
6110 (base32
6111 "0rf0dbpxf5z82bw8lsjj45r3wdd4wc74anz4wiiaf2rbjqlb1ivn"))))
6112 (build-system python-build-system)
6113 (arguments
6114 `(#:tests? #f ; RuntimeError: IO Loop failed to start
6115 #:phases
6116 (modify-phases %standard-phases
6117 (add-before 'check 'prepare-for-tests
6118 (lambda _
6119 (setenv "HOME" (getcwd))
6120 #t)))))
6121 (propagated-inputs
6122 `(("python-dateutil" ,python-dateutil)
6123 ("python-decorator" ,python-decorator)
6124 ("python-ipykernel" ,python-ipykernel)
6125 ("python-ipython" ,python-ipython)
6126 ("python-ipython-genutils" ,python-ipython-genutils)
6127 ("python-jupyter-client" ,python-jupyter-client)
6128 ("python-pyzmq" ,python-pyzmq)
6129 ("python-tornado" ,python-tornado)
6130 ("python-traitlets" ,python-traitlets)))
6131 (native-inputs
6132 `(("python-ipython" ,python-ipython)
6133 ("python-mock" ,python-mock)
6134 ("python-nose" ,python-nose)
6135 ("python-pytest" ,python-pytest)
6136 ("python-pytest-cov" ,python-pytest-cov)
6137 ("python-testpath" ,python-testpath)))
6138 (home-page "https://ipython.org/")
6139 (synopsis "Interactive Parallel Computing with IPython")
6140 (description
6141 "@code{ipyparallel} is a Python package and collection of CLI scripts for
6142 controlling clusters for Jupyter. @code{ipyparallel} contains the following
6143 CLI scripts:
6144 @enumerate
6145 @item ipcluster - start/stop a cluster
6146 @item ipcontroller - start a scheduler
6147 @item ipengine - start an engine
6148 @end enumerate")
6149 (license license:bsd-3)))
6150
6151 (define-public python2-ipyparallel
6152 (let ((ipyparallel (package-with-python2 python-ipyparallel)))
6153 (package
6154 (inherit ipyparallel)
6155 (propagated-inputs
6156 `(("python2-futures" ,python2-futures)
6157 ,@(package-propagated-inputs ipyparallel))))))
6158
6159 (define-public python-ipython-cluster-helper
6160 (package
6161 (name "python-ipython-cluster-helper")
6162 (version "0.6.4")
6163 (source
6164 (origin
6165 (method url-fetch)
6166 (uri (pypi-uri "ipython-cluster-helper" version))
6167 (sha256
6168 (base32
6169 "1l6mlwxlkxpbvawfwk6qffich7ahg9hq2bxfissgz6144p3k4arj"))
6170 (modules '((guix build utils)))
6171 (snippet
6172 '(begin (substitute* "requirements.txt"
6173 (("ipython.*") "ipython\n"))
6174 #t))))
6175 (build-system python-build-system)
6176 (arguments
6177 `(#:tests? #f ; Test suite can't find IPython.
6178 #:phases
6179 (modify-phases %standard-phases
6180 (replace 'check
6181 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6182 (if tests?
6183 (begin
6184 (setenv "HOME" (getcwd))
6185 (add-installed-pythonpath inputs outputs)
6186 (invoke "python" "example/example.py" "--local"))
6187 #t))))))
6188 (propagated-inputs
6189 `(("python-ipyparallel" ,python-ipyparallel)
6190 ("python-ipython" ,python-ipython)
6191 ("python-netifaces" ,python-netifaces)
6192 ("python-pyzmq" ,python-pyzmq)
6193 ("python-setuptools" ,python-setuptools)
6194 ("python-six" ,python-six)))
6195 (home-page "https://github.com/roryk/ipython-cluster-helper")
6196 (synopsis
6197 "Simplify IPython cluster start up and use for multiple schedulers")
6198 (description
6199 "@code{ipython-cluster-helper} creates a throwaway parallel IPython
6200 profile, launches a cluster and returns a view. On program exit it shuts the
6201 cluster down and deletes the throwaway profile.")
6202 (license license:expat)))
6203
6204 (define-public python2-ipython-cluster-helper
6205 (package-with-python2 python-ipython-cluster-helper))
6206
6207 (define-public python-traitlets
6208 (package
6209 (name "python-traitlets")
6210 (version "4.3.3")
6211 (source
6212 (origin
6213 (method url-fetch)
6214 (uri (pypi-uri "traitlets" version))
6215 (sha256
6216 (base32
6217 "1xsrwgivpkxlbr4dfndfsi098s29yqgswgjc1qqn69yxklvfw8yh"))))
6218 (build-system python-build-system)
6219 (arguments
6220 `(#:phases
6221 (modify-phases %standard-phases
6222 (replace 'check (lambda _ (invoke "pytest" "-vv" "traitlets"))))))
6223 (propagated-inputs
6224 `(("python-ipython-genutils" ,python-ipython-genutils)
6225 ("python-decorator" ,python-decorator)))
6226 (native-inputs
6227 `(("python-pytest" ,python-pytest)))
6228 (properties `((python2-variant . ,(delay python2-traitlets))))
6229 (home-page "https://ipython.org")
6230 (synopsis "Configuration system for Python applications")
6231 (description
6232 "Traitlets is a framework that lets Python classes have attributes with
6233 type checking, dynamically calculated default values, and ‘on change’
6234 callbacks. The package also includes a mechanism to use traitlets for
6235 configuration, loading values from files or from command line arguments. This
6236 is a distinct layer on top of traitlets, so you can use traitlets in your code
6237 without using the configuration machinery.")
6238 (license license:bsd-3)))
6239
6240 (define-public python2-traitlets
6241 (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets))))
6242 (package
6243 (inherit traitlets)
6244 (propagated-inputs
6245 `(("python2-enum34" ,python2-enum34)
6246 ,@(package-propagated-inputs traitlets))))))
6247
6248 (define-public python-jupyter-core
6249 (package
6250 (name "python-jupyter-core")
6251 (version "4.4.0")
6252 (source
6253 (origin
6254 (method url-fetch)
6255 (uri (string-append (pypi-uri "jupyter_core" version)))
6256 (sha256
6257 (base32
6258 "1dy083rarba8prn9f9srxq3c7n7vyql02ycrqq306c40lr57aw5s"))))
6259 (build-system python-build-system)
6260 ;; FIXME: not sure how to run the tests
6261 (arguments `(#:tests? #f))
6262 (propagated-inputs
6263 `(("python-traitlets" ,python-traitlets)))
6264 (home-page "http://jupyter.org/")
6265 (synopsis "Jupyter base package")
6266 (description
6267 "Jupyter core is the base package on which Jupyter projects rely.")
6268 (license license:bsd-3)))
6269
6270 (define-public python2-jupyter-core
6271 (package-with-python2 python-jupyter-core))
6272
6273 (define-public python-jupyter-client
6274 (package
6275 (name "python-jupyter-client")
6276 (version "5.2.4")
6277 (source
6278 (origin
6279 (method url-fetch)
6280 (uri (pypi-uri "jupyter_client" version))
6281 (sha256
6282 (base32
6283 "0l9mh7ccrpl3lppym3dnky8n1nk7xarzzdcxf4q2s7aw203cpydm"))))
6284 (build-system python-build-system)
6285 ;; Tests fail because of missing native python kernel which I assume is
6286 ;; provided by the ipython package, which we cannot use because it would
6287 ;; cause a dependency cycle.
6288 (arguments
6289 `(#:tests? #f
6290
6291 #:phases (modify-phases %standard-phases
6292 (add-after 'unpack 'set-tool-file-names
6293 (lambda* (#:key inputs #:allow-other-keys)
6294 (let ((iproute (assoc-ref inputs "iproute")))
6295 (substitute* "jupyter_client/localinterfaces.py"
6296 (("'ip'")
6297 (string-append "'" iproute "/sbin/ip'")))
6298 #t))))))
6299 (inputs
6300 `(("iproute" ,iproute)))
6301 (propagated-inputs
6302 `(("python-pyzmq" ,python-pyzmq)
6303 ("python-traitlets" ,python-traitlets)
6304 ("python-jupyter-core" ,python-jupyter-core)))
6305 (home-page "http://jupyter.org/")
6306 (synopsis "Jupyter protocol implementation and client libraries")
6307 (description
6308 "The @code{jupyter_client} package contains the reference implementation
6309 of the Jupyter protocol. It also provides client and kernel management APIs
6310 for working with kernels, and the @code{jupyter kernelspec} entrypoint for
6311 installing @code{kernelspec}s for use with Jupyter frontends.")
6312 (license license:bsd-3)))
6313
6314 (define-public python2-jupyter-client
6315 (package-with-python2 python-jupyter-client))
6316
6317 (define-public python-ipykernel
6318 (package
6319 (name "python-ipykernel")
6320 (version "5.1.3")
6321 (source
6322 (origin
6323 (method url-fetch)
6324 (uri (pypi-uri "ipykernel" version))
6325 (sha256
6326 (base32 "1a08y677lpn80qzvv7z0smgggmr5m5ayf0bs6vds47xpxl9sss5k"))))
6327 (build-system python-build-system)
6328 (arguments
6329 `(#:phases
6330 (modify-phases %standard-phases
6331 (replace 'check
6332 (lambda _
6333 (setenv "HOME" "/tmp")
6334 (invoke "pytest" "-v")
6335 #t))
6336 (add-after 'install 'set-python-file-name
6337 (lambda* (#:key outputs #:allow-other-keys)
6338 ;; Record the absolute file name of the 'python' executable in
6339 ;; 'kernel.json'.
6340 (let ((out (assoc-ref outputs "out")))
6341 (substitute* (string-append out "/share/jupyter"
6342 "/kernels/python3/kernel.json")
6343 (("\"python\"")
6344 (string-append "\"" (which "python") "\"")))
6345 #t))))))
6346 (propagated-inputs
6347 `(("python-ipython" ,python-ipython)
6348 ;; imported at runtime during connect
6349 ("python-jupyter-client" ,python-jupyter-client)))
6350 (native-inputs
6351 `(("python-flaky" ,python-flaky)
6352 ("python-nose" ,python-nose)
6353 ("python-pytest" ,python-pytest)))
6354 (home-page "https://ipython.org")
6355 (synopsis "IPython Kernel for Jupyter")
6356 (description
6357 "This package provides the IPython kernel for Jupyter.")
6358 (properties `((python2-variant . ,(delay python2-ipykernel))))
6359 (license license:bsd-3)))
6360
6361 ;; Version 5.x and above no longer support Python 2.
6362 (define-public python2-ipykernel
6363 (package
6364 (name "python2-ipykernel")
6365 (version "4.10.1")
6366 (source
6367 (origin
6368 (method url-fetch)
6369 (uri (pypi-uri "ipykernel" version))
6370 (sha256
6371 (base32 "1yzmdiy1djsszqp54jzd8ym8h4hpl67zjq83j2kxbkp0rwmlpdzf"))))
6372 (build-system python-build-system)
6373 (arguments
6374 `(#:python ,python-2))
6375 (propagated-inputs
6376 `(("python2-ipython" ,python2-ipython)
6377 ;; imported at runtime during connect
6378 ("python2-jupyter-client" ,python2-jupyter-client)
6379 ("python2-tornado" ,python2-tornado)
6380 ("python2-traitlets" ,python2-traitlets)))
6381 (native-inputs
6382 `(("python2-mock" ,python2-mock)
6383 ("python2-nose" ,python2-nose)
6384 ("python2-pytest" ,python2-pytest)
6385 ("python2-pytest-cov" ,python2-pytest-cov)))
6386 (home-page "https://ipython.org")
6387 (synopsis "IPython Kernel for Jupyter")
6388 (description
6389 "This package provides the IPython kernel for Jupyter.")
6390 (license license:bsd-3)))
6391
6392 (define-public python-pari-jupyter
6393 (package
6394 (name "python-pari-jupyter")
6395 (version "1.3.2")
6396 (source
6397 (origin
6398 (method url-fetch)
6399 (uri (pypi-uri "pari_jupyter" version))
6400 (sha256
6401 (base32
6402 "1yash0p422nnin7z58b99d0p23nx79f5m0mainc9hsjg72jhdhr6"))))
6403 (build-system python-build-system)
6404 (propagated-inputs
6405 `(("python-ipykernel" ,python-ipykernel)))
6406 (inputs
6407 `(("pari-gp" ,pari-gp)
6408 ("readline" ,readline)))
6409 (arguments
6410 `(#:tests? #f)) ; no test suite
6411 (home-page
6412 "https://github.com/jdemeyer/pari_jupyter")
6413 (synopsis "A Jupyter kernel for PARI/GP")
6414 (description "The package provides a PARI/GP kernel for Jupyter.")
6415 (license license:gpl3+)))
6416
6417 (define-public python-backcall
6418 (package
6419 (name "python-backcall")
6420 (version "0.1.0")
6421 (source
6422 (origin
6423 (method url-fetch)
6424 (uri (pypi-uri "backcall" version))
6425 (sha256
6426 (base32
6427 "1r01dqch3f8fdj3n6fviw8hxqrs6w5v0qw4izmvqzry1w9dxiv1q"))))
6428 (build-system python-build-system)
6429 (home-page "https://github.com/takluyver/backcall/")
6430 (synopsis "Specifications for callback functions passed in to an API")
6431 (description
6432 "If your code lets other people supply callback functions, it's important
6433 to specify the function signature you expect, and check that functions support
6434 that. Adding extra parameters later would break other peoples code unless
6435 you're careful. The @code{backcall} package provides a way of specifying the
6436 callback signature using a prototype function.")
6437 (license license:bsd-3)))
6438
6439 (define-public python-ipython
6440 (package
6441 (name "python-ipython")
6442 (version "7.9.0")
6443 (source
6444 (origin
6445 (method url-fetch)
6446 (uri (pypi-uri "ipython" version ".tar.gz"))
6447 (sha256
6448 (base32 "103jkw18z7fnwdal1mdbijjxi1fndzn31g887lmj7ddpf2r07lyz"))))
6449 (build-system python-build-system)
6450 (propagated-inputs
6451 `(("python-backcall" ,python-backcall)
6452 ("python-pyzmq" ,python-pyzmq)
6453 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
6454 ("python-terminado" ,python-terminado)
6455 ("python-matplotlib" ,python-matplotlib)
6456 ("python-numpy" ,python-numpy)
6457 ("python-numpydoc" ,python-numpydoc)
6458 ("python-jedi" ,python-jedi)
6459 ("python-jinja2" ,python-jinja2)
6460 ("python-mistune" ,python-mistune)
6461 ("python-pexpect" ,python-pexpect)
6462 ("python-pickleshare" ,python-pickleshare)
6463 ("python-simplegeneric" ,python-simplegeneric)
6464 ("python-jsonschema" ,python-jsonschema)
6465 ("python-traitlets" ,python-traitlets)
6466 ("python-nbformat" ,python-nbformat)
6467 ("python-pygments" ,python-pygments)))
6468 (inputs
6469 `(("readline" ,readline)
6470 ("which" ,which)))
6471 (native-inputs
6472 `(("graphviz" ,graphviz)
6473 ("pkg-config" ,pkg-config)
6474 ("python-requests" ,python-requests) ;; for tests
6475 ("python-testpath" ,python-testpath)
6476 ("python-nose" ,python-nose)))
6477 (arguments
6478 `(#:phases
6479 (modify-phases %standard-phases
6480 (add-after 'unpack 'make-docs-reproducible
6481 (lambda _
6482 (substitute* "IPython/sphinxext/ipython_directive.py"
6483 ((".*import datetime") "")
6484 ((".*datetime.datetime.now\\(\\)") "")
6485 (("%timeit") "# %timeit"))
6486 #t))
6487 ;; Tests can only be run after the library has been installed and not
6488 ;; within the source directory.
6489 (delete 'check)
6490 (add-after 'install 'check
6491 (lambda* (#:key inputs outputs tests? #:allow-other-keys)
6492 (if tests?
6493 (begin
6494 ;; Make installed package available for running the tests
6495 (add-installed-pythonpath inputs outputs)
6496 (setenv "HOME" "/tmp/") ;; required by a test
6497 ;; We only test the core because one of the other tests
6498 ;; tries to import ipykernel.
6499 (invoke "python" "IPython/testing/iptest.py"
6500 "-v" "IPython/core/tests"))
6501 #t)))
6502 (add-before 'check 'fix-tests
6503 (lambda* (#:key inputs #:allow-other-keys)
6504 (substitute* "./IPython/utils/_process_posix.py"
6505 (("/usr/bin/env', 'which") (which "which")))
6506 (substitute* "./IPython/core/tests/test_inputtransformer.py"
6507 (("#!/usr/bin/env python")
6508 (string-append "#!" (which "python"))))
6509 ;; This test introduces a circular dependency on ipykernel
6510 ;; (which depends on ipython).
6511 (delete-file "IPython/core/tests/test_display.py")
6512 ;; AttributeError: module 'IPython.core' has no attribute 'formatters'
6513 (delete-file "IPython/core/tests/test_interactiveshell.py")
6514 #t)))))
6515 (home-page "https://ipython.org")
6516 (synopsis "IPython is a tool for interactive computing in Python")
6517 (description
6518 "IPython provides a rich architecture for interactive computing with:
6519 Powerful interactive shells, a browser-based notebook, support for interactive
6520 data visualization, embeddable interpreters and tools for parallel
6521 computing.")
6522 (properties `((python2-variant . ,(delay python2-ipython))))
6523 (license license:bsd-3)))
6524
6525 ;; This is the latest release of the LTS version of ipython with support for
6526 ;; Python 2.7 and Python 3.x. Later non-LTS versions starting from 6.0 have
6527 ;; dropped support for Python 2.7.
6528 (define-public python2-ipython
6529 (package
6530 (name "python2-ipython")
6531 (version "5.8.0")
6532 (source
6533 (origin
6534 (method url-fetch)
6535 (uri (pypi-uri "ipython" version ".tar.gz"))
6536 (sha256
6537 (base32 "01l93i4hspf0lvhmycvc8j378bslm9rw30mwfspsl6v1ayc69b2b"))))
6538 (build-system python-build-system)
6539 (propagated-inputs
6540 `(("python2-backports-shutil-get-terminal-size"
6541 ,python2-backports-shutil-get-terminal-size)
6542 ("python2-pathlib2" ,python2-pathlib2)
6543 ("python2-pyzmq" ,python2-pyzmq)
6544 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
6545 ("python2-terminado" ,python2-terminado)
6546 ("python2-matplotlib" ,python2-matplotlib)
6547 ("python2-numpy" ,python2-numpy)
6548 ("python2-numpydoc" ,python2-numpydoc)
6549 ("python2-jinja2" ,python2-jinja2)
6550 ("python2-mistune" ,python2-mistune)
6551 ("python2-pexpect" ,python2-pexpect)
6552 ("python2-pickleshare" ,python2-pickleshare)
6553 ("python2-simplegeneric" ,python2-simplegeneric)
6554 ("python2-jsonschema" ,python2-jsonschema)
6555 ("python2-traitlets" ,python2-traitlets)
6556 ("python2-nbformat" ,python2-nbformat)
6557 ("python2-pygments" ,python2-pygments)))
6558 (inputs
6559 `(("readline" ,readline)
6560 ("which" ,which)))
6561 (native-inputs
6562 `(("graphviz" ,graphviz)
6563 ("pkg-config" ,pkg-config)
6564 ("python2-requests" ,python2-requests) ;; for tests
6565 ("python2-testpath" ,python2-testpath)
6566 ("python2-mock" ,python2-mock)
6567 ("python2-nose" ,python2-nose)))
6568 (arguments
6569 `(#:python ,python-2
6570 #:phases
6571 (modify-phases %standard-phases
6572 (add-before 'check 'delete-broken-tests
6573 (lambda* (#:key inputs #:allow-other-keys)
6574 ;; These tests throw errors for unknown reasons.
6575 (delete-file "IPython/core/tests/test_displayhook.py")
6576 (delete-file "IPython/core/tests/test_magic_terminal.py")
6577 (delete-file "IPython/core/tests/test_profile.py")
6578 #t)))))
6579 (home-page "https://ipython.org")
6580 (synopsis "IPython is a tool for interactive computing in Python")
6581 (description
6582 "IPython provides a rich architecture for interactive computing with:
6583 Powerful interactive shells, a browser-based notebook, support for interactive
6584 data visualization, embeddable interpreters and tools for parallel
6585 computing.")
6586 (license license:bsd-3)))
6587
6588 (define-public python-ipython-documentation
6589 (package
6590 (inherit python-ipython)
6591 (name "python-ipython-documentation")
6592 (version (package-version python-ipython))
6593 (arguments
6594 `(#:phases
6595 (modify-phases %standard-phases
6596 (delete 'build)
6597 (delete 'check)
6598 (replace 'install
6599 (lambda* (#:key outputs #:allow-other-keys)
6600 (let* ((data (string-append (assoc-ref outputs "out") "/share"))
6601 (doc (string-append data "/doc/" ,name "-" ,version))
6602 (html (string-append doc "/html"))
6603 (man1 (string-append data "/man/man1"))
6604 (info (string-append data "/info"))
6605 (examples (string-append doc "/examples"))
6606 (python-arg (string-append "PYTHON=" (which "python"))))
6607 (setenv "LANG" "en_US.utf8")
6608 (with-directory-excursion "docs"
6609 ;; FIXME: pdf fails to build
6610 ;;(system* "make" "pdf" "PAPER=a4")
6611 (system* "make" python-arg "html")
6612 ;; FIXME: the generated texi file contains ^@^@, which trips
6613 ;; up the parser.
6614 ;; (system* "make" python-arg "info")
6615 )
6616 (copy-recursively "docs/man" man1)
6617 (copy-recursively "examples" examples)
6618 (copy-recursively "docs/build/html" html)
6619 ;; (copy-file "docs/build/latex/ipython.pdf"
6620 ;; (string-append doc "/ipython.pdf"))
6621 (mkdir-p info)
6622 ;; (copy-file "docs/build/texinfo/ipython.info"
6623 ;; (string-append info "/ipython.info"))
6624 (copy-file "COPYING.rst" (string-append doc "/COPYING.rst")))
6625 #t)))))
6626 (inputs
6627 `(("python-ipython" ,python-ipython)
6628 ("python-ipykernel" ,python-ipykernel)))
6629 (native-inputs
6630 `(("python-sphinx" ,python-sphinx)
6631 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
6632 ;; FIXME: It's possible that a smaller union would work just as well.
6633 ("texlive" ,(texlive-union (list texlive-amsfonts
6634 texlive-fonts-ec
6635 texlive-generic-ifxetex
6636 texlive-generic-pdftex
6637 texlive-latex-capt-of
6638 texlive-latex-cmap
6639 texlive-latex-environ
6640 texlive-latex-eqparbox
6641 texlive-latex-etoolbox
6642 texlive-latex-expdlist
6643 texlive-latex-fancyhdr
6644 texlive-latex-fancyvrb
6645 texlive-latex-fncychap
6646 texlive-latex-float
6647 texlive-latex-framed
6648 texlive-latex-geometry
6649 texlive-latex-graphics
6650 texlive-latex-hyperref
6651 texlive-latex-mdwtools
6652 texlive-latex-multirow
6653 texlive-latex-needspace
6654 texlive-latex-oberdiek
6655 texlive-latex-parskip
6656 texlive-latex-preview
6657 texlive-latex-tabulary
6658 texlive-latex-threeparttable
6659 texlive-latex-titlesec
6660 texlive-latex-trimspaces
6661 texlive-latex-ucs
6662 texlive-latex-upquote
6663 texlive-latex-url
6664 texlive-latex-varwidth
6665 texlive-latex-wrapfig)))
6666 ("texinfo" ,texinfo)))))
6667
6668 (define-public python-urwid
6669 (package
6670 (name "python-urwid")
6671 (version "2.1.0")
6672 (source
6673 (origin
6674 (method url-fetch)
6675 (uri (pypi-uri "urwid" version))
6676 (sha256
6677 (base32
6678 "11ndnhxd41m13darf5s0c6bafdpkzq1l6mfb04wbzdmyc1hg75h8"))))
6679 (build-system python-build-system)
6680 (home-page "http://urwid.org")
6681 (synopsis "Console user interface library for Python")
6682 (description
6683 "Urwid is a curses-based UI/widget library for Python. It includes many
6684 features useful for text console applications.")
6685 (license license:lgpl2.1+)))
6686
6687 (define-public python2-urwid
6688 (package-with-python2 python-urwid))
6689
6690 (define-public python-urwidtrees
6691 (package
6692 (name "python-urwidtrees")
6693 (version "1.0.2")
6694 (source
6695 (origin
6696 (method git-fetch)
6697 ;; package author intends on distributing via github rather than pypi:
6698 ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
6699 (uri (git-reference
6700 (url "https://github.com/pazz/urwidtrees")
6701 (commit version)))
6702 (file-name (git-file-name name version))
6703 (sha256
6704 (base32
6705 "1n1kpidvkdnsqyb82vlvk78gmly96kh8351lqxn2pzgwwns6fml2"))))
6706 (build-system python-build-system)
6707 (arguments
6708 '(#:use-setuptools? #f
6709 #:tests? #f)) ; no tests
6710 (propagated-inputs `(("python-urwid" ,python-urwid)))
6711 (home-page "https://github.com/pazz/urwidtrees")
6712 (synopsis "Tree widgets for urwid")
6713 (description "Urwidtrees is a Widget Container API for the @code{urwid}
6714 toolkit. Use it to build trees of widgets.")
6715 (license license:gpl3+)))
6716
6717 (define-public python2-urwidtrees
6718 (package-with-python2 python-urwidtrees))
6719
6720 (define-public python-ua-parser
6721 (package
6722 (name "python-ua-parser")
6723 (version "0.8.0")
6724 (source
6725 (origin
6726 (method url-fetch)
6727 (uri (pypi-uri "ua-parser" version))
6728 (sha256
6729 (base32
6730 "1jwdf58rhchjzzrad405pviv0iq24xa2xmmmdgcm2c8s6b4wzfwp"))))
6731 (build-system python-build-system)
6732 (arguments
6733 `(#:tests? #f)) ;no test suite in release
6734 (native-inputs
6735 `(("python-pyyaml" ,python-pyyaml)))
6736 (home-page "https://github.com/ua-parser/uap-python")
6737 (synopsis "User agent parser")
6738 (description
6739 "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
6740 (license license:asl2.0)))
6741
6742 (define-public python2-ua-parser
6743 (package-with-python2 python-ua-parser))
6744
6745 (define-public python-user-agents
6746 (package
6747 (name "python-user-agents")
6748 (version "1.1.0")
6749 (source
6750 (origin
6751 (method url-fetch)
6752 (uri (pypi-uri "user-agents" version))
6753 (sha256
6754 (base32
6755 "0fc00cd3j8dahq1zzn8pkgfgd7lq37bp2scmdma2n1c049vicgb4"))))
6756 (build-system python-build-system)
6757 (arguments
6758 `(#:tests? #f)) ;missing devices.json test file in release
6759 (propagated-inputs
6760 `(("python-ua-parser" ,python-ua-parser)))
6761 (home-page "https://github.com/selwin/python-user-agents")
6762 (synopsis "User Agent strings parsing library")
6763 (description
6764 "A library to identify devices (phones, tablets) and their capabilities by
6765 parsing (browser/HTTP) user agent strings.")
6766 (license license:expat)))
6767
6768 (define-public python2-user-agents
6769 (package-with-python2 python-user-agents))
6770
6771 (define-public python-dbus
6772 (package
6773 (name "python-dbus")
6774 (version "1.2.14")
6775 (source
6776 (origin
6777 (method url-fetch)
6778 (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/"
6779 "dbus-python-" version ".tar.gz"))
6780 (sha256
6781 (base32 "0cdchkgnivlka4lf8q4qfk0yxq483i3r3aqickjf8hfn7nx0c0mi"))))
6782 (build-system gnu-build-system)
6783 (native-inputs
6784 `(("pkg-config" ,pkg-config)))
6785 (inputs
6786 `(("python" ,python-wrapper)
6787 ("dbus-glib" ,dbus-glib)))
6788 (synopsis "Python bindings for D-bus")
6789 (description "python-dbus provides bindings for libdbus, the reference
6790 implementation of D-Bus.")
6791 (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
6792 (license license:expat)))
6793
6794 (define-public python2-dbus
6795 (package (inherit python-dbus)
6796 (name "python2-dbus")
6797 (inputs `(("python" ,python-2)
6798 ,@(alist-delete "python"
6799 (package-inputs python-dbus)
6800 equal?)))))
6801
6802 (define-public python-notify2
6803 (package
6804 (name "python-notify2")
6805 (version "0.3.1")
6806 (source
6807 (origin
6808 (method url-fetch)
6809 (uri (pypi-uri "notify2" version))
6810 (sha256
6811 (base32
6812 "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik"))))
6813 (build-system python-build-system)
6814 (arguments `(#:tests? #f)) ; tests depend on system state
6815 (native-inputs
6816 `(("python-dbus" ,python-dbus)))
6817 (home-page "https://bitbucket.org/takluyver/pynotify2")
6818 (synopsis "Python interface to D-Bus notifications")
6819 (description
6820 "Pynotify2 provides a Python interface for sending D-Bus notifications.
6821 It is a reimplementation of pynotify in pure Python, and an alternative to
6822 the GObject Introspection bindings to libnotify for non-GTK applications.")
6823 (license (list license:bsd-2
6824 license:lgpl2.1+))))
6825
6826 (define-public python2-notify2
6827 (package-with-python2 python-notify2))
6828
6829 ;; beautifulsoup4 has a totally different namespace than 3.x,
6830 ;; and pypi seems to put it under its own name, so I guess we should too
6831 (define-public python-beautifulsoup4
6832 (package
6833 (name "python-beautifulsoup4")
6834 (version "4.7.1")
6835 (source
6836 (origin
6837 (method url-fetch)
6838 (uri (pypi-uri "beautifulsoup4" version))
6839 (sha256
6840 (base32
6841 "0j2kycz2dxgx68xzjm7rxg5xn6v61gq5ifvxyg99slmqkybnal4l"))))
6842 (build-system python-build-system)
6843 (arguments
6844 `(#:phases
6845 (modify-phases %standard-phases
6846 ;; The Python 2 source is the definitive source of beautifulsoup4. We
6847 ;; must use this conversion script when building with Python 3. The
6848 ;; conversion script also runs the tests.
6849 ;; For more information, see the file 'convert-py3k' in the source
6850 ;; distribution.
6851 (replace 'check
6852 (lambda _ (invoke "./convert-py3k"))))))
6853 (propagated-inputs
6854 `(("python-soupsieve" ,python-soupsieve)))
6855 (home-page
6856 "https://www.crummy.com/software/BeautifulSoup/bs4/")
6857 (synopsis
6858 "Python screen-scraping library")
6859 (description
6860 "Beautiful Soup is a Python library designed for rapidly setting up
6861 screen-scraping projects. It offers Pythonic idioms for navigating,
6862 searching, and modifying a parse tree, providing a toolkit for
6863 dissecting a document and extracting what you need. It automatically
6864 converts incoming documents to Unicode and outgoing documents to UTF-8.")
6865 (license license:expat)
6866 (properties `((python2-variant . ,(delay python2-beautifulsoup4))))))
6867
6868 (define-public python2-beautifulsoup4
6869 (package
6870 (inherit (package-with-python2
6871 (strip-python2-variant python-beautifulsoup4)))
6872 (arguments `(#:python ,python-2))))
6873
6874 (define-public python-soupsieve
6875 (package
6876 (name "python-soupsieve")
6877 (version "1.9.5")
6878 (source
6879 (origin
6880 (method url-fetch)
6881 (uri (pypi-uri "soupsieve" version))
6882 (sha256
6883 (base32
6884 "1nhd0q0ifwva9wn645s6pn74p1rd97asn3qfg75nphx1wkgcbhg2"))))
6885 (build-system python-build-system)
6886 (arguments `(#:tests? #f))
6887 ;;XXX: 2 tests fail currently despite claming they were to be
6888 ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we
6889 ;;don't want to create a circular dependency.
6890 (home-page "https://github.com/facelessuser/soupsieve")
6891 (synopsis "CSS selector library")
6892 (description
6893 "Soup Sieve is a CSS selector library designed to be used with Beautiful
6894 Soup 4. It aims to provide selecting, matching, and filtering using modern
6895 CSS selectors. Soup Sieve currently provides selectors from the CSS level 1
6896 specifications up through the latest CSS level 4 drafts and beyond (though
6897 some are not yet implemented).")
6898 (properties `((python2-variant . ,(delay python2-soupsieve))))
6899 (license license:expat)))
6900
6901 (define-public python2-soupsieve
6902 (let ((base (package-with-python2 (strip-python2-variant python-soupsieve))))
6903 (package
6904 (inherit base)
6905 (propagated-inputs
6906 `(("python2-backports-functools-lru-cache"
6907 ,python2-backports-functools-lru-cache)
6908 ,@(package-propagated-inputs base))))))
6909
6910 (define-public python-netifaces
6911 (package
6912 (name "python-netifaces")
6913 (version "0.10.9")
6914 (source
6915 (origin
6916 (method url-fetch)
6917 (uri (pypi-uri "netifaces" version))
6918 (sha256
6919 (base32
6920 "1wxby874kcr3pp4ygzk5aiarbzhg1yi093d56s1qg4k2s7yrzvid"))))
6921 (build-system python-build-system)
6922 (home-page "https://github.com/al45tair/netifaces")
6923 (synopsis
6924 "Python module for portable network interface information")
6925 (description
6926 "Netifaces is a Python module providing information on network
6927 interfaces in an easy and portable manner.")
6928 (license license:expat)))
6929
6930 (define-public python2-netifaces
6931 (package-with-python2 python-netifaces))
6932
6933 (define-public python-networkx
6934 (package
6935 (name "python-networkx")
6936 (version "2.4")
6937 (source
6938 (origin
6939 (method url-fetch)
6940 (uri (pypi-uri "networkx" version))
6941 (sha256
6942 (base32 "0r2wr7aqay9fwjrgk35fkjzk8lvvb4i4df7ndaqzkr4ndw5zzx7q"))))
6943 (build-system python-build-system)
6944 (arguments
6945 '(#:phases (modify-phases %standard-phases
6946 (replace 'check
6947 (lambda* (#:key tests? #:allow-other-keys)
6948 (if tests?
6949 (invoke "pytest" "-vv" "--pyargs" "networkx")
6950 (format #t "test suite not run~%"))
6951 #t)))))
6952 ;; python-decorator is needed at runtime.
6953 (propagated-inputs
6954 `(("python-decorator" ,python-decorator)))
6955 (native-inputs
6956 `(("python-pytest" ,python-pytest)))
6957 (home-page "https://networkx.github.io/")
6958 (synopsis "Python module for creating and manipulating graphs and networks")
6959 (description
6960 "NetworkX is a Python package for the creation, manipulation, and study
6961 of the structure, dynamics, and functions of complex networks.")
6962 (properties `((python2-variant . ,(delay python2-networkx))))
6963 (license license:bsd-3)))
6964
6965 ;; NetworkX 2.2 is the last version with support for Python 2.
6966 (define-public python2-networkx
6967 (let ((base (package-with-python2 (strip-python2-variant python-networkx))))
6968 (package
6969 (inherit base)
6970 (version "2.2")
6971 (source (origin
6972 (method url-fetch)
6973 (uri (pypi-uri "networkx" version ".zip"))
6974 (sha256
6975 (base32
6976 "12swxb15299v9vqjsq4z8rgh5sdhvpx497xwnhpnb0gynrx6zra5"))))
6977 (arguments
6978 `(#:python ,python-2))
6979 (native-inputs
6980 `(("python-nose" ,python2-nose)
6981 ("unzip" ,unzip))))))
6982
6983 (define-public python-datrie
6984 (package
6985 (name "python-datrie")
6986 (version "0.8.2")
6987 (source
6988 (origin
6989 (method url-fetch)
6990 (uri (pypi-uri "datrie" version))
6991 (sha256
6992 (base32
6993 "0pbn32flkrpjiwfcknmj6398qa81ba783kbcvwan3kym73v0hnsj"))))
6994 (build-system python-build-system)
6995 (native-inputs
6996 `(("python-cython" ,python-cython)
6997 ("python-hypothesis" ,python-hypothesis)
6998 ("python-pytest" ,python-pytest)
6999 ("python-pytest-runner" ,python-pytest-runner)))
7000 (home-page "https://github.com/kmike/datrie")
7001 (synopsis "Fast, efficiently stored trie for Python")
7002 (description
7003 "This package provides a fast, efficiently stored trie implementation for
7004 Python.")
7005 (license license:lgpl2.1+)))
7006
7007 (define-public snakemake
7008 (package
7009 (name "snakemake")
7010 (version "5.7.1")
7011 (source
7012 (origin
7013 (method url-fetch)
7014 (uri (pypi-uri "snakemake" version))
7015 (sha256
7016 (base32 "1pnpvvn8n2a78cg360wz3ldmpqrsm2wzi0c0dmvki9fnsw6fxdas"))))
7017 (build-system python-build-system)
7018 (arguments
7019 ;; TODO: Package missing test dependencies.
7020 '(#:tests? #f
7021 #:phases
7022 (modify-phases %standard-phases
7023 ;; For cluster execution Snakemake will call Python. Since there is
7024 ;; no suitable PYTHONPATH set, cluster execution will fail. We fix
7025 ;; this by calling the snakemake wrapper instead.
7026 (add-after 'unpack 'call-wrapper-not-wrapped-snakemake
7027 (lambda* (#:key outputs #:allow-other-keys)
7028 (substitute* "snakemake/executors.py"
7029 (("\\{sys.executable\\} -m snakemake")
7030 (string-append (assoc-ref outputs "out")
7031 "/bin/snakemake")))
7032 #t)))))
7033 (propagated-inputs
7034 `(("python-appdirs" ,python-appdirs)
7035 ("python-configargparse" ,python-configargparse)
7036 ("python-datrie" ,python-datrie)
7037 ("python-docutils" ,python-docutils)
7038 ("python-gitpython" ,python-gitpython)
7039 ("python-jinja2" ,python-jinja2)
7040 ("python-jsonschema" ,python-jsonschema)
7041 ("python-networkx" ,python-networkx)
7042 ("python-psutil" ,python-psutil)
7043 ("python-pyyaml" ,python-pyyaml)
7044 ("python-ratelimiter" ,python-ratelimiter)
7045 ("python-requests" ,python-requests)
7046 ("python-wrapt" ,python-wrapt)))
7047 (home-page "https://snakemake.readthedocs.io")
7048 (synopsis "Python-based execution environment for make-like workflows")
7049 (description
7050 "Snakemake aims to reduce the complexity of creating workflows by
7051 providing a clean and modern domain specific specification language (DSL) in
7052 Python style, together with a fast and comfortable execution environment.")
7053 (license license:expat)))
7054
7055 (define-public python-pyqrcode
7056 (package
7057 (name "python-pyqrcode")
7058 (version "1.2.1")
7059 (source
7060 (origin
7061 (method url-fetch)
7062 (uri (pypi-uri "PyQRCode" version))
7063 (sha256
7064 (base32
7065 "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
7066 (build-system python-build-system)
7067 (home-page
7068 "https://github.com/mnooner256/pyqrcode")
7069 (synopsis "QR code generator")
7070 (description
7071 "Pyqrcode is a QR code generator written purely in Python with
7072 SVG, EPS, PNG and terminal output.")
7073 (license license:bsd-3)))
7074
7075 (define-public python-seaborn
7076 (package
7077 (name "python-seaborn")
7078 (version "0.10.0")
7079 (source
7080 (origin
7081 (method url-fetch)
7082 (uri (pypi-uri "seaborn" version))
7083 (sha256
7084 (base32 "1ffbms4kllihfycf6j57dziq4imgdjw03sqgifh5wzcd2d743zjr"))))
7085 (build-system python-build-system)
7086 (arguments
7087 `(#:phases
7088 (modify-phases %standard-phases
7089 (add-before 'check 'start-xserver
7090 (lambda* (#:key inputs #:allow-other-keys)
7091 (let ((xorg-server (assoc-ref inputs "xorg-server")))
7092 ;; There must be a running X server and make check doesn't
7093 ;; start one. Therefore we must do it.
7094 (system (format #f "~a/bin/Xvfb :1 &" xorg-server))
7095 (setenv "DISPLAY" ":1")
7096 #t)))
7097 (replace 'check (lambda _ (invoke "pytest" "seaborn") #t)))))
7098 (propagated-inputs
7099 `(("python-pandas" ,python-pandas)
7100 ("python-matplotlib" ,python-matplotlib)
7101 ("python-numpy" ,python-numpy)
7102 ("python-scipy" ,python-scipy)))
7103 (native-inputs
7104 `(("python-pytest" ,python-pytest)
7105 ("xorg-server" ,xorg-server-for-tests)))
7106 (home-page "https://seaborn.pydata.org/")
7107 (synopsis "Statistical data visualization")
7108 (description
7109 "Seaborn is a library for making attractive and informative statistical
7110 graphics in Python. It is built on top of matplotlib and tightly integrated
7111 with the PyData stack, including support for numpy and pandas data structures
7112 and statistical routines from scipy and statsmodels.")
7113 (properties `((python2-variant . ,(delay python2-seaborn))))
7114 (license license:bsd-3)))
7115
7116 ;; 0.9.1 is the last release with support for Python 2.
7117 (define-public python2-seaborn
7118 (let ((base (package-with-python2 (strip-python2-variant python-seaborn))))
7119 (package
7120 (inherit base)
7121 (version "0.9.1")
7122 (source (origin
7123 (method url-fetch)
7124 (uri (pypi-uri "seaborn" version))
7125 (sha256
7126 (base32
7127 "1bjnshjz4d6z3vrwfwall1a3yh8h3a1h47c3fg7458x9426alcys")))))))
7128
7129 (define-public python-mpmath
7130 (package
7131 (name "python-mpmath")
7132 (version "0.19")
7133 (source (origin
7134 (method url-fetch)
7135 (uri (string-append "http://mpmath.org/files/mpmath-"
7136 version ".tar.gz"))
7137 (sha256
7138 (base32
7139 "08ijsr4ifrqv3cjc26mkw0dbvyygsa99in376hr4b96ddm1gdpb8"))))
7140 (build-system python-build-system)
7141 (arguments
7142 '(#:phases
7143 (modify-phases %standard-phases
7144 (replace 'check
7145 (lambda _
7146 (invoke "python" "mpmath/tests/runtests.py" "-local"))))))
7147 (home-page "http://mpmath.org")
7148 (synopsis "Arbitrary-precision floating-point arithmetic in python")
7149 (description
7150 "@code{mpmath} can be used as an arbitrary-precision substitute for
7151 Python's float/complex types and math/cmath modules, but also does much
7152 more advanced mathematics.")
7153 (license license:bsd-3)))
7154
7155 (define-public python2-mpmath
7156 (package-with-python2 python-mpmath))
7157
7158 (define-public python-bigfloat
7159 (package
7160 (name "python-bigfloat")
7161 (version "0.3.0")
7162 (source
7163 (origin
7164 (method url-fetch)
7165 (uri (pypi-uri "bigfloat" version))
7166 (sha256
7167 (base32 "0xd7q4l7v0f463diznjv4k9wlaks80pn9drdqmfifi7zx8qvybi6"))))
7168 (build-system python-build-system)
7169 (inputs
7170 `(("mpfr" ,mpfr)))
7171 (home-page "https://github.com/mdickinson/bigfloat")
7172 (synopsis "Arbitrary precision floating-point arithmetic for Python")
7173 (description
7174 "This package provides a Python interface to the MPFR library for
7175 multiprecision arithmetic.")
7176 (license license:lgpl3+)))
7177
7178 (define-public python2-bigfloat
7179 (package-with-python2 python-bigfloat))
7180
7181 (define-public python-sympy
7182 (package
7183 (name "python-sympy")
7184 (version "1.1.1")
7185 (source
7186 (origin
7187 (method url-fetch)
7188 (uri (string-append
7189 "https://github.com/sympy/sympy/releases/download/sympy-"
7190 version "/sympy-" version ".tar.gz"))
7191 (sha256
7192 (base32 "190n29sppw7g8ihilc5451y7jlfcaw56crqiqbf1jff43dlmfnxc"))))
7193 (build-system python-build-system)
7194 (arguments
7195 `(#:phases
7196 (modify-phases %standard-phases
7197 ;; Run the core tests after installation. By default it would run
7198 ;; *all* tests, which take a very long time to complete and are known
7199 ;; to be flaky.
7200 (delete 'check)
7201 (add-after 'install 'check
7202 (lambda* (#:key outputs #:allow-other-keys)
7203 (invoke "python3" "-c" "import sympy; sympy.test(\"/core\")")
7204 #t)))))
7205 (propagated-inputs
7206 `(("python-mpmath" ,python-mpmath)))
7207 (home-page "https://www.sympy.org/")
7208 (synopsis "Python library for symbolic mathematics")
7209 (description
7210 "SymPy is a Python library for symbolic mathematics. It aims to become a
7211 full-featured computer algebra system (CAS) while keeping the code as simple
7212 as possible in order to be comprehensible and easily extensible.")
7213 (license license:bsd-3)))
7214
7215 (define-public python2-sympy
7216 (package
7217 (inherit (package-with-python2 python-sympy))
7218 (arguments
7219 `(#:phases
7220 (modify-phases %standard-phases
7221 ;; Run the core tests after installation. By default it would run
7222 ;; *all* tests, which take a very long time to complete and are known
7223 ;; to be flaky.
7224 (delete 'check)
7225 (add-after 'install 'check
7226 (lambda* (#:key outputs #:allow-other-keys)
7227 (invoke "python" "-c" "import sympy; sympy.test(\"/core\")")
7228 #t)))))))
7229
7230 (define-public python-q
7231 (package
7232 (name "python-q")
7233 (version "2.6")
7234 (source
7235 (origin
7236 (method url-fetch)
7237 (uri (pypi-uri "q" version))
7238 (sha256
7239 (base32
7240 "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
7241 (build-system python-build-system)
7242 (home-page "https://github.com/zestyping/q")
7243 (synopsis "Quick-and-dirty debugging output for tired programmers")
7244 (description
7245 "q is a Python module for \"print\" style of debugging Python code. It
7246 provides convenient short API for print out of values, tracebacks, and
7247 falling into the Python interpreter.")
7248 (license license:asl2.0)))
7249
7250 (define-public python2-q
7251 (package-with-python2 python-q))
7252
7253 (define-public python2-xlib
7254 (package
7255 (name "python2-xlib")
7256 (version "0.14")
7257 (source (origin
7258 (method url-fetch)
7259 (uri (string-append "mirror://sourceforge/python-xlib/python-xlib"
7260 "/" version "/"
7261 "python-xlib-" version ".tar.gz"))
7262 (sha256
7263 (base32
7264 "1sv0447j0rx8cgs3jhjl695p5pv13ihglcjlrrz1kq05lsvb0wa7"))))
7265 (build-system python-build-system)
7266 (arguments
7267 `(#:python ,python-2 ;Python 2 only
7268 #:tests? #f)) ;no tests
7269 (home-page "http://python-xlib.sourceforge.net/")
7270 (synopsis "Python X11 client library")
7271 (description
7272 "The Python X Library is intended to be a fully functional X client
7273 library for Python programs. It is useful to implement low-level X clients.
7274 It is written entirely in Python.")
7275 (license license:gpl2+)))
7276
7277 (define-public python-singledispatch
7278 (package
7279 (name "python-singledispatch")
7280 (version "3.4.0.3")
7281 (source
7282 (origin
7283 (method url-fetch)
7284 (uri (pypi-uri "singledispatch" version))
7285 (sha256
7286 (base32
7287 "171b7ip0hsq5qm83np40h3phlr36ym18w0lay0a8v08kvy3sy1jv"))))
7288 (build-system python-build-system)
7289 (native-inputs
7290 `(("python-six" ,python-six))) ; required for conversion, not at run-time
7291 (home-page
7292 "https://docs.python.org/3/library/functools.html#functools.singledispatch")
7293 (synopsis "Backport of singledispatch feature from Python 3.4")
7294 (description
7295 "This library brings functools.singledispatch from Python 3.4 to Python
7296 2.6-3.3.")
7297 (license license:expat)))
7298
7299 (define-public python2-singledispatch
7300 (package-with-python2 python-singledispatch))
7301
7302 ;; the python- version can be removed with python-3.5
7303 (define-public python-backports-abc
7304 (package
7305 (name "python-backports-abc")
7306 (version "0.5")
7307 (source
7308 (origin
7309 (method url-fetch)
7310 (uri (pypi-uri "backports_abc" version))
7311 (sha256
7312 (base32
7313 "1pkv8d1zxj5f9i227dxbjczncbv7ks7ywnjwyxfjagm02i2yafq3"))))
7314 (build-system python-build-system)
7315 (home-page "https://github.com/cython/backports_abc")
7316 (synopsis "Backport of additions to the 'collections.abc' module")
7317 (description
7318 "Python-backports-abc provides a backport of additions to the
7319 @code{collections.abc} module in Python-3.5.")
7320 (license license:psfl)))
7321
7322 (define-public python2-backports-abc
7323 (package-with-python2 python-backports-abc))
7324
7325 (define-public python-backports-csv
7326 (package
7327 (name "python-backports-csv")
7328 (version "1.0.7")
7329 (source
7330 (origin
7331 (method url-fetch)
7332 (uri (pypi-uri "backports.csv" version))
7333 (sha256
7334 (base32 "0vdx5jlhs91iizc8j8l8811nqprwvdx39pgkdc82w2qkfgzxyxqj"))))
7335 (build-system python-build-system)
7336 (home-page "https://github.com/ryanhiebert/backports.csv")
7337 (synopsis "Backport of Python 3's csv module for Python 2")
7338 (description
7339 "Provides a backport of Python 3's @code{csv} module for parsing
7340 comma separated values. The API of the @code{csv} module in Python 2
7341 is drastically different from the @code{csv} module in Python 3.
7342 This is due, for the most part, to the difference between str in
7343 Python 2 and Python 3.")
7344 (license license:psfl)))
7345
7346 (define-public python2-backports-csv
7347 (package-with-python2 python-backports-csv))
7348
7349 (define-public python2-backports-shutil-get-terminal-size
7350 (package
7351 (name "python2-backports-shutil-get-terminal-size")
7352 (version "1.0.0")
7353 (source
7354 (origin
7355 (method url-fetch)
7356 (uri (pypi-uri "backports.shutil_get_terminal_size" version))
7357 (sha256
7358 (base32
7359 "107cmn7g3jnbkp826zlj8rrj19fam301qvaqf0f3905f5217lgki"))))
7360 (build-system python-build-system)
7361 (arguments
7362 `(#:python ,python-2
7363 #:phases
7364 (modify-phases %standard-phases
7365 (replace 'check
7366 (lambda _
7367 (setenv "PYTHONPATH" (string-append "./build/lib:"
7368 (getenv "PYTHONPATH")))
7369 (invoke "py.test" "-v"))))))
7370 (native-inputs
7371 `(("python2-pytest" ,python2-pytest)))
7372 (home-page "https://github.com/chrippa/backports.shutil_get_terminal_size")
7373 (synopsis "Backport of Python 3.3's @code{shutil.get_terminal_size}")
7374 (description
7375 "This package provides a backport of the @code{get_terminal_size
7376 function} from Python 3.3's @code{shutil}.
7377 Unlike the original version it is written in pure Python rather than C,
7378 so it might be a tiny bit slower.")
7379 (license license:expat)))
7380
7381 (define-public python-waf
7382 (package
7383 (name "python-waf")
7384 (version "2.0.19")
7385 (source (origin
7386 (method url-fetch)
7387 (uri (string-append "https://waf.io/"
7388 "waf-" version ".tar.bz2"))
7389 (sha256
7390 (base32
7391 "19dvqbsvxz7ch03dh1v0znklrwxlz6yzddc3k9smzrrgny4jch6q"))))
7392 (build-system python-build-system)
7393 (arguments
7394 '(#:phases
7395 (modify-phases %standard-phases
7396 (replace 'build
7397 (lambda _
7398 ;; XXX: Find a way to add all extra tools.
7399 (let ((tools '("gccdeps"
7400 "clang_compilation_database")))
7401 (invoke "python" "waf-light" "configure" "build"
7402 (string-append "--tools="
7403 (string-join tools ","))))))
7404 (replace 'check
7405 (lambda _
7406 (invoke "python" "waf" "--version")))
7407 (replace 'install
7408 (lambda* (#:key outputs #:allow-other-keys)
7409 (let ((out (assoc-ref outputs "out")))
7410 (install-file "waf" (string-append out "/bin")))
7411 #t))
7412 ;; waf breaks when it is wrapped.
7413 (delete 'wrap))))
7414 (home-page "https://waf.io/")
7415 (synopsis "Python-based build system")
7416 (description
7417 "Waf is a Python-based framework for configuring, compiling and installing
7418 applications.")
7419 (license license:bsd-3)))
7420
7421 (define-public python2-waf
7422 (package-with-python2 python-waf))
7423
7424 (define-public python-pyzmq
7425 (package
7426 (name "python-pyzmq")
7427 (version "17.1.2")
7428 (source
7429 (origin
7430 (method url-fetch)
7431 (uri (pypi-uri "pyzmq" version))
7432 (sha256
7433 (base32 "1pyxxrz60f88ffm0y6vpbx3q8jcr9ybz8fcilihwzwhh36n84ax7"))))
7434 (build-system python-build-system)
7435 (arguments
7436 `(#:configure-flags
7437 (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
7438 ;; FIXME: You must build pyzmq with 'python setup.py build_ext
7439 ;; --inplace' for 'python setup.py test' to work.
7440 #:tests? #f))
7441 (inputs
7442 `(("zeromq" ,zeromq)))
7443 (native-inputs
7444 `(("pkg-config" ,pkg-config)
7445 ("python-nose" ,python-nose)))
7446 (home-page "https://github.com/zeromq/pyzmq")
7447 (synopsis "Python bindings for 0MQ")
7448 (description
7449 "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
7450 (license license:bsd-4)))
7451
7452 (define-public python2-pyzmq
7453 (package-with-python2 python-pyzmq))
7454
7455 (define-public python-pep8
7456 ;; This package has been renamed to ‘pycodestyle’ and is no longer updated.
7457 ;; Its last release (1.7.1) adds only a scary warning to this effect, breaking
7458 ;; some dependents' test suites, and nothing more.
7459 (package
7460 (name "python-pep8")
7461 (version "1.7.0")
7462 (source
7463 (origin
7464 (method url-fetch)
7465 (uri (pypi-uri "pep8" version))
7466 (sha256
7467 (base32
7468 "002rkl4lsn6x2mxmf8ar00l0m8i3mzrc6pnzz77blyksmpsxa4x1"))
7469 (patches (search-patches "python-pep8-stdlib-tokenize-compat.patch"))))
7470 (build-system python-build-system)
7471 (home-page "https://pep8.readthedocs.org/")
7472 (synopsis "Python style guide checker")
7473 (description
7474 "This tools checks Python code against some of the style conventions in
7475 PEP 8.")
7476 (license license:expat)))
7477
7478 (define-public python2-pep8
7479 (package-with-python2 python-pep8))
7480
7481 (define-public python-pyflakes
7482 (package
7483 (name "python-pyflakes")
7484 (version "2.2.0")
7485 (source
7486 (origin
7487 (method url-fetch)
7488 (uri (pypi-uri "pyflakes" version))
7489 (sha256
7490 (base32
7491 "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim"))))
7492 (build-system python-build-system)
7493 (home-page
7494 "https://github.com/pyflakes/pyflakes")
7495 (synopsis "Passive checker of Python programs")
7496 (description
7497 "Pyflakes statically checks Python source code for common errors.")
7498 (license license:expat)))
7499
7500 (define-public python2-pyflakes
7501 (package-with-python2 python-pyflakes))
7502
7503 ;; Flake8 2.6 requires an older version of pyflakes.
7504 ;; This should be removed ASAP.
7505 (define-public python-pyflakes-1.2
7506 (package (inherit python-pyflakes)
7507 (version "1.2.3")
7508 (source
7509 (origin
7510 (method url-fetch)
7511 (uri (pypi-uri "pyflakes" version))
7512 (sha256
7513 (base32
7514 "17hkw8yd44cr8fz13phy4aih3r5j2p7ild4zlvqdh2c8dmiinjif"))))
7515 (arguments
7516 '(#:phases
7517 (modify-phases %standard-phases
7518 ;; This one test fails.
7519 (replace 'check
7520 (lambda _ (invoke "pytest" "-vv" "-k" "not test_f_string"))))))
7521 (native-inputs
7522 `(("python-pytest" ,python-pytest)))))
7523
7524 (define-public python-mccabe
7525 (package
7526 (name "python-mccabe")
7527 (version "0.6.1")
7528 (source
7529 (origin
7530 (method url-fetch)
7531 (uri (pypi-uri "mccabe" version))
7532 (sha256
7533 (base32
7534 "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx"))))
7535 (build-system python-build-system)
7536 (native-inputs
7537 `(("python-pytest" ,python-pytest-bootstrap)
7538 ("python-pytest-runner" ,python-pytest-runner)))
7539 (home-page "https://github.com/flintwork/mccabe")
7540 (synopsis "McCabe checker, plugin for flake8")
7541 (description
7542 "This package provides a Flake8 plug-in to compute the McCabe cyclomatic
7543 complexity of Python source code.")
7544 (license license:expat)))
7545
7546 (define-public python2-mccabe
7547 (package-with-python2 python-mccabe))
7548
7549 (define-public python-mccabe-0.2.1
7550 (package (inherit python-mccabe)
7551 (version "0.2.1")
7552 (source
7553 (origin
7554 (method url-fetch)
7555 (uri (pypi-uri "mccabe" version))
7556 (sha256
7557 (base32
7558 "0fi4a81kr5bcv5p4xgibqr595hyj5dafkqgsmfk96mfy8w71fajs"))))))
7559
7560 (define-public python2-mccabe-0.2.1
7561 (package-with-python2 python-mccabe-0.2.1))
7562
7563 ;; Flake8 2.4.1 requires an older version of pep8.
7564 ;; This should be removed ASAP.
7565 (define-public python-pep8-1.5.7
7566 (package (inherit python-pep8)
7567 (version "1.5.7")
7568 (source
7569 (origin
7570 (method url-fetch)
7571 (uri (pypi-uri "pep8" version))
7572 (sha256
7573 (base32
7574 "12b9bbdbwnspxgak14xg58c130x2n0blxzlms5jn2dszn8qj3d0m"))))
7575 (arguments
7576 ;; XXX Tests not compatible with Python 3.5.
7577 '(#:tests? #f))))
7578
7579 (define-public python2-pep8-1.5.7
7580 (package-with-python2 python-pep8-1.5.7))
7581
7582 (define-public python-flake8
7583 (package
7584 (name "python-flake8")
7585 (version "3.8.3")
7586 (source (origin
7587 (method url-fetch)
7588 (uri (pypi-uri "flake8" version))
7589 (sha256
7590 (base32
7591 "02527892hh0qjivxaiphzalj7q32qkna1cqaikjs7c03mk5ryjzh"))))
7592 (build-system python-build-system)
7593 (arguments
7594 `(#:phases
7595 (modify-phases %standard-phases
7596 (delete 'check)
7597 (add-after 'install 'check
7598 (lambda* (#:key inputs outputs #:allow-other-keys)
7599 (add-installed-pythonpath inputs outputs)
7600 (invoke "pytest" "-v")
7601 #t)))))
7602 (propagated-inputs
7603 `(("python-pycodestyle" ,python-pycodestyle)
7604 ("python-entrypoints" ,python-entrypoints)
7605 ("python-pyflakes" ,python-pyflakes)
7606 ("python-mccabe" ,python-mccabe)))
7607 (native-inputs
7608 `(("python-mock" ,python-mock)
7609 ("python-pytest" ,python-pytest-bootstrap)))
7610 (home-page "https://gitlab.com/pycqa/flake8")
7611 (synopsis
7612 "The modular source code checker: pep8, pyflakes and co")
7613 (description
7614 "Flake8 is a wrapper around PyFlakes, pep8 and python-mccabe.")
7615 (properties `((python2-variant . ,(delay python2-flake8))))
7616 (license license:expat)))
7617
7618 (define-public python2-flake8
7619 (let ((base (package-with-python2 (strip-python2-variant python-flake8))))
7620 (package (inherit base)
7621 (propagated-inputs
7622 `(("python2-configparser" ,python2-configparser)
7623 ("python2-enum34" ,python2-enum34)
7624 ("python2-functools32" ,python2-functools32)
7625 ("python2-typing" ,python2-typing)
7626 ,@(package-propagated-inputs base))))))
7627
7628 ;; python-hacking requires flake8 <2.7.0.
7629 (define-public python-flake8-2.6
7630 (package
7631 (inherit python-flake8)
7632 (version "2.6.2")
7633 (source (origin
7634 (method url-fetch)
7635 (uri (pypi-uri "flake8" version))
7636 (sha256
7637 (base32
7638 "0y57hzal0j84dh9i1g1g6dc4aywvrnhy2fjmmbglpv5ajihxh713"))))
7639 (arguments
7640 `(#:phases
7641 (modify-phases %standard-phases
7642 (add-after 'unpack 'use-later-pycodestyles
7643 (lambda __
7644 (substitute* '("flake8.egg-info/requires.txt"
7645 "setup.py")
7646 (("pycodestyle >= 2.0, < 2.1")
7647 "pycodestyle >= 2.0"))
7648 #t))
7649 (delete 'check)
7650 (add-after 'install 'check
7651 (lambda* (#:key inputs outputs #:allow-other-keys)
7652 (add-installed-pythonpath inputs outputs)
7653 (invoke "pytest" "-v")
7654 #t)))))
7655 (propagated-inputs
7656 `(("python-pep8" ,python-pep8)
7657 ("python-pycodestyle" ,python-pycodestyle)
7658 ("python-entrypoints" ,python-entrypoints)
7659 ("python-pyflakes" ,python-pyflakes-1.2)
7660 ("python-mccabe" ,python-mccabe)))))
7661
7662 (define-public python-flake8-polyfill
7663 (package
7664 (name "python-flake8-polyfill")
7665 (version "1.0.2")
7666 (source
7667 (origin
7668 (method url-fetch)
7669 (uri (pypi-uri "flake8-polyfill" version))
7670 (sha256
7671 (base32
7672 "1nlf1mkqw856vi6782qcglqhaacb23khk9wkcgn55npnjxshhjz4"))))
7673 (build-system python-build-system)
7674 (arguments
7675 '(#:phases
7676 (modify-phases %standard-phases
7677 (replace 'check
7678 (lambda _
7679 ;; Be compatible with Pytest 4:
7680 ;; https://gitlab.com/pycqa/flake8-polyfill/merge_requests/7
7681 (substitute* "setup.cfg"
7682 (("\\[pytest\\]")
7683 "[tool:pytest]"))
7684
7685 (setenv "PYTHONPATH"
7686 (string-append (getcwd) "/build/lib:"
7687 (getenv "PYTHONPATH")))
7688 (invoke "py.test" "-v"))))))
7689 (native-inputs
7690 `(("python-flake8" ,python-flake8)
7691 ("python-mock" ,python-mock)
7692 ("python-pep8" ,python-pep8)
7693 ("python-pycodestyle" ,python-pycodestyle)
7694 ("python-pytest" ,python-pytest)))
7695 (home-page "https://gitlab.com/pycqa/flake8-polyfill")
7696 (synopsis "Polyfill package for Flake8 plugins")
7697 (description
7698 "This package that provides some compatibility helpers for Flake8
7699 plugins that intend to support Flake8 2.x and 3.x simultaneously.")
7700 (license license:expat)))
7701
7702 (define-public python2-flake8-polyfill
7703 (package-with-python2 python-flake8-polyfill))
7704
7705 (define-public python-mistune
7706 (package
7707 (name "python-mistune")
7708 (version "0.8.4")
7709 (source
7710 (origin
7711 (method url-fetch)
7712 (uri (pypi-uri "mistune" version))
7713 (sha256
7714 (base32
7715 "0vkmsh0x480rni51lhyvigfdf06b9247z868pk3bal1wnnfl58sr"))))
7716 (build-system python-build-system)
7717 (native-inputs
7718 `(("python-nose" ,python-nose)
7719 ("python-cython" ,python-cython)))
7720 (home-page "https://github.com/lepture/mistune")
7721 (synopsis "Markdown parser in pure Python")
7722 (description "This package provides a fast markdown parser in pure
7723 Python.")
7724 (license license:bsd-3)))
7725
7726 (define-public python2-mistune
7727 (package-with-python2 python-mistune))
7728
7729 (define-public python-markdown
7730 (package
7731 (name "python-markdown")
7732 (version "3.2.1")
7733 (source
7734 (origin
7735 (method url-fetch)
7736 (uri (pypi-uri "Markdown" version))
7737 (sha256
7738 (base32
7739 "00k91gwhxnm8jdnm2v5xjz9irj6dbi7afywz2hpakqdbxs1ydzlh"))))
7740 (build-system python-build-system)
7741 (native-inputs
7742 `(("python-nose" ,python-nose)
7743 ("python-pyyaml" ,python-pyyaml)))
7744 (home-page "https://python-markdown.github.io/")
7745 (synopsis "Python implementation of Markdown")
7746 (description
7747 "This package provides a Python implementation of John Gruber's
7748 Markdown. The library features international input, various Markdown
7749 extensions, and several HTML output formats. A command line wrapper
7750 markdown_py is also provided to convert Markdown files to HTML.")
7751 (properties `((python2-variant . ,(delay python2-markdown))))
7752 (license license:bsd-3)))
7753
7754 ;; Markdown 3.2 dropped support for Python 2.
7755 (define-public python2-markdown
7756 (let ((base (package-with-python2 (strip-python2-variant python-markdown))))
7757 (package/inherit
7758 base
7759 (version "3.1.1")
7760 (source (origin
7761 (method url-fetch)
7762 (uri (pypi-uri "Markdown" version))
7763 (sha256
7764 (base32
7765 "0yhylk4ffqqs7x086fav4pnfsl1021v7lghznzkififprmmqfl1f")))))))
7766
7767 (define-public python-ptyprocess
7768 (package
7769 (name "python-ptyprocess")
7770 (version "0.5.2")
7771 (source
7772 (origin
7773 (method url-fetch)
7774 (uri (pypi-uri "ptyprocess" version))
7775 (sha256
7776 (base32
7777 "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
7778 (build-system python-build-system)
7779 (native-inputs
7780 `(("python-nose" ,python-nose)))
7781 (arguments
7782 `(#:phases
7783 (modify-phases %standard-phases
7784 (replace 'check
7785 (lambda _ (invoke "nosetests"))))))
7786 (home-page "https://github.com/pexpect/ptyprocess")
7787 (synopsis "Run a subprocess in a pseudo terminal")
7788 (description
7789 "This package provides a Python library used to launch a subprocess in a
7790 pseudo terminal (pty), and interact with both the process and its pty.")
7791 (license license:isc)))
7792
7793 (define-public python2-ptyprocess
7794 (package-with-python2 python-ptyprocess))
7795
7796 (define-public python-cram
7797 (package
7798 (name "python-cram")
7799 (version "0.7")
7800 (home-page "https://bitheap.org/cram/")
7801 (source (origin
7802 (method url-fetch)
7803 (uri (list (string-append home-page "cram-"
7804 version ".tar.gz")
7805 (pypi-uri "cram" version)))
7806 (sha256
7807 (base32
7808 "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))
7809 (arguments
7810 '(#:phases
7811 (modify-phases %standard-phases
7812 (add-after 'unpack 'patch-source
7813 (lambda _
7814 (substitute* (find-files "cram" ".*\\.py$")
7815 ;; Replace default shell path.
7816 (("/bin/sh") (which "sh")))
7817 (substitute* (find-files "tests" ".*\\.t$")
7818 (("md5") "md5sum")
7819 (("/bin/bash") (which "bash"))
7820 (("/bin/sh") (which "sh")))
7821 (substitute* "cram/_test.py"
7822 ;; This hack works around a bug triggered by substituting
7823 ;; the /bin/sh paths. "tests/usage.t" compares the output of
7824 ;; "cram -h", which breaks the output at 80 characters. This
7825 ;; causes the line showing the default shell to break into two
7826 ;; lines, but the test expects a single line...
7827 (("env\\['COLUMNS'\\] = '80'")
7828 "env['COLUMNS'] = '160'"))
7829
7830 (substitute* "Makefile"
7831 ;; Recent versions of python-coverage have caused the test
7832 ;; coverage to decrease (as of version 0.7). Allow that.
7833 (("--fail-under=100")
7834 "--fail-under=90"))
7835
7836 #t))
7837 (replace 'check
7838 ;; The test phase uses the built library and executable.
7839 (lambda* (#:key inputs outputs #:allow-other-keys)
7840 (add-installed-pythonpath inputs outputs)
7841 (setenv "PATH" (string-append (getenv "PATH") ":"
7842 (assoc-ref outputs "out") "/bin"))
7843 (invoke "make" "test"))))))
7844 (build-system python-build-system)
7845 (native-inputs
7846 `(("python-coverage" ,python-coverage)
7847 ("which" ,which)))
7848 (synopsis "Simple testing framework for command line applications")
7849 (description
7850 "Cram is a functional testing framework for command line applications.
7851 Cram tests look like snippets of interactive shell sessions. Cram runs each
7852 command and compares the command output in the test with the command’s actual
7853 output.")
7854 (license license:gpl2+)))
7855
7856 (define-public python2-cram
7857 (package-with-python2 python-cram))
7858
7859 (define-public python-straight-plugin
7860 (package
7861 (name "python-straight-plugin")
7862 (version "1.4.1")
7863 (source
7864 (origin
7865 (method url-fetch)
7866 (uri (pypi-uri "straight.plugin" version))
7867 (sha256
7868 (base32
7869 "069pjll4383p4kkgvcc40hgyvf79j2wdbpgwz77yigzxksh1gj62"))))
7870 (build-system python-build-system)
7871 (home-page "https://github.com/ironfroggy/straight.plugin")
7872 (synopsis "Simple namespaced plugin facility")
7873 (description "Straight Plugin provides a type of plugin you can create from
7874 almost any existing Python modules, and an easy way for outside developers to
7875 add functionality and customization to your projects with their own plugins.")
7876 (license license:expat)))
7877
7878 (define-public python2-straight-plugin
7879 (package-with-python2 python-straight-plugin))
7880
7881 (define-public python-fonttools
7882 (package
7883 (name "python-fonttools")
7884 (version "4.6.0")
7885 (source (origin
7886 (method url-fetch)
7887 (uri (pypi-uri "fonttools" version ".zip"))
7888 (sha256
7889 (base32
7890 "1mq9kdzhcsp96bhv7smnrpdg1s4z5wh70bsl99c0jmcrahqdisqq"))))
7891 (build-system python-build-system)
7892 (native-inputs
7893 `(("unzip" ,unzip)
7894 ("python-pytest" ,python-pytest)
7895 ("python-pytest-runner" ,python-pytest-runner)))
7896 (home-page "https://github.com/fonttools/fonttools")
7897 (synopsis "Tools to manipulate font files")
7898 (description
7899 "FontTools/TTX is a library to manipulate font files from Python. It
7900 supports reading and writing of TrueType/OpenType fonts, reading and writing
7901 of AFM files, reading (and partially writing) of PS Type 1 fonts. The package
7902 also contains a tool called “TTX” which converts TrueType/OpenType fonts to and
7903 from an XML-based format.")
7904 (license license:expat)))
7905
7906 ;; Fonttools 4.x dropped support for Python 2, so stick with 3.x here.
7907 (define-public python2-fonttools
7908 (let ((base (package-with-python2 (strip-python2-variant python-fonttools))))
7909 (package/inherit
7910 base
7911 (version "3.44.0")
7912 (source (origin
7913 (method url-fetch)
7914 (uri (pypi-uri "fonttools" version ".zip"))
7915 (sha256
7916 (base32
7917 "0v6399g755f2hn1ry62i5b6gdinf2fpx2966v3bxh6bjw1accb5p")))))))
7918
7919 (define-public python-ly
7920 (package
7921 (name "python-ly")
7922 (version "0.9.5")
7923 (source
7924 (origin
7925 (method url-fetch)
7926 (uri (pypi-uri name version))
7927 (sha256
7928 (base32
7929 "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
7930 (build-system python-build-system)
7931 (arguments
7932 ;; FIXME: Some tests need network access.
7933 '(#:tests? #f))
7934 (synopsis "Tool and library for manipulating LilyPond files")
7935 (description "This package provides a Python library to parse, manipulate
7936 or create documents in LilyPond format. A command line program ly is also
7937 provided that can be used to do various manipulations with LilyPond files.")
7938 (home-page "https://pypi.org/project/python-ly/")
7939 (license license:gpl2+)))
7940
7941 (define-public python-appdirs
7942 (package
7943 (name "python-appdirs")
7944 (version "1.4.3")
7945 (source
7946 (origin
7947 (method url-fetch)
7948 (uri (pypi-uri "appdirs" version))
7949 (sha256
7950 (base32
7951 "14id6wxi12lgyw0mg3bcfnf888ad07jz9yj46gfzhn186z8rcn4y"))))
7952 (build-system python-build-system)
7953 (home-page "https://github.com/ActiveState/appdirs")
7954 (synopsis
7955 "Determine platform-specific dirs, e.g. a \"user data dir\"")
7956 (description
7957 "This module provides a portable way of finding out where user data
7958 should be stored on various operating systems.")
7959 (license license:expat)))
7960
7961 (define-public python2-appdirs
7962 (package-with-python2 python-appdirs))
7963
7964 (define-public python-llfuse
7965 (package
7966 (name "python-llfuse")
7967 (version "1.3.6")
7968 (source (origin
7969 (method url-fetch)
7970 (uri (pypi-uri "llfuse" version ".tar.bz2"))
7971 (sha256
7972 (base32
7973 "1j9fzxpgmb4rxxyl9jcf84zvznhgi3hnh4hg5vb0qaslxkvng8ii"))))
7974 (build-system python-build-system)
7975 (inputs
7976 `(("fuse" ,fuse)
7977 ("attr" ,attr)))
7978 (native-inputs
7979 `(("pkg-config" ,pkg-config)))
7980 (synopsis "Python bindings for FUSE")
7981 (description
7982 "Python-LLFUSE is a set of Python bindings for the low level FUSE API.")
7983 (home-page "https://bitbucket.org/nikratio/python-llfuse/")
7984 (license license:lgpl2.0+)
7985 (properties `((python2-variant . ,(delay python2-llfuse))))))
7986
7987 (define-public python2-llfuse
7988 (package (inherit (package-with-python2
7989 (strip-python2-variant python-llfuse)))
7990 (propagated-inputs `(("python2-contextlib2" ,python2-contextlib2)))))
7991
7992 ;; For attic-0.16
7993 (define-public python-llfuse-0.41
7994 (package (inherit python-llfuse)
7995 (version "0.41.1")
7996 (source (origin
7997 (method url-fetch)
7998 (uri (string-append
7999 "https://bitbucket.org/nikratio/python-llfuse/downloads/"
8000 "llfuse-" version ".tar.bz2"))
8001 (sha256
8002 (base32
8003 "1imlqw9b73086y97izr036f58pgc5akv4ihc2rrf8j5h75jbrlaa"))))
8004 ;; Python-LLFUSE < 0.42 includes underscore.js, which is MIT (expat)
8005 ;; licensed. The rest of the package is licensed under LGPL2.0 or later.
8006 (license (list license:expat license:lgpl2.0+))))
8007
8008 (define-public python-msgpack
8009 (package
8010 (name "python-msgpack")
8011 (version "1.0.0")
8012 (source (origin
8013 (method url-fetch)
8014 (uri (pypi-uri "msgpack" version))
8015 (sha256
8016 (base32
8017 "1h5mxh84rcw04dvxy1qbfn2hisavfqgilh9k09rgyjhd936dad4m"))))
8018 (build-system python-build-system)
8019 (arguments
8020 `(#:modules ((guix build utils)
8021 (guix build python-build-system)
8022 (ice-9 ftw)
8023 (srfi srfi-1)
8024 (srfi srfi-26))
8025 #:phases
8026 (modify-phases %standard-phases
8027 (replace 'check
8028 (lambda _
8029 (let ((cwd (getcwd)))
8030 (setenv "PYTHONPATH"
8031 (string-append cwd "/build/"
8032 (find (cut string-prefix? "lib" <>)
8033 (scandir (string-append cwd "/build")))
8034 ":"
8035 (getenv "PYTHONPATH")))
8036 (invoke "pytest" "-v" "test")))))))
8037 (native-inputs
8038 `(("python-pytest" ,python-pytest)))
8039 (synopsis "MessagePack (de)serializer")
8040 (description "MessagePack is a fast, compact binary serialization format,
8041 suitable for similar data to JSON. This package provides CPython bindings for
8042 reading and writing MessagePack data.")
8043 (home-page "https://pypi.org/project/msgpack/")
8044 (license license:asl2.0)))
8045
8046 ;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
8047 ;; release 0.5. Some packages like borg still call it by the old name for now.
8048 ;; <https://bugs.gnu.org/30662>
8049 (define-public python-msgpack-transitional
8050 (package
8051 (inherit python-msgpack)
8052 (name "python-msgpack-transitional")
8053 (version "0.5.6")
8054 (source (origin
8055 (method url-fetch)
8056 (uri (pypi-uri "msgpack" version))
8057 (sha256
8058 (base32
8059 "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
8060 (arguments
8061 (substitute-keyword-arguments (package-arguments python-msgpack)
8062 ((#:phases phases)
8063 `(modify-phases ,phases
8064 (add-after 'unpack 'configure-transitional
8065 (lambda _
8066 ;; Keep using the old name.
8067 (substitute* "setup.py"
8068 (("TRANSITIONAL = False")
8069 "TRANSITIONAL = 1"))
8070 #t))))))))
8071
8072 (define-public python2-msgpack
8073 (package-with-python2 python-msgpack))
8074
8075 (define-public python-netaddr
8076 (package
8077 (name "python-netaddr")
8078 (version "0.7.19")
8079 (source
8080 (origin
8081 (method url-fetch)
8082 (uri (pypi-uri "netaddr" version))
8083 (sha256
8084 (base32
8085 "1zdfadvpq4lmcqzr383gywxn4xyn355kj1n3lk9q2l03vmyfrbiq"))))
8086 (build-system python-build-system)
8087 (arguments `(#:tests? #f)) ;; No tests.
8088 (home-page "https://github.com/drkjam/netaddr/")
8089 (synopsis "Pythonic manipulation of network addresses")
8090 (description
8091 "A Python library for representing and manipulating IPv4, IPv6, CIDR, EUI
8092 and MAC network addresses.")
8093 (license license:bsd-3)))
8094
8095 (define-public python2-netaddr
8096 (package-with-python2 python-netaddr))
8097
8098 (define-public python2-pyroute2
8099 (package
8100 (name "python2-pyroute2")
8101 (version "0.5.6")
8102 (source
8103 (origin
8104 (method url-fetch)
8105 (uri (pypi-uri "pyroute2" version))
8106 (sha256
8107 (base32
8108 "1gmz4r1w0yzj6fjjypnalmfyy0lnfznydyn62gi3wk50j5hhxbny"))))
8109 (build-system python-build-system)
8110 (arguments
8111 `(#:python ,python-2)) ;Python 3.x is not supported
8112 (home-page "https://github.com/svinota/pyroute2")
8113 (synopsis "Python netlink library")
8114 (description
8115 "Pyroute2 is a pure Python netlink library with minimal dependencies.
8116 Supported netlink families and protocols include:
8117 @itemize
8118 @item rtnl, network settings - addresses, routes, traffic controls
8119 @item nfnetlink - netfilter API: ipset, nftables, ...
8120 @item ipq - simplest userspace packet filtering, iptables QUEUE target
8121 @item devlink - manage and monitor devlink-enabled hardware
8122 @item generic - generic netlink families
8123 @itemize
8124 @item nl80211 - wireless functions API (basic support)
8125 @item taskstats - extended process statistics
8126 @item acpi_events - ACPI events monitoring
8127 @item thermal_events - thermal events monitoring
8128 @item VFS_DQUOT - disk quota events monitoring
8129 @end itemize
8130 @end itemize")
8131 (license license:gpl2+)))
8132
8133 (define-public python-wrapt
8134 (package
8135 (name "python-wrapt")
8136 (version "1.11.2")
8137 (source
8138 (origin
8139 (method url-fetch)
8140 (uri (pypi-uri "wrapt" version))
8141 (sha256
8142 (base32
8143 "1q81762dgsgrd12f8qc39zk8s5wll3m5xc32jdmlf6cls4gh4njn"))))
8144 (build-system python-build-system)
8145 (arguments
8146 ;; Tests are not included in the tarball, they are only available in the
8147 ;; git repository.
8148 `(#:tests? #f))
8149 (home-page "https://github.com/GrahamDumpleton/wrapt")
8150 (synopsis "Module for decorators, wrappers and monkey patching")
8151 (description
8152 "The aim of the wrapt module is to provide a transparent object proxy for
8153 Python, which can be used as the basis for the construction of function
8154 wrappers and decorator functions.")
8155 (license license:bsd-2)))
8156
8157 (define-public python2-wrapt
8158 (package-with-python2 python-wrapt))
8159
8160 (define-public python-xlrd
8161 (package
8162 (name "python-xlrd")
8163 (version "1.2.0")
8164 (source (origin
8165 (method url-fetch)
8166 (uri (pypi-uri "xlrd" version))
8167 (sha256
8168 (base32
8169 "1ci93fda4n67qhdvfl16zasyxrpygzk53hs6m8z0rd4dxrnb6vjl"))))
8170 (build-system python-build-system)
8171 (arguments
8172 `(#:phases
8173 (modify-phases %standard-phases
8174 ;; Some tests depend on writing a temporary file to the user's home
8175 ;; directory.
8176 (add-after 'unpack 'fix-tests
8177 (lambda _
8178 (delete-file "tests/test_open_workbook.py")
8179 #t)))))
8180 (home-page "http://www.python-excel.org/")
8181 (synopsis "Library for extracting data from Excel files")
8182 (description "This package provides a library to extract data from
8183 spreadsheets using Microsoft Excel proprietary file formats @samp{.xls} and
8184 @samp{.xlsx} (versions 2.0 onwards). It has support for Excel dates and is
8185 Unicode-aware. It is not intended as an end-user tool.")
8186 (license license:bsd-3)))
8187
8188 (define-public python2-xlrd
8189 (package-with-python2 python-xlrd))
8190
8191 (define-public python-prettytable
8192 (package
8193 (name "python-prettytable")
8194 (version "0.7.2")
8195 (source
8196 (origin
8197 (method url-fetch)
8198 (uri (pypi-uri "prettytable" version ".tar.bz2"))
8199 (sha256
8200 (base32
8201 "0diwsicwmiq2cpzpxri7cyl5fmsvicafw6nfqf6p6p322dji2g45"))))
8202 (build-system python-build-system)
8203 (home-page "https://code.google.com/archive/p/prettytable/")
8204 (synopsis "Display tabular data in an ASCII table format")
8205 (description
8206 "A library designed to represent tabular data in visually appealing ASCII
8207 tables. PrettyTable allows for selection of which columns are to be printed,
8208 independent alignment of columns (left or right justified or centred) and
8209 printing of sub-tables by specifying a row range.")
8210 (license license:bsd-3)))
8211
8212 (define-public python2-prettytable
8213 (package-with-python2 python-prettytable))
8214
8215 (define-public python-tables
8216 (package
8217 (name "python-tables")
8218 (version "3.6.1")
8219 (source
8220 (origin
8221 (method url-fetch)
8222 (uri (pypi-uri "tables" version))
8223 (sha256
8224 (base32
8225 "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9"))
8226 (modules '((guix build utils)))
8227 (snippet
8228 '(begin
8229 ;; Remove pre-compiled .pyc files from source.
8230 (for-each delete-file-recursively
8231 (find-files "." "__pycache__" #:directories? #t))
8232 (for-each delete-file (find-files "." "\\.pyc$"))
8233 #t))))
8234 (build-system python-build-system)
8235 (arguments
8236 `(;; FIXME: python-build-system does not pass configure-flags to "build"
8237 ;; or "check", so we must override the build and check phases.
8238 #:phases
8239 (modify-phases %standard-phases
8240 (add-after 'unpack 'use-gcc
8241 (lambda _
8242 (substitute* "setup.py"
8243 (("^( +)compiler = new_compiler\\(\\)" line indent)
8244 (string-append line
8245 "\n"
8246 indent
8247 "compiler.set_executables(compiler='gcc',"
8248 "compiler_so='gcc',"
8249 "linker_exe='gcc',"
8250 "linker_so='gcc -shared')")))
8251 #t))
8252 (add-after 'unpack 'disable-tuning
8253 (lambda _
8254 (substitute* "setup.py"
8255 (("cpu_flags = .*")
8256 "cpu_flags = ['sse2']\n"))
8257 #t))
8258 (replace 'build
8259 (lambda* (#:key inputs #:allow-other-keys)
8260 (invoke "python" "setup.py" "build"
8261 (string-append "--hdf5="
8262 (assoc-ref inputs "hdf5")))))
8263 (replace 'check
8264 (lambda* (#:key inputs #:allow-other-keys)
8265 (invoke "python" "setup.py" "check"
8266 (string-append "--hdf5="
8267 (assoc-ref inputs "hdf5"))))))))
8268 (propagated-inputs
8269 `(("python-numexpr" ,python-numexpr)
8270 ("python-numpy" ,python-numpy)))
8271 (native-inputs
8272 `(("python-cython" ,python-cython)
8273 ("pkg-config" ,pkg-config)))
8274 (inputs
8275 `(("hdf5" ,hdf5-1.10)
8276 ("bzip2" ,bzip2)
8277 ("zlib" ,zlib)))
8278 (home-page "https://www.pytables.org/")
8279 (synopsis "Hierarchical datasets for Python")
8280 (description "PyTables is a package for managing hierarchical datasets and
8281 designed to efficiently cope with extremely large amounts of data.")
8282 (license license:bsd-3)))
8283
8284 (define-public python2-tables
8285 (package-with-python2 python-tables))
8286
8287 (define-public python-pytest-black
8288 (package
8289 (name "python-pytest-black")
8290 (version "0.3.8")
8291 (source
8292 (origin
8293 (method url-fetch)
8294 (uri (pypi-uri "pytest-black" version))
8295 (sha256
8296 (base32
8297 "04lppqydxm0f3f3x0l8hj7v0j6d8syj34jc37yzqwqcyqsnaga81"))))
8298 (build-system python-build-system)
8299 (propagated-inputs
8300 `(("python-pytest" ,python-pytest)
8301 ("python-black" ,python-black)
8302 ("python-toml" ,python-toml)))
8303 (native-inputs
8304 `(("python-setuptools-scm" ,python-setuptools-scm)))
8305 (home-page "https://github.com/shopkeep/pytest-black")
8306 (synopsis "Pytest plugin to enable format checking with black")
8307 (description
8308 "This package provides a pytest plugin to enable format checking with the
8309 Python code formatter \"black\".")
8310 (license license:expat)))
8311
8312 (define-public python-get-version
8313 (package
8314 (name "python-get-version")
8315 (version "2.1")
8316 (source
8317 (origin
8318 (method url-fetch)
8319 (uri (pypi-uri "get_version" version))
8320 (sha256
8321 (base32
8322 "1g15jyx33vkxavv9hwv275cs4g9bp2i1y942raw3fxamq8kbaml1"))))
8323 (build-system python-build-system)
8324 (propagated-inputs
8325 `(("python-pygments" ,python-pygments)
8326 ("python-pytest" ,python-pytest)
8327 ("python-pytest-black" ,python-pytest-black)
8328 ("python-pytest-cov" ,python-pytest-cov)
8329 ("python-setuptools" ,python-setuptools)
8330 ("python-testpath" ,python-testpath)))
8331 (home-page "https://github.com/flying-sheep/get_version")
8332 (synopsis "Version helper in the spirit of versioneer")
8333 (description
8334 "This package provides a version helper that lets you automatically use
8335 the latest @code{vX.X.X} Git tag as the version in your Python package. It
8336 also supports getting the version from Python source distributions or, once
8337 your package is installed, via @code{pkg_resources} (part of
8338 @code{setuptools}).")
8339 (license license:gpl3+)))
8340
8341 (define-public python-legacy-api-wrap
8342 (package
8343 (name "python-legacy-api-wrap")
8344 (version "1.2")
8345 (source
8346 (origin
8347 (method url-fetch)
8348 (uri (pypi-uri "legacy-api-wrap" version))
8349 (sha256
8350 (base32
8351 "06qhp0g543dy98vpa41hwdalvdbsjfc3ldk474yr9sd75mhl8jh3"))))
8352 (build-system python-build-system)
8353 (propagated-inputs
8354 `(("python-get-version" ,python-get-version)
8355 ("python-pytest" ,python-pytest)
8356 ("python-pytest-black" ,python-pytest-black)
8357 ("python-pytest-cov" ,python-pytest-cov)
8358 ("python-setuptools" ,python-setuptools)))
8359 (home-page "https://github.com/flying-sheep/legacy-api-wrap")
8360 (synopsis "Legacy API wrapper")
8361 (description "This module defines a decorator to wrap legacy APIs. The
8362 primary use case is APIs defined before keyword-only parameters existed.")
8363 (license license:gpl3+)))
8364
8365 (define-public python-pyasn1
8366 (package
8367 (name "python-pyasn1")
8368 (version "0.4.8")
8369 (source
8370 (origin
8371 (method url-fetch)
8372 (uri (pypi-uri "pyasn1" version))
8373 (sha256
8374 (base32
8375 "1fnhbi3rmk47l9851gbik0flfr64vs5j0hbqx24cafjap6gprxxf"))))
8376 (build-system python-build-system)
8377 (home-page "http://pyasn1.sourceforge.net/")
8378 (synopsis "ASN.1 types and codecs")
8379 (description
8380 "This is an implementation of ASN.1 types and codecs in Python. It is
8381 suitable for a wide range of protocols based on the ASN.1 specification.")
8382 (license license:bsd-2)))
8383
8384 (define-public python2-pyasn1
8385 (package-with-python2 python-pyasn1))
8386
8387 (define-public python-pyasn1-modules
8388 (package
8389 (name "python-pyasn1-modules")
8390 (version "0.2.2")
8391 (source
8392 (origin
8393 (method url-fetch)
8394 (uri (pypi-uri "pyasn1-modules" version))
8395 (sha256
8396 (base32
8397 "0ivm850yi7ajjbi8j115qpsj95bgxdsx48nbjzg0zip788c3xkx0"))))
8398 (build-system python-build-system)
8399 (propagated-inputs
8400 `(("python-pyasn1" ,python-pyasn1)))
8401 (home-page "https://sourceforge.net/projects/pyasn1/")
8402 (synopsis "ASN.1 codec implementations")
8403 (description
8404 "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
8405 implementations of ASN.1-based codecs and protocols.")
8406 (license license:bsd-3)))
8407
8408 (define-public python2-pyasn1-modules
8409 (package-with-python2 python-pyasn1-modules))
8410
8411 (define-public python-ipaddress
8412 (package
8413 (name "python-ipaddress")
8414 (version "1.0.22")
8415 (source (origin
8416 (method url-fetch)
8417 (uri (pypi-uri "ipaddress" version))
8418 (sha256
8419 (base32
8420 "0b570bm6xqpjwqis15pvdy6lyvvzfndjvkynilcddjj5x98wfimi"))))
8421 (build-system python-build-system)
8422 (home-page "https://github.com/phihag/ipaddress")
8423 (synopsis "IP address manipulation library")
8424 (description
8425 "This package provides a fast, lightweight IPv4/IPv6 manipulation library
8426 in Python. This library is used to create, poke at, and manipulate IPv4 and
8427 IPv6 addresses and networks. This is a port of the Python 3.3 ipaddress
8428 module to older versions of Python.")
8429 (license license:psfl)))
8430
8431 (define-public python2-ipaddress
8432 (package-with-python2 python-ipaddress))
8433
8434 (define-public python2-ipaddr
8435 (package
8436 (name "python2-ipaddr")
8437 (version "2.1.11")
8438 (source
8439 (origin
8440 (method url-fetch)
8441 (uri (pypi-uri "ipaddr" version))
8442 (sha256
8443 (base32 "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))
8444 (build-system python-build-system)
8445 (arguments
8446 `(#:python ,python-2 ;version 2 only
8447 #:phases
8448 (modify-phases %standard-phases
8449 (replace 'check
8450 (lambda _ (invoke "python" "ipaddr_test.py"))))))
8451 (home-page "https://github.com/google/ipaddr-py")
8452 (synopsis "IP address manipulation library")
8453 (description
8454 "Ipaddr is a Python@tie{}2 library for creating and manupilating IPv4 and
8455 IPv6 addresses and networks.
8456
8457 For new implementations you may prefer to use the standard module
8458 @code{ipaddress}, which was introduced in Python 3.3 and backported to older
8459 versions of Python.")
8460 (license license:asl2.0)))
8461
8462 (define-public python-idna
8463 (package
8464 (name "python-idna")
8465 (version "2.9")
8466 (source
8467 (origin
8468 (method url-fetch)
8469 (uri (pypi-uri "idna" version))
8470 (sha256
8471 (base32
8472 "1jxp2pdi8y4asi7ka1zhx3yx09kv8kzj533f0ds7viz49b0x323m"))))
8473 (build-system python-build-system)
8474 (home-page "https://github.com/kjd/idna")
8475 (synopsis "Internationalized domain names in applications")
8476 (description
8477 "This is a library to support the Internationalised Domain Names in
8478 Applications (IDNA) protocol as specified in RFC 5891. This version of the
8479 protocol is often referred to as “IDNA2008” and can produce different results
8480 from the earlier standard from 2003. The library is also intended to act as a
8481 suitable drop-in replacement for the “encodings.idna” module that comes with
8482 the Python standard library but currently only supports the older 2003
8483 specification.")
8484 (license license:bsd-4)))
8485
8486 (define-public python-idna-2.7
8487 (package (inherit python-idna)
8488 (version "2.7")
8489 (source (origin
8490 (method url-fetch)
8491 (uri (pypi-uri "idna" version))
8492 (sha256
8493 (base32
8494 "05jam7d31767dr12x0rbvvs8lxnpb1mhdb2zdlfxgh83z6k3hjk8"))))))
8495
8496
8497 (define-public python2-idna
8498 (package-with-python2 python-idna))
8499
8500 (define-public python-idna-ssl
8501 (package
8502 (name "python-idna-ssl")
8503 (version "1.0.1")
8504 (source
8505 (origin
8506 (method url-fetch)
8507 (uri (pypi-uri "idna-ssl" version))
8508 (sha256
8509 (base32
8510 "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
8511 (build-system python-build-system)
8512 (arguments
8513 `(#:tests? #f)) ;circular dependency with python-aiohttp
8514 (home-page "https://github.com/aio-libs/idna-ssl")
8515 (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
8516 (description "Patch @code{ssl.match_hostname} for Unicode(idna)
8517 domains support.")
8518 (license license:expat)))
8519
8520 (define-public python-pretend
8521 (package
8522 (name "python-pretend")
8523 (version "1.0.9")
8524 (source
8525 (origin
8526 (method url-fetch)
8527 (uri (pypi-uri "pretend" version))
8528 (sha256
8529 (base32
8530 "040vm94lcbscg5p81g1icmwwwa2jm7wrd1ybmxnv1sz8rl8bh3n9"))))
8531 (build-system python-build-system)
8532 (home-page "https://github.com/alex/pretend")
8533 (synopsis "Library for stubbing in Python")
8534 (description
8535 "Pretend is a library to make stubbing with Python easier. Stubbing is a
8536 technique for writing tests. You may hear the term mixed up with mocks,
8537 fakes, or doubles. Basically, a stub is an object that returns pre-canned
8538 responses, rather than doing any computation.")
8539 (license license:bsd-3)))
8540
8541 (define-public python2-pretend
8542 (package-with-python2 python-pretend))
8543
8544 (define-public python-pip
8545 (package
8546 (name "python-pip")
8547 (version "20.0.2")
8548 (source
8549 (origin
8550 (method url-fetch)
8551 (uri (pypi-uri "pip" version))
8552 (sha256
8553 (base32
8554 "0zwnlsjn6mb742cr995zfbk9v56ygxp8w3k49601r9by9kmcic3x"))))
8555 (build-system python-build-system)
8556 (arguments
8557 '(#:tests? #f)) ; there are no tests in the pypi archive.
8558 (home-page "https://pip.pypa.io/")
8559 (synopsis "Package manager for Python software")
8560 (description
8561 "Pip is a package manager for Python software, that finds packages on the
8562 Python Package Index (PyPI).")
8563 (license license:expat)))
8564
8565 (define-public python2-pip
8566 (package-with-python2 python-pip))
8567
8568 (define-public python-tlsh
8569 (package
8570 (name "python-tlsh")
8571 (version "3.4.5")
8572 (home-page "https://github.com/trendmicro/tlsh")
8573 (source
8574 (origin
8575 (method git-fetch)
8576 (uri (git-reference
8577 (url "https://github.com/trendmicro/tlsh.git")
8578 (commit (string-append "v" version))))
8579 (file-name (git-file-name name version))
8580 (sha256
8581 (base32 "1ydliir308xn4ywy705mmsh7863ldlixdvpqwdhbipzq9vfpmvll"))))
8582 (build-system cmake-build-system)
8583 (arguments
8584 '(#:out-of-source? #f
8585 #:phases (modify-phases %standard-phases
8586 (replace
8587 'install
8588 (lambda* (#:key outputs #:allow-other-keys)
8589 ;; Build and install the Python bindings. The underlying
8590 ;; C++ library is apparently not meant to be installed.
8591 (let ((out (assoc-ref outputs "out")))
8592 (with-directory-excursion "py_ext"
8593 (and (system* "python" "setup.py" "build")
8594 (system* "python" "setup.py" "install"
8595 (string-append "--prefix=" out))))))))))
8596 (inputs `(("python" ,python-wrapper))) ;for the bindings
8597 (synopsis "Fuzzy matching library for Python")
8598 (description
8599 "Trend Micro Locality Sensitive Hash (TLSH) is a fuzzy matching library.
8600 Given a byte stream with a minimum length of 256 bytes, TLSH generates a hash
8601 value which can be used for similarity comparisons. Similar objects have
8602 similar hash values, which allows for the detection of similar objects by
8603 comparing their hash values. The byte stream should have a sufficient amount
8604 of complexity; for example, a byte stream of identical bytes will not generate
8605 a hash value.")
8606 (license license:asl2.0)))
8607
8608 (define-public python2-tlsh
8609 (package
8610 (inherit python-tlsh)
8611 (name "python2-tlsh")
8612 (inputs `(("python" ,python-2)))))
8613
8614 (define-public python-termcolor
8615 (package
8616 (name "python-termcolor")
8617 (version "1.1.0")
8618 (source
8619 (origin
8620 (method url-fetch)
8621 (uri (pypi-uri "termcolor" version))
8622 (sha256
8623 (base32
8624 "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
8625 (build-system python-build-system)
8626 (arguments
8627 ;; There are no tests.
8628 `(#:tests? #f))
8629 (home-page "https://pypi.org/project/termcolor/")
8630 (synopsis "ANSII Color formatting for terminal output")
8631 (description
8632 "This package provides ANSII Color formatting for output in terminals.")
8633 (license license:expat)))
8634
8635 (define-public python2-termcolor
8636 (package-with-python2 python-termcolor))
8637
8638 (define-public python-libarchive-c
8639 (package
8640 (name "python-libarchive-c")
8641 (version "2.9")
8642 (source (origin
8643 (method url-fetch)
8644 (uri (pypi-uri "libarchive-c" version))
8645 (sha256
8646 (base32
8647 "0q7g6a97110bk0j5x81555kajyxh4sybaabab6v5sgr0xi6386cr"))))
8648 (build-system python-build-system)
8649 (arguments
8650 '(#:phases (modify-phases %standard-phases
8651 (add-before
8652 'build 'reference-libarchive
8653 (lambda* (#:key inputs #:allow-other-keys)
8654 ;; Retain the absolute file name of libarchive.so.
8655 (let ((libarchive (assoc-ref inputs "libarchive")))
8656 (substitute* "libarchive/ffi.py"
8657 (("find_library\\('archive'\\)")
8658 (string-append "'" libarchive
8659 "/lib/libarchive.so'"))))))
8660 (replace 'check
8661 (lambda _ (invoke "pytest" "-vv"))))))
8662 (native-inputs
8663 `(("python-mock" ,python-mock)
8664 ("python-pytest" ,python-pytest)))
8665 (inputs
8666 `(("libarchive" ,libarchive)))
8667 (home-page "https://github.com/Changaco/python-libarchive-c")
8668 (synopsis "Python interface to libarchive")
8669 (description
8670 "This package provides Python bindings to libarchive, a C library to
8671 access possibly compressed archives in many different formats. It uses
8672 Python's @code{ctypes} foreign function interface (FFI).")
8673 (license license:lgpl2.0+)))
8674
8675 (define-public python2-libarchive-c
8676 (package-with-python2 python-libarchive-c))
8677
8678 (define-public python-file
8679 (package
8680 (inherit file)
8681 (name "python-file")
8682 (build-system python-build-system)
8683 (arguments
8684 '(#:tests? #f ;no tests
8685 #:configure-flags '("--single-version-externally-managed" "--root=/")
8686 #:phases (modify-phases %standard-phases
8687 (add-before 'build 'change-directory
8688 (lambda _
8689 (chdir "python")
8690 #t))
8691 (add-before 'build 'set-library-file-name
8692 (lambda* (#:key inputs #:allow-other-keys)
8693 (let ((file (assoc-ref inputs "file")))
8694 (substitute* "magic.py"
8695 (("find_library\\('magic'\\)")
8696 (string-append "'" file "/lib/libmagic.so'")))
8697 #t))))))
8698 (inputs `(("file" ,file)))
8699 (native-inputs (if (%current-target-system)
8700 `(("self" ,this-package))
8701 '()))
8702 (synopsis "Python bindings to the libmagic file type guesser. Note that
8703 this module and the python-magic module both provide a \"magic.py\" file;
8704 these two modules, which are different and were developed separately, both
8705 serve the same purpose: provide Python bindings for libmagic.")))
8706
8707 (define-public python2-file
8708 (package-with-python2 python-file))
8709
8710 (define-public python-debian
8711 (package
8712 (name "python-debian")
8713 (home-page "https://salsa.debian.org/python-debian-team/python-debian")
8714 (version "0.1.36")
8715 (source
8716 (origin
8717 ;; Use git-fetch, as pypi doesn't include test suite.
8718 (method git-fetch)
8719 (uri (git-reference
8720 (url home-page)
8721 (commit version)))
8722 (file-name (git-file-name name version))
8723 (sha256
8724 (base32
8725 "0qy6x28bj6yfikhjww932v5xq4mf5bm1iczl7acy4c7zm6mwhqfa"))))
8726 (build-system python-build-system)
8727 (arguments
8728 `(#:phases (modify-phases %standard-phases
8729 (add-after 'unpack 'remove-debian-specific-tests
8730 ;; python-apt, apt and dpkg are not yet available in guix,
8731 ;; and these tests heavily depend on them.
8732 (lambda _
8733 (delete-file "lib/debian/tests/test_deb822.py")
8734 (delete-file "lib/debian/tests/test_debfile.py")
8735 #t)))))
8736 (propagated-inputs
8737 `(("python-six" ,python-six)
8738 ("python-chardet" ,python-chardet)))
8739 (synopsis "Debian package related modules")
8740 (description
8741 ;; XXX: Use @enumerate instead of @itemize to work around
8742 ;; <http://bugs.gnu.org/21772>.
8743 "This package provides Python modules that abstract many formats of
8744 Debian-related files, such as:
8745
8746 @enumerate
8747 @item Debtags information;
8748 @item @file{debian/changelog} files;
8749 @item packages files, pdiffs;
8750 @item control files of single or multiple RFC822-style paragraphs---e.g.
8751 @file{debian/control}, @file{.changes}, @file{.dsc};
8752 @item Raw @file{.deb} and @file{.ar} files, with (read-only) access to
8753 contained files and meta-information.
8754 @end enumerate\n")
8755
8756 ;; Modules are either GPLv2+ or GPLv3+.
8757 (license license:gpl3+)))
8758
8759 (define-public python-nbformat
8760 (package
8761 (name "python-nbformat")
8762 (version "4.4.0")
8763 (source
8764 (origin
8765 (method url-fetch)
8766 (uri (pypi-uri "nbformat" version))
8767 (sha256
8768 (base32
8769 "00nlf08h8yc4q73nphfvfhxrcnilaqanb8z0mdy6nxk0vzq4wjgp"))))
8770 (build-system python-build-system)
8771 (arguments `(#:tests? #f)) ; no test target
8772 (propagated-inputs
8773 `(("python-ipython-genutils" ,python-ipython-genutils)
8774 ("python-jsonschema" ,python-jsonschema)
8775 ("python-jupyter-core" ,python-jupyter-core)
8776 ("python-traitlets" ,python-traitlets)))
8777 (home-page "http://jupyter.org")
8778 (synopsis "Jupyter Notebook format")
8779 (description "This package provides the reference implementation of the
8780 Jupyter Notebook format and Python APIs for working with notebooks.")
8781 (license license:bsd-3)))
8782
8783 (define-public python2-nbformat
8784 (package-with-python2 python-nbformat))
8785
8786 (define-public python-bleach
8787 (package
8788 (name "python-bleach")
8789 (version "3.1.3")
8790 (source
8791 (origin
8792 (method url-fetch)
8793 (uri (pypi-uri "bleach" version))
8794 (sha256
8795 (base32
8796 "0al437aw4p2xp83az5hhlrp913nsf0cg6kg4qj3fjhv4wakxipzq"))))
8797 (build-system python-build-system)
8798 (propagated-inputs
8799 `(("python-webencodings" ,python-webencodings)
8800 ("python-six" ,python-six)))
8801 (native-inputs
8802 `(("python-datrie" ,python-datrie)
8803 ("python-genshi" ,python-genshi)
8804 ("python-lxml" ,python-lxml)
8805 ("python-pytest" ,python-pytest)))
8806 (home-page "https://github.com/mozilla/bleach")
8807 (synopsis "Whitelist-based HTML-sanitizing tool")
8808 (description "Bleach is an easy whitelist-based HTML-sanitizing tool.")
8809 (license license:asl2.0)))
8810
8811 (define-public python2-bleach
8812 (package-with-python2 python-bleach))
8813
8814 (define-public python-entrypoints
8815 (package
8816 (name "python-entrypoints")
8817 (version "0.3")
8818 (source
8819 (origin
8820 (method url-fetch)
8821 (uri (pypi-uri "entrypoints" version))
8822 (sha256
8823 (base32
8824 "0lc4si3xb7hza424414rdqdc3vng3kcrph8jbvjqb32spqddf3f7"))))
8825 (build-system python-build-system)
8826 ;; The package does not come with a setup.py file, so we have to generate
8827 ;; one ourselves.
8828 (arguments
8829 `(#:tests? #f
8830 #:phases
8831 (modify-phases %standard-phases
8832 (add-after 'unpack 'create-setup.py
8833 (lambda _
8834 (call-with-output-file "setup.py"
8835 (lambda (port)
8836 (format port "\
8837 from setuptools import setup
8838 setup(name='entrypoints', version='~a', py_modules=['entrypoints'])
8839 " ,version))))))))
8840 (home-page "https://github.com/takluyver/entrypoints")
8841 (synopsis "Discover and load entry points from installed Python packages")
8842 (description "Entry points are a way for Python packages to advertise
8843 objects with some common interface. The most common examples are
8844 @code{console_scripts} entry points, which define shell commands by
8845 identifying a Python function to run. The @code{entrypoints} module contains
8846 functions to find and load entry points.")
8847 (license license:expat)))
8848
8849 (define-public python2-entrypoints
8850 (package-with-python2 python-entrypoints))
8851
8852 (define-public python-epc
8853 (package
8854 (name "python-epc")
8855 (version "0.0.5")
8856 (source
8857 (origin
8858 (method url-fetch)
8859 (uri (pypi-uri "epc" version))
8860 (sha256
8861 (base32
8862 "09bx1ln1bwa00917dndlgs4k589h8qx2x080xch5m58p92kjwkd1"))))
8863 (build-system python-build-system)
8864 (propagated-inputs
8865 `(("python-sexpdata" ,python-sexpdata)))
8866 (native-inputs
8867 `(("python-nose" ,python-nose)))
8868 (home-page "https://github.com/tkf/python-epc")
8869 (synopsis "Remote procedure call (RPC) stack for Emacs Lisp and Python")
8870 (description
8871 "Python-EPC can call elisp functions from Python and Python functions
8872 from elisp.")
8873 (license license:gpl3)))
8874
8875 (define-public python-nbconvert
8876 (package
8877 (name "python-nbconvert")
8878 (version "5.0.0b1")
8879 (source
8880 (origin
8881 (method url-fetch)
8882 (uri (pypi-uri "nbconvert" version))
8883 (sha256
8884 (base32
8885 "0brclbb18l4nmd5qy3dl9wn05rjdh1fz4rmzdlfqacj12rcdvdgp"))))
8886 (build-system python-build-system)
8887 (arguments
8888 `(;; The "bdist_egg" target is disabled by default, causing the installation
8889 ;; to fail.
8890 #:configure-flags (list "bdist_egg")
8891 ;; FIXME: 5 failures, 40 errors.
8892 #:tests? #f))
8893 ;; #:phases
8894 ;; (modify-phases %standard-phases
8895 ;; (replace 'check
8896 ;; (lambda _
8897 ;; (zero? (system* "py.test" "-v")))))
8898 (native-inputs
8899 `(("python-pytest" ,python-pytest)))
8900 (propagated-inputs
8901 `(("python-bleach" ,python-bleach)
8902 ("python-entrypoints" ,python-entrypoints)
8903 ("python-jinja2" ,python-jinja2)
8904 ("python-jupyter-core" ,python-jupyter-core)
8905 ("python-mistune" ,python-mistune)
8906 ("python-nbformat" ,python-nbformat)
8907 ("python-pygments" ,python-pygments)
8908 ("python-traitlets" ,python-traitlets)))
8909 (home-page "http://jupyter.org")
8910 (synopsis "Converting Jupyter Notebooks")
8911 (description "The @code{nbconvert} tool, @{jupyter nbconvert}, converts
8912 notebooks to various other formats via Jinja templates. It allows you to
8913 convert an @code{.ipynb} notebook file into various static formats including:
8914
8915 @enumerate
8916 @item HTML
8917 @item LaTeX
8918 @item PDF
8919 @item Reveal JS
8920 @item Markdown (md)
8921 @item ReStructured Text (rst)
8922 @item executable script
8923 @end enumerate\n")
8924 (license license:bsd-3)))
8925
8926 (define-public python2-nbconvert
8927 (package-with-python2 python-nbconvert))
8928
8929 (define-public python-notebook
8930 (package
8931 (name "python-notebook")
8932 (version "5.7.4")
8933 (source (origin
8934 (method url-fetch)
8935 (uri (pypi-uri "notebook" version))
8936 (sha256
8937 (base32
8938 "0jm7324mbxljmn9hgapj66q7swyz5ai92blmr0jpcy0h80x6f26r"))))
8939 (build-system python-build-system)
8940 (arguments
8941 `(#:phases
8942 (modify-phases %standard-phases
8943 (replace 'check
8944 (lambda _
8945 ;; These tests require a browser
8946 (delete-file-recursively "notebook/tests/selenium")
8947 ;; Some tests need HOME
8948 (setenv "HOME" "/tmp")
8949 ;; This file contains "warningfilters", which are not supported
8950 ;; by this version of nose.
8951 (delete-file "setup.cfg")
8952 (with-directory-excursion "/tmp"
8953 (invoke "nosetests" "-v"))
8954 #t)))))
8955 (propagated-inputs
8956 `(("python-jupyter-core" ,python-jupyter-core)
8957 ("python-nbformat" ,python-nbformat)
8958 ("python-nbconvert" ,python-nbconvert)
8959 ("python-prometheus-client" ,python-prometheus-client)
8960 ("python-send2trash" ,python-send2trash)
8961 ("python-terminado" ,python-terminado)))
8962 (native-inputs
8963 `(("python-nose" ,python-nose)
8964 ("python-sphinx" ,python-sphinx)
8965 ("python-requests" ,python-requests)))
8966 (home-page "http://jupyter.org/")
8967 (synopsis "Web-based notebook environment for interactive computing")
8968 (description
8969 "The Jupyter HTML notebook is a web-based notebook environment for
8970 interactive computing.")
8971 (properties `((python2-variant . ,(delay python2-notebook))))
8972 (license license:bsd-3)))
8973
8974 (define-public python2-notebook
8975 (let ((base (package-with-python2
8976 (strip-python2-variant python-notebook))))
8977 (package (inherit base)
8978 (native-inputs
8979 `(("python2-mock" ,python2-mock)
8980 ,@(package-native-inputs base)))
8981 (arguments
8982 (substitute-keyword-arguments (package-arguments base)
8983 ((#:phases phases)
8984 `(modify-phases ,phases
8985 (add-before 'check 'disable-test-case
8986 ;; The test requires network access to localhost. Curiously it
8987 ;; fails with Python 2 only. Simply make the test-case return
8988 ;; immediately.
8989 (lambda _
8990 (substitute*
8991 "notebook/services/nbconvert/tests/test_nbconvert_api.py"
8992 (("formats = self.nbconvert_api") "return #")))))))))))
8993
8994 (define-public python-widgetsnbextension
8995 (package
8996 (name "python-widgetsnbextension")
8997 (version "3.5.1")
8998 (source
8999 (origin
9000 (method url-fetch)
9001 (uri (pypi-uri "widgetsnbextension" version))
9002 (sha256
9003 (base32
9004 "1ismyaxbv9d56yqqqb8xl58hg0iq0bbyy014a53y1g3hfbc8g7q7"))))
9005 (build-system python-build-system)
9006 (propagated-inputs
9007 `(("python-ipykernel" ,python-ipykernel)
9008 ("python-notebook" ,python-notebook)))
9009 (native-inputs
9010 `(("python-certifi" ,python-certifi)
9011 ("python-nose" ,python-nose)))
9012 (home-page "https://ipython.org")
9013 (synopsis "IPython HTML widgets for Jupyter")
9014 (description "This package provides interactive HTML widgets for Jupyter
9015 notebooks.")
9016 (license license:bsd-3)))
9017
9018 (define-public python2-widgetsnbextension
9019 (package-with-python2 python-widgetsnbextension))
9020
9021 (define-public python-ipywidgets
9022 (package
9023 (name "python-ipywidgets")
9024 (version "7.5.1")
9025 (source
9026 (origin
9027 (method url-fetch)
9028 (uri (pypi-uri "ipywidgets" version))
9029 (sha256
9030 (base32
9031 "15sww2mvnkqlvx55gwa82v05062a8j1xpncnqna4k9sl53hgcig9"))))
9032 (build-system python-build-system)
9033 (propagated-inputs
9034 `(("python-ipython" ,python-ipython)
9035 ("python-traitlets" ,python-traitlets)
9036 ("python-widgetsnbextension" ,python-widgetsnbextension)))
9037 (native-inputs
9038 `(("python-nose" ,python-nose)
9039 ("python-pytest" ,python-pytest)))
9040 (home-page "https://ipython.org")
9041 (synopsis "IPython HTML widgets for Jupyter")
9042 (description "Ipywidgets are interactive HTML widgets for Jupyter
9043 notebooks and the IPython kernel. Notebooks come alive when interactive
9044 widgets are used. Users gain control of their data and can visualize changes
9045 in the data.")
9046 (license license:bsd-3)))
9047
9048 (define-public python2-ipywidgets
9049 (package-with-python2 python-ipywidgets))
9050
9051 (define-public python-jupyter-console
9052 (package
9053 (name "python-jupyter-console")
9054 (version "6.1.0")
9055 (source
9056 (origin
9057 (method url-fetch)
9058 (uri (pypi-uri "jupyter_console" version))
9059 (sha256
9060 (base32
9061 "06s3kr5vx0l1y1b7fxb04dmrppscl7q69sl9yyfr0d057d1ssvkg"))))
9062 (build-system python-build-system)
9063 (propagated-inputs
9064 `(("python-ipykernel" ,python-ipykernel)
9065 ("python-jupyter-client" ,python-jupyter-client)
9066 ("python-prompt-toolkit" ,python-prompt-toolkit-2)
9067 ("python-pygments" ,python-pygments)))
9068 (native-inputs
9069 `(("python-nose" ,python-nose)))
9070 (home-page "https://jupyter.org")
9071 (synopsis "Jupyter terminal console")
9072 (description "This package provides a terminal-based console frontend for
9073 Jupyter kernels. It also allows for console-based interaction with non-Python
9074 Jupyter kernels such as IJulia and IRKernel.")
9075 (properties `((python2-variant . ,(delay python2-jupyter-console))))
9076 (license license:bsd-3)))
9077
9078 (define-public python2-jupyter-console
9079 (package
9080 (name "python2-jupyter-console")
9081 (version "5.2.0")
9082 (source
9083 (origin
9084 (method url-fetch)
9085 (uri (pypi-uri "jupyter_console" version))
9086 (sha256
9087 (base32
9088 "1kam1qzgwr7srhm5r6aj90di5sws4bq0jmiw15452ddamb9yspal"))))
9089 (build-system python-build-system)
9090 (arguments
9091 `(#:python ,python-2
9092 #:tests? #f)) ; Tests only run in a TTY.
9093 (propagated-inputs
9094 `(("python2-ipykernel" ,python2-ipykernel)
9095 ("python2-jupyter-client" ,python2-jupyter-client)
9096 ("python2-prompt-toolkit" ,python2-prompt-toolkit-1)
9097 ("python2-pygments" ,python2-pygments)))
9098 (native-inputs
9099 `(("python2-nose" ,python2-nose)))
9100 (home-page "https://jupyter.org")
9101 (synopsis "Jupyter terminal console")
9102 (description "This package provides a terminal-based console frontend for
9103 Jupyter kernels. It also allows for console-based interaction with non-Python
9104 Jupyter kernels such as IJulia and IRKernel.")
9105 (license license:bsd-3)))
9106
9107 ;; The python-ipython and python-jupyter-console require each other. To get
9108 ;; the functionality in both packages working, strip down the
9109 ;; python-jupyter-console package when using it as an input to python-ipython.
9110 (define python-jupyter-console-minimal
9111 (package
9112 (inherit python-jupyter-console)
9113 (name "python-jupyter-console-minimal")
9114 (arguments
9115 (substitute-keyword-arguments
9116 (package-arguments python-jupyter-console)
9117 ((#:phases phases)
9118 `(modify-phases ,phases
9119 (add-after 'install 'delete-bin
9120 (lambda* (#:key outputs #:allow-other-keys)
9121 ;; Delete the bin files, to avoid conflicts in profiles
9122 ;; where python-ipython and python-jupyter-console are
9123 ;; both present.
9124 (delete-file-recursively
9125 (string-append
9126 (assoc-ref outputs "out") "/bin"))))))))
9127 ;; Remove the python-ipython propagated input, to avoid the cycle
9128 (propagated-inputs
9129 (alist-delete
9130 "python-ipython"
9131 (package-propagated-inputs python-jupyter-console)))))
9132
9133 (define-public python-qtconsole
9134 (package
9135 (name "python-qtconsole")
9136 (version "4.4.3")
9137 (source
9138 (origin
9139 (method url-fetch)
9140 (uri (pypi-uri "qtconsole" version))
9141 (sha256
9142 (base32
9143 "1b03n1ixzscm0jw97l4dq5iy4fslnqxq5bb8287xb7n2a1gs26xw"))))
9144 (build-system python-build-system)
9145 (arguments
9146 ;; XXX: Tests are disabled, because this package needs python-ipython 7,
9147 ;; but we only have the LTS version 5.x. This means that there might be
9148 ;; runtime errors, but since this is a dependency of the Jupyter package,
9149 ;; and Jupyter can be used without the qtconsole we can overlook this for
9150 ;; now.
9151 `(#:tests? #f
9152 #:phases
9153 (modify-phases %standard-phases
9154 (add-before 'check 'pre-check
9155 (lambda _
9156 (setenv "QT_QPA_PLATFORM" "offscreen")
9157 #t)))))
9158 (propagated-inputs
9159 `(("python-ipykernel" ,python-ipykernel)
9160 ("python-ipython" ,python-ipython)))
9161 (native-inputs
9162 `(("python-pytest" ,python-pytest)))
9163 (home-page "http://jupyter.org")
9164 (synopsis "Jupyter Qt console")
9165 (description "This package provides a Qt-based console for Jupyter with
9166 support for rich media output.")
9167 (license license:bsd-3)))
9168
9169 (define-public python-jsbeautifier
9170 (package
9171 (name "python-jsbeautifier")
9172 (version "1.10.2")
9173 (home-page "https://github.com/beautify-web/js-beautify")
9174 (source (origin
9175 (method git-fetch)
9176 (uri (git-reference
9177 (url home-page)
9178 (commit (string-append "v" version))))
9179 (file-name (git-file-name name version))
9180 (sha256
9181 (base32
9182 "0wawb070ki1axb3jc9xvsrgpji52vcfif3zmjzc3z4g98m5xw4kg"))))
9183 (build-system python-build-system)
9184 (arguments
9185 `(#:phases (modify-phases %standard-phases
9186 (add-after 'unpack 'chdir
9187 (lambda _
9188 ;; The upstream Git repository contains all the code,
9189 ;; but this package only builds the python code.
9190 (chdir "python")
9191 #t))
9192 (add-after 'unpack 'patch-python-six-requirements
9193 (lambda _
9194 (substitute* "python/setup.py"
9195 (("six>=1.12.0")
9196 "six>=1.11.0"))
9197 #t)))))
9198 (propagated-inputs
9199 `(("python-editorconfig" ,python-editorconfig)
9200 ("python-six" ,python-six)))
9201 (native-inputs
9202 `(("python-pytest" ,python-pytest)))
9203 (synopsis "JavaScript unobfuscator and beautifier")
9204 (description "Beautify, unpack or deobfuscate JavaScript, leveraging
9205 popular online obfuscators.")
9206 (license license:expat)))
9207
9208 (define-public jupyter
9209 (package
9210 (name "jupyter")
9211 (version "1.0.0")
9212 (source
9213 (origin
9214 (method url-fetch)
9215 (uri (pypi-uri "jupyter" version))
9216 (sha256
9217 (base32
9218 "0pwf3pminkzyzgx5kcplvvbvwrrzd3baa7lmh96f647k30rlpp6r"))))
9219 (build-system python-build-system)
9220 (arguments '(#:tests? #f)) ; there are none.
9221 (propagated-inputs
9222 `(("python-ipykernel" ,python-ipykernel)
9223 ("python-ipywidgets" ,python-ipywidgets)
9224 ("python-jupyter-console" ,python-jupyter-console)
9225 ("python-nbconvert" ,python-nbconvert)
9226 ("python-notebook" ,python-notebook)
9227 ("python-qtconsole" ,python-qtconsole)))
9228 (native-search-paths
9229 (list (search-path-specification
9230 (variable "JUPYTER_PATH")
9231 (files '("share/jupyter")))))
9232 (home-page "https://jupyter.org")
9233 (synopsis "Web application for interactive documents")
9234 (description
9235 "The Jupyter Notebook is a web application that allows you to create and
9236 share documents that contain live code, equations, visualizations and
9237 explanatory text. Uses include: data cleaning and transformation, numerical
9238 simulation, statistical modeling, machine learning and much more.")
9239 (license license:bsd-3)))
9240
9241 (define-public python-chardet
9242 (package
9243 (name "python-chardet")
9244 (version "3.0.4")
9245 (source
9246 (origin
9247 (method url-fetch)
9248 (uri (pypi-uri "chardet" version))
9249 (sha256
9250 (base32
9251 "1bpalpia6r5x1kknbk11p1fzph56fmmnp405ds8icksd3knr5aw4"))))
9252 (native-inputs
9253 `(("python-hypothesis" ,python-hypothesis)
9254 ("python-pytest" ,python-pytest)
9255 ("python-pytest-runner" ,python-pytest-runner)))
9256 (build-system python-build-system)
9257 ;; XXX: Incompatible with Pytest 4: <https://github.com/chardet/chardet/issues/173>.
9258 (arguments `(#:tests? #f))
9259 (home-page "https://github.com/chardet/chardet")
9260 (synopsis "Universal encoding detector for Python 2 and 3")
9261 (description
9262 "This package provides @code{chardet}, a Python module that can
9263 automatically detect a wide range of file encodings.")
9264 (license license:lgpl2.1+)))
9265
9266 (define-public python2-chardet
9267 (package-with-python2 python-chardet))
9268
9269 (define-public python-docopt
9270 (package
9271 (name "python-docopt")
9272 (version "0.6.2")
9273 (source
9274 (origin
9275 (method git-fetch)
9276 ;; The release on PyPI does not include tests.
9277 (uri (git-reference
9278 (url "https://github.com/docopt/docopt")
9279 (commit version)))
9280 (file-name (git-file-name name version))
9281 (sha256
9282 (base32
9283 "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0"))))
9284 (build-system python-build-system)
9285 (native-inputs
9286 `(("python-pytest" ,python-pytest)))
9287 (arguments
9288 `(#:phases
9289 (modify-phases %standard-phases
9290 (replace 'check
9291 (lambda _ (invoke "py.test"))))))
9292 (home-page "http://docopt.org")
9293 (synopsis "Command-line interface description language for Python")
9294 (description "This library allows the user to define a command-line
9295 interface from a program's help message rather than specifying it
9296 programmatically with command-line parsers like @code{getopt} and
9297 @code{argparse}.")
9298 (license license:expat)))
9299
9300 (define-public python2-docopt
9301 (package-with-python2 python-docopt))
9302
9303 (define-public python-pythondialog
9304 (package
9305 (name "python-pythondialog")
9306 (version "3.4.0")
9307 (source
9308 (origin
9309 (method url-fetch)
9310 (uri (pypi-uri "pythondialog" version))
9311 (sha256
9312 (base32
9313 "1728ghsran47jczn9bhlnkvk5bvqmmbihabgif5h705b84r1272c"))))
9314 (build-system python-build-system)
9315 (arguments
9316 `(#:phases
9317 (modify-phases %standard-phases
9318 (add-after 'unpack 'patch-path
9319 (lambda* (#:key inputs #:allow-other-keys)
9320 (let* ((dialog (assoc-ref inputs "dialog")))
9321 ;; Since this library really wants to grovel the search path, we
9322 ;; must hardcode dialog's store path into it.
9323 (substitute* "dialog.py"
9324 (("os.getenv\\(\"PATH\", \":/bin:/usr/bin\"\\)")
9325 (string-append "os.getenv(\"PATH\") + \":" dialog "/bin\"")))
9326 #t))))
9327 #:tests? #f)) ; no test suite
9328 (propagated-inputs
9329 `(("dialog" ,dialog)))
9330 (home-page "http://pythondialog.sourceforge.net/")
9331 (synopsis "Python interface to the UNIX dialog utility")
9332 (description "A Python wrapper for the dialog utility. Its purpose is to
9333 provide an easy to use, pythonic and comprehensive Python interface to dialog.
9334 This allows one to make simple text-mode user interfaces on Unix-like systems")
9335 (license license:lgpl2.1)
9336 (properties `((python2-variant . ,(delay python2-pythondialog))))))
9337
9338 (define-public python2-pythondialog
9339 (let ((base (package-with-python2 (strip-python2-variant python-pythondialog))))
9340 (package
9341 (inherit base)
9342 (version (package-version python-pythondialog))
9343 (source (origin
9344 (method url-fetch)
9345 (uri (pypi-uri "python2-pythondialog" version))
9346 (sha256
9347 (base32
9348 "0d8k7lxk50imdyx85lv8j98i4c93a71iwpapnl1506rpkbm9qvd9")))))))
9349
9350 (define-public python-configobj
9351 (package
9352 (name "python-configobj")
9353 (version "5.0.6")
9354 (source (origin
9355 (method url-fetch)
9356 (uri (pypi-uri "configobj" version))
9357 (sha256
9358 (base32
9359 "00h9rcmws03xvdlfni11yb60bz3kxfvsj6dg6nrpzj71f03nbxd2"))
9360 ;; Patch setup.py so it looks for python-setuptools, which is
9361 ;; required to parse the keyword 'install_requires' in setup.py.
9362 (patches (search-patches "python-configobj-setuptools.patch"))))
9363 (build-system python-build-system)
9364 (propagated-inputs
9365 `(("python-six" ,python-six)))
9366 (synopsis "Config file reading, writing and validation")
9367 (description "ConfigObj is a simple but powerful config file reader and
9368 writer: an ini file round tripper. Its main feature is that it is very easy to
9369 use, with a straightforward programmer’s interface and a simple syntax for
9370 config files.")
9371 (home-page "https://github.com/DiffSK/configobj")
9372 (license license:bsd-3)))
9373
9374 (define-public python2-configobj
9375 (package-with-python2 python-configobj))
9376
9377 (define-public python-configargparse
9378 (package
9379 (name "python-configargparse")
9380 (version "0.14.0")
9381 (source (origin
9382 (method url-fetch)
9383 (uri (pypi-uri "ConfigArgParse" version))
9384 (sha256
9385 (base32
9386 "149fy4zya0rsnlkvxbbq43cyr8lscb5k4pj1m6n7f1grwcmzwbif"))))
9387 (build-system python-build-system)
9388 (native-inputs
9389 `(("python-pyyaml" ,python-pyyaml)))
9390 (arguments
9391 `(#:phases
9392 (modify-phases %standard-phases
9393 (replace 'check
9394 (lambda _
9395 ;; Bypass setuptools-shim because one test relies on "setup.py"
9396 ;; being the first argument passed to the python call.
9397 ;;
9398 ;; NOTE: Many tests do not run because they rely on Python's
9399 ;; built-in test.test_argparse, but we remove the unit tests from
9400 ;; our Python installation.
9401 (invoke "python" "setup.py" "test"))))))
9402 (synopsis "Replacement for argparse")
9403 (description "A drop-in replacement for argparse that allows options to also
9404 be set via config files and/or environment variables.")
9405 (home-page "https://github.com/bw2/ConfigArgParse")
9406 (license license:expat)))
9407
9408 (define-public python2-configargparse
9409 (package-with-python2 python-configargparse))
9410
9411 (define-public python-argparse-manpage
9412 (package
9413 (name "python-argparse-manpage")
9414 (version "1.1")
9415 (source
9416 (origin
9417 (method url-fetch)
9418 (uri (pypi-uri "argparse-manpage" version))
9419 (sha256
9420 (base32
9421 "0blh31zns68anina9lba5wh81d1414s97p60zw5l0d0shhh0wj5p"))))
9422 (build-system python-build-system)
9423 (home-page "https://github.com/praiskup/argparse-manpage")
9424 (synopsis "Build manual page from Python's ArgumentParser object")
9425 (description
9426 "This package provides tools to build manual pages from Python's
9427 @code{ArgumentParser} object.")
9428 (license license:asl2.0)))
9429
9430 (define-public python-contextlib2
9431 (package
9432 (name "python-contextlib2")
9433 (version "0.6.0.post1")
9434 (source
9435 (origin
9436 (method url-fetch)
9437 (uri (pypi-uri "contextlib2" version))
9438 (sha256
9439 (base32
9440 "0bhnr2ac7wy5l85ji909gyljyk85n92w8pdvslmrvc8qih4r1x01"))))
9441 (build-system python-build-system)
9442 (home-page "https://contextlib2.readthedocs.org/")
9443 (synopsis "Tools for decorators and context managers")
9444 (description "This module is primarily a backport of the Python
9445 3.2 contextlib to earlier Python versions. Like contextlib, it
9446 provides utilities for common tasks involving decorators and context
9447 managers. It also contains additional features that are not part of
9448 the standard library.")
9449 (properties `((python2-variant . ,(delay python2-contextlib2))))
9450 (license license:psfl)))
9451
9452 (define-public python2-contextlib2
9453 (let ((base (package-with-python2
9454 (strip-python2-variant python-contextlib2))))
9455 (package
9456 (inherit base)
9457 (arguments
9458 (substitute-keyword-arguments (package-arguments base)
9459 ((#:phases phases)
9460 `(modify-phases ,phases
9461 (replace 'check
9462 (lambda _ (invoke "python" "test_contextlib2.py" "-v")))))))
9463 (native-inputs
9464 `(("python2-unittest2" ,python2-unittest2))))))
9465
9466 ;; This package is used by python2-pytest via python2-importlib-metadata,
9467 ;; and thus can not depend on python-unittest2 (which depends on pytest).
9468 (define-public python2-contextlib2-bootstrap
9469 (hidden-package
9470 (package/inherit
9471 python2-contextlib2
9472 (name "python2-contextlib2-bootstrap")
9473 (arguments
9474 `(#:tests? #f
9475 ,@(package-arguments python2-contextlib2)))
9476 (native-inputs '()))))
9477
9478 (define-public python-texttable
9479 (package
9480 (name "python-texttable")
9481 (version "1.6.2")
9482 (source
9483 (origin
9484 (method url-fetch)
9485 (uri (pypi-uri "texttable" version))
9486 (sha256
9487 (base32
9488 "1x5l77akfc20x52jma9573qp8l8r07q103pm4l0pbizvh4vp1wzg"))))
9489 (build-system python-build-system)
9490 (arguments
9491 `(#:phases
9492 (modify-phases %standard-phases
9493 (replace 'check
9494 (lambda _ (invoke "pytest" "tests.py"))))))
9495 (native-inputs
9496 `(("python-pytest" ,python-pytest)))
9497 (home-page "https://github.com/foutaise/texttable/")
9498 (synopsis "Python module for creating simple ASCII tables")
9499 (description "Texttable is a Python module for creating simple ASCII
9500 tables.")
9501 (license license:expat)))
9502
9503 (define-public python2-texttable
9504 (package-with-python2 python-texttable))
9505
9506 (define-public python-atomicwrites
9507 (package
9508 (name "python-atomicwrites")
9509 (version "1.3.0")
9510 (source (origin
9511 (method url-fetch)
9512 (uri (pypi-uri "atomicwrites" version))
9513 (sha256
9514 (base32
9515 "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm"))))
9516 (build-system python-build-system)
9517 (synopsis "Atomic file writes in Python")
9518 (description "Library for atomic file writes using platform dependent tools
9519 for atomic file system operations.")
9520 (home-page "https://github.com/untitaker/python-atomicwrites")
9521 (license license:expat)))
9522
9523 (define-public python2-atomicwrites
9524 (package-with-python2 python-atomicwrites))
9525
9526 (define-public python-click-threading
9527 (package
9528 (name "python-click-threading")
9529 (version "0.4.4")
9530 (source (origin
9531 (method url-fetch)
9532 (uri (pypi-uri "click-threading" version))
9533 (sha256
9534 (base32
9535 "1rsxc2fbkxlhwhlmxsdjzq3spn284l6rvjfcz9mbb17ibgdgmc5j"))))
9536 (build-system python-build-system)
9537 (propagated-inputs
9538 `(("python-click" ,python-click)))
9539 (synopsis "Utilities for multithreading in Click")
9540 (description "This package provides utilities for multithreading in Click
9541 applications.")
9542 (home-page "https://github.com/click-contrib/click-threading")
9543 (license license:expat)))
9544
9545 (define-public python-click-log
9546 (package
9547 (name "python-click-log")
9548 (version "0.3.2")
9549 (source (origin
9550 (method url-fetch)
9551 (uri (pypi-uri "click-log" version))
9552 (sha256
9553 (base32
9554 "091i03bhxyzsdbc6kilxhivfda2f8ymz3b33xa6cj5kbzjiirz8n"))))
9555 (build-system python-build-system)
9556 (propagated-inputs
9557 `(("python-click" ,python-click)))
9558 (synopsis "Logging for click applications")
9559 (description "This package provides a Python library for logging Click
9560 applications.")
9561 (home-page "https://github.com/click-contrib/click-log")
9562 (license license:expat)))
9563
9564 (define-public python-apipkg
9565 (package
9566 (name "python-apipkg")
9567 (version "1.5")
9568 (source (origin
9569 (method url-fetch)
9570 (uri (pypi-uri "apipkg" version))
9571 (sha256
9572 (base32
9573 "1xhak74yj3lqflvpijg15rnkklrigvsp5q7s4as4h6a157d8q8ip"))))
9574 (build-system python-build-system)
9575 (native-inputs
9576 `(("python-pytest" ,python-pytest)
9577 ("python-setuptools-scm" ,python-setuptools-scm)))
9578 (synopsis "Namespace control and lazy-import mechanism")
9579 (description "With apipkg you can control the exported namespace of a Python
9580 package and greatly reduce the number of imports for your users. It is a small
9581 pure Python module that works on virtually all Python versions.")
9582 (home-page "https://github.com/pytest-dev/apipkg")
9583 (license license:expat)))
9584
9585 (define-public python-execnet
9586 (package
9587 (name "python-execnet")
9588 (version "1.4.1")
9589 (source (origin
9590 (method url-fetch)
9591 (uri (pypi-uri "execnet" version))
9592 (sha256
9593 (base32
9594 "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
9595 (build-system python-build-system)
9596 (arguments
9597 `(;; 2 failed, 275 passed, 670 skipped, 4 xfailed
9598 ;; The two test failures are caused by the lack of an `ssh` executable.
9599 ;; The test suite can be run with pytest after the 'install' phase.
9600 #:tests? #f))
9601 (native-inputs
9602 `(("python-pytest" ,python-pytest)
9603 ("python-setuptools-scm" ,python-setuptools-scm)))
9604 (propagated-inputs
9605 `(("python-apipkg" ,python-apipkg)))
9606 (synopsis "Rapid multi-Python deployment")
9607 (description "Execnet provides a share-nothing model with
9608 channel-send/receive communication for distributing execution across many
9609 Python interpreters across version, platform and network barriers. It has a
9610 minimal and fast API targeting the following uses:
9611 @enumerate
9612 @item distribute tasks to (many) local or remote CPUs
9613 @item write and deploy hybrid multi-process applications
9614 @item write scripts to administer multiple environments
9615 @end enumerate")
9616 (home-page "https://codespeak.net/execnet/")
9617 (license license:expat)))
9618
9619 (define-public python2-execnet
9620 (package-with-python2 python-execnet))
9621
9622 (define-public python-icalendar
9623 (package
9624 (name "python-icalendar")
9625 (version "4.0.5")
9626 (source (origin
9627 (method url-fetch)
9628 (uri (pypi-uri "icalendar" version))
9629 (sha256
9630 (base32
9631 "14ynjj65kfmlcvpb7k097w789wvxncd3cr3xz5m1jz9yl9v6vv5q"))))
9632 (build-system python-build-system)
9633 (propagated-inputs
9634 `(("python-dateutil" ,python-dateutil)
9635 ("python-pytz" ,python-pytz)))
9636 (synopsis "Python library for parsing iCalendar files")
9637 (description "The icalendar package is a parser/generator of iCalendar
9638 files for use with Python.")
9639 (home-page "https://github.com/collective/icalendar")
9640 (license license:bsd-2)))
9641
9642 (define-public python-args
9643 (package
9644 (name "python-args")
9645 (version "0.1.0")
9646 (source (origin
9647 (method url-fetch)
9648 (uri (pypi-uri "args" version))
9649 (sha256
9650 (base32
9651 "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
9652 (build-system python-build-system)
9653 (home-page "https://github.com/kennethreitz/args")
9654 (synopsis "Command-line argument parser")
9655 (description
9656 "This library provides a Python module to parse command-line arguments.")
9657 (license license:bsd-3)))
9658
9659 (define-public python2-args
9660 (package-with-python2 python-args))
9661
9662 (define-public python-clint
9663 (package
9664 (name "python-clint")
9665 (version "0.5.1")
9666 (source (origin
9667 (method url-fetch)
9668 (uri (pypi-uri "clint" version))
9669 (sha256
9670 (base32
9671 "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
9672 (build-system python-build-system)
9673 (arguments
9674 '(#:phases
9675 (modify-phases %standard-phases
9676 (replace 'check
9677 (lambda _ (invoke "py.test" "-v"))))))
9678 (native-inputs
9679 `(("python-pytest" ,python-pytest)))
9680 (propagated-inputs
9681 `(("python-args" ,python-args)))
9682 (home-page "https://github.com/kennethreitz/clint")
9683 (synopsis "Command-line interface tools")
9684 (description
9685 "Clint is a Python module filled with a set of tools for developing
9686 command-line applications, including tools for colored and indented
9687 output, progress bar display, and pipes.")
9688 (license license:isc)))
9689
9690 (define-public python2-clint
9691 (package-with-python2 python-clint))
9692
9693 (define-public python-rply
9694 (package
9695 (name "python-rply")
9696 (version "0.7.5")
9697 (source (origin
9698 (method url-fetch)
9699 (uri (pypi-uri "rply" version))
9700 (sha256
9701 (base32
9702 "0lv428895zxsz43968qx0q9bimwqnfykndz4dpjbq515w2gvzhjh"))))
9703 (build-system python-build-system)
9704 (propagated-inputs
9705 `(("python-appdirs" ,python-appdirs)))
9706 (home-page "https://github.com/alex/rply")
9707 (synopsis "Parser generator for Python")
9708 (description
9709 "This package provides a pure Python based parser generator, that also
9710 works with RPython. It is a more-or-less direct port of David Bazzley's PLY,
9711 with a new public API, and RPython support.")
9712 (license license:bsd-3)))
9713
9714 (define-public python2-rply
9715 (package-with-python2 python-rply))
9716
9717 (define-public python-hy
9718 (package
9719 (name "python-hy")
9720 (version "0.18.0")
9721 (source (origin
9722 (method url-fetch)
9723 (uri (pypi-uri "hy" version))
9724 (sha256
9725 (base32
9726 "04dfwm336gw61fmgwikvh0cnxk682p19b4w555wl5d7mlym4rwj2"))))
9727 (build-system python-build-system)
9728 (arguments
9729 '(#:phases
9730 (modify-phases %standard-phases
9731 (add-before 'install 'set-HOME
9732 (lambda _
9733 (setenv "HOME" "/tmp") #t))
9734 (replace 'check
9735 (lambda _
9736 ;; Tests require write access to HOME.
9737 (setenv "HOME" "/tmp")
9738 (invoke "nosetests"))))))
9739 (native-inputs
9740 `(("python-coverage" ,python-coverage)
9741 ("python-nose" ,python-nose)))
9742 (propagated-inputs
9743 `(("python-astor" ,python-astor)
9744 ("python-colorama" ,python-colorama)
9745 ("python-rply" ,python-rply)
9746 ("python-funcparserlib"
9747 ,python-funcparserlib)))
9748 (home-page "http://hylang.org/")
9749 (synopsis "Lisp frontend to Python")
9750 (description
9751 "Hy is a dialect of Lisp that's embedded in Python. Since Hy transforms
9752 its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
9753 Python at your fingertips, in Lisp form.")
9754 (license license:expat)))
9755
9756 (define-public python2-functools32
9757 (package
9758 (name "python2-functools32")
9759 (version "3.2.3-2")
9760 (source
9761 (origin
9762 (method url-fetch)
9763 (uri (pypi-uri "functools32" version))
9764 (sha256
9765 (base32
9766 "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
9767 (build-system python-build-system)
9768 (arguments
9769 `(#:python ,python-2
9770 #:tests? #f)) ; no test target
9771 (home-page "https://github.com/MiCHiLU/python-functools32")
9772 (synopsis
9773 "Backport of the functools module from Python 3.2.3")
9774 (description
9775 "This package is a backport of the @code{functools} module from Python
9776 3.2.3 for use with older versions of Python and PyPy.")
9777 (license license:expat)))
9778
9779 (define-public python2-subprocess32
9780 (package
9781 (name "python2-subprocess32")
9782 (version "3.2.7")
9783 (source (origin
9784 (method url-fetch)
9785 (uri (pypi-uri "subprocess32" version))
9786 (sha256
9787 (base32
9788 "14350dhhlhyz5gqzi3lihn9m6lvskx5mcb20srx1kgsk9i50li8y"))
9789 (patches
9790 (search-patches "python2-subprocess32-disable-input-test.patch"))))
9791 (build-system python-build-system)
9792 (arguments
9793 `(#:python ,python-2
9794 ;; The test suite fails with Python > 2.7.13:
9795 ;; import test.support
9796 ;; ImportError: No module named support
9797 #:tests? #f
9798 #:phases
9799 (modify-phases %standard-phases
9800 (add-after 'unpack 'patch-/bin/sh
9801 (lambda _
9802 (substitute* '("subprocess32.py"
9803 "test_subprocess32.py")
9804 (("/bin/sh") (which "sh")))
9805 #t)))))
9806 (home-page "https://github.com/google/python-subprocess32")
9807 (synopsis "Backport of the subprocess module from Python 3.2")
9808 (description
9809 "This is a backport of the @code{subprocess} standard library module
9810 from Python 3.2 and 3.3 for use on Python 2. It includes bugfixes and some
9811 new features. On POSIX systems it is guaranteed to be reliable when used
9812 in threaded applications. It includes timeout support from Python 3.3 but
9813 otherwise matches 3.2’s API.")
9814 (license license:psfl)))
9815
9816 (define-public python2-futures
9817 (package
9818 (name "python2-futures")
9819 (version "3.2.0")
9820 (source
9821 (origin
9822 (method url-fetch)
9823 (uri (pypi-uri "futures" version))
9824 (sha256
9825 (base32
9826 "0rdjmmsab550kxsssdq49jcniz77zlkpw4pvi9hvib3lsskjmh4y"))))
9827 (build-system python-build-system)
9828 (arguments
9829 `(#:python ,python-2
9830 #:phases
9831 (modify-phases %standard-phases
9832 (replace 'check
9833 (lambda _
9834 (invoke "python" "test_futures.py")
9835 #t)))))
9836 (home-page "https://github.com/agronholm/pythonfutures")
9837 (synopsis
9838 "Backport of the concurrent.futures package from Python 3.2")
9839 (description
9840 "The concurrent.futures module provides a high-level interface for
9841 asynchronously executing callables. This package backports the
9842 concurrent.futures package from Python 3.2")
9843 (license license:bsd-3)))
9844
9845 (define-public python-promise
9846 (package
9847 (name "python-promise")
9848 (version "0.4.2")
9849 (source
9850 (origin
9851 (method url-fetch)
9852 (uri (pypi-uri "promise" version))
9853 (sha256
9854 (base32
9855 "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
9856 (build-system python-build-system)
9857 ;; Tests wants python-futures, which is a python2 only program, and
9858 ;; can't be found by python-promise at test time.
9859 (arguments `(#:tests? #f))
9860 (home-page "https://github.com/syrusakbary/promise")
9861 (synopsis "Promises/A+ implementation for Python")
9862 (description
9863 "Promises/A+ implementation for Python")
9864 (properties `((python2-variant . ,(delay python2-promise))))
9865 (license license:expat)))
9866
9867 (define-public python2-promise
9868 (let ((promise (package-with-python2
9869 (strip-python2-variant python-promise))))
9870 (package (inherit promise)
9871 (arguments (substitute-keyword-arguments (package-arguments promise)
9872 ((#:tests? _) #t)))
9873 (native-inputs
9874 `(("python2-futures" ,python2-futures)
9875 ("python2-pytest" ,python2-pytest)
9876 ,@(package-native-inputs promise))))))
9877
9878 (define-public python-progressbar33
9879 (package
9880 (name "python-progressbar33")
9881 (version "2.4")
9882 (source
9883 (origin
9884 (method url-fetch)
9885 (uri (pypi-uri "progressbar33" version))
9886 (sha256
9887 (base32
9888 "1zvf6zs5hzrc03p9nfs4p16vhilqikycvv1yk0pxn8s07fdhvzji"))))
9889 (build-system python-build-system)
9890 (home-page "http://github.com/germangh/python-progressbar")
9891 (synopsis "Text progress bar library for Python")
9892 (description
9893 "This package provides a text progress bar library for Python. This
9894 version only differs from the original @code{progressbar} package in that it
9895 uses relative package imports instead of absolute imports, which is necessary
9896 for the module to work under Python 3.3.")
9897 ;; Either or both of these licenses may be selected.
9898 (license (list license:lgpl2.1+ license:bsd-3))))
9899
9900 (define-public python-colorama
9901 (package
9902 (name "python-colorama")
9903 (version "0.4.3")
9904 (source
9905 (origin
9906 (method url-fetch)
9907 (uri (pypi-uri "colorama" version))
9908 (sha256
9909 (base32
9910 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9"))))
9911 (build-system python-build-system)
9912 (synopsis "Colored terminal text rendering for Python")
9913 (description "Colorama is a Python library for rendering colored terminal
9914 text.")
9915 (home-page "https://pypi.org/project/colorama/")
9916 (license license:bsd-3)))
9917
9918 (define-public python2-colorama
9919 (package-with-python2 python-colorama))
9920
9921 (define-public python-rsa
9922 (package
9923 (name "python-rsa")
9924 (version "3.4.2")
9925 (source
9926 (origin
9927 (method url-fetch)
9928 (uri (pypi-uri "rsa" version))
9929 (sha256
9930 (base32
9931 "1dcxvszbikgzh99ybdc7jq0zb9wspy2ds8z9mjsqiyv3q884xpr5"))))
9932 (build-system python-build-system)
9933 (propagated-inputs
9934 `(("python-pyasn1" ,python-pyasn1)))
9935 (synopsis "Pure-Python RSA implementation")
9936 (description "Python-RSA is a pure-Python RSA implementation. It supports
9937 encryption and decryption, signing and verifying signatures, and key
9938 generation according to PKCS#1 version 1.5. It can be used as a Python
9939 library as well as on the command line.")
9940 (home-page "https://stuvel.eu/rsa")
9941 (license license:asl2.0)))
9942
9943 (define-public python2-rsa
9944 (package-with-python2 python-rsa))
9945
9946 (define-public python-pluggy
9947 (package
9948 (name "python-pluggy")
9949 (version "0.13.1")
9950 (source
9951 (origin
9952 (method url-fetch)
9953 (uri (pypi-uri "pluggy" version))
9954 (sha256
9955 (base32
9956 "1c35qyhvy27q9ih9n899f3h4sdnpgq027dbiilly2qb5cvgarchm"))))
9957 (build-system python-build-system)
9958 (native-inputs
9959 `(("python-setuptools-scm" ,python-setuptools-scm)))
9960 (synopsis "Plugin and hook calling mechanism for Python")
9961 (description "Pluggy is an extraction of the plugin manager as used by
9962 Pytest but stripped of Pytest specific details.")
9963 (home-page "https://pypi.org/project/pluggy/")
9964 (properties `((python2-variant . ,(delay python2-pluggy))))
9965 (license license:expat)))
9966
9967 (define-public python2-pluggy
9968 (let ((base (package-with-python2 (strip-python2-variant
9969 python-pluggy))))
9970 (package/inherit
9971 base
9972 (propagated-inputs
9973 `(("python-importlib-metadata" ,python2-importlib-metadata))))))
9974
9975 ;; This package requires python2-importlib-metadata, but that package
9976 ;; ends up needing python2-pluggy via python2-pytest, so we need this
9977 ;; variant to solve the circular dependency.
9978 (define-public python2-pluggy-bootstrap
9979 (hidden-package
9980 (package/inherit
9981 python2-pluggy
9982 (name "python2-pluggy-bootstrap")
9983 (arguments
9984 `(#:tests? #f
9985 ,@(package-arguments python2-pluggy)))
9986 (propagated-inputs
9987 `(("python-importlib-metadata" ,python2-importlib-metadata-bootstrap))))))
9988
9989 (define-public python-tox
9990 (package
9991 (name "python-tox")
9992 (version "2.8.1")
9993 (source
9994 (origin
9995 (method url-fetch)
9996 (uri (pypi-uri "tox" version))
9997 (sha256
9998 (base32
9999 "1drp6mwm8wdypjym15ia8lwjxbhcksb9vzxg4ay5dh4ji57by2ny"))))
10000 (build-system python-build-system)
10001 (arguments
10002 ;; FIXME: Tests require pytest-timeout, which itself requires
10003 ;; pytest>=2.8.0 for installation.
10004 '(#:tests? #f))
10005 (propagated-inputs
10006 `(("python-pluggy" ,python-pluggy) ; >=0.3.0,<0.4.0
10007 ("python-py" ,python-py)
10008 ("python-virtualenv" ,python-virtualenv)))
10009 (native-inputs
10010 `(; FIXME: Missing: ("python-pytest-timeout" ,python-pytest-timeout)
10011 ("python-pytest" ,python-pytest) ; >= 2.3.5
10012 ("python-setuptools-scm" ,python-setuptools-scm)))
10013 (home-page "https://tox.readthedocs.io")
10014 (synopsis "Virtualenv-based automation of test activities")
10015 (description "Tox is a generic virtualenv management and test command line
10016 tool. It can be used to check that a package installs correctly with
10017 different Python versions and interpreters, or run tests in each type of
10018 supported environment, or act as a frontend to continuous integration
10019 servers.")
10020 (license license:expat)))
10021
10022 (define-public python2-tox
10023 (package-with-python2 python-tox))
10024
10025 (define-public python-jmespath
10026 (package
10027 (name "python-jmespath")
10028 (version "0.9.4")
10029 (source
10030 (origin
10031 (method url-fetch)
10032 (uri (pypi-uri "jmespath" version))
10033 (sha256
10034 (base32
10035 "0k0765x1mybcrzajh3hiqkl8sy9hs0bmn4900frxy0j3ykvaxqmx"))))
10036 (build-system python-build-system)
10037 (native-inputs
10038 `(("python-nose" ,python-nose)))
10039 (synopsis "JSON Matching Expressions")
10040 (description "JMESPath (pronounced “james path”) is a Python library that
10041 allows one to declaratively specify how to extract elements from a JSON
10042 document.")
10043 (home-page "https://github.com/jmespath/jmespath.py")
10044 (license license:expat)))
10045
10046 (define-public python2-jmespath
10047 (package-with-python2 python-jmespath))
10048
10049 (define-public python-botocore
10050 (package
10051 (name "python-botocore")
10052 (version "1.15.26")
10053 (source
10054 (origin
10055 (method url-fetch)
10056 (uri (pypi-uri "botocore" version))
10057 (sha256
10058 (base32
10059 "1a87pbwkk5vlwz92hy1wizfnpiwn11bhaicr6bmji1i5ybwdhnr8"))))
10060 (build-system python-build-system)
10061 (arguments
10062 ;; FIXME: Many tests are failing.
10063 '(#:tests? #f))
10064 (propagated-inputs
10065 `(("python-dateutil" ,python-dateutil)
10066 ("python-docutils" ,python-docutils)
10067 ("python-jmespath" ,python-jmespath)))
10068 (native-inputs
10069 `(("python-mock" ,python-mock)
10070 ("python-nose" ,python-nose)
10071 ("behave" ,behave)
10072 ("python-tox" ,python-tox)
10073 ("python-urllib3" ,python-urllib3)
10074 ("python-wheel" ,python-wheel)))
10075 (home-page "https://github.com/boto/botocore")
10076 (synopsis "Low-level interface to AWS")
10077 (description "Botocore is a Python library that provides a low-level
10078 interface to the Amazon Web Services (AWS) API.")
10079 (license license:asl2.0)))
10080
10081 (define-public python2-botocore
10082 (package-with-python2 python-botocore))
10083
10084 (define-public python-pyfiglet
10085 (package
10086 (name "python-pyfiglet")
10087 (version "0.8.post1")
10088 (source
10089 (origin
10090 (method url-fetch)
10091 (uri (pypi-uri "pyfiglet" version))
10092 (sha256
10093 (base32
10094 "0f9n2076ga2ccsg174k2d7n0z4d44ml96yzc72s6g4nhalbk5hn6"))))
10095 (build-system python-build-system)
10096 (home-page "https://github.com/pwaller/pyfiglet")
10097 (synopsis "Draw ASCII art big letters in Python")
10098 (description "This module lets you draw large letter from ordinary characters
10099 in pure Python.")
10100 (license license:expat)))
10101
10102 (define-public python-xdo
10103 (package
10104 (name "python-xdo")
10105 (version "0.3")
10106 (source (origin
10107 (method url-fetch)
10108 (uri (string-append
10109 "http://http.debian.net/debian/pool/main/p/python-xdo/"
10110 "python-xdo_" version ".orig.tar.gz"))
10111 (sha256
10112 (base32
10113 "1vqh1n5yy5dhnq312kwrl90fnck4v26is3lq3lxdvcn60vv19da0"))))
10114 (build-system python-build-system)
10115 (arguments
10116 '(#:phases
10117 (modify-phases %standard-phases
10118 (add-before 'install 'patch-libxdo-path
10119 ;; Hardcode the path of dynamically loaded libxdo library.
10120 (lambda* (#:key inputs #:allow-other-keys)
10121 (let ((libxdo (string-append
10122 (assoc-ref inputs "xdotool")
10123 "/lib/libxdo.so")))
10124 (substitute* "xdo/_xdo.py"
10125 (("find_library\\(\"xdo\"\\)")
10126 (simple-format #f "\"~a\"" libxdo)))
10127 #t))))
10128 #:tests? #f)) ; no tests provided
10129 (propagated-inputs
10130 `(("python-six" ,python-six)))
10131 (inputs
10132 `(("xdotool" ,xdotool)
10133 ("libX11" ,libx11)))
10134 (home-page "https://tracker.debian.org/pkg/python-xdo")
10135 (synopsis "Python library for simulating X11 keyboard/mouse input")
10136 (description "Provides bindings to libxdo for manipulating X11 via simulated
10137 input. (Note that this is mostly a legacy library; you may wish to look at
10138 python-xdo for newer bindings.)")
10139 (license license:bsd-3)))
10140
10141 (define-public python2-xdo
10142 (package-with-python2 python-xdo))
10143
10144 (define-public python-mako
10145 (package
10146 (name "python-mako")
10147 (version "1.1.2")
10148 (source
10149 (origin
10150 (method url-fetch)
10151 (uri (pypi-uri "Mako" version))
10152 (sha256
10153 (base32
10154 "17bd6r9ynp4hyfckkia0bb8gpd98f42jfl5rmzdpbld59bbcaf9i"))))
10155 (build-system python-build-system)
10156 (arguments
10157 `(#:phases (modify-phases %standard-phases
10158 (replace 'check
10159 (lambda* (#:key tests? #:allow-other-keys)
10160 (if tests?
10161 (invoke "nosetests" "-v")
10162 (format #t "test suite not run~%"))
10163 #t)))))
10164 (propagated-inputs
10165 `(("python-markupsafe" ,python-markupsafe)))
10166 (native-inputs
10167 `(("python-mock" ,python-mock)
10168 ("python-nose" ,python-nose)))
10169 (home-page "https://www.makotemplates.org/")
10170 (synopsis "Templating language for Python")
10171 (description "Mako is a templating language for Python that compiles
10172 templates into Python modules.")
10173 (license license:expat)))
10174
10175 (define-public python2-mako
10176 (package-with-python2 python-mako))
10177
10178 (define-public python-waitress
10179 (package
10180 (name "python-waitress")
10181 (version "1.1.0")
10182 (source
10183 (origin
10184 (method url-fetch)
10185 (uri (pypi-uri "waitress" version))
10186 (patches (search-patches "python-waitress-fix-tests.patch"))
10187 (sha256
10188 (base32
10189 "1a85gyji0kajc3p0s1pwwfm06w4wfxjkvvl4rnrz3h164kbd6g6k"))))
10190 (build-system python-build-system)
10191 (home-page "https://github.com/Pylons/waitress")
10192 (synopsis "Waitress WSGI server")
10193 (description "Waitress is meant to be a production-quality pure-Python WSGI
10194 server with very acceptable performance.")
10195 (license license:zpl2.1)))
10196
10197 (define-public python2-waitress
10198 (package-with-python2 python-waitress))
10199
10200 (define-public python-whichcraft
10201 (package
10202 (name "python-whichcraft")
10203 (version "0.6.1")
10204 (source
10205 (origin
10206 (method url-fetch)
10207 (uri (pypi-uri "whichcraft" version))
10208 (sha256
10209 (base32
10210 "11yfkzyplizdgndy34vyd5qlmr1n5mxis3a3svxmx8fnccdvknxc"))))
10211 (build-system python-build-system)
10212 (native-inputs
10213 `(("python-pytest" ,python-pytest)))
10214 (home-page "https://github.com/pydanny/whichcraft")
10215 (synopsis "Cross-platform cross-python shutil.which functionality")
10216 (description
10217 "This package provides a shim of the shutil.which function that's
10218 designed to work across multiple versions of Python.")
10219 (license license:bsd-3)))
10220
10221 (define-public python-cookiecutter
10222 (package
10223 (name "python-cookiecutter")
10224 (version "1.6.0")
10225 (source
10226 (origin
10227 (method url-fetch)
10228 (uri (pypi-uri "cookiecutter" version))
10229 (sha256
10230 (base32
10231 "0glsvaz8igi2wy1hsnhm9fkn6560vdvdixzvkq6dn20z3hpaa5hk"))))
10232 (build-system python-build-system)
10233 (native-inputs
10234 `(("python-freezegun" ,python-freezegun)
10235 ("python-pytest" ,python-pytest)
10236 ("python-pytest-catchlog" ,python-pytest-catchlog)
10237 ("python-pytest-cov" ,python-pytest-cov)
10238 ("python-pytest-mock" ,python-pytest-mock)))
10239 (propagated-inputs
10240 `(("python-binaryornot" ,python-binaryornot)
10241 ("python-click" ,python-click)
10242 ("python-future" ,python-future)
10243 ("python-jinja2" ,python-jinja2)
10244 ("python-jinja2-time" ,python-jinja2-time)
10245 ("python-poyo" ,python-poyo)
10246 ("python-requests" ,python-requests)
10247 ("python-whichcraft" ,python-whichcraft)))
10248 (home-page "https://github.com/audreyr/cookiecutter")
10249 (synopsis
10250 "Command-line utility that creates projects from project templates")
10251 (description
10252 "This package provides a command-line utility that creates projects from
10253 project templates, e.g. creating a Python package project from a Python package
10254 project template.")
10255 (license license:bsd-3)))
10256
10257 (define-public python-pyquery
10258 (package
10259 (name "python-pyquery")
10260 (version "1.2.17")
10261 (source
10262 (origin
10263 (method url-fetch)
10264 (uri (pypi-uri "pyquery" version))
10265 (sha256
10266 (base32
10267 "1xia20wm0vx5dk85kcwgh13bylz8qh47ffjxssd2586r60xi783a"))))
10268 (build-system python-build-system)
10269 (native-inputs
10270 `(("python-webob" ,python-webob)
10271 ("python-webtest" ,python-webtest)))
10272 (propagated-inputs
10273 `(("python-lxml" ,python-lxml)
10274 ("python-cssselect" ,python-cssselect)))
10275 (home-page "https://github.com/gawel/pyquery")
10276 (synopsis "Make jQuery-like queries on xml documents")
10277 (description "pyquery allows you to make jQuery queries on xml documents.
10278 The API is as much as possible the similar to jQuery. pyquery uses lxml for
10279 fast xml and html manipulation.")
10280 (license license:bsd-3)))
10281
10282 (define-public python-anyjson
10283 (package
10284 (name "python-anyjson")
10285 (version "0.3.3")
10286 (source
10287 (origin
10288 (method url-fetch)
10289 (uri (pypi-uri "anyjson" version))
10290 (sha256
10291 (base32
10292 "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))
10293 (build-system python-build-system)
10294 (arguments
10295 `(;; We could possibly get tests working, but on Python 3 it's not so easy.
10296 ;; Very strangely, 2to3 is run *during setup.py install* (or bdist, or
10297 ;; whatever) so this transformation needs to be done before the tests
10298 ;; can be run. Maybe we could add a build step to transform beforehand
10299 ;; but it could be annoying/difficult.
10300 ;; We can enable tests for the Python 2 version, though, and do below.
10301 #:tests? #f))
10302 (home-page "https://bitbucket.org/runeh/anyjson/")
10303 (synopsis
10304 "Wraps best available JSON implementation in a common interface")
10305 (description
10306 "Anyjson loads whichever is the fastest JSON module installed
10307 and provides a uniform API regardless of which JSON implementation is used.")
10308 (license license:bsd-3)
10309 (properties `((python2-variant . ,(delay python2-anyjson))))))
10310
10311 (define-public python2-anyjson
10312 (let ((anyjson (package-with-python2
10313 (strip-python2-variant python-anyjson))))
10314 (package
10315 (inherit anyjson)
10316 (arguments `(;; Unlike the python 3 variant, we do run tests. See above!
10317 #:tests? #t
10318 ,@(package-arguments anyjson)))
10319 (native-inputs `(("python2-nose" ,python2-nose))))))
10320
10321 (define-public python-amqp
10322 (package
10323 (name "python-amqp")
10324 (version "2.3.2")
10325 (source
10326 (origin
10327 (method url-fetch)
10328 (uri (pypi-uri "amqp" version))
10329 (sha256
10330 (base32
10331 "1sv600dgqwpimr6i1g59y9hpn50mc236gdqkr7zin13kvlpx0g87"))))
10332 (build-system python-build-system)
10333 (native-inputs
10334 `(("python-case" ,python-case)
10335 ("python-pytest-sugar" ,python-pytest-sugar)
10336 ("python-mock" ,python-mock)))
10337 (propagated-inputs
10338 `(("python-vine" ,python-vine)))
10339 (home-page "https://github.com/celery/py-amqp")
10340 (synopsis
10341 "Low-level AMQP client for Python (fork of amqplib)")
10342 (description
10343 "This is a fork of amqplib which was originally written by Barry Pederson.
10344 It is maintained by the Celery project, and used by kombu as a pure python
10345 alternative when librabbitmq is not available.")
10346 (license license:lgpl2.1+)
10347 (properties `((python2-variant . ,(delay python2-amqp))))))
10348
10349 (define-public python2-amqp
10350 (let ((amqp (package-with-python2
10351 (strip-python2-variant python-amqp))))
10352 (package
10353 (inherit amqp)
10354 (arguments `(;; Tries to run coverage tests with nose-cover3, which seems
10355 ;; unmaintained. Weirdly, does not do this on the python 3
10356 ;; version?
10357 #:tests? #f
10358 ,@(package-arguments amqp))))))
10359
10360 (define-public python-txamqp
10361 (package
10362 (name "python-txamqp")
10363 (version "0.8.2")
10364 (source
10365 (origin
10366 (method url-fetch)
10367 (uri (pypi-uri "txAMQP" version))
10368 (sha256
10369 (base32
10370 "0jd9864k3csc06kipiwzjlk9mq4054s8kzk5q1cfnxj8572s4iv4"))))
10371 (build-system python-build-system)
10372 (propagated-inputs
10373 `(("python-six" ,python-six)
10374 ("python-twisted" ,python-twisted)))
10375 (home-page "https://github.com/txamqp/txamqp")
10376 (synopsis "Communicate with AMQP peers and brokers using Twisted")
10377 (description
10378 "This package provides a Python library for communicating with AMQP peers
10379 and brokers using the asynchronous networking framework Twisted. It contains
10380 all the necessary code to connect, send and receive messages to/from an
10381 AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted. It
10382 also includes support for using Thrift RPC over AMQP in Twisted
10383 applications.")
10384 (license license:asl2.0)))
10385
10386 (define-public python2-txamqp
10387 (package-with-python2 python-txamqp))
10388
10389 (define-public python-kombu
10390 (package
10391 (name "python-kombu")
10392 (version "4.2.2")
10393 (source
10394 (origin
10395 (method url-fetch)
10396 (uri (pypi-uri "kombu" version))
10397 (sha256
10398 (base32
10399 "15k8f7mzqr049sg9vi48m19vjykviafk3f0p5xzgw9by0x0kyxjj"))))
10400 (build-system python-build-system)
10401 (native-inputs
10402 `(("python-mock" ,python-mock)
10403 ("python-case" ,python-case)
10404 ("python-pyro4" ,python-pyro4)
10405 ("python-pytest-sugar" ,python-pytest-sugar)
10406 ("python-pytz" ,python-pytz)))
10407 (propagated-inputs
10408 `(("python-anyjson" ,python-anyjson)
10409 ("python-amqp" ,python-amqp)
10410 ("python-redis" ,python-redis)))
10411 (home-page "https://kombu.readthedocs.io")
10412 (synopsis "Message passing library for Python")
10413 (description "The aim of Kombu is to make messaging in Python as easy as
10414 possible by providing an idiomatic high-level interface for the AMQ protocol,
10415 and also provide proven and tested solutions to common messaging problems.
10416 AMQP is the Advanced Message Queuing Protocol, an open standard protocol for
10417 message orientation, queuing, routing, reliability and security, for which the
10418 RabbitMQ messaging server is the most popular implementation.")
10419 (license license:bsd-3)
10420 (properties `((python2-variant . ,(delay python2-kombu))))))
10421
10422 (define-public python2-kombu
10423 (let ((kombu (package-with-python2
10424 (strip-python2-variant python-kombu))))
10425 (package
10426 (inherit kombu)
10427 (arguments `(;; FIXME: 'TestTransport.test_del_sync' fails on python2.
10428 ;; It works fine on the python3 variant.
10429 #:tests? #f
10430 ,@(package-arguments kombu)))
10431 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10432 ,@(package-native-inputs kombu))))))
10433
10434 (define-public python-billiard
10435 (package
10436 (name "python-billiard")
10437 (version "3.5.0.5")
10438 (source
10439 (origin
10440 (method url-fetch)
10441 (uri (pypi-uri "billiard" version))
10442 (sha256
10443 (base32
10444 "03msmapj3s5zgqk87d646mafz7a01h5bm2wijalgpi0s80ks5na2"))))
10445 (build-system python-build-system)
10446 (native-inputs
10447 `(("python-case" ,python-case)
10448 ("python-pytest" ,python-pytest)))
10449 (home-page "https://github.com/celery/billiard")
10450 (synopsis
10451 "Python multiprocessing fork with improvements and bugfixes")
10452 (description
10453 "Billiard is a fork of the Python 2.7 multiprocessing package. The
10454 multiprocessing package itself is a renamed and updated version of R Oudkerk's
10455 pyprocessing package. This standalone variant is intended to be compatible with
10456 Python 2.4 and 2.5, and will draw its fixes/improvements from python-trunk.")
10457 (license license:bsd-3)
10458 (properties `((python2-variant . ,(delay python2-billiard))))))
10459
10460 (define-public python2-billiard
10461 (let ((billiard (package-with-python2
10462 (strip-python2-variant python-billiard))))
10463 (package
10464 (inherit billiard)
10465 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10466 ("python2-mock" ,python2-mock)
10467 ,@(package-native-inputs billiard))))))
10468
10469 (define-public python-celery
10470 (package
10471 (name "python-celery")
10472 (version "4.2.1")
10473 (source
10474 (origin
10475 (method url-fetch)
10476 (uri (pypi-uri "celery" version))
10477 (sha256
10478 (base32
10479 "0y66rz7z8dfcgs3s0qxmdddlaq57bzbgxgfz896nbp14grkv9nkp"))))
10480 (build-system python-build-system)
10481 (arguments
10482 '(;; TODO The tests fail with Python 3.7
10483 ;; https://github.com/celery/celery/issues/4849
10484 #:tests? #f
10485 #:phases
10486 (modify-phases %standard-phases
10487 (add-after 'unpack 'patch-requirements
10488 (lambda _
10489 (substitute* "requirements/test.txt"
10490 (("pytest>=3\\.0,<3\\.3")
10491 "pytest>=3.0"))
10492 #t)))))
10493 (native-inputs
10494 `(("python-case" ,python-case)
10495 ("python-pytest" ,python-pytest)))
10496 (propagated-inputs
10497 `(("python-pytz" ,python-pytz)
10498 ("python-billiard" ,python-billiard)
10499 ("python-kombu" ,python-kombu)))
10500 (home-page "https://celeryproject.org")
10501 (synopsis "Distributed Task Queue")
10502 (description "Celery is an asynchronous task queue/job queue based on
10503 distributed message passing. It is focused on real-time operation, but
10504 supports scheduling as well. The execution units, called tasks, are executed
10505 concurrently on a single or more worker servers using multiprocessing,
10506 Eventlet, or gevent. Tasks can execute asynchronously (in the background) or
10507 synchronously (wait until ready).")
10508 (license license:bsd-3)
10509 (properties `((python2-variant . ,(delay python2-celery))))))
10510
10511 (define-public python2-celery
10512 (let ((celery (package-with-python2
10513 (strip-python2-variant python-celery))))
10514 (package
10515 (inherit celery)
10516 (native-inputs `(("python2-unittest2" ,python2-unittest2)
10517 ("python2-mock" ,python2-mock)
10518 ,@(package-native-inputs celery))))))
10519
10520 (define-public python-translitcodec
10521 (package
10522 (name "python-translitcodec")
10523 (version "0.4.0")
10524 (source
10525 (origin
10526 (method url-fetch)
10527 (uri (pypi-uri "translitcodec" version))
10528 (sha256
10529 (base32
10530 "10x6pvblkzky1zhjs8nmx64nb9jdzxad4bxhq4iwv0j4z2aqjnki"))))
10531 (build-system python-build-system)
10532 (arguments
10533 `(#:tests? #f)) ; no tests provided
10534 (home-page
10535 "https://github.com/claudep/translitcodec")
10536 (synopsis
10537 "Unicode to 8-bit charset transliteration codec")
10538 (description
10539 "This package contains codecs for transliterating ISO 10646 texts into
10540 best-effort representations using smaller coded character sets (ASCII,
10541 ISO 8859, etc.).")
10542 (license license:expat)))
10543
10544 (define-public python2-translitcodec
10545 (package-with-python2 python-translitcodec))
10546
10547 (define-public python-editor
10548 (package
10549 (name "python-editor")
10550 (version "1.0.4")
10551 (source
10552 (origin
10553 (method url-fetch)
10554 (uri (pypi-uri "python-editor" version))
10555 (sha256
10556 (base32
10557 "0yrjh8w72ivqxi4i7xsg5b1vz15x8fg51xra7c3bgfyxqnyadzai"))))
10558 (build-system python-build-system)
10559 (arguments
10560 '(#:tests? #f)) ;XXX: needs a TTY and an editor
10561 (home-page "https://github.com/fmoo/python-editor")
10562 (synopsis "Programmatically open an editor, capture the result")
10563 (description
10564 "python-editor is a library that provides the editor module for
10565 programmatically interfacing with your system's $EDITOR.")
10566 (license license:asl2.0)))
10567
10568 (define-public python2-editor
10569 (package-with-python2 python-editor))
10570
10571 (define-public python-vobject
10572 (package
10573 (name "python-vobject")
10574 (version "0.9.6.1")
10575 (source (origin
10576 (method url-fetch)
10577 (uri (pypi-uri "vobject" version))
10578 (sha256
10579 (base32
10580 "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn"))))
10581 (build-system python-build-system)
10582 (arguments
10583 '(;; The test suite relies on some non-portable Windows interfaces.
10584 #:tests? #f))
10585 (propagated-inputs
10586 `(("python-dateutil" ,python-dateutil)
10587 ("python-pyicu" ,python-pyicu)))
10588 (synopsis "Parse and generate vCard and vCalendar files")
10589 (description "Vobject is intended to be a full featured Python package for
10590 parsing and generating vCard and vCalendar files. Currently, iCalendar files
10591 are supported and well tested. vCard 3.0 files are supported, and all data
10592 should be imported, but only a few components are understood in a sophisticated
10593 way.")
10594 (home-page "https://eventable.github.io/vobject/")
10595 (license license:asl2.0)))
10596
10597 (define-public python2-vobject
10598 (package-with-python2 python-vobject))
10599
10600 (define-public python-munkres
10601 (package
10602 (name "python-munkres")
10603 (version "1.0.8")
10604 (source (origin
10605 (method url-fetch)
10606 (uri (pypi-uri "munkres" version))
10607 (sha256
10608 (base32
10609 "0mbspx4zv8id4x6pim6ybsa1xh96qwpbqj7skbqz4c9c9nf1lpqq"))))
10610 (build-system python-build-system)
10611 (arguments
10612 '(#:tests? #f)) ; no test suite
10613 (home-page "https://software.clapper.org/munkres/")
10614 (synopsis "Implementation of the Munkres algorithm")
10615 (description "The Munkres module provides an implementation of the Munkres
10616 algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm),
10617 useful for solving the Assignment Problem.")
10618 (license license:bsd-3)))
10619
10620 (define-public python2-munkres
10621 (package-with-python2 python-munkres))
10622
10623 (define-public python-whoosh
10624 (package
10625 (name "python-whoosh")
10626 (version "2.7.4")
10627 (source
10628 (origin
10629 (method url-fetch)
10630 (uri (pypi-uri "Whoosh" version))
10631 (sha256
10632 (base32
10633 "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
10634 (build-system python-build-system)
10635 (arguments '(#:tests? #f)) ; Test invocation is no longer supported by Python.
10636 (native-inputs
10637 `(("python-pytest" ,python-pytest)))
10638 (home-page "https://bitbucket.org/mchaput/whoosh")
10639 (synopsis "Full text indexing, search, and spell checking library")
10640 (description
10641 "Whoosh is a fast, pure-Python full text indexing, search, and spell
10642 checking library.")
10643 (license license:bsd-2)))
10644
10645 (define-public python2-whoosh
10646 (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
10647 (package (inherit whoosh)
10648 (propagated-inputs
10649 `(("python2-backport-ssl-match-hostname"
10650 ,python2-backport-ssl-match-hostname)
10651 ,@(package-propagated-inputs whoosh))))))
10652
10653 (define-public python-pathlib
10654 (package
10655 (name "python-pathlib")
10656 (version "1.0.1")
10657 (source (origin
10658 (method url-fetch)
10659 (uri (pypi-uri "pathlib" version))
10660 (sha256
10661 (base32
10662 "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39"))))
10663 (build-system python-build-system)
10664 ;; The tests depend on the internal "test" module, which does not provide
10665 ;; a stable interface.
10666 (arguments `(#:tests? #f))
10667 (home-page "https://pathlib.readthedocs.org/")
10668 (synopsis "Object-oriented file system paths")
10669 (description "Pathlib offers a set of classes to handle file system paths.
10670 It offers the following advantages over using string objects:
10671
10672 @enumerate
10673 @item No more cumbersome use of os and os.path functions. Everything can
10674 be done easily through operators, attribute accesses, and method calls.
10675 @item Embodies the semantics of different path types. For example,
10676 comparing Windows paths ignores casing.
10677 @item Well-defined semantics, eliminating any inconsistencies or
10678 ambiguities (forward vs. backward slashes, etc.).
10679 @end enumerate
10680
10681 Note: In Python 3.4, pathlib is now part of the standard library. For other
10682 Python versions please consider python-pathlib2 instead, which tracks the
10683 standard library module. This module (python-pathlib) isn't maintained
10684 anymore.")
10685 (license license:expat)))
10686
10687 (define-public python2-pathlib
10688 (package-with-python2 python-pathlib))
10689
10690 (define-public python2-pathlib2
10691 (package
10692 (name "python2-pathlib2")
10693 (version "2.3.5")
10694 (source (origin
10695 (method url-fetch)
10696 (uri (pypi-uri "pathlib2" version))
10697 (sha256
10698 (base32
10699 "0s4qa8c082fdkb17izh4mfgwrjd1n5pya18wvrbwqdvvb5xs9nbc"))))
10700 (build-system python-build-system)
10701 ;; We only need the the Python 2 variant, since for Python 3 our minimum
10702 ;; version is 3.4 which already includes this package as part of the
10703 ;; standard library.
10704 (arguments
10705 `(#:python ,python-2))
10706 (propagated-inputs
10707 `(("python2-scandir" ,python2-scandir)
10708 ("python2-six" ,python2-six)))
10709 (home-page "https://pypi.org/project/pathlib2/")
10710 (synopsis "Object-oriented file system paths - backport of standard
10711 pathlib module")
10712 (description "The goal of pathlib2 is to provide a backport of standard
10713 pathlib module which tracks the standard library module, so all the newest
10714 features of the standard pathlib can be used also on older Python versions.
10715
10716 Pathlib offers a set of classes to handle file system paths. It offers the
10717 following advantages over using string objects:
10718
10719 @enumerate
10720 @item No more cumbersome use of os and os.path functions. Everything can
10721 be done easily through operators, attribute accesses, and method calls.
10722 @item Embodies the semantics of different path types. For example,
10723 comparing Windows paths ignores casing.
10724 @item Well-defined semantics, eliminating any inconsistencies or
10725 ambiguities (forward vs. backward slashes, etc.).
10726 @end enumerate")
10727 (license license:expat)))
10728
10729 (define-public python2-pathlib2-bootstrap
10730 (hidden-package
10731 (package
10732 (inherit python2-pathlib2)
10733 (name "python2-pathlib2-bootstrap")
10734 (propagated-inputs
10735 `(("python2-scandir" ,python2-scandir)
10736 ("python2-six" ,python2-six-bootstrap))))))
10737
10738 (define-public python-jellyfish
10739 (package
10740 (name "python-jellyfish")
10741 (version "0.5.6")
10742 (source (origin
10743 (method url-fetch)
10744 (uri (pypi-uri "jellyfish" version))
10745 (sha256
10746 (base32
10747 "1j9rplb16ba2prjj6mip46z0w9pnhnqpwgiwi0x93vnas14rlyl8"))))
10748 (build-system python-build-system)
10749 (native-inputs
10750 `(("python-pytest" ,python-pytest)))
10751 (home-page "https://github.com/jamesturk/jellyfish")
10752 (synopsis "Approximate and phonetic matching of strings")
10753 (description "Jellyfish uses a variety of string comparison and phonetic
10754 encoding algorithms to do fuzzy string matching.")
10755 (license license:bsd-2)
10756 (properties `((python2-variant . ,(delay python2-jellyfish))))))
10757
10758 (define-public python2-jellyfish
10759 (let ((jellyfish (package-with-python2
10760 (strip-python2-variant python-jellyfish))))
10761 (package (inherit jellyfish)
10762 (native-inputs `(("python2-unicodecsv" ,python2-unicodecsv)
10763 ,@(package-native-inputs jellyfish))))))
10764
10765 (define-public python2-unicodecsv
10766 (package
10767 (name "python2-unicodecsv")
10768 (version "0.14.1")
10769 (source (origin
10770 (method git-fetch)
10771 ;; The test suite is not included in the PyPi release.
10772 ;; https://github.com/jdunck/python-unicodecsv/issues/19
10773 (uri (git-reference
10774 (url "https://github.com/jdunck/python-unicodecsv")
10775 (commit version)))
10776 (file-name (git-file-name name version))
10777 (sha256
10778 (base32
10779 "15hx2k41a2lpv4hcml9zp4cvlx1171mnb5s4s13xc1pxkq3vgdjy"))))
10780 (build-system python-build-system)
10781 (arguments
10782 `(;; It supports Python 3, but Python 3 can already do Unicode CSV.
10783 #:python ,python-2))
10784 (native-inputs
10785 `(("python2-unittest2" ,python2-unittest2)))
10786 (home-page "https://github.com/jdunck/python-unicodecsv")
10787 (synopsis "Unicode CSV module for Python 2")
10788 (description "Unicodecsv is a drop-in replacement for Python 2.7's CSV
10789 module, adding support for Unicode strings.")
10790 (license license:bsd-2)))
10791
10792 (define-public python-rarfile
10793 (package
10794 (name "python-rarfile")
10795 (version "2.8")
10796 (source (origin
10797 (method url-fetch)
10798 (uri (pypi-uri "rarfile" version))
10799 (sha256
10800 (base32
10801 "0qfad483kcbga0bn4qmcz953xjk16r52fahiy46zzn56v80y89ra"))))
10802 (build-system python-build-system)
10803 (arguments
10804 '(#:phases
10805 (modify-phases %standard-phases
10806 (replace 'check
10807 ;; Many tests fail, but the installation proceeds.
10808 (lambda _ (invoke "make" "-C" "test" "test"))))))
10809 (native-inputs
10810 `(("which" ,which))) ; required for tests
10811 (propagated-inputs
10812 `(("libarchive" ,libarchive)))
10813 (home-page "https://github.com/markokr/rarfile")
10814 (synopsis "RAR archive reader for Python")
10815 (description "This is Python module for RAR archive reading. The interface
10816 is made as zipfile like as possible.")
10817 (license license:isc)))
10818
10819 (define-public python2-rarfile
10820 (package-with-python2 python-rarfile))
10821
10822 (define-public python-magic
10823 (package
10824 (name "python-magic")
10825 (version "0.4.15")
10826 (source
10827 (origin
10828 (method url-fetch)
10829 (uri (pypi-uri "python-magic" version))
10830 (sha256
10831 (base32
10832 "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
10833 (file-name (string-append name "-" version "-checkout"))))
10834 (build-system python-build-system)
10835 (arguments
10836 ;; The tests are unreliable, so don't run them. The tests fail
10837 ;; under Python3 because they were written for Python2 and
10838 ;; contain import statements that do not work in Python3. One of
10839 ;; the tests fails under Python2 because its assertions are
10840 ;; overly stringent; it relies on comparing output strings which
10841 ;; are brittle and can change depending on the version of
10842 ;; libmagic being used and the system on which the test is
10843 ;; running. In my case, under GuixSD 0.10.0, only one test
10844 ;; failed, and it seems to have failed only because the version
10845 ;; of libmagic that is packaged in Guix outputs a slightly
10846 ;; different (but not wrong) string than the one that the test
10847 ;; expected.
10848 '(#:tests? #f
10849 #:phases (modify-phases %standard-phases
10850 ;; Replace a specific method call with a hard-coded
10851 ;; path to the necessary libmagic.so file in the
10852 ;; store. If we don't do this, then the method call
10853 ;; will fail to find the libmagic.so file, which in
10854 ;; turn will cause any application using
10855 ;; python-magic to fail.
10856 (add-before 'build 'hard-code-path-to-libmagic
10857 (lambda* (#:key inputs #:allow-other-keys)
10858 (let ((file (assoc-ref inputs "file")))
10859 (substitute* "magic.py"
10860 (("ctypes.util.find_library\\('magic'\\)")
10861 (string-append "'" file "/lib/libmagic.so'")))
10862 #t)))
10863 (add-before 'install 'disable-egg-compression
10864 (lambda _
10865 (let ((port (open-file "setup.cfg" "a")))
10866 (display "\n[easy_install]\nzip_ok = 0\n"
10867 port)
10868 (close-port port)
10869 #t))))))
10870 (inputs
10871 ;; python-magic needs to be able to find libmagic.so.
10872 `(("file" ,file)))
10873 (home-page
10874 "https://github.com/ahupp/python-magic")
10875 (synopsis
10876 "File type identification using libmagic")
10877 (description
10878 "This module uses ctypes to access the libmagic file type
10879 identification library. It makes use of the local magic database and
10880 supports both textual and MIME-type output. Note that this module and
10881 the python-file module both provide a \"magic.py\" file; these two
10882 modules, which are different and were developed separately, both serve
10883 the same purpose: to provide Python bindings for libmagic.")
10884 (license license:expat)))
10885
10886 (define-public python2-magic
10887 (package-with-python2 python-magic))
10888
10889 (define-public python2-s3cmd
10890 (package
10891 (name "python2-s3cmd")
10892 (version "1.6.1")
10893 (source
10894 (origin
10895 (method url-fetch)
10896 (uri (string-append "mirror://sourceforge/s3tools/s3cmd/" version "/"
10897 "s3cmd-" version ".tar.gz"))
10898 (sha256
10899 (base32
10900 "0ki1rzhm5icvi9ry5jswi4b22yqwyj0d2wsqsgilwx6qhi7pjxa6"))))
10901 (build-system python-build-system)
10902 (arguments
10903 ;; s3cmd is written for python2 only and contains no tests.
10904 `(#:python ,python-2
10905 #:tests? #f))
10906 (propagated-inputs
10907 `(("python2-dateutil" ,python2-dateutil)
10908 ;; The python-file package also provides a magic.py module.
10909 ;; This is an unfortunate state of affairs; however, s3cmd
10910 ;; fails to install if it cannot find specifically the
10911 ;; python-magic package. Thus we include it, instead of using
10912 ;; python-file. Ironically, s3cmd sometimes works better
10913 ;; without libmagic bindings at all:
10914 ;; https://github.com/s3tools/s3cmd/issues/198
10915 ("python2-magic" ,python2-magic)))
10916 (home-page "https://s3tools.org/s3cmd")
10917 (synopsis "Command line tool for S3-compatible storage services")
10918 (description
10919 "S3cmd is a command line tool for uploading, retrieving and managing data
10920 in storage services that are compatible with the Amazon Simple Storage
10921 Service (S3) protocol, including S3 itself. It supports rsync-like backup,
10922 GnuPG encryption, and more. It also supports management of Amazon's
10923 CloudFront content delivery network.")
10924 (license license:gpl2+)))
10925
10926 (define-public python-pkgconfig
10927 (package
10928 (name "python-pkgconfig")
10929 (version "1.3.1")
10930 (source
10931 (origin
10932 (method url-fetch)
10933 (uri (pypi-uri "pkgconfig" version))
10934 (sha256
10935 (base32
10936 "107x2wmchlch8saixb488cgjz9n6inl38wi7nxkb942rbaapxiqb"))))
10937 (build-system python-build-system)
10938 (native-inputs
10939 `(("python-nose" ,python-nose)))
10940 (inputs
10941 `(("pkg-config" ,pkg-config)))
10942 (arguments
10943 `(#:phases
10944 (modify-phases %standard-phases
10945 (add-before 'build 'patch
10946 ;; Hard-code the path to pkg-config.
10947 (lambda _
10948 (substitute* "pkgconfig/pkgconfig.py"
10949 (("cmd = 'pkg-config")
10950 (string-append "cmd = '" (which "pkg-config"))))
10951 #t))
10952 (replace 'check
10953 (lambda _
10954 (invoke "nosetests" "test.py"))))))
10955 (home-page "https://github.com/matze/pkgconfig")
10956 (synopsis "Python interface for pkg-config")
10957 (description "This module provides a Python interface to pkg-config. It
10958 can be used to find all pkg-config packages, check if a package exists,
10959 check if a package meets certain version requirements, query CFLAGS and
10960 LDFLAGS and parse the output to build extensions with setup.py.")
10961 (license license:expat)))
10962
10963 (define-public python2-pkgconfig
10964 (package-with-python2 python-pkgconfig))
10965
10966 (define-public python-bz2file
10967 (package
10968 (name "python-bz2file")
10969 (version "0.98")
10970 (source
10971 (origin
10972 (method url-fetch)
10973 (uri (pypi-uri "bz2file" version))
10974 (sha256
10975 (base32
10976 "126s53fkpx04f33a829yqqk8fj4png3qwg4m66cvlmhmwc8zihb4"))))
10977 (build-system python-build-system)
10978 (arguments
10979 `(#:tests? #f)) ; Tests use deprecated python modules.
10980 (home-page "https://github.com/nvawda/bz2file")
10981 (synopsis "Read and write bzip2-compressed files")
10982 (description
10983 "Bz2file is a Python library for reading and writing bzip2-compressed
10984 files. It contains a drop-in replacement for the I/O interface in the
10985 standard library's @code{bz2} module, including features from the latest
10986 development version of CPython that are not available in older releases.")
10987 (license license:asl2.0)))
10988
10989 (define-public python2-bz2file
10990 (package-with-python2 python-bz2file))
10991
10992 (define-public python-future
10993 (package
10994 (name "python-future")
10995 (version "0.17.1")
10996 (source
10997 (origin
10998 (method url-fetch)
10999 (uri (pypi-uri "future" version))
11000 (sha256
11001 (base32
11002 "1f2rlqn9rh7adgir52dlbqz69gsab44x0mlm8gf1cs7xvhv54137"))))
11003 (build-system python-build-system)
11004 ;; Many tests connect to the network or are otherwise flawed.
11005 ;; https://github.com/PythonCharmers/python-future/issues/210
11006 (arguments
11007 `(#:tests? #f))
11008 (home-page "https://python-future.org")
11009 (synopsis "Single-source support for Python 3 and 2")
11010 (description
11011 "@code{python-future} is the missing compatibility layer between Python 2 and
11012 Python 3. It allows you to use a single, clean Python 3.x-compatible codebase
11013 to support both Python 2 and Python 3 with minimal overhead.")
11014 (license license:expat)))
11015
11016 (define-public python2-future
11017 (package-with-python2 python-future))
11018
11019 (define-public python-cysignals
11020 (package
11021 (name "python-cysignals")
11022 (version "1.9.0")
11023 (source
11024 (origin
11025 (method url-fetch)
11026 (uri (pypi-uri "cysignals" version))
11027 (sha256
11028 (base32
11029 "15ix8crpad26cfl1skyg7qajqqfdrm8q5ahhmlfmqi1aw0jqj2g2"))))
11030 (build-system python-build-system)
11031 (native-inputs
11032 `(("python-cython" ,python-cython)
11033 ("python-sphinx" ,python-sphinx)))
11034 (inputs
11035 `(("pari-gp" ,pari-gp)))
11036 (arguments
11037 `(#:modules ((guix build python-build-system)
11038 ((guix build gnu-build-system) #:prefix gnu:)
11039 (guix build utils))
11040 ;; FIXME: Tests are executed after installation and currently fail
11041 ;; when not installing into standard locations; the author is working
11042 ;; on a fix.
11043 #:tests? #f
11044 #:phases
11045 (modify-phases %standard-phases
11046 (add-before
11047 'build 'configure
11048 (assoc-ref gnu:%standard-phases 'configure)))))
11049 (home-page
11050 "https://github.com/sagemath/cysignals")
11051 (synopsis
11052 "Handling of interrupts and signals for Cython")
11053 (description
11054 "The cysignals package provides mechanisms to handle interrupts (and
11055 other signals and errors) in Cython code, using two related approaches,
11056 for mixed Cython/Python code or external C libraries and pure Cython code,
11057 respectively.")
11058 (license license:lgpl3+)))
11059
11060 (define-public python2-cysignals
11061 (package-with-python2 python-cysignals))
11062
11063 (define-public python2-shedskin
11064 (package
11065 (name "python2-shedskin")
11066 (version "0.9.4")
11067 (source
11068 (origin
11069 (method url-fetch)
11070 (uri (string-append "https://github.com/shedskin/shedskin/"
11071 "releases/download/v" version
11072 "/shedskin-" version ".tgz"))
11073 (sha256
11074 (base32
11075 "0nzwrzgw1ga8rw6f0ryq7zr9kkiavd1cqz5hzxkcbicl1dk7kz41"))))
11076 (build-system python-build-system)
11077 (arguments
11078 `(#:python ,python-2
11079 #:phases (modify-phases %standard-phases
11080 (add-after 'unpack 'fix-resulting-include-libs
11081 (lambda* (#:key inputs #:allow-other-keys)
11082 (let ((libgc (assoc-ref inputs "libgc"))
11083 (pcre (assoc-ref inputs "pcre")))
11084 (substitute* "shedskin/makefile.py"
11085 (("variable == 'CCFLAGS':[ ]*")
11086 (string-append "variable == 'CCFLAGS':\n"
11087 " line += ' -I " pcre "/include"
11088 " -I " libgc "/include'"))
11089 (("variable == 'LFLAGS':[ ]*")
11090 (string-append "variable == 'LFLAGS':\n"
11091 " line += ' -L" pcre "/lib"
11092 " -L " libgc "/lib'")))
11093 #t))))))
11094 (inputs `(("pcre" ,pcre)
11095 ("libgc" ,libgc)))
11096 (home-page "https://shedskin.github.io/")
11097 (synopsis "Experimental Python-2 to C++ Compiler")
11098 (description (string-append "This is an experimental compiler for a subset of
11099 Python. It generates C++ code and a Makefile."))
11100 (license (list license:gpl3 license:bsd-3 license:expat))))
11101
11102 (define-public python2-rope
11103 (package
11104 (name "python2-rope")
11105 (version "0.11.0")
11106 (source
11107 (origin
11108 (method url-fetch)
11109 (uri (pypi-uri "rope" version))
11110 (sha256
11111 (base32
11112 "1cppm0pa9aqgsbkq130lskrzmrvjs5vpiavjjbhpz2fdw52w8251"))))
11113 (arguments
11114 ;; Rope has only partial python3 support, see `python-rope'
11115 `(#:python ,python-2))
11116 (build-system python-build-system)
11117 (native-inputs
11118 `(("python2-unittest2" ,python2-unittest2)))
11119 (home-page "https://github.com/python-rope/rope")
11120 (synopsis "Refactoring library for Python")
11121 (description "Rope is a refactoring library for Python. It facilitates
11122 the renaming, moving and extracting of attributes, functions, modules, fields
11123 and parameters in Python 2 source code. These refactorings can also be applied
11124 to occurrences in strings and comments.")
11125 (license license:gpl2)))
11126
11127 (define-public python-rope
11128 (package
11129 (inherit python2-rope)
11130 (name "python-rope")
11131 (arguments `(#:python ,python-wrapper
11132 ;; XXX: Only partial python3 support, results in some failing
11133 ;; tests: <https://github.com/python-rope/rope/issues/247>.
11134 #:tests? #f))
11135 (properties `((python2-variant . ,(delay python2-rope))))))
11136
11137 (define-public python-py3status
11138 (package
11139 (name "python-py3status")
11140 (version "3.21")
11141 (source
11142 (origin
11143 (method url-fetch)
11144 (uri (pypi-uri "py3status" version))
11145 (sha256
11146 (base32 "16z8zq83hxy48g6hh4xczbdz50qvxv9k1aahr4fqq7jis60cc262"))))
11147 (build-system python-build-system)
11148 (inputs
11149 `(("file" ,file)))
11150 (arguments
11151 '(#:phases
11152 (modify-phases %standard-phases
11153 ;; 'file' is used for detection of configuration file encoding
11154 ;; let's make link the dependency to particular input
11155 (add-before 'build 'patch-file-path
11156 (lambda* (#:key inputs #:allow-other-keys)
11157 (let ((file-path (assoc-ref inputs "file")))
11158 (substitute* "py3status/parse_config.py"
11159 (("\\[\"file\", \"-b\"")
11160 (string-append "['" file-path "/bin/file', '-b'")))
11161 #t))))
11162 #:tests? #f)) ; TODO: Requires many libraries not in Guix.
11163 (home-page "https://github.com/ultrabug/py3status")
11164 (synopsis "Extensible i3status wrapper written in Python")
11165 (description "py3status is an i3status wrapper which extends i3status
11166 functionality in a modular way, allowing you to extend your panel with your
11167 own code, responding to click events and updating clock every second.")
11168 (license license:bsd-3)))
11169
11170 (define-public python-tblib
11171 (package
11172 (name "python-tblib")
11173 (version "1.6.0")
11174 (source (origin
11175 (method url-fetch)
11176 (uri (pypi-uri "tblib" version))
11177 (sha256
11178 (base32
11179 "0i136n5pydmd202254wzrdbspkw0br0c9mbxhfs9hpfbahvyx6r2"))))
11180 (build-system python-build-system)
11181 (arguments
11182 `(#:phases
11183 (modify-phases %standard-phases
11184 (replace 'check
11185 (lambda _
11186 ;; Upstream runs tests after installation and the package itself
11187 ;; resides in a subdirectory. Extend PYTHONPATH so it will be
11188 ;; found.
11189 (setenv "PYTHONPATH"
11190 (string-append (getcwd) "/build/lib:"
11191 (getenv "PYTHONPATH")))
11192 (invoke "py.test" "-vv" "tests" "README.rst"))))))
11193 (native-inputs
11194 `(("python-pytest" ,python-pytest)
11195 ("python-six" ,python-six)))
11196 (home-page "https://github.com/ionelmc/python-tblib")
11197 (synopsis "Traceback serialization library")
11198 (description
11199 "Traceback serialization allows you to:
11200
11201 @enumerate
11202 @item Pickle tracebacks and raise exceptions with pickled tracebacks in
11203 different processes. This allows better error handling when running code over
11204 multiple processes (imagine multiprocessing, billiard, futures, celery etc).
11205
11206 @item Parse traceback strings and raise with the parsed tracebacks.
11207 @end enumerate\n")
11208 (license license:bsd-3)))
11209
11210 (define-public python2-tblib
11211 (package-with-python2 python-tblib))
11212
11213 (define-public python-greenlet
11214 (package
11215 (name "python-greenlet")
11216 (version "0.4.15")
11217 (source (origin
11218 (method url-fetch)
11219 (uri (pypi-uri "greenlet" version))
11220 (sha256
11221 (base32
11222 "1g4g1wwc472ds89zmqlpyan3fbnzpa8qm48z3z1y6mlk44z485ll"))))
11223 (build-system python-build-system)
11224 (home-page "https://greenlet.readthedocs.io/")
11225 (synopsis "Lightweight in-process concurrent programming")
11226 (description
11227 "Greenlet package is a spin-off of Stackless, a version of CPython
11228 that supports micro-threads called \"tasklets\". Tasklets run
11229 pseudo-concurrently (typically in a single or a few OS-level threads) and
11230 are synchronized with data exchanges on \"channels\".")
11231 (license (list license:psfl license:expat))))
11232
11233 (define-public python2-greenlet
11234 (package-with-python2 python-greenlet))
11235
11236 (define-public python-objgraph
11237 (package
11238 (name "python-objgraph")
11239 (version "3.4.1")
11240 (source
11241 (origin
11242 (method url-fetch)
11243 (uri (pypi-uri "objgraph" version))
11244 (sha256
11245 (base32
11246 "19qmqsh984zq1rzzjy4vqnmviaqnymcyl8h7z99pnicbgwnm2adz"))))
11247 (build-system python-build-system)
11248 (propagated-inputs
11249 `(("python-graphviz" ,python-graphviz)))
11250 (native-inputs
11251 `(("python-mock" ,python-mock)
11252 ("graphviz" ,graphviz)))
11253 (home-page "https://mg.pov.lt/objgraph/")
11254 (synopsis "Draw Python object reference graphs with graphviz")
11255 (description
11256 "This package provides tools to draw Python object reference graphs with
11257 graphviz.")
11258 (license license:expat)))
11259
11260 (define-public python2-objgraph
11261 (package-with-python2 python-objgraph))
11262
11263 (define-public python-gevent
11264 (package
11265 (name "python-gevent")
11266 (version "20.5.0")
11267 (source (origin
11268 (method url-fetch)
11269 (uri (pypi-uri "gevent" version))
11270 (sha256
11271 (base32
11272 "1yppsrs0ccld9j9zfbsd0bxb987b2zkh2ar7whjxcrqzpkvg3iqx"))
11273 (modules '((guix build utils)))
11274 (snippet
11275 '(begin
11276 ;; unbunding libev and c-ares
11277 (delete-file-recursively "deps")
11278 #t))))
11279 (build-system python-build-system)
11280 (arguments
11281 `(#:modules ((ice-9 ftw)
11282 (ice-9 match)
11283 (srfi srfi-26)
11284 (guix build utils)
11285 (guix build python-build-system))
11286 #:phases (modify-phases %standard-phases
11287 (add-before 'patch-source-shebangs 'patch-hard-coded-paths
11288 (lambda _
11289 (substitute* "src/gevent/subprocess.py"
11290 (("/bin/sh") (which "sh")))
11291 (for-each (lambda (file)
11292 (substitute* file
11293 (("/bin/sh") (which "sh"))
11294 (("/bin/true") (which "true"))))
11295 (find-files "src/greentest" "\\.py$"))
11296 #t))
11297 (add-before 'build 'do-not-use-bundled-sources
11298 (lambda _
11299 (setenv "GEVENTSETUP_EMBED" "0")
11300
11301 ;; Prevent building bundled libev.
11302 (substitute* "setup.py"
11303 (("run_make=_BUILDING")
11304 "run_make=False"))
11305 #t))
11306 (add-before 'build 'add-greenlet-on-C_INCLUDE_PATH
11307 (lambda* (#:key inputs #:allow-other-keys)
11308 (let ((greenlet (string-append
11309 (assoc-ref inputs "python-greenlet")
11310 "/include")))
11311 (match (scandir greenlet
11312 (lambda (item)
11313 (string-prefix? "python" item)))
11314 ((python)
11315 (setenv "C_INCLUDE_PATH"
11316 (string-append greenlet "/" python ":"
11317 (or (getenv "C_INCLUDE_PATH")
11318 ""))))))
11319 #t))
11320 (add-before 'check 'pretend-to-be-CI
11321 (lambda _
11322 ;; A few tests are skipped due to network constraints or
11323 ;; get longer timeouts when running in a CI environment.
11324 ;; Piggy-back on that, as we need the same adjustments.
11325 (setenv "TRAVIS" "1")
11326 (setenv "APPVEYOR" "1")
11327 #t))
11328 (add-before 'check 'adjust-tests
11329 (lambda _
11330 (let ((disabled-tests
11331 '(;; These tests rely on networking which is not
11332 ;; available in the build container.
11333 "test_urllib2net.py"
11334 "test__server.py"
11335 "test__server_pywsgi.py"
11336 "test_socket.py"
11337 "test__socket.py"
11338 "test__socket_ssl.py"
11339 "test__socket_dns.py"
11340 "test__socket_dns6.py"
11341 "test___example_servers.py"
11342 "test__getaddrinfo_import.py"
11343 "test__examples.py"
11344 "test_httplib.py"
11345 "test_https.py"
11346 "test_urllib2_localnet.py"
11347 "test_ssl.py"
11348 "test__ssl.py"
11349 ;; XXX: These tests borrow functionality from the
11350 ;; Python builtin 'test' module, but it is not
11351 ;; installed with the Guix Python distribution.
11352 "test_smtpd.py"
11353 "test_wsgiref.py"
11354 "test_urllib2.py"
11355 "test_thread.py"
11356 "test_threading.py"
11357 "test__threading_2.py"
11358 ;; These tests rely on KeyboardInterrupts which do not
11359 ;; work inside the build container for some reason
11360 ;; (lack of controlling terminal?).
11361 "test_subprocess.py"
11362 "test__issues461_471.py"
11363 ;; TODO: Patch out the tests that use getprotobyname, etc
11364 ;; instead of disabling all the tests from these files.
11365 "test__resolver_dnspython.py"
11366 "test__doctests.py"
11367 "test__all__.py"
11368 "test___config.py"
11369 "test__execmodules.py")))
11370 (call-with-output-file "skipped_tests.txt"
11371 (lambda (port)
11372 (format port "~a~%"
11373 (string-join disabled-tests "\n"))))
11374 #t)))
11375 (replace 'check
11376 (lambda _
11377 ;; Make sure the build directory is on PYTHONPATH.
11378 (setenv "PYTHONPATH"
11379 (string-append
11380 (getenv "PYTHONPATH") ":"
11381 (getcwd) "/build/"
11382 (car (scandir "build" (cut string-prefix? "lib." <>)))))
11383
11384 ;; Use the build daemons configured number of workers.
11385 (setenv "NWORKERS" (number->string (parallel-job-count)))
11386
11387 (invoke "python" "-m" "gevent.tests" "--config"
11388 "known_failures.py" "--ignore" "skipped_tests.txt"))))))
11389 (propagated-inputs
11390 `(("python-greenlet" ,python-greenlet)
11391 ("python-objgraph" ,python-objgraph)))
11392 (native-inputs
11393 `(("python-six" ,python-six)
11394
11395 ;; For tests.
11396 ("python-dnspython" ,python-dnspython)
11397 ("python-psutil" ,python-psutil)
11398 ("python-zope.event" ,python-zope-event)
11399 ("python-zope.interface" ,python-zope-interface)))
11400 (inputs
11401 `(("c-ares" ,c-ares)
11402 ("libev" ,libev)))
11403 (home-page "http://www.gevent.org/")
11404 (synopsis "Coroutine-based network library")
11405 (description
11406 "gevent is a coroutine-based Python networking library that uses greenlet
11407 to provide a high-level synchronous API on top of the libev event loop.")
11408 (license license:expat)
11409 (properties `((python2-variant . ,(delay python2-gevent))))))
11410
11411 (define-public python2-gevent
11412 (let ((base (package-with-python2
11413 (strip-python2-variant python-gevent))))
11414 (package
11415 (inherit base)
11416 (native-inputs `(,@(package-native-inputs base)
11417 ("python-mock" ,python2-mock))))))
11418
11419 (define-public python-fastimport
11420 (package
11421 (name "python-fastimport")
11422 (version "0.9.6")
11423 (source
11424 (origin
11425 (method url-fetch)
11426 (uri (pypi-uri "fastimport" version))
11427 (sha256
11428 (base32 "1aqjsin4rmqm7ln4j0p73fzxifws6c6ikgyhav7r137m2ixsxl43"))))
11429 (build-system python-build-system)
11430 (home-page "https://github.com/jelmer/python-fastimport")
11431 (synopsis "VCS fastimport parser and generator in Python")
11432 (description "This package provides a parser for and generator of the Git
11433 @url{https://www.kernel.org/pub/software/scm/git/docs/git-fast-import.html,fastimport}
11434 format.")
11435 (license license:gpl2+)))
11436
11437 (define-public python2-fastimport
11438 (package-with-python2 python-fastimport))
11439
11440 (define-public python-twisted
11441 (package
11442 (name "python-twisted")
11443 (version "19.7.0")
11444 (source (origin
11445 (method url-fetch)
11446 (uri (pypi-uri "Twisted" version ".tar.bz2"))
11447 (sha256
11448 (base32
11449 "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym"))))
11450 (build-system python-build-system)
11451 (arguments
11452 '(#:tests? #f)) ; FIXME: some tests fail
11453 (propagated-inputs
11454 `(("python-zope-interface" ,python-zope-interface)
11455 ("python-pyhamcrest" ,python-pyhamcrest)
11456 ("python-incremental" ,python-incremental)
11457 ("python-hyperlink" ,python-hyperlink)
11458 ("python-constantly" ,python-constantly)
11459 ("python-automat" ,python-automat)))
11460 (home-page "https://twistedmatrix.com/")
11461 (synopsis "Asynchronous networking framework written in Python")
11462 (description
11463 "Twisted is an extensible framework for Python programming, with special
11464 focus on event-based network programming and multiprotocol integration.")
11465 (license license:expat)))
11466
11467 (define-public python2-twisted
11468 (package-with-python2 python-twisted))
11469
11470 (define-public python-pika
11471 (package
11472 (name "python-pika")
11473 (version "0.12.0")
11474 (source
11475 (origin
11476 (method url-fetch)
11477 (uri (pypi-uri "pika" version))
11478 (sha256
11479 (base32
11480 "0ld7akgm93s8pfa4dsx9qlzlhj76zspbr5m9ms0ns09yd2w4aq9h"))))
11481 (build-system python-build-system)
11482 (native-inputs
11483 `(("python-pyev" ,python-pyev)
11484 ("python-tornado" ,python-tornado)
11485 ("python-twisted" ,python-twisted)))
11486 (home-page "https://pika.readthedocs.org")
11487 (synopsis "Pure Python AMQP Client Library")
11488 (description
11489 "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
11490 Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
11491 network support library.")
11492 (license license:bsd-3)))
11493
11494 (define-public python2-pika
11495 (package-with-python2 python-pika))
11496
11497 (define-public python-ply
11498 (package
11499 (name "python-ply")
11500 (version "3.11")
11501 (source
11502 (origin
11503 (method url-fetch)
11504 (uri (pypi-uri "ply" version))
11505 (sha256
11506 (base32
11507 "18qx113g9bi1ac4indd5phma82zcdq601lxncp3vjn43m2mc3iq0"))))
11508 (build-system python-build-system)
11509 (home-page "http://www.dabeaz.com/ply/")
11510 (synopsis "Python Lex & Yacc")
11511 (description "PLY is a @code{lex}/@code{yacc} implemented purely in Python.
11512 It uses LR parsing and does extensive error checking.")
11513 (license license:bsd-3)))
11514
11515 (define-public python-tabulate
11516 (package
11517 (name "python-tabulate")
11518 (version "0.7.7")
11519 (source (origin
11520 (method url-fetch)
11521 (uri (pypi-uri "tabulate" version))
11522 (sha256
11523 (base32
11524 "1inqhspd4frxnp08c32yndr0lc4px1xfkqah184i5w09gkhvi843"))))
11525 (build-system python-build-system)
11526 (arguments
11527 ;; FIXME: The pypi release tarball is missing a 'test/common.py'
11528 ;; and the latest release is not tagged in the upstream repository.
11529 '(#:tests? #f))
11530 (home-page "https://bitbucket.org/astanin/python-tabulate")
11531 (synopsis "Pretty-print tabular data")
11532 (description
11533 "Tabulate is a library and command-line utility to pretty-print tabular
11534 data in Python.")
11535 (license license:expat)))
11536
11537 (define-public python2-tabulate
11538 (package-with-python2 python-tabulate))
11539
11540 (define-public python-kazoo
11541 (package
11542 (name "python-kazoo")
11543 (version "2.4.0")
11544 (source
11545 (origin
11546 (method url-fetch)
11547 (uri (pypi-uri "kazoo" version))
11548 (sha256
11549 (base32
11550 "16y213k7r8shyn2zw1k6lkzjgcrvm441pqv8scvcjixhvpbx3hm7"))))
11551 (build-system python-build-system)
11552 (arguments '(#:tests? #f)) ; XXX: needs zookeeper
11553 (propagated-inputs
11554 `(("python-six" ,python-six)))
11555 (home-page "https://kazoo.readthedocs.org")
11556 (synopsis "High-level Zookeeper client library")
11557 (description
11558 "Kazoo is a Python client library for the Apache Zookeeper distributed
11559 application service. It is designed to be easy to use and to avoid common
11560 programming errors.")
11561 (license license:asl2.0)))
11562
11563 (define-public python2-kazoo
11564 (package-with-python2 python-kazoo))
11565
11566 (define-public python-pykafka
11567 (package
11568 (name "python-pykafka")
11569 (version "2.4.0")
11570 (source (origin
11571 (method url-fetch)
11572 (uri (pypi-uri "pykafka" version))
11573 (sha256
11574 (base32
11575 "1id6sr159p6aa13bxcqyr9gln8sqg1l0ddzns5iws8kk5q1p5cfv"))))
11576 (build-system python-build-system)
11577 (arguments '(#:tests? #f)) ; XXX: needs zookeeper, kafka, etc.
11578 (propagated-inputs
11579 `(("python-gevent" ,python-gevent)
11580 ("python-kazoo" ,python-kazoo)
11581 ("python-tabulate" ,python-tabulate)))
11582 (inputs
11583 `(("librdkafka" ,librdkafka)))
11584 (home-page "https://pykafka.readthedocs.io/")
11585 (synopsis "Apache Kafka client for Python")
11586 (description
11587 "PyKafka is a client for the Apache Kafka distributed messaging system.
11588 It includes Python implementations of Kafka producers and consumers, which
11589 are optionally backed by a C extension built on librdkafka.")
11590 (license license:asl2.0)))
11591
11592 (define-public python2-pykafka
11593 (package-with-python2 python-pykafka))
11594
11595 (define-public python-wcwidth
11596 (package
11597 (name "python-wcwidth")
11598 (version "0.1.8")
11599 (source (origin
11600 (method url-fetch)
11601 (uri (pypi-uri "wcwidth" version))
11602 (sha256
11603 (base32
11604 "1a1pzds3xzfylm5mnc5f6c1p8kiig0daqjc9gygd9rc3cj53x2zj"))))
11605 (build-system python-build-system)
11606 (home-page "https://github.com/jquast/wcwidth")
11607 (synopsis "Measure number of terminal column cells of wide-character codes")
11608 (description "Wcwidth measures the number of terminal column cells of
11609 wide-character codes. It is useful for those implementing a terminal emulator,
11610 or programs that carefully produce output to be interpreted by one. It is a
11611 Python implementation of the @code{wcwidth} and @code{wcswidth} C functions
11612 specified in POSIX.1-2001 and POSIX.1-2008.")
11613 (license license:expat)))
11614
11615 (define-public python2-wcwidth
11616 (package-with-python2 python-wcwidth))
11617
11618 (define-public python2-jsonrpclib
11619 (package
11620 (name "python2-jsonrpclib")
11621 (version "0.1.7")
11622 (source (origin
11623 (method url-fetch)
11624 (uri (pypi-uri "jsonrpclib" version))
11625 (sha256
11626 (base32
11627 "02vgirw2bcgvpcxhv5hf3yvvb4h5wzd1lpjx8na5psdmaffj6l3z"))))
11628 (build-system python-build-system)
11629 (arguments
11630 `(#:tests? #f
11631 #:python ,python-2))
11632 (home-page "https://github.com/joshmarshall/jsonrpclib/")
11633 (synopsis "Implementation of JSON-RPC specification for Python")
11634 (description
11635 "This library is an implementation of the JSON-RPC specification.
11636 It supports both the original 1.0 specification, as well as the
11637 new (proposed) 2.0 spec, which includes batch submission, keyword arguments,
11638 etc.")
11639 (license license:asl2.0)))
11640
11641 (define-public python-chai
11642 (package
11643 (name "python-chai")
11644 (version "1.1.2")
11645 (source (origin
11646 (method url-fetch)
11647 (uri (pypi-uri "chai" version))
11648 (sha256
11649 (base32
11650 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))))
11651 (build-system python-build-system)
11652 (home-page "https://github.com/agoragames/chai")
11653 (synopsis "Mocking framework for Python")
11654 (description
11655 "Chai provides an api for mocking, stubbing and spying your python
11656 objects, patterned after the Mocha library for Ruby.")
11657 (license license:bsd-3)))
11658
11659 (define-public python2-chai
11660 (package-with-python2 python-chai))
11661
11662 (define-public python-inflection
11663 (package
11664 (name "python-inflection")
11665 (version "0.3.1")
11666 (source
11667 (origin (method url-fetch)
11668 (uri (pypi-uri "inflection" version))
11669 (sha256
11670 (base32
11671 "1jhnxgnw8y3mbzjssixh6qkc7a3afc4fygajhqrqalnilyvpzshq"))))
11672 (build-system python-build-system)
11673 (native-inputs
11674 `(("python-pytest" ,python-pytest)))
11675 (home-page "https://github.com/jpvanhal/inflection")
11676 (synopsis "Python string transformation library")
11677 (description
11678 "Inflection is a string transformation library. It singularizes
11679 and pluralizes English words, and transforms strings from CamelCase to
11680 underscored string.")
11681 (license license:expat)))
11682
11683 (define-public python2-inflection
11684 (package-with-python2 python-inflection))
11685
11686 (define-public python-pylev
11687 (package
11688 (name "python-pylev")
11689 (version "1.3.0")
11690 (source (origin
11691 (method url-fetch)
11692 (uri (pypi-uri "pylev" version))
11693 (sha256
11694 (base32
11695 "1hz1x9blsbxya1y9nnhnwwdnqmakxi9mc0jkwj0rn6b1h44i0f86"))))
11696 (build-system python-build-system)
11697 (home-page "https://github.com/toastdriven/pylev")
11698 (synopsis "Levenshtein distance implementation in Python")
11699 (description "Pure Python Levenshtein implementation, based off the
11700 Wikipedia code samples at
11701 @url{http://en.wikipedia.org/wiki/Levenshtein_distance}.")
11702 (license license:bsd-3)))
11703
11704 (define-public python2-pylev
11705 (package-with-python2 python-pylev))
11706
11707 (define-public python-cleo
11708 (package
11709 (name "python-cleo")
11710 (version "0.7.6")
11711 (source (origin
11712 (method url-fetch)
11713 (uri (pypi-uri "cleo" version))
11714 (sha256
11715 (base32
11716 "02dlc0rn43zgvw0s5v4j80bca9n1jfpwy3r78gn9qjgk0qj39kwr"))))
11717 (build-system python-build-system)
11718 (native-inputs
11719 `( ;; For testing
11720 ("python-mock" ,python-mock)
11721 ("python-pytest-mock" ,python-pytest-mock)
11722 ("python-pytest" ,python-pytest)))
11723 (propagated-inputs
11724 `(("python-backpack" ,python-backpack)
11725 ("python-clikit" ,python-clikit)
11726 ("python-pastel" ,python-pastel)
11727 ("python-pylev" ,python-pylev)))
11728 (home-page "https://github.com/sdispater/cleo")
11729 (synopsis "Command-line arguments library for Python")
11730 (description
11731 "Cleo allows you to create command-line commands with signature in
11732 docstring and colored output.")
11733 (license license:expat)))
11734
11735 (define-public python2-cleo
11736 (package-with-python2 python-cleo))
11737
11738 (define-public python-tomlkit
11739 (package
11740 (name "python-tomlkit")
11741 (version "0.5.11")
11742 (source
11743 (origin
11744 (method url-fetch)
11745 (uri (pypi-uri "tomlkit" version))
11746 (sha256
11747 (base32 "1kq1663iqxgwrmb883n55ypi5axnixla2hrby9g2x227asifsi7h"))))
11748 (build-system python-build-system)
11749 (native-inputs
11750 `(("python-pytest" ,python-pytest)))
11751 (home-page "https://github.com/sdispater/tomlkit")
11752 (synopsis "Style-preserving TOML library")
11753 (description
11754 "TOML Kit is a 0.5.0-compliant TOML library. It includes a parser that
11755 preserves all comments, indentations, whitespace and internal element ordering,
11756 and makes them accessible and editable via an intuitive API. It can also
11757 create new TOML documents from scratch using the provided helpers. Part of the
11758 implementation has been adapted, improved, and fixed from Molten.")
11759 (license license:expat)))
11760
11761 (define-public python-shellingham
11762 (package
11763 (name "python-shellingham")
11764 (version "1.3.2")
11765 (source
11766 (origin
11767 (method url-fetch)
11768 (uri (pypi-uri "shellingham" version))
11769 (sha256
11770 (base32 "07kmia2hvd2q7wik89m82hig9mqr2faynvy38vxq5fm0ps11jv2p"))))
11771 (build-system python-build-system)
11772 (arguments
11773 `(#:phases
11774 (modify-phases %standard-phases
11775 (add-after 'unpack 'restore-setup.py
11776 ;; setup.py will return in the next release.
11777 ;; <https://github.com/sarugaku/shellingham/issues/33>
11778 (lambda _
11779 (with-output-to-file "setup.py"
11780 (lambda _
11781 (display "from setuptools import setup\nsetup()\n")))
11782 #t)))))
11783 (home-page "https://github.com/sarugaku/shellingham")
11784 (synopsis "Tool to detect surrounding shell")
11785 (description
11786 "Shellingham detects what shell the current Python executable is
11787 running in.")
11788 (license license:isc)))
11789
11790 (define-public python-memcached
11791 (package
11792 (name "python-memcached")
11793 (version "1.59")
11794 (source
11795 (origin
11796 (method url-fetch)
11797 (uri (pypi-uri "python-memcached" version))
11798 (sha256
11799 (base32
11800 "0kvyapavbirk2x3n1jx4yb9nyigrj1s3x15nm3qhpvhkpqvqdqm2"))
11801 (patches (search-patches "python-memcached-syntax-warnings.patch"))))
11802 (build-system python-build-system)
11803 (propagated-inputs `(("python-six" ,python-six)))
11804 (home-page
11805 "https://github.com/linsomniac/python-memcached")
11806 (synopsis "Pure python memcached client")
11807 (description
11808 "This software is a pure Python interface to the memcached memory cache
11809 daemon. It is the client side software which allows storing values in one or
11810 more, possibly remote, memcached servers.")
11811 (license license:psfl)))
11812
11813 (define-public python-clikit
11814 (package
11815 (name "python-clikit")
11816 (version "0.4.2")
11817 (source
11818 (origin
11819 (method url-fetch)
11820 (uri (pypi-uri "clikit" version))
11821 (sha256
11822 (base32
11823 "1jnnr21hvzx4i29nbph1z96ympv0njiwyvngjq48w1q05133cwzn"))))
11824 (build-system python-build-system)
11825 (propagated-inputs
11826 `(("python-pastel" ,python-pastel)
11827 ("python-pylev" ,python-pylev)))
11828 (home-page "https://github.com/sdispater/clikit")
11829 (synopsis "Group of utilities to build command line interfaces")
11830 (description
11831 "CliKit is a group of utilities to build testable command line
11832 interfaces.")
11833 (properties `((python2-variant . ,(delay python2-clikit))))
11834 (license license:expat)))
11835
11836 (define-public python2-clikit
11837 (let ((base (package-with-python2 (strip-python2-variant python-clikit))))
11838 (package/inherit
11839 base
11840 (propagated-inputs
11841 `(("python-enum34" ,python2-enum34)
11842 ("python-typing" ,python2-typing)
11843 ,@(package-propagated-inputs base))))))
11844
11845 (define-public python-msgpack-python
11846 (package
11847 (name "python-msgpack-python")
11848 (version "0.5.6")
11849 (source
11850 (origin
11851 (method url-fetch)
11852 (uri (pypi-uri "msgpack-python" version))
11853 (sha256
11854 (base32
11855 "16wh8qgybmfh4pjp8vfv78mdlkxfmcasg78lzlnm6nslsfkci31p"))))
11856 (build-system python-build-system)
11857 (home-page "http://msgpack.org/")
11858 (synopsis "Package to deserialize messages in MessagePack binary format")
11859 (description
11860 "MessagePack is an efficient binary serialization format. It lets you
11861 exchange data among multiple languages like JSON. But it's faster and
11862 smaller. Small integers are encoded into a single byte, and typical short
11863 strings require only one extra byte in addition to the strings themselves.")
11864 (license license:asl2.0)))
11865
11866 (define-public python-cachy
11867 (package
11868 (name "python-cachy")
11869 (version "0.3.0")
11870 (source
11871 (origin
11872 (method url-fetch)
11873 (uri (pypi-uri "cachy" version))
11874 (sha256
11875 (base32
11876 "1cb9naly8ampzlky7h74n5wj628l7jkpsh0c0jz0namlrvs82r8q"))))
11877 (build-system python-build-system)
11878 (arguments
11879 '(#:phases
11880 (modify-phases %standard-phases
11881 (replace 'check
11882 (lambda _ (invoke "pifpaf" "run" "memcached" "--port" "11211" "--"
11883 "pytest"))))))
11884 (native-inputs
11885 `(("memcached" ,memcached)
11886 ("python-fakeredis" ,python-fakeredis)
11887 ("python-flexmock" ,python-flexmock)
11888 ("python-pifpaf" ,python-pifpaf)
11889 ("python-pytest" ,python-pytest)))
11890 (propagated-inputs
11891 `(("python-memcached" ,python-memcached)
11892 ("python-msgpack-python" ,python-msgpack-python)
11893 ("python-redis" ,python-redis)))
11894 (home-page "https://github.com/sdispater/cachy")
11895 (synopsis "Simple yet effective caching library")
11896 (description
11897 "Cachy provides a simple yet effective caching library. A simple but
11898 powerful API: thread-safety; decorator syntax; support for memcached, redis,
11899 database, file, dict stores. Cachy supports python versions 2.7+ and 3.2+.")
11900 (license license:expat)))
11901
11902 (define-public poetry
11903 (package
11904 (name "poetry")
11905 (version "1.0.9")
11906 ;; Poetry can only be built from source with Poetry.
11907 (source
11908 (origin
11909 (method url-fetch)
11910 (uri (pypi-uri "poetry" version))
11911 (sha256
11912 (base32
11913 "1avp0db1a4hf6lz3wrzhpdvj4rpmzr4in3myrd3lp5j66nc5ck0a"))))
11914 (build-system python-build-system)
11915 (arguments
11916 `(#:tests? #f ;; Pypi does not have tests.
11917 #:phases
11918 (modify-phases %standard-phases
11919 (add-before 'build 'patch-setup-py
11920 (lambda _
11921 (substitute* "setup.py"
11922 ;; poetry won't update version as 21.0.0 relies on python > 3.6
11923 (("keyring>=20.0.1,<21.0.0") "keyring>=21.0.0,<22.0.0")
11924 (("pyrsistent>=0.14.2,<0.15.0") "pyrsistent>=0.14.2,<0.17.0"))
11925 #t)))))
11926 (propagated-inputs
11927 `(("python-cachecontrol" ,python-cachecontrol)
11928 ("python-cachy" ,python-cachy)
11929 ("python-cleo" ,python-cleo)
11930 ("python-clikit" ,python-clikit)
11931 ("python-html5lib" ,python-html5lib)
11932 ("python-jsonschema" ,python-jsonschema)
11933 ("python-keyring" ,python-keyring)
11934 ("python-msgpack-transitional" ,python-msgpack-transitional)
11935 ("python-pexpect" ,python-pexpect)
11936 ("python-pkginfo" ,python-pkginfo)
11937 ("python-pyparsing" ,python-pyparsing)
11938 ("python-pyrsistent" ,python-pyrsistent)
11939 ("python-requests" ,python-requests)
11940 ("python-requests-toolbelt" ,python-requests-toolbelt)
11941 ("python-shellingham" ,python-shellingham)
11942 ("python-tomlkit" ,python-tomlkit)
11943 ("python-virtualenv" ,python-virtualenv)))
11944 (home-page "https://python-poetry.org")
11945 (synopsis "Python dependency management and packaging made easy")
11946 (description "Poetry is a tool for dependency management and packaging
11947 in Python. It allows you to declare the libraries your project depends on and
11948 it will manage (install/update) them for you.")
11949 (license license:expat)))
11950
11951 (define-public python-lazy-object-proxy
11952 (package
11953 (name "python-lazy-object-proxy")
11954 (version "1.4.3")
11955 (source (origin
11956 (method url-fetch)
11957 (uri (pypi-uri "lazy-object-proxy" version))
11958 (sha256
11959 (base32
11960 "1w1aaay424ciz8fz3fkzxb0pxzfxn184f2whpyn4fx72bn50x47k"))))
11961 (native-inputs
11962 `(("python-setuptools-scm" ,python-setuptools-scm)))
11963 (build-system python-build-system)
11964 (home-page "https://github.com/ionelmc/python-lazy-object-proxy")
11965 (synopsis "Lazy object proxy for python")
11966 (description
11967 "Lazy object proxy is an object that wraps a callable but defers the call
11968 until the object is actually required, and caches the result of said call.")
11969 (license license:bsd-2)))
11970
11971 (define-public python2-lazy-object-proxy
11972 (package-with-python2 python-lazy-object-proxy))
11973
11974 (define-public python-dnspython
11975 (package
11976 (name "python-dnspython")
11977 (version "1.16.0")
11978 (source (origin
11979 (method url-fetch)
11980 (uri (string-append "http://www.dnspython.org/kits/"
11981 version "/dnspython-" version ".tar.gz"))
11982 (sha256
11983 (base32
11984 "1yaw7irazy42n0kdhlk7wyg8ki34rxcnc5xbc1wfwy245b0wbxab"))))
11985 (build-system python-build-system)
11986 (arguments '(#:tests? #f)) ; XXX: requires internet access
11987 (home-page "http://www.dnspython.org")
11988 (synopsis "DNS toolkit for Python")
11989 (description
11990 "dnspython is a DNS toolkit for Python. It supports almost all record
11991 types. It can be used for queries, zone transfers, and dynamic updates.
11992 It supports TSIG authenticated messages and EDNS0.")
11993 (license license:expat)))
11994
11995 (define-public python2-dnspython
11996 (package-with-python2 python-dnspython))
11997
11998 (define-public python-email-validator
11999 (package
12000 (name "python-email-validator")
12001 (version "1.0.2")
12002 (source
12003 (origin (method url-fetch)
12004 (uri (pypi-uri "email_validator" version))
12005 (sha256
12006 (base32
12007 "1ja9149l9ck5n45a72h3is7v476hjny5ybxbcamx1nw6iplsm7k6"))))
12008 (build-system python-build-system)
12009 (arguments
12010 '(#:phases
12011 (modify-phases %standard-phases
12012 (add-before 'build 'use-dnspython
12013 (lambda _
12014 (substitute* "setup.py"
12015 (("dnspython3") "dnspython"))
12016 #t)))))
12017 (propagated-inputs
12018 `(("python-dnspython" ,python-dnspython)
12019 ("python-idna" ,python-idna)))
12020 (home-page "https://github.com/JoshData/python-email-validator")
12021 (synopsis "Email address validation library for Python")
12022 (description
12023 "This library validates email address syntax and deliverability.")
12024 (license license:cc0)))
12025
12026 (define-public python2-email-validator
12027 (package-with-python2 python-email-validator))
12028
12029 (define-public python-ukpostcodeparser
12030 (package
12031 (name "python-ukpostcodeparser")
12032 (version "1.0.3")
12033 (source (origin
12034 (method url-fetch)
12035 (uri (pypi-uri "UkPostcodeParser" version))
12036 (sha256
12037 (base32
12038 "1jwg9z4rz51mcka1821rwgycsd0mcicyp1kiwjfa2kvg8bm9p2qd"))))
12039 (build-system python-build-system)
12040 (home-page "https://github.com/hamstah/ukpostcodeparser")
12041 (synopsis "UK Postcode parser for Python")
12042 (description
12043 "This library provides the @code{parse_uk_postcode} function for
12044 parsing UK postcodes.")
12045 (license license:expat)))
12046
12047 (define-public python2-ukpostcodeparser
12048 (package-with-python2 python-ukpostcodeparser))
12049
12050 (define-public python-faker
12051 (package
12052 (name "python-faker")
12053 (version "4.0.2")
12054 (source (origin
12055 (method url-fetch)
12056 (uri (pypi-uri "Faker" version))
12057 (sha256
12058 (base32
12059 "13qq485ydxmdnqn3xbfv1xfyqbf9qfnfw33v1vw5l6jyy9p8cgrd"))))
12060 (build-system python-build-system)
12061 (arguments
12062 '(#:phases
12063 (modify-phases %standard-phases
12064 (replace 'check
12065 (lambda _ (invoke "python" "-m" "pytest" "-v"))))))
12066 (native-inputs
12067 `(;; For testing
12068 ("python-freezegun" ,python-freezegun)
12069 ("python-pytest" ,python-pytest)
12070 ("python-random2" ,python-random2)
12071 ("python-ukpostcodeparser" ,python-ukpostcodeparser)
12072 ("python-validators" ,python-validators)))
12073 (propagated-inputs
12074 `(("python-dateutil" ,python-dateutil)
12075 ("python-text-unidecode" ,python-text-unidecode)))
12076 (home-page "https://github.com/joke2k/faker")
12077 (synopsis "Python package that generates fake data")
12078 (description
12079 "Faker is a Python package that generates fake data such as names,
12080 addresses, and phone numbers.")
12081 (license license:expat)
12082 (properties `((python2-variant . ,(delay python2-faker))))))
12083
12084 ;; Faker 4.0 dropped Python 2 support, so we stick with this older version here.
12085 (define-public python2-faker
12086 (let ((base (package-with-python2 (strip-python2-variant
12087 python-faker))))
12088 (package
12089 (inherit base)
12090 (version "3.0.1")
12091 (source (origin
12092 (method url-fetch)
12093 (uri (pypi-uri "Faker" version))
12094 (sha256
12095 (base32
12096 "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7"))))
12097 (native-inputs
12098 `(("python-mock" ,python2-mock)
12099 ,@(package-native-inputs base)))
12100 (propagated-inputs
12101 `(("python2-ipaddress" ,python2-ipaddress)
12102 ("python2-six" ,python2-six)
12103 ,@(package-propagated-inputs base))))))
12104
12105 (define-public python-pyaml
12106 (package
12107 (name "python-pyaml")
12108 (version "18.11.0")
12109 (source (origin
12110 (method url-fetch)
12111 (uri (pypi-uri "pyaml" version))
12112 (sha256
12113 (base32
12114 "0fi604ix8lbpj1266q7js6szm771saprdzzcdwmj43wy83694qmr"))))
12115 (build-system python-build-system)
12116 (native-inputs
12117 `(("python-unidecode" ,python-unidecode)))
12118 (propagated-inputs
12119 `(("python-pyyaml" ,python-pyyaml)))
12120 (home-page "https://github.com/mk-fg/pretty-yaml")
12121 (synopsis "YAML pretty-print library for Python")
12122 (description
12123 "pyaml is a PyYAML based python module to produce pretty and readable
12124 YAML-serialized data.")
12125 (license license:wtfpl2)))
12126
12127 (define-public python2-pyaml
12128 (package-with-python2 python-pyaml))
12129
12130 (define-public python-backpack
12131 (package
12132 (name "python-backpack")
12133 (version "0.1")
12134 (source
12135 (origin
12136 (method url-fetch)
12137 (uri (pypi-uri "backpack" version))
12138 (sha256
12139 (base32
12140 "14rq1mvm0jda90lcx9gyyby9dvq4x3js2cmxvd6vl4686ixwyqh1"))))
12141 (build-system python-build-system)
12142 (native-inputs
12143 `(("python-pytest" ,python-pytest)
12144 ("python-nose" ,python-nose)))
12145 (propagated-inputs
12146 `(("python-simplejson" ,python-simplejson)))
12147 (home-page "https://github.com/sdispater/backpack")
12148 (synopsis "Utilities for working with Python collections")
12149 (description "Backpack provides some useful utilities for working with
12150 collections of data.")
12151 (license license:expat)))
12152
12153 (define-public python2-backpack
12154 (package-with-python2 python-backpack))
12155
12156 (define-public python-prompt-toolkit
12157 (package
12158 (name "python-prompt-toolkit")
12159 (version "3.0.5")
12160 (source
12161 (origin
12162 (method url-fetch)
12163 (uri (pypi-uri "prompt_toolkit" version))
12164 (sha256
12165 (base32
12166 "1j3x5s4gp4ih73sbcni0a0vffbzvrxbrbnkvb3fzjgxn810ilgan"))))
12167 (build-system python-build-system)
12168 (arguments
12169 `(#:phases
12170 (modify-phases %standard-phases
12171 (delete 'check)
12172 (add-after 'install 'post-install-check
12173 (lambda* (#:key inputs outputs #:allow-other-keys)
12174 ;; HOME is needed for the test
12175 ;; "test_pathcompleter_can_expanduser".
12176 (setenv "HOME" "/tmp")
12177 (add-installed-pythonpath inputs outputs)
12178 (invoke "py.test"))))))
12179 (propagated-inputs
12180 `(("python-wcwidth" ,python-wcwidth)))
12181 (native-inputs
12182 `(("python-pytest" ,python-pytest)))
12183 (home-page
12184 "https://github.com/prompt-toolkit/python-prompt-toolkit")
12185 (synopsis "Library for building command line interfaces in Python")
12186 (description
12187 "Prompt-Toolkit is a library for building interactive command line
12188 interfaces in Python. It's like GNU Readline but it also features syntax
12189 highlighting while typing, out-of-the-box multi-line input editing, advanced
12190 code completion, incremental search, support for Chinese double-width
12191 characters, mouse support, and auto suggestions.")
12192 (license license:bsd-3)))
12193
12194 (define-public python-prompt-toolkit-2
12195 (package (inherit python-prompt-toolkit)
12196 (name "python-prompt-toolkit")
12197 (version "2.0.7")
12198 (source
12199 (origin
12200 (method url-fetch)
12201 (uri (pypi-uri "prompt_toolkit" version))
12202 (sha256
12203 (base32
12204 "0fgacqk73w7s932vy46pan2yp8rvjmlkag20xvaydh9mhf6h85zx"))))
12205 (propagated-inputs
12206 `(("python-wcwidth" ,python-wcwidth)
12207 ("python-six" ,python-six)
12208 ("python-pygments" ,python-pygments)))))
12209
12210 (define-public python2-prompt-toolkit
12211 (package-with-python2 python-prompt-toolkit-2))
12212
12213 (define-public python-prompt-toolkit-1
12214 (package (inherit python-prompt-toolkit-2)
12215 (version "1.0.15")
12216 (source
12217 (origin
12218 (method url-fetch)
12219 (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
12220 (sha256
12221 (base32
12222 "05v9h5nydljwpj5nm8n804ms0glajwfy1zagrzqrg91wk3qqi1c5"))))))
12223
12224 (define-public python2-prompt-toolkit-1
12225 (package-with-python2 python-prompt-toolkit-1))
12226
12227 (define-public python-jedi
12228 (package
12229 (name "python-jedi")
12230 (version "0.17.0")
12231 (source
12232 (origin
12233 (method url-fetch)
12234 (uri (pypi-uri "jedi" version))
12235 (patches (search-patches "python-jedi-sort-project-test.patch"))
12236 (sha256
12237 (base32
12238 "0c1h9x3a9klvk2g288wl328x8xgzw7136k6vs9hkd56b85vcjh6z"))))
12239 (build-system python-build-system)
12240 (arguments
12241 `(#:phases
12242 (modify-phases %standard-phases
12243 (add-before 'check 'adjust-test-for-python-3.8
12244 (lambda _
12245 ;; Mimic upstream commit e7feeef64 to allow for extra output lines
12246 ;; in TestSetupReadline on Python 3.8. Remove for jedi > 0.17.0.
12247 (substitute* "test/test_utils.py"
12248 (("assert len\\(difference\\) < 20")
12249 "assert len(difference) < 22"))
12250 #t))
12251 (replace 'check
12252 (lambda _
12253 (setenv "HOME" "/tmp")
12254 (invoke "python" "-m" "pytest" "-vv"))))))
12255 (native-inputs
12256 `(("python-pytest" ,python-pytest)
12257 ("python-docopt" ,python-docopt)))
12258 (propagated-inputs
12259 `(("python-parso" ,python-parso)))
12260 (home-page "https://github.com/davidhalter/jedi")
12261 (synopsis "Autocompletion and static analysis library for Python")
12262 (description
12263 "Jedi is a static analysis tool for Python that can be used in Integrated
12264 Development Environments (@dfn{IDE}s) and text editors. It understands Python
12265 on a deeper level than many other static analysis frameworks for Python.
12266
12267 Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
12268 well.")
12269 (license license:expat)))
12270
12271 (define-public python2-jedi
12272 (package-with-python2 python-jedi))
12273
12274 (define-public ptpython
12275 (package
12276 (name "ptpython")
12277 (version "0.34")
12278 (source (origin
12279 (method url-fetch)
12280 (uri (pypi-uri "ptpython" version))
12281 (sha256
12282 (base32
12283 "1mmbiyzf0n8hm7z2a562x7w5cbl6jc0zsk6vp40q1z4cyblv1k13"))))
12284 (build-system python-build-system)
12285 (arguments
12286 '(#:tests? #f)) ; FIXME: No tests in pypi tarball.
12287 (propagated-inputs
12288 `(("python-docopt" ,python-docopt)
12289 ("python-jedi" ,python-jedi)
12290 ("python-prompt-toolkit" ,python-prompt-toolkit)
12291 ("python-pygments" ,python-pygments)))
12292 (home-page "https://github.com/jonathanslenders/ptpython")
12293 (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features")
12294 (description
12295 "ptpython is a Python read-eval-print loop with IDE-like features.
12296 It supports syntax highlighting, multiline editing, autocompletion, mouse,
12297 color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters
12298 etc.")
12299 (license license:bsd-3)
12300 (properties `((python2-variant . ,(delay ptpython-2))))))
12301
12302 (define-public ptpython-2
12303 (let ((base (package-with-python2 (strip-python2-variant ptpython))))
12304 (package
12305 (inherit base)
12306 (name "ptpython2"))))
12307
12308 (define-public python-stem
12309 (package
12310 (name "python-stem")
12311 (version "1.8.0")
12312 (source
12313 (origin
12314 (method url-fetch)
12315 (uri (pypi-uri "stem" version))
12316 (sha256
12317 (base32
12318 "1hk8alc0r4m669ggngdfvryndd0fbx0w62sclcmg55af4ak8xd50"))))
12319 (build-system python-build-system)
12320 (arguments
12321 `(#:phases
12322 (modify-phases %standard-phases
12323 (replace 'check
12324 (lambda _
12325 (invoke "./run_tests.py" "--unit")
12326 #t)))))
12327 (native-inputs
12328 `(("python-mock" ,python-mock)
12329 ("python-pycodestyle" ,python-pycodestyle)
12330 ("python-pyflakes" ,python-pyflakes)))
12331 (home-page "https://stem.torproject.org/")
12332 (synopsis
12333 "Python controller library that allows applications to interact with Tor")
12334 (description
12335 "Stem is a Python controller library for Tor. With it you can use Tor's
12336 control protocol to script against the Tor process and read descriptor data
12337 relays publish about themselves.")
12338 (license license:lgpl3)))
12339
12340 (define-public python2-stem
12341 (package-with-python2 python-stem))
12342
12343 (define-public python-pyserial
12344 (package
12345 (name "python-pyserial")
12346 (version "3.4")
12347 (source
12348 (origin
12349 (method url-fetch)
12350 (uri (pypi-uri "pyserial" version))
12351 (sha256
12352 (base32
12353 "09y68bczw324a4jb9a1cfwrbjhq179vnfkkkrybbksp0vqgl0bbf"))))
12354 (build-system python-build-system)
12355 (arguments
12356 '(#:tests? #f)) ; FIXME: 3/49 tests are failing.
12357 ;; #:phases
12358 ;; (modify-phases %standard-phases
12359 ;; (replace 'check
12360 ;; (lambda _
12361 ;; (zero? (system* "python" "test/run_all_tests.py" "loop://")))))))
12362 (home-page
12363 "https://github.com/pyserial/pyserial")
12364 (synopsis "Python Serial Port Bindings")
12365 (description "@code{pyserial} provide serial port bindings for Python. It
12366 supports different byte sizes, stop bits, parity and flow control with RTS/CTS
12367 and/or Xon/Xoff. The port is accessed in RAW mode.")
12368 (license license:bsd-3)))
12369
12370 (define-public python2-pyserial
12371 (package-with-python2 python-pyserial))
12372
12373 (define-public python-kivy
12374 (package
12375 (name "python-kivy")
12376 (version "1.10.1")
12377 (source
12378 (origin
12379 (method url-fetch)
12380 (uri (pypi-uri "Kivy" version))
12381 (file-name (string-append name "-" version ".tar.gz"))
12382 (sha256
12383 (base32
12384 "1zzxjdp78hfjjiklzr82l4zwibwcq4j6kgicspqs6iyyfn5yisbw"))))
12385 (build-system python-build-system)
12386 (arguments
12387 `(#:tests? #f ; Tests require many optional packages
12388 #:phases
12389 (modify-phases %standard-phases
12390 (add-after 'patch-generated-file-shebangs 'set-sdl-paths
12391 (lambda* (#:key inputs #:allow-other-keys)
12392 (setenv "KIVY_SDL2_PATH"
12393 (string-append (assoc-ref inputs "sdl-union")
12394 "/include/SDL2"))
12395 #t)))))
12396 (native-inputs
12397 `(("pkg-config" ,pkg-config)
12398 ("python-cython" ,python-cython)))
12399 (inputs
12400 `(("gstreamer" ,gstreamer)
12401 ("mesa" ,mesa)
12402 ("sdl-union"
12403 ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf)))))
12404 (home-page "https://kivy.org")
12405 (synopsis
12406 "Multitouch application framework")
12407 (description
12408 "A software library for rapid development of
12409 hardware-accelerated multitouch applications.")
12410 (license license:expat)))
12411
12412 (define-public python2-kivy
12413 (package-with-python2 python-kivy))
12414
12415 (define-public python-binaryornot
12416 (package
12417 (name "python-binaryornot")
12418 (version "0.4.4")
12419 (source (origin
12420 (method url-fetch)
12421 (uri (pypi-uri "binaryornot" version))
12422 (sha256
12423 (base32
12424 "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
12425 (build-system python-build-system)
12426 (arguments
12427 `(#:phases
12428 (modify-phases %standard-phases
12429 (add-after 'unpack 'patch-tests
12430 (lambda _
12431 ;; TypeError: binary() got an unexpected keyword argument
12432 ;; 'average_size'.
12433 (substitute* "tests/test_check.py"
12434 (("average_size=512") ""))
12435 #t)))))
12436 (propagated-inputs
12437 `(("python-chardet" ,python-chardet)
12438 ("python-hypothesis" ,python-hypothesis)))
12439 (home-page "https://github.com/audreyr/binaryornot")
12440 (synopsis "Package to check if a file is binary or text")
12441 (description "Ultra-lightweight pure Python package to check if a file is
12442 binary or text.")
12443 (license license:bsd-3)
12444 (properties `((python2-variant . ,(delay python2-binaryornot))))))
12445
12446 (define-public python2-binaryornot
12447 (let ((base (package-with-python2 (strip-python2-variant python-binaryornot))))
12448 (package (inherit base)
12449 (propagated-inputs
12450 `(("python2-enum34" ,python2-enum34)
12451 ,@(package-propagated-inputs base))))))
12452
12453 (define-public python-binwalk
12454 (package
12455 (name "python-binwalk")
12456 (version "2.2.0")
12457 (source
12458 (origin
12459 (method git-fetch)
12460 (uri (git-reference
12461 (url "https://github.com/ReFirmLabs/binwalk")
12462 (commit (string-append "v" version))))
12463 (file-name (git-file-name name version))
12464 (sha256
12465 (base32
12466 "1bxgj569fzwv6jhcbl864nmlsi9x1k1r20aywjxc8b9b1zgqrlvc"))))
12467 (build-system python-build-system)
12468 (arguments
12469 `(#:phases
12470 (modify-phases %standard-phases
12471 (add-before 'check 'set-pythonpath
12472 (lambda _
12473 (setenv "PYTHONPATH"
12474 (string-append
12475 (getcwd) "/src/"
12476 ":" (getenv "PYTHONPATH")))
12477 (setenv "HOME" "")
12478 #t)))))
12479 (native-inputs
12480 `(("python-coverage" ,python-coverage)
12481 ("python-nose" ,python-nose)))
12482 (home-page "https://github.com/ReFirmLabs/binwalk")
12483 (synopsis "Firmware analysis tool")
12484 (description "Binwalk is a tool for analyzing, reverse engineering, and
12485 extracting firmware images")
12486 (license license:expat)))
12487
12488 (define-public python-nltk
12489 (package
12490 (name "python-nltk")
12491 (version "3.2.1")
12492 (source (origin
12493 (method url-fetch)
12494 (uri (pypi-uri "nltk" version))
12495 (sha256
12496 (base32
12497 "0skxbhnymwlspjkzga0f7x1hg3y50fwpfghs8g8k7fh6f4nknlym"))))
12498 (build-system python-build-system)
12499 (arguments
12500 '(;; The tests require some extra resources to be downloaded.
12501 ;; TODO Try packaging these resources.
12502 #:tests? #f))
12503 (home-page "http://nltk.org/")
12504 (synopsis "Natural Language Toolkit")
12505 (description "It provides interfaces to over 50 corpora and lexical
12506 resources such as WordNet, along with a suite of text processing libraries
12507 for classification, tokenization, stemming, tagging, parsing, and semantic
12508 reasoning, wrappers for natural language processing libraries.")
12509 (license license:asl2.0)))
12510
12511 (define-public python2-nltk
12512 (package-with-python2 python-nltk))
12513
12514 (define-public python-pymongo
12515 (package
12516 (name "python-pymongo")
12517 (version "3.7.2")
12518 (source (origin
12519 (method url-fetch)
12520 (uri (pypi-uri "pymongo" version))
12521 (sha256
12522 (base32
12523 "0zis4707r9hdg5qgkhp3wss9camr9h56ixyfc8n9dxwlnnly4x4c"))))
12524 (build-system python-build-system)
12525 (propagated-inputs
12526 `(("python-certifi" ,python-certifi)))
12527 (home-page "https://github.com/mongodb/mongo-python-driver")
12528 (synopsis "Python driver for MongoDB")
12529 (description "Python driver for MongoDB.")
12530 (license license:asl2.0)))
12531
12532 (define-public python2-pymongo
12533 (package-with-python2 python-pymongo))
12534
12535 (define-public python-consul
12536 (package
12537 (name "python-consul")
12538 (version "0.6.1")
12539 (source
12540 (origin
12541 (method url-fetch)
12542 (uri (pypi-uri "python-consul" version))
12543 (sha256
12544 (base32
12545 "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
12546 (build-system python-build-system)
12547 (arguments
12548 '(#:tests? #f)) ; The tests are not distributed
12549 (propagated-inputs
12550 `(("python-requests" ,python-requests)
12551 ("python-six" ,python-six)))
12552 (home-page "https://github.com/cablehead/python-consul")
12553 (synopsis "Python client for Consul")
12554 (description
12555 "Python client for @url{http://www.consul.io/,Consul}, a tool for service
12556 discovery, monitoring and configuration.")
12557 (license license:expat)))
12558
12559 (define-public python2-consul
12560 (package-with-python2 python-consul))
12561
12562 (define-public python-schematics
12563 (package
12564 (name "python-schematics")
12565 (version "1.1.1")
12566 (source
12567 (origin
12568 (method git-fetch)
12569 (uri (git-reference
12570 (url "https://github.com/schematics/schematics.git")
12571 (commit (string-append "v" version))))
12572 (file-name (git-file-name name version))
12573 (sha256
12574 (base32 "0xdqskycznqc7mfp60bhw1zq8wx7yx1dvmbq3brnm1dx3xnqa0zd"))))
12575 (build-system python-build-system)
12576 (propagated-inputs
12577 `(("python-six" ,python-six)))
12578 (arguments
12579 ;; The tests require a bunch of not very nice packages with fixed
12580 ;; version requirements (e.g. python-coveralls).
12581 `(#:tests? #f))
12582 (home-page "https://github.com/schematics/schematics")
12583 (synopsis "Python Data Structures for Humans")
12584 (description "Python Data Structures for Humans.")
12585 (license license:bsd-3)))
12586
12587 (define-public python2-schematics
12588 (package-with-python2 python-schematics))
12589
12590 (define-public python-odfpy
12591 (package
12592 (name "python-odfpy")
12593 (version "1.4.1")
12594 (source (origin
12595 (method url-fetch)
12596 (uri (pypi-uri "odfpy" version))
12597 (sha256
12598 (base32
12599 "1v1qqk9p12qla85yscq2g413l3qasn6yr4ncyc934465b5p6lxnv"))))
12600 (arguments
12601 `(#:phases
12602 (modify-phases %standard-phases
12603 (replace 'check
12604 (lambda _
12605 (setenv "PYTHONPATH" (string-append "./build/lib:"
12606 (getenv "PYTHONPATH")))
12607 (invoke "pytest" "-vv"))))))
12608 (build-system python-build-system)
12609 (native-inputs
12610 `(("python-pytest" ,python-pytest)))
12611 (propagated-inputs
12612 `(("python-defusedxml" ,python-defusedxml)))
12613 (home-page "https://github.com/eea/odfpy")
12614 (synopsis "Python API and tools to manipulate OpenDocument files")
12615 (description "Collection of libraries and utility programs written in
12616 Python to manipulate OpenDocument 1.2 files.")
12617 (license
12618 ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
12619 ;; number of files with other licenses.
12620 (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
12621
12622 (define-public python2-odfpy
12623 (package-with-python2 python-odfpy))
12624
12625 (define-public python-natsort
12626 (package
12627 (name "python-natsort")
12628 (version "7.0.1")
12629 (source (origin
12630 (method url-fetch)
12631 (uri (pypi-uri "natsort" version))
12632 (sha256
12633 (base32
12634 "1ksqfai72dbcfbwx43pxl658j59mx2rvqypjy1fk0ax2qd6lccx6"))))
12635 (build-system python-build-system)
12636 (arguments
12637 `(#:modules ((guix build utils)
12638 (guix build python-build-system)
12639 (srfi srfi-1)
12640 (srfi srfi-26)
12641 (ice-9 ftw))
12642 #:phases
12643 (modify-phases %standard-phases
12644 (add-before 'check 'set-cachedir
12645 ;; Tests require write access to $HOME by default
12646 (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t))
12647 (replace 'check
12648 (lambda _
12649 (let ((cwd (getcwd)))
12650 (setenv "PYTHONPATH"
12651 (string-append
12652 cwd "/build/"
12653 (find (cut string-prefix? "lib" <>)
12654 (scandir (string-append cwd "/build")))
12655 ":"
12656 (getenv "PYTHONPATH")))
12657 (invoke "pytest" "-v")))))))
12658 (native-inputs
12659 `(("python-hypothesis" ,python-hypothesis)
12660 ("python-pytest-cov" ,python-pytest-cov)
12661 ("python-pytest-mock" ,python-pytest-mock)
12662 ("python-pytest" ,python-pytest)))
12663 (propagated-inputs ; TODO: Add python-fastnumbers.
12664 `(("python-pyicu" ,python-pyicu)))
12665 (home-page "https://github.com/SethMMorton/natsort")
12666 (synopsis "Natural sorting for python and shell")
12667 (description
12668 "Natsort lets you apply natural sorting on lists instead of
12669 lexicographical. If you use the built-in @code{sorted} method in python
12670 on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4},
12671 @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20},
12672 @code{a4}, @code{a9}]}. Natsort provides a function @code{natsorted} that
12673 identifies numbers and sorts them separately from strings. It can also sort
12674 version numbers, real numbers, mixed types and more, and comes with a shell
12675 command @command{natsort} that exposes this functionality in the command line.")
12676 (license license:expat)
12677 (properties `((python2-variant . ,(delay python2-natsort))))))
12678
12679 ;; Natsort 6.x are the last versions with support for Python 2.
12680 (define-public python2-natsort
12681 (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
12682 (package (inherit base)
12683 (version "6.2.1")
12684 (source (origin
12685 (method url-fetch)
12686 (uri (pypi-uri "natsort" version))
12687 (sha256
12688 (base32
12689 "1mc9hbh6fv76xyz13frm7dgi05cf74f9j5wvcyjiy5234gylz565"))))
12690 (native-inputs
12691 `(("python2-pathlib" ,python2-pathlib)
12692 ,@(package-native-inputs base))))))
12693
12694 (define-public glances
12695 (package
12696 (name "glances")
12697 (version "3.1.4")
12698 (source
12699 (origin
12700 (method url-fetch)
12701 (uri (pypi-uri "Glances" version))
12702 (sha256
12703 (base32 "0dc47gbvp9a3wxppdqihxpglxxaxbj3hcvzgcxxq8zcsciah3plq"))
12704 (modules '((guix build utils)))
12705 (snippet
12706 '(begin
12707 ;; Glances phones PyPI for weekly update checks by default.
12708 ;; Disable these. The user can re-enable them if desired.
12709 (substitute* "glances/outdated.py"
12710 (("^(.*)self\\.load_config\\(config\\)\n" line indentation)
12711 (string-append indentation
12712 "self.args.disable_check_update = True\n"
12713 line)))
12714 #t))))
12715 (build-system python-build-system)
12716 (propagated-inputs
12717 `(("python-future" ,python-future)
12718 ("python-psutil" ,python-psutil)))
12719 (home-page "https://github.com/nicolargo/glances")
12720 (synopsis "Cross-platform curses-based monitoring tool")
12721 (description
12722 "Glances is a curses-based monitoring tool for a wide variety of platforms.
12723 Glances uses the PsUtil library to get information from your system. It
12724 monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
12725 (license license:lgpl3+)))
12726
12727 (define-public python-glances
12728 (deprecated-package "python-glances" glances))
12729
12730 (define-public python-graphql-core
12731 (package
12732 (name "python-graphql-core")
12733 (version "0.5.3")
12734 (source
12735 (origin
12736 (method url-fetch)
12737 (uri (pypi-uri "graphql-core" version))
12738 (sha256
12739 (base32
12740 "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
12741 (build-system python-build-system)
12742 (arguments
12743 `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
12744 #:phases
12745 (modify-phases %standard-phases
12746 (add-after 'unpack 'patch-hardcoded-version
12747 (lambda _ (substitute*
12748 "setup.py"
12749 (("'gevent==1.1rc1'") "'gevent'"))
12750 #t)))))
12751 (native-inputs
12752 `(("python-gevent" ,python-gevent)
12753 ("python-mock" ,python-mock)
12754 ("python-pytest-mock" ,python-pytest-mock)))
12755 (propagated-inputs
12756 `(("python-promise" ,python-promise)
12757 ("python-six" ,python-six)))
12758 (home-page "https://github.com/graphql-python/graphql-core")
12759 (synopsis "GraphQL implementation for Python")
12760 (description
12761 "GraphQL implementation for Python. GraphQL is a data query language and
12762 runtime designed and used to request and deliver data to mobile and web apps.
12763 This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
12764 to Python.")
12765 (license license:expat)))
12766
12767 (define-public python2-graphql-core
12768 (package-with-python2 python-graphql-core))
12769
12770 (define-public python-graphql-relay
12771 (package
12772 (name "python-graphql-relay")
12773 (version "0.4.5")
12774 (source
12775 (origin
12776 (method url-fetch)
12777 (uri (pypi-uri "graphql-relay" version))
12778 (sha256
12779 (base32
12780 "1nv5dxcj59zv31qvl8bd142njmxcmymny2dz3br1l2cpbljbf5i7"))))
12781 (build-system python-build-system)
12782 (arguments
12783 '(#:tests? #f)) ; The tests are not distributed
12784 (propagated-inputs
12785 `(("python-graphql-core" ,python-graphql-core)
12786 ("python-promise" ,python-promise)
12787 ("python-six" ,python-six)))
12788 (home-page "https://github.com/graphql-python/graphql-relay-py")
12789 (synopsis "Relay implementation for Python")
12790 (description
12791 "This is a library to allow the easy creation of Relay-compliant servers
12792 using the GraphQL Python reference implementation of a GraphQL server. It
12793 should be noted that the code is a exact port of the original
12794 @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
12795 from Facebook.")
12796 (license license:expat)))
12797
12798 (define-public python2-graphql-relay
12799 (package-with-python2 python-graphql-relay))
12800
12801 (define-public python-graphene
12802 (package
12803 (name "python-graphene")
12804 (version "0.10.2")
12805 (source
12806 (origin
12807 (method url-fetch)
12808 (uri (pypi-uri "graphene" version))
12809 (sha256
12810 (base32
12811 "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
12812 (build-system python-build-system)
12813 (propagated-inputs
12814 `(("python-graphql-core" ,python-graphql-core)
12815 ("python-graphql-relay" ,python-graphql-relay)
12816 ("python-iso8601" ,python-iso8601)
12817 ("python-promise" ,python-promise)
12818 ("python-six" ,python-six)))
12819 (arguments
12820 `(#:tests? #f)) ; no tests/ in the PyPI tarball
12821 (home-page "https://graphene-python.org/")
12822 (synopsis "GraphQL Framework for Python")
12823 (description
12824 "Graphene is a Python library for building GraphQL schemas/types.
12825 A GraphQL schema describes your data model, and provides a GraphQL server
12826 with an associated set of resolve methods that know how to fetch data.")
12827 (properties `((python2-variant . ,(delay python2-graphene))))
12828 (license license:expat)))
12829
12830 (define-public python2-graphene
12831 (let ((base (package-with-python2
12832 (strip-python2-variant python-graphene))))
12833 (package (inherit base)
12834 (native-inputs
12835 `(("python2-sqlalchemy" ,python2-sqlalchemy)
12836 ,@(package-native-inputs base))))))
12837
12838 (define-public python-nautilus
12839 (package
12840 (name "python-nautilus")
12841 (version "0.4.9")
12842 (source
12843 (origin
12844 (method url-fetch)
12845 (uri (pypi-uri "nautilus" version))
12846 (sha256
12847 (base32
12848 "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
12849 (build-system python-build-system)
12850 (arguments `(#:tests? #f)) ; fails to import test modules
12851 (propagated-inputs
12852 `(("python-bcrypt" ,python-bcrypt)
12853 ("python-click" ,python-click)
12854 ("python-consul" ,python-consul)
12855 ("python-graphene" ,python-graphene)
12856 ("python-jinja2" ,python-jinja2)
12857 ("python-peewee" ,python-peewee)
12858 ("python-pika" ,python-pika)
12859 ("python-tornado" ,python-tornado)
12860 ("python-wtforms" ,python-wtforms)))
12861 (native-inputs
12862 `(("python-nose2" ,python-nose2)))
12863 (home-page "https://github.com/AlecAivazis/nautilus")
12864 (synopsis "Library for creating microservice applications")
12865 (description
12866 "Nautilus is a framework for flux based microservices that looks to
12867 provide extendible implementations of common aspects of a cloud so that you can
12868 focus on building massively scalable web applications.")
12869 (license license:expat)))
12870
12871 (define-public python-random2
12872 (package
12873 (name "python-random2")
12874 (version "1.0.1")
12875 (source (origin
12876 (method url-fetch)
12877 (uri (pypi-uri "random2" version ".zip"))
12878 (sha256
12879 (base32
12880 "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l"))))
12881 (build-system python-build-system)
12882 (native-inputs `(("unzip" ,unzip)))
12883 (home-page "http://pypi.python.org/pypi/random2")
12884 (synopsis "Python 3 version of the Python 2 @code{random} module")
12885 (description
12886 "This package provides a Python 3 ported version of Python 2.7’s
12887 @code{random} module. It has also been back-ported to work in Python 2.6.
12888
12889 In Python 3, the implementation of @code{randrange()} was changed, so that
12890 even with the same seed you get different sequences in Python 2 and 3.
12891
12892 This package closes that gap, allowing stable random number generation
12893 between the different Python versions.")
12894 (license license:psfl)))
12895
12896 (define-public python2-random2
12897 (package-with-python2 python-random2))
12898
12899 (define-public python-snowballstemmer
12900 (package
12901 (name "python-snowballstemmer")
12902 (version "2.0.0")
12903 (source (origin
12904 (method url-fetch)
12905 (uri (pypi-uri "snowballstemmer" version))
12906 (sha256
12907 (base32
12908 "0ligk61idlz8kkgd5hpip5whm172riwglb6xydii7h62yhysqfyz"))))
12909 (build-system python-build-system)
12910 (arguments
12911 `(;; No tests exist
12912 #:tests? #f))
12913 (home-page "https://github.com/shibukawa/snowball_py")
12914 (synopsis "Snowball stemming library collection for Python")
12915 (description "This package provides 16 word stemmer algorithms generated
12916 from Snowball algorithms. It includes the 15 original ones plus the Poerter
12917 English stemmer.")
12918 (license license:bsd-3)))
12919
12920 (define-public python2-snowballstemmer
12921 (package-with-python2 python-snowballstemmer))
12922
12923 (define-public python-setproctitle
12924 (package
12925 (name "python-setproctitle")
12926 (version "1.1.10")
12927 (source
12928 (origin
12929 (method url-fetch)
12930 (uri (pypi-uri "setproctitle" version))
12931 (sha256
12932 (base32
12933 "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))
12934 (build-system python-build-system)
12935 (arguments
12936 '(#:phases
12937 (modify-phases %standard-phases
12938 (add-before 'check 'patch-Makefile
12939 ;; Stricly this is only required for the python2 variant.
12940 ;; But adding a phase in an inherited package seems to be
12941 ;; cumbersum. So we patch even for python3.
12942 (lambda _
12943 (let ((nose (assoc-ref %build-inputs "python2-nose")))
12944 (when nose
12945 (substitute* "Makefile"
12946 (("\\$\\(PYTHON\\) [^ ]which nosetests[^ ] ")
12947 (string-append nose "/bin/nosetests "))))
12948 #t)))
12949 (replace 'check
12950 (lambda _
12951 (setenv "PYTHON" (or (which "python3") (which "python")))
12952 (setenv "PYCONFIG" (or (which "python3-config")
12953 (which "python-config")))
12954 (setenv "CC" "gcc")
12955 ;; No need to extend PYTHONPATH to find the built package, since
12956 ;; the Makefile will build anyway
12957 (invoke "make" "check"))))))
12958 (native-inputs
12959 `(("procps" ,procps))) ; required for tests
12960 (home-page
12961 "https://github.com/dvarrazzo/py-setproctitle")
12962 (synopsis
12963 "Setproctitle implementation for Python to customize the process title")
12964 (description "The library allows a process to change its title (as displayed
12965 by system tools such as ps and top).
12966
12967 Changing the title is mostly useful in multi-process systems, for
12968 example when a master process is forked: changing the children's title
12969 allows identifying the task each process is busy with. The technique
12970 is used by PostgreSQL and the OpenSSH Server for example.")
12971 (license license:bsd-3)
12972 (properties `((python2-variant . ,(delay python2-setproctitle))))))
12973
12974 (define-public python2-setproctitle
12975 (let ((base (package-with-python2
12976 (strip-python2-variant python-setproctitle))))
12977 (package
12978 (inherit base)
12979 (native-inputs `(("python2-nose" ,python2-nose)
12980 ,@(package-native-inputs base))))))
12981
12982 (define-public python-validictory
12983 (package
12984 (name "python-validictory")
12985 (version "1.0.1")
12986 (source
12987 (origin
12988 (method url-fetch)
12989 (uri (pypi-uri "validictory" version))
12990 (sha256
12991 (base32
12992 "1zf1g9sw47xzp5f80bd94pb42j9yqv82lcrgcvdwr6nkaphfi37q"))))
12993 (build-system python-build-system)
12994 (arguments
12995 '(#:phases
12996 (modify-phases %standard-phases
12997 (add-after 'unpack 'bootstrap
12998 ;; Move the tests out of the package directory to avoid
12999 ;; packaging them.
13000 (lambda* _
13001 (rename-file "validictory/tests" "tests")
13002 (delete-file "tests/__init__.py")))
13003 (replace 'check
13004 (lambda _
13005 ;; Extend PYTHONPATH so the built package will be found.
13006 (setenv "PYTHONPATH"
13007 (string-append (getcwd) "/build/lib:"
13008 (getenv "PYTHONPATH")))
13009 (invoke "py.test" "-vv" ))))))
13010 (native-inputs
13011 `(("python-pytest" ,python-pytest)))
13012 (home-page
13013 "https://github.com/jamesturk/validictory")
13014 (synopsis "General purpose Python data validator")
13015 (description "It allows validation of arbitrary Python data structures.
13016
13017 The schema format is based on the JSON Schema
13018 proposal (http://json-schema.org), so combined with json the library is also
13019 useful as a validator for JSON data.")
13020 (license license:expat)))
13021
13022 (define-public python2-validictory
13023 (package-with-python2 python-validictory))
13024
13025 (define-public python-pyelftools
13026 (package
13027 (name "python-pyelftools")
13028 (version "0.25")
13029 (source
13030 (origin
13031 (method url-fetch)
13032 (uri (pypi-uri "pyelftools" version))
13033 (sha256
13034 (base32
13035 "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9"))))
13036 (build-system python-build-system)
13037 (arguments
13038 `(#:phases
13039 (modify-phases %standard-phases
13040 (add-before 'check 'set-pythonpath
13041 (lambda _
13042 (setenv "PYTHONPATH"
13043 (string-append
13044 (getcwd) "/test/"
13045 ":" (getenv "PYTHONPATH")))
13046 #t)))))
13047 (home-page
13048 "https://github.com/eliben/pyelftools")
13049 (synopsis
13050 "Analyze binary and library file information")
13051 (description "This Python library provides interfaces for parsing and
13052 analyzing two binary and library file formats; the Executable and Linking
13053 Format (ELF), and debugging information in the Debugging With Attributed
13054 Record Format (DWARF).")
13055 (license license:public-domain)))
13056
13057 (define-public python-pyev
13058 (package
13059 (name "python-pyev")
13060 (version "0.9.0")
13061 (source
13062 (origin
13063 (method url-fetch)
13064 (uri (pypi-uri "pyev" version))
13065 (sha256
13066 (base32
13067 "0rf603lc0s6zpa1nb25vhd8g4y337wg2wyz56i0agsdh7jchl0sx"))))
13068 (build-system python-build-system)
13069 (arguments
13070 `(#:tests? #f ; no test suite
13071 #:phases
13072 (modify-phases %standard-phases
13073 (add-after 'unpack 'patch
13074 (lambda* (#:key inputs #:allow-other-keys)
13075 (let ((libev (string-append (assoc-ref inputs "libev")
13076 "/lib/libev.so.4")))
13077 (substitute* "setup.py"
13078 (("libev_dll_name = find_library\\(\\\"ev\\\"\\)")
13079 (string-append "libev_dll_name = \"" libev "\"")))))))))
13080 (inputs
13081 `(("libev" ,libev)))
13082 (home-page "http://pythonhosted.org/pyev/")
13083 (synopsis "Python libev interface")
13084 (description "Pyev provides a Python interface to libev.")
13085 (license license:gpl3)))
13086
13087 (define-public python2-pyev
13088 (package-with-python2 python-pyev))
13089
13090 (define-public python-imagesize
13091 (package
13092 (name "python-imagesize")
13093 (version "1.2.0")
13094 (source
13095 (origin
13096 (method url-fetch)
13097 (uri (pypi-uri "imagesize" version))
13098 (sha256
13099 (base32
13100 "1cd24x0vqbd6c8ym1n21qc0aj54mfb7rzdqglmwk9xxixajbbxmi"))))
13101 (build-system python-build-system)
13102 (home-page "https://github.com/shibukawa/imagesize_py")
13103 (synopsis "Gets image size of files in various formats in Python")
13104 (description
13105 "This package allows determination of image size from
13106 PNG, JPEG, JPEG2000 and GIF files in pure Python.")
13107 (license license:expat)))
13108
13109 (define-public python2-imagesize
13110 (package-with-python2 python-imagesize))
13111
13112 (define-public python-termstyle
13113 (package
13114 (name "python-termstyle")
13115 (version "0.1.11")
13116 (source
13117 (origin
13118 (method url-fetch)
13119 (uri (pypi-uri "termstyle" version))
13120 (sha256
13121 (base32
13122 "17wzkkcqy5zc0g68xlad3kcv66iw14d2pwqc0h9420gak0vbhx7g"))))
13123 (build-system python-build-system)
13124 (arguments
13125 '(#:phases
13126 (modify-phases %standard-phases
13127 (replace 'check
13128 (lambda _
13129 (invoke "python" "test3.py"))))))
13130 (home-page "https://github.com/gfxmonk/termstyle")
13131 (synopsis "Console text coloring for Python")
13132 (description "This package provides console text coloring for Python.")
13133 (license license:bsd-3)))
13134
13135 (define-public python-argcomplete
13136 (package
13137 (name "python-argcomplete")
13138 (version "1.11.1")
13139 (source
13140 (origin
13141 (method url-fetch)
13142 (uri (pypi-uri "argcomplete" version))
13143 (sha256
13144 (base32
13145 "0h1przxffrhqvi46k40pzjsvdrq4zc3sl1pc96kkigqppq0vdrss"))
13146 (patches (search-patches "python-argcomplete-1.11.1-fish31.patch"))))
13147 (build-system python-build-system)
13148 (native-inputs
13149 `(("python-coverage" ,python-coverage)
13150 ("python-flake8" ,python-flake8)
13151 ("python-pexpect" ,python-pexpect)
13152 ("python-wheel" ,python-wheel)
13153 ("tcsh" ,tcsh)
13154 ("fish" ,fish)
13155 ("bash-full" ,bash))) ;full Bash for 'test_file_completion'
13156 (home-page "https://github.com/kislyuk/argcomplete")
13157 (synopsis "Shell tab completion for Python argparse")
13158 (description "argcomplete provides extensible command line tab completion
13159 of arguments and options for Python scripts using @code{argparse}. It's
13160 particularly useful for programs with many options or sub-parsers that can
13161 dynamically suggest completions; for example, when browsing resources over the
13162 network.")
13163 (license license:asl2.0)))
13164
13165 (define-public python2-argcomplete
13166 (package-with-python2 python-argcomplete))
13167
13168 (define-public python-xopen
13169 (package
13170 (name "python-xopen")
13171 (version "0.5.0")
13172 (source
13173 (origin
13174 (method url-fetch)
13175 (uri (pypi-uri "xopen" version))
13176 (sha256
13177 (base32
13178 "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh"))))
13179 (build-system python-build-system)
13180 (propagated-inputs
13181 `(("python-setuptools-scm" ,python-setuptools-scm)))
13182 (home-page "https://github.com/marcelm/xopen/")
13183 (synopsis "Open compressed files transparently")
13184 (description "This module provides an @code{xopen} function that works like
13185 Python's built-in @code{open} function, but can also deal with compressed files.
13186 Supported compression formats are gzip, bzip2 and, xz, and are automatically
13187 recognized by their file extensions. The focus is on being as efficient as
13188 possible on all supported Python versions.")
13189 (license license:expat)))
13190
13191 (define-public python2-xopen
13192 (let ((base (package-with-python2
13193 (strip-python2-variant python-xopen))))
13194 (package
13195 (inherit base)
13196 (propagated-inputs `(("python2-bz2file" ,python2-bz2file)
13197 ,@(package-propagated-inputs base))))))
13198
13199 (define-public python-cheetah
13200 (package
13201 (name "python-cheetah")
13202 (version "3.2.4")
13203 (source
13204 (origin
13205 (method url-fetch)
13206 (uri (pypi-uri "Cheetah3" version))
13207 (sha256
13208 (base32
13209 "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya"))))
13210 (build-system python-build-system)
13211 (arguments
13212 `(#:modules ((guix build utils)
13213 (guix build python-build-system)
13214 (ice-9 ftw)
13215 (srfi srfi-1)
13216 (srfi srfi-26))
13217 #:phases (modify-phases %standard-phases
13218 (add-after 'unpack 'use-absolute-python
13219 (lambda _
13220 (substitute* "Cheetah/CheetahWrapper.py"
13221 (("#!/usr/bin/env python")
13222 (string-append "#!" (which "python"))))
13223 #t))
13224 (add-after 'unpack 'fix-tests
13225 (lambda _
13226 (substitute* "Cheetah/Tests/ImportHooks.py"
13227 (("os.path.dirname\\(__file__\\)")
13228 (string-append "'" (getcwd) "/Cheetah/Tests'")))
13229 #t))
13230 (replace 'check
13231 (lambda _
13232 (let ((cwd (getcwd)))
13233 (setenv "PYTHONPATH"
13234 (string-append
13235 cwd "/build/"
13236 (find (cut string-prefix? "lib" <>)
13237 (scandir (string-append cwd "/build")))
13238 ":" (getenv "PYTHONPATH")))
13239 (setenv "PATH"
13240 (string-append (getenv "PATH")
13241 ":" cwd "/bin"))
13242 (setenv "TMPDIR" "/tmp")
13243
13244 (substitute* "Cheetah/Tests/Test.py"
13245 (("unittest.TextTestRunner\\(\\)")
13246 "unittest.TextTestRunner(verbosity=2)"))
13247
13248 (invoke "python" "Cheetah/Tests/Test.py")))))))
13249 (propagated-inputs
13250 `(("python-markdown" ,python-markdown))) ;optional
13251 (home-page "https://cheetahtemplate.org/")
13252 (synopsis "Template engine")
13253 (description "Cheetah is a text-based template engine and Python code
13254 generator.
13255
13256 Cheetah can be used as a standalone templating utility or referenced as
13257 a library from other Python applications. It has many potential uses,
13258 but web developers looking for a viable alternative to ASP, JSP, PHP and
13259 PSP are expected to be its principle user group.
13260
13261 Features:
13262 @enumerate
13263 @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other
13264 text-based format.
13265 @item Cleanly separates content, graphic design, and program code.
13266 @item Blends the power and flexibility of Python with a simple template language
13267 that non-programmers can understand.
13268 @item Gives template writers full access to any Python data structure, module,
13269 function, object, or method in their templates.
13270 @item Makes code reuse easy by providing an object-orientated interface to
13271 templates that is accessible from Python code or other Cheetah templates.
13272 One template can subclass another and selectively reimplement sections of it.
13273 @item Provides a simple, yet powerful, caching mechanism that can dramatically
13274 improve the performance of a dynamic website.
13275 @item Compiles templates into optimized, yet readable, Python code.
13276 @end enumerate")
13277 (license (license:x11-style "file://LICENSE"))))
13278
13279 (define-public python2-cheetah
13280 (package-with-python2 python-cheetah))
13281
13282 (define-public python-dulwich
13283 (package
13284 (name "python-dulwich")
13285 (version "0.19.16")
13286 (source
13287 (origin
13288 (method url-fetch)
13289 (uri (list (string-append "https://www.dulwich.io/releases/"
13290 "dulwich-" version ".tar.gz")
13291 (pypi-uri "dulwich" version)))
13292 (sha256
13293 (base32
13294 "0l589jl0lxx59yq0p6vmgw0q0hmfh48iqwyy0x6g1dmz93262igp"))))
13295 (build-system python-build-system)
13296 (arguments
13297 `(#:phases
13298 (modify-phases %standard-phases
13299 (add-before 'check 'fix-tests
13300 (lambda* (#:key inputs #:allow-other-keys)
13301 ;; The tests use Popen with a custom environment which doesn't
13302 ;; include PATH.
13303 (substitute* "dulwich/tests/compat/utils.py"
13304 (("'git'") (string-append "'"
13305 (which "git")
13306 "'")))
13307 (substitute* '("dulwich/tests/test_repository.py"
13308 "dulwich/tests/test_hooks.py")
13309 (("#!/bin/sh") (string-append "#!" (which "sh"))))
13310 (setenv "TEST_RUNNER" "unittest")
13311 (setenv "PYTHONHASHSEED" "random")
13312 #t)))))
13313 (propagated-inputs
13314 `(("python-fastimport" ,python-fastimport)
13315 ("python-urllib3" ,python-urllib3)))
13316 (native-inputs
13317 `(("python-mock" ,python-mock)
13318 ("python-geventhttpclient" ,python-geventhttpclient)
13319 ("git" ,git)))
13320 (home-page "https://www.dulwich.io/")
13321 (synopsis "Git implementation in Python")
13322 (description "Dulwich is an implementation of the Git file formats and
13323 protocols written in pure Python.")
13324 ;; Can be used with either license.
13325 (license (list license:asl2.0 license:gpl2+))))
13326
13327 (define-public python2-dulwich
13328 (package-with-python2 python-dulwich))
13329
13330 (define-public python-pbkdf2
13331 (package
13332 (name "python-pbkdf2")
13333 (version "1.3")
13334 (source
13335 (origin
13336 (method url-fetch)
13337 (uri (pypi-uri "pbkdf2" version))
13338 (sha256
13339 (base32
13340 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc"))))
13341 (build-system python-build-system)
13342 (arguments
13343 '(#:phases
13344 (modify-phases %standard-phases
13345 (replace 'check
13346 (lambda _
13347 (setenv "PYTHONPATH"
13348 (string-append (getcwd) "/build/lib:"
13349 (getenv "PYTHONPATH")))
13350 (invoke "python" "test/test_pbkdf2.py"))))))
13351 (propagated-inputs
13352 `(("python-pycrypto" ,python-pycrypto))) ; optional
13353 (home-page "https://www.dlitz.net/software/python-pbkdf2/")
13354 (synopsis "Password-based key derivation")
13355 (description "This module implements the password-based key derivation
13356 function, PBKDF2, specified in RSA PKCS#5 v2.0.
13357
13358 PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which
13359 is part of the RSA Public Key Cryptography Standards series. The provided
13360 implementation takes a password or a passphrase and a salt value (and
13361 optionally a iteration count, a digest module, and a MAC module) and provides
13362 a file-like object from which an arbitrarly-sized key can be read.")
13363 (license license:expat)))
13364
13365 (define-public python2-pbkdf2
13366 (package-with-python2 python-pbkdf2))
13367
13368 (define-public python-qrcode
13369 (package
13370 (name "python-qrcode")
13371 (version "6.1")
13372 (source
13373 (origin
13374 (method url-fetch)
13375 (uri (pypi-uri "qrcode" version))
13376 (sha256
13377 (base32 "0sa3n298b9jpz6zn0birnjii3mg9sihjq28n9nzjlzv09y2m6ljh"))))
13378 (build-system python-build-system)
13379 (arguments
13380 ;; FIXME: Tests require packaging 'pymaging'.
13381 '(#:tests? #f))
13382 (propagated-inputs
13383 `(("python-lxml" ,python-lxml) ; for SVG output
13384 ("python-pillow" ,python-pillow) ; for PNG output
13385 ("python-six" ,python-six)))
13386 (home-page "https://github.com/lincolnloop/python-qrcode")
13387 (synopsis "QR Code image generator")
13388 (description "This package provides a pure Python QR Code generator
13389 module. It uses the Python Imaging Library (PIL) to allow for the generation
13390 of QR Codes.
13391
13392 In addition this package provides a command line tool to generate QR codes and
13393 either write these QR codes to a file or do the output as ascii art at the
13394 console.")
13395 (license license:bsd-3)))
13396
13397 (define-public python2-qrcode
13398 (package-with-python2 python-qrcode))
13399
13400 (define-public python-rst2ansi
13401 (package
13402 (name "python-rst2ansi")
13403 (version "0.1.5")
13404 (source
13405 (origin
13406 (method url-fetch)
13407 (uri (pypi-uri "rst2ansi" version))
13408 (sha256
13409 (base32
13410 "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv"))))
13411 (build-system python-build-system)
13412 (propagated-inputs
13413 `(("python-docutils" ,python-docutils)))
13414 (home-page "https://github.com/Snaipe/python-rst-to-ansi")
13415 (synopsis "Convert RST to ANSI-decorated console output")
13416 (description
13417 "Python module dedicated to rendering RST (reStructuredText) documents
13418 to ansi-escaped strings suitable for display in a terminal.")
13419 (license license:expat)))
13420
13421 (define-public python-ansi2html
13422 (package
13423 (name "python-ansi2html")
13424 (version "1.2.0")
13425 (source
13426 (origin
13427 (method url-fetch)
13428 (uri (pypi-uri "ansi2html" version))
13429 (sha256
13430 (base32
13431 "1wa00zffprb78w1mqq90dk47czz1knanys2a40zbw2vyapd5lp9y"))))
13432 (build-system python-build-system)
13433 (native-inputs
13434 `(("python-mock" ,python-mock)
13435 ("python-nose" ,python-nose)))
13436 (propagated-inputs
13437 `(("python-six" ,python-six)))
13438 (home-page "https://github.com/ralphbean/ansi2html")
13439 (synopsis "Convert ANSI-decorated console output to HTML")
13440 (description
13441 "@command{ansi2html} is a Python library and command line utility for
13442 convering text with ANSI color codes to HTML or LaTeX.")
13443 (license license:gpl3+)))
13444
13445 (define-public python2-ansi2html
13446 (package-with-python2 python-ansi2html))
13447
13448 (define-public python-ddt
13449 (package
13450 (name "python-ddt")
13451 (version "1.1.3")
13452 (source
13453 (origin
13454 (method url-fetch)
13455 (uri (pypi-uri "ddt" version))
13456 (sha256
13457 (base32
13458 "1lw17420iimhghkgzgax85nn8d1an2d6k2cfvb7j5kwn2dqlr1vk"))))
13459 (build-system python-build-system)
13460 (native-inputs
13461 `(("python-mock" ,python-mock)
13462 ("python-nose" ,python-nose)))
13463 (propagated-inputs
13464 `(("python-six" ,python-six)
13465 ("python-pyyaml" ,python-pyyaml)))
13466 (home-page "https://github.com/txels/ddt")
13467 (synopsis "Data-Driven Tests")
13468 (description
13469 "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by
13470 running it with different test data, and make it appear as multiple test
13471 cases.")
13472 (license license:expat)))
13473
13474 (define-public python2-ddt
13475 (package-with-python2 python-ddt))
13476
13477 (define-public python-pycountry
13478 (package
13479 (name "python-pycountry")
13480 (version "18.5.26")
13481 (source
13482 (origin
13483 (method url-fetch)
13484 (uri (pypi-uri "pycountry" version))
13485 (sha256
13486 (base32
13487 "15q9j047s3yc9cfcxq1ch8b71f81na44cr6dydd5gxk0ki9a4akz"))))
13488 (build-system python-build-system)
13489 (home-page "https://bitbucket.org/flyingcircus/pycountry")
13490 (synopsis "ISO databases for languages, countries, currencies, etc.")
13491 (description
13492 "@code{pycountry} provides the ISO databases for the standards:
13493 @enumerate
13494 @item 639-3 (Languages)
13495 @item 3166 (Countries)
13496 @item 3166-3 (Deleted Countries)
13497 @item 3166-2 (Subdivisions of countries)
13498 @item 4217 (Currencies)
13499 @item 15924 (Scripts)
13500 @end enumerate
13501 It includes a copy from Debian’s pkg-isocodes and makes the data accessible
13502 through a Python API.")
13503 (license license:lgpl2.1+)))
13504
13505 (define-public python2-pycountry
13506 (package-with-python2 python-pycountry))
13507
13508 (define-public python-pycosat
13509 (package
13510 (name "python-pycosat")
13511 (version "0.6.1")
13512 (source
13513 (origin
13514 (method url-fetch)
13515 (uri (pypi-uri "pycosat" version))
13516 (sha256
13517 (base32
13518 "1kl3wh1f47rc712n4bmwplbx3fqz3x9i1b587jrbpmvdva4c8f6l"))))
13519 ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/
13520 (build-system python-build-system)
13521 (home-page "https://github.com/ContinuumIO/pycosat")
13522 (synopsis "Bindings to picosat (a SAT solver)")
13523 (description
13524 "This package provides efficient Python bindings to @code{picosat} on
13525 the C level. When importing pycosat, the @code{picosat} solver becomes part
13526 of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability
13527 Problem} (SAT) solver.")
13528 (license license:expat)))
13529
13530 (define-public python2-pycosat
13531 (package-with-python2 python-pycosat))
13532
13533 (define-public python2-ruamel.ordereddict
13534 (package
13535 (name "python2-ruamel.ordereddict")
13536 (version "0.4.9")
13537 (source
13538 (origin
13539 (method url-fetch)
13540 (uri (pypi-uri "ruamel.ordereddict" version))
13541 (sha256
13542 (base32
13543 "1xmkl8v9l9inm2pyxgc1fm5005yxm7fkd5gv74q7lj1iy5qc8n3h"))))
13544 (build-system python-build-system)
13545 (arguments
13546 `(#:python ,python-2
13547 #:phases
13548 (modify-phases %standard-phases
13549 (delete 'check)
13550 (add-after 'install 'check
13551 (lambda* (#:key inputs outputs #:allow-other-keys)
13552 (add-installed-pythonpath inputs outputs)
13553 (invoke "python" "test/testordereddict.py"))))))
13554 (home-page "https://bitbucket.org/ruamel/ordereddict")
13555 (synopsis "Version of dict that keeps keys in insertion order")
13556 (description
13557 "This is an implementation of an ordered dictionary with @dfn{Key
13558 Insertion Order} (KIO: updates of values do not affect the position of the
13559 key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is
13560 removed and put at the back). The standard library module @code{OrderedDict},
13561 implemented later, implements a subset of @code{ordereddict} functionality.
13562 Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted
13563 Order} (KSO, no sorting function can be specified, but a transform can be
13564 specified to apply on the key before comparison (e.g. @code{string.lower})).")
13565 (license license:expat)))
13566
13567 (define-public python-pypeg2
13568 (package
13569 (name "python-pypeg2")
13570 (version "2.15.2")
13571 (source
13572 (origin
13573 (method url-fetch)
13574 (uri (pypi-uri "pyPEG2" version))
13575 (sha256
13576 (base32
13577 "0v8ziaam2r637v94ra4dbjw6jzxz99gs5x4i585kgag1v204yb9b"))))
13578 (build-system python-build-system)
13579 (propagated-inputs `(("python-lxml" ,python-lxml)))
13580 (arguments
13581 ;;https://bitbucket.org/fdik/pypeg/issues/36/test-failures-on-py35
13582 '(#:tests? #f))
13583 (home-page "https://fdik.org/pyPEG/")
13584 (synopsis "Parsering Expression Grammars in Python")
13585 (description "PyPEG is an intrinsic parser interpreter framework for
13586 Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can
13587 parse many formal languages.")
13588 (license license:gpl2)))
13589
13590 (define-public python-incremental
13591 (package
13592 (name "python-incremental")
13593 (version "17.5.0")
13594 (source
13595 (origin
13596 (method url-fetch)
13597 (uri (pypi-uri "incremental" version))
13598 (sha256
13599 (base32
13600 "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
13601 (build-system python-build-system)
13602 (home-page "https://github.com/hawkowl/incremental")
13603 (synopsis "Library for versioning Python projects")
13604 (description "Incremental is a small library that versions your Python
13605 projects.")
13606 (license license:expat)))
13607
13608 (define-public python2-incremental
13609 (package-with-python2 python-incremental))
13610
13611 (define-public python-invoke
13612 (package
13613 (name "python-invoke")
13614 (home-page "https://www.pyinvoke.org/")
13615 (version "1.3.0")
13616 (source (origin
13617 (method url-fetch)
13618 (uri (pypi-uri "invoke" version))
13619 (sha256
13620 (base32
13621 "1nn7gad0rvy492acpyhkrp01zsk86acf34qhsvq4xmm6x39788n5"))))
13622 (build-system python-build-system)
13623 (arguments
13624 ;; XXX: Requires many dependencies that are not yet in Guix.
13625 `(#:tests? #f))
13626 (synopsis "Pythonic task execution")
13627 (description
13628 "Invoke is a Python task execution tool and library, drawing inspiration
13629 from various sources to arrive at a powerful and clean feature set. It is
13630 evolved from the Fabric project, but focuses on local and abstract concerns
13631 instead of servers and network commands.")
13632 (license license:bsd-3)))
13633
13634 (define-public python2-invoke
13635 (package-with-python2 python-invoke))
13636
13637 (define-public python-automat
13638 (package
13639 (name "python-automat")
13640 (version "20.2.0")
13641 (source (origin
13642 (method url-fetch)
13643 (uri (pypi-uri "Automat" version))
13644 (sha256
13645 (base32
13646 "0cyzrcqiibwdsp4y0djkllnzab8m5faa4s0d1kpi23k1fhy80ybr"))))
13647 (build-system python-build-system)
13648 ;; We disable the tests because they require python-twisted, while
13649 ;; python-twisted depends on python-automat. Twisted is optional, but the
13650 ;; tests fail if it is not available. Also see
13651 ;; <https://github.com/glyph/automat/issues/71>.
13652 (arguments '(#:tests? #f))
13653 (native-inputs
13654 `(("python-m2r" ,python-m2r)
13655 ("python-setuptools-scm" ,python-setuptools-scm)
13656 ("python-graphviz" ,python-graphviz)))
13657 (propagated-inputs
13658 `(("python-six" ,python-six)
13659 ("python-attrs" ,python-attrs)))
13660 (home-page "https://github.com/glyph/Automat")
13661 (synopsis "Self-service finite-state machines")
13662 (description "Automat is a library for concise, idiomatic Python
13663 expression of finite-state automata (particularly deterministic finite-state
13664 transducers).")
13665 (license license:expat)))
13666
13667 (define-public python2-automat
13668 (package-with-python2 python-automat))
13669
13670 (define-public python-m2r
13671 (package
13672 (name "python-m2r")
13673 (version "0.2.1")
13674 (source (origin
13675 (method url-fetch)
13676 (uri (pypi-uri "m2r" version))
13677 (sha256
13678 (base32
13679 "16gdm8i06jjmlpvckpfmlkr4693dh0vs192vgsqn84fsdkbbm45z"))))
13680 (build-system python-build-system)
13681 (propagated-inputs
13682 `(("python-docutils" ,python-docutils)
13683 ("python-mistune" ,python-mistune)))
13684 (native-inputs
13685 `(("python-pygments" ,python-pygments)
13686 ("python-mock" ,python-mock)))
13687 (home-page "https://github.com/miyakogi/m2r")
13688 (synopsis "Markdown to reStructuredText converter")
13689 (description "M2R converts a markdown file including reST markups to valid
13690 reST format.")
13691 (license license:expat)))
13692
13693 (define-public python2-m2r
13694 (package-with-python2 python-m2r))
13695
13696 (define-public python-constantly
13697 (package
13698 (name "python-constantly")
13699 (version "15.1.0")
13700 (source (origin
13701 (method url-fetch)
13702 (uri (pypi-uri "constantly" version))
13703 (sha256
13704 (base32
13705 "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
13706 (build-system python-build-system)
13707 (home-page "https://github.com/twisted/constantly")
13708 (synopsis "Symbolic constants in Python")
13709 (description "Constantly is a Python library that provides symbolic
13710 constant support. It includes collections and constants with text, numeric,
13711 and bit flag values.")
13712 (license license:expat)))
13713
13714 (define-public python2-constantly
13715 (package-with-python2 python-constantly))
13716
13717 (define-public python-attrs
13718 (package
13719 (name "python-attrs")
13720 (version "19.3.0")
13721 (source (origin
13722 (method url-fetch)
13723 (uri (pypi-uri "attrs" version))
13724 (sha256
13725 (base32
13726 "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp"))))
13727 (build-system python-build-system)
13728 (arguments
13729 `(#:modules ((guix build utils)
13730 (guix build python-build-system)
13731 (ice-9 ftw)
13732 (srfi srfi-1)
13733 (srfi srfi-26))
13734 #:phases (modify-phases %standard-phases
13735 (replace 'check
13736 (lambda _
13737 (let ((cwd (getcwd)))
13738 (setenv "PYTHONPATH"
13739 (string-append
13740 cwd "/build/"
13741 (find (cut string-prefix? "lib" <>)
13742 (scandir (string-append cwd "/build")))
13743 ":"
13744 (getenv "PYTHONPATH")))
13745 (invoke "python" "-m" "pytest")))))))
13746 (native-inputs
13747 `(("python-coverage" ,python-coverage)
13748 ("python-hypothesis" ,python-hypothesis)
13749 ("python-pympler" ,python-pympler)
13750 ("python-pytest" ,python-pytest)
13751 ("python-six" ,python-six)
13752 ("python-sphinx" ,python-sphinx)
13753 ("python-zope-interface" ,python-zope-interface)))
13754 (home-page "https://github.com/python-attrs/attrs/")
13755 (synopsis "Attributes without boilerplate")
13756 (description "@code{attrs} is a Python package with class decorators that
13757 ease the chores of implementing the most common attribute-related object
13758 protocols.")
13759 (license license:expat)))
13760
13761 (define-public python2-attrs
13762 (package-with-python2 python-attrs))
13763
13764 (define-public python-attrs-bootstrap
13765 (package
13766 (inherit python-attrs)
13767 (name "python-attrs-bootstrap")
13768 (native-inputs `())
13769 (arguments `(#:tests? #f))))
13770
13771 (define-public python2-attrs-bootstrap
13772 (package-with-python2 python-attrs-bootstrap))
13773
13774 (define-public python2-cliapp
13775 (package
13776 (name "python2-cliapp")
13777 (version "1.20180812.1")
13778 (source
13779 (origin
13780 (method url-fetch)
13781 (uri (string-append
13782 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp/snapshot/cliapp-"
13783 version ".tar.gz"))
13784 (sha256
13785 (base32
13786 "1c1jlblbns8qhiaqjpg4xi6lip8xwfc5w643p43rg543havaj45x"))))
13787 (build-system python-build-system)
13788 (arguments
13789 `(#:python ,python-2
13790 #:phases
13791 (modify-phases %standard-phases
13792 ;; check phase needs to be run before the build phase. If not,
13793 ;; coverage-test-runner looks for tests for the built source files,
13794 ;; and fails.
13795 (delete 'check)
13796 (add-before 'build 'check
13797 (lambda _
13798 ;; Disable python3 tests
13799 (substitute* "check"
13800 (("python3") "# python3"))
13801 (invoke "./check"))))))
13802 (native-inputs
13803 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
13804 ("python2-pep8" ,python2-pep8)))
13805 (propagated-inputs
13806 `(("python2-pyaml" ,python2-pyaml)))
13807 (home-page "https://liw.fi/cliapp/")
13808 (synopsis "Python framework for command line programs")
13809 (description "@code{python2-cliapp} is a python framework for
13810 command line programs. It contains the typical stuff such programs
13811 need to do, such as parsing the command line for options, and
13812 iterating over input files.")
13813 (license license:gpl2+)))
13814
13815 (define-public python2-ttystatus
13816 (package
13817 (name "python2-ttystatus")
13818 (version "0.36")
13819 (source
13820 (origin
13821 (method url-fetch)
13822 (uri (string-append
13823 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/ttystatus/snapshot/ttystatus-"
13824 version ".tar.gz"))
13825 (sha256
13826 (base32
13827 "06mdk4d19zw2j3is54gndhzl396g3xc8k52m7i86z69s9hcz71by"))))
13828 (build-system python-build-system)
13829 (native-inputs
13830 `(("python2-coverage-test-runner" ,python2-coverage-test-runner)
13831 ("python2-pep8" ,python2-pep8)))
13832 (arguments
13833 `(#:python ,python-2
13834 #:phases
13835 (modify-phases %standard-phases
13836 ;; check phase needs to be run before the build phase. If not,
13837 ;; coverage-test-runner looks for tests for the built source files,
13838 ;; and fails.
13839 (delete 'check)
13840 (add-before 'build 'check
13841 (lambda _ (invoke "make" "check"))))))
13842 (home-page "https://liw.fi/ttystatus/")
13843 (synopsis "Python library for showing progress reporting and
13844 status updates on terminals")
13845 (description "@code{python2-ttystatus} is a python library for
13846 showing progress reporting and status updates on terminals, for
13847 command line programs. Output is automatically adapted to the width
13848 of the terminal: truncated if it does not fit, and resized if the
13849 terminal size changes.")
13850 (license license:gpl3+)))
13851
13852 (define-public python2-tracing
13853 (package
13854 (name "python2-tracing")
13855 (version "0.10")
13856 (source
13857 (origin
13858 (method url-fetch)
13859 (uri (string-append
13860 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/python-tracing/snapshot/tracing-"
13861 version ".tar.gz"))
13862 (sha256
13863 (base32
13864 "06cw4zg42fsvqy372vi2whj26w56vzg5axhzwdjc2bgwf03garbw"))))
13865 (build-system python-build-system)
13866 (arguments
13867 `(#:python ,python-2))
13868 (home-page "https://liw.fi/tracing/")
13869 (synopsis "Python debug logging helper")
13870 (description "@code{python2-tracing} is a python library for
13871 logging debug messages. It provides a way to turn debugging messages
13872 on and off, based on the filename they occur in. It is much faster
13873 than using @code{logging.Filter} to accomplish the same thing, which
13874 matters when code is run in production mode. The actual logging still
13875 happens using the @code{logging} library.")
13876 (license license:gpl3+)))
13877
13878 (define-public python2-larch
13879 (package
13880 (name "python2-larch")
13881 (version "1.20151025")
13882 (source
13883 (origin
13884 (method url-fetch)
13885 (uri (string-append
13886 "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-"
13887 version ".tar.gz"))
13888 (patches (search-patches
13889 "python2-larch-coverage-4.0a6-compatibility.patch"))
13890 (sha256
13891 (base32
13892 "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
13893 (build-system python-build-system)
13894 (arguments
13895 `(#:python ,python-2
13896 #:phases
13897 (modify-phases %standard-phases
13898 ;; check phase needs to be run before the build phase. If not,
13899 ;; coverage-test-runner looks for tests for the built source files,
13900 ;; and fails.
13901 (delete 'check)
13902 (add-before 'build 'check
13903 (lambda _ (invoke "make" "check"))))))
13904 (native-inputs
13905 `(("cmdtest" ,cmdtest)
13906 ("python2-coverage-test-runner" ,python2-coverage-test-runner)))
13907 (propagated-inputs
13908 `(("python2-tracing" ,python2-tracing)))
13909 (home-page "https://liw.fi/larch/")
13910 (synopsis "Python copy-on-write B-tree library")
13911 (description "@code{python2-larch} is an implementation of
13912 particular kind of B-tree, based on research by Ohad Rodeh. See
13913 @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
13914 on the data structure.
13915
13916 The distinctive feature of this B-tree is that a node is never
13917 (conceptually) modified. Instead, all updates are done by
13918 copy-on-write. This makes it easy to clone a tree, and modify only the
13919 clone, while other processes access the original tree.")
13920 (license license:gpl3+)))
13921
13922 (define-public python-astroid
13923 (package
13924 (name "python-astroid")
13925 (version "2.4.1")
13926 (source
13927 (origin
13928 (method url-fetch)
13929 (uri (pypi-uri "astroid" version))
13930 (sha256
13931 (base32 "1h99jal7ax07xna1djw5z7hpgb8vjrl3hrrg49p1phljwniww5sc"))))
13932 (build-system python-build-system)
13933 (propagated-inputs
13934 `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
13935 ("python-six" ,python-six)
13936 ("python-wrapt" ,python-wrapt)))
13937 (native-inputs
13938 `(("python-dateutil" ,python-dateutil)
13939 ("python-pytest" ,python-pytest)
13940 ("python-pytest-runner" ,python-pytest-runner)))
13941 (home-page "https://github.com/PyCQA/astroid")
13942 (synopsis "Common base representation of python source code for pylint and
13943 other projects")
13944 (description "@code{python-astroid} provides a common base representation
13945 of python source code for projects such as pychecker, pyreverse, pylint, etc.
13946
13947 It provides a compatible representation which comes from the _ast module. It
13948 rebuilds the tree generated by the builtin _ast module by recursively walking
13949 down the AST and building an extended ast. The new node classes have
13950 additional methods and attributes for different usages. They include some
13951 support for static inference and local name scopes. Furthermore, astroid
13952 builds partial trees by inspecting living objects.")
13953 (license license:lgpl2.1+)
13954 (properties `((python2-variant . ,(delay python2-astroid))))))
13955
13956 (define-public python2-astroid
13957 (let ((base (package-with-python2
13958 (strip-python2-variant python-astroid))))
13959 (package (inherit base)
13960 ;; Version 2.x removes python2 support.
13961 (version "1.6.5")
13962 (source
13963 (origin
13964 (method url-fetch)
13965 (uri (pypi-uri "astroid" version))
13966 (sha256
13967 (base32
13968 "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw"))))
13969 (arguments
13970 (substitute-keyword-arguments (package-arguments base)
13971 ((#:phases phases)
13972 `(modify-phases ,phases
13973 (add-after 'unpack 'remove-spurious-test
13974 (lambda _
13975 ;; https://github.com/PyCQA/astroid/issues/276
13976 (delete-file "astroid/tests/unittest_brain.py")
13977 #t))
13978 (replace 'check
13979 (lambda _
13980 (invoke"python" "-m" "unittest" "discover"
13981 "-p" "unittest*.py")))))))
13982 (native-inputs `())
13983 (propagated-inputs
13984 `(("python2-backports-functools-lru-cache"
13985 ,python2-backports-functools-lru-cache)
13986 ("python2-enum34" ,python2-enum34)
13987 ("python2-singledispatch" ,python2-singledispatch)
13988 ,@(alist-delete "python-typed-ast"
13989 (package-propagated-inputs base)))))))
13990
13991 (define-public python-isort
13992 (package
13993 (name "python-isort")
13994 (version "4.3.4")
13995 (source
13996 (origin
13997 (method git-fetch)
13998 (uri (git-reference
13999 ;; Tests pass only from the Github sources
14000 (url "https://github.com/timothycrosley/isort")
14001 (commit version)))
14002 (file-name (git-file-name name version))
14003 (sha256
14004 (base32
14005 "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6"))))
14006 (build-system python-build-system)
14007 (native-inputs
14008 `(("python-mock" ,python-mock)
14009 ("python-pytest" ,python-pytest)))
14010 (home-page "https://github.com/timothycrosley/isort")
14011 (synopsis "Python utility/library to sort python imports")
14012 (description "@code{python-isort} is a python utility/library to sort
14013 imports alphabetically, and automatically separated into sections. It
14014 provides a command line utility, a python library and plugins for various
14015 editors.")
14016 (license license:expat)
14017 (properties `((python2-variant . ,(delay python2-isort))))))
14018
14019 (define-public python2-isort
14020 (let ((base (package-with-python2
14021 (strip-python2-variant python-isort))))
14022 (package (inherit base)
14023 (native-inputs
14024 `(("python2-futures" ,python2-futures)
14025 ,@(package-native-inputs base))))))
14026
14027 (define-public python2-backports-functools-lru-cache
14028 (package
14029 (name "python2-backports-functools-lru-cache")
14030 (version "1.5")
14031 (source
14032 (origin
14033 (method url-fetch)
14034 ;; only the pypi tarballs contain the necessary metadata
14035 (uri (pypi-uri "backports.functools_lru_cache" version))
14036 (sha256
14037 (base32
14038 "06jgv8gib4fhky0p5cmxdghvsgjyzcdgk48k8pxb1ccf11znk64x"))))
14039 (build-system python-build-system)
14040 (native-inputs
14041 `(("python2-setuptools-scm" ,python2-setuptools-scm)))
14042 (arguments
14043 `(#:python ,python-2))
14044 (home-page "https://github.com/jaraco/backports.functools_lru_cache")
14045 (synopsis "Backport of functools.lru_cache from Python 3.3")
14046 (description "@code{python2-backports-functools-lru-cache} is a backport
14047 of @code{functools.lru_cache} from python 3.3.")
14048 (license license:expat)))
14049
14050 (define-public python-configparser
14051 (package
14052 (name "python-configparser")
14053 (version "4.0.2")
14054 (source
14055 (origin
14056 (method url-fetch)
14057 (uri (pypi-uri "configparser" version))
14058 (sha256
14059 (base32
14060 "1priacxym85yjcf68hh38w55nqswaxp71ryjyfdk222kg9l85ln7"))))
14061 (native-inputs
14062 `(("python-setuptools_scm" ,python-setuptools-scm)))
14063 (build-system python-build-system)
14064 (home-page "https://github.com/jaraco/configparser/")
14065 (synopsis "Backport of configparser from python 3.5")
14066 (description "@code{python-configparser} is a backport of
14067 @code{configparser} from Python 3.5 so that it can be used directly
14068 in other versions.")
14069 (license license:expat)))
14070
14071 (define-public python2-configparser
14072 (package-with-python2 python-configparser))
14073
14074 (define-public python-mando
14075 (package
14076 (name "python-mando")
14077 (version "0.6.4")
14078 (source (origin
14079 (method url-fetch)
14080 (uri (pypi-uri "mando" version))
14081 (sha256
14082 (base32
14083 "0q6rl085q1hw1wic52pqfndr0x3nirbxnhqj9akdm5zhq2fv3zkr"))))
14084 (build-system python-build-system)
14085 (propagated-inputs
14086 `(("python-rst2ansi" ,python-rst2ansi)
14087 ("python-six" ,python-six)))
14088 (native-inputs
14089 `(("python-pytest" ,python-pytest)))
14090 (home-page "https://mando.readthedocs.org/")
14091 (synopsis
14092 "Wrapper around argparse, allowing creation of complete CLI applications")
14093 (description
14094 "This package is a wrapper around argparse, allowing you to write complete CLI
14095 applications in seconds while maintaining all the flexibility.")
14096 (license license:expat)))
14097
14098 (define-public python2-mando
14099 (package-with-python2 python-mando))
14100
14101 (define-public python2-argparse
14102 (package
14103 (name "python2-argparse")
14104 (version "1.4.0")
14105 (source
14106 (origin
14107 (method url-fetch)
14108 (uri (pypi-uri "argparse" version))
14109 (sha256
14110 (base32
14111 "1r6nznp64j68ih1k537wms7h57nvppq0szmwsaf99n71bfjqkc32"))))
14112 (build-system python-build-system)
14113 (arguments
14114 `(#:python ,python-2))
14115 (home-page "https://github.com/ThomasWaldmann/argparse/")
14116 (synopsis "Python command-line parsing library")
14117 (description
14118 "This package is mostly for people who want to have @code{argparse} on
14119 older Pythons because it was not part of the standard library back then.")
14120 (license license:psfl)))
14121
14122 (define-public python-fudge
14123 (package
14124 (name "python-fudge")
14125 ;; 0.9.6 is the latest version suitable for testing the "fabric" Python 2
14126 ;; package, which is currently the only use of this package.
14127 (version "0.9.6")
14128 (source
14129 (origin
14130 (method url-fetch)
14131 (uri (pypi-uri "fudge" version))
14132 (sha256
14133 (base32
14134 "185ia3vr3qk4f2s1a9hdxb8ci4qc0x0xidrad96pywg8j930qs9l"))))
14135 (build-system python-build-system)
14136 (arguments
14137 `(#:tests? #f)) ;XXX: Tests require the NoseJS Python package.
14138 (home-page "https://github.com/fudge-py/fudge")
14139 (synopsis "Replace real objects with fakes/mocks/stubs while testing")
14140 (description
14141 "Fudge is a Python module for using fake objects (mocks and stubs) to
14142 test real ones.
14143
14144 In readable Python code, you declare the methods available on your fake object
14145 and how they should be called. Then you inject that into your application and
14146 start testing. This declarative approach means you don’t have to record and
14147 playback actions and you don’t have to inspect your fakes after running code.
14148 If the fake object was used incorrectly then you’ll see an informative
14149 exception message with a traceback that points to the culprit.")
14150 (license license:expat)))
14151
14152 (define-public python2-fudge
14153 (package-with-python2 python-fudge))
14154
14155 (define-public python-mwclient
14156 (package
14157 (name "python-mwclient")
14158 (version "0.10.1")
14159 (source
14160 (origin
14161 (method git-fetch)
14162 ;; The PyPI version wouldn't contain tests.
14163 (uri (git-reference
14164 (url "https://github.com/mwclient/mwclient")
14165 (commit (string-append "v" version))))
14166 (file-name (git-file-name name version))
14167 (sha256
14168 (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj"))))
14169 (build-system python-build-system)
14170 (propagated-inputs
14171 `(("python-requests-oauthlib" ,python-requests-oauthlib)
14172 ("python-six" ,python-six)))
14173 (native-inputs
14174 `(("python-mock" ,python-mock)
14175 ("python-pytest" ,python-pytest)
14176 ("python-pytest-cov" ,python-pytest-cov)
14177 ("python-pytest-runner" ,python-pytest-runner)
14178 ("python-responses" ,python-responses)))
14179 (home-page "https://github.com/btongminh/mwclient")
14180 (synopsis "MediaWiki API client")
14181 (description "This package provides a MediaWiki API client.")
14182 (license license:expat)))
14183
14184 (define-public python2-mwclient
14185 (package-with-python2 python-mwclient))
14186
14187 (define-public python-utils
14188 (package
14189 (name "python-utils")
14190 (version "2.4.0")
14191 (source (origin
14192 (method url-fetch)
14193 (uri (pypi-uri "python-utils" version))
14194 (sha256
14195 (base32
14196 "12c0glzkm81ljgf6pwh0d4rmdm1r7vvgg3ifzp8yp9cfyngw07zj"))))
14197 (build-system python-build-system)
14198 (arguments
14199 `(#:phases
14200 (modify-phases %standard-phases
14201 (replace 'check
14202 (lambda* (#:key inputs outputs #:allow-other-keys)
14203 (add-installed-pythonpath inputs outputs)
14204 (delete-file "pytest.ini")
14205 (invoke "pytest" "-vv"))))))
14206 (native-inputs
14207 `(("pytest-runner" ,python-pytest-runner)
14208 ("pytest" ,python-pytest)
14209 ("six" ,python-six)))
14210 (home-page "https://github.com/WoLpH/python-utils")
14211 (synopsis "Convenient utilities not included with the standard Python install")
14212 (description
14213 "Python Utils is a collection of small Python functions and classes which
14214 make common patterns shorter and easier.")
14215 (license license:bsd-2)))
14216
14217 (define-public python2-utils
14218 (package-with-python2 python-utils))
14219
14220 (define-public python-diff-match-patch
14221 (package
14222 (name "python-diff-match-patch")
14223 (version "20121119")
14224 (source
14225 (origin
14226 (method url-fetch)
14227 (uri (pypi-uri "diff-match-patch" version))
14228 (sha256
14229 (base32
14230 "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
14231 (build-system python-build-system)
14232 (home-page "https://code.google.com/p/google-diff-match-patch")
14233 (synopsis "Synchronize plain text")
14234 (description "Diff Match and Patch libraries offer robust algorithms to
14235 perform the operations required for synchronizing plain text.")
14236 (license license:asl2.0)))
14237
14238 (define-public python2-diff-match-patch
14239 (package-with-python2 python-diff-match-patch))
14240
14241 (define-public python-dirsync
14242 (package
14243 (name "python-dirsync")
14244 (version "2.2.3")
14245 (source
14246 (origin
14247 (method url-fetch)
14248 (uri (pypi-uri "dirsync" version))
14249 (sha256
14250 (base32
14251 "1r40fkanksagcszf1ag85mdr8w7rgc7196n6s1qlsk2abw6i7v0z"))))
14252 (build-system python-build-system)
14253 (propagated-inputs
14254 `(("six" ,python-six)))
14255 (home-page "https://bitbucket.org/tkhyn/dirsync")
14256 (synopsis "Advanced directory tree synchronisation tool")
14257 (description "Advanced directory tree synchronisation tool.")
14258 (license license:expat)))
14259
14260 (define-public python2-dirsync
14261 (package-with-python2 python-dirsync))
14262
14263 (define-public python-levenshtein
14264 (package
14265 (name "python-levenshtein")
14266 (version "0.12.0")
14267 (source
14268 (origin
14269 (method url-fetch)
14270 (uri (pypi-uri "python-Levenshtein" version))
14271 (sha256
14272 (base32
14273 "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
14274 (build-system python-build-system)
14275 (home-page "https://github.com/ztane/python-Levenshtein")
14276 (synopsis "Fast computation of Levenshtein distance and string similarity")
14277 (description
14278 "The Levenshtein Python C extension module contains functions for fast computation of
14279 @enumerate
14280 @item Levenshtein (edit) distance, and edit operations
14281 @item string similarity
14282 @item approximate median strings, and generally string averaging
14283 @item string sequence and set similarity
14284 @end enumerate
14285 It supports both normal and Unicode strings.")
14286 (license license:gpl2+)))
14287
14288 (define-public python2-levenshtein
14289 (package-with-python2 python-levenshtein))
14290
14291 (define-public python-scandir
14292 (package
14293 (name "python-scandir")
14294 (version "1.10.0")
14295 (source
14296 (origin
14297 (method url-fetch)
14298 (uri (pypi-uri "scandir" version))
14299 (sha256
14300 (base32 "1bkqwmf056pkchf05ywbnf659wqlp6lljcdb0y88wr9f0vv32ijd"))))
14301 (build-system python-build-system)
14302 (arguments
14303 `(#:phases (modify-phases %standard-phases
14304 (replace 'check
14305 (lambda _
14306 (invoke "python" "test/run_tests.py"))))))
14307 (home-page "https://github.com/benhoyt/scandir")
14308 (synopsis "Directory iteration function")
14309 (description
14310 "Directory iteration function like os.listdir(), except that instead of
14311 returning a list of bare filenames, it yields DirEntry objects that include
14312 file type and stat information along with the name. Using scandir() increases
14313 the speed of os.walk() by 2-20 times (depending on the platform and file
14314 system) by avoiding unnecessary calls to os.stat() in most cases.
14315
14316 This package is part of the Python standard library since version 3.5.")
14317 (license license:bsd-3)))
14318
14319 (define-public python2-scandir
14320 (package-with-python2 python-scandir))
14321
14322 (define-public python2-stemming
14323 (package
14324 (name "python2-stemming")
14325 (version "1.0.1")
14326 (source
14327 (origin
14328 (method url-fetch)
14329 (uri (pypi-uri "stemming" version))
14330 (sha256
14331 (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
14332 (build-system python-build-system)
14333 (arguments
14334 `(#:python ,python-2))
14335 (home-page "https://bitbucket.org/mchaput/stemming/overview")
14336 (synopsis "Python implementations of various stemming algorithms")
14337 (description
14338 "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
14339 stemming algorithms for English. These implementations are straightforward and
14340 efficient, unlike some Python versions of the same algorithms available on the
14341 Web. This package is an extraction of the stemming code included in the Whoosh
14342 search engine.")
14343 (license license:public-domain)))
14344
14345 (define-public python-factory-boy
14346 (package
14347 (name "python-factory-boy")
14348 (version "2.8.1")
14349 (source
14350 (origin
14351 (method url-fetch)
14352 (uri (pypi-uri "factory_boy" version))
14353 (sha256
14354 (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
14355 (build-system python-build-system)
14356 (arguments
14357 ;; Tests are not included in the tarball.
14358 `(#:tests? #f))
14359 (propagated-inputs
14360 `(("faker" ,python-faker)))
14361 (home-page "https://github.com/benhoyt/scandir")
14362 (synopsis "Versatile test fixtures replacement")
14363 (description
14364 "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
14365
14366 As a fixtures replacement tool, it aims to replace static, hard to maintain
14367 fixtures with easy-to-use factories for complex object.
14368
14369 Instead of building an exhaustive test setup with every possible combination
14370 of corner cases, factory_boy allows you to use objects customized for the
14371 current test, while only declaring the test-specific fields")
14372 (license license:expat)))
14373
14374 (define-public python2-factory-boy
14375 (package-with-python2 python-factory-boy))
14376
14377 (define-public python-translate-toolkit
14378 (package
14379 (name "python-translate-toolkit")
14380 (version "2.1.0")
14381 (source
14382 (origin
14383 (method url-fetch)
14384 (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
14385 (sha256
14386 (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
14387 (build-system python-build-system)
14388 (native-inputs
14389 `(("python-pytest" ,python-pytest)
14390 ("python-sphinx" ,python-sphinx)))
14391 (propagated-inputs
14392 `(("python-babel" ,python-babel)
14393 ("python-beautifulsoup4" ,python-beautifulsoup4)
14394 ("python-chardet" ,python-chardet)
14395 ("python-diff-match-patch" ,python-diff-match-patch)
14396 ("python-levenshtein" ,python-levenshtein)
14397 ("python-lxml" ,python-lxml)
14398 ("python-six" ,python-six)
14399 ("python-vobject" ,python-vobject)
14400 ("python-pyyaml" ,python-pyyaml)))
14401 (arguments
14402 ;; TODO: tests are not run, because they end with
14403 ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
14404 ;; 'parse_funcs'
14405 ;; during test setup.
14406 `(#:tests? #f))
14407 (home-page "https://toolkit.translatehouse.org")
14408 (synopsis "Tools and API for translation and localization engineering")
14409 (description
14410 "Tools and API for translation and localization engineering. It contains
14411 several utilities, as well as an API for building localization tools.")
14412 (license license:gpl2+)))
14413
14414 (define-public python2-translate-toolkit
14415 (package-with-python2 python-translate-toolkit))
14416
14417 (define-public python-packaging
14418 (package
14419 (name "python-packaging")
14420 (version "20.0")
14421 (source
14422 (origin
14423 (method url-fetch)
14424 (uri (pypi-uri "packaging" version))
14425 ;; XXX: The URL in the patch file is wrong, it should be
14426 ;; <https://github.com/pypa/packaging/pull/256>.
14427 (patches (search-patches "python-packaging-test-arch.patch"))
14428 (sha256
14429 (base32
14430 "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy"))))
14431 (build-system python-build-system)
14432 (arguments
14433 `(#:phases (modify-phases %standard-phases
14434 (replace 'check
14435 (lambda* (#:key tests? #:allow-other-keys)
14436 (if tests?
14437 (invoke "py.test" "-vv")
14438 (format #t "test suite not run~%"))
14439 #t)))))
14440 (native-inputs
14441 `(("python-pretend" ,python-pretend)
14442 ("python-pytest" ,python-pytest)))
14443 (propagated-inputs
14444 `(("python-pyparsing" ,python-pyparsing)
14445 ("python-six" ,python-six)))
14446 (home-page "https://github.com/pypa/packaging")
14447 (synopsis "Core utilities for Python packages")
14448 (description "Packaging is a Python module for dealing with Python packages.
14449 It offers an interface for working with package versions, names, and dependency
14450 information.")
14451 ;; From 'LICENSE': This software is made available under the terms of
14452 ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD.
14453 ;; Contributions to this software is made under the terms of *both* these
14454 ;; licenses.
14455 (license (list license:asl2.0 license:bsd-2))))
14456
14457 (define-public python2-packaging
14458 (package-with-python2 python-packaging))
14459
14460 ;; Variants with minimal dependencies, for bootstrapping Pytest.
14461 (define-public python-packaging-bootstrap
14462 (hidden-package
14463 (package/inherit
14464 python-packaging
14465 (name "python-packaging-bootstrap")
14466 (native-inputs '())
14467 (propagated-inputs
14468 `(("python-pyparsing" ,python-pyparsing)))
14469 (arguments '(#:tests? #f)))))
14470
14471 (define-public python2-packaging-bootstrap
14472 (hidden-package
14473 (package/inherit
14474 python2-packaging
14475 (name "python2-packaging-bootstrap")
14476 (native-inputs '())
14477 (propagated-inputs
14478 `(("python-pyparsing" ,python2-pyparsing)))
14479 (arguments
14480 `(#:tests? #f
14481 ,@(package-arguments python2-packaging))))))
14482
14483 (define-public python-relatorio
14484 (package
14485 (name "python-relatorio")
14486 (version "0.8.0")
14487 (source
14488 (origin
14489 (method url-fetch)
14490 (uri (pypi-uri "relatorio" version))
14491 (sha256
14492 (base32
14493 "1na6hlhz1awi1hbjg1gyclq0khz42iz90wvdjw7mmj655788bpxx"))))
14494 (build-system python-build-system)
14495 (propagated-inputs
14496 `(("python-lxml" ,python-lxml)
14497 ("python-genshi" ,python-genshi)))
14498 (native-inputs
14499 `(("python-magic" ,python-magic)))
14500 (home-page "https://relatorio.tryton.org/")
14501 (synopsis "Templating library able to output ODT and PDF files")
14502 (description "Relatorio is a templating library which provides a way to
14503 easily output ODT, ODS, PNG, SVG and several other kinds of files. Support
14504 for more filetypes can be easily added by creating plugins for them.")
14505 (license license:gpl3+)))
14506
14507 (define-public python2-relatorio
14508 (package-with-python2 python-relatorio))
14509
14510 (define-public python-radon
14511 (package
14512 (name "python-radon")
14513 (version "4.1.0")
14514 (source
14515 (origin
14516 (method url-fetch)
14517 (uri (pypi-uri "radon" version))
14518 (sha256
14519 (base32
14520 "0vfxxzbnz5lxfvp0yxp35g6c8qqnnbhi4dm7shkm1d3d4192q22n"))))
14521 (build-system python-build-system)
14522 (arguments
14523 `(#:phases (modify-phases %standard-phases
14524 (replace 'check
14525 (lambda _
14526 (invoke "python" "radon/tests/run.py"))))))
14527 (propagated-inputs
14528 `(("python-colorama" ,python-colorama)
14529 ("python-flake8-polyfill" ,python-flake8-polyfill)
14530 ("python-mando" ,python-mando)))
14531 (native-inputs
14532 `(("python-pytest" ,python-pytest)
14533 ("python-pytest-mock" ,python-pytest-mock)))
14534 (home-page "https://radon.readthedocs.org/")
14535 (synopsis "Code Metrics in Python")
14536 (description "Radon is a Python tool which computes various code metrics.
14537 Supported metrics are:
14538 @itemize @bullet
14539 @item raw metrics: SLOC, comment lines, blank lines, &c.
14540 @item Cyclomatic Complexity (i.e. McCabe’s Complexity)
14541 @item Halstead metrics (all of them)
14542 @item the Maintainability Index (a Visual Studio metric)
14543 @end itemize")
14544 (properties `((python2-variant . ,(delay python2-radon))))
14545 (license license:expat)))
14546
14547 (define-public python2-radon
14548 (let ((base (package-with-python2 (strip-python2-variant python-radon))))
14549 (package
14550 (inherit base)
14551 (propagated-inputs
14552 `(("python-configparser" ,python2-configparser)
14553 ("python-future" ,python2-future)
14554 ,@(package-propagated-inputs base))))))
14555
14556 (define-public python-sure
14557 (package
14558 (name "python-sure")
14559 (version "1.4.11")
14560 (source
14561 (origin
14562 (method url-fetch)
14563 (uri (pypi-uri "sure" version))
14564 (sha256
14565 (base32
14566 "1and0drq8w9iplsic22n2h7hkpyq03a1mbqk4sgcdqhqzdqm539w"))))
14567 (build-system python-build-system)
14568 (propagated-inputs
14569 `(("python-mock" ,python-mock)
14570 ("python-six" ,python-six)))
14571 (native-inputs
14572 `(("python-nose" ,python-nose)))
14573 (home-page "https://github.com/gabrielfalcao/sure")
14574 (synopsis "Automated testing library in python for python")
14575 (description
14576 "Sure is a python library that leverages a DSL for writing assertions.
14577 Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.")
14578 (license license:gpl3+)))
14579
14580 (define-public python2-sure
14581 (package-with-python2 python-sure))
14582
14583 (define-public python2-couleur
14584 ;; This package does not seem to support python3 at all, hence,
14585 ;; only the python2 variant definition is provided.
14586 (package
14587 (name "python2-couleur")
14588 (version "0.6.2")
14589 (source
14590 (origin
14591 (method url-fetch)
14592 (uri (pypi-uri "couleur" version))
14593 (sha256
14594 (base32
14595 "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
14596 (build-system python-build-system)
14597 (arguments
14598 `(#:python ,python-2))
14599 (home-page "https://github.com/gabrielfalcao/couleur")
14600 (synopsis
14601 "ANSI terminal tool for python, colored shell and other handy fancy features")
14602 (description
14603 "@code{Couleur} provides python programs a way to use the ANSI features in a unix
14604 terminal such as coloured output in the shell, overwriting output, indentation, etc.")
14605 ;; README.md says ASL2.0, but all source code headers are LGPL3+.
14606 ;; https://github.com/gabrielfalcao/couleur/issues/11
14607 (license license:lgpl3+)))
14608
14609 (define-public python-misaka
14610 (package
14611 (name "python-misaka")
14612 (version "2.1.1")
14613 (source
14614 (origin
14615 (method url-fetch)
14616 (uri (pypi-uri "misaka" version))
14617 (sha256
14618 (base32
14619 "1mzc29wwyhyardclj1vg2xsfdibg2lzb7f1azjcxi580ama55wv2"))))
14620 (build-system python-build-system)
14621 (arguments
14622 `(;; Line 37 of setup.py calls self.run_command('develop')
14623 ;; in the 'check' phase. This command seems to be trying
14624 ;; to write to
14625 ;; /gnu/store/...-python-<version>/lib/python<version>/site-packages/
14626 ;; for which it does not have the permission to write.
14627 #:tests? #f))
14628 (propagated-inputs
14629 `(("python-cffi" ,python-cffi)))
14630 (home-page "https://github.com/FSX/misaka")
14631 (synopsis "Python binding for Hoedown")
14632 (description
14633 "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing
14634 library written in C. It features a fast HTML renderer and functionality to make custom
14635 renderers (e.g. man pages or LaTeX).")
14636 (license license:expat)))
14637
14638 (define-public python2-misaka
14639 (package-with-python2 python-misaka))
14640
14641 (define-public python2-steadymark
14642 ;; This is forced into being a python2 only variant
14643 ;; due to its dependence on couleur that has no support
14644 ;; for python3
14645 (package
14646 (name "python2-steadymark")
14647 (version "0.7.3")
14648 (source
14649 (origin
14650 (method url-fetch)
14651 (uri (pypi-uri "steadymark" version))
14652 (sha256
14653 (base32
14654 "1640i9g8dycql3cc8j0bky0jkzj0q39blfbp4lsgpkprkfgcdk8v"))))
14655 (build-system python-build-system)
14656 (native-inputs
14657 `(("python-couleur" ,python2-couleur)
14658 ("python-sure" ,python2-sure)
14659 ("python-misaka" ,python2-misaka)))
14660 (arguments
14661 `(#:python ,python-2
14662 #:phases
14663 (modify-phases %standard-phases
14664 (add-before 'build 'patch-setup-py
14665 (lambda _
14666 ;; Update requirements from dependency==version
14667 ;; to dependency>=version
14668 (substitute* "setup.py"
14669 (("==") ">="))
14670 #t)))))
14671 (home-page "https://github.com/gabrielfalcao/steadymark")
14672 (synopsis "Markdown-based test runner for python")
14673 (description
14674 "@code{Steadymark} allows documentation to be written in github-flavoured
14675 markdown. The documentation may contain snippets of code surrounded by python
14676 code blocks and @code{Steadymark} will find these snippets and run them, making
14677 sure that there are no old malfunctional examples in the documentation examples.")
14678 (license license:expat)))
14679
14680 (define-public python-jsonpointer
14681 (package
14682 (name "python-jsonpointer")
14683 (version "1.10")
14684 (source
14685 (origin
14686 (method url-fetch)
14687 (uri (pypi-uri "jsonpointer" version))
14688 (sha256
14689 (base32
14690 "1cg0gvgqjysydv6p45v4jywg1jb3v48c7m3cbpi57zgf6nndr9cz"))))
14691 (build-system python-build-system)
14692 (home-page "https://github.com/stefankoegl/python-json-pointer")
14693 (synopsis "Identify specific nodes in a JSON document")
14694 (description "@code{jsonpointer} allows you to access specific nodes
14695 by path in a JSON document (see RFC 6901).")
14696 (license license:bsd-3)))
14697
14698 (define-public python2-jsonpointer
14699 (package-with-python2 python-jsonpointer))
14700
14701 (define-public python-jsonpatch
14702 (package
14703 (name "python-jsonpatch")
14704 (version "1.16")
14705 (source
14706 (origin
14707 (method git-fetch)
14708 ;; pypi version lacks tests.js
14709 (uri (git-reference
14710 (url "https://github.com/stefankoegl/python-json-patch")
14711 (commit (string-append "v" version))))
14712 (file-name (git-file-name name version))
14713 (sha256
14714 (base32
14715 "0k9pff06lxama3nhsc7cdxbp83422bdy8ifs52i6xkas8hpyzfzr"))))
14716 (build-system python-build-system)
14717 (native-inputs
14718 `(("python-jsonpointer" ,python-jsonpointer)))
14719 (home-page "https://github.com/stefankoegl/python-json-patch")
14720 (synopsis "Applying JSON Patches in Python 2.6+ and 3.x")
14721 (description "@code{jsonpatch} is a library and program that allows
14722 applying JSON Patches according to RFC 6902.")
14723 (license license:bsd-3)))
14724
14725 (define-public python2-jsonpatch
14726 (package-with-python2 python-jsonpatch))
14727
14728 (define-public python-jsonpatch-0.4
14729 (package (inherit python-jsonpatch)
14730 (name "python-jsonpatch")
14731 (version "0.4")
14732 (source
14733 (origin
14734 (method git-fetch)
14735 (uri (git-reference
14736 (url "https://github.com/stefankoegl/python-json-patch")
14737 (commit (string-append "v" version))))
14738 (file-name (git-file-name name version))
14739 (sha256
14740 (base32
14741 "1fq02y57kinyknxjcav0slcb0k9mwdffqw2hnlhdkpj7palh2mwk"))))))
14742
14743 (define-public python2-jsonpatch-0.4
14744 (package-with-python2 python-jsonpatch-0.4))
14745
14746 (define-public python-rfc3986
14747 (package
14748 (name "python-rfc3986")
14749 (version "1.1.0")
14750 (source (origin
14751 (method url-fetch)
14752 (uri (pypi-uri "rfc3986" version))
14753 (sha256
14754 (base32
14755 "06wlmysw83f75ff84zr1yr6n0shvc2xn1n1sb4iwzqap9hf5fn44"))))
14756 (build-system python-build-system)
14757 (arguments
14758 `(#:modules ((guix build utils)
14759 (guix build python-build-system)
14760 (ice-9 ftw)
14761 (srfi srfi-1)
14762 (srfi srfi-26))
14763 #:phases
14764 (modify-phases %standard-phases
14765 (replace 'check
14766 (lambda _
14767 (let ((cwd (getcwd)))
14768 (setenv "PYTHONPATH"
14769 (string-append cwd "/build/"
14770 (find (cut string-prefix? "lib" <>)
14771 (scandir (string-append cwd "/build")))
14772 ":"
14773 (getenv "PYTHONPATH")))
14774 (invoke "pytest" "-v")))))))
14775 (native-inputs
14776 `(("python-pytest" ,python-pytest)))
14777 (home-page "https://rfc3986.readthedocs.io/")
14778 (synopsis "Parse and validate URI references")
14779 (description
14780 "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
14781 validation and authority parsing. This module also supports RFC@tie{}6874
14782 which adds support for zone identifiers to IPv6 addresses.")
14783 (license license:asl2.0)))
14784
14785 (define-public python2-rfc3986
14786 (package-with-python2 python-rfc3986))
14787
14788 (define-public python-rfc3987
14789 (package
14790 (name "python-rfc3987")
14791 (version "1.3.7")
14792 (source
14793 (origin
14794 (method url-fetch)
14795 (uri (pypi-uri "rfc3987" version))
14796 (sha256
14797 (base32
14798 "192pclzs2y0yaywqkrlvd0x73740q310kvqvm6jldhi619mq59wi"))))
14799 (build-system python-build-system)
14800 (home-page "https://pypi.org/project/rfc3987/")
14801 (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)")
14802 (description "@code{rfc3987} provides routines for parsing and
14803 validation of URIs (see RFC 3986) and IRIs (see RFC 3987).")
14804 (license license:gpl3+)))
14805
14806 (define-public python2-rfc3987
14807 (package-with-python2 python-rfc3987))
14808
14809 (define-public python-validators
14810 (package
14811 (name "python-validators")
14812 (version "0.14.2")
14813 (source (origin
14814 (method url-fetch)
14815 (uri (pypi-uri "validators" version))
14816 (sha256
14817 (base32
14818 "024m15j33szd0v8k5l4ccish6n0b4knq81gmb4fq25ynwyyyd4mi"))))
14819 (build-system python-build-system)
14820 (arguments
14821 '(#:phases (modify-phases %standard-phases
14822 (replace 'check
14823 (lambda _
14824 (invoke "pytest" "-vv"))))))
14825 (propagated-inputs
14826 `(("python-decorator" ,python-decorator)
14827 ("python-six" ,python-six)))
14828 (native-inputs
14829 `(("python-flake8" ,python-flake8)
14830 ("python-isort" ,python-isort)
14831 ("python-pytest" ,python-pytest)))
14832 (home-page "https://github.com/kvesteri/validators")
14833 (synopsis "Data validation library")
14834 (description
14835 "This package contains validators for different things such as email
14836 addresses, IP addresses, URLs, hashes and more. It has been designed to
14837 be easy to use and not require defining a schema or form just to validate
14838 some input.")
14839 (license license:expat)))
14840
14841 (define-public python2-validators
14842 (package-with-python2 python-validators))
14843
14844 (define-public python-validate-email
14845 (package
14846 (name "python-validate-email")
14847 (version "1.3")
14848 (source
14849 (origin
14850 (method url-fetch)
14851 (uri (pypi-uri "validate_email" version))
14852 (sha256
14853 (base32
14854 "1bxffaf5yz2cph8ki55vdvdypbwkvn2xr1firlcy62vqbzf1jivq"))))
14855 (build-system python-build-system)
14856 (home-page "https://github.com/syrusakbary/validate_email")
14857 (synopsis "Verifies if an email address is valid and really exists")
14858 (description "@code{validate_email} can be used to verify if an email
14859 address is valid and really exists.")
14860 (license license:lgpl3+)))
14861
14862 (define-public python2-validate-email
14863 (package-with-python2 python-validate-email))
14864
14865 (define-public python-flex
14866 (package
14867 (name "python-flex")
14868 (version "6.10.0")
14869 (source
14870 (origin
14871 (method url-fetch)
14872 (uri (pypi-uri "flex" version))
14873 (sha256
14874 (base32
14875 "00pamnwla3khk8nyla7y28dq9jnh69swd7f4jfsl7sn1izs8n8zk"))))
14876 (build-system python-build-system)
14877 (propagated-inputs
14878 `(("python-click" ,python-click)
14879 ("python-iso8601" ,python-iso8601)
14880 ("python-jsonpointer" ,python-jsonpointer)
14881 ("python-pyyaml" ,python-pyyaml)
14882 ("python-requests" ,python-requests)
14883 ("python-rfc3987" ,python-rfc3987)
14884 ("python-six" ,python-six)
14885 ("python-validate-email" ,python-validate-email)))
14886 (home-page "https://github.com/pipermerriam/flex")
14887 (synopsis "Validates Swagger schemata")
14888 (description "@code{flex} can be used to validate Swagger schemata.")
14889 (license license:bsd-3)))
14890
14891 (define-public python2-flex
14892 (package-with-python2 python-flex))
14893
14894 (define-public python-marshmallow
14895 (package
14896 (name "python-marshmallow")
14897 (version "3.0.0b14")
14898 (source
14899 (origin
14900 (method url-fetch)
14901 (uri (pypi-uri "marshmallow" version))
14902 (sha256
14903 (base32
14904 "1digk3f5cfk7wmlka65mc7bzsd96pbsgcsvp6pimd5b4ff9zb5p3"))))
14905 (build-system python-build-system)
14906 (propagated-inputs
14907 `(("python-dateutil" ,python-dateutil)
14908 ("python-simplejson" ,python-simplejson)))
14909 (native-inputs
14910 `(("python-pytest" ,python-pytest)
14911 ("python-pytz" ,python-pytz)))
14912 (home-page "https://github.com/marshmallow-code/marshmallow")
14913 (synopsis "Convert complex datatypes to and from native
14914 Python datatypes.")
14915 (description "@code{marshmallow} provides a library for converting
14916 complex datatypes to and from native Python datatypes.")
14917 (license license:expat)))
14918
14919 (define-public python2-marshmallow
14920 (package-with-python2 python-marshmallow))
14921
14922 (define-public python-apispec
14923 (package
14924 (name "python-apispec")
14925 (version "0.25.3")
14926 (source
14927 (origin
14928 (method url-fetch)
14929 (uri (pypi-uri "apispec" version))
14930 (sha256
14931 (base32
14932 "0kxa8723zbisx10363yh4mmmn4higxrspymbjfz5zq8f644zagm9"))))
14933 (build-system python-build-system)
14934 (propagated-inputs
14935 `(("python-pyyaml" ,python-pyyaml)))
14936 (native-inputs
14937 `(("python-pytest" ,python-pytest)
14938 ("python-flask" ,python-flask)
14939 ("python-marshmallow" ,python-marshmallow)
14940 ("python-tornado" ,python-tornado)
14941 ("python-bottle" ,python-bottle)
14942 ("python-mock" ,python-mock)))
14943 (home-page "https://github.com/marshmallow-code/apispec")
14944 (synopsis "Swagger 2.0 API specification generator")
14945 (description "@code{python-apispec} is a pluggable API specification
14946 generator. Currently supports the OpenAPI specification (f.k.a.
14947 Swagger 2.0).")
14948 (license license:expat)))
14949
14950 (define-public python2-apispec
14951 (package-with-python2 python-apispec))
14952
14953 (define-public python-flasgger
14954 (package
14955 (name "python-flasgger")
14956 (version "0.6.3")
14957 (source
14958 (origin
14959 (method git-fetch)
14960 (uri (git-reference
14961 (url "https://github.com/rochacbruno/flasgger.git")
14962 (commit version)))
14963 (file-name (git-file-name name version))
14964 (sha256
14965 (base32 "0yydxsyjnc0clbrjqb1n7587l6cdqvwdagwxk5hkx01qwdfbkvpn"))))
14966 (build-system python-build-system)
14967 (arguments
14968 `(#:phases
14969 (modify-phases %standard-phases
14970 (replace 'check
14971 (lambda* (#:key inputs outputs #:allow-other-keys)
14972 (substitute* "Makefile"
14973 (("flake8 flasgger --ignore=F403")
14974 "flake8 flasgger --ignore=E731,F403"))
14975 (setenv "PYTHONPATH" (string-append (getcwd)
14976 ":"
14977 (getenv "PYTHONPATH")))
14978 (invoke "py.test"))))))
14979 (propagated-inputs
14980 `(("python-flask" ,python-flask)
14981 ("python-pyyaml" ,python-pyyaml)
14982 ("python-jsonschema" ,python-jsonschema)
14983 ("python-mistune" ,python-mistune)
14984 ("python-six" ,python-six)))
14985 (native-inputs
14986 `(("python-decorator" ,python-decorator)
14987 ("python-flake8" ,python-flake8)
14988 ("python-flask-restful" ,python-flask-restful)
14989 ("python-flex" ,python-flex)
14990 ("python-pytest" ,python-pytest)
14991 ("python-pytest-cov" ,python-pytest-cov)
14992 ("python-marshmallow" ,python-marshmallow)
14993 ("python-apispec" ,python-apispec)))
14994 (home-page "https://github.com/rochacbruno/flasgger/")
14995 (synopsis "Extract Swagger specs from your Flask project")
14996 (description "@code{python-flasgger} allows extracting Swagger specs
14997 from your Flask project. It is a fork of Flask-Swagger.")
14998 (license license:expat)))
14999
15000 (define-public python2-flasgger
15001 (package-with-python2 python-flasgger))
15002
15003 (define-public python-swagger-spec-validator
15004 (package
15005 (name "python-swagger-spec-validator")
15006 (version "2.4.3")
15007 (source
15008 (origin
15009 (method url-fetch)
15010 (uri (pypi-uri "swagger-spec-validator" version))
15011 (sha256
15012 (base32
15013 "11g627icrsqwazsncwi0sdvprcj6hwaayw5xk3xsj8d97bmrzqjp"))))
15014 (build-system python-build-system)
15015 (propagated-inputs
15016 `(("python-jsonschema" ,python-jsonschema)
15017 ("python-pyyaml" ,python-pyyaml)
15018 ("python-six" ,python-six)))
15019 (home-page
15020 "https://github.com/Yelp/swagger_spec_validator")
15021 (synopsis "Validation of Swagger specifications")
15022 (description "@code{swagger_spec_validator} provides a library for
15023 validating Swagger API specifications.")
15024 (license license:asl2.0)))
15025
15026 (define-public python2-swagger-spec-validator
15027 (package-with-python2 python-swagger-spec-validator))
15028
15029 (define-public python-apache-libcloud
15030 (package
15031 (name "python-apache-libcloud")
15032 (version "2.4.0")
15033 (source
15034 (origin
15035 (method url-fetch)
15036 (uri (pypi-uri "apache-libcloud" version))
15037 (sha256
15038 (base32
15039 "0daj3mkzw79v5zin2r1s2wkrz1hplfc16bwj4ss68i5qjq4l2p0j"))))
15040 (build-system python-build-system)
15041 (arguments
15042 `(#:phases
15043 (modify-phases %standard-phases
15044 (add-after 'unpack 'patch-ssh
15045 (lambda* (#:key inputs #:allow-other-keys)
15046 (substitute* "libcloud/compute/ssh.py"
15047 (("'ssh'") (string-append "'" (assoc-ref inputs "openssh")
15048 "/bin/ssh" "'")))
15049 #t))
15050 (add-after 'unpack 'patch-tests
15051 (lambda _
15052 (substitute* "./libcloud/test/test_file_fixtures.py"
15053 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-923>.
15054 (("def _ascii") "def _raw_data(self, method, url, body, headers):
15055 return (httplib.OK,
15056 \"1234abcd\",
15057 {\"test\": \"value\"},
15058 httplib.responses[httplib.OK])
15059 def _ascii"))
15060 (substitute* "libcloud/test/compute/test_ssh_client.py"
15061 (("class ShellOutSSHClientTests")
15062 "@unittest.skip(\"Guix container doesn't have ssh service\")
15063 class ShellOutSSHClientTests")
15064 ;; See <https://issues.apache.org/jira/browse/LIBCLOUD-924>.
15065 (("'.xf0.x90.x8d.x88'") "b'\\xF0\\x90\\x8D\\x88'")
15066 (("'.xF0', '.x90', '.x8D', '.x88'")
15067 "b'\\xF0', b'\\x90', b'\\x8D', b'\\x88'"))
15068 #t))
15069 (add-before 'check 'copy-secret
15070 (lambda _
15071 (copy-file "libcloud/test/secrets.py-dist"
15072 "libcloud/test/secrets.py")
15073 #t)))))
15074 (inputs
15075 `(("openssh" ,openssh)))
15076 (propagated-inputs
15077 `(("python-paramiko" ,python-paramiko)
15078 ("python-requests" ,python-requests)))
15079 (native-inputs
15080 `(("python-lockfile" ,python-lockfile)
15081 ("python-mock" ,python-mock)
15082 ("python-pytest" ,python-pytest)
15083 ("python-pytest-runner" ,python-pytest-runner)
15084 ("python-requests-mock" ,python-requests-mock)))
15085 (home-page "https://libcloud.apache.org/")
15086 (synopsis "Unified Cloud API")
15087 (description "@code{libcloud} is a Python library for interacting with
15088 many of the popular cloud service providers using a unified API.")
15089 (license license:asl2.0)))
15090
15091 (define-public python2-apache-libcloud
15092 (package-with-python2 python-apache-libcloud))
15093
15094 (define-public python-smmap
15095 (package
15096 (name "python-smmap")
15097 (version "3.0.1")
15098 (source
15099 (origin
15100 (method url-fetch)
15101 (uri (pypi-uri "smmap" version))
15102 (sha256
15103 (base32 "0ijlnv60y8f41py1wnn5n1a1i81cxd9dfpdhr0k3cgkrcbz8850p"))))
15104 (build-system python-build-system)
15105 (native-inputs
15106 `(("python-nosexcover" ,python-nosexcover)))
15107 (home-page "https://github.com/Byron/smmap")
15108 (synopsis "Python sliding window memory map manager")
15109 (description "@code{smmap} is a pure Python implementation of a sliding
15110 window memory map manager.")
15111 (license license:bsd-3)))
15112
15113 (define-public python-smmap2
15114 (deprecated-package "python-smmap2" python-smmap))
15115
15116 (define-public python2-smmap
15117 (package-with-python2 python-smmap))
15118
15119 (define-public python2-smmap2
15120 (deprecated-package "python2-smmap2" python2-smmap))
15121
15122 (define-public python-regex
15123 (package
15124 (name "python-regex")
15125 (version "2020.6.8")
15126 (source (origin
15127 (method url-fetch)
15128 (uri (pypi-uri "regex" version))
15129 (sha256
15130 (base32
15131 "1b3k0zi1pd99q5mk7ri7vcx2y1mq5inm9hk8dryqyhrpkmh4xdp9"))))
15132 (build-system python-build-system)
15133 (arguments
15134 '(#:phases
15135 (modify-phases %standard-phases
15136 (replace 'check
15137 (lambda* (#:key inputs outputs #:allow-other-keys)
15138 (add-installed-pythonpath inputs outputs)
15139 (invoke "python" "-c"
15140 "from regex.test_regex import test_main; test_main()"))))))
15141 (home-page "https://bitbucket.org/mrabarnett/mrab-regex")
15142 (synopsis "Alternative regular expression module")
15143 (description "This regular expression implementation is backwards-
15144 compatible with the standard @code{re} module, but offers additional
15145 functionality like full case-folding for case-insensitive matches in Unicode.")
15146 (license license:psfl)))
15147
15148 (define-public python2-regex
15149 (package-with-python2 python-regex))
15150
15151 (define-public python2-pyopengl
15152 (package
15153 (name "python2-pyopengl")
15154 (version "3.1.0")
15155 (source
15156 (origin
15157 (method url-fetch)
15158 (uri (pypi-uri "PyOpenGL" version))
15159 (sha256
15160 (base32
15161 "1byxjj6a8rwzhxhjqlc588zdad2qwxdd7vlam2653ylll31waiwv"))))
15162 (arguments
15163 `(#:python ,python-2))
15164 (build-system python-build-system)
15165 (home-page "http://pyopengl.sourceforge.net")
15166 (synopsis "Standard OpenGL bindings for Python")
15167 (description
15168 "PyOpenGL is the most common cross platform Python binding to OpenGL and
15169 related APIs. The binding is created using the standard @code{ctypes}
15170 library.")
15171 (license license:bsd-3)))
15172
15173 (define-public python2-pyopengl-accelerate
15174 (package
15175 (inherit python2-pyopengl)
15176 (name "python2-pyopengl-accelerate")
15177 (version "3.1.0")
15178 (source
15179 (origin
15180 (method url-fetch)
15181 (uri (pypi-uri "PyOpenGL-accelerate" version))
15182 (sha256
15183 (base32
15184 "0464c1ifzk0k92lyndikmvzjgnx1y25r7bkkc8pnxm4kp1q4czwj"))))
15185 (synopsis "Acceleration code for PyOpenGL")
15186 (description
15187 "This is the Cython-coded accelerator module for PyOpenGL.")))
15188
15189 (define-public python-rencode
15190 (package
15191 (name "python-rencode")
15192 (version "1.0.5")
15193 (source
15194 (origin
15195 (method url-fetch)
15196 (uri (pypi-uri "rencode" version))
15197 (sha256
15198 (base32
15199 "0mzwdq1is7kyyr32i5k4iz6g5xxdvmiyc132jnc60p9m6lnwjrpv"))))
15200 (build-system python-build-system)
15201 (arguments
15202 `(#:phases
15203 (modify-phases %standard-phases
15204 (add-before 'check 'delete-bogus-test
15205 ;; This test requires /home/aresch/Downloads, which is not provided by
15206 ;; the build environment.
15207 (lambda _
15208 (delete-file "rencode/t.py")
15209 #t)))))
15210 (native-inputs `(("pkg-config" ,pkg-config)
15211 ("python-cython" ,python-cython)))
15212 (home-page "https://github.com/aresch/rencode")
15213 (synopsis "Serialization of heterogeneous data structures")
15214 (description
15215 "The @code{rencode} module is a data structure serialization library,
15216 similar to @code{bencode} from the BitTorrent project. For complex,
15217 heterogeneous data structures with many small elements, r-encoding stake up
15218 significantly less space than b-encodings. This version of rencode is a
15219 complete rewrite in Cython to attempt to increase the performance over the
15220 pure Python module.")
15221 (license license:bsd-3)))
15222
15223 (define-public python2-rencode
15224 (package-with-python2 python-rencode))
15225
15226 (define-public python-xenon
15227 (package
15228 (name "python-xenon")
15229 (version "0.7.0")
15230 (source
15231 (origin
15232 (method url-fetch)
15233 (uri (pypi-uri "xenon" version))
15234 (sha256
15235 (base32
15236 "0nv207ql2wmh9q62503np056c4vf1c1hlsi5cvv5p5kx574k6r2y"))))
15237 (build-system python-build-system)
15238 (native-inputs
15239 `(("python-pyyaml" ,python-pyyaml)
15240 ("python-radon" ,python-radon)
15241 ("python-requests" ,python-requests)
15242 ("python-flake8" ,python-flake8)
15243 ("python-tox" ,python-tox)))
15244 (arguments
15245 `(#:tests? #f ;test suite not shipped with the PyPI archive
15246 #:phases
15247 (modify-phases %standard-phases
15248 (add-before 'build 'patch-test-requirements
15249 (lambda _
15250 ;; Remove httpretty dependency for tests.
15251 (substitute* "setup.py"
15252 (("httpretty") ""))
15253 #t)))))
15254 (home-page "https://xenon.readthedocs.org/")
15255 (synopsis "Monitor code metrics for Python on your CI server")
15256 (description
15257 "Xenon is a monitoring tool based on Radon. It monitors code complexity.
15258 Ideally, @code{xenon} is run every time code is committed. Through command
15259 line options, various thresholds can be set for the complexity of code. It
15260 will fail (i.e. it will exit with a non-zero exit code) when any of these
15261 requirements is not met.")
15262 (license license:expat)))
15263
15264 (define-public python2-xenon
15265 (package-with-python2 python-xenon))
15266
15267 (define-public python-pysocks
15268 (package
15269 (name "python-pysocks")
15270 (version "1.7.0")
15271 (source
15272 (origin
15273 (method url-fetch)
15274 (uri (pypi-uri "PySocks" version))
15275 (sha256
15276 (base32
15277 "0z4p31bpqm893cf87qqgb30k7nwd8kqfjwwjm5cvxb6zbyj1w0yr"))))
15278 (build-system python-build-system)
15279 (arguments `(#:tests? #f))
15280 (home-page "https://github.com/Anorov/PySocks")
15281 (synopsis "SOCKS client module")
15282 (description "@code{pysocks} is an updated and semi-actively maintained
15283 version of @code{SocksiPy} with bug fixes and extra features.")
15284 (license license:bsd-3)))
15285
15286 (define-public python2-pysocks
15287 (package-with-python2 python-pysocks))
15288
15289 (define-public python-pydiff
15290 (package
15291 (name "python-pydiff")
15292 (version "0.2")
15293 (source
15294 (origin
15295 (method url-fetch)
15296 (uri (pypi-uri "pydiff" version))
15297 (sha256
15298 (base32
15299 "1als83h9w0gab24ipyna6khm390qmpnpkc5jksmdbs2xc8hp2z44"))))
15300 (build-system python-build-system)
15301 (home-page "https://github.com/myint/pydiff")
15302 (synopsis "Library to diff two Python files at the bytecode level")
15303 (description
15304 "@code{pydiff} makes it easy to look for actual code changes while
15305 ignoring formatting changes.")
15306 (license license:expat)))
15307
15308 (define-public python2-pydiff
15309 (package-with-python2 python-pydiff))
15310
15311 (define-public python-tqdm
15312 (package
15313 (name "python-tqdm")
15314 (version "4.43.0")
15315 (source
15316 (origin
15317 (method url-fetch)
15318 (uri (pypi-uri "tqdm" version))
15319 (sha256
15320 (base32
15321 "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk"))))
15322 (build-system python-build-system)
15323 (arguments
15324 '(#:phases (modify-phases %standard-phases
15325 (replace 'check
15326 (lambda* (#:key inputs outputs #:allow-other-keys)
15327 (add-installed-pythonpath inputs outputs)
15328 ;; This invokation is taken from tox.ini.
15329 (invoke "nosetests" "--ignore-files=\"test_perf.py\""
15330 "-d" "-v" "tqdm/"))))))
15331 (native-inputs
15332 `(("python-nose" ,python-nose)))
15333 (home-page "https://github.com/tqdm/tqdm")
15334 (synopsis "Fast, extensible progress meter")
15335 (description
15336 "Make loops show a progress bar on the console by just wrapping any
15337 iterable with @code{|tqdm(iterable)|}. Offers many options to define
15338 design and layout.")
15339 (license (list license:mpl2.0 license:expat))))
15340
15341 (define-public python2-tqdm
15342 (package-with-python2 python-tqdm))
15343
15344 (define-public python-pkginfo
15345 (package
15346 (name "python-pkginfo")
15347 (version "1.4.2")
15348 (source
15349 (origin
15350 (method url-fetch)
15351 (uri (pypi-uri "pkginfo" version))
15352 (sha256
15353 (base32
15354 "0x6lm17p1ks031mj6pajyp4rkq74vpqq8qwjb7ikgwmkli1day2q"))))
15355 (build-system python-build-system)
15356 (arguments
15357 ;; The tests are broken upstream.
15358 '(#:tests? #f))
15359 (home-page
15360 "https://code.launchpad.net/~tseaver/pkginfo/trunk")
15361 (synopsis
15362 "Query metadatdata from sdists, bdists, and installed packages")
15363 (description
15364 "API to query the distutils metadata written in @file{PKG-INFO} inside a
15365 source distriubtion (an sdist) or a binary distribution (e.g., created by
15366 running bdist_egg). It can also query the EGG-INFO directory of an installed
15367 distribution, and the *.egg-info stored in a \"development checkout\" (e.g,
15368 created by running @code{python setup.py develop}).")
15369 (license license:expat)))
15370
15371 (define-public python2-pkginfo
15372 (package-with-python2 python-pkginfo))
15373
15374 (define-public python-twine
15375 (package
15376 (name "python-twine")
15377 (version "1.9.1")
15378 (source
15379 (origin
15380 (method url-fetch)
15381 (uri (pypi-uri "twine" version))
15382 (sha256
15383 (base32
15384 "1ay1b6kdq6k4bfbjsvf6ymj41wrgpvinhxndb09355pwhxwmp96a"))))
15385 (build-system python-build-system)
15386 (propagated-inputs
15387 `(("python-tqdm" ,python-tqdm)
15388 ("python-pkginfo" ,python-pkginfo)
15389 ("python-requests" ,python-requests)
15390 ("python-requests-toolbelt" ,python-requests-toolbelt)))
15391 (home-page "https://github.com/pypa/twine")
15392 (synopsis "Collection of utilities for interacting with PyPI")
15393 (description
15394 "@code{twine} currently supports registering projects and uploading
15395 distributions. It authenticates the user over HTTPS, allows them to pre-sign
15396 their files and supports any packaging format (including wheels).")
15397 (license license:asl2.0)))
15398
15399 (define-public python2-twine
15400 (package-with-python2 python-twine))
15401
15402 (define-public python-linecache2
15403 (package
15404 (name "python-linecache2")
15405 (version "1.0.0")
15406 (source
15407 (origin
15408 (method url-fetch)
15409 (uri (pypi-uri "linecache2" version))
15410 (sha256
15411 (base32
15412 "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))
15413 (build-system python-build-system)
15414 (arguments
15415 `(;; The tests depend on unittest2, and our version is a bit too old.
15416 #:tests? #f))
15417 (native-inputs
15418 `(("python-pbr" ,python-pbr-minimal)))
15419 (home-page
15420 "https://github.com/testing-cabal/linecache2")
15421 (synopsis "Backports of the linecache module")
15422 (description
15423 "The linecache module allows one to get any line from any file, while
15424 attempting to optimize internally, using a cache, the common case where many
15425 lines are read from a single file.")
15426 (license license:psfl)))
15427
15428 (define-public python2-linecache2
15429 (package-with-python2 python-linecache2))
15430
15431 (define-public python-traceback2
15432 (package
15433 (name "python-traceback2")
15434 (version "1.4.0")
15435 (source
15436 (origin
15437 (method url-fetch)
15438 (uri (pypi-uri "traceback2" version))
15439 (sha256
15440 (base32
15441 "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))
15442 (build-system python-build-system)
15443 (arguments
15444 `(;; python-traceback2 and python-unittest2 depend on one another.
15445 #:tests? #f))
15446 (native-inputs
15447 `(("python-pbr" ,python-pbr-minimal)))
15448 (propagated-inputs
15449 `(("python-linecache2" ,python-linecache2)))
15450 (home-page
15451 "https://github.com/testing-cabal/traceback2")
15452 (synopsis "Backports of the traceback module")
15453 (description
15454 "This module provides a standard interface to extract, format and print
15455 stack traces of Python programs. It exactly mimics the behavior of the Python
15456 interpreter when it prints a stack trace.")
15457 (license license:psfl)))
15458
15459 (define-public python2-traceback2
15460 (package-with-python2 python-traceback2))
15461
15462 (define-public python-ratelimiter
15463 (package
15464 (name "python-ratelimiter")
15465 (version "1.2.0")
15466 (source
15467 (origin
15468 (method url-fetch)
15469 (uri (pypi-uri "ratelimiter" version))
15470 (sha256
15471 (base32
15472 "1dhz85mj5bqd2mij84ncs6pz32hgidr79hay4aqfmzaa4rbb497p"))))
15473 (build-system python-build-system)
15474 (arguments
15475 '(#:tests? #f)) ; There are no tests in the pypi archive.
15476 (home-page "https://github.com/RazerM/ratelimiter")
15477 (synopsis "Simple rate limiting object")
15478 (description
15479 "The @code{ratelimiter} module ensures that an operation will not be
15480 executed more than a given number of times during a given period.")
15481 (license license:asl2.0)))
15482
15483 (define-public python2-ratelimiter
15484 (package-with-python2 python-ratelimiter))
15485
15486 (define-public python-dukpy
15487 (package
15488 (name "python-dukpy")
15489 (version "0.3")
15490 (source
15491 (origin
15492 (method git-fetch)
15493 (uri (git-reference
15494 (url "https://github.com/kovidgoyal/dukpy.git")
15495 (commit (string-append "v" version))))
15496 (file-name (git-file-name name version))
15497 (sha256
15498 (base32 "13h21nqzasv4zj32xs61brmc106pr2cx243672crcmwxxnjgaxls"))))
15499 (build-system python-build-system)
15500 (home-page "https://github.com/kovidgoyal/dukpy")
15501 (synopsis "Run JavaScript in python")
15502 (description
15503 "dukpy is a JavaScript runtime environment for Python using the duktape
15504 embeddable JavaScript engine.")
15505 ;; Dukpy is licensed under MIT like the embedded duktape library,
15506 ;; with 'errors.c' as GPL3.
15507 (license (list license:expat license:gpl3))))
15508
15509 (define-public python2-dukpy
15510 (package-with-python2 python-dukpy))
15511
15512 (define-public python-jsonrpclib-pelix
15513 (package
15514 (name "python-jsonrpclib-pelix")
15515 (version "0.3.2")
15516 (source
15517 (origin
15518 (method url-fetch)
15519 (uri (pypi-uri "jsonrpclib-pelix" version))
15520 (sha256
15521 (base32
15522 "0f83z5zi7w32vprhk1dyc94ir1bh4hdd57bjdbwkq9ykng8qilhl"))))
15523 (build-system python-build-system)
15524 (arguments
15525 `(#:tests? #f)) ; no tests in PyPI tarball
15526 (home-page "https://github.com/tcalmant/jsonrpclib/")
15527 (synopsis "JSON-RPC 2.0 client library for Python")
15528 (description
15529 "This library implements the JSON-RPC v2.0
15530 specification (backwards-compatible) as a client library for Python. This
15531 version is a fork of jsonrpclib by Josh Marshall, usable with Pelix remote
15532 services.")
15533 (license license:asl2.0)))
15534
15535 (define-public python2-jsonrpclib-pelix
15536 (package-with-python2 python-jsonrpclib-pelix))
15537
15538 (define-public python-setuptools-scm-git-archive
15539 (package
15540 (name "python-setuptools-scm-git-archive")
15541 (version "1.0")
15542 (source
15543 (origin
15544 (method url-fetch)
15545 (uri (pypi-uri "setuptools_scm_git_archive" version))
15546 (sha256
15547 (base32
15548 "1nii1sz5jq75ilf18bjnr11l9rz1lvdmyk66bxl7q90qan85yhjj"))))
15549 (build-system python-build-system)
15550 (native-inputs
15551 `(("python-pytest" ,python-pytest)))
15552 (propagated-inputs
15553 `(("python-setuptools-scm" ,python-setuptools-scm)))
15554 (home-page "https://github.com/Changaco/setuptools_scm_git_archive/")
15555 (synopsis "Setuptools_scm plugin for git archives")
15556 (description
15557 "The setuptools_scm_git_archive package is a plugin to
15558 setuptools_scm, which supports obtaining versions from git archives that
15559 belong to tagged versions.")
15560 (license license:expat)))
15561
15562 (define-public python2-setuptools-scm-git-archive
15563 (package-with-python2 python-setuptools-scm-git-archive))
15564
15565 (define-public python-setuptools-git
15566 (package
15567 (name "python-setuptools-git")
15568 (version "1.2")
15569 (source
15570 (origin
15571 (method url-fetch)
15572 (uri (pypi-uri "setuptools-git" version))
15573 (sha256
15574 (base32
15575 "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
15576 (build-system python-build-system)
15577 (arguments
15578 `(#:phases
15579 (modify-phases %standard-phases
15580 ;; This is needed for tests.
15581 (add-after 'unpack 'configure-git
15582 (lambda _
15583 (setenv "HOME" "/tmp")
15584 (invoke "git" "config" "--global" "user.email" "guix")
15585 (invoke "git" "config" "--global" "user.name" "guix")
15586 #t)))))
15587 (native-inputs
15588 `(("git" ,git-minimal)))
15589 (home-page "https://github.com/msabramo/setuptools-git")
15590 (synopsis "Setuptools revision control system plugin for Git")
15591 (description
15592 "This package provides a plugin for Setuptools for revision control with
15593 Git.")
15594 (license license:bsd-3)))
15595
15596 (define-public python-pyclipper
15597 (package
15598 (name "python-pyclipper")
15599 (version "1.1.0.post3")
15600 (source
15601 (origin
15602 (method url-fetch)
15603 (uri (pypi-uri "pyclipper" version ".zip"))
15604 (sha256
15605 (base32 "164yksvqwqvwzh8f8lq92asg87hd8rvcy2xb5vm4y4ccvd5xgb7i"))
15606 (modules '((guix build utils)))
15607 (snippet
15608 '(begin
15609 ;; This file is generated by Cython.
15610 (delete-file "pyclipper/pyclipper.cpp") #t))))
15611 (build-system python-build-system)
15612 (arguments
15613 `(#:phases
15614 (modify-phases %standard-phases
15615 (add-before 'build 'cythonize-sources
15616 (lambda _
15617 (with-directory-excursion "pyclipper"
15618 (invoke "cython" "--cplus" "pyclipper.pyx")))))))
15619 (propagated-inputs
15620 `(("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)))
15621 (native-inputs
15622 `(("python-cython" ,python-cython)
15623 ("python-pytest" ,python-pytest)
15624 ("python-pytest-runner" ,python-pytest-runner)
15625 ("python-unittest2" ,python-unittest2)
15626 ("unzip" ,unzip)))
15627 (home-page "https://github.com/greginvm/pyclipper")
15628 (synopsis "Wrapper for Angus Johnson's Clipper library")
15629 (description
15630 "Pyclipper is a Cython wrapper for the C++ translation of the
15631 Angus Johnson's polygon clipping Clipper library (ver. 6.4.2).")
15632 (license license:expat)))
15633
15634 (define-public python2-pyclipper
15635 (package-with-python2 python-pyclipper))
15636
15637 (define-public python2-booleanoperations
15638 (package
15639 (name "python2-booleanoperations")
15640 (version "0.7.1")
15641 (source
15642 (origin
15643 (method url-fetch)
15644 (uri (pypi-uri "booleanOperations" version ".zip"))
15645 (sha256
15646 (base32
15647 "1hw42fazdpvsn77glx96hwsj9l17mvx37sc5707s08y5w6fx16mn"))))
15648 (build-system python-build-system)
15649 (arguments
15650 `(#:python ,python-2))
15651 (native-inputs
15652 `(("unzip" ,unzip)
15653 ("python2-pytest" ,python2-pytest)
15654 ("python2-pytest-runner" ,python2-pytest-runner)))
15655 (propagated-inputs
15656 `(("python-fonttools" ,python2-fonttools)
15657 ("python-pyclipper" ,python2-pyclipper)
15658 ("python-ufolib" ,python2-ufolib)))
15659 (home-page "https://github.com/typemytype/booleanOperations")
15660 (synopsis "Boolean operations on paths")
15661 (description
15662 "BooleanOperations provides a Python library that enables
15663 boolean operations on paths.")
15664 (license license:expat)))
15665
15666 (define-public python-tempdir
15667 (package
15668 (name "python-tempdir")
15669 (version "0.7.1")
15670 (source
15671 (origin
15672 (method url-fetch)
15673 (uri (pypi-uri "tempdir" version))
15674 (sha256
15675 (base32
15676 "13msyyxqbicr111a294x7fsqbkl6a31fyrqflx3q7k547gnq15k8"))))
15677 (build-system python-build-system)
15678 (home-page "https://pypi.org/project/tempdir/")
15679 (arguments
15680 ;; the package has no tests
15681 '(#:tests? #f))
15682 (synopsis "Python library for managing temporary directories")
15683 (description
15684 "This library manages temporary directories that are automatically
15685 deleted with all their contents when they are no longer needed. It is
15686 particularly convenient for use in tests.")
15687 (license license:expat)))
15688
15689 (define-public python2-tempdir
15690 (package-with-python2 python-tempdir))
15691
15692 (define-public python-activepapers
15693 (package
15694 (name "python-activepapers")
15695 (version "0.2.2")
15696 (source
15697 (origin
15698 (method url-fetch)
15699 (uri (pypi-uri "ActivePapers.Py" version))
15700 (sha256
15701 (base32
15702 "12wkhjh90ffipjzv10swndp2xv9hd7xrxvg6v0n4n3i411pj4xb8"))))
15703 (build-system python-build-system)
15704 (arguments
15705 `(#:modules ((ice-9 ftw)
15706 (srfi srfi-1)
15707 (guix build utils)
15708 (guix build python-build-system))
15709
15710 #:phases
15711 (modify-phases %standard-phases
15712 (add-after 'unpack 'delete-python2-code
15713 (lambda _
15714 (for-each delete-file
15715 '("lib/activepapers/builtins2.py"
15716 "lib/activepapers/standardlib2.py"
15717 "lib/activepapers/utility2.py"))))
15718 (replace 'check
15719 (lambda _
15720 ;; Deactivate the test cases that download files
15721 (setenv "NO_NETWORK_ACCESS" "1")
15722 ;; For some strange reason, some tests fail if nosetests runs all
15723 ;; test modules in a single execution. They pass if each test
15724 ;; module is run individually.
15725 (for-each (lambda (filename)
15726 (invoke "nosetests"
15727 (string-append "tests/" filename)))
15728 (scandir "tests"
15729 (lambda (filename)
15730 (string-suffix? ".py" filename)))))))))
15731 (native-inputs
15732 `(("python-tempdir" ,python-tempdir)
15733 ("python-nose" ,python-nose)))
15734 (propagated-inputs
15735 `(("python-h5py" ,python-h5py)))
15736 (home-page "https://www.activepapers.org/")
15737 (synopsis "Executable papers for scientific computing")
15738 (description
15739 "ActivePapers is a tool for working with executable papers, which
15740 combine data, code, and documentation in single-file packages,
15741 suitable for publication as supplementary material or on repositories
15742 such as figshare or Zenodo.")
15743 (properties `((python2-variant . ,(delay python2-activepapers))))
15744 (license license:bsd-3)))
15745
15746 (define-public python2-activepapers
15747 (let ((base (package-with-python2
15748 (strip-python2-variant python-activepapers))))
15749 (package
15750 (inherit base)
15751 (arguments
15752 (substitute-keyword-arguments (package-arguments base)
15753 ((#:phases phases)
15754 `(modify-phases ,phases
15755 (delete 'delete-python2-code)
15756 (add-after 'unpack 'delete-python3-code
15757 (lambda _
15758 (for-each delete-file
15759 '("lib/activepapers/builtins3.py"
15760 "lib/activepapers/standardlib3.py"
15761 "lib/activepapers/utility3.py")))))))))))
15762
15763 (define-public python-semver
15764 (package
15765 (name "python-semver")
15766 (version "2.9.0")
15767 (source
15768 (origin
15769 (method url-fetch)
15770 (uri (pypi-uri "semver" version))
15771 (sha256
15772 (base32
15773 "183kg1rhzz3hqizvphkd8hlbf1zxfx8737zhfkmqzxi71jmdw7pd"))))
15774 (build-system python-build-system)
15775 (native-inputs
15776 `(("python-appdirs" ,python-appdirs)
15777 ("python-distlib" ,python-distlib)
15778 ("python-importlib-metadata" ,python-importlib-metadata)
15779 ("python-filelock" ,python-filelock)
15780 ("python-six" ,python-six)
15781 ("python-tox" ,python-tox)
15782 ("python-virtualenv" ,python-virtualenv)))
15783 (home-page "https://github.com/k-bx/python-semver")
15784 (synopsis "Python helper for Semantic Versioning")
15785 (description "This package provides a Python library for
15786 @url{Semantic Versioning, http://semver.org/}.")
15787 (license license:bsd-3)))
15788
15789 (define-public python2-semver
15790 (package-with-python2 python-semver))
15791
15792 (define-public python-pyro4
15793 (package
15794 (name "python-pyro4")
15795 (version "4.77")
15796 (source
15797 (origin
15798 (method url-fetch)
15799 (uri (pypi-uri "Pyro4" version))
15800 (sha256
15801 (base32 "0gsjg869y4gpy265s1gj1f2qy6jn5iz8r2bwwnq78r1r5yi15zib"))))
15802 (build-system python-build-system)
15803 (arguments
15804 '(#:tests? #f)) ;FIXME: Some tests require network access.
15805 (native-inputs
15806 `(("python-cloudpickle" ,python-cloudpickle)
15807 ("python-dill" ,python-dill)
15808 ("python-msgpack" ,python-msgpack)))
15809 (propagated-inputs
15810 `(("python-serpent" ,python-serpent)))
15811 (home-page "https://pyro4.readthedocs.io")
15812 (synopsis "Distributed object middleware for Python")
15813 (description
15814 "Pyro enables you to build applications in which objects can talk to each
15815 other over the network. You can just use normal Python method calls to call
15816 objects on other machines, also known as remote procedure calls (RPC).")
15817 (license license:expat)))
15818
15819 (define-public python2-pyro
15820 (package
15821 (name "python2-pyro")
15822 (version "3.16")
15823 (source
15824 (origin
15825 (method url-fetch)
15826 (uri (pypi-uri "Pyro" version))
15827 (file-name (string-append "Pyro-" version ".tar.gz"))
15828 (sha256
15829 (base32
15830 "0y75wzdqbjy565rpxaxscav4j8xg060sa90lnmb7aypgaf251v8v"))))
15831 (build-system python-build-system)
15832 (arguments
15833 ;; Pyro is not compatible with Python 3
15834 `(#:python ,python-2
15835 ;; Pyro has no test cases for automatic execution
15836 #:tests? #f))
15837 (home-page "https://pythonhosted.org/Pyro/")
15838 (synopsis "Distributed object manager for Python")
15839 (description "Pyro is a Distributed Object Technology system
15840 written in Python that is designed to be easy to use. It resembles
15841 Java's Remote Method Invocation (RMI). It has less similarity to CORBA,
15842 which is a system and language independent Distributed Object Technology
15843 and has much more to offer than Pyro or RMI. Pyro 3.x is no
15844 longer maintained. New projects should use Pyro4 instead, which
15845 is the new Pyro version that is actively developed.")
15846 (license license:expat)))
15847
15848 (define-public python2-scientific
15849 (package
15850 (name "python2-scientific")
15851 (version "2.9.4")
15852 (source
15853 (origin
15854 (method git-fetch)
15855 (uri (git-reference
15856 (url "https://github.com/khinsen/ScientificPython")
15857 (commit (string-append "rel" version))))
15858 (file-name (git-file-name name version))
15859 (sha256
15860 (base32
15861 "16l48aj9fps9r7jyk8gpxppwrv0fqvlc13sayxskz28r5s6sjwbl"))))
15862 (build-system python-build-system)
15863 (inputs
15864 `(("netcdf" ,netcdf)))
15865 (propagated-inputs
15866 `(("python-numpy" ,python2-numpy-1.8)
15867 ("python-pyro" ,python2-pyro)))
15868 (arguments
15869 ;; ScientificPython is not compatible with Python 3
15870 `(#:python ,python-2
15871 #:tests? #f ; No test suite
15872 #:phases
15873 (modify-phases %standard-phases
15874 (replace 'build
15875 (lambda* (#:key inputs #:allow-other-keys)
15876 (invoke "python" "setup.py" "build"
15877 (string-append "--netcdf_prefix="
15878 (assoc-ref inputs "netcdf"))))))))
15879 (home-page "http://dirac.cnrs-orleans.fr/ScientificPython")
15880 (synopsis "Python modules for scientific computing")
15881 (description "ScientificPython is a collection of Python modules that are
15882 useful for scientific computing. Most modules are rather general (Geometry,
15883 physical units, automatic derivatives, ...) whereas others are more
15884 domain-specific (e.g. netCDF and PDB support). The library is currently
15885 not actively maintained and works only with Python 2 and NumPy < 1.9.")
15886 (license license:cecill-c)))
15887
15888 (define-public python2-mmtk
15889 (package
15890 (name "python2-mmtk")
15891 (version "2.7.12")
15892 (source
15893 (origin
15894 (method git-fetch)
15895 (uri (git-reference
15896 (url "https://github.com/khinsen/MMTK")
15897 (commit (string-append "rel" version))))
15898 (file-name (git-file-name name version))
15899 (sha256
15900 (base32
15901 "1fqwh3ba9jd42nigvn5shndgwb1zy7kh9520ncvqci7n8ffjr6p1"))))
15902 (build-system python-build-system)
15903 (native-inputs
15904 `(("netcdf" ,netcdf)))
15905 (propagated-inputs
15906 `(("python-scientific" ,python2-scientific)
15907 ("python-tkinter" ,python-2 "tk")))
15908 (arguments
15909 `(#:python ,python-2
15910 #:tests? #f
15911 #:phases
15912 (modify-phases %standard-phases
15913 (add-before 'build 'includes-from-scientific
15914 (lambda* (#:key inputs #:allow-other-keys)
15915 (mkdir-p "Include/Scientific")
15916 (copy-recursively
15917 (string-append
15918 (assoc-ref inputs "python-scientific")
15919 "/include/python2.7/Scientific")
15920 "Include/Scientific"))))))
15921 (home-page "http://dirac.cnrs-orleans.fr/MMTK")
15922 (synopsis "Python library for molecular simulation")
15923 (description "MMTK is a library for molecular simulations with an emphasis
15924 on biomolecules. It provides widely used methods such as Molecular Dynamics
15925 and normal mode analysis, but also basic routines for implementing new methods
15926 for simulation and analysis. The library is currently not actively maintained
15927 and works only with Python 2 and NumPy < 1.9.")
15928 (license license:cecill-c)))
15929
15930 (define-public python-phonenumbers
15931 (package
15932 (name "python-phonenumbers")
15933 (version "8.9.1")
15934 (source
15935 (origin
15936 (method url-fetch)
15937 (uri (pypi-uri "phonenumbers" version))
15938 (sha256
15939 (base32
15940 "03fmrgb4r8x3ykmddjs9i3zhs703in8smikj3a6447blqpimwyh1"))))
15941 (build-system python-build-system)
15942 (home-page
15943 "https://github.com/daviddrysdale/python-phonenumbers")
15944 (synopsis
15945 "Python library for dealing with international phone numbers")
15946 (description
15947 "This package provides a Python port of Google's libphonenumber library.")
15948 (license license:asl2.0)))
15949
15950 (define-public python2-phonenumbers
15951 (package-with-python2 python-phonenumbers))
15952
15953 (define-public python-send2trash
15954 (package
15955 (name "python-send2trash")
15956 (version "1.5.0")
15957 (source
15958 (origin (method git-fetch)
15959 ;; Source tarball on PyPI doesn't include tests.
15960 (uri (git-reference
15961 (url "https://github.com/hsoft/send2trash.git")
15962 (commit version)))
15963 (file-name (git-file-name name version))
15964 (sha256
15965 (base32
15966 "1c76zldhw2ay7q7r00nnzcampjz9lkqfcbzqpm0iqp5i6bmmv30v"))))
15967 (build-system python-build-system)
15968 (arguments
15969 '(#:phases
15970 (modify-phases %standard-phases
15971 (add-before 'check 'pre-check
15972 (lambda _
15973 (mkdir-p "/tmp/foo")
15974 (setenv "HOME" "/tmp/foo")
15975 #t)))))
15976 (home-page "https://github.com/hsoft/send2trash")
15977 (synopsis "Send files to the user's @file{~/Trash} directory")
15978 (description "This package provides a Python library to send files to the
15979 user's @file{~/Trash} directory.")
15980 (properties `((python2-variant . ,(delay python2-send2trash))))
15981 (license license:bsd-3)))
15982
15983 (define-public python2-send2trash
15984 (package
15985 (inherit (package-with-python2 (strip-python2-variant python-send2trash)))
15986 (arguments
15987 (substitute-keyword-arguments (package-arguments python-send2trash)
15988 ((#:phases phases)
15989 `(modify-phases ,phases
15990 (add-before 'check 'setenv
15991 (lambda _
15992 (setenv "PYTHONPATH"
15993 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
15994 #t))))))))
15995
15996 (define-public python-yapf
15997 (package
15998 (name "python-yapf")
15999 (version "0.29.0")
16000 (source
16001 (origin
16002 (method url-fetch)
16003 (uri (pypi-uri "yapf" version))
16004 (sha256
16005 (base32
16006 "1pj3xzblmbssshi889b6n9hwqbjpabw6j0fimlng2sshd3226bki"))))
16007 (build-system python-build-system)
16008 (home-page "https://github.com/google/yapf")
16009 (synopsis "Formatter for Python code")
16010 (description "YAPF is a formatter for Python code. It's based off of
16011 @dfn{clang-format}, developed by Daniel Jasper. In essence, the algorithm
16012 takes the code and reformats it to the best formatting that conforms to the
16013 style guide, even if the original code didn't violate the style guide.")
16014 (license license:asl2.0)))
16015
16016 (define-public python2-yapf
16017 (package-with-python2 python-yapf))
16018
16019 (define-public python-gyp
16020 (let ((commit "5e2b3ddde7cda5eb6bc09a5546a76b00e49d888f")
16021 (revision "0"))
16022 (package
16023 (name "python-gyp")
16024 ;; Google does not release versions,
16025 ;; based on second most recent commit date.
16026 (version (git-version "0.0.0" revision commit))
16027 (source
16028 (origin
16029 ;; Google does not release tarballs,
16030 ;; git checkout is needed.
16031 (method git-fetch)
16032 (uri (git-reference
16033 (url "https://chromium.googlesource.com/external/gyp")
16034 (commit commit)))
16035 (file-name (git-file-name name version))
16036 (sha256
16037 (base32
16038 "0fr7nxcrk292djmxzpcjaphnsd123k31gp8jnd91vwknhq6snmv9"))))
16039 (build-system python-build-system)
16040 (home-page "https://gyp.gsrc.io/")
16041 (synopsis "GYP is a Meta-Build system")
16042 (description
16043 "GYP builds build systems for large, cross platform applications.
16044 It can be used to generate XCode projects, Visual Studio projects, Ninja build
16045 files, and Makefiles.")
16046 (license license:bsd-3))))
16047
16048 (define-public python2-gyp
16049 (package-with-python2 python-gyp))
16050
16051 (define-public python-whatever
16052 (package
16053 (name "python-whatever")
16054 (version "0.6")
16055 (source
16056 (origin
16057 (method git-fetch)
16058 (uri (git-reference
16059 (url "https://github.com/Suor/whatever")
16060 (commit version)))
16061 (file-name (git-file-name name version))
16062 (sha256
16063 (base32 "1q7ajgqjfivxqsqgnhp4lc4p6jxyh4zprcsdbpd6dw54inaf0av5"))))
16064 (build-system python-build-system)
16065 (arguments
16066 `(#:phases
16067 (modify-phases %standard-phases
16068 (replace 'check
16069 (lambda _
16070 (invoke "py.test"))))))
16071 (native-inputs
16072 `(("python-pytest" ,python-pytest)))
16073 (home-page "http://github.com/Suor/whatever")
16074 (synopsis "Make anonymous functions by partial application of operators")
16075 (description "@code{whatever} provides an easy way to make anonymous
16076 functions by partial application of operators.")
16077 (license license:bsd-3)))
16078
16079 (define-public python2-whatever
16080 (package-with-python2 python-whatever))
16081
16082 (define-public python-funcy
16083 (package
16084 (name "python-funcy")
16085 (version "1.11")
16086 (source
16087 (origin
16088 (method git-fetch)
16089 (uri (git-reference
16090 (url "https://github.com/Suor/funcy.git")
16091 (commit version)))
16092 (sha256
16093 (base32 "1s98vkjnq3zq71737hn8xa15kssvmy1sfzsll3vrlv53902418mw"))
16094 (file-name (git-file-name name version))))
16095 (build-system python-build-system)
16096 (arguments
16097 `(#:phases
16098 (modify-phases %standard-phases
16099 (replace 'check
16100 (lambda _
16101 (invoke "py.test"))))))
16102 (native-inputs
16103 `(("python-pytest" ,python-pytest)
16104 ("python-whatever" ,python-whatever)))
16105 (home-page "http://github.com/Suor/funcy")
16106 (synopsis "Functional tools")
16107 (description "@code{funcy} is a library that provides functional tools.
16108 Examples are:
16109 @enumerate
16110 @item merge - Merges collections of the same type
16111 @item walk - Type-preserving map
16112 @item select - Selects a part of a collection
16113 @item take - Takes the first n items of a collection
16114 @item first - Takes the first item of a collection
16115 @item remove - Predicated-removes items of a collection
16116 @item concat - Concatenates two collections
16117 @item flatten - Flattens a collection with subcollections
16118 @item distinct - Returns only distinct items
16119 @item split - Predicated-splits a collection
16120 @item split_at - Splits a collection at a given item
16121 @item group_by - Groups items by group
16122 @item pairwise - Pairs off adjacent items
16123 @item partial - Partially-applies a function
16124 @item curry - Curries a function
16125 @item compose - Composes functions
16126 @item complement - Complements a predicate
16127 @item all_fn - \"all\" with predicate
16128 @end enumerate")
16129 (license license:bsd-3)))
16130
16131 (define-public python2-funcy
16132 (package-with-python2 python-funcy))
16133
16134 (define-public python-isoweek
16135 (package
16136 (name "python-isoweek")
16137 (version "1.3.3")
16138 (source
16139 (origin
16140 (method url-fetch)
16141 (uri (pypi-uri "isoweek" version))
16142 (sha256
16143 (base32
16144 "1s7zsf0pab0l9gn6456qadnz5i5h90hafcjwnhx5mq23qjxggwvk"))))
16145 (build-system python-build-system)
16146 (home-page "https://github.com/gisle/isoweek")
16147 (synopsis "Objects representing a week")
16148 (description "The @code{isoweek} module provide the class Week that
16149 implements the week definition of ISO 8601. This standard also defines
16150 a notation for identifying weeks; yyyyWww (where the W is a literal).
16151 Week instances stringify to this form.")
16152 (license license:bsd-3)))
16153
16154 (define-public python2-isoweek
16155 (package-with-python2 python-isoweek))
16156
16157 (define-public python-tokenize-rt
16158 (package
16159 (name "python-tokenize-rt")
16160 (version "2.0.1")
16161 (source
16162 (origin
16163 (method url-fetch)
16164 (uri (pypi-uri "tokenize-rt" version))
16165 (sha256
16166 (base32
16167 "1yjvbz7rvrz31zjyax1cgy3xhf4wb3j18jwnj4bnl77ca4gliyiw"))))
16168 (build-system python-build-system)
16169 (home-page "https://github.com/asottile/tokenize-rt")
16170 (synopsis "Wrapper around the stdlib tokenize which roundtrips.")
16171 (description
16172 "This Python library is a wrapper around @code{tokenize} from the Python
16173 standard library. It provides two additional tokens @code{ESCAPED_NL} and
16174 @code{UNIMPORTANT_WS}, and a @code{Token} data type. Use @code{src_to_tokens}
16175 and @code{tokens_to_src} to roundtrip.")
16176 (license license:expat)))
16177
16178 (define-public python-future-fstrings
16179 (package
16180 (name "python-future-fstrings")
16181 (version "0.4.1")
16182 (source
16183 (origin
16184 (method url-fetch)
16185 (uri (pypi-uri "future_fstrings" version))
16186 (sha256
16187 (base32
16188 "0ydxqz2dvns44g55p8ix2x18qkfk3aaz0m0dc70f3g6n8js35h47"))))
16189 (build-system python-build-system)
16190 (propagated-inputs
16191 `(("python-tokenize-rt" ,python-tokenize-rt)))
16192 (home-page "https://github.com/asottile/future-fstrings")
16193 (synopsis "Backport of fstrings to Python < 3.6")
16194 (description
16195 "This package provides a UTF-8 compatible encoding
16196 @code{future_fstrings}, which performs source manipulation. It decodes the
16197 source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
16198 @code{f} strings.")
16199 (license license:expat)))
16200
16201 (define-public python-typed-ast
16202 (package
16203 (name "python-typed-ast")
16204 (version "1.4.0")
16205 (source
16206 (origin
16207 (method git-fetch)
16208 (uri (git-reference
16209 (url "https://github.com/python/typed_ast.git")
16210 (commit version)))
16211 (sha256
16212 (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb"))
16213 (file-name (git-file-name name version))))
16214 (build-system python-build-system)
16215 (arguments
16216 `(#:modules ((guix build utils)
16217 (guix build python-build-system)
16218 (ice-9 ftw)
16219 (srfi srfi-1)
16220 (srfi srfi-26))
16221 #:phases
16222 (modify-phases %standard-phases
16223 (replace 'check
16224 (lambda _
16225 (let ((cwd (getcwd)))
16226 (setenv "PYTHONPATH"
16227 (string-append cwd "/build/"
16228 (find (cut string-prefix? "lib" <>)
16229 (scandir (string-append cwd "/build")))
16230 ":"
16231 (getenv "PYTHONPATH"))))
16232 (invoke "pytest")
16233 #t)))))
16234 (native-inputs `(("python-pytest" ,python-pytest)))
16235 (home-page "https://github.com/python/typed_ast")
16236 (synopsis "Fork of Python @code{ast} modules with type comment support")
16237 (description "This package provides a parser similar to the standard
16238 @code{ast} library. Unlike @code{ast}, the parsers in @code{typed_ast}
16239 include PEP 484 type comments and are independent of the version of Python
16240 under which they are run. The @code{typed_ast} parsers produce the standard
16241 Python AST (plus type comments), and are both fast and correct, as they are
16242 based on the CPython 2.7 and 3.7 parsers.")
16243 ;; See the file "LICENSE" for the details.
16244 (license (list license:psfl
16245 license:asl2.0
16246 license:expat)))) ;ast27/Parser/spark.py
16247
16248 (define-public python-typing
16249 (package
16250 (name "python-typing")
16251 (version "3.7.4.1")
16252 (source
16253 (origin
16254 (method url-fetch)
16255 (uri (pypi-uri "typing" version))
16256 (sha256
16257 (base32
16258 "08xs7s5pyq99hbrzw23inczmidz90krvpv9q5p1qrvh6yzrydpwi"))))
16259 (build-system python-build-system)
16260 (home-page "https://docs.python.org/3/library/typing.html")
16261 (synopsis "Type hints for Python")
16262 (description "This is a backport of the standard library @code{typing}
16263 module to Python versions older than 3.5. Typing defines a standard notation
16264 for Python function and variable type annotations. The notation can be used
16265 for documenting code in a concise, standard format, and it has been designed
16266 to also be used by static and runtime type checkers, static analyzers, IDEs
16267 and other tools.")
16268 (license license:psfl)))
16269
16270 (define-public python2-typing
16271 (package-with-python2 python-typing))
16272
16273 (define-public python-typing-extensions
16274 (package
16275 (name "python-typing-extensions")
16276 (version "3.7.4.1")
16277 (source
16278 (origin
16279 (method url-fetch)
16280 (uri (pypi-uri "typing_extensions" version))
16281 (sha256
16282 (base32
16283 "1wj1vcgbnm20aiinmphyxfrbv3qi9xdhvw89ab3qm42y9n4wq7h9"))))
16284 (build-system python-build-system)
16285 (home-page
16286 "https://github.com/python/typing/blob/master/typing_extensions/README.rst")
16287 (synopsis "Experimental type hints for Python")
16288 (description
16289 "The typing_extensions module contains additional @code{typing} hints not
16290 yet present in the of the @code{typing} standard library.
16291 Included are implementations of:
16292 @enumerate
16293 @item ClassVar
16294 @item ContextManager
16295 @item Counter
16296 @item DefaultDict
16297 @item Deque
16298 @item NewType
16299 @item NoReturn
16300 @item overload
16301 @item Protocol
16302 @item runtime
16303 @item Text
16304 @item Type
16305 @item TYPE_CHECKING
16306 @item AsyncGenerator
16307 @end enumerate\n")
16308 (license license:psfl)))
16309
16310 (define-public bpython
16311 (package
16312 (name "bpython")
16313 (version "0.18")
16314 (source
16315 (origin
16316 (method url-fetch)
16317 (uri (pypi-uri "bpython" version))
16318 (sha256
16319 (base32 "1hl6frgvr2lqaxqczl8amg9xih32b3gzv429vs0qrjb8wpdj1k2n"))))
16320 (build-system python-build-system)
16321 (arguments
16322 `(#:phases
16323 (modify-phases %standard-phases
16324 (add-after 'unpack 'remove-failing-test
16325 (lambda _
16326 ;; Remove failing test. FIXME: make it pass
16327 (delete-file "bpython/test/test_args.py")
16328 #t))
16329 (add-after 'wrap 'add-aliases
16330 ;; for symmetry to bpython2, add symlinks bypthon3, bpdb3, etc.
16331 (lambda* (#:key outputs #:allow-other-keys)
16332 (let ((out (assoc-ref outputs "out")))
16333 (for-each
16334 (lambda (old new)
16335 (symlink old (string-append out "/bin/" new)))
16336 '("bpython" "bpython-curses" "bpython-urwid" "bpdb")
16337 '("bpython3" "bpython3-curses" "bpython3-urwid" "bpdb3")))
16338 #t)))))
16339 (propagated-inputs
16340 `(("python-pygments" ,python-pygments)
16341 ("python-requests" ,python-requests)
16342 ("python-babel" ,python-babel) ; optional, for internationalization
16343 ("python-curtsies" ,python-curtsies) ; >= 0.1.18
16344 ("python-greenlet" ,python-greenlet)
16345 ("python-urwid" ,python-urwid) ; for bpython-urwid only
16346 ("python-six" ,python-six)))
16347 (native-inputs
16348 `(("python-sphinx" ,python-sphinx)
16349 ("python-mock" ,python-mock)))
16350 (home-page "https://bpython-interpreter.org/")
16351 (synopsis "Fancy interface to the Python interpreter")
16352 (description "Bpython is a fancy interface to the Python
16353 interpreter. bpython's main features are
16354
16355 @enumerate
16356 @item in-line syntax highlighting,
16357 @item readline-like autocomplete with suggestions displayed as you type,
16358 @item expected parameter list for any Python function,
16359 @item \"rewind\" function to pop the last line of code from memory and
16360 re-evaluate,
16361 @item send the code you've entered off to a pastebin,
16362 @item save the code you've entered to a file, and
16363 @item auto-indentation.
16364 @end enumerate")
16365 (license license:expat)))
16366
16367 (define-public bpython2
16368 (let ((base (package-with-python2
16369 (strip-python2-variant bpython))))
16370 (package (inherit base)
16371 (name "bpython2")
16372 (arguments
16373 `(#:python ,python-2
16374 #:phases
16375 (modify-phases %standard-phases
16376 (add-after 'unpack 'remove-failing-test
16377 (lambda _
16378 ;; Remove failing test. FIXME: make it pass
16379 (delete-file "bpython/test/test_args.py")
16380 ;; Disable failing test-cases (renaming inhibits they are
16381 ;; discovered)
16382 (substitute* "bpython/test/test_curtsies_repl.py"
16383 (("^(\\s*def )(test_get_last_word_with_prev_line\\W)" _ a b)
16384 (string-append a "xxx_off_" b))
16385 (("^(\\s*def )(test_complex\\W)" _ a b)
16386 (string-append a "xxx_off_" b)))
16387 #t))
16388 (add-before 'build 'rename-scripts
16389 ;; rename the scripts to bypthon2, bpdb2, etc.
16390 (lambda _
16391 (substitute* "setup.py"
16392 (("^(\\s+'bpdb)(\\s+=.*',?)\\s*?$" _ name rest)
16393 (string-append name "2" rest "\n"))
16394 (("^(\\s+'bpython)(-\\S+)?(\\s+=.*',?)\\s*?$" _ name sub rest)
16395 (string-append name "2" (or sub "") rest "\n")))
16396 #t))))))))
16397
16398 (define-public python-pyinotify
16399 (package
16400 (name "python-pyinotify")
16401 (version "0.9.6")
16402 (source (origin
16403 (method url-fetch)
16404 (uri (pypi-uri "pyinotify" version))
16405 (sha256
16406 (base32
16407 "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
16408 (build-system python-build-system)
16409 (arguments `(#:tests? #f)) ;no tests
16410 (home-page "https://github.com/seb-m/pyinotify")
16411 (synopsis "Python library for monitoring inotify events")
16412 (description
16413 "@code{pyinotify} provides a Python interface for monitoring
16414 file system events on Linux.")
16415 (license license:expat)))
16416
16417 (define-public python2-pyinotify
16418 (package-with-python2 python-pyinotify))
16419
16420 ;; Ada parser uses this version.
16421 (define-public python2-quex-0.67.3
16422 (package
16423 (name "python2-quex")
16424 (version "0.67.3")
16425 (source
16426 (origin
16427 (method url-fetch)
16428 (uri (string-append "mirror://sourceforge/quex/HISTORY/"
16429 (version-major+minor version)
16430 "/quex-" version ".zip"))
16431 (sha256
16432 (base32
16433 "14gv8ll3ipqv4kyc2xiy891nrmjl4ic823zfyx8hassagyclyppw"))))
16434 (build-system python-build-system)
16435 (native-inputs
16436 `(("unzip" ,unzip)))
16437 (arguments
16438 `(#:python ,python-2
16439 #:tests? #f
16440 #:phases
16441 (modify-phases %standard-phases
16442 (delete 'configure)
16443 (delete 'build)
16444 (replace 'install
16445 (lambda* (#:key outputs #:allow-other-keys)
16446 (let* ((out (assoc-ref outputs "out"))
16447 (share/quex (string-append out "/share/quex"))
16448 (bin (string-append out "/bin")))
16449 (copy-recursively "." share/quex)
16450 (mkdir-p bin)
16451 (symlink (string-append share/quex "/quex-exe.py")
16452 (string-append bin "/quex"))
16453 #t))))))
16454 (native-search-paths
16455 (list (search-path-specification
16456 (variable "QUEX_PATH")
16457 (files '("share/quex")))))
16458 (home-page "http://quex.sourceforge.net/")
16459 (synopsis "Lexical analyzer generator in Python")
16460 (description "@code{quex} is a lexical analyzer generator in Python.")
16461 (license license:lgpl2.1+))) ; Non-military
16462
16463 (define-public python2-quex
16464 (package (inherit python2-quex-0.67.3)
16465 (name "python2-quex")
16466 (version "0.68.1")
16467 (source
16468 (origin
16469 (method url-fetch)
16470 (uri (string-append "mirror://sourceforge/quex/DOWNLOAD/quex-" version ".tar.gz"))
16471 (sha256
16472 (base32
16473 "0svc9nla3b9145d6b7fb9dizx412l3difzqw0ilh9lz52nsixw8j"))
16474 (file-name (string-append name "-" version ".tar.gz"))))))
16475
16476 (define-public python-more-itertools
16477 (package
16478 (name "python-more-itertools")
16479 (version "8.2.0")
16480 (source
16481 (origin
16482 (method url-fetch)
16483 (uri (pypi-uri "more-itertools" version))
16484 (sha256
16485 (base32
16486 "01x5nwm1zxmnd06cllbdd095xxc2nd25ing1a726m2kd30rbkpdi"))))
16487 (build-system python-build-system)
16488 (home-page "https://github.com/erikrose/more-itertools")
16489 (synopsis "More routines for operating on iterables, beyond itertools")
16490 (description "Python's built-in @code{itertools} module implements a
16491 number of iterator building blocks inspired by constructs from APL, Haskell,
16492 and SML. @code{more-itertools} includes additional building blocks for
16493 working with iterables.")
16494 (properties `((python2-variant . ,(delay python2-more-itertools))))
16495 (license license:expat)))
16496
16497 ;; The 5.x series are the last versions supporting Python 2.7.
16498 (define-public python2-more-itertools
16499 (package
16500 (inherit python-more-itertools)
16501 (name "python2-more-itertools")
16502 (version "5.0.0")
16503 (source (origin
16504 (method url-fetch)
16505 (uri (pypi-uri "more-itertools" version))
16506 (sha256
16507 (base32
16508 "1r12cm6mcdwdzz7d47a6g4l437xsvapdlgyhqay3i2nrlv03da9q"))))
16509 (arguments
16510 `(#:python ,python-2))
16511 (propagated-inputs
16512 `(("python2-six" ,python2-six-bootstrap)))))
16513
16514 (define-public python-latexcodec
16515 (package
16516 (name "python-latexcodec")
16517 (version "1.0.7")
16518 (source
16519 (origin
16520 (method url-fetch)
16521 (uri (pypi-uri "latexcodec" version))
16522 (sha256
16523 (base32 "0wnp3yqcgx0rpy8dz51vh75lbp2qif67da19zi7m3ca98n887hgb"))))
16524 (build-system python-build-system)
16525 (inputs
16526 `(("python-six" ,python-six)))
16527 (home-page "https://readthedocs.org/projects/latexcodec/")
16528 (synopsis "Work with LaTeX code in Python")
16529 (description "Lexer and codec to work with LaTeX code in Python.")
16530 (license license:expat)))
16531
16532 (define-public python-pybtex
16533 (package
16534 (name "python-pybtex")
16535 (version "0.22.2")
16536 (source
16537 (origin
16538 (method url-fetch)
16539 (uri (pypi-uri "pybtex" version))
16540 (sha256
16541 (base32 "070wfcmxrd7xg1si421mi9150gmx2qwx431nwf69sq3hhmgnx080"))))
16542 (build-system python-build-system)
16543 (native-inputs
16544 `(("python-nose" ,python-nose)))
16545 (inputs
16546 `(("python-latexcodec" ,python-latexcodec)
16547 ("python-pyyaml" ,python-pyyaml)
16548 ("python-six" ,python-six)))
16549 (arguments
16550 `(#:test-target "nosetests"))
16551 (home-page "https://pybtex.org/")
16552 (synopsis "BibTeX-compatible bibliography processor")
16553 (description "Pybtex is a BibTeX-compatible bibliography processor written
16554 in Python. You can simply type pybtex instead of bibtex.")
16555 (license license:expat)))
16556
16557 (define-public python-onetimepass
16558 (package
16559 (name "python-onetimepass")
16560 (version "1.0.1")
16561 (source
16562 (origin
16563 (method url-fetch)
16564 (uri (pypi-uri "onetimepass" version))
16565 (sha256
16566 (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5"))))
16567 (build-system python-build-system)
16568 (propagated-inputs `(("python-six" ,python-six)))
16569 (home-page "https://github.com/tadeck/onetimepass/")
16570 (synopsis "One-time password library")
16571 (description "Python one-time password library for HMAC-based (HOTP) and
16572 time-based (TOTP) passwords.")
16573 (license license:expat)))
16574
16575 (define-public python-parso
16576 (package
16577 (name "python-parso")
16578 (version "0.7.0")
16579 (source
16580 (origin
16581 (method url-fetch)
16582 (uri (pypi-uri "parso" version))
16583 (sha256
16584 (base32
16585 "0b7irps2dqmzq41sxbpvxbivhh1x2hwmbqp45bbpd82446p9z3lh"))))
16586 (native-inputs
16587 `(("python-pytest" ,python-pytest)))
16588 (build-system python-build-system)
16589 (arguments
16590 `(#:phases (modify-phases %standard-phases
16591 (replace 'check
16592 (lambda _ (invoke "pytest" "-vv"))))))
16593 (home-page "https://github.com/davidhalter/parso")
16594 (synopsis "Python Parser")
16595 (description "Parso is a Python parser that supports error recovery and
16596 round-trip parsing for different Python versions (in multiple Python versions).
16597 Parso is also able to list multiple syntax errors in your Python file.")
16598 (license license:expat)))
16599
16600 (define-public python2-parso
16601 (package-with-python2 python-parso))
16602
16603 (define-public python-async-generator
16604 (package
16605 (name "python-async-generator")
16606 (version "1.10")
16607 (source
16608 (origin
16609 (method url-fetch)
16610 (uri (pypi-uri "async_generator" version))
16611 (sha256
16612 (base32
16613 "0i11f6z6lix8ixi3vsk6s76zvvpmgrw6zjrcwjm0m4hjdh83vfvf"))))
16614 (build-system python-build-system)
16615 (native-inputs
16616 `(("python-pytest" ,python-pytest)))
16617 (home-page "https://github.com/python-trio/async_generator")
16618 (synopsis "Async generators and context managers for Python 3.5+")
16619 (description "@code{async_generator} back-ports Python 3.6's native async
16620 generators and Python 3.7's context managers into Python 3.5.")
16621 ;; Dual licensed.
16622 (license (list license:expat license:asl2.0))))
16623
16624 (define-public python-async-timeout
16625 (package
16626 (name "python-async-timeout")
16627 (version "3.0.1")
16628 (source
16629 (origin
16630 (method url-fetch)
16631 (uri (pypi-uri "async-timeout" version))
16632 (sha256
16633 (base32
16634 "0pscbyr840m7fyfc3r8zv9kgkwdcn9f78p7zsrczciwd09m82g0c"))))
16635 (build-system python-build-system)
16636 (home-page "https://github.com/aio-libs/async_timeout/")
16637 (synopsis "Timeout context manager for asyncio programs")
16638 (description "@code{async-timeout} provides a timeout timeout context
16639 manager compatible with @code{asyncio}.")
16640 (license license:asl2.0)))
16641
16642 (define-public python-glob2
16643 (package
16644 (name "python-glob2")
16645 (version "0.7")
16646 (source
16647 (origin
16648 (method git-fetch)
16649 (uri (git-reference
16650 (url "https://github.com/miracle2k/python-glob2.git")
16651 (commit (string-append "v" version))))
16652 (file-name (git-file-name name version))
16653 (sha256
16654 (base32 "160nh2ay9lw2hi0rixpzb2k87r6ql56k0j2cm87lqz8xc8zbw919"))))
16655 (build-system python-build-system)
16656 (home-page "https://github.com/miracle2k/python-glob2/")
16657 (synopsis "Extended Version of the python buildin glob module")
16658 (description "This is an extended version of the Python
16659 @url{http://docs.python.org/library/glob.html, built-in glob module} which
16660 adds:
16661
16662 @itemize
16663 @item The ability to capture the text matched by glob patterns, and return
16664 those matches alongside the file names.
16665 @item A recursive @code{**} globbing syntax, akin for example to the
16666 @code{globstar} option of Bash.
16667 @item The ability to replace the file system functions used, in order to glob
16668 on virtual file systems.
16669 @item Compatible with Python 2 and Python 3 (tested with 3.3).
16670 @end itemize
16671
16672 Glob2 currently based on the glob code from Python 3.3.1.")
16673 (license license:bsd-2)))
16674
16675 (define-public python2-glob2
16676 (package-with-python2 python-glob2))
16677
16678 (define-public python-gipc
16679 (package
16680 (name "python-gipc")
16681 (version "0.6.0")
16682 (source
16683 (origin
16684 (method url-fetch)
16685 (uri (pypi-uri "gipc" version ".zip"))
16686 (sha256
16687 (base32
16688 "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2"))))
16689 (build-system python-build-system)
16690 (native-inputs
16691 `(("unzip" ,unzip)))
16692 (propagated-inputs
16693 `(("python-gevent" ,python-gevent)))
16694 (home-page "https://gehrcke.de/gipc/")
16695 (synopsis "Child process management in the context of gevent")
16696 (description "Usage of Python's multiprocessing package in a
16697 gevent-powered application may raise problems. With @code{gipc},
16698 process-based child processes can safely be created anywhere within a
16699 gevent-powered application.")
16700 (license license:expat)))
16701
16702 (define-public python2-gipc
16703 (package-with-python2 python-gipc))
16704
16705 (define-public python-fusepy
16706 (package
16707 (name "python-fusepy")
16708 (version "2.0.4")
16709 (source
16710 (origin
16711 (method url-fetch)
16712 (uri (pypi-uri "fusepy" version))
16713 (sha256
16714 (base32
16715 "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h"))))
16716 (build-system python-build-system)
16717 (arguments
16718 `(#:phases
16719 (modify-phases %standard-phases
16720 (add-before 'build 'set-library-file-name
16721 (lambda* (#:key inputs #:allow-other-keys)
16722 (let ((fuse (assoc-ref inputs "fuse")))
16723 (substitute* "fuse.py"
16724 (("find_library\\('fuse'\\)")
16725 (string-append "'" fuse "/lib/libfuse.so'")))
16726 #t))))))
16727 (propagated-inputs
16728 `(("fuse" ,fuse)))
16729 (home-page "https://github.com/fusepy/fusepy")
16730 (synopsis "Simple ctypes bindings for FUSE")
16731 (description "Python module that provides a simple interface to FUSE and
16732 MacFUSE. The binding is created using the standard @code{ctypes} library.")
16733 (license license:isc)))
16734
16735 (define-public python2-fusepy
16736 (package-with-python2 python-fusepy))
16737
16738 (define-public python-fusepyng
16739 (package
16740 (name "python-fusepyng")
16741 (version "1.0.7")
16742 (source
16743 (origin
16744 (method url-fetch)
16745 (uri (pypi-uri "fusepyng" version))
16746 (sha256
16747 (base32
16748 "17w9iw6m6zjbmnhs4ikd27pq4mb1nan6k4ahlwyz40463vw6wkwb"))))
16749 (build-system python-build-system)
16750 (arguments
16751 '(#:phases
16752 (modify-phases %standard-phases
16753 (add-after 'unpack 'set-libfuse-path
16754 (lambda* (#:key inputs #:allow-other-keys)
16755 (let ((fuse (assoc-ref inputs "fuse")))
16756 (substitute* "fusepyng.py"
16757 (("os.environ.get\\('FUSE_LIBRARY_PATH'\\)")
16758 (string-append "\"" fuse "/lib/libfuse.so\""))))
16759 #t)))))
16760 (inputs
16761 `(("fuse" ,fuse)))
16762 (propagated-inputs
16763 `(("python-paramiko" ,python-paramiko)))
16764 (home-page "https://github.com/rianhunter/fusepyng")
16765 (synopsis "Simple ctypes bindings for FUSE")
16766 (description "@code{fusepyng} is a Python module that provides a simple
16767 interface to FUSE on various operating systems. It's just one file and is
16768 implemented using @code{ctypes}.")
16769 (license license:isc)))
16770
16771 (define-public python2-gdrivefs
16772 (package
16773 (name "python2-gdrivefs")
16774 (version "0.14.9")
16775 (source
16776 (origin
16777 (method url-fetch)
16778 (uri (pypi-uri "gdrivefs" version))
16779 (sha256
16780 (base32
16781 "0v9sp2cfg4ki3wagkwf3rnfpjhvgf845anz3757il9z95yvvcvb7"))))
16782 (build-system python-build-system)
16783 (arguments
16784 `(#:python ,python-2
16785 #:phases
16786 (modify-phases %standard-phases
16787 (add-before 'build 'patch-setup-py
16788 (lambda _
16789 ;; Update requirements from dependency==version
16790 ;; to dependency>=version
16791 (substitute* "gdrivefs/resources/requirements.txt"
16792 (("==") ">="))
16793 #t)))))
16794 (native-inputs
16795 `(("python2-gipc" ,python2-gipc)
16796 ("python2-gevent" ,python2-gevent)
16797 ("python2-greenlet" ,python2-greenlet)
16798 ("python2-httplib2" ,python2-httplib2)
16799 ("python2-uritemplate" ,python2-uritemplate)
16800 ("python2-oauth2client" ,python2-oauth2client)
16801 ("python2-six" ,python2-six)))
16802 (propagated-inputs
16803 `(("python2-dateutil" ,python2-dateutil)
16804 ("python2-fusepy" ,python2-fusepy)
16805 ("python2-google-api-client" ,python2-google-api-client)))
16806 (home-page "https://github.com/dsoprea/GDriveFS")
16807 (synopsis "Mount Google Drive as a local file system")
16808 (description "@code{gdrivefs} provides a FUSE wrapper for Google Drive
16809 under Python 2.7.")
16810 (license license:gpl2)))
16811
16812 (define-public python-userspacefs
16813 (package
16814 (name "python-userspacefs")
16815 (version "1.0.13")
16816 (source
16817 (origin
16818 (method url-fetch)
16819 (uri (pypi-uri "userspacefs" version))
16820 (sha256
16821 (base32
16822 "0kyz52jyxw3m7hqvn5g6z0sx9cq6k0nq1wj44lvdrghdljjgyk2z"))))
16823 (build-system python-build-system)
16824 (propagated-inputs
16825 `(("python-fusepyng" ,python-fusepyng)))
16826 (home-page "https://github.com/rianhunter/userspacefs")
16827 (synopsis "User-space file systems for Python")
16828 (description
16829 "@code{userspacefs} is a library that allows you to easily write
16830 user-space file systems in Python.")
16831 (license license:gpl3+)))
16832
16833 (define-public pybind11
16834 (package
16835 (name "pybind11")
16836 (version "2.4.3")
16837 (source (origin
16838 (method git-fetch)
16839 (uri (git-reference
16840 (url "https://github.com/pybind/pybind11.git")
16841 (commit (string-append "v" version))))
16842 (sha256
16843 (base32
16844 "0k89w4bsfbpzw963ykg1cyszi3h3nk393qd31m6y46pcfxkqh4rd"))
16845 (file-name (git-file-name name version))))
16846 (build-system cmake-build-system)
16847 (native-inputs
16848 `(("python" ,python-wrapper)
16849
16850 ;; The following dependencies are used for tests.
16851 ("python-pytest" ,python-pytest)
16852 ("catch" ,catch-framework2-1)
16853 ("eigen" ,eigen)))
16854 (arguments
16855 `(#:configure-flags
16856 (list (string-append "-DCATCH_INCLUDE_DIR="
16857 (assoc-ref %build-inputs "catch")
16858 "/include/catch"))
16859
16860 #:phases (modify-phases %standard-phases
16861 (add-after 'install 'install-python
16862 (lambda* (#:key outputs #:allow-other-keys)
16863 (let ((out (assoc-ref outputs "out")))
16864 (with-directory-excursion "../source"
16865 (setenv "PYBIND11_USE_CMAKE" "yes")
16866 (invoke "python" "setup.py" "install"
16867 "--single-version-externally-managed"
16868 "--root=/"
16869 (string-append "--prefix=" out)))))))
16870
16871 #:test-target "check"))
16872 (home-page "https://github.com/pybind/pybind11/")
16873 (synopsis "Seamless operability between C++11 and Python")
16874 (description
16875 "@code{pybind11} is a lightweight header-only library that exposes C++
16876 types in Python and vice versa, mainly to create Python bindings of existing
16877 C++ code. Its goals and syntax are similar to the @code{Boost.Python}
16878 library: to minimize boilerplate code in traditional extension modules by
16879 inferring type information using compile-time introspection.")
16880 (license license:bsd-3)))
16881
16882 (define-public python-fasteners
16883 (package
16884 (name "python-fasteners")
16885 (version "0.14.1")
16886 (source
16887 (origin
16888 (method url-fetch)
16889 (uri (pypi-uri "fasteners" version))
16890 (sha256
16891 (base32
16892 "063y20kx01ihbz2mziapmjxi2cd0dq48jzg587xdsdp07xvpcz22"))))
16893 (build-system python-build-system)
16894 (propagated-inputs
16895 `(("python-monotonic" ,python-monotonic)
16896 ("python-six" ,python-six)
16897 ("python-testtools" ,python-testtools)))
16898 (home-page "https://github.com/harlowja/fasteners")
16899 (synopsis "Python package that provides useful locks")
16900 (description
16901 "This package provides a Python program that provides following locks:
16902
16903 @itemize
16904 @item Locking decorator
16905 @item Reader-writer locks
16906 @item Inter-process locks
16907 @item Generic helpers
16908 @end itemize\n")
16909 (properties `((python2-variant . ,(delay python2-fasteners))))
16910 (license license:asl2.0)))
16911
16912 (define-public python2-fasteners
16913 (let ((base (package-with-python2 (strip-python2-variant python-fasteners))))
16914 (package
16915 (inherit base)
16916 (propagated-inputs
16917 `(("python2-futures" ,python2-futures)
16918 ,@(package-propagated-inputs base))))))
16919
16920 (define-public python-requests-file
16921 (package
16922 (name "python-requests-file")
16923 (version "1.4.3")
16924 (source
16925 (origin
16926 (method url-fetch)
16927 (uri (pypi-uri "requests-file" version))
16928 (sha256
16929 (base32
16930 "1yp2jaxg3v86pia0q512dg3hz6s9y5vzdivsgrba1kds05ial14g"))))
16931 (build-system python-build-system)
16932 (propagated-inputs
16933 `(("python-requests" ,python-requests)
16934 ("python-six" ,python-six)))
16935 (home-page
16936 "https://github.com/dashea/requests-file")
16937 (synopsis "File transport adapter for Requests")
16938 (description
16939 "Requests-File is a transport adapter for use with the Requests Python
16940 library to allow local file system access via @code{file://} URLs.")
16941 (license license:asl2.0)))
16942
16943 (define-public python2-requests-file
16944 (package-with-python2 python-requests-file))
16945
16946 (define-public python-tldextract
16947 (package
16948 (name "python-tldextract")
16949 (version "2.2.0")
16950 (source
16951 (origin
16952 (method url-fetch)
16953 (uri (pypi-uri "tldextract" version))
16954 (sha256
16955 (base32
16956 "1d5s8v6kpsgazyahflhji1cfdcf89rv7l7z55v774bhzvcjp2y99"))))
16957 (build-system python-build-system)
16958 (native-inputs
16959 `(("python-pytest" ,python-pytest)
16960 ("python-responses" ,python-responses)))
16961 (propagated-inputs
16962 `(("python-idna" ,python-idna)
16963 ("python-requests" ,python-requests)
16964 ("python-requests-file" ,python-requests-file)))
16965 (home-page
16966 "https://github.com/john-kurkowski/tldextract")
16967 (synopsis
16968 "Separate the TLD from the registered domain and subdomains of a URL")
16969 (description
16970 "TLDExtract accurately separates the TLD from the registered domain and
16971 subdomains of a URL, using the Public Suffix List. By default, this includes
16972 the public ICANN TLDs and their exceptions. It can optionally support the
16973 Public Suffix List's private domains as well.")
16974 (license license:bsd-3)))
16975
16976 (define-public python2-tldextract
16977 (package-with-python2 python-tldextract))
16978
16979 (define-public python-pynamecheap
16980 (package
16981 (name "python-pynamecheap")
16982 (version "0.0.3")
16983 (source
16984 (origin
16985 (method url-fetch)
16986 (uri (pypi-uri "PyNamecheap" version))
16987 (sha256
16988 (base32
16989 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l"))))
16990 (build-system python-build-system)
16991 (propagated-inputs
16992 `(("python-requests" ,python-requests)))
16993 (home-page
16994 "https://github.com/Bemmu/PyNamecheap")
16995 (synopsis
16996 "Namecheap API client in Python")
16997 (description
16998 "PyNamecheap is a Namecheap API client in Python.")
16999 (license license:expat)))
17000
17001 (define-public python2-pynamecheap
17002 (package-with-python2 python-pynamecheap))
17003
17004 (define-public python-dns-lexicon
17005 (package
17006 (name "python-dns-lexicon")
17007 (version "2.4.0")
17008 (source
17009 (origin
17010 (method url-fetch)
17011 (uri (pypi-uri "dns-lexicon" version))
17012 (sha256
17013 (base32
17014 "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m"))))
17015 (build-system python-build-system)
17016 (arguments
17017 `(#:tests? #f)) ;requires internet access
17018 (propagated-inputs
17019 `(("python-future" ,python-future)
17020 ("python-pynamecheap" ,python-pynamecheap)
17021 ("python-requests" ,python-requests)
17022 ("python-tldextract" ,python-tldextract)
17023 ("python-urllib3" ,python-urllib3)))
17024 (home-page "https://github.com/AnalogJ/lexicon")
17025 (synopsis
17026 "Manipulate DNS records on various DNS providers")
17027 (description
17028 "Lexicon provides a way to manipulate DNS records on multiple DNS
17029 providers in a standardized way. It has a CLI but it can also be used as a
17030 Python library. It was designed to be used in automation, specifically with
17031 Let's Encrypt.")
17032 (license license:expat)))
17033
17034 (define-public python2-dns-lexicon
17035 (package-with-python2 python-dns-lexicon))
17036
17037 (define-public python-commandlines
17038 (package
17039 (name "python-commandlines")
17040 (version "0.4.1")
17041 (source
17042 (origin
17043 (method url-fetch)
17044 (uri (pypi-uri "commandlines" version))
17045 (sha256
17046 (base32
17047 "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6"))))
17048 (build-system python-build-system)
17049 (home-page "https://github.com/chrissimpkins/commandlines")
17050 (synopsis "Command line argument to object parsing library")
17051 (description
17052 "@code{Commandlines} is a Python library for command line application
17053 development that supports command line argument parsing, command string
17054 validation testing and application logic.")
17055 (license license:expat)))
17056
17057 ;; Make sure to upgrade python-llvmlite in (gnu packages llvm) together with
17058 ;; python-numba. They have a very unflexible relationship.
17059 (define-public python-numba
17060 (package
17061 (name "python-numba")
17062 (version "0.46.0")
17063 (source
17064 (origin
17065 (method url-fetch)
17066 (uri (pypi-uri "numba" version))
17067 (sha256
17068 (base32
17069 "1vnfzcq6fcnkmdms6114d49awvvj5181fl7z1wlha27qc2paxjy2"))))
17070 (build-system python-build-system)
17071 (arguments
17072 `(#:modules ((guix build utils)
17073 (guix build python-build-system)
17074 (ice-9 ftw)
17075 (srfi srfi-1)
17076 (srfi srfi-26))
17077 #:phases
17078 (modify-phases %standard-phases
17079 (add-after 'unpack 'disable-proprietary-features
17080 (lambda _
17081 (setenv "NUMBA_DISABLE_HSA" "1")
17082 (setenv "NUMBA_DISABLE_CUDA" "1")
17083 #t))
17084 (add-after 'unpack 'remove-failing-tests
17085 (lambda _
17086 ;; FIXME: These tests fail for unknown reasons:
17087 ;; test_non_writable_pycache, test_non_creatable_pycache, and
17088 ;; test_frozen (all in numba.tests.test_dispatcher.TestCache).
17089 (substitute* "numba/tests/test_dispatcher.py"
17090 (("def test(_non_writable_pycache)" _ m)
17091 (string-append "def guix_skip" m))
17092 (("def test(_non_creatable_pycache)" _ m)
17093 (string-append "def guix_skip" m))
17094 (("def test(_frozen)" _ m)
17095 (string-append "def guix_skip" m)))
17096
17097 ;; These tests fail because we don't run the tests from the build
17098 ;; directory: test_setup_py_distutils, test_setup_py_setuptools
17099 ;; They are in numba.tests.test_pycc.TestDistutilsSupport.
17100 (substitute* "numba/tests/test_pycc.py"
17101 (("def test(_setup_py_distutils|_setup_py_setuptools)" _ m)
17102 (string-append "def guix_skip" m)))
17103
17104 ;; These tests fail because our version of Python does not have
17105 ;; a recognizable front-end for the Numba distribution to use
17106 ;; to check against.
17107 (substitute* "numba/tests/test_entrypoints.py"
17108 (("def test(_init_entrypoint)" _ m)
17109 (string-append "def guix_skip" m)))
17110 (substitute* "numba/tests/test_jitclasses.py"
17111 (("def test(_jitclass_longlabel_not_truncated)" _ m)
17112 (string-append "def guix_skip" m)))
17113 #t))
17114 (replace 'check
17115 (lambda _
17116 (let ((cwd (getcwd)))
17117 (setenv "PYTHONPATH"
17118 (string-append cwd "/build/"
17119 (find (cut string-prefix? "lib" <>)
17120 (scandir (string-append cwd "/build")))
17121 ":"
17122 (getenv "PYTHONPATH")))
17123 ;; Something is wrong with the PYTHONPATH when running the
17124 ;; tests from the build directory, as it complains about not being
17125 ;; able to import certain modules.
17126 (with-directory-excursion "/tmp"
17127 (invoke "python3" "-m" "numba.runtests" "-v" "-m")))
17128 #t)))))
17129 (propagated-inputs
17130 `(("python-llvmlite" ,python-llvmlite)
17131 ("python-numpy" ,python-numpy)
17132 ("python-singledispatch" ,python-singledispatch)))
17133 ;; Needed for tests.
17134 (inputs
17135 `(("python-jinja2" ,python-jinja2)
17136 ("python-pygments" ,python-pygments)))
17137 (home-page "https://numba.pydata.org")
17138 (synopsis "Compile Python code using LLVM")
17139 (description "Numba gives you the power to speed up your applications with
17140 high performance functions written directly in Python. With a few
17141 annotations, array-oriented and math-heavy Python code can be just-in-time
17142 compiled to native machine instructions, similar in performance to C, C++ and
17143 Fortran, without having to switch languages or Python interpreters.
17144
17145 Numba works by generating optimized machine code using the LLVM compiler
17146 infrastructure at import time, runtime, or statically (using the included pycc
17147 tool).")
17148 (license license:bsd-3)))
17149
17150 (define-public python-numcodecs
17151 (package
17152 (name "python-numcodecs")
17153 (version "0.6.4")
17154 (source
17155 (origin
17156 (method url-fetch)
17157 (uri (pypi-uri "numcodecs" version))
17158 (sha256
17159 (base32
17160 "0kbfr8pl3x9glsypbq8hzim003f16ml1b1cvgrh4w1sdvgal6j7g"))))
17161 (build-system python-build-system)
17162 (propagated-inputs
17163 `(("python-numpy" ,python-numpy)
17164 ("python-msgpack" ,python-msgpack)))
17165 (native-inputs
17166 `(("python-pytest" ,python-pytest)
17167 ("python-setuptools-scm" ,python-setuptools-scm)))
17168 (home-page "https://github.com/zarr-developers/numcodecs")
17169 (synopsis "Buffer compression and transformation codecs")
17170 (description
17171 "This Python package provides buffer compression and transformation
17172 codecs for use in data storage and communication applications.")
17173 (license license:expat)))
17174
17175 (define-public python-asciitree
17176 (package
17177 (name "python-asciitree")
17178 (version "0.3.3")
17179 (source
17180 (origin
17181 (method url-fetch)
17182 (uri (pypi-uri "asciitree" version))
17183 (sha256
17184 (base32
17185 "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a"))))
17186 (build-system python-build-system)
17187 (home-page "https://github.com/mbr/asciitree")
17188 (synopsis "Draws ASCII trees")
17189 (description "This package draws tree structures using characters.")
17190 (license license:expat)))
17191
17192 (define-public python-zarr
17193 (package
17194 (name "python-zarr")
17195 (version "2.4.0")
17196 (source
17197 (origin
17198 (method url-fetch)
17199 (uri (pypi-uri "zarr" version))
17200 (sha256
17201 (base32
17202 "026n3sjzjv2gmwx6y72b8ij0hk42bc8zdbvfj5gdqzd4i6wj3ajk"))))
17203 (build-system python-build-system)
17204 (arguments
17205 `(#:phases
17206 (modify-phases %standard-phases
17207 (add-after 'unpack 'disable-service-tests
17208 (lambda _
17209 (setenv "ZARR_TEST_ABS" "0")
17210 (setenv "ZARR_TEST_MONGO" "0")
17211 (setenv "ZARR_TEST_REDIS" "0")
17212 #t))
17213 (replace 'check
17214 (lambda _
17215 (invoke "pytest" "-vv" "-k" "not lmdb")
17216 #t)))))
17217 (propagated-inputs
17218 `(("python-asciitree" ,python-asciitree)
17219 ("python-fasteners" ,python-fasteners)
17220 ("python-numcodecs" ,python-numcodecs)
17221 ("python-numpy" ,python-numpy)))
17222 (native-inputs
17223 `(("python-pytest" ,python-pytest)
17224 ("python-setuptools-scm" ,python-setuptools-scm)))
17225 (home-page "https://github.com/zarr-developers/zarr-python")
17226 (synopsis "Chunked, compressed, N-dimensional arrays for Python")
17227 (description
17228 "This package provides an implementation of chunked, compressed,
17229 N-dimensional arrays for Python.")
17230 (license license:expat)))
17231
17232 (define-public python-anndata
17233 (package
17234 (name "python-anndata")
17235 (version "0.7.1")
17236 (source
17237 (origin
17238 (method url-fetch)
17239 (uri (pypi-uri "anndata" version))
17240 (sha256
17241 (base32
17242 "0rnfbpr55j1a1bi2kd4mz444741hrn74kz90h5rnjr59jmpfnh09"))))
17243 (build-system python-build-system)
17244 (arguments
17245 `(#:phases
17246 (modify-phases %standard-phases
17247 (add-after 'unpack 'delete-inconvenient-tests
17248 (lambda _
17249 ;; This test depends on python-scikit-learn.
17250 (delete-file "anndata/tests/test_inplace_subset.py")
17251 #t))
17252 (delete 'check)
17253 (add-after 'install 'check
17254 (lambda* (#:key inputs outputs #:allow-other-keys)
17255 (add-installed-pythonpath inputs outputs)
17256 (invoke "pytest" "-vv"))))))
17257 (propagated-inputs
17258 `(("python-h5py" ,python-h5py)
17259 ("python-importlib-metadata" ,python-importlib-metadata)
17260 ("python-natsort" ,python-natsort)
17261 ("python-numcodecs" ,python-numcodecs)
17262 ("python-packaging" ,python-packaging)
17263 ("python-pandas" ,python-pandas)
17264 ("python-scipy" ,python-scipy)
17265 ("python-zarr" ,python-zarr)))
17266 (native-inputs
17267 `(("python-joblib" ,python-joblib)
17268 ("python-pytest" ,python-pytest)
17269 ("python-setuptools-scm" ,python-setuptools-scm)))
17270 (home-page "https://github.com/theislab/anndata")
17271 (synopsis "Annotated data for data analysis pipelines")
17272 (description "Anndata is a package for simple (functional) high-level APIs
17273 for data analysis pipelines. In this context, it provides an efficient,
17274 scalable way of keeping track of data together with learned annotations and
17275 reduces the code overhead typically encountered when using a mostly
17276 object-oriented library such as @code{scikit-learn}.")
17277 (license license:bsd-3)))
17278
17279 (define-public python-dill
17280 (package
17281 (name "python-dill")
17282 (version "0.3.1.1")
17283 (source
17284 (origin
17285 (method url-fetch)
17286 (uri (pypi-uri "dill" version))
17287 (sha256
17288 (base32 "1704g8z70d210ksgbccs2v545v9w0wc6lx15m296alb7jf0yzn22"))))
17289 (build-system python-build-system)
17290 (arguments
17291 `(#:phases
17292 (modify-phases %standard-phases
17293 (replace 'check
17294 (lambda _
17295 (with-directory-excursion "/tmp"
17296 (invoke "nosetests" "-v"))
17297 #t)))))
17298 (native-inputs
17299 `(("python-nose" ,python-nose)))
17300 (home-page "https://pypi.org/project/dill/")
17301 (synopsis "Serialize all of Python")
17302 (description "Dill extends Python's @code{pickle} module for serializing
17303 and de-serializing Python objects to the majority of the built-in Python
17304 types. Dill provides the user the same interface as the @code{pickle} module,
17305 and also includes some additional features. In addition to pickling Python
17306 objects, @code{dill} provides the ability to save the state of an interpreter
17307 session in a single command. Hence, it would be feasible to save a
17308 interpreter session, close the interpreter, ship the pickled file to another
17309 computer, open a new interpreter, unpickle the session and thus continue from
17310 the saved state of the original interpreter session.")
17311 (license license:bsd-3)))
17312
17313 (define-public python-multiprocess
17314 (package
17315 (name "python-multiprocess")
17316 (version "0.70.9")
17317 (source
17318 (origin
17319 (method url-fetch)
17320 (uri (pypi-uri "multiprocess" version))
17321 (sha256
17322 (base32
17323 "1r882nvd44xqwbrclwqx5rhs80l6809rcvpc7pkpgnij06cvvmcz"))))
17324 (build-system python-build-system)
17325 (arguments
17326 `(#:phases
17327 (modify-phases %standard-phases
17328 (add-after 'unpack 'disable-broken-tests
17329 (lambda _
17330 ;; This test is broken as there is no keyboard interrupt.
17331 (substitute* "py3.7/multiprocess/tests/__init__.py"
17332 (("^(.*)def test_wait_result"
17333 line indent)
17334 (string-append indent
17335 "@unittest.skip(\"Disabled by Guix\")\n"
17336 line)))
17337 #t))
17338 ;; Tests must be run after installation.
17339 (delete 'check)
17340 (add-after 'install 'check
17341 (lambda* (#:key inputs outputs #:allow-other-keys)
17342 (add-installed-pythonpath inputs outputs)
17343 (invoke "python" "-m" "multiprocess.tests")
17344 #t)))))
17345 (propagated-inputs
17346 `(("python-dill" ,python-dill)))
17347 (home-page "https://pypi.org/project/multiprocess/")
17348 (synopsis "Multiprocessing and multithreading in Python")
17349 (description
17350 "This package is a fork of the multiprocessing Python package, a package
17351 which supports the spawning of processes using the API of the standard
17352 library's @code{threading} module.")
17353 (license license:bsd-3)))
17354
17355 (define-public python-toolz
17356 (package
17357 (name "python-toolz")
17358 (version "0.9.0")
17359 (source
17360 (origin
17361 (method url-fetch)
17362 (uri (pypi-uri "toolz" version))
17363 (sha256
17364 (base32
17365 "1j9i7fdjnx9dz35fdj5gvgxx6585ja9sxgaiv65if77nlxz0m7wj"))))
17366 (build-system python-build-system)
17367 ;; FIXME: tests cannot be computed: "Can't perform this operation for
17368 ;; unregistered loader type"
17369 (arguments '(#:tests? #f))
17370 (home-page "https://github.com/pytoolz/toolz/")
17371 (synopsis "List processing tools and functional utilities")
17372 (description
17373 "This package provides a set of utility functions for iterators,
17374 functions, and dictionaries.")
17375 (license license:bsd-3)))
17376
17377 (define-public python2-toolz
17378 (package-with-python2 python-toolz))
17379
17380 (define-public python-cytoolz
17381 (package
17382 (name "python-cytoolz")
17383 (version "0.9.0.1")
17384 (source
17385 (origin
17386 (method url-fetch)
17387 (uri (pypi-uri "cytoolz" version))
17388 (sha256
17389 (base32
17390 "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
17391 (build-system python-build-system)
17392 ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
17393 ;; 'exceptions'"
17394 (arguments '(#:tests? #f))
17395 (propagated-inputs
17396 `(("python-toolz" ,python-toolz)))
17397 (native-inputs
17398 `(("python-cython" ,python-cython)))
17399 (home-page "https://github.com/pytoolz/cytoolz")
17400 (synopsis "High performance functional utilities")
17401 (description
17402 "The cytoolz package implements the same API as provided by toolz. The
17403 main differences are that @code{cytoolz} is faster and cytoolz offers a C API
17404 that is accessible to other projects developed in Cython.")
17405 (license license:bsd-3)))
17406
17407 (define-public python-sortedcontainers
17408 (package
17409 (name "python-sortedcontainers")
17410 (version "2.1.0")
17411 (source
17412 (origin
17413 (method url-fetch)
17414 (uri (pypi-uri "sortedcontainers" version))
17415 (sha256
17416 (base32
17417 "0fm0w5id2yhqld95hg2m636vjgkz377rvgdfqaxc25vbylr9lklp"))))
17418 (build-system python-build-system)
17419 (arguments
17420 ;; FIXME: Tests require many extra dependencies, and would introduce
17421 ;; a circular dependency on hypothesis, which uses this package.
17422 '(#:tests? #f))
17423 (propagated-inputs
17424 `(("python-appdirs" ,python-appdirs)
17425 ("python-distlib" ,python-distlib)
17426 ("python-filelock" ,python-filelock)
17427 ("python-six" ,python-six-bootstrap)))
17428 (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
17429 (synopsis "Sorted List, Sorted Dict, Sorted Set")
17430 (description
17431 "This package provides a sorted collections library, written in
17432 pure-Python.")
17433 (license license:asl2.0)))
17434
17435 (define-public python2-sortedcontainers
17436 (package-with-python2 python-sortedcontainers))
17437
17438 (define-public python-cloudpickle
17439 (package
17440 (name "python-cloudpickle")
17441 (version "1.3.0")
17442 (source
17443 (origin
17444 (method url-fetch)
17445 (uri (pypi-uri "cloudpickle" version))
17446 (sha256
17447 (base32
17448 "0lx7gy9clp427qwcm7b23zdsldpr03gy3vxxhyi8fpbhwz859brq"))))
17449 (build-system python-build-system)
17450 (arguments
17451 '(#:phases (modify-phases %standard-phases
17452 (add-before 'check 'do-not-override-PYTHONPATH
17453 (lambda _
17454 ;; Append to PYTHONPATH instead of overriding it so
17455 ;; that dependencies from Guix can be found.
17456 (substitute* "tests/testutils.py"
17457 (("env\\['PYTHONPATH'\\] = pythonpath")
17458 "env['PYTHONPATH'] += os.pathsep + pythonpath"))
17459 #t))
17460 (replace 'check
17461 (lambda* (#:key tests? #:allow-other-keys)
17462 (if tests?
17463 (invoke "pytest" "-s" "-vv")
17464 (format #t "test suite not run~%"))
17465 #t)))))
17466 (native-inputs
17467 `(;; For tests.
17468 ("python-psutil" ,python-psutil)
17469 ("python-pytest" ,python-pytest)
17470 ("python-tornado" ,python-tornado)))
17471 (home-page "https://github.com/cloudpipe/cloudpickle")
17472 (synopsis "Extended pickling support for Python objects")
17473 (description
17474 "Cloudpickle makes it possible to serialize Python constructs not
17475 supported by the default pickle module from the Python standard library. It
17476 is especially useful for cluster computing where Python expressions are
17477 shipped over the network to execute on remote hosts, possibly close to the
17478 data.")
17479 (properties `((python2-variant . ,(delay python2-cloudpickle))))
17480 (license license:bsd-3)))
17481
17482 (define-public python2-cloudpickle
17483 (let ((base (package-with-python2 (strip-python2-variant python-cloudpickle))))
17484 (package
17485 (inherit base)
17486 (native-inputs
17487 `(("python-mock" ,python2-mock)
17488 ,@(package-native-inputs base)))
17489 (propagated-inputs
17490 `(("python-futures" ,python2-futures)
17491 ,@(package-propagated-inputs base))))))
17492
17493 (define-public python-locket
17494 (package
17495 (name "python-locket")
17496 (version "0.2.0")
17497 (source
17498 (origin
17499 (method url-fetch)
17500 (uri (pypi-uri "locket" version))
17501 (sha256
17502 (base32
17503 "1d4z2zngrpqkrfhnd4yhysh66kjn4mblys2l06sh5dix2p0n7vhz"))))
17504 (build-system python-build-system)
17505 (home-page "https://github.com/mwilliamson/locket.py")
17506 (synopsis "File-based locks for Python")
17507 (description
17508 "Locket implements a lock that can be used by multiple processes provided
17509 they use the same path.")
17510 (license license:bsd-2)))
17511
17512 (define-public python2-locket
17513 (package-with-python2 python-locket))
17514
17515 (define-public python-blosc
17516 (package
17517 (name "python-blosc")
17518 (version "1.5.1")
17519 (source
17520 (origin
17521 (method url-fetch)
17522 (uri (pypi-uri "blosc" version))
17523 (sha256
17524 (base32
17525 "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
17526 (build-system python-build-system)
17527 ;; FIXME: all tests pass, but then this error is printed:
17528 ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
17529 (arguments '(#:tests? #f))
17530 (propagated-inputs
17531 `(("python-numpy" ,python-numpy)))
17532 (home-page "https://github.com/blosc/python-blosc")
17533 (synopsis "Python wrapper for the Blosc data compressor library")
17534 (description "Blosc is a high performance compressor optimized for binary
17535 data. It has been designed to transmit data to the processor cache faster
17536 than the traditional, non-compressed, direct memory fetch approach via a
17537 @code{memcpy()} system call.
17538
17539 Blosc works well for compressing numerical arrays that contains data with
17540 relatively low entropy, like sparse data, time series, grids with
17541 regular-spaced values, etc.
17542
17543 This Python package wraps the Blosc library.")
17544 (license license:bsd-3)))
17545
17546 (define-public python2-blosc
17547 (package-with-python2 python-blosc))
17548
17549 (define-public python-partd
17550 (package
17551 (name "python-partd")
17552 (version "0.3.9")
17553 (source
17554 (origin
17555 (method url-fetch)
17556 (uri (pypi-uri "partd" version))
17557 (sha256
17558 (base32
17559 "0sz6rwlnl4fqq220pyz863cnv0gjdxl4m7lscl71ishl5z0xkmhz"))))
17560 (build-system python-build-system)
17561 (propagated-inputs
17562 `(("python-blosc" ,python-blosc)
17563 ("python-locket" ,python-locket)
17564 ("python-numpy" ,python-numpy)
17565 ("python-pandas" ,python-pandas)
17566 ("python-pyzmq" ,python-pyzmq)
17567 ("python-toolz" ,python-toolz)))
17568 (home-page "https://github.com/dask/partd/")
17569 (synopsis "Appendable key-value storage")
17570 (description "Partd stores key-value pairs. Values are raw bytes. We
17571 append on old values. Partd excels at shuffling operations.")
17572 (license license:bsd-3)))
17573
17574 (define-public python2-partd
17575 (package-with-python2 python-partd))
17576
17577 (define-public python-fsspec
17578 (package
17579 (name "python-fsspec")
17580 (version "0.6.1")
17581 (source
17582 (origin
17583 (method url-fetch)
17584 (uri (pypi-uri "fsspec" version))
17585 (sha256
17586 (base32
17587 "1g9ba8v04s1nrh7pvzfm2md7ivl2mrz3hcq3y9d1a44gd62h17zj"))))
17588 (build-system python-build-system)
17589 (arguments '(#:tests? #f)) ; there are none
17590 (home-page "https://github.com/intake/filesystem_spec")
17591 (synopsis "File-system specification")
17592 (description "The purpose of this package is to produce a template or
17593 specification for a file-system interface, that specific implementations
17594 should follow, so that applications making use of them can rely on a common
17595 behavior and not have to worry about the specific internal implementation
17596 decisions with any given backend.")
17597 (license license:bsd-3)))
17598
17599 (define-public python-dask
17600 (package
17601 (name "python-dask")
17602 (version "2.14.0")
17603 (source
17604 (origin
17605 (method url-fetch)
17606 (uri (pypi-uri "dask" version))
17607 (sha256
17608 (base32 "031j0j26s0675v0isyps2dphm03330n7dy8ifdy70jgvf78d119q"))))
17609 (build-system python-build-system)
17610 (arguments
17611 `(#:phases
17612 (modify-phases %standard-phases
17613 (add-after 'unpack 'disable-broken-tests
17614 (lambda _
17615 ;; This test is marked as xfail when pytest-xdist is used.
17616 (substitute* "dask/tests/test_threaded.py"
17617 (("def test_interrupt\\(\\)" m)
17618 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17619 m)))
17620 ;; This one fails with a type error:
17621 ;; TypeError: Already tz-aware, use tz_convert to convert.
17622 (substitute* "dask/dataframe/tests/test_shuffle.py"
17623 (("def test_set_index_timestamp\\(\\)" m)
17624 (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
17625 m)))
17626 #t))
17627 (replace 'check
17628 (lambda _ (invoke "pytest" "-vv"))))))
17629 (propagated-inputs
17630 `(("python-cloudpickle" ,python-cloudpickle)
17631 ("python-fsspec" ,python-fsspec)
17632 ("python-numpy" ,python-numpy)
17633 ("python-packaging" ,python-packaging)
17634 ("python-pandas" ,python-pandas)
17635 ("python-partd" ,python-partd)
17636 ("python-toolz" ,python-toolz)
17637 ("python-pyyaml" ,python-pyyaml)))
17638 (native-inputs
17639 `(("python-pytest" ,python-pytest)
17640 ("python-pytest-runner" ,python-pytest-runner)))
17641 (home-page "https://github.com/dask/dask/")
17642 (synopsis "Parallel computing with task scheduling")
17643 (description
17644 "Dask is a flexible parallel computing library for analytics. It
17645 consists of two components: dynamic task scheduling optimized for computation,
17646 and large data collections like parallel arrays, dataframes, and lists that
17647 extend common interfaces like NumPy, Pandas, or Python iterators to
17648 larger-than-memory or distributed environments. These parallel collections
17649 run on top of the dynamic task schedulers. ")
17650 (license license:bsd-3)))
17651
17652 (define-public python-ilinkedlist
17653 (package
17654 (name "python-ilinkedlist")
17655 (version "0.4.0")
17656 (source
17657 (origin
17658 (method url-fetch)
17659 (uri (pypi-uri "ilinkedlist" version))
17660 (sha256
17661 (base32
17662 "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l"))))
17663 (build-system python-build-system)
17664 (native-inputs `(("python-pytest" ,python-pytest)))
17665 (inputs `(("python" ,python)))
17666 (home-page "https://github.com/luther9/ilinkedlist-py")
17667 (synopsis "Immutable linked list library")
17668 (description
17669 "This is a implementation of immutable linked lists for Python. It
17670 contains @code{nil} (the empty linked list) and a @code{Pair} class for nodes.
17671 Since a linked list is treated as immutable, it is hashable, and its length
17672 can be retrieved in constant time. Some of the terminology is inspired by
17673 LISP. It is possible to create an improper list by creating a @code{Pair}
17674 with a non-list @code{cdr}.")
17675 (license license:gpl3+)))
17676
17677 (define-public python-readlike
17678 (package
17679 (name "python-readlike")
17680 (version "0.1.3")
17681 (source
17682 (origin
17683 (method url-fetch)
17684 (uri (pypi-uri "readlike" version))
17685 (sha256
17686 (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4"))))
17687 (build-system python-build-system)
17688 (home-page "https://github.com/jangler/readlike")
17689 (synopsis "GNU Readline-like line editing module")
17690 (description
17691 "This Python module provides line editing functions similar to the default
17692 Emacs-style ones of GNU Readline. Unlike the Python standard library's
17693 @code{readline} package, this one allows access to those capabilties in settings
17694 outside of a standard command-line interface. It is especially well-suited to
17695 interfacing with Urwid, due to a shared syntax for describing key inputs.
17696
17697 Currently, all stateless Readline commands are implemented. Yanking and history
17698 are not supported.")
17699 (license license:expat)))
17700
17701 (define-public python2-readlike
17702 (package-with-python2 python-readlike))
17703
17704 (define-public python-reparser
17705 (package
17706 (name "python-reparser")
17707 (version "1.4.3")
17708 (source
17709 (origin
17710 (method url-fetch)
17711 (uri (pypi-uri "ReParser" version))
17712 (sha256
17713 (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776"))))
17714 (build-system python-build-system)
17715 (home-page "https://github.com/xmikos/reparser")
17716 (synopsis "Simple lexer/parser for inline markup based on regular expressions")
17717 (description
17718 "This Python library provides a simple lexer/parser for inline markup based
17719 on regular expressions.")
17720 (license license:expat)))
17721
17722 (define-public python2-reparser
17723 (let ((reparser (package-with-python2
17724 (strip-python2-variant python-reparser))))
17725 (package (inherit reparser)
17726 (propagated-inputs
17727 `(("python2-enum34" ,python2-enum34)
17728 ,@(package-propagated-inputs reparser))))))
17729
17730 (define-public python-retrying
17731 (package
17732 (name "python-retrying")
17733 (version "1.3.3")
17734 (source
17735 (origin
17736 (method git-fetch)
17737 (uri (git-reference
17738 (url "https://github.com/rholder/retrying.git")
17739 (commit (string-append "v" version))))
17740 (file-name (git-file-name name version))
17741 (sha256
17742 (base32
17743 "1kqipkbdaw5s1xg0gi29awm03vp1x8dz24pjidgxagvkvrjpzhi7"))))
17744 (build-system python-build-system)
17745 (propagated-inputs
17746 `(("python-six" ,python-six)))
17747 (home-page "https://github.com/rholder/retrying")
17748 (synopsis "Library for adding retry behavior")
17749 (description "Retrying is a general-purpose retrying library to simplify
17750 the task of adding retry behavior to just about anything.
17751
17752 Features:
17753
17754 @itemize
17755 @item Generic Decorator API.
17756 @item Specify stop condition (i.e. limit by number of attempts).
17757 @item Specify wait condition (i.e. exponential backoff sleeping between attempts).
17758 @item Customize retrying on Exceptions.
17759 @item Customize retrying on expected returned result.
17760 @end itemize")
17761 (license license:asl2.0)))
17762
17763 (define-public python-precis-i18n
17764 (package
17765 (name "python-precis-i18n")
17766 (version "1.0.0")
17767 (source
17768 (origin
17769 (method url-fetch)
17770 (uri (pypi-uri "precis_i18n" version))
17771 (sha256
17772 (base32
17773 "0gjhvwd8aifx94rl1ag08vlmndyx2q3fkyqb0c4i46x3p2bc2yi2"))))
17774 (build-system python-build-system)
17775 (home-page "https://github.com/byllyfish/precis_i18n")
17776 (synopsis "Implementation of the PRECIS framework")
17777 (description
17778 "This module implements the PRECIS Framework as described in RFC 8264,
17779 RFC 8265 and RFC 8266.")
17780 (license license:expat)))
17781
17782 (define-public python-absl-py
17783 (package
17784 (name "python-absl-py")
17785 (version "0.6.1")
17786 (source
17787 (origin
17788 (method url-fetch)
17789 (uri (pypi-uri "absl-py" version))
17790 (sha256
17791 (base32
17792 "1mp9lk0b2qa37b7y6ak4lvf6ifw2ylyy6bkf9ik77md3j4xrwlc7"))))
17793 (build-system python-build-system)
17794 (propagated-inputs
17795 `(("python-six" ,python-six)))
17796 (home-page "https://github.com/abseil/abseil-py")
17797 (synopsis "Abseil Python common libraries")
17798 (description
17799 "This package provides the Abseil Python Common Libraries, a collection
17800 of Python libraries for building Python applications.")
17801 (license license:asl2.0)))
17802
17803 (define-public python-astor
17804 (package
17805 (name "python-astor")
17806 (version "0.7.1")
17807 (source
17808 (origin
17809 (method url-fetch)
17810 (uri (pypi-uri "astor" version))
17811 (sha256
17812 (base32
17813 "13gv6f2xz9i564byp21gcpc0l3w4cs23k1wbcam8kky2ls3hvhwm"))))
17814 (build-system python-build-system)
17815 ;; FIXME: There are two errors and two test failures.
17816 (arguments `(#:tests? #f))
17817 (home-page "https://github.com/berkerpeksag/astor")
17818 (synopsis "Read and write Python ASTs")
17819 (description "Astor is designed to allow easy manipulation of Python
17820 source via the Abstract Syntax Tree.")
17821 (license license:bsd-3)))
17822
17823 (define-public python2-astor
17824 (package-with-python2 python-astor))
17825
17826 (define-public python-astunparse
17827 (package
17828 (name "python-astunparse")
17829 (version "1.6.2")
17830 (source
17831 (origin
17832 (method url-fetch)
17833 (uri (pypi-uri "astunparse" version))
17834 (sha256
17835 (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
17836 (build-system python-build-system)
17837 (arguments '(#:tests? #f)) ; there are none
17838 (propagated-inputs
17839 `(("python-six" ,python-six)
17840 ("python-wheel" ,python-wheel)))
17841 (home-page "https://github.com/simonpercivall/astunparse")
17842 (synopsis "AST unparser for Python")
17843 (description "This package provides an AST unparser for Python. It is a
17844 factored out version of @code{unparse} found in the Python source
17845 distribution.")
17846 (license license:bsd-3)))
17847
17848 (define-public python-gast
17849 (package
17850 (name "python-gast")
17851 (version "0.3.3")
17852 (source
17853 (origin
17854 (method url-fetch)
17855 (uri (pypi-uri "gast" version))
17856 (sha256
17857 (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq"))))
17858 (build-system python-build-system)
17859 (propagated-inputs
17860 `(("python-astunparse" ,python-astunparse)))
17861 (home-page "https://pypi.org/project/gast/")
17862 (synopsis "Generic Python AST that abstracts the underlying Python version")
17863 (description
17864 "GAST provides a compatibility layer between the AST of various Python
17865 versions, as produced by @code{ast.parse} from the standard @code{ast}
17866 module.")
17867 (license license:bsd-3)))
17868
17869 (define-public python-wikidata
17870 (package
17871 (name "python-wikidata")
17872 (version "0.6.1")
17873 (source
17874 (origin
17875 (method url-fetch)
17876 (uri (pypi-uri "Wikidata" version))
17877 (sha256
17878 (base32
17879 "08nlnydddfp1jj0cdmshvld1irzngbp3dij928wqsg9ziklm6mw9"))))
17880 (build-system python-build-system)
17881 (propagated-inputs
17882 `(("python-babel" ,python-babel)))
17883 (home-page "https://github.com/dahlia/wikidata")
17884 (synopsis "Wikidata client library")
17885 (description
17886 "This package provides a Python interface to
17887 @url{https://www.wikidata.org/, Wikidata}.")
17888 (properties '((upstream-name . "Wikidata")))
17889 (license license:gpl3+)))
17890
17891 (define-public python-doctest-ignore-unicode
17892 (package
17893 (name "python-doctest-ignore-unicode")
17894 (version "0.1.2")
17895 (source
17896 (origin
17897 (method url-fetch)
17898 (uri (pypi-uri "doctest-ignore-unicode" version))
17899 (sha256
17900 (base32
17901 "1m9aa4qnyj21lbq4sbvmv1vcz7zksss4rz37ddf2hxv4hk8b547w"))))
17902 (build-system python-build-system)
17903 (native-inputs
17904 `(("python-nose" ,python-nose)))
17905 (home-page "https://github.com/gnublade/doctest-ignore-unicode")
17906 (synopsis "Ignore Unicode literal prefixes in doctests")
17907 (description
17908 "This package adds support for a flag to ignore Unicode literal prefixes
17909 in doctests.")
17910 (license license:asl2.0)))
17911
17912 (define-public python-attr
17913 (package
17914 (name "python-attr")
17915 (version "0.3.1")
17916 (source
17917 (origin
17918 (method url-fetch)
17919 (uri (pypi-uri "attr" version))
17920 (sha256
17921 (base32
17922 "0pbpskvxp5hzdvcaf766ljwpckshir8sf7z6jqji6zyib20594ch"))))
17923 (build-system python-build-system)
17924 (home-page "https://github.com/denis-ryzhkov/attr")
17925 (synopsis "Decorator for attributes of target function or class")
17926 (description "Simple decorator to set attributes of target function or
17927 class in a @acronym{DRY, Don't Repeat Yourself} way.")
17928 (license license:expat)))
17929
17930 (define-public python-construct
17931 (package
17932 (name "python-construct")
17933 (version "2.10.56")
17934 (source
17935 (origin
17936 (method url-fetch)
17937 (uri (pypi-uri "construct" version))
17938 (sha256
17939 (base32
17940 "0q86jjzsvy835h3c8pjj4619vbp7ihfg8njmyw86ym4qrpni7flp"))))
17941 (build-system python-build-system)
17942 (arguments
17943 `(#:tests? #f)) ; No tests exist.
17944 (propagated-inputs
17945 `(("python-extras" ,python-extras)
17946 ("python-arrow" ,python-arrow)
17947 ("python-numpy" ,python-numpy)
17948 ("python-ruamel.yaml" ,python-ruamel.yaml)))
17949 (home-page "https://construct.readthedocs.io")
17950 (synopsis "Declarative and symmetrical parser and builder for binary data")
17951 (description
17952 "This package provides both simple, atomic constructs (such as
17953 integers of various sizes), as well as composite ones which allow you
17954 form hierarchical and sequential structures of increasing complexity.
17955 It features bit and byte granularity, easy debugging and testing, an
17956 easy-to-extend subclass system, and lots of primitive constructs to
17957 make your work easier.")
17958 (license license:expat)))
17959
17960 (define-public python-humanize
17961 (package
17962 (name "python-humanize")
17963 (version "0.5.1")
17964 (source
17965 (origin
17966 (method url-fetch)
17967 (uri (pypi-uri "humanize" version))
17968 (sha256
17969 (base32
17970 "06dvhm3k8lf2rayn1gxbd46y0fy1db26m3h9vrq7rb1ib08mfgx4"))))
17971 (arguments
17972 '(#:tests? #f)) ; tests not in pypi archive
17973 (build-system python-build-system)
17974 (home-page "https://github.com/jmoiron/humanize")
17975 (synopsis "Print numerical information in a human-readable form")
17976 (description "This package provides a Python module that displays numbers
17977 and dates in \"human readable\" forms. For example, it would display
17978 \"12345591313\" as \"12.3 billion\".")
17979 (license license:expat)))
17980
17981 (define-public python-txaio
17982 (package
17983 (name "python-txaio")
17984 (version "18.8.1")
17985 (source
17986 (origin
17987 (method url-fetch)
17988 (uri (pypi-uri "txaio" version))
17989 (sha256
17990 (base32
17991 "1zmpdph6zddgrnkkcykh6qk5s46l7s5mzfqrh82m4b5iffn61qv7"))))
17992 (build-system python-build-system)
17993 (propagated-inputs
17994 `(("python-twisted" ,python-twisted)
17995 ("python-six" ,python-six)))
17996 (home-page "https://github.com/crossbario/txaio")
17997 (synopsis "Compatibility layer between Python asyncio and Twisted")
17998 (description "Txaio provides a compatibility layer between the Python
17999 @code{asyncio} module and @code{Twisted}.")
18000 (license license:expat)))
18001
18002 (define-public python-toolshed
18003 (package
18004 (name "python-toolshed")
18005 (version "0.4.6")
18006 (source
18007 (origin
18008 (method url-fetch)
18009 (uri (pypi-uri "toolshed" version))
18010 (sha256
18011 (base32
18012 "14zvz51gzf9i1i3d1sj363ba4rksl6lcf4lz1arl8hpqgcbir8r3"))))
18013 (build-system python-build-system)
18014 (native-inputs
18015 `(("python-nose" ,python-nose)))
18016 (home-page "https://github.com/brentp/toolshed/")
18017 (synopsis "Collection of modules and functions for working with data")
18018 (description "This is a collection of well-tested, simple modules and
18019 functions that aim to reduce boilerplate when working with data.")
18020 (license license:bsd-2)))
18021
18022 (define-public python-annoy
18023 (package
18024 (name "python-annoy")
18025 (version "1.15.1")
18026 (source
18027 (origin
18028 (method url-fetch)
18029 (uri (pypi-uri "annoy" version))
18030 (sha256
18031 (base32
18032 "1rxn6snn0r32r07g45hdjhh8aa1xzx6fjrm8g62d8vzp46z7rzrp"))))
18033 (build-system python-build-system)
18034 (native-inputs
18035 `(("python-nose" ,python-nose)))
18036 (home-page "https://github.com/spotify/annoy/")
18037 (synopsis "Approximate nearest neighbors library")
18038 (description
18039 "Annoy is a C++ library with Python bindings to search for points in
18040 space that are close to a given query point. It also creates large read-only
18041 file-based data structures that are @code{mmap}ped into memory so that many
18042 processes may share the same data.")
18043 (license license:asl2.0)))
18044
18045 (define-public python-pylzma
18046 (package
18047 (name "python-pylzma")
18048 (version "0.5.0")
18049 (source
18050 (origin
18051 (method url-fetch)
18052 (uri (pypi-uri "pylzma" version))
18053 (sha256
18054 (base32
18055 "074anvhyjgsv2iby2ql1ixfvjgmhnvcwjbdz8gk70xzkzcm1fx5q"))))
18056 (build-system python-build-system)
18057 (home-page "http://www.joachim-bauch.de/projects/pylzma/")
18058 (synopsis "Python bindings for the LZMA library by Igor Pavlov.")
18059 (description "This package provides Python bindings for the LZMA library
18060 by Igor Pavlov.")
18061 (license license:lgpl2.1+)))
18062
18063 (define-public python2-pylzma
18064 (package-with-python2 python-pylzma))
18065
18066 (define-public python2-zeroconf
18067 (package
18068 (name "python2-zeroconf")
18069
18070 ;; This is the last version that supports Python 2.x.
18071 (version "0.19.1")
18072 (source
18073 (origin
18074 (method url-fetch)
18075 (uri (pypi-uri "zeroconf" version))
18076 (sha256
18077 (base32
18078 "0ykzg730n915qbrq9bn5pn06bv6rb5zawal4sqjyfnjjm66snkj3"))))
18079 (build-system python-build-system)
18080 (arguments
18081 `(#:python ,python-2
18082 #:phases
18083 (modify-phases %standard-phases
18084 (add-after 'unpack 'patch-requires
18085 (lambda* (#:key inputs #:allow-other-keys)
18086 (substitute* "setup.py"
18087 (("enum-compat")
18088 "enum34"))
18089 #t)))))
18090 (native-inputs
18091 `(("python2-six" ,python2-six)
18092 ("python2-enum32" ,python2-enum34)
18093 ("python2-netifaces" ,python2-netifaces)
18094 ("python2-typing" ,python2-typing)))
18095 (home-page "https://github.com/jstasiak/python-zeroconf")
18096 (synopsis "Pure Python mDNS service discovery")
18097 (description
18098 "Pure Python multicast DNS (mDNS) service discovery library (Bonjour/Avahi
18099 compatible).")
18100 (license license:lgpl2.1+)))
18101
18102 (define-public python-bsddb3
18103 (package
18104 (name "python-bsddb3")
18105 (version "6.2.6")
18106 (source
18107 (origin
18108 (method url-fetch)
18109 (uri (pypi-uri "bsddb3" version))
18110 (sha256
18111 (base32
18112 "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
18113 (build-system python-build-system)
18114 (inputs
18115 `(("bdb" ,bdb)))
18116 (arguments
18117 '(#:phases
18118 (modify-phases %standard-phases
18119 (add-after 'unpack 'configure-locations
18120 (lambda* (#:key inputs #:allow-other-keys)
18121 (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
18122 (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
18123 #t))
18124 (replace 'check
18125 (lambda _
18126 (invoke "python3" "test3.py" "-v"))))))
18127 (home-page "https://www.jcea.es/programacion/pybsddb.htm")
18128 (synopsis "Python bindings for Oracle Berkeley DB")
18129 (description
18130 "This module provides a nearly complete wrapping of the Oracle/Sleepycat
18131 C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
18132 Transaction objects, and each of these is exposed as a Python type in the
18133 bsddb3.db module. The database objects can use various access methods: btree,
18134 hash, recno, and queue. Complete support of Berkeley DB distributed
18135 transactions. Complete support for Berkeley DB Replication Manager.
18136 Complete support for Berkeley DB Base Replication. Support for RPC.")
18137 (license license:bsd-3)))
18138
18139 (define-public python-dbfread
18140 (package
18141 (name "python-dbfread")
18142 (version "2.0.7")
18143 (source (origin
18144 (method url-fetch)
18145 (uri (pypi-uri "dbfread" version))
18146 (sha256
18147 (base32
18148 "0gdpwdzf1fngsi6jrdyj4qdf6cr7gnnr3zp80dpkzbgz0spskj07"))))
18149 (build-system python-build-system)
18150 (native-inputs
18151 `(("python-pytest" ,python-pytest)))
18152 (home-page "https://dbfread.readthedocs.io")
18153 (synopsis "Read DBF Files with Python")
18154 (description
18155 "This library reads DBF files and returns the data as native Python data
18156 types for further processing. It is primarily intended for batch jobs and
18157 one-off scripts.")
18158 (license license:expat)))
18159
18160 (define-public python-cached-property
18161 (package
18162 (name "python-cached-property")
18163 (version "1.5.1")
18164 (source
18165 (origin
18166 (method url-fetch)
18167 (uri (pypi-uri "cached-property" version))
18168 (sha256
18169 (base32
18170 "010m1bl380l2r3vwq24r5v14l6gwvgm9v0mqqjkjss552jgsa5wj"))))
18171 (build-system python-build-system)
18172 (arguments
18173 `(#:phases
18174 (modify-phases %standard-phases
18175 ;; https://github.com/pydanny/cached-property/issues/131
18176 ;; recent versions of freezegun break one test
18177 (add-after 'unpack 'disable-broken-test
18178 (lambda _
18179 (substitute* "tests/test_cached_property.py"
18180 (("def test_threads_ttl_expiry\\(self\\)" m)
18181 (string-append "@unittest.skip(\"Disabled by Guix\")\n"
18182 " " m)))
18183 #t)))))
18184 (native-inputs
18185 `(("python-freezegun" ,python-freezegun)))
18186 (home-page
18187 "https://github.com/pydanny/cached-property")
18188 (synopsis
18189 "Decorator for caching properties in classes")
18190 (description
18191 "This package provides a decorator which makes caching
18192 time-or-computationally-expensive properties quick and easy and works in Python
18193 2 or 3.")
18194 (license license:bsd-3)))
18195
18196 (define-public python-folium
18197 (package
18198 (name "python-folium")
18199 (version "0.10.1")
18200 (source
18201 (origin
18202 (method url-fetch)
18203 (uri (pypi-uri "folium" version))
18204 (sha256
18205 (base32
18206 "0gcc267wxwxr57ry86pqpbiyfvl0g48hfvgy0f2mz9s58g87kgzd"))))
18207 (build-system python-build-system)
18208 (propagated-inputs
18209 `(("python-branca" ,python-branca)
18210 ("python-jinja2" ,python-jinja2)
18211 ("python-numpy" ,python-numpy)
18212 ("python-requests" ,python-requests)))
18213 (native-inputs
18214 `(("python-pytest" ,python-pytest)))
18215 (home-page "https://github.com/python-visualization/folium")
18216 (synopsis "Make beautiful maps with Leaflet.js & Python")
18217 (description "@code{folium} makes it easy to visualize data that’s been
18218 manipulated in Python on an interactive leaflet map. It enables both the
18219 binding of data to a map for @code{choropleth} visualizations as well as
18220 passing rich vector/raster/HTML visualizations as markers on the map.
18221
18222 The library has a number of built-in tilesets from OpenStreetMap, Mapbox, and
18223 Stamen, and supports custom tilesets with Mapbox or Cloudmade API keys. It
18224 supports Image, Video, GeoJSON and TopoJSON overlays.")
18225 (license license:expat)))
18226
18227 (define-public jube
18228 (package
18229 ;; This is a command-line tool, so no "python-" prefix.
18230 (name "jube")
18231 (version "2.2.2")
18232 (source (origin
18233 (method url-fetch)
18234 (uri (string-append
18235 "http://apps.fz-juelich.de/jsc/jube/jube2/download.php?version="
18236 version))
18237 (sha256
18238 (base32
18239 "0xq4k1q63s1p6swgyp61vahlrd1fqmgbm0gm5kpj8ikwy0yc0nqk"))
18240 (file-name (string-append "jube-" version ".tar.gz"))))
18241 (build-system python-build-system)
18242 (home-page "https://apps.fz-juelich.de/jsc/jube/jube2/docu/index.html")
18243 (synopsis "Benchmarking environment")
18244 (description
18245 "JUBE helps perform and analyze benchmarks in a systematic way. For each
18246 benchmarked application, benchmark data is stored in a format that allows JUBE
18247 to deduct the desired information. This data can be parsed by automatic pre-
18248 and post-processing scripts that draw information and store it more densely
18249 for manual interpretation.")
18250 (license license:gpl3+)))
18251
18252 (define-public python-pyroutelib3
18253 (package
18254 (name "python-pyroutelib3")
18255 (version "1.3.post1")
18256 (source
18257 (origin
18258 (method url-fetch)
18259 (uri (pypi-uri "pyroutelib3" version))
18260 (sha256
18261 (base32
18262 "1hpbydpn2alyswiajfbvhzq4c7f36vdmvxy91hgv8l1lb2g2vfrj"))))
18263 (build-system python-build-system)
18264 (propagated-inputs
18265 `(("python-dateutil" ,python-dateutil)))
18266 (home-page "https://github.com/MKuranowski/pyroutelib3")
18267 (synopsis "Library for simple routing on OSM data")
18268 (description "Library for simple routing on OSM data")
18269 (license license:gpl3+)))
18270
18271 (define-public python-bibtexparser
18272 (package
18273 (name "python-bibtexparser")
18274 (version "1.1.0")
18275 (source
18276 (origin
18277 (method url-fetch)
18278 (uri (pypi-uri "bibtexparser" version))
18279 (sha256
18280 (base32
18281 "0zwhfkrzf3n5847dbnfng92k7ak199l9v6x6ax3dgdidfpm6d2fz"))))
18282 (build-system python-build-system)
18283 (propagated-inputs
18284 `(("python-pyparsing" ,python-pyparsing)))
18285 (native-inputs
18286 `(("python-future" ,python-future)))
18287 (home-page "https://github.com/sciunto-org/python-bibtexparser")
18288 (synopsis "Python library to parse BibTeX files")
18289 (description "BibtexParser is a Python library to parse BibTeX files.")
18290 (license (list license:bsd-3 license:lgpl3))))
18291
18292 (define-public python-distro
18293 (package
18294 (name "python-distro")
18295 (version "1.4.0")
18296 (source
18297 (origin
18298 (method url-fetch)
18299 (uri (pypi-uri "distro" version))
18300 (sha256
18301 (base32
18302 "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
18303 (build-system python-build-system)
18304 (native-inputs
18305 `(("python-pytest" ,python-pytest)))
18306 (home-page "https://github.com/nir0s/distro")
18307 (synopsis
18308 "OS platform information API")
18309 (description
18310 "@code{distro} provides information about the OS distribution it runs on,
18311 such as a reliable machine-readable ID, or version information.
18312
18313 It is the recommended replacement for Python's original
18314 `platform.linux_distribution` function (which will be removed in Python 3.8).
18315 @code{distro} also provides a command-line interface to output the platform
18316 information in various formats.")
18317 (license license:asl2.0)))
18318
18319 (define-public python-cairosvg
18320 (package
18321 (name "python-cairosvg")
18322 (version "2.4.2")
18323 (source
18324 (origin
18325 (method url-fetch)
18326 (uri (pypi-uri "CairoSVG" version))
18327 (sha256
18328 (base32 "1bb7irxbaxxb9ahm3z5wsx1q96mm5gzskc7b6q07h9ikcnb8yrjf"))))
18329 (build-system python-build-system)
18330 (arguments
18331 `(#:phases
18332 (modify-phases %standard-phases
18333 (replace 'check
18334 (lambda _ (invoke "pytest"))))))
18335 (propagated-inputs
18336 `(("python-cairocffi" ,python-cairocffi)
18337 ("python-cssselect2" ,python-cssselect2)
18338 ("python-defusedxml" ,python-defusedxml)
18339 ("python-pillow" ,python-pillow)
18340 ("python-tinycss2" ,python-tinycss2)))
18341 (native-inputs
18342 `(("python-pytest-flake8" ,python-pytest-flake8)
18343 ("python-pytest-isort" ,python-pytest-isort)
18344 ("python-pytest-runner" ,python-pytest-runner)))
18345 (home-page "https://cairosvg.org/")
18346 (synopsis "SVG to PDF/PS/PNG converter based on Cairo")
18347 (description "CairoSVG is a SVG converter based on Cairo. It can export
18348 SVG files to PDF, PostScript and PNG files. The main part of CairoSVG is a
18349 SVG parser, trying to follow the SVG 1.1 recommendation from the W3C. Once
18350 parsed, the result is drawn to a Cairo surface that can be exported to
18351 qvarious formats: PDF, PostScript, PNG and even SVG.")
18352 (license license:lgpl3+)))
18353
18354 (define-public python-pyphen
18355 (package
18356 (name "python-pyphen")
18357 (version "0.9.5")
18358 (source
18359 (origin
18360 (method url-fetch)
18361 (uri (pypi-uri "Pyphen" version))
18362 (sha256
18363 (base32 "08c9y69ry9d6m4zalhnalg86lsp9v2j5n1ziw5vxfmiihx83lqrv"))))
18364 (build-system python-build-system)
18365 ;; TODO: Use the Guix system hyphenation packages hyphen-* rather than the
18366 ;; embedded set provided by upstream - like Debian does.
18367 (home-page "https://github.com/Kozea/Pyphen")
18368 (synopsis "Pure Python module to hyphenate text")
18369 (description "Pyphen is a pure Python module to hyphenate text using
18370 existing Hunspell hyphenation dictionaries.")
18371 (license (list license:gpl2 license:lgpl2.1 license:mpl1.1))))
18372
18373 (define-public python-intelhex
18374 (package
18375 (name "python-intelhex")
18376 (version "2.2.1")
18377 (source
18378 (origin
18379 (method url-fetch)
18380 (uri (pypi-uri "intelhex" version))
18381 (sha256
18382 (base32
18383 "0ckqjbxd8gwcg98gfzpn4vq1qxzfvq3rdbrr1hikj1nmw08qb780"))))
18384 (build-system python-build-system)
18385 (arguments '(#:tests? #f)) ;issue with version
18386 (home-page "https://pypi.org/project/IntelHex/")
18387 (synopsis "Python library for Intel HEX files manipulations")
18388 (description "The Intel HEX file format is widely used in microprocessors
18389 and microcontrollers area (embedded systems etc.) as the de facto standard for
18390 representation of code to be programmed into microelectronic devices. This
18391 package provides an intelhex Python library to read, write, create from
18392 scratch and manipulate data from Intel HEX file format. It also includes
18393 several convenience Python scripts, including \"classic\" hex2bin and bin2hex
18394 converters and more, those based on the library itself.")
18395 (license license:bsd-3)))
18396
18397 (define-public python-pykwalify
18398 (package
18399 (name "python-pykwalify")
18400 (version "1.7.0")
18401 (source
18402 (origin
18403 (method url-fetch)
18404 (uri (pypi-uri "pykwalify" version))
18405 (sha256
18406 (base32
18407 "1cnfzkg1b01f825ikpw2fhjclf9c8akxjfrbd1vc22x1lg2kk2vy"))))
18408 (build-system python-build-system)
18409 (arguments '(#:tests? #f)) ;missing dependencies
18410 (propagated-inputs
18411 `(("python-dateutil" ,python-dateutil)
18412 ("python-docopt" ,python-docopt)
18413 ("python-pyyaml" ,python-pyyaml)))
18414 (home-page "https://github.com/grokzen/pykwalify")
18415 (synopsis
18416 "Python lib/cli for JSON/YAML schema validation")
18417 (description
18418 "This package provides a parser, schema validator, and data binding tool
18419 for YAML and JSON.")
18420 (license license:expat)))
18421
18422 (define-public python-dbusmock
18423 (package
18424 (name "python-dbusmock")
18425 (version "0.18.3")
18426 (source
18427 (origin
18428 (method url-fetch)
18429 (uri (pypi-uri "python-dbusmock" version))
18430 (sha256
18431 (base32
18432 "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr"))))
18433 (build-system python-build-system)
18434 (arguments
18435 '(#:phases
18436 (modify-phases %standard-phases
18437 (add-after 'unpack 'patch-shell-path
18438 (lambda _
18439 (substitute* "tests/test_code.py"
18440 (("/bin/bash") (which "bash")))
18441 #t)))))
18442 (native-inputs
18443 `(;; For tests.
18444 ("dbus" ,dbus) ; for dbus-daemon
18445 ("python-nose" ,python-nose)
18446 ("which" ,which)))
18447 (propagated-inputs
18448 `(("python-dbus" ,python-dbus)
18449 ("python-pygobject" ,python-pygobject)))
18450 (home-page "https://github.com/martinpitt/python-dbusmock")
18451 (synopsis "Python library for mock D-Bus objects")
18452 (description "python-dbusmock allows for the easy creation of mock objects on
18453 D-Bus. This is useful for writing tests for software which talks to D-Bus
18454 services such as upower, systemd, logind, gnome-session or others, and it is
18455 hard (or impossible without root privileges) to set the state of the real
18456 services to what you expect in your tests.")
18457 (license license:lgpl3+)))
18458
18459 (define-public python-ujson
18460 (package
18461 (name "python-ujson")
18462 (version "2.0.3")
18463 (source
18464 (origin
18465 (method url-fetch)
18466 (uri (pypi-uri "ujson" version))
18467 (sha256
18468 (base32
18469 "18z9gb9ggy1r464b9q1gqs078mqgrkj6dys5a47529rqk3yfybdx"))
18470 (modules '((guix build utils)))
18471 (snippet
18472 '(begin (delete-file-recursively "deps") #t))))
18473 (build-system python-build-system)
18474 (arguments
18475 `(#:phases
18476 (modify-phases %standard-phases
18477 (add-after 'unpack 'link-to-system-double-conversion
18478 (lambda* (#:key inputs #:allow-other-keys)
18479 (let ((d-c (assoc-ref inputs "double-conversion")))
18480 (substitute* "setup.py"
18481 (("./deps/double-conversion/double-conversion\"")
18482 (string-append d-c "/include/double-conversion\""))
18483 (("-lstdc++" stdc)
18484 (string-append "-L" d-c "/lib\","
18485 " \"-ldouble-conversion\","
18486 " \"" stdc)))
18487 #t)))
18488 (replace 'check
18489 (lambda* (#:key inputs outputs #:allow-other-keys)
18490 (add-installed-pythonpath inputs outputs)
18491 (invoke "pytest"))))))
18492 (native-inputs
18493 `(("double-conversion" ,double-conversion)
18494 ("python-setuptools-scm" ,python-setuptools-scm)
18495 ("python-pytest" ,python-pytest)))
18496 (home-page "https://github.com/ultrajson/ultrajson")
18497 (synopsis "Ultra fast JSON encoder and decoder for Python")
18498 (description
18499 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
18500 bindings for Python 3.")
18501 (license license:bsd-3)))
18502
18503 (define-public python-ujson-1
18504 (package
18505 (inherit python-ujson)
18506 (version "1.35")
18507 (source
18508 (origin
18509 (method url-fetch)
18510 (uri (pypi-uri "ujson" version))
18511 (sha256
18512 (base32
18513 "11jz5wi7mbgqcsz52iqhpyykiaasila4lq8cmc2d54bfa3jp6q7n"))))
18514 (arguments
18515 '(#:phases %standard-phases))
18516 (native-inputs '())
18517 (home-page "http://www.esn.me")
18518 (description
18519 "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with
18520 bindings for Python 2.5+ and 3.")))
18521
18522 (define-public python2-ujson-1
18523 (package-with-python2 python-ujson-1))
18524
18525 (define-public python-iocapture
18526 ;; The latest release is more than a year older than this commit.
18527 (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c")
18528 (revision "1"))
18529 (package
18530 (name "python-iocapture")
18531 (version "0.1.2")
18532 (source
18533 (origin
18534 (method git-fetch)
18535 (uri (git-reference
18536 (url "https://github.com/oinume/iocapture.git")
18537 (commit commit)))
18538 (file-name (git-file-name name version))
18539 (sha256
18540 (base32
18541 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz"))))
18542 (build-system python-build-system)
18543 (arguments
18544 `(#:phases
18545 (modify-phases %standard-phases
18546 (delete 'check)
18547 (add-after 'install 'check
18548 (lambda* (#:key inputs outputs #:allow-other-keys)
18549 (add-installed-pythonpath inputs outputs)
18550 (invoke "py.test" "-v" "tests")
18551 #t)))))
18552 (propagated-inputs
18553 `(("python-flexmock" ,python-flexmock)
18554 ("python-pytest" ,python-pytest)
18555 ("python-pytest-cov" ,python-pytest-cov)
18556 ("python-six" ,python-six)))
18557 (home-page "https://github.com/oinume/iocapture")
18558 (synopsis "Python capturing tool for stdout and stderr")
18559 (description
18560 "This package helps you to capture the standard out (stdout) and the
18561 standard error channel (stderr) in your program.")
18562 (license license:expat))))
18563
18564 (define-public python-argh
18565 ;; There are 21 commits since the latest release containing important
18566 ;; improvements.
18567 (let ((commit "dcd3253f2994400a6a58a700c118c53765bc50a4")
18568 (revision "1"))
18569 (package
18570 (name "python-argh")
18571 (version (git-version "0.26.2" revision commit))
18572 (source
18573 (origin
18574 (method git-fetch)
18575 (uri (git-reference
18576 (url "https://github.com/neithere/argh.git")
18577 (commit commit)))
18578 (file-name (git-file-name name version))
18579 (sha256
18580 (base32
18581 "1p5h3dnpbsjmqrvil96s71asc6i3gpinmbrabqmwnrsxprz7r3ns"))))
18582 (build-system python-build-system)
18583 (propagated-inputs
18584 `(("python-iocapture" ,python-iocapture)
18585 ("python-mock" ,python-mock)
18586 ("python-pytest" ,python-pytest)
18587 ("python-pytest-cov" ,python-pytest-cov)
18588 ("python-pytest-xdist" ,python-pytest-xdist)
18589 ("python-tox" ,python-tox)))
18590 (home-page "https://github.com/neithere/argh/")
18591 (synopsis "Argparse wrapper with natural syntax")
18592 (description
18593 "python-argh is a small library that provides several layers of
18594 abstraction on top of @code{python-argparse}. The layers can be mixed. It is
18595 always possible to declare a command with the highest possible (and least
18596 flexible) layer and then tune the behaviour with any of the lower layers
18597 including the native API of @code{python-argparse}.")
18598 (license license:lgpl3+))))
18599
18600 (define-public python-ppft
18601 (package
18602 (name "python-ppft")
18603 (version "1.6.6.1")
18604 (source
18605 (origin
18606 (method url-fetch)
18607 (uri (pypi-uri "ppft" version))
18608 (sha256
18609 (base32
18610 "1z1invkhszc5d2mvgr221v7cszzifcc77mz0pv3wjp6x5q2768cy"))))
18611 (build-system python-build-system)
18612 (arguments '(#:tests? #f)) ; there are none
18613 (propagated-inputs
18614 `(("python-six" ,python-six)))
18615 (home-page "https://pypi.org/project/ppft/")
18616 (synopsis "Fork of Parallel Python")
18617 (description
18618 "This package is a fork of Parallel Python. The Parallel Python
18619 module (@code{pp}) provides an easy and efficient way to create
18620 parallel-enabled applications for @dfn{symmetric multiprocessing} (SMP)
18621 computers and clusters. It features cross-platform portability and dynamic
18622 load balancing.")
18623 (license license:bsd-3)))
18624
18625 (define-public python-pox
18626 (package
18627 (name "python-pox")
18628 (version "0.2.7")
18629 (source
18630 (origin
18631 (method url-fetch)
18632 (uri (pypi-uri "pox" version))
18633 (sha256
18634 (base32
18635 "0y17ckc2p6i6709s279sjdj4q459mpcc38ymg9zv9y6vl6jf3bq6"))))
18636 (build-system python-build-system)
18637 (arguments
18638 `(#:phases
18639 (modify-phases %standard-phases
18640 (replace 'check
18641 (lambda _
18642 (mkdir-p "/tmp/guix")
18643 (setenv "SHELL" "bash")
18644 (setenv "USERNAME" "guix")
18645 (setenv "HOME" "/tmp/guix") ; must end on USERNAME...
18646 (invoke "py.test" "-vv")
18647 #t)))))
18648 (native-inputs
18649 `(("python-pytest" ,python-pytest)
18650 ("which" ,which)))
18651 (home-page "https://pypi.org/project/pox/")
18652 (synopsis "Python utilities for filesystem exploration and automated builds")
18653 (description
18654 "Pox provides a collection of utilities for navigating and manipulating
18655 filesystems. This module is designed to facilitate some of the low level
18656 operating system interactions that are useful when exploring a filesystem on a
18657 remote host. Pox provides Python equivalents of several shell commands such
18658 as @command{which} and @command{find}. These commands allow automated
18659 discovery of what has been installed on an operating system, and where the
18660 essential tools are located.")
18661 (license license:bsd-3)))
18662
18663 (define-public python-pathos
18664 (package
18665 (name "python-pathos")
18666 (version "0.2.5")
18667 (source
18668 (origin
18669 (method url-fetch)
18670 (uri (pypi-uri "pathos" version))
18671 (sha256
18672 (base32
18673 "0in8hxdz7k081ijn6q94gr39ycy7363sx4zysmbwyvd7snqjrbi1"))))
18674 (build-system python-build-system)
18675 (arguments
18676 '(#:phases
18677 (modify-phases %standard-phases
18678 (replace 'check
18679 (lambda _
18680 (setenv "PYTHONPATH"
18681 (string-append (getcwd) ":" (getenv "PYTHONPATH")))
18682 (invoke "python" "./tests/__main__.py"))))))
18683 (propagated-inputs
18684 `(("python-dill" ,python-dill)
18685 ("python-multiprocess" ,python-multiprocess)
18686 ("python-pox" ,python-pox)
18687 ("python-ppft" ,python-ppft)))
18688 (native-inputs
18689 `(("python-pytest" ,python-pytest)))
18690 (home-page "https://pypi.org/project/pathos/")
18691 (synopsis
18692 "Parallel graph management and execution in heterogeneous computing")
18693 (description
18694 "Python-pathos is a framework for heterogenous computing. It provides a
18695 consistent high-level interface for configuring and launching parallel
18696 computations across heterogenous resources. Python-pathos provides configurable
18697 launchers for parallel and distributed computing, where each launcher contains
18698 the syntactic logic to configure and launch jobs in an execution environment.")
18699 (license license:bsd-3)))
18700
18701 (define-public python-flit
18702 (package
18703 (name "python-flit")
18704 (version "2.1.0")
18705 (source
18706 (origin
18707 (method url-fetch)
18708 (uri (pypi-uri "flit" version))
18709 (sha256
18710 (base32
18711 "0h5vvmqinqzn97mr3ix7zx53af9ad4fimjjwqpx88yp8qhz4r5bc"))))
18712 (build-system python-build-system)
18713 (arguments
18714 `(#:tests? #f)) ; XXX: Check requires network access.
18715 (home-page "https://flit.readthedocs.io/")
18716 (synopsis
18717 "Simple packaging tool for simple packages")
18718 (description
18719 "Flit is a simple way to put Python packages and modules on PyPI. Flit
18720 packages a single importable module or package at a time, using the import
18721 name as the name on PyPI. All subpackages and data files within a package
18722 are included automatically.")
18723 (license license:bsd-3)))
18724
18725 (define-public python-pathtools
18726 (package
18727 (name "python-pathtools")
18728 (version "0.1.2")
18729 (source
18730 (origin
18731 (method url-fetch)
18732 (uri (pypi-uri "pathtools" version))
18733 (sha256
18734 (base32
18735 "1h7iam33vwxk8bvslfj4qlsdprdnwf8bvzhqh3jq5frr391cadbw"))))
18736 (build-system python-build-system)
18737 (home-page
18738 "https://github.com/gorakhargosh/pathtools")
18739 (synopsis "Path utilities for Python")
18740 (description "Pattern matching and various utilities for file systems
18741 paths.")
18742 (license license:expat)))
18743
18744 (define-public python-fastentrypoints
18745 (package
18746 (name "python-fastentrypoints")
18747 (version "0.12")
18748 (source
18749 (origin
18750 (method url-fetch)
18751 (uri (pypi-uri "fastentrypoints" version))
18752 (sha256
18753 (base32
18754 "02s1j8i2dzbpbwgq2a3fiqwm3cnmhii2qzc0k42l0rdxd4a4ya7z"))))
18755 (build-system python-build-system)
18756 (home-page
18757 "https://github.com/ninjaaron/fast-entry_points")
18758 (synopsis
18759 "Makes entry_points specified in setup.py load more quickly")
18760 (description
18761 "Using entry_points in your setup.py makes scripts that start really
18762 slowly because it imports pkg_resources. This package allows such setup
18763 scripts to load entry points more quickly.")
18764 (license license:bsd-3)))
18765
18766 (define-public python-funcparserlib
18767 (package
18768 (name "python-funcparserlib")
18769 (version "0.3.6")
18770 (source
18771 (origin
18772 (method url-fetch)
18773 (uri (pypi-uri "funcparserlib" version))
18774 (sha256
18775 (base32
18776 "07f9cgjr3h4j2m67fhwapn8fja87vazl58zsj4yppf9y3an2x6dp"))))
18777 (native-inputs
18778 `(("python-tox" ,python-tox)))
18779 (arguments
18780 `(#:phases
18781 (modify-phases %standard-phases
18782 (replace 'check
18783 (lambda _
18784 (invoke "tox"))))))
18785 (build-system python-build-system)
18786 (home-page
18787 "https://github.com/vlasovskikh/funcparserlib")
18788 (synopsis
18789 "Recursive descent parsing library based on functional combinators")
18790 (description
18791 "This package is a recursive descent parsing library for Python based on
18792 functional combinators. Parser combinators are just higher-order functions
18793 that take parsers as their arguments and return them as result values.")
18794 (license license:expat)))
18795
18796 (define-public python-speg
18797 (package
18798 (name "python-speg")
18799 (version "0.3")
18800 (source
18801 (origin
18802 (method url-fetch)
18803 (uri (pypi-uri "speg" version ".zip"))
18804 (sha256
18805 (base32 "0w9y4jf4787dzhy6rvhwi0mpl0r8qkqmqmyv2hpwdpv8w53yzjqh"))))
18806 (arguments
18807 `(#:tests? #f)) ;FIXME: tests fail, not sure why
18808 (native-inputs
18809 `(("unzip" ,unzip)))
18810 (build-system python-build-system)
18811 (home-page "https://github.com/avakar/speg")
18812 (synopsis "PEG-based parser interpreter with memoization")
18813 (description "This package is a PEG-based parser and interpreter with
18814 memoization.")
18815 (license license:expat)))
18816
18817 (define-public python-cson
18818 (package
18819 (name "python-cson")
18820 (version "0.8")
18821 (source
18822 (origin
18823 (method url-fetch)
18824 (uri (pypi-uri "cson" version))
18825 (sha256
18826 (base32 "00cyvigg4npbph39ghkg77xbxisa6plf75vii24igxfizik0337f"))))
18827 (build-system python-build-system)
18828 (propagated-inputs
18829 `(("python-speg" ,python-speg)))
18830 (home-page "https://github.com/avakar/pycson")
18831 (synopsis "Parser for Coffeescript Object Notation (CSON)")
18832 (description "This package is a parser for Coffeescript Object
18833 Notation (CSON).")
18834 (license license:expat)))
18835
18836 (define-public python-asynctest
18837 (package
18838 (name "python-asynctest")
18839 (version "0.13.0")
18840 (source
18841 (origin
18842 (method url-fetch)
18843 (uri (pypi-uri "asynctest" version))
18844 (sha256
18845 (base32
18846 "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62"))))
18847 (build-system python-build-system)
18848 (arguments
18849 '(#:phases
18850 (modify-phases %standard-phases
18851 (replace 'check
18852 (lambda _
18853 (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test")))
18854 (add-after 'unpack 'disable-tests
18855 (lambda* _
18856 (substitute* "test/test_selector.py"
18857 ;; XXX: This test fails for unknown reason inside the build
18858 ;; environment.
18859 (("def test_events_watched_outside_test_are_ignored")
18860 "@unittest.skip('disabled by guix')
18861 def test_events_watched_outside_test_are_ignored")))))))
18862 (home-page "https://github.com/Martiusweb/asynctest")
18863 (synopsis "Extension of unittest for testing asyncio libraries")
18864 (description
18865 "The package asynctest is built on top of the standard unittest module
18866 and cuts down boilerplate code when testing libraries for asyncio.")
18867 (license license:asl2.0)))
18868
18869 (define-public python-aionotify
18870 (package
18871 (name "python-aionotify")
18872 (version "0.2.0")
18873 (source
18874 (origin
18875 ;; Source tarball on PyPi lacks tests
18876 (method git-fetch)
18877 (uri (git-reference
18878 (url "https://github.com/rbarrois/aionotify")
18879 (commit (string-append "v" version))))
18880 (file-name (git-file-name name version))
18881 (sha256
18882 (base32 "1sk9i8czxgsbrswsf1nlb4c82vgnlzi8zrvrxdip92w2z8hqh43y"))))
18883 (build-system python-build-system)
18884 (native-inputs `(("python-asynctest" ,python-asynctest)))
18885 (home-page "https://github.com/rbarrois/aionotify")
18886 (synopsis "Asyncio-powered inotify library")
18887 (description
18888 "@code{aionotify} is a simple, asyncio-based inotify library.")
18889 (license license:bsd-3)))
18890
18891 (define-public python-forbiddenfruit
18892 (package
18893 (name "python-forbiddenfruit")
18894 (version "0.1.3")
18895 (source
18896 (origin
18897 ;; Source tarball on PyPi lacks Makefile that builds and runs tests
18898 (method git-fetch)
18899 (uri (git-reference
18900 (url "https://github.com/clarete/forbiddenfruit")
18901 (commit version)))
18902 (file-name (git-file-name name version))
18903 (sha256
18904 (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2"))))
18905 (build-system python-build-system)
18906 (arguments
18907 '(#:phases
18908 (modify-phases %standard-phases
18909 (replace 'check
18910 (lambda _
18911 (invoke "make" "SKIP_DEPS=1"))))))
18912 (native-inputs
18913 `(("python-nose" ,python-nose)
18914 ("python-coverage" ,python-coverage)))
18915 (home-page "https://github.com/clarete/forbiddenfruit")
18916 (synopsis "Patch python built-in objects")
18917 (description "This project allows Python code to extend built-in types.")
18918 (license (list license:gpl3+ license:expat))))
18919
18920 (define-public python-shouldbe
18921 (package
18922 (name "python-shouldbe")
18923 (version "0.1.2")
18924 (source
18925 (origin
18926 (method url-fetch)
18927 (uri (pypi-uri "shouldbe" version))
18928 (sha256
18929 (base32
18930 "16zbvjxf71dl4yfbgcr6idyim3mdrfvix1dv8b95p0s9z07372pj"))
18931 (patches (search-patches "python-shouldbe-0.1.2-cpy3.8.patch"))))
18932 (build-system python-build-system)
18933 (propagated-inputs
18934 `(("python-forbiddenfruit" ,python-forbiddenfruit)))
18935 (native-inputs
18936 `(("python-nose" ,python-nose)))
18937 (home-page "https://github.com/directxman12/should_be")
18938 (synopsis "Python Assertion Helpers inspired by Shouldly")
18939 (description
18940 "Python Assertion Helpers inspired by Shouldly.")
18941 (license license:isc)))
18942
18943 (define-public python-k5test
18944 (package
18945 (name "python-k5test")
18946 (version "0.9.2")
18947 (source
18948 (origin
18949 (method url-fetch)
18950 (uri (pypi-uri "k5test" version))
18951 (sha256
18952 (base32
18953 "1lqp3jgfngyhaxjgj3n230hn90wsylwilh120yjf62h7b1s02mh8"))))
18954 (build-system python-build-system)
18955 (propagated-inputs
18956 `(("python-six" ,python-six)
18957 ;; `which`, `kadmin.local` binaries called inside library
18958 ("which" ,which)
18959 ("mit-krb5" ,mit-krb5)))
18960 (native-inputs `(("mit-krb5" ,mit-krb5)))
18961 (arguments
18962 '(#:phases
18963 (modify-phases %standard-phases
18964 (add-after 'unpack 'patch-paths
18965 (lambda* _
18966 (substitute* "k5test/realm.py"
18967 (("'kadmin_local'") "'kadmin.local'")))))))
18968 (home-page "https://github.com/pythongssapi/k5test")
18969 (synopsis "Library for setting up self-contained Kerberos 5 environments")
18970 (description
18971 "@code{k5test} is a library for setting up self-contained Kerberos 5
18972 environments, and running Python unit tests inside those environments. It is
18973 based on the file of the same name found alongside the MIT Kerberos 5 unit
18974 tests.")
18975 (license license:isc)))
18976
18977 (define-public python-gssapi
18978 (package
18979 (name "python-gssapi")
18980 (version "1.6.5")
18981 (source
18982 (origin
18983 (method url-fetch)
18984 (uri (pypi-uri "gssapi" version))
18985 (sha256
18986 (base32
18987 "02i5s7998dg5kcr4m0xwamd8vjqk1816xbzldyp68l91f6bynwcr"))))
18988 (build-system python-build-system)
18989 (propagated-inputs
18990 `(("python-decorator" ,python-decorator)
18991 ("python-six" ,python-six)))
18992 (inputs
18993 `(("mit-krb5" ,mit-krb5)))
18994 ;; for tests
18995 (native-inputs
18996 `(("python-shouldbe" ,python-shouldbe)
18997 ("python-parameterized" ,python-parameterized)
18998 ("python-k5test" ,python-k5test)
18999 ("python-nose" ,python-nose)))
19000 (home-page "https://github.com/pythongssapi/python-gssapi")
19001 (synopsis "Python GSSAPI Wrapper")
19002 (description
19003 "Python-GSSAPI provides both low-level and high level wrappers around the
19004 GSSAPI C libraries. While it focuses on the Kerberos mechanism, it should
19005 also be useable with other GSSAPI mechanisms.")
19006 (license license:isc)))
19007
19008 (define-public python-check-manifest
19009 (package
19010 (name "python-check-manifest")
19011 (version "0.37")
19012 (source
19013 (origin
19014 (method url-fetch)
19015 (uri (pypi-uri "check-manifest" version))
19016 (sha256
19017 (base32
19018 "0lk45ifdv2cpkl6ayfyix7jwmnxa1rha7xvb0ih5999k115wzqs4"))))
19019 (build-system python-build-system)
19020 (native-inputs
19021 `(("python-mock" ,python-mock)
19022 ("git" ,git)))
19023 (home-page "https://github.com/mgedmin/check-manifest")
19024 (synopsis "Check MANIFEST.in in a Python source package for completeness")
19025 (description "Python package can include a MANIFEST.in file to help with
19026 sending package files to the Python Package Index. This package checks that
19027 file to ensure it completely and accurately describes your project.")
19028 (license license:expat)))
19029
19030 (define-public python-android-stringslib
19031 (package
19032 (name "python-android-stringslib")
19033 (version "0.1.2")
19034 (source
19035 (origin
19036 (method git-fetch)
19037 (uri (git-reference
19038 (url "https://framagit.org/tyreunom/python-android-strings-lib")
19039 (commit (string-append "v" version))))
19040 (file-name (git-file-name name version))
19041 (sha256
19042 (base32
19043 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4"))))
19044 (build-system python-build-system)
19045 (arguments
19046 `(#:tests? #f))
19047 (home-page "https://framagit.org/tyreunom/python-android-strings-lib")
19048 (synopsis "Android strings.xml support")
19049 (description "Android Strings Lib provides support for android's strings.xml
19050 files. These files are used to translate strings in android apps.")
19051 (license license:expat)))
19052
19053 (define-public python-watchdog
19054 (package
19055 (name "python-watchdog")
19056 (version "0.9.0")
19057 (source
19058 (origin
19059 (method url-fetch)
19060 (uri (pypi-uri "watchdog" version))
19061 (sha256
19062 (base32
19063 "07cnvvlpif7a6cg4rav39zq8fxa5pfqawchr46433pij0y6napwn"))))
19064 (build-system python-build-system)
19065 (arguments
19066 `(#:phases
19067 (modify-phases %standard-phases
19068 (add-before 'check 'remove-failing
19069 (lambda _
19070 (delete-file "tests/test_inotify_buffer.py")
19071 (delete-file "tests/test_snapshot_diff.py")
19072 #t)))))
19073 (propagated-inputs
19074 `(("python-argh" ,python-argh)
19075 ("python-pathtools" ,python-pathtools)
19076 ("python-pyyaml" ,python-pyyaml)))
19077 (native-inputs
19078 `(("python-pytest-cov" ,python-pytest-cov)
19079 ("python-pytest-timeout" ,python-pytest-timeout)))
19080 (home-page "https://github.com/gorakhargosh/watchdog")
19081 (synopsis "Filesystem events monitoring")
19082 (description "This package provides a way to monitor filesystem events
19083 such as a file modification and trigger an action. This is similar to inotify,
19084 but portable.")
19085 (license license:asl2.0)))
19086
19087 (define-public python-wget
19088 (package
19089 (name "python-wget")
19090 (version "3.2")
19091 (source
19092 (origin
19093 (method url-fetch)
19094 (uri (pypi-uri "wget" version ".zip"))
19095 (sha256
19096 (base32
19097 "0qb0y7ipby42m4m7h0ipazpdyc3bn9xi46lvifcwwl5albn31rim"))))
19098 (build-system python-build-system)
19099 (native-inputs `(("unzip" ,unzip)))
19100 (home-page "https://bitbucket.org/techtonik/python-wget/")
19101 (synopsis "Pure Python download utility")
19102 (description "The python-wget library provides an API to download files
19103 with features similar to the @command{wget} utility.")
19104 (license license:unlicense)))
19105
19106 (define-public offlate
19107 (package
19108 (name "offlate")
19109 (version "0.5")
19110 (source
19111 (origin
19112 (method git-fetch)
19113 (uri (git-reference
19114 (url "https://framagit.org/tyreunom/offlate")
19115 (commit version)))
19116 (file-name (git-file-name name version))
19117 (sha256
19118 (base32
19119 "13pqnbl05wcyldfvl75fp89vjgwsvxyc69vhnb17kkha2rc2k1h7"))))
19120 (build-system python-build-system)
19121 (arguments
19122 ;; No tests
19123 `(#:tests? #f))
19124 (propagated-inputs
19125 `(("python-android-stringslib" ,python-android-stringslib)
19126 ("python-dateutil" ,python-dateutil)
19127 ("python-gitlab" ,python-gitlab)
19128 ("python-lxml" ,python-lxml)
19129 ("python-polib" ,python-polib)
19130 ("python-pyenchant" ,python-pyenchant)
19131 ("python-pygit2" ,python-pygit2)
19132 ("python-pygithub" ,python-pygithub)
19133 ("python-pyqt" ,python-pyqt)
19134 ("python-requests" ,python-requests)
19135 ("python-ruamel.yaml" ,python-ruamel.yaml)
19136 ("python-translation-finder" ,python-translation-finder)
19137 ("python-watchdog" ,python-watchdog)))
19138 (native-inputs
19139 `(("qttools" ,qttools)))
19140 (home-page "https://framagit.org/tyreunom/offlate")
19141 (synopsis "Offline translation interface for online translation tools")
19142 (description "Offlate offers a unified interface for different translation
19143 file formats, as well as many different online translation platforms. You can
19144 use it to get work from online platforms, specialized such as the Translation
19145 Project, or not such a gitlab instance when your upstream doesn't use any
19146 dedicated platform. The tool proposes a unified interface for any format and
19147 an upload option to send your work back to the platform.")
19148 (license license:gpl3+)))
19149
19150 (define-public python-titlecase
19151 (package
19152 (name "python-titlecase")
19153 (version "0.12.0")
19154 (source
19155 (origin
19156 (method url-fetch)
19157 (uri (pypi-uri "titlecase" version))
19158 (sha256
19159 (base32
19160 "0486i99wf8ssa7sgn81fn6fv6i4rhhq6n751bc740b3hzfbpmpl4"))))
19161 (build-system python-build-system)
19162 (native-inputs
19163 `(("python-nose" ,python-nose)))
19164 (home-page "https://github.com/ppannuto/python-titlecase")
19165 (synopsis "Capitalize strings similar to book titles")
19166 (description
19167 "Python-Titlecase is a Python port of John Gruber's titlecase.pl.
19168 It capitalizes (predominantly English) strings in a way that is similar to
19169 book titles, using the New York Times Manual of Style to leave certain words
19170 lowercase.")
19171 (license license:expat)))
19172
19173 (define-public python-pypng
19174 (package
19175 (name "python-pypng")
19176 (version "0.0.20")
19177 (source
19178 (origin
19179 (method url-fetch)
19180 (uri (pypi-uri "pypng" version))
19181 (sha256
19182 (base32 "02qpa22ls41vwsrzw9r9qhj1nhq05p03hb5473pay6y980s86chh"))))
19183 (build-system python-build-system)
19184 (home-page "https://github.com/drj11/pypng")
19185 (synopsis "Pure Python PNG image encoder/decoder")
19186 (description
19187 "The PyPNG module implements support for PNG images. It reads and writes
19188 PNG files with all allowable bit depths (1/2/4/8/16/24/32/48/64 bits per
19189 pixel) and colour combinations: greyscale (1/2/4/8/16 bit); RGB, RGBA,
19190 LA (greyscale with alpha) with 8/16 bits per channel; colour mapped
19191 images (1/2/4/8 bit). Adam7 interlacing is supported for reading and writing.
19192 A number of optional chunks can be specified (when writing) and
19193 understood (when reading): tRNS, bKGD, gAMA.
19194
19195 PyPNG is not a high level toolkit for image processing (like PIL) and does not
19196 aim at being a replacement or competitor. Its strength lies in fine-grained
19197 extensive support of PNG features. It can also read and write Netpbm PAM
19198 files, with a focus on its use as an intermediate format for implementing
19199 custom PNG processing.")
19200 (license license:expat)))
19201
19202 (define-public python-fuzzywuzzy
19203 (package
19204 (name "python-fuzzywuzzy")
19205 (version "0.18.0")
19206 (source
19207 (origin
19208 (method url-fetch)
19209 (uri (pypi-uri "fuzzywuzzy" version))
19210 (sha256
19211 (base32
19212 "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5"))))
19213 (build-system python-build-system)
19214 (native-inputs
19215 `(("python-hypothesis" ,python-hypothesis)
19216 ("python-pycodestyle" ,python-pycodestyle)
19217 ("python-pytest" ,python-pytest)))
19218 (propagated-inputs
19219 `(("python-levenshtein" ,python-levenshtein)))
19220 (home-page "https://github.com/seatgeek/fuzzywuzzy")
19221 (synopsis "Fuzzy string matching in Python")
19222 (description "Approximate string matching using
19223 @emph{Levenshtein Distance} to calculate the differences between
19224 sequences.")
19225 (license license:gpl2)))
19226
19227 (define-public python2-fuzzywuzzy
19228 (package-with-python2 python-fuzzywuzzy))
19229
19230 (define-public python-block-tracing
19231 (package
19232 (name "python-block-tracing")
19233 (version "1.0.1")
19234 (source
19235 (origin
19236 (method url-fetch)
19237 (uri (pypi-uri "block_tracing" version))
19238 (sha256
19239 (base32
19240 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz"))))
19241 (build-system python-build-system)
19242 (arguments '(#:tests? #f)) ; no tests
19243 (home-page "https://github.com/rianhunter/block_tracing")
19244 (synopsis "Protect process memory")
19245 (description
19246 "@code{block_tracing} is a tiny Python library that can be used to
19247 prevent debuggers and other applications from inspecting the memory within
19248 your process.")
19249 (license license:expat)))
19250
19251 (define-public python-gcovr
19252 (package
19253 (name "python-gcovr")
19254 (version "4.2")
19255 (source
19256 (origin
19257 (method url-fetch)
19258 (uri (pypi-uri "gcovr" version))
19259 (sha256
19260 (base32
19261 "0gyady7x3v3l9fm1zan0idaggqqcm31y7g5vxk7h05p5h7f39bjs"))))
19262 (build-system python-build-system)
19263 (propagated-inputs
19264 `(("python-lxml" ,python-lxml)
19265 ("python-jinja2" ,python-jinja2)))
19266 (home-page "https://gcovr.com/")
19267 (synopsis "Utility for generating code coverage results")
19268 (description
19269 "Gcovr provides a utility for managing the use of the GNU gcov
19270 utility and generating summarized code coverage results. It is inspired
19271 by the Python coverage.py package, which provides a similar utility for
19272 Python.")
19273 (license license:bsd-3)))
19274
19275 (define-public python-owslib
19276 (package
19277 (name "python-owslib")
19278 (version "0.19.2")
19279 (source
19280 (origin
19281 (method url-fetch)
19282 (uri (pypi-uri "OWSLib" version))
19283 (sha256
19284 (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0"))))
19285 (build-system python-build-system)
19286 (arguments
19287 '(#:tests? #f)) ; TODO: package dependencies required for tests.
19288 (synopsis "Interface for Open Geospatial Consortium web service")
19289 (description
19290 "OWSLib is a Python package for client programming with Open Geospatial
19291 Consortium (OGC) web service (hence OWS) interface standards, and their related
19292 content models.")
19293 (home-page "https://geopython.github.io/OWSLib/")
19294 (license license:bsd-3)))
19295
19296 (define-public python-docusign-esign
19297 (package
19298 (name "python-docusign-esign")
19299 (version "3.1.0")
19300 (source (origin
19301 (method url-fetch)
19302 (uri (pypi-uri "docusign_esign" version))
19303 (sha256
19304 (base32
19305 "01f3h03vc97syjlmqyl7xa5j90pzgmwpspc5a0gra9saynnbkx37"))))
19306 (build-system python-build-system)
19307 ;; Testing requires undocumented setup changes, and so testing is disabled here.
19308 (arguments `(#:tests? #f))
19309 (propagated-inputs
19310 `(("python-certifi", python-certifi)
19311 ("python-six", python-six)
19312 ("python-dateutil", python-dateutil)
19313 ("python-urllib3", python-urllib3)
19314 ("python-pyjwt", python-pyjwt)
19315 ("python-cryptography", python-cryptography)
19316 ("python-nose", python-nose)))
19317 (synopsis "DocuSign Python Client")
19318 (description "The Official DocuSign Python Client Library used to interact
19319 with the eSign REST API. Send, sign, and approve documents using this client.")
19320 (home-page "https://www.docusign.com/devcenter")
19321 (license license:expat)))
19322
19323 (define-public python-xattr
19324 (package
19325 (name "python-xattr")
19326 (version "0.9.7")
19327 (source
19328 (origin
19329 (method url-fetch)
19330 (uri (pypi-uri "xattr" version))
19331 (sha256
19332 (base32
19333 "0i4xyiqbhjz2g16zbim17zjdbjkw79xsw8k59942vvq4is1cmfxh"))))
19334 (build-system python-build-system)
19335 (propagated-inputs
19336 `(("python-cffi" ,python-cffi)))
19337 (home-page "https://github.com/xattr/xattr")
19338 (synopsis
19339 "Python wrapper for extended filesystem attributes")
19340 (description "This package provides a Python wrapper for using extended
19341 filesystem attributes. Extended attributes extend the basic attributes of files
19342 and directories in the file system. They are stored as name:data pairs
19343 associated with file system objects (files, directories, symlinks, etc).")
19344 (license license:expat)))
19345
19346 (define-public python-json-logger
19347 (package
19348 (name "python-json-logger")
19349 (version "0.1.11")
19350 (source
19351 (origin
19352 (method url-fetch)
19353 (uri (pypi-uri "python-json-logger" version))
19354 (sha256
19355 (base32
19356 "10g2ya6nsvn5vxzvq2wb8q4d43i3d7756i5rxyjna6d0y9i138xp"))))
19357 (build-system python-build-system)
19358 (home-page
19359 "https://github.com/madzak/python-json-logger")
19360 (synopsis "JSON log formatter in Python")
19361 (description "This library allows standard Python logging to output log data
19362 as JSON objects. With JSON we can make our logs more readable by machines and
19363 we can stop writing custom parsers for syslog-type records.")
19364 (license license:bsd-3)))
19365
19366 (define-public python-daiquiri
19367 (package
19368 (name "python-daiquiri")
19369 (version "2.1.1")
19370 (source
19371 (origin
19372 (method url-fetch)
19373 (uri (pypi-uri "daiquiri" version))
19374 (sha256
19375 (base32
19376 "1qmank3c217ddiig3xr8ps0mqaydcp0q5a62in9a9g4zf72zjnqd"))))
19377 (build-system python-build-system)
19378 (propagated-inputs
19379 `(("python-json-logger" ,python-json-logger)))
19380 (native-inputs
19381 `(("python-mock" ,python-mock)
19382 ("python-pytest" ,python-pytest)
19383 ("python-setuptools-scm" ,python-setuptools-scm)
19384 ("python-six" ,python-six)))
19385 (home-page "https://github.com/jd/daiquiri")
19386 (synopsis
19387 "Library to configure Python logging easily")
19388 (description "The daiquiri library provides an easy way to configure
19389 logging in Python. It also provides some custom formatters and handlers.")
19390 (license license:asl2.0)))
19391
19392 (define-public python-pifpaf
19393 (package
19394 (name "python-pifpaf")
19395 (version "2.4.0")
19396 (source
19397 (origin
19398 (method url-fetch)
19399 (uri (pypi-uri "pifpaf" version))
19400 (sha256
19401 (base32
19402 "150av2pylsjy8ykrpyi0vzy2q24s9rhh2ya01zvwnvj9j5dspviz"))))
19403 (build-system python-build-system)
19404 (arguments
19405 `(#:tests? #f))
19406 (propagated-inputs
19407 `(("python-click" ,python-click)
19408 ("python-daiquiri" ,python-daiquiri)
19409 ("python-fixtures" ,python-fixtures)
19410 ("python-jinja2" ,python-jinja2)
19411 ("python-pbr" ,python-pbr)
19412 ("python-psutil" ,python-psutil)
19413 ("python-six" ,python-six)
19414 ("python-xattr" ,python-xattr)))
19415 (native-inputs
19416 `(("python-mock" ,python-mock)
19417 ("python-os-testr" ,python-os-testr)
19418 ("python-requests" ,python-requests)
19419 ("python-testrepository" ,python-testrepository)
19420 ("python-testtools" ,python-testtools)))
19421 (home-page "https://github.com/jd/pifpaf")
19422 (synopsis "Tools and fixtures to manage daemons for testing in Python")
19423 (description "Pifpaf is a suite of fixtures and a command-line tool that
19424 starts and stops daemons for a quick throw-away usage. This is typically
19425 useful when needing these daemons to run integration testing. It originally
19426 evolved from its precursor @code{overtest}.")
19427 (license license:asl2.0)))
19428
19429 (define-public python-pytest-check-links
19430 (package
19431 (name "python-pytest-check-links")
19432 (version "0.3.0")
19433 (source
19434 (origin
19435 (method url-fetch)
19436 ;; URI uses underscores
19437 (uri (pypi-uri "pytest_check_links" version))
19438 (sha256
19439 (base32
19440 "12x3wmrdzm6wgk0vz02hb769h68nr49q47w5q1pj95pc89hsa34v"))))
19441 (build-system python-build-system)
19442 (propagated-inputs
19443 `(("python-docutils" ,python-docutils)
19444 ("python-html5lib" ,python-html5lib)
19445 ("python-nbconvert" ,python-nbconvert)
19446 ("python-nbformat" ,python-nbformat)
19447 ("python-pytest" ,python-pytest)
19448 ("python-six" ,python-six)))
19449 (native-inputs
19450 `(("python-pbr-minimal" ,python-pbr-minimal)))
19451 (home-page "https://github.com/minrk/pytest-check-links")
19452 (synopsis "Check links in files")
19453 (description "This package provides a pytest plugin that checks URLs for
19454 HTML-containing files.")
19455 (license license:bsd-3)))
19456
19457 (define-public python-json5
19458 (package
19459 (name "python-json5")
19460 (version "0.8.5")
19461 (source
19462 (origin
19463 ;; sample.json5 is missing from PyPi source tarball
19464 (method git-fetch)
19465 (uri (git-reference
19466 (url "https://github.com/dpranke/pyjson5.git")
19467 (commit (string-append "v" version))))
19468 (file-name (git-file-name name version))
19469 (sha256
19470 (base32 "0nyngj18jlkgvm1177lc3cj47wm4yh3dqigygvcvw7xkyryafsqn"))))
19471 (build-system python-build-system)
19472 (home-page "https://github.com/dpranke/pyjson5")
19473 (synopsis
19474 "Python implementation of the JSON5 data format")
19475 (description
19476 "JSON5 extends the JSON data interchange format to make it slightly more
19477 usable as a configuration language. This Python package implements parsing and
19478 dumping of JSON5 data structures.")
19479 (license license:asl2.0)))
19480
19481 (define-public python-frozendict
19482 (package
19483 (name "python-frozendict")
19484 (version "1.2")
19485 (source
19486 (origin
19487 (method url-fetch)
19488 (uri (pypi-uri "frozendict" version))
19489 (sha256
19490 (base32 "0ibf1wipidz57giy53dh7mh68f2hz38x8f4wdq88mvxj5pr7jhbp"))))
19491 (build-system python-build-system)
19492 (home-page "https://github.com/slezica/python-frozendict")
19493 (synopsis "Simple immutable mapping for Python")
19494 (description
19495 "@dfn{frozendict} is an immutable wrapper around dictionaries that
19496 implements the complete mapping interface. It can be used as a drop-in
19497 replacement for dictionaries where immutability is desired.")
19498 (license license:expat)))
19499
19500 (define-public python-unpaddedbase64
19501 (package
19502 (name "python-unpaddedbase64")
19503 (version "1.1.0")
19504 (source
19505 (origin
19506 (method git-fetch)
19507 (uri (git-reference
19508 (url "https://github.com/matrix-org/python-unpaddedbase64.git")
19509 (commit (string-append "v" version))))
19510 (file-name (git-file-name name version))
19511 (sha256
19512 (base32
19513 "0if3fjfxga0bwdq47v77fs9hrcqpmwdxry2i2a7pdqsp95258nxd"))))
19514 (build-system python-build-system)
19515 (home-page "https://pypi.org/project/unpaddedbase64/")
19516 (synopsis "Encode and decode Base64 without “=” padding")
19517 (description
19518 "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
19519 using “=” characters. However this conveys no benefit so many protocols
19520 choose to use Base64 without the “=” padding.")
19521 (license license:asl2.0)))
19522
19523 (define-public python-py-cpuinfo
19524 (package
19525 (name "python-py-cpuinfo")
19526 (version "5.0.0")
19527 (source
19528 (origin
19529 (method url-fetch)
19530 (uri (pypi-uri "py-cpuinfo" version))
19531 (sha256
19532 (base32
19533 "0045y6832gqjg63jmw0qj2jwyypgjwr7sfdq3lfv49b6fxpl5xic"))))
19534 (build-system python-build-system)
19535 (home-page "https://github.com/workhorsy/py-cpuinfo")
19536 (synopsis "Get CPU info with Python")
19537 (description
19538 "This Python module returns the CPU info by using the best sources of
19539 information for your operating system.")
19540 (license license:expat)))
19541
19542 (define-public python-canonicaljson
19543 (package
19544 (name "python-canonicaljson")
19545 (version "1.1.4")
19546 (source
19547 (origin
19548 (method url-fetch)
19549 (uri (pypi-uri "canonicaljson" version))
19550 (sha256
19551 (base32 "09cpacc8yvcc74i63pdmlfaahh77dnvbyw9zf29wml2zzwqfbg25"))))
19552 (build-system python-build-system)
19553 (propagated-inputs
19554 `(("python-six" ,python-six)
19555 ("python-frozendict" ,python-frozendict)
19556 ("python-simplejson" ,python-simplejson)))
19557 (home-page "https://github.com/matrix-org/python-canonicaljson")
19558 (synopsis "Canonical JSON")
19559 (description
19560 "Deterministically encode JSON.
19561
19562 @itemize
19563 @item Encodes objects and arrays as RFC 7159 JSON.
19564 @item Sorts object keys so that you get the same result each time.
19565 @item Has no insignificant whitespace to make the output as small as possible.
19566 @item Escapes only the characters that must be escaped, U+0000 to
19567 U+0019 / U+0022 / U+0056, to keep the output as small as possible.
19568 @item Uses the shortest escape sequence for each escaped character.
19569 @item Encodes the JSON as UTF-8.
19570 @item Can encode frozendict immutable dictionaries.
19571 @end itemize")
19572 (license license:asl2.0)))
19573
19574 (define-public python-signedjson
19575 (package
19576 (name "python-signedjson")
19577 (version "1.1.1")
19578 (source
19579 (origin
19580 (method url-fetch)
19581 (uri (pypi-uri "signedjson" version))
19582 (sha256
19583 (base32 "0280f8zyycsmd7iy65bs438flm7m8ffs1kcxfbvhi8hbazkqc19m"))))
19584 (build-system python-build-system)
19585 (propagated-inputs
19586 `(("python-canonicaljson" ,python-canonicaljson)
19587 ("python-importlib-metadata" ,python-importlib-metadata)
19588 ("python-pynacl" ,python-pynacl)
19589 ("python-typing-extensions" ,python-typing-extensions)
19590 ("python-unpaddedbase64" ,python-unpaddedbase64)))
19591 (native-inputs
19592 `(("python-setuptools-scm" ,python-setuptools-scm)))
19593 (home-page "https://github.com/matrix-org/python-signedjson")
19594 (synopsis "Sign JSON objects with ED25519 signatures")
19595 (description
19596 "Sign JSON objects with ED25519 signatures.
19597
19598 @itemize
19599 @item More than one entity can sign the same object.
19600 @item Each entity can sign the object with more than one key making it easier to
19601 rotate keys
19602 @item ED25519 can be replaced with a different algorithm.
19603 @item Unprotected data can be added to the object under the @dfn{\"unsigned\"}
19604 key.
19605 @end itemize")
19606 (license license:asl2.0)))
19607
19608 (define-public python-daemonize
19609 (package
19610 (name "python-daemonize")
19611 (version "2.5.0")
19612 (source
19613 (origin
19614 (method url-fetch)
19615 (uri (pypi-uri "daemonize" version))
19616 (sha256
19617 (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx"))))
19618 (build-system python-build-system)
19619 (home-page "https://github.com/thesharp/daemonize")
19620 (synopsis "Library for writing system daemons in Python")
19621 (description "Daemonize is a library for writing system daemons in Python.")
19622 (license license:expat)))
19623
19624 (define-public python-pymacaroons
19625 (package
19626 (name "python-pymacaroons")
19627 (version "0.13.0")
19628 (source
19629 (origin
19630 (method url-fetch)
19631 (uri (pypi-uri "pymacaroons" version))
19632 (sha256
19633 (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy"))))
19634 (build-system python-build-system)
19635 (propagated-inputs
19636 `(("python-six" ,python-six)
19637 ("python-pynacl" ,python-pynacl)))
19638 (home-page "https://github.com/ecordell/pymacaroons")
19639 (synopsis "Python Macaroon Library")
19640 (description
19641 "Macaroons, like cookies, are a form of bearer credential. Unlike opaque
19642 tokens, macaroons embed caveats that define specific authorization
19643 requirements for the target service, the service that issued the root macaroon
19644 and which is capable of verifying the integrity of macaroons it receives.
19645
19646 Macaroons allow for delegation and attenuation of authorization. They are
19647 simple and fast to verify, and decouple authorization policy from the
19648 enforcement of that policy.")
19649 (license license:expat)))
19650
19651 (define-public python-ldap3
19652 (package
19653 (name "python-ldap3")
19654 (version "2.7")
19655 (home-page "https://github.com/cannatag/ldap3")
19656 (source
19657 (origin
19658 (method git-fetch)
19659 (uri (git-reference (url home-page)
19660 (commit (string-append "v" version))))
19661 (file-name (git-file-name name version))
19662 (sha256
19663 (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv"))))
19664 (build-system python-build-system)
19665 (arguments
19666 '(#:tests? #f ;TODO: Tests need a real LDAP server to run
19667 #:phases (modify-phases %standard-phases
19668 (replace 'check
19669 (lambda* (#:key tests? #:allow-other-keys)
19670 (when tests?
19671 (invoke "nosetests" "-s" "test"))
19672 #t)))))
19673 (native-inputs
19674 `(("python-nose" ,python-nose)))
19675 (propagated-inputs
19676 `(("python-gssapi" ,python-gssapi)
19677 ("python-pyasn1" ,python-pyasn1)))
19678 (synopsis "Python LDAP client")
19679 (description
19680 "LDAP3 is a strictly RFC 4510 conforming LDAP V3 pure Python client
19681 library.")
19682 (license license:lgpl3+)))
19683
19684 (define-public python-boltons
19685 (package
19686 (name "python-boltons")
19687 (version "20.0.0")
19688 (source
19689 (origin
19690 (method url-fetch)
19691 (uri (pypi-uri "boltons" version))
19692 (sha256
19693 (base32
19694 "0lrr40qqj3ch8xarvyzbnbjs79pz5aywklllq53l347h1b8xnkg4"))))
19695 (build-system python-build-system)
19696 (home-page "https://github.com/mahmoud/boltons")
19697 (synopsis "Extensions to the Python standard library")
19698 (description
19699 "Boltons is a set of over 230 pure-Python utilities in the same spirit
19700 as — and yet conspicuously missing from — the standard library, including:
19701
19702 @itemize
19703 @item Atomic file saving, bolted on with fileutils
19704 @item A highly-optimized OrderedMultiDict, in dictutils
19705 @item Two types of PriorityQueue, in queueutils
19706 @item Chunked and windowed iteration, in iterutils
19707 @item Recursive data structure iteration and merging, with iterutils.remap
19708 @item Exponential backoff functionality, including jitter, through
19709 iterutils.backoff
19710 @item A full-featured TracebackInfo type, for representing stack traces, in
19711 tbutils
19712 @end itemize")
19713 (license license:bsd-3)))
19714
19715 (define-public python-eliot
19716 (package
19717 (name "python-eliot")
19718 (version "1.12.0")
19719 (source
19720 (origin
19721 (method url-fetch)
19722 (uri (pypi-uri "eliot" version))
19723 (sha256
19724 (base32 "0wabv7hk63l12881f4zw02mmj06583qsx2im0yywdjlj8f56vqdn"))))
19725 (build-system python-build-system)
19726 (arguments
19727 `(#:phases
19728 (modify-phases %standard-phases
19729 (add-after 'unpack 'remove-journald-support
19730 (lambda _
19731 (for-each delete-file
19732 '("eliot/tests/test_journald.py"
19733 "eliot/journald.py"))
19734 #t))
19735 (add-after 'remove-journald-support 'remove-eliot-prettyprint-tests
19736 ;; remove command-line tool's tests. TODO eliot-prettyprint should
19737 ;; be installed and these tests should pass.
19738 (lambda _
19739 (delete-file "eliot/tests/test_prettyprint.py")
19740 #t)))))
19741 (propagated-inputs
19742 `(("python-boltons" ,python-boltons)
19743 ("python-pyrsistent" ,python-pyrsistent)
19744 ("python-six" ,python-six)
19745 ("python-zope-interface" ,python-zope-interface)))
19746 (native-inputs
19747 `(("python-black" ,python-black)
19748 ("python-coverage" ,python-coverage)
19749 ("python-dask" ,python-dask)
19750 ("python-flake8" ,python-flake8)
19751 ("python-hypothesis" ,python-hypothesis)
19752 ("python-pytest" ,python-pytest)
19753 ("python-setuptools" ,python-setuptools)
19754 ("python-sphinx" ,python-sphinx)
19755 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
19756 ("python-testtools" ,python-testtools)
19757 ("python-twine" ,python-twine)
19758 ("python-twisted" ,python-twisted)))
19759 (home-page "https://github.com/itamarst/eliot/")
19760 (synopsis "Eliot: the logging system that tells you why it happened")
19761 (description
19762 "@dfn{eliot} is a Python logging system that outputs causal chains of
19763 actions: actions can spawn other actions, and eventually they either succeed
19764 or fail. The resulting logs tell you the story of what your software did: what
19765 happened, and what caused it.")
19766 (license license:asl2.0)))
19767
19768 (define-public python-pem
19769 (package
19770 (name "python-pem")
19771 (version "20.1.0")
19772 (source
19773 (origin
19774 (method url-fetch)
19775 (uri (pypi-uri "pem" version))
19776 (sha256
19777 (base32
19778 "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7"))))
19779 (build-system python-build-system)
19780 (native-inputs
19781 `(("python-certifi" ,python-certifi)
19782 ("python-coverage" ,python-coverage)
19783 ("python-pretend" ,python-pretend)
19784 ("python-pyopenssl" ,python-pyopenssl)
19785 ("python-pytest" ,python-pytest)
19786 ("python-sphinx" ,python-sphinx)
19787 ("python-twisted" ,python-twisted)))
19788 (home-page "https://pem.readthedocs.io/")
19789 (synopsis "Easy PEM file parsing in Python")
19790 (description
19791 "This package provides a Python module for parsing and splitting PEM files.")
19792 (license license:expat)))
19793
19794 (define-public python-txsni
19795 ;; We need a few commits on top of 0.1.9 for compatibility with newer
19796 ;; Python and OpenSSL.
19797 (let ((commit "5014c141a7acef63e20fcf6c36fa07f0cd754ce1")
19798 (revision "0"))
19799 (package
19800 (name "python-txsni")
19801 (version (git-version "0.1.9" revision commit))
19802 (home-page "https://github.com/glyph/txsni")
19803 (source
19804 (origin
19805 (method git-fetch)
19806 (uri (git-reference (url home-page) (commit commit)))
19807 (file-name (git-file-name name version))
19808 (sha256
19809 (base32
19810 "0imfxx4yjj1lbq0n5ad45al3wvv4qv96sivnc1r51i66mxi658z8"))))
19811 (build-system python-build-system)
19812 (propagated-inputs
19813 `(("python-pyopenssl" ,python-pyopenssl)
19814 ("python-service-identity" ,python-service-identity)
19815 ("python-twisted" ,python-twisted)))
19816 (synopsis "Run TLS servers with Twisted")
19817 (description
19818 "This package provides an easy-to-use SNI endpoint for use
19819 with the Twisted web framework.")
19820 (license license:expat))))
19821
19822 (define-public python-txacme
19823 (package
19824 (name "python-txacme")
19825 (version "0.9.2")
19826 (source
19827 (origin
19828 (method url-fetch)
19829 (uri (pypi-uri "txacme" version))
19830 (sha256
19831 (base32 "1cplx4llq7i508w6fgwjdv9di7rsz9k9irfmzdfbiz6q6a0ykf1d"))))
19832 (build-system python-build-system)
19833 (propagated-inputs
19834 `(("python-acme" ,python-acme)
19835 ("python-attrs" ,python-attrs)
19836 ("python-eliot" ,python-eliot)
19837 ("python-josepy" ,python-josepy)
19838 ("python-pem" ,python-pem)
19839 ("python-treq" ,python-treq)
19840 ("python-twisted" ,python-twisted)
19841 ("python-txsni" ,python-txsni)))
19842 (native-inputs
19843 `(("python-fixtures" ,python-fixtures)
19844 ("python-hypothesis" ,python-hypothesis)
19845 ("python-mock" ,python-mock)
19846 ("python-service-identity"
19847 ,python-service-identity)
19848 ("python-testrepository" ,python-testrepository)
19849 ("python-testscenarios" ,python-testscenarios)
19850 ("python-testtools" ,python-testtools)))
19851 (home-page "https://github.com/twisted/txacme")
19852 (synopsis "Twisted implexmentation of the ACME protocol")
19853 (description
19854 "ACME is Automatic Certificate Management Environment, a protocol that
19855 allows clients and certificate authorities to automate verification and
19856 certificate issuance. The ACME protocol is used by the free Let's Encrypt
19857 Certificate Authority.
19858
19859 txacme is an implementation of the protocol for Twisted, the event-driven
19860 networking engine for Python.")
19861 (license license:expat)))
19862
19863 (define-public python-pysaml2
19864 (package
19865 (name "python-pysaml2")
19866 (version "5.0.0")
19867 (source
19868 (origin
19869 (method url-fetch)
19870 (uri (pypi-uri "pysaml2" version))
19871 (sha256
19872 (base32
19873 "1h8cmxh9cvxhrdfmkh92wg6zpxmhi2fixq1cy4hxismmaar7bsny"))))
19874 (build-system python-build-system)
19875 (propagated-inputs
19876 `(("python-cryptography" ,python-cryptography)
19877 ("python-dateutil" ,python-dateutil)
19878 ("python-defusedxml" ,python-defusedxml)
19879 ("python-pyopenssl" ,python-pyopenssl)
19880 ("python-pytz" ,python-pytz)
19881 ("python-requests" ,python-requests)
19882 ("python-six" ,python-six)))
19883 (home-page "https://idpy.org")
19884 (synopsis "Python implementation of SAML Version 2 Standard")
19885 (description
19886 "PySAML2 is a pure python implementation of SAML Version 2 Standard.
19887 It contains all necessary pieces for building a SAML2 service provider or
19888 an identity provider. The distribution contains examples of both.
19889
19890 This package was originally written to work in a WSGI environment, but
19891 there are extensions that allow you to use it with other frameworks.")
19892 (license license:asl2.0)))
19893
19894 (define-public python-click-plugins
19895 (package
19896 (name "python-click-plugins")
19897 (version "1.1.1")
19898 (source
19899 (origin
19900 (method url-fetch)
19901 (uri (pypi-uri "click-plugins" version))
19902 (sha256
19903 (base32 "0jr6bxj67vg988vkm6nz8jj98v9lg46bn49lkhak3n598jbrkas6"))))
19904 (build-system python-build-system)
19905 (native-inputs
19906 `(("python-pytest" ,python-pytest)))
19907 (propagated-inputs
19908 `(("python-click" ,python-click)))
19909 (synopsis "Extension for Click to register external CLI commands")
19910 (description "This package provides n extension module for Click to
19911 register external CLI commands via setuptools entry-points.")
19912 (home-page "https://github.com/click-contrib/click-plugins")
19913 (license license:bsd-3)))
19914
19915 (define-public python-diceware
19916 (package
19917 (name "python-diceware")
19918 (version "0.9.6")
19919 (source
19920 (origin
19921 (method url-fetch)
19922 (uri (pypi-uri "diceware" version))
19923 (sha256
19924 (base32
19925 "0klb0ysybzlh2wihvir82hgq62v0jjmlcqklwajyms7c0p529yby"))))
19926 (build-system python-build-system)
19927 (native-inputs
19928 `(("python-coverage" ,python-coverage)
19929 ("python-pytest" ,python-pytest)
19930 ("python-pytest-runner" ,python-pytest-runner)))
19931 (home-page "https://github.com/ulif/diceware/")
19932 (synopsis "Generates memorable passphrases")
19933 (description "This package generates passphrases by concatenating words
19934 randomly picked from wordlists. It supports several sources of
19935 randomness (including real life dice) and different wordlists (including
19936 cryptographically signed ones).")
19937 (license license:gpl3+)))
19938
19939 (define-public pyzo
19940 (package
19941 (name "pyzo")
19942 (version "4.10.2")
19943 (source
19944 (origin
19945 (method url-fetch)
19946 (uri (pypi-uri "pyzo" version))
19947 (sha256
19948 (base32 "1zplxcb78qy8qibifmnsx5i9gnlfmw9n6nr4yflsabpxw57mx4m1"))))
19949 (build-system python-build-system)
19950 (arguments
19951 `(#:phases
19952 (modify-phases %standard-phases
19953 (add-before 'check 'fix-home-directory
19954 (lambda _
19955 ;; Tests fail with "Permission denied: '/homeless-shelter'".
19956 (setenv "HOME" "/tmp")
19957 #t)))
19958 ;; Tests fail with "Uncaught Python exception: invalid literal for
19959 ;; int() with base 10: 'test'".
19960 #:tests? #f))
19961 (propagated-inputs
19962 `(("python-pyqt" ,python-pyqt)))
19963 (home-page "https://pyzo.org")
19964 (synopsis
19965 "Python IDE for scientific computing")
19966 (description
19967 "Pyzo is a Python IDE focused on interactivity and introspection,
19968 which makes it very suitable for scientific computing. Its practical
19969 design is aimed at simplicity and efficiency.
19970
19971 It consists of two main components, the editor and the shell, and uses
19972 a set of pluggable tools to help the programmer in various ways. Some
19973 example tools are source structure, project manager, interactive help,
19974 workspace...")
19975 (license license:bsd-2)))
19976
19977 (define-public python-osc
19978 (package
19979 (name "python-osc")
19980 (version "1.7.4")
19981 (source
19982 (origin
19983 (method url-fetch)
19984 (uri (pypi-uri "python-osc" version))
19985 (sha256
19986 (base32
19987 "0cnh0z5lnng7fh48nmfaqqn8j25k13gkd4rhxd3m6sjqiix9s3vn"))))
19988 (build-system python-build-system)
19989 (home-page "https://github.com/attwad/python-osc")
19990 (synopsis "Open Sound Control server and client implementations")
19991 (description
19992 "@code{python-osc} is a pure Python library with no external
19993 dependencies. It implements the @uref{http://opensoundcontrol.org/spec-1_0,
19994 Open Sound Control 1.0} specification.")
19995 (license license:unlicense)))
19996
19997 (define-public python-voluptuous
19998 (package
19999 (name "python-voluptuous")
20000 (version "0.11.7")
20001 (source
20002 (origin
20003 (method url-fetch)
20004 (uri (pypi-uri "voluptuous" version))
20005 (sha256
20006 (base32
20007 "0mplkcpb5d8wjf8vk195fys4y6a3wbibiyf708imw33lphfk9g1a"))))
20008 (build-system python-build-system)
20009 (native-inputs
20010 `(("python-nose" ,python-nose)))
20011 (home-page "https://github.com/alecthomas/voluptuous")
20012 (synopsis "Python data validation library")
20013 (description
20014 "Voluptuous is a Python data validation library. It is primarily
20015 intended for validating data coming into Python as JSON, YAML, etc.")
20016 (license license:bsd-3)))
20017
20018 (define-public python-cmd2
20019 (package
20020 (name "python-cmd2")
20021 (version "1.0.2")
20022 (source
20023 (origin
20024 (method url-fetch)
20025 (uri (pypi-uri "cmd2" version))
20026 (sha256
20027 (base32
20028 "1f18plbc9yyvhn0js3d2bii9yld8zfl775gxsaw9jza5pmlg9ss2"))))
20029 (build-system python-build-system)
20030 (propagated-inputs
20031 `(("python-attrs" ,python-attrs)
20032 ("python-colorama" ,python-colorama)
20033 ("python-pyperclip" ,python-pyperclip)
20034 ("python-wcwidth" ,python-wcwidth)))
20035 (native-inputs
20036 `(("python-codecov" ,python-codecov)
20037 ("python-coverage" ,python-coverage)
20038 ("python-doc8" ,python-doc8)
20039 ("python-flake8" ,python-flake8)
20040 ("python-invoke" ,python-invoke)
20041 ("python-mock" ,python-mock)
20042 ("python-pytest" ,python-pytest)
20043 ("python-pytest-cov" ,python-pytest-cov)
20044 ("python-pytest-mock" ,python-pytest-mock)
20045 ("python-setuptools-scm" ,python-setuptools-scm)
20046 ("python-sphinx" ,python-sphinx)
20047 ("python-sphinx-autobuild" ,python-sphinx-autobuild)
20048 ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
20049 ("python-tox" ,python-tox)
20050 ("python-twine" ,python-twine)
20051 ("which" ,which)))
20052 (home-page "https://github.com/python-cmd2/cmd2")
20053 (synopsis "Tool for building interactive command line applications")
20054 (description
20055 "Cmd2 is a tool for building interactive command line applications in
20056 Python. Its goal is to make it quick and easy for developers to build
20057 feature-rich and user-friendly interactive command line applications. It
20058 provides a simple API which is an extension of Python's built-in @code{cmd}
20059 module. @code{cmd2} provides a wealth of features on top of @code{cmd} to
20060 make your life easier and eliminates much of the boilerplate code which would
20061 be necessary when using @code{cmd}.")
20062 (license license:expat)))
20063
20064 (define-public python-pytidylib
20065 (package
20066 (name "python-pytidylib")
20067 (version "0.3.2")
20068 (source (origin
20069 (method url-fetch)
20070 (uri (pypi-uri "pytidylib" version))
20071 (sha256
20072 (base32
20073 "1wqa9dv5d7swka14rnky862hc7dgk2g3dhlrz57hdn3hb7bwic92"))))
20074 (build-system python-build-system)
20075 (arguments
20076 '(#:phases
20077 (modify-phases %standard-phases
20078 (add-before 'build 'qualify-libtidy
20079 (lambda* (#:key inputs #:allow-other-keys)
20080 (let ((libtidy (string-append (assoc-ref inputs "tidy")
20081 "/lib/libtidy.so")))
20082 (substitute* "tidylib/tidy.py"
20083 (("ctypes\\.util\\.find_library\\('tidy'\\)")
20084 (format #f "'~a'" libtidy)))
20085 #t))))))
20086 (inputs `(("tidy" ,tidy)))
20087 (home-page "https://github.com/countergram/pytidylib")
20088 (synopsis "Python wrapper for HTML Tidy library")
20089 (description
20090 "PyTidyLib is a Python package that wraps the HTML Tidy library. This
20091 allows you, from Python code, to “fix” invalid (X)HTML markup.")
20092 (license license:expat)))
20093
20094 (define-public python2-pytidylib
20095 (package-with-python2 python-pytidylib))
20096
20097 (define-public python-mujson
20098 (package
20099 (name "python-mujson")
20100 (version "1.4")
20101 (source
20102 (origin
20103 (method url-fetch)
20104 (uri (pypi-uri "mujson" version))
20105 (sha256
20106 (base32
20107 "0wbj6r8yzsdx2b0kbldlkznr1a9nn33za2q9x3g0hbg420dwzn97"))))
20108 (build-system python-build-system)
20109 (home-page "https://github.com/mattgiles/mujson")
20110 (synopsis "Use the fastest JSON functions available at import time")
20111 (description "This packages selects the fastest JSON functions available
20112 at import time.")
20113 (license license:expat)))
20114
20115 (define-public python-bashlex
20116 (package
20117 (name "python-bashlex")
20118 (version "0.14")
20119 (source
20120 (origin
20121 (method url-fetch)
20122 (uri (pypi-uri "bashlex" version))
20123 (sha256
20124 (base32
20125 "1z9g96fgsfpdwawp4sb5x6hbdhmda7kgmcrqlf9xx4bs1f8f14js"))))
20126 (build-system python-build-system)
20127 (arguments
20128 `(#:phases
20129 (modify-phases %standard-phases
20130 (add-before 'build 'pregenerate-yacc-tables
20131 (lambda _
20132 ;; parser.py caches tables, which attempts to write to site lib
20133 ;; see https://github.com/idank/bashlex/issues/51
20134 (invoke "python" "-c" "import bashlex"))))))
20135 (home-page
20136 "https://github.com/idank/bashlex")
20137 (synopsis "Python parser for bash")
20138 (description "@code{bashlex} is a Python port of the parser used
20139 internally by GNU bash.
20140
20141 For the most part it's transliterated from C, the major differences are:
20142
20143 @itemize
20144 @item it does not execute anything
20145 @item it is reentrant
20146 @item it generates a complete AST
20147 @end itemize
20148 ")
20149 (license license:gpl3+)))